Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/pom.xml	(revision 46118)
@@ -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.344</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.344/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

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.impl/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.cresques.impl.CresquesCtsLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.ICRSFactory#get(java.lang.String, java.lang.String)
+     */
+    @Override
+    public IProjection get(String format, String value) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.opengis.referencing.FactoryException;
+
+import org.gvsig.fmap.crs.CRSFactory;
+
+
+/**
+ * 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() );
+	    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#export(java.lang.String)
+     */
+    @Override
+    public String export(String format) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,415 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * 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];
+    }
+
+    @Override
+    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;
+    }
+
+    /**
+     *
+     * @param eli
+     * @param name
+     * @return 
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("ME") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     * @param x
+     * @param y
+     * @return 
+     */
+    @Override
+    public Point2D createPoint(double x, double y) {
+        return new ProjPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param mPt
+     * @return
+     */
+    @Override
+    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 mPt
+     * @return
+     */
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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;
+    }
+
+    @Override
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    @Override
+	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()
+	 */
+    @Override
+	public String getFullCode() {
+		return getAbrev();
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#export(java.lang.String)
+     */
+    @Override
+    public String export(String arg0) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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() );
+     }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#export(java.lang.String)
+     */
+    @Override
+    public String export(String format) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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
+ */
+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);
+    }
+
+    @Override
+    public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    @Override
+	public String getAbrev() {
+        return abrev;
+    }
+
+    public static CCLambert getProjection(Ellipsoid eli) {
+        return new CCLambert(eli);
+    }
+
+    /**
+     *
+     * @param eli
+     * @param name
+     * @return 
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("CCL") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     * @param x
+     * @param y
+     * @return 
+     */
+    @Override
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    /**
+     *
+     * @param lPt
+     * @return
+     */
+    @Override
+    public Point2D toGeo(Point2D lPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo(lPt, gPt);
+    }
+
+    /**
+     *
+     * @param lPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(Point2D lPt, GeoPoint gPt) {
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param lPt
+     * @return
+     */
+    @Override
+    public Point2D fromGeo(Point2D gPt, Point2D lPt) {
+        return lPt;
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        grid = new Graticule(this);
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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)
+	 */
+    @Override
+	public Rectangle2D getExtent(Rectangle2D extent, double scale, double wImage, double hImage, double mapUnits, double distanceUnits, double dpi) {
+		return null;
+	}
+
+
+    /**
+     *
+     * @return
+     */    
+    @Override
+	public String getFullCode() {
+		return getAbrev();
+	}
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone(); //To change body of generated methods, choose Tools | Templates.
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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);
+    }
+
+    @Override
+    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);
+    }
+
+    /**
+     *
+     * @param eli
+     * @param name
+     * @return 
+     */
+    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);
+    }
+
+    /**
+     *
+     * @param x
+     * @param y
+     * @return 
+     */
+    @Override
+    public Point2D createPoint(double x, double y) {
+        return new UtmPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    @Override
+    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
+     */
+    @Override
+    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();
+            }
+        }
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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;
+    }
+
+    @Override
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    @Override
+	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()
+	 */
+    @Override
+	public String getFullCode() {
+		return getAbrev();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/pom.xml	(revision 46118)
@@ -0,0 +1,36 @@
+<?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.344</version>
+    </parent>
+
+    <repositories>
+      <repository>
+          <id>osgeo</id>
+          <name>Open Source Geospatial Foundation</name>
+          <!--
+          <url>http://download.osgeo.org/webdav/geotools</url>
+          -->
+          <url>https://repo.osgeo.org/repository/geotools-releases</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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.cresques.ui.CresquesCtsUILibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.tools.swing.api.Component;
+
+
+public interface ISelectCrsPanel extends Component {
+    public IProjection getProjection();
+    public void setProjection(IProjection proj);
+    public boolean isOkPressed();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/*
+ * 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 final JPanel jPanelProj = null;
+    private boolean okPressed = false;
+
+    /**
+      *
+      * @param proj
+      */
+    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() {
+
+                @Override
+                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;
+    }
+
+    @Override
+    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
+     */
+    @Override
+    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.
+     */
+    @Override
+    public IProjection getCurProj() {
+        return curProj;
+    }
+
+    /**
+     * @param curProj
+     *            The curProj to set.
+     */
+    @Override
+    public void setCurProj(IProjection curProj) {
+        this.curProj = curProj;
+    }
+
+    /**
+     * @return Returns the okPressed.
+     */
+    @Override
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/*
+ * Created on 26-ene-2005
+ */
+package org.gvsig.app.project.documents.view.info.gui;
+
+import javax.swing.JComponent;
+
+import org.cresques.cts.IProjection;
+import org.cresques.ui.cts.CSSelectionDialogPanel;
+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);
+    }
+
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques/org.gvsig.projection.cresques.ui/pom.xml	(revision 46118)
@@ -0,0 +1,36 @@
+<?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.344</version>
+  </parent>
+
+  <dependencies>
+    <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>
+      <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>
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/org.gvsig.projection.cresques
___________________________________________________________________
Added: svn:ignore
   + .settings

.project


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.projection
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/WLDFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/WLDFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/WLDFile.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.basicformats;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+public interface WLDFile extends FormatFile {
+
+    String FILE_EXTENSION = "wld";
+
+    Envelope getEnvelope(int rows, int columns);
+
+    void setValue(Envelope envelope, int rows, int columns);
+
+    /**
+     * @return the pixelSizeX
+     */
+    double getPixelSizeX();
+
+    /**
+     * @return the pixelSizeY
+     */
+    double getPixelSizeY();
+
+    /**
+     * @return the rotationAxisX
+     */
+    double getRotationAxisX();
+
+    /**
+     * @return the rotationAxisY
+     */
+    double getRotationAxisY();
+
+    /**
+     * @return the upperLeftPixelCenterCoordX
+     */
+    double getUpperLeftPixelCenterCoordX();
+
+    /**
+     * @return the upperLeftPixelCenterCoordY
+     */
+    double getUpperLeftPixelCenterCoordY();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatFile.java	(revision 46118)
@@ -0,0 +1,19 @@
+
+package org.gvsig.basicformats;
+
+import java.io.File;
+import java.io.IOException;
+
+
+public interface FormatFile {
+ 
+    public File getFile(File file);
+
+    public File getFile();
+
+    public void read(File file) throws IOException ;
+
+    public void write(File file) throws IOException ;       
+
+    public void writeQuietly(File file) throws IOException ;       
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CPGFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CPGFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CPGFile.java	(revision 46118)
@@ -0,0 +1,36 @@
+
+package org.gvsig.basicformats;
+
+public interface CPGFile extends FormatFile {
+
+    public String FILE_EXTENSION = "cpg";
+
+    public String getCharsetName();
+
+    public void setCharsetName(String charsetName);
+
+    /**
+     * Returns the code page corresponding to the
+     * provided charset name
+     *
+     * @param charsetName
+     * @return The code page, or 0x00 if no equivalent code page was found for
+     * the provided charsetName
+     */
+    public int toCPG(String charsetName);
+
+    public String toCPGName(String charsetName);
+
+    public String toCharsetName(String codePageName);
+
+    /**
+     * Gets the Java NIO charset name equivalent to the provided code page.
+     * Gets null if the provided code page is not recognised
+     * as a valid code
+     *
+     * @param codePage
+     * @return
+     */
+    public String toCharsetName(int codePage);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatsFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatsFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/FormatsFile.java	(revision 46118)
@@ -0,0 +1,99 @@
+
+package org.gvsig.basicformats;
+
+import java.io.File;
+import java.io.IOException;
+import org.gvsig.basicformats.impl.DefaultCLRFile;
+import org.gvsig.basicformats.impl.DefaultCPGFile;
+import org.gvsig.basicformats.impl.DefaultHDRFile;
+import org.gvsig.basicformats.impl.DefaultPRJFile;
+import org.gvsig.basicformats.impl.DefaultSTXFile;
+import org.gvsig.basicformats.impl.DefaultWLDFile;
+
+public class FormatsFile {
+    
+    public static CPGFile createCPGFile() {
+        return new DefaultCPGFile();
+    }
+
+    public static CPGFile getCPGFile(File file)  {
+        try {
+            DefaultCPGFile format = new DefaultCPGFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+    public static HDRFile createHDRFile() {
+        return new DefaultHDRFile();
+    }
+
+    public static HDRFile getHDRFile(File file)  {
+        try {
+            DefaultHDRFile format = new DefaultHDRFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+    public static PRJFile createPRJFile() {
+        return new DefaultPRJFile();
+    }
+
+    public static PRJFile getPRJFile(File file)  {
+        try {
+            DefaultPRJFile format = new DefaultPRJFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+    public static STXFile createSTXFile() {
+        return new DefaultSTXFile();
+    }
+
+    public static STXFile getSTXFile(File file)  {
+        try {
+            DefaultSTXFile format = new DefaultSTXFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+    public static WLDFile createWLDFile() {
+        return new DefaultWLDFile();
+    }
+
+    public static WLDFile getWLDFile(File file) {
+        try {
+            DefaultWLDFile format = new DefaultWLDFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+    public static CLRFile createCLRFile() {
+        return new DefaultCLRFile();
+    }
+
+    public static CLRFile getCLRFile(File file) {
+        try {
+            DefaultCLRFile format = new DefaultCLRFile();
+            format.read(file);
+            return format;
+        } catch (IOException ex) {
+            return null;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/PRJFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/PRJFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/PRJFile.java	(revision 46118)
@@ -0,0 +1,15 @@
+
+package org.gvsig.basicformats;
+
+import org.cresques.cts.IProjection;
+
+
+public interface PRJFile extends FormatFile {
+
+    public String FILE_EXTENSION = "prj";
+    
+    public IProjection getCRS();
+
+    public void setCRS(IProjection crs);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/HDRFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/HDRFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/HDRFile.java	(revision 46118)
@@ -0,0 +1,136 @@
+
+package org.gvsig.basicformats;
+
+import java.nio.ByteOrder;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+public interface HDRFile extends FormatFile {
+
+    public String FILE_EXTENSION = "hdr";
+    public String LAYOUT_BIL = "bil";
+    public String LAYOUT_BIP = "bip";
+    public String LAYOUT_BSQ = "bsq";
+    
+    public int NONE = -1;
+
+    public Envelope getEnvelope();
+    
+    public int getDataType();
+    
+    /**
+     * @return the bandgapbytes
+     */
+    public int getBandgapbytes();
+
+    /**
+     * @return the bandrowbytes
+     */
+    public int getBandrowbytes();
+
+    /**
+     * @return the byteorder
+     */
+    public ByteOrder getByteorder();
+
+    /**
+     * @return the comments
+     */
+    public String getComments();
+
+    /**
+     * @return the layout
+     */
+    public String getLayout();
+
+    /**
+     * @return the nbands
+     */
+    public int getNbands();
+
+    /**
+     * @return the nbits
+     */
+    public int getNbits();
+
+    /**
+     * @return the ncols
+     */
+    public int getNcols();
+
+    /**
+     * @return the nrows
+     */
+    public int getNrows();
+
+    /**
+     * @return the skipbytes
+     */
+    public int getSkipbytes();
+
+    /**
+     * @return the totalrowbytes
+     */
+    public int getTotalrowbytes();
+
+    /**
+     * @return the ulxmax
+     */
+    public double getUlxmax();
+
+    /**
+     * @return the ulymax
+     */
+    public double getUlymax();
+
+    /**
+     * @return the xdim
+     */
+    public double getXdim();
+
+    /**
+     * @return the ydim
+     */
+    public double getYdim();
+
+    /**
+     * @return the isValid
+     */
+    public boolean isValid();
+
+    /**
+     * @param comments the comments to set
+     */
+    public void setComments(String comments);
+
+    public int getBandSize();
+
+    /**
+     * @return the cellsize
+     */
+    public int getCellsize();
+
+    /**
+     * @return the nodata_value
+     */
+    public double getNodata_value();
+
+    /**
+     * @return the xllcorner
+     */
+    public double getXllcorner();
+
+    /**
+     * @return the yllcorner
+     */
+    public double getYllcorner();
+
+    public void setDataType(int dataType);
+
+    public void setDimensions(int nrows, int ncols, Envelope envelope);
+
+    public void setNBands(int nbands);
+    
+    public void setByteOrder(ByteOrder order);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/STXFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/STXFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/STXFile.java	(revision 46118)
@@ -0,0 +1,39 @@
+package org.gvsig.basicformats;
+
+import java.util.List;
+
+public interface STXFile extends FormatFile {
+
+    public interface STXBand {
+        
+        public void parse(String line);
+
+        @Override
+        public String toString();
+        
+        public int getBand();
+        
+        public double getMinimum();
+        
+        public double getMaximum();
+        
+        public double getMean();
+        
+        public double getStdDeviation();
+        
+        public double getLinearStretchMin();
+        
+        public double getLinearStretchMax();
+
+        public boolean isValid();
+    }
+    
+    public String FILE_EXTENSION = "stx";
+
+    public void addBand(int band, double minimum, double maximum, double mean, double std_deviation, double linear_stretch_min, double linear_stretch_max);
+
+    public void clear();
+
+    public List<STXBand> getBands();
+   
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CLRFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CLRFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/CLRFile.java	(revision 46118)
@@ -0,0 +1,19 @@
+/*
+ * 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.basicformats;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+
+
+public interface CLRFile extends FormatFile {
+
+    public String FILE_EXTENSION = "clr";
+    
+    ColorTable getColorTable();
+
+    void setColorTable(ColorTable colorTable);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCPGFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCPGFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCPGFile.java	(revision 46118)
@@ -0,0 +1,225 @@
+package org.gvsig.basicformats.impl;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.basicformats.CPGFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultCPGFile extends AbstractFormatFile implements CPGFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultPRJFile.class);
+
+
+    private File source;
+    private String charsetName = null;
+
+    /**
+     * Define the valid code pages (equivalent to MSDOS code pages). 
+     * This codes are used on the byte 29 of the DBF header to define the DBF
+     * codepage.
+     *
+     * The equivalences of these charsets using Java NIO charset names are
+     * defined on the {@link #charsetNames} array (so 0x01 is
+     * equivalent to IBM437, 0x02 to IBM850, etc)
+     *
+     * See some other equivalences in:
+     * https://github.com/infused/dbf/blob/master/docs/supported_encodings.csv
+     * https://github.com/olemb/dbfread/blob/master/dbfread/codepages.py
+     * https://joinup.ec.europa.eu/svn/gvsig-desktop/trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dbf/DbfEncodings.java
+     */
+    private static final short[] codePages = {
+        0x01, 0x02, 0x03, 0x04,
+        0x08, 0x09, 0x0a, 0x0b,
+        0x0d, 0x0e, 0x0f, 0x10,
+        0x11, 0x12, 0x13, 0x14,
+        0x15, 0x16, 0x17, 0x18,
+        0x19, 0x1a, 0x1b, 0x1c,
+        0x1d, 0x1f, 0x22, 0x23,
+        0x24, 0x25, 0x26, 0x37,
+        0x40, 0x4d, 0x4e, 0x4f,
+        0x50, 0x57, 0x58, 0x59,
+        0x64, 0x65, 0x66, 0x67,
+        0x68, 0x69, 0x6a, 0x6b,
+        0x6c, 0x78, 0x79, 0x7a,
+        0x7b, 0x7c, 0x7d, 0x7d,
+        0x86, 0x87, 0x88, 0xc8,
+        0xc9, 0xca, 0xcb, 0xcc};
+
+    /**
+     * Equivalent Java charset names to the code pages defined in
+     * {@link #codePages}, using Java NIO Charset names (which differ
+     * from JAVA IO names, see
+     * https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html)
+     */
+    private static final String[] charsetNames = new String[]{
+        "IBM437", "IBM850", "windows-1252", "x-MacRoman",
+        "IBM865", "IBM437", "IBM850", "IBM437",
+        "IBM437", "IBM850", "IBM437", "IBM850",
+        "IBM437", "IBM850", "x-IBM943", "IBM850",
+        "IBM437", "IBM850", "IBM865", "IBM437",
+        "IBM437", "IBM850", "IBM437", "IBM863",
+        "IBM850", "IBM852", "IBM852", "IBM852",
+        "IBM860", "IBM850", "IBM866", "IBM850",
+        "IBM852", "x-mswin-936", "x-IBM949", "IBM950",
+        "x-IBM874", "windows-1252", "windows-1252", "windows-1252",
+        "IBM852", "IBM866", "IBM865", "IBM861",
+        // 0x68 and 0x69 are unofficial "Codepage 895 Kamenicky (Czech) MS-DOS" and "Codepage 620  Mazovia (Polish) MS-DOS",
+        // but there is no Java equivalent
+        // so we use CP437 which is the closest charset for the latin characters part
+        "IBM437", "IBM437", "x-IBM737", "IBM857",
+        "IBM863", "x-IBM950", "x-IBM949", "x-mswin-936",
+        "x-IBM942", "x-IBM874", "windows-1255", "windows-1256",
+        "x-IBM737", "IBM852", "IBM857", "windows-1250",
+        "windows-1251", "windows-1254", "windows-1253", "windows-1257"};
+
+    public DefaultCPGFile() {
+        this.charsetName = null;
+        this.source = null;
+    }
+
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + "." + FILE_EXTENSION);
+        return f;
+    }
+
+    @Override
+    public File getFile() {
+        return source;
+    }
+
+    @Override
+    public String getCharsetName() {
+        return this.charsetName;
+    }
+
+    @Override
+    public void setCharsetName(String charsetName) {
+        this.charsetName = charsetName;
+    }
+
+    @Override
+    public String toCharsetName(String codePageName) {
+        if (codePageName.equals("UTF8")) {
+            return "UTF-8";
+        }
+        if (codePageName.equals("SJIS")) {
+            return "Shift_JIS";
+        }
+
+        if (StringUtils.isNumeric(codePageName)) {
+            if (codePageName.startsWith("8859") && codePageName.length() > 4) {
+                return "ISO-8859-" + codePageName.substring(4);
+            }
+            if (codePageName.startsWith("125") && codePageName.length() == 4) {
+                return "windows-" + codePageName;
+            }
+            if (codePageName.length() == 3) {
+                return "IBM-" + codePageName;
+            }
+            for (int i = 0; i < charsetNames.length; i++) {
+                if (charsetNames[i].contains(codePageName)) {
+                    return codePageName;
+                }
+            }
+        }
+        if (codePageName.equals("65001")) {
+            return "UTF-8";
+        }
+        return codePageName;
+    }
+
+    /**
+     * Gets the Java NIO charset name equivalent to the provided code page.
+     * Gets null if the provided code page is not recognised
+     * as a valid code
+     *
+     * @param codePage
+     * @return
+     */
+    @Override
+    public String toCharsetName(int codePage) {
+        if (codePage != 0) {
+            for (int i = 0; i < codePages.length; i++) {
+                if (codePages[i] == codePage) {
+                    return charsetNames[i];
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String toCPGName(String charsetName) {
+        if (charsetName.startsWith("windows-")
+                || charsetName.startsWith("ISO-8859")
+                || charsetName.startsWith("IBM-")
+                || charsetName.startsWith("x-IBM")
+                || charsetName.startsWith("x-mswin-")) {
+            return charsetName.replaceAll("[^\\d]", "");
+        }
+        if (charsetName.equals("Shift_JIS")) {
+            return "SJIS";
+        }
+        // For the rest of the charsets, we'll directly write the Java NIO Charset
+        // Probably they will only be recognized by gvSIG, but it's better than nothing
+        return charsetName;
+    }
+
+    /**
+     * Returns the code page corresponding to the
+     * provided charset name
+     *
+     * @param charsetName
+     * @return The code page, or 0x00 if no equivalent code page was found for
+     * the provided charsetName
+     */
+    @Override
+    public int toCPG(String charsetName) {
+        for (int i = 0; i < charsetNames.length; i++) {
+            if (charsetNames[i].equals(charsetName)) {
+                return codePages[i];
+            }
+        }
+        // default
+        return 0x00;
+    }
+
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                String theContents = FileUtils.readFileToString(f);
+                theContents = StringUtils.trim(theContents);
+                if (StringUtils.isNotEmpty(theContents)) {
+                    String theCharset = toCharsetName(theContents);
+                    this.charsetName = theCharset;
+                    this.source = f.getAbsoluteFile();
+                }
+            } catch (IOException e) {
+                logger.warn("Couldn't read " + FILE_EXTENSION + " file (" + f.getAbsolutePath() + ").", e);
+                throw e;
+            }
+        }
+    }
+
+    @Override
+    public void write(File file) throws IOException {
+        File f = this.getFile(file);
+        try {
+            String export = toCPGName(this.charsetName) + "\n";
+            FileUtils.writeStringToFile(f, export, "ISO-8859-1");
+            this.source = f;
+        } catch (Exception e) {
+            logger.warn("Couldn't write " + FILE_EXTENSION + " file (" + f.getAbsolutePath() + ").", e);
+            throw e;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultPRJFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultPRJFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultPRJFile.java	(revision 46118)
@@ -0,0 +1,85 @@
+
+package org.gvsig.basicformats.impl;
+
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+import org.gvsig.basicformats.PRJFile;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultPRJFile extends AbstractFormatFile implements PRJFile {
+            
+    private static final Logger logger = LoggerFactory.getLogger(DefaultPRJFile.class);
+    
+        
+    private File source;
+    private IProjection crs;
+    
+    public DefaultPRJFile() {
+        this.source = null;
+        this.crs = null;        
+    }
+
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath())+"."+FILE_EXTENSION);
+        return f;
+    }
+    
+    @Override
+    public File getFile() {
+        return source;
+    }
+    
+    @Override
+    public IProjection getCRS() {
+        return this.crs;
+    }
+    
+    @Override
+    public void setCRS(IProjection crs) {
+        this.crs = crs;
+    }
+    
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                String theContents = FileUtils.readFileToString(f);
+                if (StringUtils.isNotEmpty(theContents)){
+                    IProjection theCrs=CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, theContents);
+                    this.crs = theCrs;
+                    this.source = f.getAbsoluteFile();
+                }
+            } catch (IOException e) {
+                logger.warn("Couldn't read "+FILE_EXTENSION+" file ("+f.getAbsolutePath()+").",e);
+                throw e;
+            }
+        }
+            
+    }
+    
+    @Override
+    public void write(File file) throws IOException {
+        File f = this.getFile(file);
+        try {
+            String export = crs.export(ICRSFactory.FORMAT_WKT_ESRI);
+            if(export!=null){
+                FileUtils.writeStringToFile(f, export);
+                this.source = f;
+            }
+        } catch (Exception e) {
+            logger.warn("Couldn't write "+FILE_EXTENSION+" file ("+f.getAbsolutePath()+").",e);
+            throw e;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultHDRFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultHDRFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultHDRFile.java	(revision 46118)
@@ -0,0 +1,598 @@
+package org.gvsig.basicformats.impl;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteOrder;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.basicformats.HDRFile;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultHDRFile extends AbstractFormatFile implements HDRFile {
+
+    // http://resources.esri.com/help/9.3/arcgisdesktop/com/gp_toolref/spatial_analyst_tools/esri_ascii_raster_format.htm
+    private static final Logger logger = LoggerFactory.getLogger(DefaultHDRFile.class);
+
+    private File source;
+    private String comments;
+
+    private int nrows = NONE;
+    private int ncols = NONE;
+    private int nbands = 1;
+    private int nbits = 8;
+    private String pixeltype;
+    private String byteorder_word;
+    private ByteOrder byteorder = ByteOrder.nativeOrder();
+    private String layout = LAYOUT_BIL;
+    private int skipbytes = 0;
+    private double ulxmax = Double.NaN;
+    private double ulymax = Double.NaN;
+    private double xdim = Double.NaN;
+    private double ydim = Double.NaN;
+    private int bandrowbytes = NONE;
+    private int totalrowbytes = NONE;
+    private int bandgapbytes = 0;
+    private boolean valid = false;
+    private double nodata_value = Double.NaN;
+
+    // X coordinate of the origin (by center or lower left corner of the cell).
+    private double xllcorner = Double.NaN;
+
+    // Y coordinate of the origin (by center or lower left corner of the cell).
+    private double yllcorner = Double.NaN;
+
+    private int cellsize = NONE;
+
+    public DefaultHDRFile() {
+        this.source = null;
+    }
+
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + "." + FILE_EXTENSION);
+        return f;
+    }
+
+    @Override
+    public File getFile() {
+        return source;
+    }
+
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                List<String> lines = FileUtils.readLines(f);
+                if (lines != null) {
+                    this.source = f.getAbsoluteFile();
+                    int lineno = 1;
+                    for (String line : lines) {
+                        String[] words = StringUtils.split(line.trim().toLowerCase());
+                        try {
+                            switch (words[0]) {
+                                case "nrows":
+                                    this.nrows = Integer.parseInt(words[1]);
+                                    break;
+                                case "ncols":
+                                    this.ncols = Integer.parseInt(words[1]);
+                                    break;
+                                case "nbands":
+                                    this.nbands = Integer.parseInt(words[1]);
+                                    break;
+                                case "nbits":
+                                    this.nbits = Integer.parseInt(words[1]);
+                                    break;
+                                case "pixeltype":
+                                    this.pixeltype = words[1];
+                                    break;
+                                case "byteorder":
+                                    this.byteorder_word = words[1];
+                                    break;
+                                case "layout":
+                                    this.layout = words[1];
+                                    break;
+                                case "skipbytes":
+                                    this.skipbytes = Integer.parseInt(words[1]);
+                                    break;
+                                case "nodata_value":
+                                    this.nodata_value = Double.parseDouble(words[1]);
+                                    break;
+                                case "cellsize":
+                                    this.cellsize = Integer.parseInt(words[1]);
+                                    break;
+                                case "xllcorner":
+                                case "xllcenter":
+                                    this.xllcorner = Double.parseDouble(words[1]);
+                                    break;
+                                case "yllcorner":
+                                case "yllcenter":
+                                    this.yllcorner = Double.parseDouble(words[1]);
+                                    break;
+                                case "ulxmax":
+                                    this.ulxmax = Double.parseDouble(words[1]);
+                                    break;
+                                case "ulymax":
+                                    this.ulymax = Double.parseDouble(words[1]);
+                                    break;
+                                case "xdim":
+                                    this.xdim = Double.parseDouble(words[1]);
+                                    break;
+                                case "ydim":
+                                    this.ydim = Double.parseDouble(words[1]);
+                                    break;
+                                case "bandrowbytes":
+                                    this.bandrowbytes = Integer.parseInt(words[1]);
+                                    break;
+                                case "totalrowbytes":
+                                    this.totalrowbytes = Integer.parseInt(words[1]);
+                                    break;
+                                case "bandgapbytes":
+                                    this.bandgapbytes = Integer.parseInt(words[1]);
+                                    break;
+                            }
+                        } catch (NumberFormatException e) {
+                            logger.warn("Can't parse keyword '" + words[0]
+                                    + "' (value='" + words[1]
+                                    + "', lineno=+" + lineno
+                                    + ", file=" + f.getAbsoluteFile()
+                                    + ").", e);
+                        }
+                        lineno++;
+                    }
+                    this.fixValues();
+                }
+
+            } catch (IOException e) {
+                logger.warn("Couldn't read " + FILE_EXTENSION + " file (" + f.getAbsoluteFile() + ")", e);
+                throw e;
+            } catch (Exception e) {
+                String msg = "Couldn't read " + FILE_EXTENSION + " file (" + f.getAbsoluteFile() + ")";
+                logger.warn(msg, e);
+                throw new IOException(msg, e);
+            }
+        }
+    }
+
+    private void fixValues() {
+        @SuppressWarnings("LocalVariableHidesMemberVariable")
+        boolean valid = true;
+
+        if (this.pixeltype != null) {
+            switch (this.pixeltype) {
+                case "signedint":
+                    this.nbits = 32;
+                    break;
+                case "byte_unsigned":
+                    this.nbits = 8;
+                    break;
+            }
+        }
+
+        switch (this.getNbits()) {
+            case 1:
+            case 4:
+                logger.warn("nbits keyword has a non supported value of " + this.getNbits() + " (" + this.source.getAbsolutePath() + ").");
+                valid = false;
+                break;
+            case 8:
+            case 16:
+            case 32:
+            case 64:
+                break;
+            default:
+                logger.warn("nbits keyword has an invalid value of " + this.getNbits() + " (" + this.source.getAbsolutePath() + ").");
+                this.nbits = 1;
+                valid = false;
+                break;
+        }
+
+        switch (this.getLayout()) {
+            case LAYOUT_BIL:
+            case LAYOUT_BIP:
+            case LAYOUT_BSQ:
+                break;
+            default:
+                logger.warn("layout keyword has an invalid value of '" + this.getLayout() + "' (" + this.source.getAbsolutePath() + ").");
+                this.layout = LAYOUT_BIL;
+                valid = false;
+                break;
+        }
+
+        if( StringUtils.isEmpty(this.byteorder_word) ) {
+            this.byteorder = ByteOrder.nativeOrder();
+            if( this.byteorder == ByteOrder.BIG_ENDIAN ) {
+                this.byteorder_word = "msbfirst";
+            } else {
+                this.byteorder_word = "lsbfirst";
+            }
+        } else {
+            switch(this.byteorder_word) {
+                case "lsbfirst":
+                case "little_endian":
+                case "littleendian":
+                case "intel":
+                case "i":
+                    this.byteorder = ByteOrder.LITTLE_ENDIAN;
+                    break;
+                case "motorola":
+                case "m":
+                case "msbfirst":
+                case "big_endian":
+                case "bigendian":
+                    this.byteorder = ByteOrder.BIG_ENDIAN;
+                    break;
+                default:
+                    logger.warn("byteorder keyword has an invalid value of '" + this.byteorder_word + "' (" + this.source.getAbsolutePath() + ").");
+                    this.byteorder = ByteOrder.nativeOrder();
+            }
+        }
+        if (this.getNrows() == NONE || this.getNcols() == NONE) {
+            logger.warn("nrows/ncols keywords has an invalid value of '" + this.getNrows() + "/" + this.getNcols() + "' (" + this.source.getAbsolutePath() + ").");
+            valid = false;
+        }
+        if (this.getUlymax() == NONE) {
+            this.ulymax = this.getNrows() - 1;
+        }
+        if (this.getBandrowbytes() == NONE) {
+            this.bandrowbytes = (this.getNcols() * this.getNbits()) / 8;
+        }
+        switch (this.getLayout()) {
+            case LAYOUT_BIL:
+                if (this.getTotalrowbytes() == NONE) {
+                    this.totalrowbytes = this.getNbands() * this.getBandrowbytes();
+                }
+                this.bandgapbytes = 0;
+                break;
+            case LAYOUT_BIP:
+                if (this.getTotalrowbytes() == NONE) {
+                    this.totalrowbytes = (this.getNcols() * this.getNbands() * this.getNbits()) / 8;
+                }
+                this.bandgapbytes = 0;
+                break;
+            case LAYOUT_BSQ:
+                if (this.getTotalrowbytes() == NONE) {
+                    this.totalrowbytes = 0;
+                }
+                if (this.getBandgapbytes() == NONE) {
+                    this.bandgapbytes = 0;
+                }
+                break;
+        }
+        this.valid = valid;
+    }
+
+    @Override
+    public int getDataType() {
+        if (this.pixeltype != null) {
+            switch (this.pixeltype) {
+                case "signedint":
+                    return BufferManager.TYPE_INT;
+                case "byte_unsigned":
+                    return BufferManager.TYPE_BYTE;
+            }
+        }
+        switch (this.getNbits()) {
+            case 1:
+            case 4:
+            default:
+                return BufferManager.TYPE_UNDEFINED;
+            case 8:
+                return BufferManager.TYPE_BYTE;
+            case 16:
+                return BufferManager.TYPE_USHORT;
+            case 32:
+                return BufferManager.TYPE_INT;
+            case 64:
+                return BufferManager.TYPE_DOUBLE;
+        }
+    }
+
+    @Override
+    public void write(File file) throws IOException {
+        File f = this.getFile(file);
+        StringBuilder builder = new StringBuilder();
+        builder.append("; ").append(this.comments).append("\n");
+        builder.append("nrows ").append(this.nrows).append("\n");
+        builder.append("ncols ").append(this.ncols).append("\n");
+        builder.append("nbands ").append(this.nbands).append("\n");
+        builder.append("nbits ").append(this.nbits).append("\n");
+        builder.append("layout ").append(LAYOUT_BSQ).append("\n");
+        builder.append("byteorder ").append(this.byteorder_word).append("\n");
+        builder.append("ulxmax ").append(this.ulxmax).append("\n");
+        builder.append("ulymax ").append(this.ulymax).append("\n");
+        builder.append("ydim ").append(this.ydim).append("\n");
+        builder.append("xdim ").append(this.xdim).append("\n");
+        
+        FileUtils.write(file, builder.toString());
+    }
+    
+    @Override
+    public void setByteOrder(ByteOrder order) {
+        this.byteorder = order;
+        if( order == ByteOrder.BIG_ENDIAN ) {
+            this.byteorder_word = "msbfirst";
+        } else {
+            this.byteorder_word = "lsbfirst";
+        }
+    }
+    
+    @Override
+    public void setNBands(int nbands) {
+        this.nbands = nbands;
+    }
+    
+    @Override
+    public void setDataType(int dataType) {
+        switch(dataType) {
+            case BufferManager.TYPE_BYTE:
+                this.nbits = 8;
+                break;
+            case BufferManager.TYPE_USHORT:
+                this.nbits = 16;
+                break;
+            case BufferManager.TYPE_INT:
+                this.nbits = 32;
+                break;
+            case BufferManager.TYPE_DOUBLE:
+                this.nbits = 64;
+                break;
+            default:
+                throw new IllegalArgumentException("The data type "+dataType +" is not supported");
+        }
+        
+    }
+    
+    @Override
+    public void setDimensions(int nrows, int ncols, Envelope envelope) {
+        this.ncols = ncols;
+        this.nrows = nrows;
+
+        Point min = envelope.getLowerCorner();
+        Point max = envelope.getUpperCorner();
+        
+        this.ulxmax = min.getX();
+        this.ulymax = max.getY();
+        this.ydim = (min.getY() - max.getY()) / this.nrows;
+        this.xdim = (max.getX() - min.getX()) / this.ncols;
+    }
+    
+    @Override
+    public Envelope getEnvelope() {
+        Envelope envelope = null;
+        try {
+            if (!Double.isNaN(this.xllcorner)
+                    && !Double.isNaN(this.yllcorner)
+                    && this.cellsize > 0) {
+                envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                        this.xllcorner,
+                        this.yllcorner,
+                        this.xllcorner + (this.ncols * this.cellsize),
+                        this.yllcorner + (this.nrows * this.cellsize),
+                        Geometry.SUBTYPES.GEOM2D);
+            }
+            if (envelope == null && !Double.isNaN(this.ulxmax)
+                    && !Double.isNaN(this.ulymax)
+                    && !Double.isNaN(this.xdim)
+                    && !Double.isNaN(this.ydim)) {
+                envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                        this.ulxmax,
+                        this.ulymax - (this.nrows * this.ydim),
+                        this.ulxmax + (this.ncols * this.xdim),
+                        this.ulymax,
+                        Geometry.SUBTYPES.GEOM2D);
+            }
+            if (envelope == null && !Double.isNaN(this.xdim)
+                    && !Double.isNaN(this.ydim)) {
+                envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                        0,
+                        0,
+                        this.ncols * this.xdim,
+                        this.nrows * this.ydim,
+                        Geometry.SUBTYPES.GEOM2D);
+            }
+            if (envelope == null && this.cellsize > 0) {
+                envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                        0,
+                        0,
+                        this.ncols * this.cellsize,
+                        this.nrows * this.cellsize,
+                        Geometry.SUBTYPES.GEOM2D);
+            }
+            if (envelope == null) {
+                envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                        0,
+                        0,
+                        this.ncols,
+                        this.nrows,
+                        Geometry.SUBTYPES.GEOM2D);
+            }
+        } catch (Exception ex) {
+            logger.debug("Can't calculate envelope.", ex);
+        }
+        return envelope;
+    }
+
+    /**
+     * @return the nrows
+     */
+    @Override
+    public int getNrows() {
+        return nrows;
+    }
+
+    /**
+     * @return the ncols
+     */
+    @Override
+    public int getNcols() {
+        return ncols;
+    }
+
+    /**
+     * @return the nbands
+     */
+    @Override
+    public int getNbands() {
+        return nbands;
+    }
+
+    /**
+     * @return the nbits
+     */
+    @Override
+    public int getNbits() {
+        return nbits;
+    }
+
+    /**
+     * @return the byteorder
+     */
+    @Override
+    public ByteOrder getByteorder() {
+        return byteorder;
+    }
+
+    /**
+     * @return the layout
+     */
+    @Override
+    public String getLayout() {
+        return layout;
+    }
+
+    /**
+     * @return the skipbytes
+     */
+    @Override
+    public int getSkipbytes() {
+        return skipbytes;
+    }
+
+    /**
+     * @return the ulxmax
+     */
+    @Override
+    public double getUlxmax() {
+        return ulxmax;
+    }
+
+    /**
+     * @return the ulymax
+     */
+    @Override
+    public double getUlymax() {
+        return ulymax;
+    }
+
+    /**
+     * @return the xdim
+     */
+    @Override
+    public double getXdim() {
+        return xdim;
+    }
+
+    /**
+     * @return the ydim
+     */
+    @Override
+    public double getYdim() {
+        return ydim;
+    }
+
+    /**
+     * @return the bandrowbytes
+     */
+    @Override
+    public int getBandrowbytes() {
+        return bandrowbytes;
+    }
+
+    /**
+     * @return the totalrowbytes
+     */
+    @Override
+    public int getTotalrowbytes() {
+        return totalrowbytes;
+    }
+
+    /**
+     * @return the bandgapbytes
+     */
+    @Override
+    public int getBandgapbytes() {
+        return bandgapbytes;
+    }
+
+    /**
+     * @return the isValid
+     */
+    @Override
+    public boolean isValid() {
+        return valid;
+    }
+
+    /**
+     * @return the comments
+     */
+    @Override
+    public String getComments() {
+        return comments;
+    }
+
+    /**
+     * @param comments the comments to set
+     */
+    @Override
+    public void setComments(String comments) {
+        this.comments = comments;
+    }
+
+    /**
+     * @return the nodata_value
+     */
+    @Override
+    public double getNodata_value() {
+        return nodata_value;
+    }
+
+    /**
+     * @return the xllcorner
+     */
+    @Override
+    public double getXllcorner() {
+        return xllcorner;
+    }
+
+    /**
+     * @return the yllcorner
+     */
+    @Override
+    public double getYllcorner() {
+        return yllcorner;
+    }
+
+    /**
+     * @return the cellsize
+     */
+    @Override
+    public int getCellsize() {
+        return cellsize;
+    }
+
+    @Override
+    public int getBandSize() {
+        return (this.nrows * this.ncols * this.nbits) + this.bandgapbytes;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultSTXFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultSTXFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultSTXFile.java	(revision 46118)
@@ -0,0 +1,250 @@
+
+package org.gvsig.basicformats.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.basicformats.STXFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultSTXFile extends AbstractFormatFile implements STXFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultSTXFile.class);
+
+
+    private File source;
+    private List<STXBand> bands;
+
+    public static class DefaultSTXBand implements STXBand {
+
+        private int band;
+        private double minimum;
+        private double maximum;
+        private double mean; // Optional
+        private double std_deviation; // Optional
+        private double linear_stretch_min; // Optional
+        private double linear_stretch_max; // Optional
+
+        private boolean valid = false;
+
+        public DefaultSTXBand() {
+
+        }
+
+        public DefaultSTXBand(
+            int band,
+            double minimum,
+            double maximum,
+            double mean,
+            double std_deviation,
+            double linear_stretch_min,
+            double linear_stretch_max
+            ) {
+            this();
+            this.band = band;
+            this.minimum = minimum;
+            this.maximum = maximum;
+            this.mean = mean;
+            this.std_deviation = std_deviation;
+            this.linear_stretch_min = linear_stretch_min;
+            this.linear_stretch_max = linear_stretch_max;
+        }
+
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public DefaultSTXBand(String line) {
+            this();
+            this.parse(line);
+        }
+
+        @Override
+        public void parse(String line) {
+            valid = false;
+            String[] words = StringUtils.split(line.trim().toLowerCase());
+            if( words.length < 7 ) {
+                throw new IllegalArgumentException("At least 7 parameters are needed ("+line+").");
+            }
+            this.band = Integer.parseInt(words[0]);
+            this.minimum = Double.parseDouble(words[1]);
+            this.maximum = Double.parseDouble(words[2]);
+            if( "#".equals(words[3]) ) {
+                this.mean = Double.NaN;
+            } else {
+                this.mean = Double.parseDouble(words[3]);
+            }
+            if( "#".equals(words[4]) ) {
+                this.std_deviation = Double.NaN;
+            } else {
+                this.std_deviation = Double.parseDouble(words[4]);
+            }
+            if( "#".equals(words[5]) ) {
+                this.linear_stretch_min = Double.NaN;
+            } else {
+                this.linear_stretch_min = Double.parseDouble(words[5]);
+            }
+            if( "#".equals(words[6]) ) {
+                this.linear_stretch_max = Double.NaN;
+            } else {
+                this.linear_stretch_max = Double.parseDouble(words[6]);
+            }
+            valid = true;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append(this.band).append(" ");
+            builder.append(this.minimum).append(" ");
+            builder.append(this.maximum).append(" ");
+            if( Double.isNaN(this.mean) ) {
+                builder.append("# ");
+            } else {
+                builder.append(this.mean).append(" ");
+            }
+            if( Double.isNaN(this.std_deviation) ) {
+                builder.append("# ");
+            } else {
+                builder.append(this.std_deviation).append(" ");
+            }
+            if( Double.isNaN(this.linear_stretch_min) ) {
+                builder.append("# ");
+            } else {
+                builder.append(this.linear_stretch_min).append(" ");
+            }
+            if( Double.isNaN(this.linear_stretch_max) ) {
+                builder.append("# ");
+            } else {
+                builder.append(this.linear_stretch_max).append(" ");
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public int getBand() {
+            return band;
+        }
+
+        @Override
+        public double getMinimum() {
+            return minimum;
+        }
+
+        @Override
+        public double getMaximum() {
+            return maximum;
+        }
+
+        @Override
+        public double getMean() {
+            return mean;
+        }
+
+        @Override
+        public double getStdDeviation() {
+            return std_deviation;
+        }
+
+        @Override
+        public double getLinearStretchMin() {
+            return linear_stretch_min;
+        }
+
+        @Override
+        public double getLinearStretchMax() {
+            return linear_stretch_max;
+        }
+
+        @Override
+        public boolean isValid() {
+            return valid;
+        }
+    }
+
+   public DefaultSTXFile() {
+        this.source = null;
+        this.bands = new ArrayList<>();
+    }
+
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath())+"."+FILE_EXTENSION);
+        return f;
+    }
+
+    @Override
+    public File getFile() {
+        return source;
+    }
+
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                this.bands = new ArrayList<>();
+                List<String> lines = FileUtils.readLines(f);
+                if (lines != null) {
+                    this.source = f.getAbsoluteFile();
+                    int lineno = 1;
+                    for (String line : lines) {
+                        try {
+                            DefaultSTXBand band = new DefaultSTXBand(line.trim());
+                            this.bands.add(band);
+                        } catch(IllegalArgumentException e) {
+                            logger.warn("Can't parse line '" + line
+                                    + "' (lineno=+" + lineno
+                                    + ", file=" + f.getAbsoluteFile()
+                                    + ").", e);
+
+                        }
+                    }
+                }
+                this.bands = Collections.unmodifiableList(this.bands);
+            } catch (IOException e) {
+                logger.warn("Couldn't read "+FILE_EXTENSION+" file (" + f.getAbsoluteFile() + ")", e);
+                throw e;
+            }
+        }
+    }
+
+    @Override
+    public List<STXBand> getBands() {
+        return this.bands;
+    }
+
+    @Override
+    public void clear() {
+        this.bands = new ArrayList<>();
+    }
+
+    @Override
+    public void addBand(
+            int band,
+            double minimum,
+            double maximum,
+            double mean,
+            double std_deviation,
+            double linear_stretch_min,
+            double linear_stretch_max
+        ) {
+        DefaultSTXBand b = new DefaultSTXBand(band, minimum, maximum, mean, std_deviation, linear_stretch_min, linear_stretch_max);
+        this.bands.add(b);
+    }
+
+    @Override
+    public void write(File file) throws IOException {
+        File f = this.getFile(file);
+        List<String> lines = new ArrayList<>();
+        for (STXBand band : this.bands) {
+            lines.add(band.toString());
+        }
+        FileUtils.writeLines(f, lines);
+        this.source = f;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCLRFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCLRFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultCLRFile.java	(revision 46118)
@@ -0,0 +1,111 @@
+package org.gvsig.basicformats.impl;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.basicformats.CLRFile;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultCLRFile extends AbstractFormatFile implements CLRFile {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultCLRFile.class);
+
+    private File source;
+    private ColorTable colorTable;
+
+    public DefaultCLRFile() {
+        this.source = null;
+        this.colorTable = null;
+    }
+
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + "." + FILE_EXTENSION);
+        return f;
+    }
+
+    @Override
+    public File getFile() {
+        return source;
+    }
+
+    @Override
+    public ColorTable getColorTable() {
+        return this.colorTable;
+    }
+
+    @Override
+    public void setColorTable(ColorTable colorTable) {
+        this.colorTable = colorTable;
+    }
+
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+                List<ColorTableClass> colors = new ArrayList<>();
+                List<String> lines = FileUtils.readLines(f);
+                if (lines != null) {
+                    this.source = f.getAbsoluteFile();
+                    int lineno = 1;
+                    double interpolation = 50.0;
+                    for (String line : lines) {
+                        line = line.trim();
+                        if (!Character.isDigit(line.charAt(0))) {
+                            continue;
+                        }
+                        try {
+                            String[] words = StringUtils.split(line);
+                            if (words.length < 4) {
+                                continue;
+                            }
+                            int value = Integer.parseInt(words[0]);
+                            int r = Integer.parseInt(words[1]);
+                            int g = Integer.parseInt(words[2]);
+                            int b = Integer.parseInt(words[3]);
+                            Color color = new Color(r, g, b);
+
+                            ColorTableClass colorTableClass = legendManager.createColorTableClass(
+                                    String.valueOf(value), value, interpolation, color);
+
+                            colors.add(colorTableClass);
+                        } catch (Exception e) {
+                            logger.warn("Can't parse line '" + line
+                                    + "' (lineno=+" + lineno
+                                    + ", file=" + f.getAbsoluteFile()
+                                    + ").", e);
+
+                        }
+                    }
+                }
+                if( !colors.isEmpty() ) {
+                    String colorTableName = FilenameUtils.getBaseName(f.getName());
+                    this.colorTable = legendManager.createColorTable(colorTableName, colors, true);
+                }
+            } catch (IOException e) {
+                logger.warn("Couldn't read " + FILE_EXTENSION + " file (" + f.getAbsoluteFile() + ")", e);
+                throw e;
+            }
+        }
+
+    }
+
+    @Override
+    public void write(File file) throws IOException {
+        File f = this.getFile(file);
+        // TODO: falta implementar guardar la CLR
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultWLDFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultWLDFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/DefaultWLDFile.java	(revision 46118)
@@ -0,0 +1,186 @@
+package org.gvsig.basicformats.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.basicformats.WLDFile;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultWLDFile extends AbstractFormatFile implements WLDFile {
+    
+    private static final Logger logger = LoggerFactory.getLogger(DefaultWLDFile.class);
+    
+        
+    private File source;
+    
+    private double pixelSizeX;
+    private double rotationAxisY;
+    private double rotationAxisX;
+    private double pixelSizeY;
+    private double upperLeftPixelCenterCoordX;
+    private double upperLeftPixelCenterCoordY;
+
+    public DefaultWLDFile() {
+        this.source = null;
+    }
+    
+    @Override
+    public File getFile(File file) {
+        File f = new File(FilenameUtils.removeExtension(file.getAbsolutePath())+"."+FILE_EXTENSION);
+        return f;
+    }
+    
+    @Override
+    public File getFile() {
+        return source;
+    }
+
+    @Override
+    public void read(File file) throws IOException {
+        File f = this.getFile(file);
+        if (f.exists()) {
+            try {
+                List<String> lines = FileUtils.readLines(f);
+                if (lines!=null ) {
+                    this.source = f.getAbsoluteFile();
+                    int lineno = 0;
+                    for (String line : lines) {
+                        line = line.trim();
+                        char ch = line.charAt(0);
+                        if( lineno>5 || Character.isLetter(ch) || ch==';' || ch=='#' ) {
+                            continue;
+                        }
+                        try {
+                            double value = Double.parseDouble(line);
+                            switch(lineno) {
+                                case 0:
+                                    this.pixelSizeX=value;
+                                    break;
+                                case 1:
+                                    this.rotationAxisY = value;
+                                    break;
+                                case 2:
+                                    this.rotationAxisX = value;
+                                    break;
+                                case 3:
+                                    this.pixelSizeY = value;
+                                    break;
+                                case 4:
+                                    this.upperLeftPixelCenterCoordX = value;
+                                    break;
+                                case 5:
+                                    this.upperLeftPixelCenterCoordY = value;
+                                    break;
+                            }
+                            lineno++;
+                        } catch(NumberFormatException e) {
+                            
+                        }
+                    }
+                }
+
+            } catch (IOException e) {
+                logger.warn("Couldn't read "+FILE_EXTENSION+" file ("+f.getAbsolutePath()+").",e);
+                throw e;
+            }
+        }
+    }
+
+    @Override
+    public Envelope getEnvelope(int rows, int columns) {
+        Envelope envelope = null;
+        if (0.0 != getRotationAxisX() || 0.0 != getRotationAxisY()) {
+            logger.warn("Rotation in wld file not implemented yet. It will be ignored");
+        }
+
+        double leftMostX = 0;
+        double upperMostY = 0;
+        double height = 0;
+        double width = 0;
+        try {
+            leftMostX = getUpperLeftPixelCenterCoordX() - (getPixelSizeX() * 0.5);
+            upperMostY = getUpperLeftPixelCenterCoordY() - (getPixelSizeY() * 0.5);
+            height=rows*getPixelSizeY();
+            width=columns*getPixelSizeX();
+
+            envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                Math.min(leftMostX,leftMostX + width),
+                Math.min(upperMostY,upperMostY + height),
+                Math.max(leftMostX,leftMostX + width),
+                Math.max(upperMostY,upperMostY + height),
+                Geometry.SUBTYPES.GEOM2D);
+        } catch (Exception e) {
+            logger.warn(
+                "Failed to create envelope from wld file with coords: minx:"+leftMostX+
+                ", miny:"+upperMostY+", maxX: "+leftMostX + width+", maxY: "+upperMostY + height, e);
+        }
+        return envelope;        
+    }
+    
+    @Override
+    public void write(File file) {
+        // TODO: Falta implementar el write del WLDFile
+        File f = this.getFile(file);
+
+    }
+    
+    @Override
+    public void setValue(Envelope envelope, int rows, int columns) {
+        // TODO: Falta implementar el setValue del WLDFile
+    }
+
+    /**
+     * @return the pixelSizeX
+     */
+    @Override
+    public double getPixelSizeX() {
+        return pixelSizeX;
+    }
+
+    /**
+     * @return the rotationAxisY
+     */
+    @Override
+    public double getRotationAxisY() {
+        return rotationAxisY;
+    }
+
+    /**
+     * @return the rotationAxisX
+     */
+    @Override
+    public double getRotationAxisX() {
+        return rotationAxisX;
+    }
+
+    /**
+     * @return the pixelSizeY
+     */
+    @Override
+    public double getPixelSizeY() {
+        return pixelSizeY;
+    }
+
+    /**
+     * @return the upperLeftPixelCenterCoordX
+     */
+    @Override
+    public double getUpperLeftPixelCenterCoordX() {
+        return upperLeftPixelCenterCoordX;
+    }
+
+    /**
+     * @return the upperLeftPixelCenterCoordY
+     */
+    @Override
+    public double getUpperLeftPixelCenterCoordY() {
+        return upperLeftPixelCenterCoordY;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/AbstractFormatFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/AbstractFormatFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/src/main/java/org/gvsig/basicformats/impl/AbstractFormatFile.java	(revision 46118)
@@ -0,0 +1,26 @@
+/*
+ * 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.basicformats.impl;
+
+import java.io.File;
+import java.io.IOException;
+import org.gvsig.basicformats.FormatFile;
+
+/**
+ *
+ * @author fdiaz
+ */
+public abstract class AbstractFormatFile implements FormatFile {
+
+    @Override
+    public void writeQuietly(File file) throws IOException {
+        try {
+            write(file);
+        } catch (Exception e) {
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats/pom.xml	(revision 46118)
@@ -0,0 +1,50 @@
+<?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.basicformats</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description />
+
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.compat.cdc</artifactId>
+        <version>2.0.344</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>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.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.raster.lib.buffer.api</artifactId>
+            <scope>compile</scope>  
+        </dependency>
+    </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.basicformats
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.GeometryLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+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 e
+	 */
+	public GeometryOperationException(int geometryType, int operationCode, Exception e) {
+		super(FORMAT_STRING, e, MESSAGE_KEY, serialVersionUID);
+
+		this.geometryType = geometryType;
+		this.operationCode = operationCode;
+	}
+
+        @Override
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLibrary.java	(revision 46118)
@@ -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.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 {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(GeometryLibrary.class);
+        require(ToolsLibrary.class);
+        require(ProjectionLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+        dataTypesManager.addtype(DataTypes.GEOMETRY, "Geometry", "Geometry",
+            Geometry.class, null);
+        dataTypesManager.addtype(DataTypes.ENVELOPE, "Envelope", "Envelope",
+            Envelope.class, null);
+
+    }
+
+    @Override
+    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());
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryCoercionContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryCoercionContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryCoercionContext.java	(revision 46118)
@@ -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.fmap.geom;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface GeometryCoercionContext extends CoercionContext {
+    public static int MODE_ONERROR_NULL = 1;
+    public static int MODE_ONERROR_DONTCONVERT = 2;
+    public static int MODE_ONERROR_THROW = 4;
+    
+    public GeometryType getGeometryType();
+    
+    public void setGeometryType(GeometryType type);
+    
+    public int getMode();
+    
+    public void setMode(int mode);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndex.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryManager.java	(revision 46118)
@@ -0,0 +1,1395 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.cresques.cts.IProjection;
+
+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 {
+
+//    
+//  Spatial index "Quadtree" is faster in creation but don't 
+//  support of nearest query.
+//    
+//  Spatial index "RTree" is faster in queries and support 
+//  nearest queries.
+//  
+//  The library expose a default implementation for RTree and QuadTree
+//    
+    public static final String SPATIALINDEX_DEFAULT_RTREE = "JSIRTree";
+    public static final String SPATIALINDEX_DEFAULT_QUADTREE = "JTSQuadtree";
+    
+    
+    public interface OPERATIONS {
+
+        public final static String FROMWKT = "FromWKT";
+        public final static String FROMWKB = "FromWKB";
+        public final static String FROMEWKB = "FromEWKB";
+
+        public final static String TOWKT = "ToWKT";
+        public final static String TOWKB = "ToWKB";
+        public final static String TOEWKB = "ToEWKB";
+    }
+
+    /**
+     * <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;
+
+    /**
+     * 
+     * @param data
+     * @return
+     * @throws CreateGeometryException
+     * @throws GeometryException 
+     */
+    public Geometry createFrom(Object data)
+        throws CreateGeometryException, GeometryException;
+
+    /**
+     * 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
+     * @param srs
+     *
+     * @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, IProjection srs)
+        throws CreateGeometryException, GeometryException;
+
+    /**
+     * Create a geometry from a WKT or HexWKB definition.
+     * 
+     *
+     * @param wkt geometry in WKT or HexWKB text format. If null return null.
+     *
+     * @return the geometry as a Geometry
+     *
+     * @throws CreateGeometryException
+     * @throws GeometryException
+     */
+    public Geometry createFrom(String wkt) throws CreateGeometryException,
+        GeometryException;
+
+    public Geometry createFromQuietly(String wkt);
+    
+    /**
+     * 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;
+
+    public Geometry createFrom(byte[] wkb, IProjection srs) 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 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 multipoint 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 multipoint
+     * @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 MultiPoint createMultiPoint(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;
+        
+    public InformationbuilderWithGeometrySupport createInformacionBuilder();
+    
+    /**
+     * Check if geomTypeChild is a geoemtry type deribed of geomTypeParent
+     * 
+     * @param geomTypeParent
+     * @param geomTypeChild
+     * @return 
+     */
+    public boolean isSubtype(int geomTypeParent, int geomTypeChild);
+    
+    /**
+     * Check if geomTypeParent is a Multigeometry and geomTypeChild is compatible
+     * 
+     * @param geomTypeParent
+     * @param geomTypeChild
+     * @return 
+     */
+    public boolean canAggregate(int geomTypeParent, int geomTypeChild);
+    
+    public GeometryCoercionContext createGeometryCoercionContext();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.complex;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.function.Predicate;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.tools.util.IsEmpty;
+
+/**
+ * <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, Iterable<Geometry>, IsEmpty {
+
+    /**
+     * 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);
+
+    /**
+     * Adds a new primitive to the primitive
+     *
+     * @param primitive The primitive to add
+     */
+    public void addPrimitive(Primitive primitive);
+
+    public void addPrimitives(Aggregate aggregate);
+
+    public void addPrimitives(Geometry geometry);
+
+    public void ensureCapacity(int capacity);
+
+    public Collection<? extends Geometry> getElements();
+
+    public Iterator<Geometry> iterator(Predicate<Geometry> filter);
+
+    public Aggregate createAggregate(int type, Predicate<Geometry> filter) throws CreateGeometryException;
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.primitive;
+
+
+public interface Polygon extends Surface, Closeable, Iterable<Point>, Ring {
+
+    public boolean isEmpty();
+
+    public Polygon clone() throws CloneNotSupportedException;
+
+    public Polygon cloneGeometry();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.geom.primitive;
+
+
+public interface Line extends Curve, Closeable, Iterable<Point> {
+
+    public boolean isEmpty();
+
+    public Line clone() throws CloneNotSupportedException;
+
+    public Line cloneGeometry();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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);
+
+        /**
+         * Creates a ring from the coordinates of the line and adds it to the surface like an inner ring.
+         *
+         * @param ring
+         */
+        public void addInteriorRing(Line line);
+
+        /**
+         * Creates a ring from the coordinates of the shell of the polygon and adds it to the surface like an inner ring.
+         *
+         * @param polygon
+         */
+        public void addInteriorRing(Polygon polygon);
+
+        public void removeInteriorRing(int index);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.geom.primitive;
+
+import org.gvsig.fmap.geom.DirectPosition;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * <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 values 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 Point cloneGeometry();
+
+    public Point clone() throws CloneNotSupportedException;
+
+    @Override
+    public Point force2D() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    public Point force3D();
+
+    public Point force2DM();
+
+    public Point force3DM();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Closeable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Closeable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Closeable.java	(revision 46118)
@@ -0,0 +1,11 @@
+
+package org.gvsig.fmap.geom.primitive;
+
+
+public interface Closeable {
+    public boolean isClosed();
+
+    public boolean isClosed(double tolerance);
+    
+    public void forceClose(double tolerance);       
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.primitive;
+
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+
+/**
+ * <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();
+
+	 /**
+     * Returns minimum corner of the ellipse framing rectangle.
+     *
+     * @return
+     */
+    Point getRectangleCorner();
+
+    /**
+     * Return the height of the ellipse framing rectangle.
+     *
+     * @return
+     */
+    double getRectangleHeight();
+
+    /**
+     * Return the width of the ellipse framing rectangle.
+     *
+     * @return
+     * @throws GeometryOperationException
+     * @throws GeometryOperationNotSupportedException
+     */
+    double getRectangleWidth() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    /**
+     * Return the rotate transform of the ellipse framing rectangle.
+     * @return
+     * @throws GeometryOperationException
+     * @throws GeometryOperationNotSupportedException
+     */
+    AffineTransform getRectangleRotation() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,7 @@
+
+package org.gvsig.fmap.geom.primitive;
+
+
+public interface Ring extends OrientablePrimitive, Closeable, Iterable<Point> {
+ 
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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();
+
+	/**
+	 * Returns minimum corner of the framing rectangle.
+	 *
+	 * @return
+	 */
+	Point getRectangleCorner();
+
+	/**
+	 * Return the height of the framing rectangle.
+	 *
+	 * @return
+	 */
+	double getRectangleHeight();
+
+	/**
+     * Return the width of the framing rectangle.
+     *
+     * @return
+     */
+	double getRectangleWidth();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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();
+
+    /**
+     * Return the middle point of the arc.
+     *
+     * @return The middle point of the arc.
+     */
+    Point getMiddlePoint();
+
+    /**
+     * Returns the counterclockwise angle formed by the horizontal line passing
+     * through the center, the center itself and the starting point.
+     *
+     * @return
+     */
+    double getStartAngle();
+
+    /**
+     * Returns the counterclockwise angle formed by the horizontal line passing
+     * through the center, the center itself and the ending point.
+     *
+     * @return
+     */
+    double getEndAngle();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * Geometry type for point geometries.
+ *
+ * @author gvSIG Team
+ */
+/**
+ *
+ * This class is deprecated.
+ * Use GeometryType.
+ *
+ * @deprecated use GeometryType
+ */
+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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/FilledSpline.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/FilledSpline.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/FilledSpline.java	(revision 46118)
@@ -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 fdiaz
+ */
+public interface FilledSpline extends Surface{
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circumference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circumference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/Circumference.java	(revision 46118)
@@ -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.primitive;
+
+
+public interface Circumference extends Curve {
+
+	/**
+	 * Sets the two values to define a circumference.
+	 * @param center
+	 * The center point of the circumference.
+	 * @param radious
+	 * A point that is used to calculate the radius.
+	 */
+	void setPoints(Point center, Point radious);
+
+	/**
+	 * Sets the two values to define a circumference.
+	 * @param center
+	 * The center point of the circumference.
+	 * @param radious
+	 * The radius of the circumference.
+	 */
+	void setPoints(Point center, double radious);
+
+	/**
+	 * Sets the values to define a circumference from 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 circumference.
+	 * @return
+	 * The center of the circumference.
+	 */
+	Point getCenter();
+
+	/**
+	 * Returns the radius of the circumference
+	 * @return
+	 * The radius of the circumference
+	 */
+	double getRadious();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.geom.primitive;
+
+import java.awt.geom.AffineTransform;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+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 upperCorner 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 geometry The geometry 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);
+
+    /**
+     * Returns <code>true</code> if the geometry intersects with the current
+     * envelope.
+     *
+     * @param geometry The geometry to compare.
+     * @return If the current envelope intersects with the geometry
+     */
+    boolean intersects(Geometry geometry);
+
+    /**
+     * 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();
+
+    /**
+     * Centers the envelope to a given point
+     * @param p Point to be centered
+     */
+    public void centerTo(Point p);
+
+    public void setProjection(IProjection projection);
+
+    public void setProjectionIffNull(IProjection projection);
+
+    public IProjection getProjection();
+    
+    public boolean isCollapsed();
+    
+    public boolean isCollapsed(int subtype);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.geom.primitive;
+
+
+/**
+ * <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
+     * @return 
+     */
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value);
+
+    /**
+     * Adds a vertex (or direct position) to the curve
+     * @param point
+     * The new point to add
+     * @return 
+     */
+    public OrientablePrimitive addVertex(Point point);
+
+    /**
+     * Utility method for add a vertex
+     * @param x
+     * @param y
+     * @return 
+     * @see #addVertex(Point)
+     */
+    public OrientablePrimitive addVertex(double x, double y);
+
+    /**
+     * Utility method for add a vertex
+     * @param x
+     * @param y
+     * @param z
+     * @return 
+     * @see #addVertex(Point)
+     */
+    public OrientablePrimitive 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.
+     * @return 
+     */
+    public OrientablePrimitive 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.
+     * @return 
+     */
+    public OrientablePrimitive 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 OrientablePrimitive ensureCapacity(int capacity);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PeriEllipse.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PeriEllipse.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive/PeriEllipse.java	(revision 46118)
@@ -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.primitive;
+
+
+/**
+ * <p>
+ * This class represents the perimeter o an ellipse.
+ * </p>
+ * @author fdiaz</a>
+ */
+public interface PeriEllipse extends Curve {
+
+	/**
+	 * 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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/primitive
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/transform/Transform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/transform/Transform.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/transform/Transform.java	(revision 46118)
@@ -0,0 +1,19 @@
+package org.gvsig.fmap.geom.transform;
+
+import org.gvsig.fmap.geom.primitive.Point;
+
+public interface Transform {
+    
+    public abstract Transform inverse();
+    
+    public abstract Point[] transform(Point[] src, Point[] dst);
+
+    public abstract Point transform(Point src);
+    
+    public abstract boolean isIdentity();
+    
+    public abstract Transform concatenate(Transform other);
+    
+    public abstract Transform preConcatenate(Transform other);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java	(revision 46118)
@@ -0,0 +1,992 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.cresques.cts.IProjection;
+
+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.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, Cloneable {
+    
+    /**
+     * Specifies a round join style for buffer.
+     */
+    public static final int JOIN_STYLE_ROUND = 1;
+    /**
+     * Specifies a mitre join style for buffer.
+     */
+    public static final int JOIN_STYLE_MITRE = 2;
+    /**
+     * Specifies a bevel join style for buffer.
+     */
+    public static final int JOIN_STYLE_BEVEL = 3;
+
+
+    /**
+     * Predefined geometry types in the model.
+     */
+    public interface TYPES {
+
+        public final static int UNKNOWN = -1;
+        /**
+         * 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.
+         */
+        @Deprecated
+        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 final static int RING = 20;
+
+        public final static int MULTILINE = 21;
+
+        public final static int MULTIPOLYGON = 22;
+
+        public final static int CIRCUMFERENCE = 23;
+
+        public final static int PERIELLIPSE = 24;
+
+        public final static int FILLEDSPLINE = 25;
+
+    }
+
+    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 final static String BOUNDARY = "Boundary";
+    }
+
+    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();
+    
+    public Geometry clone() throws CloneNotSupportedException;
+
+    /**
+     * Returns true if this geometry intersects the rectangle passed as
+     * parameter.
+     *
+     * @param r Rectangle.
+     *
+     * @return True, if <code>this</code> intersects <code>r</code>.
+     */
+    @Override
+    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();
+
+    public Object convertTo(String format) throws GeometryOperationNotSupportedException,
+            GeometryOperationException;
+
+    /**
+     * 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
+     * @throws org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException
+     * @throws org.gvsig.fmap.geom.operation.GeometryOperationException
+     */
+    public byte[] convertToWKB() throws GeometryOperationNotSupportedException,
+            GeometryOperationException;
+
+    public String convertToHexEWKB() throws GeometryOperationNotSupportedException,
+            GeometryOperationException;
+    
+    public String convertToHexWKB() throws GeometryOperationNotSupportedException,
+            GeometryOperationException;
+
+    public byte[] convertToWKBQuietly();
+
+    public String convertToHexWKBQuietly();
+
+    public byte[] convertToWKB(int srs)
+            throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    public byte[] convertToWKBForcingType(int srs, int type)
+            throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    /**
+     * Return a byte array with the equivalent in EWKB format of the Geometry.
+     *
+     * Utility method to wrap the invocation to the operation
+     * {@link OPERATIONS#CONVERTTOEWKB}.
+     *
+     * @return the EWKB version of the geometry
+     * @throws org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException
+     * @throws org.gvsig.fmap.geom.operation.GeometryOperationException
+     */
+    public byte[] convertToEWKB() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    public byte[] convertToEWKB(int srs)
+            throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    public byte[] convertToEWKBForcingType(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;
+
+    public String convertToWKTQuietly();
+    
+    /**
+     * 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;
+
+
+
+    /**
+     * Computes a buffer area around this geometry having the given width, the joinStyle and the capButt
+     *
+     * This is a utility method to wrap the invocation to the operation
+     * {@link OPERATIONS#BUFFER}.
+     *
+     * @param distance the width of the buffer
+     * @param joinStyle the join style can be JOIN_STYLE_ROUND, JOIN_STYLE_MITRE, JOIN_STYLE_BEVEL,
+     * @param capButt true if not add a cap
+     *
+     * @return a new Geometry with the computed buffer.
+     *
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public Geometry buffer(double distance, int joinStyle, boolean capButt) 
+            throws GeometryOperationNotSupportedException, 
+            GeometryOperationException;
+
+    
+    /**
+     *
+     * @param distance
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public Geometry offset(double distance)
+            throws GeometryOperationNotSupportedException,
+            GeometryOperationException;
+
+    /**
+     *
+     * @param joinStyle
+     * @param distance
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public Geometry offset(int joinStyle, 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 other
+     * @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();
+
+    //
+    // ===============================================
+    //
+    /**
+     * @param affineTransform
+     * @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.
+     */
+    @Override
+    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.
+     *
+     */
+    @Override
+    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.
+     */
+    @Override
+    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();
+
+    /**
+     * Converts the geometry to be points and makes with them a multiPoint
+     *
+     * @return MultiPoint
+     * @throws GeometryException
+     */
+    public MultiPoint toPoints() throws GeometryException;
+
+    /**
+     * Converts the geometry to be lines and makes with them a multiLine
+     *
+     * @return
+     * @throws GeometryException
+     */
+    public MultiLine toLines() throws GeometryException;
+
+    /**
+     * Converts the geometry to be polygons and makes with them a multiPolygon
+     *
+     * @return
+     * @throws GeometryException
+     */
+    public MultiPolygon toPolygons() throws GeometryException;
+
+    /**
+     * Flip the coordinates of the geometry. If the geometry is aggregate also
+     * revert the primitives collection.
+     *
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    /**
+     * Ensures the orientation of the geometry according to the parameter,
+     * flipping it if necessary. If the geometry is a polygon, ensures the
+     * orientation of its perimeter and ensures the opposite orientation of
+     * their holes.
+     *
+     * @param ccw
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    /**
+     * Returns true if passed as a parameter geometry is completely out of
+     * geometry.
+     *
+     * @param geometry
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    public boolean out(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException;
+
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException;
+    
+    /**
+     * Return true if the geometry can be transformed by the affine transform
+     *
+     * @param at the affine transform
+     * @return
+     */
+    public boolean canBeTransformed(AffineTransform at);
+
+    /**
+     * Return true if the geometry can be reprojected by the coordinate
+     * transformation
+     *
+     * @param ct the coordinate transformation
+     * @return
+     */
+    public boolean canBeReprojected(ICoordTrans ct);
+
+    public void setProjection(String projection);
+
+    public void setProjection(IProjection projection);
+
+    public void setProjectionIffNull(IProjection projection);
+
+    public IProjection getProjection();
+    
+    /**
+     * Return the boundary 
+     * @return 
+     */
+    public Geometry boundary();
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DataTypes.java	(revision 46118)
@@ -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 + 0x02;
+    public static final int ENVELOPE = OBJECT + 0x03;
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/DirectPosition.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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 full name of this geometry type. It include the type name and
+     * the subtype name.
+     *
+     * @return the full name of the geometry type
+     */
+    public String getFullName();
+
+    /**
+     * @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 org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    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
+     */
+    @Override
+    public String toString();
+
+    public int getDimension();
+
+    public boolean hasZ();
+
+    public boolean hasM();
+
+    public Class getGeometryClass();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.type;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+
+public abstract class AbstractGeometryType implements GeometryType {
+
+    /**
+     * Registered operations for a concrete geometry type
+     */
+    private final List<GeometryOperation> GEOMETRY_OPERATIONS = new ArrayList();
+
+    @Override
+    public boolean isTypeOf(GeometryType geometryType) {
+        return isTypeOf(geometryType.getType());
+    }
+
+    @Override
+    public boolean isSubTypeOf(GeometryType geometryType) {
+        return isSubTypeOf(geometryType.getSubType());
+    }
+
+    @Override
+    public void setGeometryOperation(int index, GeometryOperation geomOp) {
+        while (index > GEOMETRY_OPERATIONS.size()) {
+            GEOMETRY_OPERATIONS.add(null);
+        }
+
+        if (index == GEOMETRY_OPERATIONS.size()) {
+            GEOMETRY_OPERATIONS.add(geomOp);
+        } else {
+            GEOMETRY_OPERATIONS.set(index, geomOp);
+        }
+    }
+
+    @Override
+    public GeometryOperation getGeometryOperation(int index) {
+        return (GeometryOperation) GEOMETRY_OPERATIONS.get(index);
+    }
+
+    @Override
+    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 GEOMETRY_OPERATIONS;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("[")
+                .append(getName())
+                .append(",[")
+                .append(getGeometryOperations().toString())
+                .append("]");
+
+        return sb.toString();
+    }
+
+    @Override
+    public boolean hasZ() {
+        int subtype = this.getSubType();
+        return subtype == Geometry.SUBTYPES.GEOM3D || subtype == Geometry.SUBTYPES.GEOM3DM;
+    }
+
+    @Override
+    public boolean hasM() {
+        int subtype = this.getSubType();
+        return subtype == Geometry.SUBTYPES.GEOM2DM || subtype == Geometry.SUBTYPES.GEOM3DM;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/InformationbuilderWithGeometrySupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/InformationbuilderWithGeometrySupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/InformationbuilderWithGeometrySupport.java	(revision 46118)
@@ -0,0 +1,88 @@
+package org.gvsig.fmap.geom;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.util.InformationBuilder;
+
+public interface InformationbuilderWithGeometrySupport extends InformationBuilder {
+
+    public interface RawElementWithGeometrySupport extends RawElement {
+
+        public RawElementWithGeometrySupport value(Envelope env);
+
+        public RawElementWithGeometrySupport value(Geometry geom);
+
+        public RawElementWithGeometrySupport value(IProjection proj);
+
+        public RawElementWithGeometrySupport valueAsWKT(IProjection proj);
+    }
+
+    public interface TextElementWithGeometrySupport extends TextElement, RawElementWithGeometrySupport {
+
+        @Override
+        public TextElementWithGeometrySupport value(Envelope env);
+
+        @Override
+        public TextElementWithGeometrySupport value(Geometry geom);
+
+        @Override
+        public TextElementWithGeometrySupport value(IProjection proj);
+
+        @Override
+        public TextElementWithGeometrySupport valueAsWKT(IProjection proj);
+    }
+
+    public interface PropertyElementWithGeometrySupport extends PropertyElement, TextElementWithGeometrySupport {
+
+        @Override
+        public PropertyElementWithGeometrySupport value(Envelope env);
+
+        @Override
+        public PropertyElementWithGeometrySupport value(Geometry geom);
+
+        @Override
+        public PropertyElementWithGeometrySupport value(IProjection proj);
+
+        @Override
+        public PropertyElementWithGeometrySupport valueAsWKT(IProjection proj);
+    }
+
+    public interface EnvelopeElement extends Element {
+
+        public EnvelopeElement value(Envelope value);
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColor(String color);
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorTitle(String color);
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyLabel(String color);
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyValue1(String color);
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyValue2(String color);
+
+    @Override
+    public TitleElement title();
+
+    @Override
+    public PropertyElementWithGeometrySupport property();
+
+    @Override
+    public TextElementWithGeometrySupport text();
+
+    @Override
+    public RawElementWithGeometrySupport raw();
+
+    public EnvelopeElement envelope();
+
+    @Override
+    public String build();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+import org.gvsig.tools.util.IsEmpty;
+
+/**
+ * <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, Iterable<Geometry>, IsEmpty  {	
+	
+	/**
+	 * 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.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,17 @@
+/*
+ * 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 {
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,17 @@
+/*
+ * 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 {
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.Geometry;
+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
+     */
+    public void addPrimitive(Primitive primitive);
+
+    public void addPrimitives(Aggregate aggregate);
+
+    public void addPrimitives(Geometry geometry);
+
+    public void ensureCapacity(int capacity);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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:mime-type
   + text/plain
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryUtils.java	(revision 46118)
@@ -0,0 +1,1069 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.Point2D;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.euclidean.EuclideanLine2D;
+import org.gvsig.euclidean.EuclideanManager;
+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.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.Arc;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Spline;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class GeometryUtils {
+
+    private GeometryUtils() {
+        
+    }
+    
+    public static GeometryType getGeometryType(int geometryType, int geometrySubType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.getGeometryType(geometryType, geometrySubType);
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+    
+    public static boolean isSubtype(int geomTypeParent, int geomTypeChild) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        return geomManager.isSubtype(geomTypeParent, geomTypeChild);
+    }
+
+    public static boolean canAggregate(int geomTypeParent, int geomTypeChild) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        return geomManager.canAggregate(geomTypeParent, geomTypeChild);
+    }
+    
+    public static Envelope createEnvelope(int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createEnvelope(subType);
+        } catch (CreateEnvelopeException ex) {
+            return null;
+        }
+    }
+    
+    public static Envelope createEnvelope(double minX, double minY, double maxX,
+        double maxY, int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createEnvelope(minX, minY, maxX, maxY, subType);
+        } catch (CreateEnvelopeException ex) {
+            return null;
+        }
+    }
+    
+    public static Line createLine(int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createLine(subType);
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static MultiLine createMultiLine(int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createMultiLine(subType);
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Polygon createPolygon(int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createPolygon(subType);
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+        
+    public static MultiPolygon createMultiPolygon(int subType) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createMultiPolygon(subType);
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+        
+    public static Point createPoint(double x, double y) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Point createPoint(double x, double y, double z) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            Point p = geomManager.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+            p.setCoordinateAt(Geometry.DIMENSIONS.Z, z);
+            return p;
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Point createPoint(double x, double y, double z, double m) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            Point p = geomManager.createPoint(x, y, Geometry.SUBTYPES.GEOM3DM);
+            p.setCoordinateAt(Geometry.DIMENSIONS.Z, z);
+            p.setCoordinateAt(p.getDimension()-1, m);
+            return p;
+        } catch (CreateGeometryException ex) {
+            return null;
+        }
+    }
+
+    public static Point createPoint(Point center, double radius, double angle) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        return GeometryUtils.createPoint(
+                center.getX() + radius * Math.cos(angle),
+                center.getY() + radius * Math.sin(angle)
+        );
+    }
+    
+    
+    public static Geometry createFrom(Object data) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createFrom(data);
+        } catch (GeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Geometry createFrom(String wkt, String srs) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createFrom(wkt, srs);
+        } catch (GeometryException ex) {
+            return null;
+        }
+    }
+
+    public static Geometry createFrom(String wkt, IProjection srs) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createFrom(wkt, srs);
+        } catch (GeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Geometry createFrom(String wkt) {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        try {
+            return geomManager.createFrom(wkt);
+        } catch (GeometryException ex) {
+            return null;
+        }
+    }
+    
+    public static Object convertTo(Geometry geom, String format) {
+        try {
+            return geom.convertTo(format);
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+        
+    public static String toWKT(Geometry geom) {
+        try {
+            return geom.convertToWKT();
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    public static byte[] toWKB(Geometry geom) {
+        try {
+            return geom.convertToWKB();
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+    
+    public static byte[] toEWKB(Geometry geom) {
+        try {
+            return geom.convertToEWKB();
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+    
+    public static boolean intersects(Geometry geom1, Geometry geom2) {
+        try {
+            return geom1.intersects(geom2);
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    public static String getGeometryTypeName(int type) {
+        switch (type) {
+            case Geometry.TYPES.GEOMETRY:
+                return "Geometry";
+            case Geometry.TYPES.POINT:
+                return "Point";
+            case Geometry.TYPES.CURVE:
+                return "Curve";
+            case Geometry.TYPES.SURFACE:
+                return "Surface";
+            case Geometry.TYPES.SOLID:
+                return "Solid";
+            case Geometry.TYPES.AGGREGATE:
+                return "Aggregate";
+            case Geometry.TYPES.MULTIPOINT:
+                return "Multipoint";
+            case Geometry.TYPES.MULTICURVE:
+                return "Multicurve";
+            case Geometry.TYPES.MULTISURFACE:
+                return "Multisurface";
+            case Geometry.TYPES.MULTISOLID:
+                return "Multisolid";
+            case Geometry.TYPES.CIRCLE:
+                return "Circle";
+            case Geometry.TYPES.ARC:
+                return "Arc";
+            case Geometry.TYPES.ELLIPSE:
+                return "Ellipse";
+            case Geometry.TYPES.SPLINE:
+                return "Spline";
+            case Geometry.TYPES.ELLIPTICARC:
+                return "Ellipticarc";
+            case Geometry.TYPES.COMPLEX:
+                return "Complex";
+            case Geometry.TYPES.LINE:
+                return "Line";
+            case Geometry.TYPES.POLYGON:
+                return "Polygon";
+            case Geometry.TYPES.RING:
+                return "Ring";
+            case Geometry.TYPES.MULTILINE:
+                return "Multiline";
+            case Geometry.TYPES.MULTIPOLYGON:
+                return "Multipolygon";
+            case Geometry.TYPES.CIRCUMFERENCE:
+                return "Circumference";
+            case Geometry.TYPES.PERIELLIPSE:
+                return "Periellipse";
+            case Geometry.TYPES.FILLEDSPLINE:
+                return "Filledspline";
+            default:
+                return "Geometry";
+        }
+    }
+
+    public static String getGeometrySubtypeName(int subtype) {
+        switch (subtype) {
+            case Geometry.SUBTYPES.GEOM2D:
+                return "2D";
+            case Geometry.SUBTYPES.GEOM3D:
+                return "3D";
+            case Geometry.SUBTYPES.GEOM2DM:
+                return "2DM";
+            case Geometry.SUBTYPES.GEOM3DM:
+                return "3DM";
+            default:
+                return "Unknown";
+        }
+    }    
+    
+    public static int getGeometryType(String typeName) {
+        if( StringUtils.isBlank(typeName) ) {
+            return Geometry.TYPES.UNKNOWN;
+        }
+        switch(typeName.toLowerCase()) {
+            case "geometry":
+                return Geometry.TYPES.GEOMETRY;
+            case "point":
+                    return Geometry.TYPES.POINT;
+            case "curve":
+                    return Geometry.TYPES.CURVE;
+            case "surface":
+                    return Geometry.TYPES.SURFACE;
+            case "solid":
+                    return Geometry.TYPES.SOLID;
+            case "aggregate":
+                    return Geometry.TYPES.AGGREGATE;
+            case "multipoint":
+                    return Geometry.TYPES.MULTIPOINT;
+            case "multicurve":
+                    return Geometry.TYPES.MULTICURVE;
+            case "multisurface":
+                    return Geometry.TYPES.MULTISURFACE;
+            case "multisolid":
+                    return Geometry.TYPES.MULTISOLID;
+            case "circle":
+                    return Geometry.TYPES.CIRCLE;
+            case "arc":
+                    return Geometry.TYPES.ARC;
+            case "ellipse":
+                    return Geometry.TYPES.ELLIPSE;
+            case "spline":
+                    return Geometry.TYPES.SPLINE;
+            case "ellipticarc":
+                    return Geometry.TYPES.ELLIPTICARC;
+            case "complex":
+                    return Geometry.TYPES.COMPLEX;
+            case "line":
+                    return Geometry.TYPES.LINE;
+            case "polygon":
+                    return Geometry.TYPES.POLYGON;
+            case "ring":
+                    return Geometry.TYPES.RING;
+            case "multiline":
+                    return Geometry.TYPES.MULTILINE;
+            case "multipolygon":
+                    return Geometry.TYPES.MULTIPOLYGON;
+            case "circumference":
+                    return Geometry.TYPES.CIRCUMFERENCE;
+            case "periellipse":
+                    return Geometry.TYPES.PERIELLIPSE;
+            case "filledspline":
+                    return Geometry.TYPES.FILLEDSPLINE;
+            default:
+                return Geometry.TYPES.UNKNOWN;
+        }
+    }
+
+    public static int getGeometrySubtype(String subtype) {
+        if( StringUtils.isBlank(subtype) ) {
+            return Geometry.SUBTYPES.UNKNOWN;
+        }
+        switch(subtype.toUpperCase()) {
+            case "GEOM2D":
+            case "2D":
+                    return Geometry.SUBTYPES.GEOM2D;
+            case "GEOM3D":
+            case "3D":
+                    return Geometry.SUBTYPES.GEOM3D;
+            case "GEOM2DM":
+            case "2DM":
+                    return Geometry.SUBTYPES.GEOM2DM;
+            case "GEOM3DM":
+            case "3DM":
+                    return Geometry.SUBTYPES.GEOM3DM;
+            default:
+                return Geometry.SUBTYPES.UNKNOWN;
+        }
+    }    
+    
+    /**
+     * Creates a circle as of center and radius.
+     *
+     * @param center
+     *            of new circle
+     * @param radius
+     *            of new circle
+     * @param subtype
+     *            subtype of circle. See {@link Geometry.SUBTYPES}
+     * @return The circle created with center and radius
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Circle createCircle(Point center, double radius, int subtype)
+            throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Circle circle = (Circle) geomManager.create(Geometry.TYPES.CIRCLE, subtype);
+        circle.setPoints(center, radius);
+
+        return circle;
+    }
+
+    /**
+     * Creates a circle from three points.
+     *
+     * @param firstPoint
+     *            of circle
+     * @param secondPoint
+     *            of circle
+     * @param thirdPoint
+     *            of circle
+     * @param subtype
+     *            subtype of circle. See {@link Geometry.SUBTYPES}
+     * @return The circle created from three points received as parameters.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Circle createCircle(Point firstPoint, Point secondPoint,
+            Point thirdPoint, int subtype) throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Circle circle = (Circle) geomManager.create(Geometry.TYPES.CIRCLE, subtype);
+        circle.setPoints(firstPoint, secondPoint, thirdPoint);
+
+        return circle;
+    }
+    
+    /**
+     * Creates a circle from five points.The first two points are two points on a tangent to the circle.The next two are two points on another tangent to the circle.The last one is a point near the center of the circle.
+     *
+     * @param firstPoint
+     * @param secondPoint
+     * @param thirdPoint
+     * @param fourthPoint
+     * @param fifthPoint
+     * @param subtype
+     *            subtype of circle. See {@link Geometry.SUBTYPES}
+     * @return The circle created from three points received as parameters.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Circle createCircle(Point firstPoint, Point secondPoint, Point thirdPoint, Point fourthPoint, Point fifthPoint, int subtype) throws CreateGeometryException {
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        EuclideanLine2D line1 = euclideanManager.createLine2D(firstPoint.getX(), firstPoint.getY(), secondPoint.getX(), secondPoint.getY());
+        EuclideanLine2D line2 = euclideanManager.createLine2D(thirdPoint.getX(), thirdPoint.getY(), fourthPoint.getX(), fourthPoint.getY());
+        return createCircle(line1, line2, fifthPoint, subtype);
+    }
+
+    /**
+     * Creates a circle from two tangents and one point.
+     *
+     * @param line1
+     *            A tangent line
+     * @param line2
+     *            Another tangent line
+     * @param point
+     *            A point near the center of the circle.
+     * @param subtype
+     *            subtype of circle. See {@link Geometry.SUBTYPES}
+     * @return The circle created from two tangents and one point received as parameters.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Circle createCircle(EuclideanLine2D line1, EuclideanLine2D line2, Point point, int subtype) throws CreateGeometryException {
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        
+        try {
+            EuclideanLine2D perpendicular;
+            EuclideanLine2D bisector;
+            if (line1.isParallel(line2)) {
+
+                if (Objects.equals(line1.getYIntercept(), line2.getYIntercept())
+                        || (Objects.equals(Math.abs(line1.getYIntercept()), 0.0)
+                        && Objects.equals(Math.abs(line2.getYIntercept()), 0.0))) { //Same lines
+                    perpendicular = line1.getPerpendicular(point.getX(), point.getY());
+                    Point2D intersection = line1.getIntersection(perpendicular);
+                    return createCircle(point, point.distance(geomManager.createPoint(intersection.getX(), intersection.getY(), subtype)), subtype);
+                } else if (Double.isInfinite(line1.getSlope())) { //Parallel and vertical lines
+                    Point center = createPoint(-(line2.getC() + line1.getC()) / 2.0, point.getY(), subtype);
+                    double radius = line1.getDistance(center.getX(), center.getY());
+                    return createCircle(center, radius, subtype);
+                } else { //Parallel lines
+                    bisector = euclideanManager.createLine2D(line1.getA(), line1.getB(), (line2.getC()+line1.getC())/2);
+                }
+
+            } else {
+
+                EuclideanLine2D[] bisectors = line1.getBisectors(line2);
+
+                double distance1 = bisectors[0].getDistance(point.getX(), point.getY());
+                double distance2 = bisectors[1].getDistance(point.getX(), point.getY());
+
+                bisector = bisectors[0];
+                if (distance1 > distance2) {
+                    bisector = bisectors[1];
+                }
+            }
+
+            if (Double.isInfinite(bisector.getSlope())) {
+                Point2D intersection = line1.getIntersection(line2);
+                Point center = createPoint(intersection.getX(), point.getY(), subtype);
+                Double radius = line1.getDistance(center.getX(), center.getY());
+                return createCircle(center, radius, subtype);
+            } else if (bisector.getSlope() == 0.0) {
+                if (line1.isParallel(line2)) { //Objects.equals(m0, m1)) { //Same slope
+                    Point center = createPoint(point.getX(), bisector.getYIntercept(), subtype);
+                    Double radius = line1.getDistance(center.getX(), center.getY());
+                    return createCircle(center, radius, subtype);
+                } else {
+                    Point2D intersection = line1.getIntersection(line2);
+                    Point center = createPoint(point.getX(), intersection.getY(), subtype);
+                    Double radius = line1.getDistance(center.getX(), center.getY());
+                    return createCircle(center, radius, subtype);
+                }
+            }
+
+            perpendicular = bisector.getPerpendicular(point.getX(), point.getY());
+            Point2D intersection = bisector.getIntersection(perpendicular);
+            Double radius = line1.getDistance(intersection.getX(), intersection.getY());
+            return createCircle(
+                    geomManager.createPoint(intersection.getX(), intersection.getY(), subtype), 
+                    radius, 
+                    subtype);
+
+        } catch (GeometryOperationNotSupportedException | GeometryOperationException ex) {
+            throw new CreateGeometryException(Geometry.TYPES.CIRCLE, subtype, ex);
+        }
+    }
+
+    /**
+     * Creates a circle from two tangent geometries and the radius.
+     *
+     * @param geometry1
+     *            A tangent geometry
+     * @param geometry2
+     *            Another tangent geometry
+     * @param radius
+     *            the radius of the cicle.
+     * @param firstPoint
+     *            a point near tangent point of geometry1
+     * @param secondPoint
+     *            a point near tangent point of geometry2
+     * @param subtype
+     *            subtype of circle. See {@link Geometry.SUBTYPES}
+     * @return The circle created from two tangent geometries and the radius received as parameters.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Circle createCircle(Geometry geometry1, Geometry geometry2, double radius, Point firstPoint, Point secondPoint, int subtype) throws CreateGeometryException {
+        
+        try {
+            Geometry buffer1 = geometry1.buffer(radius);
+            MultiLine lines1 = buffer1.toLines();
+            
+            Geometry buffer2 = geometry2.buffer(radius);
+            MultiLine lines2 = buffer2.toLines();
+            
+            Geometry intersection = lines1.intersection(lines2);
+            
+            Point center = null;
+            if(intersection!=null){
+                MultiPoint points = intersection.toPoints();
+
+                double distance = Double.POSITIVE_INFINITY;
+                for (int i = 0; i < points.getPrimitivesNumber(); i++) {
+                    Point point = points.getPointAt(i);
+                    double pointDistance = point.distance(firstPoint)+point.distance(secondPoint);
+                    if(pointDistance<distance){
+                        center = point;
+                        distance = pointDistance;
+                    }
+                }
+            }
+            if(center == null){
+                return null;
+            }
+            return createCircle(center, radius, subtype);
+           
+        } catch (GeometryOperationNotSupportedException | GeometryOperationException | GeometryException ex) {
+            throw new CreateGeometryException(Geometry.TYPES.CIRCLE, subtype, ex);
+        }
+        
+    }
+
+    /**
+     * Creates an arc as of center, radius, start angle and extension angle.
+     *
+     * @param center
+     *            center of arc.
+     * @param radius
+     *            of arc.
+     * @param startAngle
+     *            of arc in radians
+     * @param angleExt
+     *            of arc in radians
+     * @param subtype
+     *            subtype of arc. See {@link Geometry.SUBTYPES}
+     * @return The arc created with center, radius, start angle and extension
+     *         angle.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Arc createArc(Point center, double radius, double startAngle,
+            double angleExt, int subtype) throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Arc arc = (Arc) geomManager.create(Geometry.TYPES.ARC, subtype);
+        arc.setPoints(center, radius, startAngle, angleExt);
+        return arc;
+    }
+
+    /**
+     * Creates an arc as of three points.
+     *
+     * @param start
+     *            point of arc
+     * @param middle
+     *            point of arc. It can be any point of arc.
+     * @param end
+     *            point of arc
+     * @param subtype
+     *            of arc. See {@link Geometry.SUBTYPES}
+     * @return The arc created that it start at start point, cross middle
+     *         point and end at end point.
+     * @throws org.gvsig.tools.exception.BaseException
+     */
+    public static Arc createArc(Point start, Point middle, Point end, int subtype)
+            throws BaseException {
+
+        Arc arc = (Arc) GeometryLocator.getGeometryManager().create(Geometry.TYPES.ARC, subtype);
+        arc.setPoints(start, middle, end);
+        return arc;
+
+    }
+    
+    /**
+     * Creates an ellipse from start and end point of A axis and half length
+     * of B axis.
+     *
+     * @param firstPointAxisA
+     *            first point of A axis
+     * @param secondPointAxisA
+     *            second point of B axis
+     * @param halfLengthAxisB
+     *            half length of B axis
+     * @param subtype
+     *            of ellipse See {@link Geometry.SUBTYPES}
+     * @return The ellipse created
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Arc createEllipse(Point firstPointAxisA, Point secondPointAxisA,
+            double halfLengthAxisB, int subtype) throws CreateGeometryException {
+        try {
+            double lengthAxisA = secondPointAxisA.distance(firstPointAxisA);
+
+            Point origen = createPoint(0, 0, subtype);
+            Arc ellipse = createArc(
+                    origen,
+                    lengthAxisA / 2,
+                    0,
+                    2 * Math.PI,
+                    subtype);
+
+            ellipse.scale(origen, 1, halfLengthAxisB * 2 / lengthAxisA);
+            final EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+            EuclideanLine2D axisA = euclideanManager.createLine2D(
+                    firstPointAxisA.getX(),
+                    firstPointAxisA.getY(), 
+                    secondPointAxisA.getX(),
+                    secondPointAxisA.getY());
+            double angle = axisA.getAngle();
+            ellipse.rotate(angle, 0, 0);
+            Point centerOfEllipse = getMidPoint(firstPointAxisA, secondPointAxisA, subtype);
+            ellipse.move(centerOfEllipse.getX(), centerOfEllipse.getY());
+            return ellipse;
+        } catch (GeometryOperationNotSupportedException | GeometryOperationException e) {
+            throw new CreateGeometryException(Geometry.TYPES.ARC, subtype, e);
+        }
+    }
+    
+    /**
+     * Creates a filled ellipse from start and end point of A axis and half length
+     * of B axis.
+     *
+     * @param firstPointAxisA
+     *            first point of A axis
+     * @param secondPointAxisA
+     *            second point of B axis
+     * @param halfLengthAxisB
+     *            half length of B axis
+     * @param subtype
+     *            of ellipse See {@link Geometry.SUBTYPES}
+     * @return The ellipse created
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Ellipse createFilledEllipse(Point firstPointAxisA,
+            Point secondPointAxisA, double halfLengthAxisB, int subtype)
+            throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Ellipse ellipse = (Ellipse) geomManager.create(Geometry.TYPES.ELLIPSE, subtype);
+        ellipse.setPoints(firstPointAxisA, secondPointAxisA, halfLengthAxisB);
+        return ellipse;
+    }
+
+    /**
+     * Gets center point of three points.
+     *
+     * @param a
+     *            Point one
+     * @param b
+     *            Point two
+     * @param c
+     *            Point three
+     * @param subtype
+     *            of point created. See {@link Geometry.SUBTYPES}
+     * @return Point center.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Point getCenter(Point a, Point b, Point c, int subtype)
+            throws CreateGeometryException {
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+
+        Point2D center = euclideanManager.getCenter(
+                a.getX(), a.getY(), 
+                b.getX(), b.getY(), 
+                c.getX(), c.getY()
+        );
+        return geomManager.createPoint(center.getX(), center.getY(), subtype);
+    }
+
+    /**
+     * Gets midpoint of two points
+     *
+     * @param a
+     *            Point one
+     * @param b
+     *            Point two
+     * @param subtype
+     *            of point created. See {@link Geometry.SUBTYPES}
+     * @return Mid point of points.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Point getMidPoint(Point a, Point b, int subtype)
+            throws CreateGeometryException {
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        Point2D p = euclideanManager.getMidPoint(
+                a.getX(), a.getY(), b.getX(), b.getY()
+        );
+        return createPoint(p.getX(), p.getY(), subtype);
+    }
+
+    /**
+     * Creates line as of two point coordinates.
+     *
+     * @param x1
+     *            The X1 coordinate
+     * @param y1
+     *            The y1 coordinate
+     * @param x2
+     *            The X2 coordinate
+     * @param y2
+     *            The y2 coordinate
+     * @param subtype
+     *            of line. See {@link Geometry.SUBTYPES}
+     * @return The Line created.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Line createLine(double x1, double y1, double x2, double y2,
+            int subtype) throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Line line = (Line) geomManager.create(Geometry.TYPES.CURVE, subtype);
+        line.addVertex(x1, y1);
+        line.addVertex(x2, y2);
+        return line;
+    }
+    
+    /**
+     * Creates line as of two point objects.
+     *
+     * @param p1
+     *            First point
+     * @param p2
+     *            Second point
+     * @param subtype
+     *            of line. See {@link Geometry.SUBTYPES}
+     * @return The Line created.
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Line createLine(Point p1, Point p2, int subtype)
+            throws CreateGeometryException {
+        return createLine(p1.getX(), p1.getY(), p2.getX(), p2.getY(),
+                subtype);
+    }
+
+    /**
+     * Create Spline from point list
+     *
+     * @param points
+     * @param subtype
+     * @return
+     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
+     */
+    public static Spline createSpline(List<Point> points, int subtype)
+            throws CreateGeometryException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Spline spline = (Spline) geomManager.create(Geometry.TYPES.SPLINE, subtype);
+
+        points.forEach((point) -> {
+            spline.addVertex(point);
+        });
+
+        return spline;
+    }
+
+
+    /**
+     * Calculate the angle between points p1 and p2 with vertex at vertex point
+     * 
+     * @param vertex
+     * @param p1
+     * @param p2
+     * @return 
+     */
+    public static double calculateAngle(Point vertex, Point p1, Point p2){
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        return euclideanManager.calculateAngle(
+                vertex.getX(), vertex.getY(), 
+                p1.getX(), p1.getY(), 
+                p2.getX(), p2.getY()
+        );
+    }
+    
+    /**
+     * Find the angle in the counterclockwise direction between 
+     * the horizontal line and point p relative to the vertex
+     * 
+     * @param vertex
+     * @param p
+     * @return 
+     */
+    public static double calculateAngle(Point vertex, Point p){
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        return euclideanManager.calculateAngle(
+                vertex.getX(), vertex.getY(), 
+                p.getX(), p.getY()
+        );
+    }
+    
+    public static boolean areThreePointsInLine(Point a, Point b, Point c){
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        return euclideanManager.areThreePointsInLine(
+                a.getX(), a.getY(), 
+                b.getX(), b.getY(), 
+                c.getX(), c.getY()
+        );
+    }
+
+    /**
+     * Returns a formatted string using the specified format string and coordinate values.Conversion options are:
+     * <ul>
+     * <li><code>%[flags][width][.precision]d</code> The result is formatted as a integer number with the degress of the coordinate
+     * <li><code>%[flags][width][.precision]m</code> The result is formatted as a integer number with the minutes of the coordinate
+     * <li><code>%[flags][width][.precision]s</code> The result is formatted as a decimal number with the seconds of the coordinate. 
+     * <li><code>%[flags][width][.precision]D</code> The result is formatted as a decimal number with the degress
+     * <li><code>%-</code> The result is formatted with the sign if it is negative
+     * <li><code>%+</code> The result is formatted with the sign 
+     * </ul>
+     * 
+     * Example:
+     * <table>
+     * <tr><td>formatCoordinate("%-%d� %m' %s'' N", 39.89)<td>"39� 53' 24.000'' N"
+     * <tr><td>formatCoordinate("%-%d� %m' %.0s'' N", 39.89)<td>"39� 53' 24'' N"
+     * <tr><td>formatCoordinate("%+%d� %m' %.2s'' N (%4.4D)", 39.89)<td>"+39� 53' 24.00'' N (39.8900)"
+     * <tr><td>formatCoordinate("%-%d� %m' N", 39.89)<td> "39� 53' N"
+     * <tr><td>formatCoordinate("%-%d� %m' N", -39.89)<td> "-39� 53' N"
+     * <tr><td>formatCoordinate("%-%d� %m' N (%4.4D)", 39.89)<td> "39� 53' N (39.8900)"
+     * </table>
+     * 
+     * @param fmt
+     * @param coordinate 
+     * @return  
+     */
+    public static String formatCoordinate(String fmt, double coordinate) {
+        return formatCoordinate(fmt, null, coordinate);
+    }
+    
+    public static String formatCoordinate(String fmt, String NS, double coordinate) {
+
+        double value = Math.abs(coordinate);
+
+        int deg = (int)(value);
+        double min = (value - deg) * 60;
+        double secs = (min - (int) min)*60;
+        
+        String r = fmt;
+        r = r.replace("%-",coordinate<0 ? "-" : "");
+        r = r.replace("%+",coordinate<0 ? "-" : "+");
+        if( StringUtils.isBlank(NS) || value==0) {
+            r = r.replace("%N","");
+        } else {
+            r = r.replace("%N",coordinate>0 ? NS.substring(0,1)  : NS.substring(1,2) );
+        }
+        r = formatCoordinate_replace(r,"s","f", secs);
+        r = formatCoordinate_replace(r,"d","d", deg);
+        r = formatCoordinate_replace(r,"m","d", (int)min);
+        r = formatCoordinate_replace(r,"D","f", value);        
+        return r;
+    }
+
+    public static String formatAngle(String fmt, double angle) {
+
+        double value = Math.abs(angle);
+
+        int deg = (int)(value);
+        double min = (value - deg) * 60;
+        double secs = (min - (int) min)*60;
+        
+        String r = fmt;
+        r = r.replace("%-",angle<0 ? "-" : "");
+        r = r.replace("%+",angle<0 ? "-" : "+");
+
+        r = formatCoordinate_replace(r,"s","f", secs);
+        r = formatCoordinate_replace(r,"d","d", deg);
+        r = formatCoordinate_replace(r,"m","d", (int)min);
+        r = formatCoordinate_replace(r,"D","f", value);        
+        return r;
+    }
+    
+    private static String formatCoordinate_replace(String fmt, String source_conversion, String target_conversion, Object value) {
+        String s = fmt;
+        Pattern p = Pattern.compile("%([-+#0,(]?+[0-9]*[.]*[0-9]*)" + source_conversion);
+        Matcher macher = p.matcher(s);
+        if (macher.find()) {
+            String mod = macher.group(1);
+            if (StringUtils.isBlank(mod)) {
+                if( value instanceof Double ) {
+                    s = fmt.replace("%" + source_conversion, String.format(Locale.ENGLISH,"%.3f", value));
+                } else {
+                    s = fmt.replace("%" + source_conversion, String.valueOf(value));
+                }
+            } else {
+                String x = String.format(Locale.ENGLISH,"%" + mod + target_conversion, value);
+                s = macher.replaceAll(x);
+            }
+            return s;
+        }
+        return s;
+    }
+    
+    /**
+     * Returns the coefficient that expresses the direction in which the angle with vertex at center a and from point1 to point2 is beaten 
+     * coefDirection >= 0 then the direction is CCW 
+     * else the direction is CW
+     * 
+     * @param center
+     * @param point1
+     * @param point2
+     * @return 
+     */
+    public static double getCoefDirection(Point center, Point point1, Point point2) {
+        EuclideanManager euclideanManager = ToolsUtilLocator.getEuclideanManager();
+        return euclideanManager.getCoefDirection(
+                center.getX(), center.getY(), 
+                point1.getX(), point1.getY(), 
+                point2.getX(), point2.getY()
+        );
+    }
+
+    /**
+     * Calculates a point on the line that passes through two points whose
+     * distance to the first is proportional to the distance between them
+     * according to the lambda parameter
+     * 
+     * @param p1
+     * @param p2
+     * @param lambda
+     * @return
+     * @throws CreateGeometryException
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException 
+     */
+    public static Point calculateLambdaPoint(Point p1, Point p2, double lambda) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        GeometryType geomType = p1.getGeometryType();
+        int subtype = geomType.getSubType();
+        int dimension = geomType.getDimension();
+        double[] coords = new double[dimension];
+        Point p = geomManager.createPoint(0, 0, subtype);
+        double distance = p1.distance(p2);
+        for (int d = 0; d < dimension; d++) {
+            p.setCoordinateAt(
+                    d,
+                    p1.getCoordinateAt(d) + (p2.getCoordinateAt(d) - p1.getCoordinateAt(d)) * lambda);
+        }
+        
+        return p;
+    }
+
+
+    /**
+     * Returns true if two polygons overlap taking into account the given tolerance
+     * 
+     * @param polygon
+     * @param polygon2
+     * @param theTolerance
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException 
+     */
+    public static boolean overlaps(Geometry polygon, Geometry polygon2, double theTolerance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (polygon != null && polygon2 != null) {
+            if (theTolerance > 0) {
+                Geometry buffer1 = polygon.buffer(-theTolerance);
+                if (buffer1 != null) {
+                    return buffer1.overlaps(polygon2);
+                } else{
+                    Geometry buffer2 = polygon2.buffer(-theTolerance);
+                    if (buffer2 != null) {
+                        return polygon.overlaps(buffer2);
+                    }
+                }
+            } else {
+                return polygon.overlaps(polygon2);
+            }
+        }
+        return false;
+    }
+    
+
+//    public static void main(String[] args) throws GeometryException {
+//        String s;
+//        s =  GeometryUtils.formatCoordinate("%-%d\u00B0 %m\u2032 %s\u2033 N", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d\u00B0 %m\u2032 %.0s\u2033 N", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%+%d\u00B0 %m\u2032 %.2s\u2033 N (%4.4D)", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d\u00B0 %m\u2032 N", -39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d\u00B0 %m\u2032 N (%4.4D)", 39.89);
+//        System.out.println(s);
+//        Geometry g = GeometryUtils.createFrom("00000007d50000000100000007d20000002341258d57c2b73acf4150bf008a45b87241258d5eb2faa5364150befedb0f995841258d6aeb851eb84150befbeeb851ec41258d723d70a3d74150bef9d51eb85241258d7e428f5c294150bef677ae147b41258d9d147ae1484150beeea47ae14841258dbc28f5c28f4150bee72ae147ae41258dc7ae147ae14150bee468f5c28f41258dcc6b851eb84150bee31999999a41258dd1666666664150bee18b851eb841258dd8d70a3d714150bedf1d70a3d741258ddea8f5c28f4150bedc951eb85241258de3eb851eb84150bed99ccccccd41258dea3d70a3d74150bed6351eb85241258defbd70a3d74150bed3728f5c2941258df39999999a4150bed1751eb85241258df6c7ae147b4150bed01c28f5c341258df86b851eb84150becf1f5c28f641258dfa1999999a4150becd4666666641258dfb6147ae144150becbc51eb85241258dfd1999999a4150bec9a000000041258dfec28f5c294150bec753d70a3d41258e001eb851ec4150bec2f666666641258e047ae147ae4150beb73147ae1441258e054ccccccd4150beb3bc28f5c341258e054ccccccd4150beb2d70a3d7141258e05947ae1484150beb2047ae14841258e053d70a3d74150beb17333333341258e03a8f5c28f4150beb0e47ae14841258de69999999a4150beaca3d70a3d41258db10f5c28f64150bea46d70a3d741258dabdc28f5c34150bea3928f5c2941258da8dc28f5c34150bea300a3d70a41258da623d70a3d4150bea26147ae1441258da34ccccccd4150bea19d70a3d7");
+//        
+//        System.out.println(g);
+//    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/SpatialIndexFactory.java	(revision 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/GeometryRuntimeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/GeometryRuntimeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/exception/GeometryRuntimeException.java	(revision 46118)
@@ -0,0 +1,18 @@
+
+package org.gvsig.fmap.geom.exception;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class GeometryRuntimeException extends RuntimeException {
+
+    public GeometryRuntimeException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+    
+    public GeometryRuntimeException(Throwable cause) {
+        super(cause);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/GeometryLocator.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/pom.xml	(revision 46118)
@@ -0,0 +1,58 @@
+<?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.344</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>
+      <scope>test</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.util.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <scope>compile</scope>
+    </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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api
___________________________________________________________________
Added: svn:ignore
   + .classpath
target/**
.project
.directory
.settings/**
.settings
target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.fmap.geometry.api</module>
+    <module>org.gvsig.fmap.geometry.jts</module>
+    <module>org.gvsig.fmap.geometry.operation.jts</module>
+  </modules>
+
+  <description>This project contains the geometry library used in gvSIG. </description>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.operation.impl.DefaultGeometryOperationLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/utils/PointGetAngle.java	(revision 46118)
@@ -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.operation.utils;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+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.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)geom2;
+
+		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);
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/impl/DefaultGeometryOperationLibrary.java	(revision 46118)
@@ -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.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.fromwkb.FromWKB;
+import org.gvsig.fmap.geom.operation.fromwkt.FromWKT;
+import org.gvsig.fmap.geom.operation.isCCW.IsCCW;
+import org.gvsig.fmap.geom.operation.offset.Offset;
+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.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(PointDistance.NAME,  new PointDistance(), TYPES.POINT);
+        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);
+        geometryManager.registerGeometryOperation(Offset.NAME, new Offset());
+
+
+        //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);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Equals.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry ){
+            return new Boolean(false);
+        }
+            return new Boolean(geom.equals(otherGeom));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Touches.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry ){
+            return new Boolean(false);
+        }
+
+        try {
+            return new Boolean(geom.touches(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Overlaps.java	(revision 46118)
@@ -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.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;
+
+/**
+ * @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");
+
+        try {
+            return new Boolean(geom.overlaps(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Contains.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry || !otherGeom.getEnvelope().intersects(geom.getEnvelope())){
+            return new Boolean(false);
+        }
+
+        try {
+            return new Boolean(geom.contains(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Crosses.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry){
+			return new Boolean(false);
+		}
+
+        try {
+            return new Boolean(geom.crosses(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Within.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry ){
+            return new Boolean(false);
+        }
+
+        try {
+            return new Boolean(geom.within(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Disjoint.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ *
+ * @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 NullGeometry || geom instanceof NullGeometry ){
+            return new Boolean(false);
+        }
+
+        try {
+            return new Boolean(geom.disjoint(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Intersects.java	(revision 46118)
@@ -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.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.primitive.NullGeometry;
+
+/**
+ * @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 NullGeometry || geom instanceof NullGeometry || !otherGeom.getEnvelope().intersects(geom.getEnvelope())){
+            return new Boolean(false);
+        }
+
+        try {
+            return new Boolean(geom.intersects(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/Out.java	(revision 46118)
@@ -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.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;
+
+/**
+ *
+ * @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");
+
+        try {
+            return new Boolean(geom.out(otherGeom));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/relationship/DefaultRelationshipGeometryOperationContext.java	(revision 46118)
@@ -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);
+	}		
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/JTSGeometryOperationContext.java	(revision 46118)
@@ -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();
+	}
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/tojts/ToJTS.java	(revision 46118)
@@ -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.tojts;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+/*
+ * Deprecated Esta operacion ha quedado obsoleta se mantiene por motivos de compatibilidad con las constantes.
+ */
+public class ToJTS extends GeometryOperation {
+    public static final String NAME = "toJTS";
+    public static final int CODE = GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);
+    protected static final Logger logger = LoggerFactory.getLogger(ToJTS.class);
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation ToJTS");
+        throw new GeometryOperationException(null);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation ToJTS");
+        return CODE;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKB.java	(revision 46118)
@@ -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.operation.fromwkb;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+
+/**
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad con las constantes
+ *
+ * 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);
+
+    protected static final Logger logger = LoggerFactory.getLogger(FromWKB.class);
+
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation FromWKB");
+        throw new GeometryOperationException(null);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation FromWKB");
+        return CODE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkb/FromWKBGeometryOperationContext.java	(revision 46118)
@@ -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);
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/area/Area.java	(revision 46118)
@@ -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.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 {
+
+        try {
+            return new Double(geom.area());
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    public int getOperationIndex() {
+        return CODE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/isCCW/IsCCW.java	(revision 46118)
@@ -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.isCCW;
+
+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;
+
+/**
+ * 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);
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+		try {
+            return new Boolean(geom.isCCW());
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkt/ToWKT.java	(revision 46118)
@@ -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.towkt;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+/*
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad con las constantes
+ *
+ */
+public class ToWKT extends GeometryOperation {
+    public static final String NAME = "toWKT";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+    protected static final Logger logger = LoggerFactory.getLogger(ToWKT.class);
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation ToWKT");
+        throw new GeometryOperationException(null);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation ToWKT");
+        return CODE;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/ensureOrientation/EnsureOrientation.java	(revision 46118)
@@ -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.ensureOrientation;
+
+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;
+
+/**
+ * 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 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."));
+
+		try {
+            return new Boolean(geom.ensureOrientation(bCCW.booleanValue()));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromjts/FromJTS.java	(revision 46118)
@@ -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.geom.operation.fromjts;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.towkt.ToWKT;
+
+/**
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad con las constantes
+ *
+ * <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";
+    public static final int CODE = GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);
+    protected static final Logger logger = LoggerFactory.getLogger(FromJTS.class);
+
+
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation FromJTS");
+        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 {
+        logger.warn("Invoked deprecated operation FromJTS");
+        throw new GeometryOperationException(null);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/offset/Offset.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/offset/Offset.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/offset/Offset.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.offset;
+
+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;
+
+
+/**
+ * This class builds an offset from a geometry and a distance
+ *
+ * @author fdiaz
+ * @version $Id$
+ *
+ */
+public class Offset extends GeometryOperation {
+    public static final String NAME = "offset";
+    private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    public static final int CODE = geomManager.getGeometryOperationCode(NAME);
+
+    /* (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 geom.offset(((Double)ctx.getAttribute("geom")).doubleValue());
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        return CODE;
+        }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBOperationContext.java	(revision 46118)
@@ -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();
+	}
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKBNative.java	(revision 46118)
@@ -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.operation.towkb;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+/*
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad de las constantes
+ */
+public class ToWKBNative extends GeometryOperation {
+    public static final String NAME = "toWKBNative";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+    protected static final Logger logger = LoggerFactory.getLogger(ToWKBNative.class);
+
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation ToWKBNative");
+        throw new GeometryOperationException(null);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation ToWKBNative");
+        return CODE;
+    }
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/towkb/ToWKB.java	(revision 46118)
@@ -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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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;
+
+/*
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad con las constantes
+ *
+ */
+public class ToWKB extends GeometryOperation {
+    public static final String NAME       = "toWKB";
+	public static final int    CODE       =  GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);
+    protected static final Logger logger = LoggerFactory.getLogger(ToWKB.class);
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation ToWKB");
+        throw new GeometryOperationException(null);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation ToWKB");
+        return CODE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKT.java	(revision 46118)
@@ -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.geom.operation.fromwkt;
+
+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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+/**
+ * Deprecated: Esta clase est� obsoleta, se mantiene por compatibilidad con las constantes
+ *
+ * @author jmvivo
+ *
+ */
+public class FromWKT extends GeometryOperation {
+    public static final String NAME = GeometryManager.OPERATIONS.FROMWKT;
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+    protected static final Logger logger = LoggerFactory.getLogger(FromWKT.class);
+
+    /* (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 {
+        logger.warn("Invoked deprecated operation FromWKT");
+        throw new GeometryOperationException(null);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.operation.GeometryOperation#getOperationIndex()
+     */
+    public int getOperationIndex() {
+        logger.warn("Called getOperationIndex method of deprecated operation FromWKT");
+        return CODE;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/FromWKTGeometryOperationContext.java	(revision 46118)
@@ -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);
+	}
+}
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/distance/PointDistance.java	(revision 46118)
@@ -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 org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+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.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 executed between two points");
+		}
+
+		try {
+            return new Double(geom.distance(geom2));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+	}
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/flip/Flip.java	(revision 46118)
@@ -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.flip;
+
+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;
+
+/**
+ * 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);
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+    public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+        try {
+            geom.flip();
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+		return null;
+	}
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perimeter/Perimeter.java	(revision 46118)
@@ -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.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 {
+
+        try {
+            return new Double(geom.perimeter());
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    public int getOperationIndex() {
+        return CODE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/Perpendicular.java	(revision 46118)
@@ -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;
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPointOperationContext.java	(revision 46118)
@@ -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));
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVector.java	(revision 46118)
@@ -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;
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularOperationContext.java	(revision 46118)
@@ -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);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/PerpendicularPoint.java	(revision 46118)
@@ -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;
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/src/main/java/org/gvsig/fmap/geom/operation/perpendicular/UnitVectorOperationContext.java	(revision 46118)
@@ -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);
+    }   
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts/pom.xml	(revision 46118)
@@ -0,0 +1,24 @@
+<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.fmap.geometry.operation.jts</artifactId>
+  <name>${project.artifactId}</name>
+  <description>Contains the implementation (based in JTS) of some operations of geometries.</description>
+
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.fmap.geometry</artifactId>
+    <version>2.0.344</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation.jts
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.jts.DefaultGeometryLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/UnmovableHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/UnmovableHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/UnmovableHandler.java	(revision 46118)
@@ -0,0 +1,82 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+import com.vividsolutions.jts.geom.Point;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.handler.AbstractHandler;
+
+
+/**
+ * This class is for snapping purposes only, don't allows modify the geometries.
+ *
+ * @author fdiaz
+ *
+ */
+public class UnmovableHandler extends AbstractHandler {
+
+    protected static final Logger logger = LoggerFactory.getLogger(UnmovableHandler.class);
+
+    public UnmovableHandler(java.awt.geom.Point2D p) {
+        super();
+        point = p;
+    }
+
+    public UnmovableHandler(Point p) {
+        super();
+        point = new java.awt.geom.Point2D.Double(p.getX(), p.getY());
+        ;
+    }
+
+    public UnmovableHandler(double x, double y) {
+        super();
+        point = new java.awt.geom.Point2D.Double(x, y);
+        ;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.handler.Handler#move(double, double)
+     */
+    public void move(double x, double y) {
+        String message = "Can't move the coordinates of a UnmovableHandler.";
+        logger.info(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
+     */
+    public void set(double x, double y) {
+        String message = "Can't change the coordinates of a UnmovableHandler.";
+        logger.info(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/PrimitiveListPathIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/PrimitiveListPathIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/PrimitiveListPathIterator.java	(revision 46118)
@@ -0,0 +1,79 @@
+/*
+ * 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.jts.complex;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+/**
+ *
+ * @author fdiaz
+ */
+class PrimitiveListPathIterator extends GeneralPathXIterator {
+    
+    /** Transform applied on the coordinates during iteration */
+    private final AffineTransform at;
+    /** True when the point has been read once */
+    private boolean done;
+    private int index = 0;
+    private final List<PathIterator> iterators;
+    private final List<Geometry> geometries;
+
+    /**
+     * Creates a new PointIterator object.
+     *
+     * @param at
+     *            The affine transform applied to coordinates during
+     *            iteration
+     */
+    public PrimitiveListPathIterator(List<Geometry> geometries, AffineTransform at) {
+        super(new GeneralPathX());
+        this.geometries = geometries;
+        this.iterators = new ArrayList<>(geometries.size());
+        if (at == null) {
+            at = new AffineTransform();
+        }
+        this.at = at;
+        for (Iterator iterator = geometries.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            iterators.add(primitive.getPathIterator(at));
+        }
+        done = false;
+    }
+
+    public int getWindingRule() {
+        return PathIterator.WIND_EVEN_ODD;
+    }
+
+    public void next() {
+        PathIterator pathIteratorPrimitive = iterators.get(index);
+        pathIteratorPrimitive.next();
+        if (pathIteratorPrimitive.isDone()) {
+            index++;
+            done = (index == geometries.size());
+        }
+    }
+
+    public boolean isDone() {
+        return done;
+    }
+
+    public int currentSegment(double[] coords) {
+        return iterators.get(index).currentSegment(coords);
+    }
+
+    public int currentSegment(float[] coords) {
+        return iterators.get(index).currentSegment(coords);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/DefaultComplex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/DefaultComplex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/complex/DefaultComplex.java	(revision 46118)
@@ -0,0 +1,398 @@
+/*
+ * 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.jts.complex;
+
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+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.complex.Complex;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.jts.AbstractGeometry;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.aggregate.AbstractAggregate;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+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.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class DefaultComplex extends AbstractGeometry implements Complex {
+
+    private final ArrayList<Primitive> primitives;
+
+    public DefaultComplex(GeometryType geomType) {
+        super(geomType.getType(), geomType.getSubType());
+        primitives = new ArrayList<>();
+    }
+    
+    /**
+     * @param subtype
+     */
+    public DefaultComplex(int subtype) {
+        super(Geometry.TYPES.GEOMETRY, subtype);
+        primitives = new ArrayList<>();
+    }
+
+
+    @Override
+    public int getPrimitivesNumber() {
+        return primitives.size();
+    }
+
+    @Override
+    public Primitive getPrimitiveAt(int i) {
+        return primitives.get(i);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform affineTransform) {
+        PrimitiveListPathIterator it = new PrimitiveListPathIterator((List)this.primitives, affineTransform);
+        return it;
+    }
+
+    @Override
+    public Iterator<Geometry> iterator() {
+        return new Iterator<Geometry>() {
+
+            private int current = 0;
+
+            @Override
+            public boolean hasNext() {
+                return (current < getPrimitivesNumber());
+            }
+
+            @Override
+            public Geometry next() {
+                return getPrimitiveAt(current++);
+            }
+        };
+    }
+
+
+    @Override
+    public void ensureCapacity(int capacity) {
+        primitives.ensureCapacity(capacity);
+    }
+
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        for (Primitive primitive : primitives) {
+            primitive.reProject(ct);
+        }
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        for (Primitive primitive : primitives) {
+            primitive.transform(at);
+        }
+    }
+
+
+    @Override
+    public boolean is3D() {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (primitive.is3D()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return new DefaultGeneralPathX(getPathIterator(null),false,0);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if(super.equals(obj) && obj instanceof AbstractAggregate){
+            AbstractAggregate other = (AbstractAggregate)obj;
+            if(other.getPrimitivesNumber() == this.getPrimitivesNumber()){
+                for (int j = 0; j < this.getPrimitivesNumber(); j++) {
+                    if(!this.getPrimitiveAt(j).equals(other.getPrimitiveAt(j))){
+                        return false;
+                    }
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 41 * hash + Objects.hashCode(this.primitives);
+        return hash;
+    }
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (!primitive.canBeTransformed(at)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (!primitive.canBeReprojected(ct)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+            ((GeometryJTS)iterator.next()).flip();
+        }
+        Collections.reverse(primitives);
+    }
+
+    @Override
+    public void addPrimitive(Primitive primitive) {
+        Geometry geom = fixPrimitive(primitive);
+        if (geom != null) {
+            if (geom instanceof MultiPrimitive) {
+                for (int i = 0; i < ((MultiPrimitive) geom).getPrimitivesNumber(); i++) {
+                    addPrimitive(((MultiPrimitive) geom).getPrimitiveAt(i));
+                }
+            } else {
+                primitives.add((Primitive) geom);
+            }
+        }
+    }
+
+    @Override
+    public void addPrimitives(Aggregate aggregate) {
+        for (Geometry primitive : aggregate) {
+            this.addPrimitive((Primitive) primitive);
+        }
+    }
+
+    @Override
+    public void addPrimitives(Geometry geometry) {
+        if(geometry instanceof Primitive){
+            addPrimitive((Primitive) geometry);
+        } else {
+            addPrimitives((Aggregate)geometry);
+        }
+    }
+
+    private Geometry fixPrimitive(Primitive primitive) {
+        //FIXME: check subtype and projection
+        return primitive;
+    }
+    
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        DefaultComplex other = new DefaultComplex(this.getGeometryType().getSubType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        DefaultComplex other = new DefaultComplex(this.getGeometryType().getSubType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.offset(distance));
+        }
+        return other;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        DefaultComplex other = new DefaultComplex(this.getGeometryType().getSubType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.offset(joinStyle, distance));
+        }
+        return other;
+    }
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        GeometryFactory gf = new GeometryFactory();
+        List<com.vividsolutions.jts.geom.Geometry> geometries = new ArrayList<>();
+        for (Primitive primitive : primitives) {
+            geometries.add(((GeometryJTS)primitive).getJTS());
+        }
+        GeometryCollection col = gf.createGeometryCollection(geometries.toArray(new com.vividsolutions.jts.geom.Geometry[geometries.size()]));
+        return col;
+    }
+
+    @Override
+    public Geometry cloneGeometry() {
+        DefaultComplex other = new DefaultComplex(this.getGeometryType().getSubType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.cloneGeometry());
+        }
+        return other;
+    }
+
+    @Override
+    public int getDimension() {
+        return this.getGeometryType().getDimension();
+    }
+
+    @Override
+    public Handler[] getHandlers(int type) {
+        List<Handler> handlers = new ArrayList<>();
+        for (Primitive primitive : primitives) {
+            Handler[] primitiveHandlers = primitive.getHandlers(type);
+            handlers.addAll(Arrays.asList(primitiveHandlers));
+        }
+        return handlers.toArray(new Handler[handlers.size()]);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint res = GeometryLocator.getGeometryManager().createMultiPoint(this.getGeometryType().getSubType());
+        res.setProjection(this.getProjection());
+        for (Primitive primitive : primitives) {
+            MultiPoint points = primitive.toPoints();
+            for (Geometry point : points) {
+                res.addPrimitives(point);
+            }
+        }
+        return res;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine res = GeometryLocator.getGeometryManager().createMultiLine(this.getGeometryType().getSubType());
+        res.setProjection(this.getProjection());
+        for (Primitive primitive : primitives) {
+            MultiLine geometries = primitive.toLines();
+            for (Geometry geom : geometries) {
+                res.addPrimitives(geom);
+            }
+        }
+        return res;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon res = GeometryLocator.getGeometryManager().createMultiPolygon(this.getGeometryType().getSubType());
+        res.setProjection(this.getProjection());
+        for (Primitive primitive : primitives) {
+            MultiPolygon geometries = primitive.toPolygons();
+            for (Geometry geom : geometries) {
+                res.addPrimitives(geom);
+            }
+        }
+        return res;
+    }
+
+    @Override
+    public Collection<? extends Geometry> getElements() {
+        return this.primitives;
+    }
+
+    @Override
+    public Iterator<Geometry> iterator(Predicate<Geometry> filter) {
+        Iterator<Geometry> it = this.iterator();
+        return new Iterator<Geometry>() {
+
+            Geometry next = null;
+            
+            @Override
+            public boolean hasNext() {
+                while (it.hasNext()) {
+                    next = it.next();
+                    if(filter.test(next)){
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+            @Override
+            public Geometry next() {
+                return next;
+            }
+        };
+    }
+    
+    @Override
+    public Aggregate createAggregate(int type, Predicate<Geometry> filter) throws CreateGeometryException {
+        MultiPrimitive aggregate = (MultiPrimitive) GeometryLocator.getGeometryManager().create(type, this.getGeometryType().getSubType());
+        for (Primitive primitive : primitives) {
+            if(filter.test(primitive)){
+                aggregate.addPrimitives(primitive);
+            }
+        }
+        return aggregate;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.getPrimitivesNumber() < 1;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2DM.java	(revision 46118)
@@ -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.jts.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Geometry2DM extends DefaultNullGeometry{
+
+	/**
+     *
+     */
+    private static final long serialVersionUID = 7950191737089235519L;
+
+
+    public Geometry2DM(GeometryType geometryType) {
+		super(geometryType);
+		throw new InstantiationError("Can't instantiate generic geometry 2DM.");
+	}
+
+
+	public int getDimension() {
+	    return 3;
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3DM.java	(revision 46118)
@@ -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.jts.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Geometry3DM extends DefaultNullGeometry{
+
+	/**
+     *
+     */
+    private static final long serialVersionUID = -883745869302295736L;
+
+
+    public Geometry3DM(GeometryType geometryType) {
+		super(geometryType);
+		throw new InstantiationError("Can't instantiate generic geometry 3DM.");
+	}
+
+
+	public int getDimension() {
+	    return 4;
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2DM.java	(revision 46118)
@@ -0,0 +1,167 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.ring;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ring;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ring2DM extends BaseLine2DM implements Ring {
+
+    /**
+     * @param subtype
+     */
+    public Ring2DM() {
+        super(Geometry.TYPES.RING);
+    }
+
+    /**
+     *
+     */
+    public Ring2DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.RING, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Ring2DM(cloneCoordinates().toCoordinateArray());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        multiLine.addPrimitive(new Line2DM(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        multiPolygon.addPrimitive(new Polygon2DM(coordinates.toCoordinateArray()));
+        return multiPolygon;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSLinearRing(coordinates);
+    }
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring2DM(coords);
+      }
+
+      public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring2DM(coords);
+      }
+
+
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Ring2DM){
+              Ring2DM other = (Ring2DM)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumVertices(); i++){
+                  if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                      return false;
+                  };
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3DM.java	(revision 46118)
@@ -0,0 +1,179 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.ring;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ring;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ring3DM extends BaseLine3DM implements Ring {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1826148807887112314L;
+
+    /**
+     */
+    public Ring3DM() {
+        super(Geometry.TYPES.RING);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Ring3DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.RING, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Ring3DM(cloneCoordinates().toCoordinateArray());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        multiLine.addPrimitive(new Line3DM(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        multiPolygon.addPrimitive(new Polygon3DM(coordinates.toCoordinateArray()));
+        return multiPolygon;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSLinearRing(coordinates);
+    }
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring3DM(coords);
+      }
+
+      public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring3DM(coords);
+      }
+
+
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Ring3DM){
+              Ring3DM other = (Ring3DM)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumVertices(); i++){
+                  Coordinate coordinate = this.coordinates.get(i);
+                  Coordinate otherCoordinate = other.coordinates.get(i);
+                  if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                      return false;
+                  }
+                  if (otherCoordinate.getOrdinate(3) != coordinate.getOrdinate(3)) {
+                      return false;
+                  }
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring2D.java	(revision 46118)
@@ -0,0 +1,150 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.ring;
+
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ring;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ring2D extends BaseLine2D implements Ring {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6640426694359410404L;
+
+    /**
+     * @param subtype
+     */
+    public Ring2D() {
+        super(Geometry.TYPES.RING);
+    }
+
+    /**
+     *
+     */
+    public Ring2D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.RING, coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Ring2D(cloneCoordinates().toCoordinateArray());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        multiLine.addPrimitive(new Line2D(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        multiPolygon.addPrimitive(new Polygon2D(coordinates.toCoordinateArray()));
+        return multiPolygon;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        closePrimitive();
+        return JTSUtils.createJTSLinearRing(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring2D(coords);
+      }
+
+      public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring2D(coords);
+      }
+
+
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          if (coordinates.size()>=2 && !isClosed(0)) {
+              forceClose(0);
+          }
+      }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/ring/Ring3D.java	(revision 46118)
@@ -0,0 +1,171 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.ring;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ring;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ring3D extends BaseLine3D implements Ring {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 9116088317343114306L;
+
+    /**
+     */
+    public Ring3D() {
+        super(Geometry.TYPES.RING);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Ring3D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.RING, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Ring3D(cloneCoordinates().toCoordinateArray());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        multiLine.addPrimitive(new Line3D(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        multiPolygon.addPrimitive(new Polygon3D(coordinates.toCoordinateArray()));
+        return multiPolygon;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSLinearRing(coordinates);
+    }
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring3D(coords);
+      }
+
+      public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          com.vividsolutions.jts.geom.LinearRing jtsRing = (LinearRing) getJTS();
+          GeometryFactory factory = jtsRing.getFactory();
+          BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+
+          OffsetCurveBuilder ocb = new OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+
+          Coordinate[] coordinates = jtsRing.getCoordinates();
+          Coordinate[] coords = ocb.getRingCurve(coordinates, Position.LEFT, distance); // .getOffsetCurve(coordinates,
+
+          return new Ring3D(coords);
+      }
+
+
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Ring3D){
+              Ring3D other = (Ring3D)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumVertices(); i++){
+                  Coordinate coordinate = this.coordinates.get(i);
+                  Coordinate otherCoordinate = other.coordinates.get(i);
+                  if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                      return false;
+                  }
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry2D.java	(revision 46118)
@@ -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.jts.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 = 8796323789441506835L;
+
+
+    public Geometry2D(GeometryType geometryType) {
+		super(geometryType);
+		throw new InstantiationError("Can't instantiate generic geometry 2D.");
+	}
+
+
+	public int getDimension() {
+	    return 2;
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultEnvelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultEnvelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultEnvelope.java	(revision 46118)
@@ -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.fmap.geom.jts.primitive;
+
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import org.cresques.cts.IProjection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+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.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.EnvelopeNotInitializedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+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
+ */
+@SuppressWarnings("UseSpecificCatch")
+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 IProjection projection;
+
+    private com.vividsolutions.jts.geom.Polygon jtsGeom = null;
+
+    protected static GeometryManager manager = GeometryLocator.getGeometryManager();
+
+    public DefaultEnvelope(){
+        super();
+        isEmpty = true;
+    }
+
+    public DefaultEnvelope(IProjection projection){
+        this();
+        this.projection = projection;
+    }
+
+    public DefaultEnvelope(Point min, Point max, IProjection projection){
+        super();
+        this.min = min;
+        this.max = max;
+        isEmpty = false;
+        this.projection = projection;
+    }
+
+    public String toString() {
+        if( this.isEmpty ) {
+            return "POLYGON()";
+        }
+        // Para el 3D estaria mal ya que probablemente habria que devolber un cubo.
+        StringBuilder builder = new StringBuilder();
+        builder.append("POLYGON ((");
+        builder.append(this.min.getX());
+        builder.append(" ");
+        builder.append(this.min.getY());
+        builder.append(", ");
+        builder.append(this.min.getX());
+        builder.append(" ");
+        builder.append(this.max.getY());
+        builder.append(", ");
+        builder.append(this.max.getX());
+        builder.append(" ");
+        builder.append(this.max.getY());
+        builder.append(", ");
+        builder.append(this.max.getX());
+        builder.append(" ");
+        builder.append(this.min.getY());
+        builder.append(", ");
+        builder.append(this.min.getX());
+        builder.append(" ");
+        builder.append(this.min.getY());
+        builder.append("))");
+        return builder.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 {
+            // point?
+            if (this.min.getX() == this.max.getX() && this.min.getY() == this.max.getY()) {
+                Point point = this.min.clone();
+                point.setProjection(projection);
+                return point;
+            }
+            // vertical or horizontal line?
+            if (this.min.getX() == this.max.getX() ||
+                this.min.getY() == this.max.getY()) {
+                Line line = manager.createLine(SUBTYPES.GEOM2D);
+                line.addVertex(min.clone());
+                line.addVertex(max.clone());
+                line.setProjection(projection);
+                return line;
+            }
+            Polygon polygon = manager.createPolygon(SUBTYPES.GEOM2D);
+            polygon.addVertex(min.clone());
+            polygon.addVertex(manager.createPoint(getMaximum(0),getMinimum(1), SUBTYPES.GEOM2D));
+            polygon.addVertex(max.clone());
+            polygon.addVertex(manager.createPoint(getMinimum(0),getMaximum(1), SUBTYPES.GEOM2D));
+            polygon.addVertex(min.clone());
+            polygon.setProjection(projection);
+            return polygon;
+        } catch (Exception e) {
+            LOG.warn("Error creting the geometry from envelope", 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;
+        }
+        this.min.setProjectionIffNull(projection);
+        jtsGeom = null;
+    }
+
+    /* (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;
+        }
+        this.max.setProjectionIffNull(projection);        
+        jtsGeom = null;
+    }
+
+    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;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return isEmpty;
+    }
+
+    @Override
+    public void add(Geometry geometry) {
+        if( geometry==null ) {
+            return;
+        }
+        this.add(geometry.getEnvelope());
+    }
+
+    @Override
+    public void clear() {
+        isEmpty = true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#intersects(org.gvsig.fmap.geom.Geometry)
+     */
+    @Override
+    public boolean intersects(Geometry geometry) {
+        if(geometry instanceof GeometryJTS){
+            return getJTS().intersects(((GeometryJTS)geometry).getJTS());
+        }
+        return false;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Envelope#centerTo(org.gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    public void centerTo(Point p) {
+
+        try {
+            Point loweCorner = manager.createPoint(p.getX() - this.getLength(DIMENSIONS.X)/2,
+                p.getY() - this.getLength(DIMENSIONS.Y)/2,
+                    SUBTYPES.GEOM2D);
+            Point upperCorner = manager.createPoint(p.getX() + this.getLength(DIMENSIONS.X)/2,
+                p.getY() + this.getLength(DIMENSIONS.Y)/2,
+                    SUBTYPES.GEOM2D);
+
+            this.setLowerCorner(loweCorner);
+            this.setUpperCorner(upperCorner);
+        } catch (CreateGeometryException e) {
+            LOG.error("Error creating corners to center the envelope", e);
+        }
+    }
+
+    private com.vividsolutions.jts.geom.Geometry getJTS() {
+        if (jtsGeom == null) {
+            ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+            coordinates.add(new com.vividsolutions.jts.geom.Coordinate(min.getX(), min.getY()));
+            coordinates.add(new com.vividsolutions.jts.geom.Coordinate(getMaximum(0), getMinimum(1)));
+            coordinates.add(new com.vividsolutions.jts.geom.Coordinate(max.getX(), max.getY()));
+            coordinates.add(new com.vividsolutions.jts.geom.Coordinate(getMinimum(0), getMaximum(1)));
+            coordinates.add(new com.vividsolutions.jts.geom.Coordinate(min.getX(), min.getY()));
+            jtsGeom = JTSUtils.createJTSPolygon(coordinates);
+        }
+        return jtsGeom;
+    }
+
+    @Override
+    public IProjection getProjection() {
+        return this.projection;
+    }
+
+    @Override
+    public void setProjectionIffNull(IProjection projection) {
+        if (this.projection == null) {
+            this.projection = projection;
+        }
+    }
+
+    @Override
+    public void setProjection(IProjection projection) {
+        this.projection = projection;
+    }
+
+    @Override
+    public boolean isCollapsed() {
+        switch(this.getDimension()) {
+            case 3:
+                return this.isCollapsed(Geometry.SUBTYPES.GEOM3D);
+            default:
+            case 2:
+                return this.isCollapsed(Geometry.SUBTYPES.GEOM2D);
+        }
+    }
+    
+    @Override
+    public boolean isCollapsed(int subtype) {
+        if( this.isEmpty ) {
+            return true;
+        }
+        switch(subtype) {
+            case Geometry.SUBTYPES.GEOM3DM:
+                int m = this.getDimension()-1;
+                if( this.getLength(m)!=0 ) {
+                    return false;
+                }
+            case Geometry.SUBTYPES.GEOM2DM:
+            case Geometry.SUBTYPES.GEOM3D:
+                if( this.getLength(DIMENSIONS.Z)!=0 ) {
+                    return false;
+                }
+            default:
+            case Geometry.SUBTYPES.GEOM2D:
+                if( this.getLength(DIMENSIONS.X)!=0 ) {
+                    return false;
+                }
+                if( this.getLength(DIMENSIONS.Y)!=0 ) {
+                    return false;
+                }
+                return true;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Geometry3D.java	(revision 46118)
@@ -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.jts.primitive;
+
+import org.gvsig.fmap.geom.type.GeometryType;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class Geometry3D extends DefaultNullGeometry{
+
+	/**
+     *
+     */
+    private static final long serialVersionUID = 5734600050336847416L;
+
+
+    public Geometry3D(GeometryType geometryType) {
+		super(geometryType);
+		throw new InstantiationError("Can't instantiate generic geometry 3D.");
+	}
+
+
+	public int getDimension() {
+	    return 3;
+	}
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope2D.java	(revision 46118)
@@ -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.geom.jts.primitive;
+
+import org.cresques.cts.CoordTransRuntimeException;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+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 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, IProjection projection) {
+            super(min, max, projection);
+    }
+
+    public Envelope2D(double minX,double minY,double maxX, double maxY, IProjection projection){
+            this(new Point2D(minX, minY), new Point2D(maxX, maxY), projection);
+    }
+
+    /**
+     * @param bounds
+     */
+    public Envelope2D(com.vividsolutions.jts.geom.Geometry bounds) {
+        this();
+        com.vividsolutions.jts.geom.Envelope envelope = bounds.getEnvelope().getEnvelopeInternal();
+        setLowerCorner(new Point2D(envelope.getMinX(), envelope.getMinY()));
+        setUpperCorner(new Point2D(envelope.getMaxX(), envelope.getMaxY()));
+    }
+
+    /**
+     * @param envelope
+     */
+    public Envelope2D(com.vividsolutions.jts.geom.Envelope envelope, IProjection projection) {
+        this(new Point2D(envelope.getMinX(),envelope.getMinY()), new Point2D(envelope.getMaxX(),envelope.getMaxY()), projection);
+    }
+
+    /* (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(), this.projection);
+	    }
+
+	    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.0625 * (getMaximum(0) - xmin);
+	    double step_h = 0.125 * (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.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
+        java.awt.geom.Point2D res_max = new java.awt.geom.Point2D.Double(
+            Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
+
+        int added = 0;
+	    for (int i=0; i<=16; i++) {
+	        for (int j=0; j<=8; 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 (!Double.isInfinite(sample_trans.getX()) && sample_trans.getX() > res_max.getX()) {
+	                    res_max.setLocation(sample_trans.getX(), res_max.getY());
+	                    added++;
+	                }
+                    if (!Double.isInfinite(sample_trans.getX()) && sample_trans.getX() < res_min.getX()) {
+                        res_min.setLocation(sample_trans.getX(), res_min.getY());
+                        added++;
+                    }
+	                // Y
+                    if (!Double.isInfinite(sample_trans.getY()) && sample_trans.getY() > res_max.getY()) {
+                        res_max.setLocation(res_max.getX(), sample_trans.getY());
+                        added++;
+                    }
+                    if (!Double.isInfinite(sample_trans.getY()) && sample_trans.getY() < res_min.getY()) {
+                        res_min.setLocation(res_min.getX(), sample_trans.getY());
+                        added++;
+                    }
+	        }
+	    }
+
+	    if (added == 0) {
+	        logger.warn("Unable to reproject envelope with transf: " + trans.toString());
+            Point min = (Point) this.getLowerCorner().cloneGeometry();
+            Point max = (Point) this.getUpperCorner().cloneGeometry();
+            min.reProject(trans);
+            max.reProject(trans);
+	        return new Envelope2D(min,max, trans.getPDest());
+	    }
+
+		return new Envelope2D(
+		    res_min.getX(),
+		    res_min.getY(),
+		    res_max.getX(),
+		    res_max.getY(),
+                trans.getPDest());
+	}
+
+	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)));
+            }
+        }
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/Envelope3D.java	(revision 46118)
@@ -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.jts.primitive;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+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(IProjection projection) {
+        super(projection);
+    }
+
+    public Envelope3D(Point min, Point max, IProjection projection) {
+        super(min, max, projection);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Envelope3D(Coordinate[] coordinates) {
+        double minx = Double.POSITIVE_INFINITY;
+        double miny = Double.POSITIVE_INFINITY;
+        double minz = Double.POSITIVE_INFINITY;
+
+        double maxx = Double.NEGATIVE_INFINITY;
+        double maxy = Double.NEGATIVE_INFINITY;
+        double maxz = Double.NEGATIVE_INFINITY;
+
+        double x;
+        double y;
+        double z;
+
+        for (int i = 0; i < coordinates.length; i++) {
+            x = coordinates[i].x;
+            y = coordinates[i].x;
+            z = coordinates[i].x;
+            minx = Math.min(x, minx);
+            miny = Math.min(y, miny);
+            minz = Math.min(z, minz);
+            maxx = Math.max(x, maxx);
+            maxy = Math.max(y, maxy);
+            maxz = Math.max(z, maxz);
+        }
+
+        if (minx <= maxx && miny <= maxy && minz <= maxz) {
+            min = new Point3D(minx, miny, minz);
+            max = new Point3D(maxx, maxy, maxz);
+            isEmpty = false;
+        } else {
+            isEmpty = true;
+        }
+    }
+
+    /*
+     * (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 Envelope3D(this.getLowerCorner(), this.getUpperCorner(), this.projection);
+        }
+
+        // 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 Point3D(res_min.getX(), res_min.getY(), this.min.getCoordinateAt(2)), 
+                new Point3D(res_max.getX(), res_max.getY(), this.max.getCoordinateAt(2)),
+        trans.getPDest());
+    }
+
+    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 Point3D(0, 0, 0);
+        this.max = new Point3D(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)));
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2DZ.java	(revision 46118)
@@ -0,0 +1,213 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.arc;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.geom.PathIterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Arc2DZ extends AbstractArc {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5691008010954470053L;
+    private double zValue = Double.NaN;
+
+    /**
+     * @param subtype
+     */
+    public Arc2DZ() {
+        super(Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /*
+     * (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 startAngle, double angleExt) {
+        center = fixPoint(center);
+
+        init = new Point3D(
+                center.getX()+radius*Math.cos(startAngle),
+                center.getY()+radius*Math.sin(startAngle),
+                ((Point3D) center).getZ()
+                );
+        
+        double midAngle = startAngle+angleExt/2;
+        middle = new Point3D(
+                center.getX()+radius*Math.cos(midAngle),
+                center.getY()+radius*Math.sin(midAngle),
+                ((Point3D) center).getZ()
+                );
+        
+        end = new Point3D(
+                center.getX()+radius*Math.cos(startAngle+angleExt),
+                center.getY()+radius*Math.sin(startAngle+angleExt),
+                ((Point3D) center).getZ()
+                );
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Arc#getCenterPoint()
+     */
+    public Point getCenterPoint() {
+        ((PointJTS) init).getJTS();
+        Point3D center = new Point3D(this.getProjection(), JTSUtils.getCircumcentre(init, middle, end));
+        return center;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Arc2DZ arc2D = new Arc2DZ();
+        arc2D.setPoints((Point)init.cloneGeometry(), (Point)middle.cloneGeometry(), (Point)end.cloneGeometry());
+        return arc2D;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            Point3D point3D = (Point3D) point;
+            if (Double.isNaN(zValue) && !(Double.isNaN(point3D.getZ()))) {
+                zValue = point3D.getZ();
+                if (init!=null) {
+                    ((Point3D) init).setZ(zValue);
+                }
+                if (middle!=null) {
+                    ((Point3D) middle).setZ(zValue);
+                }
+                if (end!=null) {
+                    ((Point3D) end).setZ(zValue);
+                }
+                return point3D;
+            }
+        }
+        return new Point3D(point.getX(), point.getY(), Double.isNaN(zValue)?0:zValue);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                coordinates.add(new Coordinate(coords[4], coords[5], zValue));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add(coordinates.get(0));
+                break;
+            }
+            pi.next();
+        }
+        return JTSUtils.createJTSLineString(coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point3D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/AbstractArc.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/AbstractArc.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/AbstractArc.java	(revision 46118)
@@ -0,0 +1,411 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.arc;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import org.cresques.cts.CoordTransRuntimeException;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.AbstractCurve;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.UtilFunctions;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Arc;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractArc extends AbstractCurve implements Arc {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 454301669807892457L;
+
+    /**
+     * @param subtype
+     */
+    protected AbstractArc(int subtype) {
+        super(Geometry.TYPES.ARC, subtype);
+    }
+
+    protected Point init;
+
+    /**
+     * This is the middle point (belongs to the arc), not the center
+     * of the circle/ellipse
+     */
+    protected Point middle;
+    protected Point end;
+
+
+    @Override
+    public void setPoints(Point initialPoint, Point endPoint) {
+        String message = "Calling deprecated method setPoints of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public double getCoordinateAt(int index, int dimension) {
+        String message = "Calling deprecated method getCoordinateAt of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        String message = "Calling deprecated method setCoordinateAt of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(Point point) {
+        String message = "Calling deprecated method addVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y) {
+        String message = "Calling deprecated method addVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Calling deprecated method addVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeVertex(int index) {
+        String message = "Calling deprecated method removeVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Point getVertex(int index) {
+        String message = "Calling deprecated method getVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public int getNumVertices() {
+        String message = "Calling deprecated method getNumVertices of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        String message = "Calling deprecated method insertVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setVertex(int index, Point p) {
+        String message = "Calling deprecated method setVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        String message = "Calling deprecated method setGeneralPath of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addMoveToVertex(Point point) {
+        String message = "Calling deprecated method addMoveToVertex of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void closePrimitive() {
+        String message = "Calling deprecated method closePrimitive of a arc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        // TODO Auto-generated method stub
+        return this;
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        try {
+        init.reProject(ct);
+        middle.reProject(ct);
+        end.reProject(ct);
+        this.setProjection(ct.getPDest());
+        } catch (CoordTransRuntimeException e){
+            //Si ha fallado la reproyecci�n de alguno de los puntos, ponemos todas las coordenadas a 0
+            init.setX(0);
+            init.setY(0);
+            middle.setX(0);
+            middle.setY(0);
+            end.setX(0);
+            end.setY(0);
+        }
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        init.transform(at);
+        middle.transform(at);
+        end.transform(at);
+    }
+
+    @Override
+    public int getDimension() {
+        return init.getDimension();
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    @Override
+    public boolean is3D() {
+        return ((PointJTS)init).is3D();
+    }
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+    @Override
+    public void setPoints(Point startPoint, Point midPoint, Point endPoint) {
+        init = fixPoint(startPoint);
+        middle = fixPoint(midPoint);
+        end = fixPoint(endPoint);
+    }
+
+    @Override
+    public Point getInitPoint() {
+        return init;
+    }
+
+    @Override
+    public Point getEndPoint() {
+        return end;
+    }
+
+    @Override
+    public Point getMiddlePoint() {
+        return middle;
+    }
+
+    /**
+     * Leaves the angle between PI and -PI
+     * @param angle (radians)
+     * @return
+     */
+    protected double normalizeAngle(double angle) {
+        return Math.IEEEremainder(angle, 2*Math.PI);
+    }
+
+    @Override
+    public void setPointsStartExt(Point center, double radius, double startAngle, double angleExt) {
+        setPoints(center, radius, startAngle, angleExt);
+    }
+
+    @Override
+    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;
+            
+            // clockwise
+            // ang_ext must be positive
+            if (norm_end < 0){
+                norm_end = 2*Math.PI+norm_end;
+            }
+            if (norm_start < 0) {
+                norm_start = 2*Math.PI+norm_start;
+            }
+            ang_ext = norm_end - norm_start;
+            if (ang_ext < 0) {
+                ang_ext = 2*Math.PI+ang_ext;
+                
+            }
+            
+            // finally call other method with ang_ext
+            setPointsStartExt(center, radius, startAngle, ang_ext);
+
+        }
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+
+       GeneralPathX gp = new DefaultGeneralPathX(getPathIterator(null, getManager().getFlatness()), is3D(), 0.0);
+        return gp;
+    }
+
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        return getPathIterator(at, getManager().getFlatness());
+    }
+
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+
+        java.awt.geom.Point2D.Double p1 = new java.awt.geom.Point2D.Double(init.getX(), init.getY());
+        java.awt.geom.Point2D.Double p2 = new java.awt.geom.Point2D.Double(middle.getX(), middle.getY());
+        java.awt.geom.Point2D.Double p3 = new java.awt.geom.Point2D.Double(end.getX(), end.getY());
+
+        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).");
+        }
+
+        return arco.getPathIterator(at, flatness);
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Point aux = init;
+        init = end;
+        end = aux;
+    }
+
+
+    @Override
+    public double getStartAngle() {
+        return GeometryUtils.calculateAngle(getCenterPoint(), getInitPoint());
+//        return getAngle(getCenterPoint(), getInitPoint());
+    }
+
+    @Override
+    public double getEndAngle() {
+        return GeometryUtils.calculateAngle(getCenterPoint(), getEndPoint());
+    }
+
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // TODO Auto-generated method stub
+        Point center = getCenterPoint();
+        double radius = center.distance(init);
+        double scale = (radius+distance)/radius;
+        AffineTransform at = getScaleAffineTransform(center, scale);
+        Geometry cloned = this.cloneGeometry();
+        cloned.transform(at);
+        return cloned;
+    }
+    
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+    protected AffineTransform getScaleAffineTransform(Point center, Double scale)
+        throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+
+        AffineTransform translate =
+            AffineTransform
+                .getTranslateInstance(-center.getX(), -center.getY());
+
+        AffineTransform scaleTransform = AffineTransform.getScaleInstance(scale,scale);
+
+        AffineTransform inverseTranslate =
+            AffineTransform.getTranslateInstance(center.getX(), center.getY());
+        AffineTransform at = new AffineTransform(translate);
+
+        at.preConcatenate(scaleTransform);
+        at.preConcatenate(inverseTranslate);
+        return at;
+    }
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return false;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return false;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Arc2D other = new Arc2D();
+        other.setProjection(this.getProjection());
+        Point clonedInit = (Point)init.force2D();
+        Point clonedMiddle = (Point)middle.force2D();
+        Point clonedEnd = (Point)end.force2D();
+        other.setPoints(clonedInit, clonedMiddle, clonedEnd);
+        return other;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2D.java	(revision 46118)
@@ -0,0 +1,196 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.arc;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.geom.PathIterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Arc2D extends AbstractArc {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3414562338763885954L;
+
+    /**
+     * @param subtype
+     */
+    public Arc2D() {
+        super(Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /* (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 startAngle, double angleExt) {
+
+        init = new Point2D(
+                center.getX()+radius*Math.cos(startAngle),
+                center.getY()+radius*Math.sin(startAngle)
+                );
+        
+        double midAngle = startAngle+angleExt/2;
+        middle = new Point2D(
+                center.getX()+radius*Math.cos(midAngle),
+                center.getY()+radius*Math.sin(midAngle)
+                );
+        
+        end = new Point2D(
+                center.getX()+radius*Math.cos(startAngle+angleExt),
+                center.getY()+radius*Math.sin(startAngle+angleExt)
+                );
+        
+        
+}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Arc#getCenterPoint()
+     */
+    public Point getCenterPoint() {
+        ((PointJTS)init).getJTS();
+        Point2D center = new Point2D(this.getProjection(), JTSUtils.getCircumcentre(init, middle, end));
+        return center;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Arc2D other = new Arc2D();
+        other.setProjection(this.getProjection());
+        Point clonedInit = (Point)init.cloneGeometry();
+        Point clonedMiddle = (Point)middle.cloneGeometry();
+        Point clonedEnd = (Point)end.cloneGeometry();
+        other.setPoints(clonedInit, clonedMiddle, clonedEnd);
+        return other;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                coordinates.add(new Coordinate(coords[4], coords[5]));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add(coordinates.get(0));
+                break;
+            }
+            pi.next();
+        }
+        return JTSUtils.createJTSLineString(coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2DM.java	(revision 46118)
@@ -0,0 +1,169 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseLine2DM extends AbstractLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2009183729409385543L;
+
+    /**
+     * @param polygon
+     */
+    public BaseLine2DM(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+    }
+
+    /**
+     * @param polygon
+     * @param coordinates
+     */
+    public BaseLine2DM(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2DM);
+        initializeCoordinates(coordinates);
+    }
+
+
+    /**
+     * @param coordinates
+     */
+    private void initializeCoordinates(Coordinate[] coordinates) {
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point2DM(x, y, 0));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+      String message = "Can't add x,y,z coordinate to Polygon2DM.";
+      notifyDeprecated(message);
+      throw new UnsupportedOperationException(message);
+  }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org.gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2DM) {
+            return point;
+        } else {
+            return new Point2DM(point.getX(), point.getY(), 0);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        multiPoint.ensureCapacity(coordinates.size());
+        for (Iterator<Coordinate> iterator = coordinates.iterator(); iterator.hasNext();) {
+            Coordinate coordinate = (Coordinate) iterator.next();
+            multiPoint.addPoint(new Point2DM(this.getProjection(), coordinate));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        multiLine.addPrimitive(this);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        Polygon2DM polygon = new Polygon2DM(coordinates.toCoordinateArray());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#getVertex(int)
+     */
+    public Point getVertex(int index) {
+        Point2DM vertex = new Point2DM(this.getProjection(), this.coordinates.get(index));
+        return vertex;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#getCoordinateAt(int, int)
+     */
+    @Override
+    public double getCoordinateAt(int index, int dimension) {
+        if (dimension == 2) {
+            return super.getCoordinateAt(index, CoordinateSequence.M);
+        }
+        return super.getCoordinateAt(index, dimension);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#setCoordinateAt(int, int, double)
+     */
+    @Override
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        if (dimension == 2) {
+            return super.setCoordinateAt(index, CoordinateSequence.M, value);
+        }
+        return super.setCoordinateAt(index, dimension, value);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3DM.java	(revision 46118)
@@ -0,0 +1,152 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseLine3DM extends AbstractLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1765763899814153661L;
+
+    /**
+     * @param polygon
+     * @param coordinates
+     */
+    public BaseLine3DM(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM3DM);
+        initializeCoordinates(coordinates);
+    }
+
+    /**
+     * @param coordinates
+     */
+    private void initializeCoordinates(Coordinate[] coordinates) {
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+    }
+
+    /**
+     * @param polygon
+     */
+    public BaseLine3DM(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+    }
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(x, y, 0);
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        Point3DM point = new Point3DM(x, y, z, 0);
+        return this.addVertex(point);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org.gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3DM) {
+            return point;
+        } else if (point instanceof Point3D) {
+            return new Point3DM(point.getX(), point.getY(), ((Point3D)point).getZ(), 0);
+        } else {
+            return new Point3DM(point.getX(), point.getY(), 0, 0);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3DM();
+        multiPoint.ensureCapacity(coordinates.size());
+        for (Iterator<Coordinate> iterator = coordinates.iterator(); iterator.hasNext();) {
+            Coordinate coordinate = (Coordinate) iterator.next();
+            multiPoint.addPoint(new Point3DM(this.getProjection(), coordinate));
+        }
+        return multiPoint;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        multiLine.addPrimitive(this);
+        return multiLine;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        Polygon3DM polygon = new Polygon3DM(coordinates.toCoordinateArray());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#getVertex(int)
+     */
+    public Point getVertex(int index) {
+        Point3DM vertex = new Point3DM(this.getProjection(), this.coordinates.get(index));
+        return vertex;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine2D.java	(revision 46118)
@@ -0,0 +1,168 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseLine2D extends AbstractLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4703049397260763325L;
+
+    /**
+     * @param polygon
+     */
+    public BaseLine2D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+    }
+
+    /**
+     * @param polygon
+     * @param coordinates
+     */
+    public BaseLine2D(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        initializeCoordinates(coordinates);
+    }
+
+    public BaseLine2D(int type, ArrayListCoordinateSequence coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        this.coordinates = coordinates;
+    }
+
+    /**
+     * @param coordinates
+     */
+    private void initializeCoordinates(Coordinate[] coordinates) {
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#addVertex(double,
+     * double)
+     */
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point2D(x, y));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#addVertex(double,
+     * double, double)
+     */
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Can't add x,y,z coordinate to Line2D.";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        multiPoint.ensureCapacity(coordinates.size());
+        for (Iterator<Coordinate> iterator = coordinates.iterator(); iterator.hasNext();) {
+            Coordinate coordinate = (Coordinate) iterator.next();
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinate));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        multiLine.addPrimitive(this);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon2D polygon = new Polygon2D(coordinates.toCoordinateArray());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#getVertex(int)
+     */
+    public Point getVertex(int index) {
+        Point2D vertex = new Point2D(this.getProjection(), this.coordinates.get(index));
+        return vertex;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/BaseLine3D.java	(revision 46118)
@@ -0,0 +1,143 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseLine3D extends AbstractLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1886715977687661564L;
+
+    /**
+     * @param polygon
+     */
+    public BaseLine3D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+    }
+
+    /**
+     * @param polygon
+     * @param coordinates
+     */
+    public BaseLine3D(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+        initializeCoordinates(coordinates);
+    }
+
+    /**
+     * @param coordinates
+     */
+    private void initializeCoordinates(Coordinate[] coordinates) {
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+    }
+
+    public OrientablePrimitive  addVertex(double x, double y) {
+        return this.addVertex(new Point3D(x, y, 0));
+    }
+
+    public OrientablePrimitive  addVertex(double x, double y, double z) {
+        return this.addVertex(new Point3D(x, y, z));
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            return point;
+        } else if (point instanceof Point3DM) {
+            return new Point3D(point.getX(), point.getY(), ((Point3DM) point).getM());
+        } else {
+            return new Point3D(point.getX(), point.getY(), 0);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        multiPoint.ensureCapacity(coordinates.size());
+        for (Iterator<Coordinate> iterator = coordinates.iterator(); iterator.hasNext();) {
+            Coordinate coordinate = (Coordinate) iterator.next();
+            multiPoint.addPoint(new Point3D(this.getProjection(), coordinate));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        multiLine.addPrimitive(this);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon3D polygon = new Polygon3D(coordinates.toCoordinateArray());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.OrientablePrimitive#getVertex(int)
+     */
+    public Point getVertex(int index) {
+        Point3D vertex = new Point3D(this.getProjection(), this.coordinates.get(index));
+        return vertex;
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2DM.java	(revision 46118)
@@ -0,0 +1,131 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Line2DM extends BaseLine2DM implements Line {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2400803975672135247L;
+
+
+    /**
+     *
+     */
+    public Line2DM() {
+        super(Geometry.TYPES.LINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Line2DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.LINE, coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Line cloneGeometry() {
+        return new Line2DM(cloneCoordinates().toCoordinateArray());
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Line clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), this.coordinates, distance);
+        } else {
+//            return JTSUtils.offsetRawOpenLine(this.coordinates, distance);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), this.coordinates, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (isClosed(0)) {
+            return JTSUtils.offsetClosedLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    joinStyle, 
+                    distance
+            );
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    bufParams, 
+                    distance
+            );
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Line2DM){
+            Line2DM other = (Line2DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                    return false;
+                };
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/AbstractLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/AbstractLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/AbstractLine.java	(revision 46118)
@@ -0,0 +1,526 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.PathIterator;
+import java.util.Collections;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.primitive.curve.AbstractCurve;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.IGeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractLine extends AbstractCurve {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5034197096871344597L;
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractLine.class);
+
+    protected ArrayListCoordinateSequence coordinates;
+
+    public class VertexIterator implements Iterator<Point> {
+
+        private final PointJTS vertex;
+        private int current;
+
+        public VertexIterator() {
+            this.current = 0;
+            if( getNumVertices()>0 ) {
+                this.vertex = (PointJTS) getVertex(0).cloneGeometry();
+            } else {
+                this.vertex = null;
+            }
+        }
+
+        @Override
+        public boolean hasNext() {
+            return this.current < getNumVertices() ;
+        }
+
+        @Override
+        public Point next() {
+            this.vertex.setJTSCoordinate(coordinates.get(current) );
+            this.current++;
+            return this.vertex;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+    }
+    /**
+    *
+     * @param subtype
+    */
+    protected AbstractLine(int subtype) {
+        super(Geometry.TYPES.LINE, subtype);
+    }
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public AbstractLine(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    abstract public Point getVertex(int index);
+
+    public Iterator<Point> iterator() {
+        return new VertexIterator();
+    }
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSLineString(coordinates);
+    }
+
+    public OrientablePrimitive addVertex(Point point) {
+        point = fixPoint(point);
+        coordinates.add(((PointJTS) point).getJTSCoordinate());
+        return (OrientablePrimitive) this;
+    }
+
+    public void setPoints(Point initialPoint, Point endPoint) {
+        initialPoint = fixPoint(initialPoint);
+        endPoint = fixPoint(endPoint);
+        coordinates.clear();
+        addVertex(initialPoint);
+        addVertex(endPoint);
+    }
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+    public double getCoordinateAt(int index, int dimension) {
+        return coordinates.getOrdinate(index, dimension);
+    }
+
+    public OrientablePrimitive  setCoordinateAt(int index, int dimension, double value) {
+        coordinates.setOrdinate(index, dimension, value);
+        return (OrientablePrimitive) this;
+    }
+
+    public void removeVertex(int index) {
+        coordinates.remove(index);
+    }
+
+    public boolean isEmpty() {
+        return coordinates==null || coordinates.isEmpty();
+    }
+    
+    public int getNumVertices() {
+        if( isEmpty() ) {
+            return 0;
+        }
+        return coordinates.size();
+    }
+
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        p = fixPoint(p);
+        coordinates.add(index, ((PointJTS) p).getJTSCoordinate());
+        return (OrientablePrimitive) this;
+    }
+
+    public OrientablePrimitive setVertex(int index, Point p) {
+        p = fixPoint(p);
+        coordinates.set(index, ((PointJTS) p).getJTSCoordinate());
+        return (OrientablePrimitive) this;
+    }
+
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        PathIterator it = generalPathX.getPathIterator(null);
+        double[] segment = new double[6];
+        int i = 0;
+        while(!it.isDone()){
+            int type = it.currentSegment(segment);
+            if(i==0){
+                switch (type) {
+                case IGeneralPathX.SEG_MOVETO:
+                    Point p = new Point2D(segment[0], segment[1]);
+                    p = fixPoint(p);
+                    coordinates.add(((PointJTS)p).getJTSCoordinate());
+                    break;
+                default:
+                    String message = StringUtils.replace("Type of segment %(segment)s isn't SEG_MOVETO.","%(segment)s",String.valueOf(i));
+                    LOGGER.warn(message);
+                    throw new RuntimeException(message);
+                }
+            } else {
+                //Dudo de que los casos SEG_QUADTO y SEG_CUBICTO est�n bien pero se hac�a lo mismo en la librer�a de geometr�as vieja.
+                Point p;
+                switch (type) {
+                case IGeneralPathX.SEG_LINETO:
+                    p = new Point2D(segment[0], segment[1]);
+                    p = fixPoint(p);
+                    coordinates.add(((PointJTS)p).getJTSCoordinate());
+                    break;
+                case IGeneralPathX.SEG_QUADTO:
+                    for (int j = 0; j <= 1; j++) {
+                        p = new Point2D(segment[i], segment[i+1]);
+                        p = fixPoint(p);
+                        coordinates.add(((PointJTS) p).getJTSCoordinate());
+                    }
+                    break;
+                case IGeneralPathX.SEG_CUBICTO:
+                    for (int j = 0; j <= 2; j++) {
+                        p = new Point2D(segment[i], segment[i+1]);
+                        p = fixPoint(p);
+                        coordinates.add(((PointJTS) p).getJTSCoordinate());
+                    }
+                    break;
+                case IGeneralPathX.SEG_CLOSE:
+                    if(!coordinates.get(0).equals(coordinates.get(coordinates.size()-1))){
+                        coordinates.add(coordinates.get(0));
+                    }
+                    break;
+                default:
+                    String message = StringUtils.replace("The general path has a gap in segment %(segment)s.","%(segment)s",String.valueOf(i));
+                    LOGGER.warn(message);
+                    throw new RuntimeException(message);
+                }
+            }
+            it.next();
+            i++;
+        }
+    }
+
+    public void addMoveToVertex(Point point) {
+        notifyDeprecated("Calling deprecated metohd addMoveToVertex in Line");
+        throw new UnsupportedOperationException();
+    }
+
+    public void closePrimitive() {
+        if (!coordinates.isEmpty() && !isClosed()) {
+            coordinates.add((Coordinate)coordinates.get(0).clone());
+        }
+    }
+
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        this.coordinates.ensureCapacity(capacity);
+        return (OrientablePrimitive) this;
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        if (ct == null) {
+            return;
+        }
+        ArrayListCoordinateSequence tmpCoordinates = new ArrayListCoordinateSequence();
+        tmpCoordinates.ensureCapacity(coordinates.size());
+        for (Coordinate coordinate : coordinates) {
+            java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(coordinate.x, coordinate.y);
+            try {
+                p = ct.convert(p, p);
+                coordinate.x = p.getX();
+                coordinate.y = p.getY();
+                tmpCoordinates.add(coordinate);
+            } 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)
+                */
+            }
+        }
+        coordinates=tmpCoordinates;
+        this.setProjection(ct.getPDest());
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        if (at == null) {
+            return;
+        }
+
+        for (int i = 0; i < coordinates.size(); i++) {
+            Coordinate coordinate = coordinates.get(i);
+            java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(coordinate.x, coordinate.y);
+
+            at.transform(p, p);
+            coordinate.x = p.getX();
+            coordinate.y = p.getY();
+
+        }
+    }
+
+    @Override
+    public int getDimension() {
+        return this.getGeometryType().getDimension();
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        if( this.isEmpty() ) {
+            // Esto no deberia de pasar, se trataria de una geometria
+            // corrupta.
+            return new GeneralPath();
+        }
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return new DefaultGeneralPathX(getPathIterator(null),false,0);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        LineIterator pi = new LineIterator(at);
+        return pi;
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+    protected class LineIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+
+        /**
+         * Creates a new PointIterator object.
+         * @param at
+         *            The affine transform applied to coordinates during
+         *            iteration
+         */
+        public LineIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            done = false;
+        }
+
+        /**
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#next()
+         */
+        @Override
+        public void next() {
+            done = (coordinates.size() == ++index);
+        }
+
+        /**
+         * @return 
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @param coords
+         * @return 
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        @Override
+        public int currentSegment(double[] coords) {
+            coords[0] = coordinates.getX(index);
+            coords[1] = coordinates.getY(index);
+            at.transform(coords, 0, coords, 0, 1);
+
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        @Override
+        public int currentSegment(float[] coords) {
+            coords[0] = (float) coordinates.getX(index);
+            coords[1] = (float) coordinates.getY(index);
+            at.transform(coords, 0, coords, 0, 1);
+
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        }
+    }
+
+    @Override
+    public boolean is3D() {
+        int subtype = this.getGeometryType().getType();
+        return subtype == Geometry.SUBTYPES.GEOM3D || subtype == Geometry.SUBTYPES.GEOM3DM;
+    }
+
+//    protected boolean isClosed(){
+//        return coordinates.get(0).equals(coordinates.get(coordinates.size()-1));
+//    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Collections.reverse(coordinates);
+    }
+
+    protected ArrayListCoordinateSequence cloneCoordinates() {
+        ArrayListCoordinateSequence cloned = new ArrayListCoordinateSequence();
+        cloned.ensureCapacity(coordinates.size());
+        for (Coordinate coordinate : coordinates) {
+            cloned.add((Coordinate)coordinate.clone());
+        }
+        return cloned;
+    }
+
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return true;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return true;
+    }
+    
+    public boolean isClosed() {
+        return this.isClosed(0);
+    }
+    
+    public boolean isClosed(double tolerance) {
+        int numVertices = this.getNumVertices();
+        switch( numVertices ) {
+            case 0:
+            case 1:
+            case 2:
+                return false;
+        }
+            
+        if( tolerance<0 ) {
+            tolerance = 0.000001;
+        }
+        double[] first = this.getVertex(0).getCoordinates();
+        double[] last = this.getVertex(numVertices-1).getCoordinates();
+
+        for (int i = 0; i < first.length; i++) {
+                if (Math.abs(first[i] - last[i]) > tolerance) {
+                        return false;
+                }
+        }
+        return true;
+    }
+    
+    public void forceClose(double tolerance) {
+        Point first;
+        int numVertices = this.getNumVertices();
+        switch( numVertices ) {
+            case 0:
+                return;
+            case 1:
+                first = this.getVertex(0);
+                this.addVertex((Point) first.cloneGeometry());
+                this.addVertex((Point) first.cloneGeometry());
+                return;
+            case 2:
+                first = this.getVertex(0);
+                this.addVertex((Point) first.cloneGeometry());
+                return;
+        }
+        if( this.isClosed(0) ) {
+            return;
+        }
+        
+        first = this.getVertex(0);
+        if( this.isClosed(tolerance) ) {
+            this.setVertex(numVertices-1,(Point) first.cloneGeometry());
+        } else {
+            this.addVertex((Point) first.cloneGeometry());
+        }
+    }
+    
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Line2D l = new Line2D(coordinates2D);
+        return l;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3DM.java	(revision 46118)
@@ -0,0 +1,132 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Line3DM extends BaseLine3DM implements Line {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3467349699229302515L;
+
+    /**
+     *
+     */
+    public Line3DM() {
+        super(Geometry.TYPES.LINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Line3DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.LINE, coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Line cloneGeometry() {
+        return new Line3DM(cloneCoordinates().toCoordinateArray());
+     }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Line clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), this.coordinates, distance);
+        } else {
+//            return JTSUtils.offsetRawOpenLine(this.coordinates, distance);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), this.coordinates, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (isClosed(0)) {
+            return JTSUtils.offsetClosedLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    joinStyle, 
+                    distance
+            );
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    bufParams, 
+                    distance
+            );
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Line3DM){
+            Line3DM other = (Line3DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+                if (otherCoordinate.getOrdinate(3) != coordinate.getOrdinate(3)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line2D.java	(revision 46118)
@@ -0,0 +1,117 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Line2D extends BaseLine2D implements Line {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7764582168777051989L;
+
+    /**
+     *
+     */
+    public Line2D() {
+        super(Geometry.TYPES.LINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Line2D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.LINE, coordinates);
+    }
+
+    public Line2D(ArrayListCoordinateSequence coordinates) {
+        super(Geometry.TYPES.LINE, coordinates);
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Line cloneGeometry() {
+        return new Line2D(cloneCoordinates().toCoordinateArray());
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Line clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        if (isClosed(0)) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), this.coordinates, distance);
+        } else {
+//            return JTSUtils.offsetRawOpenLine(this.coordinates, distance);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), this.coordinates, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (isClosed(0)) {
+            return JTSUtils.offsetClosedLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    joinStyle, 
+                    distance
+            );
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    bufParams, 
+                    distance
+            );
+        }
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/Line3D.java	(revision 46118)
@@ -0,0 +1,129 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.line;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Line3D extends BaseLine3D implements Line {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -3687720909186456046L;
+
+    /**
+     *
+     */
+    public Line3D() {
+        super(Geometry.TYPES.LINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public Line3D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.LINE, coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Line cloneGeometry() {
+        return new Line3D(cloneCoordinates().toCoordinateArray());
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Line clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), this.coordinates, distance);
+        } else {
+//            return JTSUtils.offsetRawOpenLine(this.coordinates, distance);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), this.coordinates, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (isClosed(0)) {
+            return JTSUtils.offsetClosedLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    joinStyle, 
+                    distance
+            );
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(
+                    this.getProjection(), 
+                    this.coordinates, 
+                    bufParams, 
+                    distance
+            );
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Line3D){
+            Line3D other = (Line3D)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/AbstractCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/AbstractCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/AbstractCurve.java	(revision 46118)
@@ -0,0 +1,46 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve;
+
+import org.gvsig.fmap.geom.jts.primitive.AbstractPrimitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractCurve extends AbstractPrimitive {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3586952580027455791L;
+
+
+    /**
+    *
+    */
+   protected AbstractCurve(int type, int subtype) {
+       super(type, subtype);
+   }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2D.java	(revision 46118)
@@ -0,0 +1,101 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.circumference;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.circle.BaseCircle2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Circumference;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Circumference2D extends BaseCircle2D implements Circumference {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4678092839213094025L;
+
+    /**
+     * @param subtype
+     */
+    public Circumference2D() {
+        super(Geometry.TYPES.CIRCUMFERENCE, Geometry.SUBTYPES.GEOM2D);
+    }
+
+
+    /**
+     * @param center
+     * @param radius
+     */
+    public Circumference2D(Point center, double radius) {
+        super(Geometry.TYPES.CIRCUMFERENCE, Geometry.SUBTYPES.GEOM2D, center, radius);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSLineString(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Circumference2D clone = new Circumference2D();
+        clone.setPoints(((PointJTS)((PointJTS)center).cloneGeometry()), radius);
+        return clone;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circumference2D(((PointJTS)((PointJTS)center).cloneGeometry()), radius+distance);
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Geometry c = this.cloneGeometry();
+        return c;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/circumference/Circumference2DZ.java	(revision 46118)
@@ -0,0 +1,97 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.circumference;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.circle.BaseCircle2DZ;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Circumference;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Circumference2DZ extends BaseCircle2DZ implements Circumference {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4678092839213094025L;
+
+    /**
+     * @param subtype
+     */
+    public Circumference2DZ() {
+        super(Geometry.TYPES.CIRCUMFERENCE, Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /**
+     * @param center
+     * @param radius
+     */
+    public Circumference2DZ(Point center, double radius) {
+        super(Geometry.TYPES.CIRCUMFERENCE, Geometry.SUBTYPES.GEOM3D, center, radius);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSLineString(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Circumference2DZ clone = new Circumference2DZ();
+        clone.setPoints(((PointJTS)((PointJTS)center).cloneGeometry()), radius);
+        return clone;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circumference2DZ(((PointJTS)((PointJTS)center).cloneGeometry()), radius+distance);
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Circumference c = new Circumference2D((Point) center.force2D(), radius);
+        return c;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2DM.java	(revision 46118)
@@ -0,0 +1,199 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+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;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseSpline2DM extends AbstractSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3466337030657231939L;
+
+
+//    /**
+//     * @param subtype
+//     */
+//    public BaseSpline2DM() {
+//        super(Geometry.SUBTYPES.GEOM2DM);
+//        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+//    }
+
+    /**
+     * @param type
+     */
+    public BaseSpline2DM(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<>());
+    }
+
+//    /**
+//     * @param subtype
+//     * @param coordinates
+//     * @param aVertex
+//     */
+//    public BaseSpline2DM(Coordinate[] coordinates) {
+//        this();
+//        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+//        if (coordinates.length < 1) {
+//            anyVertex = new Point2DM(0, 0, 0);
+//        } else {
+//            anyVertex = new Point2DM(coordinates[0].x, coordinates[0].y, coordinates[0].z);
+//        }
+//    }
+
+    /**
+     * @param type
+     * @param coordinates
+     */
+    public BaseSpline2DM(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+        if (coordinates.length < 1) {
+            anyVertex = new Point3D(0, 0, 0);
+        } else {
+            Coordinate coordinate = coordinates[0];
+            anyVertex = new Point3D(coordinate.x, coordinate.y, coordinate.getOrdinate(CoordinateSequence.M));
+        }
+    }
+
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point2DM(x, y, 0));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Can't add x,y,z coordinate to Polygon2DM.";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2DM) {
+            return point;
+        } else {
+            return new Point2DM(point.getX(), point.getY(), 0);
+        }
+    }
+
+    @Override
+    protected ArrayListCoordinateSequence getSplineCoordinates() {
+        ArrayListCoordinateSequence splineCoordinates = new ArrayListCoordinateSequence();
+
+        if (splineCoordinates == null || splineCoordinates.size() == 0) {
+            int num = coordinates.size();
+            double[] px = new double[num];
+            double[] py = new double[num];
+            double[] pm = new double[num];
+            for (int i = 0; i < num; i++) {
+                Coordinate coord = coordinates.get(i);
+                px[i] = coord.x;
+                py[i] = coord.y;
+                pm[i] = coord.getOrdinate(CoordinateSequence.M);
+            }
+            Spline splineX = new Spline(px);
+            Spline splineY = new Spline(py);
+            Spline splineM = new Spline(pm);
+            splineCoordinates.add(coordinates.get(0));
+            for (int i = 0; i < coordinates.size() - 1; i++) {
+                for (int t = 1; t <= SUBSEGMENTS; t++) {
+                    if ((t == SUBSEGMENTS) && (i == (coordinates.size() - 2))) {
+                        // We don't calculate the last point to avoid a possible
+                        // error precision with floating point numbers.
+                        splineCoordinates.add(JTSUtils.createMCoordinate(px[px.length - 1], py[px.length - 1], pm[px.length - 1]));
+                    } else {
+                        double x1 = splineX.fn(i, ((double) t) / SUBSEGMENTS);
+                        double y1 = splineY.fn(i, ((double) t) / SUBSEGMENTS);
+                        double m1 = splineM.fn(i, ((double) t) / SUBSEGMENTS);
+                        splineCoordinates.add(JTSUtils.createMCoordinate(x1, y1, m1));
+                    }
+                }
+            }
+        }
+        return splineCoordinates;
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        Coordinate[] theCoordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(theCoordinates.length);
+        for (Coordinate theCoordinate : theCoordinates) {
+            multiPoint.addPoint(new Point2DM(this.getProjection(), theCoordinate));
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        Line line = new Line2DM(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        Polygon polygon = new Polygon2DM(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    public Point getVertex(int index) {
+        Point2DM vertex = new Point2DM(this.getProjection(), this.coordinates.get(index));
+        anyVertex = vertex;
+        return vertex;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3DM.java	(revision 46118)
@@ -0,0 +1,179 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline.Spline;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+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;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseSpline3DM extends AbstractSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5436087623278868159L;
+
+
+    /**
+     * @param type
+     */
+    public BaseSpline3DM(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<>());
+    }
+
+    /**
+     * @param type
+     * @param coordinates
+     */
+    public BaseSpline3DM(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM3DM);
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+        if (coordinates.length < 1) {
+            anyVertex = new Point3DM(0, 0, 0, 0);
+        } else {
+            Coordinate coordinate = coordinates[0];
+            anyVertex = new Point3DM(coordinate.x, coordinate.y, coordinate.z, coordinate.getOrdinate(CoordinateSequence.M));
+        }
+    }
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point3DM(x, y, 0, 0));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        return this.addVertex(new Point3DM(x, y, z, 0));
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3DM) {
+            return point;
+        } else if (point instanceof Point3D) {
+            return new Point3DM(point.getX(), point.getY(), ((Point3D)point).getZ(), 0);
+        } else {
+            return new Point3DM(point.getX(), point.getY(), 0, 0);
+        }
+    }
+
+    @Override
+    protected ArrayListCoordinateSequence getSplineCoordinates() {
+        ArrayListCoordinateSequence splineCoordinates = new ArrayListCoordinateSequence();
+
+        if (splineCoordinates == null || splineCoordinates.size() == 0) {
+            int num = coordinates.size();
+            double[] px = new double[num];
+            double[] py = new double[num];
+            double[] pz = new double[num];
+            double[] pm = new double[num];
+            for (int i = 0; i < num; i++) {
+                Coordinate coord = coordinates.get(i);
+                px[i] = coord.x;
+                py[i] = coord.y;
+                pz[i] = coord.z;
+                pm[i] = coord.getOrdinate(CoordinateSequence.M);
+            }
+            Spline splineX = new Spline(px);
+            Spline splineY = new Spline(py);
+            Spline splineZ = new Spline(pz);
+            Spline splineM = new Spline(pm);
+            splineCoordinates.add(coordinates.get(0));
+            for (int i = 0; i < coordinates.size() - 1; i++) {
+                for (int t = 1; t <= SUBSEGMENTS; t++) {
+                    if ((t == SUBSEGMENTS) && (i == (coordinates.size() - 2))) {
+                        // We don't calculate the last point to avoid a possible
+                        // error precision with floating point numbers.
+                        splineCoordinates.add(JTSUtils.createMCoordinate(px[px.length - 1], py[px.length - 1], pz[px.length - 1], pm[px.length - 1]));
+                    } else {
+                        double x1 = splineX.fn(i, ((double) t) / SUBSEGMENTS);
+                        double y1 = splineY.fn(i, ((double) t) / SUBSEGMENTS);
+                        double z1 = splineZ.fn(i, ((double) t) / SUBSEGMENTS);
+                        double m1 = splineM.fn(i, ((double) t) / SUBSEGMENTS);
+                        splineCoordinates.add(JTSUtils.createMCoordinate(x1, y1, z1,m1));
+                    }
+                }
+            }
+        }
+        return splineCoordinates;
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3DM();
+        Coordinate[] theCoordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(theCoordinates.length);
+        for (Coordinate theCoordinate : theCoordinates) {
+            multiPoint.addPoint(new Point3DM(this.getProjection(), theCoordinate));
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        Line line = new Line3DM(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        Polygon polygon = new Polygon3DM(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+    public Point getVertex(int index) {
+        Point3DM vertex = new Point3DM(this.getProjection(), this.coordinates.get(index));
+        anyVertex = vertex;
+        return vertex;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline2D.java	(revision 46118)
@@ -0,0 +1,205 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+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;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseSpline2D extends AbstractSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8257006501866486625L;
+
+//    /**
+//     * @param subtype
+//     */
+//    public BaseSpline2D() {
+//        super(Geometry.SUBTYPES.GEOM2D);
+//        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+//    }
+
+    /**
+     * @param type
+     */
+    public BaseSpline2D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<>());
+    }
+
+//    /**
+//     * @param subtype
+//     * @param coordinates
+//     * @param aVertex
+//     */
+//    public BaseSpline2D(Coordinate[] coordinates) {
+//        this();
+//        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+//        if (coordinates.length < 1) {
+//            anyVertex = new Point2D(0, 0);
+//        } else {
+//            anyVertex = new Point2D(coordinates[0].x, coordinates[0].y);
+//        }
+//    }
+
+    /**
+     * @param type
+     * @param coordinates
+     */
+    public BaseSpline2D(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+        if (coordinates.length < 1) {
+            anyVertex = new Point2D(0, 0);
+        } else {
+            anyVertex = new Point2D(coordinates[0].x, coordinates[0].y);
+        }
+    }
+
+    public BaseSpline2D(int type, ArrayListCoordinateSequence coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+        this.coordinates = coordinates;
+        if (this.coordinates.isEmpty()) {
+            anyVertex = new Point2D(0, 0);
+        } else {
+            anyVertex = new Point2D(coordinates.getX(0), coordinates.getY(0));
+        }
+    }
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point2D(x, y));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Can't add x,y,z coordinate to SPLine2D.";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline#getSplineCoordinates()
+     */
+    @Override
+    protected ArrayListCoordinateSequence getSplineCoordinates() {
+        ArrayListCoordinateSequence splineCoordinates = new ArrayListCoordinateSequence();
+
+//        if (splineCoordinates.isEmpty()) {
+            int num = coordinates.size();
+            double[] px = new double[num];
+            double[] py = new double[num];
+            for (int i = 0; i < num; i++) {
+                Coordinate coord = coordinates.get(i);
+                px[i] = coord.x;
+                py[i] = coord.y;
+            }
+            Spline splineX = new Spline(px);
+            Spline splineY = new Spline(py);
+            splineCoordinates.add(coordinates.get(0));
+            for (int i = 0; i < coordinates.size() - 1; i++) {
+                for (int t = 1; t <= SUBSEGMENTS; t++) {
+                    if ((t == SUBSEGMENTS) && (i == (coordinates.size() - 2))) {
+                        // We don't calculate the last point to avoid a possible
+                        // error precision with floating point numbers.
+                        splineCoordinates.add(new Coordinate(px[px.length - 1], py[px.length - 1]));
+                    } else {
+                        double x1 = splineX.fn(i, ((double) t) / SUBSEGMENTS);
+                        double y1 = splineY.fn(i, ((double) t) / SUBSEGMENTS);
+                        splineCoordinates.add(new Coordinate(x1, y1));
+                    }
+                }
+            }
+//        }
+        return splineCoordinates;
+
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        Coordinate[] theCoordinates = getSplineCoordinates().toCoordinateArray();
+        multiPoint.ensureCapacity(theCoordinates.length);
+        for (Coordinate coordinate : theCoordinates) {
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinate));
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D(getSplineCoordinates().toCoordinateArray()); //getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D(getSplineCoordinates().toCoordinateArray());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    public Point getVertex(int index) {
+        Point2D vertex = new Point2D(this.getProjection(), this.coordinates.get(index));
+        anyVertex = vertex;
+        return vertex;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/BaseSpline3D.java	(revision 46118)
@@ -0,0 +1,193 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+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;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseSpline3D extends AbstractSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6699898811455152758L;
+
+//    /**
+//     * @param subtype
+//     */
+//    public BaseSpline3D() {
+//        super(Geometry.SUBTYPES.GEOM3D);
+//        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+//    }
+
+    /**
+     * @param type
+     */
+    public BaseSpline3D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+        this.coordinates = new ArrayListCoordinateSequence(new ArrayList<>());
+    }
+
+//    /**
+//     * @param subtype
+//     * @param coordinates
+//     * @param aVertex
+//     */
+//    public BaseSpline3D(Coordinate[] coordinates) {
+//        this();
+//        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+//        if (coordinates.length < 1) {
+//            anyVertex = new Point3D(0, 0, 0);
+//        } else {
+//            anyVertex = new Point3D(coordinates[0].x, coordinates[0].y, coordinates[0].z);
+//        }
+//    }
+
+    /**
+     * @param type
+     * @param coordinates
+     */
+    public BaseSpline3D(int type, Coordinate[] coordinates) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+        this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+        if (coordinates.length < 1) {
+            anyVertex = new Point3D(0, 0, 0);
+        } else {
+            anyVertex = new Point3D(coordinates[0].x, coordinates[0].y, coordinates[0].z);
+        }
+    }
+
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point3D(x, y, 0));
+    }
+
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        return this.addVertex(new Point3D(x, y, z));
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            return point;
+        } else if (point instanceof Point3DM) {
+            return new Point3D(point.getX(), point.getY(), ((Point3DM) point).getM());
+        } else {
+            return new Point3D(point.getX(), point.getY(), 0);
+        }
+    }
+
+    @Override
+    protected ArrayListCoordinateSequence getSplineCoordinates() {
+        ArrayListCoordinateSequence splineCoordinates = new ArrayListCoordinateSequence();
+
+        if (splineCoordinates == null || splineCoordinates.size() == 0) {
+            int num = coordinates.size();
+            double[] px = new double[num];
+            double[] py = new double[num];
+            double[] pz = new double[num];
+            for (int i = 0; i < num; i++) {
+                Coordinate coord = coordinates.get(i);
+                px[i] = coord.x;
+                py[i] = coord.y;
+                pz[i] = coord.z;
+            }
+            Spline splineX = new Spline(px);
+            Spline splineY = new Spline(py);
+            Spline splineZ = new Spline(pz);
+            splineCoordinates.add(coordinates.get(0));
+            for (int i = 0; i < coordinates.size() - 1; i++) {
+                for (int t = 1; t <= SUBSEGMENTS; t++) {
+                    if ((t == SUBSEGMENTS) && (i == (coordinates.size() - 2))) {
+                        // We don't calculate the last point to avoid a possible
+                        // error precision with floating point numbers.
+                        splineCoordinates.add(new Coordinate(px[px.length - 1], py[px.length - 1], pz[px.length - 1]));
+                    } else {
+                        double x1 = splineX.fn(i, ((double) t) / SUBSEGMENTS);
+                        double y1 = splineY.fn(i, ((double) t) / SUBSEGMENTS);
+                        double z1 = splineZ.fn(i, ((double) t) / SUBSEGMENTS);
+                        splineCoordinates.add(new Coordinate(x1, y1, z1));
+                    }
+                }
+            }
+        }
+        return splineCoordinates;
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        Coordinate[] theCoordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(theCoordinates.length);
+        for (Coordinate theCoordinate : theCoordinates) {
+            multiPoint.addPoint(new Point3D(this.getProjection(), theCoordinate));
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+    public Point getVertex(int index) {
+        Point3D vertex = new Point3D(this.getProjection(), this.coordinates.get(index));
+        anyVertex = vertex;
+        return vertex;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2DM.java	(revision 46118)
@@ -0,0 +1,219 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import java.util.ArrayList;
+import java.util.Arrays;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+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.Spline;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Spline2DM extends BaseSpline2DM implements Spline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3275115053567971975L;
+
+    public Spline2DM() {
+        super(Geometry.TYPES.SPLINE);
+    }
+
+    /**
+    *
+     * @param coordinates
+    */
+    public Spline2DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.SPLINE, coordinates);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y) {
+        return this.addVertex(new Point2DM(x, y, 0));
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Can't add x,y,z coordinate to Polygon2DM.";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Geometry cloneGeometry() {
+        return new Spline2DM(cloneCoordinates().toCoordinateArray());
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2DM) {
+            return point;
+        } else {
+            return new Point2DM(point.getX(), point.getY(), 0);
+        }
+    }
+
+    @Override
+    protected ArrayListCoordinateSequence getSplineCoordinates() {
+        ArrayListCoordinateSequence splineCoordinates = new ArrayListCoordinateSequence();
+
+        if (splineCoordinates == null || splineCoordinates.size() == 0) {
+            int num = coordinates.size();
+            double[] px = new double[num];
+            double[] py = new double[num];
+            double[] pm = new double[num];
+            for (int i = 0; i < num; i++) {
+                Coordinate coord = coordinates.get(i);
+                px[i] = coord.x;
+                py[i] = coord.y;
+                pm[i] = coord.getOrdinate(CoordinateSequence.M);
+            }
+            Spline splineX = new Spline(px);
+            Spline splineY = new Spline(py);
+            Spline splineM = new Spline(pm);
+            splineCoordinates.add(coordinates.get(0));
+            for (int i = 0; i < coordinates.size() - 1; i++) {
+                for (int t = 1; t <= SUBSEGMENTS; t++) {
+                    if ((t == SUBSEGMENTS) && (i == (coordinates.size() - 2))) {
+                        // We don't calculate the last point to avoid a possible
+                        // error precision with floating point numbers.
+                        splineCoordinates.add(JTSUtils.createMCoordinate(px[px.length - 1], py[px.length - 1], pm[px.length - 1]));
+                    } else {
+                        double x1 = splineX.fn(i, ((double) t) / SUBSEGMENTS);
+                        double y1 = splineY.fn(i, ((double) t) / SUBSEGMENTS);
+                        double m1 = splineM.fn(i, ((double) t) / SUBSEGMENTS);
+                        splineCoordinates.add(JTSUtils.createMCoordinate(x1, y1, m1));
+                    }
+                }
+            }
+        }
+        return splineCoordinates;
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        Coordinate[] theCoordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(theCoordinates.length);
+        for (Coordinate theCoordinate : theCoordinates) {
+            multiPoint.addPoint(new Point2DM(this.getProjection(), theCoordinate));
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        Line line = new Line2DM(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        Polygon polygon = new Polygon2DM(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    @Override
+    public Point getVertex(int index) {
+        Point2DM vertex = new Point2DM(this.getProjection(), this.coordinates.get(index));
+        anyVertex = vertex;
+        return vertex;
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<>());
+        listCoordSequence.addAll(Arrays.asList(coords));
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, distance);
+        } else {
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, joinStyle, distance);
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, bufParams, distance);
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Spline2DM){
+            Spline2DM other = (Spline2DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/AbstractSpline.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/AbstractSpline.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/AbstractSpline.java	(revision 46118)
@@ -0,0 +1,452 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.Collections;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.primitive.curve.AbstractCurve;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.ReadOnlyCoordinates;
+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.IGeneralPathX;
+import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author gvSIG Team
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractSpline extends AbstractCurve {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1562503359430991082L;
+
+    protected ArrayListCoordinateSequence coordinates;
+    protected PointJTS anyVertex;
+    protected static final double SUBSEGMENTS = 30.0;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public AbstractSpline(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    /**
+    *
+     * @param type
+     * @param subtype
+     * @param coordinates
+     * @param aVertex
+    */
+   public AbstractSpline(int type, int subtype, Coordinate[] coordinates, PointJTS aVertex) {
+       this(type, subtype);
+       this.coordinates = new ArrayListCoordinateSequence(new ReadOnlyCoordinates(coordinates));
+       anyVertex = aVertex;
+   }
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSLineString(getSplineCoordinates());
+    }
+
+    protected abstract ArrayListCoordinateSequence getSplineCoordinates();
+
+
+    static class Spline {
+        private final double y[];
+        private final 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];
+        }
+
+    }
+
+    public OrientablePrimitive addVertex(Point point) {
+        point = fixPoint(point);
+        coordinates.add(((PointJTS) point).getJTSCoordinate());
+        anyVertex = (PointJTS) point;
+        return (OrientablePrimitive) this;
+    }
+
+    public void setPoints(Point initialPoint, Point endPoint) {
+        initialPoint = fixPoint(initialPoint);
+        endPoint = fixPoint(endPoint);
+        coordinates.clear();
+        addVertex(initialPoint);
+        addVertex(endPoint);
+        anyVertex = (PointJTS) endPoint;
+    }
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+    public double getCoordinateAt(int index, int dimension) {
+        return coordinates.getOrdinate(index, dimension);
+    }
+
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        coordinates.setOrdinate(index, dimension, value);
+        return (OrientablePrimitive) this;
+    }
+
+    public void removeVertex(int index) {
+        coordinates.remove(index);
+    }
+
+    public int getNumVertices() {
+        return coordinates.size();
+    }
+
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        p = fixPoint(p);
+        coordinates.add(index, ((PointJTS) p).getJTSCoordinate());
+        return (OrientablePrimitive) this;
+    }
+
+    public OrientablePrimitive setVertex(int index, Point p) {
+        p = fixPoint(p);
+        coordinates.set(index, ((PointJTS) p).getJTSCoordinate());
+        return (OrientablePrimitive) this;
+    }
+
+    public void setGeneralPath(GeneralPathX generalPathX) {
+
+        PathIterator it = generalPathX.getPathIterator(null);
+        double[] segment = new double[6];
+        int i = 0;
+        while(!it.isDone()){
+            int type = it.currentSegment(segment);
+            if(i==0){
+                switch (type) {
+                case IGeneralPathX.SEG_MOVETO:
+                    Point p = new Point2D(segment[0], segment[1]);
+                    p = fixPoint(p);
+                    coordinates.add(((PointJTS)p).getJTSCoordinate());
+                    break;
+                default:
+                    String message = StringUtils.replace("Type of segment %(segment)s isn't SEG_MOVETO.","%(segment)s",String.valueOf(i));
+                    LOGGER.warn(message);
+                    throw new RuntimeException(message);
+                }
+            } else {
+                //Dudo de que los casos SEG_QUADTO y SEG_CUBICTO est�n bien pero se hac�a lo mismo en la librer�a de geometr�as vieja.
+                Point p;
+                switch (type) {
+                case IGeneralPathX.SEG_LINETO:
+                    p = new Point2D(segment[0], segment[1]);
+                    p = fixPoint(p);
+                    coordinates.add(((PointJTS)p).getJTSCoordinate());
+                    break;
+                case IGeneralPathX.SEG_QUADTO:
+                    for (int j = 0; j <= 1; j++) {
+                        p = new Point2D(segment[i], segment[i+1]);
+                        p = fixPoint(p);
+                        coordinates.add(((PointJTS) p).getJTSCoordinate());
+                    }
+                    break;
+                case IGeneralPathX.SEG_CUBICTO:
+                    for (int j = 0; j <= 2; j++) {
+                        p = new Point2D(segment[i], segment[i+1]);
+                        p = fixPoint(p);
+                        coordinates.add(((PointJTS) p).getJTSCoordinate());
+                    }
+                    break;
+                case IGeneralPathX.SEG_CLOSE:
+                    coordinates.add(coordinates.get(0));
+                    break;
+                default:
+                    String message = StringUtils.replace("The general path has a gap in segment %(segment)s.","%(segment)s",String.valueOf(i));
+                    LOGGER.warn(message);
+                    throw new RuntimeException(message);
+                }
+            }
+            it.next();
+            i++;
+        }
+    }
+
+    public void addMoveToVertex(Point point) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void closePrimitive() {
+        if (!coordinates.isEmpty() && !isClosed()) {
+            coordinates.add((Coordinate)coordinates.get(0).clone());
+        }
+    }
+
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        coordinates.ensureCapacity(capacity);
+        return (OrientablePrimitive) this;
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        if (ct == null) {
+            return;
+        }
+        ArrayListCoordinateSequence tmpCoordinates = new ArrayListCoordinateSequence();
+        tmpCoordinates.ensureCapacity(coordinates.size());
+        for (Coordinate coordinate : coordinates) {
+            java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(coordinate.x, coordinate.y);
+            try {
+                p = ct.convert(p, p);
+                coordinate.x = p.getX();
+                coordinate.y = p.getY();
+                tmpCoordinates.add(coordinate);
+            } 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)
+                */
+            }
+        }
+        coordinates=tmpCoordinates;
+        this.setProjection(ct.getPDest());
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        if (at == null) {
+            return;
+        }
+
+        for (Coordinate coordinate : coordinates) {
+            java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(coordinate.x, coordinate.y);
+
+            at.transform(p, p);
+            coordinate.x = p.getX();
+            coordinate.y = p.getY();
+        }
+    }
+
+    @Override
+    public int getDimension() {
+        return anyVertex.getDimension();
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(new SplineIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        SplineIterator pi = new SplineIterator(at);
+        return pi;
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new SplineIterator(null),false,0);
+    }
+
+    public class SplineIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+
+        /**
+         * Creates a new PointIterator object.
+         * @param at
+         *            The affine transform applied to coordinates during
+         *            iteration
+         */
+        public SplineIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            done = false;
+        }
+
+        /**
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        @Override
+        public void next() {
+            done = (getJTS().getCoordinates().length == ++index);
+        }
+
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        @Override
+        public int currentSegment(double[] coords) {
+            Coordinate[] jtsCoordinates = getJTS().getCoordinates();
+            coords[0] = jtsCoordinates[index].x;
+            coords[1] = jtsCoordinates[index].y;
+            at.transform(coords, 0, coords, 0, 1);
+
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        }
+
+        @Override
+        public int currentSegment(float[] coords) {
+            Coordinate[] jtsCoordinates = getJTS().getCoordinates();
+            coords[0] = (float)jtsCoordinates[index].x;
+            coords[1] = (float)jtsCoordinates[index].y;
+            at.transform(coords, 0, coords, 0, 1);
+
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        }
+    }
+
+
+    @Override
+    public boolean is3D() {
+        return anyVertex.is3D();
+    }
+
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Collections.reverse(coordinates);
+    }
+
+    protected ArrayListCoordinateSequence cloneCoordinates() {
+        ArrayListCoordinateSequence cloned = new ArrayListCoordinateSequence();
+        cloned.ensureCapacity(coordinates.size());
+        for (Coordinate coordinate : coordinates) {
+            cloned.add((Coordinate)coordinate.clone());
+        }
+        return cloned;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence();
+        coordinates2D.ensureCapacity(coordinates.size());
+        for (Coordinate coordinate : coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Spline2D s = new Spline2D(coordinates2D);
+        s.setProjection(this.getProjection());
+        return s;
+    }
+
+    protected boolean isClosed(){
+        return coordinates.get(0).equals(coordinates.get(coordinates.size()-1));
+    }
+
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return true;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3DM.java	(revision 46118)
@@ -0,0 +1,123 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import java.util.ArrayList;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Spline;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Spline3DM extends BaseSpline3DM implements Spline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6068987767873860480L;
+
+    /**
+     * @param subtype
+     */
+    public Spline3DM() {
+        super(Geometry.TYPES.SPLINE);
+    }
+
+    /**
+    *
+    */
+    public Spline3DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.SPLINE, coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Spline3DM(cloneCoordinates().toCoordinateArray());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, distance);
+        } else {
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, joinStyle, distance);
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, bufParams, distance);
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Spline3DM){
+            Spline3DM other = (Spline3DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+                if (otherCoordinate.getOrdinate(3) != coordinate.getOrdinate(3)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline2D.java	(revision 46118)
@@ -0,0 +1,108 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import java.util.ArrayList;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Spline;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Spline2D extends BaseSpline2D implements Spline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4618430296292660668L;
+
+    /**
+     * @param subtype
+     */
+    public Spline2D() {
+        super(Geometry.TYPES.SPLINE);
+    }
+
+    /**
+    *
+    */
+    public Spline2D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.SPLINE, coordinates);
+    }
+
+    public Spline2D(ArrayListCoordinateSequence coordinates) {
+        super(Geometry.TYPES.SPLINE, coordinates);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Spline2D(cloneCoordinates().toCoordinateArray());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, distance);
+        } else {
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, joinStyle, distance);
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, bufParams, distance);
+        }
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/Spline3D.java	(revision 46118)
@@ -0,0 +1,121 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.spline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import java.util.ArrayList;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.OpenJUMPUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Spline;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Spline3D extends BaseSpline3D implements Spline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8377943996574176559L;
+
+    /**
+     * @param subtype
+     */
+    public Spline3D() {
+        super(Geometry.TYPES.SPLINE);
+    }
+
+    /**
+    *
+    */
+    public Spline3D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.SPLINE, coordinates);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new Spline3D(cloneCoordinates().toCoordinateArray());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, distance);
+        } else {
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, distance);
+        }
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Coordinate[] coords = getJTS().getCoordinates();
+        ArrayListCoordinateSequence listCoordSequence = new ArrayListCoordinateSequence(new ArrayList<Coordinate>());
+        for (int i = 0; i < coords.length; i++) {
+            listCoordSequence.add(coords[i]);
+        }
+        if (isClosed()) {
+            return JTSUtils.offsetClosedLine(this.getProjection(), listCoordSequence, joinStyle, distance);
+        } else {
+            BufferParameters bufParams = JTSUtils.getBufferParameters(joinStyle, BufferParameters.CAP_FLAT);
+            return OpenJUMPUtils.offsetCleanOpenLine(this.getProjection(), listCoordSequence, bufParams, distance);
+        }
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof Spline3D){
+            Spline3D other = (Spline3D)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2DZ.java	(revision 46118)
@@ -0,0 +1,127 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.periellipse;
+
+import com.vividsolutions.jts.geom.LineString;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipse.BaseEllipse2DZ;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.PeriEllipse;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class PeriEllipse2DZ extends BaseEllipse2DZ implements PeriEllipse{
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -3947765110197450655L;
+
+    /**
+     * @param subtype
+     */
+    public PeriEllipse2DZ() {
+        super(Geometry.TYPES.PERIELLIPSE);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        PeriEllipse2DZ clone = new PeriEllipse2DZ();
+        clone.setPoints((Point)init.cloneGeometry(), (Point)end.cloneGeometry(), ydist);
+        return clone;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        //Ellipse's getJTSCoordinates return the coordinates in reverse order
+        LineString g = JTSUtils.createJTSLineString(coordinates);
+        return g.reverse();
+    }
+
+
+    /* (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 initialPoint, Point endPoint) {
+        String message = "Calling deprecated method setPoints of a perimeter of ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        PeriEllipse clonedEllipse = (PeriEllipse) this.cloneGeometry();
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Point center = new Point2D((getAxis1Start().getX()+getAxis1End().getX())/2,
+            (getAxis1Start().getY()+getAxis1End().getY())/2);
+        double axis1Lenght = getAxis1Start().distance(getAxis1End());
+
+        Point clonedAxis1Start = (Point) getAxis1Start().cloneGeometry();
+        Point clonedAxis1End = (Point) getAxis1End().cloneGeometry();
+        double clonedYDist = this.ydist+distance;
+
+        clonedAxis1Start.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1Start().getX(), axis1Lenght/2+distance));
+        clonedAxis1Start.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1Start().getY(), axis1Lenght/2+distance));
+
+        clonedAxis1End.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1End().getX(), axis1Lenght/2+distance));
+        clonedAxis1End.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1End().getY(), axis1Lenght/2+distance));
+
+        clonedEllipse.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist);
+        return clonedEllipse;
+    }
+ 
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        PeriEllipse2D other = new PeriEllipse2D();
+        other.setProjection(this.getProjection());
+        other.setPoints((Point)init.force2D(), (Point)end.force2D(), ydist);
+        return other;
+    }
+
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/periellipse/PeriEllipse2D.java	(revision 46118)
@@ -0,0 +1,127 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.curve.periellipse;
+
+import com.vividsolutions.jts.geom.LineString;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipse.BaseEllipse2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.PeriEllipse;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class PeriEllipse2D extends BaseEllipse2D implements PeriEllipse{
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3134998820077975586L;
+
+    /**
+     * @param subtype
+     */
+    public PeriEllipse2D() {
+        super(Geometry.TYPES.PERIELLIPSE);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        PeriEllipse2D other = new PeriEllipse2D();
+        other.setProjection(this.getProjection());
+        other.setPoints((Point)init.cloneGeometry(), (Point)end.cloneGeometry(), ydist);
+        return other;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        PeriEllipse2D other = new PeriEllipse2D();
+        other.setProjection(this.getProjection());
+        other.setPoints((Point)init.force2D(), (Point)end.force2D(), ydist);
+        return other;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        //Ellipse's getJTSCoordinates return the coordinates in reverse order
+        LineString g = JTSUtils.createJTSLineString(coordinates);
+        return g.reverse();
+    }
+
+    /* (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 initialPoint, Point endPoint) {
+        String message = "Calling deprecated method setPoints of a perimeter of ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        PeriEllipse clonedEllipse = (PeriEllipse) this.cloneGeometry();
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Point center = new Point2D((getAxis1Start().getX()+getAxis1End().getX())/2,
+            (getAxis1Start().getY()+getAxis1End().getY())/2);
+        double axis1Lenght = getAxis1Start().distance(getAxis1End());
+
+        Point clonedAxis1Start = (Point) getAxis1Start().cloneGeometry();
+        Point clonedAxis1End = (Point) getAxis1End().cloneGeometry();
+        double clonedYDist = this.ydist+distance;
+
+        clonedAxis1Start.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1Start().getX(), axis1Lenght/2+distance));
+        clonedAxis1Start.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1Start().getY(), axis1Lenght/2+distance));
+
+        clonedAxis1End.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1End().getX(), axis1Lenght/2+distance));
+        clonedAxis1End.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1End().getY(), axis1Lenght/2+distance));
+
+        clonedEllipse.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist);
+        return clonedEllipse;
+    }
+    
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2D.java	(revision 46118)
@@ -0,0 +1,327 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.polygon;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Polygon2D extends BaseLine2D implements Polygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4927309852756014929L;
+
+    List<Ring> interiorRings = new ArrayList<Ring>();
+
+    /**
+     * @param subtype
+     */
+    public Polygon2D() {
+        super(Geometry.TYPES.POLYGON);
+    }
+
+    /**
+    *
+    */
+    public Polygon2D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.POLYGON, coordinates);
+        closePrimitive();
+    }
+
+    public Polygon2D(ArrayListCoordinateSequence coordinates) {
+        super(Geometry.TYPES.POLYGON, coordinates);
+        closePrimitive();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Polygon cloneGeometry() {
+        Polygon2D cloned = new Polygon2D(cloneCoordinates().toCoordinateArray());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            cloned.addInteriorRing((Ring)getInteriorRing(i).cloneGeometry());
+        }
+        return cloned;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Polygon2D poligon2D = new Polygon2D(coordinates2D);
+        poligon2D.setProjection(this.getProjection());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            poligon2D.addInteriorRing((Ring)getInteriorRing(i).force2D());
+        }
+        return poligon2D;
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Polygon clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.
+     * fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        return interiorRings.size();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        return interiorRings.get(index);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        Ring2D ring = new Ring2D();
+        ring.ensureCapacity(line.getNumVertices());
+        for(int i=0; i<line.getNumVertices(); i++){
+            Point vertex = line.getVertex(i);
+            ring.addVertex(new Point2D(vertex.getX(), vertex.getY()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        Ring2D ring = new Ring2D();
+        ring.ensureCapacity(polygon.getNumVertices());
+        for(int i=0; i<polygon.getNumVertices(); i++){
+            Point vertex = polygon.getVertex(i);
+            ring.addVertex(new Point2D(vertex.getX(), vertex.getY()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        interiorRings.remove(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        multiLine.addPrimitive(new Line2D(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        multiPolygon.addPrimitive(this);
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PolygonIterator pi = new PolygonIterator(this, at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#ensureOrientation(boolean)
+     */
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        boolean result = super.ensureOrientation(ccw);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.ensureOrientation(!ccw);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#flip()
+     */
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        super.flip();
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.flip();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#transform(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public void transform(AffineTransform at) {
+        super.transform(at);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.transform(at);
+        }
+    }
+
+  /* (non-Javadoc)
+  * @see org.gvsig.fmap.geom.Geometry#offset(double)
+  */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+    
+    
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        super.reProject(ct);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.reProject(ct);
+        }
+        if (coordinates.size()>=2 && !isClosed()) {
+            closePrimitive();
+        }
+    }
+    
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return PolygonHelper.getShape(this, affineTransform);
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3D.java	(revision 46118)
@@ -0,0 +1,333 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.polygon;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Polygon3D extends BaseLine3D implements Polygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5748137753517288500L;
+
+    List<Ring> interiorRings = new ArrayList<Ring>();
+
+    /**
+     * @param subtype
+     */
+    public Polygon3D() {
+        super(Geometry.TYPES.POLYGON);
+    }
+
+    /**
+    *
+    */
+    public Polygon3D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.POLYGON, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Polygon cloneGeometry() {
+        Polygon3D cloned = new Polygon3D(cloneCoordinates().toCoordinateArray());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            cloned.addInteriorRing((Ring)getInteriorRing(i).cloneGeometry());
+        }
+        return cloned;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Polygon2D poligon2D = new Polygon2D(coordinates2D);
+        poligon2D.setProjection(this.getProjection());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            poligon2D.addInteriorRing((Ring)getInteriorRing(i).force2D());
+        }
+        return poligon2D;
+    }
+    
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Polygon clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        return this.interiorRings.size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        return interiorRings.get(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        Ring3D ring = new Ring3D();
+        ring.ensureCapacity(line.getNumVertices());
+        for(int i=0; i<line.getNumVertices(); i++){
+            Point3D vertex = (Point3D)line.getVertex(i);
+            ring.addVertex(new Point3D(vertex.getX(), vertex.getY(), vertex.getZ()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        Ring3D ring = new Ring3D();
+        ring.ensureCapacity(polygon.getNumVertices());
+        for(int i=0; i<polygon.getNumVertices(); i++){
+            Point3D vertex = (Point3D)polygon.getVertex(i);
+            ring.addVertex(new Point3D(vertex.getX(), vertex.getY(), vertex.getZ()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        interiorRings.remove(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        multiLine.addPrimitive(new Line3D(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        multiPolygon.addPrimitive(this);
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PolygonIterator pi = new PolygonIterator(this, at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#ensureOrientation(boolean)
+     */
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        boolean result = super.ensureOrientation(ccw);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.ensureOrientation(!ccw);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#flip()
+     */
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        super.flip();
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.flip();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#transform(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public void transform(AffineTransform at) {
+        super.transform(at);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.transform(at);
+        }
+    }
+
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+      }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+      
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+              GeometryJTS ring = (GeometryJTS) iterator.next();
+              ring.reProject(ct);
+          }
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Polygon3D){
+              Polygon3D other = (Polygon3D)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+            for (int i = 0; i < this.getNumVertices(); i++) {
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+            }
+              if(this.getNumInteriorRings() != other.getNumInteriorRings()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumInteriorRings(); i++){
+                  if(!other.getInteriorRing(i).equals(this.getInteriorRing(i))){
+                      return false;
+                  }
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+      
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return PolygonHelper.getShape(this, affineTransform);
+    }   
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonIterator.java	(revision 46118)
@@ -0,0 +1,156 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.polygon;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+
+/**
+ * @author  fdiaz
+ */
+public class PolygonIterator implements PathIterator {
+
+    /** Transform applied on the coordinates during iteration */
+    private final AffineTransform at;
+
+    /** True when the point has been read once */
+    private boolean done;
+    private int index = 0;
+    private final Polygon polygon;
+    private int currentRing=0;
+    private int currentRingIndex=0;
+    private int numVertices = -1;
+
+    /**
+     * Creates a new PointIterator object.
+     *
+     * @param polygon
+     * @param at
+     */
+    public PolygonIterator(Polygon polygon, AffineTransform at) {
+        if (at == null) {
+            at = new AffineTransform();
+        }
+        this.polygon = polygon;
+        this.at = at;
+        done = false;
+    }
+
+    @Override
+    public int getWindingRule() {
+        return PathIterator.WIND_EVEN_ODD;
+    }
+
+    @Override
+    public void next() {
+        if( numVertices < 0 ) {
+            numVertices = this.polygon.getNumVertices();
+            for( int i = 0; i < this.polygon.getNumInteriorRings(); i++ ) {
+                numVertices += this.polygon.getInteriorRing(i).getNumVertices();
+            }
+        }
+        done = (numVertices == ++index);
+    }
+
+    @Override
+    public boolean isDone() {
+        return done;
+    }
+
+    @Override
+    public int currentSegment(double[] coords) {
+        if (index<this.polygon.getNumVertices()){
+            coords[0] = this.polygon.getCoordinateAt(index, 0);
+            coords[1] = this.polygon.getCoordinateAt(index, 1);
+            at.transform(coords, 0, coords, 0, 1);
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        } else {
+            if( currentRing < polygon.getNumInteriorRings() ) {
+                Ring ring = this.polygon.getInteriorRing(currentRing);
+                coords[0] = ring.getCoordinateAt(currentRingIndex, 0);
+                coords[1] = ring.getCoordinateAt(currentRingIndex, 1);
+                at.transform(coords, 0, coords, 0, 1);
+                if (currentRingIndex == 0) {
+                    currentRingIndex++;
+                    if( currentRingIndex>=ring.getNumVertices() ) {
+                        currentRing++;
+                        currentRingIndex=0;
+                    }
+                    return PathIterator.SEG_MOVETO;
+                } else {
+                    currentRingIndex++;
+                    if( currentRingIndex>=ring.getNumVertices() ) {
+                        currentRing++;
+                        currentRingIndex=0;
+                    }
+                    return PathIterator.SEG_LINETO;
+                }
+            }
+            return PathIterator.SEG_CLOSE; //FIXME: ??????
+        }
+    }
+
+    @Override
+    public int currentSegment(float[] coords) {
+        if (index<this.polygon.getNumVertices()){
+            coords[0] = (float) this.polygon.getCoordinateAt(index, 0);
+            coords[1] = (float) this.polygon.getCoordinateAt(index, 1);
+            at.transform(coords, 0, coords, 0, 1);
+            if (index == 0) {
+                return PathIterator.SEG_MOVETO;
+            } else {
+                return PathIterator.SEG_LINETO;
+            }
+        } else {
+            if( currentRing < polygon.getNumInteriorRings() ) {
+                Ring ring = this.polygon.getInteriorRing(currentRing);
+                coords[0] = (float) ring.getCoordinateAt(currentRingIndex, 0);
+                coords[1] = (float) ring.getCoordinateAt(currentRingIndex, 1);
+                at.transform(coords, 0, coords, 0, 1);
+                if (currentRingIndex == 0) {
+                    currentRingIndex++;
+                    if( currentRingIndex>=ring.getNumVertices() ) {
+                        currentRing++;
+                        currentRingIndex=0;
+                    }
+                    return PathIterator.SEG_MOVETO;
+                } else {
+                    currentRingIndex++;
+                    if( currentRingIndex>=ring.getNumVertices() ) {
+                        currentRing++;
+                        currentRingIndex=0;
+                    }
+                    return PathIterator.SEG_LINETO;
+                }
+            }
+            return PathIterator.SEG_CLOSE; //FIXME: ??????
+        }
+    }
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/PolygonHelper.java	(revision 46118)
@@ -0,0 +1,25 @@
+
+package org.gvsig.fmap.geom.jts.primitive.surface.polygon;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+public class PolygonHelper {
+
+    public static Shape getShape(Polygon polygon, AffineTransform affineTransform) {
+        if( polygon.isEmpty() ) {
+            // Esto no deberia de pasar, se trataria de una geometria
+            // corrupta.
+            return new GeneralPath();
+        }
+        int capacity = polygon.getNumVertices();
+        for( int i = 0; i < polygon.getNumInteriorRings(); i++ ) {
+            capacity += polygon.getInteriorRing(i).getNumVertices();
+        }
+        return new DefaultGeneralPathX(polygon.getPathIterator(affineTransform),false,0,capacity);
+    }       
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon2DM.java	(revision 46118)
@@ -0,0 +1,335 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.polygon;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Polygon2DM extends BaseLine2DM implements Polygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3755255543825597334L;
+
+    List<Ring> interiorRings = new ArrayList<Ring>();
+
+    /**
+     * @param subtype
+     */
+    public Polygon2DM() {
+        super(Geometry.TYPES.POLYGON);
+    }
+
+    /**
+    *
+    */
+    public Polygon2DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.POLYGON, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Polygon cloneGeometry() {
+        Polygon2DM cloned = new Polygon2DM(cloneCoordinates().toCoordinateArray());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            cloned.addInteriorRing((Ring)getInteriorRing(i).cloneGeometry());
+        }
+        return cloned;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Polygon2D poligon2D = new Polygon2D(coordinates2D);
+        poligon2D.setProjection(this.getProjection());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            poligon2D.addInteriorRing((Ring)getInteriorRing(i).force2D());
+        }
+        return poligon2D;
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Polygon clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        return interiorRings.size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        return interiorRings.get(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        Ring2DM ring = new Ring2DM();
+        ring.ensureCapacity(line.getNumVertices());
+        for(int i=0; i<line.getNumVertices(); i++){
+            Point2DM vertex = (Point2DM)line.getVertex(i);
+            ring.addVertex(new Point2DM(vertex.getX(), vertex.getY(),vertex.getM()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        Ring2DM ring = new Ring2DM();
+        ring.ensureCapacity(polygon.getNumVertices());
+        for(int i=0; i<polygon.getNumVertices(); i++){
+            Point2DM vertex = (Point2DM)polygon.getVertex(i);
+            ring.addVertex(new Point2DM(vertex.getX(), vertex.getY(),vertex.getM()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        interiorRings.remove(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        multiLine.addPrimitive(new Line2DM(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        multiPolygon.addPrimitive(this);
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
+    }
+
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PolygonIterator pi = new PolygonIterator(this, at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#ensureOrientation(boolean)
+     */
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        boolean result = super.ensureOrientation(ccw);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.ensureOrientation(!ccw);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#flip()
+     */
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        super.flip();
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.flip();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#transform(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public void transform(AffineTransform at) {
+        super.transform(at);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.transform(at);
+        }
+    }
+
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+      }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+      
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+              GeometryJTS ring = (GeometryJTS) iterator.next();
+              ring.reProject(ct);
+          }
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Polygon2DM){
+              Polygon2DM other = (Polygon2DM)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumVertices(); i++){
+                  if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                      return false;
+                  };
+              }
+              if(this.getNumInteriorRings() != other.getNumInteriorRings()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumInteriorRings(); i++){
+                  if(!other.getInteriorRing(i).equals(this.getInteriorRing(i))){
+                      return false;
+                  }
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+      
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return PolygonHelper.getShape(this, affineTransform);
+    }         
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/polygon/Polygon3DM.java	(revision 46118)
@@ -0,0 +1,340 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.polygon;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Polygon3DM extends BaseLine3DM implements Polygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5989088152154360862L;
+
+    List<Ring> interiorRings = new ArrayList<Ring>();
+
+    /**
+     * @param subtype
+     */
+    public Polygon3DM() {
+        super(Geometry.TYPES.POLYGON);
+    }
+
+
+    /**
+    *
+    */
+    public Polygon3DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.POLYGON, coordinates);
+        closePrimitive();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        return interiorRings.size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        return interiorRings.get(index);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        Ring3DM ring = new Ring3DM();
+        ring.ensureCapacity(line.getNumVertices());
+        for(int i=0; i<line.getNumVertices(); i++){
+            Point3DM vertex = (Point3DM)line.getVertex(i);
+            ring.addVertex(new Point3DM(vertex.getX(), vertex.getY(), vertex.getZ(), vertex.getM()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.
+     * geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        Ring3DM ring = new Ring3DM();
+        ring.ensureCapacity(polygon.getNumVertices());
+        for(int i=0; i<polygon.getNumVertices(); i++){
+            Point3DM vertex = (Point3DM)polygon.getVertex(i);
+            ring.addVertex(new Point3DM(vertex.getX(), vertex.getY(), vertex.getZ(), vertex.getM()));
+        }
+        ring.closePrimitive();
+        interiorRings.add(ring);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        interiorRings.remove(index);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        multiLine.addPrimitive(new Line3DM(coordinates.toCoordinateArray()));
+        return multiLine;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        multiPolygon.addPrimitive(this);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Polygon cloneGeometry() {
+        Polygon3DM cloned = new Polygon3DM(cloneCoordinates().toCoordinateArray());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            cloned.addInteriorRing((Ring)getInteriorRing(i).cloneGeometry());
+        }
+        return cloned;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Polygon2D poligon2D = new Polygon2D(coordinates2D);
+        poligon2D.setProjection(this.getProjection());
+        for (int i = 0; i < getNumInteriorRings(); i++){
+            poligon2D.addInteriorRing((Ring)getInteriorRing(i).force2D());
+        }
+        return poligon2D;
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Polygon clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(coordinates, interiorRings);
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PolygonIterator pi = new PolygonIterator(this, at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#ensureOrientation(boolean)
+     */
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        boolean result = super.ensureOrientation(ccw);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.ensureOrientation(!ccw);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#flip()
+     */
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        super.flip();
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.flip();
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#transform(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public void transform(AffineTransform at) {
+        super.transform(at);
+        for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+            GeometryJTS ring = (GeometryJTS) iterator.next();
+            ring.transform(at);
+        }
+    }
+
+
+    /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.Geometry#offset(double)
+    */
+      public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+          return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+      }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+
+      /* (non-Javadoc)
+       * @see org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#reProject(org.cresques.cts.ICoordTrans)
+       */
+      @Override
+      public void reProject(ICoordTrans ct) {
+          super.reProject(ct);
+          for (Iterator<Ring> iterator = interiorRings.iterator(); iterator.hasNext();) {
+              GeometryJTS ring = (GeometryJTS) iterator.next();
+              ring.reProject(ct);
+          }
+          if (coordinates.size()>=2 && !isClosed()) {
+              closePrimitive();
+          }
+      }
+
+      @Override
+      public boolean equals(Object obj) {
+          boolean res = super.equals(obj);
+          if(res && obj instanceof Polygon3DM){
+              Polygon3DM other = (Polygon3DM)obj;
+              if(this.getNumVertices() != other.getNumVertices()){
+                  return false;
+              }
+            for (int i = 0; i < this.getNumVertices(); i++) {
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+                if (otherCoordinate.getOrdinate(3) != coordinate.getOrdinate(3)) {
+                    return false;
+                }
+            }
+              if(this.getNumInteriorRings() != other.getNumInteriorRings()){
+                  return false;
+              }
+              for(int i=0; i < this.getNumInteriorRings(); i++){
+                  if(!other.getInteriorRing(i).equals(this.getInteriorRing(i))){
+                      return false;
+                  }
+              }
+              return true;
+          } else {
+              return false;
+          }
+      }
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return PolygonHelper.getShape(this, affineTransform);
+    }         
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2DM.java	(revision 46118)
@@ -0,0 +1,196 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.filledspline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.BaseSpline2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline2DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.FilledSpline;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilledSpline2DM extends BaseSpline2DM implements FilledSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5991348858703093647L;
+
+    /**
+     *
+     */
+    public FilledSpline2DM() {
+        super(Geometry.TYPES.FILLEDSPLINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public FilledSpline2DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.FILLEDSPLINE, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getNumInteriorRings of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        String message = "Calling deprecated method removeInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new FilledSpline2DM(cloneCoordinates().toCoordinateArray());
+        }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(getSplineCoordinates());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+    
+    public Geometry offset(int jointStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(jointStyle)));
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        super.reProject(ct);
+        if (coordinates.size()>=2 && !isClosed()) {
+            closePrimitive();
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof FilledSpline2DM){
+            FilledSpline2DM other = (FilledSpline2DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for(int i=0; i < this.getNumVertices(); i++){
+                if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                    return false;
+                };
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3DM.java	(revision 46118)
@@ -0,0 +1,200 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.filledspline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.BaseSpline3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline3DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.FilledSpline;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilledSpline3DM extends BaseSpline3DM implements FilledSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1127282615744603309L;
+
+    /**
+     *
+     */
+    public FilledSpline3DM() {
+        super(Geometry.TYPES.FILLEDSPLINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public FilledSpline3DM(Coordinate[] coordinates) {
+        super(Geometry.TYPES.FILLEDSPLINE, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getNumInteriorRings of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        String message = "Calling deprecated method removeInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new FilledSpline3DM(cloneCoordinates().toCoordinateArray());
+        }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(getSplineCoordinates());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    public Geometry offset(int jointStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(jointStyle)));
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        super.reProject(ct);
+        if (coordinates.size()>=2 && !isClosed()) {
+            closePrimitive();
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof FilledSpline3DM){
+            FilledSpline3DM other = (FilledSpline3DM)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for (int i = 0; i < this.getNumVertices(); i++) {
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+                if (otherCoordinate.getOrdinate(3) != coordinate.getOrdinate(3)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline2D.java	(revision 46118)
@@ -0,0 +1,180 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.filledspline;
+
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.BaseSpline2D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.FilledSpline;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilledSpline2D extends BaseSpline2D implements FilledSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8857987884304738266L;
+
+    /**
+     *
+     */
+    public FilledSpline2D() {
+        super(Geometry.TYPES.FILLEDSPLINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public FilledSpline2D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.FILLEDSPLINE, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getNumInteriorRings of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        String message = "Calling deprecated method removeInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new FilledSpline2D(cloneCoordinates().toCoordinateArray());
+        }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(getSplineCoordinates());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(int jointStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(jointStyle)));
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        super.reProject(ct);
+        if (coordinates.size()>=2 && !isClosed()) {
+            closePrimitive();
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/filledspline/FilledSpline3D.java	(revision 46118)
@@ -0,0 +1,196 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.filledspline;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.BaseSpline3D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.FilledSpline;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilledSpline3D extends BaseSpline3D implements FilledSpline {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8947796452807902242L;
+
+    /**
+     *
+     */
+    public FilledSpline3D() {
+        super(Geometry.TYPES.FILLEDSPLINE);
+    }
+
+    /**
+     * @param coordinates
+     */
+    public FilledSpline3D(Coordinate[] coordinates) {
+        super(Geometry.TYPES.FILLEDSPLINE, coordinates);
+        closePrimitive();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+     */
+    public void setSurfaceAppearance(SurfaceAppearance app) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+     */
+    public SurfaceAppearance getSurfaceAppearance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getNumInteriorRings()
+     */
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getNumInteriorRings of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#getInteriorRing(int)
+     */
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Ring)
+     */
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Line)
+     */
+    public void addInteriorRing(Line line) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#addInteriorRing(org.gvsig.fmap.geom.primitive.Polygon)
+     */
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling deprecated method addInteriorRing of a filled spline";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Surface#removeInteriorRing(int)
+     */
+    public void removeInteriorRing(int index) {
+        String message = "Calling deprecated method removeInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        return new FilledSpline3D(cloneCoordinates().toCoordinateArray());
+        }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPolygon(getSplineCoordinates());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    public Geometry offset(int jointStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(jointStyle)));
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.curve.spline.AbstractSpline#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        super.reProject(ct);
+        if (coordinates.size()>=2 && !isClosed()) {
+            closePrimitive();
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        boolean res = super.equals(obj);
+        if(res && obj instanceof FilledSpline3D){
+            FilledSpline3D other = (FilledSpline3D)obj;
+            if(this.getNumVertices() != other.getNumVertices()){
+                return false;
+            }
+            for (int i = 0; i < this.getNumVertices(); i++) {
+                Coordinate coordinate = this.coordinates.get(i);
+                Coordinate otherCoordinate = other.coordinates.get(i);
+                if (otherCoordinate.getOrdinate(2) != coordinate.getOrdinate(2)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2DZ.java	(revision 46118)
@@ -0,0 +1,62 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipticarc;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.EllipticArc;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class EllipticArc2DZ extends BaseEllipticArc2D implements EllipticArc {
+
+    /**
+     * @param subtype
+     */
+    public EllipticArc2DZ() {
+        super(Geometry.TYPES.ELLIPTICARC);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        EllipticArc2DZ clone = new EllipticArc2DZ();
+        clone.setPoints((Point)axis1Start.cloneGeometry(), (Point)axis1End.cloneGeometry(), semiAxis2Length, angSt, angExt);
+        return clone;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2D.java	(revision 46118)
@@ -0,0 +1,145 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipticarc;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseEllipticArc2D extends AbstractEllipticArc {
+
+    /**
+     * @param subtype
+     */
+    public BaseEllipticArc2D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                coordinates.add(new Coordinate(coords[4], coords[5]));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add((Coordinate)coordinates.get(0).clone());
+                break;
+            }
+            pi.next();
+        }
+        return coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/AbstractEllipticArc.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/AbstractEllipticArc.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/AbstractEllipticArc.java	(revision 46118)
@@ -0,0 +1,420 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipticarc;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.PathIterator;
+
+import org.cresques.cts.CoordTransRuntimeException;
+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.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.AbstractSurface;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.UtilFunctions;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.EllipticArc;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+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.Ring;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractEllipticArc extends AbstractSurface {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6163269454714321454L;
+    protected Point axis1Start;
+    protected Point axis1End;
+    protected double semiAxis2Length;
+    protected double angSt;
+    protected double angExt;
+
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    protected AbstractEllipticArc(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    @Override
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling unsupported method addInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Line ring) {
+
+        String message = "Calling unsupported method addInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+
+    }
+
+    @Override
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling unsupported method addInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeInteriorRing(int index) {
+        String message = "Calling unsupported method removeInteriorRing of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public double getCoordinateAt(int index, int dimension) {
+        String message = "Calling deprecated method getCoordinateAt of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        String message = "Calling deprecated method setCoordinateAt of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(Point point) {
+        String message = "Calling deprecated method addVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y) {
+        String message = "Calling deprecated method addVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Calling deprecated method addVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeVertex(int index) {
+        String message = "Calling deprecated method removeVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Point getVertex(int index) {
+        String message = "Calling deprecated method getVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public int getNumVertices() {
+        String message = "Calling deprecated method getNumVertices of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        String message = "Calling deprecated method insertVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setVertex(int index, Point p) {
+        String message = "Calling deprecated method setVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        String message = "Calling deprecated method setGeneralPath of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addMoveToVertex(Point point) {
+        String message = "Calling deprecated method addMoveToVertex of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void closePrimitive() {
+        String message = "Calling deprecated method closePrimitive of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        String message = "Calling deprecated method ensureCapacity of a ellipticArc";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(this.getProjection(), JTSUtils.getPointAtYAxisInEllipse(axis1Start, axis1End, semiAxis2Length));
+        try {
+        axis1Start.reProject(ct);
+        axis1End.reProject(ct);
+        aux.reProject(ct);
+        this.setProjection(ct.getPDest());
+        } catch (CoordTransRuntimeException e) {
+            //Si ha fallado la reproyecci�n de alguno de los puntos, ponemos todas las coordenadas a 0
+            axis1Start.setX(0);
+            axis1Start.setY(0);
+            axis1End.setX(0);
+            axis1End.setY(0);
+            semiAxis2Length = 0;
+        }
+        try {
+            Point2D transformedMiddlePoint = new Point2D(this.getProjection(), JTSUtils.getMidPoint(axis1Start, axis1End));
+            semiAxis2Length = transformedMiddlePoint.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the radius of the transformed circle.", e);
+        }
+
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(this.getProjection(), JTSUtils.getPointAtYAxisInEllipse(axis1Start, axis1End, semiAxis2Length));
+        axis1Start.transform(at);
+        axis1End.transform(at);
+        aux.transform(at);
+        try {
+            Point2D transformedMiddlePoint = new Point2D(this.getProjection(), JTSUtils.getMidPoint(axis1Start, axis1End));
+            semiAxis2Length = transformedMiddlePoint.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the minor semi-axis of the transformed ellipse.", e);
+        }
+
+    }
+
+    @Override
+    public int getDimension() {
+        return axis1Start.getDimension();
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        return getPathIterator(at, getManager().getFlatness());
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        try {
+            double axis1Lenght = axis1Start.distance(axis1End);
+            java.awt.geom.Point2D center =
+                new java.awt.geom.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, new java.awt.geom.Point2D.Double(axis1Start.getX(), axis1Start.getY()));
+
+            Arc2D.Double arc =
+                new Arc2D.Double(x, y, axis1Lenght, 2 * semiAxis2Length, Math.toDegrees(angSt), Math.toDegrees(angExt),
+                    Arc2D.CHORD);
+            AffineTransform mT = AffineTransform.getRotateInstance(angle, center.getX(), center.getY());
+            return arc.getPathIterator(null, geomManager.getFlatness());
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the radius of the transformed circle.", e);
+        }
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+
+        GeneralPathX gp = new DefaultGeneralPathX(getPathIterator(null, getManager().getFlatness()), is3D(), 0.0);
+         return gp;
+     }
+
+    @Override
+    public boolean is3D() {
+        return ((PointJTS)axis1Start).is3D();
+    }
+
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+
+    public void setPoints(Point axis1Start, Point axis1End, double axis2Length, double angSt, double angExt) {
+        this.axis1Start = fixPoint(axis1Start);
+        this.axis1End = fixPoint(axis1End);
+        this.semiAxis2Length = axis2Length;
+        this.angSt = angSt;
+        this.angExt = angExt;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        EllipticArc2D other = new EllipticArc2D();
+        Point theAxis1Start = (Point) this.axis1Start.force2D();
+        Point theAxis1End = (Point) this.axis1End.force2D();
+        other.setPoints(theAxis1Start, theAxis1End, semiAxis2Length, angSt, angExt);
+        other.setProjection(this.getProjection());
+        return other;
+    }
+
+    public Point getAxis1Start() {
+        return axis1Start;
+    }
+
+    public Point getAxis1End() {
+        return axis1End;
+    }
+
+    public double getAxis2Dist() {
+        return semiAxis2Length;
+    }
+
+    public double getAngSt(){
+        return this.angSt;
+    }
+
+    public double getAngExt(){
+        return this.angExt;
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        //FIXME: throw UnssupportedOperationException or do nothing?
+//        String message = "Can't flip a ellipse";
+//        notifyDeprecated(message);
+//        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        EllipticArc cloned = (EllipticArc) this.cloneGeometry();
+
+        Point center = new Point2D((getAxis1Start().getX()+getAxis1End().getX())/2,
+            (getAxis1Start().getY()+getAxis1End().getY())/2);
+        double axis1Lenght = getAxis1Start().distance(getAxis1End());
+
+        Point clonedAxis1Start = (Point) getAxis1Start().cloneGeometry();
+        Point clonedAxis1End = (Point) getAxis1End().cloneGeometry();
+        double clonedYDist = this.semiAxis2Length+distance;
+
+        clonedAxis1Start.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1Start().getX(), axis1Lenght/2+distance));
+        clonedAxis1Start.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1Start().getY(), axis1Lenght/2+distance));
+
+        clonedAxis1End.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1End().getX(), axis1Lenght/2+distance));
+        clonedAxis1End.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1End().getY(), axis1Lenght/2+distance));
+
+        cloned.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist, this.angSt, this.angExt);
+        return cloned;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+    
+    
+
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return false;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return false;
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/EllipticArc2D.java	(revision 46118)
@@ -0,0 +1,67 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipticarc;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.EllipticArc;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class EllipticArc2D extends BaseEllipticArc2D implements EllipticArc {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5322955259356740635L;
+
+    /**
+     * @param subtype
+     */
+    public EllipticArc2D() {
+        super(Geometry.TYPES.ELLIPTICARC);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        EllipticArc2D clone = new EllipticArc2D();
+        clone.setPoints((Point)axis1Start.cloneGeometry(), (Point)axis1End.cloneGeometry(), semiAxis2Length, angSt, angExt);
+        return clone;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/BaseEllipticArc2DZ.java	(revision 46118)
@@ -0,0 +1,156 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipticarc;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseEllipticArc2DZ extends AbstractEllipticArc {
+
+    private double zValue = Double.NaN;
+
+    /**
+     * @param subtype
+     */
+    public BaseEllipticArc2DZ(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            Point3D point3D = (Point3D) point;
+            if (Double.isNaN(zValue) && !(Double.isNaN(point3D.getZ()))) {
+                zValue = point3D.getZ();
+                if (axis1Start!=null) {
+                    ((Point3D) axis1Start).setZ(zValue);
+                }
+                if (axis1End!=null) {
+                    ((Point3D) axis1End).setZ(zValue);
+                }
+                return point3D;
+            }
+        }
+        return new Point3D(point.getX(), point.getY(), Double.isNaN(zValue)?0:zValue);
+    }
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                coordinates.add(new Coordinate(coords[4], coords[5], zValue));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add((Coordinate)coordinates.get(0).clone());
+                break;
+            }
+            pi.next();
+        }
+        return coordinates;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point3D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/AbstractSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/AbstractSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/AbstractSurface.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface;
+
+import org.gvsig.fmap.geom.jts.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.primitive.SurfaceAppearance;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractSurface extends AbstractPrimitive implements Surface {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 452141349577139850L;
+
+    /**
+    *
+    */
+   protected AbstractSurface(int type, int subtype) {
+       super(type, subtype);
+   }
+
+
+   /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.primitive.Surface#setSurfaceAppearance(org.gvsig.fmap.geom.primitive.SurfaceAppearance)
+    */
+   public void setSurfaceAppearance(SurfaceAppearance app) {
+       // TODO Auto-generated method stub
+
+   }
+
+   /* (non-Javadoc)
+    * @see org.gvsig.fmap.geom.primitive.Surface#getSurfaceAppearance()
+    */
+   public SurfaceAppearance getSurfaceAppearance() {
+       // TODO Auto-generated method stub
+       return null;
+   }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2DZ.java	(revision 46118)
@@ -0,0 +1,162 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipse;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseEllipse2DZ extends AbstractEllipse {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1642655515234226372L;
+    private double zValue = Double.NaN;
+
+    /**
+     * @param subtype
+     */
+    public BaseEllipse2DZ(int type) {
+        super(type, Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            Point3D point3D = (Point3D) point;
+            if (Double.isNaN(zValue) && !(Double.isNaN(point3D.getZ()))) {
+                zValue = point3D.getZ();
+                if (init!=null) {
+                    ((Point3D) init).setZ(zValue);
+                }
+                if (end!=null) {
+                    ((Point3D) end).setZ(zValue);
+                }
+                return point3D;
+            }
+        }
+        return new Point3D(point.getX(), point.getY(), Double.isNaN(zValue)?0:zValue);
+    }
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                coordinates.add(new Coordinate(coords[4], coords[5], zValue));
+                break;
+            case PathIterator.SEG_CLOSE:
+                if(!coordinates.isEmpty() && !coordinates.get(0).equals(coordinates.get(coordinates.size()-1))){
+                    coordinates.add((Coordinate) coordinates.get(0).clone());
+                }
+                break;
+            }
+            pi.next();
+        }
+        return coordinates;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point3D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2DZ.java	(revision 46118)
@@ -0,0 +1,137 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipse;
+
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ellipse2DZ extends BaseEllipse2DZ implements Ellipse {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3329324719860569909L;
+
+    /**
+     * @param subtype
+     */
+    public Ellipse2DZ() {
+        super(Geometry.TYPES.ELLIPSE);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Ellipse2DZ clone = new Ellipse2DZ();
+        clone.setPoints((Point)init.cloneGeometry(), (Point)end.cloneGeometry(), ydist);
+        return clone;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleCorner()
+     */
+    public Point getRectangleCorner() {
+        return new Point3D(
+            this.getAxis1Start().getX(),
+            this.getAxis1Start().getY()-this.getAxis2Dist(),
+            ((Point3D)this.getAxis1Start()).getZ());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleHeight()
+     */
+    public double getRectangleHeight() {
+        return this.getAxis2Dist()*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleWidth()
+     */
+    public double getRectangleWidth() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return this.getAxis1Start().distance(this.getAxis1End());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleRotation()
+     */
+    public AffineTransform getRectangleRotation() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return AffineTransform.getRotateInstance(getAxis1Angle(), this.getAxis1Start().getX(), this.getAxis1Start().getY());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Ellipse clonedEllipse = (Ellipse) this.cloneGeometry();
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Point axis1Start = getAxis1Start();
+        Point center = new Point2D((axis1Start.getX()+getAxis1End().getX())/2,
+            (axis1Start.getY()+getAxis1End().getY())/2);
+        double axis1Lenght = getAxis1Start().distance(getAxis1End());
+
+        Point clonedAxis1Start = (Point) axis1Start.cloneGeometry();
+        Point clonedAxis1End = (Point) getAxis1End().cloneGeometry();
+        double clonedYDist = this.ydist+distance;
+
+        clonedAxis1Start.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1Start().getX(), axis1Lenght/2+distance));
+        clonedAxis1Start.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1Start().getY(), axis1Lenght/2+distance));
+
+        clonedAxis1End.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1End().getX(), axis1Lenght/2+distance));
+        clonedAxis1End.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1End().getY(), axis1Lenght/2+distance));
+
+        clonedEllipse.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist);
+        return clonedEllipse;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/BaseEllipse2D.java	(revision 46118)
@@ -0,0 +1,153 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipse;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseEllipse2D extends AbstractEllipse {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 183488293452726475L;
+
+    /**
+     * @param subtype
+     */
+    public BaseEllipse2D(int type) {
+        super(type, Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.curve.line.AbstractLine#fixPoint(org
+     * .gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                coordinates.add(new Coordinate(coords[4], coords[5]));
+                break;
+            case PathIterator.SEG_CLOSE:
+                if(!coordinates.isEmpty() && !coordinates.get(0).equals(coordinates.get(coordinates.size()-1))){
+                    coordinates.add((Coordinate) coordinates.get(0).clone());
+                }
+                break;
+            }
+            pi.next();
+        }
+        return coordinates;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/AbstractEllipse.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/AbstractEllipse.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/AbstractEllipse.java	(revision 46118)
@@ -0,0 +1,376 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipse;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.cresques.cts.CoordTransRuntimeException;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.AbstractSurface;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.UtilFunctions;
+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.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.Ring;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractEllipse extends AbstractSurface {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4218931408628745830L;
+
+    protected Point init;
+    protected Point end;
+    protected double ydist;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    protected AbstractEllipse(int type, int subtype) {
+        super(type, subtype);
+    }
+    
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Ellipse2D other = new Ellipse2D();
+        other.setPoints((Point)init.force2D(), (Point)end.force2D(), ydist);
+        other.setProjection(this.getProjection());
+        return other;
+    }
+
+    @Override
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling unsupported method addInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Line ring) {
+
+        String message = "Calling unsupported method addInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+
+    }
+
+    @Override
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling unsupported method addInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeInteriorRing(int index) {
+        String message = "Calling unsupported method removeInteriorRing of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public double getCoordinateAt(int index, int dimension) {
+        String message = "Calling deprecated method getCoordinateAt of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        String message = "Calling deprecated method setCoordinateAt of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(Point point) {
+        String message = "Calling deprecated method addVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y) {
+        String message = "Calling deprecated method addVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Calling deprecated method addVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeVertex(int index) {
+        String message = "Calling deprecated method removeVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Point getVertex(int index) {
+        String message = "Calling deprecated method getVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public int getNumVertices() {
+        String message = "Calling deprecated method getNumVertices of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        String message = "Calling deprecated method insertVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setVertex(int index, Point p) {
+        String message = "Calling deprecated method setVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        String message = "Calling deprecated method setGeneralPath of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addMoveToVertex(Point point) {
+        String message = "Calling deprecated method addMoveToVertex of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void closePrimitive() {
+        String message = "Calling deprecated method closePrimitive of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        String message = "Calling deprecated method ensureCapacity of a ellipse";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        // FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n,
+        // rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(this.getProjection(), JTSUtils.getPointAtYAxisInEllipse(init, end, ydist));
+        try {
+            init.reProject(ct);
+            end.reProject(ct);
+            aux.reProject(ct);
+            this.setProjection(ct.getPDest());
+        } catch (CoordTransRuntimeException e) {
+            //Si no se ha podido reproyectar alguno de los puntos, les asignamos 0 a todas las coordenadas
+            init.setX(0);
+            init.setY(0);
+            end.setX(0);
+            end.setY(0);
+            ydist = 0;
+        }
+        try {
+            Point2D transformedMiddlePoint = new Point2D(this.getProjection(), JTSUtils.getMidPoint(init, end));
+            ydist = transformedMiddlePoint.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the radius of the transformed circle.", e);
+        }
+
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(this.getProjection(), JTSUtils.getPointAtYAxisInEllipse(init, end, ydist));
+        init.transform(at);
+        end.transform(at);
+        aux.transform(at);
+        try {
+            Point2D transformedMiddlePoint = new Point2D(this.getProjection(), JTSUtils.getMidPoint(init, end));
+            ydist = transformedMiddlePoint.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the minor semi-axis of the transformed ellipse.", e);
+        }
+
+    }
+
+    @Override
+    public int getDimension() {
+        return init.getDimension();
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        return getPathIterator(at, getManager().getFlatness());
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+
+        java.awt.geom.Point2D.Double p1 = new java.awt.geom.Point2D.Double(init.getX(), init.getY());
+        java.awt.geom.Point2D.Double p2 = new java.awt.geom.Point2D.Double(end.getX(), end.getY());
+
+        java.awt.Shape ellipse = UtilFunctions.createEllipse(p1, p2, ydist);
+
+        return ellipse.getPathIterator(at, flatness);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+
+        GeneralPathX gp = new DefaultGeneralPathX(getPathIterator(null, getManager().getFlatness()), is3D(), 0.0);
+         return gp;
+     }
+
+    @Override
+    public boolean is3D() {
+        return ((PointJTS)init).is3D();
+    }
+
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+
+    public void setPoints(Point axis1Start, Point axis1End, double axis2Length) {
+        init = fixPoint(axis1Start);
+        end = fixPoint(axis1End);
+        ydist = axis2Length;
+    }
+
+    public Point getAxis1Start() {
+        return init;
+    }
+
+    public Point getAxis1End() {
+        return end;
+    }
+
+    public double getAxis2Dist() {
+        return ydist;
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        //FIXME: throw UnssupportedOperationException or do nothing?
+//        String message = "Can't flip a ellipse";
+//        notifyDeprecated(message);
+//        throw new UnsupportedOperationException(message);
+    }
+
+    protected double getAxis1Angle() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        double angle = Math.acos((end.getX() - init.getX()) / init.distance(end));
+
+        if (init.getY() > end.getY()) {
+            angle = -angle;
+        }
+
+        if (angle < 0) {
+            angle += (2 * Math.PI);
+        }
+        return angle;
+    }
+
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return false;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return false;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/Ellipse2D.java	(revision 46118)
@@ -0,0 +1,135 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.ellipse;
+
+import java.awt.geom.AffineTransform;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.jts.util.UtilFunctions;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Ellipse;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Ellipse2D extends BaseEllipse2D implements Ellipse {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3414562338763885954L;
+
+    /**
+     * @param subtype
+     */
+    public Ellipse2D() {
+        super(Geometry.TYPES.ELLIPSE);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Ellipse2D clone = new Ellipse2D();
+        clone.setPoints((Point)init.cloneGeometry(), (Point)end.cloneGeometry(), ydist);
+        clone.setProjection(this.getProjection());
+        return clone;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleCorner()
+     */
+    public Point getRectangleCorner() {
+        return new Point2D(
+            this.getAxis1Start().getX(),
+            this.getAxis1Start().getY()-this.getAxis2Dist());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleHeight()
+     */
+    public double getRectangleHeight() {
+        return this.getAxis2Dist()*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleWidth()
+     */
+    public double getRectangleWidth() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return this.getAxis1Start().distance(this.getAxis1End());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Ellipse#getRectangleRotation()
+     */
+    public AffineTransform getRectangleRotation() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return AffineTransform.getRotateInstance(getAxis1Angle(), this.getAxis1Start().getX(), this.getAxis1Start().getY());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Ellipse clonedEllipse = (Ellipse) this.cloneGeometry();
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+        Point center = new Point2D((getAxis1Start().getX()+getAxis1End().getX())/2,
+            (getAxis1Start().getY()+getAxis1End().getY())/2);
+        double axis1Lenght = getAxis1Start().distance(getAxis1End());
+
+        Point clonedAxis1Start = (Point) getAxis1Start().cloneGeometry();
+        Point clonedAxis1End = (Point) getAxis1End().cloneGeometry();
+        double clonedYDist = this.ydist+distance;
+
+        clonedAxis1Start.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1Start().getX(), axis1Lenght/2+distance));
+        clonedAxis1Start.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1Start().getY(), axis1Lenght/2+distance));
+
+        clonedAxis1End.setX(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getX(), getAxis1End().getX(), axis1Lenght/2+distance));
+        clonedAxis1End.setY(JTSUtils.straightLineThroughTwoPointsEquation(0, axis1Lenght/2, center.getY(), getAxis1End().getY(), axis1Lenght/2+distance));
+
+        clonedEllipse.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist);
+        return clonedEllipse;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2D.java	(revision 46118)
@@ -0,0 +1,171 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.circle;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Point2D.Double;
+
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseCircle2D extends AbstractCircle {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -6981603729327501715L;
+
+    /**
+     * @param type
+     * @param subtype
+     * @param center
+     * @param radius
+     */
+    public BaseCircle2D(int type, int subtype, Point center, double radius) {
+        super(type, subtype, center, radius);
+    }
+
+    /**
+     * @param circle
+     * @param geom2d
+     */
+    public BaseCircle2D(int type, int subtype) {
+        super(type,subtype);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#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) {
+      this.center = new Point2D(p1.getProjection(), JTSUtils.getCircumcentre(p1, p2, p3));
+      this.radius = ((PointJTS)this.center).getJTS().distance(((PointJTS)p1).getJTS());
+      this.setProjection(this.center.getProjection());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.surface.circle.AbstractCircle#fixPoint(org.gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1]));
+                coordinates.add(new Coordinate(coords[2], coords[3]));
+                coordinates.add(new Coordinate(coords[4], coords[5]));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add(coordinates.get(0));
+                break;
+            }
+            pi.next();
+        }
+        if(!coordinates.get(0).equals(coordinates.get(coordinates.size()-1))){
+            coordinates.add((Coordinate)coordinates.get(0).clone());
+        }
+        return coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point2D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/AbstractCircle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/AbstractCircle.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/AbstractCircle.java	(revision 46118)
@@ -0,0 +1,374 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.circle;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.cresques.cts.CoordTransRuntimeException;
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.geom.Geometry;
+
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.AbstractSurface;
+import org.gvsig.fmap.geom.jts.util.UtilFunctions;
+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.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.Ring;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractCircle extends AbstractSurface {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5509291843865895995L;
+
+    protected Point center;
+    protected double radius;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public AbstractCircle(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    protected AbstractCircle(int type, int subtype, Point center, double radius) {
+        this(type, subtype);
+        this.setCenter(center);
+        this.setRadius(radius);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Circle2D other = new Circle2D((Point) center.force2D(), radius);
+        other.setProjection(this.getProjection());
+        return other;
+    }
+
+    /**
+     * @param point
+     * @return
+     */
+    protected abstract Point fixPoint(Point point);
+
+    /**
+     * @param center the center to set
+     */
+    public void setCenter(Point center) {
+        this.center = fixPoint(center);
+    }
+
+    public Point getCenter() {
+        return this.center;
+    }
+
+    /**
+     * @param radius the radius to set
+     */
+    public void setRadius(double radius) {
+        this.radius = radius;
+    }
+
+    public double getRadious() {
+        return this.radius;
+    }
+
+    @Override
+    public int getDimension() {
+        return this.center.getDimension();
+    }
+
+    @Override
+    public boolean isSimple() {
+        return true;
+    }
+
+    public void setPoints(Point center, Point radius) {
+        setCenter(center);
+        this.radius = ((PointJTS)radius).getJTSCoordinate().distance(((PointJTS)this.center).getJTSCoordinate());
+    }
+
+    public void setPoints(Point center, double radius) {
+        setCenter(center);
+        this.radius = radius;
+    }
+
+    @Override
+    public boolean is3D() {
+        return ((PointJTS)center).is3D();
+    }
+
+    @Override
+    public double getCoordinateAt(int index, int dimension) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setCoordinateAt(int index, int dimension, double value) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(Point point) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive addVertex(double x, double y, double z) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeVertex(int index) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Point getVertex(int index) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public int getNumVertices() {
+        String message = "Calling deprecated method getNumVertices of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive insertVertex(int index, Point p) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive setVertex(int index, Point p) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void setGeneralPath(GeneralPathX generalPathX) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addMoveToVertex(Point point) {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void closePrimitive() {
+        String message = "Calling deprecated method setPoints of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public OrientablePrimitive ensureCapacity(int capacity) {
+        String message = "Calling deprecated method ensureCapacity of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        return this.getPathIterator(at, getManager().getFlatness());
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+
+        java.awt.geom.Point2D.Double center = new java.awt.geom.Point2D.Double(this.center.getX(), this.center.getY());
+        java.awt.geom.Arc2D arco = UtilFunctions.createCircle(center,  radius);
+
+        return arco.getPathIterator(at, flatness);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        GeneralPathX gp = new DefaultGeneralPathX(getPathIterator(null, getManager().getFlatness()), is3D(), 0.0);
+         return gp;
+     }
+
+    @Override
+    public int getNumInteriorRings() {
+        String message = "Calling deprecated method getNumInteriorRings of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public Ring getInteriorRing(int index) {
+        String message = "Calling deprecated method getInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Ring ring) {
+        String message = "Calling deprecated method addInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Line ring) {
+        String message = "Calling deprecated method addInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void addInteriorRing(Polygon polygon) {
+        String message = "Calling unsupported method addInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void removeInteriorRing(int index) {
+        String message = "Calling deprecated method removeInteriorRing of a circle";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public void reProject(ICoordTrans ct) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(center.getX(), center.getY()-radius);
+        try {
+            center.reProject(ct);
+            aux.reProject(ct);
+            this.setProjection(ct.getPDest());
+        } catch (CoordTransRuntimeException e){
+            center.setX(0);
+            center.setY(0);
+            radius = 0;
+            return;
+        }
+        try {
+            radius = center.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the radius of the transformed circle.", e);
+        }
+    }
+
+    @Override
+    public void transform(AffineTransform at) {
+        //FIXME: Esto solo ser�a correcto para transformaciones de traslaci�n, rotaci�n y escala
+        // Ser�a incorrecto para las de deformaci�n en cizallamiento
+
+        Point2D aux = new Point2D(center.getX(), center.getY()-radius);
+        center.transform(at);
+        aux.transform(at);
+        try {
+            radius = center.distance(aux);
+        } catch (BaseException e) {
+            throw new UnsupportedOperationException("Error calculating the radius of the transformed circle.", e);
+        }
+
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        //FIXME: throw UnssupportedOperationException or do nothing?
+//        String message = "Can't flip a circle";
+//        notifyDeprecated(message);
+//        throw new UnsupportedOperationException(message);
+    }
+
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return false;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return false;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2D.java	(revision 46118)
@@ -0,0 +1,113 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.circle;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2DZ;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Circle2D extends BaseCircle2D implements Circle {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4678092839213094025L;
+
+    /**
+     * @param subtype
+     */
+    public Circle2D() {
+        super(Geometry.TYPES.CIRCLE, Geometry.SUBTYPES.GEOM2D);
+    }
+
+
+    /**
+     * @param center
+     * @param radius
+     */
+    public Circle2D(Point center, double radius) {
+        super(Geometry.TYPES.CIRCLE, Geometry.SUBTYPES.GEOM2D, center, radius);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Circle2D clone = new Circle2D();
+        clone.setPoints(((PointJTS)((PointJTS)center).cloneGeometry()), radius);
+        return clone;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getRectangleCorner()
+     */
+    public Point getRectangleCorner() {
+        return new Point2D(center.getX()-radius, center.getY()-radius);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getHeight()
+     */
+    public double getRectangleHeight() {
+        return radius*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getWidth()
+     */
+    public double getRectangleWidth() {
+        return radius*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circle2D(((PointJTS)((PointJTS)center).cloneGeometry()), radius+distance);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/BaseCircle2DZ.java	(revision 46118)
@@ -0,0 +1,180 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.circle;
+
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+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;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class BaseCircle2DZ extends AbstractCircle {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -804346064183036328L;
+
+    /**
+     * @param type
+     * @param subtype
+     * @param center
+     * @param radius
+     */
+    public BaseCircle2DZ(int type, int subtype, Point center, double radius) {
+        super(type, subtype, center, radius);
+    }
+
+    /**
+     * @param circle
+     * @param geom2d
+     */
+    public BaseCircle2DZ(int type, int subtype) {
+        super(type,subtype);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.primitive.Circle#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) {
+        this.center = new Point3D(p1.getProjection(),JTSUtils.getCircumcentre(p1, p2, p3));
+        //Por si los tres puntos no tienen la misma z
+        Point3D aPoint = new Point3D(p1.getX(), p1.getY(), ((Point3D)center).getZ());
+        this.radius = ((PointJTS) this.center).getJTS().distance(aPoint.getJTS());
+        this.setProjection(this.center.getProjection());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.surface.circle.AbstractCircle#fixPoint
+     * (org.gvsig.fmap.geom.primitive.Point)
+     */
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            return point;
+        }
+        return new Point3D(point.getX(), point.getY(), 0);
+    }
+
+    /**
+     * @return
+     */
+    protected ArrayListCoordinateSequence getJTSCoordinates() {
+        PathIterator pi = getPathIterator(null);
+        ArrayListCoordinateSequence coordinates = new ArrayListCoordinateSequence();
+
+        Point3D c = (Point3D)getCenter();
+        double zValue = c.getZ();
+        double coords[] = new double[6];
+        while (!pi.isDone()) {
+            switch (pi.currentSegment(coords)) {
+            case PathIterator.SEG_MOVETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_LINETO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                break;
+            case PathIterator.SEG_QUADTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                break;
+            case PathIterator.SEG_CUBICTO:
+                coordinates.add(new Coordinate(coords[0], coords[1], zValue));
+                coordinates.add(new Coordinate(coords[2], coords[3], zValue));
+                coordinates.add(new Coordinate(coords[4], coords[5], zValue));
+                break;
+            case PathIterator.SEG_CLOSE:
+                coordinates.add(coordinates.get(0));
+                break;
+            }
+            pi.next();
+        }
+        if(!coordinates.get(0).equals(coordinates.get(coordinates.size()-1))){
+            coordinates.add((Coordinate)coordinates.get(0).clone());
+        }
+        return coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        Coordinate[] coordinates = getJTS().getCoordinates();
+        multiPoint.ensureCapacity(coordinates.length);
+        for (int i = 0; i < coordinates.length; i++) {
+            multiPoint.addPoint(new Point3D(this.getProjection(), coordinates[i]));
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D(getJTS().getCoordinates());
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D(getJTS().getCoordinates());
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2DZ.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2DZ.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/Circle2DZ.java	(revision 46118)
@@ -0,0 +1,109 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.surface.circle;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.Point;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Circle2DZ extends BaseCircle2DZ implements Circle {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4678092839213094025L;
+
+    /**
+     * @param subtype
+     */
+    public Circle2DZ() {
+        super(Geometry.TYPES.CIRCLE, Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /**
+     * @param center
+     * @param radius
+     */
+    public Circle2DZ(Point center, double radius) {
+        super(Geometry.TYPES.CIRCLE, Geometry.SUBTYPES.GEOM3D, center, radius);
+    }
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinates = getJTSCoordinates();
+        return JTSUtils.createJTSPolygon(coordinates);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        Circle2DZ clone = new Circle2DZ();
+        clone.setPoints(((PointJTS)((PointJTS)center).cloneGeometry()), radius);
+        return clone;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getRectangleCorner()
+     */
+    public Point getRectangleCorner() {
+        return new Point3D(center.getX()-radius, center.getY()-radius, ((Point3D)center).getZ());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getHeight()
+     */
+    public double getRectangleHeight() {
+        return radius*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Circle#getWidth()
+     */
+    public double getRectangleWidth() {
+        return radius*2;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circle2DZ(((PointJTS)((PointJTS)center).cloneGeometry()), radius+distance);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2D.java	(revision 46118)
@@ -0,0 +1,312 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+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.MultiPoint;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2D;
+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.type.GeometryType;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Point2D extends AbstractPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5486980182751169991L;
+
+    /**
+     *
+     * @param proj
+     * @param coordinates
+     */
+    public Point2D(IProjection proj, Coordinate coordinates) {
+        super(Geometry.SUBTYPES.GEOM2D, coordinates);
+        this.setProjection(proj);
+    }
+
+    /**
+     *
+     */
+    public Point2D() {
+        this(null, new Coordinate(0, 0));
+    }
+
+    /**
+    *
+     * @param x
+     * @param y
+    */
+    public Point2D(double x, double y) {
+        this(null, new Coordinate(x, y));
+    }
+
+    public Point2D(IProjection proj, double x, double y) {
+        this(proj, new Coordinate(x, y));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Point cloneGeometry() {
+        return new Point2D(this.getProjection(), (Coordinate) this.coordinate.clone());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    @Override
+    public int getDimension() {
+        return 2;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeometryType()
+     */
+    @Override
+    public GeometryType getGeometryType() {
+        try {
+            return GeometryLocator.getGeometryManager().getGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    @Override
+    public boolean is3D() {
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.point.PointJTS#setJTSCoordinate(com.vividsolutions.jts.geom.Coordinate)
+     */
+    @Override
+    public void setJTSCoordinate(Coordinate coordinate) {
+        this.coordinate = coordinate;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null),false,0);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        PointIterator pi = new PointIterator(at);
+        return pi;
+    }
+
+
+    public class PointIterator extends GeneralPathXIterator {
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+
+        /**
+         * Creates a new PointIterator object.
+         *
+         * @param at The affine transform applied to coordinates during iteration
+         */
+        public PointIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            done = false;
+        }
+
+        /**
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#next()
+         */
+        @Override
+        public void next() {
+            done = true;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @param coords
+         * @return 
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        @Override
+        public int currentSegment(double[] coords) {
+            coords[0] = getX();
+            coords[1] = getY();
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+
+        /* (non-Javadoc)
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        @Override
+        public int currentSegment(float[] coords) {
+            coords[0] = (float) getX();
+            coords[1] = (float) getY();
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        multiPoint.addPoint(this);
+        return multiPoint;
+    }
+
+    /**
+     *
+     * @param distance
+     * @return
+     * @throws GeometryOperationNotSupportedException
+     * @throws GeometryOperationException
+     */
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circumference2D((Point)this.cloneGeometry(), distance);
+    }
+
+    
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("POINT (");
+        for( int i=0; i<this.getDimension()-1; i++) {
+            builder.append(this.getCoordinateAt(i));
+            builder.append(" ");
+        }
+        builder.append(this.getCoordinateAt(this.getDimension()-1));
+        builder.append(")");
+        return builder.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if( obj == null ) {
+            return false;
+        }
+        Point other;
+        try {
+            other = (Point) obj;
+        } catch(ClassCastException e) {
+            return false;
+        }
+        if( this.getGeometryType().getSubType() != other.getGeometryType().getSubType() ) {
+            return false;
+        }
+        if( this.coordinate.x != other.getX() ) {
+            return false;
+        }
+        if( this.coordinate.y != other.getY() ) {
+            return false;
+        }
+        return true;
+    }
+    
+    @Override
+    public Point force3D() {
+        Point3D p = new Point3D(this.getProjection(), this.coordinate.x, this.coordinate.y, 0);
+        return p;
+    }
+
+    @Override
+    public Point force2DM() {
+        Point2DM p = new Point2DM(this.getProjection(), this.coordinate.x, this.coordinate.y, 0);
+        return p;
+    }
+
+    @Override
+    public Point force3DM()  {
+        Point3DM p = new Point3DM(this.getProjection(), this.coordinate.x, this.coordinate.y, 0, 0);
+        return p;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3D.java	(revision 46118)
@@ -0,0 +1,302 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+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.MultiPoint;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2DZ;
+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.type.GeometryType;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Point3D extends AbstractPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 7206091904842881396L;
+
+    /**
+    *
+    */
+   public Point3D(IProjection proj, Coordinate coordinates) {
+       super(Geometry.SUBTYPES.GEOM3D, coordinates);
+       this.setProjection(proj);
+   }
+
+   /**
+    *
+    */
+   public Point3D() {
+       this(null, new Coordinate(0, 0, 0));
+   }
+
+   /**
+   *
+   */
+   public Point3D(double x, double y, double z) {
+       this(null, new Coordinate(x, y, z));
+   }
+
+   public Point3D(IProjection proj, double x, double y, double z) {
+       this(proj, new Coordinate(x, y, z));
+   }
+
+
+    public double getZ() {
+        return this.coordinate.z;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getGeometryType()
+     */
+    public GeometryType getGeometryType() {
+        try {
+            return GeometryLocator.getGeometryManager().getGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3D);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Point cloneGeometry() {
+        return new Point3D(this.getProjection(), (Coordinate)this.coordinate.clone());
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.point.PointJTS#setJTSCoordinate(com.vividsolutions.jts.geom.Coordinate)
+     */
+    public void setJTSCoordinate(Coordinate coordinate) {
+        this.coordinate = coordinate;
+    }
+
+    /**
+     * @param zValue
+     */
+    public void setZ(double z) {
+        this.coordinate.z = z;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), true, getZ());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PointIterator pi = new PointIterator(at);
+        return pi;
+    }
+
+    public class PointIterator extends GeneralPathXIterator {
+        /** Transform applied on the coordinates during iteration */
+        private AffineTransform at;
+
+        /** 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(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            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] = getX();
+            coords[1] = getY();
+            coords[2] = getZ();
+            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) getX();
+            coords[1] = (float) getY();
+            coords[2] = (float) getZ();
+
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        multiPoint.addPoint(this);
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return new Circumference2DZ((Point)this.cloneGeometry(), distance);
+    }
+
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("POINT Z (");
+        for( int i=0; i<this.getDimension()-1; i++) {
+            builder.append(this.getCoordinateAt(i));
+            builder.append(" ");
+        }
+        builder.append(this.getCoordinateAt(this.getDimension()-1));
+        builder.append(")");
+        return builder.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if( obj == null ) {
+            return false;
+        }
+        Point other;
+        try {
+            other = (Point) obj;
+        } catch(ClassCastException e) {
+            return false;
+        }
+        if( this.getGeometryType().getSubType() != other.getGeometryType().getSubType() ) {
+            return false;
+        }
+        if( this.coordinate.x != other.getX() ) {
+            return false;
+        }
+        if( this.coordinate.y != other.getY() ) {
+            return false;
+        }
+        if( this.coordinate.z != other.getCoordinateAt(2)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Point force3D() {
+        Point3D p = new Point3D(this.getProjection(), this.coordinate.x, this.coordinate.y, this.coordinate.z);
+        return p;
+    }
+
+    @Override
+    public Point force2DM() {
+        Point2DM p = new Point2DM(this.getProjection(), this.coordinate.x, this.coordinate.y, 0);
+        return p;
+    }
+
+    @Override
+    public Point force3DM() {
+        Point3DM p = new Point3DM(this.getProjection(), this.coordinate.x, this.coordinate.y, this.coordinate.z, 0);
+        return p;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/PointJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/PointJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/PointJTS.java	(revision 46118)
@@ -0,0 +1,41 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface PointJTS extends GeometryJTS, Point {
+
+    Coordinate getJTSCoordinate();
+
+    void setJTSCoordinate(Coordinate coordinate);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DM.java	(revision 46118)
@@ -0,0 +1,346 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+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.MultiPoint;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.type.GeometryType;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Point2DM extends AbstractPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 7829655161985732518L;
+
+    /**
+   *
+     * @param proj
+     * @param coordinates
+   */
+    public Point2DM(IProjection proj, Coordinate coordinates) {
+        super(Geometry.SUBTYPES.GEOM2DM, MCoordinate.convertCoordinate(coordinates));
+        this.setProjection(proj);
+    }
+
+    /**
+   *
+   */
+    public Point2DM() {
+        this(null, JTSUtils.createMCoordinate(0, 0, 0));
+    }
+
+    /**
+  *
+     * @param x
+     * @param y
+     * @param m
+  */
+    public Point2DM(double x, double y, double m) {
+        this(null, JTSUtils.createMCoordinate(x, y, m));
+    }
+
+    public Point2DM(IProjection proj, double x, double y, double m) {
+        this(proj, JTSUtils.createMCoordinate(x, y, m));
+    }
+
+    public double getM() {
+        return ((org.hibernate.spatial.jts.mgeom.MCoordinate)this.coordinate).m;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    @Override
+    public int getDimension() {
+        return 3;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeometryType()
+     */
+    @Override
+    public GeometryType getGeometryType() {
+        try {
+            return GeometryLocator.getGeometryManager()
+                .getGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Point cloneGeometry() {
+        return new Point2DM(this.getProjection(), MCoordinate.convertCoordinate((Coordinate) coordinate.clone()));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getCoordinateAt(int)
+     */
+    @Override
+    public double getCoordinateAt(int dimension) {
+        if (dimension == 2) {
+            return this.getM();
+        }
+        return super.getCoordinateAt(dimension);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#setCoordinateAt(int, double)
+     */
+    @Override
+    public void setCoordinateAt(int dimension, double value) {
+        if (dimension == 2) {
+            this.coordinate.setOrdinate(CoordinateSequence.M, value);
+            return;
+        }
+        this.coordinate.setOrdinate(dimension, value);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    @Override
+    public boolean is3D() {
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.primitive.point.PointJTS#setJTSCoordinate(com.vividsolutions.jts.geom.Coordinate)
+     */
+    @Override
+    public void setJTSCoordinate(Coordinate coordinate) {
+        this.coordinate = coordinate;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null),false,0);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        PointIterator pi = new PointIterator(at);
+        return pi;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        return hash;
+    }
+
+    public class PointIterator extends GeneralPathXIterator {
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+
+        /**
+         * Creates a new PointIterator object.
+         *
+         * @param at The affine transform applied to coordinates during iteration
+         */
+        public PointIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            done = false;
+        }
+
+        /**
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#next()
+         */
+        @Override
+        public void next() {
+            done = true;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @param coords
+         * @return 
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        @Override
+        public int currentSegment(double[] coords) {
+            coords[0] = getX();
+            coords[1] = getY();
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+
+        /* (non-Javadoc)
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        @Override
+        public int currentSegment(float[] coords) {
+            coords[0] = (float) getX();
+            coords[1] = (float) getY();
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        multiPoint.addPoint(this);
+        return multiPoint;
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("POINT M (");
+        for( int i=0; i<this.getDimension()-1; i++) {
+            builder.append(this.getCoordinateAt(i));
+            builder.append(" ");
+        }
+        builder.append(this.getCoordinateAt(this.getDimension()-1));
+        builder.append(")");
+        return builder.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if( obj == null ) {
+            return false;
+        }
+        Point other;
+        try {
+            other = (Point) obj;
+        } catch(ClassCastException e) {
+            return false;
+        }
+        if( this.getGeometryType().getSubType() != other.getGeometryType().getSubType() ) {
+            return false;
+        }
+        if( this.coordinate.x != other.getX() ) {
+            return false;
+        }
+        if( this.coordinate.y != other.getY() ) {
+            return false;
+        }
+        if( ((MCoordinate)this.coordinate).m != other.getCoordinateAt(2)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Point force3D() {
+        Point3D p = new Point3D(this.getProjection(), this.coordinate.x, this.coordinate.y, 0);
+        return p;
+    }
+
+    @Override
+    public Point force2DM() {
+        Point2DM p = new Point2DM(this.getProjection(), this.coordinate.x, this.coordinate.y, ((MCoordinate)this.coordinate).m);
+        return p;
+    }
+
+    @Override
+    public Point force3DM() {
+        Point3DM p = new Point3DM(this.getProjection(), this.coordinate.x, this.coordinate.y, 0, ((MCoordinate)this.coordinate).m);
+        return p;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/AbstractPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/AbstractPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/AbstractPoint.java	(revision 46118)
@@ -0,0 +1,403 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.Arrays;
+
+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.aggregate.MultiLine;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.exception.ReprojectionRuntimeException;
+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.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.AbstractPrimitive;
+import org.gvsig.fmap.geom.jts.primitive.Envelope2D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractPoint extends AbstractPrimitive implements PointJTS {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8378193151810866724L;
+    protected com.vividsolutions.jts.geom.Coordinate coordinate;
+
+    /**
+    *
+    */
+    protected AbstractPoint(int subtype) {
+        super(Geometry.TYPES.POINT, subtype);
+    }
+
+    /**
+     *
+     */
+    public AbstractPoint(int subtype, com.vividsolutions.jts.geom.Coordinate coordinate) {
+        this(subtype);
+        this.coordinate = coordinate;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getDirectPosition()
+     */
+    public DirectPosition getDirectPosition() {
+        return new PointDirectPosition();
+    }
+
+    class PointDirectPosition implements DirectPosition {
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.gvsig.fmap.geom.DirectPosition#getDimension()
+         */
+        public int getDimension() {
+            return AbstractPoint.this.getDimension();
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.gvsig.fmap.geom.DirectPosition#getOrdinate(int)
+         */
+        public double getOrdinate(int dimension) {
+            return AbstractPoint.this.getCoordinateAt(dimension);
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#setCoordinateAt(int, double)
+     */
+    public void setCoordinateAt(int dimension, double value) {
+        this.coordinate.setOrdinate(dimension, value);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#setCoordinates(double[])
+     */
+    public void setCoordinates(double[] values) {
+        for (int i = 0; i < values.length; i++) {
+            this.coordinate.setOrdinate(i, values[i]);
+        }
+    }
+
+  /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#setX(double)
+     */
+    public void setX(double x) {
+        this.coordinate.x = x;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#setY(double)
+     */
+    public void setY(double y) {
+        this.coordinate.y = y;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getCoordinateAt(int)
+     */
+    public double getCoordinateAt(int dimension) {
+        return this.coordinate.getOrdinate(dimension);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getCoordinates()
+     */
+    public double[] getCoordinates() {
+        double[] coords = new double[this.getDimension()];
+        for (int i = 0; i < this.getDimension(); i++) {
+            coords[i] = this.coordinate.getOrdinate(i);
+        }
+        return coords;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getX()
+     */
+    public double getX() {
+        return this.coordinate.x;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.primitive.Point#getY()
+     */
+    public double getY() {
+        return this.coordinate.y;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        return JTSUtils.createJTSPoint(this.coordinate);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#reProject(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public void reProject(ICoordTrans ct) {
+        if (ct == null) {
+            return;
+        }
+        java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(this.getX(), this.getY());
+        try {
+            p = ct.convert(p, p);
+            this.setX(p.getX());
+            this.setY(p.getY());
+            this.setProjection(ct.getPDest());
+        } 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)
+             */
+            this.setX(0);
+            this.setY(0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public void transform(AffineTransform at) {
+        if (at == null) {
+            return;
+        }
+
+        java.awt.geom.Point2D p = new java.awt.geom.Point2D.Double(this.getX(), this.getY());
+        at.transform(p, p);
+        setX(p.getX());
+        setY(p.getY());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.primitive.point.PointJTS#getJTSCoordinates()
+     */
+    public com.vividsolutions.jts.geom.Coordinate getJTSCoordinate() {
+        return this.coordinate;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform), false, 0);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * , double)
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getHandlers(int)
+     */
+    public Handler[] getHandlers(int type) {
+        return new Handler[] { new PointHandler() };
+    }
+
+    class PointHandler extends AbstractHandler implements FinalHandler {
+
+        public PointHandler() {
+            point = new java.awt.geom.Point2D.Double(AbstractPoint.this.getX(), AbstractPoint.this.getY());
+            index = 0;
+        }
+
+        public void move(double movex, double movey) {
+            AbstractPoint.this.setX(AbstractPoint.this.getX() + movex);
+            AbstractPoint.this.setY(AbstractPoint.this.getY() + movey);
+        }
+
+        public void set(double setx, double sety) {
+            AbstractPoint.this.setX(setx);
+            AbstractPoint.this.setY(sety);
+        }
+    }
+
+    public Envelope getEnvelope() {
+        return new Envelope2D(this.getX(), this.getY(), this.getX(), this.getY(), this.getProjection());
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        String message = "Can't get lines from a point";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        String message = "Can't get polygons from a point";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#flip()
+     */
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        //Do nothing
+    }
+
+    public abstract String toString();
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#canBeTransformed(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#canBeReprojected(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        double v[];
+        if( this.coordinate instanceof MCoordinate ) {
+            v = new double[] {
+                coordinate.x,
+                coordinate.y,
+                coordinate.z,
+                ((MCoordinate)coordinate).m
+            };
+        } else {
+            v = new double[] {
+                coordinate.x,
+                coordinate.y,
+                coordinate.z,
+                Double.NaN
+            };
+        }
+        return Arrays.hashCode(v);
+    }
+
+
+    @Override
+    public org.gvsig.fmap.geom.primitive.Point centroid() throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+        return (Point) this.cloneGeometry();
+    }    
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Point clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+
+    @Override
+    public Point force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Point2D p = new Point2D(this.getProjection(), this.coordinate.x, this.coordinate.y);
+        return p;
+    }
+    
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point2DGeometryType.java	(revision 46118)
@@ -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.jts.primitive.point;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.DefaultGeometryType;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+
+/**
+ * Geometry type implementation for the creation of {@link Point2D} objects.
+ *
+ * @author gvSIG Team
+ */
+public class Point2DGeometryType extends DefaultGeometryType implements PointGeometryType {
+
+    private static final String NAME = "Point2D";
+    private static final int TYPE = Geometry.TYPES.POINT;
+    private static final int SUBTYPE = Geometry.SUBTYPES.GEOM2D;
+
+    public Point2DGeometryType() {
+        super(Point2D.class, NAME, TYPE, SUBTYPE);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public int getType() {
+        return TYPE;
+    }
+
+    @Override
+    public int getSubType() {
+        return SUBTYPE;
+    }
+
+    @Override
+    public boolean isTypeOf(int geometryType) {
+        return TYPE == geometryType
+            || Geometry.TYPES.GEOMETRY == geometryType;
+    }
+
+    @Override
+    public boolean isSubTypeOf(int geometrySubType) {
+        return SUBTYPE == geometrySubType;
+    }
+
+    @Override
+    public Geometry create() throws CreateGeometryException {
+        return new Point2D();
+    }
+
+    @Override
+    public Point createPoint(double x, double y) {
+        return new Point2D(x, y);
+    }
+
+    @Override
+    public Point createPoint(double[] coordinates) {
+        return new Point2D(coordinates[0], coordinates[1]);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DM.java	(revision 46118)
@@ -0,0 +1,313 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive.point;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+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.MultiPoint;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3DM;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.type.GeometryType;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class Point3DM extends AbstractPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5749444180040735731L;
+
+    /**
+   *
+   */
+    public Point3DM(IProjection proj, Coordinate coordinates) {
+        super(Geometry.SUBTYPES.GEOM3DM, MCoordinate.convertCoordinate(coordinates));
+    }
+
+    /**
+   *
+   */
+    public Point3DM() {
+        this(null, JTSUtils.createMCoordinate(0, 0, 0, 0));
+    }
+
+    /**
+  *
+  */
+    public Point3DM(double x, double y, double z, double m) {
+        this(null, JTSUtils.createMCoordinate(x, y, z, m));
+    }
+
+    public Point3DM(IProjection proj, double x, double y, double z, double m) {
+        this(proj, JTSUtils.createMCoordinate(x, y, z, m));
+    }
+
+    public double getZ() {
+        return this.coordinate.z;
+    }
+
+    public double getM() {
+        return ((org.hibernate.spatial.jts.mgeom.MCoordinate) this.coordinate).m;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 4;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeometryType()
+     */
+    public GeometryType getGeometryType() {
+        try {
+            return GeometryLocator.getGeometryManager()
+                .getGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Point cloneGeometry() {
+        return new Point3DM(this.getProjection(), MCoordinate.convertCoordinate((Coordinate) coordinate.clone()));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.jts.primitive.point.PointJTS#setJTSCoordinate(com
+     * .vividsolutions.jts.geom.Coordinate)
+     */
+    public void setJTSCoordinate(Coordinate coordinate) {
+        this.coordinate = coordinate;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), true, getZ());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform
+     * )
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        PointIterator pi = new PointIterator(at);
+        return pi;
+    }
+
+    public class PointIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private AffineTransform at;
+
+        /** 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(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            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] = getX();
+            coords[1] = getY();
+            coords[2] = getZ();
+            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) getX();
+            coords[1] = (float) getY();
+            coords[2] = (float) getZ();
+
+            at.transform(coords, 0, coords, 0, 1);
+
+            return PathIterator.SEG_MOVETO;
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.primitive.Line#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3DM();
+        multiPoint.addPoint(this);
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("POINT ZM (");
+        for( int i=0; i<this.getDimension()-1; i++) {
+            builder.append(this.getCoordinateAt(i));
+            builder.append(" ");
+        }
+        builder.append(this.getCoordinateAt(this.getDimension()-1));
+        builder.append(")");
+        return builder.toString();
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if( obj == null ) {
+            return false;
+        }
+        Point other;
+        try {
+            other = (Point) obj;
+        } catch(ClassCastException e) {
+            return false;
+        }
+        if( this.getGeometryType().getSubType() != other.getGeometryType().getSubType() ) {
+            return false;
+        }
+        if( this.coordinate.x != other.getX() ) {
+            return false;
+        }
+        if( this.coordinate.y != other.getY() ) {
+            return false;
+        }
+        if( this.coordinate.z != other.getCoordinateAt(2)) {
+            return false;
+        }
+        if( ((MCoordinate)this.coordinate).m != other.getCoordinateAt(3)) {
+            return false;
+        }
+        return true;
+    }    
+    public Point force3D() {
+        Point3D p = new Point3D(this.getProjection(), this.coordinate.x, this.coordinate.y, this.coordinate.z);
+        return p;
+    }
+
+    public Point force2DM() {
+        Point2DM p = new Point2DM(this.getProjection(), this.coordinate.x, this.coordinate.y, ((MCoordinate)this.coordinate).m);
+        return p;
+    }
+
+    public Point force3DM() {
+        Point3DM p = new Point3DM(this.getProjection(), this.coordinate.x, this.coordinate.y, this.coordinate.z, ((MCoordinate)this.coordinate).m);
+        return p;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/Point3DGeometryType.java	(revision 46118)
@@ -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.jts.primitive.point;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.DefaultGeometryType;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.PointGeometryType;
+
+/**
+ * Geometry type implementation for the creation of {@link Point3D} objects.
+ *
+ * @author gvSIG Team
+ */
+public class Point3DGeometryType extends DefaultGeometryType implements PointGeometryType {
+
+
+    private static final String NAME = "Point3D";
+    private static final int TYPE = Geometry.TYPES.POINT;
+    private static final int SUBTYPE = Geometry.SUBTYPES.GEOM3D;
+
+    public Point3DGeometryType() {
+        super(Point3D.class, NAME, TYPE, SUBTYPE);
+    }
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public int getSubType() {
+        return Geometry.SUBTYPES.GEOM3D;
+    }
+
+    @Override
+    public boolean isSubTypeOf(int geometrySubType) {
+        return SUBTYPE == geometrySubType
+            || super.isSubTypeOf(geometrySubType);
+    }
+
+    @Override
+    public Geometry create() throws CreateGeometryException {
+        return new Point3D();
+    }
+
+    @Override
+    public Point createPoint(double x, double y) {
+        return new Point3D(x, y, 0.0d);
+    }
+
+    @Override
+    public Point createPoint(double[] coordinates) {
+        return new Point3D(coordinates[0], coordinates[1], coordinates[2]);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultNullGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultNullGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultNullGeometry.java	(revision 46118)
@@ -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.fmap.geom.jts.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 com.vividsolutions.jts.geom.Geometry;
+
+import org.cresques.cts.ICoordTrans;
+
+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;
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.jts.DefaultValidationStatus;
+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.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 = -7307693394018682067L;
+
+    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.getType(), geometryType.getSubType());
+    }
+
+    @Override
+    public org.gvsig.fmap.geom.Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return this;
+    }
+
+    
+    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) {
+        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 Envelope getEnvelope() {
+        return null;
+    }
+
+    public GeneralPathX getGeneralPath() {
+        return null;
+    }
+
+    public boolean isValid() {
+        return false;
+    }
+
+    public ValidationStatus getValidationStatus() {
+        return validationStatus;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#getJTS()
+     */
+    public Geometry getJTS() {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#flip()
+     */
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // do nothing
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#offset(double)
+     */
+    public org.gvsig.fmap.geom.Geometry offset(double distance) throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+        //FIXME: �this, null o qu�?
+        return this;
+    }
+
+    @Override
+    public org.gvsig.fmap.geom.Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return offset(distance);
+    }
+    
+
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        return false;
+    }
+
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        return false;
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultNullGeometry.java
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/AbstractPrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/AbstractPrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/AbstractPrimitive.java	(revision 46118)
@@ -0,0 +1,103 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.primitive;
+
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+import org.gvsig.fmap.geom.handler.Handler;
+import org.gvsig.fmap.geom.jts.AbstractGeometry;
+import org.gvsig.fmap.geom.jts.UnmovableHandler;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractPrimitive extends AbstractGeometry implements Primitive{
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8143412151139464535L;
+
+    /**
+     *
+     * @param type
+     * @param subtype
+     */
+    protected AbstractPrimitive(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    @Override
+    public Handler[] getHandlers(int type) {
+        List<Handler> handlers = new ArrayList<>();
+        Handler handler;
+            Coordinate[] coordinates = getJTS().getCoordinates();
+        for (Coordinate coordinate : coordinates) {
+            handler = new UnmovableHandler(coordinate.x, coordinate.y);
+            handlers.add(handler);
+        }
+
+            PathIterator pi = getPathIterator(null);
+
+            double coords[] = new double[6];
+            while (!pi.isDone()) {
+                switch (pi.currentSegment(coords)) {
+                case PathIterator.SEG_MOVETO:
+                    handler = new UnmovableHandler(coords[0], coords[1]);
+                    handlers.add(handler);
+                    break;
+                case PathIterator.SEG_LINETO:
+                    handler = new UnmovableHandler(coords[0], coords[1]);
+                    handlers.add(handler);
+                    break;
+                case PathIterator.SEG_QUADTO:
+                    handler = new UnmovableHandler(coords[0], coords[1]);
+                    handlers.add(handler);
+                    handler = new UnmovableHandler(coords[2], coords[3]);
+                    handlers.add(handler);
+                    break;
+                case PathIterator.SEG_CUBICTO:
+                    handler = new UnmovableHandler(coords[0], coords[1]);
+                    handlers.add(handler);
+                    handler = new UnmovableHandler(coords[2], coords[3]);
+                    handlers.add(handler);
+                    handler = new UnmovableHandler(coords[4], coords[5]);
+                    handlers.add(handler);
+                    break;
+                case PathIterator.SEG_CLOSE:
+                    break;
+                }
+                pi.next();
+            }
+        return handlers.toArray(new Handler[handlers.size()]);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/json/GeometryTypeJsonSerializer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/json/GeometryTypeJsonSerializer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/json/GeometryTypeJsonSerializer.java	(revision 46118)
@@ -0,0 +1,85 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any 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.jts.json;
+
+import javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.util.IsApplicable;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class GeometryTypeJsonSerializer implements JsonManager.JsonSerializer, IsApplicable {
+
+    @Override
+    public Class getObjectClass() {
+        return GeometryType.class;
+    }
+
+    @Override
+    public Object toObject(JsonObject json) {
+        try {
+            int type = json.getInt("type");
+            int subtype = json.getInt("subtype");    
+            return GeometryLocator.getGeometryManager().getGeometryType(type, subtype);
+        } catch (Exception ex) {
+            throw new IllegalArgumentException("Can't retrieve a GeometryType from JsonObject.", ex);
+        }
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder(Object value) {
+        GeometryType geomType = (GeometryType) value;
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(GeometryType.class);
+        this.addAll(builder, value);
+        return builder;
+    }
+
+    private void addAll(JsonObjectBuilder target, Object source) {
+        GeometryType geomType = (GeometryType) source;
+        target.add("type", geomType.getType());
+        target.add("subtype", geomType.getSubType());
+    }
+
+    @Override
+    public boolean isApplicable(Object... args) {
+        if( args[0] instanceof GeometryType) {
+            return true;
+        }
+        if( !(args[0] instanceof JsonObject) ) {
+            return false;
+        }
+        JsonObject json = (JsonObject) args[0];
+        String className = json.getString(JsonManager.ATTRIBUTE_NAME_CLASS, null);
+        return StringUtils.equalsIgnoreCase(className, GeometryType.class.getName());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryManager.java	(revision 46118)
@@ -0,0 +1,1050 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+import com.vividsolutions.jts.io.geojson.GeoJsonReader;
+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.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+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.GeometryCoercionContext;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport;
+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.jts.coerce.DefaultGeometryCoercionContext;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.DefaultNullGeometry;
+import org.gvsig.fmap.geom.jts.primitive.Envelope2D;
+import org.gvsig.fmap.geom.jts.primitive.Envelope3D;
+import org.gvsig.fmap.geom.jts.spatialindex.SpatialIndexFactoryJSIRTree;
+import org.gvsig.fmap.geom.jts.spatialindex.SpatialIndexFactoryJTSQuadtree;
+import org.gvsig.fmap.geom.jts.util.GMLUtils;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.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.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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>
+ */
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultGeometryManager implements GeometryManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(GeometryManager.class);
+    
+    /**
+     * Offset for GeometryType -1 value (UNKNOWN)
+     */
+    private final int GEOMETRY_TYPE_OFFSET = 1;
+    
+    private double flatness = 0.8;
+
+    private final 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 final 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 final 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 27 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 = 27; // [-1, 25]
+    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 SpatialIndexFactoryJTSQuadtree());
+        this.addServiceFactory(new SpatialIndexFactoryJSIRTree());
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+
+    }
+
+    @SuppressWarnings("override")
+    public int registerGeometryOperation(String geomOpName, GeometryOperation geomOp, int type, int subType)
+        throws GeometryTypeNotSupportedException, GeometryTypeNotValidException {
+        GeometryType geometryType = getGeometryType(type, subType);
+        return registerGeometryOperation(geomOpName, geomOp, geometryType);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public GeometryType registerGeometryType(Class geomClass, String name, int type, int subType) {
+        return registerGeometryType(geomClass, name, type, subType, new int[0], new int[0]);
+    }
+
+    @Override
+    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 });
+    }
+
+    @Override
+    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]);
+    }
+
+    @Override
+    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 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
+     */
+    @Override
+    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");
+        }
+
+        int offsettedType = type + GEOMETRY_TYPE_OFFSET;
+        // Check if it is registered
+        GeometryType geomType = null;
+        if (offsettedType >= geometryTypes.length || subType >= geometryTypes[0].length
+            || (geomType = geometryTypes[offsettedType][subType]) == null) {
+            geomType = new DefaultGeometryType(geomClass, name, type, subType, superTypes, superSubTypes); //Attention!
+            registerGeometryType(geomType);
+        }
+
+        LOGGER.debug("Class {} registered with name {}", geomClass, geomType.getName());
+
+        return geomType;
+    }
+
+    @Override
+    public void registerGeometryType(GeometryType geometryType) {
+        int offsettedType = geometryType.getType() + GEOMETRY_TYPE_OFFSET;
+        if (offsettedType >= geometryTypes.length || geometryType.getSubType() >= geometryTypes[0].length) {
+
+            // Recreate the geometry type matrix if the types
+            // or subtypes don't fit
+            int newTypesSize =
+                offsettedType < geometryTypes.length ? geometryTypes.length : offsettedType + 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[offsettedType][geometryType.getSubType()] = geometryType;
+        geometryTypeName.put(geometryType.getName(), geometryType);
+    }
+
+    @Override
+    public GeometryType registerGeometryType(Class geomClass, int type, int subType) {
+        return registerGeometryType(geomClass, null, type, subType);
+    }
+
+    @Override
+    public GeometryType getGeometryType(int type, int subType) throws GeometryTypeNotSupportedException,
+        GeometryTypeNotValidException {
+
+        int offsettedType = type + GEOMETRY_TYPE_OFFSET;
+        
+        if (offsettedType >= geometryTypes.length || subType >= geometryTypes[0].length) {
+            throw new GeometryTypeNotValidException(type, subType);
+        }
+        GeometryType gType = geometryTypes[offsettedType][subType];
+        if (gType == null) {
+            throw new GeometryTypeNotSupportedException(type, subType);
+        }
+        return gType;
+    }
+
+    @Override
+    public Geometry create(GeometryType geomType) throws CreateGeometryException {
+        return geomType.create();
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public Geometry create(int type, int subType) throws CreateGeometryException {
+        try {
+            return getGeometryType(type, subType).create();
+        } catch (GeometryException e) {
+            throw new CreateGeometryException(type, subType, e);
+        }
+    }
+
+    @Override
+    public Curve createCurve(GeneralPathX generalPathX, int subType) throws CreateGeometryException {
+        Curve curve = (Curve) create(TYPES.CURVE, subType);
+        curve.setGeneralPath(generalPathX);
+        return curve;
+    }
+
+    @Override
+    public NullGeometry createNullGeometry(int subType) throws CreateGeometryException {
+        NullGeometry nullGeom = (NullGeometry) create(TYPES.NULL, subType);
+        return nullGeom;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public Surface createSurface(GeneralPathX generalPathX, int subType) throws CreateGeometryException {
+        Surface surface = (Surface) create(TYPES.SURFACE, subType);
+        surface.setGeneralPath(generalPathX);
+        return surface;
+    }
+
+    @Override
+    public GeometryOperation getGeometryOperation(int opCode, int type, int subType)
+        throws GeometryTypeNotSupportedException, GeometryOperationNotSupportedException, GeometryTypeNotValidException {
+        GeometryType geometryType = getGeometryType(type, subType);
+        return geometryType.getGeometryOperation(opCode);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    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());
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public Object invokeOperation(String geomOpName, GeometryOperationContext ctx)
+        throws GeometryOperationNotSupportedException, GeometryOperationException {
+        int index = geometryOperations.indexOf(geomOpName);
+        GeometryOperation geomOp = getGeometryOperation(index);
+        return geomOp.invoke(null, ctx);
+    }
+
+    @Override
+    public Envelope createEnvelope(int subType) {
+        // TODO: register the envelopes!!!
+        switch (subType) {
+        case SUBTYPES.GEOM3D:
+            return new Envelope3D();
+        default:
+            return new Envelope2D();
+        }
+    }
+
+    @Override
+    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 {
+            min = createPoint(minX, minY, subType);
+            max = createPoint(maxX, maxY, subType);
+        } catch (CreateGeometryException 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, null);
+        default:
+            Envelope envelope = createEnvelope(subType);
+            envelope.setLowerCorner(min);
+            envelope.setUpperCorner(max);
+            return envelope;
+        }
+    }
+
+    @Override
+    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;
+        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;
+
+    }
+
+    @Override
+    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;
+        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;
+
+    }
+
+    @Override
+    public MultiPoint createMultiPoint(GeneralPathX generalPathX, int subType) throws CreateGeometryException {
+        if (subType != SUBTYPES.GEOM2D) {
+            // FIXME Exception
+            throw new UnsupportedOperationException();
+        }
+        MultiPoint multiPoint = (MultiPoint) create(TYPES.MULTIPOINT, subType);
+        PathIterator piter = generalPathX.getPathIterator(null);
+        Point tmpPoint;
+        double[] coords = new double[6];
+        int type;
+        while (!piter.isDone()) {
+            type = piter.currentSegment(coords);
+            switch (type) {
+            case PathIterator.SEG_MOVETO:
+                tmpPoint = createPoint(coords[0], coords[1], subType);
+                multiPoint.addPoint(tmpPoint);
+
+            case PathIterator.SEG_LINETO:
+                throw new IllegalArgumentException("The general have a SEG_LINETO.");
+
+            case PathIterator.SEG_QUADTO:
+                throw new IllegalArgumentException("The general have a SEG_QUADTO.");
+
+            case PathIterator.SEG_CUBICTO:
+                throw new IllegalArgumentException("The general have a SEG_CUBICTO.");
+
+            case PathIterator.SEG_CLOSE:
+                throw new IllegalArgumentException("The general have a SEG_CLOSE.");
+            } // end switch
+
+            piter.next();
+
+        }
+        return multiPoint;
+
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public List getGeometryOperationNames() {
+        List operations = new ArrayList();
+        for (int i = 0; i < operations.size(); i++) {
+            operations.add(geometryOperations.get(i));
+        }
+        return operations;
+    }
+
+    @Override
+    public double getFlatness() {
+        return flatness;
+    }
+
+    @Override
+    public void setFlatness(double flatness) {
+        this.flatness = flatness;
+    }
+
+    @Override
+    public Geometry createFrom(Object data) throws CreateGeometryException, GeometryException {
+        if( data == null ) {
+            throw new IllegalArgumentException("null data is not allowed");
+        }
+        if( data instanceof String ) {
+            Geometry geom = GMLUtils.GML2Geometry((String) data);
+            if( geom != null ) {
+                return geom;
+            }
+            return this.createFrom((String)data);
+        }
+        if( data instanceof byte[] ) {
+            return this.createFrom((byte[])data);
+        }
+        if( data instanceof com.vividsolutions.jts.geom.Geometry ) {
+            return this.createFrom((com.vividsolutions.jts.geom.Geometry)data);
+        }
+        if( data instanceof Geometry ) {
+            return ((Geometry)data).cloneGeometry();
+        }
+        throw new IllegalArgumentException("Type of data ("+data.getClass().getName()+") not supported.");
+    }
+
+    @Override
+    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 (Exception e) {
+            throw new GeometryException(e);
+        }
+    }
+
+    private int firstNonBlank(String s) {
+        char ch;
+        int i=0;
+        while(i < s.length()) {
+            if( !Character.isSpaceChar(ch = s.charAt(i++)) ) {
+                return ch;
+            }
+        }
+        return -1;
+    } 
+    
+    @Override
+    public Geometry createFrom(String wkt, IProjection srs) throws GeometryException {
+        try {
+            if( StringUtils.isBlank(wkt) ) {
+                return null;
+            }
+            int ch = firstNonBlank(wkt);
+            switch(ch) {
+                case '0':
+                case '1':
+                    if( (wkt.length() % 2) == 0  ) {
+                        // it starts with 0 or 1 and the length is even. Assume it is hexwkb.
+                        return createFrom(Hex.decodeHex(wkt.toCharArray()), srs);
+                    }
+                    break;
+                case '{':
+                    try {
+                        GeoJsonReader reader = new GeoJsonReader();
+                        com.vividsolutions.jts.geom.Geometry geom_jts = reader.read(wkt);
+                        return JTSUtils.createGeometry(srs, geom_jts);
+                    } catch(Exception ex) {
+                        LOGGER.debug("Can't parse as GeoJson");
+                    }
+                    break;
+            }
+            GeometryOperationContext context = new GeometryOperationContext();
+            context.setAttribute("text", wkt);
+            context.setAttribute("srs", srs);
+
+            return (Geometry) this.invokeOperation(OPERATIONS.FROMWKT, context);
+        } catch (Exception e) {
+            throw new GeometryException(e);
+        }
+    }
+
+    @Override
+    public Geometry createFrom(String wkt) throws GeometryException {
+        return this.createFrom(wkt, (IProjection)null);
+    }
+
+    public Geometry createFrom(IProjection proj, com.vividsolutions.jts.geom.Geometry geom) throws GeometryException {
+        return JTSUtils.createGeometry(proj, geom);
+    }
+
+    @Override
+    public Geometry createFromQuietly(String wkt) {
+        try {
+            return this.createFrom(wkt);
+        } catch(Exception ex) {
+            return null;
+        }
+    }
+    
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    public Geometry createFrom(byte[] wkb, IProjection srs) throws GeometryException {
+        GeometryOperationContext context = new GeometryOperationContext();
+        context.setAttribute("data", wkb);
+        context.setAttribute("srs", srs);
+        try {
+            return (Geometry) this.invokeOperation(OPERATIONS.FROMWKB, context);
+        } catch (Exception e) {
+            throw new GeometryException(e);
+        }
+    }
+
+    @Override
+    public IGeneralPathX createGeneralPath(int rule, PathIterator pathIterator) {
+        if (pathIterator == null) {
+            return new DefaultGeneralPathX(rule);
+        }
+        return new DefaultGeneralPathX(pathIterator, false, 0);
+    }
+
+    @Override
+    public MultiPoint createMultiPoint(int subType) throws CreateGeometryException {
+        return (MultiPoint) create(TYPES.MULTIPOINT, subType);
+    }
+
+    @Override
+    public Line createLine(int subType) throws CreateGeometryException {
+        return (Line) create(TYPES.CURVE, subType);
+    }
+
+    @Override
+    public Curve createCurve(int subType) throws CreateGeometryException {
+        return (Curve) create(TYPES.CURVE, subType);
+    }
+
+    @Override
+    public MultiCurve createMultiCurve(int subType) throws CreateGeometryException {
+        return (MultiCurve) create(TYPES.MULTICURVE, subType);
+    }
+
+    @Override
+    public MultiLine createMultiLine(int subType) throws CreateGeometryException {
+        return (MultiLine) create(TYPES.MULTILINE, subType);
+    }
+
+    @Override
+    public MultiSurface createMultiSurface(int subType) throws CreateGeometryException {
+        return (MultiSurface) create(TYPES.MULTISURFACE, subType);
+    }
+
+    @Override
+    public MultiPolygon createMultiPolygon(int subType) throws CreateGeometryException {
+        return (MultiPolygon) create(TYPES.MULTIPOLYGON, subType);
+    }
+
+    @Override
+    public Polygon createPolygon(int subType) throws CreateGeometryException {
+        return (Polygon) create(TYPES.SURFACE, subType);
+    }
+
+    @Override
+    public Surface createSurface(int subType) throws CreateGeometryException {
+        return (Surface) create(TYPES.SURFACE, subType);
+    }
+
+    @Override
+    public SpatialIndex createDefaultMemorySpatialIndex() throws ServiceException {
+        return this.createSpatialIndex(SpatialIndexFactoryJTSQuadtree.NAME, null);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public SpatialIndexFactory getSpatialIndexFactory(String name) {
+        return (SpatialIndexFactory) this.spatialIndexFactories.get(name);
+    }
+
+    @Override
+    public void addServiceFactory(ServiceFactory serviceFactory) {
+        serviceFactory.initialize();
+        this.spatialIndexFactories.put(serviceFactory.getName(), serviceFactory);
+    }
+
+    @Override
+    public Service createService(DynObject serviceParameters) throws ServiceException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public DynObject createServiceParameters(String serviceName) throws ServiceException {
+        SpatialIndexFactory factory = this.getSpatialIndexFactory(serviceName);
+        if (factory == null) {
+            throw new CantExistsService(serviceName);
+        }
+        return factory.createParameters();
+    }
+
+    @Override
+    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);
+        }
+
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport createInformacionBuilder() {
+        return new BaseInformationBuilderWithGeometrySupport();
+    }
+
+    @Override
+    public boolean isSubtype(int geomTypeParent, int geomTypeChild) {
+        // Esto es un implementacion patatera que habria que mejorar,
+        // pero mejor aqui que esparcida por todas partes en donde se
+        // necesite.
+        if( geomTypeParent == geomTypeChild ) {
+            return true;
+        }
+        if( geomTypeParent == Geometry.TYPES.GEOMETRY ) {
+            return true;
+        }
+        switch(geomTypeParent) {
+        case Geometry.TYPES.MULTICURVE:
+            return geomTypeChild==Geometry.TYPES.MULTILINE ;
+        case Geometry.TYPES.MULTISURFACE:
+            return geomTypeChild==Geometry.TYPES.MULTIPOLYGON ;
+        case Geometry.TYPES.MULTIPOINT:
+            return geomTypeChild==Geometry.TYPES.MULTIPOINT ;
+
+        case Geometry.TYPES.CURVE:
+            return
+                geomTypeChild == Geometry.TYPES.CURVE ||
+                geomTypeChild == Geometry.TYPES.LINE ||
+                geomTypeChild == Geometry.TYPES.ARC ||
+                geomTypeChild == Geometry.TYPES.SPLINE ||
+                geomTypeChild == Geometry.TYPES.CIRCUMFERENCE ||
+                geomTypeChild == Geometry.TYPES.PERIELLIPSE
+                ;
+        case Geometry.TYPES.SURFACE:
+            return
+            geomTypeChild==Geometry.TYPES.SURFACE ||
+            geomTypeChild==Geometry.TYPES.POLYGON ||
+            geomTypeChild == Geometry.TYPES.CIRCLE ||
+            geomTypeChild == Geometry.TYPES.ELLIPSE ||
+            geomTypeChild == Geometry.TYPES.RING ||
+            geomTypeChild == Geometry.TYPES.FILLEDSPLINE ||
+            geomTypeChild == Geometry.TYPES.ELLIPTICARC
+            ;
+        case Geometry.TYPES.POINT:
+            return geomTypeChild==Geometry.TYPES.POINT ;
+        }
+        return false;
+    }
+    
+    @Override
+    public boolean canAggregate(int geomTypeParent, int geomTypeChild) {
+        
+        switch(geomTypeParent) {
+        case Geometry.TYPES.MULTICURVE:
+        case Geometry.TYPES.MULTILINE:
+            return isSubtype(Geometry.TYPES.CURVE, geomTypeChild);
+        case Geometry.TYPES.MULTISURFACE:
+        case Geometry.TYPES.MULTIPOLYGON:
+            return isSubtype(Geometry.TYPES.SURFACE, geomTypeChild);
+        case Geometry.TYPES.MULTIPOINT:
+            return isSubtype(Geometry.TYPES.POINT, geomTypeChild);
+        }
+        return false;
+    }
+
+    @Override
+    public GeometryCoercionContext createGeometryCoercionContext() {
+        return new DefaultGeometryCoercionContext();
+    }
+    
+    
+    public static void main(String[] args) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+        String s;
+        new DefaultLibrariesInitializer().fullInitialize();
+//        s =  GeometryUtils.formatCoordinate("%-%d� %m' %s'' N", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d� %m' %.0s'' N", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%+%d� %m' %.2s'' N (%4.4D)", 39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d� %m' N", -39.89);
+//        System.out.println(s);
+//        s =  GeometryUtils.formatCoordinate("%-%d� %m' N (%4.4D)", 39.89);
+//        System.out.println(s);
+        //Geometry g = GeometryUtils.createFrom("00000007d50000000100000007d20000002341258d57c2b73acf4150bf008a45b87241258d5eb2faa5364150befedb0f995841258d6aeb851eb84150befbeeb851ec41258d723d70a3d74150bef9d51eb85241258d7e428f5c294150bef677ae147b41258d9d147ae1484150beeea47ae14841258dbc28f5c28f4150bee72ae147ae41258dc7ae147ae14150bee468f5c28f41258dcc6b851eb84150bee31999999a41258dd1666666664150bee18b851eb841258dd8d70a3d714150bedf1d70a3d741258ddea8f5c28f4150bedc951eb85241258de3eb851eb84150bed99ccccccd41258dea3d70a3d74150bed6351eb85241258defbd70a3d74150bed3728f5c2941258df39999999a4150bed1751eb85241258df6c7ae147b4150bed01c28f5c341258df86b851eb84150becf1f5c28f641258dfa1999999a4150becd4666666641258dfb6147ae144150becbc51eb85241258dfd1999999a4150bec9a000000041258dfec28f5c294150bec753d70a3d41258e001eb851ec4150bec2f666666641258e047ae147ae4150beb73147ae1441258e054ccccccd4150beb3bc28f5c341258e054ccccccd4150beb2d70a3d7141258e05947ae1484150beb2047ae14841258e053d70a3d74150beb17333333341258e03a8f5c28f4150beb0e47ae14841258de69999999a4150beaca3d70a3d41258db10f5c28f64150bea46d70a3d741258dabdc28f5c34150bea3928f5c2941258da8dc28f5c34150bea300a3d70a41258da623d70a3d4150bea26147ae1441258da34ccccccd4150bea19d70a3d7");
+        //Geometry g = GeometryUtils.createFrom("MULTILINESTRING M ((745920.412801 4319733.74841197 -9999,745923.444481 4319733.242374 -9999,745930.962949 4319734.760282 -9999,745937.102608 4319738.899755 -9999,745941.242081 4319745.039415 -9999,745942.759989 4319752.557882 -9999,745941.242081 4319760.07635 -9999,745937.102608 4319766.216009 -9999,745930.962949 4319770.355482 -9999,745923.444481 4319771.87339 -9999,745915.926014 4319770.355482 -9999,745914.042603266 4319769.08565144 -9999,745911.2302267 4319767.2327453 -9999))");
+        Geometry g = GeometryUtils.createFrom("0105000060E66400000100000001020000400D00000016A75AD380C3264156FBE56F7D7A5041000000008087C3C07D0393E386C326413D0E834F7D7A5041000000008087C3C0BDA607ED95C32641D575A8B07D7A5041000000008087C3C029098934A2C32641FF9595B97E7A5041000000008087C3C0740AF27BAAC326417EC68542807A5041000000008087C3C039471D85ADC32641B456B423827A5041000000008087C3C0740AF27BAAC326411CEBE204847A5041000000008087C3C029098934A2C326416A17D38D857A5041000000008087C3C0BDA607ED95C326419337C096867A5041000000008087C3C07D0393E386C326412C9FE5F7867A5041000000008087C3C0CB811EDA77C326419337C096867A5041000000008087C3C06518D01574C3264130507B45867A5041000000008087C3C02646E0756EC32641894CE5CE857A5041000000008087C3C0");
+        String hexwkb = g.convertToHexWKB();
+        String hexewkb = g.convertToHexEWKB();
+        //byte[] b = g.convertToEWKB();
+        
+        System.out.println(hexwkb);
+        System.out.println(hexewkb);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform2D.java	(revision 46118)
@@ -0,0 +1,397 @@
+package org.gvsig.fmap.geom.jts.transform;
+
+import static java.lang.Math.abs;
+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.Point;
+import org.gvsig.fmap.geom.transform.Transform;
+
+public class Transform2D implements Transform {
+
+    /**
+     * The constant used for testing results.
+     */
+    public final static double ACCURACY = 1e-12;
+
+    // coefficients for x coordinate.
+    protected double m00, m01, m02;
+
+    // coefficients for y coordinate.
+    protected double m10, m11, m12;
+
+    /**
+     * Creates a new AffineTransform2D, initialized with Identity.
+     */
+    public Transform2D() {
+        // init to identity matrix
+        m00 = m11 = 1;
+        m01 = m10 = 0;
+        m02 = m12 = 0;
+    }
+
+    /**
+     * Creates a new transform from a java AWT transform.
+     * @param transform
+     */
+    public Transform2D(java.awt.geom.AffineTransform transform) {
+        double[] coefs = new double[6];
+        transform.getMatrix(coefs);
+        m00 = coefs[0];
+        m10 = coefs[1];
+        m01 = coefs[2];
+        m11 = coefs[3];
+        m02 = coefs[4];
+        m12 = coefs[5];
+    }
+
+    /**
+     * Creates a new Affine Transform by directly specifying the coefficients,
+     * in the order m00, m01, m02, m10, m11, m12 (different order of
+     * java.awt.geom.AffineTransform).
+     * @param coefs
+     */
+    public Transform2D(double[] coefs) {
+        if (coefs.length == 4) {
+            m00 = coefs[0];
+            m01 = coefs[1];
+            m10 = coefs[2];
+            m11 = coefs[3];
+        } else {
+            m00 = coefs[0];
+            m01 = coefs[1];
+            m02 = coefs[2];
+            m10 = coefs[3];
+            m11 = coefs[4];
+            m12 = coefs[5];
+        }
+    }
+
+    public Transform2D(double xx, double yx, double tx, double xy,
+            double yy, double ty) {
+        m00 = xx;
+        m01 = yx;
+        m02 = tx;
+        m10 = xy;
+        m11 = yy;
+        m12 = ty;
+    }
+    
+    /**
+     * Returns coefficients of the transform in a linear array of 6 double.
+     * @return 
+     */
+    public double[] coefficients() {
+        double[] tab = {m00, m01, m02, m10, m11, m12};
+        return tab;
+    }
+
+    /**
+     * Returns the 3x3 square matrix representing the transform.
+     *
+     * @return the 3x3 affine transform representing the matrix
+     */
+    public double[][] affineMatrix() {
+        double[][] tab = new double[][]{
+            new double[]{m00, m01, m02},
+            new double[]{m10, m11, m12},
+            new double[]{0, 0, 1}};
+        return tab;
+    }
+
+    /**
+     * Returns this transform as an instance of java AWT AffineTransform.
+     * @return 
+     */
+    public java.awt.geom.AffineTransform asAwtTransform() {
+        return new java.awt.geom.AffineTransform(
+                this.m00, this.m10, this.m01, this.m11, this.m02, this.m12);
+    }
+
+    /**
+     * Returns the affine transform created by applying first the affine
+     * transform given by <code>other</code>, then this affine transform. This
+     * is the equivalent method of the 'concatenate' method in
+     * java.awt.geom.AffineTransform.
+     *
+     * @param other the transform to apply first
+     * @return the composition this * that
+     */
+    @Override
+    public Transform concatenate(Transform other) {
+        if (!(other instanceof Transform2D)) {
+            throw new IllegalArgumentException("Can't concatenate an AffineTransform2D with a non AffineTransform2D (other " + other.toString() + ")");
+        }
+        Transform2D that = (Transform2D) other;
+        double n00 = this.m00 * that.m00 + this.m01 * that.m10;
+        double n01 = this.m00 * that.m01 + this.m01 * that.m11;
+        double n02 = this.m00 * that.m02 + this.m01 * that.m12 + this.m02;
+        double n10 = this.m10 * that.m00 + this.m11 * that.m10;
+        double n11 = this.m10 * that.m01 + this.m11 * that.m11;
+        double n12 = this.m10 * that.m02 + this.m11 * that.m12 + this.m12;
+        return new Transform2D(n00, n01, n02, n10, n11, n12);
+    }
+
+    /**
+     * Returns the affine transform created by applying first this affine
+     * transform, then the affine transform given by <code>that</code>. This the
+     * equivalent method of the 'preConcatenate' method in
+     * java.awt.geom.AffineTransform. <code><pre>
+     * shape = shape.transform(T1.chain(T2).chain(T3));
+     * </pre></code> is equivalent to the sequence: <code><pre>
+     * shape = shape.transform(T1);
+     * shape = shape.transform(T2);
+     * shape = shape.transform(T3);
+     * </pre></code>
+     *
+     * @param other the transform to apply in a second step
+     * @return the composition that * this
+     */
+    public Transform chain(Transform other) {
+        if (!(other instanceof Transform2D)) {
+            throw new IllegalArgumentException("Can't concatenate an AffineTransform2D with a non AffineTransform2D (other " + other.toString() + ")");
+        }
+        Transform2D that = (Transform2D) other;
+        return new Transform2D(
+                that.m00 * this.m00 + that.m01 * this.m10,
+                that.m00 * this.m01 + that.m01 * this.m11,
+                that.m00 * this.m02 + that.m01 * this.m12 + that.m02,
+                that.m10 * this.m00 + that.m11 * this.m10,
+                that.m10 * this.m01 + that.m11 * this.m11,
+                that.m10 * this.m02 + that.m11 * this.m12 + that.m12);
+    }
+
+    /**
+     * Return the affine transform created by applying first this affine
+     * transform, then the affine transform given by <code>that</code>. This the
+     * equivalent method of the 'preConcatenate' method in
+     * java.awt.geom.AffineTransform.
+     *
+     * @param other the transform to apply in a second step
+     * @return the composition that * this
+     */
+    @Override
+    public Transform preConcatenate(Transform other) {
+        return this.chain(other);
+    }
+
+    /**
+     * Tests if this affine transform is a similarity.
+     *
+     * @return
+     */
+    public boolean isSimilarity() {
+        // computation shortcuts
+        double a = this.m00;
+        double b = this.m01;
+        double c = this.m10;
+        double d = this.m11;
+
+        // determinant
+        double k2 = abs(a * d - b * c);
+
+        // test each condition
+        if (abs(a * a + b * b - k2) > ACCURACY) {
+            return false;
+        }
+        if (abs(c * c + d * d - k2) > ACCURACY) {
+            return false;
+        }
+        if (abs(a * a + c * c - k2) > ACCURACY) {
+            return false;
+        }
+        if (abs(b * b + d * d - k2) > ACCURACY) {
+            return false;
+        }
+
+        // if each test passed, return true
+        return true;
+    }
+
+    /**
+     * Tests if this affine transform is a motion, i.e. is composed only of
+     * rotations and translations.
+     * @return 
+     */
+    public boolean isMotion() {
+        // Transform must be 1) an isometry and 2) be direct
+        return isIsometry() && isDirect();
+    }
+
+    /**
+     * Tests if this affine transform is an isometry, i.e. is equivalent to a
+     * compound of translations, rotations and reflections. Isometry keeps area
+     * of shapes unchanged, but can change orientation (direct or indirect).
+     *
+     * @return true in case of isometry.
+     */
+    public boolean isIsometry() {
+        // extract matrix coefficients
+        double a = this.m00;
+        double b = this.m01;
+        double c = this.m10;
+        double d = this.m11;
+
+        // transform vectors should be normalized
+        if (abs(a * a + b * b - 1) > ACCURACY) {
+            return false;
+        }
+        if (abs(c * c + d * d - 1) > ACCURACY) {
+            return false;
+        }
+
+        // determinant must be -1 or +1
+        if (abs(a * b + c * d) > ACCURACY) {
+            return false;
+        }
+
+        // if all tests passed, return true;
+        return true;
+    }
+
+    /**
+     * Tests if this affine transform is direct, i.e. the sign of the
+     * determinant of the associated matrix is positive. Direct transforms
+     * preserve the orientation of transformed shapes.
+     * @return 
+     */
+    public boolean isDirect() {
+        return this.m00 * this.m11 - this.m01 * this.m10 > 0;
+    }
+
+    /**
+     * Tests is this affine transform is equal to the identity transform.
+     *
+     * @return true if this transform is the identity transform
+     */
+    @Override
+    public boolean isIdentity() {
+        if (abs(this.m00 - 1) > ACCURACY) {
+            return false;
+        }
+        if (abs(this.m01) > ACCURACY) {
+            return false;
+        }
+        if (abs(this.m02) > ACCURACY) {
+            return false;
+        }
+        if (abs(this.m10) > ACCURACY) {
+            return false;
+        }
+        if (abs(this.m11 - 1) > ACCURACY) {
+            return false;
+        }
+        if (abs(this.m12) > ACCURACY) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the inverse transform. If the transform is not invertible, throws
+     * a new NonInvertibleTransformException.
+     *
+     * @return
+     */
+    @Override
+    public Transform inverse() {
+        double det = m00 * m11 - m10 * m01;
+
+        if (Math.abs(det) < ACCURACY) {
+            throw new NonInvertibleTransformException(this);
+        }
+
+        return new Transform2D(
+                m11 / det, -m01 / det, (m01 * m12 - m02 * m11) / det,
+                -m10 / det, m00 / det, (m02 * m10 - m00 * m12) / det);
+    }
+
+    private Point createPoint2D(double x, double y) {
+        try {
+            return GeometryLocator.getGeometryManager().createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
+        } catch (CreateGeometryException ex) {
+            throw new RuntimeException("Can't create Point2D", ex);
+        }
+    }
+
+    /**
+     * Computes the coordinates of the transformed point.
+     *
+     * @param p
+     * @return
+     */
+    @Override
+    public Point transform(Point p) {
+        Point dst = createPoint2D(
+                p.getX() * m00 + p.getY() * m01 + m02,
+                p.getX() * m10 + p.getY() * m11 + m12);
+        return dst;
+    }
+
+    @Override
+    public Point[] transform(Point[] src, Point[] dst) {
+        if (dst == null) {
+            dst = new Point[src.length];
+        }
+
+        double x, y;
+        for (int i = 0; i < src.length; i++) {
+            x = src[i].getX();
+            y = src[i].getY();
+            dst[i] = createPoint2D(
+                    x * m00 + y * m01 + m02,
+                    x * m10 + y * m11 + m12);
+        }
+        return dst;
+    }
+
+    /**
+     * Displays the coefficients of the transform, row by row.
+     *
+     * @return
+     */
+    @Override
+    public String toString() {
+        return new String("AffineTransform2D(" + m00 + "," + m01 + "," + m02
+                + "," + m10 + "," + m11 + "," + m12 + ",");
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof Transform2D)) {
+            return false;
+        }
+
+        Transform2D that = (Transform2D) obj;
+
+        if (!EqualUtils.areEqual(this.m00, that.m00)) {
+            return false;
+        }
+        if (!EqualUtils.areEqual(this.m01, that.m01)) {
+            return false;
+        }
+        if (!EqualUtils.areEqual(this.m02, that.m02)) {
+            return false;
+        }
+        if (!EqualUtils.areEqual(this.m00, that.m00)) {
+            return false;
+        }
+        if (!EqualUtils.areEqual(this.m01, that.m01)) {
+            return false;
+        }
+        if (!EqualUtils.areEqual(this.m02, that.m02)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public Transform2D clone() {
+        return new Transform2D(m00, m01, m02, m10, m11, m12);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/Transform3D.java	(revision 46118)
@@ -0,0 +1,335 @@
+package org.gvsig.fmap.geom.jts.transform;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.transform.Transform;
+
+public class Transform3D implements Transform {
+
+    /**
+     * The constant used for testing results.
+     */
+    public final static double ACCURACY = 1e-12;
+
+    /**
+     * coefficients for x coordinate.
+     */
+    protected double m00, m01, m02, m03;
+
+    /**
+     * coefficients for y coordinate.
+     */
+    protected double m10, m11, m12, m13;
+
+    /**
+     * coefficients for z coordinate.
+     */
+    protected double m20, m21, m22, m23;
+
+    public Transform3D() {
+        // init to identity matrix
+        m00 = m11 = m22 = 1;
+        m01 = m02 = m03 = 0;
+        m10 = m12 = m13 = 0;
+        m20 = m21 = m23 = 0;
+    }
+
+    public Transform3D(double[] coefs) {
+        if (coefs.length == 9) {
+            m00 = coefs[0];
+            m01 = coefs[1];
+            m02 = coefs[2];
+            m10 = coefs[3];
+            m11 = coefs[4];
+            m12 = coefs[5];
+            m20 = coefs[6];
+            m21 = coefs[7];
+            m22 = coefs[8];
+        } else if (coefs.length == 12) {
+            m00 = coefs[0];
+            m01 = coefs[1];
+            m02 = coefs[2];
+            m03 = coefs[3];
+            m10 = coefs[4];
+            m11 = coefs[5];
+            m12 = coefs[6];
+            m13 = coefs[7];
+            m20 = coefs[8];
+            m21 = coefs[9];
+            m22 = coefs[10];
+            m23 = coefs[11];
+        } else {
+            throw new IllegalArgumentException(
+                    "Input array must have 9 or 12 elements");
+        }
+    }
+
+    public Transform3D(double xx, double yx, double zx, double tx,
+            double xy, double yy, double zy, double ty, double xz, double yz,
+            double zz, double tz) {
+        m00 = xx;
+        m01 = yx;
+        m02 = zx;
+        m03 = tx;
+        m10 = xy;
+        m11 = yy;
+        m12 = zy;
+        m13 = ty;
+        m20 = xz;
+        m21 = yz;
+        m22 = zz;
+        m23 = tz;
+    }
+
+    private Point createPoint3D(double x, double y, double z) {
+        try {
+            Point point = GeometryLocator.getGeometryManager().createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
+            point.setCoordinateAt(Geometry.DIMENSIONS.Z, z);
+            return point;
+        } catch (CreateGeometryException ex) {
+            throw new RuntimeException("Can't create Point3D", ex);
+        }
+    }
+    // ===================================================================
+    // accessors
+
+    public boolean isIdentity() {
+        if (m00 != 1) {
+            return false;
+        }
+        if (m11 != 1) {
+            return false;
+        }
+        if (m22 != 0) {
+            return false;
+        }
+        if (m01 != 0) {
+            return false;
+        }
+        if (m02 != 0) {
+            return false;
+        }
+        if (m03 != 0) {
+            return false;
+        }
+        if (m10 != 0) {
+            return false;
+        }
+        if (m12 != 0) {
+            return false;
+        }
+        if (m13 != 0) {
+            return false;
+        }
+        if (m20 != 0) {
+            return false;
+        }
+        if (m21 != 0) {
+            return false;
+        }
+        if (m23 != 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the affine coefficients of the transform. Result is an array of
+     * 12 double.
+     */
+    public double[] coefficients() {
+        double[] tab = {m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23};
+        return tab;
+    }
+
+    /**
+     * Computes the determinant of this transform. Can be zero.
+     *
+     * @return the determinant of the transform.
+     */
+    private double determinant() {
+        return m00 * (m11 * m22 - m12 * m21) - m01 * (m10 * m22 - m20 * m12)
+                + m02 * (m10 * m21 - m20 * m11);
+    }
+
+    /**
+     * Computes the inverse affine transform.
+     */
+    public Transform3D inverse() {
+        double det = this.determinant();
+        return new Transform3D(
+                (m11 * m22 - m21 * m12) / det,
+                (m21 * m02 - m01 * m22) / det,
+                (m01 * m12 - m11 * m02) / det,
+                (m01 * (m22 * m13 - m12 * m23) + m02 * (m11 * m23 - m21 * m13)
+                - m03 * (m11 * m22 - m21 * m12)) / det,
+                (m20 * m12 - m10 * m22) / det,
+                (m00 * m22 - m20 * m02) / det,
+                (m10 * m02 - m00 * m12) / det,
+                (m00 * (m12 * m23 - m22 * m13) - m02 * (m10 * m23 - m20 * m13)
+                + m03 * (m10 * m22 - m20 * m12)) / det,
+                (m10 * m21 - m20 * m11) / det,
+                (m20 * m01 - m00 * m21) / det,
+                (m00 * m11 - m10 * m01) / det,
+                (m00 * (m21 * m13 - m11 * m23) + m01 * (m10 * m23 - m20 * m13)
+                - m03 * (m10 * m21 - m20 * m11)) / det);
+    }
+
+    // ===================================================================
+    // general methods
+    /**
+     * Returns the affine transform created by applying first the affine
+     * transform given by <code>that</code>, then this affine transform.
+     *
+     * @param that the transform to apply first
+     * @return the composition this * that
+     */
+    public Transform concatenate(Transform other) {
+        if (!(other instanceof Transform3D)) {
+            throw new IllegalArgumentException("Can't concatenate an AffineTransform3D with a non AffineTransform2D (other " + other.toString() + ")");
+        }
+        Transform3D that = (Transform3D) other;
+        double n00 = m00 * that.m00 + m01 * that.m10 + m02 * that.m20;
+        double n01 = m00 * that.m01 + m01 * that.m11 + m02 * that.m21;
+        double n02 = m00 * that.m02 + m01 * that.m12 + m02 * that.m22;
+        double n03 = m00 * that.m03 + m01 * that.m13 + m02 * that.m23 + m03;
+        double n10 = m10 * that.m00 + m11 * that.m10 + m12 * that.m20;
+        double n11 = m10 * that.m01 + m11 * that.m11 + m12 * that.m21;
+        double n12 = m10 * that.m02 + m11 * that.m12 + m12 * that.m22;
+        double n13 = m10 * that.m03 + m11 * that.m13 + m12 * that.m23 + m13;
+        double n20 = m20 * that.m00 + m21 * that.m10 + m22 * that.m20;
+        double n21 = m20 * that.m01 + m21 * that.m11 + m22 * that.m21;
+        double n22 = m20 * that.m02 + m21 * that.m12 + m22 * that.m22;
+        double n23 = m20 * that.m03 + m21 * that.m13 + m22 * that.m23 + m23;
+        return new Transform3D(
+                n00, n01, n02, n03,
+                n10, n11, n12, n13,
+                n20, n21, n22, n23);
+    }
+
+    /**
+     * Return the affine transform created by applying first this affine
+     * transform, then the affine transform given by <code>that</code>.
+     *
+     * @param other the transform to apply in a second step
+     * @return the composition that * this
+     */
+    public Transform3D preConcatenate(Transform other) {
+        if (!(other instanceof Transform3D)) {
+            throw new IllegalArgumentException("Can't concatenate an AffineTransform3D with a non AffineTransform3D (other " + other.toString() + ")");
+        }
+        Transform3D that = (Transform3D) other;
+        double n00 = that.m00 * m00 + that.m01 * m10 + that.m02 * m20;
+        double n01 = that.m00 * m01 + that.m01 * m11 + that.m02 * m21;
+        double n02 = that.m00 * m02 + that.m01 * m12 + that.m02 * m22;
+        double n03 = that.m00 * m03 + that.m01 * m13 + that.m02 * m23 + that.m03;
+        double n10 = that.m10 * m00 + that.m11 * m10 + that.m12 * m20;
+        double n11 = that.m10 * m01 + that.m11 * m11 + that.m12 * m21;
+        double n12 = that.m10 * m02 + that.m11 * m12 + that.m12 * m22;
+        double n13 = that.m10 * m03 + that.m11 * m13 + that.m12 * m23 + that.m13;
+        double n20 = that.m20 * m00 + that.m21 * m10 + that.m22 * m20;
+        double n21 = that.m20 * m01 + that.m21 * m11 + that.m22 * m21;
+        double n22 = that.m20 * m02 + that.m21 * m12 + that.m22 * m22;
+        double n23 = that.m20 * m03 + that.m21 * m13 + that.m22 * m23 + that.m23;
+        return new Transform3D(
+                n00, n01, n02, n03,
+                n10, n11, n12, n13,
+                n20, n21, n22, n23);
+    }
+
+    /**
+     * Transforms the input point array, stores the result in the pre-allocated
+     * array, and returns a pointer to the result array. A new array is created
+     * if <code>res</code> is null or has length smaller than of src.
+     *
+     * @param src
+     * @param dst
+     * @return
+     */
+    @Override
+    public Point[] transform(Point[] src, Point[] dst) {
+        // Check validity of result array
+        if (dst == null || dst.length < src.length) {
+            dst = new Point[src.length];
+        }
+
+        // transform each input point
+        for (int i = 0; i < src.length; i++) {
+            Point3D p = (Point3D) src[i];
+            dst[i] = createPoint3D(
+                    p.getX() * m00 + p.getY() * m01 + p.getZ() * m02 + m03,
+                    p.getX() * m10 + p.getY() * m11 + p.getZ() * m12 + m13,
+                    p.getX() * m20 + p.getY() * m21 + p.getZ() * m22 + m23);
+        }
+        return dst;
+    }
+
+    /**
+     * Transforms the input point.
+     * @param src
+     * @return 
+     */
+    @Override
+    public Point transform(Point src) {
+        Point3D p = (Point3D) src;
+        return createPoint3D(
+                p.getX() * m00 + p.getY() * m01 + p.getZ() * m02 + m03,
+                p.getX() * m10 + p.getY() * m11 + p.getZ() * m12 + m13,
+                p.getX() * m20 + p.getY() * m21 + p.getZ() * m22 + m23);
+    }
+
+    /**
+     * Compares two transforms. Returns true if all inner fields are equal up to
+     * the precision given by Shape3D.ACCURACY.
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Transform3D)) {
+            return false;
+        }
+
+        double tab[] = ((Transform3D) obj).coefficients();
+
+        if (Math.abs(tab[0] - m00) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[1] - m01) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[2] - m02) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[3] - m03) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[4] - m10) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[5] - m11) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[6] - m12) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[7] - m13) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[8] - m20) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[9] - m21) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[10] - m22) > ACCURACY) {
+            return false;
+        }
+        if (Math.abs(tab[11] - m23) > ACCURACY) {
+            return false;
+        }
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/EqualUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/EqualUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/EqualUtils.java	(revision 46118)
@@ -0,0 +1,72 @@
+/**
+ * 
+ */
+package org.gvsig.fmap.geom.jts.transform;
+
+
+/**
+ * Collected methods which allow easy implementation of <code>equals</code>.
+ * Rewritten from http://www.javapractices.com/topic/TopicAction.do?Id=17.
+ *
+ * Example use case in a class called Car:
+ * <pre>
+public boolean equals(Object aThat){
+  if ( this == aThat ) return true;
+  if ( !(aThat instanceof Car) ) return false;
+  Car that = (Car)aThat;
+  return
+    EqualsUtil.areEqual(this.name, that.name) &&
+    EqualsUtil.areEqual(this.numDoors, that.numDoors) &&
+    EqualsUtil.areEqual(this.gasMileage, that.gasMileage) &&
+    EqualsUtil.areEqual(this.color, that.color) &&
+    Arrays.equals(this.maintenanceChecks, that.maintenanceChecks); //array!
+}
+ * </pre>
+ *
+ * <em>Arrays are not handled by this class</em>.
+ * This is because the <code>Arrays.equals</code> methods should be used for
+ * array fields.
+ */
+public final class EqualUtils {
+
+	static public boolean areEqual(boolean aThis, boolean aThat){
+		//System.out.println("boolean");
+		return aThis == aThat;
+	}
+
+	static public boolean areEqual(char aThis, char aThat){
+		//System.out.println("char");
+		return aThis == aThat;
+	}
+
+	static public boolean areEqual(long aThis, long aThat){
+		/*
+		 * Implementation Note
+		 * Note that byte, short, and int are handled by this method, through
+		 * implicit conversion.
+		 */
+		//System.out.println("long");
+		return aThis == aThat;
+	}
+
+	static public boolean areEqual(float aThis, float aThat){
+		//System.out.println("float");
+		return Float.floatToIntBits(aThis) == Float.floatToIntBits(aThat);
+	}
+
+	static public boolean areEqual(double aThis, double aThat){
+		//System.out.println("double");
+		return Double.doubleToLongBits(aThis) == Double.doubleToLongBits(aThat);
+	}
+
+	/**
+	 * Possibly-null object field.
+	 *
+	 * Includes type-safe enumerations and collections, but does not include
+	 * arrays. See class comment.
+	 */
+	static public boolean areEqual(Object aThis, Object aThat){
+		//System.out.println("Object");
+		return aThis == null ? aThat == null : aThis.equals(aThat);
+	}
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/NonInvertibleTransformException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/NonInvertibleTransformException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/transform/NonInvertibleTransformException.java	(revision 46118)
@@ -0,0 +1,32 @@
+
+package org.gvsig.fmap.geom.jts.transform;
+
+import org.gvsig.fmap.geom.transform.Transform;
+
+
+/**
+ * Exception thrown when trying to compute an inverse transform of a transform
+ * that does not allows this feature.
+ * @author dlegland
+ */
+public class NonInvertibleTransformException extends RuntimeException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    protected Transform transform;
+    
+    public NonInvertibleTransformException() {
+    	this.transform = null;
+    }
+    
+    public NonInvertibleTransformException(Transform transform) {
+    	this.transform = transform;
+    }
+    
+    public Transform getTransform() {
+    	return transform;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/BaseInformationBuilderWithGeometrySupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/BaseInformationBuilderWithGeometrySupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/BaseInformationBuilderWithGeometrySupport.java	(revision 46118)
@@ -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.jts;
+
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport.EnvelopeElement;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport.PropertyElementWithGeometrySupport;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport.RawElementWithGeometrySupport;
+import org.gvsig.fmap.geom.InformationbuilderWithGeometrySupport.TextElementWithGeometrySupport;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.util.impl.BaseInformationBuilder;
+
+
+public class BaseInformationBuilderWithGeometrySupport extends BaseInformationBuilder implements InformationbuilderWithGeometrySupport {
+
+    protected class BaseRawElementWithGeometrySupport extends BaseRawElement implements RawElementWithGeometrySupport {
+
+        @Override
+        public RawElementWithGeometrySupport value(Geometry geom) {
+            return (RawElementWithGeometrySupport) asWKT(this, geom);
+        }
+
+        @Override
+        public RawElementWithGeometrySupport value(IProjection proj) {
+            return (RawElementWithGeometrySupport) asAbrev(this, proj);
+        }
+
+        @Override
+        public RawElementWithGeometrySupport valueAsWKT(IProjection proj) {
+            return (RawElementWithGeometrySupport) asWKT(this, proj);
+        }
+
+        @Override
+        public RawElementWithGeometrySupport value(Envelope env) {
+            return (RawElementWithGeometrySupport) asWKT(this, env);
+        }
+    }
+
+    protected class BaseTextElementWithGeometrySupport extends BaseTextElement implements TextElementWithGeometrySupport {
+
+        @Override
+        public TextElementWithGeometrySupport value(Geometry geom) {
+            return (TextElementWithGeometrySupport) asWKT(this, geom);
+        }
+
+        @Override
+        public TextElementWithGeometrySupport value(IProjection proj) {
+            return (TextElementWithGeometrySupport) asAbrev(this, proj);
+        }
+
+        @Override
+        public TextElementWithGeometrySupport valueAsWKT(IProjection proj) {
+            return (TextElementWithGeometrySupport) asWKT(this, proj);
+        }
+
+        @Override
+        public TextElementWithGeometrySupport value(Envelope env) {
+            return (TextElementWithGeometrySupport) asWKT(this, env);
+        }
+
+    }
+
+    protected class BasePropertyElementWithGeometrySupport extends BasePropertyElement implements PropertyElementWithGeometrySupport {
+        
+        @Override
+        public PropertyElementWithGeometrySupport value(Geometry geom) {
+            return (PropertyElementWithGeometrySupport) asWKT(this, geom);
+        }
+
+        @Override
+        public PropertyElementWithGeometrySupport value(IProjection proj) {
+            return (PropertyElementWithGeometrySupport) asWKT(this, proj);
+        }
+
+        @Override
+        public PropertyElementWithGeometrySupport valueAsWKT(IProjection proj) {
+            return (PropertyElementWithGeometrySupport) asWKT(this, proj);
+        }
+
+        @Override
+        public PropertyElementWithGeometrySupport value(Envelope env) {
+            return (PropertyElementWithGeometrySupport) asWKT(this, env);
+        }
+    }
+
+    private class DefaultEnvelopeElement extends BaseRawElement implements EnvelopeElement {
+
+        private Envelope env;
+
+        @Override
+        public DefaultEnvelopeElement value(Envelope value) {
+            this.env = value;
+            asWKT(this,value);
+            return this;
+        }
+
+        @Override
+        public String build() {
+            if( env == null ) {
+                return new BaseTextElementWithGeometrySupport().value("None").build();
+            } else {
+                PropertyElement p1 = new BasePropertyElementWithGeometrySupport();
+                p1.labelkey("_upper_left_corner");
+                p1.value("%+f, %+f", env.getMinimum(DIMENSIONS.X), env.getMaximum(DIMENSIONS.Y));
+                p1.monospace();
+
+                PropertyElement p2 = new BasePropertyElementWithGeometrySupport();
+                p2.labelkey("_upper_right_corner");
+                p2.value("%+f, %+f", env.getMaximum(DIMENSIONS.X), env.getMaximum(DIMENSIONS.Y));
+                p2.monospace();
+
+                PropertyElement p3 = new BasePropertyElementWithGeometrySupport();
+                p3.labelkey("_lower_right_corner");
+                p3.value("%+f, %+f", env.getMaximum(DIMENSIONS.X), env.getMinimum(DIMENSIONS.Y));
+                p3.monospace();
+
+                PropertyElement p4 = new BasePropertyElementWithGeometrySupport();
+                p4.labelkey("_lower_left_corner");
+                p4.value("%+f, %+f", env.getMinimum(DIMENSIONS.X), env.getMinimum(DIMENSIONS.Y));
+                p4.monospace();
+
+                return p1.build() + p2.build() + p3.build() + p4.build();
+            }
+        }
+
+    }
+
+    public BaseInformationBuilderWithGeometrySupport() {
+        super();
+    }
+
+    @Override
+    public PropertyElementWithGeometrySupport property() {
+        PropertyElementWithGeometrySupport element = new BasePropertyElementWithGeometrySupport();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public TextElementWithGeometrySupport text() {
+        TextElementWithGeometrySupport element = new BaseTextElementWithGeometrySupport();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public EnvelopeElement envelope() {
+        EnvelopeElement element = new DefaultEnvelopeElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public RawElementWithGeometrySupport raw() {
+        RawElementWithGeometrySupport element = new BaseRawElementWithGeometrySupport();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColor(String color) {
+        return (InformationbuilderWithGeometrySupport) super.backgroundColor(color); 
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorTitle(String color) {
+        return (InformationbuilderWithGeometrySupport) super.backgroundColorTitle(color); 
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyLabel(String color) {
+        return (InformationbuilderWithGeometrySupport) super.backgroundColorPropertyLabel(color); 
+    }
+
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyValue1(String color) {
+        return (InformationbuilderWithGeometrySupport) super.backgroundColorPropertyValue1(color); 
+    }
+    
+    @Override
+    public InformationbuilderWithGeometrySupport backgroundColorPropertyValue2(String color) {
+        return (InformationbuilderWithGeometrySupport) super.backgroundColorPropertyValue2(color); 
+    }
+    
+    protected Element asAbrev(Element e, IProjection proj) {
+        if (proj == null) {
+            return e.value("");
+        }
+        return e.value(proj.getAbrev());
+    }
+
+    protected Element asWKT(Element e, IProjection proj) {
+        if (proj == null) {
+            return e.value("");
+        }
+        String s = proj.export(ICRSFactory.FORMAT_WKT);
+        if (s == null) {
+            s = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
+        }
+        if (s == null) {
+            s = proj.export(ICRSFactory.FORMAT_PROJ4);
+        }
+        if (s == null) {
+            s = proj.getAbrev();
+        }
+        if (s != null) {
+            s = s.replaceAll("\\[", "[\n  ");
+            s = s.replaceAll("]", "\n]");
+        }
+        return e.value(s);
+    }
+
+    protected Element asWKT(Element e, Envelope env) {
+        if (env == null) {
+            return e.value("");
+        }
+        return asWKT(e, env.getGeometry());
+    }
+
+    protected Element asWKT(Element e, Geometry geom) {
+        String s = "";
+        try {
+            s = geom.convertToWKT();
+        } catch (Exception ex) {
+        }
+        return e.value(s);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/OpenJUMPUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/OpenJUMPUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/OpenJUMPUtils.java	(revision 46118)
@@ -0,0 +1,229 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.vividsolutions.jts.algorithm.distance.DistanceToPoint;
+import com.vividsolutions.jts.algorithm.distance.PointPairDistance;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.operation.buffer.BufferOp;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.linemerge.LineMerger;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ * Based on portions of code from OpenJump
+ *
+ */
+public class OpenJUMPUtils {
+
+    /**
+     * Creates a offset of a open line at a distance by removing segments that do not match the limit of the buffer.
+     *
+     * @param proj
+     * @param coordinates
+     * @param distance
+     * @return
+     */
+    public static Geometry offsetCleanOpenLine(IProjection proj, ArrayListCoordinateSequence coordinates, double distance) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.getFactory(coordinates);
+
+        LineString jtsGeom = JTSUtils.createJTSLineString(coordinates);
+
+        BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+        com.vividsolutions.jts.geom.Geometry sidedBuffer =
+            new BufferOp(jtsGeom, bufParams).getResultGeometry(distance).getBoundary();
+        Collection<LineString> offsetSegments = new ArrayList<>();
+        // Segments located entirely under this distance are excluded
+        int quadrantSegments = bufParams.getQuadrantSegments();
+        double lowerBound = Math.abs(distance) * Math.sin(Math.PI / (4 * quadrantSegments));
+        // Segments located entirely over this distance are included
+        // note that the theoretical approximation made with quadrantSegments
+        // is offset*cos(PI/(4*quadrantSegments) but
+        // offset*cos(PI/(2*quadrantSegments)
+        // is used to make sure to include segments located on the boundary
+        double upperBound = Math.abs(distance) * Math.cos(Math.PI / (2 * quadrantSegments));
+        for (int i = 0; i < sidedBuffer.getNumGeometries(); i++) {
+            Coordinate[] cc = sidedBuffer.getGeometryN(i).getCoordinates();
+            PointPairDistance ppd = new PointPairDistance();
+            DistanceToPoint.computeDistance(jtsGeom, cc[0], ppd);
+            double dj = ppd.getDistance();
+            for (int j = 1; j < cc.length; j++) {
+                double di = dj;
+                ppd = new PointPairDistance();
+                DistanceToPoint.computeDistance(jtsGeom, cc[j], ppd);
+                dj = ppd.getDistance();
+                // segment along or touching the source geometry : eclude it
+                if (Math.max(di, dj) < lowerBound || di == 0 || dj == 0) {
+                    continue;
+                }
+                // segment along the buffer boundary : include it
+                else if (Math.min(di, dj) > upperBound) {
+                    LineString segment = jtsGeom.getFactory().createLineString(new Coordinate[] { cc[j - 1], cc[j] });
+                    offsetSegments.add(segment);
+                }
+                // segment entirely located inside the buffer : exclude it
+                else if (Math.min(di, dj) > lowerBound && Math.max(di, dj) < upperBound) {
+                    continue;
+                }
+                // segment with a end at the offset distance and the other
+                // located within the buffer : divide it
+                else {
+                    // One of the coordinates is closed to but not on the source
+                    // curve and the other is more or less closed to offset
+                    // distance
+                    divide(offsetSegments, jtsGeom, cc[j - 1], cc[j], di, dj, lowerBound, upperBound);
+                }
+            }
+        }
+        Collection<LineString> offsetCurves = new ArrayList<LineString>();
+        offsetCurves.addAll(merge(offsetSegments));
+
+        return JTSUtils.createGeometry(proj, factory.buildGeometry(offsetCurves));
+    }
+    
+    /**
+     * Creates a offset of a open line at a distance by removing segments that do not match the limit of the buffer.
+     *
+     * @param proj
+     * @param coordinates
+     * @param bufParams
+     * @param distance
+     * @return
+     */
+    public static Geometry offsetCleanOpenLine(IProjection proj, ArrayListCoordinateSequence coordinates, BufferParameters bufParams, double distance) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.getFactory(coordinates);
+
+        LineString jtsGeom = JTSUtils.createJTSLineString(coordinates);
+
+//        BufferParameters bufParams = JTSUtils.getBufferParameters();
+
+        com.vividsolutions.jts.geom.Geometry sidedBuffer =
+            new BufferOp(jtsGeom, bufParams).getResultGeometry(distance).getBoundary();
+        Collection<LineString> offsetSegments = new ArrayList<>();
+        // Segments located entirely under this distance are excluded
+        int quadrantSegments = bufParams.getQuadrantSegments();
+        double lowerBound = Math.abs(distance) * Math.sin(Math.PI / (4 * quadrantSegments));
+        // Segments located entirely over this distance are included
+        // note that the theoretical approximation made with quadrantSegments
+        // is offset*cos(PI/(4*quadrantSegments) but
+        // offset*cos(PI/(2*quadrantSegments)
+        // is used to make sure to include segments located on the boundary
+        double upperBound = Math.abs(distance) * Math.cos(Math.PI / (2 * quadrantSegments));
+        for (int i = 0; i < sidedBuffer.getNumGeometries(); i++) {
+            Coordinate[] cc = sidedBuffer.getGeometryN(i).getCoordinates();
+            PointPairDistance ppd = new PointPairDistance();
+            DistanceToPoint.computeDistance(jtsGeom, cc[0], ppd);
+            double dj = ppd.getDistance();
+            for (int j = 1; j < cc.length; j++) {
+                double di = dj;
+                ppd = new PointPairDistance();
+                DistanceToPoint.computeDistance(jtsGeom, cc[j], ppd);
+                dj = ppd.getDistance();
+                // segment along or touching the source geometry : eclude it
+                if (Math.max(di, dj) < lowerBound || di == 0 || dj == 0) {
+                    continue;
+                }
+                // segment along the buffer boundary : include it
+                else if (Math.min(di, dj) > upperBound) {
+                    LineString segment = jtsGeom.getFactory().createLineString(new Coordinate[] { cc[j - 1], cc[j] });
+                    offsetSegments.add(segment);
+                }
+                // segment entirely located inside the buffer : exclude it
+                else if (Math.min(di, dj) > lowerBound && Math.max(di, dj) < upperBound) {
+                    continue;
+                }
+                // segment with a end at the offset distance and the other
+                // located within the buffer : divide it
+                else {
+                    // One of the coordinates is closed to but not on the source
+                    // curve and the other is more or less closed to offset
+                    // distance
+                    divide(offsetSegments, jtsGeom, cc[j - 1], cc[j], di, dj, lowerBound, upperBound);
+                }
+            }
+        }
+        Collection<LineString> offsetCurves = new ArrayList<LineString>();
+        offsetCurves.addAll(merge(offsetSegments));
+
+        return JTSUtils.createGeometry(proj, factory.buildGeometry(offsetCurves));
+    }
+
+    /**
+     * Recursive function to split segments located on the single-side buffer
+     * boundary, but having a part of them inside the full buffer.
+     *
+     * @param offsetSegments
+     * @param sourceCurve
+     * @param c1
+     * @param c2
+     * @param d1
+     * @param d2
+     * @param lb
+     * @param ub
+     */
+    private static void divide(Collection<LineString> offsetSegments, com.vividsolutions.jts.geom.Geometry sourceCurve,
+            Coordinate c1, Coordinate c2, double d1, double d2, double lb, double ub) {
+        // I stop recursion for segment < 2*lb to exclude small segments
+        // perpendicular but very close to the boundary
+        if (c1.distance(c2) < 2*lb) return;
+
+        Coordinate c = new Coordinate((c1.x+c2.x)/2.0, (c1.y+c2.y)/2.0);
+        PointPairDistance ppd = new PointPairDistance();
+        DistanceToPoint.computeDistance(sourceCurve, c, ppd);
+        double d = ppd.getDistance();
+        if (Math.max(d1, d) < lb) {}
+        else if (Math.min(d1, d) > lb && Math.max(d1, d) < ub) {}
+        else if (Math.min(d1, d) > ub) {
+            LineString segment = sourceCurve.getFactory().createLineString(
+                        new Coordinate[]{c1, c});
+            offsetSegments.add(segment);
+        }
+        else {
+            divide(offsetSegments, sourceCurve, c1, c, d1, d, lb, ub);
+        }
+        if (Math.max(d, d2) < lb) {}
+        else if (Math.min(d, d2) > lb && Math.max(d, d2) < ub) {}
+        else if (Math.min(d, d2) > ub) {
+            LineString segment = sourceCurve.getFactory().createLineString(
+                        new Coordinate[]{c, c2});
+            offsetSegments.add(segment);
+        }
+        else {
+            divide(offsetSegments, sourceCurve, c, c2, d, d2, lb, ub);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private static Collection<LineString> merge(Collection<LineString> linestrings) {
+        LineMerger merger = new LineMerger();
+        merger.add(linestrings);
+        return merger.getMergedLineStrings();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/GMLUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/GMLUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/GMLUtils.java	(revision 46118)
@@ -0,0 +1,55 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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.fmap.geom.jts.util;
+
+import com.vividsolutions.jts.io.gml2.GMLReader;
+import com.vividsolutions.jts.io.gml2.GMLWriter;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class GMLUtils {
+
+    public static Geometry GML2Geometry(String gml) {
+        GMLReader reader = new GMLReader();
+        com.vividsolutions.jts.geom.Geometry jtsgeom;
+        try {
+            jtsgeom = reader.read(gml, null);
+        } catch (Exception ex) {
+            return null;
+        }
+        return JTSUtils.createGeometry(null, jtsgeom);
+    }
+
+    public static String geometry2GML(Geometry geom) {
+        com.vividsolutions.jts.geom.Geometry jtsgeom = ((GeometryJTS) geom).getJTS();
+        
+        GMLWriter writer = new GMLWriter();
+        String gml = writer.write(jtsgeom);
+        return gml;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/JTSUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/JTSUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/JTSUtils.java	(revision 46118)
@@ -0,0 +1,717 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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.fmap.geom.jts.util;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.LineSegment;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Triangle;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
+import com.vividsolutions.jts.util.GeometricShapeFactory;
+import java.util.ArrayList;
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import static org.gvsig.fmap.geom.Geometry.JOIN_STYLE_BEVEL;
+import static org.gvsig.fmap.geom.Geometry.JOIN_STYLE_MITRE;
+import static org.gvsig.fmap.geom.Geometry.JOIN_STYLE_ROUND;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.MCoordinate;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.complex.DefaultComplex;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2DM;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.hibernate.spatial.jts.mgeom.MCoordinateSequence;
+import org.hibernate.spatial.jts.mgeom.MGeometryFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class JTSUtils {
+
+    public static final Logger logger = LoggerFactory.getLogger(JTSUtils.class);
+
+    private static class MyMGeometryFactory extends org.hibernate.spatial.jts.mgeom.MGeometryFactory {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -8174926092714691479L;
+
+        public com.vividsolutions.jts.geom.Point createPoint(CoordinateSequence coordinates) {
+            if(!(coordinates instanceof MCoordinateSequence)){
+                if (coordinates != null) {
+                    coordinates = new MCoordinateSequence(coordinates);
+                }
+            }
+            return (com.vividsolutions.jts.geom.Point) new com.vividsolutions.jts.geom.Point(coordinates, this);
+        }
+
+        public LinearRing createLinearRing(CoordinateSequence coordinates) {
+            if(!(coordinates instanceof MCoordinateSequence)){
+                if (coordinates != null) {
+                    coordinates = new MCoordinateSequence(coordinates);
+                }
+            }
+            return super.createLinearRing(coordinates);
+        }
+
+        @Override
+        public LineString createLineString(CoordinateSequence coordinates) {
+            if(!(coordinates instanceof MCoordinateSequence)){
+                if (coordinates != null) {
+                    coordinates = new MCoordinateSequence(coordinates);
+                }
+            }
+            return super.createLineString(coordinates);
+        }
+
+        public MultiPoint createMultiPoint(CoordinateSequence coordinates) {
+            if(!(coordinates instanceof MCoordinateSequence)){
+                if (coordinates != null) {
+                    coordinates = new MCoordinateSequence(coordinates);
+                }
+            }
+            return super.createMultiPoint(coordinates);
+        }
+
+    }
+
+
+    private static final com.vividsolutions.jts.geom.GeometryFactory factory =
+        new com.vividsolutions.jts.geom.GeometryFactory();
+
+    private static final com.vividsolutions.jts.geom.GeometryFactory mfactory = new MyMGeometryFactory();
+
+    public static Point createPoint(GeometryType type, IProjection proj, Coordinate coordinate) throws CreateGeometryException {
+
+        Point p;
+        switch (type.getSubType()) {
+        case Geometry.SUBTYPES.GEOM2D:
+            p = new Point2D(proj, coordinate);
+            break;
+        case Geometry.SUBTYPES.GEOM2DM:
+            p = new Point2DM(proj, coordinate);
+            break;
+        case Geometry.SUBTYPES.GEOM3D:
+            p = new Point3D(proj, coordinate);
+            break;
+        case Geometry.SUBTYPES.GEOM3DM:
+            p = new Point3DM(proj, coordinate);
+            break;
+        default:
+            p = (Point) type.create();
+            for (int i = 0; i < p.getDimension(); i++) {
+                p.setCoordinateAt(i, coordinate.getOrdinate(i));
+            }
+            p.setProjection(proj);
+            break;
+        }
+        return p;
+    }
+
+    public static com.vividsolutions.jts.geom.GeometryFactory getFactory(CoordinateSequence coordinates){
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.factory;
+        if(coordinates.size()>0 && coordinates.getCoordinate(0) instanceof org.hibernate.spatial.jts.mgeom.MCoordinate){
+            factory = mfactory;
+        }
+        return factory;
+    }
+
+    public static com.vividsolutions.jts.geom.GeometryFactory getFactory(Coordinate coordinate) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.factory;
+        if(coordinate instanceof org.hibernate.spatial.jts.mgeom.MCoordinate){
+            factory = mfactory;
+        }
+        return factory;
+    }
+
+    public static com.vividsolutions.jts.geom.GeometryFactory getFactory(Coordinate[] coordinates) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.factory;
+        if(coordinates.length>0 && coordinates[0] instanceof org.hibernate.spatial.jts.mgeom.MCoordinate){
+                factory = mfactory;
+        }
+        return factory;
+    }
+
+    public static LineString createJTSLineString(CoordinateSequence coordinates) {
+        return getFactory(coordinates).createLineString(coordinates);
+    }
+
+    public static LinearRing createJTSLinearRing(CoordinateSequence coordinates) {
+        return getFactory(coordinates).createLinearRing(coordinates);
+    }
+
+    public static MultiPoint createJTSMultiPoint(CoordinateSequence coordinates) {
+        return getFactory(coordinates).createMultiPoint(coordinates);
+    }
+
+    public static Geometry createGeometry(IProjection proj, com.vividsolutions.jts.geom.Geometry jtsGeom) {
+        return createGeometry(proj, jtsGeom, null);
+    }
+    
+    public static Geometry createGeometry(IProjection proj, com.vividsolutions.jts.geom.Geometry jtsGeom, GeometryType typeWhenEmpty) {
+        if(jtsGeom.isEmpty()){
+            if(typeWhenEmpty == null){
+                 return null;
+            }
+            try {
+                return typeWhenEmpty.create();
+            } catch (CreateGeometryException ex) {
+                return null;
+            }
+        }
+        if (jtsGeom instanceof com.vividsolutions.jts.geom.Point) {
+            Coordinate coordinate = jtsGeom.getCoordinate();
+            if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                if (Double.isNaN(coordinate.z)) {
+                    return new Point2DM(proj, coordinate);
+                } else {
+                    return new Point3DM(proj, coordinate);
+                }
+            } else {
+                if (Double.isNaN(coordinate.z)) {
+                    return new Point2D(proj, coordinate);
+                } else {
+                    return new Point3D(proj, coordinate);
+                }
+            }
+        }
+
+        if (jtsGeom instanceof com.vividsolutions.jts.geom.LineString) {
+            Coordinate[] coordinates = jtsGeom.getCoordinates();
+            Coordinate coordinate = jtsGeom.getCoordinate();
+            com.vividsolutions.jts.geom.LineString lineString = (com.vividsolutions.jts.geom.LineString) jtsGeom;
+            if (!lineString.isEmpty()) {
+                Line line;
+                if (jtsGeom.getFactory() instanceof MGeometryFactory) {
+                    if (coordinate!=null && Double.isNaN(coordinate.z)) {
+                        line = new Line2DM(coordinates);
+                    } else {
+                        line = new Line3DM(coordinates);
+                    }
+                } else {
+                    if (coordinate!=null && Double.isNaN(coordinate.z)) {
+                        line = new Line2D(coordinates);
+                    } else {
+                        line = new Line3D(coordinates);
+                    }
+                }
+                line.setProjection(proj);
+                return line;
+            }
+        }
+
+        if (jtsGeom instanceof com.vividsolutions.jts.geom.Polygon && !jtsGeom.isEmpty()) {
+            Polygon polygon;
+            com.vividsolutions.jts.geom.Polygon polygonJTS = (com.vividsolutions.jts.geom.Polygon)jtsGeom;
+            Coordinate[] coordinates = polygonJTS.getExteriorRing().getCoordinates();
+            Coordinate coordinate = jtsGeom.getCoordinate();
+            if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                if (Double.isNaN(coordinate.z)) {
+                    polygon = new Polygon2DM(coordinates);
+                } else {
+                    polygon = new Polygon3DM(coordinates);
+                }
+            } else {
+                if (Double.isNaN(coordinate.z)) {
+                    polygon = new Polygon2D(coordinates);
+                } else {
+                    polygon = new Polygon3D(coordinates);
+                }
+            }
+            polygon.setProjection(proj);
+            for(int i = 0; i<polygonJTS.getNumInteriorRing(); i++){
+                LineString ringJTS = polygonJTS.getInteriorRingN(i);
+                coordinates = ringJTS.getCoordinates();
+                coordinate = ringJTS.getCoordinate();
+                Ring ring;
+                if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                    if (Double.isNaN(coordinate.z)) {
+                        ring = new Ring2DM(coordinates);
+                    } else {
+                        ring = new Ring3DM(coordinates);
+                    }
+                } else {
+                    if (Double.isNaN(coordinate.z)) {
+                        ring = new Ring2D(coordinates);
+                    } else {
+                        ring = new Ring3D(coordinates);
+                    }
+                }
+                ring.setProjection(proj);
+                polygon.addInteriorRing(ring);
+            }
+            return polygon;
+        }
+
+        if (jtsGeom instanceof com.vividsolutions.jts.geom.GeometryCollection) {
+            GeometryCollection collection = (com.vividsolutions.jts.geom.GeometryCollection)jtsGeom;
+            Coordinate coordinate = collection.getCoordinate();
+            MultiPrimitive multiprimitive = null;
+            if (jtsGeom instanceof MultiLineString) {
+                    if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                        if (Double.isNaN(coordinate.z)) {
+                            multiprimitive = new MultiLine2DM();
+                        } else {
+                            multiprimitive = new MultiLine3DM();
+                        }
+                    } else {
+                        if (Double.isNaN(coordinate.z)) {
+                            multiprimitive = new MultiLine2D();
+                        } else {
+                            multiprimitive = new MultiLine3D();
+                        }
+                    }
+            } else if (jtsGeom instanceof MultiPolygon) {
+                if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                    if (Double.isNaN(coordinate.z)) {
+                        multiprimitive = new MultiPolygon2DM();
+                    } else {
+                        multiprimitive = new MultiPolygon3DM();
+                    }
+                } else {
+                    if (Double.isNaN(coordinate.z)) {
+                        multiprimitive = new MultiPolygon2D();
+                    } else {
+                        multiprimitive = new MultiPolygon3D();
+                    }
+                }
+            } else if (jtsGeom instanceof MultiPoint) {
+                if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                    if (Double.isNaN(coordinate.z)) {
+                        multiprimitive = new MultiPoint2DM();
+                    } else {
+                        multiprimitive = new MultiPoint3DM();
+                    }
+                } else {
+                    if (Double.isNaN(coordinate.z)) {
+                        multiprimitive = new MultiPoint2D();
+                    } else {
+                        multiprimitive = new MultiPoint3D();
+                    }
+                }
+            }
+
+            if (multiprimitive != null) {
+                for (int i = 0; i < collection.getNumGeometries(); i++) {
+                    com.vividsolutions.jts.geom.Geometry geometry = collection.getGeometryN(i);
+                    multiprimitive.addPrimitive((Primitive) createGeometry(proj, geometry));
+                }
+                multiprimitive.setProjection(proj);
+                return multiprimitive;
+            } else {
+                int subtype;
+                if (jtsGeom.getFactory() instanceof MyMGeometryFactory) {
+                    if (Double.isNaN(coordinate.z)) {
+                        subtype = Geometry.SUBTYPES.GEOM2DM;
+                    } else {
+                        subtype = Geometry.SUBTYPES.GEOM3DM;
+                    }
+                } else {
+                    if (Double.isNaN(coordinate.z)) {
+                        subtype = Geometry.SUBTYPES.GEOM2D;
+                    } else {
+                        subtype = Geometry.SUBTYPES.GEOM3D;
+                    }
+                }
+                DefaultComplex complex = new DefaultComplex(subtype);
+                for (int i = 0; i < collection.getNumGeometries(); i++) {
+                    com.vividsolutions.jts.geom.Geometry geometry = collection.getGeometryN(i);
+                    complex.addPrimitive((Primitive) createGeometry(proj, geometry));
+                }
+                complex.setProjection(proj);
+                return complex;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 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
+     */
+    public static com.vividsolutions.jts.geom.Geometry convertTypes(com.vividsolutions.jts.geom.Geometry g,
+        int sourceType, int destinationType) {
+
+        com.vividsolutions.jts.geom.GeometryFactory factory = g.getFactory();
+
+        if ((sourceType == Geometry.TYPES.CURVE || sourceType == Geometry.TYPES.SPLINE
+            || sourceType == Geometry.TYPES.ARC || sourceType == Geometry.TYPES.ELLIPTICARC
+            || sourceType == Geometry.TYPES.CIRCUMFERENCE || sourceType == Geometry.TYPES.PERIELLIPSE)
+            && destinationType == Geometry.TYPES.MULTISURFACE) {
+            if (g instanceof MultiLineString) {
+                com.vividsolutions.jts.geom.Polygon[] poly = new com.vividsolutions.jts.geom.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 factory.createMultiPolygon(poly);
+            } else {
+                return convertLineStringToPolygon((LineString) g);
+            }
+        }
+
+        if ((sourceType == Geometry.TYPES.CIRCLE || sourceType == Geometry.TYPES.ELLIPSE
+            || sourceType == Geometry.TYPES.ELLIPTICARC || sourceType == Geometry.TYPES.FILLEDSPLINE)
+            && destinationType == Geometry.TYPES.MULTICURVE) {
+            if (g instanceof com.vividsolutions.jts.geom.Polygon) {
+                com.vividsolutions.jts.geom.Polygon poly = (com.vividsolutions.jts.geom.Polygon) g;
+                LineString lineString = factory.createLinearRing(poly.getCoordinates());
+                return factory.createMultiLineString(new LineString[] { lineString });
+            }
+        }
+        return g;
+    }
+
+    private static com.vividsolutions.jts.geom.Polygon convertLineStringToPolygon(LineString line) {
+        Coordinate[] coordinates = line.getCoordinates();
+        com.vividsolutions.jts.geom.GeometryFactory factory = line.getFactory();
+        LinearRing shell = factory.createLinearRing(coordinates);
+        com.vividsolutions.jts.geom.Polygon pol = factory.createPolygon(shell, null);
+        return pol;
+    }
+
+    public static MCoordinate createMCoordinate(double x, double y, double m) {
+        return MCoordinate.create2dWithMeasure(x, y, m);
+    }
+
+    public static MCoordinate createMCoordinate(double x, double y, double z, double m) {
+        return MCoordinate.create3dWithMeasure(x, y, z, m);
+    }
+
+    /**
+     * @param init
+     * @param middle
+     * @param end
+     * @return
+     */
+    public static Coordinate getCircumcentre(Point init, Point middle, Point end) {
+        Triangle triangle =
+            new Triangle(((PointJTS) init).getJTSCoordinate(),
+                ((PointJTS) middle).getJTSCoordinate(),
+                ((PointJTS) end).getJTSCoordinate());
+        return triangle.circumcentre();
+    }
+
+    public static LineString createJTSLineStringFromArcPoints(Point centre, double radius, double startAngle, double endAngle){
+        GeometricShapeFactory shapeFactory = new GeometricShapeFactory();
+        shapeFactory.setCentre(((PointJTS)centre).getJTSCoordinate());
+        shapeFactory.setSize(radius*2);
+        return shapeFactory.createArc(startAngle, endAngle);
+    }
+
+    public static MultiLineString createJTSMultiLineString(LineString[] lineStrings) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.factory;
+        if(lineStrings.length>0){
+            factory = lineStrings[0].getFactory();
+        }
+        return factory.createMultiLineString(lineStrings);
+    }
+
+    /**
+     * @param coordinates
+     * @param interiorRings
+     * @return
+     * @throws GeometryException
+     */
+    public static com.vividsolutions.jts.geom.Polygon createJTSPolygon(ArrayListCoordinateSequence coordinates,
+        List<Ring> interiorRings) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = getFactory(coordinates);
+
+        LinearRing shell = factory.createLinearRing(coordinates);
+        LinearRing[] holes = new LinearRing[interiorRings.size()];
+        for(int i=0; i<interiorRings.size(); i++){
+            Ring ring = interiorRings.get(i);
+            holes[i] = (LinearRing) ((GeometryJTS) ring).getJTS();
+        }
+        return factory.createPolygon(shell, holes);
+    }
+
+
+    /**
+     * @param coordinates
+     * @return
+     * @throws GeometryException
+     */
+    public static com.vividsolutions.jts.geom.Polygon createJTSPolygon(ArrayListCoordinateSequence coordinates) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = getFactory(coordinates);
+
+        LinearRing shell = factory.createLinearRing(coordinates);
+        return factory.createPolygon(shell);
+    }
+
+    public static com.vividsolutions.jts.geom.MultiPolygon createJTSMultiPolygon(com.vividsolutions.jts.geom.Polygon[] polygons){
+        com.vividsolutions.jts.geom.GeometryFactory factory = JTSUtils.factory;
+        if(polygons.length>0){
+            factory = polygons[0].getFactory();
+        }
+        return factory.createMultiPolygon(polygons);
+    }
+
+    /**
+     * Returns the intersection point between an ellipse and her minor axis.
+     *
+     * @param init
+     * @param middle
+     * @param end
+     * @return
+     */
+    public static Coordinate getPointAtYAxisInEllipse(Point init, Point end, Double ydist) {
+
+        LineSegment segment = new LineSegment(((PointJTS) init).getJTSCoordinate(),
+            ((PointJTS) end).getJTSCoordinate());
+        Coordinate middle = segment.midPoint();
+
+        LineSegment midSegment = new LineSegment(middle, ((PointJTS) end).getJTSCoordinate());
+        double modulus = midSegment.getLength();
+
+        //Mayor semi-axis unitary vector
+        Coordinate uni = new Coordinate((end.getX()-middle.x)/modulus, (end.getY()-middle.y)/modulus);
+
+        //Minor axis unitary vector
+        Coordinate perpUni = new Coordinate(-uni.y,uni.x);
+
+        Coordinate point = new Coordinate(middle.x+(perpUni.x*ydist), middle.y+(perpUni.y*ydist));
+
+        return point;
+    }
+
+    /**
+     * Returns the middle point between two points.
+     *
+     * @param init
+     * @param middle
+     * @param end
+     * @return
+     */
+    public static Coordinate getMidPoint(Point init, Point end) {
+
+        LineSegment segment = new LineSegment(((PointJTS) init).getJTSCoordinate(),
+            ((PointJTS) end).getJTSCoordinate());
+        Coordinate middle = segment.midPoint();
+        return middle;
+    }
+
+    /**
+     * @param coordinate
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry createJTSPoint(Coordinate coordinate) {
+        return getFactory(coordinate).createPoint(coordinate);
+    }
+
+    /**
+     * @param coord
+     * @return
+     */
+    public static com.vividsolutions.jts.geom.Geometry createJTSPolygon(Coordinate[] coordinates) {
+        return getFactory(coordinates).createPolygon(coordinates);
+    }
+
+    public static BufferParameters getBufferParameters(){
+        BufferParameters bufParams = new BufferParameters();
+        bufParams.setSingleSided(true);
+        bufParams.setEndCapStyle(BufferParameters.CAP_FLAT);
+        bufParams.setJoinStyle(BufferParameters.CAP_ROUND);
+        return bufParams;
+    }
+    
+    public static BufferParameters getBufferParameters(int joinStyle, int endCapStyle){
+        BufferParameters bufParams = new BufferParameters();
+        bufParams.setSingleSided(true);
+        bufParams.setEndCapStyle(endCapStyle);
+        bufParams.setJoinStyle(joinStyle);
+        bufParams.setQuadrantSegments(calculateQuadrantSegments(joinStyle));
+        return bufParams;
+    }
+    
+    public static int calculateQuadrantSegments(int joinStyle) throws IllegalArgumentException {
+        int quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
+        switch(joinStyle){
+            case JOIN_STYLE_ROUND:
+                quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
+                break;
+            case JOIN_STYLE_MITRE:
+                quadrantSegments = - (int) BufferParameters.DEFAULT_MITRE_LIMIT;
+                break;
+            case JOIN_STYLE_BEVEL:
+                quadrantSegments = 0;
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid jointStyle "+joinStyle);
+        }
+        return quadrantSegments;
+    }
+
+    /**
+     * Creates a offset from a closed line at a distance
+     *
+     * @param proj
+     * @param coordinates
+     * @param distance
+     * @return
+     */
+    public static Geometry offsetClosedLine(IProjection proj, ArrayListCoordinateSequence coordinates, double distance) {
+        com.vividsolutions.jts.geom.Geometry jtsGeom = JTSUtils.createJTSPolygon(coordinates);
+        com.vividsolutions.jts.geom.Geometry geomJTS = jtsGeom.buffer(distance);
+        return jtsPolygonToJtsMultiLineString(geomJTS, proj);
+    }
+
+    /**
+     * Creates a offset from a closed line at a distance
+     *
+     * @param proj
+     * @param coordinates
+     * @param joinStyle
+     * @param distance
+     * @return
+     */
+    public static Geometry offsetClosedLine(IProjection proj, ArrayListCoordinateSequence coordinates, int joinStyle, double distance) {
+        com.vividsolutions.jts.geom.Geometry jtsGeom = JTSUtils.createJTSPolygon(coordinates);
+        com.vividsolutions.jts.geom.Geometry geomJTS = jtsGeom.buffer(distance, calculateQuadrantSegments(joinStyle), BufferParameters.CAP_FLAT);
+        return jtsPolygonToJtsMultiLineString(geomJTS, proj);
+    }
+
+    protected static Geometry jtsPolygonToJtsMultiLineString(com.vividsolutions.jts.geom.Geometry geomJTS, IProjection proj) {
+        if (geomJTS instanceof com.vividsolutions.jts.geom.Polygon) {
+            com.vividsolutions.jts.geom.Polygon polygonJTS = (com.vividsolutions.jts.geom.Polygon) geomJTS;
+            LineString shell = polygonJTS.getExteriorRing();
+            int numHoles = polygonJTS.getNumInteriorRing();
+            if (numHoles > 0) {
+                LineString[] lineStrings = new LineString[numHoles + 1];
+                lineStrings[0] = shell;
+                for (int i = 0; i < numHoles; i++) {
+                    LineString hole = polygonJTS.getInteriorRingN(i);
+                    lineStrings[i + 1] = hole;
+                }
+                return JTSUtils.createGeometry(proj, JTSUtils.createJTSMultiLineString(lineStrings));
+            }
+            return JTSUtils.createGeometry(proj, shell);
+        } else if (geomJTS instanceof com.vividsolutions.jts.geom.MultiPolygon) {
+            MultiPolygon multiPolygonJTS = (com.vividsolutions.jts.geom.MultiPolygon) geomJTS;
+            List<LineString> lineStringList = new ArrayList<>();
+            for (int i = 0; i < multiPolygonJTS.getNumGeometries(); i++) {
+                com.vividsolutions.jts.geom.Polygon polygonJTS =
+                        (com.vividsolutions.jts.geom.Polygon) multiPolygonJTS.getGeometryN(i);
+                lineStringList.add(polygonJTS.getExteriorRing());
+                int numHoles = polygonJTS.getNumInteriorRing();
+                if (numHoles > 0) {
+                    for (int h = 0; h < numHoles; h++) {
+                        LineString hole = polygonJTS.getInteriorRingN(i);
+                        lineStringList.add(hole);
+                    }
+                }
+            }
+            return JTSUtils.createGeometry(proj, JTSUtils.createJTSMultiLineString(lineStringList.toArray(new LineString[lineStringList.size()])));
+        }
+        //No deber�a pasar por aqu�
+        logger.warn("offsetClosedLine does not return or Polygon JTS or MultiPolygon JTS");
+        return null;
+    }
+
+    /**
+     * Creates a raw offset of a open line at a distance.
+     *
+     * @param coordinates
+     * @param distance
+     * @return
+     */
+    public static Geometry offsetRawOpenLine(IProjection proj, ArrayListCoordinateSequence coordinates, double distance) {
+        com.vividsolutions.jts.geom.GeometryFactory factory = getFactory(coordinates);
+
+        BufferParameters bufParams = JTSUtils.getBufferParameters();
+        LineString jtsGeom = JTSUtils.createJTSLineString(coordinates);
+
+         OffsetCurveBuilder ocb = new
+         OffsetCurveBuilder(factory.getPrecisionModel(), bufParams);
+         Coordinate[] coords = ocb.getOffsetCurve(jtsGeom.getCoordinates(), distance);
+         CoordinateSequence coordSequence = factory.getCoordinateSequenceFactory().create(coords);
+         com.vividsolutions.jts.geom.Geometry offsetGeom = JTSUtils.createJTSLineString(coordSequence);
+
+         return JTSUtils.createGeometry(proj, offsetGeom);
+    }
+
+    /*
+     *
+     */
+    public static double straightLineThroughTwoPointsEquation(double x1, double x2, double y1, double y2, double x) {
+        if (x2 - x1 == 0.0) {
+            return Double.POSITIVE_INFINITY;
+        }
+        return ((y2 - y1) * (x - x1) / (x2 - x1)) + y1;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/UtilFunctions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/UtilFunctions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/UtilFunctions.java	(revision 46118)
@@ -0,0 +1,668 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.util;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+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.primitive.Curve;
+
+/**
+ * @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;
+    }
+
+	static public Arc2D createCircle(Point2D center, double radius){
+        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, 0.0, 360.0, Arc2D.OPEN);
+        return resul;
+	}
+
+	static public Shape createEllipse(Point2D init, Point2D end, double ydist){
+	    double h = ydist*2;
+	    double w = init.distance(end);
+	    double x = init.getX();
+	    double y = init.getY();
+
+	    Ellipse2D.Double result = new Ellipse2D.Double(x, y-(h/2), w, h);
+	    return AffineTransform.getRotateInstance(getAngle(init,end), x, y).createTransformedShape(result);
+	}
+
+    /**
+	 * 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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/UtilFunctions.java
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ReadOnlyCoordinates.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ReadOnlyCoordinates.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ReadOnlyCoordinates.java	(revision 46118)
@@ -0,0 +1,163 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ReadOnlyCoordinates implements Collection<Coordinate> {
+
+    Coordinate coordinates[];
+
+    /**
+     *
+     */
+    public ReadOnlyCoordinates(Coordinate coordinates[]) {
+        this.coordinates = coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#size()
+     */
+    public int size() {
+        return this.coordinates.length;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#isEmpty()
+     */
+    public boolean isEmpty() {
+        return this.coordinates.length==0;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#contains(java.lang.Object)
+     */
+    public boolean contains(Object o) {
+        for (int i = 0; i < coordinates.length; i++) {
+            if(coordinates[i].equals(o)){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#iterator()
+     */
+    public Iterator<Coordinate> iterator() {
+        return new Iterator<Coordinate>() {
+
+            int i=0;
+
+            public boolean hasNext() {
+                return i<coordinates.length;
+            }
+
+            public Coordinate next() {
+                return coordinates[i++];
+            }
+
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#toArray()
+     */
+    public Object[] toArray() {
+        return this.coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#toArray(java.lang.Object[])
+     */
+    public <T> T[] toArray(T[] a) {
+        return (T[]) this.coordinates;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#add(java.lang.Object)
+     */
+    public boolean add(Coordinate e) {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#remove(java.lang.Object)
+     */
+    public boolean remove(Object o) {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#containsAll(java.util.Collection)
+     */
+    public boolean containsAll(Collection<?> c) {
+        for (Iterator iterator = c.iterator(); iterator.hasNext();) {
+            Object object = (Object) iterator.next();
+            if(contains(object)){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#addAll(java.util.Collection)
+     */
+    public boolean addAll(Collection<? extends Coordinate> c) {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#removeAll(java.util.Collection)
+     */
+    public boolean removeAll(Collection<?> c) {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#retainAll(java.util.Collection)
+     */
+    public boolean retainAll(Collection<?> c) {
+        throw new UnsupportedOperationException();
+    }
+
+    /* (non-Javadoc)
+     * @see java.util.Collection#clear()
+     */
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ArrayListCoordinateSequence.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ArrayListCoordinateSequence.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/ArrayListCoordinateSequence.java	(revision 46118)
@@ -0,0 +1,181 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+import com.vividsolutions.jts.geom.Envelope;
+
+import org.gvsig.fmap.geom.jts.MCoordinate;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ArrayListCoordinateSequence extends ArrayList<com.vividsolutions.jts.geom.Coordinate> implements com.vividsolutions.jts.geom.CoordinateSequence {
+
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -6406449425908120065L;
+
+    /**
+     *
+     */
+    public ArrayListCoordinateSequence(Collection<com.vividsolutions.jts.geom.Coordinate> coordinates) {
+        super(coordinates);
+    }
+
+    /**
+    *
+    */
+   public ArrayListCoordinateSequence() {
+       super();
+   }
+
+   public ArrayListCoordinateSequence(int initialCapacity) {
+       super(initialCapacity);
+   }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getDimension()
+     */
+    public int getDimension() {
+
+        // FIXME: �Esto es correcto?????
+
+        com.vividsolutions.jts.geom.Coordinate c = get(0);
+        if(c instanceof MCoordinate){
+            if(Double.isNaN(c.z)){
+                return 3;
+            } else {
+                return 4;
+            }
+        } else {
+            if(Double.isNaN(c.z)){
+                return 2;
+            } else {
+                return 3;
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getCoordinate(int)
+     */
+    public com.vividsolutions.jts.geom.Coordinate getCoordinate(int i) {
+        return (com.vividsolutions.jts.geom.Coordinate) get(i);
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getCoordinateCopy(int)
+     */
+    public com.vividsolutions.jts.geom.Coordinate getCoordinateCopy(int i) {
+        return (com.vividsolutions.jts.geom.Coordinate) ((com.vividsolutions.jts.geom.Coordinate)get(i)).clone();
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getCoordinate(int, com.vividsolutions.jts.geom.Coordinate)
+     */
+    public void getCoordinate(int index, com.vividsolutions.jts.geom.Coordinate coord) {
+        com.vividsolutions.jts.geom.Coordinate c = ((com.vividsolutions.jts.geom.Coordinate) get(index));
+        coord.x = c.x;
+        coord.y = c.y;
+        coord.z = c.z;
+        if(coord instanceof MCoordinate)  {
+            if (c instanceof MCoordinate){
+                ((MCoordinate)coord).m = ((MCoordinate)c).m;
+            } else {
+                ((MCoordinate)coord).m = Double.NaN;
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getX(int)
+     */
+    public double getX(int index) {
+        return ((com.vividsolutions.jts.geom.Coordinate) get(index)).x;
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getY(int)
+     */
+    public double getY(int index) {
+        return ((com.vividsolutions.jts.geom.Coordinate) get(index)).y;
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#getOrdinate(int, int)
+     */
+    public double getOrdinate(int index, int ordinateIndex) {
+       com.vividsolutions.jts.geom.Coordinate c = ((com.vividsolutions.jts.geom.Coordinate) get(index));
+       switch (ordinateIndex) {
+          case CoordinateSequence.X:  return c.x;
+          case CoordinateSequence.Y:  return c.y;
+          case CoordinateSequence.Z:  return c.z;
+          case CoordinateSequence.M:
+              if(c instanceof MCoordinate)  {
+                  return ((MCoordinate)c).m;
+              }
+        }
+        return Double.NaN;
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#setOrdinate(int, int, double)
+     */
+    public void setOrdinate(int index, int ordinateIndex, double value) {
+        ((com.vividsolutions.jts.geom.Coordinate) get(index)).setOrdinate(ordinateIndex, value);
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#toCoordinateArray()
+     */
+    public com.vividsolutions.jts.geom.Coordinate[] toCoordinateArray() {
+        return ((com.vividsolutions.jts.geom.Coordinate[])(this.toArray(new Coordinate[this.size()])));
+    }
+
+    /* (non-Javadoc)
+     * @see com.vividsolutions.jts.geom.CoordinateSequence#expandEnvelope(com.vividsolutions.jts.geom.Envelope)
+     */
+    public Envelope expandEnvelope(Envelope env) {
+        for (int i = 0; i < this.size(); i++) {
+            env.expandToInclude((com.vividsolutions.jts.geom.Coordinate) get(i));
+        }
+        return env;
+    }
+
+    @Override
+    public Object clone() {
+        ArrayListCoordinateSequence cloned = new ArrayListCoordinateSequence();
+        for(com.vividsolutions.jts.geom.Coordinate item: this) {
+            cloned.add((com.vividsolutions.jts.geom.Coordinate)item.clone());
+        }
+        return cloned;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryType.java	(revision 46118)
@@ -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.geom.jts;
+
+import java.lang.reflect.Constructor;
+import java.util.Objects;
+
+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 gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+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 constructorWithGeometryType = null;
+    private Constructor constructorWithoutParameters = null;
+    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 type The geometry abstract type
+     * @param subType
+     * @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 {
+            constructorWithGeometryType = geometryClass.getConstructor(parameterTypes);
+        } catch (NoSuchMethodException e) {
+            try {
+                constructorWithoutParameters = geometryClass.getConstructor();
+            } catch (NoSuchMethodException e1) {
+                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 type The geometry abstract type
+     * @param subType
+     */
+    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
+     */
+    @Override
+    public Geometry create() throws CreateGeometryException {
+        try {
+            if (constructorWithGeometryType != null) {
+                return (Geometry) constructorWithGeometryType.newInstance(parameters);
+            } else {
+                return (Geometry) constructorWithoutParameters.newInstance();
+            }
+        } catch (Exception e) {
+            throw new CreateGeometryException(type, subType, e);
+        }
+    }
+
+    @Override
+    public Class getGeometryClass() {
+        return geometryClass;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getFullName() {
+        String subtypename;
+        switch (this.subType) {
+            case Geometry.SUBTYPES.GEOM2D:
+                subtypename = "2D";
+                break;
+            case Geometry.SUBTYPES.GEOM2DM:
+                subtypename = "2DM";
+                break;
+            case Geometry.SUBTYPES.GEOM3D:
+                subtypename = "3D";
+                break;
+            case Geometry.SUBTYPES.GEOM3DM:
+                subtypename = "3DM";
+                break;
+            default:
+                subtypename = "subtype" + this.subType;
+        }
+        if (name.endsWith(subtypename)) {
+            try {
+                return name.substring(0, name.length() - subtypename.length()) + ":" + subtypename;
+            } catch (Throwable th) {
+                // 
+            }
+        }
+        return name + ":" + subtypename;
+    }
+
+    @Override
+    public int getType() {
+        return type;
+    }
+
+    @Override
+    public int getSubType() {
+        return subType;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public int getDimension() {
+        switch (this.subType) {
+            case Geometry.SUBTYPES.GEOM2D:
+                return 2;
+            case Geometry.SUBTYPES.GEOM3D:
+            case Geometry.SUBTYPES.GEOM2DM:
+                return 3;
+            case Geometry.SUBTYPES.GEOM3DM:
+                return 4;
+            default:
+                return -1;
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof GeometryType)) {
+            return false;
+        }
+        GeometryType other = (GeometryType) obj;
+        if (!this.name.equals(other.getName())) {
+            return false;
+        }
+        if (!this.geometryClass.getName().equals(other.getGeometryClass().getName())) {
+            return false;
+        }
+        if (this.type != other.getType()) {
+            return false;
+        }
+        if (this.subType != other.getSubType()) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 79 * hash + Objects.hashCode(this.name);
+        hash = 79 * hash + Objects.hashCode(this.geometryClass.getName());
+        hash = 79 * hash + this.type;
+        hash = 79 * hash + this.subType;
+        return hash;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultValidationStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultValidationStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultValidationStatus.java	(revision 46118)
@@ -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.jts;
+
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultValidationStatus implements Geometry.ValidationStatus {
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultValidationStatus.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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/MCoordinate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/MCoordinate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/MCoordinate.java	(revision 46118)
@@ -0,0 +1,72 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MCoordinate extends org.hibernate.spatial.jts.mgeom.MCoordinate {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -734914554153589737L;
+
+    /**
+     * @param x
+     * @param y
+     * @param z
+     * @param m
+     */
+    public MCoordinate(double x, double y, double z, double m) {
+        super(x, y, z, m);
+    }
+
+
+    /**
+     * Default constructor
+     */
+    public MCoordinate() {
+        super();
+    }
+
+    public static MCoordinate create2dWithMeasure(double x, double y, double m) {
+        return new MCoordinate(x, y, Double.NaN, m);
+    }
+
+    public static MCoordinate create2d(double x, double y) {
+        return new MCoordinate(x, y, Double.NaN, Double.NaN);
+    }
+
+    public static MCoordinate create3dWithMeasure(double x, double y, double z,
+                                                  double m) {
+        return new MCoordinate(x, y, z, m);
+    }
+
+    public static MCoordinate create3d(double x, double y, double z) {
+        return new MCoordinate(x, y, z, Double.NaN);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryPersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryPersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryPersistenceFactory.java	(revision 46118)
@@ -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.jts.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);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryTypePersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryTypePersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/persistence/GeometryTypePersistenceFactory.java	(revision 46118)
@@ -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.jts.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());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJSIRTree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJSIRTree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJSIRTree.java	(revision 46118)
@@ -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.jts.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 SpatialIndexJSIRTree 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 SpatialIndexJSIRTree(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();
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndexFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndexFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndexFactory.java	(revision 46118)
@@ -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.jts.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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJTSQuadtree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJTSQuadtree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexJTSQuadtree.java	(revision 46118)
@@ -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.geom.jts.spatialindex;
+
+import com.vividsolutions.jts.index.quadtree.Quadtree;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.SerializationUtils;
+
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.visitor.Visitor;
+
+public class SpatialIndexJTSQuadtree extends AbstractSpatialIndex implements SpatialIndex {
+
+    private com.vividsolutions.jts.index.quadtree.Quadtree index = null;
+    private boolean modified;
+
+    public SpatialIndexJTSQuadtree(GeometryManager geometryManager, SpatialIndexFactory factory, DynObject parameters) {
+        super(geometryManager, factory, parameters);
+        this.index = null;
+        this.modified = false;
+        open();
+    }
+    
+    @Override
+    public void open() {
+        this.index = new com.vividsolutions.jts.index.quadtree.Quadtree();
+        File f = (File) this.getParameter("file");
+        if( f!=null && f.exists() ) {
+            try {
+                this.load(f);
+            } catch (FileNotFoundException ex) {
+                throw new RuntimeException("Can't load spatial index from '"+f.getAbsolutePath()+"'.");
+            }
+        }
+    }
+
+    @Override
+    public void close() {
+        File f = (File) this.getParameter("file");
+        if( f!=null && modified ) {
+            try {
+                this.save(f);
+            } catch (FileNotFoundException ex) {
+                throw new RuntimeException("Can't save spatial index to '"+f.getAbsolutePath()+"'.");
+            }
+        }
+        this.index = null;
+    }
+
+    private void load(File fname) throws FileNotFoundException {
+        FileInputStream is = new FileInputStream(fname);
+        Object x = SerializationUtils.deserialize(is);
+        this.index = (Quadtree) x;
+        this.modified = false;
+    }
+    
+    private void save(File fname) throws FileNotFoundException {
+        FileOutputStream os = new FileOutputStream(fname);
+        SerializationUtils.serialize(this.index, os);
+        this.modified = false;
+    }
+    
+    private com.vividsolutions.jts.geom.Geometry asJTS(org.gvsig.fmap.geom.Geometry geom) {
+        return ((GeometryJTS)geom).getJTS();
+    }
+
+    @Override
+    public long size() {
+        return this.index.size();
+    }
+
+    @Override
+    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);
+
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public Iterator queryNearest(org.gvsig.fmap.geom.primitive.Envelope envelope, long limit) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Iterator queryAll() {
+        List result = this.index.queryAll();
+        return result.iterator();
+    }
+
+    @Override
+    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);
+        this.modified = true;
+    }
+
+    @Override
+    public boolean remove(org.gvsig.fmap.geom.primitive.Envelope envelope, Object data) {
+        com.vividsolutions.jts.geom.Envelope env_jts = asJTS(envelope.getGeometry()).getEnvelopeInternal();
+        this.modified = true;
+        return index.remove(env_jts, data);
+    }
+
+    @Override
+    public void removeAll() {
+        index = new com.vividsolutions.jts.index.quadtree.Quadtree();
+        this.modified = true;
+    }
+
+    private class JTSVisitorWrapper implements com.vividsolutions.jts.index.ItemVisitor {
+
+        private Visitor visitor = null;
+
+        public JTSVisitorWrapper(Visitor visitor) {
+            this.visitor = visitor;
+        }
+
+        @Override
+        public void visitItem(Object arg0) {
+            try {
+                this.visitor.visit(arg0);
+            } catch (Exception e) {
+                throw new RuntimeException();
+            }
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJSIRTree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJSIRTree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJSIRTree.java	(revision 46118)
@@ -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.jts.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 SpatialIndexFactoryJSIRTree extends AbstractSpatialIndexFactory implements SpatialIndexFactory {
+
+    public static final String NAME = GeometryManager.SPATIALINDEX_DEFAULT_RTREE;
+    
+    //
+    // https://github.com/aled/jsi/issues/31
+    // RTree only supports 2 dimensions 
+    //
+    
+    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 SpatialIndexJSIRTree((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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/AbstractSpatialIndex.java	(revision 46118)
@@ -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.geom.jts.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.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) {
+        if( this.parameters == null ) {
+            return null;
+        }
+        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
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJTSQuadtree.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJTSQuadtree.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/spatialindex/SpatialIndexFactoryJTSQuadtree.java	(revision 46118)
@@ -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.geom.jts.spatialindex;
+
+import java.io.File;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.impl.DefaultDynObject;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.service.spi.ServiceManager;
+import org.gvsig.tools.util.HasAFile;
+
+
+public class SpatialIndexFactoryJTSQuadtree extends AbstractSpatialIndexFactory implements SpatialIndexFactory  {
+
+    public static final String NAME = GeometryManager.SPATIALINDEX_DEFAULT_QUADTREE;
+
+    public static class SpatialIndexJTSParameters extends DefaultDynObject implements HasAFile {
+
+        public SpatialIndexJTSParameters(DynStruct dynClass) {
+            super(dynClass);
+        }
+
+        @Override
+        public File getFile() {
+            return (File) this.getDynValue("file");
+        }
+
+        @Override
+        public void setFile(File file) {
+            this.setDynValue("file", file);
+        }
+    }
+    
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public int getDataTypeSupported() {
+        return DataTypes.OBJECT;
+    }
+
+    @Override
+    public Service create(DynObject parameters, ServiceManager serviceManager) throws ServiceException {
+        return new SpatialIndexJTSQuadtree((GeometryManager) serviceManager, this, parameters);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new SpatialIndexJTSParameters(parametersDefinition);
+    }
+
+    @Override
+    public void initialize() {
+        super.initialize(); 
+        if( this.parametersDefinition == null ) {
+            this.parametersDefinition = this.getBaseParametersDefinition();
+            this.parametersDefinition.addDynFieldFile("file").setMandatory(false);
+        }
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiCurve.java	(revision 46118)
@@ -0,0 +1,235 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import com.vividsolutions.jts.geom.LineString;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+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.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultMultiCurve extends AbstractMultiCurve {
+
+    /**
+     * @param geometryType
+     */
+    public DefaultMultiCurve(GeometryType geometryType) {
+        super(geometryType.getSubType());
+    }
+
+    /**
+     * @param subtype
+     */
+    public DefaultMultiCurve(int subtype) {
+        super(subtype);
+    }
+
+    @Override
+    public Geometry cloneGeometry() {
+        DefaultMultiCurve clone = new DefaultMultiCurve(getGeometryType());
+        for(int i=0; i<primitives.size(); i++){
+            clone.addPrimitive((Primitive)primitives.get(i).cloneGeometry());
+        }
+        return clone;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        DefaultMultiCurve other = new DefaultMultiCurve(getGeometryType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+
+    @Override
+    public int getDimension() {
+        switch (getGeometryType().getSubType()) {
+        case Geometry.SUBTYPES.GEOM2D:
+            return 2;
+        case Geometry.SUBTYPES.GEOM2DM:
+            return 3;
+        case Geometry.SUBTYPES.GEOM3D:
+            return 3;
+        case Geometry.SUBTYPES.GEOM3DM:
+            return 4;
+        default:
+            return 0;
+        }
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multipoint = null;
+        for (int i = 0; i < this.getPrimitivesNumber(); i++) {
+            if(multipoint==null){
+                multipoint = this.getPrimitiveAt(i).toPoints();
+            } else {
+                MultiPoint points = (MultiPoint)this.getPrimitiveAt(i).toPoints();
+                for (int j = 0; j < points.getPrimitivesNumber(); j++) {
+                    multipoint.addPrimitive(points.getPrimitiveAt(j));
+                }
+            }
+        }
+        return multipoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiline = null;
+        for (int i = 0; i < this.getPrimitivesNumber(); i++) {
+            if(multiline==null){
+                multiline = this.getPrimitiveAt(i).toLines();
+            } else {
+                MultiLine lines = (MultiLine)this.getPrimitiveAt(i).toLines();
+                for (int j = 0; j < lines.getPrimitivesNumber(); j++) {
+                    multiline.addPrimitive(lines.getPrimitiveAt(j));
+                }
+            }
+        }
+        return multiline;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multipolygon = null;
+        for (int i = 0; i < this.getPrimitivesNumber(); i++) {
+            if(multipolygon==null){
+                multipolygon = this.getPrimitiveAt(i).toPolygons();
+            } else {
+                MultiPolygon polygons = (MultiPolygon)this.getPrimitiveAt(i).toPolygons();
+                for (int j = 0; j < polygons.getPrimitivesNumber(); j++) {
+                    multipolygon.addPrimitive(polygons.getPrimitiveAt(j));
+                }
+            }
+        }
+        return multipolygon;
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        for (int i = 0; i < this.getPrimitivesNumber(); i++) {
+            this.getPrimitiveAt(i).flip();
+        }
+        Collections.reverse(primitives);
+    }
+
+
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        int primitiveSubType = primitive.getGeometryType().getSubType();
+        int subType = getGeometryType().getSubType();
+        if(primitiveSubType == subType){
+            return primitive;
+        }
+
+        String message = StringUtils.replace("This MultiCurve only accept subtype %(subtype)s primitives", "%(subtype)s", String.valueOf(subType));
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        List<LineString> lineStrings = new ArrayList<>(primitives.size());
+
+        LineString line;
+        for (Primitive primitive : primitives) {
+            if (primitive instanceof Line) {
+                line = (LineString) ((GeometryJTS) primitive).getJTS();
+                lineStrings.add(line);
+            } else {
+                MultiLine multiline;
+                try {
+                    multiline = primitive.toLines();
+                    for (int j = 0; j < multiline.getPrimitivesNumber(); j++) {
+                        line =
+                                (LineString) ((GeometryJTS) multiline.getPrimitiveAt(j)).getJTS();
+                        lineStrings.add(line);
+                    }
+                } catch (GeometryException e) {
+                    GeometryType geomType = primitive.getGeometryType();
+                    LOGGER.warn(StringUtils.replaceEach(
+                            "Can't convert primitive type=%(type)s, %(subtype)s to MultiLine",
+                            new String[] {"%(type)s", "%(subtype)s" },
+                            new String[] { String.valueOf(geomType.getType()), String.valueOf(geomType.getSubType()) }));
+                }
+            }
+        }
+        return JTSUtils.createJTSMultiLineString(lineStrings.toArray(new LineString[lineStrings.size()]));
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiCurve result = new DefaultMultiCurve(getGeometryType());
+        for (Primitive primitive : primitives) {
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiPrimitive){
+                MultiPrimitive multiOffset = (MultiPrimitive)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                result.addPrimitive((Primitive)primitive.offset(distance));
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiCurve result = new DefaultMultiCurve(getGeometryType());
+        for (Primitive primitive : primitives) {
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiPrimitive){
+                MultiPrimitive multiOffset = (MultiPrimitive)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                result.addPrimitive((Primitive)primitive.offset(joinStyle, distance));
+            }
+        }
+        return result;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2DM.java	(revision 46118)
@@ -0,0 +1,154 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPolygon2DM extends AbstractMultiPolygon {
+
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 2724107572872777191L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPolygon2DM() {
+        super(Geometry.SUBTYPES.GEOM2DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon2DM polygon = (Polygon2DM) iterator.next();
+            MultiPoint points = polygon.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon2D polygon = (Polygon2D) iterator.next();
+            MultiLine lines = polygon.toLines();
+            multiLine.ensureCapacity(multiLine.getPrimitivesNumber()+lines.getPrimitivesNumber());
+            for(int i=0; i<lines.getPrimitivesNumber(); i++){
+                multiLine.addPrimitive((Line2D)lines.getPrimitiveAt(i));
+            }
+        }
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPolygon2DM clone = new MultiPolygon2DM();
+        return clonePrimitives(clone);
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Polygon2DM){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2DM){
+            MultiPolygon polygons;
+            try {
+                polygons = primitive.toPolygons();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to polygons";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+            return polygons;
+        }
+
+        String message = "Only 2DM primitives can be fixed to MultiPolygon2DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+    
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2DM.java	(revision 46118)
@@ -0,0 +1,202 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Iterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiLine2DM extends AbstractMultiLine {
+
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 7970383739561430594L;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public MultiLine2DM() {
+        super(Geometry.SUBTYPES.GEOM2DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line2DM line = (Line2DM) iterator.next();
+            MultiPoint points = line.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line2DM line = (Line2DM) iterator.next();
+            MultiPolygon polygons = line.toPolygons();
+            multiPolygon.ensureCapacity(multiPolygon.getPrimitivesNumber()+polygons.getPrimitivesNumber());
+            for(int i=0; i<polygons.getPrimitivesNumber(); i++){
+                multiPolygon.addSurface((Polygon)polygons.getPrimitiveAt(i));
+            }
+        }
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiLine2DM clone = new MultiLine2DM();
+        return clonePrimitives(clone);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiLine#fixLine(org.gvsig.fmap.geom.primitive.Line)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Line2DM){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2DM){
+            try {
+                return primitive.toLines();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 2D primitives can be fixed to MultiLine2DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine2DM result = new MultiLine2DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine2DM result = new MultiLine2DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(joinStyle, distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3DM.java	(revision 46118)
@@ -0,0 +1,169 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPolygon3DM extends AbstractMultiPolygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2391997357144095125L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPolygon3DM() {
+        super(Geometry.SUBTYPES.GEOM3DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon3DM polygon = (Polygon3DM) iterator.next();
+            MultiPoint points = polygon.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon3DM polygon = (Polygon3DM) iterator.next();
+            MultiLine lines = polygon.toLines();
+            multiLine.ensureCapacity(multiLine.getPrimitivesNumber()+lines.getPrimitivesNumber());
+            for(int i=0; i<lines.getPrimitivesNumber(); i++){
+                multiLine.addPrimitive((Line3DM)lines.getPrimitiveAt(i));
+            }
+        }
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPolygon3DM clone = new MultiPolygon3DM();
+        return clonePrimitives(clone);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 4;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Polygon3DM){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM){
+            MultiPolygon polygons;
+            try {
+                polygons = primitive.toPolygons();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to polygons";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+            return polygons;
+        }
+
+        String message = "Only 3DM primitives can be fixed to MultiPolygon3DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+    
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3DM.java	(revision 46118)
@@ -0,0 +1,204 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Iterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiLine3DM extends AbstractMultiLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6657425096939727574L;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public MultiLine3DM() {
+        super(Geometry.SUBTYPES.GEOM3DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line3DM line = (Line3DM) iterator.next();
+            MultiPoint points = line.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line3DM line = (Line3DM) iterator.next();
+            MultiPolygon polygons = line.toPolygons();
+            multiPolygon.ensureCapacity(multiPolygon.getPrimitivesNumber()+polygons.getPrimitivesNumber());
+            for(int i=0; i<polygons.getPrimitivesNumber(); i++){
+                multiPolygon.addSurface((Polygon)polygons.getPrimitiveAt(i));
+            }
+        }
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiLine3DM clone = new MultiLine3DM();
+        return clonePrimitives(clone);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 4;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return true;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiLine#fixLine(org.gvsig.fmap.geom.primitive.Line)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Line3DM){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM){
+            try {
+                return primitive.toLines();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 3DM primitives can be fixed to MultiLine3DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine3DM result = new MultiLine3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+    
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine3DM result = new MultiLine3DM();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(joinStyle, distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPrimitive.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPrimitive.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPrimitive.java	(revision 46118)
@@ -0,0 +1,163 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.complex.Complex;
+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.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiPrimitive extends AbstractAggregate implements MultiPrimitive {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5993428771359742467L;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public AbstractMultiPrimitive(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    public void addPrimitive(Primitive primitive) {
+        Geometry geom = fixPrimitive(primitive);
+        if (geom != null) {
+            if (geom instanceof MultiPrimitive) {
+                for (int i = 0; i < ((MultiPrimitive) geom).getPrimitivesNumber(); i++) {
+                    addPrimitive(((MultiPrimitive) geom).getPrimitiveAt(i));
+                }
+            } else {
+                primitives.add((Primitive) geom);
+            }
+        }
+    }
+
+    @Override
+    public void addPrimitives(Aggregate aggregate) {
+        for (Geometry primitive : aggregate) {
+            this.addPrimitive((Primitive) primitive);
+        }
+    }
+
+    public void addPrimitives(Complex complex) {
+        for (Geometry primitive : complex) {
+            if(GeometryUtils.isSubtype(this.getType(), primitive.getType())){
+                this.addPrimitive((Primitive) primitive);
+            }
+        }
+    }
+
+    @Override
+    public void addPrimitives(Geometry geometry) {
+        if(geometry instanceof Primitive){
+            addPrimitive((Primitive) geometry);
+        } else if(geometry instanceof Complex){
+            addPrimitives((Complex) geometry);
+        } else {
+            addPrimitives((Aggregate)geometry);
+        }
+    }
+
+    /**
+     * @param primitive
+     * @return
+     */
+    protected abstract Geometry fixPrimitive(Primitive primitive);
+
+
+    protected Geometry clonePrimitives(AbstractMultiPrimitive clone) {
+        clone.ensureCapacity(primitives.size());
+        for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            clone.addPrimitive((Primitive)primitive.cloneGeometry());
+        }
+        return clone;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getHandlers(int)
+     */
+    public Handler[] getHandlers(int type) {
+        List<Handler> handlers = new ArrayList<Handler>();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Handler[] primitiveHandlers = primitive.getHandlers(type);
+            for (int i = 0; i < primitiveHandlers.length; i++) {
+                handlers.add(primitiveHandlers[i]);
+            }
+        }
+        return handlers.toArray(new Handler[handlers.size()]);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.Aggregate#union()
+     */
+    public Geometry union() throws GeometryOperationException, GeometryOperationNotSupportedException {
+        Geometry result = null;
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            if(result==null){
+                result = primitive;
+            } else {
+                result.union(primitive);
+            }
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.Aggregate#intersection()
+     */
+    public Geometry intersection() throws GeometryOperationException, GeometryOperationNotSupportedException {
+        Geometry result = null;
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            if(result==null){
+                result = primitive;
+            } else {
+                result.intersection(primitive);
+            }
+        }
+        return result;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2DM.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPoint2DM extends AbstractMultiPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2230359991187613190L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPoint2DM() {
+        super(Geometry.SUBTYPES.GEOM2DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPoint2DM clone = new MultiPoint2DM();
+        return clonePrimitives(clone);
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), false, 0);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2DM();
+        Line line = new Line2DM();
+        line.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point2DM point = (Point2DM) iterator.next();
+            line.addVertex(point);
+        }
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2DM();
+        Polygon polygon = new Polygon2DM();
+        polygon.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point2DM point = (Point2DM) iterator.next();
+            polygon.addVertex(point);
+        }
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+
+        if(primitive instanceof Point2DM){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2DM){
+            try {
+                return primitive.toPoints();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 2DM primitives can be fixed to MultiPoint2DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+
+    }
+
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2DM) {
+            return point;
+        } else {
+            return new Point2DM(point.getX(), point.getY(), 0);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/DefaultMultiSurface.java	(revision 46118)
@@ -0,0 +1,241 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+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.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultMultiSurface extends AbstractMultiSurface {
+
+    private static final long serialVersionUID = 9211543270911740110L;
+
+
+    public DefaultMultiSurface(GeometryType geometryType) {
+        super(geometryType.getSubType());
+    }
+
+    @Override
+    public Geometry cloneGeometry() {
+        DefaultMultiSurface clone = new DefaultMultiSurface(getGeometryType());
+        for(int i=0; i<primitives.size(); i++){
+            clone.addPrimitive((Primitive)primitives.get(i).cloneGeometry());
+        }
+        return clone;
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        DefaultMultiSurface other = new DefaultMultiSurface(getGeometryType());
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+
+    @Override
+    public void addSurface(Surface surface) {
+        GeometryType geometryType = surface.getGeometryType();
+        if(geometryType.getSubType() == getGeometryType().getSubType()){
+            primitives.add(surface);
+            return;
+        }
+        String msg = StringUtils.replaceEach(
+            "Only a surface subtype  %(subtypeSurface)s can be added to a MultiSurface subtype %(subtype)s",
+            new String[]{"%(subtypeSurface)s","%(subtype)s"},
+            new String[]{String.valueOf(geometryType.getSubType()), String.valueOf(getGeometryType().getSubType())}
+        );
+        LOGGER.warn(msg);
+        throw new UnsupportedOperationException(msg);
+
+    }
+
+
+    @Override
+    public int getDimension() {
+        switch (getGeometryType().getSubType()) {
+        case Geometry.SUBTYPES.GEOM2D:
+            return 2;
+        case Geometry.SUBTYPES.GEOM2DM:
+            return 3;
+        case Geometry.SUBTYPES.GEOM3D:
+            return 3;
+        case Geometry.SUBTYPES.GEOM3DM:
+            return 4;
+        default:
+            return 0;
+        }
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = GeometryLocator.getGeometryManager().createMultiPoint(getGeometryType().getSubType());
+        for (Primitive primitive : primitives) {
+            MultiPoint primitivePoints = primitive.toPoints();
+            for (int i=0; i<primitivePoints.getPrimitivesNumber(); i++) {
+                multiPoint.addPoint(primitivePoints.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = GeometryLocator.getGeometryManager().createMultiLine(getGeometryType().getSubType());
+        for (Primitive primitive : primitives) {
+            MultiLine primitiveLines = primitive.toLines();
+            for (int i=0; i<primitiveLines.getPrimitivesNumber(); i++) {
+                multiLine.addPrimitive((Primitive)primitiveLines.getPrimitiveAt(i).cloneGeometry());
+            }
+        }
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = GeometryLocator.getGeometryManager().createMultiPolygon(getGeometryType().getSubType());
+        for (Primitive primitive : primitives) {
+            MultiPolygon primitivePolygons = primitive.toPolygons();
+            for (int i=0; i<primitivePolygons.getPrimitivesNumber(); i++) {
+                multiPolygon.addPrimitive((Primitive)primitivePolygons.getPrimitiveAt(i).cloneGeometry());
+            }
+        }
+        return multiPolygon;
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            primitive.flip();
+        }
+        Collections.reverse(primitives);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        int primitiveSubType = primitive.getGeometryType().getSubType();
+        int subType = getGeometryType().getSubType();
+        if(primitiveSubType == subType){
+            return primitive;
+        }
+
+        String message = StringUtils.replace("This MultiSurface only accept subtype %(subtype)s primitives", "%(subtype)s", String.valueOf(subType));
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        List<com.vividsolutions.jts.geom.Polygon> polygons =new ArrayList<>(primitives.size());
+        com.vividsolutions.jts.geom.Polygon polygon;
+        for (Primitive primitive : primitives) {
+            if (primitive instanceof Polygon) {
+                polygon = (com.vividsolutions.jts.geom.Polygon) ((GeometryJTS) primitive).getJTS();
+                polygons.add(polygon);
+            } else {
+                MultiPolygon multipolygon;
+                try {
+                    multipolygon = primitive.toPolygons();
+                    for (int j = 0; j < multipolygon.getPrimitivesNumber(); j++) {
+                        polygon =
+                                (com.vividsolutions.jts.geom.Polygon) ((GeometryJTS) multipolygon.getPrimitiveAt(j)).getJTS();
+                        polygons.add(polygon);
+                    }
+                } catch (GeometryException e) {
+                    GeometryType geomType = primitive.getGeometryType();
+                    LOGGER.warn(StringUtils.replaceEach(
+                            "Can't convert primitive type=%(type)s, %(subtype)s to MultiPolygon",
+                            new String[] {"%(type)s", "%(subtype)s" },
+                            new String[] { String.valueOf(geomType.getType()), String.valueOf(geomType.getSubType()) }));
+                }
+            }
+        }
+        return JTSUtils
+            .createJTSMultiPolygon(polygons.toArray(new com.vividsolutions.jts.geom.Polygon[polygons.size()]));
+    }
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiSurface result = new DefaultMultiSurface(getGeometryType());
+        for (Primitive primitive : primitives) {
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiPrimitive){
+                MultiPrimitive multiOffset = (MultiPrimitive)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                result.addPrimitive((Primitive)primitive.offset(distance));
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiSurface result = new DefaultMultiSurface(getGeometryType());
+        for (Primitive primitive : primitives) {
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiPrimitive){
+                MultiPrimitive multiOffset = (MultiPrimitive)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                result.addPrimitive((Primitive)primitive.offset(joinStyle, distance));
+            }
+        }
+        return result;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3DM.java	(revision 46118)
@@ -0,0 +1,167 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPoint3DM extends AbstractMultiPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2230359991187613190L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPoint3DM() {
+        super(Geometry.SUBTYPES.GEOM3DM);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPoint3DM clone = new MultiPoint3DM();
+        return clonePrimitives(clone);
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 4;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), false, 0);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3DM();
+        Line line = new Line3DM();
+        line.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point3DM point = (Point3DM) iterator.next();
+            line.addVertex(point);
+        }
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3DM();
+        Polygon polygon = new Polygon3DM();
+        polygon.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point3DM point = (Point3DM) iterator.next();
+            polygon.addVertex(point);
+        }
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+
+        if(primitive instanceof Point3DM){
+            return primitive;
+        }
+
+        if(primitive instanceof Point){
+            Point point = (Point)primitive;
+            if(point instanceof Point3D){
+                return new Point3DM(point.getX(), point.getY(), ((Point3DM)point).getZ(), 0);
+            }
+            return new Point3DM(point.getX(), point.getY(), 0, 0);
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM){
+            try {
+                return primitive.toPoints();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to points";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 3DM primitives can be fixed to MultiPoint3DM";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+
+    }
+
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3DM) {
+            return point;
+        } else if (point instanceof Point3D) {
+            return new Point3DM(point.getX(), point.getY(), ((Point3D)point).getZ(), 0);
+        } else {
+            return new Point3DM(point.getX(), point.getY(), 0, 0);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractAggregate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractAggregate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractAggregate.java	(revision 46118)
@@ -0,0 +1,228 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.cresques.cts.ICoordTrans;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.Aggregate;
+import org.gvsig.fmap.geom.jts.AbstractGeometry;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractAggregate extends AbstractGeometry implements Aggregate {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2922828622616885472L;
+
+    ArrayList<Primitive> primitives;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public AbstractAggregate(int type, int subtype) {
+        super(type, subtype);
+        primitives = new ArrayList<Primitive>();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.Aggregate#getPrimitivesNumber()
+     */
+    public int getPrimitivesNumber() {
+        return primitives.size();
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.Aggregate#getPrimitiveAt(int)
+     */
+    public Primitive getPrimitiveAt(int i) {
+        return primitives.get(i);
+    }
+
+    private class AggregateIterator implements Iterator<Geometry> {
+
+        private int current = 0;
+
+        AggregateIterator() {
+        }
+
+        @Override
+        public boolean hasNext() {
+            if( current<getPrimitivesNumber() ) {
+                return true;
+            }
+            return false;
+        }
+
+        @Override
+        public Geometry next() {
+            return getPrimitiveAt(current++);
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+    }
+
+    @Override
+    public Iterator<Geometry> iterator() {
+        return new AggregateIterator();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPrimitive#ensureCapacity(int)
+     */
+    public void ensureCapacity(int capacity) {
+        primitives.ensureCapacity(capacity);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#reProject(org.cresques.cts.ICoordTrans)
+     */
+    public void reProject(ICoordTrans ct) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            primitive.reProject(ct);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public void transform(AffineTransform at) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            primitive.transform(at);
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (primitive.is3D()) {
+                return true;
+            };
+        }
+        return false;
+    }
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        return new DefaultGeneralPathX(getPathIterator(null),false,0);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.AbstractGeometry#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if(super.equals(obj) && obj instanceof AbstractAggregate){
+            AbstractAggregate other = (AbstractAggregate)obj;
+            if(other.getPrimitivesNumber() == this.getPrimitivesNumber()){
+                for (int j = 0; j < this.getPrimitivesNumber(); j++) {
+                    if(!this.getPrimitiveAt(j).equals(other.getPrimitiveAt(j))){
+                        return false;
+                    }
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#canBeTransformed(java.awt.geom.AffineTransform)
+     */
+    @Override
+    public boolean canBeTransformed(AffineTransform at) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (!primitive.canBeTransformed(at)) {
+                return false;
+            };
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#canBeReprojected(org.cresques.cts.ICoordTrans)
+     */
+    @Override
+    public boolean canBeReprojected(ICoordTrans ct) {
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            GeometryJTS primitive = (GeometryJTS) iterator.next();
+            if (!primitive.canBeReprojected(ct)) {
+                return false;
+            };
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.getPrimitivesNumber() < 1;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiCurve.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiCurve.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiCurve.java	(revision 46118)
@@ -0,0 +1,183 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiCurve extends AbstractMultiPrimitive implements MultiCurve {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5498201227873886542L;
+
+
+    /**
+     * @param multiline
+     * @param subtype
+     */
+    public AbstractMultiCurve(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    /**
+     * @param type
+     */
+    public AbstractMultiCurve(int subtype) {
+        super(Geometry.TYPES.MULTICURVE, subtype);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiCurve#getCurveAt(int)
+     */
+    public Curve getCurveAt(int index) {
+        return (Curve)primitives.get(index);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiCurve#addCurve(org.gvsig.fmap.geom.primitive.Curve)
+     */
+    public void addCurve(Curve curve) {
+        primitives.add((Primitive) fixPrimitive(curve));
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform)
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        MultiCurveIterator pi = new MultiCurveIterator(at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform, double)
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+    protected class MultiCurveIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+        private List<PathIterator>iterators = new ArrayList<PathIterator>(primitives.size());
+
+        /**
+         * Creates a new PointIterator object.
+         *
+         * @param p
+         *            The polygon
+         * @param at
+         *            The affine transform applied to coordinates during
+         *            iteration
+         */
+        public MultiCurveIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+                Primitive primitive = (Primitive) iterator.next();
+                iterators.add(primitive.getPathIterator(at));
+            }
+            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() {
+            PathIterator pathIteratorPrimitive = iterators.get(index);
+            pathIteratorPrimitive.next();
+            if(pathIteratorPrimitive.isDone()){
+                index++;
+                done = (index==primitives.size());
+            }
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        public int currentSegment(double[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        public int currentSegment(float[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPolygon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPolygon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPolygon.java	(revision 46118)
@@ -0,0 +1,216 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPolygon;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.primitive.Surface;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiPolygon extends AbstractMultiSurface implements MultiPolygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6663703214829442424L;
+
+    public AbstractMultiPolygon(int subtype) {
+        super(Geometry.TYPES.MULTIPOLYGON, subtype);
+    }
+
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        com.vividsolutions.jts.geom.Polygon[] polygons = new com.vividsolutions.jts.geom.Polygon[primitives.size()];
+        for (int i=0; i<primitives.size(); i++){
+            polygons[i] = (com.vividsolutions.jts.geom.Polygon) ((GeometryJTS)primitives.get(i)).getJTS();
+        }
+        return JTSUtils.createJTSMultiPolygon(polygons);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiPolygon2D other = new MultiPolygon2D();
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        MultiPolygonIterator pi = new MultiPolygonIterator(at);
+        return pi;
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+            ((GeometryJTS)iterator.next()).flip();
+        }
+        Collections.reverse(primitives);
+    }
+
+    @Override
+    public void addSurface(Surface surface) {
+        GeometryType geometryType = surface.getGeometryType();
+        if(geometryType.getType() == Geometry.TYPES.POLYGON && geometryType.getSubType() == getGeometryType().getSubType()){
+            primitives.add(surface);
+            return;
+        }
+        String msg = StringUtils.replaceEach(
+            "Only a polygon subtype  %(subtypeSurface)s can be added to a MultiPolygon subtype %(subtype)s",
+            new String[]{"%(subtypeSurface)s","%(subtype)s"},
+            new String[]{String.valueOf(geometryType.getSubType()), String.valueOf(getGeometryType().getSubType())}
+        );
+        LOGGER.warn(msg);
+        throw new UnsupportedOperationException(msg);
+
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        int capacity = 0;
+        for( int i = 0; i < this.getPrimitivesNumber(); i++ ) {
+            Polygon polygon = (Polygon) this.getPrimitiveAt(i);
+            capacity += polygon.getNumVertices();
+            for( int r = 0; r < polygon.getNumInteriorRings(); r++ ) {
+                capacity += polygon.getInteriorRing(r).getNumVertices();
+            }        
+        }
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0, capacity);
+    }
+
+    @Override
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    protected class MultiPolygonIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+        private final List<PathIterator>iterators;
+
+        public MultiPolygonIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            this.iterators = new ArrayList<>(primitives.size());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            for (Primitive primitive : primitives) {
+                iterators.add(primitive.getPathIterator(at));
+            }
+            done = false;
+        }
+
+        /*
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        /*
+         * @see java.awt.geom.PathIterator#next()
+         */
+        @Override
+        public void next() {
+            PathIterator pathIteratorPrimitive = iterators.get(index);
+            pathIteratorPrimitive.next();
+            if(pathIteratorPrimitive.isDone()){
+                index++;
+                done = (index==primitives.size());
+            }
+        }
+
+        /*
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        /*
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        @Override
+        public int currentSegment(double[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+
+        /*
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        @Override
+        public int currentSegment(float[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiLine.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiLine.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiLine.java	(revision 46118)
@@ -0,0 +1,82 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Collections;
+import java.util.Iterator;
+
+import com.vividsolutions.jts.geom.LineString;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiLine extends AbstractMultiCurve implements MultiLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3585059833766514177L;
+
+    public AbstractMultiLine(int subtype) {
+        super(Geometry.TYPES.MULTILINE, subtype);
+    }
+
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        LineString[] lineStrings = new LineString[primitives.size()];
+        for(int i=0; i<primitives.size(); i++){
+            lineStrings[i]=(LineString) ((GeometryJTS)primitives.get(i)).getJTS();
+        }
+        return JTSUtils.createJTSMultiLineString(lineStrings);
+    }
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine2D other = new MultiLine2D();
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+    
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+            ((GeometryJTS)iterator.next()).flip();
+        }
+        Collections.reverse(primitives);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiSurface.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiSurface.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiSurface.java	(revision 46118)
@@ -0,0 +1,190 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiSurface;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Surface;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiSurface extends AbstractMultiPrimitive implements MultiSurface {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5487551987271993628L;
+
+    /**
+     * @param type
+     */
+    public AbstractMultiSurface(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    /**
+     * @param type
+     */
+    public AbstractMultiSurface(int subtype) {
+        super(Geometry.TYPES.MULTISURFACE, subtype);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiSurface#getSurfaceAt(int)
+     */
+    public Surface getSurfaceAt(int index) {
+        return (Surface)getPrimitiveAt(index);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        return getShape(null);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform)
+     */
+    public PathIterator getPathIterator(AffineTransform at) {
+        MultiSurfaceIterator pi = new MultiSurfaceIterator(at);
+        return pi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getPathIterator(java.awt.geom.AffineTransform, double)
+     */
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(getPathIterator(null), false, 0);
+    }
+
+
+    protected class MultiSurfaceIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+        private List<PathIterator>iterators = new ArrayList<PathIterator>(primitives.size());
+
+        /**
+         * Creates a new PointIterator object.
+         *
+         * @param p
+         *            The polygon
+         * @param at
+         *            The affine transform applied to coordinates during
+         *            iteration
+         */
+        public MultiSurfaceIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            for (Iterator iterator = primitives.iterator(); iterator.hasNext();) {
+                Primitive primitive = (Primitive) iterator.next();
+                iterators.add(primitive.getPathIterator(at));
+            }
+            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() {
+            PathIterator pathIteratorPrimitive = iterators.get(index);
+            pathIteratorPrimitive.next();
+            if(pathIteratorPrimitive.isDone()){
+                index++;
+                done = (index==primitives.size());
+            }
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        public int currentSegment(double[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        public int currentSegment(float[] coords) {
+            return iterators.get(index).currentSegment(coords);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon2D.java	(revision 46118)
@@ -0,0 +1,148 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPolygon2D extends AbstractMultiPolygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7018238332611444136L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPolygon2D() {
+        super(Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon2D polygon = (Polygon2D) iterator.next();
+            MultiPoint points = polygon.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon2D polygon = (Polygon2D) iterator.next();
+            MultiLine lines = polygon.toLines();
+            multiLine.ensureCapacity(multiLine.getPrimitivesNumber()+lines.getPrimitivesNumber());
+            for(int i=0; i<lines.getPrimitivesNumber(); i++){
+                multiLine.addPrimitive((Line2D)lines.getPrimitiveAt(i));
+            }
+        }
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPolygon2D clone = new MultiPolygon2D();
+        return clonePrimitives(clone);
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 2;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Polygon2D){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2D){
+            MultiPolygon polygons;
+            try {
+                polygons = primitive.toPolygons();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to polygons";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+            return polygons;
+        }
+
+        String message = "Only 2D primitives can be fixed to MultiPolygon2D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractMultiPoint.java	(revision 46118)
@@ -0,0 +1,206 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.gputils.GeneralPathXIterator;
+import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractMultiPoint extends AbstractMultiPrimitive implements MultiPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 7056816718895043774L;
+
+    /**
+     * @param subtype
+     */
+    public AbstractMultiPoint(int subtype) {
+        super(Geometry.TYPES.MULTIPOINT, subtype);
+    }
+
+    @Override
+    public com.vividsolutions.jts.geom.Geometry getJTS() {
+        ArrayListCoordinateSequence coordinateSequence = new ArrayListCoordinateSequence();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            PointJTS point = (PointJTS) iterator.next();
+            coordinateSequence.add(point.getJTSCoordinate());
+        }
+        return JTSUtils.createJTSMultiPoint(coordinateSequence);
+    }
+
+
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiPoint2D other = new MultiPoint2D();
+        other.setProjection(this.getProjection());
+        other.ensureCapacity(primitives.size());
+        for (Primitive primitive : primitives) {
+            other.addPrimitive((Primitive)primitive.force2D());
+        }
+        return other;
+    }
+
+    @Override
+    public void addPoint(Point point) {
+        point = fixPoint(point);
+        primitives.add(point);
+    }
+
+    @Override
+    public Point getPointAt(int index) {
+        return (Point)primitives.get(index);
+    }
+
+    @Override
+    public Shape getShape(AffineTransform affineTransform) {
+        return new DefaultGeneralPathX(getPathIterator(affineTransform),false,0);
+    }
+
+    @Override
+    public Shape getShape() {
+        return new DefaultGeneralPathX(getPathIterator(null),false,0);
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at) {
+        PointIterator pi = new PointIterator(at);
+        return pi;
+    }
+
+    @Override
+    public PathIterator getPathIterator(AffineTransform at, double flatness) {
+        return getPathIterator(at);
+    }
+
+    protected class PointIterator extends GeneralPathXIterator {
+
+        /** Transform applied on the coordinates during iteration */
+        private final AffineTransform at;
+
+        /** True when the point has been read once */
+        private boolean done;
+        private int index = 0;
+
+        public PointIterator(AffineTransform at) {
+            super(new GeneralPathX());
+            if (at == null) {
+                at = new AffineTransform();
+            }
+
+            this.at = at;
+            done = false;
+        }
+
+        /**
+         * Return the winding rule for determining the interior of the path.
+         *
+         * @return <code>WIND_EVEN_ODD</code> by default.
+         */
+        @Override
+        public int getWindingRule() {
+            return PathIterator.WIND_EVEN_ODD;
+        }
+
+        /**
+         * @see java.awt.geom.PathIterator#next()
+         */
+        @Override
+        public void next() {
+            done = (primitives.size() == ++index);
+        }
+
+        /**
+         * @return 
+         * @see java.awt.geom.PathIterator#isDone()
+         */
+        @Override
+        public boolean isDone() {
+            return done;
+        }
+
+        /**
+         * @return 
+         * @see java.awt.geom.PathIterator#currentSegment(double[])
+         */
+        @Override
+        public int currentSegment(double[] coords) {
+            Point point = (Point) primitives.get(index);
+            coords[0] = point.getX();
+            coords[1] = point.getY();
+            at.transform(coords, 0, coords, 0, 1);
+            return PathIterator.SEG_MOVETO;
+        }
+
+        /*
+         * @see java.awt.geom.PathIterator#currentSegment(float[])
+         */
+        @Override
+        public int currentSegment(float[] coords) {
+            Point point = (Point) primitives.get(index);
+            coords[0] = (float)point.getX();
+            coords[1] = (float)point.getY();
+            at.transform(coords, 0, coords, 0, 1);
+            return PathIterator.SEG_MOVETO;
+        }
+    }
+
+    @Override
+    public void flip() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Collections.reverse(primitives);
+    }
+
+
+    @Override
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+
+    @Override
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+
+    protected abstract Point fixPoint(Point point);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine2D.java	(revision 46118)
@@ -0,0 +1,183 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiLine2D extends AbstractMultiLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 13422301639354098L;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public MultiLine2D() {
+        super(Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line2D line = (Line2D) iterator.next();
+            MultiPoint points = line.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line2D line = (Line2D) iterator.next();
+            MultiPolygon polygons = line.toPolygons();
+            multiPolygon.ensureCapacity(multiPolygon.getPrimitivesNumber()+polygons.getPrimitivesNumber());
+            for(int i=0; i<polygons.getPrimitivesNumber(); i++){
+                multiPolygon.addSurface((Polygon)polygons.getPrimitiveAt(i));
+            }
+        }
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiLine2D clone = new MultiLine2D();
+        return clonePrimitives(clone);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 2;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiLine#fixLine(org.gvsig.fmap.geom.primitive.Line)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Line2D){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2D){
+            try {
+                return primitive.toLines();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 2D primitives can be fixed to MultiLine2D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine2D result = new MultiLine2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine2D result = new MultiLine2D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(joinStyle, distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPolygon3D.java	(revision 46118)
@@ -0,0 +1,171 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPolygon3D extends AbstractMultiPolygon {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8074904643192281026L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPolygon3D() {
+        super(Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon3D polygon = (Polygon3D) iterator.next();
+            MultiPoint points = polygon.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Polygon3D polygon = (Polygon3D) iterator.next();
+            MultiLine lines = polygon.toLines();
+            multiLine.ensureCapacity(multiLine.getPrimitivesNumber()+lines.getPrimitivesNumber());
+            for(int i=0; i<lines.getPrimitivesNumber(); i++){
+                multiLine.addPrimitive((Line3D)lines.getPrimitiveAt(i));
+            }
+        }
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiPolygon#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPolygon3D clone = new MultiPolygon3D();
+        return clonePrimitives(clone);
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Polygon3D){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3D){
+            MultiPolygon polygons;
+            try {
+                polygons = primitive.toPolygons();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to polygons";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+            return polygons;
+        }
+
+        String message = "Only 3D primitives can be fixed to MultiPolygon3D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+    
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance, JTSUtils.calculateQuadrantSegments(joinStyle)));
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiLine3D.java	(revision 46118)
@@ -0,0 +1,205 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Iterator;
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiLine3D extends AbstractMultiLine {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4864883331083875719L;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public MultiLine3D() {
+        super(Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        MultiPoint multiPoint = new MultiPoint3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line3D line = (Line3D) iterator.next();
+            MultiPoint points = line.toPoints();
+            multiPoint.ensureCapacity(multiPoint.getPrimitivesNumber()+points.getPrimitivesNumber());
+            for(int i=0; i<points.getPrimitivesNumber(); i++){
+                multiPoint.addPoint(points.getPointAt(i));
+            }
+        }
+        return multiPoint;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Line3D line = (Line3D) iterator.next();
+            MultiPolygon polygons = line.toPolygons();
+            multiPolygon.ensureCapacity(multiPolygon.getPrimitivesNumber()+polygons.getPrimitivesNumber());
+            for(int i=0; i<polygons.getPrimitivesNumber(); i++){
+                multiPolygon.addSurface((Polygon)polygons.getPrimitiveAt(i));
+            }
+        }
+        return multiPolygon;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiLine3D clone = new MultiLine3D();
+        return clonePrimitives(clone);
+
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape(java.awt.geom.AffineTransform)
+     */
+    public Shape getShape(AffineTransform affineTransform) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getShape()
+     */
+    public Shape getShape() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#is3D()
+     */
+    public boolean is3D() {
+        return true;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiLine#fixLine(org.gvsig.fmap.geom.primitive.Line)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+        if(primitive instanceof Line3D){
+            return primitive;
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3D){
+            try {
+                return primitive.toLines();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 3D primitives can be fixed to MultiLine3D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#transform(java.awt.geom.AffineTransform)
+     */
+    public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine3D result = new MultiLine3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+
+    public Geometry offset(int joinStyle, double distance) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        MultiLine3D result = new MultiLine3D();
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Primitive primitive = (Primitive) iterator.next();
+            Geometry offset = primitive.offset(joinStyle, distance);
+            if(offset instanceof MultiLine){
+                MultiLine multiOffset = (MultiLine)offset;
+                for(int i=0; i<multiOffset.getPrimitivesNumber(); i++){
+                    result.addPrimitive(multiOffset.getPrimitiveAt(i));
+                }
+            } else {
+                Primitive offsetPrimitive = (Primitive)primitive.offset(joinStyle, distance);
+                if(offsetPrimitive != null){
+                    result.addPrimitive(offsetPrimitive);
+                }
+            }
+        }
+        return result;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint2D.java	(revision 46118)
@@ -0,0 +1,145 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPoint2D extends AbstractMultiPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2230359991187613190L;
+
+    public MultiPoint2D() {
+        super(Geometry.SUBTYPES.GEOM2D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    @Override
+    public Geometry cloneGeometry() {
+        MultiPoint2D clone = new MultiPoint2D();
+        return clonePrimitives(clone);
+
+    }
+
+    @Override
+    public int getDimension() {
+        return 2;
+    }
+
+    @Override
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), false, 0);
+    }
+
+    @Override
+    public MultiPoint toPoints() throws GeometryException {
+        return this;
+    }
+
+    @Override
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine2D();
+        Line line = new Line2D();
+        line.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point2D point = (Point2D) iterator.next();
+            line.addVertex(point);
+        }
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    @Override
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon2D();
+        Polygon polygon = new Polygon2D();
+        polygon.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point2D point = (Point2D) iterator.next();
+            polygon.addVertex(point);
+        }
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+
+        if(primitive instanceof Point2D){
+            return primitive;
+        }
+
+        if(primitive instanceof Point){
+            Point point = (Point)primitive;
+            return new Point2D(point.getX(), point.getY());
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM2D){
+            try {
+                return primitive.toPoints();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to lines";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 2D primitives can be fixed to MultiPoint2D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+    }
+
+    @Override
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point2D) {
+            return point;
+        } else {
+            return new Point2D(point.getX(), point.getY());
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/MultiPoint3D.java	(revision 46118)
@@ -0,0 +1,169 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.aggregate;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+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;
+import org.gvsig.fmap.geom.jts.gputils.DefaultGeneralPathX;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class MultiPoint3D extends AbstractMultiPoint {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2230359991187613190L;
+
+    /**
+     * @param subtype
+     */
+    public MultiPoint3D() {
+        super(Geometry.SUBTYPES.GEOM3D);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
+     */
+    public Geometry cloneGeometry() {
+        MultiPoint3D clone = new MultiPoint3D();
+        return clonePrimitives(clone);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.Geometry#getDimension()
+     */
+    public int getDimension() {
+        return 3;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getGeneralPath()
+     */
+    public GeneralPathX getGeneralPath() {
+        return new DefaultGeneralPathX(new PointIterator(null), false, 0);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPoints()
+     */
+    public MultiPoint toPoints() throws GeometryException {
+        return this;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toLines()
+     */
+    public MultiLine toLines() throws GeometryException {
+        MultiLine multiLine = new MultiLine3D();
+        Line line = new Line3D();
+        line.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point3D point = (Point3D) iterator.next();
+            line.addVertex(point);
+        }
+        multiLine.addPrimitive(line);
+        return multiLine;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.aggregate.MultiLine#toPolygons()
+     */
+    public MultiPolygon toPolygons() throws GeometryException {
+        MultiPolygon multiPolygon = new MultiPolygon3D();
+        Polygon polygon = new Polygon3D();
+        polygon.ensureCapacity(primitives.size());
+        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
+            Point3D point = (Point3D) iterator.next();
+            polygon.addVertex(point);
+        }
+        multiPolygon.addPrimitive(polygon);
+        return multiPolygon;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.aggregate.AbstractMultiPrimitive#fixPrimitive(org.gvsig.fmap.geom.primitive.Primitive)
+     */
+    @Override
+    protected Geometry fixPrimitive(Primitive primitive) {
+
+        if(primitive instanceof Point3D){
+            return primitive;
+        }
+
+        if(primitive instanceof Point){
+            Point point = (Point)primitive;
+            if(point instanceof Point3DM){
+                return new Point3D(point.getX(), point.getY(), ((Point3DM)point).getZ());
+            }
+            return new Point3D(point.getX(), point.getY(), 0);
+        }
+
+        if(primitive.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3D){
+            try {
+                return primitive.toPoints();
+            } catch (GeometryException e) {
+                String message = "Can't convert primitive to points";
+                LOGGER.warn(message);
+                throw new RuntimeException(message);
+            }
+        }
+
+        String message = "Only 3D primitives can be fixed to MultiPoint3D";
+        notifyDeprecated(message);
+        throw new UnsupportedOperationException(message);
+
+    }
+
+    protected Point fixPoint(Point point) {
+        if (point instanceof Point3D) {
+            return point;
+        } else if (point instanceof Point3DM) {
+            return new Point3D(point.getX(), point.getY(), ((Point3DM) point).getM());
+        } else {
+            return new Point3D(point.getX(), point.getY(), 0);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/PointIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/PointIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/PointIterator.java	(revision 46118)
@@ -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.jts.gputils;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * 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 Point 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(Point 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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/PointIterator.java
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIteratorSimple.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIteratorSimple.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIteratorSimple.java	(revision 46118)
@@ -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.jts.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;
+    } 
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/DefaultGeneralPathX.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/DefaultGeneralPathX.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/DefaultGeneralPathX.java	(revision 46118)
@@ -0,0 +1,994 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.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.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateList;
+import com.vividsolutions.jts.geom.CoordinateSequence;
+import com.vividsolutions.jts.geom.CoordinateSequences;
+import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
+
+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.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.primitive.GeneralPathX;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.jdk.GeomUtilities;
+
+/**
+ * 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;
+
+    private boolean is2Dz=false;
+
+    private double zValue=0.0;
+
+    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);
+    }
+
+    public DefaultGeneralPathX(PathIterator piter, boolean is2Dz, double zValue) {
+        this(piter,is2Dz,zValue,10);
+    }
+    
+    /**
+     * 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 piter
+     * @param is2Dz
+     * @param zValue
+     * @param capacity
+     */
+    public DefaultGeneralPathX(PathIterator piter, boolean is2Dz, double zValue, int capacity) {
+        this(WIND_EVEN_ODD);
+        this.is2Dz = is2Dz;
+        this.zValue = zValue;
+        setWindingRule(piter.getWindingRule());
+        this.pointCoords = new ArrayList(capacity);
+        this.pointTypes = new ArrayList(capacity);
+        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) {
+            Point p = createPoint(x, y);
+            pointCoords.add(p);
+    }
+
+    private Point createPoint(double x, double y) {
+        Point p;
+        try {
+            if (is2Dz) {
+                p = geomManager.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+                p.setCoordinateAt(CoordinateSequence.Z, zValue);
+            } else {
+                p = geomManager.createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
+            }
+        } catch (CreateGeometryException e) {
+            LOG.warn("Error creating a point", e);
+            throw new RuntimeException(e.getMessage(), e);
+        }
+        return p;
+    }
+
+    private void addPoint(Point point) {
+        if(is2Dz){
+            pointCoords.add(createPoint(point.getX(), point.getY()));
+                return;
+        }
+        if(point instanceof Point2D) {
+            pointCoords.add(point);
+            return;
+        }
+        pointCoords.add(createPoint(point.getX(), point.getY()));
+    }
+
+    /**
+     * 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) {
+            addPoint(pointCoords[i], pointCoords[i + 1]);
+        }
+    }
+
+    /**
+     * @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 Point3D) {
+    		return p.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) {
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIterator.java	(revision 46118)
@@ -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.jts.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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gputils/GeneralPathXIterator.java
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/GeometryJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/GeometryJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/GeometryJTS.java	(revision 46118)
@@ -0,0 +1,45 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface GeometryJTS extends Geometry {
+
+    /**
+     * @return the jts geometry.
+     * @throws GeometryException
+     */
+
+    public com.vividsolutions.jts.geom.Geometry getJTS();
+
+    public boolean is3D();
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/AbstractGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/AbstractGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/AbstractGeometry.java	(revision 46118)
@@ -0,0 +1,946 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.io.geojson.GeoJsonWriter;
+import com.vividsolutions.jts.operation.buffer.BufferParameters;
+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 java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+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.complex.Complex;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.jts.operation.towkb.OGCWKBEncoder;
+import org.gvsig.fmap.geom.jts.operation.towkb.PostGISEWKBEncoder;
+import org.gvsig.fmap.geom.jts.operation.towkt.EWKTWriter;
+import org.gvsig.fmap.geom.jts.primitive.Envelope2D;
+import org.gvsig.fmap.geom.jts.primitive.Envelope3D;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
+import org.gvsig.fmap.geom.jts.util.GMLUtils;
+import org.gvsig.fmap.geom.jts.util.JTSUtils;
+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.OrientableCurve;
+import org.gvsig.fmap.geom.primitive.OrientableSurface;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author gvSIG Team
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractGeometry implements GeometryJTS {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractGeometry.class);
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4999326772576222293L;
+
+    private GeometryType geometryType;
+
+    private IProjection projection;
+
+    /**
+     *
+     * @param type
+     * @param subtype
+     */
+    public AbstractGeometry(int type, int subtype) {
+        try {
+            this.geometryType = GeometryLocator.getGeometryManager().getGeometryType(type, subtype);
+        } catch (Exception e) {
+            // TODO: Ver de crear una excepcion para esto o si hay alguna en el API.
+            throw new RuntimeException(e);
+        }
+    }
+    
+    public void setGeometryType(GeometryType geometryType) {
+        this.geometryType = geometryType;
+    }
+
+    @Override
+    public GeometryType getGeometryType() {
+        return geometryType;
+    }
+
+    protected GeometryManager getManager() {
+        return GeometryLocator.getGeometryManager();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#contains(org.gvsig.fmap.geom.Geometry)
+     */
+    @Override
+    public boolean contains(Geometry geometry) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        if (!(geometry instanceof GeometryJTS)) {
+            return false;
+        }
+        return getJTS().contains(((GeometryJTS) geometry).getJTS());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(Object o) {
+        return getJTS().compareTo(((GeometryJTS) o).getJTS());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(double, double)
+     */
+    @Override
+    public boolean contains(double x, double y) {
+        notifyDeprecated("Calling deprecated method of geometry contains from shape interface");
+        Shape shp = getShape();
+        return shp.contains(x, y);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#intersects(double, double, double, double)
+     */
+    @Override
+    public boolean intersects(double x, double y, double w, double h) {
+
+        notifyDeprecated("Calling deprecated method of geometry intersects from shape interface");
+        Shape shp = this.getShape();
+        return shp.intersects(x, y, w, h);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(double, double, double, double)
+     */
+    @Override
+    public boolean contains(double x, double y, double w, double h) {
+        notifyDeprecated("Calling deprecated method of geometry contains from shape interface");
+        Shape shp = this.getShape();
+        return shp.contains(x, y, w, h);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(java.awt.geom.Point2D)
+     */
+    @Override
+    public boolean contains(java.awt.geom.Point2D p) {
+        notifyDeprecated("Calling deprecated method of geometry contains from shape interface");
+        Shape shp = this.getShape();
+        return shp.contains(p);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#contains(java.awt.geom.Rectangle2D)
+     */
+    @Override
+    public boolean contains(Rectangle2D r) {
+        notifyDeprecated("Calling deprecated method of geometry contains from shape interface");
+        Shape shp = this.getShape();
+        return shp.contains(r);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#distance(org.gvsig.fmap.geom.Geometry)
+     */
+    @Override
+    public double distance(org.gvsig.fmap.geom.Geometry other) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        return getJTS().distance(((GeometryJTS) other).getJTS());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.gvsig.fmap.geom.Geometry#isWithinDistance(org.gvsig.fmap.geom.Geometry
+     * , double)
+     */
+    @Override
+    public boolean isWithinDistance(org.gvsig.fmap.geom.Geometry other, double distance)
+            throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return com.vividsolutions.jts.operation.distance.DistanceOp.isWithinDistance(this.getJTS(),
+                ((GeometryJTS) other).getJTS(), distance);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#overlaps(org.gvsig.fmap.geom.Geometry)
+     */
+    @Override
+    public boolean overlaps(org.gvsig.fmap.geom.Geometry geometry) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().overlaps(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean coveredBy(Geometry geometry) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+
+        return getJTS().coveredBy(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean covers(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().covers(((GeometryJTS) geometry).getJTS());
+
+    }
+
+    @Override
+    public boolean crosses(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().crosses(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean intersects(Geometry geometry) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        return getJTS().intersects(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean touches(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().touches(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean disjoint(Geometry geometry) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().disjoint(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public boolean within(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        // TODO: this method can be implemented throw invokeOperation
+        return getJTS().within(((GeometryJTS) geometry).getJTS());
+    }
+
+    @Override
+    public double area() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return getJTS().getArea();
+    }
+
+    @Override
+    public double perimeter() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return getJTS().getLength();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#intersects(java.awt.geom.Rectangle2D)
+     */
+    @Override
+    public boolean intersects(Rectangle2D r) {
+        double x = r.getMinX();
+        double y = r.getMinY();
+        double w = r.getWidth();
+        double h = r.getHeight();
+
+        return fastIntersects(x, y, w, h);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#fastIntersects(double, double, double,
+     * double)
+     */
+    @Override
+    public boolean fastIntersects(double x, double y, double w, double h) {
+        com.vividsolutions.jts.geom.Geometry rect; 
+        com.vividsolutions.jts.geom.Coordinate[] coord = new com.vividsolutions.jts.geom.Coordinate[5];
+        coord[0] = new com.vividsolutions.jts.geom.Coordinate(x, y);
+        coord[1] = new com.vividsolutions.jts.geom.Coordinate(x + w, y);
+        coord[2] = new com.vividsolutions.jts.geom.Coordinate(x + w, y + w);
+        coord[3] = new com.vividsolutions.jts.geom.Coordinate(x, y + w);
+        coord[4] = new com.vividsolutions.jts.geom.Coordinate(x, y);
+        rect = JTSUtils.createJTSPolygon(coord);
+
+        return getJTS().intersects(rect);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getEnvelope()
+     */
+    @Override
+    public Envelope getEnvelope() {
+        if (is3D()) {
+            Coordinate[] coordinates = getJTS().getCoordinates();
+
+            double minx = Double.POSITIVE_INFINITY;
+            double miny = Double.POSITIVE_INFINITY;
+            double minz = Double.POSITIVE_INFINITY;
+
+            double maxx = Double.NEGATIVE_INFINITY;
+            double maxy = Double.NEGATIVE_INFINITY;
+            double maxz = Double.NEGATIVE_INFINITY;
+
+            double x;
+            double y;
+            double z;
+
+            for (Coordinate coordinate : coordinates) {
+                x = coordinate.x;
+                y = coordinate.y;
+                z = coordinate.z;
+                minx = Math.min(x, minx);
+                miny = Math.min(y, miny);
+                minz = Math.min(z, minz);
+                maxx = Math.max(x, maxx);
+                maxy = Math.max(y, maxy);
+                maxz = Math.max(z, maxz);
+            }
+
+            if (minx <= maxx && miny <= maxy && minz <= maxz) {
+                Point min = new Point3D(minx, miny, minz);
+                Point max = new Point3D(maxx, maxy, maxz);
+                return new Envelope3D(min, max, this.getProjection());
+            }
+            return new Envelope3D(this.getProjection());
+        } else {
+            com.vividsolutions.jts.geom.Envelope envelope = getJTS().getEnvelopeInternal();
+            return new Envelope2D(envelope, this.getProjection());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#isSimple()
+     */
+    @Override
+    public boolean isSimple() {
+        return this.getJTS().isSimple();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#isCCW()
+     */
+    @Override
+    public boolean isCCW() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return CGAlgorithms.isCCW(this.getJTS().getCoordinates());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#invokeOperation(int,
+     * org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    @Override
+    public Object invokeOperation(int index, GeometryOperationContext ctx)
+            throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return getManager().invokeOperation(index, this, ctx);
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#invokeOperation(java.lang.String,
+     * org.gvsig.fmap.geom.operation.GeometryOperationContext)
+     */
+    @Override
+    public Object invokeOperation(String opName, GeometryOperationContext ctx)
+            throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return getManager().invokeOperation(opName, this, ctx);
+
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getType()
+     */
+    @Override
+    public int getType() {
+        return this.getGeometryType().getType();
+    }
+
+    @Override
+    public Object convertTo(String format) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if( StringUtils.isEmpty(format) ) {
+            throw new IllegalArgumentException("Can't accept null as format name.");
+        }
+        format = format.trim().toLowerCase();
+        switch(format) {
+            case "jts":
+                return this.getJTS();
+            case "wkb":
+                return this.convertToWKB();
+            case "hexwkb":
+                return this.convertToHexWKB();
+            case "ewkb":
+                return this.convertToEWKB();
+            case "wkt":
+                return this.convertToWKT();
+            case "gml":
+                return GMLUtils.geometry2GML(this);
+            case "json":
+            case "geojson":
+                return this.convertToGeoJson();
+            default:
+                throw new IllegalArgumentException("Format '"+format+"' not supported");
+        }
+        
+    }
+    
+    @Override
+    public byte[] convertToWKB() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        try {
+            return new OGCWKBEncoder().encode(this);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public String convertToHexWKB() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        try {
+            byte[] bytes = new OGCWKBEncoder().encode(this);
+            return Hex.encodeHexString(bytes);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+    
+    public String convertToGeoJson() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        try {
+            GeoJsonWriter writer = new GeoJsonWriter();
+            writer.setEncodeCRS(true);
+            return writer.write(this.getJTS());
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+    
+    @Override
+    public String convertToHexEWKB() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        try {
+            byte[] bytes = new PostGISEWKBEncoder().encode(this);
+            return Hex.encodeHexString(bytes);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public byte[] convertToWKBQuietly() {
+        try {
+            return new OGCWKBEncoder().encode(this);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+    
+    @Override
+    public String convertToHexWKBQuietly() {
+        try {
+            byte[] bytes = new OGCWKBEncoder().encode(this);
+            return Hex.encodeHexString(bytes);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+    
+    @Override
+    public byte[] convertToWKB(int srs) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        /*
+    	 * No se sabe si la especificaci�n de OGC soporta SRS. OGCWKBEncoder no.
+         */
+
+        try {
+            return new OGCWKBEncoder().encode(this);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public byte[] convertToWKBForcingType(int srs, int type) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        /*
+    	 * No se sabe si la especificaci�n de OGC soporta SRS. OGCWKBEncoder no.
+         */
+        Geometry geom = this;
+        if (this.getType() != type) {
+            com.vividsolutions.jts.geom.Geometry jts = getJTS();
+            jts = JTSUtils.convertTypes(jts, this.getType(), type);
+
+            geom = JTSUtils.createGeometry(this.getProjection(), jts);
+        }
+        try {
+            return new OGCWKBEncoder().encode(geom);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+
+    }
+
+    @Override
+    public byte[] convertToEWKB() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        try {
+            return new PostGISEWKBEncoder().encode(this);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+
+    }
+
+    @Override
+    public byte[] convertToEWKB(int srs) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        /*
+    	 * No se sabe si la especificaci�n de OGC soporta SRS. OGCWKBEncoder no.
+         */
+
+        try {
+            return new PostGISEWKBEncoder().encode(this);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public byte[] convertToEWKBForcingType(int srs, int type) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        /*
+    	 * No se sabe si la especificaci�n de OGC soporta SRS. OGCWKBEncoder no.
+         */
+        Geometry geom = this;
+        if (this.getType() != type) {
+            com.vividsolutions.jts.geom.Geometry jts = getJTS();
+            jts = JTSUtils.convertTypes(jts, this.getType(), type);
+
+            geom = JTSUtils.createGeometry(this.getProjection(), jts);
+        }
+        try {
+            return new PostGISEWKBEncoder().encode(geom);
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+
+    }
+
+    @Override
+    public String convertToWKT() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        int subType = getGeometryType().getSubType();
+
+        EWKTWriter writer; // = null;
+
+        switch (subType) {
+            case Geometry.SUBTYPES.GEOM3D:
+                writer = new EWKTWriter(3, false);
+                break;
+            case Geometry.SUBTYPES.GEOM2DM:
+                writer = new EWKTWriter(3, true);
+                break;
+            case Geometry.SUBTYPES.GEOM3DM:
+                writer = new EWKTWriter(4, true);
+                break;
+
+            default:
+                writer = new EWKTWriter(2, false);
+                break;
+        }
+        com.vividsolutions.jts.geom.Geometry jts = getJTS();
+        return writer.write(jts);
+    }
+
+    @Override
+    public String convertToWKTQuietly() {
+        try {
+            return this.convertToWKT();
+        } catch(Exception ex) {
+            return null;
+        }
+    }
+
+    @Override
+    public org.gvsig.fmap.geom.Geometry buffer(double distance) throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+        if( distance==0 ) {
+          return this;
+        }
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(distance));
+    }
+    
+    
+    @Override
+    public org.gvsig.fmap.geom.Geometry buffer(double distance, int joinStyle, boolean capButt) throws GeometryOperationNotSupportedException,
+        GeometryOperationException {
+        if( distance==0 ) {
+          return this;
+        }
+        
+        int quadrantSegments = JTSUtils.calculateQuadrantSegments(joinStyle);
+        
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().buffer(
+                distance, 
+                quadrantSegments, 
+                capButt ? BufferParameters.CAP_FLAT : BufferParameters.CAP_ROUND
+        ));
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#snapTo(org.gvsig.fmap.geom.Geometry,
+     * double)
+     */
+    @Override
+    public org.gvsig.fmap.geom.Geometry snapTo(org.gvsig.fmap.geom.Geometry other, double snapTolerance)
+            throws GeometryOperationNotSupportedException, GeometryOperationException {
+        Geometry result; // = null;
+        GeometrySnapper snapper = new GeometrySnapper(getJTS());
+        com.vividsolutions.jts.geom.Geometry jts_result = snapper.snapTo(((GeometryJTS) other).getJTS(), snapTolerance);
+        result = JTSUtils.createGeometry(this.getProjection(), jts_result);
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getInteriorPoint()
+     */
+    @Override
+    public Point getInteriorPoint() throws GeometryOperationNotSupportedException, GeometryOperationException {
+
+        com.vividsolutions.jts.geom.Geometry geometry = getJTS();
+        com.vividsolutions.jts.geom.Point point = geometry.getInteriorPoint();
+        Geometry result = JTSUtils.createGeometry(this.getProjection(), point);
+        return (Point) result;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#isValid()
+     */
+    @Override
+    public boolean isValid() {
+        return getJTS().isValid();
+    }
+
+    @Override
+    public ValidationStatus getValidationStatus() {
+        DefaultValidationStatus status = new DefaultValidationStatus(ValidationStatus.VALID, null);
+        com.vividsolutions.jts.geom.Geometry jtsgeom; // = null;
+        try {
+            jtsgeom = this.getJTS();
+            IsValidOp validOp = new IsValidOp(jtsgeom);
+            if (!validOp.isValid() ) {
+                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#makeValid()
+     */
+    @Override
+    public org.gvsig.fmap.geom.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 null; // new
+                            // DefaultNullGeometry(this.getGeometryType());
+                        }
+                    }
+                    if (this instanceof OrientableSurface) {
+                        int vertices = ((OrientableSurface) this).getNumVertices();
+                        if (vertices < 3) {
+                            return null; // new
+                            // DefaultNullGeometry(this.getGeometryType());
+                        }
+                    }
+            }
+        } catch (Exception ex) {
+            return null;
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getBounds2D()
+     */
+    @Override
+    public Rectangle2D getBounds2D() {
+        com.vividsolutions.jts.geom.Envelope envInternal = getJTS().getEnvelopeInternal();
+        return new Rectangle2D.Double(envInternal.getMinX(), envInternal.getMinY(), envInternal.getWidth(),
+                envInternal.getHeight());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.awt.Shape#getBounds()
+     */
+    @Override
+    public Rectangle getBounds() {
+        return this.getShape().getBounds();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.fmap.geom.Geometry#getInternalShape()
+     */
+    @Override
+    public Shape getInternalShape() {
+        return getShape();
+    }
+
+    @Override
+    public void rotate(double radAngle, double basex, double basey) {
+
+        AffineTransform at = new AffineTransform();
+        at.rotate(radAngle, basex, basey);
+        this.transform(at);
+    }
+
+    @Override
+    public void move(double dx, double dy) {
+
+        AffineTransform at = new AffineTransform();
+        at.translate(dx, dy);
+        this.transform(at);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public Geometry[] closestPoints(Geometry other) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        Point[] points;
+
+        Coordinate[] jts_points = DistanceOp.nearestPoints(getJTS(), ((GeometryJTS) other).getJTS());
+        points = new Point[jts_points.length];
+        for (int i = 0; i < jts_points.length; i++) {
+            try {
+                points[i] = JTSUtils.createPoint(this.getGeometryType(), this.getProjection(), jts_points[i]);
+            } catch (CreateGeometryException e) {
+                throw new GeometryOperationException(e);
+            }
+        }
+
+        return (Geometry[]) points;
+    }
+
+    @Override
+    public Geometry convexHull() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().convexHull(), null);
+    }
+
+    @Override
+    public Geometry difference(Geometry other) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().difference(((GeometryJTS) other).getJTS()), null);
+    }
+
+    @Override
+    public Geometry intersection(Geometry other) throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().intersection(((GeometryJTS) other).getJTS()), null);
+    }
+
+    @Override
+    public Geometry union(Geometry other) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().union(((GeometryJTS) other).getJTS()), this.getGeometryType());
+    }
+
+    @Override
+    public org.gvsig.fmap.geom.primitive.Point centroid() throws GeometryOperationNotSupportedException,
+            GeometryOperationException {
+        try {
+            return JTSUtils.createPoint(this.getGeometryType(), this.getProjection(), getJTS().getCentroid().getCoordinate());
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    protected void notifyDeprecated(String message) {
+        LOGGER.info(message);
+
+    }
+
+
+    @Override
+    public boolean ensureOrientation(boolean ccw) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        if (ccw != isCCW()) {
+            flip();
+            return true;
+        }
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.geom.jts.GeometryJTS#out(org.gvsig.fmap.geom.Geometry)
+     */
+    @Override
+    public boolean out(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException {
+        GeometryJTS otherJtsGeom = (GeometryJTS) geometry;
+        return (!contains(otherJtsGeom) && !intersects(otherJtsGeom));
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof GeometryJTS) {
+            return this.getJTS().equals(((GeometryJTS) obj).getJTS());
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return this.getGeometryType().getFullName();
+    }
+
+    @Override
+    public IProjection getProjection() {
+        return this.projection;
+    }
+
+    @Override
+    public void setProjectionIffNull(IProjection projection) {
+        if (this.projection == null) {
+            this.projection = projection;
+        }
+    }
+
+    @Override
+    public void setProjection(IProjection projection) {
+        this.projection = projection;
+    }
+
+    @Override
+    public void setProjection(String projection) {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+        this.setProjection(proj);
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Geometry clone() throws CloneNotSupportedException {
+        return this.cloneGeometry();
+    }
+
+    @Override
+    public Geometry boundary() {
+        return JTSUtils.createGeometry(this.getProjection(), getJTS().getBoundary(), null);
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToByteArray.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToByteArray.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToByteArray.java	(revision 46118)
@@ -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.jts.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ * Convert a Geometry to Byte Array encoded as WKB.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceToByteArray extends AbstractCoercion {
+
+  public CoerceToByteArray() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof Byte[] || value instanceof byte[]) {
+      return value;
+    }
+    try {
+      if (value instanceof Geometry) {
+        return ((Geometry) value).convertToWKB();
+      }
+    } catch (Exception e) {
+      throw new CoercionException(e);
+    }
+    throw new CoercionException();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/DefaultGeometryCoercionContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/DefaultGeometryCoercionContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/DefaultGeometryCoercionContext.java	(revision 46118)
@@ -0,0 +1,46 @@
+/*
+ * 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.jts.coerce;
+
+import org.gvsig.fmap.geom.GeometryCoercionContext;
+import org.gvsig.fmap.geom.type.GeometryType;
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultGeometryCoercionContext implements GeometryCoercionContext {
+
+    private GeometryType geometryType;
+    private int mode;
+    
+    public DefaultGeometryCoercionContext() {
+        this.geometryType = null;
+        this.mode = MODE_ONERROR_NULL;
+    }
+    
+    @Override
+    public GeometryType getGeometryType() {
+        return this.geometryType;
+    }
+
+    @Override
+    public void setGeometryType(GeometryType geometryType) {
+        this.geometryType = geometryType;
+    }
+
+    @Override
+    public int getMode() {
+        return this.mode;
+    }
+
+    @Override
+    public void setMode(int mode) {
+        this.mode = mode;
+    }
+    
+    
+       
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToString.java	(revision 46118)
@@ -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.jts.coerce;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ * Convert a Geometry to String encoded as WKT.
+ *
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceToString extends AbstractCoercion {
+
+  public CoerceToString() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof String) {
+      return value;
+    }
+    try {
+      if (value instanceof Geometry) {
+        return ((Geometry) value).convertToWKT();
+      }
+    } catch (Exception e) {
+      throw new CoercionException(e);
+    }
+    throw new CoercionException();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToGeometry.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToGeometry.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToGeometry.java	(revision 46118)
@@ -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.fmap.geom.jts.coerce;
+
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryCoercionContext;
+import static org.gvsig.fmap.geom.GeometryCoercionContext.MODE_ONERROR_DONTCONVERT;
+import static org.gvsig.fmap.geom.GeometryCoercionContext.MODE_ONERROR_NULL;
+import static org.gvsig.fmap.geom.GeometryCoercionContext.MODE_ONERROR_THROW;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.jts.AbstractGeometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ * 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$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceToGeometry extends AbstractCoercion {
+
+    private static GeometryManager manager = null;
+    
+    @Override
+    public Object coerce(Object value, CoercionContext context) throws CoercionException {
+        if (value == null) {
+            return value;
+        }
+        int mode = MODE_ONERROR_NULL;
+        Geometry geom;
+        GeometryType targetGeometryType = null;
+        Geometry sourcegeom = null;
+        try {
+//            TODO: descomentarizar para que tengan efecto los cambios.
+            if ( context instanceof GeometryCoercionContext) {
+                GeometryCoercionContext geomContext = (GeometryCoercionContext) context;
+                targetGeometryType = geomContext.getGeometryType();
+                mode = geomContext.getMode();
+            }
+            
+            if ( value instanceof Geometry ) {
+                geom = (Geometry) value;
+            } else {
+                if (value instanceof byte[]) {
+                    geom = getManager().createFrom((byte[]) value);
+                } else {
+                    String wkt = value.toString();
+                    if (StringUtils.isBlank(wkt)) {
+                        return null;
+                    }
+                    geom = getManager().createFrom(value.toString());
+                }
+                if (geom == null) {
+                    // Can't parse from WKB/WKT
+                    switch(mode) {
+                        case MODE_ONERROR_NULL:
+                        case MODE_ONERROR_DONTCONVERT:
+                            return null;
+                        case MODE_ONERROR_THROW:
+                        default:
+                            throw new CoercionException();
+                    }
+                }
+            }
+            if ( targetGeometryType==null) {
+                return geom;
+            }
+            sourcegeom = geom;
+            if (geom.getGeometryType().equals(targetGeometryType)) {
+                return geom;
+            }
+            switch (targetGeometryType.getType()) {
+                case Geometry.TYPES.MULTIPOINT:
+                    geom = geom.toPoints();
+                    break;
+                case Geometry.TYPES.MULTILINE:
+                    geom = geom.toLines();
+                    break;
+                case Geometry.TYPES.MULTIPOLYGON:
+                    geom = geom.toPolygons();
+                    break;
+                case Geometry.TYPES.POINT:
+                    geom = this.convertToPoint(targetGeometryType, geom);
+                    break;
+                case Geometry.TYPES.LINE:
+                    geom = this.convertToLine(targetGeometryType, geom);
+                    break;
+                case Geometry.TYPES.POLYGON:
+                    geom = this.convertToPolygon(targetGeometryType, geom);
+                    break;
+                case Geometry.TYPES.GEOMETRY:
+                    //Do not convert
+                    break;
+                default:
+                    geom = null;
+                    break;
+            }
+            if (geom != null) {
+                // Return converted geometry
+                return geom;
+            }
+            switch(mode) {
+                case MODE_ONERROR_NULL:
+                    return null;
+                case MODE_ONERROR_DONTCONVERT:
+                    return sourcegeom;
+                case MODE_ONERROR_THROW:
+                default:
+                    throw new CoercionException();
+            }
+        } catch (Exception e) {
+            switch(mode) {
+                case MODE_ONERROR_NULL:
+                    return null;
+                case MODE_ONERROR_DONTCONVERT:
+                    return sourcegeom;
+                case MODE_ONERROR_THROW:
+                default:
+                    throw new CoercionException();
+            }
+        }
+    }
+
+    private static GeometryManager getManager() {
+        if (manager == null) {
+            manager = GeometryLocator.getGeometryManager();
+        }
+        return manager;
+    }
+
+    private Geometry convertToPoint(GeometryType geometryType, Geometry geom) {
+        try {
+            Point target = null;
+            MultiPoint points = geom.toPoints();
+            if(points.getPrimitivesNumber() == 1){
+               target = (Point) points.getPrimitiveAt(0); 
+            }
+            return target;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    private Geometry convertToLine(GeometryType geometryType, Geometry geom) {
+        try {
+            Line target = null;
+            MultiLine lines = geom.toLines();
+            if(lines.getPrimitivesNumber() == 1){
+               target = (Line) lines.getPrimitiveAt(0); 
+            }
+            return target;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    private Geometry convertToPolygon(GeometryType geometryType, Geometry geom) {
+        try {
+            Polygon target = null;
+            MultiPolygon polygons = geom.toPolygons();
+            if(polygons.getPrimitivesNumber() == 1){
+               target = (Polygon) polygons.getPrimitiveAt(0); 
+            }
+            return target;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToEnvelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToEnvelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/coerce/CoerceToEnvelope.java	(revision 46118)
@@ -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.jts.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.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ * 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$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceToEnvelope extends AbstractCoercion {
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof Envelope) {
+      return value;
+    }
+    try {
+      if (value instanceof Geometry) {
+        return ((Geometry) value).getEnvelope();
+      }
+      Geometry geom;
+      GeometryManager manager = GeometryLocator.getGeometryManager();
+      if (value instanceof byte[]) {
+        geom = manager.createFrom((byte[]) value);
+      } else {
+        geom = manager.createFrom(value.toString());
+      }
+      if (geom == null) {
+        throw new CoercionException();
+      }
+      return geom.getEnvelope();
+    } catch (Exception e) {
+      throw new CoercionException(e);
+    }
+
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/EWKTWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/EWKTWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/EWKTWriter.java	(revision 46118)
@@ -0,0 +1,871 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.operation.towkt;
+
+/*
+ * The JTS Topology Suite is a collection of Java classes that
+ * implement the fundamental operations required to validate a given
+ * geo-spatial data set to a known topological specification.
+ *
+ * Copyright (C) 2001 Vivid Solutions
+ *
+ * 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; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * 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
+ *
+ * For more information, contact:
+ *
+ *     Vivid Solutions
+ *     Suite #1A
+ *     2328 Government Street
+ *     Victoria BC  V8T 5G5
+ *     Canada
+ *
+ *     (250)385-6040
+ *     www.vividsolutions.com
+ */
+
+import com.vividsolutions.jts.geom.*;
+import com.vividsolutions.jts.util.*;
+
+import org.hibernate.spatial.jts.mgeom.MCoordinateSequence;
+
+import org.gvsig.fmap.geom.jts.MCoordinate;
+
+import java.io.*;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+
+/**
+ * Writes the Well-Known Text representation of a {@link Geometry}.
+ * The Well-Known Text format is defined in the
+ * OGC <A HREF="http://www.opengis.org/techno/specs.htm">
+ * <i>Simple Features Specification for SQL</i></A>.
+ * See {@link WKTReader} for a formal specification of the format syntax.
+ * <p>
+ * The <code>WKTWriter</code> outputs coordinates rounded to the precision
+ * model. Only the maximum number of decimal places
+ * necessary to represent the ordinates to the required precision will be
+ * output.
+ * <p>
+ * The SFS WKT spec does not define a special tag for {@link LinearRing}s.
+ * Under the spec, rings are output as <code>LINESTRING</code>s.
+ * In order to allow precisely specifying constructed geometries,
+ * JTS also supports a non-standard <code>LINEARRING</code> tag which is used
+ * to output LinearRings.
+ *
+ * @version 1.7
+ * @see WKTReader
+ */
+public class EWKTWriter
+{
+
+    /**
+     * Generates the WKT for a <tt>POINT</tt> specified by a {@link Coordinate}.
+     *
+     * @param p0
+     *            the point coordinate
+     *
+     * @return the WKT
+     */
+    public static String toPoint(Coordinate p0) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("POINT ( ");
+        builder.append(p0.x);
+        builder.append(" ");
+        builder.append(p0.y);
+        builder.append(" ");
+        if (!Double.isNaN(p0.z)) {
+            builder.append(p0.z);
+            builder.append(" ");
+        }
+        if (p0 instanceof MCoordinate) {
+            MCoordinate mCoord = (MCoordinate) p0;
+            if (!Double.isNaN(mCoord.m)) {
+                builder.append(mCoord.m);
+            }
+        }
+        builder.append(" )");
+        return builder.toString();
+    }
+
+    /**
+     * Generates the WKT for a <tt>LINESTRING</tt> specified by a
+     * {@link CoordinateSequence}.
+     *
+     * @param seq
+     *            the sequence to write
+     *
+     * @return the WKT string
+     */
+    public static String toLineString(CoordinateSequence seq) {
+        StringBuffer buf = new StringBuffer();
+        buf.append("LINESTRING ");
+        if (seq.size() == 0)
+            buf.append(" EMPTY");
+        else {
+            buf.append("(");
+            for (int i = 0; i < seq.size(); i++) {
+                if (i > 0)
+                    buf.append(", ");
+                if (seq instanceof MCoordinateSequence) {
+                    MCoordinateSequence mSeq = (MCoordinateSequence) seq;
+                    buf.append(mSeq.getX(i) + " " + mSeq.getY(i) + " "
+                        + mSeq.getCoordinate(i).getOrdinate(CoordinateSequence.Z) + " " + mSeq.getM(i));
+                } else {
+                    buf.append(seq.getX(i) + " " + seq.getY(i));
+                }
+            }
+            buf.append(")");
+        }
+        return buf.toString();
+    }
+
+    /**
+     * Generates the WKT for a <tt>LINESTRING</tt> specified by two
+     * {@link Coordinate}s.
+     *
+     * @param p0
+     *            the first coordinate
+     * @param p1
+     *            the second coordinate
+     *
+     * @return the WKT
+     */
+    public static String toLineString(Coordinate p0, Coordinate p1) {
+        if (p0 instanceof MCoordinate && p1 instanceof MCoordinate) {
+            MCoordinate mP0 = (MCoordinate) p0;
+            MCoordinate mP1 = (MCoordinate) p1;
+            return "LINESTRING ( " + mP0.x + " " + mP0.y + " " + mP0.z + " " + mP0.m + ", " + mP1.x + " " + mP1.y + " "
+                + mP1.z + " " + mP1.m + " )";
+        }
+        return "LINESTRING ( " + p0.x + " " + p0.y + ", " + p1.x + " " + p1.y + " )";
+    }
+
+  private static int INDENT = 2;
+
+    /**
+     * Creates the <code>DecimalFormat</code> used to write <code>double</code>s
+     * with a sufficient number of decimal places.
+     *
+     * @param precisionModel
+     *            the <code>PrecisionModel</code> used to determine
+     *            the number of decimal places to write.
+     * @return a <code>DecimalFormat</code> that write <code>double</code> s
+     *         without scientific notation.
+     */
+    private static DecimalFormat createFormatter(PrecisionModel precisionModel) {
+        // the default number of decimal places is 16, which is sufficient
+        // to accomodate the maximum precision of a double.
+        int decimalPlaces = precisionModel.getMaximumSignificantDigits();
+        // specify decimal separator explicitly to avoid problems in other
+        // locales
+        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
+        symbols.setDecimalSeparator('.');
+        String fmtString = "0" + (decimalPlaces > 0 ? "." : "") + stringOfChar('#', decimalPlaces);
+        return new DecimalFormat(fmtString, symbols);
+    }
+
+    /**
+     * Returns a <code>String</code> of repeated characters.
+     *
+     * @param ch
+     *            the character to repeat
+     * @param count
+     *            the number of times to repeat the character
+     * @return a <code>String</code> of characters
+     */
+    public static String stringOfChar(char ch, int count) {
+        StringBuffer buf = new StringBuffer();
+        for (int i = 0; i < count; i++) {
+            buf.append(ch);
+        }
+        return buf.toString();
+    }
+
+    private int outputDimension = 2;
+    private DecimalFormat formatter;
+    private boolean isFormatted = false;
+    private boolean useFormatting = false;
+    private int level = 0;
+    private int coordsPerLine = -1;
+    private String indentTabStr = "  ";
+    private boolean hashM;
+
+    /**
+     * Creates a new WKTWriter with default settings
+     */
+    public EWKTWriter() {
+    }
+
+    /**
+     * Creates a writer that writes {@link Geometry}s with
+     * the given output dimension (between 2 and 4).
+     * If the specified output dimension is 3 or 4, the Z or M value
+     * of coordinates will be written if it is present
+     * (i.e. if it is not <code>Double.NaN</code>).
+     *
+     * @param outputDimension
+     *            the coordinate dimension to output (between 2 and 4)
+     */
+    public EWKTWriter(int outputDimension) {
+        this(outputDimension, false);
+    }
+
+    /**
+     * Creates a writer that writes {@link Geometry}s with
+     * the given output dimension (between 2 and 4).
+     * If the specified output dimension is 3 or 4, the Z or M value
+     * of coordinates will be written if it is present
+     * (i.e. if it is not <code>Double.NaN</code>).
+     *
+     * @param outputDimension
+     *            the coordinate dimension to output (between 2 and 4)
+     */
+    public EWKTWriter(int outputDimension, boolean hashM) {
+        this.outputDimension = outputDimension;
+        if (!hashM && outputDimension == 4) {
+            throw new IllegalArgumentException("If output dimension is 4, must have M");
+        }
+        if (outputDimension < 2 || outputDimension > 4) {
+            throw new IllegalArgumentException("Invalid output dimension (must be between 2 and 4)");
+        }
+        this.hashM = hashM;
+    }
+
+    /**
+     * Sets whether the output will be formatted.
+     *
+     * @param isFormatted
+     *            true if the output is to be formatted
+     */
+    public void setFormatted(boolean isFormatted) {
+        this.isFormatted = isFormatted;
+    }
+
+    /**
+     * Sets the maximum number of coordinates per line
+     * written in formatted output.
+     * If the provided coordinate number is <= 0,
+     * coordinates will be written all on one line.
+     *
+     * @param coordsPerLine
+     *            the number of coordinates per line to output.
+     */
+    public void setMaxCoordinatesPerLine(int coordsPerLine) {
+        this.coordsPerLine = coordsPerLine;
+    }
+
+    /**
+     * Sets the tab size to use for indenting.
+     *
+     * @param size
+     *            the number of spaces to use as the tab string
+     * @throws IllegalArgumentException
+     *             if the size is non-positive
+     */
+    public void setTab(int size) {
+        if (size <= 0)
+            throw new IllegalArgumentException("Tab count must be positive");
+        this.indentTabStr = stringOfChar(' ', size);
+    }
+
+    /**
+     * Converts a <code>Geometry</code> to its Well-known Text representation.
+     *
+     * @param geometry
+     *            a <code>Geometry</code> to process
+     * @return a <Geometry Tagged Text> string (see the OpenGIS Simple
+     *         Features Specification)
+     */
+    public String write(Geometry geometry) {
+        Writer sw = new StringWriter();
+        try {
+            writeFormatted(geometry, isFormatted, sw);
+        } catch (IOException ex) {
+            Assert.shouldNeverReachHere();
+        }
+        return sw.toString();
+    }
+
+    /**
+     * Converts a <code>Geometry</code> to its Well-known Text representation.
+     *
+     * @param geometry
+     *            a <code>Geometry</code> to process
+     */
+    public void write(Geometry geometry, Writer writer) throws IOException {
+        writeFormatted(geometry, false, writer);
+    }
+
+    /**
+     * Same as <code>write</code>, but with newlines and spaces to make the
+     * well-known text more readable.
+     *
+     * @param geometry
+     *            a <code>Geometry</code> to process
+     * @return a <Geometry Tagged Text> string (see the OpenGIS Simple
+     *         Features Specification), with newlines and spaces
+     */
+    public String writeFormatted(Geometry geometry) {
+        Writer sw = new StringWriter();
+        try {
+            writeFormatted(geometry, true, sw);
+        } catch (IOException ex) {
+            Assert.shouldNeverReachHere();
+        }
+        return sw.toString();
+    }
+
+    /**
+     * Same as <code>write</code>, but with newlines and spaces to make the
+     * well-known text more readable.
+     *
+     * @param geometry
+     *            a <code>Geometry</code> to process
+     */
+    public void writeFormatted(Geometry geometry, Writer writer) throws IOException {
+        writeFormatted(geometry, true, writer);
+    }
+
+    /**
+     * Converts a <code>Geometry</code> to its Well-known Text representation.
+     *
+     * @param geometry
+     *            a <code>Geometry</code> to process
+     */
+    private void writeFormatted(Geometry geometry, boolean useFormatting, Writer writer) throws IOException {
+        this.useFormatting = useFormatting;
+        formatter = createFormatter(geometry.getPrecisionModel());
+        appendGeometryTaggedText(geometry, 0, writer);
+    }
+
+
+    /**
+     * Converts a <code>Geometry</code> to &lt;Geometry Tagged Text&gt; format,
+     * then appends it to the writer.
+     *
+     * @param geometry
+     *            the <code>Geometry</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendGeometryTaggedText(Geometry geometry, int level, Writer writer) throws IOException {
+        indent(level, writer);
+
+        if (geometry instanceof Point) {
+            Point point = (Point) geometry;
+            appendPointTaggedText(point.getCoordinate(), level, writer, point.getPrecisionModel());
+        } else if (geometry instanceof LinearRing) {
+            appendLinearRingTaggedText((LinearRing) geometry, level, writer);
+        } else if (geometry instanceof LineString) {
+            appendLineStringTaggedText((LineString) geometry, level, writer);
+        } else if (geometry instanceof Polygon) {
+            appendPolygonTaggedText((Polygon) geometry, level, writer);
+        } else if (geometry instanceof MultiPoint) {
+            appendMultiPointTaggedText((MultiPoint) geometry, level, writer);
+        } else if (geometry instanceof MultiLineString) {
+            appendMultiLineStringTaggedText((MultiLineString) geometry, level, writer);
+        } else if (geometry instanceof MultiPolygon) {
+            appendMultiPolygonTaggedText((MultiPolygon) geometry, level, writer);
+        } else if (geometry instanceof GeometryCollection) {
+            appendGeometryCollectionTaggedText((GeometryCollection) geometry, level, writer);
+        } else {
+            Assert.shouldNeverReachHere("Unsupported Geometry implementation:" + geometry.getClass());
+        }
+    }
+
+    /**
+     * Converts a <code>Coordinate</code> to &lt;Point Tagged Text&gt; format,
+     * then appends it to the writer.
+     *
+     * @param coordinate
+     *            the <code>Coordinate</code> to process
+     * @param writer
+     *            the output writer to append to
+     * @param precisionModel
+     *            the <code>PrecisionModel</code> to use to convert
+     *            from a precise coordinate to an external coordinate
+     */
+    private void appendPointTaggedText(Coordinate coordinate, int level, Writer writer, PrecisionModel precisionModel)
+        throws IOException {
+        writer.write("POINT ");
+        appendDimension(writer);
+        appendPointText(coordinate, level, writer, precisionModel);
+    }
+
+    /**
+     * Converts a <code>LineString</code> to &lt;LineString Tagged Text&gt;
+     * format, then appends it to the writer.
+     *
+     * @param lineString
+     *            the <code>LineString</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendLineStringTaggedText(LineString lineString, int level, Writer writer) throws IOException {
+        writer.write("LINESTRING ");
+        appendDimension(writer);
+        appendLineStringText(lineString, level, false, writer);
+    }
+
+  /**
+   *  Converts a <code>LinearRing</code> to &lt;LinearRing Tagged Text&gt;
+   *  format, then appends it to the writer.
+   *
+   *@param  linearRing  the <code>LinearRing</code> to process
+   *@param  writer      the output writer to append to
+   */
+  private void appendLinearRingTaggedText(LinearRing linearRing, int level, Writer writer)
+    throws IOException
+  {
+    writer.write("LINEARRING ");
+    appendDimension(writer);
+    appendLineStringText(linearRing, level, false, writer);
+  }
+
+  /**
+   *  Converts a <code>Polygon</code> to &lt;Polygon Tagged Text&gt; format,
+   *  then appends it to the writer.
+   *
+   *@param  polygon  the <code>Polygon</code> to process
+   *@param  writer   the output writer to append to
+   */
+  private void appendPolygonTaggedText(Polygon polygon, int level, Writer writer)
+    throws IOException
+  {
+    writer.write("POLYGON ");
+    appendDimension(writer);
+    appendPolygonText(polygon, level, false, writer);
+  }
+
+  /**
+   *  Converts a <code>MultiPoint</code> to &lt;MultiPoint Tagged Text&gt;
+   *  format, then appends it to the writer.
+   *
+   *@param  multipoint  the <code>MultiPoint</code> to process
+   *@param  writer      the output writer to append to
+   */
+  private void appendMultiPointTaggedText(MultiPoint multipoint, int level, Writer writer)
+    throws IOException
+  {
+    writer.write("MULTIPOINT ");
+    appendDimension(writer);
+    appendMultiPointText(multipoint, level, writer);
+  }
+
+    /**
+     * Converts a <code>MultiLineString</code> to &lt;MultiLineString Tagged
+     * Text&gt; format, then appends it to the writer.
+     *
+     * @param multiLineString
+     *            the <code>MultiLineString</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendMultiLineStringTaggedText(MultiLineString multiLineString, int level, Writer writer)
+        throws IOException {
+        writer.write("MULTILINESTRING ");
+        appendDimension(writer);
+        appendMultiLineStringText(multiLineString, level, false, writer);
+    }
+
+    /**
+     * Converts a <code>MultiPolygon</code> to &lt;MultiPolygon Tagged Text&gt;
+     * format, then appends it to the writer.
+     *
+     * @param multiPolygon
+     *            the <code>MultiPolygon</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendMultiPolygonTaggedText(MultiPolygon multiPolygon, int level, Writer writer) throws IOException {
+        writer.write("MULTIPOLYGON ");
+        appendDimension(writer);
+        appendMultiPolygonText(multiPolygon, level, writer);
+    }
+
+  /**
+   *  Converts a <code>GeometryCollection</code> to &lt;GeometryCollection
+   *  Tagged Text&gt; format, then appends it to the writer.
+   *
+   *@param  geometryCollection  the <code>GeometryCollection</code> to process
+   *@param  writer              the output writer to append to
+   */
+  private void appendGeometryCollectionTaggedText(GeometryCollection geometryCollection, int level,
+      Writer writer)
+    throws IOException
+  {
+    writer.write("GEOMETRYCOLLECTION ");
+    appendDimension(writer);
+    appendGeometryCollectionText(geometryCollection, level, writer);
+  }
+
+  /**
+   *  Converts a <code>Coordinate</code> to &lt;Point Text&gt; format, then
+   *  appends it to the writer.
+   *
+   *@param  coordinate      the <code>Coordinate</code> to process
+   *@param  writer          the output writer to append to
+   *@param  precisionModel  the <code>PrecisionModel</code> to use to convert
+   *      from a precise coordinate to an external coordinate
+   */
+    private void appendPointText(Coordinate coordinate, int level, Writer writer, PrecisionModel precisionModel)
+        throws IOException {
+        if (coordinate == null) {
+            writer.write("EMPTY");
+        } else {
+            writer.write("(");
+            appendCoordinate(coordinate, writer);
+            writer.write(")");
+        }
+    }
+
+  private void appendDimension(Writer writer) throws IOException {
+      switch (outputDimension) {
+    case 4:
+        writer.write("ZM ");
+        break;
+    case 3:
+        if(this.hashM) {
+            writer.write("M ");
+        } else {
+            writer.write("Z ");
+        }
+        break;
+    default:
+        break;
+    }
+  }
+
+//  /**
+//   * Appends the i'th coordinate from the sequence to the writer
+//   *
+//   * @param  seq  the <code>CoordinateSequence</code> to process
+//   * @param i     the index of the coordinate to write
+//   * @param  writer the output writer to append to
+//   */
+//    private void appendCoordinate(CoordinateSequence seq, int i, Writer writer) throws IOException {
+//        writer.write(writeNumber(seq.getX(i)) + " " + writeNumber(seq.getY(i)));
+//        if (outputDimension == 4 && seq.getDimension() == 4) {
+//            double z = seq.getOrdinate(i, 2);
+//            if (!Double.isNaN(z)) {
+//                writer.write(" ");
+//                writer.write(writeNumber(z));
+//            }
+//            double m = seq.getOrdinate(i, 3);
+//            if (!Double.isNaN(z)) {
+//                writer.write(" ");
+//                writer.write(writeNumber(m));
+//            }
+//
+//        } else if (outputDimension == 3 && seq.getDimension() == 3) {
+//            if (this.hashM) {
+//                double m = seq.getOrdinate(i, 2);
+//                if (!Double.isNaN(m)) {
+//                    writer.write(" ");
+//                    writer.write(writeNumber(m));
+//                }
+//            } else {
+//                double z = seq.getOrdinate(i, 2);
+//                if (!Double.isNaN(z)) {
+//                    writer.write(" ");
+//                    writer.write(writeNumber(z));
+//                }
+//            }
+//        }
+//    }
+
+  /**
+   *  Converts a <code>Coordinate</code> to <code>&lt;Point&gt;</code> format,
+   *  then appends it to the writer.
+   *
+   *@param  coordinate      the <code>Coordinate</code> to process
+   *@param  writer          the output writer to append to
+   */
+    private void appendCoordinate(Coordinate coordinate, Writer writer) throws IOException {
+        writer.write(writeNumber(coordinate.x) + " " + writeNumber(coordinate.y));
+        if (this.outputDimension == 3) {
+            if (hashM) {
+                double ord = coordinate.getOrdinate(3);
+                if (!Double.isNaN(ord)) {
+                    writer.write(" " + writeNumber(ord));
+                }
+            } else {
+                double ord = coordinate.getOrdinate(2);
+                if (!Double.isNaN(ord)) {
+                    writer.write(" " + writeNumber(ord));
+                }
+            }
+        }
+        if (this.outputDimension == 4) {
+            double ord = coordinate.getOrdinate(2);
+            if (!Double.isNaN(ord)) {
+                writer.write(" " + writeNumber(ord));
+            }
+            ord = coordinate.getOrdinate(3);
+            if (!Double.isNaN(ord)) {
+                writer.write(" " + writeNumber(ord));
+            }
+        }
+    }
+
+  /**
+   *  Converts a <code>double</code> to a <code>String</code>, not in scientific
+   *  notation.
+   *
+   *@param  d  the <code>double</code> to convert
+   *@return    the <code>double</code> as a <code>String</code>, not in
+   *      scientific notation
+   */
+  private String writeNumber(double d) {
+    return formatter.format(d);
+  }
+
+  /**
+   *  Converts a <code>LineString</code> to &lt;LineString Text&gt; format, then
+   *  appends it to the writer.
+   *
+   *@param  lineString  the <code>LineString</code> to process
+   *@param  writer      the output writer to append to
+   */
+  private void appendSequenceText(CoordinateSequence seq, int level, boolean doIndent, Writer writer)
+    throws IOException
+  {
+    if (seq.size() == 0) {
+      writer.write("EMPTY");
+    }
+    else {
+      if (doIndent) indent(level, writer);
+      writer.write("(");
+      for (int i = 0; i < seq.size(); i++) {
+        if (i > 0) {
+          writer.write(", ");
+          if (coordsPerLine > 0
+              && i % coordsPerLine == 0) {
+            indent(level + 1, writer);
+          }
+        }
+        appendCoordinate(seq.getCoordinate(i), writer);
+      }
+      writer.write(")");
+    }
+  }
+
+    /**
+     * Converts a <code>LineString</code> to &lt;LineString Text&gt; format,
+     * then
+     * appends it to the writer.
+     *
+     * @param lineString
+     *            the <code>LineString</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendLineStringText(LineString lineString, int level, boolean doIndent, Writer writer)
+        throws IOException {
+        if (lineString.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            if (doIndent) {
+                indent(level, writer);
+            }
+            writer.write("(");
+            for (int i = 0; i < lineString.getNumPoints(); i++) {
+                if (i > 0) {
+                    writer.write(", ");
+                    if (coordsPerLine > 0 && i % coordsPerLine == 0) {
+                        indent(level + 1, writer);
+                    }
+                }
+                appendCoordinate(lineString.getCoordinateN(i), writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    /**
+     * Converts a <code>Polygon</code> to &lt;Polygon Text&gt; format, then
+     * appends it to the writer.
+     *
+     * @param polygon
+     *            the <code>Polygon</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendPolygonText(Polygon polygon, int level, boolean indentFirst, Writer writer) throws IOException {
+        if (polygon.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            if (indentFirst) {
+                indent(level, writer);
+            }
+            writer.write("(");
+            appendLineStringText(polygon.getExteriorRing(), level, false, writer);
+            for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
+                writer.write(", ");
+                appendLineStringText(polygon.getInteriorRingN(i), level + 1, true, writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    /**
+     * Converts a <code>MultiPoint</code> to &lt;MultiPoint Text&gt; format,
+     * then
+     * appends it to the writer.
+     *
+     * @param multiPoint
+     *            the <code>MultiPoint</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendMultiPointText(MultiPoint multiPoint, int level, Writer writer) throws IOException {
+        if (multiPoint.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            writer.write("(");
+            for (int i = 0; i < multiPoint.getNumGeometries(); i++) {
+                if (i > 0) {
+                    writer.write(", ");
+                    indentCoords(i, level + 1, writer);
+                }
+                appendCoordinate(((Point) multiPoint.getGeometryN(i)).getCoordinate(), writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    /**
+     * Converts a <code>MultiLineString</code> to &lt;MultiLineString Text&gt;
+     * format, then appends it to the writer.
+     *
+     * @param multiLineString
+     *            the <code>MultiLineString</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendMultiLineStringText(MultiLineString multiLineString, int level, boolean indentFirst,
+        Writer writer) throws IOException {
+        if (multiLineString.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            int level2 = level;
+            boolean doIndent = indentFirst;
+            writer.write("(");
+            for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
+                if (i > 0) {
+                    writer.write(", ");
+                    level2 = level + 1;
+                    doIndent = true;
+                }
+                appendLineStringText((LineString) multiLineString.getGeometryN(i), level2, doIndent, writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    /**
+     * Converts a <code>MultiPolygon</code> to &lt;MultiPolygon Text&gt; format,
+     * then appends it to the writer.
+     *
+     * @param multiPolygon
+     *            the <code>MultiPolygon</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendMultiPolygonText(MultiPolygon multiPolygon, int level, Writer writer) throws IOException {
+        if (multiPolygon.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            int level2 = level;
+            boolean doIndent = false;
+            writer.write("(");
+            for (int i = 0; i < multiPolygon.getNumGeometries(); i++) {
+                if (i > 0) {
+                    writer.write(", ");
+                    level2 = level + 1;
+                    doIndent = true;
+                }
+                appendPolygonText((Polygon) multiPolygon.getGeometryN(i), level2, doIndent, writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    /**
+     * Converts a <code>GeometryCollection</code> to
+     * &lt;GeometryCollectionText&gt;
+     * format, then appends it to the writer.
+     *
+     * @param geometryCollection
+     *            the <code>GeometryCollection</code> to process
+     * @param writer
+     *            the output writer to append to
+     */
+    private void appendGeometryCollectionText(GeometryCollection geometryCollection, int level, Writer writer)
+        throws IOException {
+        if (geometryCollection.isEmpty()) {
+            writer.write("EMPTY");
+        } else {
+            int level2 = level;
+            writer.write("(");
+            for (int i = 0; i < geometryCollection.getNumGeometries(); i++) {
+                if (i > 0) {
+                    writer.write(", ");
+                    level2 = level + 1;
+                }
+                appendGeometryTaggedText(geometryCollection.getGeometryN(i), level2, writer);
+            }
+            writer.write(")");
+        }
+    }
+
+    private void indentCoords(int coordIndex, int level, Writer writer) throws IOException {
+        if (coordsPerLine <= 0 || coordIndex % coordsPerLine != 0)
+            return;
+        indent(level, writer);
+    }
+
+    private void indent(int level, Writer writer) throws IOException {
+        if (!useFormatting || level <= 0)
+            return;
+        writer.write("\n");
+        for (int i = 0; i < level; i++) {
+            writer.write(indentTabStr);
+        }
+    }
+
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/ToWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/ToWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkt/ToWKT.java	(revision 46118)
@@ -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.geom.jts.operation.towkt;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+public class ToWKT extends GeometryOperation {
+    public static final String NAME = "toWKT";
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+	private static EWKTWriter writer = new EWKTWriter();
+
+	public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
+	        return writer.write(((GeometryJTS)geom).getJTS());
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/WKTParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/WKTParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/WKTParser.java	(revision 46118)
@@ -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.jts.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));
+  } */
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/EWKTParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/EWKTParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/EWKTParser.java	(revision 46118)
@@ -0,0 +1,1130 @@
+/*
+ * $Id$
+ *
+ * This file is an adapted version of the JTS WKTReader. It has
+ * been extended by Martin Steinwender to deal with Measured coordinates.
+ *
+ * Original copyright notice:
+ *
+ * The JTS Topology Suite is a collection of Java classes that
+ * implement the fundamental operations required to validate a given
+ * geo-spatial data set to a known topological specification.
+ *
+ * Copyright (C) 2001 Vivid Solutions
+ *
+ * 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; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * 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
+ *
+ * For more information, contact:
+ *
+ *     Vivid Solutions
+ *     Suite #1A
+ *     2328 Government Street
+ *     Victoria BC  V8T 5G5
+ *     Canada
+ *
+ *     (250)385-6040
+ *     www.vividsolutions.com
+ */
+
+
+package org.gvsig.fmap.geom.jts.operation.fromwkt;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.util.ArrayList;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.PrecisionModel;
+import com.vividsolutions.jts.io.ParseException;
+import com.vividsolutions.jts.io.WKTWriter;
+import com.vividsolutions.jts.util.Assert;
+
+import org.hibernate.spatial.jts.mgeom.MGeometryFactory;
+
+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.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.jts.MCoordinate;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Converts a geometry in EWKT to a JTS-Geometry.
+ * <p/>
+ * <code>EWKTReader</code> supports
+ * extracting <code>Geometry</code> objects from either {@link java.io.Reader}s or
+ * {@link String}s. 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/>
+ * 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>
+ * determines the <code>PrecisionModel</code> and <code>SRID</code> that is
+ * used. <P>
+ * <p/>
+ * The <code>WKTReader</code> converts all input numbers to the precise
+ * internal representation.
+ * <p/>
+ * <h3>Notes:</h3>
+ * <ul>
+ * <li>The reader supports non-standard "LINEARRING" tags.
+ * <li>The reader uses Double.parseDouble to perform the conversion of ASCII
+ * numbers to floating point.  This means it supports the Java
+ * syntax for floating point literals (including scientific notation).
+ * </ul>
+ * <p/>
+ * <h3>Syntax</h3>
+ * The following syntax specification describes the version of Well-Known Text
+ * supported by JTS.
+ * (The specification uses a syntax language similar to that used in
+ * the C and Java language specifications.)
+ * <p/>
+ * <p/>
+ * <blockquote><pre>
+ * <i>WKTGeometry:</i> one of<i>
+ * <p/>
+ *       WKTPoint  WKTLineString  WKTLinearRing  WKTPolygon
+ *       WKTMultiPoint  WKTMultiLineString  WKTMultiPolygon
+ *       WKTGeometryCollection</i>
+ * <p/>
+ * <i>WKTPoint:</i> <b>POINT ( </b><i>Coordinate</i> <b>)</b>
+ * <p/>
+ * <i>WKTLineString:</i> <b>LINESTRING</b> <i>CoordinateSequence</i>
+ * <p/>
+ * <i>WKTLinearRing:</i> <b>LINEARRING</b> <i>CoordinateSequence</i>
+ * <p/>
+ * <i>WKTPolygon:</i> <b>POLYGON</b> <i>CoordinateSequenceList</i>
+ * <p/>
+ * <i>WKTMultiPoint:</i> <b>MULTIPOINT</b> <i>CoordinateSequence</i>
+ * <p/>
+ * <i>WKTMultiLineString:</i> <b>MULTILINESTRING</b> <i>CoordinateSequenceList</i>
+ * <p/>
+ * <i>WKTMultiPolygon:</i>
+ *         <b>MULTIPOLYGON (</b> <i>CoordinateSequenceList {</i> , <i>CoordinateSequenceList }</i> <b>)</b>
+ * <p/>
+ * <i>WKTGeometryCollection: </i>
+ *         <b>GEOMETRYCOLLECTION (</b> <i>WKTGeometry {</i> , <i>WKTGeometry }</i> <b>)</b>
+ * <p/>
+ * <i>CoordinateSequenceList:</i>
+ *         <b>(</b> <i>CoordinateSequence {</i> <b>,</b> <i>CoordinateSequence }</i> <b>)</b>
+ * <p/>
+ * <i>CoordinateSequence:</i>
+ *         <b>(</b> <i>Coordinate {</i> , <i>Coordinate }</i> <b>)</b>
+ * <p/>
+ * <i>Coordinate:
+ *         Number Number Number<sub>opt</sub></i>
+ * <p/>
+ * <i>Number:</i> A Java-style floating-point number
+ * <p/>
+ * </pre></blockquote>
+ *
+ * @see WKTWriter
+ */
+public class EWKTParser {
+    private static final String EMPTY = "EMPTY";
+    private static final String COMMA = ",";
+    private static final String L_PAREN = "(";
+    private static final String R_PAREN = ")";
+    private static final String EQUALS = "=";
+    private static final String SEMICOLON = ";";
+
+    private static final String Z = "Z";
+    private static final String ZM = "ZM";
+    private static final String M = "M";
+
+    private GeometryFactory geometryFactory;
+    private PrecisionModel precisionModel;
+    private StreamTokenizer tokenizer;
+
+    private int dimension = -1;
+    private Boolean hasM = null;
+
+    private GeometryManager manager = GeometryLocator.getGeometryManager();
+
+
+    /**
+     * Creates a reader that creates objects using the default {@link GeometryFactory}.
+     */
+    public EWKTParser() {
+        this(new MGeometryFactory());
+    }
+
+    /**
+     * Creates a reader that creates objects using the given
+     * {@link GeometryFactory}.
+     *
+     * @param geometryFactory the factory used to create <code>Geometry</code>s.
+     */
+    public EWKTParser(GeometryFactory geometryFactory) {
+        this.geometryFactory = geometryFactory;
+        precisionModel = geometryFactory.getPrecisionModel();
+    }
+
+    /**
+     * Reads a Well-Known Text representation of a {@link com.vividsolutions.jts.geom.Geometry}
+     * from a {@link String}.
+     *
+     * @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 com.vividsolutions.jts.io.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();
+        }
+    }
+
+    /**
+     * Reads a Well-Known Text representation of a {@link Geometry}
+     * from a {@link java.io.Reader}.
+     *
+     * @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 {
+
+        try {
+
+            synchronized (this) {
+                if (this.tokenizer != null) {
+                    throw new RuntimeException("EWKT-Reader is already in use.");
+                }
+                tokenizer = new StreamTokenizer(reader);
+            }
+
+            // set tokenizer to NOT parse numbers
+            tokenizer.resetSyntax();
+            tokenizer.wordChars('a', 'z');
+            tokenizer.wordChars('A', 'Z');
+            tokenizer.wordChars(128 + 32, 255);
+            tokenizer.wordChars('0', '9');
+            tokenizer.wordChars('-', '-');
+            tokenizer.wordChars('+', '+');
+            tokenizer.wordChars('.', '.');
+            tokenizer.whitespaceChars(0, ' ');
+            tokenizer.commentChar('#');
+
+            this.hasM = null;
+            this.dimension = -1;
+
+            return readGeometryTaggedText();
+
+        } catch (IOException | CreateGeometryException e) {
+            throw new ParseException(e.toString());
+        } finally {
+            this.tokenizer = null;
+        }
+    }
+
+    /**
+     * 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 L_PAREN (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 MCoordinate[] getCoordinates()
+            throws IOException, ParseException {
+        String nextToken = getNextEmptyOrOpenerOrDimension();
+        if (nextToken.equals(EMPTY)) {
+            return new MCoordinate[]{};
+        }
+        if (nextToken.equals(Z)) {
+            this.dimension = 3;
+            setHasM(false);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return new MCoordinate[]{};
+            }
+        }
+        if (nextToken.equals(M)) {
+            this.dimension = 3;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return new MCoordinate[]{};
+            }
+        }
+        if (nextToken.equals(ZM)) {
+            this.dimension = 4;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return new MCoordinate[]{};
+            }
+        }
+
+        ArrayList coordinates = new ArrayList();
+        coordinates.add(getPreciseCoordinate());
+        nextToken = getNextCloserOrComma();
+        while (nextToken.equals(COMMA)) {
+            coordinates.add(getPreciseCoordinate());
+            nextToken = getNextCloserOrComma();
+        }
+        return (MCoordinate[]) coordinates.toArray(new MCoordinate[coordinates.size()]);
+    }
+
+    /**
+     * gets the next Coordinate and checks dimension
+     *
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private Coordinate getPreciseCoordinate()
+            throws IOException, ParseException {
+        MCoordinate coord = new MCoordinate();
+        coord.x = getNextNumber();
+        coord.y = getNextNumber();
+
+        Double thirdOrdinateValue = null;
+        Double fourthOrdinateValue = null;
+
+        if (this.dimension == 3) {
+            thirdOrdinateValue = getNextNumber();
+        } else if (this.dimension == 4) {
+            thirdOrdinateValue = getNextNumber();
+            fourthOrdinateValue = getNextNumber();
+        } else if (this.dimension < 0) {
+            if (isNumberNext()) thirdOrdinateValue = getNextNumber();
+            if (isNumberNext()) fourthOrdinateValue = getNextNumber();
+
+            if (fourthOrdinateValue != null) {
+                this.dimension = 4;
+                setHasM(true);
+            } else if (thirdOrdinateValue != null) {
+                this.dimension = 3;
+                setHasM(Boolean.TRUE.equals(this.hasM));
+            } else {
+                this.dimension = 2;
+                setHasM(false);
+            }
+        }
+
+        switch (this.dimension) {
+            case 2:
+                break;
+            case 3:
+                if (this.hasM) {
+                    coord.m = thirdOrdinateValue;
+                } else {
+                    coord.z = thirdOrdinateValue;
+                }
+                break;
+            case 4:
+                if (this.hasM) {
+                    coord.z = thirdOrdinateValue;
+                    coord.m = fourthOrdinateValue;
+                } else {
+                    throw new ParseException("Unsupported geometry dimension.");
+                }
+                break;
+            default:
+                throw new ParseException("Unsupported geometry dimension.");
+        }
+
+        precisionModel.makePrecise(coord);
+        return coord;
+    }
+
+
+    private boolean isNumberNext() throws IOException {
+        int type = tokenizer.nextToken();
+        tokenizer.pushBack();
+        return type == StreamTokenizer.TT_WORD;
+    }
+
+    /**
+     * Parses the next number in the stream.
+     * Numbers with exponents are handled.
+     *
+     * @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 valid number
+     * @throws IOException    if an I/O error occurs
+     */
+    private double getNextNumber() throws IOException,
+            ParseException {
+        int type = tokenizer.nextToken();
+        switch (type) {
+            case StreamTokenizer.TT_WORD: {
+                try {
+                    return Double.parseDouble(tokenizer.sval);
+                }
+                catch (NumberFormatException ex) {
+                    throw new ParseException("Invalid number: " + tokenizer.sval);
+                }
+            }
+        }
+        parseError("number");
+        return 0.0;
+    }
+
+    /**
+     * Returns the next EMPTY or L_PAREN 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 L_PAREN.
+     * @return the next EMPTY or L_PAREN in the stream as uppercase
+     *         text.
+     * @throws ParseException if the next token is not EMPTY or L_PAREN
+     * @throws IOException    if an I/O error occurs
+     */
+    private String getNextEmptyOrOpener() throws IOException, ParseException {
+        String nextWord = getNextWord();
+        if (nextWord.equals(EMPTY) || nextWord.equals(L_PAREN)) {
+            return nextWord;
+        }
+        parseError(EMPTY + " or " + L_PAREN);
+        return null;
+    }
+
+    /**
+     * Returns the next EMPTY, L_PAREN, Z or ZM 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 L_PAREN.
+     * @return the next EMPTY or L_PAREN in the stream as uppercase
+     *         text.
+     * @throws ParseException if the next token is not EMPTY or L_PAREN
+     * @throws IOException    if an I/O error occurs
+     */
+    private String getNextEmptyOrOpenerOrDimension() throws IOException, ParseException {
+        String nextWord = getNextWord();
+        if (nextWord.equals(EMPTY) || nextWord.equals(L_PAREN) || nextWord.equalsIgnoreCase(Z) || nextWord.equalsIgnoreCase(M) || nextWord.equalsIgnoreCase(ZM)) {
+            return nextWord;
+        }
+        parseError(EMPTY + " or " + L_PAREN + " or " + Z + " or " + M + " or " + ZM + " or ");
+        return null;
+    }
+
+    /**
+     * Returns the next R_PAREN or COMMA in the stream.
+     *
+     * @param tokenizer tokenizer over a stream of text in Well-known Text
+     *                  format. The next token must be R_PAREN or COMMA.
+     * @return the next R_PAREN or COMMA in the stream
+     * @throws ParseException if the next token is not R_PAREN or COMMA
+     * @throws IOException    if an I/O error occurs
+     */
+    private String getNextCloserOrComma() throws IOException, ParseException {
+        String nextWord = getNextWord();
+        if (nextWord.equals(COMMA) || nextWord.equals(R_PAREN)) {
+            return nextWord;
+        }
+        parseError(COMMA + " or " + R_PAREN);
+        return null;
+    }
+
+    /**
+     * Returns the next R_PAREN in the stream.
+     *
+     * @param tokenizer tokenizer over a stream of text in Well-known Text
+     *                  format. The next token must be R_PAREN.
+     * @return the next R_PAREN in the stream
+     * @throws ParseException if the next token is not R_PAREN
+     * @throws IOException    if an I/O error occurs
+     */
+    private String getNextCloser() throws IOException, ParseException {
+        String nextWord = getNextWord();
+        if (nextWord.equals(R_PAREN)) {
+            return nextWord;
+        }
+        parseError(R_PAREN);
+        return null;
+    }
+
+    /**
+     * Returns the next R_PAREN in the stream.
+     *
+     * @param tokenizer tokenizer over a stream of text in Well-known Text
+     *                  format. The next token must be R_PAREN.
+     * @return the next R_PAREN in the stream
+     * @throws ParseException if the next token is not R_PAREN
+     * @throws IOException    if an I/O error occurs
+     */
+    private int getSRID() throws IOException, ParseException {
+        if (!getNextWord().equals(EQUALS)) {
+            parseError(EQUALS);
+            return 0;
+        }
+        int srid = Integer.parseInt(getNextWord());
+        if (!getNextWord().equals(SEMICOLON)) {
+            parseError(SEMICOLON);
+            return 0;
+        }
+        return srid;
+    }
+
+    /**
+     * Returns the next word in the stream.
+     *
+     * @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() throws IOException, ParseException {
+        int type = tokenizer.nextToken();
+        switch (type) {
+            case StreamTokenizer.TT_WORD:
+
+                String word = tokenizer.sval;
+                if (word.equalsIgnoreCase(EMPTY))
+                    return EMPTY;
+                return word;
+
+            case '(':
+                return L_PAREN;
+            case ')':
+                return R_PAREN;
+            case ',':
+                return COMMA;
+            case '=':
+                return EQUALS;
+            case ';':
+                return SEMICOLON;
+        }
+        parseError("word");
+        return null;
+    }
+
+    /**
+     * Throws a formatted ParseException for the current token.
+     *
+     * @param expected a description of what was expected
+     * @throws ParseException
+     * @throws com.vividsolutions.jts.util.AssertionFailedException
+     *                        if an invalid token is encountered
+     */
+    private void parseError(String expected)
+            throws ParseException {
+        // throws Asserts for tokens that should never be seen
+        if (tokenizer.ttype == StreamTokenizer.TT_NUMBER)
+            Assert.shouldNeverReachHere("Unexpected NUMBER token");
+        if (tokenizer.ttype == StreamTokenizer.TT_EOL)
+            Assert.shouldNeverReachHere("Unexpected EOL token");
+
+        String tokenStr = tokenString();
+        throw new ParseException("Expected " + expected + " but found " + tokenStr);
+    }
+
+    /**
+     * Gets a description of the current token
+     *
+     * @return a description of the current token
+     */
+    private String tokenString() {
+        switch (tokenizer.ttype) {
+            case StreamTokenizer.TT_NUMBER:
+                return "<NUMBER>";
+            case StreamTokenizer.TT_EOL:
+                return "End-of-Line";
+            case StreamTokenizer.TT_EOF:
+                return "End-of-Stream";
+            case StreamTokenizer.TT_WORD:
+                return "'" + tokenizer.sval + "'";
+        }
+        return "'" + (char) tokenizer.ttype + "'";
+    }
+
+    /**
+     * 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() throws IOException, ParseException, CreateGeometryException {
+
+        String type = null;
+        Geometry geom;
+
+        int srid = geometryFactory.getSRID();
+
+        try {
+            String firstWord = getNextWord();
+            if ("SRID".equals(firstWord)) {
+                srid = getSRID();
+                type = getNextWord();
+            } else {
+                type = firstWord;
+            }
+        } catch (IOException e) {
+            return null;
+        } catch (ParseException e) {
+            return null;
+        }
+
+        if (type.equals("POINT")) {
+            geom = readPointText();
+        } else if (type.equals("POINTZ")) {
+            this.dimension = 3;
+            geom = readPointText();
+        } else if (type.equals("POINTM")) {
+            setHasM(true);
+            geom = readPointText();
+        } else if (type.equals("POINTZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readPointText();
+        } else if (type.equalsIgnoreCase("LINESTRING")) {
+            geom = readLineStringText();
+        } else if (type.equalsIgnoreCase("LINESTRINGZ")) {
+            this.dimension = 3;
+            geom = readLineStringText();
+        } else if (type.equalsIgnoreCase("LINESTRINGM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readLineStringText();
+        } else if (type.equalsIgnoreCase("LINESTRINGZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readLineStringText();
+        } else if (type.equalsIgnoreCase("LINEARRING")) {
+            geom = readLinearRingText();
+        } else if (type.equalsIgnoreCase("LINEARRINGZ")) {
+            this.dimension = 3;
+            geom = readLinearRingText();
+        } else if (type.equalsIgnoreCase("LINEARRINGM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readLinearRingText();
+        } else if (type.equalsIgnoreCase("LINEARRINGZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readLinearRingText();
+        } else if (type.equalsIgnoreCase("POLYGON")) {
+            geom = readPolygonText();
+        } else if (type.equalsIgnoreCase("POLYGONZ")) {
+            this.dimension = 3;
+            geom = readPolygonText();
+        } else if (type.equalsIgnoreCase("POLYGONM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readPolygonText();
+//            throw new RuntimeException("PolygonM is not supported.");
+        } else if (type.equalsIgnoreCase("POLYGONZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readPolygonText();
+//            throw new RuntimeException("PolygonM is not supported.");
+        } else if (type.equalsIgnoreCase("MULTIPOINT")) {
+            geom = readMultiPointText();
+        } else if (type.equalsIgnoreCase("MULTIPOINTZ")) {
+            this.dimension = 3;
+            geom = readMultiPointText();
+        } else if (type.equalsIgnoreCase("MULTIPOINTM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readMultiPointText();
+        } else if (type.equalsIgnoreCase("MULTIPOINTZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readMultiPointText();
+        } else if (type.equalsIgnoreCase("MULTILINESTRING")) {
+            geom = readMultiLineStringText();
+        } else if (type.equalsIgnoreCase("MULTILINESTRINGZ")) {
+            this.dimension = 3;
+            geom = readMultiLineStringText();
+        } else if (type.equalsIgnoreCase("MULTILINESTRINGM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readMultiLineStringText();
+        } else if (type.equalsIgnoreCase("MULTILINESTRINGZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readMultiLineStringText();
+        } else if (type.equalsIgnoreCase("MULTIPOLYGON")) {
+            geom = readMultiPolygonText();
+        } else if (type.equalsIgnoreCase("MULTIPOLYGONZ")) {
+            this.dimension = 3;
+            geom = readMultiPolygonText();
+        } else if (type.equalsIgnoreCase("MULTIPOLYGONM")) {
+            setHasM(true);
+            this.dimension = 3;
+            geom = readMultiPolygonText();
+        } else if (type.equalsIgnoreCase("MULTIPOLYGONZM")) {
+            setHasM(true);
+            this.dimension = 4;
+            geom = readMultiPolygonText();
+//            throw new RuntimeException("MultiPolygonM is not supported.");
+//        } else if (type.equalsIgnoreCase("GEOMETRYCOLLECTION")) {
+//            geom = readGeometryCollectionText();
+//        } else if (type.equalsIgnoreCase("GEOMETRYCOLLECTIONM")) {
+//            setHasM(true);
+//            geom = readGeometryCollectionText();
+        } else {
+            throw new ParseException("Unknown geometry type: " + type);
+        }
+//        geom.setSRID(srid);
+
+        return geom;
+    }
+
+    /**
+     * m-values sicherstellen
+     *
+     * @throws ParseException
+     */
+    private void setHasM(boolean hasM) throws ParseException {
+        if (this.hasM == null) {
+            this.hasM = hasM;
+        } else if (this.hasM != hasM) {
+            throw new ParseException("Inkonsistent use of m-values.");
+        }
+    }
+
+    /**
+     * 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 LocatorException
+     * @throws CreateGeometryException
+     */
+    private Point readPointText() throws IOException, ParseException, CreateGeometryException {
+
+        String nextToken = getNextEmptyOrOpenerOrDimension();
+        if (nextToken.equals(EMPTY)) {
+            return (Point)manager.create(TYPES.POINT, this.getSubtype());
+        }
+        if (nextToken.equals(Z)) {
+            this.dimension = 3;
+            setHasM(false);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Point)manager.create(TYPES.POINT, this.getSubtype());
+            }
+
+        }else if (nextToken.equals(M)) {
+            this.dimension = 3;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Point)manager.create(TYPES.POINT, this.getSubtype());
+            }
+
+        }else if (nextToken.equals(ZM)) {
+            this.dimension = 4;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Point)manager.create(TYPES.POINT, this.getSubtype());
+            }
+
+        }
+
+        int subtype = this.getSubtype();
+        Coordinate coordinates = getPreciseCoordinate();
+        Point point = (Point)manager.create(TYPES.POINT, subtype);
+        fillPoint(subtype, coordinates, point);
+        getNextCloser();
+        return point;
+    }
+
+    /**
+     * @param subtype
+     * @param coordinates
+     * @param point
+     */
+    private void fillPoint(int subtype, Coordinate coordinates, Point point) {
+        point.setX(coordinates.x);
+        point.setY(coordinates.y);
+        if (subtype == Geometry.SUBTYPES.GEOM2DM) {
+            point.setCoordinateAt(2, coordinates.getOrdinate(3));
+        } else if (subtype == Geometry.SUBTYPES.GEOM3DM) {
+            point.setCoordinateAt(2, coordinates.getOrdinate(2));
+            point.setCoordinateAt(3, coordinates.getOrdinate(3));
+        } else if (subtype == Geometry.SUBTYPES.GEOM3D) {
+            point.setCoordinateAt(2, coordinates.getOrdinate(2));
+        }
+    }
+
+    /**
+     * @return
+     */
+    private int getSubtype() {
+        int subtype;
+        switch (this.dimension) {
+        case 4:
+            subtype = SUBTYPES.GEOM3DM;
+            break;
+        case 3:
+            if(this.hasM){
+                subtype = SUBTYPES.GEOM2DM;
+            } else {
+                subtype = SUBTYPES.GEOM3D;
+            }
+            break;
+        default:
+            subtype = SUBTYPES.GEOM2D;
+        }
+        return subtype;
+    }
+
+    /**
+     * 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
+     */
+    private Line readLineStringText() throws IOException, ParseException, CreateGeometryException {
+
+        MCoordinate[] coords = getCoordinates();
+        Line line = (Line) manager.create(TYPES.LINE, getSubtype());
+
+        int subtype = this.getSubtype();
+        for(int i=0; i<coords.length; i++){
+            Point point = (Point)manager.create(TYPES.POINT, getSubtype());
+            fillPoint(subtype, coords[i], point);
+            line.addVertex(point);
+        }
+        return line;
+    }
+
+    /**
+     * 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 CreateGeometryException
+     */
+    private Ring readLinearRingText()
+            throws IOException, ParseException, CreateGeometryException {
+        MCoordinate[] coords = getCoordinates();
+        int subtype = getSubtype();
+        Ring ring = (Ring) manager.create(TYPES.RING, subtype);
+        for (int i=0; i < coords.length; i++)
+        {
+            Point point = (Point)manager.create(TYPES.POINT, subtype);
+            fillPoint(subtype, coords[i], point);
+            ring.addVertex(point);
+        }
+        return ring;
+    }
+
+    /**
+     * 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 CreateGeometryException
+     */
+    private MultiPoint readMultiPointText() throws IOException, ParseException, CreateGeometryException {
+        MCoordinate[] coords = getCoordinates();
+        int subtype = getSubtype();
+        MultiPoint multiPoint = (MultiPoint)manager.create(TYPES.MULTIPOINT, subtype);
+        for (int i=0; i < coords.length; i++)
+        {
+            Point point = (Point)manager.create(TYPES.POINT, subtype);
+            fillPoint(subtype, coords[i], point);
+            multiPoint.addPoint(point);
+        }
+        return multiPoint;
+    }
+
+    /**
+     * Creates an array of <code>Point</code>s having the given <code>Coordinate</code>
+     * s.
+     *
+     * @param coordinates the <code>Coordinate</code>s with which to create the
+     *                    <code>Point</code>s
+     * @return <code>Point</code>s created using this <code>WKTReader</code>
+     *         s <code>GeometryFactory</code>
+     */
+    private Point[] toPoints(Coordinate[] coordinates) {
+        ArrayList points = new ArrayList();
+        for (int i = 0; i < coordinates.length; i++) {
+            points.add(geometryFactory.createPoint(coordinates[i]));
+        }
+        return (Point[]) points.toArray(new Point[]{});
+    }
+
+    /**
+     * Creates a <code>Polygon</code> using the next token in the stream.
+     *
+     * @param hasM
+     * @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 CreateGeometryException
+     */
+    private Polygon readPolygonText() throws IOException, ParseException, CreateGeometryException {
+
+
+//        // PolygonM is not supported
+//        setHasM(false);
+//
+        String nextToken = getNextEmptyOrOpenerOrDimension();
+        if (nextToken.equals(EMPTY)) {
+            return (Polygon) manager.create(TYPES.POLYGON, getSubtype());
+        }
+        if (nextToken.equals(Z)) {
+            this.dimension = 3;
+            setHasM(false);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Polygon) manager.create(TYPES.POLYGON, getSubtype());
+            }
+        }
+        if (nextToken.equals(M)) {
+            this.dimension = 3;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Polygon) manager.create(TYPES.POLYGON, getSubtype());
+            }
+        }
+        if (nextToken.equals(ZM)) {
+            this.dimension = 4;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (Polygon) manager.create(TYPES.POLYGON, getSubtype());
+            }
+        }
+
+        Polygon polygon = (Polygon) manager.create(TYPES.POLYGON, getSubtype());
+
+        ArrayList holes = new ArrayList();
+        Ring shell = readLinearRingText();
+        for (int i = 0; i < shell.getNumVertices(); i++) {
+            polygon.addVertex(shell.getVertex(i));
+        }
+
+        nextToken = getNextCloserOrComma();
+        while (nextToken.equals(COMMA)) {
+            Ring hole = readLinearRingText();
+            polygon.addInteriorRing(hole);
+            nextToken = getNextCloserOrComma();
+        }
+        return polygon;
+    }
+
+    /**
+     * Creates a <code>MultiLineString</code> using the next token in the stream.
+     *
+     * @param hasM
+     * @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 CreateGeometryException
+     */
+    private MultiLine readMultiLineStringText() throws IOException, ParseException, CreateGeometryException {
+
+         MultiLine multiline = (MultiLine)manager.create(TYPES.MULTILINE, getSubtype());
+
+         String nextToken = getNextEmptyOrOpenerOrDimension();
+         if (nextToken.equals(EMPTY)) {
+             return multiline;
+         }
+         if (nextToken.equals(Z)) {
+             this.dimension = 3;
+             setHasM(false);
+             nextToken = getNextEmptyOrOpener();
+             if (nextToken.equals(EMPTY)) {
+                 return (MultiLine)manager.create(TYPES.MULTILINE, getSubtype());
+             }
+
+         }
+         if (nextToken.equals(M)) {
+             this.dimension = 3;
+             setHasM(true);
+             nextToken = getNextEmptyOrOpener();
+             if (nextToken.equals(EMPTY)) {
+                 return (MultiLine)manager.create(TYPES.MULTILINE, getSubtype());
+             }
+         }
+         if (nextToken.equals(ZM)) {
+             this.dimension = 4;
+             setHasM(true);
+             nextToken = getNextEmptyOrOpener();
+             if (nextToken.equals(EMPTY)) {
+                 return (MultiLine)manager.create(TYPES.MULTILINE, getSubtype());
+             }
+         }
+
+        Line line = readLineStringText();
+        if(line!=null){
+            multiline.addCurve(line);
+        }
+        nextToken = getNextCloserOrComma();
+        while (nextToken.equals(COMMA)) {
+            line = readLineStringText();
+            if(line!=null){
+                multiline.addCurve(line);
+            }
+            nextToken = getNextCloserOrComma();
+        }
+
+        return multiline;
+    }
+
+    /**
+     * Creates a <code>MultiPolygon</code> using the next token in the stream.
+     *
+     * @param hasM
+     * @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
+     */
+    private MultiPolygon readMultiPolygonText()
+            throws IOException, ParseException, CreateGeometryException {
+
+        // MultiPolygonM is not supported
+//        setHasM(false);
+        MultiPolygon multiPolygon = (MultiPolygon)manager.create(TYPES.MULTIPOLYGON, getSubtype());
+
+        String nextToken = getNextEmptyOrOpenerOrDimension();
+        if (nextToken.equals(EMPTY)) {
+            return multiPolygon;
+        }
+        if (nextToken.equals(Z)) {
+            this.dimension = 3;
+            setHasM(false);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (MultiPolygon)manager.create(TYPES.MULTIPOLYGON, getSubtype());
+            }
+}
+        if (nextToken.equals(M)) {
+            this.dimension = 3;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (MultiPolygon)manager.create(TYPES.MULTIPOLYGON, getSubtype());
+            }
+        }
+        if (nextToken.equals(ZM)) {
+            this.dimension = 4;
+            setHasM(true);
+            nextToken = getNextEmptyOrOpener();
+            if (nextToken.equals(EMPTY)) {
+                return (MultiPolygon)manager.create(TYPES.MULTIPOLYGON, getSubtype());
+            }
+        }
+
+        Polygon polygon = readPolygonText();
+
+        multiPolygon.addSurface(polygon);
+        nextToken = getNextCloserOrComma();
+        while (nextToken.equals(COMMA)) {
+            polygon = readPolygonText();
+            multiPolygon.addSurface(polygon);
+            nextToken = getNextCloserOrComma();
+        }
+        return multiPolygon;
+    }
+
+    /**
+     * 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
+     */
+//    private GeometryCollection readGeometryCollectionText()
+//            throws IOException, ParseException {
+//
+//        String nextToken = getNextEmptyOrOpener();
+//        if (nextToken.equals(EMPTY)) {
+//            return geometryFactory.createGeometryCollection(new Geometry[]{});
+//        }
+//        ArrayList geometries = new ArrayList();
+//        Geometry geometry = readGeometryTaggedText();
+//        geometries.add(geometry);
+//        nextToken = getNextCloserOrComma();
+//        while (nextToken.equals(COMMA)) {
+//            geometry = readGeometryTaggedText();
+//            geometries.add(geometry);
+//            nextToken = getNextCloserOrComma();
+//        }
+//        Geometry[] array = new Geometry[geometries.size()];
+//        return geometryFactory.createGeometryCollection((Geometry[]) geometries.toArray(array));
+//    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/FromWKT.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/FromWKT.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkt/FromWKT.java	(revision 46118)
@@ -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.jts.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 org.gvsig.fmap.geom.operation.fromwkt.FromWKTGeometryOperationContext;
+
+/**
+ * @author jmvivo
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FromWKT extends GeometryOperation {
+
+    public static final String NAME = GeometryManager.OPERATIONS.FROMWKT;
+    public static final int CODE = GeometryLocator.getGeometryManager().
+            getGeometryOperationCode(NAME);
+
+    //  WKTParser parser;
+//    private EWKTParser parser;
+
+    public FromWKT() {
+//        this.parser = new WKTParser();
+//        this.parser = new EWKTParser();
+    }
+    
+    @Override
+    public int getOperationIndex() {
+        return CODE;
+    }
+
+    @Override
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+        try {
+            String wkt = (String) ctx.getAttribute(FromWKTGeometryOperationContext.TEXT);
+            EWKTParser parser = new EWKTParser();
+            Geometry g = parser.read(wkt);
+            return g;
+        } catch (Exception e) {
+            int type = geom == null ? Geometry.TYPES.UNKNOWN : geom.getType();
+            throw new GeometryOperationException(type, CODE, e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/tojts/ToJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/tojts/ToJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/tojts/ToJTS.java	(revision 46118)
@@ -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.jts.operation.tojts;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+public class ToJTS extends GeometryOperation {
+    public static final String NAME = "toJTS";
+    public static final int CODE = GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+
+	   /*
+     * (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 =  ((Integer)(ctx.getAttribute("srs"))).intValue();
+        }
+
+        GeometryJTS gjts = ((GeometryJTS) geom);
+        com.vividsolutions.jts.geom.Geometry jts = gjts.getJTS();
+        jts.setSRID(srid); // FIXME �Debemos hacer esto?
+
+        return jts;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromjts/FromJTS.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromjts/FromJTS.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromjts/FromJTS.java	(revision 46118)
@@ -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.jts.operation.fromjts;
+
+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.jts.util.JTSUtils;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+
+/**
+ * <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";
+    public static final String PARAM_PROJ = "Projection";
+    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(PARAM);
+        IProjection proj = (IProjection) ctx.getAttribute(PARAM_PROJ);
+        if ( obj instanceof com.vividsolutions.jts.geom.Geometry ) {
+            return JTSUtils.createGeometry(proj, (com.vividsolutions.jts.geom.Geometry) obj);
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBEncodingException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBEncodingException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBEncodingException.java	(revision 46118)
@@ -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.jts.operation.towkb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.gvsig.tools.exception.BaseException;
+
+public class WKBEncodingException extends BaseException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -7340057779411755446L;
+	private static final String MESSAGE_KEY = "Cant_encode_geometry_in_WKB";
+	private static final String FORMAT_STRING = "Can't encode geometry in WKB";
+        
+	protected Map values = new HashMap();
+
+	protected WKBEncodingException(String messageFormat, Throwable cause,
+			String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+	}
+
+	protected WKBEncodingException(String messageFormat, String messageKey, long code) {
+		super(messageFormat, messageKey, code);
+	}
+
+        public WKBEncodingException(Throwable cause) {
+            this(FORMAT_STRING, cause, MESSAGE_KEY, serialVersionUID);
+        }
+        
+	protected void setValue(String name, String value) {
+		this.values.put(name, value);
+	}
+
+        @Override
+	protected Map values() {
+		return this.values;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/OGCWKBEncoder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/OGCWKBEncoder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/OGCWKBEncoder.java	(revision 46118)
@@ -0,0 +1,516 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts.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.apache.commons.io.EndianUtils;
+
+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 OGCWKBEncoder {
+
+	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
+	}
+
+        private int byteOrder;
+        
+        public OGCWKBEncoder() {
+            this(wkbByteOrder.wkbXDR);
+        }
+        
+        public OGCWKBEncoder(int byteOrder) {
+            this.byteOrder = byteOrder;
+        }
+        
+	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 {
+            if (geometry.getGeometryType().isTypeOf(TYPES.POINT)) {
+                encodePoint(geometry, stream);
+
+            } else if (geometry.getGeometryType().isTypeOf(TYPES.CURVE)) {
+                encodeLineString(geometry, stream);
+
+            } else if (geometry.getGeometryType().isTypeOf(TYPES.SURFACE)) {
+                encodePolygon(geometry, stream);
+
+            } else if (geometry.getGeometryType().isTypeOf(TYPES.AGGREGATE)) {
+                switch (geometry.getType()) {
+                    case TYPES.MULTIPOINT:
+                        encodeMultiPoint(geometry, stream);
+                        break;
+                    case TYPES.MULTICURVE:
+                    case TYPES.MULTILINE:
+                        encodeMultiLineString(geometry, stream);
+                        break;
+
+                    case TYPES.MULTISURFACE:
+                    case TYPES.MULTIPOLYGON:
+                        encodeMultiPolygon(geometry, stream);
+                        break;
+
+                    case TYPES.AGGREGATE:
+                        encodeCollection(geometry, stream);
+                        break;
+                }
+
+            } else {
+                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();
+                encodeInteger(nGeometries, stream);
+		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();
+                encodeInteger(nGeometries, stream);
+		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);
+                encodeInteger(linearRings.size(), stream);
+		for (int i = 0; i < linearRings.size(); i++) {
+			encodeLinearRing((List) linearRings.get(i), stream);
+		}
+
+	}
+
+	private void encodeLinearRing(List linearRing, DataOutputStream stream)
+			throws IOException {
+                encodeInteger(linearRing.size(), stream);
+		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();
+                encodeInteger(nGeometries, stream);
+		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();
+                encodeInteger(nVertices, stream);
+		for (int i = 0; i < nVertices; i++) {
+			encodeCoordinates((double[]) line.get(i), stream);
+		}
+
+	}
+
+        private void encodeDouble(double data, DataOutputStream stream)
+			throws IOException {
+            if( this.byteOrder == wkbByteOrder.wkbXDR ) {
+                stream.writeDouble(data);
+            } else {
+                EndianUtils.writeSwappedDouble(stream, data);
+            }
+        }
+
+        private void encodeInteger(int data, DataOutputStream stream)
+			throws IOException {
+            if( this.byteOrder == wkbByteOrder.wkbXDR ) {
+                stream.writeInt(data);
+            } else {
+                EndianUtils.writeSwappedInteger(stream, data);
+            }
+        }
+
+	private void encodeCoordinates(double[] coordinates, DataOutputStream stream)
+			throws IOException {
+		for (int i = 0; i < coordinates.length; i++) {
+			encodeDouble(coordinates[i],stream);
+		}
+	}
+
+	private void encodeWKBGeomHead(int wkbBaseType, GeometryType geometryType,
+			DataOutputStream stream) throws GeometryTypeNotSupportedException,
+			IOException {
+
+		stream.writeByte(this.byteOrder);
+
+		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());
+
+		}
+                encodeInteger(finalType, stream);
+	}
+
+
+	private void encodePoint(Geometry geometry, DataOutputStream stream)
+			throws GeometryTypeNotSupportedException, IOException {
+		GeometryType geometryType = geometry.getGeometryType();
+		encodeWKBGeomHead(wkbGeometryType.wkbPoint, geometryType,
+				stream);
+
+		Point point = (Point) geometry;
+                encodeCoordinates(point.getCoordinates(), stream);
+	}
+
+	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();
+                encodeInteger(nGeometries, stream);
+		for (int i=0;i<nGeometries;i++) {
+			encodePoint(points.getPrimitiveAt(i), stream);
+		}
+	}
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBMultyLineInLineDefinitionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBMultyLineInLineDefinitionException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBMultyLineInLineDefinitionException.java	(revision 46118)
@@ -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.jts.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;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToOGCWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToOGCWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToOGCWKB.java	(revision 46118)
@@ -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.jts.operation.towkb;
+
+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;
+
+public class ToOGCWKB extends GeometryOperation {
+	public static final String NAME = GeometryManager.OPERATIONS.TOWKB;
+	public static final int CODE = GeometryLocator.getGeometryManager().
+    	getGeometryOperationCode(NAME);
+
+	private static OGCWKBEncoder encoder = new OGCWKBEncoder();
+
+	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;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/PostGISEWKBEncoder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/PostGISEWKBEncoder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/PostGISEWKBEncoder.java	(revision 46118)
@@ -0,0 +1,369 @@
+/*
+ * BinaryWriter.java
+ * 
+ * PostGIS extension for PostgreSQL JDBC driver - Binary Writer
+ * 
+ * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com
+ * 
+ * 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, either 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 or visit the web at
+ * http://www.gnu.org.
+ * 
+ * $Id: BinaryWriter.java 2497 2006-10-02 23:26:34Z mschaber $
+ */
+package org.gvsig.fmap.geom.jts.operation.towkb;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Iterator;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.TYPES;
+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.jts.operation.towkb.OGCWKBEncoder.wkbByteOrder;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Line;
+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;
+
+public class PostGISEWKBEncoder {
+	
+	public final static int wkbPoint = 1;
+	public final static int wkbLineString = 2;
+	public final static int wkbPolygon = 3;
+	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 byte[] encode(Geometry geometry) throws IOException {
+		ByteArrayOutputStream stream;
+
+		if (geometry.getType() == TYPES.POINT) {
+			stream = new ByteArrayOutputStream(50);
+		} else {
+			stream = new ByteArrayOutputStream(512);
+		}
+
+		writeGeometry(geometry, new DataOutputStream(stream));
+		return stream.toByteArray();
+	}
+
+	
+	static ByteBuffer bytebuffer = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN);
+	
+	private void writeInt(DataOutputStream dest, int value) throws IOException{
+		byte[] bytes = bytebuffer.putInt(0, value).array();
+		dest.writeByte(bytes[0]);
+		dest.writeByte(bytes[1]);
+		dest.writeByte(bytes[2]);
+		dest.writeByte(bytes[3]);
+	}
+	
+	private void writeDouble(DataOutputStream dest, double value) throws IOException{
+		byte[] bytes = bytebuffer.putDouble(0, value).array();
+		dest.writeByte(bytes[0]);
+		dest.writeByte(bytes[1]);
+		dest.writeByte(bytes[2]);
+		dest.writeByte(bytes[3]);
+		dest.writeByte(bytes[4]);
+		dest.writeByte(bytes[5]);
+		dest.writeByte(bytes[6]);
+		dest.writeByte(bytes[7]);
+	}
+	
+   
+    protected void writeGeometry(Geometry geom, DataOutputStream dest) throws IOException {
+        // write endian flag
+        dest.writeByte(wkbByteOrder.wkbNDR);
+
+        switch (geom.getType()) {
+        case Geometry.TYPES.POINT :
+        	encodeWKBGeomHead(wkbPoint, geom.getGeometryType(), dest);
+            writePoint((Point) geom, dest);
+            break;
+        case Geometry.TYPES.LINE :
+        	encodeWKBGeomHead(wkbLineString, geom.getGeometryType(), dest);
+            writeLine((Line) geom, dest);
+            break;
+        case Geometry.TYPES.POLYGON :
+        	encodeWKBGeomHead(wkbPolygon, geom.getGeometryType(), dest);
+            writePolygon((Polygon) geom, dest);
+            break;
+        case Geometry.TYPES.MULTIPOINT :
+        	encodeWKBGeomHead(wkbMultiPoint, geom.getGeometryType(), dest);
+            writeMultiPoint((MultiPoint) geom, dest);
+            break;
+        case Geometry.TYPES.MULTICURVE :
+        case Geometry.TYPES.MULTILINE :
+        	encodeWKBGeomHead(wkbMultiLineString, geom.getGeometryType(), dest);
+            writeMultiLineString((MultiCurve) geom, dest);
+            break;
+        case Geometry.TYPES.MULTISURFACE :
+        case Geometry.TYPES.MULTIPOLYGON :
+        	encodeWKBGeomHead(wkbMultiPolygon, geom.getGeometryType(), dest);
+            writeMultiPolygon((MultiSurface) geom, dest);
+            break;
+//        case Geometry.TYPES.GEOMETRY :
+//            writeCollection((GeometryCollection) geom, dest);
+//            break;
+        default :
+            throw new IllegalArgumentException("Unknown Geometry Type: " + geom.getType());
+        }
+    }
+    
+    private void encodeWKBGeomHead(int wkbBaseType, GeometryType geometryType, DataOutputStream dest) throws IOException{
+	    int typeword = wkbBaseType;
+	    
+	    GeometryType gtype = geometryType;
+	    if (gtype.hasZ()) {
+	        typeword |= 0x80000000;
+	    }
+	    if (gtype.hasM()) {
+	        typeword |= 0x40000000;
+	    }
+	    writeInt(dest, typeword);
+    }
+
+    private void writePoint(Point geom,  DataOutputStream dest) throws IOException {
+    	GeometryType gtype = geom.getGeometryType();
+       
+    	writeDouble(dest,geom.getX());
+        writeDouble(dest,geom.getY());
+
+        if (gtype.hasZ()) {
+        	writeDouble(dest,geom.getCoordinateAt(2));
+        }
+
+        if (gtype.hasM()) {
+        	writeDouble(dest,geom.getCoordinateAt(geom.getDimension()-1));
+        }
+    }
+
+
+    private void writePointArray(Point[] geom, DataOutputStream dest) throws IOException {
+        // number of points
+        writeInt(dest,geom.length);
+        for (int i = 0; i < geom.length; i++) {
+            writePoint(geom[i], dest);
+        }
+    }
+
+    private void writeMultiPoint(MultiPoint geom, DataOutputStream dest) throws IOException {
+        writeInt(dest,geom.getPrimitivesNumber());
+        Iterator it = geom.iterator();
+        while(it.hasNext()) {
+        	Point point = (Point) it.next();
+        	writeGeometry(point, dest);
+        }
+    }
+
+    private void writeLine(Curve geom, DataOutputStream dest) throws IOException {
+    	writeInt(dest,geom.getNumVertices());
+        for (int i = 0; i < geom.getNumVertices(); i++) {
+            writePoint(geom.getVertex(i), dest);
+        }
+    }
+
+//    private void writeLinearRing(LinearRing geom, DataOutputStream dest) throws IOException {
+//    	writeInt(dest,geom.numPoints());
+//        for (int i = 0; i < geom.numPoints(); i++) {
+//            writePoint(geom.getPoint(i), dest);
+//        }
+//    }
+
+    private void writePolygon(Polygon geom, DataOutputStream dest) throws IOException {
+        writeInt(dest,geom.getNumInteriorRings()+1);
+        writeInt(dest,geom.getNumVertices());
+        for (int i = 0; i < geom.getNumVertices(); i++) {
+            writePoint(geom.getVertex(i), dest);
+        }
+    }
+
+    private void writeMultiLineString(MultiCurve geom, DataOutputStream dest) throws IOException {
+        writeInt(dest,geom.getPrimitivesNumber());
+        Iterator it = geom.iterator();
+        while(it.hasNext()) {
+        	Curve line = (Curve) it.next();
+        	writeGeometry(line, dest);
+        }
+    }
+
+    private void writeMultiPolygon(MultiSurface geom, DataOutputStream dest) throws IOException {
+        writeInt(dest,geom.getPrimitivesNumber());
+        Iterator it = geom.iterator();
+        while(it.hasNext()) {
+        	Surface pol = (Surface) it.next();
+        	writeGeometry(pol, dest);
+        }
+    }
+
+//    private void writeCollection(GeometryCollection geom, DataOutputStream dest) throws IOException {
+//    	writeInt(dest,geom.getNumGeometries());
+//        for (int i = 0; i < geom.getNumGeometries(); i++) {
+//            writeGeometry(geom.get, dest);
+//        }
+//    }
+
+    protected int estimateBytes(Geometry geom) {
+        int result = 0;
+
+        // write endian flag
+        result += 1;
+
+        // write typeword
+        result += 4;
+
+//        if (geom.srid != -1) {
+//            result += 4;
+//        }
+
+        switch (geom.getType()) {
+        case Geometry.TYPES.POINT :
+            result += estimatePoint((Point) geom);
+            break;
+        case Geometry.TYPES.CURVE :
+        case Geometry.TYPES.LINE :
+            result += estimateLine((Curve) geom);
+            break;
+        case Geometry.TYPES.POLYGON :
+            result += estimatePolygon((Polygon) geom);
+            break;
+        case Geometry.TYPES.MULTIPOINT :
+            result += estimateMultiPoint((MultiPoint) geom);
+            break;
+        case Geometry.TYPES.MULTILINE :
+            result += estimateMultiLineString((MultiLine) geom);
+            break;
+        case Geometry.TYPES.MULTIPOLYGON :
+            result += estimateMultiPolygon((MultiPolygon) geom);
+            break;
+//        case Geometry.GEOMETRYCOLLECTION :
+//            result += estimateCollection((GeometryCollection) geom);
+//            break;
+        default :
+            throw new IllegalArgumentException("Unknown Geometry Type: " + geom.getType());
+        }
+        return result;
+    }
+
+    private int estimatePoint(Point geom) {
+        // x, y both have 8 bytes
+    	GeometryType gtype = geom.getGeometryType();
+        int result = 16;
+        if (gtype.hasZ()) {
+            result += 8;
+        }
+
+        if (gtype.hasM()) {
+            result += 8;
+        }
+        return result;
+    }
+    
+    private int estimateGeometryArray(Geometry[] container) {
+        int result = 0;
+        for (int i = 0; i < container.length; i++) {
+            result += estimateBytes(container[i]);
+        }
+        return result;
+    }
+
+    private int estimatePointArray(Point[] geom) {
+        // number of points
+        int result = 4;
+
+        // And the amount of the points itsself, in consistent geometries
+        // all points have equal size.
+        if (geom.length > 0) {
+            result += geom.length * estimatePoint(geom[0]);
+        }
+        return result;
+    }
+
+    private int estimateMultiPoint(MultiPoint geom) {
+        // int size
+        int result = 4;
+        if (geom.getPrimitivesNumber() > 0) {
+            // We can shortcut here, as all subgeoms have the same fixed size
+            result += geom.getPrimitivesNumber() * estimateBytes(geom.getPointAt(0));
+        }
+        return result;
+    }
+
+    private int estimateLine(Curve geom) {
+    	int result = 4;
+
+        // And the amount of the points itsself, in consistent geometries
+        // all points have equal size.
+        if (geom.getNumVertices() > 0) {
+            result += geom.getNumVertices() * estimatePoint(geom.getVertex(0));
+        }
+        return result;
+    }
+
+//    private int estimateLinearRing(LinearRing geom) {
+//        return estimatePointArray(geom.getPoints());
+//    }
+
+    private int estimatePolygon(Polygon geom) {
+        // int length
+        int result = 4;
+
+        // And the amount of the points itsself, in consistent geometries
+        // all points have equal size.
+        if (geom.getNumVertices() > 0) {
+            result += geom.getNumVertices() * estimatePoint(geom.getVertex(0));
+        }
+        return result;
+    }
+
+    private int estimateMultiLineString(MultiLine geom) {
+        // 4-byte count + subgeometries
+    	int result = 4;
+    	Iterator it = geom.iterator();
+    	while(it.hasNext()){
+    		Curve line = (Curve) it.next();
+    		result = result + estimateLine(line);
+    	}
+        return result;
+    }
+
+    private int estimateMultiPolygon(MultiPolygon geom) {
+        // 4-byte count + subgeometries
+    	int result = 4;
+    	Iterator it = geom.iterator();
+    	while(it.hasNext()){
+    		Polygon pol = (Polygon) it.next();
+    		result = result + estimatePolygon(pol);
+    	}
+        return result;
+    }
+
+//    private int estimateCollection(GeometryCollection geom) {
+//        // 4-byte count + subgeometries
+//        return 4 + estimateGeometryArray(geom.getGeometries());
+//    }
+}
+
+ 
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/PostGISEWKBEncoder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToPostGISEWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToPostGISEWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/ToPostGISEWKB.java	(revision 46118)
@@ -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.jts.operation.towkb;
+
+import com.vividsolutions.jts.io.WKBWriter;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.jts.GeometryJTS;
+import org.gvsig.fmap.geom.jts.operation.tojts.ToJTS;
+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;
+
+public class ToPostGISEWKB extends GeometryOperation {
+	public static final String NAME = GeometryManager.OPERATIONS.TOEWKB;
+	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) throws GeometryOperationException {
+		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(((GeometryJTS)geom).getJTS());
+		}
+
+        try {
+            return writer.write((com.vividsolutions.jts.geom.Geometry) geom.invokeOperation(ToJTS.CODE, ctx));
+        } catch (GeometryOperationNotSupportedException e) {
+            throw new GeometryOperationException(e);
+        }
+	}
+
+	public int getOperationIndex() {
+		return CODE;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBPolygonNotClosedException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBPolygonNotClosedException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBPolygonNotClosedException.java	(revision 46118)
@@ -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.jts.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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBPolygonNotClosedException.java
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBOnePointLineException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBOnePointLineException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/towkb/WKBOnePointLineException.java	(revision 46118)
@@ -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.jts.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;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/PostGISEWKBParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/PostGISEWKBParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/PostGISEWKBParser.java	(revision 46118)
@@ -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.fmap.geom.jts.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.exception.CreateGeometryException;
+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.Ring;
+import org.gvsig.fmap.geom.type.GeometryType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vividsolutions.jts.io.WKBConstants;
+
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Polygon;
+
+/**
+ * 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
+ * 
+ * https://github.com/postgis/postgis-java/blob/master/jdbc/src/main/java/org/postgis/binary/BinaryWriter.java
+ *
+ */
+public class PostGISEWKBParser {
+
+    private boolean gHaveM, gHaveZ, gHaveS; // M, Z y SRID
+
+    private static final Logger LOG = LoggerFactory.getLogger(PostGISEWKBParser.class);
+    private final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private final GeometryType[] pointGeometryTypes;
+
+    public PostGISEWKBParser() {
+        pointGeometryTypes
+                = new GeometryType[]{
+                    loadPointGeometryType(Geometry.SUBTYPES.GEOM2D, "2D"),
+                    loadPointGeometryType(Geometry.SUBTYPES.GEOM3D, "3D"),
+                    loadPointGeometryType(Geometry.SUBTYPES.GEOM2DM, "2DM"),
+                    loadPointGeometryType(Geometry.SUBTYPES.GEOM3DM, "3DM")};
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    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.)
+     *
+     * @param value
+     * @return
+     * @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.
+     *
+     * @param data
+     * @return
+     * @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, gHaveZ, gHaveM);
+                break;
+            case WKBConstants.wkbMultiLineString:
+                result1 = parseMultiLineString(data, gHaveZ, gHaveM);
+                return result1;
+            case WKBConstants.wkbMultiPolygon:
+                result1 = parseMultiPolygon(data, gHaveZ, gHaveM);
+                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();
+        }
+        
+        // Intento de dar soporte a WKB junto a EWKB
+        // https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary
+        if( realtype >= 3000 ) {
+            gHaveM = true;
+            gHaveZ = true;
+            gHaveS = false;
+            realtype -= 3000;
+            
+        } else if( realtype >= 2000 ) {
+            gHaveM = true;
+            gHaveZ = false;
+            gHaveS = false;
+            realtype -= 2000;
+            
+        } else if( realtype >= 1000 ) {
+            gHaveM = false;
+            gHaveZ = true;
+            gHaveS = false;
+            realtype -= 1000;
+        }
+        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(point.getDimension()-1, data.getDouble());
+        }
+        return point;
+    }
+
+    /**
+     * @param haveZ
+     * @param haveM
+     * @return
+     */
+    private int getSubType(boolean haveZ, boolean haveM) {
+        int subtype;
+
+        if( haveZ ) {
+            if( haveM ) {
+                subtype = Geometry.SUBTYPES.GEOM3DM;
+            } else {
+                subtype = Geometry.SUBTYPES.GEOM3D;
+            }
+        } else {
+            if( haveM ) {
+                subtype = Geometry.SUBTYPES.GEOM2DM;
+            } else {
+                subtype = Geometry.SUBTYPES.GEOM2D;
+            }
+        }
+       return subtype;
+    }
+
+    private MultiPrimitive parseMultiLineString(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+        int subType = getSubType(haveZ, haveM);
+        MultiPrimitive multiline = geomManager.createMultiLine(subType);
+
+        int count = data.getInt();
+
+        for (int i = 0; i < count; i++) {
+            parseTypeAndSRID(data);
+            Point[] points = parsePointArray(data, haveZ, haveM);
+            Line line = geomManager.createLine(getSubType(haveZ, haveM));
+            line.ensureCapacity(points.length);
+            for (Point point : points) {
+                line.addVertex(point);
+            }
+            multiline.addPrimitive(line);
+        }
+        return multiline;
+    }
+
+    private MultiPrimitive parseMultiPolygon(ByteBuffer data, boolean haveZ, boolean haveM)
+            throws CreateGeometryException {
+        int count = data.getInt();
+
+        int subType = getSubType(haveZ, haveM);
+        MultiPrimitive multipolygon = geomManager.createMultiPolygon(subType);
+
+        for (int i = 0; i < count; i++) {
+        	parseTypeAndSRID(data);
+            Polygon polygon = geomManager.createPolygon(subType);
+            int countRings = data.getInt();
+            for (int nring = 0; nring < countRings; nring++) {
+                OrientablePrimitive ring;
+                if( nring==0 ) {
+                    ring = polygon;
+                } else {
+                    ring = (Ring) geomManager.create(Geometry.TYPES.RING,subType);
+                }
+                Point[] points = parsePointsAsPointsArray(data, haveZ, haveM);
+
+                    ring.ensureCapacity(points.length);
+                int lastPoint = points.length - 1;
+                for (int k = 0; k <= lastPoint; k++) {
+                    ring.addVertex(points[k]);
+                }
+                if( nring!=0 ) {
+                    polygon.addInteriorRing((Ring)ring);
+                }
+            }
+            multipolygon.addPrimitive(polygon);
+        }
+        return multipolygon;
+    }
+
+    private Point[] parsePointsAsPointsArray(ByteBuffer data, boolean haveZ,
+        boolean haveM) throws CreateGeometryException {
+    int count = data.getInt();
+    Point points[] = new Point[count];
+    int subtype = getSubType(haveZ, haveM);
+
+    for (int i = 0; i < count; i++) {
+        points[i] = geomManager.createPoint(data.getDouble(), data.getDouble(), subtype);
+        switch (subtype) {
+            case Geometry.SUBTYPES.GEOM3D:
+                points[i].setCoordinateAt(Geometry.DIMENSIONS.Z, data.getDouble()); // z
+                break;
+            case Geometry.SUBTYPES.GEOM2DM:
+                points[i].setCoordinateAt(points[i].getDimension()-1, data.getDouble()); // m
+                break;
+            case Geometry.SUBTYPES.GEOM3DM:
+                points[i].setCoordinateAt(Geometry.DIMENSIONS.Z, data.getDouble()); // z
+                points[i].setCoordinateAt(points[i].getDimension()-1, data.getDouble()); // m
+                break;
+            default:
+                break;
+        }
+    }
+    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 (Geometry geom : geoms) {
+            multiPrimitive.addPrimitive((Primitive) geom);
+        }
+        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 Line parseLineString(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+        Point[] points = parsePointArray(data, haveZ, haveM);
+        Line line = geomManager.createLine(getSubType(haveZ, haveM));
+        line.ensureCapacity(points.length);
+        for (Point point : points) {
+            line.addVertex(point);
+        }
+        return line;
+    }
+
+    /**
+     * 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 Polygon parsePolygon(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+        int count = data.getInt();
+        int subType = getSubType(haveZ, haveM);
+
+        Polygon polygon = geomManager.createPolygon(subType);
+        fillLinearRing(data, polygon, haveZ, haveM);
+
+        for (int i = 1; i < count; i++) {
+            Ring ring = (Ring) geomManager.create(Geometry.TYPES.RING, subType);
+            fillLinearRing(data, ring, haveZ, haveM);
+            polygon.addInteriorRing(ring);
+        }
+        return polygon;
+    }
+
+    private void fillLinearRing(ByteBuffer data, OrientablePrimitive ring, boolean haveZ, boolean haveM)
+        throws CreateGeometryException {
+        Point[] points = parsePointArray(data, haveZ, haveM);
+        int lastPoint = points.length - 1;
+        ring.ensureCapacity(points.length);
+        for (int i = 0; i <= lastPoint; i++) {
+            ring.addVertex(points[i]);
+        }
+    }
+
+    private MultiPoint parseMultiPoint(ByteBuffer data, boolean haveZ, boolean haveM) throws CreateGeometryException {
+    	int subType = getSubType(haveZ, haveM);
+        MultiPoint multipoint = geomManager.createMultiPoint(subType);
+        int points = data.getInt();
+        multipoint.ensureCapacity(points);
+        for (int i = 0; i < points; i++) {
+            parseTypeAndSRID(data);
+            multipoint.addPoint(parsePoint(data, haveZ, haveM));
+        }
+        return multipoint;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/WKBParser2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/WKBParser2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/WKBParser2.java	(revision 46118)
@@ -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.jts.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;
+    }	
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromPostGISEWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromPostGISEWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromPostGISEWKB.java	(revision 46118)
@@ -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.jts.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;
+
+
+public class FromPostGISEWKB extends GeometryOperation {
+
+    public static final String NAME = GeometryManager.OPERATIONS.FROMEWKB;
+
+    public static final int CODE = GeometryLocator.getGeometryManager().
+            getGeometryOperationCode(NAME);
+
+    @Override
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+
+        try {
+            byte[] wkb = (byte[]) ctx.getAttribute("data");
+            PostGISEWKBParser parser = new PostGISEWKBParser();
+            Geometry g = parser.parse(wkb);
+            return g;
+        } catch (CreateGeometryException e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public int getOperationIndex() {
+        return CODE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromPostGISEWKB.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromWKB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromWKB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/operation/fromwkb/FromWKB.java	(revision 46118)
@@ -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.jts.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.operation.GeometryOperation;
+import org.gvsig.fmap.geom.operation.GeometryOperationContext;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class FromWKB extends GeometryOperation {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(FromWKB.class);
+
+    public static final String NAME = GeometryManager.OPERATIONS.FROMWKB;
+
+    public static final int CODE = GeometryLocator.getGeometryManager().
+            getGeometryOperationCode(NAME);
+
+
+    private PostGISEWKBParser parser;
+
+    public FromWKB() {
+//        this.parser = new PostGISEWKBParser();
+    }
+    
+    /* 
+	 * Como no tenemos un parser de OGC-WKB que es distinto del PostGIS-EWKB
+	 * de momento, usamos el de PostGIS-EWKB
+	 * 
+	 * La especificaci�n del OGC-WKB se puede encontrar en la wikipedia:
+	 * https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary
+	 * 
+	 * Podemos asumir que si el 5� byte del WKB es distinto de 0 se trata de PostGIS-EWKB
+     */
+    @Override
+    public Object invoke(Geometry geom, GeometryOperationContext ctx)
+            throws GeometryOperationException {
+
+        try {
+            byte[] wkb = (byte[]) ctx.getAttribute("data");
+            this.parser = new PostGISEWKBParser();
+            Geometry g = parser.parse(wkb);
+            return g;
+        } catch (Exception e) {
+            throw new GeometryOperationException(e);
+        }
+    }
+
+    @Override
+    public int getOperationIndex() {
+        return CODE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/DefaultGeometryLibrary.java	(revision 46118)
@@ -0,0 +1,302 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.jts;
+
+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.jts.aggregate.DefaultMultiCurve;
+import org.gvsig.fmap.geom.jts.aggregate.DefaultMultiSurface;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiLine3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
+import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3DM;
+import org.gvsig.fmap.geom.jts.coerce.CoerceToByteArray;
+import org.gvsig.fmap.geom.jts.coerce.CoerceToEnvelope;
+import org.gvsig.fmap.geom.jts.coerce.CoerceToGeometry;
+import org.gvsig.fmap.geom.jts.coerce.CoerceToString;
+import org.gvsig.fmap.geom.jts.complex.DefaultComplex;
+import org.gvsig.fmap.geom.jts.json.GeometryTypeJsonSerializer;
+import org.gvsig.fmap.geom.jts.operation.fromjts.FromJTS;
+import org.gvsig.fmap.geom.jts.operation.fromwkb.FromPostGISEWKB;
+import org.gvsig.fmap.geom.jts.operation.fromwkb.FromWKB;
+import org.gvsig.fmap.geom.jts.operation.fromwkt.FromWKT;
+import org.gvsig.fmap.geom.jts.operation.tojts.ToJTS;
+import org.gvsig.fmap.geom.jts.operation.towkb.ToPostGISEWKB;
+import org.gvsig.fmap.geom.jts.operation.towkb.ToOGCWKB;
+import org.gvsig.fmap.geom.jts.operation.towkt.ToWKT;
+import org.gvsig.fmap.geom.jts.persistence.GeometryPersistenceFactory;
+import org.gvsig.fmap.geom.jts.persistence.GeometryTypePersistenceFactory;
+import org.gvsig.fmap.geom.jts.primitive.DefaultEnvelope;
+import org.gvsig.fmap.geom.jts.primitive.DefaultNullGeometry;
+import org.gvsig.fmap.geom.jts.primitive.Envelope2D;
+import org.gvsig.fmap.geom.jts.primitive.Envelope3D;
+import org.gvsig.fmap.geom.jts.primitive.Geometry2D;
+import org.gvsig.fmap.geom.jts.primitive.Geometry2DM;
+import org.gvsig.fmap.geom.jts.primitive.Geometry3D;
+import org.gvsig.fmap.geom.jts.primitive.Geometry3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.arc.Arc2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.arc.Arc2DZ;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.circumference.Circumference2DZ;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.periellipse.PeriEllipse2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.periellipse.PeriEllipse2DZ;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline2D;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline2DM;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline3D;
+import org.gvsig.fmap.geom.jts.primitive.curve.spline.Spline3DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DGeometryType;
+import org.gvsig.fmap.geom.jts.primitive.point.Point2DM;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DGeometryType;
+import org.gvsig.fmap.geom.jts.primitive.point.Point3DM;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring2DM;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3D;
+import org.gvsig.fmap.geom.jts.primitive.ring.Ring3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.circle.Circle2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.circle.Circle2DZ;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipse.Ellipse2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipse.Ellipse2DZ;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipticarc.EllipticArc2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.ellipticarc.EllipticArc2DZ;
+import org.gvsig.fmap.geom.jts.primitive.surface.filledspline.FilledSpline2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.filledspline.FilledSpline2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.filledspline.FilledSpline3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.filledspline.FilledSpline3DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
+import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3DM;
+import org.gvsig.fmap.geom.operation.GeometryOperation;
+import org.gvsig.json.Json;
+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 {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(GeometryLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Register the default GeometryManager
+        GeometryLocator.registerGeometryManager(DefaultGeometryManager.class);
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+
+        dataTypesManager.addCoercion(DataTypes.GEOMETRY, new CoerceToGeometry());
+        dataTypesManager.addCoercion(DataTypes.ENVELOPE, new CoerceToEnvelope());
+        dataTypesManager.addCoercion(DataTypes.STRING, new CoerceToString());
+        dataTypesManager.addCoercion(DataTypes.BYTEARRAY,new CoerceToByteArray());
+
+        GeometryOperation.OPERATION_INTERSECTS_CODE =
+            geometryManager.getGeometryOperationCode(GeometryOperation.OPERATION_INTERSECTS_NAME);
+
+        GeometryOperation.OPERATION_CONTAINS_CODE =
+            geometryManager.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.UNKNOWN, SUBTYPES.UNKNOWN);
+        
+        geometryManager.registerGeometryType(Geometry2D.class, "Geometry2D", TYPES.UNKNOWN, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Geometry3D.class, "Geometry3D", TYPES.UNKNOWN, SUBTYPES.GEOM3D);
+        geometryManager.registerGeometryType(Geometry2DM.class, "Geometry2DM", TYPES.UNKNOWN, SUBTYPES.GEOM2DM);
+        geometryManager.registerGeometryType(Geometry3DM.class, "Geometry3DM", TYPES.UNKNOWN, SUBTYPES.GEOM3DM);
+
+        geometryManager.registerGeometryType(Geometry2D.class, "Geometry2D", TYPES.GEOMETRY, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Geometry3D.class, "Geometry3D", TYPES.GEOMETRY, SUBTYPES.GEOM3D);
+        geometryManager.registerGeometryType(Geometry2DM.class, "Geometry2DM", TYPES.GEOMETRY, SUBTYPES.GEOM2DM);
+        geometryManager.registerGeometryType(Geometry3DM.class, "Geometry3DM", TYPES.GEOMETRY, SUBTYPES.GEOM3DM);
+
+        // Register points in 2D
+        geometryManager.registerGeometryType(new Point2DGeometryType());
+//        geometryManager.registerGeometryType(Point2D.class, "Point2D", TYPES.POINT, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(Point2DM.class, "Point2DM", TYPES.POINT, SUBTYPES.GEOM2DM);
+
+        // Register curves in 2D
+        geometryManager.registerGeometryType(Line2D.class, "Line2D", TYPES.LINE, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Line2D.class, "Curve2D", TYPES.CURVE, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Arc2D.class, "Arc2D", TYPES.ARC, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Spline2D.class, "Spline2D", TYPES.SPLINE, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Circumference2D.class, "Circumference2D", TYPES.CIRCUMFERENCE, SUBTYPES.GEOM2D, TYPES.CURVE);
+        geometryManager.registerGeometryType(PeriEllipse2D.class, "PeriEllipse2D", TYPES.PERIELLIPSE, SUBTYPES.GEOM2D, TYPES.CURVE);
+
+        // Register surfaces in 2D
+        geometryManager.registerGeometryType(Polygon2D.class, "Polygon2D", TYPES.POLYGON, SUBTYPES.GEOM2D, TYPES.SURFACE);
+        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(Ring2D.class, "Ring2D", TYPES.RING, SUBTYPES.GEOM2D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(FilledSpline2D.class, "FilledSpline2D", TYPES.FILLEDSPLINE, SUBTYPES.GEOM2D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(EllipticArc2D.class, "EllipticArc2D", TYPES.ELLIPTICARC, SUBTYPES.GEOM2D, TYPES.SURFACE);
+
+        // Register curves in 2DM
+        geometryManager.registerGeometryType(Line2DM.class, "Line2DM", TYPES.LINE, SUBTYPES.GEOM2DM, TYPES.CURVE);
+        geometryManager.registerGeometryType(Line2DM.class, "Curve2DM", TYPES.CURVE, SUBTYPES.GEOM2DM, TYPES.CURVE);
+        geometryManager.registerGeometryType(Spline2DM.class, "Spline2DM", TYPES.SPLINE, SUBTYPES.GEOM2DM, TYPES.CURVE);
+
+        // Register surfaces in 2DM
+        geometryManager.registerGeometryType(Polygon2DM.class, "Polygon2DM", TYPES.POLYGON, SUBTYPES.GEOM2DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Polygon2DM.class, "Surface2DM", TYPES.SURFACE, SUBTYPES.GEOM2DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Ring2DM.class, "Ring2DM", TYPES.RING, SUBTYPES.GEOM2DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(FilledSpline2DM.class, "FilledSpline2DM", TYPES.FILLEDSPLINE, SUBTYPES.GEOM2DM, 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(DefaultMultiCurve.class, "MultiCurve", TYPES.MULTICURVE, SUBTYPES.GEOM2D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiLine2D.class, "MultiLine2D", TYPES.MULTILINE, SUBTYPES.GEOM2D, new int[]{TYPES.AGGREGATE, TYPES.MULTICURVE});
+        geometryManager.registerGeometryType(DefaultMultiSurface.class, "MultiSurface", TYPES.MULTISURFACE, SUBTYPES.GEOM2D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiPolygon2D.class, "MultiPolygon2D", TYPES.MULTIPOLYGON, SUBTYPES.GEOM2D, new int[]{TYPES.AGGREGATE, TYPES.MULTISURFACE});
+
+        // Register multigeometries in 2DM
+        geometryManager.registerGeometryType(MultiPoint2DM.class, "MultiPoint2DM", TYPES.MULTIPOINT, SUBTYPES.GEOM2DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(DefaultMultiCurve.class, "MultiCurve", TYPES.MULTICURVE, SUBTYPES.GEOM2DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiLine2DM.class, "MultiLine2DM", TYPES.MULTILINE, SUBTYPES.GEOM2DM, new int[]{TYPES.AGGREGATE, TYPES.MULTICURVE});
+        geometryManager.registerGeometryType(DefaultMultiSurface.class, "MultiSurface", TYPES.MULTISURFACE, SUBTYPES.GEOM2DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiPolygon2DM.class, "MultiPolygon2DM", TYPES.MULTIPOLYGON, SUBTYPES.GEOM2DM, new int[]{TYPES.AGGREGATE, TYPES.MULTISURFACE});
+
+        // Register the geometries in 3D
+        geometryManager.registerGeometryType(DefaultNullGeometry.class, TYPES.NULL, SUBTYPES.GEOM3D);
+
+        // Register points in 3D
+        geometryManager.registerGeometryType(new Point3DGeometryType());
+//        geometryManager.registerGeometryType(Point3D.class, "Point3D", TYPES.POINT, SUBTYPES.GEOM3D);
+        geometryManager.registerGeometryType(Point3DM.class, "Point3DM", TYPES.POINT, SUBTYPES.GEOM3DM);
+
+        // Register curves in 3D
+        geometryManager.registerGeometryType(Line3D.class, "Line3D", TYPES.LINE, SUBTYPES.GEOM3D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Line3D.class, "Curve3D", TYPES.CURVE, SUBTYPES.GEOM3D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Arc2DZ.class, "Arc3D", TYPES.ARC, SUBTYPES.GEOM3D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Spline3D.class, "Spline3D", TYPES.SPLINE, SUBTYPES.GEOM3D, TYPES.CURVE);
+        geometryManager.registerGeometryType(Circumference2DZ.class, "Circumference2DZ", TYPES.CIRCUMFERENCE, SUBTYPES.GEOM3D, TYPES.CURVE);
+        geometryManager.registerGeometryType(PeriEllipse2DZ.class, "PeriEllipse2DZ", TYPES.PERIELLIPSE, SUBTYPES.GEOM3D, TYPES.CURVE);
+
+        // Register surfaces in 3D
+        geometryManager.registerGeometryType(Polygon3D.class, "Polygon3D", TYPES.POLYGON, SUBTYPES.GEOM3D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Polygon3D.class, "Surface3D", TYPES.SURFACE, SUBTYPES.GEOM3D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Ring3D.class, "Ring3D", TYPES.RING, SUBTYPES.GEOM3D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(FilledSpline3D.class, "FilledSpline3D", TYPES.FILLEDSPLINE, SUBTYPES.GEOM3D, TYPES.SURFACE);
+
+        geometryManager.registerGeometryType(Circle2DZ.class, "Circle2DZ", TYPES.CIRCLE, SUBTYPES.GEOM3D, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Ellipse2DZ.class, "Ellipse2DZ", TYPES.ELLIPSE, SUBTYPES.GEOM3D, TYPES.SURFACE);
+
+        geometryManager.registerGeometryType(EllipticArc2DZ.class, "EllipticArc3D", TYPES.ELLIPTICARC, SUBTYPES.GEOM3D, TYPES.SURFACE);
+
+        // Register curves in 3DM
+        geometryManager.registerGeometryType(Line3DM.class, "Line3DM", TYPES.LINE, SUBTYPES.GEOM3DM, TYPES.CURVE);
+        geometryManager.registerGeometryType(Line3DM.class, "Curve3DM", TYPES.CURVE, SUBTYPES.GEOM3DM, TYPES.CURVE);
+        geometryManager.registerGeometryType(Spline3DM.class, "Spline3DM", TYPES.SPLINE, SUBTYPES.GEOM3DM, TYPES.CURVE);
+
+        // Register surfaces in 3DM
+        geometryManager.registerGeometryType(Polygon3DM.class, "Polygon3DM", TYPES.POLYGON, SUBTYPES.GEOM3DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Polygon3DM.class, "Surface3DM", TYPES.SURFACE, SUBTYPES.GEOM3DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(Ring3DM.class, "Ring3DM", TYPES.RING, SUBTYPES.GEOM3DM, TYPES.SURFACE);
+        geometryManager.registerGeometryType(FilledSpline3DM.class, "FilledSpline3DM", TYPES.FILLEDSPLINE, SUBTYPES.GEOM3DM, TYPES.SURFACE);
+
+
+        // Register multigeometries in 3D
+        geometryManager.registerGeometryType(MultiPoint3D.class, "MultiPoint3D", TYPES.MULTIPOINT, SUBTYPES.GEOM3D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(DefaultMultiCurve.class, "MultiCurve", TYPES.MULTICURVE, SUBTYPES.GEOM3D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiLine3D.class, "MultiLine3D", TYPES.MULTILINE, SUBTYPES.GEOM3D, new int[]{TYPES.AGGREGATE, TYPES.MULTICURVE});
+        geometryManager.registerGeometryType(DefaultMultiSurface.class, "MultiSurface", TYPES.MULTISURFACE, SUBTYPES.GEOM3D, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiPolygon3D.class, "MultiPolygon3D", TYPES.MULTIPOLYGON, SUBTYPES.GEOM3D, new int[]{TYPES.AGGREGATE, TYPES.MULTISURFACE});
+
+        // Register multigeometries in 3DM
+        geometryManager.registerGeometryType(MultiPoint3DM.class, "MultiPoint3DM", TYPES.MULTIPOINT, SUBTYPES.GEOM3DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(DefaultMultiCurve.class, "MultiCurve", TYPES.MULTICURVE, SUBTYPES.GEOM3DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiLine3DM.class, "MultiLine3DM", TYPES.MULTILINE, SUBTYPES.GEOM3DM, new int[]{TYPES.AGGREGATE, TYPES.MULTICURVE});
+        geometryManager.registerGeometryType(DefaultMultiSurface.class, "MultiSurface", TYPES.MULTISURFACE, SUBTYPES.GEOM3DM, TYPES.AGGREGATE);
+        geometryManager.registerGeometryType(MultiPolygon3DM.class, "MultiPolygon3DM", TYPES.MULTIPOLYGON, SUBTYPES.GEOM3DM, new int[]{TYPES.AGGREGATE, TYPES.MULTISURFACE});
+        
+        
+        // Register complex
+        geometryManager.registerGeometryType(DefaultComplex.class, "Complex", TYPES.COMPLEX, SUBTYPES.GEOM2D);
+        geometryManager.registerGeometryType(DefaultComplex.class, "Complex", TYPES.COMPLEX, SUBTYPES.GEOM2DM);
+        geometryManager.registerGeometryType(DefaultComplex.class, "Complex", TYPES.COMPLEX, SUBTYPES.GEOM3D);
+        geometryManager.registerGeometryType(DefaultComplex.class, "Complex", TYPES.COMPLEX, SUBTYPES.GEOM3DM);
+
+        // 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());
+
+        geometryManager.registerGeometryOperation(ToJTS.NAME, new ToJTS());
+        geometryManager.registerGeometryOperation(FromJTS.NAME, new FromJTS());
+        geometryManager.registerGeometryOperation(ToPostGISEWKB.NAME, new ToPostGISEWKB());
+        geometryManager.registerGeometryOperation(FromWKB.NAME, new FromWKB());
+        geometryManager.registerGeometryOperation(FromPostGISEWKB.NAME, new FromPostGISEWKB());
+        geometryManager.registerGeometryOperation(ToOGCWKB.NAME, new ToOGCWKB());
+        geometryManager.registerGeometryOperation(ToWKT.NAME, new ToWKT());
+        geometryManager.registerGeometryOperation(FromWKT.NAME, new FromWKT());
+        
+        Json.registerSerializer(new GeometryTypeJsonSerializer());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/towkb/TestOGCWKBEncoder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/towkb/TestOGCWKBEncoder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/towkb/TestOGCWKBEncoder.java	(revision 46118)
@@ -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.
+ */
+package org.gvsig.fmap.geom.jts.operation.towkb;
+
+import static junit.framework.Assert.assertEquals;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+
+public class TestOGCWKBEncoder extends AbstractLibraryAutoInitTestCase {
+
+    private static class Data {
+    
+        public String wkt;
+        public String wkb;
+        public int byteOrder;
+        public boolean skip;
+        
+        public Data(String wkt, String wkb, int byteOrder, boolean skip) {
+            this.wkt = wkt;
+            this.wkb = wkb;
+            this.byteOrder = byteOrder;
+            this.skip = skip;
+        }
+        
+    }
+    
+    @Override
+    protected void doSetUp() throws Exception {
+    }
+    
+    public String bytearray(byte[] data) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("0x");
+        for (byte abyte : data) {
+            int v = abyte & 0xff;
+            builder.append(String.format("%02x", v));
+        }
+        return builder.toString();
+    }
+    
+    public void test1() throws Exception {
+        GeometryManager manager = GeometryLocator.getGeometryManager();
+        Data[] allData = new Data[] {
+            new Data(
+                    "POINT (30 10)",
+                    "0x01010000000000000000003E400000000000002440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "LINESTRING (30 10, 10 30, 40 40)",
+                    "0x0102000000030000000000000000003E40000000000000244000000000000024400000000000003E4000000000000044400000000000004440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))",
+                    "0x010300000001000000050000000000000000003E4000000000000024400000000000004440000000000000444000000000000034400000000000004440000000000000244000000000000034400000000000003E400000000000002440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))",
+                    "0x0103000000020000000500000000000000008041400000000000002440000000000080464000000000008046400000000000002E40000000000000444000000000000024400000000000003440000000000080414000000000000024400400000000000000000034400000000000003E40000000000080414000000000008041400000000000003E40000000000000344000000000000034400000000000003E40",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))",
+                    "0x010400000004000000010100000000000000000024400000000000004440010100000000000000000044400000000000003E4001010000000000000000003440000000000000344001010000000000000000003E400000000000002440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    true
+            ),
+            new Data(
+                    "MULTIPOINT (10 40, 40 30, 20 20, 30 10)",
+                    "0x010400000004000000010100000000000000000024400000000000004440010100000000000000000044400000000000003E4001010000000000000000003440000000000000344001010000000000000000003E400000000000002440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    true
+            ),
+            new Data(
+                    "MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))",
+                    "0x010500000002000000010200000003000000000000000000244000000000000024400000000000003440000000000000344000000000000024400000000000004440010200000004000000000000000000444000000000000044400000000000003E400000000000003E40000000000000444000000000000034400000000000003E400000000000002440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))",
+                    "0x010600000002000000010300000001000000040000000000000000003E40000000000000344000000000008046400000000000004440000000000000244000000000000044400000000000003E400000000000003440010300000001000000050000000000000000002E4000000000000014400000000000004440000000000000244000000000000024400000000000003440000000000000144000000000000024400000000000002E400000000000001440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))",
+                    "0x01060000000200000001030000000100000004000000000000000000444000000000000044400000000000003440000000000080464000000000008046400000000000003E4000000000000044400000000000004440010300000002000000060000000000000000003440000000000080414000000000000024400000000000003E40000000000000244000000000000024400000000000003E4000000000000014400000000000804640000000000000344000000000000034400000000000804140040000000000000000003E40000000000000344000000000000034400000000000002E40000000000000344000000000000039400000000000003E400000000000003440",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),
+            new Data(
+                    "POLYGON ((710847.97223687172 4368973.1207255824, 720362.03232662566 4368973.1207255824, 720362.03232662566 4373121.8750170888, 710847.97223687172 4373121.8750170888, 710847.97223687172 4368973.1207255824))",
+                    "0x010300000001000000050000000008C9F17FB12541CBF7B94793AA5041901D8D10D4FB2541CBF7B94793AA5041901D8D10D4FB2541AD470078A0AE50410008C9F17FB12541AD470078A0AE50410008C9F17FB12541CBF7B94793AA5041",
+                    OGCWKBEncoder.wkbByteOrder.wkbNDR,
+                    false
+            ),        };
+    
+        System.out.println("# Test:: test1");
+        for (Data data : allData) {            
+            if( data.skip ) {
+                continue;
+            }
+            System.out.println("# WKT:: " + data.wkt);
+            Geometry geom = manager.createFrom(data.wkt);
+            OGCWKBEncoder encoder = new OGCWKBEncoder(data.byteOrder);
+            byte[] wbk = encoder.encode(geom);
+//            byte[] wbk = point.convertToWKB();
+            System.out.println("# WKB-E:: " + data.wkb);
+            System.out.println("# WKB-R:: " + bytearray(wbk));
+            assertEquals(data.wkb.toUpperCase(),bytearray(wbk).toUpperCase());  
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/fromwkb/TestWKBParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/fromwkb/TestWKBParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/fromwkb/TestWKBParser.java	(revision 46118)
@@ -0,0 +1,562 @@
+package org.gvsig.fmap.geom.jts.operation.fromwkb;
+
+import org.gvsig.fmap.geom.Geometry;
+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.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.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+public class TestWKBParser extends AbstractLibraryAutoInitTestCase {
+
+	public void testPoint2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01010000403CDBA337DCC351C06D37C1374D3748400000000000002840";
+		// SELECT ST_GeomFromEWKT('POINTM(-71.060316 48.432044 12)');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.POINT);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		assertEquals(geom.getDimension(), 3);
+		Point point = (Point) geom;
+		assertEquals(point.getX(), -71.060316);
+		assertEquals(point.getY(), 48.432044);
+		assertEquals(point.getCoordinateAt(2), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testPoint3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01010000C03CDBA337DCC351C06D37C1374D37484000000000000024400000000000002840";
+		// SELECT ST_GeomFromEWKT('POINTZM(-71.060316 48.432044 12)');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.POINT);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		assertEquals(geom.getDimension(), 4);
+		Point point = (Point) geom;
+		assertEquals(point.getX(), -71.060316);
+		assertEquals(point.getY(), 48.432044);
+		assertEquals(point.getCoordinateAt(2), 10.0);
+		assertEquals(point.getCoordinateAt(3), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	
+	public void testLine2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "0102000040030000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D37C1374DB747400000000000002440";
+		// SELECT ST_GeomFromEWKT('LINESTRINGM(-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10 )');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.LINE);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getDimension(), 3);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		Curve line = (Curve) geom;
+		
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testLine3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01020000C0030000003CDBA337DCC351C06D37C1374D374840000000000000224000000000000028403CDBA337DC8351C06D37C1374D374840000000000000204000000000000026403CDBA337DCC351C06D37C1374DB747400000000000001C400000000000002440";
+		// SELECT ST_GeomFromEWKT('LINESTRINGM(-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10 )');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.LINE);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getDimension(), 4);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		Curve line = (Curve) geom;
+		
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 9.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 8.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 7.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testPolygon2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "010300004001000000040000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D37C1374DB7474000000000000024403CDBA337DCC351C06D37C1374D3748400000000000002840";
+		// SELECT ST_GeomFromEWKT('POLYGONM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.POLYGON);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getDimension(), 3);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		Polygon line = (Polygon) geom;
+		
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		Point vert4 = line.getVertex(3);
+		assertEquals(vert4.getX(), -71.060316);
+		assertEquals(vert4.getY(), 48.432044);
+		assertEquals(vert4.getCoordinateAt(2), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testPolygon3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01030000C001000000040000003CDBA337DCC351C06D37C1374D374840000000000000224000000000000028403CDBA337DC8351C06D37C1374D3748400000000000002040"
+				+ "00000000000026403CDBA337DCC351C06D37C1374DB747400000000000001C4000000000000024403CDBA337DCC351C06D37C1374D37484000000000000022400000000000002840";
+		// SELECT ST_GeomFromEWKT('POLYGONM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.POLYGON);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getDimension(), 4);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		Polygon line = (Polygon) geom;
+		
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 9.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 8.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 7.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		Point vert4 = line.getVertex(3);
+		assertEquals(vert4.getX(), -71.060316);
+		assertEquals(vert4.getY(), 48.432044);
+		assertEquals(vert4.getCoordinateAt(2), 9.0);
+		assertEquals(vert4.getCoordinateAt(3), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testMultiPoint2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01040000400200000001010000403CDBA337DCC351C06D37C1374D374840000000000000284001010000403CDBA337DC8351C06D3"
+				+ "7C1374D3748400000000000002640";
+		// SELECT ST_GeomFromEWKT('MULTIPOINTM((-71.060316 48.432044 12), (-70.060316 48.432044 11))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTIPOINT);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		assertEquals(geom.getDimension(), 3);
+		MultiPoint mpoint = (MultiPoint) geom;
+		Point point = mpoint.getPointAt(0);
+		assertEquals(point.getX(), -71.060316);
+		assertEquals(point.getY(), 48.432044);
+		assertEquals(point.getCoordinateAt(2), 12.0);
+		
+		Point point1 = mpoint.getPointAt(1);
+		assertEquals(point1.getX(), -70.060316);
+		assertEquals(point1.getY(), 48.432044);
+		assertEquals(point1.getCoordinateAt(2), 11.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testMultiPoint3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex ="01040000C00200000001010000C03CDBA337DCC351C06D37C1374D37484000000000000024400000000000002840010"
+				+ "10000C03CDBA337DC8351C06D37C1374D37484000000000000022400000000000002640";
+		// SELECT ST_GeomFromEWKT('MULTIPOINTZM((-71.060316 48.432044 10 12), (-70.060316 48.432044 9 11))');;
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTIPOINT);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		assertEquals(geom.getDimension(), 4);
+		MultiPoint mpoint = (MultiPoint) geom;
+		Point point = mpoint.getPointAt(0);
+		assertEquals(point.getX(), -71.060316);
+		assertEquals(point.getY(), 48.432044);
+		assertEquals(point.getCoordinateAt(2), 10.0);
+		assertEquals(point.getCoordinateAt(3), 12.0);
+		
+		Point point1 = mpoint.getPointAt(1);
+		assertEquals(point1.getX(), -70.060316);
+		assertEquals(point1.getY(), 48.432044);
+		assertEquals(point1.getCoordinateAt(2), 9.0);
+		assertEquals(point1.getCoordinateAt(3), 11.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	
+	public void testMultiLine2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "0105000040020000000102000040030000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D3748400000000000"
+				+ "0026403CDBA337DCC351C06D37C1374DB7474000000000000024400102000040030000003CDBA337DC0352C06D37C1374DB7474000000000000028403CDBA337DCC351C06D37C1374DB7474000000000000026403CDBA337DC0352C06D37C1374D3747400000000000002440";
+		// SELECT ST_GeomFromEWKT('MULTILINESTRINGM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10),(-72.060316 47.432044 12, -71.060316 47.432044 11, -72.060316 46.432044 10))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTILINE);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getDimension(), 3);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		MultiLine mline = (MultiLine) geom;
+		
+		Line line = (Line) mline.getCurveAt(0);
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		Line line1 = (Line) mline.getCurveAt(1);
+		vert1 = line1.getVertex(0);
+		assertEquals(vert1.getX(), -72.060316);
+		assertEquals(vert1.getY(), 47.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		vert2 = line1.getVertex(1);
+		assertEquals(vert2.getX(), -71.060316);
+		assertEquals(vert2.getY(), 47.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		vert3 = line1.getVertex(2);
+		assertEquals(vert3.getX(), -72.060316);
+		assertEquals(vert3.getY(), 46.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	public void testMultiLine3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex ="01050000C00200000001020000C0030000003CDBA337DCC351C06D37C1374D374840000000000000F03F00000000000028403CDBA337DC8351C06D37C1374D3748400000"
+				+ "00000000004000000000000026403CDBA337DCC351C06D37C1374DB747400000000000000840000000000000244001020000C0030000003CDBA337DC0352C06D37C1374DB74740"
+				+ "000000000000104000000000000028403CDBA337DCC351C06D37C1374DB74740000000000000144000000000000026403CDBA337DC0352C06D37C1374D37474000000000000018400000000000002440";
+		// SELECT ST_GeomFromEWKT('MULTILINESTRINGZM((-71.060316 48.432044 1 12, -70.060316 48.432044 2 11, -71.060316 47.432044 3 10),(-72.060316 47.432044 4 12, -71.060316 47.432044 5 11, -72.060316 46.432044 6 10))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTILINE);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getDimension(), 4);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		MultiLine mline = (MultiLine) geom;
+		
+		Line line = (Line) mline.getCurveAt(0);
+		Point vert1 = line.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 1.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		Point vert2 = line.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 2.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		Point vert3 = line.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 3.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		Line line1 = (Line) mline.getCurveAt(1);
+		vert1 = line1.getVertex(0);
+		assertEquals(vert1.getX(), -72.060316);
+		assertEquals(vert1.getY(), 47.432044);
+		assertEquals(vert1.getCoordinateAt(2), 4.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		vert2 = line1.getVertex(1);
+		assertEquals(vert2.getX(), -71.060316);
+		assertEquals(vert2.getY(), 47.432044);
+		assertEquals(vert2.getCoordinateAt(2), 5.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		vert3 = line1.getVertex(2);
+		assertEquals(vert3.getX(), -72.060316);
+		assertEquals(vert3.getY(), 46.432044);
+		assertEquals(vert3.getCoordinateAt(2), 6.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	
+	public void testMultiPolygon2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "010600004002000000010300004001000000040000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37"
+				+ "484000000000000026403CDBA337DCC351C06D37C1374DB7474000000000000024403CDBA337DCC351C06D37C1374D3748400000000000002840010300004001"
+				+ "000000040000003CDBA337DC8351C06D37C1374DB7474000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D"
+				+ "37C1374DB7474000000000000024403CDBA337DC8351C06D37C1374DB747400000000000002840";
+		// SELECT ST_GeomFromEWKT('MULTIPOLYGONM(((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12)),((-70.060316 47.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -70.060316 47.432044 12)))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTIPOLYGON);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
+		assertEquals(geom.getDimension(), 3);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), false);
+		MultiPolygon mpol = (MultiPolygon) geom;
+		
+		Polygon pol = (Polygon) mpol.getSurfaceAt(0);
+		Point vert1 = pol.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		Point vert2 = pol.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		Point vert3 = pol.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		Point vert4 = pol.getVertex(3);
+		assertEquals(vert4.getX(), -71.060316);
+		assertEquals(vert4.getY(), 48.432044);
+		assertEquals(vert4.getCoordinateAt(2), 12.0);
+		
+		
+		pol = (Polygon) mpol.getSurfaceAt(1);
+		vert1 = pol.getVertex(0);
+		assertEquals(vert1.getX(), -70.060316);
+		assertEquals(vert1.getY(), 47.432044);
+		assertEquals(vert1.getCoordinateAt(2), 12.0);
+		
+		vert2 = pol.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 11.0);
+		
+		vert3 = pol.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 10.0);
+		
+		vert4 = pol.getVertex(3);
+		assertEquals(vert4.getX(), -70.060316);
+		assertEquals(vert4.getY(), 47.432044);
+		assertEquals(vert4.getCoordinateAt(2), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	
+	public void testMultiPolygon3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
+		String wkbHex = "01060000C00200000001030000C001000000040000003CDBA337DCC351C06D37C1374D374840000000000000F03F00000000000028403CDBA3"
+				+ "37DC8351C06D37C1374D374840000000000000004000000000000026403CDBA337DCC351C06D37C1374DB74740000000000000084000000000000024"
+				+ "403CDBA337DCC351C06D37C1374D374840000000000000F03F000000000000284001030000C001000000040000003CDBA337DC8351C06D37C1374DB7"
+				+ "4740000000000000104000000000000028403CDBA337DC8351C06D37C1374D374840000000000000144000000000000026403CDBA337DCC351C06D37"
+				+ "C1374DB74740000000000000184000000000000024403CDBA337DC8351C06D37C1374DB7474000000000000010400000000000002840";
+		// SELECT ST_GeomFromEWKT('MULTIPOLYGONZM(((-71.060316 48.432044 1 12, -70.060316 48.432044 2 11, -71.060316 47.432044 3 10, -71.060316 48.432044 1 12)),((-70.060316 47.432044 4 12, -70.060316 48.432044 5 11, -71.060316 47.432044 6 10, -70.060316 47.432044 4 12)))');
+		
+		byte[] wkb = getWKB(wkbHex);
+		assertEquals(wkbHex, getWKBHex(wkb));
+		PostGISEWKBParser parser = new PostGISEWKBParser();
+		Geometry geom = parser.parse(wkb);
+		assertEquals(geom.getType(), Geometry.TYPES.MULTIPOLYGON);
+		assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
+		assertEquals(geom.getDimension(), 4);
+		assertEquals(geom.getGeometryType().hasM(), true);
+		assertEquals(geom.getGeometryType().hasZ(), true);
+		MultiPolygon mpol = (MultiPolygon) geom;
+		
+		Polygon pol = (Polygon) mpol.getSurfaceAt(0);
+		Point vert1 = pol.getVertex(0);
+		assertEquals(vert1.getX(), -71.060316);
+		assertEquals(vert1.getY(), 48.432044);
+		assertEquals(vert1.getCoordinateAt(2), 1.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		Point vert2 = pol.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 2.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		Point vert3 = pol.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 3.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		Point vert4 = pol.getVertex(3);
+		assertEquals(vert4.getX(), -71.060316);
+		assertEquals(vert4.getCoordinateAt(2), 1.0);
+		assertEquals(vert4.getCoordinateAt(3), 12.0);
+		
+		
+		pol = (Polygon) mpol.getSurfaceAt(1);
+		vert1 = pol.getVertex(0);
+		assertEquals(vert1.getX(), -70.060316);
+		assertEquals(vert1.getY(), 47.432044);
+		assertEquals(vert1.getCoordinateAt(2), 4.0);
+		assertEquals(vert1.getCoordinateAt(3), 12.0);
+		
+		vert2 = pol.getVertex(1);
+		assertEquals(vert2.getX(), -70.060316);
+		assertEquals(vert2.getY(), 48.432044);
+		assertEquals(vert2.getCoordinateAt(2), 5.0);
+		assertEquals(vert2.getCoordinateAt(3), 11.0);
+		
+		vert3 = pol.getVertex(2);
+		assertEquals(vert3.getX(), -71.060316);
+		assertEquals(vert3.getY(), 47.432044);
+		assertEquals(vert3.getCoordinateAt(2), 6.0);
+		assertEquals(vert3.getCoordinateAt(3), 10.0);
+		
+		vert4 = pol.getVertex(3);
+		assertEquals(vert4.getX(), -70.060316);
+		assertEquals(vert4.getY(), 47.432044);
+		assertEquals(vert4.getCoordinateAt(2), 4.0);
+		assertEquals(vert4.getCoordinateAt(3), 12.0);
+		
+		byte[] bytes = geom.convertToEWKB();
+		assertEquals(wkbHex, getWKBHex(bytes));
+	}
+	
+	
+	
+	private String getWKBHex(byte[] bytes) {
+		StringBuilder sbuilder = new StringBuilder();
+		for(int i=0; i<bytes.length; i++){
+			String s = Integer.toHexString(bytes[i]);
+			if(s.length() < 2){
+				s="0"+s;
+			}else if(bytes[i]<0){
+				s=s.substring(6);
+			}
+			sbuilder.append(s);
+		}
+		return sbuilder.toString().toUpperCase();
+	}
+
+
+	private byte[] getWKB(String wkbHex){
+		byte[] aux = new byte[wkbHex.length()/2];
+		for(int i=0; i<aux.length; i++){
+			int n = Integer.parseInt(wkbHex.substring(i*2, i*2+2), 16);
+			aux[i] = (byte) n;
+		}
+		return aux;
+	}
+
+
+	@Override
+	protected void doSetUp() throws Exception {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/fromwkb/TestWKBParser.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/TestCalculateLambdaPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/TestCalculateLambdaPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/test/java/org/gvsig/fmap/geom/jts/operation/TestCalculateLambdaPoint.java	(revision 46118)
@@ -0,0 +1,51 @@
+package org.gvsig.fmap.geom.jts.operation;
+
+import java.util.Locale;
+import junit.framework.TestCase;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCalculateLambdaPoint extends TestCase {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestCalculateLambdaPoint.class);
+
+    static{
+            Locale.setDefault(Locale.forLanguageTag("es-ES"));
+    }
+
+    public TestCalculateLambdaPoint(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    public void testCalculateLambdaPoint() throws Exception {
+        
+        Point p1_2D = GeometryUtils.createPoint(0, 0);
+        Point p2_2D = GeometryUtils.createPoint(0, 3);
+        double lambda = 0.33;
+        Point lambdaPoint_2D = GeometryUtils.calculateLambdaPoint(p1_2D, p2_2D, lambda);
+        
+        Point p1_3D = GeometryUtils.createPoint(0, 0, 0);
+        Point p2_3D = GeometryUtils.createPoint(0, 3, 10);
+        Point lambdaPoint_3D = GeometryUtils.calculateLambdaPoint(p1_3D, p2_3D, lambda);
+        
+        assertEquals(lambdaPoint_2D.getX(), lambdaPoint_3D.getX());
+        assertEquals(lambdaPoint_2D.getY(), lambdaPoint_3D.getY());
+        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/pom.xml	(revision 46118)
@@ -0,0 +1,119 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.geometry</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.geometry.jts</artifactId>
+    <name>org.gvsig.fmap.geometry.jts</name>
+    <description>Contains a based in JTS implementation of gvSIG geometries library.</description>
+    <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>
+        <repository>
+            <id>Hibernate Spatial repo</id>
+            <url>http://www.hibernatespatial.org/repository</url>
+            <releases>
+                <enabled>true</enabled>
+                <updatePolicy>never</updatePolicy>
+                <checksumPolicy>warn</checksumPolicy>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts-core</artifactId>
+            <version>1.14.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts-io</artifactId>
+            <version>1.14.0</version>
+            <scope>compile</scope>
+        </dependency>
+        
+        
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-spatial</artifactId>
+            <version>4.0</version>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion>
+                    <!-- postgresql:postgresql:jar:8.4-701.jdbc4  -->
+                    <groupId>postgresql</groupId>
+                    <artifactId>postgresql</artifactId>
+                </exclusion>
+                <exclusion>
+                    <!-- org.postgis:postgis-jdbc:jar:1.5.2  -->
+                    <groupId>org.postgis</groupId>
+                    <artifactId>postgis-jdbc</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.jdk.v1_6</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>net.sf</groupId>
+            <artifactId>jsi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.operation.jts</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.util.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.util.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+    </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry
___________________________________________________________________
Added: svn:ignore
   + .classpath
.pom.xml.swp
.svn-commit.tmp.swp
target/**
.project
.directory
.settings/**
.settings
target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestProperties.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/TestUtils.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/test/src/org/gvsig/i18n/utils/config.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/ConfigOptions.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/OrderedProperties.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/TranslationDatabase.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/AddNewTranslations.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/config.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Project.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/DoubleProperties.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/UpdateTrans.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/java/src/org/gvsig/i18n/utils/Keys.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/en/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/gl/text_gl.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_ca.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/ca/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_pt.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/pt/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/cs/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/es/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_fr.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/fr/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/de/text_de.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/eu/text_eu.properties-UTF8	(revision 46118)
@@ -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=
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_es.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_it.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/output/it/text_en.properties-UTF8	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_gl.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/utils/data/database/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_gl.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_es.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/database/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_va.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/config/text_cs.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/_fwAndami/src/com/iver/andami/Launcher.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/config.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/config/otro_pt.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/gui/FOpenDialog.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/data/src/appgvSIG/com/iver/cit/gvsig/AddLayer.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_fr.properties	(revision 46118)
@@ -0,0 +1,4 @@
+#text_fr.properties
+aceptar=Accepter
+Cascada=Cascade
+Configurar=Configurer

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset1/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/TestMessages.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_fr.properties	(revision 46118)
@@ -0,0 +1,4 @@
+#text_fr.properties
+aceptar=Accepter
+Cascada=Cascade
+Configurar=Configurer

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/dataset2/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/test/java/org/gvsig/i18n/AllTests.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.i18n.MessagesLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_en.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_gl.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/resources/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/tools/impl/DefaultI18Manager.java	(revision 46118)
@@ -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.i18n.tools.impl;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.List;
+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 {
+
+    @Override
+    public String getTranslation(String message) {
+        return Messages.getText(message);
+    }
+
+    @Override
+    public String getTranslation(String message, String[] args) {
+        return Messages.getText(message, args);
+    }
+
+    @Override
+    public void addResourceFamily(String family, ClassLoader loader,
+            String callerName) {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        Messages.addResourceFamily(family, loader, callerName);
+    }
+
+    @Override
+    public void addResourceFamily(String family, File folder) {
+        if (!Messages.hasLocales()) {
+            Messages.addLocale(Locale.getDefault());
+        }
+        try {
+            Messages.addResourceFamily(family, folder);
+        } catch (MalformedURLException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public List<Locale> getPreferredLocales() {
+        return Messages.getPreferredLocales();
+    }
+
+    @Override
+    public Locale getCurrentLocale() {
+        return Messages.getCurrentLocale();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesClassLoader.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/Messages.java	(revision 46118)
@@ -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.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.gvsig.tools.util.URLUtils;
+
+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<FamilyDescriptor> 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 folder       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 folder) throws MalformedURLException{
+		// use our own classloader
+		URL[] urls = new URL[] { folder.toURI().toURL() };
+		ClassLoader loader = new MessagesClassLoader(urls);
+                for (FamilyDescriptor familyDescriptor : familyDescriptors) {
+                    if( familyDescriptor.callerName.equals(folder.getAbsolutePath()) &&
+                        familyDescriptor.family.equals(family) ) {
+                        // Already added
+                        return;
+                    }
+                }
+		addResourceFamily(family, loader, folder.getAbsolutePath());
+	}
+
+
+	/**
+	 * <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 <code>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);
+    InputStream is = URLUtils.openStream(resourceURL);
+    if (is == null && langCode.contains("_")) {
+      try {
+        langCode = langCode.split("_")[0];
+        resource = family.replace('.', '/') + "_" + langCode + ".properties";
+        resourceURL = loader.getResource(resource);
+//        is = loader.getResourceAsStream(resource);
+        is = URLUtils.openStream(resourceURL);
+        if (is == null) {
+          resource = family.replace('.', '/') + ".properties";
+          resourceURL = loader.getResource(resource);
+//          is = loader.getResourceAsStream(resource);
+          is = URLUtils.openStream(resourceURL);
+        }
+      } 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
+      resource = family.replace('.', '/') + ".properties";
+      resourceURL = loader.getResource(resource);
+      is = URLUtils.openStream(resourceURL);
+//      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 preferredLocalesList 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;
+        }
+
+        /**
+         * 
+         * @param locale
+         * @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).
+         * @return the base language name
+	 */
+	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);
+	}
+
+
+	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.trace("[" + 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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/MessagesLibrary.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/package.html	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/src/main/java/org/gvsig/i18n/templates/MessagesTemplate.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.i18n
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.metadata.lib.basic.impl.BasicMetadataLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.impl/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib/org.gvsig.metadata.lib.basic.api/pom.xml	(revision 46118)
@@ -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.344</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.344/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

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.metadata.MetadataLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.lib
___________________________________________________________________
Added: svn:ignore
   + .settings

.project


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.metadata.swing.basic.api.MetadataSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.api/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.ToolsLocator;
+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.i18n.I18nManager;
+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;
+
+    private I18nManager i18nManager;
+
+
+    public BasicJMetadataPanel(MetadataSwingManager uiManager,
+            Metadata metadata, boolean editable) {
+        super(uiManager, metadata, editable);
+    }
+
+    protected void initManagers() {
+        manager = MetadataLocator.getMetadataManager();
+        i18nManager = ToolsLocator.getI18nManager();
+    }
+
+    protected void initData() {
+        String metadataName = "";
+        if (!this.hasMetadata()) {
+            return;
+        }
+        try {
+            metadataName = getMetadata().getMetadataName();
+            this.lblName.setText(i18nManager.getTranslation("_{0}_metadata", new String[] {i18nManager.getTranslation(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();
+        }
+        DynFormManager dynformmgr = DynFormLocator.getDynFormManager();
+        dynform = dynformmgr.createJDynForm(metadata);
+        this.add(dynform.asJComponent());
+        this.updateUI();
+        return this;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.metadata.swing.basic.impl.BasicMetadataSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/org.gvsig.metadata.swing.basic.impl/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/org.gvsig.metadata.basic.swing/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.metadata.basic
___________________________________________________________________
Added: svn:ignore
   + .project

.settings


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,25 @@
+
+package org.gvsig.featureform.swing;
+
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.swing.api.Component;
+
+
+public interface JFeatureForm extends Component {
+    
+    public FeatureStore getFeatureStore();
+    
+    public void setStore(FeatureStore store);
+    
+    public void setDefinition(DynFormDefinition  definition);
+    
+    public void setFeature(Feature feature);
+    
+    public JDynForm getDynForm();
+    
+    public void fetch(EditableFeature feature);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/JFeatureReferencesForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JFeatureReferencesForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JFeatureReferencesForm.java	(revision 46118)
@@ -0,0 +1,65 @@
+/* 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 java.util.List;
+
+import org.gvsig.fmap.dal.feature.Feature;
+
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+
+/**
+ * @author gvSIG Team
+ *
+ */
+public interface JFeatureReferencesForm extends Component, ActionListenerSupport {
+    public static final String ACTION_CONTEXT_NAME = "FormActionContext";
+
+    public void setPreferredSize(Dimension dimension);
+
+    public void bind(FeatureStore store, List<FeatureReference> references);
+
+    public long getDataSetSize();
+
+    public void showForm(MODE mode);
+    
+    public void saveChanges();
+
+    public JDynFormSet getFormset();
+    
+    public FeatureStore getFeatureStore();
+    
+    public long getCurrentIndex();
+    
+    public Feature get(long index);
+    
+    public void setFeatures(List<FeatureReference> features);
+
+    public Feature getCurrentFeature();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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/JFeaturesForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JFeaturesForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JFeaturesForm.java	(revision 46118)
@@ -0,0 +1,68 @@
+/* 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.Action;
+
+import org.gvsig.fmap.dal.feature.Feature;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface JFeaturesForm extends Component, ActionListenerSupport {
+    public static final String ACTION_CONTEXT_NAME = "FormActionContext";
+    
+
+    public void setPreferredSize(Dimension dimension);
+
+    public void bind(FeatureStore store);
+
+    public void setQuery(FeatureQuery query);
+
+    public long getDataSetSize();
+
+    public void showForm(MODE mode);
+    
+    public void saveChanges();
+
+    public JDynFormSet getFormset();
+    
+    public FeatureStore getFeatureStore();
+    
+    public void addAction(Action action);
+    
+    public long getCurrentIndex();
+    
+    public Feature getCurrentFeature();
+    
+    public Feature get(long index);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/FeaturesFormContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FeaturesFormContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FeaturesFormContext.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.featureform.swing;
+
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface FeaturesFormContext extends JDynForm.DynFormContext {
+
+    @Override
+    public ResourcesStorage getResourcesStorage();
+
+    public StoresRepository getStoresRepository();
+
+    public FeatureStore getFeatureStore();
+
+    public FeatureType getFeatureType();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/EditingNotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/EditingNotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/EditingNotificationManager.java	(revision 46118)
@@ -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.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+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, Object auxdata, 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, Object auxdata, 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, Object auxdata);
+
+    public EditingNotification notifyObservers(EditingNotification notification);
+    
+    public boolean validateFeature(Feature feature);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryCalculatedColumnsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryCalculatedColumnsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryCalculatedColumnsPanel.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.dal.swing.featurequery;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureQueryCalculatedColumnsPanel extends Component {
+
+  public static final String CONFIGURABLE_PANEL_ID = "FeatureQueryCalculatedColumnsPanel";
+
+  public static final int DEFAULT_WIDTH = 700;
+  public static final int DEFAULT_HEIGHT = 320;
+
+  public void setStore(FeatureStore store);
+
+  public FeatureQuery fetch(FeatureQuery query);
+
+  public FeatureQuery fetch();
+
+  public void put(FeatureQuery query);
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryGroupByPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryGroupByPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryGroupByPanel.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.dal.swing.featurequery;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureQueryGroupByPanel extends Component {
+
+  public static final String CONFIGURABLE_PANEL_ID = "FeatureQueryGroupByPanel";
+
+  public static final int DEFAULT_WIDTH = 650;
+  public static final int DEFAULT_HEIGHT = 320;
+
+  public void setStore(FeatureStore store);
+
+  public FeatureQuery fetch();
+
+  public FeatureQuery fetch(FeatureQuery query);
+
+  public void put(FeatureQuery query);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryOrderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryOrderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/FeatureQueryOrderPanel.java	(revision 46118)
@@ -0,0 +1,29 @@
+package org.gvsig.fmap.dal.swing.featurequery;
+
+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.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureQueryOrderPanel extends Component {
+
+  public static final String CONFIGURABLE_PANEL_ID = "FeatureQueryOrderPanel";
+
+  public static final int DEFAULT_WIDTH = 650;
+  public static final int DEFAULT_HEIGHT = 320;
+
+  public void setStore(FeatureStore store);
+
+  public FeatureQuery fetch(FeatureQuery query);
+
+  public FeatureQuery fetch();
+
+  public void put(FeatureQuery query);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElement.java	(revision 46118)
@@ -0,0 +1,18 @@
+package org.gvsig.fmap.dal.swing.expressionevaluator;
+
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ *
+ * @author osc
+ */
+public interface FeatureStoreElement extends Element.GroupElement {
+
+    public void setName(String name);
+    
+    public void setFeatureStore(FeatureStore store);
+    
+    public FeatureStore getFeatureStore();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchParameters.java	(revision 46118)
@@ -0,0 +1,35 @@
+package org.gvsig.fmap.dal.swing.searchpanel;
+
+import java.util.List;
+import java.util.Map;
+import javax.json.JsonObject;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ *
+ * @author omartinez
+ */
+public interface SearchParameters extends Persistent {
+
+    public FeatureQuery getQuery();
+
+    public Map<String, JsonObject> getValues();
+    
+    public void copyFrom(SearchParameters params);
+    
+    public List<String> getResultColumnNames();
+    
+    public String getName();
+    
+    public void setName(String name);
+    
+    public FeatureType getFeatureType(FeatureStore store);
+    
+    public int getSearchMode();
+    
+    public void setSearchMode(int searchMode);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanel.java	(revision 46118)
@@ -0,0 +1,38 @@
+package org.gvsig.fmap.dal.swing.searchpanel;
+
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.swing.api.ChangeListenerSupport;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.util.Factory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface SearchConditionPanel extends Component, ChangeListenerSupport {
+
+  public interface SearchConditionPanelFactory extends Factory {
+    public boolean isApplicable(FeatureStore store);
+
+    @Override
+    public SearchConditionPanel create(Object... os);
+    
+  }
+  
+  public void clear();
+
+  public Expression get();
+
+  public boolean set(Expression filter);
+
+  public void setEnabled(boolean enabled);
+  
+  public SearchConditionPanelFactory getFactory();
+  
+  public boolean isValid(StringBuilder message);
+  
+  public void put(SearchParameters params);
+  
+  public SearchParameters fetch(SearchParameters params);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/FeatureStoreSearchPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/FeatureStoreSearchPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/FeatureStoreSearchPanel.java	(revision 46118)
@@ -0,0 +1,72 @@
+package org.gvsig.fmap.dal.swing.searchpanel;
+
+import java.util.List;
+import javax.swing.JComponent;
+import org.gvsig.expressionevaluator.Expression;
+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.tools.dispose.Disposable;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.util.PropertiesSupport;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureStoreSearchPanel extends  Component, ActionListenerSupport, Disposable, PropertiesSupport {
+    
+    public static final String CONFIGURABLE_PANEL_ID = "FeatureStoreSearchPanel";
+    
+    public static final String ACTION_CONTEXT_NAME = "FeatureStoreSearchPanel";
+    
+    public static final int DEFAULT_WIDTH = 715;
+    public static final int DEFAULT_HEIGHT = 450;
+    
+    public static final int NOT_HANDLE_NULL = 0;
+    public static final int NULL_AS_TRUE = 1;
+    public static final int NULL_AS_FALSE = 2;
+    
+    public void clear();
+    
+    public void setEnabled(boolean enabled);
+    
+    public FeatureStore getStore();
+
+    public FeatureType getFeatureType();
+
+//    public FeatureQuery getQuery();
+    
+    public Feature getLastSelectedFeature();
+    
+    public FeatureQuery getLastQuery();
+    
+    public Expression getFilterForSelectedFeature();
+    
+    public int getSelectedFeatureCount();
+       
+    public boolean setFilter(Expression filter);
+    
+    public JComponent getActionButton(String name);
+    
+    public void setShowActions(boolean showActions);
+    
+    public boolean isShowActions();
+    
+    public List<SearchConditionPanel> getConditionPanels();
+    
+    public SearchConditionPanel getConditionPanel(String name);
+    
+    public void search();
+    
+    public void put(SearchParameters inParams);
+     
+    public SearchParameters fetch(SearchParameters inParams);
+
+    public void setFilterOnlyMode(boolean filterOnlyMode);
+    
+    public boolean isFilterOnlyMode();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/AbstractSearchConditionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/AbstractSearchConditionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/AbstractSearchConditionPanel.java	(revision 46118)
@@ -0,0 +1,9 @@
+package org.gvsig.fmap.dal.swing.searchpanel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractSearchConditionPanel implements SearchConditionPanel {
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/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/AbstractDALActionFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractDALActionFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractDALActionFactory.java	(revision 46118)
@@ -0,0 +1,81 @@
+package org.gvsig.fmap.dal.swing;
+
+import javax.swing.JComponent;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractDALActionFactory implements DALActionFactory {
+
+    public static abstract class AbstractDALActionContext implements DALActionContext {
+
+        private final String name;
+
+        protected AbstractDALActionContext(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+        
+        @Override
+        public DataStore getStore() {
+            return null;
+        }
+
+        @Override
+        public FeatureQuery getQuery() {
+            return null;
+        }
+        
+        @Override
+        public int getSelectedsCount() {
+            return 0;
+        }
+
+        @Override
+        public Expression getFilterForSelecteds() {
+            return null;
+        }
+
+        @Override
+        public JComponent getActionButton(String actionName) {
+            return null;
+        }
+
+        @Override
+        public Object get(String name) {
+            return null;
+        }
+
+        @Override
+        public void set(String name, Object value) {
+
+        }
+        
+    }
+    
+    private final String name;
+    
+    protected AbstractDALActionFactory(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public boolean isApplicable(Object... args) {
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,170 @@
+/* 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 java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import javax.swing.AbstractButton;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JTextField;
+import javax.swing.table.TableModel;
+import javax.swing.text.JTextComponent;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.featureform.swing.JFeatureReferencesForm;
+import org.gvsig.featureform.swing.JFeaturesForm;
+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.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel.SearchConditionPanelFactory;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryOrderPanel;
+import org.gvsig.fmap.dal.swing.featuretable.SimpleFeaturesTableModel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributeListCellRenderer;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
+
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcessFactory;
+import org.gvsig.tools.dynform.DynFormDefinition;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface DataSwingManager {
+    public static final String  FEATURE_STORE_EXPRESSION_ELEMENT = "DAL.FeatureStoreExpressionElement";
+
+    public JFeaturesForm createJFeaturesForm(FeatureStore store) throws CreateJFeatureFormException;
+    
+    public JFeaturesForm createJFeaturesForm(FeatureStore store, FeatureQuery query) throws CreateJFeatureFormException;
+        
+    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException;
+
+    public JFeatureReferencesForm createJFeatureReferencesForm(FeatureStore store, List<FeatureReference> references) throws CreateJFeatureFormException;
+
+    public JFeatureForm createJFeatureForm(DynFormDefinition definicion) throws CreateJFeatureFormException;
+
+    public JFeatureForm createJFeatureForm(Feature feature) throws CreateJFeatureFormException;
+
+    public JDBCConnectionPanel createJDBCConnectionPanel();
+    
+    public JDBCConnectionDialog createJDBCConectionDialog();
+
+    public JExpressionBuilder createQueryFilterExpresion(FeatureStore store);
+
+    public void configureExpressionBuilder(ExpressionBuilderConfig builder, FeatureStore store);
+
+    public ExpressionPickerController createExpressionPickerController(FeatureStore store, JTextComponent text, JButton button, JButton bookmarks, JButton history);
+
+    public JExpressionBuilder createJExpressionBuilder(final FeatureStore store);
+
+    public FeatureTableModel createFeatureTableModel(FeatureStore featureStore, FeatureQuery featureQuery);
+
+    public FeatureTableModel createFeatureTableModel(FeaturePagingHelper featurePager);
+
+    public FeatureTableModel createEmptyFeatureTableModel(DynStruct struct);
+
+    public JFeatureTable createJFeatureTable(FeatureTableModel model);
+
+    public JFeatureTable createJFeatureTable(FeatureTableModel model, boolean isDoubleBuffered);
+
+    public ProjectionPickerController createProjectionPickerController(
+            JTextField txtProjection,
+            JButton btnSelectProjection
+        );
+ 
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo);
+
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list);
+
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter);
+    
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list, Predicate<FeatureAttributeDescriptor> filter);
+
+    public FeatureTypePanel createFeatureTypePanel();
+    
+    public FeatureTypeAttributePanel createFeatureTypeAttributePanel();    
+
+    public FeatureStoreElement createFeatureStoreElement();
+    
+    public FeatureStoreElement createFeatureStoreElement(FeatureStore store);
+
+    public ExpressionPickerController createExpressionPickerController(FeatureStore store, JTextComponent text, JButton button);
+    
+    public FeatureStoreSearchPanel createFeatureStoreSearchPanel(FeatureStore store);
+    
+    public void registerStoreAction(DALActionFactory action);
+    
+    public  Collection<DALActionFactory> getStoreActions();
+
+    public  DALActionFactory getStoreAction(String name);
+    
+    public void setStoreAction(AbstractButton component, String name, boolean preserveLabel, DALActionContext context);
+
+    public PickerController<JDBCServerExplorerParameters> createJDBCConnectionPickerController(
+            JComboBox cboConnection, JButton btnConnection
+    );
+    public SimpleFeaturesTableModel createSimpleFeaturesTableModel(FeatureStore store);
+    
+    public SimpleFeaturesTableModel createSimpleFeaturesTableModel(FeatureType featureType, List<String> columnNames, List<Feature> features);
+
+    public FeatureAttributeListCellRenderer createDefaultFeatureAttributeListCellRenderer();
+    
+    public FeatureQueryOrderPanel createFeatureStoreOrderPanel();
+
+    public Iterable<SearchConditionPanelFactory> getSearchConditionPanels();
+    
+    public void registerSearchConditionPanel(SearchConditionPanelFactory factory);
+    
+    public FeatureAttributesSelectionPanel createFeatureAttributeSelectionPanel();
+    
+    public void registerSearchPostProcess(SearchPostProcessFactory process);
+    
+    public Map<String,SearchPostProcessFactory> getSearchPostProcess();
+    
+    public SearchPostProcessFactory getSearchPostProcess(String name);
+    
+    public FeaturesFormContext createFeaturesFormContext(FeatureStore store);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/JFeatureTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JFeatureTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JFeatureTable.java	(revision 46118)
@@ -0,0 +1,35 @@
+
+package org.gvsig.fmap.dal.swing;
+
+import java.awt.event.ActionListener;
+import javax.swing.JTable;
+import javax.swing.table.TableModel;
+import org.gvsig.tools.swing.api.Component;
+
+
+public interface JFeatureTable extends Component {
+    
+    public JTable getJTable();
+    
+    public void addColumnSelectionListener(ActionListener listener);
+    
+    public FeatureTableModel getFeatureTableModel();
+    
+    public void setModel(TableModel dataModel);
+    
+    public TableModel getModel();
+            
+    public void setCurrent(int index);
+    
+    public void setVisible(boolean visible);
+    
+    public boolean isVisible();
+    
+    public int getSelectedColumnCount();
+
+    public int[] getSelectedColumns();
+
+    public void setVisibleStatusbar(boolean visible);
+    
+    public boolean isVisibleStatusbar();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypeAttributePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypeAttributePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypeAttributePanel.java	(revision 46118)
@@ -0,0 +1,44 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureTypeAttributePanel extends Component {
+    
+    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor);
+    
+    public void put(FeatureAttributeDescriptor descriptor);
+    
+    public void clean();
+    
+    public void setNameAsNew(FeatureType featureType);
+    
+    public String getName();
+    
+    /**
+     * Sets the display mode of the panel.
+     * Can be:
+     * <ul>
+     * <li>MODE_EDIT_ONLY_METADATA, only allows you to modify the metadata. 
+     *   It can be used without being in store edition.
+     * </li>
+     * <li>MODE_EDIT_ALL, allows you to modify all values. 
+     * The store must be in edition.
+     * </li>
+     * <li>MODE_SHOW_ONLY, only display the values.</li>
+     * </ul>
+     * 
+     * @see {FeatureTypePanel.setMode}
+     * 
+     * @param mode 
+     */
+    public void setMode(int mode);
+
+    public int getMode();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRenderer.java	(revision 46118)
@@ -0,0 +1,14 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import javax.swing.ListCellRenderer;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface FeatureAttributeListCellRenderer extends ListCellRenderer<Object> {
+    
+    public void setUseLabeld(int useLabels);
+    
+    public int getUseLabels();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/AttributeDescriptorPickerController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/AttributeDescriptorPickerController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/AttributeDescriptorPickerController.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface AttributeDescriptorPickerController extends PickerController<FeatureAttributeDescriptor> {
+    
+    public void setFeatureType(FeatureType featureType);
+    
+    public String getName();
+
+    public void clean();
+
+    public void set(String name);
+    
+    public void setAllowNull(boolean allowNull);
+    
+    public boolean getAllowNull();
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeSelectionPanel.java	(revision 46118)
@@ -0,0 +1,30 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureAttributeSelectionPanel extends Component {
+
+  public static final int DEFAULT_WIDTH = 500;
+  public static final int DEFAULT_HEIGHT = 400;
+
+  public FeatureAttributeDescriptor getSelectedAttributeDescriptor();
+
+  /**
+   * Return a TreePath<FeatureAttributeTreeModel.Node> for the selected
+   * attribute.
+   *
+   * @return
+   */
+  public FeatureAttributeDescriptor[] getSelectedPath();
+
+  public FeatureStore getSelectedStore();
+  
+  public String getSelectedName();
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributesSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributesSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributesSelectionPanel.java	(revision 46118)
@@ -0,0 +1,35 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import java.util.List;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureAttributesSelectionPanel extends  Component, ActionListenerSupport {
+    
+    public static final String CONFIGURABLE_PANEL_ID = "FeatureAttributeSelectionPanel";
+    
+    public static final int DEFAULT_WIDTH = 500;
+    public static final int DEFAULT_HEIGHT = 350;
+    
+    public void setStore(FeatureStore store);
+    
+    public void setFeatureType(FeatureType featureType);
+
+    public void setSelectedNames(List<String> names);
+    
+    public List<String> getSelectedNames();
+    
+    public FeatureType getFeatureType();
+    
+    public void setExtraColumns(List<EditableFeatureAttributeDescriptor> extraColumns);
+    
+    public void allowCalculatedAttributes(boolean allowCalculated);
+        
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureTypePanel.java	(revision 46118)
@@ -0,0 +1,45 @@
+package org.gvsig.fmap.dal.swing.featuretype;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.swing.api.ChangeListenerSupport;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureTypePanel extends Component, ChangeListenerSupport {
+
+    public static final String CONFIGURABLE_PANEL_ID = "FeatureTypePanel";
+
+    public static final int MODE_EDIT_ONLY_METADATA = 0;
+    public static final int MODE_EDIT_ALL = 1;
+    public static final int MODE_SHOW_ONLY = 2;
+    
+    
+    public EditableFeatureType fetch(EditableFeatureType type);
+    
+    public void put(FeatureType type);
+    
+    /**
+     * Sets the display mode of the panel.
+     * Can be:
+     * <ul>
+     * <li>MODE_EDIT_ONLY_METADATA, only allows you to modify the metadata. 
+     *   It can be used without being in store edition.
+     * </li>
+     * <li>MODE_EDIT_ALL, allows you to modify all values. 
+     * The store must be in edition.
+     * </li>
+     * <li>MODE_SHOW_ONLY, only display the values.</li>
+     * </ul>
+     * 
+     * @param mode 
+     */    
+    public void setMode(int mode);
+    
+    public int getMode();
+
+    public boolean isEditing();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerController.java	(revision 46118)
@@ -0,0 +1,36 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface ProjectionPickerController extends PickerController<IProjection> {
+
+    ICoordTrans getCoordinateTransformation();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionDialog.java	(revision 46118)
@@ -0,0 +1,22 @@
+package org.gvsig.fmap.dal.swing.jdbc;
+
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.util.LabeledValue;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface JDBCConnectionDialog {
+
+    public String getConnectionName();
+
+    public JDBCServerExplorerParameters getServerExplorerParameters();
+    
+    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters();
+
+    public boolean isCanceled();
+
+    public void showDialog();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,37 @@
+package org.gvsig.fmap.dal.swing.jdbc;
+
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.util.LabeledValue;
+
+
+
+public interface JDBCConnectionPanel extends Component {
+
+    public interface ConnectorFilter {
+        public boolean accept(JDBCServerExplorerParameters parameters);
+    }
+    
+    public void setServerExplorerParameters(JDBCServerExplorerParameters parameters);
+    
+    public void setLabeledServerExplorerParameters(LabeledValue<JDBCServerExplorerParameters> parameters);
+    
+    public JDBCServerExplorerParameters getServerExplorerParameters();
+    
+    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters();
+    
+    public boolean areTheParametersValid();
+    
+    public String getParametersProblems();
+
+    public void delete();
+    
+    public void clear();
+    
+    public String getConnectionName();
+    
+    public boolean isNewConnection();
+    
+    public void setConnectorFilter(ConnectorFilter connectorFilter);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModel.java	(revision 46118)
@@ -0,0 +1,52 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.featuretable;
+
+import java.util.List;
+import java.util.Map;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.util.UnmodifiableBasicList;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface SimpleFeaturesTableModel extends TableModel, Disposable, UnmodifiableBasicList<Feature> {
+
+    public List<Feature> getFeatures();
+
+    public boolean hasErrors();
+
+    public void setCellRenderers(JTable table);
+    
+    public void setCellRenderers(JTable table, Map<String, TableCellRenderer> renderers);
+    
+    public FeatureAttributeDescriptor getFeatureDescriptor(int columnIndex);
+    
+    public Feature getFeatureAt(int rowIndex);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/FeatureTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FeatureTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FeatureTableModel.java	(revision 46118)
@@ -0,0 +1,73 @@
+
+package org.gvsig.fmap.dal.swing;
+
+import java.awt.event.ActionListener;
+import java.util.Locale;
+import javax.swing.table.TableModel;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.exception.BaseException;
+
+
+public interface FeatureTableModel extends TableModel {
+
+    public static final String CHANGE_SELECTION = "ChangeSelection";
+    
+    public Locale getLocaleOfData();
+    
+    public void setLocaleOfData(Locale locale);
+
+    public void setAllVisible();
+    
+    public int getOriginalColumnIndex(int index);
+    
+    public String getOriginalColumnName(int index);
+
+    public FeatureAttributeDescriptor getColumnDescriptor(int columnIndex);
+
+    public String getColumnFormattingPattern(int columnIndex);
+
+    public String getColumnFormattingPattern(String columnName);
+
+    public void setColumnFormattingPattern(String columnName, String pattern);
+
+    public boolean isColumnVisible(String columnName);
+
+    public void setColumnVisible(String columnName, boolean visible);
+
+    public String getColumnAlias(String columnName);
+
+    public void setColumnAlias(String columnName, String alias);
+
+    public void setColumnOrder(String columnName, boolean ascending) throws BaseException;
+
+    public Feature getFeatureAt(int rowIndex);
+
+    public FeatureQuery getFeatureQuery();
+
+    public FeatureStore getFeatureStore();
+
+    public FeatureType getFeatureType();
+
+    public FeaturePagingHelper getFeaturePager();
+
+    public  void setSelectionUp(boolean selectionUp);
+    
+    public  boolean isSelectionUp();
+    
+    public boolean isSelectionLocked();
+            
+    public int getSelectionCount();
+    
+    public FeatureSelection getFeatureSelection();
+    
+    public void setFeatureSelection(FeatureSelection selection);    
+    
+    public void addChangeListener(ActionListener listener);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DALActionFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DALActionFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DALActionFactory.java	(revision 46118)
@@ -0,0 +1,44 @@
+package org.gvsig.fmap.dal.swing;
+
+import javax.swing.Action;
+import javax.swing.JComponent;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.tools.util.IsApplicable;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface DALActionFactory extends IsApplicable {
+
+    public interface DALActionContext {
+        public String getName();
+        public DataStore getStore();
+        
+        public FeatureQuery getQuery();
+
+        public int getSelectedsCount();
+        public Expression getFilterForSelecteds();
+
+        public JComponent getActionButton(String actionName);
+        public Object get(String name);
+        public void set(String name, Object value);
+    }
+    
+    public String getName();
+
+    /**
+     * Check if this factory is applicable to the first argument.
+     * The first argument can be instanceof DALActionContext
+     * @param args
+     * @return 
+     */
+    @Override
+    public boolean isApplicable(Object... args);
+    
+    public Action createAction(DALActionContext context);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanel.java	(revision 46118)
@@ -0,0 +1,36 @@
+
+package org.gvsig.fmap.dal.swing.dataStoreParameters;
+
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.swing.api.Component;
+
+
+public interface DataStoreParametersPanel extends Component {
+
+    /**
+     * Sets the value of parameters in the panel.
+     *
+     * @param parameters to get the values and set in the panel
+     */
+    public void putParameters(DynObject parameters);
+
+    /**
+     * Gets the values of from the panel and set in the passed parameters.
+     *
+     * @param parameters to put in the panel values
+     */
+    public void fetchParameters(DynObject parameters);
+
+    public void setExcludeGeometryOptions(boolean exclude);
+
+    public boolean getExcludeGeometryOptions();
+
+    /**
+     * Return the JDynForm of this panel.
+     * Can return null if this panel don't have a JDynForm.
+     *
+     * @return
+     */
+    public JDynForm getForm();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanel.java	(revision 46118)
@@ -0,0 +1,25 @@
+
+package org.gvsig.fmap.dal.swing.dataStoreParameters;
+
+import org.gvsig.tools.dynform.JDynForm;
+
+public abstract class AbstractDataStoreParametersPanel implements DataStoreParametersPanel {
+
+    private boolean excludeGeometryOptions = false;
+    
+    @Override
+    public boolean getExcludeGeometryOptions() {
+        return excludeGeometryOptions;
+    }    
+    
+    @Override
+    public void setExcludeGeometryOptions(boolean excludeGeometryOptions) {
+        this.excludeGeometryOptions = excludeGeometryOptions;
+    }
+
+    @Override
+    public JDynForm getForm() {
+        return null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelFactory.java	(revision 46118)
@@ -0,0 +1,35 @@
+
+package org.gvsig.fmap.dal.swing.dataStoreParameters;
+
+import org.gvsig.tools.dynobject.DynObject;
+
+
+public interface DataStoreParametersPanelFactory {
+    
+    public static final int LOWEST_PRIORITY = 1;
+    public static final int DEFAULT_PRIORITY = 100;
+    
+    /**
+     * Create the properties panel associated to the parameters.
+     * @param parameters
+     * @return the properties panel.
+     */
+    public DataStoreParametersPanel create(DynObject parameters);
+
+    /**
+     * Return true if this factory can apply to the parameters.
+     * 
+     * @param parameters
+     * @return true if this factory can apply to the parameters
+     */
+    public boolean canBeApplied(DynObject parameters);
+    
+    /**
+     * The priority of this factory.
+     * Cuando hay mas de una factoria aplicable a unos parametros es cogida la
+     * de prioridad mas alta.
+     * 
+     * @return the priority of this factory
+     */
+    public int getPriority();    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreParametersPanelManager.java	(revision 46118)
@@ -0,0 +1,35 @@
+
+package org.gvsig.fmap.dal.swing.dataStoreParameters;
+
+import org.gvsig.tools.dynobject.DynObject;
+
+
+public interface DataStoreParametersPanelManager {
+    /**
+     * Register a new PropertiesPageFactory in this manager.
+     * 
+     * @param factory 
+     */
+    public void registerFactory(DataStoreParametersPanelFactory factory);
+    
+    /**
+     * Return the factory associated to the passed parameters.
+     * 
+     * @param parameters
+     * @return the factory for the parameters 
+     */
+    public DataStoreParametersPanelFactory getFactory(DynObject parameters);
+    
+    /**
+     * Create and return the panel associated to the passed parameters,
+     * 
+     * @param parameters
+     * @return the panel for the parameters  
+     */
+    public DataStoreParametersPanel createDataStoreParametersPanel(DynObject parameters);    
+    
+    public int showPropertiesDialog(DynObject parameters);
+    
+    public int showPropertiesDialog(final DynObject parameters, final DataStoreParametersPanel panel);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/AbstractDataStoreParametersPanelFactory.java	(revision 46118)
@@ -0,0 +1,11 @@
+
+package org.gvsig.fmap.dal.swing.dataStoreParameters;
+
+public abstract class AbstractDataStoreParametersPanelFactory implements DataStoreParametersPanelFactory {
+
+    @Override
+    public int getPriority() {
+        return DEFAULT_PRIORITY;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcess.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcess.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcess.java	(revision 46118)
@@ -0,0 +1,39 @@
+/*
+ * 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.searchPostProcess;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ *
+ * @author jovivas
+ */
+public interface SearchPostProcess {
+    
+    public interface SearchPostProcessResult{
+        
+        FeatureStore getStore();
+        
+        FeatureQuery getQuery();
+        
+    }
+    
+    public SearchPostProcessResult execute(FeatureStore input, FeatureQuery query, DynObject parameters, SimpleTaskStatus status);
+    
+    public String getLabel();
+    
+    public String getName();
+    
+    public SearchPostProcessFactory getFactory();
+    
+    public DynObject getParameters();
+    
+    public void setParameters(DynObject parameters);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcess.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcess.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcess.java	(revision 46118)
@@ -0,0 +1,125 @@
+/*
+ * 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.searchPostProcess;
+
+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.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jovivas
+ */
+public class AbstractSearchPostProcess implements SearchPostProcess{
+    
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractSearchPostProcess.class);
+
+    private final SearchPostProcessFactory factory;
+    public final FeatureStore input;
+    private final FeatureQuery query;
+    private DynObject parameters;
+    private SearchPostProcessResult output;
+    
+    public class DefaultSearchPostProcessResult implements SearchPostProcessResult {
+        
+        FeatureStore store;
+        FeatureQuery query;
+
+        public DefaultSearchPostProcessResult(FeatureStore store, FeatureQuery query) {
+            this.store=store; 
+            this.query=query;
+        }
+
+        public FeatureStore getStore(){
+            return this.store;
+        }
+
+        public FeatureQuery getQuery(){
+            return this.query;   
+        }
+
+    }
+      
+    protected AbstractSearchPostProcess (
+        SearchPostProcessFactory factory,
+        FeatureStore input,
+        FeatureQuery query,
+        DynObject parameters
+            
+    ){
+        this.factory=factory;
+        this.input=input;
+        this.parameters=parameters;
+        this.query=query;
+        this.output=null;
+    }
+
+    @Override
+    public SearchPostProcessResult execute(FeatureStore input, FeatureQuery query, DynObject parameters, SimpleTaskStatus status) {
+        try {
+            this.input.accept(new Visitor() {
+                @Override
+                public void visit(final Object obj) throws VisitCanceledException, BaseException {
+                    try {
+                        check((Feature) obj, query);
+                    } catch (Exception ex) {
+                        throw new RuntimeException(ex);
+                    }
+                }
+            
+            });
+            this.input.dispose();
+        } catch(VisitCanceledException ex) {
+            LOGGER.warn("Error", ex);
+        } catch (DataException ex) {
+            LOGGER.warn("Error", ex);
+        } catch (BaseException ex) {
+            LOGGER.warn("Error", ex);
+        }
+        
+        return output;
+    }
+
+    protected void check(Feature feature, FeatureQuery query) throws Exception {
+        
+    }
+
+    @Override
+    public String getLabel() {
+        return this.getFactory().getLabel();
+    }
+
+    @Override
+    public String getName() {
+        return this.getFactory().getName();
+    }
+
+    @Override
+    public SearchPostProcessFactory getFactory() {
+        return this.factory;
+    }
+
+    @Override
+    public DynObject getParameters() {
+        return this.parameters;
+    }
+
+    @Override
+    public void setParameters(DynObject parameters) {
+        this.parameters=parameters;
+    }
+    
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcessFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcessFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/SearchPostProcessFactory.java	(revision 46118)
@@ -0,0 +1,33 @@
+/*
+ * 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.searchPostProcess;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ *
+ * @author jovivas
+ */
+public interface SearchPostProcessFactory {
+    
+    public String getName();
+    
+    public String getLabel();
+    
+    public String getDescription();
+    
+    public DynObject createProcessParameters(FeatureStore input, FeatureQuery query, SearchParameters searchParams);
+    
+    public boolean hasProcessParameters();
+    
+    public boolean isApplicable(FeatureStore input);
+    
+    public SearchPostProcess createProcess(SearchPostProcessFactory factory, FeatureStore input, FeatureQuery query, DynObject parameters);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcessFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcessFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/AbstractSearchPostProcessFactory.java	(revision 46118)
@@ -0,0 +1,79 @@
+/*
+ * 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.searchPostProcess;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jovivas
+ */
+public class AbstractSearchPostProcessFactory implements SearchPostProcessFactory {
+    
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractSearchPostProcessFactory.class);
+    
+    protected String label;
+    protected String name;
+    protected String description;
+    protected FeatureStore input;
+    protected FeatureQuery query;
+    
+    protected AbstractSearchPostProcessFactory (
+        String label,
+        String name,
+        String description,
+        FeatureStore input,
+        FeatureQuery query
+    ){
+        this.label=label;
+        this.name=name;
+        this.description=description;
+        this.input=input;
+        this.query=query;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public DynObject createProcessParameters(FeatureStore input, FeatureQuery query, SearchParameters searchParams) {
+        return null;
+    }
+
+    @Override
+    public boolean hasProcessParameters() {
+        return false;
+    }
+
+    @Override
+    public boolean isApplicable(FeatureStore input) {
+        return false;
+        // hay que especificar codigo de si un postproceso se puede aplicara un determinado tipo de dato
+    }
+
+    @Override
+    public SearchPostProcess createProcess(SearchPostProcessFactory factory, FeatureStore input, FeatureQuery query, DynObject parameters) {
+        return null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,148 @@
+/* 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.fmap.dal.EditingNotificationManager;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.tools.locator.BaseLocator;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DALSwingLocator extends BaseLocator {
+
+    /**
+     * AttributeEditor swing manager name.
+     */
+    public static final String SWING_MANAGER_NAME = "dal.swing.manager";
+
+    /**
+     * AttributeEditor swing manager description.
+     */
+    public static final String SWING_MANAGER_DESCRIPTION = "DAL Swing Manager";
+
+    private static final String EDITINGNOTIFICATION_MANAGER_NAME = "dal.editingnotification.manager";
+    private static final String EDITINGNOTIFICATION_MANAGER_DESCRIPTION = "DAL editing notification manager";
+    
+    private static final String DATASTOREPARAMETERSPANEL_MANAGER_NAME = "dal.DataStoreParametersPanel.manager";
+    private static final String DATASTOREPARAMETERSPANEL_MANAGER_DESCRIPTION = "DAL DataStoreParametersPanel manager";
+    
+    private static final String LOCATOR_NAME = "dal.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
+     */
+    @Override
+    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 getManager() {
+        return getDataSwingManager();
+    }
+
+    public static DataSwingManager getSwingManager() {
+        return getDataSwingManager();
+    }
+
+    public static DataSwingManager getDataSwingManager() {
+        return (DataSwingManager) getInstance()
+                .get(SWING_MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the EditingNotificationManager interface.
+     *
+     * @param clazz implementing the EditingNotificationManager interface
+     */
+    public static void registerEditingNotificationManager(Class clazz) {
+        getInstance().register(EDITINGNOTIFICATION_MANAGER_NAME, EDITINGNOTIFICATION_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link EditingNotificationManager} registered.
+     *
+     * @return {@link EditingNotificationManager}
+     */
+    public static EditingNotificationManager getEditingNotificationManager() {
+        return (EditingNotificationManager) getInstance()
+                .get(EDITINGNOTIFICATION_MANAGER_NAME);
+    }    
+    
+    /**
+     * Registers the Class implementing the DataStoreParametersPanelManager interface.
+     *
+     * @param clazz implementing the DataStoreParametersPanelManager interface
+     */
+    public static void registerDataStoreParametersPanelManager(Class clazz) {
+        getInstance().register(
+                DATASTOREPARAMETERSPANEL_MANAGER_NAME, 
+                DATASTOREPARAMETERSPANEL_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Gets the instance of the {@link DataStoreParametersPanelManager} registered.
+     *
+     * @return {@link DataStoreParametersPanelManager}
+     */
+    public static DataStoreParametersPanelManager getDataStoreParametersPanelManager() {
+        return (DataStoreParametersPanelManager) getInstance()
+                .get(DATASTOREPARAMETERSPANEL_MANAGER_NAME);
+    }    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,62 @@
+/* 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.fmap.dal.DALLibrary;
+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);
+        require(DALLibrary.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.344/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/EditingNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/EditingNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/EditingNotification.java	(revision 46118)
@@ -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;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+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 Object getAuxData();
+    
+    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.344/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/EditingNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.swing.DALSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.api/pom.xml	(revision 46118)
@@ -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.api</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>jar</packaging>    
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.swing</artifactId>
+      <version>2.0.344</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>
+      <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.expressionevaluator.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestEditable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestEditable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestEditable.java	(revision 46118)
@@ -0,0 +1,69 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import java.io.File;
+import java.net.URL;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TestEditable {
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) throws Exception {
+        TestEditable test = new TestEditable();
+        new DefaultLibrariesInitializer().fullInitialize();
+        test.run();
+    }
+    
+    public void run() throws Exception {
+        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        DataSwingManager manager = DALSwingLocator.getSwingManager();
+        
+        URL resource = this.getClass().getResource("/org/gvsig/esp_comaut/esp_comaut.dbf");
+        FeatureStore store = openShape(resource);
+        FeatureTypePanel panel = new DefaultFeatureTypePanel();
+        panel.put(store.getDefaultFeatureType().getEditable());
+        panel.setMode(
+                store.isEditing()
+                ? FeatureTypePanel.MODE_EDIT_ALL
+                : FeatureTypePanel.MODE_EDIT_ONLY_METADATA
+        );
+        
+        Dialog dialog = windowManager.createDialog(
+                panel.asJComponent(),
+                "Test", 
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+            System.exit(0);
+        });
+        dialog.show(WindowManager.MODE.WINDOW);        
+    }
+  
+    public FeatureStore openShape(URL resource) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                "DBF", 
+                "dbffile", new File(resource.toURI())
+//                "CRS", CRSFactory.getCRS("EPSG:23030")
+        );
+        return store;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestNotEditable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestNotEditable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/test/java/org/gvsig/fmap/dal/swing/impl/featuretype/TestNotEditable.java	(revision 46118)
@@ -0,0 +1,59 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import java.io.File;
+import java.net.URL;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TestNotEditable {
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) throws Exception {
+        TestNotEditable test = new TestNotEditable();
+        new DefaultLibrariesInitializer().fullInitialize();
+        test.run();
+    }
+    
+    public void run() throws Exception {
+        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        DataSwingManager manager = DALSwingLocator.getSwingManager();
+        
+        URL resource = this.getClass().getResource("/org/gvsig/esp_comaut/esp_comaut.dbf");
+        FeatureStore store = openShape(resource);
+        FeatureTypePanel panel = new DefaultFeatureTypePanel();
+        panel.put(store.getDefaultFeatureType());
+        
+        Dialog dialog = windowManager.createDialog(
+                panel.asJComponent(),
+                "Test", 
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.show(WindowManager.MODE.WINDOW);        
+    }
+  
+    public FeatureStore openShape(URL resource) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                "DBF", 
+                "dbffile", new File(resource.toURI())
+//                "CRS", CRSFactory.getCRS("EPSG:23030")
+        );
+        return store;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.swing.impl.DefaultDALSwingLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/projectionpicker/picker-crs.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/projectionpicker/picker-crs.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/projectionpicker/picker-crs.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/projectionpicker/picker-crs.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/projectionpicker/picker-crs.svg	(revision 46118)
@@ -0,0 +1,8811 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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="640pt"
+   height="548pt"
+   viewBox="0 0 640 548"
+   version="1.1"
+   id="svg16804"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="crs.svg">
+  <metadata
+     id="metadata18643">
+    <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>
+  <defs
+     id="defs18641" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1366"
+     inkscape:window-height="739"
+     id="namedview18639"
+     showgrid="false"
+     inkscape:zoom="0.34452555"
+     inkscape:cx="730.8818"
+     inkscape:cy="-403.88566"
+     inkscape:window-x="1366"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg16804" />
+  <ellipse
+     style="fill:#d4d4d4;fill-opacity:1;stroke:none;stroke-width:2.41763997;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+     id="path23134"
+     cx="-431.89832"
+     cy="1001.8303"
+     rx="330.3876"
+     ry="328.32434"
+     inkscape:export-xdpi="1.7543626"
+     inkscape:export-ydpi="1.7543626" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16809"
+     d="m 634.25,303.35156 0.39845,-32.70313"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16811"
+     d="m 635,246 0,25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16813"
+     d="M 65.351565,434.94922 46.351562,407.39844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16815"
+     d="m 32.25,386.75 14.101562,20.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16817"
+     d="M 623.60155,198.85157 609.75,167.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16819"
+     d="M 599.35155,146.5 609.75,167.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16821"
+     d="M 14.351563,341.75 7.3984375,309.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16823"
+     d="m 3.6992188,285.35156 3.6992187,24.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16825"
+     d="M 543.89845,465.5 568,440.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16827"
+     d="M 584.75,422.80078 568,440.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16829"
+     d="M 7.3984375,236.85156 15.101563,204.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16831"
+     d="m 22.25,181.64844 -7.148437,23"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16833"
+     d="M 527.5508,69.351565 496.14844,49.398437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16835"
+     d="m 478.94922,39.449218 17.19922,9.949219"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16837"
+     d="m 229.30078,533.85155 -34.19922,-11.2031"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16839"
+     d="m 178.10157,516.39845 17,6.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16841"
+     d="M 478.94922,39.449218 443.19922,24.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16843"
+     d="M 428.39844,19.300781 443.19922,24.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16845"
+     d="m 178.10157,516.39845 -32.25,-16.50001"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16847"
+     d="m 127.55078,489.35157 18.30079,10.54687"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16849"
+     d="M 608.6992,381.55078 623.25,350.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16851"
+     d="M 630.60155,327.35156 623.25,350.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16853"
+     d="m 310.30078,544.75 35.25,-0.85155"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16855"
+     d="m 349.94922,543.64845 -4.39844,0.25"
+     style="fill:none;stroke:#009c73;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16857"
+     d="m 349.94922,543.64845 -4.39844,0.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16861"
+     d="m 630.9492,222.25 3.69925,24.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16863"
+     d="m 308.60156,544.64845 1.69922,0.10155"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16865"
+     d="M 391.89844,9.8984375 352,4.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16867"
+     d="M 347.25,4.25 352,4.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16869"
+     d="M 47,139.14844 66.64844,111.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16871"
+     d="m 82.64844,94.5 -16,17.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16873"
+     d="M 52.25,415.69922 32.25,386.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16875"
+     d="M 21.550781,364.80078 32.25,386.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16877"
+     d="M 231.14844,13.648438 269.55078,6.4492185"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16879"
+     d="M 277.19922,5.8515625 269.75,6.3984375"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16881"
+     d="m 568.89845,108.39844 -23.5,-24.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16883"
+     d="M 527.5508,69.351565 545.39845,83.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16887"
+     d="M 585.6992,126.60157 599.35155,146.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16891"
+     d="m 4,261 0,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16893"
+     d="M 494.35157,499.5 526.1992,479.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16895"
+     d="M 543.89845,465.5 526.1992,479.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16897"
+     d="M 147.30078,47.199218 179.89844,30.898437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16899"
+     d="m 196.69922,24.699218 -16.80078,6.199219"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16901"
+     d="M 110.39844,475.60157 81.44922,452.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16903"
+     d="M 65.351565,434.94922 81.44922,452.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16905"
+     d="m 389.94922,538.4492 36.75,-9.1992"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16907"
+     d="M 441.25,523.89845 426.69922,529.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16911"
+     d="M 32.949218,159.75 22.25,181.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16915"
+     d="M 598.35155,402.94922 584.75,422.80078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16917"
+     d="M 101.44922,79.351565 128.60157,58"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16919"
+     d="M 147.30078,47.199218 128.60157,58"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16921"
+     d="m 428.39844,19.300781 -36.5,-9.4023435"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16925"
+     d="m 441.25,523.89845 36.10157,-14.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16927"
+     d="m 494.35157,499.5 -17,9.89845"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16929"
+     d="m 267.75,541.3008 -38.44922,-7.44925"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16933"
+     d="m 196.69922,24.699218 34.44922,-11.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16939"
+     d="m 634.25,303.35156 -3.64845,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16943"
+     d="M 623.60155,198.85157 630.9492,222.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16945"
+     d="M 507.25,57.44922 478.94922,39.449218"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16947"
+     d="m 459.85157,32.25 19.09765,7.199218"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16951"
+     d="M 110.39844,475.60157 127,489.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16955"
+     d="m 14.351563,341.75 7.199218,23.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16957"
+     d="m 349.94922,543.64845 40,-5.19925"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16959"
+     d="m 399.5,534.35155 -9.55078,4.09765"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16963"
+     d="M 101.44922,79.351565 82.64844,94.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16965"
+     d="m 10.699219,293.55078 -7.0000002,-32.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16967"
+     d="M 7.3984375,236.85156 3.6992188,261.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16977"
+     d="M 598.39845,154.89844 585.6992,126.60157"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16979"
+     d="m 568.89845,108.39844 16.80075,18.20313"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16983"
+     d="M 47,139.14844 32.949218,159.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16985"
+     d="M 308.60156,544.64845 267.75,541.3008"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16987"
+     d="M 260.60156,537.60155 267.75,541.3008"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16991"
+     d="m 507.25,57.44922 20.3008,11.902345"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16995"
+     d="m 52.25,415.69922 13.101565,19.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16997"
+     d="m 571.3008,430.5 27.05075,-27.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16999"
+     d="m 608.6992,381.55078 -10.34765,21.39844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17011"
+     d="M 347.25,4.25 312.05078,3.1992188"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17013"
+     d="M 277.19922,5.8515625 312.05078,3.1992188"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17021"
+     d="M 342.19922,7.1484375 347.25,4.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17025"
+     d="m 168.05078,39.050781 -20.75,8.148437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17027"
+     d="M 168.05078,39.050781 196.69922,24.699218"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17037"
+     d="m 285.14843,8.4492185 -7.94921,-2.597656"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17041"
+     d="m 612.6992,176.30078 10.90235,22.55079"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17061"
+     d="M 14.800781,213.05078 7.3984375,236.85156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17077"
+     d="m 96.30078,459.85157 14.09766,15.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17083"
+     d="M 40.148437,167.94922 47,139.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17087"
+     d="M 484.80078,48.101562 459.85157,32.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17089"
+     d="M 439.14844,27.851562 459.85157,32.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17095"
+     d="M 84.75,441.89844 52.25,415.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17109"
+     d="M 571.3008,430.5 559,449.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17111"
+     d="M 619.1992,310.94922 634.25,279"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17117"
+     d="M 408.14844,527.1992 399.5,534.35155"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17125"
+     d="m 598.39845,154.89844 14.30075,21.40234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17127"
+     d="M 146.44922,56 168.05078,39.050781"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17129"
+     d="m 190.55078,33.648437 -22.5,5.402344"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17133"
+     d="m 254.14844,530.8008 6.45312,6.80075"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17141"
+     d="M 25.75,190 14.800781,213.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17183"
+     d="m 336.89844,13.148438 5.30078,-6.0000005"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17187"
+     d="M 293.5,14.148438 285.14843,8.4492185"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17195"
+     d="m 84.75,441.89844 11.55078,17.95313"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17209"
+     d="m 598.0508,183.89844 0.34765,-29"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17211"
+     d="m 580.8008,134.89844 17.59765,20"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17215"
+     d="m 417.05078,26.398437 22.09766,1.453125"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17217"
+     d="M 502,66.14844 484.80078,48.101562"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17221"
+     d="M 532.5508,454.64844 571.3008,430.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17223"
+     d="M 580.6992,410.14844 571.3008,430.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17235"
+     d="M 40.148437,167.94922 25.75,190"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17237"
+     d="M 32.199218,324.64844 10.699219,293.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17247"
+     d="m 214.55078,31.101562 -24,2.546875"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17259"
+     d="m 415.69922,517.0508 -7.55079,10.1484"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17265"
+     d="M 133,74.80078 146.44922,56"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17283"
+     d="m 560.14845,116.55078 20.65235,18.34766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17291"
+     d="m 248.5,520.9492 5.64844,9.8516"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17297"
+     d="M 128.30078,464.10157 84.75,441.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17299"
+     d="m 76,421.94922 8.75,19.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17305"
+     d="M 46.351562,196.80078 40.148437,167.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17307"
+     d="M 57.80078,147.14844 40.148437,167.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17331"
+     d="m 586.9492,388.19922 -6.25,21.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17337"
+     d="m 331.35156,22.25 5.54688,-9.101562"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17341"
+     d="m 393.80078,27.800781 23.25,-1.402344"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17345"
+     d="M 302.14843,22.949218 293.5,14.148438"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17355"
+     d="M 510.6992,85.55078 502,66.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17373"
+     d="M 239.85156,31.398437 214.55078,31.101562"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17381"
+     d="m 536.6992,100.05078 23.44925,16.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17387"
+     d="M 590.14845,340.60156 619.1992,310.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17393"
+     d="M 78.601565,127.80078 57.80078,147.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17409"
+     d="m 422.14844,504.10155 -6.44922,12.94925"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17411"
+     d="M 483.80078,474.25 532.5508,454.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17425"
+     d="M 70.101565,400.30078 76,421.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17427"
+     d="M 128.30078,94.5 133,74.80078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17433"
+     d="m 590.14845,364.94922 -3.19925,23.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17439"
+     d="m 584.75,212.14844 13.3008,-28.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17445"
+     d="M 243.69922,508.25 248.5,520.9492"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17453"
+     d="m 510.6992,85.55078 26,14.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17457"
+     d="m 369.64844,32.101562 24.15234,-4.300781"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17465"
+     d="M 102.14844,110.19922 78.601565,127.80078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17477"
+     d="M 331.35156,22.25 316.69922,21.851562"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17479"
+     d="m 302.14843,22.949218 14.55079,-1.097656"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17489"
+     d="M 266.05078,34.5 239.85156,31.398437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17491"
+     d="M 345.5,24.148437 331.35156,22.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17493"
+     d="M 325.69922,34.300781 331.35156,22.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17497"
+     d="M 67.14844,352.80078 32.199218,324.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17501"
+     d="m 288.44922,25.5 13.69921,-2.550782"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17503"
+     d="M 311.05078,34.648437 302.14843,22.949218"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17505"
+     d="m 180.75,481.35157 -52.44922,-17.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17509"
+     d="m 358.5,27.5 -13,-3.351563"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17521"
+     d="M 276.19922,29.449218 288.44922,25.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17529"
+     d="m 510.4492,105.39844 0.25,-19.84766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17531"
+     d="m 482.44922,73.30078 28.24998,12.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17541"
+     d="M 369.64844,32.101562 358.5,27.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17547"
+     d="m 590,341 0,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17551"
+     d="m 67.14844,377.14844 2.953125,23.15234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17559"
+     d="m 128.30078,94.5 -26.15234,15.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17565"
+     d="m 266.05078,34.5 10.14844,-5.050782"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17569"
+     d="m 65.351565,224.30078 -19.000002,-27.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17579"
+     d="m 427.39844,488.39844 -5.25,15.70311"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17581"
+     d="m 378.5,37.75 -8.85156,-5.648438"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17583"
+     d="m 344.94922,39.25 24.69922,-7.148438"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17593"
+     d="M 427.39844,488.39844 483.80078,474.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17603"
+     d="m 452.30078,63.39844 30.14844,9.90234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17605"
+     d="M 258.35156,40.550781 266.05078,34.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17607"
+     d="M 292.85156,40.449218 266.05078,34.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17609"
+     d="m 132.55078,114.25 -4.25,-19.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17611"
+     d="M 156.69922,80.89844 128.30078,94.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17615"
+     d="M 239.75,492.80078 243.69922,508.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17621"
+     d="M 384.64844,44.148437 378.5,37.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17637"
+     d="m 548.4492,366.55078 41.69925,-25.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17639"
+     d="m 586.9492,315.44922 3.19925,25.15234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17655"
+     d="m 67,353 0,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17659"
+     d="m 320,49.148437 5.69922,-14.847656"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17665"
+     d="m 320,49.148437 -8.94922,-14.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17667"
+     d="m 253.60156,47.199218 4.75,-6.648437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17675"
+     d="m 239.75,492.80078 -59,-11.44921"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17685"
+     d="m 420.60157,55.94922 31.69921,7.44922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17701"
+     d="M 187,69.601565 156.69922,80.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17715"
+     d="m 387.69922,51.05078 -3.05078,-6.902343"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17725"
+     d="M 320,49.148437 344.94922,39.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17727"
+     d="m 559,238.39844 25.75,-26.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17733"
+     d="M 320,49.148437 292.85156,40.449218"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17735"
+     d="m 501.3008,124.80078 9.1484,-19.40234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17741"
+     d="m 387.69922,51.05078 32.90235,4.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17745"
+     d="M 218.85156,60.64844 187,69.601565"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17747"
+     d="m 251.89844,54.19922 1.70312,-7.000002"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17751"
+     d="m 366,496.39844 61.39844,-8"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17753"
+     d="m 431.39844,470.19922 -4,18.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17765"
+     d="m 580.6992,289.85156 6.25,25.59766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17779"
+     d="M 113.94922,376.69922 67.14844,352.80078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17781"
+     d="m 70.101565,327.55078 -2.953125,25.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17791"
+     d="m 387.64844,58.101565 0.0508,-7.050785"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17793"
+     d="m 354.05078,48.75 33.64844,2.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17797"
+     d="m 251.89844,54.19922 -33.04688,6.44922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17803"
+     d="m 302.5,497.89844 -62.75,-5.09766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17805"
+     d="m 236.75,474.75 3,18.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17819"
+     d="m 253.44922,61.25 -1.55078,-7.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17821"
+     d="m 285.75,50.35156 -33.85156,3.84766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17825"
+     d="M 320,49.148437 354.05078,48.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17831"
+     d="M 145.60157,133.10157 132.55078,114.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17835"
+     d="m 302.5,497.89844 63.5,-1.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17847"
+     d="M 320,49.148437 285.75,50.35156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17851"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17853"
+     d="M 332.5,65.75 320,49.148437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17855"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17859"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17863"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17865"
+     d="M 349.25,59 320,49.148437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17867"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17871"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17875"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17877"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17879"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17881"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17883"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17885"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17887"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17889"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17891"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17893"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17895"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17897"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17899"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17901"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17903"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17905"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17909"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17913"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17915"
+     d="M 292.64843,60.30078 320,49.148437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17917"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17921"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17925"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17927"
+     d="M 310.69922,66.25 320,49.148437"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17929"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17933"
+     d="m 320,49.148437 0,0"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17945"
+     d="m 571.3008,264.10156 9.3984,25.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17947"
+     d="M 96.30078,249.19922 65.351565,224.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17955"
+     d="m 384.39844,65 3.25,-6.898435"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17975"
+     d="m 76,301.64843 -5.898435,25.90235"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17979"
+     d="M 258.05078,67.94922 253.44922,61.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18001"
+     d="m 434.10157,449.69922 -2.70313,20.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18013"
+     d="M 378.14844,71.351565 349.25,59"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18015"
+     d="M 496.10157,387.60156 548.4492,366.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18019"
+     d="M 378.14844,71.351565 384.39844,65"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18025"
+     d="m 559,238.39844 12.3008,25.70312"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18027"
+     d="M 483.69922,142.75 501.3008,124.80078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18031"
+     d="M 265.60156,74 292.64843,60.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18049"
+     d="m 234.75,454.35157 2,20.39843"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18053"
+     d="m 265.60156,74 -7.55078,-6.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18067"
+     d="m 84.75,275.39843 -8.75,26.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18081"
+     d="m 369.14844,76.94922 9,-5.597655"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18083"
+     d="m 406.35156,86.101565 -28.20312,-14.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18087"
+     d="M 344.85156,84.75 332.5,65.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18099"
+     d="m 301.44922,85.75 9.25,-19.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18107"
+     d="M 522.14845,261.39843 559,238.39844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18109"
+     d="M 543.89845,213.14844 559,238.39844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18125"
+     d="M 239.14844,90 265.60156,74"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18127"
+     d="M 275.64843,79.14844 265.60156,74"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18129"
+     d="M 166.75,150.14844 145.60157,133.10157"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18143"
+     d="M 170.35157,395.25 113.94922,376.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18149"
+     d="M 433.60157,103.05078 406.35156,86.101565"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18151"
+     d="m 357.89844,81.5 11.25,-4.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18157"
+     d="M 96.30078,249.19922 84.75,275.39843"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18161"
+     d="m 526.1992,188.60157 17.69925,24.54687"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18165"
+     d="m 435.44922,427.14844 -1.34766,22.55078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18169"
+     d="M 287.80078,83.101565 275.64843,79.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18173"
+     d="M 459.44922,122 433.60157,103.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18175"
+     d="M 213.69922,108.19922 239.14844,90"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18181"
+     d="m 506.0508,165 20.1484,23.60157"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18183"
+     d="M 344.85156,84.75 357.89844,81.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18189"
+     d="m 233.75,431.85157 1,22.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18197"
+     d="M 483.69922,142.75 459.44922,122"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18199"
+     d="M 137.64844,270.35156 96.30078,249.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18201"
+     d="M 110.39844,223.25 96.30078,249.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18209"
+     d="M 483.69922,142.75 506.0508,165"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18213"
+     d="M 301.44922,85.75 287.80078,83.101565"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18215"
+     d="m 458.44922,158.5 25.25,-15.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18221"
+     d="M 330.64844,86.601565 344.85156,84.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18223"
+     d="M 356.89844,106 344.85156,84.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18229"
+     d="m 189.44922,128.30078 24.25,-20.10156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18239"
+     d="m 292.44922,107.5 9,-21.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18241"
+     d="m 315.94922,86.94922 -14.5,-1.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18243"
+     d="m 435.44922,402.80078 60.65235,-15.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18249"
+     d="m 315.94922,86.94922 14.69922,-0.347655"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18257"
+     d="M 127,197.89844 110.39844,223.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18265"
+     d="m 166.75,150.14844 22.69922,-21.84766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18275"
+     d="m 435,403 0,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18279"
+     d="M 145.85157,173.44922 127,197.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18281"
+     d="M 145.85157,173.44922 166.75,150.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18283"
+     d="m 195.10157,164.64844 -28.35157,-14.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18299"
+     d="M 233.75,407.5 170.35157,395.25"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18309"
+     d="m 234,408 0,24"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18311"
+     d="m 475.80078,279.94922 46.34767,-18.55079"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18329"
+     d="M 368.55078,129.19922 356.89844,106"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18331"
+     d="M 283.75,131.19922 292.44922,107.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18355"
+     d="m 426.69922,171.25 31.75,-12.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18373"
+     d="m 369.44922,411.39844 66,-8.59766"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18375"
+     d="m 434.10157,376.94922 1.34765,25.85156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18393"
+     d="M 187.60157,286.69922 137.64844,270.35156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18399"
+     d="M 229.30078,175.85157 195.10157,164.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18401"
+     d="M 301.19922,413 233.75,407.5"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18403"
+     d="m 234.75,381.60156 -1,25.89844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18407"
+     d="M 379.60156,154.14844 368.55078,129.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18423"
+     d="m 275.5,156.55078 8.25,-25.35156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18431"
+     d="m 301.19922,413 68.25,-1.60156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18445"
+     d="m 431.39844,349.89844 2.70313,27.05078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18459"
+     d="m 389.94922,180.44922 36.75,-9.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18463"
+     d="m 422.14844,293.39843 53.65234,-13.44921"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18469"
+     d="M 389.94922,180.44922 379.60156,154.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18473"
+     d="m 236.75,354.44922 -2,27.15234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18491"
+     d="m 267.75,183.30078 -38.44922,-7.44921"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18493"
+     d="m 267.75,183.30078 7.75,-26.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18499"
+     d="m 427.39844,321.89844 4,28"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18517"
+     d="M 243.69922,297.55078 187.60157,286.69922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18525"
+     d="m 349.94922,185.64844 40,-5.19922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18527"
+     d="m 399.5,207.85156 -9.55078,-27.40234"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18531"
+     d="m 239.75,326.30078 -3,28.14844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18541"
+     d="m 422.14844,293.39843 5.25,28.50001"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18543"
+     d="M 260.60156,211.10156 267.75,183.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18545"
+     d="M 308.60156,186.64844 267.75,183.30078"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18549"
+     d="M 408.14844,236.05078 399.5,207.85156"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18559"
+     d="m 308.60156,186.64844 41.34766,-1"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18563"
+     d="m 363.75,301 58.39844,-7.60157"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18565"
+     d="m 415.69922,264.69922 6.44922,28.69921"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18573"
+     d="m 243.69922,297.55078 -3.94922,28.75"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18577"
+     d="m 415.69922,264.69922 -7.55078,-28.64844"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18581"
+     d="m 254.14844,239.64844 6.45312,-28.54688"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18585"
+     d="m 303.35156,302.39843 -59.65234,-4.84765"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18587"
+     d="m 248.5,268.60156 -4.80078,28.94922"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18601"
+     d="m 248.5,268.60156 5.64844,-28.95312"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18611"
+     d="M 303.35156,302.39843 363.75,301"
+     style="fill:none;stroke:#9400d1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18629"
+     d="m 616,416.64844 0,0"
+     style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18631"
+     d="m 626,446.89844 0,0"
+     style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18633"
+     d="m 3.9492188,525.10155 0,0"
+     style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18635"
+     d="m 636.0508,477.14844 0,0"
+     style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18637"
+     d="m 17.101562,368.94922 0,0"
+     style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16809-4"
+     d="m -140.49653,308.02098 0.39845,-32.70313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16811-8"
+     d="m -139.74653,250.66942 0,25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16813-2"
+     d="m -709.39496,439.61864 -19,-27.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16815-2"
+     d="m -742.49652,391.41942 14.10156,20.64844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16817-3"
+     d="m -151.14498,203.52099 -13.85155,-30.90235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16819-3"
+     d="m -175.39498,151.16942 10.39845,21.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16821-2"
+     d="m -760.39496,346.41942 -6.95313,-32.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16823-7"
+     d="m -771.04731,290.02098 3.69922,24.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16825-2"
+     d="m -230.84808,470.16942 24.10155,-24.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16827-4"
+     d="m -189.99653,427.4702 -16.75,18.09766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16829-5"
+     d="m -767.34809,241.52098 7.70313,-32.20312"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16831-4"
+     d="m -752.49652,186.31786 -7.14844,23"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16833-1"
+     d="m -247.19573,74.020984 -31.40236,-19.95313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16835-6"
+     d="m -295.79731,44.118634 17.19922,9.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16837-8"
+     d="m -545.44575,538.52097 -34.19922,-11.2031"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16839-0"
+     d="m -596.64496,521.06787 17,6.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16841-4"
+     d="m -295.79731,44.118634 -35.75,-14.69921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16843-8"
+     d="m -346.34809,23.970204 14.80078,5.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16845-8"
+     d="m -596.64496,521.06787 -32.25,-16.50001"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16847-3"
+     d="m -647.19575,494.02099 18.30079,10.54687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16849-5"
+     d="m -166.04733,386.2202 14.5508,-30.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16851-2"
+     d="m -144.14498,332.02098 -7.35155,23.39844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16853-4"
+     d="m -464.44575,549.41942 35.25,-0.85155"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16855-7"
+     d="m -424.79731,548.31787 -4.39844,0.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16857-4"
+     d="m -424.79731,548.31787 -4.39844,0.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16861-7"
+     d="m -143.79733,226.91942 3.69925,24.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16863-5"
+     d="m -466.14497,549.31787 1.69922,0.10155"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16865-6"
+     d="M -382.84809,14.567854 -422.74653,9.1694237"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16867-5"
+     d="m -427.49653,8.9194237 4.75,0.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16869-7"
+     d="m -727.74652,143.81786 19.64844,-27.39844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16871-6"
+     d="m -692.09808,99.169424 -16,17.249996"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16873-9"
+     d="m -722.49652,420.36864 -20,-28.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16875-7"
+     d="m -753.19574,369.4702 10.69922,21.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16877-0"
+     d="m -543.59809,18.317854 38.40234,-7.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16879-3"
+     d="m -497.54731,10.520984 -7.44922,0.54687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16881-2"
+     d="m -205.84808,113.06786 -23.5,-24.699226"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16883-3"
+     d="m -247.19573,74.020984 17.84765,14.34765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16887-8"
+     d="m -189.04733,131.27099 13.65235,19.89843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16891-0"
+     d="m -770.74652,265.66942 0,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16893-5"
+     d="m -280.39496,504.16942 31.84763,-19.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16895-2"
+     d="m -230.84808,470.16942 -17.69925,14.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16897-5"
+     d="m -627.44575,51.868634 32.59766,-16.30078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16899-1"
+     d="m -578.04731,29.368634 -16.80078,6.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16901-5"
+     d="M -664.34808,480.27099 -693.2973,456.9702"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16903-1"
+     d="m -709.39496,439.61864 16.09766,17.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16905-1"
+     d="m -384.79731,543.11862 36.75,-9.1992"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16907-5"
+     d="m -333.49653,528.56787 -14.55078,5.35155"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16911-8"
+     d="m -741.79731,164.41942 -10.69921,21.89844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16915-9"
+     d="m -176.39498,407.61864 -13.60155,19.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16917-3"
+     d="m -673.29731,84.020984 27.15235,-21.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16919-3"
+     d="m -627.44575,51.868634 -18.69921,10.80079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16921-6"
+     d="m -346.34809,23.970204 -36.5,-9.40235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16925-7"
+     d="m -333.49653,528.56787 36.10157,-14.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16927-8"
+     d="m -280.39496,504.16942 -17,9.89845"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16929-6"
+     d="m -506.99653,545.97022 -38.44922,-7.44925"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16933-2"
+     d="m -578.04731,29.368634 34.44922,-11.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16939-5"
+     d="m -140.49653,308.02098 -3.64845,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16943-1"
+     d="m -151.14498,203.52099 7.34765,23.39843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16945-0"
+     d="m -267.49653,62.118644 -28.30078,-18.00001"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16947-0"
+     d="m -314.89496,36.919424 19.09765,7.19921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16951-0"
+     d="m -664.34808,480.27099 16.60155,13.44921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16955-8"
+     d="m -760.39496,346.41942 7.19922,23.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16957-2"
+     d="m -424.79731,548.31787 40,-5.19925"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16959-8"
+     d="m -375.24653,539.02097 -9.55078,4.09765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16963-8"
+     d="m -673.29731,84.020984 -18.80077,15.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16965-7"
+     d="m -764.0473,298.2202 -7.00001,-32.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16967-0"
+     d="m -767.34809,241.52098 -3.69922,24.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16977-1"
+     d="m -176.34808,159.56786 -12.69925,-28.29687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16979-5"
+     d="m -205.84808,113.06786 16.80075,18.20313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16983-0"
+     d="m -727.74652,143.81786 -14.05079,20.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16985-8"
+     d="m -466.14497,549.31787 -40.85156,-3.34765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16987-0"
+     d="m -514.14497,542.27097 7.14844,3.69925"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16991-7"
+     d="m -267.49653,62.118644 20.3008,11.90234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16995-1"
+     d="m -722.49652,420.36864 13.10156,19.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16997-5"
+     d="m -203.44573,435.16942 27.05075,-27.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path16999-1"
+     d="m -166.04733,386.2202 -10.34765,21.39844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17011-3"
+     d="m -427.49653,8.9194237 -35.19922,-1.05079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17013-3"
+     d="m -497.54731,10.520984 34.85156,-2.6523503"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17021-9"
+     d="m -432.54731,11.817854 5.05078,-2.8984303"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17025-4"
+     d="m -606.69575,43.720204 -20.75,8.14843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17027-8"
+     d="m -606.69575,43.720204 28.64844,-14.35157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17037-2"
+     d="m -489.5981,13.118634 -7.94921,-2.59765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17041-3"
+     d="m -162.04733,180.9702 10.90235,22.55079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17061-6"
+     d="m -759.94574,217.7202 -7.40235,23.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17077-0"
+     d="m -678.44575,464.52099 14.09767,15.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17083-9"
+     d="m -734.59809,172.61864 6.85157,-28.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17087-0"
+     d="m -289.94575,52.770984 -24.94921,-15.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17089-7"
+     d="m -335.59809,32.520984 20.70313,4.39844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17095-0"
+     d="m -689.99652,446.56786 -32.5,-26.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17109-2"
+     d="m -203.44573,435.16942 -12.3008,18.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17111-0"
+     d="m -155.54733,315.61864 15.0508,-31.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17117-0"
+     d="m -366.59809,531.86862 -8.64844,7.15235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17125-0"
+     d="m -176.34808,159.56786 14.30075,21.40234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17127-4"
+     d="m -628.29731,60.669424 21.60156,-16.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17129-0"
+     d="m -584.19575,38.317854 -22.5,5.40235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17133-8"
+     d="m -520.59809,535.47022 6.45312,6.80075"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17141-1"
+     d="m -748.99652,194.66942 -10.94922,23.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17183-1"
+     d="m -437.84809,17.817854 5.30078,-6"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17187-9"
+     d="m -481.24653,18.817854 -8.35157,-5.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17195-9"
+     d="m -689.99652,446.56786 11.55077,17.95313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17209-3"
+     d="m -176.69573,188.56786 0.34765,-29"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17211-9"
+     d="m -193.94573,139.56786 17.59765,20"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17215-9"
+     d="m -357.69575,31.067854 22.09766,1.45313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17217-1"
+     d="m -272.74653,70.817864 -17.19922,-18.04688"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17221-2"
+     d="m -242.19573,459.31786 38.75,-24.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17223-6"
+     d="m -194.04733,414.81786 -9.3984,20.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17235-4"
+     d="m -734.59809,172.61864 -14.39843,22.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17237-7"
+     d="M -742.54731,329.31786 -764.0473,298.2202"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17247-9"
+     d="m -560.19575,35.770984 -24,2.54687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17259-3"
+     d="m -359.04731,521.72022 -7.55079,10.1484"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17265-2"
+     d="m -641.74653,79.470204 13.44922,-18.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17283-8"
+     d="m -214.59808,121.2202 20.65235,18.34766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17291-7"
+     d="m -526.24653,525.61862 5.64844,9.8516"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17297-5"
+     d="m -646.44575,468.77099 -43.55077,-22.20313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17299-6"
+     d="m -698.74652,426.61864 8.75,19.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17305-0"
+     d="m -728.39496,201.4702 -6.20313,-28.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17307-4"
+     d="m -716.94574,151.81786 -17.65235,20.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17331-6"
+     d="m -187.79733,392.86864 -6.25,21.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17337-9"
+     d="m -443.39497,26.919424 5.54688,-9.10157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17341-6"
+     d="m -380.94575,32.470204 23.25,-1.40235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17345-8"
+     d="m -472.5981,27.618634 -8.64843,-8.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17355-9"
+     d="m -264.04733,90.220194 -8.6992,-19.40233"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17373-6"
+     d="m -534.89497,36.067854 -25.30078,-0.29687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17381-8"
+     d="m -238.04733,104.72019 23.44925,16.50001"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17387-5"
+     d="m -184.59808,345.27098 29.05075,-29.65234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17393-9"
+     d="m -696.14496,132.4702 -20.80078,19.34766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17409-8"
+     d="m -352.59809,508.77097 -6.44922,12.94925"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17411-7"
+     d="m -290.94575,478.91942 48.75002,-19.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17425-0"
+     d="m -704.64496,404.9702 5.89844,21.64844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17427-7"
+     d="m -646.44575,99.169424 4.69922,-19.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17433-8"
+     d="m -184.59808,369.61864 -3.19925,23.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17439-5"
+     d="m -189.99653,216.81786 13.3008,-28.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17445-8"
+     d="m -531.04731,512.91942 4.80078,12.6992"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17453-7"
+     d="m -264.04733,90.220194 26,14.499996"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17457-8"
+     d="m -405.09809,36.770984 24.15234,-4.30078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17465-0"
+     d="m -672.59808,114.86864 -23.54688,17.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17477-5"
+     d="m -443.39497,26.919424 -14.65234,-0.39844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17479-2"
+     d="m -472.5981,27.618634 14.55079,-1.09765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17489-8"
+     d="m -508.69575,39.169424 -26.19922,-3.10157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17491-5"
+     d="m -429.24653,28.817854 -14.14844,-1.89843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17493-7"
+     d="m -449.04731,38.970204 5.65234,-12.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17497-2"
+     d="m -707.59808,357.4702 -34.94923,-28.15234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17501-5"
+     d="m -486.29731,30.169424 13.69921,-2.55079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17503-7"
+     d="m -463.69575,39.317854 -8.90235,-11.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17505-9"
+     d="m -593.99653,486.02099 -52.44922,-17.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17509-1"
+     d="m -416.24653,32.169424 -13,-3.35157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17521-7"
+     d="m -498.54731,34.118634 12.25,-3.94921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17529-3"
+     d="m -264.29733,110.06786 0.25,-19.847666"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17531-9"
+     d="m -292.29731,77.970204 28.24998,12.24999"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17541-6"
+     d="m -405.09809,36.770984 -11.14844,-4.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17547-9"
+     d="m -184.74653,345.66942 0,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17551-9"
+     d="m -707.59808,381.81786 2.95312,23.15234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17559-8"
+     d="m -646.44575,99.169424 -26.15233,15.699216"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17565-7"
+     d="m -508.69575,39.169424 10.14844,-5.05079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17569-7"
+     d="m -709.39496,228.9702 -19,-27.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17579-3"
+     d="m -347.34809,493.06786 -5.25,15.70311"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17581-6"
+     d="m -396.24653,42.419424 -8.85156,-5.64844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17583-5"
+     d="m -429.79731,43.919424 24.69922,-7.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17593-2"
+     d="m -347.34809,493.06786 56.40234,-14.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17603-8"
+     d="m -322.44575,68.067864 30.14844,9.90234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17605-4"
+     d="m -516.39497,45.220204 7.69922,-6.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17607-0"
+     d="m -481.89497,45.118634 -26.80078,-5.94921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17609-6"
+     d="m -642.19575,118.91942 -4.25,-19.749996"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17611-4"
+     d="m -618.04731,85.567864 -28.39844,13.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17615-9"
+     d="m -534.99653,497.4702 3.94922,15.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17621-6"
+     d="m -390.09809,48.817854 -6.14844,-6.39843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17637-6"
+     d="m -226.29733,371.2202 41.69925,-25.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17639-5"
+     d="m -187.79733,320.11864 3.19925,25.15234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17655-9"
+     d="m -707.74652,357.66942 0,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17659-6"
+     d="m -454.74653,53.817854 5.69922,-14.84765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17665-2"
+     d="m -454.74653,53.817854 -8.94922,-14.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17667-8"
+     d="m -521.14497,51.868634 4.75,-6.64843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17675-8"
+     d="m -534.99653,497.4702 -59,-11.44921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17685-7"
+     d="m -354.14496,60.618644 31.69921,7.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17701-5"
+     d="m -587.74653,74.270984 -30.30078,11.29688"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17715-7"
+     d="m -387.04731,55.720204 -3.05078,-6.90235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17725-0"
+     d="m -454.74653,53.817854 24.94922,-9.89843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17727-2"
+     d="m -215.74653,243.06786 25.75,-26.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17733-2"
+     d="m -454.74653,53.817854 -27.14844,-8.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17735-9"
+     d="m -273.44573,129.4702 9.1484,-19.40234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17741-1"
+     d="m -387.04731,55.720204 32.90235,4.89844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17745-3"
+     d="m -555.89497,65.317864 -31.85156,8.95312"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17747-8"
+     d="m -522.84809,58.868644 1.70312,-7.00001"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17751-1"
+     d="m -408.74653,501.06786 61.39844,-8"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17753-3"
+     d="m -343.34809,474.86864 -4,18.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17765-7"
+     d="m -194.04733,294.52098 6.25,25.59766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17779-6"
+     d="M -660.79731,381.36864 -707.59808,357.4702"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17781-1"
+     d="m -704.64496,332.2202 -2.95312,25.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17791-4"
+     d="m -387.09809,62.770984 0.0508,-7.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17793-9"
+     d="m -420.69575,53.419424 33.64844,2.30078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17797-2"
+     d="m -522.84809,58.868644 -33.04688,6.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17803-0"
+     d="m -472.24653,502.56786 -62.75,-5.09766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17805-1"
+     d="m -537.99653,479.41942 3,18.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17819-8"
+     d="m -521.29731,65.919424 -1.55078,-7.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17821-6"
+     d="m -488.99653,55.020984 -33.85156,3.84766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17825-3"
+     d="m -454.74653,53.817854 34.05078,-0.39843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17831-4"
+     d="m -629.14496,137.77099 -13.05079,-18.85157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17835-2"
+     d="m -472.24653,502.56786 63.5,-1.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17847-0"
+     d="m -454.74653,53.817854 -34.25,1.20313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17851-5"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17853-9"
+     d="m -442.24653,70.419424 -12.5,-16.60157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17855-4"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17859-4"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17863-9"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17865-1"
+     d="m -425.49653,63.669424 -29.25,-9.85157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17867-9"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17871-9"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17875-3"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17877-4"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17879-1"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17881-2"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17883-5"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17885-7"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17887-2"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17889-6"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17891-0"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17893-1"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17895-4"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17897-1"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17899-5"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17901-3"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17903-5"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17905-7"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17909-7"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17913-3"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17915-3"
+     d="m -482.0981,64.970204 27.35157,-11.15235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17917-2"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17921-0"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17925-7"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17927-4"
+     d="m -464.04731,70.919424 9.30078,-17.10157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17929-7"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17933-6"
+     d="m -454.74653,53.817854 0,0"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17945-8"
+     d="m -203.44573,268.77098 9.3984,25.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17947-1"
+     d="M -678.44575,253.86864 -709.39496,228.9702"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17955-8"
+     d="m -390.34809,69.669424 3.25,-6.89844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17975-9"
+     d="m -698.74652,306.31785 -5.89844,25.90235"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path17979-3"
+     d="m -516.69575,72.618644 -4.60156,-6.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18001-7"
+     d="m -340.64496,454.36864 -2.70313,20.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18013-2"
+     d="m -396.59809,76.020984 -28.89844,-12.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18015-7"
+     d="m -278.64496,392.27098 52.34763,-21.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18019-0"
+     d="m -396.59809,76.020984 6.25,-6.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18025-6"
+     d="m -215.74653,243.06786 12.3008,25.70312"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18027-4"
+     d="m -291.04731,147.41942 17.60158,-17.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18031-7"
+     d="m -509.14497,78.669424 27.04687,-13.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18049-0"
+     d="m -539.99653,459.02099 2,20.39843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18053-2"
+     d="m -509.14497,78.669424 -7.55078,-6.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18067-9"
+     d="m -689.99652,280.06785 -8.75,26.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18081-1"
+     d="m -405.59809,81.618644 9,-5.59766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18083-6"
+     d="m -368.39497,90.770984 -28.20312,-14.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18087-3"
+     d="m -429.89497,89.419424 -12.35156,-19"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18099-8"
+     d="m -473.29731,90.419424 9.25,-19.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18107-2"
+     d="m -252.59808,266.06785 36.85155,-22.99999"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18109-8"
+     d="m -230.84808,217.81786 15.10155,25.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18125-5"
+     d="m -535.59809,94.669424 26.45312,-16"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18127-9"
+     d="m -499.0981,83.817864 -10.04687,-5.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18129-2"
+     d="m -607.99653,154.81786 -21.14843,-17.04687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18143-0"
+     d="m -604.39496,399.91942 -56.40235,-18.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18149-3"
+     d="M -341.14496,107.7202 -368.39497,90.770984"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18151-4"
+     d="m -416.84809,86.169424 11.25,-4.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18157-7"
+     d="m -678.44575,253.86864 -11.55077,26.19921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18161-7"
+     d="m -248.54733,193.27099 17.69925,24.54687"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18165-1"
+     d="m -339.29731,431.81786 -1.34766,22.55078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18169-6"
+     d="m -486.94575,87.770984 -12.15235,-3.95312"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18173-5"
+     d="M -315.29731,126.66942 -341.14496,107.7202"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18175-5"
+     d="m -561.04731,112.86864 25.44922,-18.199216"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18181-4"
+     d="m -268.69573,169.66942 20.1484,23.60157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18183-6"
+     d="m -429.89497,89.419424 13.04688,-3.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18189-8"
+     d="m -540.99653,436.52099 1,22.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18197-1"
+     d="m -291.04731,147.41942 -24.25,-20.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18199-0"
+     d="m -637.09809,275.02098 -41.34766,-21.15234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18201-5"
+     d="m -664.34808,227.91942 -14.09767,25.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18209-1"
+     d="m -291.04731,147.41942 22.35158,22.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18213-8"
+     d="m -473.29731,90.419424 -13.64844,-2.64844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18215-9"
+     d="m -316.29731,163.16942 25.25,-15.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18221-1"
+     d="m -444.09809,91.270984 14.20312,-1.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18223-8"
+     d="M -417.84809,110.66942 -429.89497,89.419424"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18229-1"
+     d="m -585.29731,132.9702 24.25,-20.10156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18239-0"
+     d="m -482.29731,112.16942 9,-21.749996"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18241-9"
+     d="m -458.79731,91.618634 -14.5,-1.19921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18243-7"
+     d="m -339.29731,407.4702 60.65235,-15.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18249-3"
+     d="m -458.79731,91.618634 14.69922,-0.34765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18257-9"
+     d="m -647.74653,202.56786 -16.60155,25.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18265-1"
+     d="m -607.99653,154.81786 22.69922,-21.84766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18275-2"
+     d="m -339.74653,407.66942 0,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18279-6"
+     d="m -628.89496,178.11864 -18.85157,24.44922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18281-2"
+     d="m -628.89496,178.11864 20.89843,-23.30078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18283-6"
+     d="m -579.64496,169.31786 -28.35157,-14.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18299-6"
+     d="m -540.99653,412.16942 -63.39843,-12.25"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18309-5"
+     d="m -540.74653,412.66942 0,24"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18311-0"
+     d="m -298.94575,284.61864 46.34767,-18.55079"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18329-5"
+     d="m -406.19575,133.86864 -11.65234,-23.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18331-4"
+     d="m -490.99653,135.86864 8.69922,-23.69922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18355-3"
+     d="m -348.04731,175.91942 31.75,-12.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18373-1"
+     d="m -405.29731,416.06786 66,-8.59766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18375-9"
+     d="m -340.64496,381.61864 1.34765,25.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18393-8"
+     d="m -587.14496,291.36864 -49.95313,-16.34766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18399-7"
+     d="m -545.44575,180.52099 -34.19921,-11.20313"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18401-7"
+     d="m -473.54731,417.66942 -67.44922,-5.5"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18403-6"
+     d="m -539.99653,386.27098 -1,25.89844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18407-8"
+     d="m -395.14497,158.81786 -11.05078,-24.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18423-7"
+     d="m -499.24653,161.2202 8.25,-25.35156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18431-3"
+     d="m -473.54731,417.66942 68.25,-1.60156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18445-2"
+     d="m -343.34809,354.56786 2.70313,27.05078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18459-5"
+     d="m -384.79731,185.11864 36.75,-9.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18463-4"
+     d="m -352.59809,298.06785 53.65234,-13.44921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18469-3"
+     d="m -384.79731,185.11864 -10.34766,-26.30078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18473-5"
+     d="m -537.99653,359.11864 -2,27.15234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18491-7"
+     d="m -506.99653,187.9702 -38.44922,-7.44921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18493-5"
+     d="m -506.99653,187.9702 7.75,-26.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18499-6"
+     d="m -347.34809,326.56786 4,28"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18517-5"
+     d="m -531.04731,302.2202 -56.09765,-10.85156"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18525-9"
+     d="m -424.79731,190.31786 40,-5.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18527-5"
+     d="m -375.24653,212.52098 -9.55078,-27.40234"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18531-8"
+     d="m -534.99653,330.9702 -3,28.14844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18541-3"
+     d="m -352.59809,298.06785 5.25,28.50001"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18543-3"
+     d="m -514.14497,215.77098 7.14844,-27.80078"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18545-1"
+     d="m -466.14497,191.31786 -40.85156,-3.34766"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18549-9"
+     d="m -366.59809,240.7202 -8.64844,-28.19922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18559-9"
+     d="m -466.14497,191.31786 41.34766,-1"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18563-6"
+     d="m -410.99653,305.66942 58.39844,-7.60157"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18565-1"
+     d="m -359.04731,269.36864 6.44922,28.69921"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18573-7"
+     d="m -531.04731,302.2202 -3.94922,28.75"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18577-1"
+     d="m -359.04731,269.36864 -7.55078,-28.64844"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18581-4"
+     d="m -520.59809,244.31786 6.45312,-28.54688"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18585-0"
+     d="m -471.39497,307.06785 -59.65234,-4.84765"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18587-2"
+     d="m -526.24653,273.27098 -4.80078,28.94922"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18601-5"
+     d="m -526.24653,273.27098 5.64844,-28.95312"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18611-8"
+     d="m -471.39497,307.06785 60.39844,-1.39843"
+     style="fill:none;stroke:#000000;stroke-width:2.56000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18629-0"
+     d="m -158.74653,421.31786 0,0"
+     style="fill:none;stroke:#000000;stroke-width:3.84000015;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18631-1"
+     d="m -148.74653,451.56786 0,0"
+     style="fill:none;stroke:#000000;stroke-width:3.84000015;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18633-6"
+     d="m -770.79731,529.77097 0,0"
+     style="fill:none;stroke:#000000;stroke-width:3.84000015;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18635-9"
+     d="m -138.69573,481.81786 0,0"
+     style="fill:none;stroke:#000000;stroke-width:3.84000015;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     inkscape:connector-curvature="0"
+     id="path18637-7"
+     d="m -757.64496,373.61864 0,0"
+     style="fill:none;stroke:#000000;stroke-width:3.84000015;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+  <g
+     id="g23145"
+     style="stroke:#000000;stroke-width:9.56000042;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="matrix(1,0,0,1.1599735,0,-107.74314)"
+     inkscape:export-xdpi="1.7543626"
+     inkscape:export-ydpi="1.7543626">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -117.00527,986.05482 0.39845,-32.70313"
+       id="path16809-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -116.25527,928.70326 0,25"
+       id="path16811-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,1117.6525 -19,-27.5508"
+       id="path16813-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -719.00525,1069.4533 14.10156,20.6484"
+       id="path16815-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -127.65372,881.55482 -13.85155,-30.90234"
+       id="path16817-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -151.90372,829.20326 10.39845,21.44922"
+       id="path16819-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.90369,1024.4533 -6.95313,-32.19926"
+       id="path16821-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.55604,968.05482 3.69922,24.19922"
+       id="path16823-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,1148.2033 24.10155,-24.6016"
+       id="path16825-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -166.50527,1105.504 -16.75,18.0977"
+       id="path16827-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -743.85682,919.55482 7.70313,-32.20312"
+       id="path16829-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -729.00525,864.3517 -7.14844,23"
+       id="path16831-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -223.70447,752.05482 -31.40236,-19.95313"
+       id="path16833-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -272.30605,722.15247 17.19922,9.94922"
+       id="path16835-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -521.95449,1216.5548 -34.19922,-11.2031"
+       id="path16837-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -573.1537,1199.1017 17,6.25"
+       id="path16839-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -272.30605,722.15247 -35.75,-14.69921"
+       id="path16841-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -322.85683,702.00404 14.80078,5.44922"
+       id="path16843-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -573.1537,1199.1017 -32.25,-16.5"
+       id="path16845-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -623.70449,1172.0548 18.30079,10.5469"
+       id="path16847-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -142.55607,1064.254 14.5508,-30.8007"
+       id="path16849-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -120.65372,1010.0548 -7.35155,23.3985"
+       id="path16851-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.95449,1227.4533 35.25,-0.8516"
+       id="path16853-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 -4.39844,0.25"
+       id="path16855-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 -4.39844,0.25"
+       id="path16857-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -120.30607,904.95326 3.69925,24.05078"
+       id="path16861-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,1227.3517 1.69922,0.1016"
+       id="path16863-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -359.35683,692.60169 -39.89844,-5.39843"
+       id="path16865-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -404.00527,686.95326 4.75,0.25"
+       id="path16867-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.25525,821.8517 19.64844,-27.39844"
+       id="path16869-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -668.60682,777.20326 -15.99999,17.25"
+       id="path16871-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -699.00525,1098.4025 -20,-28.9492"
+       id="path16873-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -729.70447,1047.504 10.69922,21.9493"
+       id="path16875-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -520.10683,696.35169 38.40234,-7.19922"
+       id="path16877-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -474.05605,688.55482 -7.44922,0.54687"
+       id="path16879-3-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -182.35682,791.1017 -23.5,-24.69923"
+       id="path16881-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -223.70447,752.05482 17.84765,14.34765"
+       id="path16883-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -165.55607,809.30482 13.65235,19.89844"
+       id="path16887-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.25525,943.70326 0,24"
+       id="path16891-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -256.9037,1182.2033 31.84763,-19.8008"
+       id="path16893-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,1148.2033 -17.69925,14.1992"
+       id="path16895-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -603.95449,729.90247 32.59766,-16.30078"
+       id="path16897-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -554.55605,707.40247 -16.80078,6.19922"
+       id="path16899-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,1158.3048 -28.94921,-23.3008"
+       id="path16901-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,1117.6525 16.09766,17.3515"
+       id="path16903-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -361.30605,1221.1525 36.75,-9.1992"
+       id="path16905-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -310.00527,1206.6017 -14.55078,5.3516"
+       id="path16907-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -718.30604,842.45326 -10.69921,21.89844"
+       id="path16911-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.90372,1085.6525 -13.60155,19.8515"
+       id="path16915-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.80604,762.05482 27.15234,-21.35156"
+       id="path16917-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -603.95449,729.90247 -18.69921,10.80079"
+       id="path16919-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -322.85683,702.00404 -36.5,-9.40235"
+       id="path16921-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -310.00527,1206.6017 36.10157,-14.5"
+       id="path16925-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -256.9037,1182.2033 -17,9.8984"
+       id="path16927-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,1224.0041 -38.44922,-7.4493"
+       id="path16929-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -554.55605,707.40247 34.44922,-11.05078"
+       id="path16933-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -117.00527,986.05482 -3.64845,23.99998"
+       id="path16939-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -127.65372,881.55482 7.34765,23.39844"
+       id="path16943-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -244.00527,740.15248 -28.30078,-18.00001"
+       id="path16945-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -291.4037,714.95326 19.09765,7.19921"
+       id="path16947-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,1158.3048 16.60155,13.4492"
+       id="path16951-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.90369,1024.4533 7.19922,23.0507"
+       id="path16955-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 40,-5.1992"
+       id="path16957-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -351.75527,1217.0548 -9.55078,4.0977"
+       id="path16959-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.80604,762.05482 -18.80078,15.14844"
+       id="path16963-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -740.55603,976.25404 -7.00001,-32.5"
+       id="path16965-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -743.85682,919.55482 -3.69922,24.19922"
+       id="path16967-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.85682,837.6017 -12.69925,-28.29688"
+       id="path16977-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -182.35682,791.1017 16.80075,18.20312"
+       id="path16979-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.25525,821.8517 -14.05079,20.60156"
+       id="path16983-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,1227.3517 -40.85156,-3.3476"
+       id="path16985-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -490.65371,1220.3048 7.14844,3.6993"
+       id="path16987-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -244.00527,740.15248 20.3008,11.90234"
+       id="path16991-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -699.00525,1098.4025 13.10156,19.25"
+       id="path16995-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,1113.2033 27.05075,-27.5508"
+       id="path16997-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -142.55607,1064.254 -10.34765,21.3985"
+       id="path16999-1-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -404.00527,686.95326 -35.19922,-1.05079"
+       id="path17011-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -474.05605,688.55482 34.85156,-2.65235"
+       id="path17013-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -409.05605,689.85169 5.05078,-2.89843"
+       id="path17021-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -583.20449,721.75404 -20.75,8.14843"
+       id="path17025-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -583.20449,721.75404 28.64844,-14.35157"
+       id="path17027-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -466.10684,691.15247 -7.94921,-2.59765"
+       id="path17037-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -138.55607,859.00404 10.90235,22.55078"
+       id="path17041-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.45447,895.75404 -7.40235,23.80078"
+       id="path17061-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,1142.5548 14.09766,15.75"
+       id="path17077-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -711.10682,850.65248 6.85157,-28.80078"
+       id="path17083-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -266.45449,730.80482 -291.4037,714.95326"
+       id="path17087-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -312.10683,710.55482 20.70313,4.39844"
+       id="path17089-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,1124.6017 -32.49999,-26.1992"
+       id="path17095-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,1113.2033 -12.3008,18.5507"
+       id="path17109-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -132.05607,993.65248 15.0508,-31.94922"
+       id="path17111-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -343.10683,1209.9025 -8.64844,7.1523"
+       id="path17117-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.85682,837.6017 14.30075,21.40234"
+       id="path17125-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -604.80605,738.70326 21.60156,-16.94922"
+       id="path17127-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -560.70449,716.35169 -22.5,5.40235"
+       id="path17129-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.10683,1213.5041 6.45312,6.8007"
+       id="path17133-8-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -725.50525,872.70326 -10.94922,23.05078"
+       id="path17141-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -414.35683,695.85169 5.30078,-6"
+       id="path17183-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -457.75527,696.85169 -8.35157,-5.69922"
+       id="path17187-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,1124.6017 11.55078,17.9531"
+       id="path17195-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -153.20447,866.6017 0.34765,-29"
+       id="path17209-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.45447,817.6017 17.59765,20"
+       id="path17211-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -334.20449,709.10169 22.09766,1.45313"
+       id="path17215-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -249.25527,748.8517 -17.19922,-18.04688"
+       id="path17217-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -218.70447,1137.3517 38.75,-24.1484"
+       id="path17221-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.55607,1092.8517 -9.3984,20.3516"
+       id="path17223-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -711.10682,850.65248 -14.39843,22.05078"
+       id="path17235-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -719.05604,1007.3517 -21.49999,-31.09766"
+       id="path17237-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -536.70449,713.80482 -24,2.54687"
+       id="path17247-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,1199.7541 -7.55079,10.1484"
+       id="path17259-3-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -618.25527,757.50404 13.44922,-18.80078"
+       id="path17265-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -191.10682,799.25404 20.65235,18.34766"
+       id="path17283-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,1203.6525 5.64844,9.8516"
+       id="path17291-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,1146.8048 -43.55077,-22.2031"
+       id="path17297-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -675.25525,1104.6525 8.74999,19.9492"
+       id="path17299-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.90369,879.50404 -6.20313,-28.85156"
+       id="path17305-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -693.45447,829.8517 -17.65235,20.80078"
+       id="path17307-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -164.30607,1070.9025 -6.25,21.9492"
+       id="path17331-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -419.90371,704.95326 5.54688,-9.10157"
+       id="path17337-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -357.45449,710.50404 23.25,-1.40235"
+       id="path17341-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.10684,705.65247 -8.64843,-8.80078"
+       id="path17345-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.55607,768.25403 -8.6992,-19.40233"
+       id="path17355-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.40371,714.10169 -25.30078,-0.29687"
+       id="path17373-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -214.55607,782.75402 23.44925,16.50002"
+       id="path17381-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.10682,1023.3048 29.05075,-29.65232"
+       id="path17387-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -672.65369,810.50404 -20.80078,19.34766"
+       id="path17393-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,1186.8048 -6.44922,12.9493"
+       id="path17409-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.45449,1156.9533 48.75002,-19.6016"
+       id="path17411-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -681.15369,1083.004 5.89844,21.6485"
+       id="path17425-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,777.20326 4.69922,-19.69922"
+       id="path17427-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.10682,1047.6525 -3.19925,23.25"
+       id="path17433-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -166.50527,894.8517 13.3008,-28.25"
+       id="path17439-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -507.55605,1190.9533 4.80078,12.6992"
+       id="path17445-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.55607,768.25403 26,14.49999"
+       id="path17453-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.60683,714.80482 24.15234,-4.30078"
+       id="path17457-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.10682,792.90248 -23.54687,17.60156"
+       id="path17465-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -419.90371,704.95326 -14.65234,-0.39844"
+       id="path17477-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.10684,705.65247 14.55079,-1.09765"
+       id="path17479-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.20449,717.20326 -26.19922,-3.10157"
+       id="path17489-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -405.75527,706.85169 -14.14844,-1.89843"
+       id="path17491-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -425.55605,717.00404 5.65234,-12.05078"
+       id="path17493-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.10681,1035.504 -34.94923,-28.1523"
+       id="path17497-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -462.80605,708.20326 13.69921,-2.55079"
+       id="path17501-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.20449,717.35169 -8.90235,-11.69922"
+       id="path17503-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -570.50527,1164.0548 -52.44922,-17.25"
+       id="path17505-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -392.75527,710.20326 -13,-3.35157"
+       id="path17509-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.05605,712.15247 12.25,-3.94921"
+       id="path17521-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.80607,788.1017 0.25,-19.84767"
+       id="path17529-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -268.80605,756.00404 28.24998,12.24999"
+       id="path17531-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.60683,714.80482 -11.14844,-4.60156"
+       id="path17541-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.25527,1023.7033 0,24"
+       id="path17547-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.10681,1059.8517 2.95312,23.1523"
+       id="path17551-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,777.20326 -26.15233,15.69922"
+       id="path17559-8-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.20449,717.20326 10.14844,-5.05079"
+       id="path17565-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,907.00404 -19,-27.5"
+       id="path17569-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1171.1017 -5.25,15.7031"
+       id="path17579-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -372.75527,720.45326 -8.85156,-5.64844"
+       id="path17581-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.30605,721.95326 24.69922,-7.14844"
+       id="path17583-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1171.1017 56.40234,-14.1484"
+       id="path17593-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -298.95449,746.1017 30.14844,9.90234"
+       id="path17603-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -492.90371,723.25404 7.69922,-6.05078"
+       id="path17605-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.40371,723.15247 -26.80078,-5.94921"
+       id="path17607-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -618.70449,796.95326 -4.25,-19.75"
+       id="path17609-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -594.55605,763.6017 -28.39844,13.60156"
+       id="path17611-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1175.504 3.94922,15.4493"
+       id="path17615-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -366.60683,726.85169 -6.14844,-6.39843"
+       id="path17621-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -202.80607,1049.254 41.69925,-25.9492"
+       id="path17637-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -164.30607,998.15248 3.19925,25.15232"
+       id="path17639-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.25525,1035.7033 0,24"
+       id="path17655-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 5.69922,-14.84765"
+       id="path17659-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -8.94922,-14.5"
+       id="path17665-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.65371,729.90247 4.75,-6.64843"
+       id="path17667-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1175.504 -59,-11.4492"
+       id="path17675-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -330.6537,738.65248 31.69921,7.44922"
+       id="path17685-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -564.25527,752.30482 -30.30078,11.29688"
+       id="path17701-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.55605,733.75404 -3.05078,-6.90235"
+       id="path17715-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 24.94922,-9.89843"
+       id="path17725-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -192.25527,921.1017 25.75,-26.25"
+       id="path17727-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -27.14844,-8.69922"
+       id="path17733-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -249.95447,807.50404 9.1484,-19.40234"
+       id="path17735-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.55605,733.75404 32.90235,4.89844"
+       id="path17741-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -532.40371,743.3517 -31.85156,8.95312"
+       id="path17745-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -499.35683,736.90248 1.70312,-7.00001"
+       id="path17747-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -385.25527,1179.1017 61.39844,-8"
+       id="path17751-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -319.85683,1152.9025 -4,18.1992"
+       id="path17753-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.55607,972.55482 6.25,25.59766"
+       id="path17765-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -637.30605,1059.4025 -46.80076,-23.8985"
+       id="path17779-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -681.15369,1010.254 -2.95312,25.25"
+       id="path17781-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.60683,740.80482 0.0508,-7.05078"
+       id="path17791-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -397.20449,731.45326 33.64844,2.30078"
+       id="path17793-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -499.35683,736.90248 -33.04688,6.44922"
+       id="path17797-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -448.75527,1180.6017 -62.75,-5.0977"
+       id="path17803-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -514.50527,1157.4533 3,18.0507"
+       id="path17805-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.80605,743.95326 -1.55078,-7.05078"
+       id="path17819-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -465.50527,733.05482 -33.85156,3.84766"
+       id="path17821-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 34.05078,-0.39843"
+       id="path17825-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.6537,815.80482 -13.05079,-18.85156"
+       id="path17831-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -448.75527,1180.6017 63.5,-1.5"
+       id="path17835-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -34.25,1.20313"
+       id="path17847-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17851-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -418.75527,748.45326 -12.5,-16.60157"
+       id="path17853-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17855-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17859-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17863-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -402.00527,741.70326 -29.25,-9.85157"
+       id="path17865-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17867-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17871-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17875-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17877-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17879-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17881-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17883-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17885-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17887-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17889-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17891-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17893-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17895-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17897-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17899-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17901-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17903-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17905-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17909-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17913-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.60684,743.00404 27.35157,-11.15235"
+       id="path17915-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17917-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17921-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17925-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.55605,748.95326 9.30078,-17.10157"
+       id="path17927-4-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17929-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17933-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,946.80482 9.3984,25.75"
+       id="path17945-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,931.90248 -30.94921,-24.89844"
+       id="path17947-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -366.85683,747.70326 3.25,-6.89844"
+       id="path17955-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -675.25525,984.35169 -5.89844,25.90231"
+       id="path17975-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -493.20449,750.65248 -4.60156,-6.69922"
+       id="path17979-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.1537,1132.4025 -2.70313,20.5"
+       id="path18001-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -373.10683,754.05482 -28.89844,-12.35156"
+       id="path18013-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -255.1537,1070.3048 52.34763,-21.0508"
+       id="path18015-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -373.10683,754.05482 6.25,-6.35156"
+       id="path18019-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -192.25527,921.1017 12.3008,25.70312"
+       id="path18025-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 17.60158,-17.94922"
+       id="path18027-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.65371,756.70326 27.04687,-13.69922"
+       id="path18031-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -516.50527,1137.0548 2,20.3985"
+       id="path18049-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.65371,756.70326 -7.55078,-6.05078"
+       id="path18053-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,958.10169 -8.74999,26.25"
+       id="path18067-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -382.10683,759.65248 9,-5.59766"
+       id="path18081-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -344.90371,768.80482 -28.20312,-14.75"
+       id="path18083-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.40371,767.45326 -12.35156,-19"
+       id="path18087-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.80605,768.45326 9.25,-19.5"
+       id="path18099-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -229.10682,944.10169 36.85155,-22.99999"
+       id="path18107-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,895.8517 15.10155,25.25"
+       id="path18109-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -512.10683,772.70326 26.45312,-16"
+       id="path18125-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.60684,761.8517 -10.04687,-5.14844"
+       id="path18127-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -584.50527,832.8517 -605.6537,815.80482"
+       id="path18129-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -580.9037,1077.9533 -56.40235,-18.5508"
+       id="path18143-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.6537,785.75404 -27.25001,-16.94922"
+       id="path18149-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -393.35683,764.20326 11.25,-4.55078"
+       id="path18151-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,931.90248 -11.55078,26.19921"
+       id="path18157-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -225.05607,871.30482 17.69925,24.54688"
+       id="path18161-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -315.80605,1109.8517 -1.34766,22.5508"
+       id="path18165-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -463.45449,765.80482 -12.15235,-3.95312"
+       id="path18169-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -291.80605,804.70326 -317.6537,785.75404"
+       id="path18173-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -537.55605,790.90248 25.44922,-18.19922"
+       id="path18175-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -245.20447,847.70326 20.1484,23.60156"
+       id="path18181-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.40371,767.45326 13.04688,-3.25"
+       id="path18183-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.50527,1114.5548 1,22.5"
+       id="path18189-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 -24.25,-20.75"
+       id="path18197-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -613.60683,953.05482 -41.34765,-21.15234"
+       id="path18199-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,905.95326 -14.09766,25.94922"
+       id="path18201-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 22.35158,22.25"
+       id="path18209-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.80605,768.45326 -13.64844,-2.64844"
+       id="path18213-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -292.80605,841.20326 25.25,-15.75"
+       id="path18215-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -420.60683,769.30482 14.20312,-1.85156"
+       id="path18221-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -394.35683,788.70326 -12.04688,-21.25"
+       id="path18223-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -561.80605,811.00404 24.25,-20.10156"
+       id="path18229-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.80605,790.20326 9,-21.75"
+       id="path18239-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -435.30605,769.65247 -14.5,-1.19921"
+       id="path18241-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -315.80605,1085.504 60.65235,-15.1992"
+       id="path18243-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -435.30605,769.65247 14.69922,-0.34765"
+       id="path18249-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -624.25527,880.6017 -16.60155,25.35156"
+       id="path18257-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -584.50527,832.8517 22.69922,-21.84766"
+       id="path18265-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -316.25527,1085.7033 0,24"
+       id="path18275-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.4037,856.15248 -18.85157,24.44922"
+       id="path18279-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.4037,856.15248 20.89843,-23.30078"
+       id="path18281-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -556.1537,847.3517 -28.35157,-14.5"
+       id="path18283-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.50527,1090.2033 -63.39843,-12.25"
+       id="path18299-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.25527,1090.7033 0,24"
+       id="path18309-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -275.45449,962.65248 46.34767,-18.55079"
+       id="path18311-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -382.70449,811.90248 -11.65234,-23.19922"
+       id="path18329-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -467.50527,813.90248 8.69922,-23.69922"
+       id="path18331-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -324.55605,853.95326 31.75,-12.75"
+       id="path18355-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.80605,1094.1017 66,-8.5977"
+       id="path18373-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.1537,1059.6525 1.34765,25.8515"
+       id="path18375-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -563.6537,969.40248 -49.95313,-16.34766"
+       id="path18393-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -521.95449,858.55482 -556.1537,847.3517"
+       id="path18399-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -450.05605,1095.7033 -67.44922,-5.5"
+       id="path18401-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -516.50527,1064.3048 -1,25.8985"
+       id="path18403-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -371.65371,836.8517 -11.05078,-24.94922"
+       id="path18407-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.75527,839.25404 8.25,-25.35156"
+       id="path18423-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -450.05605,1095.7033 68.25,-1.6016"
+       id="path18431-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -319.85683,1032.6017 2.70313,27.0508"
+       id="path18445-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -361.30605,863.15248 36.75,-9.19922"
+       id="path18459-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,976.10169 53.65234,-13.44921"
+       id="path18463-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -361.30605,863.15248 -371.65371,836.8517"
+       id="path18469-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -514.50527,1037.1525 -2,27.1523"
+       id="path18473-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,866.00404 -38.44922,-7.44922"
+       id="path18491-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,866.00404 7.75,-26.75"
+       id="path18493-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1004.6017 4,28"
+       id="path18499-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -507.55605,980.25404 -563.6537,969.40248"
+       id="path18517-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,868.3517 40,-5.19922"
+       id="path18525-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -351.75527,890.55482 -9.55078,-27.40234"
+       id="path18527-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1009.004 -3,28.1485"
+       id="path18531-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,976.10169 5.25,28.50001"
+       id="path18541-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -490.65371,893.80482 7.14844,-27.80078"
+       id="path18543-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,869.3517 -40.85156,-3.34766"
+       id="path18545-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -343.10683,918.75404 -8.64844,-28.19922"
+       id="path18549-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,869.3517 41.34766,-1"
+       id="path18559-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -387.50527,983.70326 58.39844,-7.60157"
+       id="path18563-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,947.40248 6.44922,28.69921"
+       id="path18565-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -507.55605,980.25404 -3.94922,28.74996"
+       id="path18573-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,947.40248 -7.55078,-28.64844"
+       id="path18577-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.10683,922.3517 6.45312,-28.54688"
+       id="path18581-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -447.90371,985.10169 -59.65234,-4.84765"
+       id="path18585-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,951.30482 -4.80078,28.94922"
+       id="path18587-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,951.30482 5.64844,-28.95312"
+       id="path18601-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -447.90371,985.10169 60.39844,-1.39843"
+       id="path18611-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -135.25527,1099.3517 0,0"
+       id="path18629-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -125.25527,1129.6017 0,0"
+       id="path18631-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.30604,1207.8048 0,0"
+       id="path18633-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -115.20447,1159.8517 0,0"
+       id="path18635-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:9.56000042;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -734.15369,1051.6525 0,0"
+       id="path18637-7-3"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     id="g5024"
+     inkscape:export-xdpi="1.7543627"
+     inkscape:export-ydpi="1.7543627">
+    <ellipse
+       inkscape:export-ydpi="1.7543628"
+       inkscape:export-xdpi="1.7543628"
+       ry="328.32434"
+       rx="330.3876"
+       cy="1012.4067"
+       cx="394.74579"
+       id="path23134-7"
+       style="fill:#cbe4ff;fill-opacity:1;stroke:none;stroke-width:2.41763997;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 709.63881,1046.6308 0.39845,-37.9348"
+       id="path16809-4-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 710.38881,980.10448 v 28.99932"
+       id="path16811-8-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 140.74039,1199.2806 -19,-31.9582"
+       id="path16813-2-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 107.63883,1143.3708 14.10156,23.9516"
+       id="path16815-2-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 698.99036,925.41354 685.13881,889.56765"
+       id="path16817-3-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 674.74036,864.68712 10.39845,24.88053"
+       id="path16819-3-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 89.74039,1091.172 -6.95313,-37.3503"
+       id="path16821-2-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 79.08804,1025.7512 3.69922,28.0705"
+       id="path16823-7-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 619.28726,1234.7187 24.10155,-28.5372"
+       id="path16825-2-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 660.13881,1185.1887 -16.75,20.9928"
+       id="path16827-4-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 82.78726,969.49253 7.70313,-37.35476"
+       id="path16829-5-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 97.63883,905.45838 -7.14844,26.67939"
+       id="path16831-4-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 602.93961,775.19697 -31.40236,-23.1451"
+       id="path16833-1-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 554.33803,740.51104 17.19922,11.54083"
+       id="path16835-6-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 304.68959,1314.0046 -34.19922,-12.9953"
+       id="path16837-8-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 253.49038,1293.7595 17,7.2498"
+       id="path16839-0-4-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 554.33803,740.51104 -35.75,-17.05069"
+       id="path16841-4-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 503.78725,717.1394 14.80078,6.32095"
+       id="path16843-8-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 253.49038,1293.7595 -32.25,-19.1396"
+       id="path16845-8-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 202.93959,1262.3858 18.30079,12.2341"
+       id="path16847-3-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 684.08801,1137.3397 14.5508,-35.7279"
+       id="path16849-5-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 705.99036,1074.4701 -7.35155,27.1417"
+       id="path16851-2-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 385.68959,1326.6466 35.25,-0.9878"
+       id="path16853-4-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 425.33803,1325.3688 -4.39844,0.29"
+       id="path16855-7-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 425.33803,1325.3688 -4.39844,0.29"
+       id="path16857-4-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 706.33801,952.55511 3.69925,27.89827"
+       id="path16861-7-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 383.99037,1326.5288 1.69922,0.1178"
+       id="path16863-5-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 467.28725,706.23292 -39.89844,-6.26204"
+       id="path16865-6-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 422.63881,699.68089 4.75,0.28999"
+       id="path16867-5-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 122.38883,856.1595 19.64844,-31.78146"
+       id="path16869-7-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 158.03726,804.3685 -15.99999,20.00954"
+       id="path16871-6-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 127.63883,1176.9511 -20,-33.5803"
+       id="path16873-9-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 96.93961,1117.9102 10.69922,25.4606"
+       id="path16875-7-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 306.53725,710.58282 38.40234,-8.35091"
+       id="path16877-0-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 352.58803,701.53866 -7.44922,0.63435"
+       id="path16879-3-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 644.28726,820.49032 -23.5,-28.65045"
+       id="path16881-2-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 602.93961,775.19697 17.84765,16.6429"
+       id="path16883-3-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 661.08801,841.60546 13.65235,23.08166"
+       id="path16887-8-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 79.38883,997.50409 v 27.83931"
+       id="path16891-0-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 569.74038,1274.1578 31.84763,-22.9684"
+       id="path16893-5-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 619.28726,1234.7187 -17.69925,16.4707"
+       id="path16895-2-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 222.68959,749.50083 32.59766,-18.90847"
+       id="path16897-5-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 272.08803,723.40143 -16.80078,7.19093"
+       id="path16899-1-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 185.78726,1246.4362 -28.94921,-27.0283"
+       id="path16901-5-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 140.74039,1199.2806 16.09766,20.1273"
+       id="path16903-1-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 465.33803,1319.3379 36.75,-10.6709"
+       id="path16905-1-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 516.63881,1302.4593 -14.55078,6.2077"
+       id="path16907-5-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 108.33804,880.05677 97.63883,905.45838"
+       id="path16911-8-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 673.74036,1162.1614 -13.60155,23.0273"
+       id="path16915-9-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 176.83804,786.79671 27.15234,-24.76725"
+       id="path16917-3-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 222.68959,749.50083 -18.69921,12.52863"
+       id="path16919-3-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 503.78725,717.1394 -36.5,-10.90648"
+       id="path16921-6-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 516.63881,1302.4593 36.10157,-16.8196"
+       id="path16925-7-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 569.74038,1274.1578 -17,11.4819"
+       id="path16927-8-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 343.13881,1322.6456 -38.44922,-8.641"
+       id="path16929-6-8-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 272.08803,723.40143 34.44922,-12.81861"
+       id="path16933-2-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 709.63881,1046.6308 -3.64845,27.8393"
+       id="path16939-5-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 698.99036,925.41354 7.34765,27.14157"
+       id="path16943-1-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 582.63881,761.39057 554.33803,740.51104"
+       id="path16945-0-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 535.24038,732.16015 19.09765,8.35089"
+       id="path16947-0-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 185.78726,1246.4362 16.60155,15.6007"
+       id="path16951-0-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 89.74039,1091.172 7.19922,26.7382"
+       id="path16955-8-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 425.33803,1325.3688 40,-6.0309"
+       id="path16957-2-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 474.88881,1314.5846 -9.55078,4.7533"
+       id="path16959-8-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 176.83804,786.79671 158.03726,804.3685"
+       id="path16963-8-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 86.08805,1035.2621 79.08804,997.56299"
+       id="path16965-7-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 82.78726,969.49253 -3.69922,28.07046"
+       id="path16967-0-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 673.78726,874.42909 661.08801,841.60546"
+       id="path16977-1-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 644.28726,820.49032 16.80075,21.11514"
+       id="path16979-5-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 122.38883,856.1595 -14.05079,23.89727"
+       id="path16983-0-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 383.99037,1326.5288 -40.85156,-3.8832"
+       id="path16985-8-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 335.99037,1318.3545 7.14844,4.2911"
+       id="path16987-0-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 582.63881,761.39057 20.3008,13.8064"
+       id="path16991-7-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 127.63883,1176.9511 13.10156,22.3295"
+       id="path16995-1-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 646.68961,1194.1196 27.05075,-31.9582"
+       id="path16997-5-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 684.08801,1137.3397 -10.34765,24.8217"
+       id="path16999-1-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 422.63881,699.68089 387.43959,698.462"
+       id="path17011-3-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 352.58803,701.53866 387.43959,698.462"
+       id="path17013-3-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 417.58803,703.04299 5.05078,-3.3621"
+       id="path17021-9-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 243.43959,740.04887 -20.75,9.45196"
+       id="path17025-4-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 243.43959,740.04887 28.64844,-16.64744"
+       id="path17027-8-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 360.53724,704.55186 -7.94921,-3.0132"
+       id="path17037-2-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 688.08801,899.25523 10.90235,26.15831"
+       id="path17041-3-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 90.18961,941.88426 -7.40235,27.60827"
+       id="path17061-6-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 171.6896,1228.1666 14.09766,18.2696"
+       id="path17077-0-3-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 115.53726,889.56765 6.85157,-33.40815"
+       id="path17083-9-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 560.18959,750.54754 535.24038,732.16015"
+       id="path17087-0-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 514.53725,727.05807 20.70313,5.10208"
+       id="path17089-7-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 160.13882,1207.3415 -32.49999,-30.3904"
+       id="path17095-0-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 646.68961,1194.1196 -12.3008,21.5184"
+       id="path17109-2-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 694.58801,1055.4439 15.0508,-37.0603"
+       id="path17111-0-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 483.53725,1306.2881 -8.64844,8.2965"
+       id="path17117-0-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 673.78726,874.42909 14.30075,24.82614"
+       id="path17125-0-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 221.83803,759.70952 21.60156,-19.66065"
+       id="path17127-4-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 265.93959,733.78229 -22.5,6.26658"
+       id="path17129-0-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 329.53725,1310.4659 6.45312,7.8886"
+       id="path17133-8-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 101.13883,915.14597 90.18961,941.88426"
+       id="path17141-1-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 412.28725,710.00283 5.30078,-6.95984"
+       id="path17183-1-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 368.88881,711.16281 -8.35157,-6.61095"
+       id="path17187-9-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 160.13882,1207.3415 11.55078,20.8251"
+       id="path17195-9-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 673.43961,908.06832 0.34765,-33.63923"
+       id="path17209-3-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 656.18961,851.22962 17.59765,23.19947"
+       id="path17211-9-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 492.43959,725.37248 22.09766,1.68559"
+       id="path17215-9-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 577.38881,771.48144 -17.19922,-20.9339"
+       id="path17217-1-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 607.93961,1222.1311 38.75,-28.0115"
+       id="path17221-2-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 656.08801,1170.5123 -9.3984,23.6073"
+       id="path17223-6-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 115.53726,889.56765 -14.39843,25.57832"
+       id="path17235-4-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 107.58804,1071.3346 86.08805,1035.2621"
+       id="path17237-7-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 289.93959,730.82799 -24,2.9543"
+       id="path17247-9-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 491.08803,1294.5163 -7.55079,11.7718"
+       id="path17259-3-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 208.38881,781.51792 13.44922,-21.8084"
+       id="path17265-2-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 635.53726,829.94682 20.65235,21.2828"
+       id="path17283-8-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 323.88881,1299.0383 5.64844,11.4276"
+       id="path17291-7-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 203.68959,1233.0965 -43.55077,-25.755"
+       id="path17297-5-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 151.38883,1184.2009 8.74999,23.1406"
+       id="path17299-6-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 121.74039,923.03469 -6.20313,-33.46704"
+       id="path17305-0-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 133.18961,865.43929 -17.65235,24.12836"
+       id="path17307-4-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 662.33801,1145.0518 -6.25,25.4605"
+       id="path17331-6-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 406.74037,720.56041 5.54688,-10.55758"
+       id="path17337-9-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 469.18959,726.99917 23.25,-1.62669"
+       id="path17341-6-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 377.53724,721.37148 -8.64843,-10.20867"
+       id="path17345-8-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 586.08801,793.98763 -8.6992,-22.50619"
+       id="path17355-9-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 315.24037,731.17235 -25.30078,-0.34436"
+       id="path17373-6-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 612.08801,810.80723 23.44925,19.13959"
+       id="path17381-8-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 665.53726,1089.8398 29.05075,-34.3959"
+       id="path17387-5-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 153.99039,842.99652 -20.80078,22.44277"
+       id="path17393-9-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 497.53725,1279.4954 -6.44922,15.0209"
+       id="path17409-8-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 559.18959,1244.8685 48.75002,-22.7374"
+       id="path17411-7-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 145.49039,1159.0893 5.89844,25.1116"
+       id="path17425-0-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 203.68959,804.3685 4.69922,-22.85058"
+       id="path17427-7-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 665.53726,1118.0824 -3.19925,26.9694"
+       id="path17433-8-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 660.13881,940.83757 13.3008,-32.76925"
+       id="path17439-5-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 319.08803,1284.3076 4.80078,14.7307"
+       id="path17445-8-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 586.08801,793.98763 26,16.8196"
+       id="path17453-7-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 445.03725,731.98796 24.15234,-4.98879"
+       id="path17457-8-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 177.53726,822.57918 -23.54687,20.41734"
+       id="path17465-0-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 406.74037,720.56041 -14.65234,-0.46218"
+       id="path17477-5-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 377.53724,721.37148 14.55079,-1.27325"
+       id="path17479-2-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 341.43959,734.77009 -26.19922,-3.59774"
+       id="path17489-8-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 420.88881,722.76254 -14.14844,-2.20213"
+       id="path17491-5-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 401.08803,734.539 5.65234,-13.97859"
+       id="path17493-7-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 142.53727,1103.9905 -34.94923,-32.6559"
+       id="path17497-2-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 363.83803,724.33033 13.69921,-2.95885"
+       id="path17501-5-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 386.43959,734.94226 -8.90235,-13.57078"
+       id="path17503-7-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 256.13881,1253.106 -52.44922,-20.0095"
+       id="path17505-9-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 433.88881,726.65027 -13,-3.88773"
+       id="path17509-1-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 351.58803,728.91131 12.25,-4.58098"
+       id="path17521-7-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 585.83801,817.0104 0.25,-23.02277"
+       id="path17529-3-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 557.83803,779.77796 28.24998,14.20967"
+       id="path17531-9-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 445.03725,731.98796 -11.14844,-5.33769"
+       id="path17541-6-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 665.38881,1090.302 v 27.8394"
+       id="path17547-9-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 142.53727,1132.2332 2.95312,26.8561"
+       id="path17551-9-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 203.68959,804.3685 -26.15233,18.21068"
+       id="path17559-8-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 341.43959,734.77009 10.14844,-5.85878"
+       id="path17565-7-0-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 140.74039,954.93396 -19,-31.89927"
+       id="path17569-7-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 502.78725,1261.2802 -5.25,18.2152"
+       id="path17579-3-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 453.88881,738.54 -8.85156,-6.55204"
+       id="path17581-6-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 420.33803,740.27996 24.69922,-8.292"
+       id="path17583-5-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 502.78725,1261.2802 56.40234,-16.4117"
+       id="path17593-2-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 527.68959,768.29151 30.14844,11.48645"
+       id="path17603-8-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 333.74037,741.78883 7.69922,-7.01874"
+       id="path17605-4-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 368.24037,741.67101 -26.80078,-6.90092"
+       id="path17607-0-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 207.93959,827.27797 -4.25,-22.90947"
+       id="path17609-6-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 232.08803,788.59105 203.68959,804.3685"
+       id="path17611-4-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 315.13881,1266.3868 3.94922,17.9208"
+       id="path17615-9-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 460.03725,745.96201 453.88881,738.54"
+       id="path17621-6-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 623.83801,1119.9401 41.69925,-30.1003"
+       id="path17637-6-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 662.33801,1060.6637 3.19925,29.1761"
+       id="path17639-5-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 142.38883,1104.2217 v 27.8394"
+       id="path17655-9-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 395.38881,751.76188 401.08803,734.539"
+       id="path17659-6-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 -8.94922,-16.81962"
+       id="path17665-2-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 328.99037,749.50083 4.75,-7.712"
+       id="path17667-8-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 315.13881,1266.3868 -59,-13.2808"
+       id="path17675-8-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 495.99038,759.65061 31.69921,8.6409"
+       id="path17685-7-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 262.38881,775.48697 -30.30078,13.10408"
+       id="path17701-5-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 463.08803,753.96855 -3.05078,-8.00654"
+       id="path17715-7-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 24.94922,-11.48192"
+       id="path17725-0-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 634.38881,971.28687 25.75,-30.4493"
+       id="path17727-2-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 395.38881,751.76188 368.24037,741.67101"
+       id="path17733-2-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 576.68961,839.5166 9.1484,-22.5062"
+       id="path17735-9-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 463.08803,753.96855 32.90235,5.68206"
+       id="path17741-1-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 294.24037,765.10159 -31.85156,10.38538"
+       id="path17745-3-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 327.28725,757.62066 1.70312,-8.11983"
+       id="path17747-8-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 441.38881,1270.56 61.39844,-9.2798"
+       id="path17751-1-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 506.78725,1240.1697 -4,21.1105"
+       id="path17753-3-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 656.08801,1030.9711 6.25,29.6926"
+       id="path17765-7-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 189.33803,1131.7121 -46.80076,-27.7216"
+       id="path17779-6-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 145.49039,1074.7012 -2.95312,29.2893"
+       id="path17781-1-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 463.03725,762.14727 0.0508,-8.17872"
+       id="path17791-4-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 429.43959,751.29971 33.64844,2.66884"
+       id="path17793-9-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 327.28725,757.62066 -33.04688,7.48093"
+       id="path17797-2-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 377.88881,1272.3 -62.75,-5.9132"
+       id="path17803-0-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 312.13881,1245.4485 3,20.9383"
+       id="path17805-1-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 328.83803,765.79938 -1.55078,-8.17872"
+       id="path17819-8-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 361.13881,753.15748 -33.85156,4.46318"
+       id="path17821-6-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 34.05078,-0.46217"
+       id="path17825-3-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 220.99038,849.14528 207.93959,827.27797"
+       id="path17831-4-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 377.88881,1272.3 63.5,-1.74"
+       id="path17835-2-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 -34.25,1.3956"
+       id="path17847-0-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17851-5-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 407.88881,771.01926 -12.5,-19.25738"
+       id="path17853-9-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17855-4-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17859-4-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17863-9-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 424.63881,763.18944 -29.25,-11.42756"
+       id="path17865-1-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17867-9-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17871-9-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17875-3-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17877-4-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17879-1-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17881-2-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17883-5-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17885-7-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17887-2-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17889-6-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17891-0-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17893-1-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17895-4-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17897-1-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17899-5-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17901-3-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17903-5-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17905-7-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17909-7-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17913-3-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 368.03724,764.69831 27.35157,-12.93643"
+       id="path17915-3-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17917-2-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17921-0-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17925-7-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 386.08803,771.59925 9.30078,-19.83737"
+       id="path17927-4-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17929-7-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 395.38881,751.76188 v 0"
+       id="path17933-6-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 646.68961,1001.1018 9.3984,29.8693"
+       id="path17945-8-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 171.6896,983.81549 140.74039,954.93396"
+       id="path17947-1-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 459.78725,770.14928 3.25,-8.00201"
+       id="path17955-8-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 151.38883,1044.6552 -5.89844,30.046"
+       id="path17975-9-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 333.43959,773.5703 -4.60156,-7.77092"
+       id="path17979-3-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 509.49038,1216.3902 -2.70313,23.7795"
+       id="path18001-7-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 453.53725,777.51692 424.63881,763.18944"
+       id="path18013-2-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 571.49038,1144.3585 52.34763,-24.4184"
+       id="path18015-7-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 453.53725,777.51692 6.25,-7.36764"
+       id="path18019-0-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 634.38881,971.28687 12.3008,29.81493"
+       id="path18025-6-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#0000ff;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 559.08803,860.33722 576.68961,839.5166"
+       id="path18027-4-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 340.99037,780.58904 27.04687,-15.89073"
+       id="path18031-7-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 310.13881,1221.7867 2,23.6618"
+       id="path18049-0-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 340.99037,780.58904 -7.55078,-7.01874"
+       id="path18053-2-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 160.13882,1014.2059 -8.74999,30.4493"
+       id="path18067-9-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 444.53725,784.01006 9,-6.49314"
+       id="path18081-1-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 481.74037,794.62653 453.53725,777.51692"
+       id="path18083-6-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 420.24037,793.05876 -12.35156,-22.0395"
+       id="path18087-3-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 376.83803,794.21873 9.25,-22.61948"
+       id="path18099-8-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 597.53726,997.96625 36.85155,-26.67938"
+       id="path18107-2-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;image-rendering:auto"
+       d="m 619.28726,941.99754 15.10155,29.28933"
+       id="path18109-8-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 314.53725,799.14862 26.45312,-18.55958"
+       id="path18125-5-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 351.03724,786.56109 -10.04687,-5.97205"
+       id="path18127-9-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 242.13881,868.91921 220.99038,849.14528"
+       id="path18129-2-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 245.74038,1153.2306 -56.40235,-21.5185"
+       id="path18143-0-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 508.99038,814.28718 481.74037,794.62653"
+       id="path18149-3-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 433.28725,789.28884 11.25,-5.27878"
+       id="path18151-4-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 171.6896,983.81549 -11.55078,30.39041"
+       id="path18157-7-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 601.58801,913.52381 17.69925,28.47373"
+       id="path18161-7-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 510.83803,1190.2319 -1.34766,26.1583"
+       id="path18165-1-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 363.18959,791.14661 -12.15235,-4.58552"
+       id="path18169-6-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 534.83803,836.26777 508.99038,814.28718"
+       id="path18173-5-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 289.08803,820.25923 25.44922,-21.11061"
+       id="path18175-5-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 581.43961,886.14663 20.1484,27.37718"
+       id="path18181-4-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 420.24037,793.05876 13.04688,-3.76992"
+       id="path18183-6-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 309.13881,1195.6873 1,26.0994"
+       id="path18189-8-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 559.08803,860.33722 -24.25,-24.06945"
+       id="path18197-1-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 213.03725,1008.3516 171.6896,983.81549"
+       id="path18199-0-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 185.78726,953.71509 -14.09766,30.1004"
+       id="path18201-5-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 559.08803,860.33722 22.35158,25.80941"
+       id="path18209-1-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 376.83803,794.21873 -13.64844,-3.07212"
+       id="path18213-8-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 533.83803,878.6068 25.25,-18.26958"
+       id="path18215-9-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 406.03725,795.20652 14.20312,-2.14776"
+       id="path18221-1-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 432.28725,817.70819 420.24037,793.05876"
+       id="path18223-8-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 264.83803,843.57651 24.25,-23.31728"
+       id="path18229-1-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 367.83803,819.44815 9,-25.22942"
+       id="path18239-0-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 391.33803,795.60978 -14.5,-1.39105"
+       id="path18241-9-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 510.83803,1161.9892 60.65235,-17.6307"
+       id="path18243-7-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 391.33803,795.60978 14.69922,-0.40326"
+       id="path18249-3-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 202.38881,924.30795 -16.60155,29.40714"
+       id="path18257-9-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 242.13881,868.91921 22.69922,-25.3427"
+       id="path18265-1-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 510.38881,1162.2204 v 27.8393"
+       id="path18275-2-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 221.24038,895.9475 -18.85157,28.36045"
+       id="path18279-6-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 221.24038,895.9475 20.89843,-27.02829"
+       id="path18281-2-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 270.49038,885.73883 242.13881,868.91921"
+       id="path18283-6-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 309.13881,1167.4402 -63.39843,-14.2096"
+       id="path18299-6-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 309.38881,1168.0202 v 27.8394"
+       id="path18309-5-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 551.18959,1019.4847 46.34767,-21.51845"
+       id="path18311-0-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 443.93959,844.61867 432.28725,817.70819"
+       id="path18329-5-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 359.13881,846.93862 8.69922,-27.49047"
+       id="path18331-4-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 502.08803,893.39646 31.75,-14.78966"
+       id="path18355-3-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 444.83803,1171.9623 66,-9.9731"
+       id="path18373-1-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 509.49038,1132.0021 1.34765,29.9871"
+       id="path18375-9-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 262.99038,1027.3145 -49.95313,-18.9629"
+       id="path18393-8-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 304.68959,898.73415 270.49038,885.73883"
+       id="path18399-7-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 376.58803,1173.8201 -67.44922,-6.3799"
+       id="path18401-7-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 310.13881,1137.3987 -1,30.0415"
+       id="path18403-6-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 454.99037,873.55911 443.93959,844.61867"
+       id="path18407-8-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 350.88881,876.34576 8.25,-29.40714"
+       id="path18423-7-4-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 376.58803,1173.8201 68.25,-1.8578"
+       id="path18431-3-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 506.78725,1100.6239 2.70313,31.3782"
+       id="path18445-2-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 465.33803,904.06732 36.75,-10.67086"
+       id="path18459-5-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 497.53725,1035.0854 53.65234,-15.6007"
+       id="path18463-4-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 465.33803,904.06732 454.99037,873.55911"
+       id="path18469-3-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 312.13881,1105.9027 -2,31.496"
+       id="path18473-5-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 343.13881,907.37505 -38.44922,-8.6409"
+       id="path18491-7-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 343.13881,907.37505 7.75,-31.02929"
+       id="path18493-5-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 502.78725,1068.1447 4,32.4792"
+       id="path18499-6-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 319.08803,1039.902 -56.09765,-12.5875"
+       id="path18517-5-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 425.33803,910.09827 40,-6.03095"
+       id="path18525-9-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 474.88881,935.8533 -9.55078,-31.78598"
+       id="path18527-5-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 315.13881,1073.2512 -3,32.6515"
+       id="path18531-8-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 497.53725,1035.0854 5.25,33.0593"
+       id="path18541-3-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 335.99037,939.62322 7.14844,-32.24817"
+       id="path18543-3-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 383.99037,911.25825 -40.85156,-3.8832"
+       id="path18545-1-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 483.53725,968.56365 474.88881,935.8533"
+       id="path18549-9-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 383.99037,911.25825 41.34766,-1.15998"
+       id="path18559-9-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 439.13881,1043.903 58.39844,-8.8176"
+       id="path18563-6-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 491.08803,1001.7951 6.44922,33.2903"
+       id="path18565-1-4-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 319.08803,1039.902 -3.94922,33.3492"
+       id="path18573-7-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 491.08803,1001.7951 -7.55078,-33.23145"
+       id="path18577-1-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 329.53725,972.73684 6.45312,-33.11362"
+       id="path18581-4-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 378.74037,1045.5252 -59.65234,-5.6232"
+       id="path18585-0-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 323.88881,1006.3217 -4.80078,33.5803"
+       id="path18587-2-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 323.88881,1006.3217 5.64844,-33.58486"
+       id="path18601-5-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 378.74037,1045.5252 60.39844,-1.6222"
+       id="path18611-8-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 691.38881,1178.0522 v 0"
+       id="path18629-0-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 701.38881,1213.1413 v 0"
+       id="path18631-1-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 79.33804,1303.8549 v 0"
+       id="path18633-6-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 711.43961,1248.2305 v 0"
+       id="path18635-9-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#2761eb;stroke-width:10.29631805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 92.49039,1122.7223 v 0"
+       id="path18637-7-3-5"
+       inkscape:connector-curvature="0" />
+  </g>
+  <ellipse
+     style="fill:#d4d4d4;fill-opacity:1;stroke:none;stroke-width:10.29599953;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     id="path23134-7-6"
+     cx="1402.5084"
+     cy="956.67792"
+     rx="353.6955"
+     ry="351.48666"
+     inkscape:export-xdpi="1.6387534"
+     inkscape:export-ydpi="1.6387534" />
+  <g
+     id="g23145-2-3"
+     style="stroke:#778595;stroke-width:18.47318325;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="matrix(1,0,0,1.1599735,1834.4067,-152.89539)"
+     inkscape:export-xdpi="1.6387534"
+     inkscape:export-ydpi="1.6387534">
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -117.00527,986.05482 0.39845,-32.70313"
+       id="path16809-4-0-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -116.25527,928.70326 0,25"
+       id="path16811-8-5-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,1117.6525 -19,-27.5508"
+       id="path16813-2-1-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -719.00525,1069.4533 14.10156,20.6484"
+       id="path16815-2-3-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -127.65372,881.55482 -13.85155,-30.90234"
+       id="path16817-3-2-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -151.90372,829.20326 10.39845,21.44922"
+       id="path16819-3-9-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.90369,1024.4533 -6.95313,-32.19926"
+       id="path16821-2-9-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.55604,968.05482 3.69922,24.19922"
+       id="path16823-7-9-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,1148.2033 24.10155,-24.6016"
+       id="path16825-2-6-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -166.50527,1105.504 -16.75,18.0977"
+       id="path16827-4-0-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -743.85682,919.55482 7.70313,-32.20312"
+       id="path16829-5-6-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -729.00525,864.3517 -7.14844,23"
+       id="path16831-4-4-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -223.70447,752.05482 -31.40236,-19.95313"
+       id="path16833-1-3-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -272.30605,722.15247 17.19922,9.94922"
+       id="path16835-6-0-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -521.95449,1216.5548 -34.19922,-11.2031"
+       id="path16837-8-5-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -573.1537,1199.1017 17,6.25"
+       id="path16839-0-4-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -272.30605,722.15247 -35.75,-14.69921"
+       id="path16841-4-1-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -322.85683,702.00404 14.80078,5.44922"
+       id="path16843-8-4-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -573.1537,1199.1017 -32.25,-16.5"
+       id="path16845-8-5-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -623.70449,1172.0548 18.30079,10.5469"
+       id="path16847-3-8-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -142.55607,1064.254 14.5508,-30.8007"
+       id="path16849-5-5-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -120.65372,1010.0548 -7.35155,23.3985"
+       id="path16851-2-1-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.95449,1227.4533 35.25,-0.8516"
+       id="path16853-4-9-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 -4.39844,0.25"
+       id="path16855-7-9-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 -4.39844,0.25"
+       id="path16857-4-6-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -120.30607,904.95326 3.69925,24.05078"
+       id="path16861-7-7-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,1227.3517 1.69922,0.1016"
+       id="path16863-5-9-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -359.35683,692.60169 -39.89844,-5.39843"
+       id="path16865-6-0-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -404.00527,686.95326 4.75,0.25"
+       id="path16867-5-5-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.25525,821.8517 19.64844,-27.39844"
+       id="path16869-7-9-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -668.60682,777.20326 -15.99999,17.25"
+       id="path16871-6-7-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -699.00525,1098.4025 -20,-28.9492"
+       id="path16873-9-6-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -729.70447,1047.504 10.69922,21.9493"
+       id="path16875-7-6-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -520.10683,696.35169 38.40234,-7.19922"
+       id="path16877-0-8-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -474.05605,688.55482 -7.44922,0.54687"
+       id="path16879-3-1-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -182.35682,791.1017 -23.5,-24.69923"
+       id="path16881-2-8-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -223.70447,752.05482 17.84765,14.34765"
+       id="path16883-3-9-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -165.55607,809.30482 13.65235,19.89844"
+       id="path16887-8-2-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.25525,943.70326 0,24"
+       id="path16891-0-9-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -256.9037,1182.2033 31.84763,-19.8008"
+       id="path16893-5-5-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,1148.2033 -17.69925,14.1992"
+       id="path16895-2-4-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -603.95449,729.90247 32.59766,-16.30078"
+       id="path16897-5-6-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -554.55605,707.40247 -16.80078,6.19922"
+       id="path16899-1-2-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,1158.3048 -28.94921,-23.3008"
+       id="path16901-5-7-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,1117.6525 16.09766,17.3515"
+       id="path16903-1-6-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -361.30605,1221.1525 36.75,-9.1992"
+       id="path16905-1-7-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -310.00527,1206.6017 -14.55078,5.3516"
+       id="path16907-5-1-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -718.30604,842.45326 -10.69921,21.89844"
+       id="path16911-8-7-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.90372,1085.6525 -13.60155,19.8515"
+       id="path16915-9-1-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.80604,762.05482 27.15234,-21.35156"
+       id="path16917-3-8-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -603.95449,729.90247 -18.69921,10.80079"
+       id="path16919-3-6-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -322.85683,702.00404 -36.5,-9.40235"
+       id="path16921-6-8-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -310.00527,1206.6017 36.10157,-14.5"
+       id="path16925-7-0-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -256.9037,1182.2033 -17,9.8984"
+       id="path16927-8-7-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,1224.0041 -38.44922,-7.4493"
+       id="path16929-6-8-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -554.55605,707.40247 34.44922,-11.05078"
+       id="path16933-2-6-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -117.00527,986.05482 -3.64845,23.99998"
+       id="path16939-5-6-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -127.65372,881.55482 7.34765,23.39844"
+       id="path16943-1-9-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -244.00527,740.15248 -28.30078,-18.00001"
+       id="path16945-0-6-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -291.4037,714.95326 19.09765,7.19921"
+       id="path16947-0-1-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,1158.3048 16.60155,13.4492"
+       id="path16951-0-8-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.90369,1024.4533 7.19922,23.0507"
+       id="path16955-8-5-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,1226.3517 40,-5.1992"
+       id="path16957-2-9-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -351.75527,1217.0548 -9.55078,4.0977"
+       id="path16959-8-6-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.80604,762.05482 -18.80078,15.14844"
+       id="path16963-8-6-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -740.55603,976.25404 -7.00001,-32.5"
+       id="path16965-7-1-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -743.85682,919.55482 -3.69922,24.19922"
+       id="path16967-0-7-8-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.85682,837.6017 -12.69925,-28.29688"
+       id="path16977-1-5-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -182.35682,791.1017 16.80075,18.20312"
+       id="path16979-5-5-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.25525,821.8517 -14.05079,20.60156"
+       id="path16983-0-6-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,1227.3517 -40.85156,-3.3476"
+       id="path16985-8-3-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -490.65371,1220.3048 7.14844,3.6993"
+       id="path16987-0-0-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -244.00527,740.15248 20.3008,11.90234"
+       id="path16991-7-2-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -699.00525,1098.4025 13.10156,19.25"
+       id="path16995-1-5-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,1113.2033 27.05075,-27.5508"
+       id="path16997-5-9-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -142.55607,1064.254 -10.34765,21.3985"
+       id="path16999-1-8-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -404.00527,686.95326 -35.19922,-1.05079"
+       id="path17011-3-2-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -474.05605,688.55482 34.85156,-2.65235"
+       id="path17013-3-3-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -409.05605,689.85169 5.05078,-2.89843"
+       id="path17021-9-8-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -583.20449,721.75404 -20.75,8.14843"
+       id="path17025-4-6-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -583.20449,721.75404 28.64844,-14.35157"
+       id="path17027-8-1-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -466.10684,691.15247 -7.94921,-2.59765"
+       id="path17037-2-6-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -138.55607,859.00404 10.90235,22.55078"
+       id="path17041-3-6-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -736.45447,895.75404 -7.40235,23.80078"
+       id="path17061-6-1-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,1142.5548 14.09766,15.75"
+       id="path17077-0-3-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -711.10682,850.65248 6.85157,-28.80078"
+       id="path17083-9-4-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -266.45449,730.80482 -291.4037,714.95326"
+       id="path17087-0-0-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -312.10683,710.55482 20.70313,4.39844"
+       id="path17089-7-9-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,1124.6017 -32.49999,-26.1992"
+       id="path17095-0-6-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,1113.2033 -12.3008,18.5507"
+       id="path17109-2-8-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -132.05607,993.65248 15.0508,-31.94922"
+       id="path17111-0-2-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -343.10683,1209.9025 -8.64844,7.1523"
+       id="path17117-0-6-6-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -152.85682,837.6017 14.30075,21.40234"
+       id="path17125-0-4-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -604.80605,738.70326 21.60156,-16.94922"
+       id="path17127-4-2-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -560.70449,716.35169 -22.5,5.40235"
+       id="path17129-0-3-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.10683,1213.5041 6.45312,6.8007"
+       id="path17133-8-0-8-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -725.50525,872.70326 -10.94922,23.05078"
+       id="path17141-1-5-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -414.35683,695.85169 5.30078,-6"
+       id="path17183-1-0-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -457.75527,696.85169 -8.35157,-5.69922"
+       id="path17187-9-7-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,1124.6017 11.55078,17.9531"
+       id="path17195-9-2-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -153.20447,866.6017 0.34765,-29"
+       id="path17209-3-8-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.45447,817.6017 17.59765,20"
+       id="path17211-9-0-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -334.20449,709.10169 22.09766,1.45313"
+       id="path17215-9-2-7-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -249.25527,748.8517 -17.19922,-18.04688"
+       id="path17217-1-3-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -218.70447,1137.3517 38.75,-24.1484"
+       id="path17221-2-5-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.55607,1092.8517 -9.3984,20.3516"
+       id="path17223-6-4-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -711.10682,850.65248 -14.39843,22.05078"
+       id="path17235-4-3-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -719.05604,1007.3517 -21.49999,-31.09766"
+       id="path17237-7-0-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -536.70449,713.80482 -24,2.54687"
+       id="path17247-9-7-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,1199.7541 -7.55079,10.1484"
+       id="path17259-3-1-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -618.25527,757.50404 13.44922,-18.80078"
+       id="path17265-2-8-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -191.10682,799.25404 20.65235,18.34766"
+       id="path17283-8-8-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,1203.6525 5.64844,9.8516"
+       id="path17291-7-7-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,1146.8048 -43.55077,-22.2031"
+       id="path17297-5-4-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -675.25525,1104.6525 8.74999,19.9492"
+       id="path17299-6-2-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -704.90369,879.50404 -6.20313,-28.85156"
+       id="path17305-0-2-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -693.45447,829.8517 -17.65235,20.80078"
+       id="path17307-4-1-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -164.30607,1070.9025 -6.25,21.9492"
+       id="path17331-6-2-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -419.90371,704.95326 5.54688,-9.10157"
+       id="path17337-9-1-5-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -357.45449,710.50404 23.25,-1.40235"
+       id="path17341-6-7-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.10684,705.65247 -8.64843,-8.80078"
+       id="path17345-8-2-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.55607,768.25403 -8.6992,-19.40233"
+       id="path17355-9-6-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.40371,714.10169 -25.30078,-0.29687"
+       id="path17373-6-3-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -214.55607,782.75402 23.44925,16.50002"
+       id="path17381-8-6-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.10682,1023.3048 29.05075,-29.65232"
+       id="path17387-5-0-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -672.65369,810.50404 -20.80078,19.34766"
+       id="path17393-9-8-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,1186.8048 -6.44922,12.9493"
+       id="path17409-8-8-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.45449,1156.9533 48.75002,-19.6016"
+       id="path17411-7-7-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -681.15369,1083.004 5.89844,21.6485"
+       id="path17425-0-0-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,777.20326 4.69922,-19.69922"
+       id="path17427-7-8-3-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.10682,1047.6525 -3.19925,23.25"
+       id="path17433-8-9-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -166.50527,894.8517 13.3008,-28.25"
+       id="path17439-5-9-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -507.55605,1190.9533 4.80078,12.6992"
+       id="path17445-8-8-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.55607,768.25403 26,14.49999"
+       id="path17453-7-4-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.60683,714.80482 24.15234,-4.30078"
+       id="path17457-8-2-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -649.10682,792.90248 -23.54687,17.60156"
+       id="path17465-0-6-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -419.90371,704.95326 -14.65234,-0.39844"
+       id="path17477-5-8-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.10684,705.65247 14.55079,-1.09765"
+       id="path17479-2-7-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.20449,717.20326 -26.19922,-3.10157"
+       id="path17489-8-8-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -405.75527,706.85169 -14.14844,-1.89843"
+       id="path17491-5-5-8-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -425.55605,717.00404 5.65234,-12.05078"
+       id="path17493-7-9-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.10681,1035.504 -34.94923,-28.1523"
+       id="path17497-2-8-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -462.80605,708.20326 13.69921,-2.55079"
+       id="path17501-5-3-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.20449,717.35169 -8.90235,-11.69922"
+       id="path17503-7-6-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -570.50527,1164.0548 -52.44922,-17.25"
+       id="path17505-9-4-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -392.75527,710.20326 -13,-3.35157"
+       id="path17509-1-7-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.05605,712.15247 12.25,-3.94921"
+       id="path17521-7-1-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -240.80607,788.1017 0.25,-19.84767"
+       id="path17529-3-5-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -268.80605,756.00404 28.24998,12.24999"
+       id="path17531-9-9-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.60683,714.80482 -11.14844,-4.60156"
+       id="path17541-6-4-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -161.25527,1023.7033 0,24"
+       id="path17547-9-4-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.10681,1059.8517 2.95312,23.1523"
+       id="path17551-9-2-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -622.95449,777.20326 -26.15233,15.69922"
+       id="path17559-8-0-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.20449,717.20326 10.14844,-5.05079"
+       id="path17565-7-0-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -685.90369,907.00404 -19,-27.5"
+       id="path17569-7-0-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1171.1017 -5.25,15.7031"
+       id="path17579-3-0-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -372.75527,720.45326 -8.85156,-5.64844"
+       id="path17581-6-8-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.30605,721.95326 24.69922,-7.14844"
+       id="path17583-5-1-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1171.1017 56.40234,-14.1484"
+       id="path17593-2-7-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -298.95449,746.1017 30.14844,9.90234"
+       id="path17603-8-1-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -492.90371,723.25404 7.69922,-6.05078"
+       id="path17605-4-9-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.40371,723.15247 -26.80078,-5.94921"
+       id="path17607-0-9-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -618.70449,796.95326 -4.25,-19.75"
+       id="path17609-6-0-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -594.55605,763.6017 -28.39844,13.60156"
+       id="path17611-4-9-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1175.504 3.94922,15.4493"
+       id="path17615-9-3-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -366.60683,726.85169 -6.14844,-6.39843"
+       id="path17621-6-4-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -202.80607,1049.254 41.69925,-25.9492"
+       id="path17637-6-7-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -164.30607,998.15248 3.19925,25.15232"
+       id="path17639-5-3-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -684.25525,1035.7033 0,24"
+       id="path17655-9-1-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 5.69922,-14.84765"
+       id="path17659-6-7-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -8.94922,-14.5"
+       id="path17665-2-8-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.65371,729.90247 4.75,-6.64843"
+       id="path17667-8-2-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1175.504 -59,-11.4492"
+       id="path17675-8-5-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -330.6537,738.65248 31.69921,7.44922"
+       id="path17685-7-3-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -564.25527,752.30482 -30.30078,11.29688"
+       id="path17701-5-1-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.55605,733.75404 -3.05078,-6.90235"
+       id="path17715-7-2-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 24.94922,-9.89843"
+       id="path17725-0-1-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -192.25527,921.1017 25.75,-26.25"
+       id="path17727-2-2-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -27.14844,-8.69922"
+       id="path17733-2-9-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -249.95447,807.50404 9.1484,-19.40234"
+       id="path17735-9-2-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.55605,733.75404 32.90235,4.89844"
+       id="path17741-1-6-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -532.40371,743.3517 -31.85156,8.95312"
+       id="path17745-3-4-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -499.35683,736.90248 1.70312,-7.00001"
+       id="path17747-8-6-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -385.25527,1179.1017 61.39844,-8"
+       id="path17751-1-9-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -319.85683,1152.9025 -4,18.1992"
+       id="path17753-3-6-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -170.55607,972.55482 6.25,25.59766"
+       id="path17765-7-9-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -637.30605,1059.4025 -46.80076,-23.8985"
+       id="path17779-6-9-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -681.15369,1010.254 -2.95312,25.25"
+       id="path17781-1-4-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -363.60683,740.80482 0.0508,-7.05078"
+       id="path17791-4-0-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -397.20449,731.45326 33.64844,2.30078"
+       id="path17793-9-9-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -499.35683,736.90248 -33.04688,6.44922"
+       id="path17797-2-5-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -448.75527,1180.6017 -62.75,-5.0977"
+       id="path17803-0-1-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -514.50527,1157.4533 3,18.0507"
+       id="path17805-1-0-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.80605,743.95326 -1.55078,-7.05078"
+       id="path17819-8-7-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -465.50527,733.05482 -33.85156,3.84766"
+       id="path17821-6-2-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 34.05078,-0.39843"
+       id="path17825-3-3-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.6537,815.80482 -13.05079,-18.85156"
+       id="path17831-4-3-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -448.75527,1180.6017 63.5,-1.5"
+       id="path17835-2-2-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 -34.25,1.20313"
+       id="path17847-0-8-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17851-5-7-1-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -418.75527,748.45326 -12.5,-16.60157"
+       id="path17853-9-1-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17855-4-6-9-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17859-4-1-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17863-9-9-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -402.00527,741.70326 -29.25,-9.85157"
+       id="path17865-1-1-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17867-9-2-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17871-9-1-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17875-3-4-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17877-4-6-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17879-1-0-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17881-2-7-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17883-5-3-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17885-7-6-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17887-2-5-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17889-6-2-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17891-0-2-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17893-1-4-8-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17895-4-3-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17897-1-9-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17899-5-6-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17901-3-4-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17903-5-6-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17905-7-7-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17909-7-4-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17913-3-6-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.60684,743.00404 27.35157,-11.15235"
+       id="path17915-3-2-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17917-2-9-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17921-0-9-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17925-7-6-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -440.55605,748.95326 9.30078,-17.10157"
+       id="path17927-4-7-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17929-7-8-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -431.25527,731.85169 0,0"
+       id="path17933-6-7-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -179.95447,946.80482 9.3984,25.75"
+       id="path17945-8-5-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,931.90248 -30.94921,-24.89844"
+       id="path17947-1-2-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -366.85683,747.70326 3.25,-6.89844"
+       id="path17955-8-6-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -675.25525,984.35169 -5.89844,25.90231"
+       id="path17975-9-7-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -493.20449,750.65248 -4.60156,-6.69922"
+       id="path17979-3-4-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.1537,1132.4025 -2.70313,20.5"
+       id="path18001-7-7-3-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -373.10683,754.05482 -28.89844,-12.35156"
+       id="path18013-2-1-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -255.1537,1070.3048 52.34763,-21.0508"
+       id="path18015-7-1-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -373.10683,754.05482 6.25,-6.35156"
+       id="path18019-0-8-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -192.25527,921.1017 12.3008,25.70312"
+       id="path18025-6-0-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 17.60158,-17.94922"
+       id="path18027-4-6-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.65371,756.70326 27.04687,-13.69922"
+       id="path18031-7-6-5-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -516.50527,1137.0548 2,20.3985"
+       id="path18049-0-6-1-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -485.65371,756.70326 -7.55078,-6.05078"
+       id="path18053-2-0-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -666.50526,958.10169 -8.74999,26.25"
+       id="path18067-9-9-0-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -382.10683,759.65248 9,-5.59766"
+       id="path18081-1-0-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -344.90371,768.80482 -28.20312,-14.75"
+       id="path18083-6-5-9-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.40371,767.45326 -12.35156,-19"
+       id="path18087-3-8-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.80605,768.45326 9.25,-19.5"
+       id="path18099-8-7-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -229.10682,944.10169 36.85155,-22.99999"
+       id="path18107-2-0-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -207.35682,895.8517 15.10155,25.25"
+       id="path18109-8-4-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -512.10683,772.70326 26.45312,-16"
+       id="path18125-5-6-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.60684,761.8517 -10.04687,-5.14844"
+       id="path18127-9-6-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -584.50527,832.8517 -605.6537,815.80482"
+       id="path18129-2-0-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -580.9037,1077.9533 -56.40235,-18.5508"
+       id="path18143-0-0-7-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.6537,785.75404 -27.25001,-16.94922"
+       id="path18149-3-6-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -393.35683,764.20326 11.25,-4.55078"
+       id="path18151-4-2-4-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -654.95448,931.90248 -11.55078,26.19921"
+       id="path18157-7-6-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -225.05607,871.30482 17.69925,24.54688"
+       id="path18161-7-5-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -315.80605,1109.8517 -1.34766,22.5508"
+       id="path18165-1-2-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -463.45449,765.80482 -12.15235,-3.95312"
+       id="path18169-6-4-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -291.80605,804.70326 -317.6537,785.75404"
+       id="path18173-5-1-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -537.55605,790.90248 25.44922,-18.19922"
+       id="path18175-5-4-3-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -245.20447,847.70326 20.1484,23.60156"
+       id="path18181-4-2-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -406.40371,767.45326 13.04688,-3.25"
+       id="path18183-6-0-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.50527,1114.5548 1,22.5"
+       id="path18189-8-1-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 -24.25,-20.75"
+       id="path18197-1-0-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -613.60683,953.05482 -41.34765,-21.15234"
+       id="path18199-0-3-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -640.85682,905.95326 -14.09766,25.94922"
+       id="path18201-5-4-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -267.55605,825.45326 22.35158,22.25"
+       id="path18209-1-0-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -449.80605,768.45326 -13.64844,-2.64844"
+       id="path18213-8-4-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -292.80605,841.20326 25.25,-15.75"
+       id="path18215-9-0-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -420.60683,769.30482 14.20312,-1.85156"
+       id="path18221-1-6-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -394.35683,788.70326 -12.04688,-21.25"
+       id="path18223-8-2-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -561.80605,811.00404 24.25,-20.10156"
+       id="path18229-1-2-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -458.80605,790.20326 9,-21.75"
+       id="path18239-0-7-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -435.30605,769.65247 -14.5,-1.19921"
+       id="path18241-9-2-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -315.80605,1085.504 60.65235,-15.1992"
+       id="path18243-7-7-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -435.30605,769.65247 14.69922,-0.34765"
+       id="path18249-3-5-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -624.25527,880.6017 -16.60155,25.35156"
+       id="path18257-9-1-0-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -584.50527,832.8517 22.69922,-21.84766"
+       id="path18265-1-9-4-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -316.25527,1085.7033 0,24"
+       id="path18275-2-0-1-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.4037,856.15248 -18.85157,24.44922"
+       id="path18279-6-0-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -605.4037,856.15248 20.89843,-23.30078"
+       id="path18281-2-6-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -556.1537,847.3517 -28.35157,-14.5"
+       id="path18283-6-2-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.50527,1090.2033 -63.39843,-12.25"
+       id="path18299-6-0-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -517.25527,1090.7033 0,24"
+       id="path18309-5-2-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -275.45449,962.65248 46.34767,-18.55079"
+       id="path18311-0-4-6-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -382.70449,811.90248 -11.65234,-23.19922"
+       id="path18329-5-9-6-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -467.50527,813.90248 8.69922,-23.69922"
+       id="path18331-4-9-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -324.55605,853.95326 31.75,-12.75"
+       id="path18355-3-9-0-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -381.80605,1094.1017 66,-8.5977"
+       id="path18373-1-5-4-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -317.1537,1059.6525 1.34765,25.8515"
+       id="path18375-9-0-1-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -563.6537,969.40248 -49.95313,-16.34766"
+       id="path18393-8-3-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -521.95449,858.55482 -556.1537,847.3517"
+       id="path18399-7-7-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -450.05605,1095.7033 -67.44922,-5.5"
+       id="path18401-7-0-4-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -516.50527,1064.3048 -1,25.8985"
+       id="path18403-6-4-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -371.65371,836.8517 -11.05078,-24.94922"
+       id="path18407-8-9-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -475.75527,839.25404 8.25,-25.35156"
+       id="path18423-7-4-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -450.05605,1095.7033 68.25,-1.6016"
+       id="path18431-3-8-5-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -319.85683,1032.6017 2.70313,27.0508"
+       id="path18445-2-9-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -361.30605,863.15248 36.75,-9.19922"
+       id="path18459-5-0-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,976.10169 53.65234,-13.44921"
+       id="path18463-4-0-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -361.30605,863.15248 -371.65371,836.8517"
+       id="path18469-3-8-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -514.50527,1037.1525 -2,27.1523"
+       id="path18473-5-2-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,866.00404 -38.44922,-7.44922"
+       id="path18491-7-2-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -483.50527,866.00404 7.75,-26.75"
+       id="path18493-5-5-5-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -323.85683,1004.6017 4,28"
+       id="path18499-6-6-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M -507.55605,980.25404 -563.6537,969.40248"
+       id="path18517-5-2-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -401.30605,868.3517 40,-5.19922"
+       id="path18525-9-1-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -351.75527,890.55482 -9.55078,-27.40234"
+       id="path18527-5-8-3-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -511.50527,1009.004 -3,28.1485"
+       id="path18531-8-1-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -329.10683,976.10169 5.25,28.50001"
+       id="path18541-3-3-7-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -490.65371,893.80482 7.14844,-27.80078"
+       id="path18543-3-0-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,869.3517 -40.85156,-3.34766"
+       id="path18545-1-7-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -343.10683,918.75404 -8.64844,-28.19922"
+       id="path18549-9-7-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -442.65371,869.3517 41.34766,-1"
+       id="path18559-9-2-8-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -387.50527,983.70326 58.39844,-7.60157"
+       id="path18563-6-1-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,947.40248 6.44922,28.69921"
+       id="path18565-1-4-7-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -507.55605,980.25404 -3.94922,28.74996"
+       id="path18573-7-1-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -335.55605,947.40248 -7.55078,-28.64844"
+       id="path18577-1-1-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -497.10683,922.3517 6.45312,-28.54688"
+       id="path18581-4-3-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -447.90371,985.10169 -59.65234,-4.84765"
+       id="path18585-0-6-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,951.30482 -4.80078,28.94922"
+       id="path18587-2-3-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -502.75527,951.30482 5.64844,-28.95312"
+       id="path18601-5-8-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -447.90371,985.10169 60.39844,-1.39843"
+       id="path18611-8-6-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -135.25527,1099.3517 0,0"
+       id="path18629-0-6-2-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -125.25527,1129.6017 0,0"
+       id="path18631-1-3-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -747.30604,1207.8048 0,0"
+       id="path18633-6-5-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -115.20447,1159.8517 0,0"
+       id="path18635-9-2-1-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#778595;stroke-width:18.47318325;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -734.15369,1051.6525 0,0"
+       id="path18637-7-3-5-8"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     id="g26870"
+     style="stroke:#7094bc;stroke-width:51.96121597;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="matrix(0.96536073,0,0,0.96536073,-62.745386,372.45175)">
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1726.6897,2017.2411 0.3985,-37.9348"
+       id="path16809-4-0-6-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1727.4397,1950.7148 0,28.9993"
+       id="path16811-8-5-5-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1157.7913,2169.8909 -19,-31.9582"
+       id="path16813-2-1-6-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1124.6898,2113.9811 14.1015,23.9516"
+       id="path16815-2-3-8-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1716.0413,1896.0238 -13.8516,-35.8459"
+       id="path16817-3-2-0-8-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1691.7913,1835.2974 10.3984,24.8805"
+       id="path16819-3-9-2-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1106.7913,2061.7823 -6.9531,-37.3503"
+       id="path16821-2-9-2-6-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1096.139,1996.3615 3.6992,28.0705"
+       id="path16823-7-9-3-4-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1636.3382,2205.329 24.1015,-28.5372"
+       id="path16825-2-6-2-9-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1677.1897,2155.799 -16.75,20.9928"
+       id="path16827-4-0-4-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1099.8382,1940.1028 7.7031,-37.3547"
+       id="path16829-5-6-8-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1114.6898,1876.0687 -7.1485,26.6794"
+       id="path16831-4-4-2-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1619.9905,1745.8073 -31.4023,-23.1451"
+       id="path16833-1-3-3-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1571.389,1711.1213 17.1992,11.5409"
+       id="path16835-6-0-8-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1321.7405,2284.6149 -34.1992,-12.9953"
+       id="path16837-8-5-5-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1270.5413,2264.3698 17,7.2498"
+       id="path16839-0-4-7-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1571.389,1711.1213 -35.75,-17.0507"
+       id="path16841-4-1-2-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1520.8382,1687.7497 14.8008,6.3209"
+       id="path16843-8-4-8-6-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1270.5413,2264.3698 -32.25,-19.1396"
+       id="path16845-8-5-8-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1219.9905,2232.9961 18.3008,12.2341"
+       id="path16847-3-8-7-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1701.1389,2107.95 14.5508,-35.7279"
+       id="path16849-5-5-7-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1723.0413,2045.0804 -7.3516,27.1417"
+       id="path16851-2-1-3-0-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1402.7405,2297.2569 35.25,-0.9878"
+       id="path16853-4-9-5-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1442.389,2295.9791 -4.3985,0.29"
+       id="path16855-7-9-3-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1442.389,2295.9791 -4.3985,0.29"
+       id="path16857-4-6-9-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1723.3889,1923.1654 3.6993,27.8983"
+       id="path16861-7-7-0-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1401.0413,2297.1391 1.6992,0.1178"
+       id="path16863-5-9-8-8-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1484.3382,1676.8432 -39.8985,-6.262"
+       id="path16865-6-0-1-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1439.6897,1670.2912 4.75,0.29"
+       id="path16867-5-5-6-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1139.4398,1826.7698 19.6484,-31.7815"
+       id="path16869-7-9-5-4-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1175.0882,1774.9788 -16,20.0095"
+       id="path16871-6-7-5-8-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1144.6898,2147.5614 -20,-33.5803"
+       id="path16873-9-6-2-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1113.9905,2088.5205 10.6993,25.4606"
+       id="path16875-7-6-2-8-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1323.5882,1681.1931 38.4023,-8.3509"
+       id="path16877-0-8-1-9-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1369.639,1672.149 -7.4493,0.6343"
+       id="path16879-3-1-2-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1661.3382,1791.1006 -23.5,-28.6504"
+       id="path16881-2-8-5-6-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1619.9905,1745.8073 17.8477,16.6429"
+       id="path16883-3-9-6-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1678.1389,1812.2158 13.6524,23.0816"
+       id="path16887-8-2-5-5-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1096.4398,1968.1144 0,27.8393"
+       id="path16891-0-9-8-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1586.7913,2244.7681 31.8476,-22.9684"
+       id="path16893-5-5-8-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1636.3382,2205.329 -17.6993,16.4707"
+       id="path16895-2-4-9-7-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1239.7405,1720.1111 32.5977,-18.9084"
+       id="path16897-5-6-9-6-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1289.139,1694.0117 -16.8008,7.191"
+       id="path16899-1-2-3-9-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1202.8382,2217.0465 -28.9492,-27.0283"
+       id="path16901-5-7-4-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1157.7913,2169.8909 16.0977,20.1273"
+       id="path16903-1-6-7-1-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1482.389,2289.9481 36.75,-10.6708"
+       id="path16905-1-7-0-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1533.6897,2273.0696 -14.5507,6.2077"
+       id="path16907-5-1-1-5-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1125.389,1850.6671 -10.6992,25.4016"
+       id="path16911-8-7-1-5-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1690.7913,2132.7717 -13.6016,23.0273"
+       id="path16915-9-1-0-9-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1193.889,1757.407 27.1523,-24.7672"
+       id="path16917-3-8-1-0-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1239.7405,1720.1111 -18.6992,12.5287"
+       id="path16919-3-6-8-6-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1520.8382,1687.7497 -36.5,-10.9065"
+       id="path16921-6-8-7-6-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1533.6897,2273.0696 36.1016,-16.8196"
+       id="path16925-7-0-5-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1586.7913,2244.7681 -17,11.4819"
+       id="path16927-8-7-3-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1360.1897,2293.2559 -38.4492,-8.641"
+       id="path16929-6-8-0-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1289.139,1694.0117 34.4492,-12.8186"
+       id="path16933-2-6-6-6-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1726.6897,2017.2411 -3.6484,27.8393"
+       id="path16939-5-6-6-7-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1716.0413,1896.0238 7.3476,27.1416"
+       id="path16943-1-9-1-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1202.8382,2217.0465 16.6015,15.6007"
+       id="path16951-0-8-8-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1106.7913,2061.7823 7.1992,26.7382"
+       id="path16955-8-5-5-9-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1442.389,2295.9791 40,-6.031"
+       id="path16957-2-9-4-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1193.889,1757.407 -18.8008,17.5718"
+       id="path16963-8-6-9-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1099.8382,1940.1028 -3.6992,28.0705"
+       id="path16967-0-7-8-8-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1661.3382,1791.1006 16.8007,21.1152"
+       id="path16979-5-5-1-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1139.4398,1826.7698 -14.0508,23.8973"
+       id="path16983-0-6-8-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1401.0413,2297.1391 -40.8516,-3.8832"
+       id="path16985-8-3-5-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1144.6898,2147.5614 13.1015,22.3295"
+       id="path16995-1-5-0-4-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1701.1389,2107.95 -10.3476,24.8217"
+       id="path16999-1-8-6-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1439.6897,1670.2912 -35.1992,-1.2189"
+       id="path17011-3-2-0-7-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1369.639,1672.149 34.8515,-3.0767"
+       id="path17013-3-3-0-7-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1708.4397,2148.6624 0,0"
+       id="path18629-0-6-2-5-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1718.4397,2183.7516 0,0"
+       id="path18631-1-3-0-1-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1096.389,2274.4652 0,0"
+       id="path18633-6-5-7-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1728.4905,2218.8408 0,0"
+       id="path18635-9-2-1-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#7094bc;stroke-width:51.96121597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 1109.5413,2093.3326 0,0"
+       id="path18637-7-3-5-8-6"
+       inkscape:connector-curvature="0" />
+  </g>
+  <ellipse
+     style="fill:none;fill-opacity:1;stroke:#7094bc;stroke-width:27.2007637;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     id="path23134-7-6-8"
+     cx="1402.5084"
+     cy="956.67792"
+     rx="315.24185"
+     ry="313.27316"
+     inkscape:export-xdpi="1.6387534"
+     inkscape:export-ydpi="1.6387534" />
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/common-filter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/common-filter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-remove-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-remove-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-add-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-add-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/picker-datatype.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/picker-datatype.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-table.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-table-field.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-table-field.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/jdbc/database-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/jdbc/database-connection-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/common-showform.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/common-showform.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-true.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-true.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-table.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select-filter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select-filter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-action-select-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-foreing-key.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-foreing-key.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-false.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-false.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-null.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-null.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-false2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-nullbehavior-false2.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.shp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.shp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.sbx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.sbx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.txt	(revision 46118)
@@ -0,0 +1,6 @@
+Capa shp de las comunidades auutonomas de España.
+Nombre: esp_comaut
+Tipo: Polígono
+EPSG: 23030
+Nº archivos de la capa: 5
+Formatos de los archivos: .dbf, .sbn, .sbx, .shp, .shx.
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.sbn
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.sbn
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.shx
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/esp_comaut/esp_comaut.shx
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/edit.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-refresh-data.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-refresh-data.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-need-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-need-refresh.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/new.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/new.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/link.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-refresh.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/unlink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/unlink.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-open-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl/form-open-image.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/resources/org/gvsig/featureform/swing/impl
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSet.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformset;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import javax.swing.Action;
+import javax.swing.Box.Filler;
+import javax.swing.JButton;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.JFeatureTable;
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.JDynForm.DynFormContext;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformset.AbstractJDynFormSet;
+import org.gvsig.tools.dynform.spi.dynformset.JDynFormSetFactory;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.service.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FeatureTableJDynFormSet extends AbstractJDynFormSet  {
+
+    private static final Logger logger = LoggerFactory.getLogger(FeatureTableJDynFormSet.class);
+
+    private int current = 0;
+    
+    private JButton btnModify;
+    private JButton btnNew;
+    private JButton btnRemove;
+    private JButton btnSelect;
+    private JButton btnShow;
+    private Filler filler1;
+    private Filler filler2;
+    private JFeatureTable table = null;
+    private FeatureTableModel tableModel = null;
+
+    public FeatureTableJDynFormSet(
+            DynFormSPIManager manager, 
+            JDynFormSetFactory factory,
+            DynFormContext context,
+            DynFormDefinition definition,
+            Tags contextTags
+        ) {
+        super(manager, factory, context, definition, contextTags);
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.contents == null) {
+            try {
+                this.initComponents();
+            } catch (ServiceException e) {
+                throw new RuntimeException(e.getLocalizedMessage(), e);
+            }
+        }
+        this.fireFormMovedToEvent(current);
+        return this.contents;
+    }
+
+    private void initComponents() throws ServiceException {
+        JPanel panel = new JPanel();
+        GridBagConstraints gridBagConstraints;
+
+        filler1 = new Filler(new Dimension(5, 5), new Dimension(5, 5), new Dimension(5, 5));
+        this.tableModel = DALSwingLocator.getSwingManager().createEmptyFeatureTableModel(this.getDefinition().getElementsType());
+        this.table = DALSwingLocator.getSwingManager().createJFeatureTable(tableModel);
+        btnNew = new JButton();
+        btnShow = new JButton();
+        btnModify = new JButton();
+        btnRemove = new JButton();
+        btnSelect = new JButton();
+        filler2 = new Filler(new Dimension(5, 5), new Dimension(5, 5), new Dimension(5, 5));
+        
+
+        GridBagLayout layout = new 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};
+        panel.setLayout(layout);
+
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 2;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.gridheight = 11;
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+        panel.add(table.asJComponent(), gridBagConstraints);
+
+        btnNew.setText("_nuevo");
+        btnNew.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                btnNewActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        panel.add(btnNew, gridBagConstraints);
+
+        btnShow.setText("_mostrar");
+        btnShow.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                btnShowActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        panel.add(btnShow, gridBagConstraints);
+
+        btnModify.setText("_modificar");
+        btnModify.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                btnModifyActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 6;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        panel.add(btnModify, gridBagConstraints);
+
+        btnRemove.setText("_eliminar");
+        btnRemove.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                btnRemoveActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 8;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        panel.add(btnRemove, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 6;
+        gridBagConstraints.gridy = 14;
+        panel.add(filler1, gridBagConstraints);
+
+        btnSelect.setText("_seleccionar");
+        btnSelect.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                btnSelectActionPerformed(evt);
+            }
+        });
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 4;
+        gridBagConstraints.gridy = 10;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        panel.add(btnSelect, gridBagConstraints);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        panel.add(filler2, gridBagConstraints);
+    }
+
+    private void btnShowActionPerformed(ActionEvent evt) {                                        
+
+    }                                       
+
+    private void btnNewActionPerformed(ActionEvent evt) {                                       
+
+    }                                      
+
+    private void btnModifyActionPerformed(ActionEvent evt) {                                          
+
+    }                                         
+
+    private void btnRemoveActionPerformed(ActionEvent evt) {                                          
+
+    }                                         
+
+    private void btnSelectActionPerformed(ActionEvent evt) {                                          
+
+    }    
+    
+    @Override
+    public void setValues(List values) {
+        super.setValues(values);
+        if (this.contents != null) {
+            doChangeValues();
+        }
+    }
+
+    @Override
+    public void setValues(DynObjectSet values) {
+        super.setValues(values);
+        if (this.contents != null) {
+            doChangeValues();
+        }
+    }
+
+    @Override
+    public void setReadOnly(boolean readOnly) {
+        super.setReadOnly(readOnly);
+    }
+
+    
+    @Override
+    public void setFormSize(int width, int height) {
+        super.setFormSize(width, height);
+    }
+
+    @Override
+    public int getCurrentIndex() {
+        return this.current;
+    }
+
+    @Override
+    public void setCurrentIndex(int index) {
+        if (index < 0 || index > countValues()) {
+            throw new IllegalArgumentException("Index (" + index + ") out of range [0.." + countValues() + "].");
+        }
+        this.table.setCurrent(this.current);
+    }
+
+
+    @Override
+    public void addAction(Action action) {
+
+    }
+
+    @Override
+    public Action getAction(String actionId) {
+        return null;
+    }
+    
+    @Override
+    public List<Action> getActions() {
+        return Collections.EMPTY_LIST;
+    }
+
+    @Override
+    public void setActionEnabled(String action, boolean enabled) {
+        logger.info("setActionEnabled not implemented over SimpleTableJDynFormSet.");
+    }
+
+    @Override
+    public void setActionVisible(String action, boolean visible) {
+        logger.info("setActionVisible not implemented over SimpleTableJDynFormSet.");
+    }
+
+    @Override
+    public boolean isActionEnabled(String action) {
+        logger.info("isActionEnabled not implemented over SimpleTableJDynFormSet.");
+        return true;
+    }
+
+    @Override
+    public boolean isActionVisible(String action) {
+        logger.info("isActionVisible not implemented over SimpleTableJDynFormSet.");
+        return true;
+    }
+
+    @Override
+    public JComponent getActionButton(String action) {
+        return null;
+    }
+
+    private void doChangeValues() {
+
+    }
+
+    @Override
+    public boolean hasValidValues() {
+        return true;
+    }
+
+    @Override
+    public boolean hasValidValues(List<String> fieldsName) {
+        return true;
+    }
+
+    @Override
+    public List getValues() {
+        return this.values;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSetFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSetFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformset/FeatureTableJDynFormSetFactory.java	(revision 46118)
@@ -0,0 +1,27 @@
+package org.gvsig.featureform.swing.impl.dynformset;
+
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformset.AbstractJDynFormSetFactory;
+import org.gvsig.tools.dynobject.Tags;
+
+public class FeatureTableJDynFormSetFactory extends AbstractJDynFormSetFactory {
+
+    public static final String NAME = "DAL.SimpleFeatureTable";
+
+    public FeatureTableJDynFormSetFactory() {
+        super(NAME);
+    }
+
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormDefinition definition, Tags contextTags) {
+        return false; // FIXME: usar los tags de definition para saber si debe instanciarse este.
+    }
+
+    @Override
+    public JDynFormSet create(DynFormSPIManager manager, JDynForm.DynFormContext context, DynFormDefinition definition, Tags contextTags) {
+        return new FeatureTableJDynFormSet(manager, this, context, definition, contextTags);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultFeaturesFormContext.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultFeaturesFormContext.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultFeaturesFormContext.java	(revision 46118)
@@ -0,0 +1,68 @@
+package org.gvsig.featureform.swing.impl;
+
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.StoresRepository;
+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.dal.feature.FeatureType;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.script.ScriptManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class DefaultFeaturesFormContext implements FeaturesFormContext {
+
+    private final FeatureStore store;
+
+    public DefaultFeaturesFormContext(FeatureStore store) {
+        this.store = store;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return store;
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        try {
+            return store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        if (store == null) {
+            return null;
+        }
+        return store.getResourcesStorage();
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        if (store == null) {
+            return null;
+        }
+        return store.getStoresRepository();
+    }
+
+    @Override
+    public ScriptManager getScriptManager() {
+        return ExpressionEvaluatorLocator.getExpressionEvaluatorManager();
+    }
+
+    public JFeaturesForm getFeaturesForm() {
+        return null;
+    }
+
+    public Feature getCurrentFeature() {    
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,100 @@
+
+package org.gvsig.featureform.swing.impl;
+
+import java.util.Objects;
+import javax.swing.JComponent;
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.fmap.dal.DALLocator;
+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.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultJFeatureForm implements JFeatureForm {
+    private static final Logger logger = LoggerFactory.getLogger(DefaultJFeatureForm.class);
+
+    Feature feature;
+    FeatureStore store;
+    DynFormDefinition definition;
+    JDynForm form;
+    
+    @Override
+    public JComponent asJComponent() {
+       return this.form.asJComponent();
+    }
+
+    public DefaultJFeatureForm() {
+    	this.feature = null;
+        this.store = null;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return store;
+    }
+    
+    @Override
+    public void setStore(FeatureStore store) {
+        if( Objects.equals(this.store, store) ) {
+            return;
+        }
+        this.store = store;
+        if( store == null ) {
+            this.form = null;
+            return;
+        }
+        try {
+            FeatureType featureType = this.store.getDefaultFeatureType();
+            FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
+            DynClass dynClass = featureTypeDefinitionsManager.get(store,featureType);
+            this.form = DynFormLocator.getDynFormManager().createJDynForm(new DefaultFeaturesFormContext(this.store) {
+                public Feature getCurrentFeature() {
+                    return feature;
+                }
+            }, dynClass); 
+        } catch (Exception ex) {
+            logger.warn("Can't create form.",ex);
+            throw new RuntimeException("Can't create form.",ex);
+        }
+    }
+    
+    @Override
+    public void setDefinition(DynFormDefinition  definition) {
+        try {
+            this.form = DynFormLocator.getDynFormManager().createJDynForm(definition);
+            this.definition = definition;
+        } catch (Exception ex) {
+            logger.warn("Can't create form.",ex);
+            throw new RuntimeException("Can't create form.",ex);
+        }
+    }
+
+    @Override
+    public void setFeature(Feature feature) {
+        this.feature = feature;
+        if( this.definition==null ) {
+            this.setStore(this.feature.getStore());
+        }
+        this.form.setValues(feature.getAsDynObject());
+    }
+    
+    @Override
+    public JDynForm getDynForm() {
+        return this.form;
+    }
+    
+    @Override
+    public void fetch(EditableFeature feature) {
+        this.form.getValues(feature.getAsDynObject());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJFeatureReferencesForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJFeatureReferencesForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJFeatureReferencesForm.java	(revision 46118)
@@ -0,0 +1,560 @@
+/* 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.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.util.AbstractList;
+import java.util.List;
+import javax.swing.AbstractAction;
+import static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import static javax.swing.Action.SHORT_DESCRIPTION;
+import static javax.swing.Action.SMALL_ICON;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import org.gvsig.featureform.swing.JFeatureReferencesForm;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.impl.DefaultDataSwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynform.AbortActionException;
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.JDynFormSet;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_NAVIGATION;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_SAVE;
+import org.gvsig.tools.dynform.JDynFormSet.JDynFormSetListener;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author fdiaz
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultJFeatureReferencesForm implements Disposable, JFeatureReferencesForm {
+
+    private final String REFRESHFORM_ACTION = "refreshForm";
+
+    public static class FeaturesList extends AbstractList<Feature> {
+
+        private final List<FeatureReference> references;
+
+        public FeaturesList(List<FeatureReference> references) {
+            this.references = references;
+        }
+        
+        @Override
+        public Feature get(int index) {
+            try {
+                return this.references.get(index).getFeature();
+            } catch (DataException ex) {
+                throw new RuntimeException("Can't get feature "+index, ex);
+            }
+        }
+
+        @Override
+        public int size() {
+            return this.references.size();
+        }
+        
+    }
+    
+    public static class DynObjectsList extends AbstractList<DynObject> {
+
+        private final List<FeatureReference> references;
+
+        public DynObjectsList( List<FeatureReference> references) {
+            this.references = references;
+        }
+        
+        @Override
+        public DynObject get(int index) {
+            try {
+                Feature feature = this.references.get(index).getFeature();
+                return feature.getAsDynObject();
+            } catch (DataException ex) {
+                throw new RuntimeException("Can't get dynobject "+index, ex);
+            }
+        }
+
+        @Override
+        public int size() {
+            return this.references.size();
+        }
+        
+    }
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultJFeatureReferencesForm.class);
+
+    private JPanel panel;
+    private JDynFormSet formset;
+    private DynFormDefinition definition = null;
+    private final ActionListenerSupport actionListeners;
+    private List<FeatureReference> references;
+    private List<Feature> features;
+    private List<DynObject> dynobjects;
+    private FeatureStore store;
+    
+
+    public DefaultJFeatureReferencesForm() {
+        this.panel = new JPanel(new BorderLayout());
+        this.panel.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                dispose();
+            }
+        });
+        this.actionListeners = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+    }
+
+    @Override
+    public void setPreferredSize(Dimension dimension) {
+        panel.setPreferredSize(dimension);
+    }
+
+    private void updateForm() {
+        if (this.formset == null) {
+            this.getFormset();
+        }
+        try {
+            this.formset.setValues(this.dynobjects);
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't update form", ex);
+        }
+        updateButtonEnabledStatus();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+//        if (this.features == null) {
+//            try {
+                updateForm();
+//            } catch (Exception ex) {
+//                throw new RuntimeException(ex);
+//            }
+//        }
+        return this.panel;
+    }
+
+    @Override
+    public void bind(FeatureStore store, List<FeatureReference> references) {
+        this.bind(store, null, references);
+    }
+    
+    public void bind(FeatureStore store, DynClass definition, List<FeatureReference> references) {
+        if (store == null || references == null) {
+            throw new IllegalArgumentException("bind need a store as parameter, not a null.");
+        }
+        try {
+            DynFormManager formManager = DynFormLocator.getDynFormManager();
+            if (definition == null) {
+                DefaultDataSwingManager manager = (DefaultDataSwingManager) DALSwingLocator.getSwingManager();
+                definition = manager.featureType2DynClass(store, store.getDefaultFeatureType());
+            }
+            this.store = store;
+            this.definition = formManager.getDefinition(definition);
+            this.setFeatures(references);
+            
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't bind features of '" + store.getName() + "' to form", ex);
+        }
+    }
+
+    @Override
+    public void dispose() {
+        this.panel = null;
+        this.formset = null;
+        this.features = null;
+        this.definition = null;
+    }
+
+    @Override
+    public JDynFormSet getFormset() {
+        if (this.formset == null) {
+            DynFormManager formManager = DynFormLocator.getDynFormManager();
+            this.formset = formManager.createJDynFormSet(
+                    new DefaultFeaturesFormContext(this.store) {
+                        @Override
+                        public Feature getCurrentFeature() {    
+                            return DefaultJFeatureReferencesForm.this.getCurrentFeature();
+                        }
+                    },
+                    this.definition,
+                    null
+            );
+
+            List<String> groups = this.definition.getGroups();
+            if (groups.size() == 1 && groups.get(0) == null) {
+                this.formset.setLayoutMode(JDynForm.USE_PLAIN);
+            } else {
+                this.formset.setLayoutMode(JDynForm.USE_TABS);
+            }
+            this.formset.setAllowNew(false);
+            this.formset.setAllowDelete(false);
+            this.formset.setAllowUpdate(true);
+            this.formset.setAllowClose(true);
+            this.formset.setAllowSearch(false);
+            this.formset.setAutosave(true);
+
+            this.formset.addAction(new RefreshAction());
+
+            this.formset.addListener(new FormSetListener());
+            this.formset.getForm().addListener(new JDynForm.JDynFormListener() {
+                @Override
+                public void message(String string) {
+                }
+
+                @Override
+                public void fieldChanged(JDynFormField jdff) {
+                    updateButtonEnabledStatus();
+                }
+            });
+
+            ToolsSwingLocator.getToolsSwingManager().removeBorder(this.formset.asJComponent());
+            this.panel.add(this.formset.asJComponent(), BorderLayout.CENTER);
+            this.panel.revalidate();
+            ToolsSwingUtils.ensureRowsCols(this.panel, 8, 70, 25, 100);
+
+        }
+        updateButtonEnabledStatus();
+        return this.formset;
+    }
+
+    @Override
+    public long getCurrentIndex() {
+        if (this.formset == null) {
+            return -1;
+        }
+        return this.formset.getCurrentIndex();
+    }
+
+    @Override
+    public Feature get(long index) {
+        if (this.formset == null || this.features == null) {
+            return null;
+        }
+        return this.features.get((int)index); 
+    }
+
+    private class RefreshAction extends AbstractAction {
+
+        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+        public RefreshAction() {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+            this.putValue(NAME, null);
+            this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Reload_data"));
+            this.putValue(SMALL_ICON, iconTheme.get("form-refresh-data"));
+            this.putValue(ACTION_COMMAND_KEY, REFRESHFORM_ACTION);
+            this.setEnabled(!formset.isInNewState());
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            try {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                formset.message(i18n.getTranslation("_Form_reloaded"));
+                int x = formset.getCurrentIndex();
+                updateForm();
+                formset.setCurrentIndex(x);
+            } catch (Exception ex) {
+                LOGGER.warn("Can't reload form", ex);
+            }
+        }
+    }
+
+    @Override
+    public void showForm(MODE mode) {
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        String title = this.definition.getLabel();
+        winmgr.showWindow(this.asJComponent(), title, mode);
+    }
+
+    private void saveChanges(JDynFormSet theFormSet) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        try {
+            int index = theFormSet.getCurrentIndex();
+            DynObject currentElement = theFormSet.get(index);
+            theFormSet.getFormValues(currentElement);            
+            store.update(((FacadeOfAFeature) currentElement).getEditableFeature());
+            this.formset.message(i18n.getTranslation("_Record_saved"));
+            try {
+                this.formset.setCurrentIndex(index);
+            } catch (Exception ex) {
+                LOGGER.warn("Can't reload form data after insert.", ex);
+            }
+        } catch (Exception ex) {
+            theFormSet.message(i18n.getTranslation("error_saving_data_will_not_save"));
+            throw new RuntimeException("Can't save values", ex);
+
+        } finally {
+            updateButtonEnabledStatus();
+        }
+
+    }
+
+    @Override
+    public void saveChanges() {
+        if (this.formset != null && this.formset.countValues() > 0) {
+            this.saveChanges(this.formset);
+        }
+    }
+
+    private void updateButtonEnabledStatus() {
+        if (this.formset == null) {
+            return;
+        }
+        if (this.store == null || store.isBroken() || this.references == null) {
+            this.formset.setReadOnly(true);
+            formset.setActionEnabled(ACTION_SAVE, false);
+            formset.setActionEnabled(REFRESHFORM_ACTION, false);
+            formset.setActionEnabled(ACTION_NAVIGATION, false);
+            return;
+        }
+        this.formset.setReadOnly(false);
+        if (this.features != null && this.features.isEmpty()) {
+            formset.getForm().setReadOnly(true);
+            formset.setActionEnabled(ACTION_SAVE, false);
+            formset.setActionEnabled(REFRESHFORM_ACTION, false);
+            formset.setActionEnabled(ACTION_NAVIGATION, false);
+
+        } else if (formset.getForm().isModified()) {
+            formset.setActionEnabled(ACTION_SAVE, true);
+            formset.setActionEnabled(REFRESHFORM_ACTION, true);
+            formset.setActionEnabled(ACTION_NAVIGATION, true);
+
+        } else {
+            formset.setActionEnabled(ACTION_SAVE, false);
+            formset.setActionEnabled(REFRESHFORM_ACTION, true);
+            formset.setActionEnabled(ACTION_NAVIGATION, true);
+        }
+    }
+
+    private void clearUniqueFields() {
+        for (FeatureAttributeDescriptor attr : this.store.getDefaultFeatureTypeQuietly()) {
+            if ((attr.isPrimaryKey() && !attr.isAutomatic()) || (attr.isIndexed() && !attr.allowIndexDuplicateds())) {
+                JDynFormField field = formset.getForm().getField(attr.getName());
+                if (field != null) {
+                    field.clear();
+                }
+            }
+        }
+    }
+
+    private void setEnabledUniqueFields(boolean enabled) {
+        for (FeatureAttributeDescriptor attr : this.store.getDefaultFeatureTypeQuietly()) {
+            if ((attr.isPrimaryKey() && !attr.isAutomatic()) || (attr.isIndexed() && !attr.allowIndexDuplicateds())) {
+                JDynFormField field = formset.getForm().getField(attr.getName());
+                if (field != null) {
+                    field.setReadOnly(!enabled);
+                }
+            }
+        }
+    }
+
+    @Override
+    public long getDataSetSize() {
+        if (this.references != null) {
+            return references.size();
+        }
+        return 0;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.store;
+    }
+
+    private class FormSetListener implements JDynFormSetListener {
+
+        @Override
+        public void formMessage(String message) {
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formMessage"));
+        }
+
+        @Override
+        public void formClose() {
+            panel.setVisible(false);
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formClose"));
+        }
+
+        @Override
+        public void formMovedTo(int currentPosition) throws AbortActionException {
+            LOGGER.trace("formMovedTo " + currentPosition);
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formMovedTo"));
+        }
+
+        @Override
+        public void formBeforeSave(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeSave");
+            saveChanges(dynformSet);
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeSave"));
+        }
+
+        @Override
+        public void formBeforeNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeNew");
+            clearUniqueFields();
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeNew"));
+        }
+
+        @Override
+        public void formBeforeDelete(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeDelete");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeDelete"));
+        }
+
+        @Override
+        public void formAfterSave(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterSave");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterSave"));
+        }
+
+        @Override
+        public void formAfterNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterNew");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterNew"));
+        }
+
+        @Override
+        public void formAfterDelete(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterDelete");
+        }
+
+        @Override
+        public void formBeforeSearch(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeSearch");
+        }
+
+        @Override
+        public void formAfterSearch(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterSearch");
+        }
+
+        @Override
+        public void formBeforeCancelNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeCancelNew");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeCancelNew"));
+        }
+
+        @Override
+        public void formAfterCancelNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterCancelNew");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterCancelNew"));
+        }
+    }
+
+    @Override
+    public void addActionListener(ActionListener listener) {
+        this.actionListeners.addActionListener(listener);
+    }
+
+    @Override
+    public ActionListener[] getActionListeners() {
+        return this.actionListeners.getActionListeners();
+    }
+
+    @Override
+    public void removeActionListener(ActionListener listener) {
+        this.actionListeners.removeActionListener(listener);
+    }
+
+    @Override
+    public void removeAllActionListener() {
+        this.actionListeners.removeAllActionListener();
+    }
+
+    @Override
+    public void fireActionEvent(ActionEvent event) {
+        this.actionListeners.fireActionEvent(event);
+    }
+
+    @Override
+    public boolean hasActionListeners() {
+        return this.actionListeners.hasActionListeners();
+    }
+
+    @Override
+    public void setFeatures(List<FeatureReference> references) {
+        this.references = references;
+        this.features = new FeaturesList(references);
+        this.dynobjects = new DynObjectsList(references);
+        if (formset != null) {
+            this.panel.remove(formset.asJComponent());
+            this.panel.revalidate();
+            this.formset = null;
+        }
+        this.updateForm();
+    }
+
+    @Override
+    public Feature getCurrentFeature() {
+        long index = getCurrentIndex();
+        if( index<0 ) {
+            return null;
+        }
+        Feature f = get(index);
+        try {
+            DynObject adapter = f.getAsDynObject();
+            this.getFormset().getForm().getValues(adapter);
+            f = ((FacadeOfAFeature)adapter).getFeature();
+            return f;
+        } catch(Exception ex) {
+            return f;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJFeaturesForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJFeaturesForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJFeaturesForm.java	(revision 46118)
@@ -0,0 +1,1115 @@
+/* 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.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+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 static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import static javax.swing.Action.SHORT_DESCRIPTION;
+import static javax.swing.Action.SMALL_ICON;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.DALLocator;
+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.FacadeOfAFeature;
+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.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.swing.AbstractDALActionFactory.AbstractDALActionContext;
+import org.gvsig.fmap.dal.swing.DALActionFactory;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.impl.DefaultDataSwingManager;
+import org.gvsig.fmap.dal.swing.impl.actions.ShowFormAction.ShowFormActionFactory;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynform.AbortActionException;
+import org.gvsig.tools.dynform.DynFormDefinition;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.DynFormManager;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.JDynFormSet;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_CANCEL_NEW;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_DELETE;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_NAVIGATION;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_NEW;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_SAVE;
+import static org.gvsig.tools.dynform.JDynFormSet.ACTION_SEARCH;
+import org.gvsig.tools.dynform.JDynFormSet.JDynFormSetListener;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author fdiaz
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultJFeaturesForm implements JFeaturesForm, Disposable {
+
+    private final String STARTEDITING_ACTION = "startEditing";
+    private final String FINISHEDITING_ACTION = "finishEditing";
+    private final String REFRESHFORM_ACTION = "refreshForm";
+
+    private class JFeaturesFormPanel extends JPanel implements PropertiesSupport {
+
+        private final PropertiesSupport properties;
+        
+        private JFeaturesFormPanel(PropertiesSupport properties, BorderLayout layout) {
+            super(layout);
+            this.properties = properties;
+        }
+
+        @Override
+        public Object getProperty(String name) {
+            return this.properties.getProperty(name);
+        }
+
+        @Override
+        public void setProperty(String name, Object value) {
+            this.properties.setProperty(name, value);
+        }
+
+        @Override
+        public Map<String, Object> getProperties() {
+            return this.properties.getProperties();
+        }
+        
+    }
+    
+    private class FormActionContext extends AbstractDALActionContext {
+
+        public FormActionContext() {
+            super(ACTION_CONTEXT_NAME);
+        }
+
+        @Override
+        public DataStore getStore() {
+            return store;
+        }
+
+        @Override
+        public FeatureQuery getQuery() {
+            return currentQuery;
+        }
+
+        @Override
+        public int getSelectedsCount() {
+            return 0;
+        }
+
+        @Override
+        public Expression getFilterForSelecteds() {
+            return null;
+        }
+
+        @Override
+        public JComponent getActionButton(String actionName) {
+            if (formset == null) {
+                return null;
+            }
+            return formset.getActionButton(actionName);
+        }
+
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultJFeaturesForm.class);
+
+    private static final int PAGE_SIZE = 10;
+    private JFeaturesFormPanel panel;
+    private JDynFormSet formset;
+    private FeatureStore store;
+    private boolean needrefresh;
+    private FeaturePagingHelper features;
+    private DynFormDefinition definition = null;
+    private FeatureQuery currentQuery;
+    private List<Action> otherActions;
+    private final ActionListenerSupport actionListeners;
+    private final PropertiesSupportHelper propertiesHelper;
+
+    @SuppressWarnings("LeakingThisInConstructor")
+    public DefaultJFeaturesForm() {
+        this.otherActions = new ArrayList<>();
+        this.propertiesHelper = new PropertiesSupportHelper();
+        this.propertiesHelper.setProperty("FeaturesForm", this);
+        this.panel = new JFeaturesFormPanel(this.propertiesHelper, new BorderLayout());
+        this.panel.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                dispose();
+            }
+        });
+        this.actionListeners = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+    }
+
+    public static void selfRegister() {
+        String[][] iconNames = new String[][]{
+            new String[]{"dalswing", "form-refresh-data"}
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = DefaultJFeaturesForm.class.getResource(icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+
+    }
+
+    @Override
+    public void setPreferredSize(Dimension dimension) {
+        panel.setPreferredSize(dimension);
+    }
+
+    private void updateForm() {
+        if (this.formset == null) {
+            this.getFormset();
+        }
+        try {
+            if (this.currentQuery != null) {
+                this.currentQuery.retrievesAllAttributes();
+            }
+            this.features = DALLocator.getDataManager().createFeaturePagingHelper(store, this.currentQuery, PAGE_SIZE);
+            this.formset.setValues(features.asListOfDynObjects());
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't update form", ex);
+        }
+        this.needrefresh = false;
+        updateButtonEnabledStatus();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.features == null) {
+            try {
+                updateForm();
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+        return this.panel;
+    }
+
+    @Override
+    public void bind(FeatureStore store) {
+        this.bind(store, null, null);
+    }
+
+    public void bind(FeatureStore store, DynClass definition) {
+        this.bind(store, definition, null);
+    }
+
+    public void bind(FeatureStore store, DynClass definition, FeatureQuery query) {
+        if (store == null) {
+            throw new IllegalArgumentException("bind need a store as parameter, not a null.");
+        }
+        if (this.store == store) {
+            return;
+        }
+        try {
+            if (definition == null) {
+                DefaultDataSwingManager manager = (DefaultDataSwingManager) DALSwingLocator.getSwingManager();
+                definition = manager.featureType2DynClass(store, store.getDefaultFeatureType());
+            }
+            DynFormManager formManager = DynFormLocator.getDynFormManager();
+            this.definition = formManager.getDefinition(definition);
+            if (formset != null) {
+                this.panel.remove(formset.asJComponent());
+                this.panel.revalidate();
+                this.formset = null;
+            }
+            this.store = store;
+            DisposeUtils.bind(store);
+            this.currentQuery = query;
+            if (features != null) {
+                this.features = null;
+                updateForm();
+            }
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't bind store '" + store.getName() + "' to form", ex);
+        }
+    }
+
+    @Override
+    public void dispose() {
+        if( this.formset!=null ) {
+            Action action = this.formset.getAction(FINISHEDITING_ACTION);
+            if( action!=null ) {
+                DisposeUtils.disposeQuietly(action);
+            }
+            action = this.formset.getAction(STARTEDITING_ACTION);
+            if( action!=null ) {
+                DisposeUtils.disposeQuietly(action);
+            }
+        }
+        DisposeUtils.disposeQuietly(store);
+        this.store = null;
+        this.panel = null;
+        this.formset = null;
+        this.features = null;
+        this.definition = null;
+        this.currentQuery = null;
+        this.otherActions = null;
+    }
+
+    public static class MyFeaturesFormContext extends DefaultFeaturesFormContext {
+
+        private final DefaultJFeaturesForm featuresForm;
+        
+        public MyFeaturesFormContext(DefaultJFeaturesForm featuresForm) {
+            super(featuresForm.store);
+            this.featuresForm = featuresForm;
+        }
+        
+        @Override
+        public JFeaturesForm getFeaturesForm() {
+            return this.featuresForm;
+        }
+        @Override
+        public Feature getCurrentFeature() {    
+            return this.featuresForm.getCurrentFeature();
+        }
+    }
+    
+    @Override
+    public JDynFormSet getFormset() {
+        if (this.formset == null) {
+            DynFormManager formManager = DynFormLocator.getDynFormManager();
+            this.formset = formManager.createJDynFormSet(
+                    new MyFeaturesFormContext(this),
+                    this.definition,
+                    null
+            );
+            List<String> groups = this.definition.getGroups();
+            if (groups.size() == 1 && groups.get(0) == null) {
+                this.formset.setLayoutMode(JDynForm.USE_PLAIN);
+            } else {
+                this.formset.setLayoutMode(JDynForm.USE_TABS);
+            }
+            this.formset.setAllowNew(true);
+            this.formset.setAllowDelete(true);
+            this.formset.setAllowUpdate(true);
+            this.formset.setAllowClose(true);
+            this.formset.setAllowSearch(true);
+            this.formset.setAutosave(true);
+
+            this.formset.addAction(new StartEditingAction());
+            this.formset.addAction(new FinishEditingAction());
+            this.formset.addAction(new RefreshAction());
+
+            FormActionContext actionContext = new FormActionContext();
+            try {
+                Collection<DALActionFactory> factories = DALSwingLocator.getSwingManager().getStoreActions();
+                for (DALActionFactory factory : factories) {
+                    if (factory == null || StringUtils.equalsIgnoreCase(factory.getName(), ShowFormActionFactory.ACTION_NAME)) {
+                        continue;
+                    }
+                    try {
+                        if (factory.isApplicable(actionContext)) {
+                            Action action = factory.createAction(actionContext);
+                            this.formset.addAction(action);
+                        }
+                    } catch (Exception ex) {
+                        LOGGER.warn("Can't add action " + factory.getName(), ex);
+                    }
+
+                }
+            } catch (Exception ex) {
+                LOGGER.warn("Can't add actions", ex);
+            }
+            for (Action action : this.otherActions) {
+                this.formset.addAction(action);
+            }
+
+            this.formset.addListener(new FormSetListener());
+            this.formset.getForm().addListener(new JDynForm.JDynFormListener() {
+                @Override
+                public void message(String string) {
+                }
+
+                @Override
+                public void fieldChanged(JDynFormField jdff) {
+                    updateButtonEnabledStatus();
+                }
+            });
+
+            ToolsSwingLocator.getToolsSwingManager().removeBorder(this.formset.asJComponent());
+            this.panel.add(this.formset.asJComponent(), BorderLayout.CENTER);
+            this.panel.revalidate();
+            ToolsSwingUtils.ensureRowsCols(this.panel, 8, 70, 25, 100);
+
+        }
+        updateButtonEnabledStatus();
+        return this.formset;
+    }
+
+    @Override
+    public void addAction(Action action) {
+        this.otherActions.add(action);
+        if (this.formset != null) {
+            this.formset.addAction(action);
+        }
+    }
+
+    @Override
+    public long getCurrentIndex() {
+        if (this.formset == null) {
+            return -1;
+        }
+        return this.formset.getCurrentIndex();
+    }
+
+    @Override
+    public Feature get(long index) {
+        if (this.formset == null || this.features == null) {
+            return null;
+        }
+        try {
+            return this.features.getFeatureAt(index);
+        } catch (BaseException ex) {
+            return null;
+        }
+    }
+
+    private class RefreshAction extends AbstractAction {
+
+        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+        public RefreshAction() {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+            this.putValue(NAME, null);
+            this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Reload_data"));
+            this.putValue(SMALL_ICON, iconTheme.get("form-refresh-data"));
+            this.putValue(ACTION_COMMAND_KEY, REFRESHFORM_ACTION);
+            this.setEnabled(!formset.isInNewState());
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            try {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                formset.message(i18n.getTranslation("_Form_reloaded"));
+                int x=formset.getCurrentIndex();
+                updateForm();
+                formset.setCurrentIndex(x);
+            } catch (Exception ex) {
+                LOGGER.warn("Can't reload form", ex);
+            }
+        }
+    }
+
+    private class FinishEditingAction extends AbstractAction implements Observer, Disposable {
+
+        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+        public FinishEditingAction() {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+            this.putValue(NAME, null);
+            this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Stop_editing"));
+            this.putValue(SMALL_ICON, iconTheme.get("table-stop-editing"));
+            this.putValue(ACTION_COMMAND_KEY, FINISHEDITING_ACTION);
+
+            this.setEnabled(store.isEditing());
+            store.addObserver(this);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            if (store == null || formset == null) {
+                return;
+            }
+            if (store.isEditing()) {
+                ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+                try {
+                    int x = dialogManager.confirmDialog(
+                            i18nManager.getTranslation("_Do_you_want_to_finish_editing_and_save_the_changes") + "\n\n"
+                            + i18nManager.getTranslation("_Press_cancel_to_cancel_editing_and_changes"),
+                            i18nManager.getTranslation("_Stop_editing"),
+                            JOptionPane.YES_NO_CANCEL_OPTION,
+                            JOptionPane.QUESTION_MESSAGE
+                    );
+                    switch (x) {
+                        case JOptionPane.YES_OPTION:
+                            store.finishEditing();
+                            break;
+                        case JOptionPane.NO_OPTION:
+                            break;
+                        case JOptionPane.CANCEL_OPTION:
+                            store.cancelEditing();
+                            int index = formset.getCurrentIndex();
+                            try {
+                                formset.setCurrentIndex(index);
+                            } catch (Exception ex) {
+                                LOGGER.warn("Can't reload form data after edit.", ex);
+                            }
+                            break;
+                    }
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't finish editing in FeatureForm (" + store.getName() + ").", ex);
+                    dialogManager.messageDialog(
+                            i18nManager.getTranslation("_Problems_finish_table_editing") + "\n\n"
+                            + i18nManager.getTranslation("_see_error_log_for_more_information"),
+                            i18nManager.getTranslation("_Stop_editing"),
+                            JOptionPane.ERROR_MESSAGE
+                    );
+                }
+            }
+            updateButtonEnabledStatus();
+        }
+
+        @Override
+        public void update(Observable observable, Object notification) {
+            if (store == null || formset == null) {
+                return;
+            }
+            if (notification instanceof FeatureStoreNotification) {
+                FeatureStoreNotification n = (FeatureStoreNotification) notification;
+                switch (n.getType()) {
+                    case FeatureStoreNotification.AFTER_CANCELEDITING:
+                        needrefresh = true;
+                    case FeatureStoreNotification.AFTER_STARTEDITING:
+                    case FeatureStoreNotification.AFTER_FINISHEDITING:
+                        updateButtonEnabledStatus();
+                        break;
+                }
+            }
+        }
+
+        @Override
+        public void dispose() {
+            store.deleteObserver(this);
+        }
+
+    }
+
+    private class StartEditingAction extends AbstractAction implements Observer, Disposable {
+
+        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+        public StartEditingAction() {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+            this.putValue(NAME, null);
+            this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Start_editing"));
+            this.putValue(SMALL_ICON, iconTheme.get("table-start-editing"));
+            this.putValue(ACTION_COMMAND_KEY, STARTEDITING_ACTION);
+
+            this.setEnabled(!store.isEditing());
+            store.addObserver(this);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            if (store == null || formset == null) {
+                return;
+            }
+            if (!store.isEditing()) {
+                try {
+                    store.edit();
+                } catch (DataException ex) {
+                    LOGGER.warn("Can't finish editing in FeatureForm (" + store.getName() + ").", ex);
+                }
+            }
+            updateButtonEnabledStatus();
+        }
+
+        @Override
+        public void update(Observable observable, Object notification) {
+            if (store == null || formset == null) {
+                return;
+            }
+            if (notification instanceof FeatureStoreNotification) {
+                FeatureStoreNotification n = (FeatureStoreNotification) notification;
+                switch (n.getType()) {
+                    case FeatureStoreNotification.AFTER_CANCELEDITING:
+                        needrefresh = true;
+                    case FeatureStoreNotification.AFTER_STARTEDITING:
+                    case FeatureStoreNotification.AFTER_FINISHEDITING:
+                        updateButtonEnabledStatus();
+                        break;
+                }
+            }
+        }
+
+        @Override
+        public void dispose() {
+            store.deleteObserver(this);
+        }
+
+    }
+
+    @Override
+    public void setQuery(FeatureQuery query) {
+        if (this.features != null) {
+            if (this.formset != null && !formset.isReadOnly() && this.formset.isAutosave() && this.formset.countValues() > 0) {
+                if(this.formset.getForm().isModified()){
+                    if (!store.isEditing()) {
+                        try {
+                            store.edit();
+                        } catch (DataException e1) {
+                            throw new RuntimeException("Can't set query", e1);
+                        }
+                    }
+                    saveChanges(this.formset);
+                }
+            }
+        }
+        this.currentQuery = query;
+        updateForm();
+    }
+
+    private FeatureQuery getCurrentQuery() {
+        return this.currentQuery;
+    }
+
+    @Override
+    public void showForm(MODE mode) {
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        String title = this.definition.getLabel();
+        winmgr.showWindow(this.asJComponent(), title, mode);
+    }
+
+    private void saveChanges(JDynFormSet theFormSet) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        try {
+            if (theFormSet.isInNewState()) {
+                EditableFeature newFeature = store.createNewFeature(false);
+                JDynForm form = formset.getForm();
+                for (FeatureAttributeDescriptor attr : this.store.getDefaultFeatureTypeQuietly()) {
+                    String name = attr.getName();
+                    if( !newFeature.canSetValue(name) ) {
+                        continue;
+                    }
+                    JDynFormField field = form.getField(name);
+                    if( field==null ) {
+                        // The attribute is not in form, set default value
+                        newFeature.set(name, attr.getDefaultValueCoerced());
+                    } else {
+                        try {
+                            Object value = field.getValue();
+                            newFeature.set(name, value);
+                        } catch (Exception ex) {
+                            LOGGER.warn("Can't get value of field '" + name + "'.", ex);
+                        }
+                    }
+                }
+                features.insert(newFeature);
+                this.formset.message(i18n.getTranslation("_Record_saved"));
+                try {
+                    this.formset.setValues(features.asListOfDynObjects());
+                    this.formset.setCurrentIndex((int) (features.getTotalSize()) - 1);
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't reload form data after insert.", ex);
+                }
+            } else {
+                int index = theFormSet.getCurrentIndex();
+                DynObject currentElement = theFormSet.get(index);
+                theFormSet.getFormValues(currentElement);
+                features.update(((FacadeOfAFeature) currentElement).getEditableFeature());
+                this.formset.message(i18n.getTranslation("_Record_saved"));
+                try {
+                    this.formset.setCurrentIndex(index);
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't reload form data after insert.", ex);
+                }
+            }
+        } catch (Exception ex) {
+            theFormSet.message(i18n.getTranslation("error_saving_data_will_not_save"));
+            throw new RuntimeException("Can't save values", ex);
+
+        } finally {
+            updateButtonEnabledStatus();
+        }
+
+    }
+
+    private void deleteCurrentElement(JDynFormSet theFormSet) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        try {
+            int index = theFormSet.getCurrentIndex();
+            DynObject currentElement = theFormSet.get(index);
+            theFormSet.getFormValues(currentElement);
+            Feature feature = ((FacadeOfAFeature) currentElement).getFeature();
+            if (feature instanceof EditableFeature) {
+                feature = ((EditableFeature) feature).getNotEditableCopy();
+            }
+            features.delete(feature);
+
+            this.formset.message(i18n.getTranslation("_Record_removed"));
+
+            this.formset.setValues(features.asListOfDynObjects());
+            if (features.getTotalSize() - 1 < index) {
+                index = index - 1;
+            }
+            this.formset.setCurrentIndex(index);
+
+        } catch (Exception ex) {
+            theFormSet.message(i18n.getTranslation("error_removing_data_will_not_remove"));
+            throw new RuntimeException("Can't remove values", ex);
+
+        } finally {
+            updateButtonEnabledStatus();
+        }
+
+    }
+
+    @Override
+    public void saveChanges() {
+        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 RuntimeException("Can't save changes.", e1);
+                }
+            }
+            this.saveChanges(this.formset);
+        }
+    }
+
+    private void updateButtonEnabledStatus() {
+        if (this.formset == null) {
+            return;
+        }
+        if (this.store == null || store.isBroken() || store.isAppending() || this.features == null) {
+            this.formset.setReadOnly(true);
+            formset.setActionVisible(STARTEDITING_ACTION, true);
+            formset.setActionEnabled(STARTEDITING_ACTION, true);
+            formset.setActionVisible(FINISHEDITING_ACTION, false);
+            formset.setActionEnabled(FINISHEDITING_ACTION, false);
+            formset.setActionEnabled(ACTION_DELETE, false);
+            formset.setActionEnabled(ACTION_NEW, false);
+            formset.setActionEnabled(ACTION_CANCEL_NEW, false);
+            formset.setActionEnabled(ACTION_SAVE, false);
+            formset.setActionEnabled(ACTION_SEARCH, false);
+            formset.setActionEnabled(REFRESHFORM_ACTION, true);
+            formset.setActionEnabled(ACTION_NAVIGATION, false);
+            return;
+        }
+        if (this.needrefresh ) {
+            this.formset.setReadOnly(true);
+//            formset.setActionEnabled(STARTEDITING_ACTION, false);
+//            formset.setActionEnabled(FINISHEDITING_ACTION, false);
+            formset.setActionEnabled(ACTION_DELETE, false);
+            formset.setActionEnabled(ACTION_NEW, false);
+            formset.setActionEnabled(ACTION_CANCEL_NEW, false);
+            formset.setActionEnabled(ACTION_SAVE, false);
+            formset.setActionEnabled(ACTION_SEARCH, false);
+            formset.setActionEnabled(ACTION_NAVIGATION, false);
+            for (Action action : formset.getActions()) {
+                formset.setActionEnabled((String) action.getValue(ACTION_COMMAND_KEY), false);
+            }
+            formset.setActionEnabled(REFRESHFORM_ACTION, true);
+            return;
+        }
+        if (store.isEditing()) {
+            this.formset.setReadOnly(false);
+            formset.setActionVisible(STARTEDITING_ACTION, false);
+            formset.setActionEnabled(STARTEDITING_ACTION, false);
+            formset.setActionVisible(FINISHEDITING_ACTION, true);
+            formset.setActionEnabled(FINISHEDITING_ACTION, true);
+            if (formset.isInNewState()) {
+                formset.setActionEnabled(ACTION_DELETE, false);
+                formset.setActionEnabled(ACTION_SEARCH, false);
+                formset.setActionEnabled(ACTION_NEW, false);
+                formset.setActionEnabled(ACTION_CANCEL_NEW, true);
+                formset.setActionEnabled(ACTION_SAVE, true);
+                formset.setActionEnabled(FINISHEDITING_ACTION, false);
+                formset.setActionEnabled(REFRESHFORM_ACTION, false);
+//                setEnabledUniqueFields(true);
+
+            } else if (this.features != null && this.features.isEmpty()) {
+                formset.getForm().setReadOnly(true);
+                formset.setActionEnabled(ACTION_DELETE, false);
+                formset.setActionEnabled(ACTION_SEARCH, false);
+                formset.setActionEnabled(ACTION_NEW, true);
+                formset.setActionEnabled(ACTION_CANCEL_NEW, true);
+                formset.setActionEnabled(ACTION_SAVE, false);
+                formset.setActionEnabled(REFRESHFORM_ACTION, true);
+                formset.setActionEnabled(FINISHEDITING_ACTION, true);         
+                formset.setActionEnabled(ACTION_NAVIGATION, false);
+
+            } else if (formset.getForm().isModified()) {
+                formset.setActionEnabled(ACTION_DELETE, false);
+                formset.setActionEnabled(ACTION_SEARCH, false);
+                formset.setActionEnabled(ACTION_NEW, false);
+                formset.setActionEnabled(ACTION_CANCEL_NEW, false);
+                formset.setActionEnabled(ACTION_SAVE, true);
+                formset.setActionEnabled(REFRESHFORM_ACTION, true);
+                formset.setActionEnabled(FINISHEDITING_ACTION, false);
+                formset.setActionEnabled(ACTION_NAVIGATION, false);
+
+            } else {
+                formset.setActionEnabled(ACTION_DELETE, true);
+                formset.setActionEnabled(ACTION_SEARCH, true);
+                formset.setActionEnabled(ACTION_NEW, true);
+                formset.setActionEnabled(ACTION_CANCEL_NEW, false);
+                formset.setActionEnabled(ACTION_SAVE, false);
+                formset.setActionEnabled(REFRESHFORM_ACTION, true);
+                formset.setActionEnabled(FINISHEDITING_ACTION, true);
+                formset.setActionEnabled(ACTION_NAVIGATION, true);
+            }
+
+            return;
+        }
+        this.formset.setReadOnly(true);
+        formset.setActionVisible(STARTEDITING_ACTION, true);
+        formset.setActionEnabled(STARTEDITING_ACTION, true);
+        formset.setActionVisible(FINISHEDITING_ACTION, false);
+        formset.setActionEnabled(FINISHEDITING_ACTION, false);
+        formset.setActionEnabled(ACTION_DELETE, false);
+        formset.setActionEnabled(ACTION_NEW, false);
+        formset.setActionEnabled(ACTION_CANCEL_NEW, false);
+        formset.setActionEnabled(ACTION_SAVE, false);
+        formset.setActionEnabled(ACTION_SEARCH, true);
+        formset.setActionEnabled(REFRESHFORM_ACTION, true);
+    }
+
+    private void clearUniqueFields() {
+        for (FeatureAttributeDescriptor attr : this.store.getDefaultFeatureTypeQuietly()) {
+            if ((attr.isPrimaryKey() && !attr.isAutomatic()) || (attr.isIndexed() && !attr.allowIndexDuplicateds())) {
+                JDynFormField field = formset.getForm().getField(attr.getName());
+                if (field != null) {
+                    field.clear();
+                }
+            }
+        }
+    }
+
+    private void setEnabledUniqueFields(boolean enabled) {
+        for (FeatureAttributeDescriptor attr : this.store.getDefaultFeatureTypeQuietly()) {
+            if ((attr.isPrimaryKey() && !attr.isAutomatic()) || (attr.isIndexed() && !attr.allowIndexDuplicateds())) {
+                JDynFormField field = formset.getForm().getField(attr.getName());
+                if (field != null) {
+                    field.setReadOnly(!enabled);
+                }
+            }
+        }
+    }
+
+    @Override
+    public long getDataSetSize() {
+        if (this.features != null) {
+            return features.getTotalSize();
+        }
+        return 0;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.store;
+    }
+
+    private class FormSetListener implements JDynFormSetListener {
+
+        @Override
+        public void formMessage(String message) {
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formMessage"));
+        }
+
+        @Override
+        public void formClose() {
+            panel.setVisible(false);
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formClose"));
+        }
+
+        @Override
+        public void formMovedTo(int currentPosition) throws AbortActionException {
+            LOGGER.trace("formMovedTo " + currentPosition);
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formMovedTo"));
+        }
+
+        @Override
+        public void formBeforeSave(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeSave");
+            saveChanges(dynformSet);
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeSave"));
+        }
+
+        @Override
+        public void formBeforeNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeNew");
+            clearUniqueFields();
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeNew"));
+        }
+
+        @Override
+        public void formBeforeDelete(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeDelete");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeDelete"));
+        }
+
+        @Override
+        public void formAfterSave(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterSave");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterSave"));
+        }
+
+        @Override
+        public void formAfterNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterNew");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterNew"));
+        }
+
+        @Override
+        public void formAfterDelete(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterDelete");
+            deleteCurrentElement(dynformSet);
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterDelete"));
+        }
+
+//        @Override
+//        public void formBeforeSearch(JDynFormSet dynformSet) throws AbortActionException {
+//            LOGGER.trace("formBeforeSearch");
+//            DataSwingManager dataSwingmanager = DALSwingLocator.getSwingManager();
+//            WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+//
+//            JExpressionBuilder builder = dataSwingmanager.createQueryFilterExpresion(store);
+//            FeatureQuery currentQuery = getCurrentQuery();
+//            if( currentQuery!=null ) {
+//                Evaluator filter = currentQuery.getFilter();
+//                if( filter instanceof ExpressionEvaluator ) {
+//                    Expression expression = ((ExpressionEvaluator)filter).getExpression();
+//                    builder.setExpression(expression);
+//                }
+//            }
+//            Dialog dialog = winmgr.createDialog(
+//                    builder.asJComponent(),
+//                    "Filtro",
+//                    "Creacion de filtro sobre '"+store.getName()+"'",
+//                    WindowManager_v2.BUTTONS_OK_CANCEL
+//            );
+//            dialog.show(WindowManager.MODE.DIALOG);
+//            if( dialog.getAction() == WindowManager_v2.BUTTON_OK ) {
+//                Expression expresion = builder.getExpression();
+//                try {
+//                    FeatureQuery query = store.createFeatureQuery();
+//                    if( ExpressionUtils.isPhraseEmpty(expresion) ) {
+//                        query.clearFilter();
+//                    } else {
+//                        query.setFilter(expresion);
+//                    }
+//                    setQuery(query);
+//                } catch (Exception ex) {
+//                    LOGGER.warn("Can't apply filter '" + expresion + "'.", ex);
+//                }
+//            }
+//        }
+        @Override
+        public void formBeforeSearch(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeSearch");
+            DataSwingManager dataSwingmanager = DALSwingLocator.getSwingManager();
+            WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+            final FeatureStoreSearchPanel searchPanel = dataSwingmanager.createFeatureStoreSearchPanel(store);
+            searchPanel.setShowActions(false);
+            FeatureQuery currentQuery = getCurrentQuery();
+            if (currentQuery != null) {
+                Evaluator filter = currentQuery.getFilter();
+                if (filter instanceof ExpressionEvaluator) {
+                    Expression expression = ((ExpressionEvaluator) filter).toExpression();
+                    searchPanel.setFilter(expression);
+                    searchPanel.search();
+                }
+            }
+            searchPanel.asJComponent().setPreferredSize(
+                    new Dimension(FeatureStoreSearchPanel.DEFAULT_WIDTH, 320)
+            );
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            Dialog dialog = winmgr.createDialog(
+                    searchPanel.asJComponent(),
+                    i18n.getTranslation("_Filter"),
+                    i18n.getTranslation("_Creating_filter_for") + ": '" + store.getName() + "'",
+                    WindowManager_v2.BUTTONS_OK_CANCEL
+            );
+            dialog.show(WindowManager.MODE.DIALOG);
+            if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+                SearchParameters params = searchPanel.fetch(null);
+                if (params.getQuery() != null) {
+                    FeatureQuery searchQuery = params.getQuery().getCopy();
+
+                    Expression expresion = null;
+                    if (searchQuery != null) {
+                        expresion = searchQuery.getExpressionFilter();
+                    }
+                    try {
+                        FeatureQuery query = store.createFeatureQuery();
+                        if (ExpressionUtils.isPhraseEmpty(expresion)) {
+                            query.clearFilter();
+                        } else {
+                            query.setFilter(expresion);
+                        }
+                        setQuery(query);
+                    } catch (Exception ex) {
+                        LOGGER.warn("Can't apply filter '" + expresion + "'.", ex);
+                    }
+                } else {
+                    LOGGER.warn("FeatureQuery from parameters is null. Query is not applied to the JFeaturesFrom");
+                }
+            }
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeSearch"));
+        }
+
+        @Override
+        public void formAfterSearch(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterSearch");
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterSearch"));
+        }
+
+        @Override
+        public void formBeforeCancelNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formBeforeCancelNew");
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formBeforeCancelNew"));
+        }
+
+        @Override
+        public void formAfterCancelNew(JDynFormSet dynformSet) throws AbortActionException {
+            LOGGER.trace("formAfterCancelNew");
+            try {
+                int index = formset.getCurrentIndex();
+                if( index<0 ) {
+                    formset.getForm().clear();
+                } else {
+                    formset.setCurrentIndex(index);
+                }
+            } catch (Exception ex) {
+                LOGGER.warn("Can't reload form data after cancel new.", ex);
+            }            
+            updateButtonEnabledStatus();
+            actionListeners.fireActionEvent(new ActionEvent(this, 1, "formAfterCancelNew"));
+        }
+    }
+
+//    private static 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);
+//        }
+//    }
+    @Override
+    public void addActionListener(ActionListener listener) {
+        this.actionListeners.addActionListener(listener);
+    }
+
+    @Override
+    public ActionListener[] getActionListeners() {
+        return this.actionListeners.getActionListeners();
+    }
+
+    @Override
+    public void removeActionListener(ActionListener listener) {
+        this.actionListeners.removeActionListener(listener);
+    }
+
+    @Override
+    public void removeAllActionListener() {
+        this.actionListeners.removeAllActionListener();
+    }
+
+    @Override
+    public void fireActionEvent(ActionEvent event) {
+        this.actionListeners.fireActionEvent(event);
+    }
+
+    @Override
+    public boolean hasActionListeners() {
+        return this.actionListeners.hasActionListeners();
+    }
+
+    @Override
+    public Feature getCurrentFeature() {
+        long index = getCurrentIndex();
+        if( index<0 ) {
+            return null;
+        }
+        Feature f = get(index);
+        try {
+            DynObject adapter = f.getAsDynObject();
+            this.getFormset().getForm().getValues(adapter);
+            f = ((FacadeOfAFeature)adapter).getFeature();
+            return f;
+        } catch(Exception ex) {
+            return f;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLinkFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLinkFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLinkFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.deprecated.linkedentities;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldFeaturesTableLinkFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldFeaturesTableLinkFactory() {
+        super("SimpleFeaturesTableLink", DataTypes.LIST, "DAL.SimpleFeaturesTableLink");
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldFeaturesTableLink(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+    
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormFieldDefinition fieldDefinition) {
+        if( super.isApplicableTo(context, fieldDefinition) ) {
+            return true;
+        }
+        return false;
+    }     
+
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+//        manager.registerDynFieldFactory(new JDynFormFieldFeaturesTableLinkFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLink.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLink.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentities/JDynFormFieldFeaturesTableLink.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.deprecated.linkedentities;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import javax.swing.JPanel;
+import org.gvsig.fmap.dal.feature.paging.FacadeOfAFeaturePagingHelper;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.JFeatureTable;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class JDynFormFieldFeaturesTableLink extends AbstractJDynFormField implements JDynFormField {
+
+    private FacadeOfAFeaturePagingHelper assignedValue = null;
+    private FacadeOfAFeaturePagingHelper value = null;
+    private FeatureTableModel featureTableMode;
+    private JFeatureTable featureTable;
+
+    public JDynFormFieldFeaturesTableLink(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        if (value != null) {
+            this.assignedValue = (FacadeOfAFeaturePagingHelper) value;
+        }
+    }
+
+    @Override
+    public Object getAssignedValue() {
+        return this.assignedValue;
+    }
+
+    @Override
+    public void initComponent() {
+        this.contents = new JPanel();
+        JPanel panel = (JPanel) this.contents;
+        panel.setLayout(new BorderLayout());
+        if( assignedValue != null ) {
+            FeaturePagingHelper featurePager = ((FacadeOfAFeaturePagingHelper)assignedValue).getFeaturePagingHelper();
+            this.featureTableMode = DALSwingLocator.getSwingManager().createFeatureTableModel(featurePager);
+            this.featureTable = DALSwingLocator.getSwingManager().createJFeatureTable(featureTableMode);
+            int height = this.getTagValueAsInt("DAL.ui.height", -1);
+            if( height > 0 ) {
+                Dimension dim = this.featureTable.asJComponent().getPreferredSize();
+                dim.height = height;
+                this.featureTable.asJComponent().setPreferredSize(dim);
+            }
+            panel.add(this.featureTable.asJComponent(), BorderLayout.CENTER);
+        }
+        this.setValue(this.assignedValue);
+    }
+
+    @Override
+    public void setValue(Object value) {
+        this.clear();
+        if( value == null ) {
+            return;
+        }
+        this.value = (FacadeOfAFeaturePagingHelper) value;
+        JPanel panel = (JPanel) this.contents;
+        FeaturePagingHelper featurePager = ((FacadeOfAFeaturePagingHelper)value).getFeaturePagingHelper();
+        this.featureTableMode = DALSwingLocator.getSwingManager().createFeatureTableModel(featurePager);
+        this.featureTable = DALSwingLocator.getSwingManager().createJFeatureTable(featureTableMode);
+        int height = this.getTagValueAsInt("DAL.ui.height", -1);
+        if( height > 0 ) {
+            Dimension dim = this.featureTable.asJComponent().getPreferredSize();
+            dim.height = height;
+            this.featureTable.asJComponent().setPreferredSize(dim);
+        }
+        panel.add(this.featureTable.asJComponent(), BorderLayout.CENTER);
+}
+
+    @Override
+    public Object getValue() {
+        return this.value;
+    }
+
+    @Override
+    public void fetch(DynObject container) {
+    }
+
+    @Override
+    public boolean hasValidValue() {
+        return true;
+    }
+
+    @Override
+    public void clear() {
+        this.value = null;
+        this.featureTableMode = null;
+        this.featureTable = null;
+        JPanel panel = (JPanel) this.contents;
+        panel.removeAll();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLink.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLink.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLink.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.deprecated.linkedentity;
+
+import java.awt.Cursor;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+import java.util.Formatter;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.ServiceManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class JDynFormFieldFeatureLink extends AbstractJDynFormField implements JDynFormField {
+
+    private static final String DAL_code = "DAL.code";
+    private static final String DAL_foreingTable = "DAL.foreingTable";
+    private static final String DAL_foreingCode = "DAL.foreingCode";
+    private static final String DAL_foreingDescriptionMask = "DAL.foreingDescriptionMask";
+    private static final String DAL_foreingDescriptionFields = "DAL.foreingDescriptionFields";
+    
+    private DynObject assignedValue = null;
+    private DynObject value = null;
+//    private JTextField txtCode = null;
+    private JTextField txtDescription = null;
+    private JButton btnLink = null;
+    private JButton btnUnlink = null;
+    private JButton btnEdit = null;
+
+    private String codeFieldName = null;
+    private String foreingTableName;
+    private String foreingCodeName;
+    private String foreingDescriptionMask = null;
+    private String foreingDescriptionFieldNames[] = null;
+
+    public JDynFormFieldFeatureLink(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        if (value != null) {
+            this.assignedValue = (DynObject) value;
+        }
+    }
+
+    @Override
+    public Object getAssignedValue() {
+        return this.assignedValue;
+    }
+
+    @Override
+    public void initComponent() {
+        this.foreingDescriptionFieldNames = null;
+        this.codeFieldName = getTagValueAsString(DAL_code, null);
+        this.foreingTableName = getTagValueAsString(DAL_foreingTable, null);
+        this.foreingCodeName = getTagValueAsString(DAL_foreingCode, null);
+
+        this.foreingDescriptionMask = getTagValueAsString(DAL_foreingDescriptionMask, null);
+        String fieldNames = getTagValueAsString(DAL_foreingDescriptionFields, null);
+        if (!StringUtils.isEmpty(fieldNames)) {
+            this.foreingDescriptionFieldNames = fieldNames.split(",");
+        }
+        
+        
+        if (StringUtils.isEmpty(this.foreingDescriptionMask)
+                && this.foreingDescriptionFieldNames != null
+                && this.foreingDescriptionFieldNames.length == 1) {
+            this.foreingDescriptionMask = "%s";
+        }
+//        this.txtCode = new JTextField();
+        this.txtDescription = new JTextField();
+        this.btnLink = createButton("Select item to link", "link.png");
+        this.btnUnlink = createButton("Remove link", "unlink.png");
+        this.btnEdit = createButton("View linked item", "edit.png");
+
+        this.btnLink.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doLink();
+            }
+        });
+        this.btnUnlink.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doUnlink();
+            }
+        });
+        this.btnEdit.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doEdit();
+            }
+        });
+
+//        this.txtCode.setText("          ");
+//        this.txtDescforeingCodeNameription.setText("                    ");
+//        this.txtCode.setEditable(false);
+        this.txtDescription.setEditable(false);
+
+        if (StringUtils.isEmpty(codeFieldName) || StringUtils.isEmpty(foreingDescriptionMask)
+                || StringUtils.isEmpty(foreingTableName) || StringUtils.isEmpty(foreingCodeName)
+                || this.foreingDescriptionFieldNames == null) {
+            this.btnEdit.setEnabled(false);
+            this.btnLink.setEnabled(false);
+            this.btnUnlink.setEnabled(false);
+        }
+
+        this.contents = new JPanel();
+        this.contents.setLayout(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+//        c.fill = GridBagConstraints.NONE;
+//        c.ipadx = 4;
+//        c.ipady = 1;
+//        c.gridx = 0;
+//        c.gridy = 0;
+//        c.weightx = 0;
+//        this.contents.add(this.txtCode, c);
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.ipadx = 4;
+        c.ipady = 1;
+        c.gridx = 1;
+        c.gridy = 0;
+        c.weightx = 1;
+        this.contents.add(this.txtDescription, c);
+        c.fill = GridBagConstraints.NONE;
+        c.ipadx = 4;
+        c.ipady = 1;
+        c.gridx = 2;
+        c.gridy = 0;
+        c.weightx = 0;
+        this.contents.add(this.btnLink, c);
+        c.fill = GridBagConstraints.NONE;
+        c.ipadx = 4;
+        c.ipady = 1;
+        c.gridx = 3;
+        c.gridy = 0;
+        c.weightx = 0;
+        this.contents.add(this.btnUnlink, c);
+        c.fill = GridBagConstraints.NONE;
+        c.ipadx = 4;
+        c.ipady = 1;
+        c.gridx = 4;
+        c.gridy = 0;
+        c.weightx = 0;
+        this.contents.add(this.btnEdit, c);
+
+        this.setValue(this.assignedValue);
+    }
+
+    private JButton createButton(final String tip, final String image) {
+        URL url = this.getClass().getClassLoader().getResource("org/gvsig/featureform/swing/impl/" + image);
+        Icon icon = new ImageIcon(url);
+        JButton button = new JButton(icon);
+        button.setBorder(BorderFactory.createEmptyBorder());
+        button.setBorderPainted(false);
+        button.setFocusPainted(false);
+        button.setContentAreaFilled(false);
+        button.setToolTipText(tip);
+        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        return button;
+    }
+
+    private void doLink() {
+
+    }
+
+    private void doUnlink() {
+        this.clear();
+    }
+
+    private void doEdit() {
+        try {
+            DataManager dalmanager = DALLocator.getDataManager();
+            DataSwingManager daluimanager = DALSwingLocator.getSwingManager();
+            Feature feature = ((FacadeOfAFeature)(this.value)).getFeature();
+            FeatureStore store = feature.getStore();
+            FeatureQuery query = store.createFeatureQuery();
+            query.addFilter(dalmanager.createExpresion(foreingCodeName + " = " + feature.getString(foreingCodeName)));
+            JFeaturesForm form = daluimanager.createJFeaturesForm(store);
+            form.setQuery(query);
+            form.showForm(WindowManager.MODE.WINDOW);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show linked form",ex);
+        }
+    }
+
+    private String getDescription() {
+        if (StringUtils.isEmpty(foreingDescriptionMask) || this.foreingDescriptionFieldNames == null) {
+            return "";
+        }
+        Object[] values = new Object[this.foreingDescriptionFieldNames.length];
+        for( int i=0; i<values.length; i++ ) {
+            values[i] = this.value.getDynValue(this.foreingDescriptionFieldNames[i]);
+        }
+        Formatter f = new Formatter();
+        try {
+            String description = f.format(this.foreingDescriptionMask, values).toString();
+            return description;
+        } catch (Exception ex) {
+            // TODO: log error
+            return "";
+        }
+    }
+
+    @Override
+    public void setReadOnly(boolean readonly) {
+        boolean enabled = !readonly;
+        JComponent theJlabel = this.getJLabel();
+        if( theJlabel !=null ) {
+            theJlabel.setEnabled(enabled);
+        }
+        //        this.txtCode.setEnabled(enabled);
+        if( this.txtDescription == null ) {
+            return;
+        }
+        this.txtDescription.setEnabled(enabled);
+        this.btnEdit.setEnabled(enabled);
+        this.btnLink.setEnabled(enabled);
+        this.btnUnlink.setEnabled(enabled);
+    }
+
+    @Override
+    public void setValue(Object value) {
+        if (value == null) {
+            this.clear();
+            return;
+        }
+        this.value = (DynObject) value;
+//        this.txtCode.setText("");
+        this.txtDescription.setText("");
+        if (StringUtils.isEmpty(foreingCodeName) || StringUtils.isEmpty(foreingDescriptionMask)
+                || this.foreingDescriptionFieldNames == null) {
+        }
+//        Object x = this.value.getDynValue(foreingCodeName);
+//        if (x != null) {
+//            this.txtCode.setText(x.toString());
+//        }
+        String description = this.getDescription();
+        if (description != null) {
+            this.txtDescription.setText(description);
+        }
+    }
+
+    @Override
+    public Object getValue() {
+        return this.value;
+    }
+
+    @Override
+    public void fetch(DynObject container) {
+        if (StringUtils.isEmpty(this.codeFieldName)) {
+            return;
+        }
+        DynObject value = (DynObject) this.getValue();
+        if (value == null) {
+            container.setDynValue(this.codeFieldName, null);
+        } else {
+            if (StringUtils.isEmpty(this.foreingCodeName)) {
+                return;
+            }
+            container.setDynValue(this.codeFieldName, value.getDynValue(this.foreingCodeName));
+        }
+    }
+
+    @Override
+    public boolean hasValidValue() {
+        return true;
+    }
+
+    @Override
+    public void clear() {
+        this.value = null;
+//        this.txtCode.setText("");
+        this.txtDescription.setText("");
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLinkFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLinkFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/deprecated/linkedentity/JDynFormFieldFeatureLinkFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.deprecated.linkedentity;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldFeatureLinkFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldFeatureLinkFactory() {
+        super("SimpleFeatureLink", DataTypes.DYNOBJECT, "DAL.SimpleFeatureLink");
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldFeatureLink(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+
+    @Override
+    public int getPriority() {
+        return 500;
+    }
+    
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormFieldDefinition fieldDefinition) {
+        if( super.isApplicableTo(context, fieldDefinition) ) {
+            return true;
+        }
+        return false;
+    }   
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+//        manager.registerDynFieldFactory(new JDynFormFieldFeatureLinkFactory());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKeyFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKeyFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKeyFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.linkforeingkey;
+
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldForeingKeyFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldForeingKeyFactory() {
+        super("FOREINGKEY", DataTypes.UNKNOWN, null);
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldForeingKey(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+
+    @Override
+    public int getPriority() {
+        return 500;
+    }
+    
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormFieldDefinition fieldDefinition) {
+        if( !(context instanceof FeaturesFormContext) ) {
+            return false;
+        }
+        FeatureType featureType = ((FeaturesFormContext)context).getFeatureType();
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(fieldDefinition.getName());
+        if( attribute == null ) {
+            return false;
+        }
+        ForeingKey foreingKey = attribute.getForeingKey();
+        if( foreingKey==null ) {
+            return false;
+        }
+        return foreingKey.isForeingKey() && !foreingKey.isClosedList();
+    }
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.registerDynFieldFactory(new JDynFormFieldForeingKeyFactory());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKey.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKey.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/linkforeingkey/JDynFormFieldForeingKey.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.linkforeingkey;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import java.util.List;
+import java.util.Objects;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.ListModel;
+import javax.swing.event.ListDataListener;
+import javax.swing.text.JTextComponent;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+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.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.feature.ForeingKey.ContextForeingKey;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager.ComponentsFactory;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldForeingKey extends AbstractJDynFormField implements JDynFormField {
+
+    private Object assignedValue = null;
+    private Object value = null;
+    private JTextComponent txtDescription = null;
+    private JButton btnLink = null;
+    private JButton btnUnlink = null;
+    private JButton btnEdit = null;
+
+    public JDynFormFieldForeingKey(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        if (value != null) {
+            this.assignedValue = (DynObject) value;
+        }
+    }
+
+    @Override
+    public Object getAssignedValue() {
+        return this.assignedValue;
+    }
+
+    public void initComponentIfNeed() {
+        if (this.contents == null) {
+            this.initComponent();
+        }
+    }
+
+    @Override
+    public void initComponent() {
+        ComponentsFactory components = this.getComponentsFactory();
+        this.txtDescription = components.getJTextField(this.getDefinition(), null);
+        if( this.txtDescription==null ) {
+            this.txtDescription = new JTextField();
+        }
+        this.btnLink = components.getJButton(this.getDefinition(), "Link");
+        if( this.btnLink==null ) {
+            this.btnLink = new JButton();
+        }
+        this.btnUnlink = components.getJButton(this.getDefinition(), "Unlink");
+        if( this.btnUnlink==null ) {
+            this.btnUnlink = new JButton();
+        }
+        this.btnEdit = components.getJButton(this.getDefinition(), "Edit");
+        if( this.btnEdit==null ) {
+            this.btnEdit = new JButton();
+        }
+        this.initButton(this.btnLink, "Select item to link", "link.png");
+        this.initButton(this.btnUnlink, "Remove link", "unlink.png");
+        this.initButton(this.btnEdit, "View linked item", "edit.png");
+
+        this.btnLink.addActionListener((ActionEvent ae) -> {
+            doLink();
+        });
+        this.btnUnlink.addActionListener((ActionEvent ae) -> {
+            doUnlink();
+        });
+        this.btnEdit.addActionListener((ActionEvent ae) -> {
+            doEdit();
+        });
+
+        this.txtDescription.setText("                        ");
+        this.txtDescription.setEditable(false);
+
+        boolean enabled = !this.isReadOnly();
+        this.btnEdit.setEnabled(enabled);
+        this.btnLink.setEnabled(enabled);
+        this.btnUnlink.setEnabled(enabled);
+
+        JPanel panel = new JPanel();
+        if( !components.containsJTextField(this.getDefinition(), null) ) {
+            panel.setLayout(new GridBagLayout());
+            GridBagConstraints c = new GridBagConstraints();
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipadx = 4;
+            c.ipady = 1;
+            c.gridx = 1;
+            c.gridy = 0;
+            c.weightx = 1;
+            panel.add(this.txtDescription, c);
+            c.fill = GridBagConstraints.NONE;
+            c.ipadx = 4;
+            c.ipady = 1;
+            c.gridx = 2;
+            c.gridy = 0;
+            c.weightx = 0;
+            panel.add(this.btnLink, c);
+            c.fill = GridBagConstraints.NONE;
+            c.ipadx = 4;
+            c.ipady = 1;
+            c.gridx = 3;
+            c.gridy = 0;
+            c.weightx = 0;
+            panel.add(this.btnUnlink, c);
+            c.fill = GridBagConstraints.NONE;
+            c.ipadx = 4;
+            c.ipady = 1;
+            c.gridx = 4;
+            c.gridy = 0;
+            c.weightx = 0;
+            panel.add(this.btnEdit, c);
+        }
+        this.contents = panel;
+        this.setValue(this.assignedValue);
+
+    }
+
+    private JButton initButton(JButton button, final String tip, final String image) {
+        if( button.getIcon()==null ) {
+            URL url = this.getClass().getClassLoader().getResource("org/gvsig/featureform/swing/impl/" + image);
+            Icon icon = new ImageIcon(url);
+            button.setIcon(icon);
+        }
+        if( button.getText().trim().equals("...") ) {
+            button.setText("");
+        }
+        button.setBorder(BorderFactory.createEmptyBorder());
+        button.setBorderPainted(false);
+        button.setFocusPainted(false);
+        button.setContentAreaFilled(false);
+        button.setToolTipText(tip);
+        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        return button;
+    }
+
+    private ForeingKey getForeingKey() {
+        JDynForm.DynFormContext context = this.getForm().getContext();
+        if( !(context instanceof FeaturesFormContext) ) {
+            return null;
+        }
+        FeatureType featureType = ((FeaturesFormContext)context).getFeatureType();
+        if( featureType==null ) {
+            return null;
+        }
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(this.getName());
+        if( attribute == null ) {
+            return null;
+        }
+        ForeingKey foreingKey = attribute.getForeingKey();
+        return foreingKey;
+    }
+    
+    private void doLink0() {
+        final ForeingKey foreingKey = this.getForeingKey();
+        if( foreingKey==null ) {
+            return;
+        }
+        final ContextForeingKey context = foreingKey.createContext();
+        try {
+            final List<Feature> features = foreingKey.getFeatures(context);
+            
+            ListModel<String> model = new ListModel<String>() {
+                @Override
+                public int getSize() {
+                    return features.size();
+                }
+
+                @Override
+                public String getElementAt(int index) {
+                    Feature feature = features.get(index);
+                    ForeingKey foreingKey = getForeingKey();
+                    return foreingKey.getLabel(context, feature);
+                }
+
+                @Override
+                public void addListDataListener(ListDataListener l) {
+                }
+
+                @Override
+                public void removeListDataListener(ListDataListener l) {
+                }
+            };
+            WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+            final JList<String> jlist = new JList<>();
+            JScrollPane jscroll = new JScrollPane(jlist);
+            jscroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+            jscroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+            jlist.setModel(model);
+            jlist.setPreferredSize(new Dimension(350, 200));
+            final Dialog dialog = winManager.createDialog(
+                    jscroll,
+                    "Select",
+                    "Select the '"+this.getLabel()+"'.", 
+                    WindowManager_v2.BUTTONS_OK_CANCEL
+            );
+            dialog.addActionListener((ActionEvent e) -> {
+                if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
+                    int n = jlist.getSelectedIndex();
+                    if( n<0 ) {
+                        return;
+                    }
+                    Feature feature = features.get(n);
+                    if( feature!=null ) {
+                        setEditedValue(foreingKey.getCode(context, feature));
+                        fireFieldChangedEvent();
+                    }
+                }
+            });
+            dialog.show(WindowManager.MODE.DIALOG);
+
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show selector", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(context);
+        }
+    }
+    
+    private void doLink() {
+        final ForeingKey foreingKey = this.getForeingKey();
+        if( foreingKey==null ) {
+            return;
+        }
+        final ContextForeingKey context = foreingKey.createContext();
+        try {
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+            final FeatureStoreSearchPanel searchPanel = dataSwingManager.createFeatureStoreSearchPanel(
+                    foreingKey.getFeatureStore(context)
+            );
+            searchPanel.setFilterOnlyMode(true);
+            WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+            final Dialog dialog = winManager.createDialog(
+                    searchPanel.asJComponent(),
+                    "Select",
+                    "Select the '"+this.getLabel()+"'.", 
+                    WindowManager_v2.BUTTONS_OK_CANCEL
+            );
+            dialog.addActionListener((ActionEvent e) -> {
+                if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
+                    Feature feature = searchPanel.getLastSelectedFeature();
+                    if( feature!=null ) {
+                        setEditedValue(foreingKey.getCode(context, feature));
+                        fireFieldChangedEvent();
+                    }
+                }
+            });
+            dialog.show(WindowManager.MODE.DIALOG);
+
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show selector", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(context);
+        }
+    }
+
+    private void doUnlink() {
+        this.setEditedValue(null);
+        fireFieldChangedEvent();
+    }
+
+    private void doEdit() {
+        if (this.value == null) {
+            return;
+        }
+        final ForeingKey foreingKey = this.getForeingKey();
+        if( foreingKey==null ) {
+            return;
+        }
+        final ContextForeingKey context = foreingKey.createContext();
+        try {
+            this.btnEdit.setEnabled(false);
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+            FeatureQuery query = foreingKey.getQuery(context, value);
+            JFeaturesForm form = dataSwingManager.createJFeaturesForm(
+                    foreingKey.getFeatureStore(context)
+            );
+            form.setQuery(query);
+            form.showForm(WindowManager.MODE.WINDOW);
+
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show linked form", ex);
+        } finally {
+            this.btnEdit.setEnabled(true);
+            DisposeUtils.disposeQuietly(context);
+        }
+    }
+
+    private String getDescription() {
+        if (this.value == null) {
+            return null;
+        }
+        try {
+            final ForeingKey foreingKey = this.getForeingKey();
+            if( foreingKey==null ) {
+                return null;
+            }
+            String description = foreingKey.getLabel(null, value);
+            return description;
+        } catch (Exception ex) {
+        }
+        return null;
+
+    }
+    
+    @Override
+    public void setReadOnly(boolean readonly) {
+        initComponentIfNeed();
+        this.readOnly = readonly;
+        boolean editable = !readonly;
+        JComponent theJLabel = this.getJLabel();
+        if( theJLabel !=null ) {
+            theJLabel.setEnabled(editable);
+        }
+        this.txtDescription.setEditable(false);
+        this.btnEdit.setEnabled(true);
+        this.btnLink.setEnabled(editable);
+        this.btnUnlink.setEnabled(editable);
+    }
+
+    @Override
+    public void setValue(Object value) {
+        setEditedValue(value);
+        this.assignedValue = value;
+       
+    }
+
+    public void setEditedValue(Object value) {
+        initComponentIfNeed();
+        if (value == null) {
+            this.value = null;
+            this.txtDescription.setText("");
+            return;
+        }
+        this.value = value;
+        this.txtDescription.setText(Objects.toString(this.getDescription(), ""));
+       
+    }
+    
+    @Override
+    public Object getValue() {
+        return this.value;
+    }
+
+    @Override
+    public boolean hasValidValue() {
+        return true;
+    }
+
+    @Override
+    public void clear() {
+        this.setValue(null);
+    }
+
+    @Override
+    public boolean isModified() {
+        return !Objects.equals(this.value, this.getAssignedValue());
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFile.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageFile;
+
+import org.gvsig.featureform.swing.impl.dynformfield.ImageByteArray.AbstractJDynFormFieldImage;
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.net.URL;
+import javax.swing.JFileChooser;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.util.URLUtils;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldImageFile extends AbstractJDynFormFieldImage implements JDynFormField, FocusListener {
+
+    private File currentFile;
+    
+    public JDynFormFieldImageFile(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        this.currentFile = (File) value;
+    }
+
+    
+    @Override
+    public Object getValue() {
+        return this.currentFile;
+    }
+
+    @Override
+    public void setValue(Object value) {
+        if( value instanceof File ) {
+            super.setValue(value); 
+            this.currentFile = (File) value;
+            return;
+        }
+        this.clear();
+        this.currentFile = null;
+    }
+
+    @Override
+    public void clear() {
+        super.clear();
+        this.currentFile=null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFileFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFileFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageFile/JDynFormFieldImageFileFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageFile;
+
+import java.net.URL;
+import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+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.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+public class JDynFormFieldImageFileFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldImageFileFactory() {
+        super("IMAGE_FILE", DataTypes.FILE, "Image");
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldImageFile(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.registerDynFieldFactory(new JDynFormFieldImageFileFactory());
+        String[][] iconNames = new String[][]{
+            new String[]{"dalswing", "form-open-image"}
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = DefaultJFeaturesForm.class.getResource(icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArray.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArray.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArray.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageByteArray;
+
+import java.awt.event.FocusListener;
+import java.io.File;
+import javax.swing.JFileChooser;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.swing.api.SimpleImage;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldImageByteArray extends AbstractJDynFormFieldImage implements JDynFormField, FocusListener {
+
+    public JDynFormFieldImageByteArray(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+    }
+
+    
+    @Override
+    public Object getValue() {
+        SimpleImage current = this.getCurrent();
+        if( current==null ) {
+            return null;
+        }
+        return current.toBytearray();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/AbstractJDynFormFieldImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/AbstractJDynFormFieldImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/AbstractJDynFormFieldImage.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageByteArray;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.util.Objects;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.gvsig.imageviewer.ImageViewer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.SimpleImage;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractJDynFormFieldImage<T> extends AbstractJDynFormField implements JDynFormField, FocusListener {
+
+    protected SimpleImage assignedValue = null;
+    protected boolean readonly = false;
+    protected ImageViewer imageViewer;
+    private int fieldHeight;
+//    private boolean modified;
+    private final ChangeListener changeListener;
+//    private SimpleImage asignedValue;
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public AbstractJDynFormFieldImage(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+//        this.modified = false;
+        this.changeListener = (ChangeEvent e) -> {
+//            modified = true;
+            fireFieldChangedEvent();
+        };
+        this.assignedValue = ToolsSwingLocator.getToolsSwingManager().createSimpleImage(value);
+    }
+
+    @Override
+    public void loadDefaultValuesFromTags(Tags tags) {
+        super.loadDefaultValuesFromTags(tags);
+        this.fieldHeight = tags.getInt(DynFormSPIManager.TAG_DYNFORM_HEIGHT,200);
+    }
+
+    @Override
+    public void setReadOnly(boolean readonly) {
+        super.setReadOnly(readonly);
+        if (this.contents != null) {
+            this.contents.setEnabled(!readonly);
+        }
+    }
+
+    @Override
+    public Object getAssignedValue() {
+        return this.assignedValue;
+    }
+
+    @Override
+    public void initComponent() {
+        this.initImageViewer();
+        this.setValue(this.assignedValue);
+    }
+
+    protected void initImageViewer() {
+        this.contents = new JPanel();
+        this.contents.setLayout(new BorderLayout(2, 0));
+
+        this.imageViewer = ToolsUtilLocator.getImageViewerManager().createImageViewer();
+        this.imageViewer.addChangeListener(this.changeListener);
+        JComponent jimageViewer = this.imageViewer.asJComponent();
+        
+        jimageViewer.setPreferredSize(new Dimension(300, this.fieldHeight));
+        jimageViewer.setSize(300,this.fieldHeight);
+        
+        this.contents.add(jimageViewer, BorderLayout.CENTER);
+        this.contents.setVisible(true);
+        imageViewer.addAction(new AbstractAction(null, this.getIcon("picker-bytearray-download")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDownload();
+            }
+        });
+        imageViewer.addAction(new AbstractAction(null, this.getIcon("picker-bytearray-upload")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+              doUpload();
+            }
+        });
+        imageViewer.addAction(new AbstractAction(null, this.getIcon("picker-bytearray-setnull")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                clear();
+            }
+        });
+    }
+
+    @Override
+    public boolean hasValidValue() {
+        return true;
+    }
+    
+    protected void fireFieldChangedEventIfChanged(SimpleImage previous) {
+        if (!Objects.equals(this.getCurrent(), previous)) {
+            this.fireFieldChangedEvent();
+        }
+    }
+
+    @Override
+    public void focusGained(FocusEvent arg0) {
+        fireFieldEnterEvent();
+        this.problemIndicator().restore();
+    }
+
+    @Override
+    public void focusLost(FocusEvent arg0) {
+        fireFieldExitEvent();
+    }
+
+    @Override
+    public void clear() {
+        this.imageViewer.setImage(null);
+    }
+
+    protected Object getPreparedValue(Object value) {
+        return value;
+    }
+
+    @Override
+    public double getResizeWeight() {
+        Tags tags = this.getDefinition().getTags();
+        if( !tags.has(DynFormSPIManager.TAG_DYNFORM_RESIZEWEIGHT) ) {
+            return 1.0;
+        }
+        int resizeWeight = tags.getInt(DynFormSPIManager.TAG_DYNFORM_RESIZEWEIGHT, 0);
+        if( resizeWeight<1 ) {
+            return 0;
+        }
+        if( resizeWeight>100 ) {
+            return 1;
+        }
+        return resizeWeight / 100.0;
+    }
+
+    @Override
+    public abstract Object getValue();
+
+    @Override
+    public void setValue(Object value) {
+        if( this.imageViewer!=null ) {
+            this.imageViewer.setImage(value);
+            this.assignedValue = this.imageViewer.getImage();
+        } else {
+            if( value instanceof SimpleImage ) {
+                this.assignedValue = (SimpleImage) value;
+            } else {
+                this.assignedValue = ToolsSwingLocator.getToolsSwingManager().createSimpleImage(value);
+            }
+        }
+    }
+    
+    @Override
+    public boolean isModified() {
+        return !Objects.equals(this.assignedValue, this.getCurrent());
+    }
+    
+    protected SimpleImage getCurrent() {
+        if( this.imageViewer==null ) {
+            return this.assignedValue;
+        }
+        return this.imageViewer.getImage();
+    }
+
+    protected File fileChooser(String title, int mode) {
+        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        File[] f = dialogs.showChooserDialog(
+                title, 
+                mode, 
+                JFileChooser.FILES_ONLY, 
+                true, 
+                folderManager.getLastPath("DynFormFieldImage",null),
+                null, 
+                true
+        );
+        
+        if( ArrayUtils.isEmpty(f) ) {
+            return null;
+        }
+        folderManager.setLastPath("DynFormFieldImage",f[0]);
+        return f[0];
+    }
+
+    private void doDownload() {
+        SimpleImage current = this.getCurrent();
+        if( current == null ) {
+            return;
+        }
+        File f = this.fileChooser("Save file", JFileChooser.SAVE_DIALOG);
+        if (f == null) {
+            return;
+        }
+        try {
+            FileUtils.writeByteArrayToFile(f, current.toBytearray());
+        } catch (Exception ex) {
+            LOGGER.warn("Can't save bytes from file '" + f.getAbsolutePath() + "'.", ex);
+        }
+    }
+    
+    private void doUpload() {
+        File f = this.fileChooser("Load file", JFileChooser.OPEN_DIALOG);
+        if( f == null ) {
+            return;
+        }
+        try {            
+//            byte[] bytes = FileUtils.readFileToByteArray(f);
+            this.setValue(f);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't load bytes from file '"+f.getAbsolutePath()+"'.",ex);
+        }
+    }    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArrayFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArrayFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageByteArray/JDynFormFieldImageByteArrayFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageByteArray;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldImageByteArrayFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldImageByteArrayFactory() {
+        super("IMAGE_BYTEARRAY", DataTypes.BYTEARRAY, "Image");
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldImageByteArray(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.registerDynFieldFactory(new JDynFormFieldImageByteArrayFactory());
+    }}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURL.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURL.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURL.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageURL;
+
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.net.URL;
+import javax.swing.JFileChooser;
+import org.gvsig.featureform.swing.impl.dynformfield.ImageByteArray.AbstractJDynFormFieldImage;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.util.URLUtils;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldImageURL extends AbstractJDynFormFieldImage implements JDynFormField, FocusListener {
+
+    private URL currentURL;
+    
+    public JDynFormFieldImageURL(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        this.currentURL = (URL) value;
+    }
+
+    @Override
+    public Object getValue() {
+        return this.currentURL;
+    }
+
+    @Override
+    public void setValue(Object value) {
+        if( value instanceof URL ) {
+            super.setValue(value); 
+            this.currentURL = (URL) value;
+            return;
+        }
+        this.clear();
+        this.currentURL = null;
+    }
+
+    @Override
+    public void clear() {
+        super.clear();
+        this.currentURL=null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURLFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURLFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/ImageURL/JDynFormFieldImageURLFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.ImageURL;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldImageURLFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldImageURLFactory() {
+        super("IMAGE_URL", DataTypes.URL, "Image");
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldImageURL(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+
+//    @Override
+//    public boolean isApplicableTo(DynFormFieldDefinition fieldDefinition) {
+//        if (fieldDefinition.getDataType().getType() != this.getDataType()) {
+//            return false;
+//        }
+//        if( StringUtils.equalsIgnoreCase(this.getSubtype(), fieldDefinition.getSubtype()) ) {
+//            return true;
+//        }
+//        return false;
+//    }
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.registerDynFieldFactory(new JDynFormFieldImageURLFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKeyFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKeyFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKeyFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.selectableforeingkey;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldSelectableForeingKeyFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldSelectableForeingKeyFactory() {
+        super(
+                "FOREINGKEY_SELECTABLE", 
+                DataTypes.UNKNOWN, 
+                null
+        );
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldSelectableForeingKey(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+
+    @Override
+    public int getPriority() {
+        return 500;
+    }
+    
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormFieldDefinition fieldDefinition) {
+        if( !(context instanceof FeaturesFormContext) ) {
+            return false;
+        }
+        FeatureType featureType = ((FeaturesFormContext)context).getFeatureType();
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(fieldDefinition.getName());
+        if( attribute == null ) {
+            return false;
+        }
+        ForeingKey foreingKey = attribute.getForeingKey();
+        if( foreingKey==null ) {
+            return false;
+        }
+        return foreingKey.isForeingKey() && foreingKey.isClosedList();
+    }
+
+    public static void selfRegister() {
+//        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+//        manager.registerDynFieldFactory(new JDynFormFieldSelectableForeingKeyFactory());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKey.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKey.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/selectableforeingkey/JDynFormFieldSelectableForeingKey.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.selectableforeingkey;
+
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldWithValueList;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldSelectableForeingKey extends AbstractJDynFormFieldWithValueList implements JDynFormField {
+
+    public JDynFormFieldSelectableForeingKey(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+    }
+
+
+    private ForeingKey getForeingKey() {
+        JDynForm.DynFormContext context = this.getForm().getContext();
+        if( !(context instanceof FeaturesFormContext) ) {
+            return null;
+        }
+        FeatureType featureType = ((FeaturesFormContext)context).getFeatureType();
+        if( featureType==null ) {
+            return null;
+        }
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(this.getName());
+        if( attribute == null ) {
+            return null;
+        }
+        ForeingKey foreingKey = attribute.getForeingKey();
+        return foreingKey;
+    }
+    
+    @Override
+    protected DynObjectValueItem[] getAvailableValues() {
+        final ForeingKey foreingKey = this.getForeingKey();
+        if( foreingKey==null || !foreingKey.isClosedList() ) {
+            return null;
+        }
+        DynObjectValueItem[] values = foreingKey.getAvailableValues(null);
+        return values;
+    }
+    
+    @Override
+    public boolean isModified() {
+        String s = getValueFromJComponent();
+        Object assigned = getAssignedValue();
+        if (StringUtils.isBlank(s)) {
+            return assigned != null;
+        }
+        try {
+            Object value = this.getDefinition().coerce(s);
+            return !Objects.equals(value, assigned);
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeatures.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeatures.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeatures.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.features;
+
+import java.awt.BorderLayout;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+import java.util.List;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.complements.RelatedFeatures;
+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.FeatureType;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager.ComponentsFactory;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager.ComponentsFactory.ScrolledComponent;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
+import org.gvsig.tools.dynform.spi.dynformfield.JDynFormFieldFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDynFormFieldRelatedFeatures extends AbstractJDynFormField implements JDynFormField {
+
+    private class FeaturesTableModel extends AbstractTableModel {
+
+        private final List<Feature> features;
+        private final List<String> columnNames;
+        private final FeatureType featureType;
+
+        public FeaturesTableModel(FeatureType featureType, List<String> columnNames, List<Feature> features) {
+            this.features = features;
+            this.columnNames = columnNames;
+            this.featureType = featureType;
+        }
+
+        @Override
+        public int getRowCount() {
+            if (this.features == null) {
+                return 0;
+            }
+            try {
+                return this.features.size();
+            } catch (Exception ex) {
+                LOGGER.warn("Can't read row count from features.",ex);
+                return 0;
+            }
+        }
+
+        @Override
+        public int getColumnCount() {
+            if (this.features == null) {
+                return 0;
+            }
+            return this.columnNames.size();
+        }
+
+        @Override
+        public String getColumnName(int columnIndex) {
+            if (this.features == null) {
+                return "";
+            }
+            String attrName = this.columnNames.get(columnIndex);
+            if (this.featureType == null) {
+                return attrName;
+            }
+            FeatureAttributeDescriptor attrdesc = this.featureType.getAttributeDescriptor(attrName);
+            if (attrdesc == null) {
+                return "C" + columnIndex;
+            }
+            return attrdesc.getLocalizedShortLabel();
+        }
+
+        @Override
+        public Class<?> getColumnClass(int columnIndex) {
+            if (this.featureType == null) {
+                return String.class;
+            }
+            String attrName = this.columnNames.get(columnIndex);
+            FeatureAttributeDescriptor attrdesc = this.featureType.getAttributeDescriptor(attrName);
+            if (attrdesc == null) {
+                return String.class;
+            }
+            return attrdesc.getDataType().getDefaultClass();
+        }
+
+        @Override
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            return false;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            if (this.features == null) {
+                return null;
+            }
+            Feature feature = this.features.get(rowIndex);
+            String attrName = this.columnNames.get(columnIndex);
+            try {
+                return feature.get(attrName);
+            } catch (Throwable th) {
+                return null;
+            }
+        }
+
+        @Override
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+
+        }
+    }
+
+    private List<Feature> assignedValue = null;
+    private List<Feature> value = null;
+
+    private FeatureType featureType;
+    private List<String> columnNames;
+
+    private JTable tblFeatures = null;
+    private JButton btnEdit = null;
+//    private JButton btnNew = null;
+    private Dimension preferredSize = null;
+
+    public JDynFormFieldRelatedFeatures(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            JDynFormFieldFactory factory,
+            DynFormFieldDefinition definition,
+            Object value
+    ) {
+        super(serviceManager, componentsFactory, factory, definition, value);
+        if (value != null) {
+            this.assignedValue = (List<Feature>) value;
+        }
+    }
+
+    @Override
+    public void loadDefaultValuesFromTags(Tags tags) {
+        super.loadDefaultValuesFromTags(tags);
+        int width = tags.getInt(DynFormSPIManager.TAG_DYNFORM_WIDTH, 100);
+        int height = tags.getInt(DynFormSPIManager.TAG_DYNFORM_HEIGHT, -1);
+        if (height > 100) {
+            this.preferredSize = new Dimension(width, height);
+        }
+        this.setReadOnly(true);
+    }
+
+    @Override
+    public List<Feature> getAssignedValue() {
+        return this.assignedValue;
+    }
+
+    public void initComponentIfNeed() {
+        if (this.contents == null) {
+            this.initComponent();
+        }
+    }
+
+    private RelatedFeatures getRelatedFeatures() {
+        RelatedFeatures relatedFeatures = (RelatedFeatures) ToolsLocator.
+                getComplementsManager().get(
+                        RelatedFeatures.COMPLEMENT_MANE,
+                        this.getDefinition()
+                );
+        return relatedFeatures;
+    }
+
+    private StoresRepository getStoresRepository() {
+        JDynForm.DynFormContext context = this.getForm().getContext();
+        if (!(context instanceof FeaturesFormContext)) {
+            return null;
+        }
+        StoresRepository repository = ((FeaturesFormContext) context).getStoresRepository();
+        return repository;
+    }
+
+    @Override
+    public void initComponent() {
+        JPanel panel = new JPanel();
+        try {
+            ComponentsFactory components = this.getComponentsFactory();
+            ScrolledComponent<JTable> comps = components.getJTable(this.getDefinition(), null);
+
+            if (this.preferredSize != null) {
+                comps.getScrollPane().setPreferredSize(this.preferredSize);
+            }
+            this.tblFeatures = comps.getComponent();
+            this.btnEdit = components.getJButton(this.getDefinition(), "Edit");
+            if (this.btnEdit == null) {
+                this.btnEdit = new JButton();
+            }
+            this.initButton(this.btnEdit, "View selected item", "edit.png");
+            this.btnEdit.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent ae) {
+                    doEdit();
+                }
+            });
+//            this.btnNew = components.getJButton(this.getDefinition(), "New");
+//            if (this.btnNew == null) {
+//                this.btnNew = new JButton();
+//            }
+//            this.initButton(this.btnNew, "Create new item", "new.png");
+//            this.btnNew.addActionListener(new ActionListener() {
+//                @Override
+//                public void actionPerformed(ActionEvent ae) {
+//                    doNew();
+//                }
+//            });
+            if (!components.containsComponents(this.getDefinition())) {
+                panel.setLayout(new BorderLayout());
+                panel.add(comps.getScrollPane(), BorderLayout.CENTER);
+                JPanel panelButtons = new JPanel();
+                panelButtons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 1));
+//                panelButtons.add(this.btnNew);
+                panelButtons.add(this.btnEdit);
+                panel.add(panelButtons, BorderLayout.SOUTH);
+            }
+            this.contents = panel;
+            final RelatedFeatures relatedFeatures = this.getRelatedFeatures();
+            if (relatedFeatures == null) {
+                this.problemIndicator().set("Unable to locate the related table.");
+                return;
+            }
+            RelatedFeatures.ContextRelatedFeatures context = relatedFeatures.createContext();
+            context.setStoresRepository(this.getStoresRepository());
+            try {
+                FeatureStore store = relatedFeatures.getFeatureStore(context);
+                if (store == null) {
+                    this.problemIndicator().set("Unable to locate the related table '" + relatedFeatures.getTableName() + "'.");
+                    return;
+                }
+                this.columnNames = relatedFeatures.getColumns(context);
+                this.featureType = store.getDefaultFeatureType();
+            } finally {
+                DisposeUtils.disposeQuietly(context);
+            }
+            this.tblFeatures.setModel(
+                    new FeaturesTableModel(this.featureType, this.columnNames, this.assignedValue)
+            );
+        } catch (Throwable th) {
+            LOGGER.warn("Can't initialize components of '" + this.getName() + "'.", th);
+        }
+        this.setReadOnly(true);
+    }
+
+    private void doEdit() {
+        if (this.value == null) {
+            return;
+        }
+        int selectedRow = this.tblFeatures.getSelectedRow();
+        if (selectedRow < 0) {
+            return;
+        }
+        try {
+            this.btnEdit.setEnabled(false);
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+
+            final RelatedFeatures relatedFeatures = this.getRelatedFeatures();
+            if (relatedFeatures == null) {
+                this.problemIndicator().set("Unable to locate the related table.");
+                return;
+            }
+            RelatedFeatures.ContextRelatedFeatures context = relatedFeatures.createContext();
+            context.setStoresRepository(this.getStoresRepository());
+            FeatureStore store = relatedFeatures.getFeatureStore(context);
+            if (store == null) {
+                this.problemIndicator().set("Unable to locate the related table '" + relatedFeatures.getTableName() + "'.");
+                return;
+            }
+            Feature f = this.value.get(selectedRow);
+            FeatureQuery query = relatedFeatures.getUniqueKeyQuery(
+                    context, 
+                    relatedFeatures.getUniqueKey(context, f)
+            );
+            JFeaturesForm form = dataSwingManager.createJFeaturesForm(store);
+            form.setQuery(query);
+            form.showForm(WindowManager.MODE.WINDOW);
+
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show linked form", ex);
+        } finally {
+            this.btnEdit.setEnabled(true);
+        }
+    }
+
+//    private void doNew() {
+//        if (this.value == null) {
+//            return;
+//        }
+//        try {
+//            this.btnNew.setEnabled(false);
+//            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+//
+//            final RelatedFeatures relatedFeatures = this.getRelatedFeatures();
+//            if (relatedFeatures == null) {
+//                this.problemIndicator().set("Unable to locate the related table.");
+//                return;
+//            }
+//            RelatedFeatures.ContextRelatedFeatures context = relatedFeatures.createContext();
+//            context.setStoresRepository(this.getStoresRepository());
+//            FeatureStore store = relatedFeatures.getFeatureStore(context);
+//            if (store == null) {
+//                this.problemIndicator().set("Unable to locate the related table '" + relatedFeatures.getTableName() + "'.");
+//                return;
+//            }
+//            String myPkName = ... 
+//            String myPkValue = ...
+//            FeatureQuery query = relatedFeatures.getForeingKeyQuery(
+//                    context, 
+//                    myPkName
+//            );
+//            JFeaturesForm form = dataSwingManager.createJFeaturesForm(store);
+//            form.setQuery(query);
+//            form.getFormset().fireEvent(ACTION_NEW,null);          
+//            JDynForm jDynForm = form.getFormset().getForm();
+//            jDynForm.setValue(myPkName, myPkValue);
+//            
+//            form.showForm(WindowManager.MODE.WINDOW);
+//
+//        } catch (Exception ex) {
+//            LOGGER.warn("Can't show linked form", ex);
+//        } finally {
+//            this.btnEdit.setEnabled(true);
+//        }
+//    }
+
+    private JButton initButton(JButton button, final String tip, final String image) {
+        if (button.getIcon() == null) {
+            URL url = this.getClass().getClassLoader().getResource("org/gvsig/featureform/swing/impl/" + image);
+            Icon icon = new ImageIcon(url);
+            button.setIcon(icon);
+        }
+        if (button.getText().trim().equals("...")) {
+            button.setText("");
+        }
+        button.setBorder(BorderFactory.createEmptyBorder());
+        button.setBorderPainted(false);
+        button.setFocusPainted(false);
+        button.setContentAreaFilled(false);
+        button.setToolTipText(tip);
+        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        return button;
+    }
+
+    @Override
+    public void setValue(Object value) {
+        initComponentIfNeed();
+        if (value == null) {
+            this.clear();
+            return;
+        }
+        this.value = (List<Feature>) value;
+        this.tblFeatures.setModel(
+                new FeaturesTableModel(this.featureType, this.columnNames, this.value)
+        );
+    }
+
+    @Override
+    public Object getValue() {
+        return this.value;
+    }
+
+    @Override
+    public void fetch(DynObject container) {
+    }
+
+    @Override
+    public boolean hasValidValue() {
+        return true;
+    }
+
+    @Override
+    public void clear() {
+        initComponentIfNeed();
+        this.value = null;
+        this.tblFeatures.setModel(
+                new FeaturesTableModel(this.featureType, this.columnNames, null)
+        );
+    }
+
+    @Override
+    public boolean isModified() {
+        return false;
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeaturesFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeaturesFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynformfield/features/JDynFormFieldRelatedFeaturesFactory.java	(revision 46118)
@@ -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.featureform.swing.impl.dynformfield.features;
+
+import org.gvsig.fmap.dal.complements.RelatedFeatures;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.DynFormFieldDefinition;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormFieldFactory;
+
+public class JDynFormFieldRelatedFeaturesFactory extends AbstractJDynFormFieldFactory {
+
+    public JDynFormFieldRelatedFeaturesFactory() {
+        super("FEATURES", DataTypes.UNKNOWN,null);
+    }
+
+    @Override
+    public JDynFormField create(
+            DynFormSPIManager serviceManager,
+            DynFormSPIManager.ComponentsFactory componentsFactory,
+            DynFormFieldDefinition fieldDefinition,
+            Object value
+    ) {
+        return new JDynFormFieldRelatedFeatures(serviceManager, componentsFactory, this, fieldDefinition, value);
+    }
+
+    @Override
+    public int getPriority() {
+        return 500;
+    }
+    
+    @Override
+    public boolean isApplicableTo(JDynForm.DynFormContext context, DynFormFieldDefinition fieldDefinition) {
+        RelatedFeatures complement = (RelatedFeatures) ToolsLocator.getComplementsManager().get(
+                RelatedFeatures.COMPLEMENT_MANE, fieldDefinition
+        );
+        if( complement.isRelatedFeatures() ) {
+            return true;
+        }
+        return false;
+    }
+    
+    public static void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.registerDynFieldFactory(new JDynFormFieldRelatedFeaturesFactory());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelAdvanced.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelAdvanced.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelAdvanced.java	(revision 46118)
@@ -0,0 +1,179 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.event.ChangeListener;
+import javax.swing.text.JTextComponent;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.AbstractSearchConditionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SearchConditionPanelAdvanced
+        extends AbstractSearchConditionPanel
+        implements SearchConditionPanel {
+
+    @Override
+    public JComponent asJComponent() {
+        return null;
+    }
+
+    @Override
+    public void put(SearchParameters params) {
+        Expression filter = null;
+        if (params.getQuery().getExpressionFilter()!=null) {
+            try {
+                filter = params.getQuery().getExpressionFilter().clone();
+            } catch (CloneNotSupportedException ex) {
+                throw new RuntimeException("Not able to clone advanced parameters", ex);
+            }
+        }
+        this.set(filter);
+    }
+
+    @Override
+    public SearchParameters fetch(SearchParameters params) {
+        if (params == null) {
+            return params;
+        }
+        Expression exp = this.get();
+        if (exp == null){
+            params.getQuery().setFilter((Expression) null);
+        }else if (exp.isEmpty()) {
+            params.getQuery().clearFilter();
+        } else {
+            try {
+                exp = this.get().clone();
+            } catch (CloneNotSupportedException ex) {
+                throw new RuntimeException("Not able to clone advanced parameters", ex);
+            }
+            params.getQuery().setFilter(exp);
+        }
+        return params;
+    }
+
+    private static class SearchConditionPanelAdvancedFactory
+            implements SearchConditionPanelFactory {
+
+        @Override
+        public boolean isApplicable(FeatureStore store) {
+            return true;
+        }
+
+        @Override
+        public SearchConditionPanel create(Object... os) {
+            return null;
+        }
+
+        @Override
+        public String getName() {
+            return "Advanced";
+        }
+
+    }
+
+    private static final SearchConditionPanelFactory FACTORY = new SearchConditionPanelAdvancedFactory();
+
+    private final ExpressionPickerController advancedExpression;
+    private final FeatureStore store;
+    private final ChangeListenerHelper changeListenerHelper;
+
+    public SearchConditionPanelAdvanced(
+            FeatureStore store,
+            JTextComponent text,
+            JButton button,
+            JButton bookmarks,
+            JButton history
+    ) {
+        this.changeListenerHelper = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
+        this.store = store;
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        DataSwingManager dataSwingManager = DALSwingLocator.getManager();
+        this.advancedExpression = dataSwingManager.createExpressionPickerController(
+                this.store,
+                text,
+                button,
+                bookmarks,
+                history
+        );
+        initComponents();
+    }
+
+    @Override
+    public SearchConditionPanelFactory getFactory() {
+        return FACTORY;
+    }
+
+    private void initComponents() {
+    }
+
+    @Override
+    public void clear() {
+        this.advancedExpression.set(null);
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public Expression get() {
+        return this.advancedExpression.get();
+    }
+
+    @Override
+    public boolean isValid(StringBuilder message) {
+        if (this.advancedExpression.isValid()) {
+            return true;
+        }
+        message.append("The expression entered is not valid.");
+        return false;
+    }
+
+    @Override
+    public boolean set(Expression filter) {
+        this.advancedExpression.set(filter);
+        this.changeListenerHelper.fireEvent();
+        return true;
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        this.advancedExpression.setEnabled(enabled);
+    }
+
+    @Override
+    public void addChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.addChangeListener(listener);
+    }
+
+    @Override
+    public ChangeListener[] getChangeListeners() {
+        return this.changeListenerHelper.getChangeListeners();
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.removeChangeListener(listener);
+    }
+
+    @Override
+    public void removeAllChangeListener() {
+        this.changeListenerHelper.removeAllChangeListener();
+    }
+
+    @Override
+    public boolean hasChangeListeners() {
+        return this.changeListenerHelper.hasChangeListeners();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelSimplified.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelSimplified.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionPanelSimplified.java	(revision 46118)
@@ -0,0 +1,436 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_AND;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_OR;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.AbstractSearchConditionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SearchConditionPanelSimplified
+        extends AbstractSearchConditionPanel
+        implements SearchConditionPanel {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SearchConditionPanelSimplified.class);
+    public static final String PANEL_NAME = "SearchConditionPanelSimplified";
+
+    @Override
+    public JComponent asJComponent() {
+        return null;
+    }
+
+    @Override
+    public void put(SearchParameters params) {
+        Map<String, JsonObject> allPersistenceJson = params.getValues();
+        JsonObject jsonState = allPersistenceJson.get(PANEL_NAME);
+        this.fromJson(jsonState);
+    }
+
+    @Override
+    public SearchParameters fetch(SearchParameters params) {
+        if (params == null) {
+            return null;
+        }
+        Map<String, JsonObject> persistenceJson = params.getValues();
+        JsonObject jsonState = this.toJson();
+        persistenceJson.put(PANEL_NAME, jsonState);
+        return params;
+    }
+
+    private static class SearchConditionPanelAdvancedFactory
+            implements SearchConditionPanelFactory {
+
+        @Override
+        public boolean isApplicable(FeatureStore store) {
+            return true;
+        }
+
+        @Override
+        public SearchConditionPanel create(Object... os) {
+            return null;
+        }
+
+        @Override
+        public String getName() {
+            return "Simplified";
+        }
+
+    }
+
+    private static final SearchConditionPanelFactory FACTORY = new SearchConditionPanelAdvancedFactory();
+
+    private final FeatureStore store;
+    private final List<SearchConditionFieldController> searchFieldsControllers;
+    private int maxSearhFields = 4;
+    private String accumulatedFilter;
+    private final JButton btnAddAccumulatedFilter;
+    private final JButton btnRemoveAccumulatedFilter;
+    private final JButton btnViewAccumulatedFilter;
+    private final String baseToolTip;
+    private SearchConditionPanelFactory factory;
+    private final ChangeListenerHelper changeListenerHelper;
+
+    public SearchConditionPanelSimplified(
+            SearchParameters parameters,
+            FeatureStore store,
+            JButton btnAddToAccumulatedFilter,
+            JButton btnRemoveAccumulatedFilter,
+            JButton btnViewAccumulatedFilter,
+            JLabel lblField1,
+            JLabel lblExtraFields1,
+            JLabel lblRelationalOperator1,
+            JComboBox cboValue1,
+            JLabel lblNull1,
+            JLabel lblLogicalOperators1,
+            JLabel lblField2,
+            JLabel lblExtraFields2,
+            JLabel lblRelationalOperator2,
+            JComboBox cboValue2,
+            JLabel lblNull2,
+            JLabel lblLogicalOperators2,
+            JLabel lblField3,
+            JLabel lblExtraFields3,
+            JLabel lblRelationalOperator3,
+            JComboBox cboValue3,
+            JLabel lblNull3,
+            JLabel lblLogicalOperators3,
+            JLabel lblField4,
+            JLabel lblExtraFields4,
+            JLabel lblRelationalOperator4,
+            JComboBox cboValue4,
+            JLabel lblNull4,
+            JLabel lblLogicalOperators4
+    ) {
+        this.changeListenerHelper = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
+        this.store = store;
+        this.searchFieldsControllers = new ArrayList<>();
+        SearchConditionFieldController controller = new SearchConditionFieldController(
+                parameters,
+                store,
+                lblField1,
+                lblExtraFields1,
+                lblRelationalOperator1,
+                cboValue1,
+                lblNull1,
+                lblLogicalOperators1
+        );
+        this.searchFieldsControllers.add(controller);
+        controller = new SearchConditionFieldController(
+                parameters,
+                store,
+                lblField2,
+                lblExtraFields2,
+                lblRelationalOperator2,
+                cboValue2,
+                lblNull2,
+                lblLogicalOperators2
+        );
+        this.searchFieldsControllers.add(controller);
+        controller = new SearchConditionFieldController(
+                parameters,
+                store,
+                lblField3,
+                lblExtraFields3,
+                lblRelationalOperator3,
+                cboValue3,
+                lblNull3,
+                lblLogicalOperators3
+        );
+        this.searchFieldsControllers.add(controller);
+        controller = new SearchConditionFieldController(
+                parameters,
+                store,
+                lblField4,
+                lblExtraFields4,
+                lblRelationalOperator4,
+                cboValue4,
+                lblNull4,
+                null
+        );
+        this.searchFieldsControllers.add(controller);
+        this.accumulatedFilter = null;
+        this.btnAddAccumulatedFilter = btnAddToAccumulatedFilter;
+        this.btnRemoveAccumulatedFilter = btnRemoveAccumulatedFilter;
+        this.btnViewAccumulatedFilter = btnViewAccumulatedFilter;
+        this.baseToolTip = this.btnAddAccumulatedFilter.getToolTipText();
+        initComponents();
+    }
+
+    @Override
+    public SearchConditionPanelFactory getFactory() {
+        return FACTORY;
+    }
+
+    @Override
+    public boolean isValid(StringBuilder message) {
+        boolean valid = true;
+        for (SearchConditionFieldController searchField : searchFieldsControllers) {
+            if (!searchField.isValid(message)) {
+                valid = false;
+            }
+        }
+        return valid;
+    }
+
+    private void initComponents() {
+        try {
+            Search search = (Search) ToolsLocator.getComplementsManager().get(
+                    Search.COMPLEMENT_MANE, this.store.getDefaultFeatureType()
+            );
+            List<Search.OrderedAttribute> orderedAttributes = search.getOrderedAttributes(
+                    Search.BASIC_TYPES_FILTER,
+                    Search.STR_INT_LONG_LABEL_ORDER,
+                    5
+            );
+            this.maxSearhFields = Integer.min(orderedAttributes.size(), 4);
+            int n = 0;
+            for (SearchConditionFieldController searchField : searchFieldsControllers) {
+                if (n < this.maxSearhFields) {
+                    searchField.setAttribute(orderedAttributes.get(n++).getDescriptor().getName());
+                } else {
+                    searchField.setEnabled(false);
+                }
+            }
+        } catch (DataException ex) {
+            LOGGER.warn("Can't determine order of attributes", ex);
+        }
+        this.btnAddAccumulatedFilter.addActionListener((ActionEvent e) -> {
+            addToAccumulatedFilter(this.getCurrentFilter());
+        });
+        this.btnRemoveAccumulatedFilter.addActionListener((ActionEvent e) -> {
+            clearAccumulatedFilter();
+        });
+        this.btnViewAccumulatedFilter.addActionListener((ActionEvent e) -> {
+            showAccumulatedFilter();
+        });
+        this.btnRemoveAccumulatedFilter.setEnabled(false);
+        this.btnViewAccumulatedFilter.setEnabled(false);
+        this.btnAddAccumulatedFilter.setEnabled(true);
+    }
+
+    public void addToAccumulatedFilter(String filter) {
+        if (StringUtils.isBlank(filter)) {
+            return;
+        }
+        String theAccumulatedFilter = this.accumulatedFilter;
+        this.clear();
+        if (!StringUtils.isBlank(theAccumulatedFilter)) {
+            filter = "( " + theAccumulatedFilter + ") AND \n( " + filter + ")";
+        }
+        this.btnAddAccumulatedFilter.setToolTipText("<html><b>" + this.baseToolTip + "</b><br><br>" + filter.replaceAll("\\n", "<br>") + "</html>");
+        this.accumulatedFilter = filter;
+        this.btnRemoveAccumulatedFilter.setEnabled(true);
+        this.btnViewAccumulatedFilter.setEnabled(true);
+        this.changeListenerHelper.fireEvent();
+    }
+
+    public void clearAccumulatedFilter() {
+        this.accumulatedFilter = null;
+        this.btnRemoveAccumulatedFilter.setEnabled(false);
+        this.btnViewAccumulatedFilter.setEnabled(false);
+        this.btnAddAccumulatedFilter.setToolTipText(this.baseToolTip);
+        this.changeListenerHelper.fireEvent();
+    }
+
+    public void showAccumulatedFilter() {
+        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        DataSwingManager manager = DALSwingLocator.getDataSwingManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        JExpressionBuilder panel = manager.createQueryFilterExpresion(store);
+        panel.setExpression(ExpressionUtils.createExpression(this.getAccumulatedFilter()));
+        Dialog dialog = winmanager.createDialog(
+                panel.asJComponent(),
+                i18n.getTranslation("_Expression_builder"),
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+            if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+                this.clearAccumulatedFilter();
+                this.addToAccumulatedFilter(panel.getExpression().getPhrase());
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        if (this.searchFieldsControllers == null) {
+            initComponents();
+        }
+        int n = 0;
+        for (SearchConditionFieldController searchField : searchFieldsControllers) {
+            if (n < this.maxSearhFields) {
+                searchField.setEnabled(enabled);
+            } else {
+                searchField.setEnabled(false);
+            }
+            n++;
+        }
+    }
+
+    @Override
+    public void clear() {
+        if (this.searchFieldsControllers == null) {
+            return;
+        }
+        for (SearchConditionFieldController searchField : searchFieldsControllers) {
+            searchField.clear();
+        }
+        this.clearAccumulatedFilter();
+    }
+
+    @Override
+    public Expression get() {
+        String currentFilter = this.getCurrentFilter();
+        if (StringUtils.isBlank(accumulatedFilter)) {
+            if (StringUtils.isBlank(currentFilter)) {
+                return null;
+            }
+            return ExpressionUtils.createExpression(currentFilter);
+        }
+        if (StringUtils.isBlank(currentFilter)) {
+            return ExpressionUtils.createExpression(accumulatedFilter);
+        }
+        return ExpressionUtils.createExpression("( " + accumulatedFilter + " ) AND ( " + currentFilter + " )");
+    }
+
+    public String getAccumulatedFilter() {
+        return this.accumulatedFilter;
+    }
+
+    public String getCurrentFilter() {
+        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+        String relational = OPERATOR_OR;
+        for (SearchConditionFieldController searchField : searchFieldsControllers) {
+            ExpressionBuilder.Value cond = searchField.getFilter();
+            if (cond != null) {
+                if (relational.equals(OPERATOR_AND)) {
+                    builder.and(cond);
+                } else {
+                    builder.or(cond);
+                }
+                relational = searchField.getLogicalOperator();
+            }
+        }
+        if (builder.isEmpty()) {
+            return null;
+        }
+        return builder.toString();
+    }
+
+    public JsonObject toJson() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+
+        int i = 0;
+        for (SearchConditionFieldController searchField : searchFieldsControllers) {
+            JsonObject jsonState = searchField.toJson();
+            String name = DataTypeUtils.toString(i);
+            builder.add(name, jsonState);
+            i++;
+        }
+
+        JsonObject jsonBuild = builder.build();
+        return jsonBuild;
+    }
+
+    public void fromJson(JsonObject json) {
+        if (json==null) {
+            return;
+        }
+        int i = 0;
+        for (SearchConditionFieldController searchFieldController : searchFieldsControllers) {
+            String index = DataTypeUtils.toString(i);
+            JsonObject jsonField = json.getJsonObject(index);
+            searchFieldController.fromJson(jsonField);
+            i++;
+        }
+    }
+
+    @Override
+    public boolean set(Expression filter) {
+        try {
+            Code code = filter.getCode();
+            if (code.code() == Code.CALLABLE) {
+                SearchConditionFieldController searchField = this.searchFieldsControllers.get(0);
+                Code.Callable caller = (Code.Callable) code;
+                if (searchField.isAValidRelationOperator(caller.name())) {
+                    Code op1 = caller.parameters().get(0);
+                    Code op2 = caller.parameters().get(1);
+                    if (op1.code() == Code.IDENTIFIER && op2.code() == Code.CONSTANT) {
+                        if (searchField.setAttribute(((Code.Identifier) op1).name()) >= 0) {
+                            searchField.setRelationalOperator(caller.name());
+                            searchField.setValue(((Code.Constant) op2).value());
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        } finally {
+            this.changeListenerHelper.fireEvent();
+        }
+    }
+
+    @Override
+    public void addChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.addChangeListener(listener);
+    }
+
+    @Override
+    public ChangeListener[] getChangeListeners() {
+        return this.changeListenerHelper.getChangeListeners();
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.removeChangeListener(listener);
+    }
+
+    @Override
+    public void removeAllChangeListener() {
+        this.changeListenerHelper.removeAllChangeListener();
+    }
+
+    @Override
+    public boolean hasChangeListeners() {
+        return this.changeListenerHelper.hasChangeListeners();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.xml	(revision 46118)
@@ -0,0 +1,3286 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/omartinez/devel/org.gvsig.desktop/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/searchpanel/DefaultSearchPanelView.xml</at>
+   <at name="rowspecs">CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="componentCount">2</at>
+            <at name="tabPlacement">3</at>
+            <at name="name">tabSearchMode</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Simplified</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.2076350997</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU: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">6</at>
+                             <at name="colspan">3</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue1</at>
+                              <at name="width">172</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">20</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">8</at>
+                             <at name="row">6</at>
+                             <at name="colspan">3</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue2</at>
+                              <at name="width">172</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">20</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">14</at>
+                             <at name="row">6</at>
+                             <at name="colspan">3</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue3</at>
+                              <at name="width">171</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">20</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">20</at>
+                             <at name="row">6</at>
+                             <at name="colspan">2</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue4</at>
+                              <at name="width">165</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">20</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">8</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator2</at>
+                              <at name="width">145</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">14</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator3</at>
+                              <at name="width">144</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">20</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator4</at>
+                              <at name="width">145</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">6</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators1</at>
+                              <at name="width">45</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">12</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators2</at>
+                              <at name="width">45</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">18</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators3</at>
+                              <at name="width">45</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField1</at>
+                              <at name="width">145</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">8</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField2</at>
+                              <at name="width">145</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">14</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField3</at>
+                              <at name="width">144</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">20</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField4</at>
+                              <at name="width">145</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">4</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields1</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">10</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields2</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">16</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields3</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">21</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields4</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator1</at>
+                              <at name="width">145</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">2</at>
+                             <at name="row">8</at>
+                             <at name="colspan">20</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">embedded.1554343653</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">3</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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-clear-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnRemoveAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_Remove_accumulated_filter</at>
+                                   <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-add-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnAddAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_Accumulate_filter</at>
+                                   <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-edit-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnViewAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_View_accumulated_filter</at>
+                                   <at name="height">20</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="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>
+                              <at name="name"/>
+                              <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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="1">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="7"/>
+                              </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>
+                       </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">4</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull1</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">10</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull2</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">16</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull3</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">21</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull4</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="9">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="8">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Advanced</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.358053784</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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">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="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="name">lblExpressionDeBusqueda</at>
+                              <at name="width">812</at>
+                              <at name="text">_Insert_a_search_expression</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">14</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">4</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpression</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">6</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpressionHistory</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">8</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpressionBookmarks</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">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.JTextArea</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTextArea</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">txtAdvancedExpression</at>
+                              <at name="width">810</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="height">98</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="5">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">930</at>
+            <at name="tabCount">2</at>
+            <at name="height">208</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">6</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.JTable</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTable</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">tblResults</at>
+            <at name="width">928</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="height">32</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">4</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">embedded.347079236</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU: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">4</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.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="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="actionCommand">Buscar</at>
+                 <at name="name">btnSearch</at>
+                 <at name="width">78</at>
+                 <at name="text">_Search</at>
+                 <at name="height">22</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">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.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="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="actionCommand">Limpiar</at>
+                 <at name="name">btnClear</at>
+                 <at name="width">68</at>
+                 <at name="text">_Clear</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</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">embedded.1969937399</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">lblMsg</at>
+                 <at name="width">902</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">12</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="name">pnlActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.1379545973</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX: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">7</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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="opaque">false</at>
+                 <at name="name">pnlCfgActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="name">btnHistory</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="name">btnBookmarks</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionFieldController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionFieldController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/SearchConditionFieldController.java	(revision 46118)
@@ -0,0 +1,1275 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import java.awt.Cursor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.text.JTextComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
+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.ForeingKey;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributeSelectionPanel;
+import static org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel.getAttributeDescriptorLabel;
+import static org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel.NOT_HANDLE_NULL;
+import static org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel.NULL_AS_FALSE;
+import static org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel.NULL_AS_TRUE;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.DropDown;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SearchConditionFieldController {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SearchConditionFieldController.class);
+    private static final Class LOAD_MORE_ELEMENTS = SearchConditionFieldController.class;
+
+    private static final int MAXLEN_IN_COMBOS = 70;
+    
+    private static class Field extends LabeledValueImpl<String> {
+
+        FeatureAttributeDescriptor attrdesc;
+        private final FeatureStore store;
+        private final int presentationMode;
+        private final boolean showStoreName;
+        private final FeatureAttributeDescriptor[] path;
+
+        public Field(FeatureAttributeDescriptor[] path, FeatureStore store, FeatureAttributeDescriptor attrdesc, int presentationMode) {
+            this(path, store, attrdesc, presentationMode, false);
+        }
+
+        public Field(
+                FeatureAttributeDescriptor[] path,
+                FeatureStore store,
+                FeatureAttributeDescriptor attrdesc,
+                int presentationMode,
+                boolean showStoreName
+        ) {
+            super(
+                    getAttributeDescriptorLabel(attrdesc, store.getName()),
+                    attrdesc.getName()
+            );
+            this.path = path;
+            this.store = store;
+            this.attrdesc = attrdesc;
+            this.presentationMode = presentationMode;
+            this.showStoreName = showStoreName;
+        }
+
+        public FeatureAttributeDescriptor[] getPath() {
+            return this.path;
+        }
+
+        @Override
+        public String getLabel() {
+            String theLabel = getAttributeDescriptorLabel(attrdesc, showStoreName ? store.getName() : null);
+            switch (this.presentationMode) {
+                case Search.OrderedAttribute.TYPE_REGURAL:
+                    break;
+                case Search.OrderedAttribute.TYPE_FAVORITE:
+                    theLabel = "<html><b>" + theLabel + "</b></html>";
+                    break;
+                case Search.OrderedAttribute.TYPE_RECENT:
+                    theLabel = "<html><i><b>" + theLabel + "</b></i></html>";
+                    break;
+            }
+            return theLabel;
+        }
+
+        public FeatureAttributeDescriptor getParentDescriptor() {
+            int l = this.path.length;
+            if (l < 2) {
+                return null;
+            }
+            return this.path[l - 2];
+        }
+
+        public FeatureAttributeDescriptor getDescriptor() {
+            return this.attrdesc;
+        }
+
+        public FeatureStore getFeatureStore() {
+            return this.store;
+        }
+
+    }
+
+    private FeatureStore store;
+    private SearchParameters parameters;
+    private final JLabel lblFields;
+    private final JLabel lblExtraFields;
+    private final JLabel lblLogicalOperators;
+    private final JLabel lblRelationalOperators;
+    private final JComboBox cboValue;
+    private final JLabel lblNull;
+    private Object valueAssigned = null;
+
+    private DropDown ddnFields;
+    private DropDown ddnLogicalOperators;
+    private DropDown ddnRelationalOperators;
+    private DropDown ddnNullBehavior;
+
+    private LabeledValue[] relationalOperators;
+    private LabeledValue[] logicalOperators;
+    private LabeledValue[] nullBehaviors;
+    private ArrayList<ImageIcon> nullOperatorsIcons;
+
+    private final int SIZE_ORDERED_ATTRIBUTES = 20;
+    private DatePickerController dateController = null;
+
+    private int updateValuesTimeLimit;
+    private int updateValuesFeaturesLimit;
+    private boolean canHasMoreElements;
+
+    public SearchConditionFieldController(
+            SearchParameters parameters,
+            FeatureStore store,
+            JLabel lblFields,
+            JLabel lblExtraFields,
+            JLabel lblRelationalOperators,
+            JComboBox cboValue,
+            JLabel lblNull,
+            JLabel lblLogicalOperators
+    ) {
+        this.parameters = parameters;
+        this.store = store;
+        this.lblFields = lblFields;
+        this.lblExtraFields = lblExtraFields;
+        this.lblRelationalOperators = lblRelationalOperators;
+        this.cboValue = cboValue;
+        this.lblNull = lblNull;
+        this.lblLogicalOperators = lblLogicalOperators;
+        this.updateValuesTimeLimit = 60;
+        this.updateValuesFeaturesLimit = 1000;
+        this.canHasMoreElements = false;
+        this.initComponents();
+    }
+
+    public boolean isAValidRelationOperator(String name) {
+        for (LabeledValue relationalOperator : relationalOperators) {
+            if (StringUtils.equalsIgnoreCase(name, (CharSequence) relationalOperator.getValue())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void initComponents() {
+        try {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+            relationalOperators = new LabeledValue[]{
+                new LabeledValueImpl(i18n.getTranslation("_Equals_to"), ExpressionBuilder.OPERATOR_EQ),
+                new LabeledValueImpl(i18n.getTranslation("_Like_to"), ExpressionBuilder.OPERATOR_ILIKE),
+                new LabeledValueImpl(i18n.getTranslation("_Not_equals_to"), ExpressionBuilder.OPERATOR_NE),
+                new LabeledValueImpl(i18n.getTranslation("_Greater_than"), ExpressionBuilder.OPERATOR_GT),
+                new LabeledValueImpl(i18n.getTranslation("_Greater_or_equal_to"), ExpressionBuilder.OPERATOR_GE),
+                new LabeledValueImpl(i18n.getTranslation("_Less_than"), ExpressionBuilder.OPERATOR_LT),
+                new LabeledValueImpl(i18n.getTranslation("_Less_or_equal_to"), ExpressionBuilder.OPERATOR_LE),
+                new LabeledValueImpl(i18n.getTranslation("_Is_null"), ExpressionBuilder.OPERATOR_IS_NULL),
+                new LabeledValueImpl(i18n.getTranslation("_Is_not_null"), ExpressionBuilder.OPERATOR_IS_NOT_NULL)
+            };
+
+            logicalOperators = new LabeledValue[]{
+                new LabeledValueImpl(i18n.getTranslation("_Or"), ExpressionBuilder.OPERATOR_OR),
+                new LabeledValueImpl(i18n.getTranslation("_And"), ExpressionBuilder.OPERATOR_AND)
+            };
+
+            nullBehaviors = new LabeledValue[]{
+                new LabeledValueImpl(i18n.getTranslation("_Not_handle_null_values"), NOT_HANDLE_NULL),
+                new LabeledValueImpl(i18n.getTranslation("_Null_values_as_true"), NULL_AS_TRUE),
+                new LabeledValueImpl(i18n.getTranslation("_Null_values_as_false"), NULL_AS_FALSE)
+            };
+
+            nullOperatorsIcons = new ArrayList<ImageIcon>();
+            nullOperatorsIcons.add(ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-nullbehavior-null"));
+            nullOperatorsIcons.add(ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-nullbehavior-true"));
+            nullOperatorsIcons.add(ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-nullbehavior-false2"));
+
+            this.lblExtraFields.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+
+            this.ddnFields = toolsSwingManager.createDropDown(lblFields);
+            this.ddnFields.setVisibleDropdownArrow(false);
+            this.ddnRelationalOperators = toolsSwingManager.createDropDown(lblRelationalOperators);
+            this.ddnRelationalOperators.setVisibleDropdownArrow(false);
+            if (lblLogicalOperators != null) {
+                this.ddnLogicalOperators = toolsSwingManager.createDropDown(lblLogicalOperators);
+                this.ddnLogicalOperators.setVisibleDropdownArrow(false);
+            }
+
+            DefaultComboBoxModel modelRelationalOperators = new DefaultComboBoxModel();
+            for (LabeledValue op : relationalOperators) {
+                modelRelationalOperators.addElement(op);
+            }
+            this.ddnRelationalOperators.setModel(modelRelationalOperators);
+            this.ddnRelationalOperators.addItemListener(new ItemListener() {
+                @Override
+                public void itemStateChanged(ItemEvent ie) {
+                    doUpdateControllerByRelationalOperator();
+                }
+            });
+
+            if (this.ddnLogicalOperators != null) {
+                DefaultComboBoxModel modelLogicalOperators = new DefaultComboBoxModel();
+                for (LabeledValue op : logicalOperators) {
+                    modelLogicalOperators.addElement(op);
+                }
+                this.ddnLogicalOperators.setModel(modelLogicalOperators);
+                this.ddnLogicalOperators.setSelectedIndex(1);
+            }
+
+//            this.ddnNullOperators = new DropDownLabelIcon(lblNull);
+            this.ddnNullBehavior = toolsSwingManager.createDropDownIcon(lblNull);
+            this.ddnNullBehavior.setVisibleDropdownArrow(false);
+            DefaultComboBoxModel modelNullOperators = new DefaultComboBoxModel();
+            for (LabeledValue op : nullBehaviors) {
+                modelNullOperators.addElement(op);
+            }
+            this.ddnNullBehavior.setModel(modelNullOperators);
+            this.ddnNullBehavior.setIcons(nullOperatorsIcons);
+            this.ddnNullBehavior.setSelectedIndex(0);
+            FeatureType featureType = parameters.getFeatureType(store);
+            Search search = (Search) ToolsLocator.getComplementsManager().get(
+                    Search.COMPLEMENT_MANE, featureType
+            );
+            List<Search.OrderedAttribute> orderedAttributes = search.getOrderedAttributes(
+                    Search.BASIC_TYPES_FILTER,
+                    Search.STR_INT_LONG_LABEL_ORDER,
+                    SIZE_ORDERED_ATTRIBUTES
+            );
+            List<ImageIcon> icons = new ArrayList<>();
+//            DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+            DefaultComboBoxModel model = new DefaultComboBoxModel();
+            for (Search.OrderedAttribute attr : orderedAttributes) {
+                FeatureAttributeDescriptor attrdesc = attr.getDescriptor();
+                Field field = new Field(
+                        new FeatureAttributeDescriptor[]{attrdesc},
+                        this.store,
+                        attrdesc,
+                        attr.getType()
+                );
+                model.addElement(field);
+                String iconName = attrdesc.getDataType().getIconName();
+                if (iconTheme.exists(iconName)) {
+                    icons.add(iconTheme.get(iconName));
+                } else {
+                    icons.add(null);
+                }
+            }
+
+            this.ddnFields.setIcons(icons);
+            this.ddnFields.setModel(model);
+            this.ddnFields.addItemListener(new ItemListener() {
+                @Override
+                public void itemStateChanged(ItemEvent e) {
+                    if (e.getStateChange() == ItemEvent.SELECTED) {
+                        doUpdateValuesList();
+                    }
+
+                }
+            });
+
+            this.cboValue.addItemListener(new ItemListener() {
+                @Override
+                public void itemStateChanged(ItemEvent e) {
+                    if (e.getStateChange() == ItemEvent.SELECTED) {
+                        if (cboValue.getSelectedItem() != null && cboValue.getSelectedItem() instanceof LabeledValue) {
+                            if (Objects.equals(((LabeledValue) cboValue.getSelectedItem()).getValue(), LOAD_MORE_ELEMENTS)) {
+                                setUpdateValuesLimits(updateValuesTimeLimit + 10, updateValuesFeaturesLimit + 20000);
+                            }
+                        }
+                    }
+                }
+            });
+
+            this.lblExtraFields.addMouseListener(new MouseAdapter() {
+                @Override
+                public void mouseClicked(MouseEvent e) {
+                    doSelectMoreFields();
+                }
+            });
+            doUpdateControllerByRelationalOperator();
+//      clear();
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private void doUpdateControllerByRelationalOperator() {
+        Object item = ((LabeledValue) ddnRelationalOperators.getSelectedItem()).getValue();
+        if (ExpressionBuilder.OPERATOR_IS_NULL.equals(item) || ExpressionBuilder.OPERATOR_IS_NOT_NULL.equals(item)) {
+            lblNull.setEnabled(false);
+            cboValue.setEnabled(false);
+            cboValue.setSelectedIndex(-1);
+        } else {
+            lblNull.setEnabled(true);
+            cboValue.setEnabled(true);
+        }
+
+    }
+
+    private FeatureType getFeatureType() {
+        try {
+            return this.store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+
+    private void doSelectMoreFields() {
+        DefaultFeatureAttributeSelectionPanel panel = new DefaultFeatureAttributeSelectionPanel(store, parameters.getFeatureType(store));
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        final Dialog dialog = winManager.createDialog(
+                panel,
+                "Select attribute",
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+            if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
+                doAddAndSelect(
+                        panel.getSelectedStore(),
+                        panel.getSelectedAttributeDescriptor(),
+                        panel.getSelectedPath()
+                );
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+
+    }
+
+    private void doAddAndSelect(FeatureStore theStore, FeatureAttributeDescriptor attrdesc, FeatureAttributeDescriptor[] path) {
+        ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        DefaultComboBoxModel<Field> model = (DefaultComboBoxModel) this.ddnFields.getModel();
+        if (attrdesc == null) {
+            dialogManager.messageDialog(
+                    i18n.getTranslation("_It_is_not_supported_to_search_through_this_field") + "\n"
+                    + i18n.getTranslation("_Field_not_found"),
+                    "_Warning",
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+
+        for (int i = 0; i < model.getSize(); i++) {
+            Field field = model.getElementAt(i);
+            FeatureAttributeDescriptor attrdescN = field.getDescriptor();
+            if (isTheSameStore(theStore, attrdescN.getStore())
+                    && StringUtils.equalsIgnoreCase(attrdesc.getName(), attrdescN.getName())) {
+                this.setAttribute(i);
+                return;
+            }
+        }
+        Field field = new Field(
+                path,
+                theStore,
+                attrdesc,
+                Search.OrderedAttribute.TYPE_REGURAL,
+                !isTheSameStore(store, theStore)
+        );
+        if (field.getPath().length > 2) {
+            dialogManager.messageDialog(
+                    i18n.getTranslation("_It_is_not_supported_to_search_through_this_field") + "\n"
+                    + i18n.getTranslation("_To_many_links"),
+                    "_Warning",
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+        FeatureAttributeDescriptor parentDescriptor = field.getParentDescriptor();
+        if (parentDescriptor != null) {
+            switch (parentDescriptor.getRelationType()) {
+                case DynField.RELATION_TYPE_AGGREGATE:
+                case DynField.RELATION_TYPE_COMPOSITION:
+                    if (getForeingKeyName(field.getFeatureStore(), this.store) == null) {
+                        dialogManager.messageDialog(
+                                "It not supported to search through this field." + "\n"
+                                + "The link field was not found.",
+                                "_Warning",
+                                JOptionPane.WARNING_MESSAGE
+                        );
+                        return;
+                    }
+                    if (getPrimaryKeyName(this.store) == null) {
+                        dialogManager.messageDialog(
+                                "It not supported to search through this field." + "\n"
+                                + "A simple primary key was not found.",
+                                "_Warning",
+                                JOptionPane.WARNING_MESSAGE
+                        );
+                        return;
+                    }
+            }
+        }
+        model.addElement(field);
+        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        this.ddnFields.getIcons().add(iconTheme.get(attrdesc.getDataType().getIconName()));
+        this.setAttribute(model.getSize() - 1);
+    }
+
+    public void clear() {
+        this.ddnRelationalOperators.setSelectedIndex(0);
+        if (this.ddnLogicalOperators != null) {
+            this.ddnLogicalOperators.setSelectedIndex(1);
+        }
+        this.cboValue.setSelectedIndex(-1);
+        this.ddnNullBehavior.setSelectedIndex(0);
+        doUpdateControllerByRelationalOperator();
+    }
+
+    private void doUpdateValuesList() {
+        final Field field = (Field) this.ddnFields.getSelectedItem();
+        if (field == null) {
+            return;
+        }
+        FeatureAttributeDescriptor descriptor = field.getDescriptor();
+        if (descriptor.getType() == DataTypes.DATE) {
+            if (this.dateController == null) {
+                this.dateController = ToolsSwingLocator.getToolsSwingManager().createDatePickerController(
+                        (JTextComponent) this.cboValue.getEditor().getEditorComponent(),
+                        null
+                );
+            }
+        } else {
+            if (this.dateController != null) {
+                this.dateController.uninstall();
+                this.dateController = null;
+            }
+        }
+
+        final List<Object> values = new ArrayList<>();
+        final DefaultComboBoxModel model = new DefaultComboBoxModel();
+        final FeatureStore theStore = field.getFeatureStore();
+        final FeatureQuery query;
+        if (this.store == theStore) {
+            query = parameters.getQuery().getCopy(); // theStore.createFeatureQuery();
+        } else {
+            query = theStore.createFeatureQuery();
+        }
+        query.addAttributeName(field.getDescriptor().getName());
+        query.setFilter("");
+        query.setLimit(updateValuesFeaturesLimit);
+        query.getGroupByColumns().clear();
+        query.getAggregateFunctions().clear();
+        Thread th = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                FeatureSet set = null;
+                try {
+                    canHasMoreElements = false;
+                    set = theStore.getFeatureSet(query);
+                    if (set.size() >= updateValuesFeaturesLimit) {
+                        canHasMoreElements = true;
+                    }
+                    final long timeLimit = System.currentTimeMillis() + updateValuesTimeLimit * 1000;
+                    set.accept(new Visitor() {
+                        @Override
+                        public void visit(Object o) throws VisitCanceledException, BaseException {
+                            Object value = ((Feature) o).get(field.getDescriptor().getName());
+                            if (value!=null && !values.contains(value)) {
+                                values.add(value);
+                            }
+                            if (System.currentTimeMillis() > timeLimit) {
+                                canHasMoreElements = true;
+                                throw new VisitCanceledException();
+                            }
+                            if (values.size() > 1000) {
+                                canHasMoreElements = true;
+                                throw new VisitCanceledException();
+                            }
+                        }
+                    });
+                } catch (VisitCanceledException ex) {
+                    canHasMoreElements = true;
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't update list of values of '" + field.getLabel() + "'.", ex);
+                } finally {
+                    DisposeUtils.disposeQuietly(set);
+                }
+                List<LabeledValue> elements = new ArrayList<>();
+                if (!values.isEmpty()) {
+                    LabeledValue[] availableValues = field.getDescriptor().getAvailableValues();
+                    Map<String, String> availableValuesMap = new HashMap<>();
+                    if (availableValues != null) {
+                        for (LabeledValue availableValue : availableValues) {
+                            availableValuesMap.put(
+                                    Objects.toString(availableValue.getValue()),
+                                    availableValue.getLabel()
+                            );
+                        }
+                    }
+                    elements.add(new LabeledValueImpl("", null, MAXLEN_IN_COMBOS));
+                    for (Object value : values) {
+                        String key;
+                        key = DataTypeUtils.toString(value);
+                        String label = availableValuesMap.getOrDefault(key, key);
+                        elements.add(new LabeledValueImpl(label, value, MAXLEN_IN_COMBOS));
+                    }
+                    elements.sort(null);
+
+                }
+                for (LabeledValue element : elements) {
+                    model.addElement(element);
+                }
+                if (canHasMoreElements) {
+                    model.addElement(new LabeledValueImpl("...", LOAD_MORE_ELEMENTS));
+                }
+                SwingUtilities.invokeLater(new Runnable() {
+                    @Override
+                    public void run() {
+                        setEnabled(false);
+                        cboValue.setModel(model);
+                        if (valueAssigned != null) {
+                            cboValue.setSelectedItem(valueAssigned);
+                            valueAssigned = null;
+                        }
+                        setEnabled(true);
+                    }
+                });
+            }
+        });
+        th.start();
+    }
+
+    public void setEnabled(boolean enabled) {
+        ddnFields.setEnabled(enabled);
+        if (ddnLogicalOperators != null) {
+            ddnLogicalOperators.setEnabled(enabled);
+        }
+        ddnRelationalOperators.setEnabled(enabled);
+        lblExtraFields.setEnabled(enabled);
+        cboValue.setEnabled(enabled);
+        doUpdateControllerByRelationalOperator();
+    }
+
+    public String getRelationalOperator() {
+        LabeledValue<String> op = (LabeledValue) this.ddnRelationalOperators.getSelectedItem();
+        if (op == null) {
+            return null;
+        }
+        return op.getValue();
+    }
+
+    public int setRelationalOperator(String name) {
+        int n = 0;
+        for (LabeledValue relationalOperator : relationalOperators) {
+            if (StringUtils.equalsIgnoreCase(name, (CharSequence) relationalOperator.getValue())) {
+                break;
+            }
+            n++;
+        }
+        if (this.relationalOperators.length <= n) {
+            return -1;
+        }
+        this.ddnRelationalOperators.setSelectedIndex(n);
+        doUpdateControllerByRelationalOperator();
+        return n;
+    }
+
+    public String getLogicalOperator() {
+        if (this.ddnLogicalOperators == null) {
+            return null;
+        }
+        LabeledValue<String> rel = (LabeledValue) this.ddnLogicalOperators.getSelectedItem();
+        if (rel == null) {
+            return null;
+        }
+        return rel.getValue();
+    }
+
+    public void setLogicalOperator(String operator) {
+        if (this.ddnLogicalOperators == null) {
+            return;
+        }
+        ComboBoxModel model = this.ddnLogicalOperators.getModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            LabeledValue modelValue = (LabeledValue) model.getElementAt(i);
+            String value = (String) modelValue.getValue();
+            if (StringUtils.equals(value, operator)) {
+                this.ddnLogicalOperators.setSelectedIndex(i);
+                break;
+            }
+        }
+    }
+
+    public Object getValue() {
+        final Field field = (Field) this.ddnFields.getSelectedItem();
+        if (field == null) {
+            return null;
+        }
+        Object v;
+        if (this.dateController == null) {
+            v = this.cboValue.getSelectedItem();
+        } else {
+            v = this.dateController.get();
+        }
+        if (v == null) {
+            return null;
+        }
+        if (v instanceof LabeledValue) {
+            v = ((LabeledValue) v).getValue();
+            if (v == null || v == LOAD_MORE_ELEMENTS) {
+                return null;
+            }
+        }
+        if (v instanceof CharSequence) {
+            if (StringUtils.isBlank((CharSequence) v)) {
+                return null;
+            }
+        }
+        Coercion coercion = field.getDescriptor().getDataType().getCoercion();
+        try {
+            return coercion.coerce(v);
+        } catch (CoercionException ex) {
+            return null;
+        }
+    }
+
+    public void setValue(Object value) {
+        //this.cboValue.setSelectedItem(value);
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                DefaultComboBoxModel model = (DefaultComboBoxModel) cboValue.getModel();
+                for (int i = 0; i < model.getSize(); i++) {
+                    Object item = model.getElementAt(i);
+                    if (item.equals(value)) {
+                        cboValue.setSelectedIndex(i);
+                        valueAssigned = value;
+                        return;
+                    }
+                }
+                // si no lo encuentra en el modelo lo a�ade
+                final Field field = (Field) ddnFields.getSelectedItem();
+                if (field == null) {
+                    return;
+                } else {
+                    LabeledValue[] availableValues = field.getDescriptor().getAvailableValues();
+                    Map<String, String> availableValuesMap = new HashMap<>();
+                    if (availableValues != null) {
+                        for (LabeledValue availableValue : availableValues) {
+                            availableValuesMap.put(
+                                    Objects.toString(availableValue.getValue()),
+                                    availableValue.getLabel()
+                            );
+                        }
+                    }
+                    String key;
+                    if (value instanceof Date) {
+                        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
+                        df.setLenient(false);
+                        key = df.format(value);
+                    } else {
+                        key = Objects.toString(value);
+                    }
+                    String label = availableValuesMap.getOrDefault(key, key);
+                    LabeledValueImpl newItem = new LabeledValueImpl(label, value);
+                    model.addElement(newItem);
+                    cboValue.setSelectedItem(newItem);
+                    valueAssigned = newItem;
+                }
+            }
+        });
+    }
+
+    private Field getCurrentField() {
+        final Field field = (Field) this.ddnFields.getSelectedItem();
+        return field;
+    }
+
+    public int setAttribute(String name) {
+        ComboBoxModel<Field> model = this.ddnFields.getModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            Field x = model.getElementAt(i);
+            if (StringUtils.equalsIgnoreCase(name, x.getValue())) {
+                this.setAttribute(i);
+                return i;
+            }
+        }
+        this.setAttribute(-1);
+        return -1;
+    }
+
+    public void setAttribute(int index) {
+        try {
+            this.ddnFields.setSelectedIndex(index);
+        } catch (Exception ex) {
+            this.ddnFields.setSelectedIndex(-1);
+        }
+        doUpdateValuesList();
+    }
+
+    public int setAttributePath(String[][] pathNames) {
+        // [[attributeName, storeName],...]
+        try {
+            if (pathNames.length == 1) {
+                String[] path = pathNames[pathNames.length - 1];
+                String name = path[0];
+                int index = this.setAttribute(name);
+                if (index == -1) {
+                    try {
+                        FeatureAttributeDescriptor attrDescriptor = store.getDefaultFeatureType().getAttributeDescriptor(name);
+                        FeatureAttributeDescriptor[] attributePath = new FeatureAttributeDescriptor[]{attrDescriptor};
+                        if (attrDescriptor == null) {
+                            I18nManager i18n = ToolsLocator.getI18nManager();
+                            ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+                            dialogManager.messageDialog(
+                                    i18n.getTranslation("_It_is_not_supported_to_search_through_this_field") + ":\n " + name + "\n"
+                                    + i18n.getTranslation("_Field_not_found_in_this_table"),
+                                    "_Warning",
+                                    JOptionPane.WARNING_MESSAGE
+                            );
+                            this.cboValue.setModel(new DefaultComboBoxModel());
+                        } else {
+                            doAddAndSelect(store, store.getDefaultFeatureType().getAttributeDescriptor(name), attributePath);
+                        }
+                    } catch (Exception ex) {
+                        LOGGER.warn("Not able to set single path into controller", ex);
+                        return -1;
+                    }
+                }
+                return index;
+            } else {
+                ComboBoxModel<Field> model = this.ddnFields.getModel();
+                String[] singleArrayPathNameDescriptors = new String[pathNames.length];
+                for (int i = 0; i < pathNames.length; i++) {
+                    singleArrayPathNameDescriptors[i] = pathNames[i][0];
+                }
+                // check the drop
+                for (int i = 0; i < model.getSize(); i++) {
+                    Field x = model.getElementAt(i);
+                    String[] arrayDescriptors = new String[x.getPath().length];
+                    FeatureAttributeDescriptor[] path = x.getPath();
+                    for (int j = 0; j < path.length; j++) {
+                        arrayDescriptors[j] = path[j].getName();
+                    }
+                    if (Arrays.equals(singleArrayPathNameDescriptors, arrayDescriptors)) {
+                        this.setAttribute(i);
+                        return i;
+                    }
+                }
+                // if not, addit to the drop
+                DataManager dataManager = DALLocator.getDataManager();
+                String tableName = pathNames[pathNames.length - 1][1]; // del ultimo path, coger el nombre tabla
+                FeatureStore theStore = (FeatureStore) dataManager.getStoresRepository().getStore(tableName);
+                String attributeName = pathNames[pathNames.length - 1][0]; // del ultimo path, coger el nombre attribute
+                if (theStore != null) {
+                    FeatureAttributeDescriptor attr;
+                    try {
+                        attr = theStore.getDefaultFeatureType().getAttributeDescriptor(attributeName);
+                        FeatureAttributeDescriptor[] attributePath = new FeatureAttributeDescriptor[2];
+                        String firstAttrName = pathNames[0][0];
+                        FeatureAttributeDescriptor firstAttr = store.getDefaultFeatureType().getAttributeDescriptor(firstAttrName);
+                        attributePath[0] = firstAttr;
+
+                        attributePath[1] = attr;
+                        doAddAndSelect(theStore, attr, attributePath);
+                        return SIZE_ORDERED_ATTRIBUTES - 1;
+                    } catch (Exception ex) {
+                        LOGGER.warn("Not able to set foreign path into controller", ex);
+                    }
+
+                }
+
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Controller not set.", ex);
+        }
+        this.setAttribute(-1);
+        return -1;
+    }
+
+    private boolean isTheSameStore(DataStore store1, DataStore store2) {
+        String store1FullName = store1.getFullName();
+        String store2FullName = store2.getFullName();
+        return StringUtils.equalsIgnoreCase(store1FullName, store2FullName);
+    }
+
+    private String getPrimaryKeyName(FeatureStore store) {
+        try {
+            FeatureAttributeDescriptor[] pk = store.getDefaultFeatureType().getPrimaryKey();
+            if (pk == null || pk.length != 1) {
+                return null;
+            }
+            return pk[0].getName();
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+
+    private String getForeingKeyName(FeatureStore store, FeatureStore foreingStore) {
+        try {
+            for (FeatureAttributeDescriptor descriptor : store.getDefaultFeatureType()) {
+                if (descriptor.isForeingKey()) {
+                    ForeingKey foreingKey = descriptor.getForeingKey();
+                    if (isTheSameStore(foreingStore, foreingKey.getFeatureStore(null))) {
+                        return descriptor.getName();
+                    }
+                }
+            }
+        } catch (DataException ex) {
+            return null;
+        }
+        return null;
+    }
+
+    public boolean isValid(StringBuilder message) {
+        try {
+            Object value = this.getValue();
+            if (value == null) {
+                return true;
+            }
+            Field field = this.getCurrentField();
+            if (field == null) {
+                return true;
+            }
+            if (field.getPath().length > 2) {
+                message.append("Invalid field '").append(field.getLabel()).append("'.\n");
+                return false;
+            }
+            FeatureAttributeDescriptor descriptor = field.getDescriptor();
+            switch (this.getRelationalOperator()) {
+                case ExpressionBuilder.OPERATOR_EQ:
+                case ExpressionBuilder.OPERATOR_NE:
+                case ExpressionBuilder.OPERATOR_GT:
+                case ExpressionBuilder.OPERATOR_GE:
+                case ExpressionBuilder.OPERATOR_LT:
+                case ExpressionBuilder.OPERATOR_LE:
+        try {
+                    descriptor.getDataType().coerce(value);
+                } catch (CoercionException ex) {
+                    message.append("Invalid value '")
+                            .append(Objects.toString(value))
+                            .append("' for field '")
+                            .append(descriptor.getLabel())
+                            .append("'.");
+                    message.append("\n");
+                    message.append(ex.getMessage());
+                    message.append("\n");
+                    return false;
+                }
+                break;
+
+                default:
+                case ExpressionBuilder.OPERATOR_ILIKE:
+                    break;
+            }
+            return true;
+        } catch (Exception ex) {
+            message.append("Invalid values '").append(ex.toString());
+            return false;
+        }
+    }
+
+    public ExpressionBuilder.Value getFilter() {
+        ExpressionBuilder.Value filter = null;
+
+        Object value = this.getValue();
+        if (value == null
+                && this.getRelationalOperator() != ExpressionBuilder.OPERATOR_IS_NULL
+                && this.getRelationalOperator() != ExpressionBuilder.OPERATOR_IS_NOT_NULL) {
+            return null;
+        }
+        Field field = this.getCurrentField();
+        if (field == null) {
+            return null;
+        }
+        if (field.getPath().length > 2) {
+            // No soportado
+            return null;
+        }
+        DataManager dataManager = DALLocator.getDataManager();
+        DALExpressionBuilder builder = dataManager.createDALExpressionBuilder();
+        FeatureAttributeDescriptor parentDescriptor = field.getParentDescriptor();
+        FeatureAttributeDescriptor descriptor = field.getDescriptor();
+
+        ExpressionBuilder.Constant value_constant = null;
+
+        switch (this.getRelationalOperator()) {
+            case ExpressionBuilder.OPERATOR_IS_NULL:
+                filter = getFilterForOperatorNull(parentDescriptor, descriptor, builder, field);
+                return filter;
+            case ExpressionBuilder.OPERATOR_IS_NOT_NULL:
+                filter = getFilterForOperatorNotNull(parentDescriptor, descriptor, builder, field);
+                return filter;
+            case ExpressionBuilder.OPERATOR_EQ:
+            case ExpressionBuilder.OPERATOR_NE:
+            case ExpressionBuilder.OPERATOR_GT:
+            case ExpressionBuilder.OPERATOR_GE:
+            case ExpressionBuilder.OPERATOR_LT:
+            case ExpressionBuilder.OPERATOR_LE:
+        try {
+                value_constant = builder.expression().constant(
+                        descriptor.getDataType().coerce(value)
+                );
+            } catch (CoercionException ex) {
+                return null;
+            }
+            break;
+
+            default:
+            case ExpressionBuilder.OPERATOR_ILIKE:
+                value_constant = builder.expression().constant(value);
+                break;
+        }
+
+        if (parentDescriptor == null) {
+            // Se busca en campos de la misma tabla.
+            filter = builder.expression().binaryOperator(
+                    this.getRelationalOperator(),
+                    builder.expression().column(this.store.getName(), descriptor.getName()),
+                    value_constant
+            );
+
+            ExpressionBuilder.Value nullValue = builder.expression().column(this.store.getName(), descriptor.getName());
+            filter = addNullBehavior(builder, filter, nullValue);
+
+        } else {
+            // Se busca en campos de una tabla relacionada.
+            switch (parentDescriptor.getRelationType()) {
+                case DynField.RELATION_TYPE_COLLABORATION:
+                case DynField.RELATION_TYPE_IDENTITY:
+                    filter = builder.expression().binaryOperator(
+                            this.getRelationalOperator(),
+                            builder.foreing_value(
+                                    parentDescriptor.getName(),
+                                    descriptor.getName()
+                            ),
+                            value_constant
+                    );
+                    ExpressionBuilder.Value nullValue = builder.foreing_value(
+                            parentDescriptor.getName(),
+                            descriptor.getName()
+                    );
+                    filter = addNullBehavior(builder, filter, nullValue);
+                    break;
+
+                case DynField.RELATION_TYPE_AGGREGATE:
+                case DynField.RELATION_TYPE_COMPOSITION:
+                    ExpressionBuilder.Value op_composition = null;
+                    op_composition = builder.expression().binaryOperator(
+                            this.getRelationalOperator(),
+                            builder.expression().column(
+                                    field.getFeatureStore().getName(),
+                                    descriptor.getName()
+                            ),
+                            value_constant
+                    );
+                    ExpressionBuilder.Value null_value = builder.expression().column(
+                            field.getFeatureStore().getName(),
+                            descriptor.getName()
+                    );
+                    op_composition = addNullBehavior(builder, op_composition, null_value);
+
+                    filter = builder.exists(builder.select()
+                            .column(parentDescriptor.getFeatureType().getPrimaryKey()[0].getName())
+                            .from(field.getFeatureStore().getName())
+                            .limit(1)
+                            .where(
+                                    builder.expression().and(
+                                            builder.expression().eq(
+                                                    builder.expression().column(
+                                                            field.getFeatureStore().getName(),
+                                                            getForeingKeyName(field.getFeatureStore(), this.store)
+                                                    ),
+                                                    builder.expression().column(
+                                                            this.store.getName(),
+                                                            getPrimaryKeyName(this.store)
+                                                    )
+                                            ),
+                                            op_composition
+                                    )
+                            )
+                            .toValue()
+                    );
+                    break;
+            }
+        }
+
+        filter = builder.expression().group(filter);
+        return filter;
+    }
+
+    public JsonObject toJson() {
+        JsonObjectBuilder fieldBuilder = Json.createObjectBuilder();
+
+        JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
+        for (FeatureAttributeDescriptor featureAttributeDescriptor : this.getCurrentField().getPath()) {
+            JsonArrayBuilder pathArray = Json.createArrayBuilder();
+
+            //first value: name field
+            String fieldName = featureAttributeDescriptor.getName();
+            pathArray.add(fieldName);
+            //second value: name store
+            String storeName = featureAttributeDescriptor.getFeatureType().getStore().getName();
+            pathArray.add(storeName);
+
+            arrayBuilder.add(pathArray.build());
+        }
+        String relational = this.getRelationalOperator();
+        Object value = this.getValue();
+        String strValue = DataTypeUtils.toString(value);
+        String logical = this.getLogicalOperator();
+
+        fieldBuilder.add("fieldPath", arrayBuilder.build());
+        fieldBuilder.add("relational", relational);
+        if (!StringUtils.isEmpty(strValue)) {
+            fieldBuilder.add("strValue", strValue);
+        }
+        if (!StringUtils.isEmpty(logical)) {
+            fieldBuilder.add("logical", logical);
+        }
+        int nullBehavior = this.getNullBehavior();
+        fieldBuilder.add("nullBehavior", nullBehavior);
+        return fieldBuilder.build();
+    }
+
+    public void fromJson(JsonObject jsonState) {
+        if (jsonState == null) {
+            return;
+        }
+
+        JsonArray fieldPath = jsonState.getJsonArray("fieldPath");
+
+        // array of arrays
+        String[][] arrayNew = new String[fieldPath.size()][2];
+        for (int i = 0; i < fieldPath.size(); i++) {
+            String[] arrayField = new String[2];
+            arrayField[0] = fieldPath.getJsonArray(i).getString(0);
+            arrayField[1] = fieldPath.getJsonArray(i).getString(1);
+            arrayNew[i] = arrayField;
+        }
+        this.setAttributePath(arrayNew);  //usar el doAddAndSelect
+
+        String relational = jsonState.getString("relational");
+        this.setRelationalOperator(relational);
+
+        if (jsonState.containsKey("strValue")) {
+            String strValue = jsonState.getString("strValue");
+//        SwingUtilities.invokeLater(new Runnable() {
+//            @Override
+//            public void run() {
+            setValue(strValue);
+//            }
+//        });
+        }
+        if (jsonState.containsKey("logical")) {
+            String logical = jsonState.getString("logical");
+            this.setLogicalOperator(logical);
+        }
+        if (jsonState.containsKey("nullBehavior")) {
+            int nullBehavior = jsonState.getInt("nullBehavior");
+            this.setNullBehavior(nullBehavior);
+        }
+
+    }
+
+    public void setUpdateValuesLimits(int limit, int featuresLimit) {
+        this.updateValuesTimeLimit = limit;
+        this.updateValuesFeaturesLimit = featuresLimit;
+        doUpdateValuesList();
+    }
+
+    public int getNullBehavior() {
+        return (int) ((LabeledValue) this.ddnNullBehavior.getSelectedItem()).getValue();
+    }
+
+    public int setNullBehavior(int nullBehaviorValue) {
+        int n = 0;
+        for (LabeledValue nullBehavior : nullBehaviors) {
+            int toInt = (int) nullBehavior.getValue();
+            if (nullBehaviorValue == toInt) {
+                break;
+            }
+            n++;
+        }
+        if (this.nullBehaviors.length <= n) {
+            return -1;
+        }
+        this.ddnNullBehavior.setSelectedIndex(n);
+        return n;
+    }
+
+    private ExpressionBuilder.Value addNullBehavior(DALExpressionBuilder builder, ExpressionBuilder.Value filter, ExpressionBuilder.Value nullValue) {
+        if (this.getRelationalOperator() != ExpressionBuilder.OPERATOR_IS_NULL && this.getRelationalOperator() != ExpressionBuilder.OPERATOR_IS_NOT_NULL) {
+            if (this.getNullBehavior() == NULL_AS_TRUE) {
+                ExpressionBuilder.Function null_function = builder.expression().is_null(nullValue);
+                filter = builder.expression().or(null_function, filter);
+            } else if (this.getNullBehavior() == NULL_AS_FALSE) {
+                ExpressionBuilder.Function null_function = builder.expression().not_is_null(nullValue);
+                filter = builder.expression().and(null_function, filter);
+            }
+        }
+        return filter;
+    }
+
+    private ExpressionBuilder.Value getFilterForOperatorNull(
+            FeatureAttributeDescriptor parentDescriptor,
+            FeatureAttributeDescriptor descriptor,
+            DALExpressionBuilder builder,
+            Field field) {
+
+        ExpressionBuilder.Value filter = null;
+        if (parentDescriptor == null) {
+            filter = builder.expression().is_null(builder.expression().column(this.store.getName(), descriptor.getName()));
+        } else {
+            // Se busca en campos de una tabla relacionada.
+            switch (parentDescriptor.getRelationType()) {
+                case DynField.RELATION_TYPE_COLLABORATION:
+                case DynField.RELATION_TYPE_IDENTITY:
+                    filter = builder.expression().is_null(builder.foreing_value(
+                            parentDescriptor.getName(),
+                            descriptor.getName()
+                    ));
+                case DynField.RELATION_TYPE_AGGREGATE:
+                case DynField.RELATION_TYPE_COMPOSITION:
+                    ExpressionBuilder.Value op_composition = null;
+                    op_composition = builder.expression().is_null(builder.expression().column(
+                            field.getFeatureStore().getName(),
+                            descriptor.getName()
+                    ));
+                    filter = builder.exists(builder.select()
+                            .column(parentDescriptor.getFeatureType().getPrimaryKey()[0].getName())
+                            .from(field.getFeatureStore().getName())
+                            .limit(1)
+                            .where(
+                                    builder.expression().and(
+                                            builder.expression().eq(
+                                                    builder.expression().column(
+                                                            field.getFeatureStore().getName(),
+                                                            getForeingKeyName(field.getFeatureStore(), this.store)
+                                                    ),
+                                                    builder.expression().column(
+                                                            this.store.getName(),
+                                                            getPrimaryKeyName(this.store)
+                                                    )
+                                            ),
+                                            op_composition
+                                    )
+                            )
+                            .toValue()
+                    );
+            }
+        }
+
+        filter = builder.expression().group(filter);
+        return filter;
+    }
+
+    private ExpressionBuilder.Value getFilterForOperatorNotNull(
+            FeatureAttributeDescriptor parentDescriptor,
+            FeatureAttributeDescriptor descriptor,
+            DALExpressionBuilder builder,
+            Field field) {
+
+        ExpressionBuilder.Value filter = null;
+        if (parentDescriptor == null) {
+            filter = builder.expression().not_is_null(builder.expression().column(this.store.getName(), descriptor.getName()));
+        } else {
+            // Se busca en campos de una tabla relacionada.
+            switch (parentDescriptor.getRelationType()) {
+                case DynField.RELATION_TYPE_COLLABORATION:
+                case DynField.RELATION_TYPE_IDENTITY:
+                    filter = builder.expression().not_is_null(builder.foreing_value(
+                            parentDescriptor.getName(),
+                            descriptor.getName()
+                    ));
+                case DynField.RELATION_TYPE_AGGREGATE:
+                case DynField.RELATION_TYPE_COMPOSITION:
+                    ExpressionBuilder.Value op_composition = null;
+                    op_composition = builder.expression().not_is_null(builder.expression().column(
+                            field.getFeatureStore().getName(),
+                            descriptor.getName()
+                    ));
+
+                    filter = builder.exists(builder.select()
+                            .column(parentDescriptor.getFeatureType().getPrimaryKey()[0].getName())
+                            .from(field.getFeatureStore().getName())
+                            .limit(1)
+                            .where(
+                                    builder.expression().and(
+                                            builder.expression().eq(
+                                                    builder.expression().column(
+                                                            field.getFeatureStore().getName(),
+                                                            getForeingKeyName(field.getFeatureStore(), this.store)
+                                                    ),
+                                                    builder.expression().column(
+                                                            this.store.getName(),
+                                                            getPrimaryKeyName(this.store)
+                                                    )
+                                            ),
+                                            op_composition
+                                    )
+                            )
+                            .toValue()
+                    );
+            }
+        }
+
+        filter = builder.expression().group(filter);
+        return filter;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView.java	(revision 46118)
@@ -0,0 +1,473 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultSearchPanelView extends JPanel
+{
+   JTabbedPane tabSearchMode = new JTabbedPane();
+   JComboBox cboValue1 = new JComboBox();
+   JComboBox cboValue2 = new JComboBox();
+   JComboBox cboValue3 = new JComboBox();
+   JComboBox cboValue4 = new JComboBox();
+   JLabel lblRelationalOperator2 = new JLabel();
+   JLabel lblRelationalOperator3 = new JLabel();
+   JLabel lblRelationalOperator4 = new JLabel();
+   JLabel lblLogicalOperators1 = new JLabel();
+   JLabel lblLogicalOperators2 = new JLabel();
+   JLabel lblLogicalOperators3 = new JLabel();
+   JLabel lblField1 = new JLabel();
+   JLabel lblField2 = new JLabel();
+   JLabel lblField3 = new JLabel();
+   JLabel lblField4 = new JLabel();
+   JLabel lblExtraFields1 = new JLabel();
+   JLabel lblExtraFields2 = new JLabel();
+   JLabel lblExtraFields3 = new JLabel();
+   JLabel lblExtraFields4 = new JLabel();
+   JLabel lblRelationalOperator1 = new JLabel();
+   JButton btnRemoveAccumulatedFilter = new JButton();
+   JButton btnAddAccumulatedFilter = new JButton();
+   JButton btnViewAccumulatedFilter = new JButton();
+   JLabel lblNull1 = new JLabel();
+   JLabel lblNull2 = new JLabel();
+   JLabel lblNull3 = new JLabel();
+   JLabel lblNull4 = new JLabel();
+   JLabel lblExpressionDeBusqueda = new JLabel();
+   JButton btnAdvancedExpression = new JButton();
+   JButton btnAdvancedExpressionHistory = new JButton();
+   JButton btnAdvancedExpressionBookmarks = new JButton();
+   JTextArea txtAdvancedExpression = new JTextArea();
+   JTable tblResults = new JTable();
+   JButton btnSearch = new JButton();
+   JButton btnClear = new JButton();
+   JLabel lblMsg = new JLabel();
+   JPanel pnlActions = new JPanel();
+   JPanel pnlCfgActions = new JPanel();
+   JButton btnHistory = new JButton();
+   JButton btnBookmarks = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultSearchPanelView()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Main method for panel
+    */
+   public static void main(String[] args)
+   {
+      JFrame frame = new JFrame();
+      frame.setSize(600, 400);
+      frame.setLocation(100, 100);
+      frame.getContentPane().add(new DefaultSearchPanelView());
+      frame.setVisible(true);
+
+      frame.addWindowListener( new WindowAdapter()
+      {
+         public void windowClosing( WindowEvent evt )
+         {
+            System.exit(0);
+         }
+      });
+   }
+
+   /**
+    * 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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabSearchMode.setName("tabSearchMode");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      tabSearchMode.setBorder(emptyborder1);
+      tabSearchMode.setTabPlacement(JTabbedPane.BOTTOM);
+      tabSearchMode.addTab("_Simplified",null,createPanel1());
+      tabSearchMode.addTab("_Advanced",null,createPanel3());
+      jpanel1.add(tabSearchMode,cc.xy(2,3));
+
+      tblResults.setName("tblResults");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblResults);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,6));
+
+      jpanel1.add(createPanel4(),cc.xy(2,4));
+      jpanel1.add(createPanel5(),cc.xy(2,8));
+      jpanel1.add(createPanel6(),cc.xy(2,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:12DLU:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboValue1.setEditable(true);
+      cboValue1.setName("cboValue1");
+      cboValue1.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue1,cc.xywh(2,6,3,1));
+
+      cboValue2.setEditable(true);
+      cboValue2.setName("cboValue2");
+      cboValue2.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue2,cc.xywh(8,6,3,1));
+
+      cboValue3.setEditable(true);
+      cboValue3.setName("cboValue3");
+      cboValue3.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue3,cc.xywh(14,6,3,1));
+
+      cboValue4.setEditable(true);
+      cboValue4.setName("cboValue4");
+      cboValue4.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue4,cc.xywh(20,6,2,1));
+
+      lblRelationalOperator2.setName("lblRelationalOperator2");
+      lblRelationalOperator2.setText("Igual");
+      lblRelationalOperator2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator2,cc.xy(8,4));
+
+      lblRelationalOperator3.setName("lblRelationalOperator3");
+      lblRelationalOperator3.setText("Igual");
+      lblRelationalOperator3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator3,cc.xy(14,4));
+
+      lblRelationalOperator4.setName("lblRelationalOperator4");
+      lblRelationalOperator4.setText("Igual");
+      lblRelationalOperator4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator4,cc.xy(20,4));
+
+      lblLogicalOperators1.setName("lblLogicalOperators1");
+      lblLogicalOperators1.setText("WWWWW");
+      lblLogicalOperators1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators1,cc.xy(6,2));
+
+      lblLogicalOperators2.setName("lblLogicalOperators2");
+      lblLogicalOperators2.setText("WWWWW");
+      lblLogicalOperators2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators2,cc.xy(12,2));
+
+      lblLogicalOperators3.setName("lblLogicalOperators3");
+      lblLogicalOperators3.setText("WWWWW");
+      lblLogicalOperators3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators3,cc.xy(18,2));
+
+      lblField1.setName("lblField1");
+      lblField1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField1,cc.xy(2,2));
+
+      lblField2.setName("lblField2");
+      lblField2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField2,cc.xy(8,2));
+
+      lblField3.setName("lblField3");
+      lblField3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField3,cc.xy(14,2));
+
+      lblField4.setName("lblField4");
+      lblField4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField4,cc.xy(20,2));
+
+      lblExtraFields1.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields1.setName("lblExtraFields1");
+      jpanel1.add(lblExtraFields1,cc.xy(4,2));
+
+      lblExtraFields2.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields2.setName("lblExtraFields2");
+      jpanel1.add(lblExtraFields2,cc.xy(10,2));
+
+      lblExtraFields3.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields3.setName("lblExtraFields3");
+      jpanel1.add(lblExtraFields3,cc.xy(16,2));
+
+      lblExtraFields4.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields4.setName("lblExtraFields4");
+      jpanel1.add(lblExtraFields4,cc.xy(21,2));
+
+      lblRelationalOperator1.setName("lblRelationalOperator1");
+      lblRelationalOperator1.setText("Igual");
+      lblRelationalOperator1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator1,cc.xy(2,4));
+
+      jpanel1.add(createPanel2(),cc.xywh(2,8,20,1));
+      lblNull1.setName("lblNull1");
+      lblNull1.setText("");
+      lblNull1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull1,cc.xy(4,4));
+
+      lblNull2.setName("lblNull2");
+      lblNull2.setText("");
+      lblNull2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull2,cc.xy(10,4));
+
+      lblNull3.setName("lblNull3");
+      lblNull3.setText("");
+      lblNull3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull3,cc.xy(16,4));
+
+      lblNull4.setName("lblNull4");
+      lblNull4.setText("");
+      lblNull4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull4,cc.xy(21,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnRemoveAccumulatedFilter.setActionCommand("...");
+      btnRemoveAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png"));
+      btnRemoveAccumulatedFilter.setName("btnRemoveAccumulatedFilter");
+      btnRemoveAccumulatedFilter.setToolTipText("_Remove_accumulated_filter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnRemoveAccumulatedFilter.setBorder(emptyborder1);
+      jpanel1.add(btnRemoveAccumulatedFilter,cc.xy(3,1));
+
+      btnAddAccumulatedFilter.setActionCommand("...");
+      btnAddAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png"));
+      btnAddAccumulatedFilter.setName("btnAddAccumulatedFilter");
+      btnAddAccumulatedFilter.setToolTipText("_Accumulate_filter");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnAddAccumulatedFilter.setBorder(emptyborder2);
+      jpanel1.add(btnAddAccumulatedFilter,cc.xy(7,1));
+
+      btnViewAccumulatedFilter.setActionCommand("...");
+      btnViewAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png"));
+      btnViewAccumulatedFilter.setName("btnViewAccumulatedFilter");
+      btnViewAccumulatedFilter.setToolTipText("_View_accumulated_filter");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnViewAccumulatedFilter.setBorder(emptyborder3);
+      jpanel1.add(btnViewAccumulatedFilter,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4,6 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblExpressionDeBusqueda.setName("lblExpressionDeBusqueda");
+      lblExpressionDeBusqueda.setText("_Insert_a_search_expression");
+      jpanel1.add(lblExpressionDeBusqueda,cc.xy(2,2));
+
+      btnAdvancedExpression.setActionCommand("...");
+      btnAdvancedExpression.setName("btnAdvancedExpression");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpression.setBorder(emptyborder1);
+      jpanel1.add(btnAdvancedExpression,new CellConstraints(4,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      btnAdvancedExpressionHistory.setActionCommand("...");
+      btnAdvancedExpressionHistory.setName("btnAdvancedExpressionHistory");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpressionHistory.setBorder(emptyborder2);
+      jpanel1.add(btnAdvancedExpressionHistory,new CellConstraints(6,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      btnAdvancedExpressionBookmarks.setActionCommand("...");
+      btnAdvancedExpressionBookmarks.setName("btnAdvancedExpressionBookmarks");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpressionBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnAdvancedExpressionBookmarks,new CellConstraints(8,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtAdvancedExpression.setName("txtAdvancedExpression");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtAdvancedExpression);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnSearch.setActionCommand("Buscar");
+      btnSearch.setName("btnSearch");
+      btnSearch.setText("_Search");
+      jpanel1.add(btnSearch,cc.xy(4,1));
+
+      btnClear.setActionCommand("Limpiar");
+      btnClear.setName("btnClear");
+      btnClear.setText("_Clear");
+      jpanel1.add(btnClear,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblMsg.setName("lblMsg");
+      jpanel1.add(lblMsg,cc.xy(1,1));
+
+      pnlActions.setName("pnlActions");
+      jpanel1.add(pnlActions,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel6()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      pnlCfgActions.setName("pnlCfgActions");
+      pnlCfgActions.setOpaque(false);
+      jpanel1.add(pnlCfgActions,cc.xy(7,1));
+
+      btnHistory.setActionCommand("...");
+      btnHistory.setName("btnHistory");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnHistory.setBorder(emptyborder1);
+      jpanel1.add(btnHistory,cc.xy(3,1));
+
+      btnBookmarks.setActionCommand("...");
+      btnBookmarks.setName("btnBookmarks");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnBookmarks.setBorder(emptyborder2);
+      jpanel1.add(btnBookmarks,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4,6 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.xml	(revision 46118)
@@ -0,0 +1,3834 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/osc/devel/org.gvsig.desktop/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/searchpanel/DefaultSearchPanelView2.xml</at>
+   <at name="rowspecs">CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:MIN(12DLU;PREF):GROW(1.0),FILL:4DLU: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">3</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">fill</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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="componentCount">2</at>
+            <at name="tabPlacement">3</at>
+            <at name="name">tabSearchMode</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Simplified</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.927289851</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">6</at>
+                             <at name="colspan">3</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue1</at>
+                              <at name="width">142</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">8</at>
+                             <at name="row">6</at>
+                             <at name="colspan">3</at>
+                             <at name="rowspan">1</at>
+                             <at name="halign">fill</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue2</at>
+                              <at name="width">142</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">14</at>
+                             <at name="row">6</at>
+                             <at name="colspan">3</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue3</at>
+                              <at name="width">142</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">20</at>
+                             <at name="row">6</at>
+                             <at name="colspan">2</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboValue4</at>
+                              <at name="width">136</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator1</at>
+                              <at name="width">116</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">8</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator2</at>
+                              <at name="width">116</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">14</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator3</at>
+                              <at name="width">116</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">20</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblRelationalOperator4</at>
+                              <at name="width">116</at>
+                              <at name="text">Igual</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">6</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators1</at>
+                              <at name="width">50</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">12</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators2</at>
+                              <at name="width">50</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">18</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblLogicalOperators3</at>
+                              <at name="width">50</at>
+                              <at name="text">WWWWW</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField1</at>
+                              <at name="width">116</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">8</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField2</at>
+                              <at name="width">116</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">14</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField3</at>
+                              <at name="width">116</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">20</at>
+                             <at name="row">2</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblField4</at>
+                              <at name="width">116</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">4</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields1</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">10</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields2</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">16</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields3</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">21</at>
+                             <at name="row">2</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">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="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="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png</at>
+                                <at name="description">featurestore-column.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">lblExtraFields4</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull1</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">10</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull2</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">16</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull3</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</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">21</at>
+                             <at name="row">4</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">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="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="horizontalAlignment">0</at>
+                              <at name="name">lblNull4</at>
+                              <at name="width">16</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">12</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">2</at>
+                             <at name="row">8</at>
+                             <at name="colspan">20</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.FormComponent</at>
+                          </super>
+                          <at name="id">embedded.227043043</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">3</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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-clear-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnRemoveAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_Remove_accumulated_filter</at>
+                                   <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-add-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnAddAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_Accumulate_filter</at>
+                                   <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="icon">
+                                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                                     <at name="embedded">false</at>
+                                     <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png</at>
+                                     <at name="description">search-simplifiedcondition-edit-accumulate.png</at>
+                                     <at name="width">16</at>
+                                     <at name="height">16</at>
+                                    </object>
+                                   </at>
+                                   <at name="name">btnViewAccumulatedFilter</at>
+                                   <at name="width">20</at>
+                                   <at name="toolTipText">_View_accumulated_filter</at>
+                                   <at name="height">20</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="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>
+                              <at name="name"/>
+                              <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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="1">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="7"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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"/>
+                             </at>
+                            </object>
+                           </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="8">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="22"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Advanced</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.1690304250</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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">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="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="name">lblExpressionDeBusqueda</at>
+                              <at name="width">1418</at>
+                              <at name="text">_Insert_a_search_expression</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpression</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">6</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpressionHistory</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">8</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnAdvancedExpressionBookmarks</at>
+                              <at name="width">12</at>
+                              <at name="height">12</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">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.JTextArea</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTextArea</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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>
+                              <at name="name">txtAdvancedExpression</at>
+                              <at name="width">10326</at>
+                              <at name="text">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</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="height">83</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="5">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="9"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">1531</at>
+            <at name="tabCount">2</at>
+            <at name="height">212</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">6</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">fill</at>
+           <at name="valign">fill</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at name="componentclass">com.jeta.forms.gui.form.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">2</at>
+            <at name="name">tabResults</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_normalResults</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.354030568</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.JTable</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTable</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="name">tblResults</at>
+                              <at name="width">1486</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="height">32</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_searchPostProcessResults</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.1455188520</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:4DLU:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.JTable</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTable</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="name">tblSearchPostProcessResults</at>
+                              <at name="width">1486</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="height">32</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">1531</at>
+            <at name="tabCount">2</at>
+            <at name="height">473</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">4</at>
+           <at name="colspan">1</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.FormComponent</at>
+        </super>
+        <at name="id">embedded.376575569</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:10PX: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">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.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="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="actionCommand">Limpiar</at>
+                 <at name="name">btnClear</at>
+                 <at name="width">64</at>
+                 <at name="text">_Clear</at>
+                 <at name="height">24</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">4</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.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="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="actionCommand">Buscar</at>
+                 <at name="name">btnSearch</at>
+                 <at name="width">72</at>
+                 <at name="text">_Search</at>
+                 <at name="height">24</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">6</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.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="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="actionCommand">Buscar</at>
+                 <at name="name">btnSearchPostProcess</at>
+                 <at name="width">100</at>
+                 <at name="text">_PostProcess</at>
+                 <at name="height">24</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</at>
+           <at name="colspan">1</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.FormComponent</at>
+        </super>
+        <at name="id">embedded.1991029588</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:10PX: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">3</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="name">btnHistory</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="name">btnBookmarks</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="opaque">false</at>
+                 <at name="name">pnlCfgActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</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">embedded.1873889208</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:6PX:NONE,FILL:DEFAULT:NONE,FILL:6PX:NONE,FILL:DEFAULT:GROW(1.0),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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JProgressBar</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JProgressBar</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">pgbStatus</at>
+                 <at name="width">148</at>
+                 <at name="height">14</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">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.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="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="name">lblStatusTitle</at>
+                 <at name="width">12</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">12</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">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.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="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="name">lblMsg</at>
+                 <at name="width">1330</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">12</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">6</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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="name">pnlActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="6"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanelView2.java	(revision 46118)
@@ -0,0 +1,522 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultSearchPanelView2 extends JPanel
+{
+   JTabbedPane tabSearchMode = new JTabbedPane();
+   JComboBox cboValue1 = new JComboBox();
+   JComboBox cboValue2 = new JComboBox();
+   JComboBox cboValue3 = new JComboBox();
+   JComboBox cboValue4 = new JComboBox();
+   JLabel lblRelationalOperator1 = new JLabel();
+   JLabel lblRelationalOperator2 = new JLabel();
+   JLabel lblRelationalOperator3 = new JLabel();
+   JLabel lblRelationalOperator4 = new JLabel();
+   JLabel lblLogicalOperators1 = new JLabel();
+   JLabel lblLogicalOperators2 = new JLabel();
+   JLabel lblLogicalOperators3 = new JLabel();
+   JLabel lblField1 = new JLabel();
+   JLabel lblField2 = new JLabel();
+   JLabel lblField3 = new JLabel();
+   JLabel lblField4 = new JLabel();
+   JLabel lblExtraFields1 = new JLabel();
+   JLabel lblExtraFields2 = new JLabel();
+   JLabel lblExtraFields3 = new JLabel();
+   JLabel lblExtraFields4 = new JLabel();
+   JLabel lblNull1 = new JLabel();
+   JLabel lblNull2 = new JLabel();
+   JLabel lblNull3 = new JLabel();
+   JLabel lblNull4 = new JLabel();
+   JButton btnRemoveAccumulatedFilter = new JButton();
+   JButton btnAddAccumulatedFilter = new JButton();
+   JButton btnViewAccumulatedFilter = new JButton();
+   JLabel lblExpressionDeBusqueda = new JLabel();
+   JButton btnAdvancedExpression = new JButton();
+   JButton btnAdvancedExpressionHistory = new JButton();
+   JButton btnAdvancedExpressionBookmarks = new JButton();
+   JTextArea txtAdvancedExpression = new JTextArea();
+   JTabbedPane tabResults = new JTabbedPane();
+   JTable tblResults = new JTable();
+   JTable tblSearchPostProcessResults = new JTable();
+   JButton btnClear = new JButton();
+   JButton btnSearch = new JButton();
+   JButton btnSearchPostProcess = new JButton();
+   JButton btnHistory = new JButton();
+   JButton btnBookmarks = new JButton();
+   JPanel pnlCfgActions = new JPanel();
+   JProgressBar pgbStatus = new JProgressBar();
+   JLabel lblStatusTitle = new JLabel();
+   JLabel lblMsg = new JLabel();
+   JPanel pnlActions = new JPanel();
+
+   /**
+    * Default constructor
+    */
+   public DefaultSearchPanelView2()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Main method for panel
+    */
+   public static void main(String[] args)
+   {
+      JFrame frame = new JFrame();
+      frame.setSize(600, 400);
+      frame.setLocation(100, 100);
+      frame.getContentPane().add(new DefaultSearchPanelView2());
+      frame.setVisible(true);
+
+      frame.addWindowListener( new WindowAdapter()
+      {
+         public void windowClosing( WindowEvent evt )
+         {
+            System.exit(0);
+         }
+      });
+   }
+
+   /**
+    * 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:4DLU:NONE,FILL:MIN(12DLU;PREF):GROW(1.0),FILL:4DLU:NONE","CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabSearchMode.setName("tabSearchMode");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      tabSearchMode.setBorder(emptyborder1);
+      tabSearchMode.setTabPlacement(JTabbedPane.BOTTOM);
+      tabSearchMode.addTab("_Simplified",null,createPanel1());
+      tabSearchMode.addTab("_Advanced",null,createPanel3());
+      jpanel1.add(tabSearchMode,new CellConstraints(2,3,1,1,CellConstraints.FILL,CellConstraints.DEFAULT));
+
+      tabResults.setName("tabResults");
+      tabResults.addTab("_normalResults",null,createPanel4());
+      tabResults.addTab("_searchPostProcessResults",null,createPanel5());
+      jpanel1.add(tabResults,new CellConstraints(2,6,1,1,CellConstraints.FILL,CellConstraints.FILL));
+
+      jpanel1.add(createPanel6(),new CellConstraints(2,4,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+      jpanel1.add(createPanel7(),new CellConstraints(2,2,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+      jpanel1.add(createPanel8(),cc.xy(2,8));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(120PX;DEFAULT):NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboValue1.setEditable(true);
+      cboValue1.setName("cboValue1");
+      cboValue1.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue1,cc.xywh(2,6,3,1));
+
+      cboValue2.setEditable(true);
+      cboValue2.setName("cboValue2");
+      cboValue2.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue2,new CellConstraints(8,6,3,1,CellConstraints.FILL,CellConstraints.DEFAULT));
+
+      cboValue3.setEditable(true);
+      cboValue3.setName("cboValue3");
+      cboValue3.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue3,cc.xywh(14,6,3,1));
+
+      cboValue4.setEditable(true);
+      cboValue4.setName("cboValue4");
+      cboValue4.setRequestFocusEnabled(false);
+      jpanel1.add(cboValue4,cc.xywh(20,6,2,1));
+
+      lblRelationalOperator1.setName("lblRelationalOperator1");
+      lblRelationalOperator1.setText("Igual");
+      lblRelationalOperator1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator1,cc.xy(2,4));
+
+      lblRelationalOperator2.setName("lblRelationalOperator2");
+      lblRelationalOperator2.setText("Igual");
+      lblRelationalOperator2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator2,cc.xy(8,4));
+
+      lblRelationalOperator3.setName("lblRelationalOperator3");
+      lblRelationalOperator3.setText("Igual");
+      lblRelationalOperator3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator3,cc.xy(14,4));
+
+      lblRelationalOperator4.setName("lblRelationalOperator4");
+      lblRelationalOperator4.setText("Igual");
+      lblRelationalOperator4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblRelationalOperator4,cc.xy(20,4));
+
+      lblLogicalOperators1.setName("lblLogicalOperators1");
+      lblLogicalOperators1.setText("WWWWW");
+      lblLogicalOperators1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators1,cc.xy(6,2));
+
+      lblLogicalOperators2.setName("lblLogicalOperators2");
+      lblLogicalOperators2.setText("WWWWW");
+      lblLogicalOperators2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators2,cc.xy(12,2));
+
+      lblLogicalOperators3.setName("lblLogicalOperators3");
+      lblLogicalOperators3.setText("WWWWW");
+      lblLogicalOperators3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblLogicalOperators3,cc.xy(18,2));
+
+      lblField1.setName("lblField1");
+      lblField1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField1,cc.xy(2,2));
+
+      lblField2.setName("lblField2");
+      lblField2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField2,cc.xy(8,2));
+
+      lblField3.setName("lblField3");
+      lblField3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField3,cc.xy(14,2));
+
+      lblField4.setName("lblField4");
+      lblField4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblField4,cc.xy(20,2));
+
+      lblExtraFields1.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields1.setName("lblExtraFields1");
+      jpanel1.add(lblExtraFields1,cc.xy(4,2));
+
+      lblExtraFields2.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields2.setName("lblExtraFields2");
+      jpanel1.add(lblExtraFields2,cc.xy(10,2));
+
+      lblExtraFields3.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields3.setName("lblExtraFields3");
+      jpanel1.add(lblExtraFields3,cc.xy(16,2));
+
+      lblExtraFields4.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/featurestore-column.png"));
+      lblExtraFields4.setName("lblExtraFields4");
+      jpanel1.add(lblExtraFields4,cc.xy(21,2));
+
+      lblNull1.setName("lblNull1");
+      lblNull1.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull1,cc.xy(4,4));
+
+      lblNull2.setName("lblNull2");
+      lblNull2.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull2,cc.xy(10,4));
+
+      lblNull3.setName("lblNull3");
+      lblNull3.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull3,cc.xy(16,4));
+
+      lblNull4.setName("lblNull4");
+      lblNull4.setHorizontalAlignment(JLabel.CENTER);
+      jpanel1.add(lblNull4,cc.xy(21,4));
+
+      jpanel1.add(createPanel2(),cc.xywh(2,8,20,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 },new int[]{ 1,2,3,4,5,6,7,8 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnRemoveAccumulatedFilter.setActionCommand("...");
+      btnRemoveAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-clear-accumulate.png"));
+      btnRemoveAccumulatedFilter.setName("btnRemoveAccumulatedFilter");
+      btnRemoveAccumulatedFilter.setToolTipText("_Remove_accumulated_filter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnRemoveAccumulatedFilter.setBorder(emptyborder1);
+      jpanel1.add(btnRemoveAccumulatedFilter,cc.xy(3,1));
+
+      btnAddAccumulatedFilter.setActionCommand("...");
+      btnAddAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-add-accumulate.png"));
+      btnAddAccumulatedFilter.setName("btnAddAccumulatedFilter");
+      btnAddAccumulatedFilter.setToolTipText("_Accumulate_filter");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnAddAccumulatedFilter.setBorder(emptyborder2);
+      jpanel1.add(btnAddAccumulatedFilter,cc.xy(7,1));
+
+      btnViewAccumulatedFilter.setActionCommand("...");
+      btnViewAccumulatedFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/searchpanel/search-simplifiedcondition-edit-accumulate.png"));
+      btnViewAccumulatedFilter.setName("btnViewAccumulatedFilter");
+      btnViewAccumulatedFilter.setToolTipText("_View_accumulated_filter");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnViewAccumulatedFilter.setBorder(emptyborder3);
+      jpanel1.add(btnViewAccumulatedFilter,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4,6 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblExpressionDeBusqueda.setName("lblExpressionDeBusqueda");
+      lblExpressionDeBusqueda.setText("_Insert_a_search_expression");
+      jpanel1.add(lblExpressionDeBusqueda,cc.xy(2,2));
+
+      btnAdvancedExpression.setActionCommand("...");
+      btnAdvancedExpression.setName("btnAdvancedExpression");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpression.setBorder(emptyborder1);
+      jpanel1.add(btnAdvancedExpression,new CellConstraints(4,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      btnAdvancedExpressionHistory.setActionCommand("...");
+      btnAdvancedExpressionHistory.setName("btnAdvancedExpressionHistory");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpressionHistory.setBorder(emptyborder2);
+      jpanel1.add(btnAdvancedExpressionHistory,new CellConstraints(6,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      btnAdvancedExpressionBookmarks.setActionCommand("...");
+      btnAdvancedExpressionBookmarks.setName("btnAdvancedExpressionBookmarks");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnAdvancedExpressionBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnAdvancedExpressionBookmarks,new CellConstraints(8,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtAdvancedExpression.setName("txtAdvancedExpression");
+      txtAdvancedExpression.setText("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtAdvancedExpression);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tblResults.setName("tblResults");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblResults);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:4DLU:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tblSearchPostProcessResults.setName("tblSearchPostProcessResults");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblSearchPostProcessResults);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel6()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:10PX:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnClear.setActionCommand("Limpiar");
+      btnClear.setName("btnClear");
+      btnClear.setText("_Clear");
+      jpanel1.add(btnClear,cc.xy(2,1));
+
+      btnSearch.setActionCommand("Buscar");
+      btnSearch.setName("btnSearch");
+      btnSearch.setText("_Search");
+      jpanel1.add(btnSearch,cc.xy(4,1));
+
+      btnSearchPostProcess.setActionCommand("Buscar");
+      btnSearchPostProcess.setName("btnSearchPostProcess");
+      btnSearchPostProcess.setText("_PostProcess");
+      jpanel1.add(btnSearchPostProcess,cc.xy(6,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,5,7 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel7()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:3PX:NONE,FILL:DEFAULT:NONE,FILL:10PX:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnHistory.setActionCommand("...");
+      btnHistory.setName("btnHistory");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnHistory.setBorder(emptyborder1);
+      jpanel1.add(btnHistory,cc.xy(3,1));
+
+      btnBookmarks.setActionCommand("...");
+      btnBookmarks.setName("btnBookmarks");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnBookmarks.setBorder(emptyborder2);
+      jpanel1.add(btnBookmarks,cc.xy(5,1));
+
+      pnlCfgActions.setName("pnlCfgActions");
+      pnlCfgActions.setOpaque(false);
+      jpanel1.add(pnlCfgActions,cc.xy(7,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4,6,8 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel8()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:6PX:NONE,FILL:DEFAULT:NONE,FILL:6PX:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      pgbStatus.setName("pgbStatus");
+      jpanel1.add(pgbStatus,cc.xy(1,1));
+
+      lblStatusTitle.setName("lblStatusTitle");
+      jpanel1.add(lblStatusTitle,cc.xy(3,1));
+
+      lblMsg.setName("lblMsg");
+      jpanel1.add(lblMsg,cc.xy(5,1));
+
+      pnlActions.setName("pnlActions");
+      jpanel1.add(pnlActions,cc.xy(6,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchPanel.java	(revision 46118)
@@ -0,0 +1,1847 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import java.awt.BorderLayout;
+import java.awt.Cursor;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang.mutable.MutableObject;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.MutableLong;
+import org.gvsig.configurableactions.ConfigurableActionsMamager;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import static org.gvsig.fmap.dal.DataManager.DAL_USE_LABELS;
+import static org.gvsig.fmap.dal.DataManager.USE_LABELS_BOTH;
+import static org.gvsig.fmap.dal.DataManager.USE_LABELS_NO;
+import static org.gvsig.fmap.dal.DataManager.USE_LABELS_YES;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.complements.Search;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.paging.FacadeOfAFeaturePagingHelper;
+import org.gvsig.fmap.dal.swing.AbstractDALActionFactory.AbstractDALActionContext;
+import org.gvsig.fmap.dal.swing.DALActionFactory;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryCalculatedColumnsPanel;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryGroupByPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel.SearchConditionPanelFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.ToolsUtilLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryGroupByPanel;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryOrderPanel;
+import org.gvsig.fmap.dal.swing.featuretable.SimpleFeaturesTableModel;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryCalculatedColumnsPanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.SimpleFeaturesTableModelImpl;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcess;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcessFactory;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.bookmarksandhistory.Bookmark;
+import org.gvsig.tools.bookmarksandhistory.Bookmarks;
+import org.gvsig.tools.bookmarksandhistory.History;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.swing.api.SupportIsEnable;
+import org.gvsig.tools.swing.api.SupportIsVisible;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue;
+import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_GETVALUE;
+import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
+import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
+import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
+import org.gvsig.tools.swing.api.task.TaskStatusController;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings({"UseSpecificCatch"})
+public class DefaultSearchPanel
+	extends DefaultSearchPanelView2
+	implements FeatureStoreSearchPanel, SupportIsEnable, SupportIsVisible {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DefaultSearchPanel.class);
+
+	static /* friend */ Integer useLabels = null;
+	private BookmarksController bookmarksController;
+	private HistoryController historyController;
+	private FeatureQuery lastQuery;
+	private Feature lastSelectedFeature;
+	private final PropertiesSupportHelper propertiesHelper;
+	private TaskStatusController taskStatusController;
+
+	public static class UseLabelsYesAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public UseLabelsYesAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Use_labels"));
+			this.putValue(ACTION_COMMAND_KEY, "UseLabelsYes");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Use_labels");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel.useLabels = USE_LABELS_YES;
+		}
+	}
+
+	public static class UseLabelsNoAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public UseLabelsNoAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+			this.putValue(NAME, i18n.getTranslation("_Use_names"));
+			this.putValue(ACTION_COMMAND_KEY, "UseLabelsNo");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Use_names");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel.useLabels = USE_LABELS_NO;
+		}
+	}
+
+	public static class UseLabelsBothAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public UseLabelsBothAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Use_labels_and_names"));
+			this.putValue(ACTION_COMMAND_KEY, "UseLabelsBoth");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Use_labels_and_names");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel.useLabels = USE_LABELS_BOTH;
+		}
+	}
+
+	public static class SelectColumnsAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public SelectColumnsAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Select_columns_to_display"));
+			this.putValue(ACTION_COMMAND_KEY, "SelectColumns");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Select_columns_to_display");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel panel = (DefaultSearchPanel) ae.getSource();
+			panel.doSelectResultColumnNames();
+		}
+	}
+
+	public static class CalculatedColumnsAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public CalculatedColumnsAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Calculated_columns"));
+			this.putValue(ACTION_COMMAND_KEY, "CalculatedColumns");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Calculated_columns");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel panel = (DefaultSearchPanel) ae.getSource();
+			panel.doCalculatedColumns();
+		}
+	}
+
+	public static class GroupByAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public GroupByAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Group_by"));
+			this.putValue(ACTION_COMMAND_KEY, "GroupBy");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Group_by");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel panel = (DefaultSearchPanel) ae.getSource();
+			panel.doGroupBy();
+		}
+	}
+
+	public static class OrderByAction extends AbstractAction {
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public OrderByAction() {
+			I18nManager i18n = ToolsLocator.getI18nManager();
+
+			this.putValue(NAME, i18n.getTranslation("_Order_by"));
+			this.putValue(ACTION_COMMAND_KEY, "SelectOrderBy");
+		}
+
+		@Override
+		public Object getValue(String key) {
+			if (NAME.equals(key)) {
+				// Cuando se registra la accion aun no se han cargado las traducciones
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				return i18n.getTranslation("_Order_by");
+			}
+			return super.getValue(key);
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent ae) {
+			DefaultSearchPanel panel = (DefaultSearchPanel) ae.getSource();
+			panel.doOrderBy();
+		}
+	}
+
+	private class TablePopupMenu extends JPopupMenu {
+
+		public final JTable table;
+
+		@SuppressWarnings("OverridableMethodCallInConstructor")
+		public TablePopupMenu(JTable inputTable) {
+			this.table = inputTable;
+			I18nManager i18n = ToolsLocator.getI18nManager();
+			JMenuItem copyRowsActionMenu = new JMenuItem(i18n.getTranslation("_Copy_rows"));
+			copyRowsActionMenu.addActionListener((ActionEvent e) -> {
+				doCopyRows(table);
+			});
+			this.add(copyRowsActionMenu);
+		}
+	}
+
+	private class ActionButtons {
+
+		private final DALActionFactory factory;
+		private final Action action;
+		private final JButton button;
+
+		public ActionButtons(DALActionFactory factory, Action action, JButton button) {
+			this.factory = factory;
+			this.action = action;
+			this.button = button;
+		}
+	}
+
+	public static class SearchActionContext extends AbstractDALActionContext {
+
+		private final DefaultSearchPanel panel;
+
+		public SearchActionContext(DefaultSearchPanel panel) {
+			super(FeatureStoreSearchPanel.ACTION_CONTEXT_NAME);
+			this.panel = panel;
+		}
+
+		@Override
+		public DataStore getStore() {
+			if (this.panel.currentPostProcess == null || this.panel.tabResults.getSelectedIndex() == 0) {
+				return this.panel.getStore();
+			} else {
+				return this.panel.postProcessStore;
+//                DataSwingManager manager = DALSwingLocator.getDataSwingManager();
+//                SearchPostProcessFactory factory= manager.getSearchPostProcess(this.panel.currentPostProcess);
+//                SearchParameters searchParams = this.panel.parameters.getCopy();
+//                if (factory.hasProcessParameters()){
+//                    SearchPostProcess.SearchPostProcessResult searchPostProcessResult = this.panel.doExecuteSearchPostProcess(this.panel.store, this.panel.parameters.getQuery(), factory, this.panel.postProcessParams, searchParams);
+//                    return searchPostProcessResult.getStore();
+//                }
+//                SearchPostProcess.SearchPostProcessResult searchPostProcessResult = this.panel.doExecuteSearchPostProcess(this.panel.store, this.panel.parameters.getQuery(), factory, null, searchParams);
+//                return searchPostProcessResult.getStore();
+			}
+		}
+
+		@Override
+		public JComponent getActionButton(String actionName) {
+			return this.panel.getActionButton(actionName);
+		}
+
+		@Override
+		public int getSelectedsCount() {
+			return this.panel.getSelectedFeatureCount();
+		}
+
+		@Override
+		public Expression getFilterForSelecteds() {
+			return this.panel.getFilterForSelectedFeature();
+		}
+
+		@Override
+		public FeatureQuery getQuery() {
+			if (this.panel.currentPostProcess == null || this.panel.tabResults.getSelectedIndex() == 0) {
+				return this.panel.parameters.getQuery();
+			} else {
+				return this.panel.postProcessQuery;
+//                DataSwingManager manager = DALSwingLocator.getDataSwingManager();
+//                SearchPostProcessFactory factory= manager.getSearchPostProcess(this.panel.currentPostProcess);
+//                SearchParameters searchParams =this.panel.parameters.getCopy();
+//                if (factory.hasProcessParameters()){
+//                    SearchPostProcess.SearchPostProcessResult searchPostProcessResult = this.panel.doExecuteSearchPostProcess(this.panel.store, this.panel.parameters.getQuery(), factory, this.panel.postProcessParams, searchParams);
+//                    return searchPostProcessResult.getQuery();
+//                }
+//                SearchPostProcess.SearchPostProcessResult searchPostProcessResult = this.panel.doExecuteSearchPostProcess(this.panel.store, this.panel.parameters.getQuery(), factory, null, searchParams);
+//                return searchPostProcessResult.getQuery();
+			}
+		}
+	}
+
+//    private class SearchPostProcessListener implements ActionListener {
+//
+//        private final FeatureStore input;
+//        private final SearchPostProcessFactory factory;
+//        private final FeatureQuery query;
+//
+//        public SearchPostProcessListener(
+//                FeatureStore input,
+//                FeatureQuery query,
+//                SearchPostProcessFactory factory
+//        ) {
+//            this.input = input;
+//            this.query = query;
+//            this.factory = factory;
+//        }
+//
+//        @Override
+//        public void actionPerformed(ActionEvent e) {
+//            // habilita la pesta�a del tab con los resultados del post procesado
+//            if (this.factory.hasProcessParameters()) {
+//                DynObject parameters = this.factory.createProcessParameters(this.input);
+//                JDynForm form = DynFormLocator.getDynFormManager().createJDynForm(parameters);
+//                form.asJComponent().setPreferredSize(new Dimension(350, 250));
+//
+//                I18nManager i18n = ToolsLocator.getI18nManager();
+//                WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+//
+//                Dialog dialog = windowManager.createDialog(
+//                        form.asJComponent(),
+//                        i18n.getTranslation("_create_parameters"),
+//                        i18n.getTranslation("_parameters_list"),
+//                        WindowManager_v2.BUTTONS_OK_CANCEL);
+//
+//                dialog.addActionListener((ActionEvent e2) -> {
+//                    if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+//                        form.getValues(parameters); // actualiza el valor de lo los parametros con los valores introducidos por el usuario
+//                        doExecuteSearchPostProcess(this.input, this.query, this.factory, parameters);
+//                        postProcessParams = parameters;
+//                    }
+//                });
+//
+//                dialog.show(WindowManager.MODE.DIALOG);
+//
+//            } else {
+//                doExecuteSearchPostProcess(this.input, this.query, this.factory, null);
+//            }
+//        }
+//    }
+	private FeatureStore store;
+	private final ActionListenerSupport acctionListeners;
+	private final Map<String, ActionButtons> actions;
+	private boolean showActions = true;
+	private DefaultSearchParameters parameters;
+
+	private List<SearchConditionPanel> conditionPanels;
+
+	public static final int PANEL_SIMPLIFIED = 0;
+	public static final int PANEL_ADVANCED = 1;
+	private static final String BOOKMARKSANDHISTORY_NAME = "SearchPanel";
+	private final Bookmarks<Object> bookmarks;
+	private final History<Object> history;
+	private boolean filterOnlyMode;
+
+	private String currentPostProcess;
+
+	private DynObject postProcessParams;
+	private FeatureStore postProcessStore;
+	private FeatureQuery postProcessQuery;
+	private SimpleFeaturesTableModel resultModel;
+	private SimpleFeaturesTableModel resultPostProcessModel;
+
+	private boolean processing;
+	private JComponent configurableActions;
+
+	@SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+	public DefaultSearchPanel(FeatureStore store) {
+		this.store = store;
+		this.filterOnlyMode = false;
+		DisposeUtils.bind(store);
+		this.acctionListeners = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+		this.actions = new HashMap<>();
+		this.parameters = new DefaultSearchParameters();
+		FeatureQuery featureQuery = this.store.createFeatureQuery();
+		featureQuery.retrievesAllAttributes();
+		this.parameters.setQuery(featureQuery);
+		this.currentPostProcess = null;
+		this.postProcessParams = null;
+		this.postProcessStore = null;
+		this.postProcessQuery = null;
+		this.processing = false;
+		this.configurableActions = null;
+		this.resultModel = null;
+		this.resultPostProcessModel = null;
+		this.propertiesHelper = new PropertiesSupportHelper();
+		this.propertiesHelper.setProperty("SearchPanel", this);
+
+		Search search = (Search) ToolsLocator.getComplementsManager().get(
+			Search.COMPLEMENT_MANE, getFeatureType()
+		);
+		List<Search.OrderedAttribute> attributos = search.getOrderedAttributes(
+			Search.BASIC_TYPES_FILTER,
+			Search.STR_INT_LONG_LABEL_ORDER,
+			12
+		);
+		for (Search.OrderedAttribute attrdesc : attributos) {
+			this.parameters.getResultColumnNames().add(attrdesc.getDescriptor().getName());
+		}
+		this.bookmarks = ToolsLocator.getBookmarksAndHistoryManager().getBookmarksGroup(BOOKMARKSANDHISTORY_NAME);
+		this.history = ToolsLocator.getBookmarksAndHistoryManager().getHistoryGroup(BOOKMARKSANDHISTORY_NAME);
+	}
+
+	@Override
+	public void dispose() {
+		DisposeUtils.disposeQuietly(store);
+		TableModel m = this.tblResults.getModel();
+		if (m instanceof Disposable) {
+			DisposeUtils.disposeQuietly((Disposable) m);
+		}
+		this.store = null;
+		this.tblResults.setModel(new DefaultTableModel());
+	}
+
+	@Override
+	public JComponent asJComponent() {
+		if (this.conditionPanels == null) {
+			this.initComponents();
+		}
+		return this;
+	}
+
+	private void addActions() {
+		if (!this.showActions) {
+			return;
+		}
+		this.pnlActions.removeAll();
+		this.pnlActions.setLayout(new FlowLayout(FlowLayout.TRAILING, 8, 4));
+		SearchActionContext actionContext = new SearchActionContext(this);
+		Collection<DALActionFactory> factories = DALSwingLocator.getSwingManager().getStoreActions();
+		for (DALActionFactory factory : factories) {
+			if (!factory.isApplicable(actionContext)) {
+				continue;
+			}
+			Action action = factory.createAction(actionContext);
+			JButton button = new JButton(action);
+			this.actions.put(factory.getName(), new ActionButtons(factory, action, button));
+			button.setBorder(BorderFactory.createEmptyBorder());
+			button.setBorderPainted(false);
+			button.setFocusPainted(false);
+			button.setContentAreaFilled(false);
+			button.setCursor(new Cursor(Cursor.HAND_CURSOR));
+			this.pnlActions.add(button);
+		}
+		this.pnlActions.revalidate();
+		this.pnlActions.repaint();
+	}
+
+	@Override
+	public void addActionListener(ActionListener listener) {
+		this.acctionListeners.addActionListener(listener);
+	}
+
+	@Override
+	public ActionListener[] getActionListeners() {
+		return this.acctionListeners.getActionListeners();
+	}
+
+	@Override
+	public void removeActionListener(ActionListener listener) {
+		this.acctionListeners.removeActionListener(listener);
+	}
+
+	@Override
+	public void removeAllActionListener() {
+		this.acctionListeners.removeAllActionListener();
+	}
+
+	@Override
+	public void fireActionEvent(ActionEvent event) {
+		this.acctionListeners.fireActionEvent(event);
+	}
+
+	@Override
+	public boolean hasActionListeners() {
+		return this.acctionListeners.hasActionListeners();
+	}
+
+	private void initComponents() {
+		this.conditionPanels = new ArrayList<>();
+
+		ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+		swingManager.translate(this.tabSearchMode);
+		swingManager.translate(this.tabResults);
+		swingManager.translate(this.btnSearch);
+		swingManager.translate(this.btnClear);
+		swingManager.translate(this.btnSearchPostProcess);
+		swingManager.translate(this.lblExpressionDeBusqueda);
+		swingManager.translate(this.btnAddAccumulatedFilter);
+		swingManager.translate(this.btnRemoveAccumulatedFilter);
+		swingManager.translate(this.btnViewAccumulatedFilter);
+
+		ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+		this.configurableActions = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this);
+		this.pnlCfgActions.setLayout(new BorderLayout(0, 0));
+		this.pnlCfgActions.add(configurableActions, BorderLayout.CENTER);
+
+		this.taskStatusController = ToolsSwingLocator.getTaskStatusSwingManager().createTaskStatusController(
+			this.lblStatusTitle,
+			this.lblMsg,
+			this.pgbStatus);
+		this.pgbStatus.setVisible(false);
+
+		this.conditionPanels.add(
+			new SearchConditionPanelSimplified(
+				parameters,
+				store,
+				btnAddAccumulatedFilter,
+				btnRemoveAccumulatedFilter,
+				btnViewAccumulatedFilter,
+				lblField1,
+				lblExtraFields1,
+				lblRelationalOperator1,
+				cboValue1,
+				lblNull1,
+				lblLogicalOperators1,
+				lblField2,
+				lblExtraFields2,
+				lblRelationalOperator2,
+				cboValue2,
+				lblNull2,
+				lblLogicalOperators2,
+				lblField3,
+				lblExtraFields3,
+				lblRelationalOperator3,
+				cboValue3,
+				lblNull3,
+				lblLogicalOperators3,
+				lblField4,
+				lblExtraFields4,
+				lblRelationalOperator4,
+				cboValue4,
+				lblNull4,
+				null
+			)
+		);
+
+		SearchConditionPanelAdvanced advancedPanel = new SearchConditionPanelAdvanced(
+			this.store,
+			txtAdvancedExpression,
+			btnAdvancedExpression,
+			btnAdvancedExpressionHistory,
+			btnAdvancedExpressionBookmarks
+		);
+		this.conditionPanels.add(advancedPanel);
+
+		for (SearchConditionPanelFactory factory : DALSwingLocator.getManager().getSearchConditionPanels()) {
+			String factoryName = "unknown";
+			try {
+				factoryName = factory.getName();
+				if (factory.isApplicable(store)) {
+					SearchConditionPanel panel = factory.create(this);
+					this.conditionPanels.add(panel);
+					this.tabSearchMode.add(factory.getName(), panel.asJComponent());
+				}
+			} catch (Throwable th) {
+				LOGGER.warn("Can't create search panel '" + factoryName + "'.");
+			}
+		}
+
+		this.btnSearch.addActionListener((ActionEvent e) -> {
+			this.tabResults.setEnabledAt(1, false);
+			search();
+		});
+
+		this.tblResults.getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
+			try {
+				lastSelectedFeature = resultModel.getFeatureAt(tblResults.getSelectedRow());
+			} catch (Throwable th) {
+				LOGGER.debug("Can't retrieve last selected feature.", th);
+			}
+			for (ActionButtons actionButton : actions.values()) {
+				if (actionButton.action instanceof ListSelectionListener) {
+					((ListSelectionListener) actionButton.action).valueChanged(e);
+				}
+			}
+		});
+		this.btnClear.addActionListener((ActionEvent e) -> {
+			clear();
+		});
+		addActions();
+
+		//swingManager.createTableColumnAdjuster(tblResults);
+		//swingManager.createTableColumnAdjuster(tblSearchPostProcessResults);
+//        this.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
+		ToolsSwingUtils.ensureRowsCols(this, 20, 100, 30, 120);
+
+		this.bookmarksController = ToolsSwingLocator.getToolsSwingManager().createBookmarksController(this.bookmarks, btnBookmarks);
+		this.historyController = ToolsSwingLocator.getToolsSwingManager().createHistoryController(this.history, btnHistory);
+
+		this.historyController.setFilter(null);
+
+		ActionListener bookmarksAndHistoryListener = (ActionEvent e) -> {
+			ActionEventWithCurrentValue<DefaultSearchParameters> b = (ActionEventWithCurrentValue<DefaultSearchParameters>) e;
+			switch (b.getID()) {
+				case ID_GETVALUE:
+					DefaultSearchParameters actualParams = (DefaultSearchParameters) fetch(null);
+					b.setCurrentValue(actualParams);
+					break;
+
+				case ID_SETVALUE:
+					if (b.getCurrentValue() == null) {
+						return;
+					}
+					DefaultSearchParameters searchParams;
+					try {
+						searchParams = b.getCurrentValue().getCopy();
+					} catch (Exception ex) {
+						LOGGER.warn("Not been able to clone export parameters", ex);
+						return;
+					}
+					clear();
+					put(searchParams);
+					Thread th = new Thread(() -> {
+						doSearch(searchParams);
+					});
+					th.start();
+					break;
+			}
+		};
+		this.historyController.addActionListener(bookmarksAndHistoryListener);
+		this.bookmarksController.addActionListener(bookmarksAndHistoryListener);
+		this.addComponentListener(new ComponentAdapter() {
+			@Override
+			public void componentHidden(ComponentEvent e) {
+				dispose();
+			}
+		});
+
+		this.btnSearchPostProcess.addActionListener((ActionEvent e) -> {
+			try {
+				doSelectSearchPostprocess();
+			} catch (DataException ex) {
+				LOGGER.warn("Can't select a Search Post Process", ex);
+			}
+		});
+
+		this.tabResults.setEnabledAt(1, false);
+
+		this.tblResults.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+		this.tblResults.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				if (e.getKeyCode() == KeyEvent.VK_F4) {
+					doShowCellInDialog();
+				}
+			}
+		});
+
+		this.tblResults.setComponentPopupMenu(new TablePopupMenu(this.tblResults));
+		this.tblSearchPostProcessResults.setComponentPopupMenu(new TablePopupMenu(this.tblSearchPostProcessResults));
+
+		//this.tblResults.add
+		if (this.bookmarks.hasBookmark(this.store.getName())) {
+			Bookmark<DefaultSearchParameters> initBookmark = this.bookmarks.get(this.store.getName());
+			DefaultSearchParameters initSearchParams = initBookmark.getValue().getCopy();
+			put(initSearchParams);
+			Thread th = new Thread(() -> {
+				doSearch(initSearchParams);
+			});
+			th.start();
+			return;
+		}
+
+		this.tabResults.addChangeListener((ChangeEvent evt) -> {
+			SwingUtilities.invokeLater(() -> {
+				if (tabResults.getSelectedIndex() == 0) {
+					updateNumberElementsMsg(resultModel);
+				} else {
+					updateNumberElementsMsg(resultPostProcessModel);
+				}
+			});
+		});
+		if (this.filterOnlyMode) {
+			this.btnSearchPostProcess.setVisible(false);
+		}
+		clear();
+		search();
+	}
+
+	private void doShowCellInDialog() {
+		int row = this.tblResults.getSelectedRow();
+		if (row < 0) {
+			return;
+		}
+		int col = this.tblResults.getSelectedColumn();
+		if (col < 0) {
+			return;
+		}
+		String s = Objects.toString(this.tblResults.getValueAt(row, col), null);
+		if (StringUtils.isBlank(s)) {
+			return;
+		}
+		ToolsSwingLocator.getToolsSwingManager().showZoomDialog(
+			this,
+			this.tblResults.getColumnName(col),
+			s,
+			false
+		);
+	}
+
+	@Override
+	public FeatureType getFeatureType() {
+		try {
+			return store.getDefaultFeatureType();
+		} catch (Exception ex) {
+			throw new RuntimeException("Can't retrieve the feature type.", ex);
+		}
+	}
+
+	@Override
+	public void setEnabled(boolean enabled) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(() -> {
+				setEnabled(enabled);
+			});
+			return;
+		}
+
+		if (this.conditionPanels == null) {
+			this.initComponents();
+		}
+		for (SearchConditionPanel conditionPanel : conditionPanels) {
+			conditionPanel.setEnabled(enabled);
+		}
+
+		this.btnClear.setEnabled(enabled);
+		this.btnSearch.setEnabled(enabled);
+		for (ActionButtons actionButton : actions.values()) {
+			actionButton.action.setEnabled(enabled);
+		}
+		this.btnSearchPostProcess.setEnabled(enabled);
+		//bookmarkController,historyController,configurableActions
+	}
+
+	@Override
+	public void clear() {
+		this.taskStatusController.setTitle("");
+		if (this.conditionPanels == null) {
+			return;
+		}
+		for (SearchConditionPanel conditionPanel : conditionPanels) {
+			conditionPanel.clear();
+		}
+		FeatureQuery emptyQuery = this.store.createFeatureQuery();
+		emptyQuery.retrievesAllAttributes();
+		this.parameters.setQuery(emptyQuery);
+		// Mantener las columnas visualizadas
+		// Elimina las que no existen en el store como campos calculados que
+		// pudieran existir en el fquery
+		List<String> resultColumnNames = this.parameters.getResultColumnNames();
+		ArrayList<String> toDeleteAlreadyDontExist = new ArrayList<>();
+		for (String resultColumnName : resultColumnNames) {
+			try {
+				FeatureAttributeDescriptor attr = this.store.getDefaultFeatureType().getAttributeDescriptor(resultColumnName);
+				if (attr == null) {
+					toDeleteAlreadyDontExist.add(resultColumnName);
+				}
+			} catch (DataException ex) {
+
+			}
+		}
+		resultColumnNames.removeAll(toDeleteAlreadyDontExist);
+		resetTable();
+	}
+
+	@Override
+	public FeatureQuery getLastQuery() {
+		return this.lastQuery;
+	}
+
+	public boolean isValid(StringBuilder message) {
+		int searchMode = this.tabSearchMode.getSelectedIndex();
+		SearchConditionPanel panel = this.conditionPanels.get(searchMode);
+		boolean valid = panel.isValid(message);
+		return valid;
+	}
+
+	@Override
+	public void search() {
+		StringBuilder message = new StringBuilder();
+		if (!this.isValid(message)) {
+			ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+			dialogManager.messageDialog(
+				"_The_specified_search_condition_is_not_valid",
+				"_Search",
+				JOptionPane.WARNING_MESSAGE
+			);
+			return;
+		}
+		lblMsg.setText(ToolsLocator.getI18nManager().getTranslation("_Searching") + "...");
+		setEnabled(false);
+		Thread th = new Thread(() -> {
+			try {
+				SearchParameters searchParams;
+				try {
+					searchParams = this.fetch(this.parameters.getCopy()); // esto lo actualiza a la ultima // decidir si se devuelve clonado
+
+					Date date = Calendar.getInstance().getTime();
+					DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+					String strDate = dateFormat.format(date);
+					searchParams.setName("Params: " + strDate);
+				} catch (Exception ex) {
+					LOGGER.warn("Not able to create search parameters.", ex);
+					this.taskStatusController.setTitle(ToolsLocator.getI18nManager().getTranslation("_Errors_fetching_new_query") + "...");
+					resetTable();
+					return;
+				}
+				doSearch(searchParams);
+			} catch (Exception ex) {
+				LOGGER.warn("Search panel has errors during the search", ex);
+				resetTable();
+			} finally {
+				SwingUtilities.invokeLater(() -> {
+					setEnabled(true);
+				});
+			}
+		});
+		th.start();
+	}
+
+	private void doSearch(SearchParameters searchParams) {
+		final MutableObject model = new MutableObject(null);
+		final MutableLong rowCount = new MutableLong();
+		Cursor savedCursor = this.getCursor();
+		SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("");
+		status.setAutoremove(true);
+		status.add();
+		this.taskStatusController.bind(status);
+		try {
+			status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Processing_search"));
+			SwingUtilities.invokeLater(() -> {
+				this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+			});
+			final List<Feature> features;
+			FeatureQuery myQuery;
+//                myQuery = this.getQuery().getCopy();
+			this.tabResults.setSelectedIndex(0);
+			List<String> resultColumnNames = searchParams.getResultColumnNames();
+			myQuery = searchParams.getQuery().getCopy();
+			features = store.getFeatures(myQuery, 50);
+			FacadeOfAFeaturePagingHelper facade = (FacadeOfAFeaturePagingHelper) features;
+			FeatureType ftype = facade.getFeaturePagingHelper().getFeatureSet().getDefaultFeatureType();
+			// al modelo le pasamos el ftype de esas features
+			SimpleFeaturesTableModel tableModel = new SimpleFeaturesTableModelImpl(
+				ftype,
+				resultColumnNames,
+				features
+			);
+			model.setValue(tableModel);
+			rowCount.setValue(tableModel.getRowCount());
+		} catch (Exception ex) {
+			LOGGER.warn("Search not able to be executed. Can't get features or create table model", ex);
+			status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Errors_getting_new_feature_set") + "...");
+			status.abort();
+			resetTable();
+		} finally {
+			SwingUtilities.invokeLater(() -> {
+				I18nManager i18n = ToolsLocator.getI18nManager();
+				try {
+					TableModel oldmodel = tblResults.getModel();
+					resultModel = (SimpleFeaturesTableModel) model.getValue();
+					tblResults.setModel(resultModel);
+					resultModel.setCellRenderers(tblResults, getCustomRenderers(searchParams));
+					if (oldmodel instanceof SimpleFeaturesTableModelImpl) {
+						((SimpleFeaturesTableModelImpl) oldmodel).dispose();
+					}
+					if (resultModel.hasErrors()) {
+						status.setTitle(i18n.getTranslation("_Errors_occurred_during_search"));
+					} else {
+						status.setTitle(String.format("%d " + i18n.getTranslation("_elements"), rowCount.getValue()));
+					}
+					if (this.parameters != null && this.parameters.getQuery() != null) {
+						this.history.add(searchParams);
+					}
+				} catch (Exception ex) {
+					LOGGER.warn(" Errors occurred during search getting old model", ex);
+					status.setTitle(i18n.getTranslation("_Errors_occurred_during_search"));
+				} finally {
+					setEnabled(true);
+					status.terminate();
+					this.setCursor(savedCursor);
+				}
+			});
+		}
+	}
+
+	private Map<String, TableCellRenderer> getCustomRenderers(SearchParameters parameters) {
+		FeatureType ft = this.store.getDefaultFeatureTypeQuietly();
+		HashMap<String, TableCellRenderer> renderers = new HashMap<String, TableCellRenderer>();
+		for (FeatureAttributeDescriptor attr : ft) {
+			if (attr.getDataType().isNumeric()) {
+//                renderers.put(attr.getName(), new ColorRangeRenderer(attr, 20, 50));
+			}
+		}
+		return renderers;
+	}
+
+	private void resetTable() {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(this::resetTable);
+			return;
+		}
+		List<String> resultColumnNames = null;
+		try {
+			resultColumnNames = this.parameters.getResultColumnNames();
+		} catch (Exception ex) {
+
+		}
+		FeatureType ftype = this.store.getDefaultFeatureTypeQuietly();
+		SimpleFeaturesTableModelImpl emptyTableModel = new SimpleFeaturesTableModelImpl(
+			ftype,
+			resultColumnNames,
+			null
+		);
+		this.tblResults.setModel(emptyTableModel);
+
+	}
+
+	public void setResultColumnNames(List<String> names) {
+		this.parameters.getResultColumnNames().clear();
+		this.parameters.getResultColumnNames().addAll(names);
+//        if (this.conditionPanels == null) {
+//            return;
+//        }
+//        SimpleFeaturesTableModelImpl model;
+////        model = (SimpleFeaturesTableModel) this.tblResults.getModel();
+//        List<Feature> features = store.getFeatures(this.parameters.getQuery());
+//        FacadeOfAFeaturePagingHelper facade = (FacadeOfAFeaturePagingHelper) features;
+//        FeatureType ftype = facade.getFeaturePagingHelper().getFeatureSet().getDefaultFeatureType();
+//        model = new SimpleFeaturesTableModelImpl(
+//                ftype,
+//                this.parameters.getResultColumnNames(),
+//                features
+//        );
+//        tblResults.setModel(model);
+	}
+
+	@Override
+	public boolean setFilter(Expression filter) {
+		try {
+			if (this.conditionPanels == null) {
+				this.initComponents();
+			}
+			if (ExpressionUtils.isPhraseEmpty(filter)) {
+				this.clear();
+				return true;
+			}
+			int panel = 0;
+			int selected = PANEL_ADVANCED;
+			for (SearchConditionPanel conditionPanel : conditionPanels) {
+				if (panel != PANEL_ADVANCED && conditionPanel.set(filter)) {
+					selected = panel;
+				}
+				panel++;
+			}
+			this.tabSearchMode.setSelectedIndex(selected);
+
+//            SimpleFeaturesTableModel model = new SimpleFeaturesTableModel(this.getStore());
+//            tblResults.setModel(model);
+//            lblMsg.setText("");
+			return true;
+		} catch (Exception ex) {
+			LOGGER.warn("Can't set current search", ex);
+			return false;
+		}
+	}
+
+	@Override
+	public List<SearchConditionPanel> getConditionPanels() {
+		return Collections.unmodifiableList(this.conditionPanels);
+	}
+
+	@Override
+	public SearchConditionPanel getConditionPanel(String name) {
+		if (conditionPanels == null) {
+			return null;
+		}
+		for (SearchConditionPanel panel : conditionPanels) {
+			if (StringUtils.equalsIgnoreCase(name, panel.getFactory().getName())) {
+				return panel;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public Expression getFilterForSelectedFeature() {
+		if (this.conditionPanels == null) {
+			return null;
+		}
+		if (this.tabResults.getSelectedIndex() == 0) {
+			int selectedRow = this.tblResults.getSelectedRow();
+			if (selectedRow < 0) {
+				return null;
+			}
+			try {
+				List<Feature> features = ((SimpleFeaturesTableModelImpl) this.tblResults.getModel()).getFeatures();
+				Feature feature = features.get(selectedRow);
+
+				ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+				FeatureType ftype = this.store.getDefaultFeatureType();
+				for (FeatureAttributeDescriptor attrdesc : ftype.getPrimaryKey()) {
+					builder.and(
+						builder.eq(
+							builder.column(attrdesc.getName()),
+							builder.constant(feature.get(attrdesc.getName()))
+						)
+					);
+				}
+				Expression filter = ExpressionUtils.createExpression(builder.toString());
+				return filter;
+			} catch (Exception ex) {
+				LOGGER.warn("Can't build search for the selected feature.", ex);
+				return null;
+			}
+		} else {
+			if (this.currentPostProcess == null) {
+				return null;
+			}
+			int selectedRow = this.tblSearchPostProcessResults.getSelectedRow();
+			if (selectedRow < 0) {
+				return null;
+			}
+			try {
+				List<Feature> features = ((SimpleFeaturesTableModelImpl) this.tblSearchPostProcessResults.getModel()).getFeatures();
+				Feature feature = features.get(selectedRow);
+
+				ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+				FeatureType ftype = this.postProcessStore.getDefaultFeatureType();
+				for (FeatureAttributeDescriptor attrdesc : ftype.getPrimaryKey()) {
+					builder.and(
+						builder.eq(
+							builder.column(attrdesc.getName()),
+							builder.constant(feature.get(attrdesc.getName()))
+						)
+					);
+				}
+				Expression filter = ExpressionUtils.createExpression(builder.toString());
+				return filter;
+			} catch (Exception ex) {
+				LOGGER.warn("Can't build search for the selected feature.", ex);
+				return null;
+			}
+		}
+
+	}
+
+	@Override
+	public FeatureStore getStore() {
+		return store;
+	}
+
+	private void doOrderBy() {
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+		FeatureQueryOrderPanel orderPanel = DALSwingLocator.getDataSwingManager().createFeatureStoreOrderPanel();
+		orderPanel.setStore(store);
+		orderPanel.put(parameters.getQuery());
+		Dialog dialog = windowManager.createDialog(
+			orderPanel.asJComponent(),
+			i18n.getTranslation("_Select_order"),
+			null,
+			WindowManager_v2.BUTTONS_OK_CANCEL
+		);
+		dialog.addActionListener((ActionEvent e) -> {
+			if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+				orderPanel.fetch(this.parameters.getQuery());
+				search();
+			}
+		});
+		dialog.show(WindowManager.MODE.DIALOG);
+	}
+
+	private void doCopyRows(JTable table) {
+		Cursor savedCursor = this.getCursor();
+		SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("");
+		status.setAutoremove(true);
+		status.add();
+		this.taskStatusController.bind(status);
+		Thread task = new Thread(() -> {
+			try {
+				this.processing = true;
+				this.updateComponentState();
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Copying_rows_to_clipboard"));
+				SwingUtilities.invokeLater(() -> {
+					this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+				});
+
+				SimpleFeaturesTableModel model = null;
+				if (table.getModel() instanceof SimpleFeaturesTableModel) {
+					model = (SimpleFeaturesTableModel) table.getModel();
+				}
+
+				String LINE_BREAK = System.lineSeparator();
+				String CELL_BREAK = "\t";
+				char DELIMITER = '"';
+
+				int[] selection = table.getSelectedRows();
+				for (int i = 0; i < selection.length; i++) {
+					selection[i] = table.convertRowIndexToModel(selection[i]);
+				}
+
+				int numCols = table.getColumnCount();
+				StringBuilder excelStr = new StringBuilder();
+				boolean valueIsNumeric;
+
+				for (int j = 0; j < numCols; j++) {
+
+					excelStr.append(DELIMITER);
+					excelStr.append(escape(table.getColumnName(j), LINE_BREAK, CELL_BREAK));
+					excelStr.append(DELIMITER);
+
+					if (j < numCols - 1) {
+						excelStr.append(CELL_BREAK);
+					}
+				}
+
+				//from( 0, selection.length)
+				status.setRangeOfValues(0, selection.length);
+				excelStr.append(LINE_BREAK);
+				for (int i : selection) {
+					status.incrementCurrentValue();
+					if (status.isCancellationRequested()) {
+						status.message("");
+						status.cancel();
+						return;
+					}
+					for (int j = 0; j < numCols; j++) {
+						valueIsNumeric = false;
+						FeatureAttributeDescriptor descriptor = null;
+						if (model != null) {
+							descriptor = model.getFeatureDescriptor(j);
+							if (descriptor.getDataType().isNumeric()) {
+								if (!descriptor.hasAvailableValues()) {
+									valueIsNumeric = true;
+								}
+							}
+						}
+						if (!valueIsNumeric) {
+							excelStr.append(DELIMITER);
+						}
+						Object value = table.getValueAt(i, j);
+						String valueStr;
+						if (descriptor != null) {
+							valueStr = escape(descriptor.format(value), LINE_BREAK, CELL_BREAK);
+						} else {
+							valueStr = escape(value, LINE_BREAK, CELL_BREAK);
+
+						}
+						excelStr.append(valueStr);
+
+						if (!valueIsNumeric) {
+							excelStr.append(DELIMITER);
+						}
+						if (j < numCols - 1) {
+							excelStr.append(CELL_BREAK);
+						}
+					}
+					excelStr.append(LINE_BREAK);
+				}
+				String toStr = excelStr.toString();
+
+				doPostCopyRows(status, toStr);
+				SwingUtilities.invokeLater(() -> {
+					status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Copy_ended"));
+					status.terminate();
+				});
+
+			} catch (Exception ex) {
+				LOGGER.warn("Not able to copy rows to the clipboard", ex);
+				status.message("Not able to copy rows to the clipboard");
+				status.abort();
+			} finally {
+				this.processing = false;
+				SwingUtilities.invokeLater(() -> {
+					this.setCursor(savedCursor);
+				});
+				this.updateComponentState();
+			}
+		}, "SearchPanelCopyRows");
+		task.start();
+	}
+
+	private void doPostCopyRows(SimpleTaskStatus status, String toStr) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(() -> {
+				doPostCopyRows(status, toStr);
+			});
+			return;
+		}
+		ToolsSwingLocator.getToolsSwingManager().putInClipboard(toStr);
+//        StringSelection sel = new StringSelection(toStr);
+//        Clipboard CLIPBOARD = Toolkit.getDefaultToolkit().getSystemClipboard();
+//        CLIPBOARD.setContents(sel, null);            
+	}
+
+	private String escape(Object cell, String LINE_BREAK, String CELL_BREAK) {
+		return (cell == null ? "" : cell.toString()
+			.replace(CELL_BREAK, " ")
+			.replace("\n", " ")
+			.replace("\r", " "));
+	}
+
+	@Override
+	public ImageIcon loadImage(String imageName) {
+		String name = FilenameUtils.getBaseName(imageName);
+		IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+		if (theme.exists(name)) {
+			return theme.get(name);
+		}
+		URL url = this.getClass().getResource(name + ".png");
+		if (url == null) {
+			return null;
+		}
+		return new ImageIcon(url);
+	}
+
+	@Override
+	public int getSelectedFeatureCount() {
+		if (this.conditionPanels == null) {
+			return 0;
+		}
+		if (this.currentPostProcess == null || this.tabResults.getSelectedIndex() == 0) {
+			return this.tblResults.getSelectedRowCount();
+		}
+		return this.tblSearchPostProcessResults.getSelectedRowCount();
+	}
+
+	@Override
+	public JComponent getActionButton(String name) {
+		ActionButtons actionButton = this.actions.get(name);
+		if (actionButton == null) {
+			return null;
+		}
+		return actionButton.button;
+	}
+
+	@Override
+	public void setShowActions(boolean showActions) {
+		this.showActions = showActions;
+	}
+
+	@Override
+	public boolean isShowActions() {
+		return this.showActions;
+	}
+
+	public static String getAttributeDescriptorLabel(FeatureAttributeDescriptor attrdesc, String tableName) {
+		String theLabel;
+		int theUseLabels;
+		if (useLabels == null) {
+			Tags tags = attrdesc.getTags();
+			if (tags.has(DAL_USE_LABELS)) {
+				theUseLabels = tags.getInt(DAL_USE_LABELS, USE_LABELS_NO);
+			} else {
+				if (attrdesc.getFeatureType() != null) {
+					tags = attrdesc.getFeatureType().getTags();
+					theUseLabels = tags.getInt(DAL_USE_LABELS, USE_LABELS_NO);
+				} else {
+					theUseLabels = USE_LABELS_NO;
+				}
+			}
+		} else {
+			theUseLabels = useLabels;
+		}
+		switch (theUseLabels) {
+			case USE_LABELS_YES:
+				if (StringUtils.isBlank(tableName)) {
+					theLabel = attrdesc.getLocalizedLabel();
+				} else {
+					theLabel = String.format("%s [%s]", attrdesc.getLocalizedLabel(), tableName);
+				}
+				break;
+			default:
+			case USE_LABELS_NO:
+				if (StringUtils.isBlank(tableName)) {
+					theLabel = attrdesc.getName();
+				} else {
+					theLabel = String.format("%s [%s]", attrdesc.getName(), tableName);
+				}
+				break;
+			case USE_LABELS_BOTH:
+				if (StringUtils.isBlank(tableName)) {
+					theLabel = String.format("%s [%s]", attrdesc.getLocalizedLabel(), attrdesc.getName());
+				} else {
+					theLabel = String.format("%s [%s/%s]", attrdesc.getLocalizedLabel(), attrdesc.getName(), tableName);
+				}
+				break;
+		}
+		return theLabel;
+	}
+
+	private void doCalculatedColumns() {
+		WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		final FeatureQueryCalculatedColumnsPanel panel = new DefaultFeatureQueryCalculatedColumnsPanel();
+		panel.setStore(this.store);
+		panel.put(this.parameters.getQuery());
+		final Dialog dialog = winmanager.createDialog(
+			panel.asJComponent(),
+			i18n.getTranslation("_Calculated_columns"),
+			null,
+			WindowManager_v2.BUTTONS_OK_CANCEL
+		);
+		dialog.addActionListener((ActionEvent e) -> {
+			if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
+				panel.fetch(this.parameters.getQuery());
+				search();
+			}
+		});
+		dialog.show(WindowManager.MODE.DIALOG);
+	}
+
+	private void doGroupBy() {
+		DataStoreProviderFactory dataFactory = this.store.getProviderFactory();
+		int allowGroupBy = ((FeatureStoreProviderFactory) dataFactory).allowGroupBy();
+		if (allowGroupBy != DataType.YES) {
+			// FIXME: mensaje al usaurio.
+			I18nManager i18n = ToolsLocator.getI18nManager();
+			ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+			dialogs.messageDialog(
+				i18n.getTranslation("_The_group_function_is_not_available_for_this_table"),
+				i18n.getTranslation("_Information"),
+				JOptionPane.INFORMATION_MESSAGE
+			);
+			return;
+		}
+
+		WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		final FeatureQueryGroupByPanel panelGroupBy = new DefaultFeatureQueryGroupByPanel();
+		panelGroupBy.setStore(this.store);
+		panelGroupBy.put(this.parameters.getQuery());
+		final Dialog dialog = winmanager.createDialog(
+			panelGroupBy.asJComponent(),
+			i18n.getTranslation("_Select_group_columns_and_aggregate_functions"),
+			null,
+			WindowManager_v2.BUTTONS_OK_CANCEL
+		);
+		dialog.addActionListener((ActionEvent e) -> {
+			if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
+				panelGroupBy.fetch(this.parameters.getQuery());
+				search();
+			}
+		});
+		dialog.show(WindowManager.MODE.DIALOG);
+	}
+
+	private void doSelectResultColumnNames() {
+		WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		final FeatureAttributesSelectionPanel panelSelectColumns = DALSwingLocator.getManager().createFeatureAttributeSelectionPanel();
+		panelSelectColumns.allowCalculatedAttributes(false);
+		FeatureType ftype = this.getFeatureType();
+		try {
+			Feature f = store.findFirst(this.parameters.getQuery());
+			if (f != null) {
+				ftype = f.getType();
+			}
+		} catch (Throwable ex) {
+			LOGGER.warn("Can't retrieve the feature type from the first feature.", ex);
+		}
+		panelSelectColumns.setFeatureType(ftype);
+		panelSelectColumns.setSelectedNames(this.parameters.getResultColumnNames());
+		final Dialog dialog = winmanager.createDialog(
+			panelSelectColumns.asJComponent(),
+			i18n.getTranslation("_Select_the_columns_to_display"),
+			null,
+			WindowManager_v2.BUTTONS_OK_CANCEL
+		);
+		dialog.addActionListener((ActionEvent e) -> {
+			if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
+				this.setResultColumnNames(panelSelectColumns.getSelectedNames());
+				search();
+			}
+		});
+		dialog.show(WindowManager.MODE.DIALOG);
+	}
+
+	@Override
+	public void put(SearchParameters inParams) {
+		this.parameters = (DefaultSearchParameters) inParams;
+		for (SearchConditionPanel conditionPanel : this.conditionPanels) {
+			try {
+				conditionPanel.put(inParams);
+			} catch (Exception ex) {
+				LOGGER.warn("Can't open panel", ex);
+			}
+		}
+		this.tabSearchMode.setSelectedIndex(inParams.getSearchMode());
+//        this.resetTable();
+
+	}
+
+	private FeatureQuery getQuery() {
+		FeatureQuery query;
+		try {
+			int searchMode = this.tabSearchMode.getSelectedIndex();
+			SearchConditionPanel panel = this.conditionPanels.get(searchMode);
+			Expression filter = panel.get();
+			if (searchMode != PANEL_ADVANCED) {
+				this.conditionPanels.get(PANEL_ADVANCED).set(filter);
+			}
+			query = (FeatureQuery) this.parameters.getQuery().clone();
+			query.retrievesAllAttributes();
+			if (ExpressionUtils.isPhraseEmpty(filter)) {
+				return query;
+			}
+			query.setFilter(filter);
+			query.retrievesAllAttributes();
+			return query;
+		} catch (Exception ex) {
+			LOGGER.warn("Can't build query.", ex);
+			return null;
+		}
+	}
+
+	@Override
+	public SearchParameters fetch(SearchParameters outParams) {
+		// Actualiza el fquery del parameters con los paneles
+		for (SearchConditionPanel conditionPanel : conditionPanels) {
+			try {
+				conditionPanel.fetch(this.parameters);
+			} catch (Exception ex) {
+				LOGGER.warn("Panel not able to fetch values", ex);
+			}
+		}
+
+		// Actualiza el filtro con el panel activo
+		int searchMode = this.tabSearchMode.getSelectedIndex();
+		SearchConditionPanel panel = this.conditionPanels.get(searchMode);
+		Expression filter = panel.get();
+		if (searchMode != PANEL_ADVANCED) {
+			this.conditionPanels.get(PANEL_ADVANCED).set(filter);
+		}
+		this.parameters.setSearchMode(searchMode);
+		FeatureQuery query = (FeatureQuery) this.parameters.getQuery();
+		this.lastQuery = query.getCopy();
+		query.retrievesAllAttributes();
+		query.clearFilter();
+		if (!ExpressionUtils.isPhraseEmpty(filter)) {
+			query.setFilter(filter);
+			query.retrievesAllAttributes();
+		}
+
+		if (outParams == null) {
+			return this.parameters.getCopy();
+		}
+		outParams.copyFrom(this.parameters.getCopy());
+		return outParams;
+	}
+
+	public static void selfRegister() {
+		String[][] iconNames = new String[][]{
+			new String[]{"dalswing", "featurestore-column"},
+			new String[]{"dalswing", "featurestore-foreing-key"},
+			new String[]{"dalswing", "featurestore-table"},
+			new String[]{"dalswing", "search-action-select"},
+			new String[]{"dalswing", "search-action-select-add"},
+			new String[]{"dalswing", "search-action-select-filter"},
+			new String[]{"dalswing", "search-nullbehavior-null"},
+			new String[]{"dalswing", "search-nullbehavior-true"},
+			new String[]{"dalswing", "search-nullbehavior-false2"}
+
+		};
+		IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+		for (String[] icon : iconNames) {
+			URL url = DefaultSearchPanel.class.getResource(icon[1] + ".png");
+			theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+		}
+
+		ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new UseLabelsYesAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new UseLabelsNoAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new UseLabelsBothAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new SelectColumnsAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new CalculatedColumnsAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new GroupByAction());
+		cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new OrderByAction());
+	}
+
+	private void doSelectSearchPostprocess() throws DataException {
+		DataSwingManager manager = DALSwingLocator.getDataSwingManager();
+		Map<String, SearchPostProcessFactory> searchPostProcessFactoryMap = manager.getSearchPostProcess();
+
+		JPopupMenu menu = new JPopupMenu();
+		for (String factory : searchPostProcessFactoryMap.keySet()) {
+			JMenuItem item;
+			item = new JMenuItem(factory);
+			SearchParameters searchParams = this.fetch(this.parameters.getCopy());
+			FeatureQuery myQuery = searchParams.getQuery().getCopy();
+//            item.addActionListener(new SearchPostProcessListener(this.store, myQuery, manager.getSearchPostProcess(factory)));
+			item.addActionListener((ActionEvent e) -> {
+				doSearchPostProcess(store, myQuery, manager.getSearchPostProcess(factory), searchParams);
+			});
+			menu.add(item);
+		}
+		menu.show(this.btnSearchPostProcess, 0, this.btnSearchPostProcess.getHeight());
+	}
+
+	private void doExecuteSearchPostProcess(
+		FeatureStore input,
+		FeatureQuery query,
+		SearchPostProcessFactory factory,
+		DynObject parameters
+	) {
+		Cursor savedCursor = this.getCursor();
+		SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("");
+		status.setAutoremove(true);
+		status.add();
+		this.taskStatusController.bind(status);
+		Thread task = new Thread(() -> {
+			try {
+				SwingUtilities.invokeLater(() -> {
+					this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+				});
+				this.processing = true;
+				this.updateComponentState();
+				SearchPostProcess process = factory.createProcess(factory, input, query, parameters);
+
+				if (parameters != null) {
+					process.setParameters(parameters);
+				}
+				//Ejecutar el execute en thread para no bloquear el software
+				SearchPostProcess.SearchPostProcessResult output = process.execute(input, query, parameters, status);
+				if (output != null) {
+					this.postProcessStore = output.getStore();
+					this.postProcessQuery = output.getQuery();
+
+					doLoadSearchPostProccessResults(this.postProcessStore);
+
+				}
+				this.currentPostProcess = factory.getName();
+				status.terminate();
+
+			} catch (Exception ex) {
+				LOGGER.warn("SearchPostProcess not able to be executed.", ex);
+				resetPostProcessTable();
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Error_in_post_process_operation"));
+				status.message("");
+				status.abort();
+			} finally {
+				SwingUtilities.invokeLater(() -> {
+					this.setCursor(savedCursor);
+				});
+				this.processing = false;
+				this.updateComponentState();
+			}
+		}, "ExecuteSearchPostProcess");
+
+		task.start();
+
+	}
+
+	private void doLoadSearchPostProccessResults(FeatureStore input) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(() -> {
+				doLoadSearchPostProccessResults(input);
+			});
+			return;
+		}
+
+		final List<Feature> featuresSearchPostProccessResults;
+		final FeatureQuery finalQuery;
+		finalQuery = null;
+		try {
+			this.tabResults.setEnabledAt(1, true);
+			this.tabResults.setSelectedIndex(1);
+			featuresSearchPostProccessResults = input.getFeatures(finalQuery, 20);
+			FacadeOfAFeaturePagingHelper facadeSearchPostProccessResults = (FacadeOfAFeaturePagingHelper) featuresSearchPostProccessResults;
+			FeatureType ftypeSearchPostProccessResults = facadeSearchPostProccessResults.getFeaturePagingHelper().getFeatureSet().getDefaultFeatureType();
+			// al modelo le pasamos el ftype de esas features
+			resultPostProcessModel = new SimpleFeaturesTableModelImpl(
+				ftypeSearchPostProccessResults,
+				this.parameters.getResultColumnNames(),
+				featuresSearchPostProccessResults
+			);
+
+			I18nManager i18n = ToolsLocator.getI18nManager();
+			TableModel oldmodel = tblSearchPostProcessResults.getModel();
+			tblSearchPostProcessResults.setModel(resultPostProcessModel);
+			resultPostProcessModel.setCellRenderers(tblSearchPostProcessResults);
+			if (oldmodel instanceof SimpleFeaturesTableModel) {
+				((SimpleFeaturesTableModel) oldmodel).dispose();
+			}
+			updateNumberElementsMsg(resultPostProcessModel);
+//            if (resultPostProcessModel.hasErrors()) {
+//                lblMsg.setText("_Errors_occurred_load_search_post_process");
+//            } else {
+//                lblMsg.setText(String.format("%d " + i18n.getTranslation("_elements"), resultPostProcessModel.getRowCount()));
+//            }
+		} catch (Exception ex) {
+			resetPostProcessTable();
+			LOGGER.warn("SearchPostProcess not able to be executed. Can't get features or create table model", ex);
+		}
+	}
+
+	private void updateComponentState() {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(this::updateComponentState);
+			return;
+		}
+		this.pgbStatus.setVisible(processing);
+		this.setEnabled(!processing);
+	}
+
+	private void resetPostProcessTable() {
+		if (!SwingUtilities.isEventDispatchThread()) {
+			SwingUtilities.invokeLater(this::resetPostProcessTable);
+			return;
+		}
+
+		this.tblSearchPostProcessResults.setModel(new DefaultTableModel());
+	}
+
+	private void doSearchPostProcess(FeatureStore store, FeatureQuery query, SearchPostProcessFactory factory, SearchParameters searchParams) {
+		if (factory.hasProcessParameters()) {
+			DynObject parametersPostProcess = factory.createProcessParameters(store, query, searchParams);
+			JDynForm form = DynFormLocator.getDynFormManager().createJDynForm(parametersPostProcess);
+			form.setLayoutMode(JDynForm.USE_SEPARATORS);
+
+			I18nManager i18n = ToolsLocator.getI18nManager();
+			WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+			Dialog dialog = windowManager.createDialog(
+				form.asJComponent(),
+				i18n.getTranslation("_Postprocess_parameters"),
+				i18n.getTranslation(
+					"_Parameters_for_XpostprocessNameX_postprocess_on_XtableNameX",
+					new String[]{
+						factory.getName(),
+						this.store.getName()
+					}
+				),
+				WindowManager_v2.BUTTONS_OK_CANCEL);
+
+			ToolsSwingUtils.ensureRowsCols(dialog.asJComponent(), 20, 60, 30, 100);
+			dialog.addActionListener((ActionEvent e2) -> {
+				if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+					form.getValues(parametersPostProcess); // actualiza el valor de lo los parametros con los valores introducidos por el usuario
+					doExecuteSearchPostProcess(store, query, factory, parametersPostProcess);
+					this.postProcessParams = parametersPostProcess;
+				}
+			});
+
+			dialog.show(WindowManager.MODE.DIALOG);
+
+		} else {
+			doExecuteSearchPostProcess(store, query, factory, null);
+		}
+	}
+
+	private void updateNumberElementsMsg(SimpleFeaturesTableModel model) {
+		I18nManager i18n = ToolsLocator.getI18nManager();
+
+		if (model.hasErrors()) {
+			this.taskStatusController.setTitle(i18n.getTranslation("_Errors_occurred_load_search_post_process"));
+		} else {
+			this.taskStatusController.setTitle(String.format("%d " + i18n.getTranslation("_elements"), model.getRowCount()));
+		}
+	}
+
+	@Override
+	public boolean isVisible(Object component) {
+		if (this.filterOnlyMode) {
+			if (component instanceof GroupByAction) {
+				return false;
+			}
+//            if( component instanceof OrderByAction ) {
+//                return false;
+//            }
+//            if( component instanceof CalculatedColumnsAction ) {
+//                return false;
+//            }
+		}
+		return true;
+	}
+
+	@Override
+	public boolean isEnabled(Object component) {
+		if (component instanceof GroupByAction) {
+			DataStoreProviderFactory dataFactory = this.store.getProviderFactory();
+			int allowGroupBy = ((FeatureStoreProviderFactory) dataFactory).allowGroupBy();
+			if (allowGroupBy != DataType.YES) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public void setFilterOnlyMode(boolean filterOnlyMode) {
+		if (this.conditionPanels != null) {
+			throw new IllegalStateException("Cannot change filter-only-mode after invoking asJComponent.");
+		}
+		this.filterOnlyMode = filterOnlyMode;
+		this.showActions = false;
+	}
+
+	@Override
+	public boolean isFilterOnlyMode() {
+		return this.filterOnlyMode;
+	}
+
+	@Override
+	public Feature getLastSelectedFeature() {
+		return this.lastSelectedFeature;
+	}
+
+	@Override
+	public Object getProperty(String name) {
+		return this.propertiesHelper.getProperty(name);
+	}
+
+	@Override
+	public void setProperty(String name, Object value) {
+		this.propertiesHelper.setProperty(name, value);
+	}
+
+	@Override
+	public Map<String, Object> getProperties() {
+		return this.propertiesHelper.getProperties();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/RecentUsedsAttributesImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/RecentUsedsAttributesImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/RecentUsedsAttributesImpl.java	(revision 46118)
@@ -0,0 +1,65 @@
+package org.gvsig.fmap.dal.swing.impl.searchpanel;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections4.queue.CircularFifoQueue;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RecentUsedsAttributesImpl {
+
+    private final Map<String,CircularFifoQueue<String>> recentsForStore;
+    
+    public RecentUsedsAttributesImpl() {
+        this.recentsForStore = new HashMap<>();
+    }
+    
+    public Collection<String> getNames(FeatureType featureType) {
+        FeatureStore store = featureType.getStore();
+        CircularFifoQueue<String> recents = this.recentsForStore.get(store.getFullName());
+        if( recents==null ) {
+            return Collections.EMPTY_LIST;
+        }
+        return recents;
+    }
+    
+    public Collection<FeatureAttributeDescriptor> getAttributes(FeatureType featureType) {
+        List<FeatureAttributeDescriptor> r = new ArrayList<>();
+        for (String name : this.getNames(featureType)) {
+            r.add(featureType.getAttributeDescriptor(name));
+        }
+        return r;
+    }
+
+    public void add(FeatureAttributeDescriptor attribute) {
+        this.add(attribute.getFeatureType(), attribute.getName());
+    }
+    
+    public void add(FeatureType featureType, FeatureAttributeDescriptor attribute) {
+        this.add(featureType, attribute.getName());
+    }
+    
+    public void add(FeatureType featureType, String name) {
+        String storeFullName = featureType.getStore().getFullName();
+        CircularFifoQueue<String> recents = this.recentsForStore.get(storeFullName);
+        if( recents==null ) {
+            recents = new CircularFifoQueue(this.getMaxSize());
+            this.recentsForStore.put(storeFullName, recents);
+        }
+        recents.remove(name);
+        recents.add(name);
+    }
+
+    public int getMaxSize() {
+        return 6;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchpanel/DefaultSearchParameters.java	(revision 46118)
@@ -0,0 +1,277 @@
+/*
+ * 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.searchpanel;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+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.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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 jjdelcerro
+ */
+public class DefaultSearchParameters implements SearchParameters, Cloneable {
+
+    private List<String> resultColumnNames;
+    private FeatureQuery query;
+    public String name;
+    private Map<String, JsonObject> values;
+    private int searchMode;
+
+    public DefaultSearchParameters() {
+        this.resultColumnNames = new ArrayList<>();
+        this.query = null;
+        this.values = new HashMap<>();
+        this.searchMode = DefaultSearchPanel.PANEL_SIMPLIFIED;
+    }
+
+    @Override
+    public List<String> getResultColumnNames() {
+        return this.resultColumnNames;
+    }
+
+    public List<String> getGroupByColumns() {
+        return this.query.getGroupByColumns();
+    }
+
+    public Map<String, String> getAggregateFunctions() {
+        return this.query.getAggregateFunctions();
+    }
+
+    public void setQuery(FeatureQuery query) {
+        this.query = query;
+    }
+
+    public void setFilter(Expression exp) {
+        this.query.setFilter(exp);
+    }
+
+    public FeatureQuery getQuery() {
+        return this.query;
+    }
+
+    void setResultColumnNames(List<String> selectedNames) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Map<String, JsonObject> getValues() {
+        return this.values;
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition("SearchParameters") == null) {
+            DynStruct definition = manager.addDefinition(DefaultSearchParameters.class,
+                    "DefaultSearchParameters", "DefaultSearchParameters persistence definition", null, null);
+            definition.addDynFieldList("resultColumnNames").setClassOfItems(String.class);
+            definition.addDynFieldMap("values").setClassOfItems(String.class);
+            definition.addDynFieldObject("query").setClassOfValue(FeatureQuery.class).setMandatory(false);
+            definition.addDynFieldString("name").setClassOfValue(String.class);
+            definition.addDynFieldInt("searchMode").setClassOfValue(Integer.class);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("resultColumnNames", this.resultColumnNames);
+        HashMap<String, String> valuesMap = new HashMap<>();
+        for (String key : this.values.keySet()) {
+            JsonObject value = this.values.get(key);
+            valuesMap.put(key, value.toString());
+        }
+        state.set("values", valuesMap);
+        state.set("query", this.query);
+        state.set("name", this.name);
+        state.set("searchMode", this.searchMode);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.resultColumnNames = new ArrayList<>(state.getList("resultColumnNames"));
+        Map<String, String> valuesState = state.getMap("values");
+        HashMap<String, JsonObject> valuesMap = new HashMap<>();
+
+        for (String key : valuesState.keySet()) {
+            String value = valuesState.get(key);
+            InputStream targetStream = new ByteArrayInputStream(value.getBytes());
+            JsonReader reader = Json.createReader(targetStream);
+            JsonObject jsonObject = reader.readObject();
+            valuesMap.put(key, jsonObject);
+        }
+
+        this.values = valuesMap;
+        this.query = (FeatureQuery) state.get("query");
+        this.name = state.getString("name");
+        try {
+            this.searchMode = state.getInt("searchMode");
+        } catch(Exception ex) {
+            this.searchMode = DefaultSearchPanel.PANEL_SIMPLIFIED;
+        }
+    }
+
+    @Override
+    public String toString() {
+        if (this.query != null) { // && this.query.getExpressionFilter() != null) {
+            try {
+                StringBuilder builder = new StringBuilder();
+                if (this.query.getExpressionFilter() != null) {
+                    builder.append(this.query.getExpressionFilter().getPhrase());
+                }
+                boolean has = true;
+                for (EditableFeatureAttributeDescriptor col : this.query.getExtraColumn().getColumns()) {
+                    if (has) {
+                        builder.append("\n\n");
+                        builder.append("ExtraColumn: ");
+                        has=false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(col.getName());
+                }
+                
+                has = true;
+                for (String attributeName : this.getResultColumnNames()) {
+                    if (has) {
+                        builder.append("\n\n");
+                        builder.append("ShowFields: ");
+                        has=false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(attributeName);
+                }
+                
+                has = true;
+                for (String groupByColumn : this.getGroupByColumns()) {
+                    if (has) {
+                        builder.append("\n\n");
+                        builder.append("GroupBy: ");
+                        has=false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(groupByColumn);
+                }
+
+                has = true;
+                for (String key : this.getAggregateFunctions().keySet()) {
+                    if (has) {
+                        builder.append("\n\n");
+                        builder.append("AggregateFunctions: ");
+                        has=false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(key);
+                }
+                
+                has = true;
+                for (FeatureQueryOrder.FeatureQueryOrderMember member : this.query.getOrder().members()) {
+                    if (has) {
+                        builder.append("\n\n");
+                        builder.append("Order: ");
+                        has=false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(member.getAttributeName());
+                    builder.append("(");
+                    builder.append(member.getAscending());
+                    builder.append(")");
+                }
+
+
+                return builder.toString();
+            } catch (Exception ex) {
+                return this.getName();
+            }
+        } else {
+            return this.getName();
+
+        }
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultSearchParameters clone = (DefaultSearchParameters) super.clone();
+        clone.query = this.query.getCopy();
+        clone.resultColumnNames = new ArrayList(this.resultColumnNames);
+        HashMap<String, JsonObject> cloneValues = new HashMap<>(this.values);
+        clone.values = cloneValues;
+        return clone;
+    }
+
+    public DefaultSearchParameters getCopy() {
+        try {
+            return (DefaultSearchParameters) this.clone();
+        } catch (CloneNotSupportedException ex) {
+            return null;
+        }
+    }
+
+    @Override
+    public void copyFrom(SearchParameters params) {
+        this.resultColumnNames = params.getResultColumnNames();
+        this.query = params.getQuery().getCopy();
+        this.name = params.getName();
+        this.values = params.getValues();
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public FeatureType getFeatureType(FeatureStore store) {
+        FeatureSet fset = null;
+        try {
+            fset = store.getFeatureSet(this.query);
+            FeatureType ft = fset.getDefaultFeatureType();
+            return ft;
+        } catch (DataException ex) {
+            return store.getDefaultFeatureTypeQuietly();
+        } finally {
+            DisposeUtils.disposeQuietly(fset);
+        }
+    }
+    
+    public int getSearchMode()  {
+        return this.searchMode;
+    }
+    
+    public void setSearchMode(int searchMode) {
+        this.searchMode = searchMode;
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DefaultDataStoreParametersPanelManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DefaultDataStoreParametersPanelManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DefaultDataStoreParametersPanelManager.java	(revision 46118)
@@ -0,0 +1,120 @@
+package org.gvsig.fmap.dal.swing.impl.dataStoreParameters;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelFactory;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DefaultDataStoreParametersPanelManager implements DataStoreParametersPanelManager {
+
+    private static Logger logger = LoggerFactory.getLogger(DefaultDataStoreParametersPanelManager.class);
+            
+    private List<DataStoreParametersPanelFactory> factories = null;
+    
+    public DefaultDataStoreParametersPanelManager() {
+        this.factories = new ArrayList<>();
+    }
+    
+    @Override
+    public void registerFactory(DataStoreParametersPanelFactory factory) {
+        if( this.factories.contains(factory) ) {
+            return;
+        }
+        this.factories.add(factory);
+    }
+
+    @Override
+    public DataStoreParametersPanelFactory getFactory(DynObject parameters) {
+        DataStoreParametersPanelFactory factory = null;
+        for (DataStoreParametersPanelFactory currentFactory : factories) {
+            if( currentFactory.canBeApplied(parameters) ) {
+                if( factory == null ) {
+                    factory = currentFactory;
+                } else if( factory.getPriority() < currentFactory.getPriority() ) {
+                    factory = currentFactory;
+                }
+            }
+        }
+        return factory;
+    }
+
+    @Override
+    public DataStoreParametersPanel createDataStoreParametersPanel(DynObject parameters) {
+        DataStoreParametersPanelFactory factory = this.getFactory(parameters);
+        if( factory == null ) {
+            return null;
+        }
+        return factory.create(parameters);
+    }
+    
+    @Override
+    public int showPropertiesDialog(final DynObject parameters) {
+        
+        final DataStoreParametersPanel panel = this.createDataStoreParametersPanel(parameters);
+        return this.showPropertiesDialog(parameters, panel);
+    }
+    
+    @Override
+    public int showPropertiesDialog(final DynObject parameters, final DataStoreParametersPanel panel) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        String title = parameters.getDynClass().getDescription();
+        if( StringUtils.isBlank(title) ) {
+        	title = parameters.getDynClass().getName();
+        }
+        if( title.startsWith("_") ) {
+          title = i18n.getTranslation(title);
+        }
+        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        Dialog dialog = winmanager.createDialog(
+                panel.asJComponent(),
+                title,
+                null, 
+                WindowManager_v2.BUTTONS_APPLY_OK_CANCEL
+        );
+        if( panel instanceof DataStoreDynObjectParametersPanel ) {
+            dialog.setButtons(WindowManager_v2.BUTTONS_OK_CANCEL);
+        } else {
+            dialog.setButtonLabel(
+                    WindowManager_v2.BUTTON_APPLY, 
+                    i18n.getTranslation("Avanzado")
+            );
+        }
+        dialog.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                switch(ae.getID() ) {
+                    case WindowManager_v2.BUTTON_APPLY:
+                        showAdvancedPropertiesDialog(parameters);
+                        break;
+                    case WindowManager_v2.BUTTON_OK:
+                        panel.fetchParameters(parameters);
+                        break;
+                    case WindowManager_v2.BUTTON_CANCEL:
+                        break;
+                }
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+        return dialog.getAction();
+    }
+    
+    private void showAdvancedPropertiesDialog(DynObject parameters) {
+        final DataStoreParametersPanel panel =  new DataStoreDynObjectParametersPanel(parameters);
+        this.showPropertiesDialog(parameters, panel);
+   }    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanel.java	(revision 46118)
@@ -0,0 +1,56 @@
+
+package org.gvsig.fmap.dal.swing.impl.dataStoreParameters;
+
+import java.awt.Dimension;
+import javax.swing.JComponent;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.AbstractDataStoreParametersPanel;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynobject.DynObject;
+
+
+public class DataStoreDynObjectParametersPanel extends AbstractDataStoreParametersPanel {
+    private final DynObject parameters;
+    private JDynForm form;
+
+    public DataStoreDynObjectParametersPanel(DynObject paramters) {
+     	this.parameters = paramters;
+        this.form = DynFormLocator.getDynFormManager().createJDynForm(this.parameters);
+    	this.form.setLayoutMode(this.form.USE_TABS);
+
+    }
+
+    @Override
+    public void putParameters(DynObject parameters) {
+        this.form.setValues(parameters);
+    }
+
+    @Override
+    public void fetchParameters(DynObject parameters) {
+        this.form.getValues(parameters);
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        JComponent x = this.form.asJComponent();
+        Dimension preferredSize = x.getPreferredSize();
+        if(preferredSize.width>700){
+            preferredSize.width = 700;
+        } else if(preferredSize.width<500) {
+            preferredSize.width = 500;
+        }
+        if(preferredSize.height>400){
+            preferredSize.height = 400;
+        } else if(preferredSize.height<250) {
+            preferredSize.height = 250;
+        }
+        x.setPreferredSize(preferredSize);
+        return x;
+    }
+
+    @Override
+    public JDynForm getForm() {
+        return this.form;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dataStoreParameters/DataStoreDynObjectParametersPanelFactory.java	(revision 46118)
@@ -0,0 +1,30 @@
+package org.gvsig.fmap.dal.swing.impl.dataStoreParameters;
+
+import org.gvsig.fmap.dal.swing.dataStoreParameters.AbstractDataStoreParametersPanelFactory;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelFactory;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class DataStoreDynObjectParametersPanelFactory
+    extends
+        AbstractDataStoreParametersPanelFactory
+    implements
+        DataStoreParametersPanelFactory 
+    {
+
+    @Override
+    public DataStoreParametersPanel create(DynObject parameters) {
+        return new DataStoreDynObjectParametersPanel(parameters);
+    }
+
+    @Override
+    public boolean canBeApplied(DynObject parameters) {
+        return true;
+    }
+
+    @Override
+    public int getPriority() {
+        return LOWEST_PRIORITY - 1;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOnFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOnFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOnFactory.java	(revision 46118)
@@ -0,0 +1,303 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.FeatureExtraColumns;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.AggregateOperation.AggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.FirstAggregateOperation.FirstAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.NullAggregateOperation.NullAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.searchPostProcess.AbstractSearchPostProcessFactory;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcess;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcessFactory;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynClass_v2;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.LoggerFactory;
+
+/**
+ * i
+ *
+ * @author jovivas
+ */
+public class DistinctOnFactory extends AbstractSearchPostProcessFactory {
+
+    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DistinctOnFactory.class);
+
+    public static final String NAME = "DistinctOn";
+    public static final String LABEL = "DistinctOn";
+    public static final String DESCRIPTION = "DistinctOn_description";
+
+    public DistinctOnFactory() {
+        super(
+                NAME,
+                LABEL,
+                DESCRIPTION,
+                null,
+                null
+        );
+    }
+
+    @Override
+    public SearchPostProcess createProcess(SearchPostProcessFactory factory, FeatureStore input, FeatureQuery query, DynObject parameters) {
+        SearchPostProcess process = new DistinctOn(this, input, query, parameters);
+        return process;
+    }
+
+    @Override
+    public boolean hasProcessParameters() {
+        return true;
+    }
+
+    @Override
+    public DynObject createProcessParameters(FeatureStore input, FeatureQuery query, SearchParameters searchParams) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+        DynClass_v2 dynClass = (DynClass_v2) dynObjectManager.createDynClass("distinctOn " + input.getName() +"_"+ UUID.randomUUID().toString(), null); 
+        DynField_v2 dynField = (DynField_v2) dynClass.addDynFieldString("field");
+        dynField.setLabel(i18n.getTranslation("_Distinct_on_field"));
+        dynField.setDescription("");
+        dynField.setGroup(i18n.getTranslation("_Field_to_group_by_unique_values"));
+        dynField.setOrder(1);
+        String operation = null;
+        FeatureType ft = input.getDefaultFeatureTypeQuietly();
+        List<DynObjectValueItem> attrs = getAtributeNames(input);
+        if (query.getExtraColumn().size()>0) {
+//        if (searchParams.getResultColumnNames().size()>0) {
+////            DynObjectValueItem[] attrs = new DynObjectValueItem[size];
+////            List<DynObjectValueItem> attrs = new ArrayList<DynObjectValueItem>();
+            FeatureExtraColumns extraColumns = query.getExtraColumn();
+//            int newSize = attrs.length+query.getExtraColumn().size();
+//            DynObjectValueItem[] newAttrs = new DynObjectValueItem[newSize];
+//            int j = 0;
+//            for (int i = 0; i < attrs.length; i++) {
+//                newAttrs[i]=attrs[i];
+//            }
+
+            for (int i = 0; i < extraColumns.size(); i++) {
+                EditableFeatureAttributeDescriptor attr = extraColumns.get(i);
+                DataType dataType = attr.getDataType();
+                if (!dataType.isContainer()){
+                    attrs.add( new DynObjectValueItem(attr.getName(), attr.getLabel()));
+                } 
+            }
+            
+//            for ( EditableFeatureAttributeDescriptor attr : query.getExtraColumn()) {
+//                if (query.getExtraColumn().get(attrName) != null) {
+//                    DynObjectValueItem attr = new DynObjectValueItem(query.getExtraColumn().get(attrName), query.getExtraColumn().get(attrName).toJson().getString(label));
+//                    try{
+//                        attrs.add(attr);
+//                    }catch (Exception ex) {
+//                        LOGGER.warn("Can't add "+ attr.toString(), ex);
+//                    }
+//                }
+//            }
+           
+            dynField.setAvailableValues(attrs.toArray(new DynObjectValueItem[attrs.size()]));
+            for (int i = 0; i < attrs.size(); i++) {
+                fillParameters( (String) attrs.get(i).getValue(), operation, dynClass, dynField, searchParams, i, ft, extraColumns);
+                
+            }
+//            for (String attrName : query.getAttributeNames()) {
+//                if (ft.get(attrName) != null) {
+//                    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) ft.get(attrName);
+//                    fillParameters(attr, firstOperation, dynClass, dynField);
+//                } else if (query.getExtraColumn().get(attrName) != null) {
+//                    FeatureAttributeDescriptor attr = query.getExtraColumn().get(attrName);
+//                    fillParameters(attr, firstOperation, dynClass, dynField);
+//                }
+//            }
+
+        } else {
+            dynField.setAvailableValues(attrs);
+            for (int i = 0; i < attrs.size(); i++) {  
+//            }
+//            for (FeatureAttributeDescriptor attr : input.getDefaultFeatureTypeQuietly()) {
+                fillParameters( (String) attrs.get(i).getValue(), operation, dynClass, dynField, searchParams, i, ft, null);
+            }
+        }
+
+        dynClass.getTags().set(DynFormSPIManager.TAG_DYNFORM_HEIGHT, 250);
+        dynClass.getTags().set(DynFormSPIManager.TAG_DYNFORM_WIDTH, 350);
+
+        DynObject params = dynObjectManager.createDynObject(dynClass);
+        return params;
+    }
+
+    private void fillParameters(String attr,
+            String operation,
+            DynClass_v2 dynClass,
+            DynField_v2 dynField,
+            SearchParameters searchParams,
+            int n,
+            FeatureType ft,
+            FeatureExtraColumns extraColumns
+            ) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        // dynField = (DynField_v2) dynClass.addDynFieldString(attr.getName());
+        for (FeatureAttributeDescriptor featureAttributeDescriptor : ft) {
+            if (StringUtils.equals(featureAttributeDescriptor.getName(), attr)) {
+                Class attrClass = featureAttributeDescriptor.getDataType().getDefaultClass();
+                List<DynObjectValueItem> availableOperations = fillAggregateOperations (attrClass);
+                if (availableOperations.size() > 0) {
+                    if(searchParams.getResultColumnNames().contains(attr)){
+                        String newOperation = getOperation(attrClass, operation);
+                        dynField = (DynField_v2) dynClass.addDynFieldString(attr);
+                        dynField.setAvailableValues(availableOperations);
+                        dynField.setDefaultFieldValue(newOperation);
+                        dynField.setGroup(i18n.getTranslation("_Visible_columns"));
+                        dynField.setOrder(2000+n);
+                    } else {
+                        String newOperation = getOperation(attrClass, NullAggregateOperationFactory.NAME);
+                        dynField = (DynField_v2) dynClass.addDynFieldString(attr);
+                        dynField.setAvailableValues(availableOperations);
+                        dynField.setDefaultFieldValue(newOperation);
+                        dynField.setGroup(i18n.getTranslation("_Hidden_columns"));
+                        dynField.setOrder(3000+n);
+                    }
+                }
+            }   
+        }
+        if (extraColumns != null){
+            for (int i = 0; i < extraColumns.size(); i++) {
+                if (StringUtils.equals(extraColumns.get(i).getName(), attr)) {
+                    Class attrClass = ((FeatureAttributeDescriptor) extraColumns.get(i)).getDataType().getDefaultClass();;
+                    List<DynObjectValueItem> availableOperations = fillAggregateOperations (attrClass);
+                    if (availableOperations.size() > 0) {
+                        if(searchParams.getResultColumnNames().contains(attr)){
+                            String newOperation = getOperation(attrClass, operation);
+                            dynField = (DynField_v2) dynClass.addDynFieldString(attr);
+                            dynField.setAvailableValues(availableOperations);
+                            dynField.setDefaultFieldValue(newOperation);
+                            dynField.setGroup(i18n.getTranslation("_Visible_columns"));
+                            dynField.setOrder(2000+n);
+                        } else {
+                            String newOperation = getOperation(attrClass, NullAggregateOperationFactory.NAME);
+                            dynField = (DynField_v2) dynClass.addDynFieldString(attr);
+                            dynField.setAvailableValues(availableOperations);
+                            dynField.setDefaultFieldValue(newOperation);
+                            dynField.setGroup(i18n.getTranslation("_Hidden_columns"));
+                            dynField.setOrder(3000+n);
+                        }
+                    }
+                }            
+            }
+        }
+//        List<DynObjectValueItem> availableOperations = new ArrayList<>();
+//        for (AggregateOperationFactory factory : DistinctOn.getAggregatesOperationFactories()) {
+//            if (factory == null) {
+//                continue;
+//            }
+//            if (Comparable.class.isAssignableFrom((Class<?>) attrClass)){
+//                if (operation == null && factory instanceof FirstAggregateOperationFactory) {
+//                    operation = factory.getName();
+//                }
+//            } else {
+//                if (operation == null && factory instanceof NothingAggregateOperationFactory) {
+//                    operation = factory.getName();
+//                }
+//            }
+////            if (firstOperation == null && factory instanceof FirstAggregateOperationFactory) {
+////                firstOperation = factory.getName();
+////            }
+//            if (factory.isApplicable(attrClass)) {
+//                availableOperations.add(new DynObjectValueItem(
+//                        factory.getName(),
+//                        i18n.getTranslation("_" + StringUtils.replaceChars(factory.getName(), ' ', '_'))
+//                ));
+//            }
+//        }
+        
+
+    }
+
+    private List<DynObjectValueItem>  fillAggregateOperations (Class attrClass){
+        
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        List<DynObjectValueItem> availableOperations = new ArrayList<>();
+        for (AggregateOperationFactory factory : DistinctOn.getAggregatesOperationFactories()) {
+            if (factory == null) {
+                continue;
+            }
+//            if (Comparable.class.isAssignableFrom((Class<?>) attrClass)){
+//                if (operation == null && factory instanceof FirstAggregateOperationFactory) {
+//                    operation = factory.getName();
+//                }
+//            } else {
+//                if (operation == null && factory instanceof NothingAggregateOperationFactory) {
+//                    operation = factory.getName();
+//                }
+//            }
+            
+            if (factory.isApplicable(attrClass)) {
+                availableOperations.add(new DynObjectValueItem(
+                        factory.getName(),
+                        i18n.getTranslation("_" + StringUtils.replaceChars(factory.getName(), ' ', '_'))
+                ));
+            }
+        } 
+        return availableOperations;
+    }
+    
+    private String getOperation (Class attrClass,String operation){
+        for (AggregateOperationFactory factory : DistinctOn.getAggregatesOperationFactories()) {
+            if (factory == null) {
+                continue;
+            }
+            if (Comparable.class.isAssignableFrom((Class<?>) attrClass)){
+                if (operation == null && factory instanceof FirstAggregateOperationFactory) {
+                    operation = factory.getName();
+                }
+            }
+        } 
+        return operation;
+    }
+    
+    public static void selfRegister() {
+        try {
+            DataSwingManager manager = DALSwingLocator.getDataSwingManager();
+            manager.registerSearchPostProcess(new DistinctOnFactory());
+        } catch (Exception ex) {
+            LOGGER.warn("Can't register distinct on search post process.", ex);
+        }
+    }
+
+    private List<DynObjectValueItem> getAtributeNames(FeatureStore input) {
+        FeatureType ft = input.getDefaultFeatureTypeQuietly();
+        List<DynObjectValueItem> values = new ArrayList();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        for (FeatureAttributeDescriptor attr : ft) {
+            DataType dataType = attr.getDataType();
+            if (!dataType.isContainer()){
+                values.add( new DynObjectValueItem(attr.getName(), i18n.getTranslation(attr.getLabel())));
+            }               
+        }
+//        return values.toArray(new DynObjectValueItem[values.size()]);
+        return values;
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/AggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/AggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/AggregateOperation.java	(revision 46118)
@@ -0,0 +1,30 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+import org.gvsig.tools.util.Factory;
+import org.gvsig.tools.util.IsApplicable;
+
+/**
+ *
+ * @author jovivas
+ */
+public interface AggregateOperation extends IsApplicable{
+    
+    public interface AggregateOperationFactory extends Factory, IsApplicable{
+
+        @Override
+        public AggregateOperation create(Object... os); 
+        
+    }
+
+    public void reset();
+
+    public void perform(Object value);
+
+    public Object getValue();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/LastAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/LastAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/LastAggregateOperation.java	(revision 46118)
@@ -0,0 +1,57 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+/**
+ *
+ * @author jovivas
+ */
+public class LastAggregateOperation implements AggregateOperation {
+    public static class LastAggregateOperationFactory implements AggregateOperationFactory{
+
+        @Override
+        public String getName() {
+            return "Last value";
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new LastAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return true;
+        }
+    }
+    
+    Object last;
+
+    public LastAggregateOperation() {
+        this.last = null;
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return true;
+    }
+
+    @Override
+    public void reset() {
+        this.last = null;
+    }
+
+    @Override
+    public void perform(Object value) {
+            this.last = value;
+    }
+
+    @Override
+    public Object getValue() {
+        return this.last;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MinAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MinAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MinAggregateOperation.java	(revision 46118)
@@ -0,0 +1,70 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+/**
+ *
+ * @author jovivas
+ */
+
+
+public class MinAggregateOperation implements AggregateOperation {
+    
+    public static class MinAggregateOperationFactory implements AggregateOperationFactory{
+
+        @Override
+        public String getName() {
+            return "Minimum value";
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new MinAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return Comparable.class.isAssignableFrom((Class<?>) value[0]);
+        }
+        
+    }
+    
+    Object min;
+
+    public MinAggregateOperation() {
+        this.min = null;
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return value[0] instanceof Comparable;
+    }
+
+    @Override
+    public void reset() {
+        this.min = null;
+    }
+
+    @Override
+    public void perform(Object value) {
+        if (value == null) {
+            return;
+        }
+        if (this.min == null) {
+            this.min = value;
+            return;
+        }
+        if (((Comparable) value).compareTo(this.min) < 0) {
+            this.min = value;
+        }
+    }
+
+    @Override
+    public Object getValue() {
+        return this.min;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/SumAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/SumAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/SumAggregateOperation.java	(revision 46118)
@@ -0,0 +1,63 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+//    public static void selfRegister(){
+
+//        registerAggregateOperation(new MinAggregateOperationFactory());
+//    }
+//
+ public class SumAggregateOperation implements AggregateOperation {
+    
+    public static class SumAggregateOperationFactory implements AggregateOperationFactory{
+
+        @Override
+        public String getName() {
+            return "Summation";
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new SumAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return Number.class.isAssignableFrom((Class<?>) value[0]);
+        }
+        
+    }
+    
+    double sum;
+
+    public SumAggregateOperation() {
+        this.sum = 0;
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return value[0] instanceof Number;
+    }
+
+    @Override
+    public void reset() {
+        this.sum = 0;
+    }
+
+    @Override
+    public void perform(Object value) {
+        if (value == null) {
+            return;
+        }
+        this.sum += ((Number) value).doubleValue();
+    }
+
+    @Override
+    public Object getValue() {
+        return this.sum;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MaxAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MaxAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/MaxAggregateOperation.java	(revision 46118)
@@ -0,0 +1,68 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+/**
+ *
+ * @author jovivas
+ */
+public class MaxAggregateOperation implements AggregateOperation {
+    
+    public static class MaxAggregateOperationFactory implements AggregateOperationFactory{
+
+        @Override
+        public String getName() {
+            return "Maximum value";
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new MaxAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return Comparable.class.isAssignableFrom((Class<?>) value[0]);
+        }
+        
+    }
+    
+    Object max;
+
+    public MaxAggregateOperation() {
+        this.max = null;
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return value[0] instanceof Comparable;
+    }
+
+    @Override
+    public void reset() {
+        this.max = null;
+    }
+
+    @Override
+    public void perform(Object value) {
+        if (value == null) {
+            return;
+        }
+        if (this.max == null) {
+            this.max = value;
+            return;
+        }
+        if (((Comparable) value).compareTo(this.max) > 0) {
+            this.max = value;
+        }
+    }
+
+    @Override
+    public Object getValue() {
+        return this.max;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOn.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOn.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/DistinctOn.java	(revision 46118)
@@ -0,0 +1,248 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+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.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.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.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.AggregateOperation.AggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.searchPostProcess.AbstractSearchPostProcess;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcessFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.HasAFile;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jovivas
+ */
+public class DistinctOn extends AbstractSearchPostProcess {
+
+	private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DistinctOnFactory.class);
+
+	public DistinctOn(
+		SearchPostProcessFactory factory,
+		FeatureStore input,
+		FeatureQuery query,
+		DynObject parameters
+	) {
+		super(factory, input, query, parameters);
+
+	}
+
+	@Override
+	public SearchPostProcessResult execute(FeatureStore inputStore, FeatureQuery query, DynObject parameters, SimpleTaskStatus status) {
+		String uniqueFieldName;
+
+		uniqueFieldName = (String) parameters.getDynValue("field");
+
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		if (status == null) {
+			status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18n.getTranslation("_Executing_post_process"));
+			status.setAutoremove(true);
+			status.add();
+		} else {
+			status.push();
+			status.setTitle(i18n.getTranslation("_Executing_post_process"));
+		}
+		status.message(i18n.getTranslation("_Creating_data_base"));
+
+		try {
+			// crear ruta de archivo temporal
+			FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+			File tempFile = foldersManager.getUniqueTemporaryFile("distinctOn_process_" + UUID.randomUUID().toString());
+
+			// crear SERVER STORE
+			DataManager dataManager = DALLocator.getDataManager();
+			JDBCServerExplorerParameters serverParameters = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters("H2Spatial");
+			((HasAFile) serverParameters).setFile(tempFile);
+			JDBCServerExplorer serverExplorer = (JDBCServerExplorer) dataManager.openServerExplorer("H2Spatial", serverParameters);
+
+			//Crear tablas en server store
+			JDBCNewStoreParameters parametersResults = serverExplorer.getAddParameters();
+			parametersResults.setDynValue("Table", "results");
+			FeatureType ft_inputStore = inputStore.getDefaultFeatureType();
+			EditableFeatureType ft_inputStoreNoContainer = dataManager.createFeatureType();
+			ft_inputStoreNoContainer.addAll(ft_inputStore);
+			for (FeatureAttributeDescriptor attr : ft_inputStore) {
+				DataType dataType = attr.getDataType();
+				EditableFeatureAttributeDescriptor eattr = ft_inputStoreNoContainer.getEditableAttributeDescriptor(attr.getName());
+				if (dataType.isContainer()) {
+					ft_inputStoreNoContainer.remove(attr.getName());
+				}
+				if (eattr.isComputed()) {
+					eattr.setFeatureAttributeEmulator((FeatureAttributeEmulator) null);
+				}
+				if (eattr.isPrimaryKey()) {
+					eattr.setIsPrimaryKey(false);
+				}
+				if (!eattr.allowIndexDuplicateds()) {
+					eattr.setAllowIndexDuplicateds(true);
+				}
+				if (!eattr.allowNull()) {
+					eattr.setAllowNull(true);
+				}
+			}
+			Map<String, EditableFeatureAttributeDescriptor> allExtraColumns = new HashMap<>();
+			for (EditableFeatureAttributeDescriptor column : ft_inputStore.getExtraColumns().getColumns()) {
+				allExtraColumns.put(column.getName(), column);
+			}
+			for (EditableFeatureAttributeDescriptor column : query.getExtraColumn().getColumns()) {
+				allExtraColumns.put(column.getName(), column);
+			}
+			if (allExtraColumns.size() > 0) {
+				for (EditableFeatureAttributeDescriptor column : allExtraColumns.values()) {
+					DataType dataType = column.getDataType();
+					if (!dataType.isContainer()) {
+						ft_inputStoreNoContainer.add(column.getName(), column.getType(), column.getSize());
+					}
+				}
+			}
+
+			parametersResults.setDefaultFeatureType(ft_inputStoreNoContainer);
+
+			serverExplorer.add("H2Spatial", parametersResults, true);
+
+			DataStoreParameters storeParametersResults = dataManager.createStoreParameters("H2Spatial");
+			storeParametersResults.setDynValue("database_file", tempFile);
+			storeParametersResults.setDynValue("Table", "results");
+
+			//Creaci�n del store con los resultados
+			FeatureStore storeResults = (FeatureStore) dataManager.openStore("H2Spatial", storeParametersResults);
+
+			// Creaci�n del Map con las funciones de agragado
+			Map<String, AggregateOperation> aggregates = new HashMap<>();
+			for (FeatureAttributeDescriptor attr : ft_inputStoreNoContainer) {
+				if (parameters.hasDynValue(attr.getName())) {
+					String operation = (String) parameters.getDynValue(attr.getName());
+					aggregates.put(
+						attr.getName(),
+						(AggregateOperation) aggregatesOperationFactories.get(operation).create()
+					);
+				}
+			}
+
+			// distictOn
+			storeResults.edit(FeatureStore.MODE_APPEND);
+
+			FeatureSet features;
+
+			status.message(i18n.getTranslation("_Getting_features_from_query"));
+
+			if (query != null) {
+				features = inputStore.getFeatureSet(query);
+			} else {
+				features = inputStore.getFeatureSet();
+			}
+			EditableFeature aggregateFeature = null;
+
+			status.message(i18n.getTranslation("_Processing_features"));
+			status.setRangeOfValues(0, features.size());
+
+			for (Feature feature : features) {
+				if (status.isCancellationRequested()) {
+					DisposeUtils.disposeQuietly(features);
+					if (storeResults.isEditing()) {
+						storeResults.cancelEditingQuietly();
+					}
+
+					status.setTitle(i18n.getTranslation("_Post_process_canceled"));
+					status.message("");
+					status.cancel();
+					return null;
+				}
+				if (aggregateFeature != null) {
+					if (Objects.equals(feature.get(uniqueFieldName), aggregateFeature.get(uniqueFieldName))) {
+						for (Map.Entry<String, AggregateOperation> entry : aggregates.entrySet()) {
+							String name = entry.getKey();
+							AggregateOperation operation = entry.getValue();
+							Object value = feature.get(name);
+							if (operation.isApplicable(value)) {
+								operation.perform(value);
+							}
+							aggregateFeature.set(name, operation.getValue());
+						}
+					} else {
+						storeResults.insert(aggregateFeature);
+						aggregateFeature = null;
+					}
+				}
+
+				if (aggregateFeature == null) {
+					aggregateFeature = storeResults.createNewFeature(feature);
+					for (Map.Entry<String, AggregateOperation> entry : aggregates.entrySet()) {
+						String name = entry.getKey();
+						AggregateOperation operation = entry.getValue();
+						operation.reset();
+						Object value = feature.get(name);
+						if (operation.isApplicable(value)) {
+							operation.perform(value);
+						}
+						aggregateFeature.set(name, operation.getValue());
+					}
+				}
+				status.incrementCurrentValue();
+			}
+			if (aggregateFeature != null) {
+				storeResults.insert(aggregateFeature);
+			}
+
+			storeResults.finishEditing();
+//            storeUValues.finishEditing();
+
+			SearchPostProcessResult searchPostProcessResult = new DefaultSearchPostProcessResult(storeResults, null);
+			status.setTitle(i18n.getTranslation("_Post_process_ended"));
+			status.message("");
+			return searchPostProcessResult;
+
+		} catch (DataException | ValidateDataParametersException ex) {
+			LOGGER.warn("Can't execute distinct on search post process.", ex);
+		} finally {
+			status.pop();
+		}
+
+		return null;
+	}
+
+	private static Map<String, AggregateOperationFactory> aggregatesOperationFactories = new HashMap<>();
+
+	public static void registerAggregateOperation(AggregateOperationFactory aggregateOperationFactory) {
+		aggregatesOperationFactories.put(aggregateOperationFactory.getName(), aggregateOperationFactory);
+	}
+
+	public static Collection<AggregateOperationFactory> getAggregatesOperationFactories() {
+		return aggregatesOperationFactories.values();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/FirstAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/FirstAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/FirstAggregateOperation.java	(revision 46118)
@@ -0,0 +1,62 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+/**
+ *
+ * @author jovivas
+ */
+public class FirstAggregateOperation implements AggregateOperation {
+    public static class FirstAggregateOperationFactory implements AggregateOperationFactory{
+
+        @Override
+        public String getName() {
+            return "First value";
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new FirstAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return true;
+        }
+    }
+    
+    Object first;
+    boolean isFirst = true;
+
+    public FirstAggregateOperation() {
+        this.first = null;
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return true;
+    }
+
+    @Override
+    public void reset() {
+        this.first = null;
+        this.isFirst=true;
+    }
+
+    @Override
+    public void perform(Object value) {    
+        if (isFirst) {
+            this.first = value;
+            isFirst = false;
+        }
+    }
+
+    @Override
+    public Object getValue() {
+        return this.first;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/NullAggregateOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/NullAggregateOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/searchPostProcess/distinctOn/NullAggregateOperation.java	(revision 46118)
@@ -0,0 +1,56 @@
+/*
+ * 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.searchPostProcess.distinctOn;
+
+/**
+ *
+ * @author jovivas
+ */
+public class NullAggregateOperation implements AggregateOperation {
+    public static class NullAggregateOperationFactory implements AggregateOperationFactory{
+        public static final String NAME = "None";
+        @Override
+        public String getName() {
+            return NAME;
+        }
+
+        @Override
+        public AggregateOperation create(Object... os) {
+            return new NullAggregateOperation();
+        }
+
+        @Override
+        public boolean isApplicable(Object... value) {
+            return true;
+        }
+    }
+    
+
+    public NullAggregateOperation() {
+
+    }
+
+    @Override
+    public boolean isApplicable(Object... value) {
+        return true;
+    }
+
+    @Override
+    public void reset() {
+
+    }
+
+    @Override
+    public void perform(Object value) {    
+
+    }
+
+    @Override
+    public Object getValue() {
+        return null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeModel.java	(revision 46118)
@@ -0,0 +1,335 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Predicate;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.complements.Search.OrderedAttribute;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.feature.ForeingKey.ContextForeingKey;
+import static org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel.getAttributeDescriptorLabel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FeatureAttributeTreeModel
+        implements TreeModel, Disposable {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(FeatureAttributeTreeModel.class);
+
+
+  public interface Node extends LabeledValue<FeatureAttributeDescriptor>, Disposable {
+
+    public FeatureStore getFeatureStore();
+
+    public boolean isRoot();
+
+    public boolean isLeaf();
+
+    public List<Node> getChildren();
+  }
+
+  private class DefaultNode
+          extends LabeledValueImpl<FeatureAttributeDescriptor>
+          implements Node {
+
+    private List<Node> childs;
+    private final FeatureStore store;
+    private final int type;
+
+    public DefaultNode(FeatureStore store, List<OrderedAttribute> attributes) {
+      super(store == null ? "" : store.getName(), null);
+      DisposeUtils.bind(store);
+      this.store = store;
+      this.type = OrderedAttribute.TYPE_REGURAL;
+      this.childs = new ArrayList<>();
+      for (OrderedAttribute attribute : attributes) {
+        this.childs.add(new DefaultNode(store, attribute.getDescriptor(), attribute.getType()));
+      }
+    }
+
+    private DefaultNode(FeatureStore store, FeatureAttributeDescriptor attribute, int type) {
+      super(attribute.getLocalizedLabel(), attribute);
+      DisposeUtils.bind(store);
+      this.store = store;
+      this.type = type;
+      this.childs = null;
+    }
+
+    public String getLabel(int type) {
+      String theLabel;
+      FeatureAttributeDescriptor attrdesc = this.getValue();
+      if (attrdesc == null) {
+        theLabel = super.getLabel();
+      } else {
+        String tableName = null;
+        if (attrdesc.isForeingKey()) {
+          ForeingKey foreingKey = attrdesc.getForeingKey();
+          tableName = foreingKey.getTableName();
+        }
+        theLabel = getAttributeDescriptorLabel(attrdesc, tableName);
+      }
+      switch (type) {
+        case Search.OrderedAttribute.TYPE_REGURAL:
+          break;
+        case Search.OrderedAttribute.TYPE_FAVORITE:
+          theLabel = "<html><b>" + theLabel + "</b></html>";
+          break;
+        case Search.OrderedAttribute.TYPE_RECENT:
+          theLabel = "<html><i><b>" + theLabel + "</b></i></html>";
+          break;
+      }
+      return theLabel;
+    }
+
+    @Override
+    public String getLabel() {
+      return this.getLabel(this.type);
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+      return this.store;
+    }
+
+    @Override
+    public boolean isRoot() {
+      return this.getValue() == null;
+    }
+
+    @Override
+    public List<Node> getChildren() {
+      if (showRelations && this.childs == null) {
+        FeatureAttributeDescriptor descriptor = this.getValue();
+        try {
+          this.childs = Collections.EMPTY_LIST;
+          switch (descriptor.getRelationType()) {
+            case DynField.RELATION_TYPE_IDENTITY:
+            case DynField.RELATION_TYPE_COLLABORATION:
+              if (this.getValue().isForeingKey()) {
+                ForeingKey foreingKey = this.getValue().getForeingKey();
+                ContextForeingKey context = foreingKey.createContext();
+                // Ojo, no liberamos el contexto para que no se destruya el store.
+                try {
+                    FeatureStore theStore = foreingKey.getFeatureStore(context);
+                    if (theStore == null) {
+                      this.childs = Collections.EMPTY_LIST;
+                    } else {
+                      FeatureType featureType = foreingKey.getFeatureType(context);
+                      String fullName = theStore.getFullName();
+                      if (stores.contains(fullName)) {
+                        // Si ya hemos a�adido el store al arbol no lo volvemos a a�adir.
+                        this.childs = Collections.EMPTY_LIST;
+                      } else {
+                        Search featureTypeSearch = (Search) ToolsLocator.getComplementsManager().get(
+                                Search.COMPLEMENT_MANE, featureType
+                        );
+                        List<Search.OrderedAttribute> attributes = featureTypeSearch.getOrderedAttributes(
+                                filterByDataType,
+                                Search.LABEL_ORDER,
+                                -1
+                        );
+                        this.childs = new ArrayList<>();
+                        for (Search.OrderedAttribute attribute : attributes) {
+                          this.childs.add(new DefaultNode(theStore, attribute.getDescriptor(), attribute.getType()));
+                        }
+                        stores.add(fullName);
+                      }
+                    }
+                } finally {
+                    context.dispose();
+                }
+              }
+              break;
+
+            case DynField.RELATION_TYPE_COMPOSITION:
+            case DynField.RELATION_TYPE_AGGREGATE:
+              FeatureAttributeEmulator emulator = descriptor.getFeatureAttributeEmulator();
+              if( emulator instanceof FeatureAttributeEmulatorExpression) {
+                FeatureAttributeEmulatorExpression emulatorExp = (FeatureAttributeEmulatorExpression) emulator;
+                Code code = emulatorExp.getExpression().getCode();
+                if( code.code()==Code.CALLABLE ) {
+                  Callable caller = (Callable) code;
+                  if( StringUtils.equalsIgnoreCase(caller.name(), "SELECT") ) {
+                    Codes parameters = caller.parameters();
+                    String tableName = (String) ((Code.Identifier)(parameters.get(1))).name();
+                    DataManager dataManager = DALLocator.getDataManager();
+                    FeatureStore theStore = (FeatureStore) dataManager.getStoresRepository().getStore(tableName);
+                    if (theStore == null) {
+                      this.childs = Collections.EMPTY_LIST;
+                    } else {
+                      FeatureType featureType = theStore.getDefaultFeatureType();
+                      String fullName = theStore.getFullName();
+                      if (stores.contains(fullName)) {
+                        // Si ya hemos a�adido el store al arbol no lo volvemos a a�adir.
+                        this.childs = Collections.EMPTY_LIST;
+                      } else {
+                        Search featureTypeSearch = (Search) ToolsLocator.getComplementsManager().get(
+                                Search.COMPLEMENT_MANE, featureType
+                        );
+                        List<Search.OrderedAttribute> attributes = featureTypeSearch.getOrderedAttributes(
+                                filterByDataType,
+                                Search.LABEL_ORDER,
+                                -1
+                        );
+                        this.childs = new ArrayList<>();
+                        for (Search.OrderedAttribute attribute : attributes) {
+                          this.childs.add(new DefaultNode(theStore, attribute.getDescriptor(), attribute.getType()));
+                        }
+                        stores.add(fullName);
+                        DisposeUtils.disposeQuietly(theStore);
+                      }
+                    }
+                  }
+                }
+              }
+              break;
+
+            case DynField.RELATION_TYPE_NONE: 
+            default:
+              break;
+          }
+        } catch(Exception ex) {
+          this.childs = Collections.EMPTY_LIST;
+          LOGGER.warn("Can't get childs of "+descriptor.getName(),ex);
+        }
+      }
+      return this.childs;
+    }
+
+    @Override
+    public boolean isLeaf() {
+      return this.getChildren().isEmpty();
+    }
+
+    @Override
+    public void dispose() {
+       DisposeUtils.disposeQuietly(store);
+       if (this.childs!=null) {
+           for (Node child : childs) {
+               child.dispose();
+           }
+       }
+    }
+  }
+
+  private final Set<String> stores;
+  private final DefaultNode root;
+  private final Predicate<FeatureAttributeDescriptor> filterByDataType;
+  private boolean showRelations;
+
+  public FeatureAttributeTreeModel(FeatureStore store, FeatureType featureType, boolean showRelations, Predicate<FeatureAttributeDescriptor> filterByDataType) {
+    if (filterByDataType == null) {
+      this.filterByDataType = Search.ALL_FILTER;
+    } else {
+      this.filterByDataType = filterByDataType;
+    }
+    if (featureType==null) {
+        featureType = store.getDefaultFeatureTypeQuietly();
+    }
+
+    Search featureTypeSearch = (Search) ToolsLocator.getComplementsManager().get(
+            Search.COMPLEMENT_MANE, featureType
+    );
+    List<Search.OrderedAttribute> attributes = featureTypeSearch.getOrderedAttributes(
+            filterByDataType,
+            Search.LABEL_ORDER,
+            -1
+    );
+    this.root = new DefaultNode(store, attributes);
+    this.stores = new HashSet<>();
+    this.showRelations = showRelations;
+  }
+
+  @Override
+  public Object getRoot() {
+    return this.root;
+  }
+
+  @Override
+  public int getChildCount(Object parent) {
+    DefaultNode node = (DefaultNode) parent;
+    return node.getChildren().size();
+  }
+
+  @Override
+  public Object getChild(Object parent, int index) {
+    DefaultNode node = (DefaultNode) parent;
+    if(node.getChildren()==null) {
+        return null;
+    }
+    return node.getChildren().get(index);
+  }
+
+  @Override
+  public boolean isLeaf(Object node) {
+    return ((DefaultNode) node).isLeaf();
+  }
+
+  @Override
+  public int getIndexOfChild(Object parent, Object child) {
+    try {
+      DefaultNode parantNode = (DefaultNode) parent;
+      DefaultNode childNode = (DefaultNode) child;
+      int index = 0;
+      for (Node node : parantNode.getChildren()) {
+        if (StringUtils.equalsIgnoreCase(childNode.getValue().getName(), node.getValue().getName())) {
+          return index;
+        }
+        index++;
+      }
+    } catch (Exception ex) {
+
+    }
+    return 0;
+  }
+
+  @Override
+  public void valueForPathChanged(TreePath path, Object newValue) {
+  }
+
+  @Override
+  public void addTreeModelListener(TreeModelListener l) {
+  }
+
+  @Override
+  public void removeTreeModelListener(TreeModelListener l) {
+  }
+  
+    @Override
+    public void dispose() {
+       if(this.root!=null) {
+           this.root.dispose();
+       } 
+    }
+  
+  
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanel.java	(revision 46118)
@@ -0,0 +1,692 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import org.gvsig.fmap.dal.swing.impl.featuretype.featurerule.FeatureRulesModel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.featurerule.FeatureRuleController;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.TagController;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+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.Objects;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JSplitPane;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.AbstractTableModel;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.configurableactions.ConfigurableActionsMamager;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.FeatureRule;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.Tag;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.TagsModel;
+import org.gvsig.texteditor.JTextEditor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynStruct_v2;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.util.ToolsUtilLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureTypePanel 
+        extends DefaultFeatureTypePanelView
+        implements FeatureTypePanel
+    {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypePanel.class);
+
+    private FeatureType originalFeatureType = null;
+    private JSplitPane splRules;
+    private JSplitPane splAttributes;
+    private FeatureRuleController ruleController;
+
+    private class FeatureTypeTableModel extends AbstractTableModel {
+
+        private final FeatureType featureType;
+        private final String[] columnNames = new String[] {
+          "Name",
+          "Type",
+          "Size",
+          "Precision",
+          "Scale",
+          "Default value",
+          "Calculated",
+          "Fk"
+        };
+        private final Class[] columnClasses = new Class[] {
+          String.class,
+          String.class,
+          Integer.class,
+          Integer.class,
+          Integer.class,
+          String.class,
+          Boolean.class,
+          Boolean.class
+        };
+        
+        public FeatureTypeTableModel() {
+            this.featureType = null;
+        }
+        
+        public FeatureTypeTableModel(FeatureType featureType) {
+            this.featureType = featureType;
+        }
+        
+        @Override
+        public int getRowCount() {
+            if( this.featureType==null ) {
+                return 0;
+            }
+            return this.featureType.size();
+        }
+
+        @Override
+        public int getColumnCount() {
+            if( this.featureType==null ) {
+                return 0;
+            }
+            return this.columnNames.length;
+        }
+
+        @Override
+        public String getColumnName(int columnIndex) {
+            if( this.featureType==null ) {
+                return "";
+            }
+            return this.columnNames[columnIndex];
+        }
+
+        @Override
+        public Class<?> getColumnClass(int columnIndex) {
+            if( this.featureType==null ) {
+                return String.class;
+            }
+            return this.columnClasses[columnIndex];
+        }
+
+        @Override
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            return false;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            if( this.featureType==null ) {
+                return "";
+            }
+            FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(rowIndex);
+            DataType dataType = descriptor.getDataType();
+            switch(columnIndex) {
+                case 0:
+                    return descriptor.getName();
+                case 1:
+                    return descriptor.getDataTypeName();
+                case 2:
+                    if( dataType.supportSize() ) {
+                      return descriptor.getSize();
+                    }
+                    return null;
+                case 3:
+                    if( dataType.supportPrecision()) {
+                      return descriptor.getPrecision();
+                    }
+                    return null;
+                case 4:
+                    if( dataType.supportScale()) {
+                      return descriptor.getScale();
+                    }
+                    if( dataType.isNumeric() ) {
+                      return 0;
+                    }
+                    return null;
+                case 5:
+                    return Objects.toString(descriptor.getDefaultValue(),"");
+                case 6:
+                    return descriptor.isComputed();
+                case 7:
+                    return descriptor.isForeingKey();
+                default:
+                    return "";
+            }
+        }
+
+        @Override
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+        }
+    
+        public void fireUpdateEvent() {
+            this.fireTableChanged(new TableModelEvent(this));
+        }
+    }
+    
+    public static class ViewAsJsonAction extends AbstractAction {
+        
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public ViewAsJsonAction() {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+
+            this.putValue(NAME, i18n.getTranslation("_View_as_Json"));
+            this.putValue(ACTION_COMMAND_KEY, "ViewAsJson");
+        }
+
+        @Override
+        public Object getValue(String key) {
+            if (NAME.equals(key)) {
+                // Cuando se registra la accion aun no se han cargado las traducciones
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                return i18n.getTranslation("_View_as_Json");
+            }
+            return super.getValue(key);
+        }
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            DefaultFeatureTypePanel featureTypePanel = (DefaultFeatureTypePanel) e.getSource();
+            FeatureType featureType = featureTypePanel.fetch(null);
+
+            JTextEditor editor = ToolsUtilLocator.getTextEditorManager().createTextEditor();
+            editor.setText(featureType.toJsonBuilder().toString());
+
+            WindowManager winmanager = ToolsSwingLocator.getWindowManager();
+            winmanager.showWindow(
+                    editor.asJComponent(), 
+                    "FeatureType - "+featureType.getName(), 
+                    WindowManager.MODE.WINDOW
+            );
+        }
+        
+    }
+    
+    private DefaultFeatureAttributePanel descriptorPanel;
+    private EditableFeatureType featureType;
+    private int mode;
+    private FeatureTypeTableModel tableModel;
+    private FeatureStore store;
+    private int currentRow;
+    private boolean fieldSelectionAllowed;
+    private AggregateController<Tag> tagsController;
+    private ChangeListenerHelper changeListenerHelper;
+    private AggregateController<FeatureRule> rulesController;
+        
+    public DefaultFeatureTypePanel() {
+        this.mode = MODE_SHOW_ONLY;
+        this.currentRow = -1;
+        this.fieldSelectionAllowed = true;
+        this.initComponents();
+    }
+    
+    @SuppressWarnings("Convert2Lambda")
+    private void initComponents() {
+        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+        JComponent c = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this);
+        this.pnlCfgActions.setLayout(new BorderLayout(0,0));
+        this.pnlCfgActions.add(c, BorderLayout.CENTER);
+
+        this.splRules = ToolsSwingUtils.createVerticalSplit(
+                this.gridRules, 
+                this.gridRulesTable, false,
+                this.gridRulesDetail, true
+        );
+        this.splAttributes = ToolsSwingUtils.createVerticalSplit(
+                this.gridAttributes,
+                this.gridAttributesTable, false,
+                this.gridAttributesDetail, true
+        );
+        
+        this.changeListenerHelper = swingManager.createChangeListenerHelper();
+        
+        swingManager.translate(this.btnDelete);
+        swingManager.translate(this.btnFormFieldAccept);
+        swingManager.translate(this.btnFormFieldDiscard);
+        swingManager.translate(this.btnFormFieldModify);
+        swingManager.translate(this.btnNew);
+        swingManager.translate(this.lblLabel);
+        swingManager.translate(this.lblDescription);
+        swingManager.translate(this.lblTags);
+        swingManager.translate(this.tabFeatureType);
+        swingManager.translate(this.lblRulesDefaultRules);
+        swingManager.translate(this.lblRulesCustomRules);
+        swingManager.translate(this.chkRulesValidateFeatureBeforeInsert);
+        swingManager.translate(this.chkRulesValidateFeaturesAtFinishEditing);
+        swingManager.translate(this.lblRuleName);
+        swingManager.translate(this.lblRuleDescription);
+        swingManager.translate(this.lblRuleCheckAtFinishEditing);
+        swingManager.translate(this.lblRuleCheckAtUpdate);
+        swingManager.translate(this.lblRuleValidation);
+        swingManager.translate(this.btnRulesNew);
+        swingManager.translate(this.btnRulesDelete);
+        swingManager.translate(this.btnRuleFormFieldModify);
+        swingManager.translate(this.btnRuleFormFieldAccept);
+        swingManager.translate(this.btnRuleFormFieldDiscard);
+        swingManager.translate(this.btnRuleValidation);
+        swingManager.translate(this.btnRuleValidationBookmarks);
+        swingManager.translate(this.btnRuleValidationHistory);
+                
+        this.tableModel = new FeatureTypeTableModel();
+        this.tblFields.setModel(this.tableModel);
+        this.tblFields.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if( e.getValueIsAdjusting() ) {
+                    return;
+                }
+                doChangeFieldSelection();
+            }
+        });
+        this.descriptorPanel = new DefaultFeatureAttributePanel();
+        this.pnlField.setLayout(new BorderLayout());
+        this.pnlField.add(this.descriptorPanel, BorderLayout.CENTER);
+        this.descriptorPanel.setEnabled(false);
+
+        this.btnFormFieldModify.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doFormFieldModify();
+            }
+        });
+        this.btnFormFieldDiscard.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doFormFieldDiscard();
+            }
+        });
+        this.btnFormFieldAccept.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doFormFieldAccept();
+            }
+        });
+        this.btnNew.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doNewField();
+            }
+        });
+        this.btnDelete.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDeleteField();
+            }
+        });
+        
+        this.tagsController = new DefaultAggregateController<>(
+                this.tblTagsItems,
+                this.btnTagsModify,
+                this.btnTagsDiscard,
+                this.btnTagsAccept,
+                this.btnTagsNew,
+                this.btnTagsDelete,
+                new TagController(
+                        this.cboTagsItemName,
+                        this.cboTagsItemValue,
+                        this.lblTagsItemNotesValue
+                )
+        );
+
+        this.ruleController = new FeatureRuleController(
+                txtRuleName,
+                txtRuleDescription,
+                chkRuleCheckAtFinishEditing,
+                chkRuleCheckAtUpdate,
+                txtRuleValidation,
+                btnRuleValidation,
+                btnRuleValidationBookmarks, 
+                btnRuleValidationHistory
+        );
+                
+        this.rulesController = new DefaultAggregateController<>(
+                this.tblRules, 
+                this.btnRuleFormFieldModify, 
+                this.btnRuleFormFieldDiscard, 
+                this.btnRuleFormFieldAccept, 
+                this.btnRulesNew, 
+                this.btnRulesDelete,
+                ruleController
+        );
+
+        if( this.tblFields.getRowCount()>0 ) {
+            this.tblFields.getSelectionModel().setSelectionInterval(0, 0);
+            doFormFieldPut();
+        }
+        ToolsSwingUtils.ensureRowsCols(this, 22, 110, 26, 120);
+    }
+       
+    private boolean doFormFieldFetch() {
+        int row = this.tblFields.getSelectedRow();
+        if (row < 0) {
+            return true;
+        }
+        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
+        int previousType = descriptor.getType();
+        if (descriptor instanceof EditableFeatureAttributeDescriptor) {
+            if (this.descriptorPanel.fetch((EditableFeatureAttributeDescriptor) descriptor) == null) {
+                return false;
+            }
+            this.tableModel.fireUpdateEvent();
+        }
+        FeatureAttributeDescriptor oldDescriptor = null;
+        if (this.originalFeatureType != null) {
+            oldDescriptor = this.originalFeatureType.getAttributeDescriptor(descriptor.getName());
+        }
+        if (oldDescriptor != null
+                && oldDescriptor.getDataType() != descriptor.getDataType()
+                && previousType != descriptor.getType()) {
+            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+            I18nManager i18manager = ToolsLocator.getI18nManager();
+            StringBuilder message = new StringBuilder();
+
+            String[] messageArgs = new String[]{oldDescriptor.getName()};
+            message.append(i18manager.getTranslation("_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type", messageArgs));
+            message.append(".\n");
+            message.append(i18manager.getTranslation("_Values_of_data_will_try_to_coerce_to_this_type"));
+            dialogs.messageDialog(
+                    message.toString(),
+                    null,
+                    i18manager.getTranslation("_Values_will_change"),
+                    JOptionPane.INFORMATION_MESSAGE,
+                    "feature-type-manager-field-already-exist-in-previous-schema");
+        }
+
+        return true;
+    }
+    
+    private void doFormFieldPut() {
+        int row = this.tblFields.getSelectedRow();
+        if( row<0 ) {
+            return;
+        }
+        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
+        this.currentRow = row;
+        this.descriptorPanel.put(descriptor);
+        updateButtonState();
+        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
+            this.btnFormFieldModify.setEnabled((this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA) && this.tblFields.getSelectedRowCount()==1);
+        } else {
+            this.btnFormFieldModify.setEnabled(false);
+        }
+    }
+    
+    private void updateButtonState() {
+        this.descriptorPanel.setEnabled(true);
+        this.descriptorPanel.setMode(MODE_SHOW_ONLY);
+        this.btnFormFieldAccept.setEnabled(false);
+        this.btnFormFieldDiscard.setEnabled(false);
+        
+        switch(this.mode) {
+            case MODE_EDIT_ALL:
+                this.btnDelete.setEnabled(true);
+                this.btnFormFieldModify.setEnabled(true);
+                this.btnNew.setEnabled(true);
+                this.tagsController.setEnabled(true);
+                this.rulesController.setEnabled(true);
+                this.txtLabel.setEditable(true);
+                this.txtDescription.setEditable(true);
+                break;
+            case MODE_EDIT_ONLY_METADATA:
+                this.btnDelete.setEnabled(this.descriptorPanel.isVirtualField());
+                this.btnFormFieldModify.setEnabled(true);
+                this.btnNew.setEnabled(true);
+                this.tagsController.setEnabled(true);
+                this.rulesController.setEnabled(true);
+                this.txtLabel.setEditable(true);
+                this.txtDescription.setEditable(true);
+                break;
+            case MODE_SHOW_ONLY:
+                this.btnDelete.setEnabled(false);
+                this.btnFormFieldModify.setEnabled(false);
+                this.btnNew.setEnabled(false);
+                this.tagsController.setEnabled(false);
+                this.rulesController.setEnabled(false);
+                this.txtLabel.setEditable(false);
+                this.txtDescription.setEditable(false);
+                break;
+        }
+    }
+    
+    private void doFormFieldModify() {
+        int row = this.tblFields.getSelectedRow();
+        if( row<0 ) {
+            return;
+        }
+        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
+        this.descriptorPanel.put(descriptor);
+        this.descriptorPanel.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
+        this.btnFormFieldAccept.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
+        this.btnFormFieldDiscard.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
+        this.btnFormFieldModify.setEnabled(false);
+        this.btnNew.setEnabled(false);
+        this.btnDelete.setEnabled(false);
+        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
+            this.descriptorPanel.setMode(this.mode);
+        } else {
+            this.descriptorPanel.setMode(MODE_SHOW_ONLY);
+        }
+        this.fieldSelectionAllowed = false;
+        this.changeListenerHelper.fireEvent();
+    }
+    
+    @Override
+    public boolean isEditing() {
+        return btnFormFieldAccept.isEnabled() || this.rulesController.isEditing();
+    }
+    
+    private void doFormFieldAccept() {
+        int row = this.tblFields.getSelectedRow();
+        if( row<0 ) {
+            return;
+        }
+        if( doFormFieldFetch() ) {
+            this.updateButtonState();
+            this.tblFields.getSelectionModel().setSelectionInterval(row, row);
+            this.tblFields.scrollRectToVisible(this.tblFields.getCellRect(row, 0, true));
+            this.fieldSelectionAllowed = true;
+        }
+        this.changeListenerHelper.fireEvent();
+    }
+    
+    private void doFormFieldDiscard() {
+        doFormFieldPut();
+        this.updateButtonState();
+        this.fieldSelectionAllowed = true;
+        this.changeListenerHelper.fireEvent();
+    }
+
+    private void doChangeFieldSelection() {
+        int row = this.tblFields.getSelectedRow();
+        if( row<0 ) {
+            return;
+        }
+        if( !this.fieldSelectionAllowed ) {
+            if( row !=this.currentRow ) {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                JOptionPane.showMessageDialog(
+                    this, 
+                    i18n.getTranslation("_Before_changing_field_accept_or_discard_the_changes"), 
+                    i18n.getTranslation("_Warning"), 
+                    JOptionPane.WARNING_MESSAGE
+                );
+                this.tblFields.getSelectionModel().setSelectionInterval(
+                        this.currentRow, 
+                        this.currentRow
+                );
+            }
+            return;
+        }
+        doFormFieldPut();   
+    }
+    
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public int getMode() {
+        return this.mode;
+    }
+    
+    @Override
+    public void setMode(int mode) {
+        this.mode = mode;
+        updateButtonState();
+    }
+
+    @Override
+    public EditableFeatureType fetch(EditableFeatureType type) {
+        if( type == null ) {
+            type = (EditableFeatureType) this.featureType.getCopy();
+        } else {
+            type.removeAll();
+            type.copyFrom(this.featureType);
+        }
+        type.setLabel(
+            StringUtils.defaultIfBlank(this.txtLabel.getText(), null)
+        );
+        type.setDescription(
+            StringUtils.defaultIfBlank(this.txtDescription.getText(), null)
+        );
+        this.tagsController.getModel().fetch(type.getTags());
+        type.setCheckFeaturesAtInsert(this.chkRulesValidateFeatureBeforeInsert.isSelected());
+        type.setCheckFeaturesAtFinishEditing(this.chkRulesValidateFeaturesAtFinishEditing.isSelected());
+        return type;
+    }
+
+    @Override
+    public void put(FeatureType type) {
+        this.featureType = null;
+        this.originalFeatureType = null;
+        if (type == null) {
+            this.store = null;
+            this.rulesController.clean();
+            this.tagsController.clean();
+            this.chkRulesValidateFeatureBeforeInsert.setSelected(true);
+            this.chkRulesValidateFeaturesAtFinishEditing.setSelected(false);
+        } else {
+            FeatureType ftypeToCompare = type.getOriginalFeatureType();
+            if (ftypeToCompare == null) {
+                ftypeToCompare = type;
+            }
+            this.originalFeatureType = ftypeToCompare.getCopy();
+            this.featureType = (EditableFeatureType) type.getCopy();
+            this.rulesController.setModel(new FeatureRulesModel(this.featureType.getRules()));
+            this.chkRulesValidateFeatureBeforeInsert.setSelected(type.isCheckFeaturesAtInsert());
+            this.chkRulesValidateFeaturesAtFinishEditing.setSelected(type.isCheckFeaturesAtFinishEditing());
+            // Nos quedamos una referencia para evitar que se destruya, ya que
+            // el featureType se guarda solo una WeakReference.
+            this.store = type.getStore();
+            this.ruleController.setFeatureStore(this.store);
+            this.txtLabel.setText(
+                    StringUtils.defaultIfBlank(((DynStruct_v2) type).getLabel(), "")
+            );
+            this.txtDescription.setText(
+                    StringUtils.defaultIfBlank(((DynStruct_v2) type).getDescription(), "")
+            );
+            this.tagsController.setModel( new TagsModel(((DynStruct_v2) type).getTags()));
+        }
+        if( !(type instanceof EditableFeatureType) ) {
+            this.setMode(MODE_SHOW_ONLY);
+        }
+        this.tableModel = new FeatureTypeTableModel(this.featureType);
+        this.tblFields.setModel(this.tableModel);
+        if( type!=null && !type.isEmpty() ) {
+            this.tblFields.getSelectionModel().setSelectionInterval(0, 0);
+        }
+        updateButtonState();
+        doFormFieldPut();       
+    }
+
+    private void doNewField() {
+        EditableFeatureType eft = (EditableFeatureType)this.featureType;
+        EditableFeatureAttributeDescriptor descriptor = eft.add(
+                this.featureType.getNewFieldName(), 
+                DataTypes.STRING,
+                50
+        );
+        if( this.mode == MODE_EDIT_ONLY_METADATA ) {
+            descriptor.setFeatureAttributeEmulator(ExpressionUtils.createExpression("NULL"));
+        }
+        this.tableModel.fireUpdateEvent();
+        int row = descriptor.getIndex();
+        this.tblFields.getSelectionModel().addSelectionInterval(row,row);
+        this.tblFields.scrollRectToVisible(this.tblFields.getCellRect(row, 0, true));
+        updateButtonState();
+        doFormFieldModify();    
+        this.changeListenerHelper.fireEvent();
+    }
+    
+    private void doDeleteField() {
+        int row = this.tblFields.getSelectedRow();
+        int[] rows = this.tblFields.getSelectedRows();
+        ArrayList FeatureAttributeDescriptor;
+        ArrayList<String> descriptors = new ArrayList<>();
+        for (int rowDescriptor : rows) {
+            if (rowDescriptor < 0) {
+                continue;
+            }
+            descriptors.add(this.featureType.getAttributeDescriptor(rowDescriptor).getName());
+        }
+        for (String descriptor : descriptors) {
+            ((EditableFeatureType)this.featureType).remove(descriptor);
+        }
+        this.tableModel.fireUpdateEvent();
+        if( row >= this.tblFields.getRowCount()) {
+            row = this.tblFields.getRowCount()-1;
+        }
+        this.tblFields.getSelectionModel().addSelectionInterval(row,row);
+        updateButtonState();
+        doFormFieldPut();       
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public void addChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.addChangeListener(listener);
+    }
+
+    @Override
+    public ChangeListener[] getChangeListeners() {
+        return this.changeListenerHelper.getChangeListeners();
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener listener) {
+        this.changeListenerHelper.removeChangeListener(listener);
+    }
+
+    @Override
+    public void removeAllChangeListener() {
+        this.changeListenerHelper.removeAllChangeListener();
+    }
+
+    @Override
+    public boolean hasChangeListeners() {
+        return this.changeListenerHelper.hasChangeListeners();
+    }
+    
+  public static void selfRegister() {
+        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+        cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new ViewAsJsonAction());
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRendererImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRendererImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeListCellRendererImpl.java	(revision 46118)
@@ -0,0 +1,91 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.Component;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributeListCellRenderer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.LabeledValue;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FeatureAttributeListCellRendererImpl 
+        extends DefaultListCellRenderer
+        implements FeatureAttributeListCellRenderer
+    {
+
+    private final IconTheme iconTheme;
+    private int useLabels;
+
+    public FeatureAttributeListCellRendererImpl() {
+        this.iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        this.useLabels = DataManager.USE_LABELS_BOTH;
+    }
+    
+    @Override
+    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+        JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+        if( value == null ) {
+            return label;
+        }
+        FeatureAttributeDescriptor attrdesc;
+        if( value instanceof LabeledValue ) {
+            attrdesc = ((LabeledValue<FeatureAttributeDescriptor>)value).getValue();
+        } else {
+            attrdesc = (FeatureAttributeDescriptor) value;
+        }   
+        String theLabel = "";
+        String iconName = null;
+        try {
+            if(attrdesc  != null) {
+                switch (this.useLabels) {
+                    case DataManager.USE_LABELS_NO:
+                        theLabel = attrdesc.getName();
+                        break;
+                    case DataManager.USE_LABELS_YES:
+                        if (attrdesc.hasLabel()) {
+                            theLabel = attrdesc.getLocalizedLabel();
+                        } else {
+                            theLabel = attrdesc.getName();
+                        }
+                        break;
+                    case DataManager.USE_LABELS_BOTH:
+                    default:
+                        if (attrdesc.hasLabel()) {
+                            theLabel = String.format("%s [%s]", attrdesc.getLocalizedLabel(), attrdesc.getName());
+                        } else {
+                            theLabel = attrdesc.getName();
+                        }
+                        break;
+                }
+                iconName = attrdesc.getDataType().getIconName();
+            }
+            label.setText(theLabel);
+            if (iconTheme.exists(iconName)) {
+                label.setIcon(iconTheme.get(iconName));
+            } else {
+                label.setIcon(null);
+            }
+        } catch (Exception ex) {
+            label.setText("#ERROR#");
+        }
+        return label;
+    }
+
+    @Override
+    public void setUseLabeld(int useLabels) {
+        this.useLabels = useLabels;
+    }
+
+    @Override
+    public int getUseLabels() {
+        return this.useLabels;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.xml	(revision 46118)
@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featuretype/DefaultFeatureAttributeSelectionPanelView.xml</at>
+   <at name="path">src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureAttributeSelectionPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name">txtFilter</at>
+            <at name="width">966</at>
+            <at name="height">20</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">4</at>
+           <at name="row">2</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="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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="actionCommand">...</at>
+            <at name="icon">
+             <object classname="com.jeta.forms.store.properties.IconProperty">
+              <at name="embedded">false</at>
+              <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/common-filter.png</at>
+              <at name="description">common-filter.png</at>
+              <at name="width">16</at>
+              <at name="height">16</at>
+             </object>
+            </at>
+            <at name="name">btnFilter</at>
+            <at name="width">20</at>
+            <at name="height">20</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">3</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.JTree</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTree</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">treeFields</at>
+            <at name="width">995</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="height">509</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/FeatureAttributeTreeCellRenderer.java	(revision 46118)
@@ -0,0 +1,94 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.Component;
+import java.awt.FlowLayout;
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTree;
+import javax.swing.border.EmptyBorder;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeCellRenderer;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeTreeModel.Node;
+import org.gvsig.tools.swing.api.CompoundIcon;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FeatureAttributeTreeCellRenderer 
+        extends DefaultTreeCellRenderer 
+        implements TreeCellRenderer
+    {
+    
+    private final Icon iconTable;
+    private final Icon iconColumn;
+    private final Icon iconForeingKey;
+//    private final JPanel panel;
+//    private final JLabel icon;
+//    private final DefaultTreeCellRenderer label;
+    private final IconTheme iconTheme;
+    
+    public FeatureAttributeTreeCellRenderer() {
+        this.iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        this.iconTable = iconTheme.get("featurestore-table");
+        this.iconColumn = iconTheme.get("featurestore-column");
+        this.iconForeingKey = iconTheme.get("featurestore-foreing-key");
+        
+//        this.panel = new JPanel();
+//        this.panel.setLayout(new FlowLayout(FlowLayout.LEADING, 3, 2));
+//        this.icon = new JLabel();
+//        this.label = new DefaultTreeCellRenderer();
+//        this.panel.add(this.icon);
+//        this.panel.add(this.label);
+//        this.panel.setBorder(new EmptyBorder(0, 0, 0, 0));
+//        this.panel.setOpaque(false);
+        
+    }
+    
+    @Override
+    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+        JLabel theLabel = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 
+        if( !(value instanceof Node) ) {
+            return theLabel;
+        }
+        Node node = (Node) value;
+        Icon iconElement = node.isRoot()? this.iconTable: leaf? this.iconColumn: this.iconForeingKey;
+        Icon iconDataType = null;
+        try {
+            if( !node.isRoot() ) {
+                String iconName = node.getValue().getDataType().getIconName();
+                iconDataType = this.iconTheme.get(iconName);
+            }
+        } catch(Exception ex) {
+            
+        }
+        String s = node.getLabel();
+        if( StringUtils.isBlank(s) ) {
+          s = "???";
+        }
+        theLabel.setText(s);
+        if (iconDataType != null) {
+            CompoundIcon compoundIcon = ToolsSwingLocator.getToolsSwingManager().createCompoundIcon(iconElement, iconDataType);
+            theLabel.setIcon(compoundIcon);
+        } else {
+            theLabel.setIcon(iconElement);
+        }
+        
+//        
+//        this.label.setText(s);
+//        try {
+//          this.label.setIcon(iconDataType);
+//          this.icon.setIcon(iconElement);
+//          this.label.invalidate();
+//        } catch(Throwable th) {
+//          th.getMessage(); // To allow set a break point
+//        }
+        return theLabel; //return this.label
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.java	(revision 46118)
@@ -0,0 +1,289 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureAttributesSelectionPanelView extends JPanel
+{
+   JList lstAvailableColumns = new JList();
+   JList lstSelectedColumns = new JList();
+   JButton btnColumnDown = new JButton();
+   JButton btnColumnUp = new JButton();
+   JButton btnColumnAdd = new JButton();
+   JButton btnColumnRemove = new JButton();
+   JTextField txtColumnsFilter = new JTextField();
+   JButton btnColumnsFilter = new JButton();
+   JButton btnHistory = new JButton();
+   JButton btnBookmarks = new JButton();
+   JButton btnExpression = new JButton();
+   JTextField txtExpression = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureAttributesSelectionPanelView()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Main method for panel
+    */
+   public static void main(String[] args)
+   {
+      JFrame frame = new JFrame();
+      frame.setSize(600, 400);
+      frame.setLocation(100, 100);
+      frame.getContentPane().add(new DefaultFeatureAttributesSelectionPanelView());
+      frame.setVisible(true);
+
+      frame.addWindowListener( new WindowAdapter()
+      {
+         public void windowClosing( WindowEvent evt )
+         {
+            System.exit(0);
+         }
+      });
+   }
+
+   /**
+    * 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:4DLU:NONE,FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstAvailableColumns.setName("lstAvailableColumns");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstAvailableColumns);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      lstSelectedColumns.setName("lstSelectedColumns");
+      JScrollPane jscrollpane2 = new JScrollPane();
+      jscrollpane2.setViewportView(lstSelectedColumns);
+      jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane2,cc.xy(6,4));
+
+      jpanel1.add(createPanel1(),cc.xy(6,6));
+      jpanel1.add(createPanel2(),cc.xy(4,4));
+      jpanel1.add(createPanel3(),cc.xy(2,2));
+      jpanel1.add(createPanel4(),cc.xy(2,6));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnColumnDown.setActionCommand("...");
+      btnColumnDown.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-down.png"));
+      btnColumnDown.setName("btnColumnDown");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnDown.setBorder(emptyborder1);
+      jpanel1.add(btnColumnDown,cc.xy(8,1));
+
+      btnColumnUp.setActionCommand("...");
+      btnColumnUp.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png"));
+      btnColumnUp.setName("btnColumnUp");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnUp.setBorder(emptyborder2);
+      jpanel1.add(btnColumnUp,cc.xy(6,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,7 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnColumnAdd.setActionCommand("...");
+      btnColumnAdd.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-add-arrow.png"));
+      btnColumnAdd.setName("btnColumnAdd");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnAdd.setBorder(emptyborder1);
+      jpanel1.add(btnColumnAdd,cc.xy(1,1));
+
+      btnColumnRemove.setActionCommand("...");
+      btnColumnRemove.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-remove-arrow.png"));
+      btnColumnRemove.setName("btnColumnRemove");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnRemove.setBorder(emptyborder2);
+      jpanel1.add(btnColumnRemove,cc.xy(1,3));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtColumnsFilter.setName("txtColumnsFilter");
+      jpanel1.add(txtColumnsFilter,cc.xy(1,1));
+
+      btnColumnsFilter.setActionCommand("...");
+      btnColumnsFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/common-filter.png"));
+      btnColumnsFilter.setName("btnColumnsFilter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnsFilter.setBorder(emptyborder1);
+      jpanel1.add(btnColumnsFilter,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:390PX:GROW(1.0),FILL:4PX:NONE,FILL:DEFAULT:NONE,FILL:2DLU:NONE,FILL:DEFAULT:NONE,FILL:1DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnHistory.setActionCommand("...");
+      btnHistory.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-down.png"));
+      btnHistory.setName("btnHistory");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnHistory.setBorder(emptyborder1);
+      jpanel1.add(btnHistory,cc.xy(7,1));
+
+      btnBookmarks.setActionCommand("...");
+      btnBookmarks.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png"));
+      btnBookmarks.setName("btnBookmarks");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnBookmarks.setBorder(emptyborder2);
+      jpanel1.add(btnBookmarks,cc.xy(5,1));
+
+      btnExpression.setActionCommand("...");
+      btnExpression.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png"));
+      btnExpression.setName("btnExpression");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnExpression.setBorder(emptyborder3);
+      jpanel1.add(btnExpression,cc.xy(3,1));
+
+      txtExpression.setName("txtExpression");
+      jpanel1.add(txtExpression,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateController.java	(revision 46118)
@@ -0,0 +1,158 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.util.Collections;
+import java.util.Iterator;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+import org.gvsig.tools.util.GetItem;
+
+/**
+ *
+ * @author gvSIG Team
+ * @param <T>
+ */
+public interface AggregateController<T> {
+    
+    public static final int MODE_EDIT_PART = 0;
+    public static final int MODE_EDIT_ALL = 1;
+    public static final int MODE_SHOW_ONLY = 2;
+    
+    public interface AggregateModel<T> extends GetItem<T>, Iterable<T>, TableModel {
+
+        public T createItem();
+
+        public int addItem(T item);
+        
+        public void itemUpdated(int position);
+        
+        public void fetch(Object container);
+    }
+
+    public interface AggregateItemController<T> {
+
+        public void setEnabled(boolean b);
+        
+        public boolean isEnabled();
+        
+        public void put(T item);
+
+        public boolean fetch(T item);
+
+        public void clean();
+        
+        public boolean isEditing();
+    }
+
+    public final AggregateModel EMPTY_MODEL = new AggregateModel() {
+        @Override
+        public Object createItem() {
+            return null;
+        }
+
+        @Override
+        public int addItem(Object item) {
+            return -1;
+        }
+
+        @Override
+        public void itemUpdated(int position) {
+        }
+        
+        @Override
+        public void fetch(Object container) {
+        }
+
+        @Override
+        public Object get(int position) {
+            return null;
+        }
+
+        @Override
+        public Iterator iterator() {
+            return Collections.EMPTY_LIST.iterator();
+        }
+
+        @Override
+        public int getRowCount() {
+            return 0;
+        }
+
+        @Override
+        public int getColumnCount() {
+            return 0;
+        }
+
+        @Override
+        public String getColumnName(int columnIndex) {
+            return "";
+        }
+
+        @Override
+        public Class<?> getColumnClass(int columnIndex) {
+            return String.class;
+        }
+
+        @Override
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            return false;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            return "";
+        }
+
+        @Override
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+        }
+
+        @Override
+        public void addTableModelListener(TableModelListener l) {
+        }
+
+        @Override
+        public void removeTableModelListener(TableModelListener l) {
+        }
+    };
+
+    public void acceptModifications();
+
+    public void deleteCurrentItem();
+
+    public void discardModificactions();
+
+    public AggregateModel<T> getModel();
+
+    public boolean isEditing();
+
+    public void modifyCurrentItem();
+
+    public void newItem();
+
+    public void setCurrentRow(int row);
+    
+    public int getCurrentRow(); 
+
+    public void setModel(AggregateModel<T> model);
+    
+    public AggregateItemController<T> getItemController();
+    
+    public void setCanCreate(boolean canCreate);
+
+    public void setCanModify(boolean canModify);
+
+    public void setCanDelete(boolean canDelete);
+    
+    public boolean canCreate();
+    
+    public boolean canModify();
+    
+    public boolean canDelete();
+    
+    public boolean isEnabled();
+    
+    public void setEnabled(boolean enabled);
+    
+    public void clean();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.xml	(revision 46118)
@@ -0,0 +1,5795 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featuretype/DefaultFeatureTypePanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/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/featuretype/DefaultFeatureTypePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">3</at>
+            <at name="name">tabFeatureType</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Columns</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.444038201</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE</at>
+                     <at name="components">
+                      <object classname="java.util.LinkedList">
+                       <item >
+                        <at name="value">
+                         <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">2</at>
+                             <at name="row">2</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">embedded.196450387</at>
+                          <at name="rowspecs">FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                                  <at name="row">2</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">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                               <at name="beanproperties">
+                                <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                 <at name="classname">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                                 <at name="properties">
+                                  <object classname="com.jeta.forms.store.support.PropertyMap">
+                                   <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="name"/>
+                                   <at name="lineDefinition">
+                                    <object classname="com.jeta.forms.store.properties.CompoundLineProperty">
+                                     <at name="name">lineDefinition</at>
+                                     <at name="lines">
+                                      <object classname="java.util.LinkedList">
+                                       <item >
+                                        <at name="value">
+                                         <object classname="com.jeta.forms.store.properties.LineProperty">
+                                          <at name="name">lineStyle</at>
+                                          <at name="color">
+                                           <object classname="com.jeta.forms.store.properties.ColorProperty">
+                                            <at name="name">dyncolor</at>
+                                            <at name="colorkey">constant</at>
+                                            <at name="constantcolor" object="color">0,0,0</at>
+                                           </object>
+                                          </at>
+                                          <at name="thickness">1</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                     <at name="position">0</at>
+                                    </object>
+                                   </at>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                              </object>
+                             </at>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">embedded.954685174</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                                    </super>
+                                    <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                    <at name="beanclass">javax.swing.JTable</at>
+                                    <at name="beanproperties">
+                                     <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                      <at name="classname">javax.swing.JTable</at>
+                                      <at name="properties">
+                                       <object classname="com.jeta.forms.store.support.PropertyMap">
+                                        <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="name">tblFields</at>
+                                        <at name="width">1439</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="height">32</at>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                   </object>
+                                  </at>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.1868199133</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="actionCommand">_New</at>
+                                             <at name="name">btnNew</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_New</at>
+                                             <at name="height">24</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">3</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="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="actionCommand">_Delete</at>
+                                             <at name="name">btnDelete</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_Delete</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridAttributesTable</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">3</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">embedded.1616852569</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                                    </super>
+                                    <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                    <at name="beanclass">javax.swing.JPanel</at>
+                                    <at name="beanproperties">
+                                     <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                      <at name="classname">javax.swing.JPanel</at>
+                                      <at name="properties">
+                                       <object classname="com.jeta.forms.store.support.PropertyMap">
+                                        <at name="name">pnlField</at>
+                                        <at name="width">1435</at>
+                                        <at name="height">113</at>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                   </object>
+                                  </at>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.1828235019</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnFormFieldAccept</at>
+                                             <at name="width">76</at>
+                                             <at name="text">Accept</at>
+                                             <at name="height">24</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">5</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnFormFieldDiscard</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Discard</at>
+                                             <at name="height">24</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">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.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="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="actionCommand">JButton</at>
+                                             <at name="name">btnFormFieldModify</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Modify</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridAttributesDetail</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </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="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>
+                              <at name="name">gridAttributes</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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="3">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="1">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="2">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Visualization</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.12361584</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(0.1),CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.8),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblLabel</at>
+                              <at name="width">65</at>
+                              <at name="text">_Label</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">1</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">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="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="name">lblDescription</at>
+                              <at name="width">65</at>
+                              <at name="text">_Description</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="verticalAlignment">1</at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">2</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.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="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="name">txtLabel</at>
+                              <at name="width">1463</at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">4</at>
+                             <at name="colspan">1</at>
+                             <at name="rowspan">1</at>
+                             <at name="halign">default</at>
+                             <at name="valign">fill</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.JTextArea</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTextArea</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">txtDescription</at>
+                              <at name="width">1461</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="height">113</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">6</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">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="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="name">lblTags</at>
+                              <at name="width">65</at>
+                              <at name="text">_Tags</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="verticalAlignment">1</at>
+                              <at name="height">592</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">4</at>
+                             <at name="row">6</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">embedded.2028507427</at>
+                          <at name="rowspecs">FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                                  <at name="row">2</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">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                               <at name="beanproperties">
+                                <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                 <at name="classname">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                                 <at name="properties">
+                                  <object classname="com.jeta.forms.store.support.PropertyMap">
+                                   <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="name"/>
+                                   <at name="lineDefinition">
+                                    <object classname="com.jeta.forms.store.properties.CompoundLineProperty">
+                                     <at name="name">lineDefinition</at>
+                                     <at name="lines">
+                                      <object classname="java.util.LinkedList">
+                                       <item >
+                                        <at name="value">
+                                         <object classname="com.jeta.forms.store.properties.LineProperty">
+                                          <at name="name">lineStyle</at>
+                                          <at name="color">
+                                           <object classname="com.jeta.forms.store.properties.ColorProperty">
+                                            <at name="name">dyncolor</at>
+                                            <at name="colorkey">constant</at>
+                                            <at name="constantcolor" object="color">0,0,0</at>
+                                           </object>
+                                          </at>
+                                          <at name="thickness">1</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                     <at name="position">0</at>
+                                    </object>
+                                   </at>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                              </object>
+                             </at>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">embedded.1926865785</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                                    </super>
+                                    <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                    <at name="beanclass">javax.swing.JTable</at>
+                                    <at name="beanproperties">
+                                     <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                      <at name="classname">javax.swing.JTable</at>
+                                      <at name="properties">
+                                       <object classname="com.jeta.forms.store.support.PropertyMap">
+                                        <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="name">tblTagsItems</at>
+                                        <at name="width">1354</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="height">32</at>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                   </object>
+                                  </at>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.94841903</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="actionCommand">_New</at>
+                                             <at name="name">btnTagsNew</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_New</at>
+                                             <at name="height">24</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">3</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="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="actionCommand">_Delete</at>
+                                             <at name="name">btnTagsDelete</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_Delete</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridTagsItems</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">3</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">embedded.1629748162</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE</at>
+                               <at name="components">
+                                <object classname="java.util.LinkedList">
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.1291488548</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnTagsAccept</at>
+                                             <at name="width">76</at>
+                                             <at name="text">Accept</at>
+                                             <at name="height">24</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">5</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnTagsDiscard</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Discard</at>
+                                             <at name="height">24</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">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.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="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="actionCommand">JButton</at>
+                                             <at name="name">btnTagsModify</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Modify</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">embedded.849477573</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                                    <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="name">lblTagsItemName</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Name</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">3</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">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="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="name">lblTagsItemValue</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Value</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">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.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="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="name">cboTagsItemName</at>
+                                             <at name="width">1290</at>
+                                             <at name="items">
+                                              <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                               <at name="name">items</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">22</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">3</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.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="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="componentCount">3</at>
+                                             <at name="editable">true</at>
+                                             <at name="requestFocusEnabled">false</at>
+                                             <at name="name">cboTagsItemValue</at>
+                                             <at name="width">1290</at>
+                                             <at name="items">
+                                              <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                               <at name="name">items</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">22</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">1</at>
+                                            <at name="row">5</at>
+                                            <at name="colspan">1</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">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="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="name">lblTagsItemNotes</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Notes</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">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">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="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="name">lblTagsItemNotesValue</at>
+                                             <at name="width">1290</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">12</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="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>
+                                        <at name="name">grdTagsItemView</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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridTagsItem</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </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="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>
+                              <at name="name">gridTags</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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="3">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="1">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="2">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="7">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Rules</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.1504876277</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">4</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.JCheckBox</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JCheckBox</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="actionCommand">_Validate_features_before_insert</at>
+                              <at name="name">chkRulesValidateFeatureBeforeInsert</at>
+                              <at name="width">1526</at>
+                              <at name="text">_Validate_features_before_insert</at>
+                              <at name="height">18</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">6</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.JCheckBox</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JCheckBox</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="actionCommand">_Validate_features_at_finish_editing</at>
+                              <at name="name">chkRulesValidateFeaturesAtFinishEditing</at>
+                              <at name="width">1526</at>
+                              <at name="text">_Validate_features_at_finish_editing</at>
+                              <at name="height">18</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">2</at>
+                             <at name="colspan">3</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.separator.TitledSeparator</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">com.jeta.forms.components.separator.TitledSeparator</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="name">lblRulesDefaultRules</at>
+                              <at name="width">1548</at>
+                              <at name="text">_Default_rules</at>
+                              <at name="height">17</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">3</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.separator.TitledSeparator</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">com.jeta.forms.components.separator.TitledSeparator</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="name">lblRulesCustomRules</at>
+                              <at name="width">1548</at>
+                              <at name="text">_Custom_rules</at>
+                              <at name="height">17</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">2</at>
+                             <at name="row">9</at>
+                             <at name="colspan">3</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">embedded.2130300898</at>
+                          <at name="rowspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:GROW(1.0)</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0)</at>
+                          <at name="components">
+                           <object classname="java.util.LinkedList">
+                            <item >
+                             <at name="value">
+                              <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">embedded.1583923781</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                                    </super>
+                                    <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                    <at name="beanclass">javax.swing.JTable</at>
+                                    <at name="beanproperties">
+                                     <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                      <at name="classname">javax.swing.JTable</at>
+                                      <at name="properties">
+                                       <object classname="com.jeta.forms.store.support.PropertyMap">
+                                        <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="name">tblRules</at>
+                                        <at name="width">1439</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="enabled">false</at>
+                                        <at name="height">32</at>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                   </object>
+                                  </at>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</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">embedded.1664086270</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="actionCommand">_New</at>
+                                             <at name="name">btnRulesNew</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_New</at>
+                                             <at name="height">24</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">3</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="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="actionCommand">_Delete</at>
+                                             <at name="name">btnRulesDelete</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_Delete</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridRulesTable</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">2</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">embedded.503019705</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),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.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">embedded.1930655466</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">lblRuleName</at>
+                                             <at name="width">127</at>
+                                             <at name="text">_Name</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">3</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">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="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="name">lblRuleDescription</at>
+                                             <at name="width">127</at>
+                                             <at name="text">_Description</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">5</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">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="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="name">lblRuleCheckAtFinishEditing</at>
+                                             <at name="width">127</at>
+                                             <at name="text">_Check_at_finish_editing</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">7</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">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="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="name">lblRuleCheckAtUpdate</at>
+                                             <at name="width">127</at>
+                                             <at name="text">_Check_at_insert</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">9</at>
+                                            <at name="colspan">1</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">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="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="name">lblRuleValidation</at>
+                                             <at name="width">127</at>
+                                             <at name="text">_Validation</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">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.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="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="name">txtRuleName</at>
+                                             <at name="width">1277</at>
+                                             <at name="height">22</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">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.JCheckBox</at>
+                                         <at name="beanproperties">
+                                          <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                           <at name="classname">javax.swing.JCheckBox</at>
+                                           <at name="properties">
+                                            <object classname="com.jeta.forms.store.support.PropertyMap">
+                                             <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="name">chkRuleCheckAtFinishEditing</at>
+                                             <at name="width">1277</at>
+                                             <at name="height">15</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">7</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.JCheckBox</at>
+                                         <at name="beanproperties">
+                                          <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                           <at name="classname">javax.swing.JCheckBox</at>
+                                           <at name="properties">
+                                            <object classname="com.jeta.forms.store.support.PropertyMap">
+                                             <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="name">chkRuleCheckAtUpdate</at>
+                                             <at name="width">1277</at>
+                                             <at name="height">15</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">3</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.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="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="name">txtRuleDescription</at>
+                                             <at name="width">1277</at>
+                                             <at name="height">22</at>
+                                            </object>
+                                           </at>
+                                          </object>
+                                         </at>
+                                        </object>
+                                       </at>
+                                      </item>
+                                      <item >
+                                       <at name="value">
+                                        <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">3</at>
+                                            <at name="row">9</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">embedded.144049387</at>
+                                         <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                                         <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE</at>
+                                         <at name="components">
+                                          <object classname="java.util.LinkedList">
+                                           <item >
+                                            <at name="value">
+                                             <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">3</at>
+                                                 <at name="row">1</at>
+                                                 <at name="colspan">1</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.FormComponent</at>
+                                              </super>
+                                              <at name="id">embedded.1325650416</at>
+                                              <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                                              <at name="colspecs">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">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.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="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.EmptyBorderProperty">
+                                                              <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                               <at name="name">border</at>
+                                                              </super>
+                                                              <at name="top">2</at>
+                                                              <at name="left">2</at>
+                                                              <at name="bottom">2</at>
+                                                              <at name="right">2</at>
+                                                             </object>
+                                                            </at>
+                                                           </item>
+                                                          </object>
+                                                         </at>
+                                                        </object>
+                                                       </at>
+                                                       <at name="actionCommand">...</at>
+                                                       <at name="name">btnRuleValidation</at>
+                                                       <at name="width">13</at>
+                                                       <at name="text">...</at>
+                                                       <at name="height">20</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">1</at>
+                                                      <at name="row">3</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="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.EmptyBorderProperty">
+                                                              <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                               <at name="name">border</at>
+                                                              </super>
+                                                              <at name="top">2</at>
+                                                              <at name="left">2</at>
+                                                              <at name="bottom">2</at>
+                                                              <at name="right">2</at>
+                                                             </object>
+                                                            </at>
+                                                           </item>
+                                                          </object>
+                                                         </at>
+                                                        </object>
+                                                       </at>
+                                                       <at name="actionCommand">...</at>
+                                                       <at name="name">btnRuleValidationHistory</at>
+                                                       <at name="width">13</at>
+                                                       <at name="text">...</at>
+                                                       <at name="height">20</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">1</at>
+                                                      <at name="row">5</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="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.EmptyBorderProperty">
+                                                              <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                               <at name="name">border</at>
+                                                              </super>
+                                                              <at name="top">2</at>
+                                                              <at name="left">2</at>
+                                                              <at name="bottom">2</at>
+                                                              <at name="right">2</at>
+                                                             </object>
+                                                            </at>
+                                                           </item>
+                                                          </object>
+                                                         </at>
+                                                        </object>
+                                                       </at>
+                                                       <at name="actionCommand">...</at>
+                                                       <at name="name">btnRuleValidationBookmarks</at>
+                                                       <at name="width">13</at>
+                                                       <at name="text">...</at>
+                                                       <at name="height">20</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="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>
+                                                  <at name="name"/>
+                                                  <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>
+                                                 </object>
+                                                </at>
+                                               </object>
+                                              </at>
+                                              <at name="cellpainters">
+                                               <object classname="com.jeta.forms.store.support.Matrix">
+                                                <at name="rows">
+                                                 <object classname="[Ljava.lang.Object;" size="5">
+                                                  <at name="item" index="0">
+                                                   <object classname="[Ljava.lang.Object;" size="1"/>
+                                                  </at>
+                                                  <at name="item" index="1">
+                                                   <object classname="[Ljava.lang.Object;" size="1"/>
+                                                  </at>
+                                                  <at name="item" index="2">
+                                                   <object classname="[Ljava.lang.Object;" size="1"/>
+                                                  </at>
+                                                  <at name="item" index="3">
+                                                   <object classname="[Ljava.lang.Object;" size="1"/>
+                                                  </at>
+                                                  <at name="item" index="4">
+                                                   <object classname="[Ljava.lang.Object;" size="1"/>
+                                                  </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>
+                                           </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">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.StandardComponent</at>
+                                              </super>
+                                              <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                              <at name="beanclass">javax.swing.JTextArea</at>
+                                              <at name="beanproperties">
+                                               <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                                <at name="classname">javax.swing.JTextArea</at>
+                                                <at name="properties">
+                                                 <object classname="com.jeta.forms.store.support.PropertyMap">
+                                                  <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>
+                                                  <at name="scrollableTracksViewportWidth">true</at>
+                                                  <at name="name">txtRuleValidation</at>
+                                                  <at name="width">1220</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="height">213</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="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>
+                                             <at name="name"/>
+                                             <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>
+                                            </object>
+                                           </at>
+                                          </object>
+                                         </at>
+                                         <at name="cellpainters">
+                                          <object classname="com.jeta.forms.store.support.Matrix">
+                                           <at name="rows">
+                                            <object classname="[Ljava.lang.Object;" size="1">
+                                             <at name="item" index="0">
+                                              <object classname="[Ljava.lang.Object;" size="3"/>
+                                             </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>
+                                      </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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="9">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="5">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="6">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="7">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </at>
+                                        <at name="item" index="8">
+                                         <object classname="[Ljava.lang.Object;" size="4"/>
+                                        </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>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</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">embedded.1889379805</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:2DLU:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnRuleFormFieldAccept</at>
+                                             <at name="width">76</at>
+                                             <at name="text">Accept</at>
+                                             <at name="height">24</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">5</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnRuleFormFieldDiscard</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Discard</at>
+                                             <at name="height">24</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">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.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="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="actionCommand">JButton</at>
+                                             <at name="name">btnRuleFormFieldModify</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Modify</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="6">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="5">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridRulesDetail</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </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="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>
+                              <at name="name">gridRules</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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="2">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="1">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="10">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="8">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="9">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">1591</at>
+            <at name="tabCount">3</at>
+            <at name="height">827</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.687036486</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="opaque">false</at>
+                 <at name="name">pnlCfgActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="2"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="4">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanel.java	(revision 46118)
@@ -0,0 +1,428 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+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.swing.DALSwingLocator;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.FilteredListController;
+import org.gvsig.tools.swing.api.FilteredListModel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
+import org.gvsig.tools.util.LabeledValue;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureAttributesSelectionPanel 
+        extends DefaultFeatureAttributesSelectionPanelView
+        implements FeatureAttributesSelectionPanel 
+    {
+
+    private FeatureType featureType;
+    private final ActionListenerSupport actionListenerSupport;
+    private FilteredListController availableFieldsController;
+    private final List<String> selecteds;
+    private ExpressionPickerController expressionPicker = null;
+    private boolean allowCalculatedAttributes = false;
+    private List<EditableFeatureAttributeDescriptor> extraColumns;
+    
+    public DefaultFeatureAttributesSelectionPanel() {
+        this.actionListenerSupport = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+        this.selecteds = new ArrayList<>();
+        this.initComponents();
+    }
+    
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+//        ListCellRenderer renderer = DALSwingLocator.getDataSwingManager().createDefaultFeatureAttributeListCellRenderer();
+        DefaultListCellRenderer renderer = new DefaultListCellRenderer();
+        this.lstAvailableColumns.setCellRenderer(renderer);
+        this.lstSelectedColumns.setCellRenderer(renderer);
+        
+        this.lstAvailableColumns.addListSelectionListener((ListSelectionEvent e) -> {
+          if( e.getValueIsAdjusting() ) {
+            return;
+          }
+          doSelectAvailableColumn();
+        });
+        this.lstSelectedColumns.addListSelectionListener((ListSelectionEvent e) -> {
+          if( e.getValueIsAdjusting() ) {
+            return;
+          }
+          doSelectColumn();
+        });
+        this.txtExpression.getDocument().addDocumentListener(new DocumentListener() {
+            public void changedUpdate(DocumentEvent e) {
+              doSelectAvailableColumn();
+            }
+            @Override
+            public void insertUpdate(DocumentEvent de) {
+                 doSelectAvailableColumn();
+            }
+
+            @Override
+            public void removeUpdate(DocumentEvent de) {
+                 doSelectAvailableColumn();
+            }
+        });
+        this.btnColumnAdd.addActionListener((ActionEvent e) -> {
+          doColumnAdd();
+        });
+        this.btnColumnRemove.addActionListener((ActionEvent e) -> {
+          doColumnRemove();
+        });
+        this.btnColumnDown.addActionListener((ActionEvent e) -> {
+          doColumnDown();
+        });
+        this.btnColumnUp.addActionListener((ActionEvent e) -> {
+          doColumnUp();
+        });
+        this.availableFieldsController = toolsSwingManager.createFilteredListController(
+                lstAvailableColumns, 
+                txtColumnsFilter, 
+                btnColumnsFilter
+        );     
+        Dimension sz = this.getPreferredSize();
+        if( sz.width<450 ) {
+            sz.width = 450;
+        }
+        if( sz.height < 320 ) {
+            sz.height = 320;
+        }
+        this.setPreferredSize(sz);
+    }
+
+    @Override
+    public List<String> getSelectedNames() {
+      return Collections.unmodifiableList(selecteds);
+    }
+
+    @Override
+    public void setSelectedNames(List<String> names) {
+      this.selecteds.clear();
+      for (String name : names) {
+        if(!this.selecteds.contains(name)) {
+          this.selecteds.add(name);
+        }
+      }
+      updateControls();
+    }
+
+    private void doSelectAvailableColumn() {
+        if( this.lstAvailableColumns.getSelectedIndex()>=0 || !this.expressionPicker.isEmpty()) {
+            this.btnColumnAdd.setEnabled(true);
+            return;
+        }
+        this.btnColumnAdd.setEnabled(false);
+    }
+    
+    private void doSelectColumn() {
+        if( this.lstSelectedColumns.getSelectedIndex()>=0 ) {
+//            FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstSelectedColumns.getSelectedValue();
+//            if( attr != null ) {
+//              this.selecteds.add(attr.getName());
+              this.btnColumnRemove.setEnabled(true);
+              this.btnColumnDown.setEnabled(true);
+              this.btnColumnUp.setEnabled(true);
+              return;
+//            }
+        }
+        this.btnColumnRemove.setEnabled(false);
+        this.btnColumnDown.setEnabled(false);
+        this.btnColumnUp.setEnabled(false);
+    }
+    
+    private void doColumnUp() {
+        LabeledValue attr = (LabeledValue) this.lstSelectedColumns.getSelectedValue();
+        if( attr == null ) {
+            return;
+        }
+        int n = this.selecteds.indexOf(attr.getLabel());
+        if( n<1 ) {
+          return;
+        }
+        Collections.swap(selecteds, n, n-1);
+        this.lstSelectedColumns.setSelectedIndex(n-1);
+        this.updateControls();
+    }
+
+    private void doColumnDown() {
+        LabeledValue attr = (LabeledValue) this.lstSelectedColumns.getSelectedValue();
+        if( attr == null ) {
+            return;
+        }
+        int n = this.selecteds.indexOf(attr.getLabel());
+        if( n<0 || n>=this.selecteds.size()-1 ) {
+          return;
+        }
+        Collections.swap(selecteds, n, n+1);
+        this.lstSelectedColumns.setSelectedIndex(n+1);
+        this.updateControls();
+    }
+    
+    private boolean checkIfAttributeInFeatureType(String myAttr) {
+        for (FeatureAttributeDescriptor attr : featureType) {
+            if(attr.getName().equalsIgnoreCase(myAttr) ) {
+               return true;
+            }
+        }
+        List<EditableFeatureAttributeDescriptor> columns = featureType.getExtraColumns().getColumns();
+        if (columns!=null && !columns.isEmpty()) {
+            for (EditableFeatureAttributeDescriptor extraCol : columns) {
+                if(extraCol.getName().equalsIgnoreCase(myAttr)) {
+                    return true;
+                }
+            }
+        }
+        if (this.extraColumns!=null && !extraColumns.isEmpty()) {
+            for (EditableFeatureAttributeDescriptor extraCol : extraColumns) {
+                if(extraCol.getName().equalsIgnoreCase(myAttr)) {
+                    return true;
+                }
+            }
+        }
+        
+        return false;
+    }
+
+    private void doColumnRemove() {
+        LabeledValue attr = (LabeledValue) this.lstSelectedColumns.getSelectedValue();
+        if( attr == null ) {
+            return;
+        }
+        String label = attr.getLabel();
+        int n = this.selecteds.indexOf(label);
+        if( n<0 ) {
+          return;
+        }
+        
+        if (!checkIfAttributeInFeatureType(label)) {
+            Expression toExp = ExpressionEvaluatorLocator.getManager().createExpression();
+            toExp.setPhrase(label);
+            this.expressionPicker.set(toExp);
+        } 
+ 
+        this.selecteds.remove(n);
+        this.updateControls();
+    }
+
+    private void doColumnAdd() {
+        
+        if (this.expressionPicker.isEmpty()) {
+            LabeledValue attr = (LabeledValue) this.lstAvailableColumns.getSelectedValue();
+            if( attr == null ) {
+                return;
+            }
+            int n = this.selecteds.indexOf(attr);
+            if( n>=0 ) {
+              return;
+            }
+            this.selecteds.add(attr.getLabel());
+        } else {
+            if (this.expressionPicker.isValid()) {
+                Expression exp = this.expressionPicker.get();
+                String expressionField = exp.getPhrase();
+                int n = this.selecteds.indexOf(expressionField);
+                if (n >= 0) {
+                    return;
+                }
+                this.selecteds.add(expressionField);
+                this.expressionPicker.set(null);
+            }
+        }
+        this.updateControls();
+    }
+
+    @Override
+    public void setStore(FeatureStore store) {
+        try {
+            this.setFeatureType(store.getDefaultFeatureType());
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't assign store", ex);
+        }
+    }
+
+    @Override
+    public void setFeatureType(FeatureType featureType) {
+        this.featureType = featureType;
+        if( !this.selecteds.isEmpty() ) {
+            return;
+        }
+        this.updateControls();
+    }
+    @Override
+    public void setExtraColumns(List<EditableFeatureAttributeDescriptor> extraColumns) {
+        this.extraColumns = extraColumns;
+        this.updateControls();
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        return this.featureType;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public void addActionListener(ActionListener al) {
+        this.actionListenerSupport.addActionListener(al);
+    }
+
+    @Override
+    public ActionListener[] getActionListeners() {
+        return this.actionListenerSupport.getActionListeners();
+    }
+
+    @Override
+    public void removeActionListener(ActionListener al) {
+        this.actionListenerSupport.removeActionListener(al);
+    }
+
+    @Override
+    public void removeAllActionListener() {
+        this.actionListenerSupport.removeAllActionListener();
+    }
+
+    @Override
+    public void fireActionEvent(ActionEvent ae) {
+        this.actionListenerSupport.fireActionEvent(ae);
+    }
+
+    @Override
+    public boolean hasActionListeners() {
+        return this.actionListenerSupport.hasActionListeners();
+    }
+    
+    private void updateControls() {
+        
+        if (this.expressionPicker == null) {
+                this.expressionPicker = 
+                DALSwingLocator.getDataSwingManager().createExpressionPickerController(
+                        this.featureType.getStore(), 
+                        txtExpression, 
+                        btnExpression, 
+                        btnBookmarks, 
+                        btnHistory);
+        }
+        int indexAvailables = this.lstAvailableColumns.getSelectedIndex();
+        int indexSelecteds = this.lstSelectedColumns.getSelectedIndex();
+        FilteredListModel modelAvailables = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
+        FilteredListModel modelSelecteds = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
+        for (FeatureAttributeDescriptor attr : featureType) {
+            if( !this.selecteds.contains(attr.getName()) ) {
+                modelAvailables.addElement(attr.getName()); //label?
+            }
+        }
+        List<EditableFeatureAttributeDescriptor> columns = featureType.getExtraColumns().getColumns();
+        if (columns!=null && !columns.isEmpty()) {
+            for (EditableFeatureAttributeDescriptor extraCol : columns) {
+                if( !this.selecteds.contains(extraCol.getName()) ) {
+                    modelAvailables.addElement(extraCol.getName());
+                }
+            }
+        }
+        
+        if (this.extraColumns!=null && !this.extraColumns.isEmpty()) {
+            for (FeatureAttributeDescriptor extraCol : this.extraColumns) {
+                if( !this.selecteds.contains(extraCol.getName()) ) {
+                    modelAvailables.addElement(extraCol.getName());
+                }
+            }
+        }
+        
+        modelAvailables.setFilter(this.txtColumnsFilter.getText());
+        modelAvailables.sort(true);
+        for (String name : this.selecteds) {
+            modelSelecteds.addElement(name);
+        }
+        modelAvailables.sort(true);
+        this.lstAvailableColumns.setModel(modelAvailables);
+        this.lstSelectedColumns.setModel(modelSelecteds);
+        if( indexAvailables >= 0 && modelAvailables.getSize()>0 ) {
+            if( indexAvailables >= modelAvailables.getSize() ) {
+                indexAvailables = modelAvailables.getSize()-1;
+            }
+            this.lstAvailableColumns.setSelectedIndex(indexAvailables);
+            this.btnColumnAdd.setEnabled(true);
+        } else {
+            if(!this.expressionPicker.isEmpty()) {
+                this.btnColumnAdd.setEnabled(true);  
+            } else {
+                this.btnColumnAdd.setEnabled(false);
+            }
+        }
+        
+        if( indexSelecteds >= 0 && modelSelecteds.getSize()>0 ) {
+            if( indexSelecteds >= modelSelecteds.getSize() ) {
+                indexSelecteds = modelSelecteds.getSize()-1;
+            }
+            this.lstSelectedColumns.setSelectedIndex(indexSelecteds);
+            this.btnColumnRemove.setEnabled(true);
+        } else {
+            this.btnColumnRemove.setEnabled(false);
+        }
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        String name = FilenameUtils.getBaseName(imageName);
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+        if (theme.exists(name)) {
+            return theme.get(name);
+        }
+        URL url = this.getClass().getResource(name + ".png");
+        if (url == null) {
+            return null;
+        }
+        return new ImageIcon(url);
+    }
+
+    public static void selfRegister() {
+        String[][] iconNames = new String[][]{
+            new String[]{"dalswing", "featuretype-column-add-arrow"},
+            new String[]{"dalswing", "featuretype-column-remove-arrow"},
+            new String[]{"dalswing", "featuretype-column-down"},
+            new String[]{"dalswing", "featuretype-column-up"}
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = DefaultFeatureAttributesSelectionPanel.class.getResource(icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+    }
+    
+    @Override
+    public void allowCalculatedAttributes(boolean allowCalculatedAttributes) {
+        this.allowCalculatedAttributes = allowCalculatedAttributes;
+        this.btnBookmarks.setVisible(this.allowCalculatedAttributes);
+        this.btnHistory.setVisible(this.allowCalculatedAttributes);
+        this.btnExpression.setVisible(this.allowCalculatedAttributes);
+        this.txtExpression.setVisible(this.allowCalculatedAttributes);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAggregateController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAggregateController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAggregateController.java	(revision 46118)
@@ -0,0 +1,367 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
+import javax.swing.event.ListSelectionEvent;
+import org.apache.commons.lang3.ArrayUtils;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author gvSIG Team
+ * @param <T>
+ */
+public class DefaultAggregateController<T> implements AggregateController<T> {
+    
+    private final JTable table;
+    private final JButton btnModify;
+    private final JButton btnDiscard;
+    private final JButton btnAccept;
+    private final JButton btnNew;
+    private final JButton btnDelete;
+    
+    private final AggregateItemController<T> itemController;
+    private AggregateModel<T> model;
+    private boolean canCreate;
+    private boolean canModify;
+    private boolean canDelete;
+    private ChangeListenerHelper changeListenerHelper;
+    private int currentRow;
+    private boolean editingItem;
+    private T newItem;
+    
+
+    public DefaultAggregateController(
+            JTable table,
+            JButton btnFormFieldModify,
+            JButton btnFormFieldDiscard,
+            JButton btnFormFieldAccept,
+            JButton btnNew,
+            JButton btnDelete,
+            AggregateItemController<T> itemController
+    ) {
+        this.table = table;
+        this.btnModify = btnFormFieldModify;
+        this.btnDiscard = btnFormFieldDiscard;
+        this.btnAccept = btnFormFieldAccept;
+        this.btnNew = btnNew;
+        this.btnDelete = btnDelete;
+
+        this.canCreate = true;
+        this.canDelete = true;
+        this.canModify = true;
+        
+        this.itemController = itemController;
+        this.model = EMPTY_MODEL;
+        this.editingItem = false;
+        this.newItem = null;
+        this.currentRow = -1;
+
+        initComponents();
+    }
+
+    private void initComponents() {
+        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+
+        this.changeListenerHelper = swingManager.createChangeListenerHelper();
+
+        swingManager.translate(this.btnAccept);
+        swingManager.translate(this.btnDiscard);
+        swingManager.translate(this.btnModify);
+        swingManager.translate(this.btnNew);
+        swingManager.translate(this.btnDelete);
+
+        this.table.setModel(this.model);
+        this.table.getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
+            if (e.getValueIsAdjusting()) {
+                return;
+            }
+            doChangeItemSelection();
+        });
+        this.btnModify.addActionListener((ActionEvent e) -> {
+            modifyCurrentItem();
+        });
+        this.btnDiscard.addActionListener((ActionEvent e) -> {
+            discardModificactions();
+        });
+        this.btnAccept.addActionListener((ActionEvent e) -> {
+            acceptModifications();
+        });
+        this.btnNew.addActionListener((ActionEvent e) -> {
+            newItem();
+        });
+        this.btnDelete.addActionListener((ActionEvent e) -> {
+            deleteCurrentItem();
+        });
+
+    }
+
+    @Override
+    public void setModel(AggregateModel<T> model) {
+        this.model = model;
+        this.table.setModel(model);
+        this.currentRow = -1;
+        this.newItem = null;
+        this.setEditing(false);
+    }
+
+    @Override
+    public AggregateModel<T> getModel() {
+        return this.model;
+    }
+    
+    @Override
+    public AggregateItemController<T> getItemController() {
+        return this.itemController;
+    }
+
+    @Override
+    public int getCurrentRow() {
+        return currentRow;
+    }
+        
+    private void doChangeItemSelection() {
+        int row = this.table.getSelectedRow();
+        if (row < 0) {
+            return;
+        }
+        if (this.editingItem) {
+            if (row != this.currentRow) {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                JOptionPane.showMessageDialog(
+                        this.table,
+                        i18n.getTranslation("_Before_changing_selected_item_accept_or_discard_the_changes"),
+                        i18n.getTranslation("_Warning"),
+                        JOptionPane.WARNING_MESSAGE
+                );
+                this.setCurrentRow(this.currentRow);
+            }
+            return;
+        }
+        this.setCurrentRow(row);
+    }
+
+    @Override
+    public void newItem() {
+        this.currentRow = -1;
+        this.newItem = this.model.createItem();
+        this.itemController.put(this.newItem);
+        this.table.getSelectionModel().clearSelection();
+        this.setEditing(true);
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public void modifyCurrentItem() {
+        int row = this.currentRow;
+        if (row < 0) {
+            return;
+        }
+        this.setCurrentRow(row);
+        this.setEditing(true);
+        this.newItem = null;
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public void deleteCurrentItem() {
+        int row = this.currentRow;
+        int[] rows = this.table.getSelectedRows();
+
+        int n = 0;
+        Iterator<T> it = model.iterator();
+        while (it.hasNext()) {
+            if (ArrayUtils.contains(rows, n)) {
+                it.remove();
+            }
+            it.next();
+            n++;
+        }
+        this.setEditing(false);
+        this.setCurrentRow(row);
+        this.table.updateUI();
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public void acceptModifications() {
+        if( !this.editingItem ) {
+            return;
+        }
+        if (this.newItem!=null) {
+            if (this.itemController.fetch(this.newItem)) {
+                int row = this.model.addItem(this.newItem);
+                this.setEditing(false);
+                this.setCurrentRow(row);
+                this.newItem = null;
+            }
+        } else {
+            int row = this.currentRow;
+            if (row < 0) {
+                return;
+            }
+            T item = this.model.get(row);
+            if (this.itemController.fetch(item)) {
+                this.setEditing(false);
+                this.setCurrentRow(row);
+                this.model.itemUpdated(row);
+            }
+        }
+        this.changeListenerHelper.fireEvent();
+    }
+
+    @Override
+    public void discardModificactions() {
+        if( !this.editingItem ) {
+            return;
+        }
+        if( this.newItem!=null ) {
+            this.itemController.clean();
+            this.itemController.setEnabled(false);
+            this.newItem = null;
+        }
+        this.setEditing(false);
+        this.setCurrentRow(this.currentRow);
+        this.changeListenerHelper.fireEvent();
+    }
+
+    private void setEditing(boolean editing) {
+        if( this.newItem==null ) {
+            if( editing && this.currentRow<0 ) {
+                // No se puede entrar en editing si no hay lineas en la tabla.
+                return;
+            }
+        }
+        this.editingItem = editing;
+        this.itemController.setEnabled(this.editingItem);
+        this.updateButtons();
+    }
+    
+    private void updateButtons() {
+        this.btnAccept.setEnabled(this.canModify() && this.editingItem);
+        this.btnDiscard.setEnabled(this.editingItem);
+        this.btnModify.setEnabled(this.canModify() && !this.editingItem && this.currentRow>=0);
+        this.btnNew.setEnabled(this.canCreate() && !this.editingItem);
+        if( this.currentRow>=0 ) {
+            this.btnDelete.setEnabled(this.canDelete() && !this.editingItem);
+        } else {
+            this.btnDelete.setEnabled(false);
+        }
+    }
+    
+    @Override
+    public boolean isEditing() {
+        return this.editingItem;
+    }
+
+    @Override
+    public void setCurrentRow(int row) {
+        if( this.editingItem ) {
+            if( row!=this.currentRow ) {
+                this.table.getSelectionModel().setSelectionInterval(
+                        this.currentRow, 
+                        this.currentRow
+                );
+            }
+            return;
+        }
+        int rowCount = this.table.getRowCount();
+        if( rowCount<1 ) {
+            this.updateButtons();
+            return;
+        }
+        if( row<0 ) {
+            if( !this.table.getSelectionModel().isSelectionEmpty() ) {
+                this.table.getSelectionModel().clearSelection();
+            }
+            this.itemController.clean();
+            this.updateButtons();
+            return;
+        } 
+        if (row >= rowCount) {
+            row = rowCount- 1;
+        }
+        T item = this.model.get(row);
+        this.itemController.put(item);
+        this.currentRow = row;
+        this.updateButtons();
+        this.table.scrollRectToVisible(this.table.getCellRect(row, 0, true));
+        if( this.table.getSelectedRow()!=row ) {
+            this.table.getSelectionModel().setSelectionInterval(row, row);
+        }
+    }
+
+    @Override
+    public void setCanCreate(boolean canCreate) {
+        this.canCreate = canCreate;
+    }
+
+    @Override
+    public void setCanModify(boolean canModify) {
+        this.canModify = canModify;
+    }
+
+    @Override
+    public void setCanDelete(boolean canDelete) {
+        this.canDelete = canDelete;
+    }
+    
+    @Override
+    public boolean canCreate() {
+        return this.canCreate;
+    }
+    
+    @Override
+    public boolean canModify() {
+        return this.canModify;
+    }
+    
+    @Override
+    public boolean canDelete() {
+        return this.canDelete;
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        if( enabled ) {
+            if( this.currentRow<0 ) {
+                this.itemController.setEnabled(false);
+                this.btnAccept.setEnabled(false);
+                this.btnDiscard.setEnabled(false);
+                this.btnModify.setEnabled(false);
+                this.btnDelete.setEnabled(false);
+            } else {
+                this.itemController.setEnabled(true);
+                this.btnAccept.setEnabled(this.canModify() && this.editingItem);
+                this.btnDiscard.setEnabled(this.editingItem);
+                this.btnModify.setEnabled(this.canModify() && !this.editingItem);
+                this.btnDelete.setEnabled(this.canDelete() && !this.editingItem);
+            }
+            this.btnNew.setEnabled(this.canCreate() && !this.editingItem);
+        } else {
+            this.itemController.setEnabled(false);
+            this.btnAccept.setEnabled(false);
+            this.btnDiscard.setEnabled(false);
+            this.btnModify.setEnabled(false);
+            this.btnDelete.setEnabled(false);
+            this.btnNew.setEnabled(false);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.itemController.isEnabled();
+    }
+ 
+    @Override
+    public void clean() {
+        this.setModel(AggregateController.EMPTY_MODEL);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.java	(revision 46118)
@@ -0,0 +1,976 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import com.jeta.forms.components.line.HorizontalLineComponent;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureAttributePanelView extends JPanel
+{
+   JLabel lblFieldName = new JLabel();
+   JTextField txtFieldName = new JTextField();
+   JLabel lblFieldType = new JLabel();
+   JTabbedPane tabAditionalFields = new JTabbedPane();
+   JLabel lblSize = new JLabel();
+   JTextField txtSize = new JTextField();
+   JLabel lblPrecision = new JLabel();
+   JLabel lblDefaultValue = new JLabel();
+   JTextField txtPrecision = new JTextField();
+   JTextField txtDefaultValue = new JTextField();
+   JLabel lblDataProfile = new JLabel();
+   JComboBox cboDataProfile = new JComboBox();
+   JCheckBox chkVirtualField = new JCheckBox();
+   JLabel lblScale = new JLabel();
+   JTextField txtScale = new JTextField();
+   JLabel lblRelationType = new JLabel();
+   JComboBox cboRelationType = new JComboBox();
+   JLabel lblDisplaySize = new JLabel();
+   JTextField txtDisplaySize = new JTextField();
+   JButton btnVirtualFieldBookmarks = new JButton();
+   JTextField txtVirtualField = new JTextField();
+   JButton btnVirtualFieldHistory = new JButton();
+   JButton btnVirtualField = new JButton();
+   JLabel lblDefaultFormat = new JLabel();
+   JTextField txtDefaultFormat = new JTextField();
+   JLabel lblGeometryType = new JLabel();
+   JLabel lblGeometrySubtype = new JLabel();
+   JLabel lblCRS = new JLabel();
+   JComboBox cboGeometryType = new JComboBox();
+   JComboBox cboGeometrySubtype = new JComboBox();
+   JButton btnCRS = new JButton();
+   JTextField txtCRS = new JTextField();
+   JLabel lblDateFormat = new JLabel();
+   JComboBox cboDateFormat = new JComboBox();
+   JLabel lblInterval = new JLabel();
+   JLabel lblIntervalStart = new JLabel();
+   JLabel lblIntervalEnd = new JLabel();
+   JTextField txtIntervalStart = new JTextField();
+   JButton btnIntervalStart = new JButton();
+   JButton btnIntervalEnd = new JButton();
+   JTextField txtIntervalEnd = new JTextField();
+   JPanel grdAttrTags = new JPanel();
+   HorizontalLineComponent horizontallinecomponent1 = new HorizontalLineComponent();
+   JPanel grdAttrTagsItems = new JPanel();
+   JTable tblAttrTagsItems = new JTable();
+   JButton btnAttrTagsNew = new JButton();
+   JButton btnAttrTagsDelete = new JButton();
+   JPanel gridAttrTagsItem = new JPanel();
+   JButton btnAttrTagsAccept = new JButton();
+   JButton btnAttrTagsDiscard = new JButton();
+   JButton btnAttrTagsModify = new JButton();
+   JPanel grdAttrTagsItemView = new JPanel();
+   JLabel lblAttrTagsItemName = new JLabel();
+   JLabel lblAttrTagsItemValue = new JLabel();
+   JComboBox cboAttrTagsItemName = new JComboBox();
+   JComboBox cboAttrTagsItemValue = new JComboBox();
+   JLabel lblAttrTagsItemNotes = new JLabel();
+   JLabel lblAttrTagsItemNotesValue = new JLabel();
+   JCheckBox chkIsForeingKey = new JCheckBox();
+   JLabel lblForeingKeyTableName = new JLabel();
+   JLabel lblForeingKeyCodeName = new JLabel();
+   JLabel lblForeingKeyLabelFormula = new JLabel();
+   JComboBox cboForeingKeyTableName = new JComboBox();
+   JComboBox cboForeingKeyCodeName = new JComboBox();
+   JTextField txtForeingKeyFormula = new JTextField();
+   JLabel lblIsClosedList = new JLabel();
+   JCheckBox chkIsClosedList = new JCheckBox();
+   JButton btnForeingKeyFormula = new JButton();
+   JButton btnForeingKeyFormulaHistory = new JButton();
+   JButton btnForeingKeyFormulaBookmarks = new JButton();
+   JTabbedPane tabLayout = new JTabbedPane();
+   JLabel lblGroup = new JLabel();
+   JLabel lblOrder = new JLabel();
+   JComboBox cboGroup = new JComboBox();
+   JTextField txtOrder = new JTextField();
+   JLabel lblHidden = new JLabel();
+   JCheckBox chkHidden = new JCheckBox();
+   JLabel lblLabel = new JLabel();
+   JTextField txtLabel = new JTextField();
+   JLabel lblDescription = new JLabel();
+   JTextArea txtDescription = new JTextArea();
+   JLabel lblAvailableValues = new JLabel();
+   JList lstAvailableValues = new JList();
+   JLabel lblAvailableValuesLabel = new JLabel();
+   JTextField txtAvailableValuesLabel = new JTextField();
+   JLabel lblAvailableValuesValue = new JLabel();
+   JTextField txtAvailableValuesValue = new JTextField();
+   JLabel lblValuesFilter = new JLabel();
+   JButton btnAvailableValuesAdd = new JButton();
+   JButton btnAvailableValuesUpdate = new JButton();
+   JButton btnAvailableValuesRemove = new JButton();
+   JButton btnAvailableValuesRemoveAll = new JButton();
+   JTextField txtValuesFilter = new JTextField();
+   JButton btnValuesFilter = new JButton();
+   JButton btnValuesFilterHistory = new JButton();
+   JButton btnValuesFilterBookmarks = new JButton();
+   JLabel lblIsPrimaryKey = new JLabel();
+   JCheckBox chkIsPrimaryKey = new JCheckBox();
+   JLabel lblIsAutomatic = new JLabel();
+   JCheckBox chkIsAutomatic = new JCheckBox();
+   JLabel lblAllowNulls = new JLabel();
+   JCheckBox chkAllowNulls = new JCheckBox();
+   JCheckBox chkIsReadOnly = new JCheckBox();
+   JCheckBox chkIsIndexed = new JCheckBox();
+   JLabel lblIsReadOnly = new JLabel();
+   JLabel lblIsIndexed = new JLabel();
+   JComboBox cboFieldType = new JComboBox();
+   JButton btnFieldType = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureAttributePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblFieldName.setName("lblFieldName");
+      lblFieldName.setText("_Field_name");
+      jpanel1.add(lblFieldName,cc.xy(2,2));
+
+      txtFieldName.setName("txtFieldName");
+      jpanel1.add(txtFieldName,cc.xy(4,2));
+
+      lblFieldType.setName("lblFieldType");
+      lblFieldType.setText("_Field_type");
+      jpanel1.add(lblFieldType,cc.xy(2,4));
+
+      tabAditionalFields.setName("tabAditionalFields");
+      tabAditionalFields.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+      tabAditionalFields.addTab("_Basic_fields",null,createPanel1());
+      tabAditionalFields.addTab("_Geometry",null,createPanel3());
+      tabAditionalFields.addTab("_Time",null,createPanel5());
+      tabAditionalFields.addTab("_Tags",null,createPanel7());
+      tabAditionalFields.addTab("_ForeingKey",null,createPanel10());
+      tabAditionalFields.addTab("_Visualization",null,createPanel11());
+      jpanel1.add(tabAditionalFields,cc.xywh(2,8,3,1));
+
+      jpanel1.add(createPanel16(),cc.xy(4,6));
+      jpanel1.add(createPanel17(),cc.xy(4,4));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3PX:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblSize.setName("lblSize");
+      lblSize.setText("_Size");
+      jpanel1.add(lblSize,cc.xy(2,4));
+
+      txtSize.setName("txtSize");
+      jpanel1.add(txtSize,cc.xy(4,4));
+
+      lblPrecision.setName("lblPrecision");
+      lblPrecision.setText("_Total_digits_precision");
+      lblPrecision.setToolTipText("_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part");
+      jpanel1.add(lblPrecision,cc.xy(2,6));
+
+      lblDefaultValue.setName("lblDefaultValue");
+      lblDefaultValue.setText("_Default_value");
+      jpanel1.add(lblDefaultValue,cc.xy(2,10));
+
+      txtPrecision.setName("txtPrecision");
+      txtPrecision.setToolTipText("_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part");
+      jpanel1.add(txtPrecision,cc.xy(4,6));
+
+      txtDefaultValue.setName("txtDefaultValue");
+      jpanel1.add(txtDefaultValue,cc.xy(4,10));
+
+      lblDataProfile.setName("lblDataProfile");
+      lblDataProfile.setText("_Data_profile");
+      jpanel1.add(lblDataProfile,cc.xy(2,14));
+
+      cboDataProfile.setName("cboDataProfile");
+      jpanel1.add(cboDataProfile,cc.xy(4,14));
+
+      chkVirtualField.setActionCommand("Campo virtual");
+      chkVirtualField.setName("chkVirtualField");
+      chkVirtualField.setRolloverEnabled(true);
+      chkVirtualField.setText("_Virtual_field");
+      jpanel1.add(chkVirtualField,cc.xy(2,16));
+
+      lblScale.setName("lblScale");
+      lblScale.setText("_Decimal_digits_escale");
+      lblScale.setToolTipText("_Number_of_decimal_digits_used_to_represent_the_number");
+      jpanel1.add(lblScale,cc.xy(2,8));
+
+      txtScale.setName("txtScale");
+      txtScale.setToolTipText("_Number_of_decimal_digits_used_to_represent_the_number");
+      jpanel1.add(txtScale,cc.xy(4,8));
+
+      lblRelationType.setName("lblRelationType");
+      lblRelationType.setText("_Relation_type");
+      jpanel1.add(lblRelationType,cc.xy(2,18));
+
+      cboRelationType.setName("cboRelationType");
+      jpanel1.add(cboRelationType,cc.xy(4,18));
+
+      lblDisplaySize.setName("lblDisplaySize");
+      lblDisplaySize.setText("_Characters_in_display");
+      lblDisplaySize.setToolTipText("_Number_of_characters_required_to_display_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated");
+      jpanel1.add(lblDisplaySize,cc.xy(2,2));
+
+      txtDisplaySize.setName("txtDisplaySize");
+      txtDisplaySize.setToolTipText("_Number_of_bytes_required_to_store_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated_This_value_is_dependent_on_the_type_of_layer");
+      jpanel1.add(txtDisplaySize,cc.xy(4,2));
+
+      jpanel1.add(createPanel2(),cc.xy(4,16));
+      lblDefaultFormat.setName("lblDefaultFormat");
+      lblDefaultFormat.setText("_Default_format");
+      jpanel1.add(lblDefaultFormat,cc.xy(2,12));
+
+      txtDefaultFormat.setName("txtDefaultFormat");
+      jpanel1.add(txtDefaultFormat,cc.xy(4,12));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnVirtualFieldBookmarks.setActionCommand("...");
+      btnVirtualFieldBookmarks.setName("btnVirtualFieldBookmarks");
+      btnVirtualFieldBookmarks.setRolloverEnabled(true);
+      btnVirtualFieldBookmarks.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnVirtualFieldBookmarks.setBorder(emptyborder1);
+      jpanel1.add(btnVirtualFieldBookmarks,cc.xy(7,1));
+
+      txtVirtualField.setName("txtVirtualField");
+      jpanel1.add(txtVirtualField,cc.xy(1,1));
+
+      btnVirtualFieldHistory.setActionCommand("...");
+      btnVirtualFieldHistory.setName("btnVirtualFieldHistory");
+      btnVirtualFieldHistory.setRolloverEnabled(true);
+      btnVirtualFieldHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnVirtualFieldHistory.setBorder(emptyborder2);
+      jpanel1.add(btnVirtualFieldHistory,cc.xy(5,1));
+
+      btnVirtualField.setActionCommand("...");
+      btnVirtualField.setName("btnVirtualField");
+      btnVirtualField.setRolloverEnabled(true);
+      btnVirtualField.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnVirtualField.setBorder(emptyborder3);
+      jpanel1.add(btnVirtualField,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblGeometryType.setName("lblGeometryType");
+      lblGeometryType.setText("_Geometry_type");
+      jpanel1.add(lblGeometryType,cc.xy(2,2));
+
+      lblGeometrySubtype.setName("lblGeometrySubtype");
+      lblGeometrySubtype.setText("_Geometry_subtype");
+      jpanel1.add(lblGeometrySubtype,cc.xy(2,4));
+
+      lblCRS.setName("lblCRS");
+      lblCRS.setText("_CRS");
+      jpanel1.add(lblCRS,cc.xy(2,6));
+
+      cboGeometryType.setName("cboGeometryType");
+      jpanel1.add(cboGeometryType,cc.xy(4,2));
+
+      cboGeometrySubtype.setName("cboGeometrySubtype");
+      jpanel1.add(cboGeometrySubtype,cc.xy(4,4));
+
+      jpanel1.add(createPanel4(),cc.xy(4,6));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnCRS.setActionCommand("...");
+      btnCRS.setName("btnCRS");
+      btnCRS.setRolloverEnabled(true);
+      btnCRS.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnCRS.setBorder(emptyborder1);
+      jpanel1.add(btnCRS,cc.xy(3,1));
+
+      txtCRS.setName("txtCRS");
+      jpanel1.add(txtCRS,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblDateFormat.setName("lblDateFormat");
+      lblDateFormat.setText("_Date_format");
+      jpanel1.add(lblDateFormat,cc.xy(2,2));
+
+      cboDateFormat.setEditable(true);
+      cboDateFormat.setName("cboDateFormat");
+      jpanel1.add(cboDateFormat,cc.xy(4,2));
+
+      lblInterval.setName("lblInterval");
+      lblInterval.setText("_Interval");
+      jpanel1.add(lblInterval,new CellConstraints(2,5,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      jpanel1.add(createPanel6(),cc.xy(4,5));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel6()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblIntervalStart.setName("lblIntervalStart");
+      lblIntervalStart.setText("_Start");
+      jpanel1.add(lblIntervalStart,cc.xy(1,1));
+
+      lblIntervalEnd.setName("lblIntervalEnd");
+      lblIntervalEnd.setText("_End");
+      jpanel1.add(lblIntervalEnd,cc.xy(1,3));
+
+      txtIntervalStart.setName("txtIntervalStart");
+      jpanel1.add(txtIntervalStart,cc.xy(3,1));
+
+      btnIntervalStart.setActionCommand("...");
+      btnIntervalStart.setName("btnIntervalStart");
+      btnIntervalStart.setRolloverEnabled(true);
+      btnIntervalStart.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnIntervalStart.setBorder(emptyborder1);
+      jpanel1.add(btnIntervalStart,cc.xy(5,1));
+
+      btnIntervalEnd.setActionCommand("...");
+      btnIntervalEnd.setName("btnIntervalEnd");
+      btnIntervalEnd.setRolloverEnabled(true);
+      btnIntervalEnd.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnIntervalEnd.setBorder(emptyborder2);
+      jpanel1.add(btnIntervalEnd,cc.xy(5,3));
+
+      txtIntervalEnd.setName("txtIntervalEnd");
+      jpanel1.add(txtIntervalEnd,cc.xy(3,3));
+
+      addFillComponents(jpanel1,new int[]{ 2,4 },new int[]{ 2 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel7()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      jpanel1.add(creategrdAttrTags(),cc.xy(2,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4 });
+      return jpanel1;
+   }
+
+   public JPanel creategrdAttrTags()
+   {
+      grdAttrTags.setName("grdAttrTags");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      grdAttrTags.setLayout(formlayout1);
+
+      grdAttrTags.add(horizontallinecomponent1,cc.xy(1,2));
+
+      grdAttrTags.add(creategrdAttrTagsItems(),cc.xy(1,1));
+      grdAttrTags.add(creategridAttrTagsItem(),cc.xy(1,3));
+      addFillComponents(grdAttrTags,new int[]{ 1 },new int[]{ 1,3 });
+      return grdAttrTags;
+   }
+
+   public JPanel creategrdAttrTagsItems()
+   {
+      grdAttrTagsItems.setName("grdAttrTagsItems");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      grdAttrTagsItems.setLayout(formlayout1);
+
+      tblAttrTagsItems.setName("tblAttrTagsItems");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblAttrTagsItems);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      grdAttrTagsItems.add(jscrollpane1,cc.xy(1,1));
+
+      grdAttrTagsItems.add(createPanel8(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      addFillComponents(grdAttrTagsItems,new int[]{ 2,3 },new int[0]);
+      return grdAttrTagsItems;
+   }
+
+   public JPanel createPanel8()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAttrTagsNew.setActionCommand("_New");
+      btnAttrTagsNew.setName("btnAttrTagsNew");
+      btnAttrTagsNew.setRolloverEnabled(true);
+      btnAttrTagsNew.setText("_New");
+      jpanel1.add(btnAttrTagsNew,cc.xy(2,1));
+
+      btnAttrTagsDelete.setActionCommand("_Delete");
+      btnAttrTagsDelete.setName("btnAttrTagsDelete");
+      btnAttrTagsDelete.setRolloverEnabled(true);
+      btnAttrTagsDelete.setText("_Delete");
+      jpanel1.add(btnAttrTagsDelete,cc.xy(2,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategridAttrTagsItem()
+   {
+      gridAttrTagsItem.setName("gridAttrTagsItem");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridAttrTagsItem.setLayout(formlayout1);
+
+      gridAttrTagsItem.add(createPanel9(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      gridAttrTagsItem.add(creategrdAttrTagsItemView(),cc.xy(1,1));
+      addFillComponents(gridAttrTagsItem,new int[]{ 1,2,3 },new int[]{ 1 });
+      return gridAttrTagsItem;
+   }
+
+   public JPanel createPanel9()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAttrTagsAccept.setActionCommand("JButton");
+      btnAttrTagsAccept.setName("btnAttrTagsAccept");
+      btnAttrTagsAccept.setRolloverEnabled(true);
+      btnAttrTagsAccept.setText("Accept");
+      jpanel1.add(btnAttrTagsAccept,cc.xy(2,3));
+
+      btnAttrTagsDiscard.setActionCommand("JButton");
+      btnAttrTagsDiscard.setName("btnAttrTagsDiscard");
+      btnAttrTagsDiscard.setRolloverEnabled(true);
+      btnAttrTagsDiscard.setText("_Discard");
+      jpanel1.add(btnAttrTagsDiscard,cc.xy(2,5));
+
+      btnAttrTagsModify.setActionCommand("JButton");
+      btnAttrTagsModify.setName("btnAttrTagsModify");
+      btnAttrTagsModify.setRolloverEnabled(true);
+      btnAttrTagsModify.setText("_Modify");
+      jpanel1.add(btnAttrTagsModify,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategrdAttrTagsItemView()
+   {
+      grdAttrTagsItemView.setName("grdAttrTagsItemView");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      grdAttrTagsItemView.setLayout(formlayout1);
+
+      lblAttrTagsItemName.setName("lblAttrTagsItemName");
+      lblAttrTagsItemName.setText("_Name");
+      grdAttrTagsItemView.add(lblAttrTagsItemName,cc.xy(1,1));
+
+      lblAttrTagsItemValue.setName("lblAttrTagsItemValue");
+      lblAttrTagsItemValue.setText("_Value");
+      grdAttrTagsItemView.add(lblAttrTagsItemValue,cc.xy(1,3));
+
+      cboAttrTagsItemName.setName("cboAttrTagsItemName");
+      grdAttrTagsItemView.add(cboAttrTagsItemName,cc.xy(3,1));
+
+      cboAttrTagsItemValue.setEditable(true);
+      cboAttrTagsItemValue.setName("cboAttrTagsItemValue");
+      grdAttrTagsItemView.add(cboAttrTagsItemValue,cc.xy(3,3));
+
+      lblAttrTagsItemNotes.setName("lblAttrTagsItemNotes");
+      lblAttrTagsItemNotes.setText("_Notes");
+      grdAttrTagsItemView.add(lblAttrTagsItemNotes,cc.xy(1,5));
+
+      lblAttrTagsItemNotesValue.setName("lblAttrTagsItemNotesValue");
+      grdAttrTagsItemView.add(lblAttrTagsItemNotesValue,cc.xy(3,5));
+
+      addFillComponents(grdAttrTagsItemView,new int[]{ 2 },new int[]{ 2,4 });
+      return grdAttrTagsItemView;
+   }
+
+   public JPanel createPanel10()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkIsForeingKey.setActionCommand("_is_foreing_key");
+      chkIsForeingKey.setName("chkIsForeingKey");
+      chkIsForeingKey.setRolloverEnabled(true);
+      chkIsForeingKey.setText("_is_foreing_key");
+      jpanel1.add(chkIsForeingKey,cc.xywh(2,2,3,1));
+
+      lblForeingKeyTableName.setName("lblForeingKeyTableName");
+      lblForeingKeyTableName.setText("_Table");
+      jpanel1.add(lblForeingKeyTableName,cc.xy(2,6));
+
+      lblForeingKeyCodeName.setName("lblForeingKeyCodeName");
+      lblForeingKeyCodeName.setText("_Code");
+      jpanel1.add(lblForeingKeyCodeName,cc.xy(2,8));
+
+      lblForeingKeyLabelFormula.setName("lblForeingKeyLabelFormula");
+      lblForeingKeyLabelFormula.setText("_Label_formula");
+      jpanel1.add(lblForeingKeyLabelFormula,cc.xy(2,10));
+
+      cboForeingKeyTableName.setEditable(true);
+      cboForeingKeyTableName.setName("cboForeingKeyTableName");
+      jpanel1.add(cboForeingKeyTableName,cc.xywh(4,6,7,1));
+
+      cboForeingKeyCodeName.setEditable(true);
+      cboForeingKeyCodeName.setName("cboForeingKeyCodeName");
+      jpanel1.add(cboForeingKeyCodeName,cc.xywh(4,8,7,1));
+
+      txtForeingKeyFormula.setName("txtForeingKeyFormula");
+      jpanel1.add(txtForeingKeyFormula,cc.xy(4,10));
+
+      lblIsClosedList.setName("lblIsClosedList");
+      lblIsClosedList.setText("_is_closed_list");
+      jpanel1.add(lblIsClosedList,cc.xy(2,4));
+
+      chkIsClosedList.setName("chkIsClosedList");
+      chkIsClosedList.setRolloverEnabled(true);
+      jpanel1.add(chkIsClosedList,cc.xy(4,4));
+
+      btnForeingKeyFormula.setActionCommand("...");
+      btnForeingKeyFormula.setName("btnForeingKeyFormula");
+      btnForeingKeyFormula.setRolloverEnabled(true);
+      btnForeingKeyFormula.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnForeingKeyFormula.setBorder(emptyborder1);
+      jpanel1.add(btnForeingKeyFormula,cc.xy(6,10));
+
+      btnForeingKeyFormulaHistory.setActionCommand("...");
+      btnForeingKeyFormulaHistory.setName("btnForeingKeyFormulaHistory");
+      btnForeingKeyFormulaHistory.setRolloverEnabled(true);
+      btnForeingKeyFormulaHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnForeingKeyFormulaHistory.setBorder(emptyborder2);
+      jpanel1.add(btnForeingKeyFormulaHistory,cc.xy(8,10));
+
+      btnForeingKeyFormulaBookmarks.setActionCommand("...");
+      btnForeingKeyFormulaBookmarks.setName("btnForeingKeyFormulaBookmarks");
+      btnForeingKeyFormulaBookmarks.setRolloverEnabled(true);
+      btnForeingKeyFormulaBookmarks.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnForeingKeyFormulaBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnForeingKeyFormulaBookmarks,cc.xy(10,10));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel11()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabLayout.setName("tabLayout");
+      tabLayout.setTabPlacement(JTabbedPane.LEFT);
+      tabLayout.addTab("_Basic",null,createPanel12());
+      tabLayout.addTab("_Values",null,createPanel13());
+      jpanel1.add(tabLayout,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[0],new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel12()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblGroup.setName("lblGroup");
+      lblGroup.setText("_Group");
+      jpanel1.add(lblGroup,cc.xy(2,2));
+
+      lblOrder.setName("lblOrder");
+      lblOrder.setText("_Order");
+      jpanel1.add(lblOrder,cc.xy(2,4));
+
+      cboGroup.setEditable(true);
+      cboGroup.setName("cboGroup");
+      jpanel1.add(cboGroup,cc.xy(4,2));
+
+      txtOrder.setName("txtOrder");
+      jpanel1.add(txtOrder,cc.xy(4,4));
+
+      lblHidden.setName("lblHidden");
+      lblHidden.setText("_Hidden");
+      jpanel1.add(lblHidden,cc.xy(2,6));
+
+      chkHidden.setName("chkHidden");
+      chkHidden.setRolloverEnabled(true);
+      jpanel1.add(chkHidden,cc.xy(4,6));
+
+      lblLabel.setName("lblLabel");
+      lblLabel.setText("_Label");
+      jpanel1.add(lblLabel,cc.xy(2,8));
+
+      txtLabel.setName("txtLabel");
+      jpanel1.add(txtLabel,cc.xy(4,8));
+
+      lblDescription.setName("lblDescription");
+      lblDescription.setText("_Description");
+      lblDescription.setVerticalAlignment(JLabel.TOP);
+      jpanel1.add(lblDescription,new CellConstraints(2,10,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtDescription.setName("txtDescription");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtDescription);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(4,10));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel13()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblAvailableValues.setName("lblAvailableValues");
+      lblAvailableValues.setText("_List_of_values");
+      jpanel1.add(lblAvailableValues,cc.xywh(2,6,5,1));
+
+      lstAvailableValues.setName("lstAvailableValues");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstAvailableValues);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,new CellConstraints(2,8,3,1,CellConstraints.DEFAULT,CellConstraints.FILL));
+
+      lblAvailableValuesLabel.setName("lblAvailableValuesLabel");
+      lblAvailableValuesLabel.setText("_Label");
+      jpanel1.add(lblAvailableValuesLabel,cc.xy(2,10));
+
+      txtAvailableValuesLabel.setName("txtAvailableValuesLabel");
+      jpanel1.add(txtAvailableValuesLabel,cc.xy(4,10));
+
+      lblAvailableValuesValue.setName("lblAvailableValuesValue");
+      lblAvailableValuesValue.setText("_Value");
+      jpanel1.add(lblAvailableValuesValue,cc.xy(2,12));
+
+      txtAvailableValuesValue.setName("txtAvailableValuesValue");
+      jpanel1.add(txtAvailableValuesValue,cc.xy(4,12));
+
+      lblValuesFilter.setName("lblValuesFilter");
+      lblValuesFilter.setText("_Filter_for_values");
+      jpanel1.add(lblValuesFilter,cc.xywh(2,2,5,1));
+
+      jpanel1.add(createPanel14(),new CellConstraints(6,8,1,5,CellConstraints.DEFAULT,CellConstraints.TOP));
+      jpanel1.add(createPanel15(),cc.xywh(2,4,5,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel14()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAvailableValuesAdd.setActionCommand("_Add");
+      btnAvailableValuesAdd.setName("btnAvailableValuesAdd");
+      btnAvailableValuesAdd.setRolloverEnabled(true);
+      btnAvailableValuesAdd.setText("_Add");
+      jpanel1.add(btnAvailableValuesAdd,cc.xy(1,1));
+
+      btnAvailableValuesUpdate.setActionCommand("_Update");
+      btnAvailableValuesUpdate.setName("btnAvailableValuesUpdate");
+      btnAvailableValuesUpdate.setRolloverEnabled(true);
+      btnAvailableValuesUpdate.setText("_Update");
+      jpanel1.add(btnAvailableValuesUpdate,cc.xy(1,3));
+
+      btnAvailableValuesRemove.setActionCommand("_Remove");
+      btnAvailableValuesRemove.setName("btnAvailableValuesRemove");
+      btnAvailableValuesRemove.setRolloverEnabled(true);
+      btnAvailableValuesRemove.setText("_Remove");
+      jpanel1.add(btnAvailableValuesRemove,cc.xy(1,5));
+
+      btnAvailableValuesRemoveAll.setActionCommand("_Remove");
+      btnAvailableValuesRemoveAll.setName("btnAvailableValuesRemoveAll");
+      btnAvailableValuesRemoveAll.setRolloverEnabled(true);
+      btnAvailableValuesRemoveAll.setText("_Remove_all");
+      jpanel1.add(btnAvailableValuesRemoveAll,cc.xy(1,7));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4,6,8 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel15()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtValuesFilter.setName("txtValuesFilter");
+      jpanel1.add(txtValuesFilter,cc.xy(1,1));
+
+      btnValuesFilter.setActionCommand("...");
+      btnValuesFilter.setName("btnValuesFilter");
+      btnValuesFilter.setRolloverEnabled(true);
+      btnValuesFilter.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnValuesFilter.setBorder(emptyborder1);
+      jpanel1.add(btnValuesFilter,cc.xy(3,1));
+
+      btnValuesFilterHistory.setActionCommand("...");
+      btnValuesFilterHistory.setName("btnValuesFilterHistory");
+      btnValuesFilterHistory.setRolloverEnabled(true);
+      btnValuesFilterHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnValuesFilterHistory.setBorder(emptyborder2);
+      jpanel1.add(btnValuesFilterHistory,cc.xy(5,1));
+
+      btnValuesFilterBookmarks.setActionCommand("...");
+      btnValuesFilterBookmarks.setName("btnValuesFilterBookmarks");
+      btnValuesFilterBookmarks.setRolloverEnabled(true);
+      btnValuesFilterBookmarks.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnValuesFilterBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnValuesFilterBookmarks,cc.xy(7,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel16()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblIsPrimaryKey.setName("lblIsPrimaryKey");
+      lblIsPrimaryKey.setText("_Primary_key");
+      jpanel1.add(lblIsPrimaryKey,cc.xy(1,1));
+
+      chkIsPrimaryKey.setName("chkIsPrimaryKey");
+      chkIsPrimaryKey.setRolloverEnabled(true);
+      jpanel1.add(chkIsPrimaryKey,cc.xy(3,1));
+
+      lblIsAutomatic.setName("lblIsAutomatic");
+      lblIsAutomatic.setText("_Value_automatic");
+      jpanel1.add(lblIsAutomatic,cc.xy(5,1));
+
+      chkIsAutomatic.setName("chkIsAutomatic");
+      chkIsAutomatic.setRolloverEnabled(true);
+      jpanel1.add(chkIsAutomatic,cc.xy(7,1));
+
+      lblAllowNulls.setName("lblAllowNulls");
+      lblAllowNulls.setText("_Allow_nulls");
+      jpanel1.add(lblAllowNulls,cc.xy(9,1));
+
+      chkAllowNulls.setName("chkAllowNulls");
+      chkAllowNulls.setRolloverEnabled(true);
+      jpanel1.add(chkAllowNulls,cc.xy(11,1));
+
+      chkIsReadOnly.setName("chkIsReadOnly");
+      chkIsReadOnly.setRolloverEnabled(true);
+      jpanel1.add(chkIsReadOnly,cc.xy(3,3));
+
+      chkIsIndexed.setName("chkIsIndexed");
+      chkIsIndexed.setRolloverEnabled(true);
+      jpanel1.add(chkIsIndexed,cc.xy(7,3));
+
+      lblIsReadOnly.setName("lblIsReadOnly");
+      lblIsReadOnly.setText("_Read_only");
+      jpanel1.add(lblIsReadOnly,cc.xy(1,3));
+
+      lblIsIndexed.setName("lblIsIndexed");
+      lblIsIndexed.setText("_Indexed");
+      jpanel1.add(lblIsIndexed,cc.xy(5,3));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6,8,10,12 },new int[]{ 2 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel17()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboFieldType.setName("cboFieldType");
+      jpanel1.add(cboFieldType,cc.xy(1,1));
+
+      btnFieldType.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/picker-datatype.png"));
+      btnFieldType.setName("btnFieldType");
+      btnFieldType.setRolloverEnabled(true);
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnFieldType.setBorder(emptyborder1);
+      jpanel1.add(btnFieldType,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/AggregateView.xml	(revision 46118)
@@ -0,0 +1,1223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featuretype/AggregateView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/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/featuretype/AggregateView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE</at>
+   <at name="components">
+    <object classname="java.util.LinkedList">
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.1069790105</at>
+        <at name="rowspecs">FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                <at name="row">2</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">com.jeta.forms.components.line.HorizontalLineComponent</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">com.jeta.forms.components.line.HorizontalLineComponent</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name"/>
+                 <at name="lineDefinition">
+                  <object classname="com.jeta.forms.store.properties.CompoundLineProperty">
+                   <at name="name">lineDefinition</at>
+                   <at name="lines">
+                    <object classname="java.util.LinkedList">
+                     <item >
+                      <at name="value">
+                       <object classname="com.jeta.forms.store.properties.LineProperty">
+                        <at name="name">lineStyle</at>
+                        <at name="color">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">constant</at>
+                          <at name="constantcolor" object="color">0,0,0</at>
+                         </object>
+                        </at>
+                        <at name="thickness">1</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                   <at name="position">0</at>
+                  </object>
+                 </at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">embedded.1910644459</at>
+             <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                  </super>
+                  <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                  <at name="beanclass">javax.swing.JTable</at>
+                  <at name="beanproperties">
+                   <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                    <at name="classname">javax.swing.JTable</at>
+                    <at name="properties">
+                     <object classname="com.jeta.forms.store.support.PropertyMap">
+                      <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="name">tblXXXItems</at>
+                      <at name="width">1183</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="height">32</at>
+                     </object>
+                    </at>
+                   </object>
+                  </at>
+                 </object>
+                </at>
+               </item>
+               <item >
+                <at name="value">
+                 <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">3</at>
+                     <at name="row">1</at>
+                     <at name="colspan">1</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.FormComponent</at>
+                  </super>
+                  <at name="id">embedded.1222554684</at>
+                  <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                  <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="actionCommand">_New</at>
+                           <at name="name">btnXXXNew</at>
+                           <at name="width">73</at>
+                           <at name="text">_New</at>
+                           <at name="height">31</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">3</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="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="actionCommand">_Delete</at>
+                           <at name="name">btnXXXDelete</at>
+                           <at name="width">73</at>
+                           <at name="text">_Delete</at>
+                           <at name="height">31</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="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>
+                      <at name="name"/>
+                      <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>
+                     </object>
+                    </at>
+                   </object>
+                  </at>
+                  <at name="cellpainters">
+                   <object classname="com.jeta.forms.store.support.Matrix">
+                    <at name="rows">
+                     <object classname="[Ljava.lang.Object;" size="5">
+                      <at name="item" index="0">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="1">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="2">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="3">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="4">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </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>
+               </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="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>
+                 <at name="name">grdXXXItems</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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="3"/>
+                 </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>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</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">embedded.1055786402</at>
+             <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE</at>
+             <at name="components">
+              <object classname="java.util.LinkedList">
+               <item >
+                <at name="value">
+                 <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">3</at>
+                     <at name="row">1</at>
+                     <at name="colspan">1</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.FormComponent</at>
+                  </super>
+                  <at name="id">embedded.222310014</at>
+                  <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                  <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="actionCommand">JButton</at>
+                           <at name="name">btnXXXAccept</at>
+                           <at name="width">82</at>
+                           <at name="text">Accept</at>
+                           <at name="height">31</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">5</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="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="actionCommand">JButton</at>
+                           <at name="name">btnXXXDiscard</at>
+                           <at name="width">82</at>
+                           <at name="text">_Discard</at>
+                           <at name="height">31</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">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.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="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="actionCommand">JButton</at>
+                           <at name="name">btnXXXModify</at>
+                           <at name="width">82</at>
+                           <at name="text">_Modify</at>
+                           <at name="height">31</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="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>
+                      <at name="name"/>
+                      <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>
+                     </object>
+                    </at>
+                   </object>
+                  </at>
+                  <at name="cellpainters">
+                   <object classname="com.jeta.forms.store.support.Matrix">
+                    <at name="rows">
+                     <object classname="[Ljava.lang.Object;" size="5">
+                      <at name="item" index="0">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="1">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="2">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="3">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="4">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </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>
+               </item>
+               <item >
+                <at name="value">
+                 <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">embedded.963536245</at>
+                  <at name="rowspecs">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:NONE</at>
+                  <at name="components">
+                   <object classname="java.util.LinkedList"/>
+                  </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="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>
+                      <at name="name">grdXXXItemView</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>
+                     </object>
+                    </at>
+                   </object>
+                  </at>
+                  <at name="cellpainters">
+                   <object classname="com.jeta.forms.store.support.Matrix">
+                    <at name="rows">
+                     <object classname="[Ljava.lang.Object;" size="5">
+                      <at name="item" index="0">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="1">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="2">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="3">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </at>
+                      <at name="item" index="4">
+                       <object classname="[Ljava.lang.Object;" size="3"/>
+                      </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>
+               </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="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>
+                 <at name="name">grdXXXItem</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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="3"/>
+                 </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>
+          </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="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>
+            <at name="name">grdXXX</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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="3">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRuleController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRuleController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRuleController.java	(revision 46118)
@@ -0,0 +1,155 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype.featurerule;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.text.JTextComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.feature.FeatureRule;
+import org.gvsig.fmap.dal.feature.FeatureRuleExpression;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.impl.featuretype.AggregateController.AggregateItemController;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FeatureRuleController implements AggregateItemController<FeatureRule> {
+
+    private final JTextComponent txtRuleName;
+    private final JTextComponent txtRuleDescription;
+    private final JCheckBox chkRuleCheckAtFinishEditing;
+    private final JCheckBox chkRuleCheckAtUpdate;
+    private final JTextComponent txtRuleValidation;
+    private final JButton btnRuleValidation;
+    private final JButton btnRuleValidationBookmarks;
+    private final JButton btnRuleValidationHistory;
+
+    private ExpressionPickerController pickervalidation;
+    private FeatureStoreElement featureStoreElement;
+    private boolean ruleIsAExpression;
+
+    public FeatureRuleController(
+            JTextComponent txtRuleName,
+            JTextComponent txtRuleDescription,
+            JCheckBox chkRuleCheckAtFinishEditing,
+            JCheckBox chkRuleCheckAtUpdate,
+            JTextComponent txtRuleValidation,
+            JButton btnRuleValidation,
+            JButton btnRuleValidationBookmarks,
+            JButton btnRuleValidationHistory
+        ) {
+            this.txtRuleName = txtRuleName;
+            this.txtRuleDescription = txtRuleDescription;
+            this.chkRuleCheckAtFinishEditing = chkRuleCheckAtFinishEditing;
+            this.chkRuleCheckAtUpdate = chkRuleCheckAtUpdate;
+            this.txtRuleValidation = txtRuleValidation;
+            this.btnRuleValidation = btnRuleValidation;
+            this.btnRuleValidationBookmarks = btnRuleValidationBookmarks;
+            this.btnRuleValidationHistory = btnRuleValidationHistory;
+
+            this.ruleIsAExpression = false;
+            this.initComponents();
+    }
+
+    private void initComponents() {
+        final ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        final DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        final ExpressionEvaluatorSwingManager evaluatorSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        
+        toolsSwingManager.addClearButton(this.txtRuleName);
+        toolsSwingManager.addClearButton(this.txtRuleDescription);
+        toolsSwingManager.setDefaultPopupMenu(this.txtRuleName);
+        toolsSwingManager.setDefaultPopupMenu(this.txtRuleDescription);
+        
+        this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
+        this.pickervalidation = evaluatorSwingManager.createExpressionPickerController(
+                        this.txtRuleValidation, 
+                        this.btnRuleValidation,
+                        this.btnRuleValidationBookmarks, 
+                        this.btnRuleValidationHistory
+                );
+        this.pickervalidation.addElement(this.featureStoreElement);
+                
+        
+    }
+    
+    public void setFeatureStore(FeatureStore featureStore) {
+        this.featureStoreElement.setFeatureStore(featureStore);
+    }
+    
+    @Override
+    public void setEnabled(boolean enabled) {
+        if(!ruleIsAExpression) {
+            enabled = false;
+        }
+        if( enabled && this.featureStoreElement.getFeatureStore()==null ) {
+            this.pickervalidation.setEnabled(false);
+        } else {
+            this.pickervalidation.setEnabled(enabled);
+        }
+        this.txtRuleName.setEnabled(enabled);
+        this.txtRuleDescription.setEnabled(enabled);
+        this.chkRuleCheckAtFinishEditing.setEnabled(enabled);
+        this.chkRuleCheckAtUpdate.setEnabled(enabled);
+    }
+
+    @Override
+    public void put(FeatureRule rule) {
+        this.ruleIsAExpression = (rule instanceof FeatureRuleExpression);
+        this.txtRuleName.setText(rule.getName());
+        this.txtRuleDescription.setText(rule.getDescription());
+        this.chkRuleCheckAtFinishEditing.setSelected(rule.checkAtFinishEditing());
+        this.chkRuleCheckAtUpdate.setSelected(rule.checkAtUpdate());
+        if( this.ruleIsAExpression ) {
+            this.pickervalidation.set(((FeatureRuleExpression)rule).getExpression());
+        }
+    }
+
+    @Override
+    public boolean fetch(FeatureRule rule) {
+        if( !(rule instanceof FeatureRuleExpression) ) {
+            return true;
+        }
+        FeatureRuleExpression theRule = (FeatureRuleExpression)rule;
+        
+        String s = this.txtRuleName.getText();
+        if( StringUtils.isBlank(s) ) {
+            return false;
+        }
+        theRule.setName(s);
+        theRule.setDescription(this.txtRuleDescription.getText());
+        theRule.setCheckAtFinishEditing(this.chkRuleCheckAtFinishEditing.isSelected());
+        theRule.setCheckAtUpdate(this.chkRuleCheckAtUpdate.isSelected());
+        theRule.setExpression(this.pickervalidation.get());
+        return true;
+    }
+
+    @Override
+    public void clean() {
+        this.ruleIsAExpression = false;
+        this.txtRuleName.setText("");
+        this.txtRuleDescription.setText("");
+        this.chkRuleCheckAtFinishEditing.setSelected(false);
+        this.chkRuleCheckAtUpdate.setSelected(false);
+        this.pickervalidation.set(null);
+    }
+
+    @Override
+    public boolean isEditing() {
+        return this.txtRuleName.isEnabled();
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.txtRuleName.isEnabled();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRulesModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRulesModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/featurerule/FeatureRulesModel.java	(revision 46118)
@@ -0,0 +1,145 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype.featurerule;
+
+import java.util.Collections;
+import java.util.Iterator;
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureRule;
+import org.gvsig.fmap.dal.feature.FeatureRuleExpression;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.swing.impl.featuretype.AggregateController;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FeatureRulesModel 
+        extends AbstractTableModel
+        implements AggregateController.AggregateModel<FeatureRule> {
+
+    private static final int COLUMN_NAME = 0;
+    private static final int COLUMN_AT_FINISH_EDITING = 1;
+    private static final int COLUMN_AT_INSERT = 2;
+    
+    private FeatureRules rules;
+    private String[] columnNames;
+    private Class[] columnClases;
+    
+    public FeatureRulesModel() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.rules = null;
+        this.columnNames = new String[] {
+            i18n.getTranslation("_Name"),
+            i18n.getTranslation("_At_finish_editing"),
+            i18n.getTranslation("_At_insert")
+        };
+        this.columnClases = new Class[] {
+          String.class,
+          Boolean.class,
+          Boolean.class
+        };
+    }
+    
+    public FeatureRulesModel(FeatureRules rules) {
+        this();
+        this.rules = rules;
+    }
+    
+    @Override
+    public FeatureRule createItem() {
+        DataManager manager = DALLocator.getDataManager();
+        FeatureRuleExpression rule = manager.createFeatureRuleExpression();
+        return rule;
+    }
+
+    @Override
+    public int addItem(FeatureRule rule) {
+        if( this.rules == null ) {
+            return -1;
+        }
+        this.rules.add(rule);
+        this.fireTableDataChanged();
+        return this.rules.size()-1;
+    }
+
+    @Override
+    public void itemUpdated(int position) {
+        this.fireTableDataChanged();
+    }
+
+    @Override
+    public FeatureRule get(int position) {
+        if( this.rules == null ) {
+            return null;
+        }
+        return this.rules.get(position);
+    }
+
+    @Override
+    public Iterator<FeatureRule> iterator() {
+        if( this.rules == null ) {
+            return Collections.EMPTY_LIST.iterator();
+        }
+        return this.rules.iterator();
+    }
+
+    @Override
+    public int getRowCount() {
+        if( this.rules == null ) {
+            return 0;
+        }
+        return this.rules.size();
+    }
+
+    @Override
+    public int getColumnCount() {
+        return this.columnNames.length;
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        return this.columnNames[columnIndex];
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        return this.columnClases[columnIndex];
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        if( this.rules == null ) {
+            return null;
+        }
+        FeatureRule rule = this.rules.get(rowIndex);
+        switch(columnIndex) {
+            case COLUMN_NAME:
+                return rule.getName();
+            case COLUMN_AT_FINISH_EDITING:
+                return rule.checkAtFinishEditing();
+            case COLUMN_AT_INSERT:
+                return rule.checkAtUpdate();
+            default:
+                return null;
+                
+        }
+    }
+
+    @Override
+    public void fetch(Object container) {
+        if( container == this.rules ) {
+            return;
+        }
+        FeatureRules theRules = (FeatureRules) container;
+        while( !theRules.isEmpty() ) {
+            theRules.remove(0);
+        }
+        for (FeatureRule rule : this.rules) {
+            theRules.add(rule);
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanel.java	(revision 46118)
@@ -0,0 +1,1487 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
+import java.awt.event.ItemEvent;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.ListModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.text.JTextComponent;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.CalculatorController;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.DataProfile;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.EditableForeingKey;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import static org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel.MODE_EDIT_ALL;
+import static org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel.MODE_EDIT_ONLY_METADATA;
+import static org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel.MODE_SHOW_ONLY;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.Tag;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.TagController;
+import org.gvsig.fmap.dal.swing.impl.featuretype.tags.TagsModel;
+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.timesupport.RelativeInterval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataType.NumberPrecisionAndScale;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings({"UseSpecificCatch"})
+public class DefaultFeatureAttributePanel
+        extends DefaultFeatureAttributePanelView
+        implements FeatureTypeAttributePanel {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureAttributePanel.class);
+    
+    // ----
+    // Los he eliminado del GUI pero los mantengo aqui por si decido rescatarlos
+    private final JTextComponent txtMaxValue = new JTextField();
+    private final JTextComponent txtMinValue = new JTextField();
+    private final JComponent lblMinValue = new JLabel();
+    private final JComponent lblMaxValue = new JLabel();
+    // ----
+    private Feature sampleFeature;
+
+    private static class ForeingKeyController {
+
+        private final JCheckBox chkIsForeingKey;
+        private final JCheckBox chkIsClosedList;
+        private final JComboBox cboTable;
+        private final JComboBox cboCode;
+        private final JTextField txtFormula;
+        private final JButton btnFormula;
+        private final JButton btnFormulaHistory;
+        private final JButton btnFormulaBokkmarks;
+        private ExpressionPickerController pickerFormula;
+        private boolean editable;
+        private FeatureStoreElement featureStoreElement;
+        private ForeingKey foreingKey;
+        
+        public ForeingKeyController(
+                JCheckBox chkIsForeingKey,
+                JCheckBox chkIsClosedList,
+                JComboBox cboTable,
+                JComboBox cboCode,
+                JTextField txtFormula,
+                JButton btnFormula,
+                JButton btnFormulaBokkmarks,
+                JButton btnFormulaHistory
+        ) {
+            this.chkIsForeingKey = chkIsForeingKey;
+            this.chkIsClosedList = chkIsClosedList;
+            this.cboTable = cboTable;
+            this.cboCode = cboCode;
+            this.txtFormula = txtFormula;
+            this.btnFormula = btnFormula;
+            this.btnFormulaHistory = btnFormulaHistory;
+            this.btnFormulaBokkmarks = btnFormulaBokkmarks;
+            this.initComponents();
+        }
+
+        private void initComponents() {
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+    
+            this.editable = true;
+            
+            DefaultComboBoxModel<String> model = new DefaultComboBoxModel();
+            StoresRepository repository = DALLocator.getDataManager().getStoresRepository();
+            List<String> tableNames = new ArrayList<>();
+            for (String tableName : repository.keySet()) {
+                tableNames.add(tableName);
+            }
+            Collections.sort(tableNames);
+            for (String tableName : tableNames) {
+                model.addElement(tableName);
+            }
+            this.cboTable.setModel(model);
+            this.cboTable.addItemListener((ItemEvent e) -> {
+              if (e.getStateChange() != ItemEvent.SELECTED) {
+                return;
+              }
+              Thread th = new Thread(() -> {
+                doPopulateComboCode();
+              }, "FeatureTypePanelForeingKeyPopulateComboCode");
+              th.start();
+            });
+            this.btnFormula.setText("");
+            this.btnFormulaBokkmarks.setText("");
+            this.btnFormulaHistory.setText("");
+            this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
+            this.pickerFormula = ExpressionEvaluatorSwingLocator.getManager()
+                    .createExpressionPickerController(txtFormula, btnFormula, btnFormulaBokkmarks, btnFormulaHistory);
+            this.pickerFormula.addElement(this.featureStoreElement);
+            
+//            this.chkIsForeingKey.addChangeListener(new ChangeListener() {
+//                @Override
+//                public void stateChanged(ChangeEvent e) {
+//                    if (chkIsForeingKey.isSelected()) {
+//                        setEnabled(editable);
+//                    } else {
+//                        setEnabled(false);
+//                    }
+//                }
+//            });
+        }
+
+        private void doPopulateComboCode() {
+            String tableName = (String) this.cboTable.getSelectedItem();
+            if( StringUtils.isBlank(tableName) ) {
+                return;
+            }
+            StoresRepository repository = DALLocator.getDataManager().getStoresRepository();
+            DataStore store = repository.getStore(tableName);
+            if( !(store instanceof FeatureStore) ) {
+                return;
+            }
+            this.featureStoreElement.setFeatureStore((FeatureStore) store);
+            FeatureType featureType;
+            try {
+                featureType = ((FeatureStore)store).getDefaultFeatureType();
+            } catch (DataException ex) {
+                return;
+            }
+            Search search = (Search) ToolsLocator.getComplementsManager().get(
+                    Search.COMPLEMENT_MANE, featureType
+            );
+            List<Search.OrderedAttribute> attributes = search.getOrderedAttributes(
+                    Search.BASIC_TYPES_FILTER,
+                    Search.LABEL_ORDER, 
+                    -1
+            );
+            final DefaultComboBoxModel model = new DefaultComboBoxModel();
+            for (Search.OrderedAttribute attribute : attributes) {
+                model.addElement(attribute.getDescriptor().getName());
+            }
+            SwingUtilities.invokeLater(() -> {
+              cboCode.setModel(model);
+              cboCode.setSelectedItem(foreingKey.getCodeName());
+            });
+        }
+
+        public void setEditable(boolean editable) {
+            this.chkIsForeingKey.setEnabled(editable);
+            this.chkIsClosedList.setEnabled(editable);
+            this.cboTable.setEnabled(editable);
+            this.cboCode.setEnabled(editable);
+            this.pickerFormula.setEditable(editable);
+            this.editable = editable;
+        }
+        
+        public void setEnabled(boolean enabled) {
+            if( !editable ) {
+                enabled =  false;
+            }
+            this.chkIsForeingKey.setEnabled(enabled);
+            this.chkIsClosedList.setEnabled(enabled);
+            this.cboTable.setEnabled(enabled);
+            this.cboCode.setEnabled(enabled);
+            this.pickerFormula.setEditable(editable);
+        }
+        
+        public void clean() {
+            this.chkIsForeingKey.setSelected(false);
+            this.chkIsClosedList.setSelected(false);
+            this.cboTable.setSelectedItem("");
+            this.cboCode.setSelectedItem("");
+            this.pickerFormula.set(null);
+        }
+        
+        public void put(ForeingKey foreingKey) {
+            if( foreingKey==null ) {
+                this.clean();
+                return;
+            }
+            this.foreingKey = foreingKey;
+            this.chkIsForeingKey.setSelected(foreingKey.isForeingKey());
+            this.chkIsClosedList.setSelected(foreingKey.isClosedList());
+            this.cboTable.setSelectedItem(foreingKey.getTableName());
+            this.cboCode.setSelectedItem(foreingKey.getCodeName());
+            this.pickerFormula.set(foreingKey.getLabelExpression(null));
+        }
+        
+        public void fetch(EditableForeingKey foreingKey) {
+            if( foreingKey==null ) {
+                return;
+            }
+            foreingKey.setForeingKey(this.chkIsForeingKey.isSelected());
+            foreingKey.setClosedList(this.chkIsClosedList.isSelected());
+            foreingKey.setTableName((String) this.cboTable.getSelectedItem());
+            foreingKey.setCodeName((String) this.cboCode.getSelectedItem());
+            Expression exp = this.pickerFormula.get();
+            if( ExpressionUtils.isPhraseEmpty(exp) ) {
+                foreingKey.setLabelFormula("");
+            } else {
+                foreingKey.setLabelFormula(exp.getPhrase());
+            }
+        }
+    }
+    
+
+    private static class AvailableValuesController {
+
+        private final JList lstValues;
+        private final JTextComponent txtLabel;
+        private final JTextComponent txtValue;
+        private final JButton btnAdd;
+        private final JButton btnUpdate;
+        private final JButton btnRemove;
+        private final JButton btnRemoveAll;
+
+        public AvailableValuesController(
+                JList lstValues,
+                JTextComponent txtLabel,
+                JTextComponent txtValue,
+                JButton btnAdd,
+                JButton btnUpdate,
+                JButton btnRemove,
+                JButton btnRemoveAll
+        ) {
+            this.lstValues = lstValues;
+            this.txtLabel = txtLabel;
+            this.txtValue = txtValue;
+            this.btnAdd = btnAdd;
+            this.btnUpdate = btnUpdate;
+            this.btnRemove = btnRemove;
+            this.btnRemoveAll = btnRemoveAll;
+
+            this.lstValues.addListSelectionListener((ListSelectionEvent e) -> {
+              doValuesChanged();
+            });
+            this.btnAdd.addActionListener((ActionEvent e) -> {
+              doAdd();
+            });
+            this.btnUpdate.addActionListener((ActionEvent e) -> {
+              doUpdate();
+            });
+            this.btnRemove.addActionListener((ActionEvent e) -> {
+              doRemove();
+            });
+            this.btnRemoveAll.addActionListener((ActionEvent e) -> {
+              doRemoveAll();
+            });
+        }
+
+        public void clean() {
+            this.lstValues.setModel(new DefaultListModel());
+            this.txtLabel.setText("");
+            this.txtValue.setText("");
+            this.lstValues.setSelectedIndex(-1);
+        }
+
+        public DynObjectValueItem[] get() {
+            ListModel<DynObjectValueItem> model = this.lstValues.getModel();
+            if( model.getSize()==0 ) {
+              return null;
+            }
+            DynObjectValueItem[] values = new DynObjectValueItem[model.getSize()];
+            for (int i = 0; i < model.getSize(); i++) {
+                values[i] = model.getElementAt(i);
+            }
+            return values;
+        }
+
+        public void set(DynObjectValueItem[] availableValues) {
+            DefaultListModel model = new DefaultListModel();
+            if (availableValues != null) {
+                for (DynObjectValueItem availableValue : availableValues) {
+                    model.addElement(availableValue);
+                }
+            }
+            this.lstValues.setModel(model);
+            if (model.getSize() > 0) {
+                this.lstValues.setSelectedIndex(0);
+            } else {
+                this.lstValues.setSelectedIndex(-1);
+            }
+        }
+
+        public void setEditable(boolean editable) {
+            this.lstValues.setEnabled(editable);
+            this.txtLabel.setEditable(editable);
+            this.txtValue.setEditable(editable);
+            this.btnAdd.setEnabled(editable);
+            this.btnUpdate.setEnabled(editable);
+            this.btnRemove.setEnabled(editable);
+            this.btnRemoveAll.setEnabled(editable);
+        }
+
+        private void doValuesChanged() {
+            DynObjectValueItem value = (DynObjectValueItem) this.lstValues.getSelectedValue();
+            if (value == null) {
+                this.txtLabel.setText("");
+                this.txtValue.setText("");
+                this.btnAdd.setEnabled(true);
+                this.btnUpdate.setEnabled(false);
+                this.btnRemove.setEnabled(false);
+                return;
+            }
+            this.txtLabel.setText(value.getLabel());
+            this.txtValue.setText(Objects.toString(value.getValue(), ""));
+            this.btnAdd.setEnabled(true);
+            this.btnUpdate.setEnabled(true);
+            this.btnRemove.setEnabled(true);
+        }
+
+        private void doAdd() {
+            DynObjectValueItem value = new DynObjectValueItem("Value", "Label");
+            DefaultListModel model = (DefaultListModel) this.lstValues.getModel();
+            model.addElement(value);
+            this.lstValues.setSelectedIndex(model.getSize() - 1);
+        }
+
+        private void doUpdate() {
+            DynObjectValueItem value = (DynObjectValueItem) this.lstValues.getSelectedValue();
+            if (value == null) {
+                return; // EEhh?? esto no deberia pasar
+            }
+            value.setLabel(this.txtLabel.getText());
+            value.setValue(this.txtValue.getText());
+        }
+
+        private void doRemove() {
+            int n = this.lstValues.getSelectedIndex();
+            if (n < 0) {
+                return; // EEhh?? esto no deberia pasar
+            }
+            DefaultListModel model = (DefaultListModel) this.lstValues.getModel();
+            model.removeElementAt(n);
+            if (--n < 0) {
+                n = 0;
+            }
+            this.lstValues.setSelectedIndex(n);
+        }
+
+        private void doRemoveAll() {
+            DefaultListModel model = new DefaultListModel();
+            this.lstValues.setModel(model);
+            this.lstValues.setSelectedIndex(-1);
+        }
+
+    }
+
+    private final List<ListElement<Integer>> fieldTypes;
+    private final List<ListElement<Integer>> geometryTypes;
+    private final List<ListElement<Integer>> geometrySubtypes;
+
+    private DatePickerController pickerIntervalEnd;
+    private DatePickerController pickerIntervalStart;
+    private CalculatorController<Integer> pickerSize;
+    private CalculatorController<Integer> pickerDisplaySize;
+    private CalculatorController<Integer> pickerPrecision;
+    private CalculatorController<Integer> pickerScale;
+    private PickerController<IProjection> pickerCRS;
+    private ExpressionPickerController pickerVirtualField;
+    private ExpressionPickerController pickerDefaultFormat;
+    private CalculatorController<Integer> pickerOrder;
+    private AvailableValuesController availableValuesController;
+    private AggregateController<Tag> tagsController;
+    private ForeingKeyController foreingKeyController;
+    private ExpressionPickerController pickerValuesFilter;
+
+    private int mode;
+    private FeatureStoreElement featureStoreElement;
+
+    public DefaultFeatureAttributePanel() {
+        this.mode = FeatureTypePanel.MODE_SHOW_ONLY;
+        DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
+        // se deber�a de utilizar el datatypepicker
+        this.fieldTypes = new ArrayList<>();
+        fieldTypes.add( new ListElement<>("Decimal", DataTypes.DECIMAL) );
+        fieldTypes.add( new ListElement<>("Integer", DataTypes.INTEGER) );
+        fieldTypes.add( new ListElement<>("String", DataTypes.STRING) );
+        fieldTypes.add( new ListElement<>("Boolean", DataTypes.BOOLEAN) );
+        fieldTypes.add( new ListElement<>("Date", DataTypes.DATE) );
+        fieldTypes.add( new ListElement<>("Date/Time (Timestamp)", DataTypes.TIMESTAMP) );
+//        for (DataType dataType : dataManager) {
+//            fieldTypes.add( new ListElement<>(dataType.getName(), dataType.getType()) );
+//        }
+        fieldTypes.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> 
+                o1.toString().compareTo(o2.toString())
+        );
+
+        this.geometryTypes = new ArrayList<>();
+        this.geometryTypes.add(new ListElement("Point", Geometry.TYPES.POINT));
+        this.geometryTypes.add(new ListElement("Line", Geometry.TYPES.LINE));
+        this.geometryTypes.add(new ListElement("Polygon", Geometry.TYPES.POLYGON));
+        this.geometryTypes.add(new ListElement("MultiPoint", Geometry.TYPES.MULTIPOINT));
+        this.geometryTypes.add(new ListElement("MultiLine", Geometry.TYPES.MULTILINE));
+        this.geometryTypes.add(new ListElement("MultiPolygon", Geometry.TYPES.MULTIPOLYGON));
+        this.geometryTypes.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> 
+                  o1.toString().compareTo(o2.toString())
+        );
+
+        this.geometrySubtypes = new ArrayList<>();
+        this.geometrySubtypes.add(new ListElement("2D", Geometry.SUBTYPES.GEOM2D));
+        this.geometrySubtypes.add(new ListElement("2DM", Geometry.SUBTYPES.GEOM3D));
+        this.geometrySubtypes.add(new ListElement("3D", Geometry.SUBTYPES.GEOM2DM));
+        this.geometrySubtypes.add(new ListElement("3DM", Geometry.SUBTYPES.GEOM3DM));
+        this.geometrySubtypes.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> 
+                o1.toString().compareTo(o2.toString())
+        );
+
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        final ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+        final ExpressionEvaluatorSwingManager evaluatorSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        final DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        final I18nManager i18n = ToolsLocator.getI18nManager();
+        final DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager();
+
+        DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>();
+        for (ListElement<Integer> element : fieldTypes) {
+            modelTypes.addElement(element);
+        }
+        this.cboFieldType.setModel(modelTypes);
+        this.cboFieldType.setRenderer(new DefaultListCellRenderer() {
+          @Override
+          public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+              JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+              label.setIcon(null);
+              try {
+                DataType dataType = dataTypeManager.get((int) value);
+                IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+                if (theme.exists(dataType.getIconName())) {
+                    label.setIcon(theme.get(dataType.getIconName()));
+                }
+              } catch(Exception ex) {
+                // Do nothing, ignore
+              }
+              return label;
+          }
+        });
+
+        DefaultComboBoxModel<ListElement<Integer>> modelGeomTypes = new DefaultComboBoxModel<>();
+        for (ListElement<Integer> element : this.geometryTypes) {
+            modelGeomTypes.addElement(element);
+        }
+        this.cboGeometryType.setModel(modelGeomTypes);
+
+        DefaultComboBoxModel<ListElement<Integer>> modelGeomSubtypes = new DefaultComboBoxModel<>();
+        for (ListElement<Integer> element : this.geometrySubtypes) {
+            modelGeomSubtypes.addElement(element);
+        }
+
+        this.cboGeometrySubtype.setModel(modelGeomSubtypes);
+
+        swingManager.translate(this.lblAllowNulls);
+        swingManager.translate(this.lblCRS);
+        swingManager.translate(this.lblDataProfile);
+        swingManager.translate(this.lblDateFormat);
+        swingManager.translate(this.lblDefaultValue);
+        swingManager.translate(this.lblDefaultFormat);
+        swingManager.translate(this.lblFieldName);
+        swingManager.translate(this.lblFieldType);
+        swingManager.translate(this.lblGeometrySubtype);
+        swingManager.translate(this.lblGeometryType);
+        swingManager.translate(this.lblInterval);
+        swingManager.translate(this.lblIntervalEnd);
+        swingManager.translate(this.lblIntervalStart);
+        swingManager.translate(this.lblIsAutomatic);
+        swingManager.translate(this.lblIsIndexed);
+        swingManager.translate(this.lblIsReadOnly);
+        swingManager.translate(this.lblIsPrimaryKey);
+        swingManager.translate(this.lblPrecision);
+        swingManager.translate(this.lblScale);
+        swingManager.translate(this.lblSize);
+        swingManager.translate(this.lblDisplaySize);
+        swingManager.translate(this.chkVirtualField);
+        swingManager.translate(this.tabAditionalFields);
+        swingManager.translate(this.tabLayout);
+        swingManager.translate(this.lblGroup);
+        swingManager.translate(this.lblOrder);
+        swingManager.translate(this.lblHidden);
+        swingManager.translate(this.lblLabel);
+        swingManager.translate(this.lblDescription);
+        swingManager.translate(this.lblMinValue);
+        swingManager.translate(this.lblMaxValue);
+        swingManager.translate(this.lblAvailableValues);
+        swingManager.translate(this.lblAvailableValuesLabel);
+        swingManager.translate(this.lblAvailableValuesValue);
+        swingManager.translate(this.lblRelationType);
+        swingManager.translate(this.btnAvailableValuesAdd);
+        swingManager.translate(this.btnAvailableValuesUpdate);
+        swingManager.translate(this.btnAvailableValuesRemove);
+        swingManager.translate(this.btnAvailableValuesRemoveAll);
+        swingManager.translate(this.lblAttrTagsItemName);
+        swingManager.translate(this.lblAttrTagsItemValue);
+        swingManager.translate(this.lblAttrTagsItemNotes);
+        swingManager.translate(this.lblValuesFilter);
+
+        swingManager.translate(this.lblForeingKeyCodeName);
+        swingManager.translate(this.lblForeingKeyLabelFormula);
+        swingManager.translate(this.lblForeingKeyTableName);
+        swingManager.translate(this.lblIsClosedList);
+        swingManager.translate(this.chkIsForeingKey);
+
+        swingManager.translate(this.txtDisplaySize);
+        swingManager.translate(this.txtPrecision);
+        swingManager.translate(this.txtScale);
+        swingManager.translate(this.txtScale);
+
+        swingManager.addClearButton(this.txtDefaultValue);
+        swingManager.addClearButton(this.txtDefaultFormat);
+        swingManager.addClearButton(this.txtFieldName);
+        swingManager.addClearButton(this.txtIntervalEnd);
+        swingManager.addClearButton(this.txtIntervalStart);
+        swingManager.addClearButton(this.txtScale);
+        swingManager.addClearButton(this.txtSize);
+        swingManager.addClearButton(this.txtDisplaySize);
+        swingManager.addClearButton(this.txtLabel);
+        swingManager.addClearButton(this.txtDescription);
+        swingManager.addClearButton(this.cboGroup);
+        swingManager.addClearButton(this.txtMaxValue);
+        swingManager.addClearButton(this.txtMinValue);
+        swingManager.addClearButton(this.txtAvailableValuesLabel);
+        swingManager.addClearButton(this.txtAvailableValuesValue);
+
+        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
+        swingManager.setDefaultPopupMenu(this.txtDefaultFormat);
+        swingManager.setDefaultPopupMenu(this.txtFieldName);
+        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
+        swingManager.setDefaultPopupMenu(this.txtIntervalStart);
+        swingManager.setDefaultPopupMenu(this.txtScale);
+        swingManager.setDefaultPopupMenu(this.txtSize);
+        swingManager.setDefaultPopupMenu(this.txtDisplaySize);
+        swingManager.setDefaultPopupMenu(this.cboDateFormat);
+        swingManager.setDefaultPopupMenu(this.cboFieldType);
+        swingManager.setDefaultPopupMenu(this.cboGeometrySubtype);
+        swingManager.setDefaultPopupMenu(this.cboGeometryType);
+        swingManager.setDefaultPopupMenu(this.cboDataProfile);
+
+        swingManager.setDefaultPopupMenu(this.cboForeingKeyCodeName);
+        swingManager.setDefaultPopupMenu(this.cboForeingKeyTableName);
+
+        swingManager.setDefaultPopupMenu(this.cboGroup);
+        swingManager.setDefaultPopupMenu(this.txtOrder);
+        swingManager.setDefaultPopupMenu(this.txtLabel);
+        swingManager.setDefaultPopupMenu(this.txtDescription);
+        swingManager.setDefaultPopupMenu(this.txtMinValue);
+        swingManager.setDefaultPopupMenu(this.txtMaxValue);
+        swingManager.setDefaultPopupMenu(this.txtAvailableValuesLabel);
+        swingManager.setDefaultPopupMenu(this.txtAvailableValuesValue);
+
+        this.foreingKeyController = new ForeingKeyController(
+                chkIsForeingKey, 
+                chkIsClosedList, 
+                cboForeingKeyTableName, 
+                cboForeingKeyCodeName, 
+                txtForeingKeyFormula, 
+                btnForeingKeyFormula,
+                btnForeingKeyFormulaBookmarks,
+                btnForeingKeyFormulaHistory
+        );
+        this.pickerIntervalEnd = swingManager.createDatePickerController(
+                this.txtIntervalEnd,
+                this.btnIntervalEnd
+        );
+        this.pickerIntervalStart = swingManager.createDatePickerController(
+                this.txtIntervalStart,
+                this.btnIntervalStart
+        );
+        this.pickerSize = evaluatorSwingManager.createCalculatorController(
+                this.txtSize, DataTypes.INT
+        );
+        this.pickerDisplaySize = evaluatorSwingManager.createCalculatorController(this.txtDisplaySize, DataTypes.INT
+        );
+        this.pickerPrecision = evaluatorSwingManager.createCalculatorController(
+                this.txtPrecision, DataTypes.INT
+        );
+        this.pickerScale = evaluatorSwingManager.createCalculatorController(
+                this.txtScale, DataTypes.INT
+        );
+        this.txtDefaultValue.getComponentPopupMenu().add(evaluatorSwingManager.createJExpressionBuilderAction(txtDefaultValue));
+        this.pickerOrder = evaluatorSwingManager.createCalculatorController(
+                this.txtOrder, DataTypes.INT
+        );
+
+        this.availableValuesController = new AvailableValuesController(
+                lstAvailableValues,
+                txtAvailableValuesLabel,
+                txtAvailableValuesValue,
+                btnAvailableValuesAdd,
+                btnAvailableValuesUpdate,
+                btnAvailableValuesRemove,
+                btnAvailableValuesRemoveAll
+        );
+        
+        this.tagsController = new DefaultAggregateController<>(
+                this.tblAttrTagsItems,
+                this.btnAttrTagsModify,
+                this.btnAttrTagsDiscard,
+                this.btnAttrTagsAccept,
+                this.btnAttrTagsNew,
+                this.btnAttrTagsDelete,
+                new TagController(
+                        this.cboAttrTagsItemName,
+                        this.cboAttrTagsItemValue,
+                        this.lblAttrTagsItemNotesValue
+                )
+        );        
+        this.txtMinValue.setEnabled(false);
+        this.txtMaxValue.setEnabled(false);
+
+        this.btnVirtualField.setText("");
+        this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
+        this.pickerVirtualField = evaluatorSwingManager.createExpressionPickerController(
+                txtVirtualField, btnVirtualField, btnVirtualFieldBookmarks, btnVirtualFieldHistory
+        );
+        this.pickerVirtualField.addElement(this.featureStoreElement);
+        this.chkVirtualField.addChangeListener((ChangeEvent e) -> {
+          if (chkVirtualField.isSelected()) {
+            pickerVirtualField.setEditable(mode==MODE_EDIT_ALL || mode==MODE_EDIT_ONLY_METADATA);
+          } else {
+            pickerVirtualField.setEditable(false);
+          }
+        });
+
+        this.pickerCRS = dataSwingManager.createProjectionPickerController(
+                this.txtCRS, this.btnCRS
+        );
+
+        this.cboFieldType.addItemListener((ItemEvent e) -> {
+          SwingUtilities.invokeLater(() -> {
+            doFieldTypeChanged();
+          });
+        });
+
+        this.pickerPrecision.addChangeListener((ChangeEvent e) -> {
+          doCheckPrecisionAndScale();
+        });
+        this.pickerScale.addChangeListener((ChangeEvent e) -> {
+          doCheckPrecisionAndScale();
+        });
+
+        DefaultComboBoxModel dataProfilesModel = new DefaultComboBoxModel<>();
+        dataProfilesModel.addElement(new ListElement<>("", null));
+        for (DataProfile profile : DALLocator.getDataManager().getDataProfiles()) {
+            dataProfilesModel.addElement(new ListElement<>(profile.getName(), profile.getID()));
+        }
+        this.cboDataProfile.setModel(dataProfilesModel);
+        
+        this.btnFieldType.addActionListener((ActionEvent e) -> {
+          doDataTypeSelection();
+        });
+        
+        DefaultComboBoxModel<ListElement<Integer>> relationTypeModel = new DefaultComboBoxModel<>();
+        relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_None"),DynField.RELATION_TYPE_NONE));
+        relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY));
+        relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1"),DynField.RELATION_TYPE_COLLABORATION));
+        relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Composition_1_N"),DynField.RELATION_TYPE_COMPOSITION));
+        relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N"),DynField.RELATION_TYPE_AGGREGATE));
+        this.cboRelationType.setModel(relationTypeModel);
+
+
+        this.pickerValuesFilter = evaluatorSwingManager.createExpressionPickerController(
+                txtValuesFilter, btnValuesFilter, btnValuesFilterBookmarks, btnValuesFilterHistory
+        );
+        this.pickerValuesFilter.addElement(this.featureStoreElement);
+
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private void doDataTypeSelection() {
+        final DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
+        final I18nManager i18n = ToolsLocator.getI18nManager();
+        List<ListElement<Integer>> types = new ArrayList<>();
+        for (DataType dataType : dataManager) {
+            types.add( new ListElement<>(dataType.getName(), dataType.getType()) );
+        }
+        types.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> 
+                o1.toString().compareTo(o2.toString())
+        );
+        
+        DefaultListModel<ListElement<Integer>> modelTypes = new DefaultListModel<>();
+        for (ListElement<Integer> element : types) {
+            modelTypes.addElement(element);
+        }
+        final JList list = new JList();
+        list.setCellRenderer(new DefaultListCellRenderer() {
+          @Override
+          public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+              JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+              label.setIcon(null);
+              try {
+                DataType dataType = dataManager.get((int) value);
+                IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+                if (theme.exists(dataType.getIconName())) {
+                    label.setIcon(theme.get(dataType.getIconName()));
+                }
+              } catch(Exception ex) {
+                // Do nothing, ignore
+              }
+              return label;
+          }
+        });
+        list.setModel(modelTypes);
+        final JScrollPane scrollpanel = new JScrollPane(list);
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        Dialog dialog = winManager.createDialog(
+              scrollpanel, 
+              i18n.getTranslation("_Data_type_selection"),
+              i18n.getTranslation("_Select_the_data_type"),
+              WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+          if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
+            Integer type = (Integer) ListElement.getSelected(list);
+            if( type!=null ) {
+              ListElement.setSelected(cboFieldType, type);
+              if( ListElement.getSelected(cboFieldType)==null ) {
+                DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager();
+                DataType dataType = dataTypeManager.get(type);
+                cboFieldType.addItem(new ListElement<>(dataType.getName(), dataType.getType()));
+                ListElement.setSelected(cboFieldType, dataType.getType());
+              }
+            }
+          }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        try {
+            if (!this.chkAllowNulls.isSelected()) {
+                if (descriptor.allowNull()) {
+                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                    dialogs.messageDialog(
+                            i18n.getTranslation("_You_have_marked_not_allow_nulls") + "\n"
+                            + i18n.getTranslation("If_you_are_not_fully_aware_of_the_repercussions_of_this_it_is_advisable_to_allow_nulls"),
+                            null,
+                            i18n.getTranslation("_Warning"),
+                            JOptionPane.INFORMATION_MESSAGE,
+                            "AllowNullsInFeatureTypeEditing"
+                    );
+                }
+            }
+            descriptor.setDataType((int) ListElement.getSelected(this.cboFieldType));
+            descriptor.setName(this.txtFieldName.getText());
+            descriptor.setAllowNull(this.chkAllowNulls.isSelected());
+            descriptor.setIsPrimaryKey(this.chkIsPrimaryKey.isSelected());
+            descriptor.setIsAutomatic(this.chkIsAutomatic.isSelected());
+            descriptor.setIsReadOnly(this.chkIsReadOnly.isSelected());
+            descriptor.setIsIndexed(this.chkIsIndexed.isSelected());
+            descriptor.setSize(this.pickerSize.get(0));
+            descriptor.setDisplaySize(this.pickerDisplaySize.get(0));
+            descriptor.setPrecision(this.pickerPrecision.get(0));
+            descriptor.setScale(this.pickerScale.get(0));
+            descriptor.setDefaultValue(this.txtDefaultValue.getText());
+            descriptor.setDefaultFormat(this.txtDefaultFormat.getText());
+            descriptor.setDataProfileName((String) ListElement.getSelected(this.cboDataProfile));
+            descriptor.setRelationType((int) ListElement.getSelected(this.cboRelationType));
+            switch (descriptor.getType()) {
+                case DataTypes.GEOMETRY:
+                    GeometryManager geomManager = GeometryLocator.getGeometryManager();
+                    GeometryType geomType = geomManager.getGeometryType(
+                            (int) ListElement.getSelected(this.cboGeometryType),
+                            (int) ListElement.getSelected(this.cboGeometrySubtype)
+                    );
+                    descriptor.setGeometryType(geomType);
+                    descriptor.setSRS(this.pickerCRS.get());
+                    break;
+                case DataTypes.INSTANT:
+                case DataTypes.INTERVAL:
+                case DataTypes.DATE:
+                case DataTypes.TIME:
+                case DataTypes.TIMESTAMP:
+                    // FIXME
+                    break;
+                default:
+                    break;
+            }
+            descriptor.setDataProfileName(
+                    StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile), null)
+            );
+
+            if (this.chkVirtualField.isSelected() ) { //&& this.pickerVirtualField.isEnabled()) {
+                Expression expression = this.pickerVirtualField.get();
+                if (expression == null) {
+                    descriptor.setFeatureAttributeEmulator((String) null);
+                } else {
+                    DataManager dataManager = DALLocator.getDataManager();
+                    FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
+                            descriptor.getFeatureType(),
+                            expression
+                    );
+                    if (!emulator.isValid()) {
+                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                        dialogs.messageDialog(
+                                i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+"\n"
+                                + "\n"
+                                + emulator.getErrorMessage(),
+                                i18n.getTranslation("_Warning"),
+                                JOptionPane.WARNING_MESSAGE
+                        );
+                        return null;
+                    }
+                    for (String requiredFieldName : emulator.getRequiredFieldNames()) {
+                        if (StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName())) {
+                            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                            dialogs.messageDialog(
+                                    i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")
+                                    + "\n\n"
+                                    + i18n.getTranslation("_The_expression_contains_a_reference_to_itself"),
+                                    i18n.getTranslation("_Warning"),
+                                    JOptionPane.WARNING_MESSAGE
+                            );
+                            return null;
+                        }
+                    }
+                    List<String> undefinedSymbols = emulator.getUndefinedSymbols();
+                    if( undefinedSymbols!=null && !undefinedSymbols.isEmpty() ) {
+                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                        dialogs.messageDialog(
+                                i18n.getTranslation("_The_expression_has_undefined_symbols_at_this_moment")+"\n"
+                                + i18n.getTranslation("_This_may_not_be_a_mistake")+"\n"
+                                + "\n"
+                                + "("+StringUtils.join(undefinedSymbols,",")+")",
+                                i18n.getTranslation("_Warning"),
+                                JOptionPane.WARNING_MESSAGE
+                        );
+                    }
+                    //
+                    // No se porque esto de abajo no funciona.
+                    // Nunca se lanza la excepcion en el get(Feature) de
+                    // DefaultFeatureAttributeEmulatorExpression.
+                    //
+                    try {
+                        emulator.setEnableExceptions(true);
+//                        descriptor.setFeatureAttributeEmulator(emulator);
+                        emulator.get(this.sampleFeature);
+                    } catch(Throwable ex) {
+//                        emulator.setEnableExceptions(false);
+//                        descriptor.setFeatureAttributeEmulator(null);
+                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                        dialogs.messageDialog(
+                                i18n.getTranslation("_The_expression_can_not_be_evaluated_right_now_It_could_be_valid_when_all_changes_has_been_applied")+
+                                    "\n"+
+                                    ex.getMessage(), 
+                                i18n.getTranslation("_Warning"), 
+                                JOptionPane.WARNING_MESSAGE
+                        );
+//                        return null;
+                    } finally {
+                        emulator.setEnableExceptions(false);
+                    }
+                    descriptor.setFeatureAttributeEmulator(emulator);
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't retrieve information from user form.", ex);
+            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Cant_retrieve_information_from_user_form")
+                    + "\n"
+                    + i18n.getTranslation("_See_log_for_details"),
+                    i18n.getTranslation("_Warning"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return null;
+        }
+
+        descriptor.setGroup(StringUtils.defaultIfBlank((String) this.cboGroup.getSelectedItem(), null));
+        descriptor.setOrder(this.pickerOrder.get(0));
+        descriptor.setHidden(this.chkHidden.isSelected());
+        descriptor.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null));
+        descriptor.setDescription(StringUtils.defaultIfBlank(this.txtDescription.getText(), null));
+
+//        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
+//        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
+        Expression valuesFilter = this.pickerValuesFilter.get();
+        
+        descriptor.setAvailableValues(this.availableValuesController.get());
+
+        this.tagsController.getModel().fetch(descriptor.getTags());
+        this.foreingKeyController.fetch(descriptor.getForeingKey());
+        return descriptor;
+    }
+
+    @Override
+    public void clean() {
+        this.txtDefaultValue.setText("");
+        this.txtDefaultFormat.setText("");
+        this.txtFieldName.setText("");
+//        this.pickerFieldName.set(null);
+        this.pickerIntervalEnd.set(null);
+        this.pickerIntervalStart.set(null);
+        this.pickerScale.set(null);
+        this.pickerSize.set(null);
+        this.pickerDisplaySize.set(null);
+
+        this.chkAllowNulls.setSelected(false);
+        this.chkIsAutomatic.setSelected(false);
+        this.chkIsReadOnly.setSelected(false);
+        this.chkIsIndexed.setSelected(false);
+        this.chkIsPrimaryKey.setSelected(false);
+
+        this.chkVirtualField.setSelected(false);
+        this.chkVirtualField.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
+        this.pickerVirtualField.setEditable(false);
+        this.pickerVirtualField.set(null);
+
+        ListElement.setSelected(cboGeometryType, null);
+        ListElement.setSelected(cboGeometrySubtype, null);
+
+        ListElement.setSelected(cboFieldType, DataTypes.STRING);
+
+        this.cboDataProfile.setSelectedIndex(-1);
+
+        this.cboGroup.setSelectedIndex(-1);
+        this.pickerOrder.set(null);
+        this.chkHidden.setSelected(false);
+        this.txtLabel.setText("");
+        this.txtDescription.setText("");
+        this.txtMinValue.setText("");
+        this.txtMaxValue.setText("");
+        this.availableValuesController.clean();
+        this.tagsController.clean();
+        this.foreingKeyController.clean();
+    }
+
+    @Override
+    public void put(FeatureAttributeDescriptor descriptor) {
+        if (descriptor == null) {
+            this.clean();
+            return;
+        }
+        DataType dataType = descriptor.getDataType();
+        FeatureType featureType = descriptor.getFeatureType();
+        DefaultComboBoxModel groupModel = new DefaultComboBoxModel();
+
+        if (featureType != null) {
+            FeatureStore store = descriptor.getFeatureType().getStore();
+            this.featureStoreElement.setFeatureStore(store);
+            if (store != null) {
+                this.sampleFeature = null;
+                try {
+                    sampleFeature = store.getFeatureSelection().first();
+                    if (sampleFeature == null) {
+                        sampleFeature = store.first();
+                    }
+                } catch (DataException ex) {
+                }
+                if (sampleFeature != null) {
+                    FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
+                    featureSymbolTable.setFeature(sampleFeature);
+                    this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
+                    this.pickerValuesFilter.setPreviewSymbolTable(featureSymbolTable.createParent());
+                }
+            }
+            List<String> groups = new ArrayList<>();
+            for (FeatureAttributeDescriptor otherdesc : featureType) {
+                String group = otherdesc.getGroup();
+                if (!StringUtils.isBlank(group) && !groups.contains(group)) {
+                    groups.add(group);
+                }
+            }
+            for (String group : groups) {
+                groupModel.addElement(group);
+            }
+        }
+
+        this.txtDefaultValue.setText(Objects.toString(descriptor.getDefaultValue(),""));
+        this.txtDefaultFormat.setText(Objects.toString(descriptor.getDefaultFormat(),""));
+        this.txtFieldName.setText(descriptor.getName());
+        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
+        if (interval == null) {
+            this.pickerIntervalEnd.set(null);
+            this.pickerIntervalStart.set(null);
+        } else {
+            this.pickerIntervalEnd.set(interval.getEnd().toDate());
+            this.pickerIntervalStart.set(interval.getStart().toDate());
+        }
+        if( dataType.supportSize() ) {
+          this.pickerSize.set(descriptor.getSize());
+        } else {
+          this.pickerSize.set(null);
+        }
+        this.pickerDisplaySize.set(descriptor.getDisplaySize());
+        if( dataType.supportPrecision() ) {
+          this.pickerPrecision.set(descriptor.getPrecision());
+        } else {
+          this.pickerPrecision.set(null);
+        }
+        if( dataType.supportScale()) {
+          this.pickerScale.set(descriptor.getScale());
+        } else {
+          this.pickerScale.set(null);
+        }
+        this.chkAllowNulls.setSelected(descriptor.allowNull());
+        this.chkIsAutomatic.setSelected(descriptor.isAutomatic());
+        this.chkIsReadOnly.setSelected(descriptor.isReadOnly());
+        this.chkIsIndexed.setSelected(descriptor.isIndexed());
+        this.chkIsPrimaryKey.setSelected(descriptor.isPrimaryKey());
+
+        this.pickerVirtualField.setEnabled(true);
+        FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator();
+        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
+            Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression();
+            this.chkVirtualField.setEnabled(this.mode==MODE_EDIT_ALL);
+            this.chkVirtualField.setSelected(true);
+            this.pickerVirtualField.set(expression);
+        } else if (descriptor.isComputed()) {
+            this.chkVirtualField.setEnabled(false);
+            this.chkVirtualField.setSelected(true);
+            this.pickerVirtualField.set(null);
+        } else {
+            this.chkVirtualField.setEnabled(this.mode==MODE_EDIT_ALL);
+            this.chkVirtualField.setSelected(false);
+            this.pickerVirtualField.set(null);
+        }
+        this.pickerVirtualField.setEnabled(true);
+
+        Expression expression = descriptor.getAvailableValuesFilter();
+        this.pickerValuesFilter.set(expression);
+
+        this.pickerCRS.set(descriptor.getSRS());
+
+        if (descriptor.getGeomType() != null) {
+            ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType());
+            ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType());
+        }
+        ListElement.setSelected(cboFieldType, dataType.getType());
+        if( ListElement.getSelected(cboFieldType)==null ) {
+          cboFieldType.addItem(new ListElement<>(dataType.getName(), dataType.getType()));
+          ListElement.setSelected(cboFieldType, dataType.getType());
+        }
+ 
+        ListElement.setSelected(cboRelationType, descriptor.getRelationType());
+
+        String profile = descriptor.getDataProfileName();
+        if (StringUtils.isBlank(profile)) {
+            this.cboDataProfile.setSelectedIndex(-1);
+        } else {
+            ListElement.setSelected(this.cboDataProfile, profile);
+        }
+
+        this.cboGroup.setModel(groupModel);
+        this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(), ""));
+        this.pickerOrder.set(descriptor.getOder());
+        this.chkHidden.setSelected(descriptor.isHidden());
+        if (descriptor.hasLabel()) {
+            this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(), ""));
+        } else {
+            this.txtLabel.setText("");
+        }
+        if (descriptor.hasDescription()) {
+            this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(), ""));
+        } else {
+            this.txtDescription.setText("");
+        }
+        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
+        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
+        if( descriptor.hasConstantAvailableValues() ) {
+          this.availableValuesController.set(descriptor.getAvailableValues());
+        } else {
+          this.availableValuesController.clean();
+        }
+        this.tagsController.setModel(new TagsModel(descriptor.getTags()));
+
+        this.foreingKeyController.put(descriptor.getForeingKey());
+        
+        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
+            this.setMode(FeatureTypePanel.MODE_SHOW_ONLY);
+        }
+        this.updateEditableStates();
+    }
+
+    private DataType getDataType() {
+      Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType);
+      if (fieldType == null) {
+          return null;
+      }
+      DataType dataType = ToolsLocator.getDataTypesManager().get(fieldType);
+      return dataType;
+    }
+
+    private void doFieldTypeChanged() {
+      try {
+        DataType dataType = this.getDataType();
+
+        if( dataType.supportSize() ) {
+            this.pickerSize.setEditable(this.mode == MODE_EDIT_ALL);
+        } else {
+            this.pickerSize.setEditable(false);
+            this.pickerSize.set(null);
+        }        
+        this.pickerDisplaySize.setEditable(this.mode == MODE_EDIT_ALL);
+        if( dataType.supportPrecision() ) {
+          if( dataType.isPredefinedPrecision() ) {
+            this.pickerPrecision.setEditable(false);
+          } else {
+            this.pickerPrecision.setEditable(this.mode == MODE_EDIT_ALL);
+          }
+        } else {
+            this.pickerPrecision.setEditable(false);
+            this.pickerPrecision.set(null);
+        }        
+        if( dataType.supportScale()) {
+            this.pickerScale.setEditable(this.mode == MODE_EDIT_ALL);
+        } else {
+            this.pickerScale.setEditable(false);
+            this.pickerScale.set(null);
+        }        
+        switch (dataType.getType()) {
+          case DataTypes.GEOMETRY:
+            this.cboGeometryType.setEnabled(this.mode == MODE_EDIT_ALL);
+            this.cboGeometrySubtype.setEnabled(this.mode == MODE_EDIT_ALL);
+            this.pickerCRS.setEditable(this.mode == MODE_EDIT_ALL);
+            this.cboDateFormat.setEnabled(false);
+            this.pickerIntervalStart.setEditable(false);
+            this.pickerIntervalEnd.setEditable(false);
+            this.tabAditionalFields.setEnabledAt(1, true);
+            this.tabAditionalFields.setEnabledAt(2, false);
+            break;
+          case DataTypes.INSTANT:
+          case DataTypes.INTERVAL:
+          case DataTypes.DATE:
+          case DataTypes.TIME:
+          case DataTypes.TIMESTAMP:
+            this.cboGeometryType.setEnabled(false);
+            this.cboGeometrySubtype.setEnabled(false);
+            this.pickerCRS.setEditable(false);
+            this.cboDateFormat.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA);
+            this.pickerIntervalStart.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA);
+            this.pickerIntervalEnd.setEnabled(this.mode == MODE_EDIT_ALL || this.mode == MODE_EDIT_ONLY_METADATA);
+            this.tabAditionalFields.setEnabledAt(1, false);
+            this.tabAditionalFields.setEnabledAt(2, true);
+            break;
+          case DataTypes.BYTE:
+          case DataTypes.INT:
+          case DataTypes.LONG:
+          case DataTypes.STRING:
+          case DataTypes.FILE:
+          case DataTypes.URL:
+          case DataTypes.URI:
+          case DataTypes.FLOAT:
+          case DataTypes.DOUBLE:
+          case DataTypes.DECIMAL:
+            this.cboGeometryType.setEnabled(false);
+            this.cboGeometrySubtype.setEnabled(false);
+            this.pickerCRS.setEditable(false);
+            this.cboDateFormat.setEnabled(false);
+            this.pickerIntervalStart.setEditable(false);
+            this.pickerIntervalEnd.setEditable(false);
+            this.tabAditionalFields.setEnabledAt(1, false);
+            this.tabAditionalFields.setEnabledAt(2, false);
+            break;
+          default:
+            this.cboGeometryType.setEnabled(false);
+            this.cboGeometrySubtype.setEnabled(false);
+            this.pickerCRS.setEditable(false);
+            this.cboDateFormat.setEnabled(false);
+            this.pickerIntervalStart.setEditable(false);
+            this.pickerIntervalEnd.setEditable(false);
+            this.tabAditionalFields.setEnabledAt(1, false);
+            this.tabAditionalFields.setEnabledAt(2, false);
+        }
+      } catch (Exception ex) {
+        LOGGER.warn("Problems changing field type.", ex);
+      }
+
+    }
+    
+    boolean isVirtualField() {
+        return this.chkVirtualField.isSelected();
+    }
+
+    @Override
+    public int getMode() {
+        return this.mode;
+    }
+    
+    @Override
+    public void setMode(int mode) {
+        this.mode = mode;
+        updateEditableStates();
+    }
+    
+    private void updateEditableStates() {
+        DataType dataType = this.getDataType();
+        switch(this.mode) {
+            case MODE_EDIT_ALL:
+                this.cboRelationType.setEnabled(true);
+                this.txtDefaultValue.setEditable(true);
+                this.txtDefaultFormat.setEditable(true);
+                this.txtFieldName.setEditable(true);
+                this.pickerIntervalEnd.setEditable(true);
+                this.pickerIntervalStart.setEditable(true);
+                this.pickerSize.setEditable(dataType.supportSize());
+                this.pickerDisplaySize.setEditable(true);
+                if( dataType.isPredefinedPrecision() ) {
+                  this.pickerPrecision.setEditable(false);
+                  this.pickerPrecision.set(dataType.getMaxPrecision());
+                } else {
+                  this.pickerPrecision.setEditable(dataType.supportPrecision());
+                }
+                this.pickerScale.setEditable(dataType.supportScale());
+                this.cboDataProfile.setEnabled(true);
+
+                this.chkAllowNulls.setEnabled(true);
+                this.chkIsAutomatic.setEnabled(true);
+                this.chkIsReadOnly.setEnabled(true);
+                this.chkIsIndexed.setEnabled(true);
+                if( this.isVirtualField() ) {
+                    this.chkIsPrimaryKey.setEnabled(false);
+                } else {
+                    this.chkIsPrimaryKey.setEnabled(true);
+                }
+
+                this.chkVirtualField.setEnabled(true);
+                this.pickerVirtualField.setEditable(true);
+
+                this.cboDateFormat.setEnabled(true);
+                this.cboFieldType.setEnabled(true);
+                this.cboGeometryType.setEnabled(true);
+                this.cboGeometrySubtype.setEnabled(true);
+                this.pickerCRS.setEditable(true);
+
+                this.cboGroup.setEnabled(true);
+                this.pickerOrder.setEditable(true);
+                this.chkHidden.setEnabled(true);
+                this.txtLabel.setEditable(true);
+                this.txtDescription.setEditable(true);
+                this.txtMinValue.setEditable(false);
+                this.txtMaxValue.setEditable(false);
+                this.pickerValuesFilter.setEditable(true);
+                this.availableValuesController.setEditable(true);
+                this.tagsController.setEnabled(true);
+                this.foreingKeyController.setEditable(true);
+                break;
+            case MODE_EDIT_ONLY_METADATA:
+                if( this.chkVirtualField.isSelected() ) {
+                    this.txtFieldName.setEditable(true);
+                    this.pickerScale.setEditable(true);
+                    this.pickerSize.setEditable(true);
+                    this.pickerVirtualField.setEditable(true);
+                    this.cboFieldType.setEnabled(true);
+                    this.cboGeometryType.setEnabled(true);
+                    this.cboGeometrySubtype.setEnabled(true);
+                    this.pickerCRS.setEditable(true);
+                } else {
+                    this.txtFieldName.setEditable(false);
+                    this.pickerPrecision.setEditable(false);
+                    this.pickerScale.setEditable(false);
+                    this.pickerSize.setEditable(false);
+                    this.pickerVirtualField.setEditable(false);
+                    this.cboFieldType.setEnabled(false);
+                    this.cboGeometryType.setEnabled(false);
+                    this.cboGeometrySubtype.setEnabled(false);
+                    this.pickerCRS.setEditable(false);
+                }
+
+                this.cboRelationType.setEnabled(true);
+                this.txtDefaultValue.setEditable(true);
+                this.txtDefaultFormat.setEditable(true);
+                this.pickerIntervalEnd.setEditable(true);
+                this.pickerIntervalStart.setEditable(true);
+
+                this.cboDataProfile.setEnabled(true);
+
+                this.pickerDisplaySize.setEditable(false);
+                this.chkAllowNulls.setEnabled(false);
+                this.chkIsAutomatic.setEnabled(false);
+                this.chkIsReadOnly.setEnabled(false);
+                this.chkIsIndexed.setEnabled(false);
+                if( this.isVirtualField() ) {
+                    this.chkIsPrimaryKey.setEnabled(false);
+                } else {
+                    this.chkIsPrimaryKey.setEnabled(true);
+                }
+
+                this.chkVirtualField.setEnabled(false);
+
+                this.cboDateFormat.setEnabled(true);
+
+                this.cboGroup.setEnabled(true);
+                this.pickerOrder.setEditable(true);
+                this.chkHidden.setEnabled(true);
+                this.txtLabel.setEditable(true);
+                this.txtDescription.setEditable(true);
+                this.txtMinValue.setEditable(false);
+                this.txtMaxValue.setEditable(false);
+                this.pickerValuesFilter.setEditable(true);
+                this.availableValuesController.setEditable(true);
+                this.tagsController.setEnabled(true);
+                this.foreingKeyController.setEditable(true);
+                break;
+            case MODE_SHOW_ONLY:
+                this.cboRelationType.setEnabled(false);
+                this.txtDefaultValue.setEditable(false);
+                this.txtDefaultFormat.setEditable(false);
+                this.txtFieldName.setEditable(false);
+                this.pickerIntervalEnd.setEditable(false);
+                this.pickerIntervalStart.setEditable(false);
+                this.pickerPrecision.setEditable(false);
+                this.pickerScale.setEditable(false);
+                this.pickerSize.setEditable(false);
+                this.pickerDisplaySize.setEditable(false);
+                this.cboDataProfile.setEnabled(false);
+
+                this.chkAllowNulls.setEnabled(false);
+                this.chkIsAutomatic.setEnabled(false);
+                this.chkIsReadOnly.setEnabled(false);
+                this.chkIsIndexed.setEnabled(false);
+                this.chkIsPrimaryKey.setEnabled(false);
+
+                this.chkVirtualField.setEnabled(false);
+                this.pickerVirtualField.setEditable(false);
+
+                this.cboDateFormat.setEnabled(false);
+                this.cboFieldType.setEnabled(false);
+                this.cboGeometryType.setEnabled(false);
+                this.cboGeometrySubtype.setEnabled(false);
+                this.pickerCRS.setEditable(false);
+
+                this.cboGroup.setEnabled(false);
+                this.pickerOrder.setEditable(false);
+                this.chkHidden.setEnabled(false);
+                this.txtLabel.setEditable(false);
+                this.txtDescription.setEditable(false);
+                this.txtMinValue.setEditable(false);
+                this.txtMaxValue.setEditable(false);
+                this.pickerValuesFilter.setEditable(false);
+                this.availableValuesController.setEditable(false);
+                this.tagsController.setEnabled(false);
+                this.foreingKeyController.setEditable(false);
+                break;
+        }
+    }
+
+    private void doCheckPrecisionAndScale() {
+      DataType dataType = this.getDataType();
+      
+      Integer precision = this.pickerPrecision.get();
+      if( precision==null ) {
+        precision = 0;
+      }
+      Integer scale = this.pickerScale.get();
+      if( scale == null ) {
+        scale = 0;
+      }      
+      NumberPrecisionAndScale r = dataType.fixPrecisionAndScale(precision, scale);
+      if( r.getPrecision()!=precision || r.getScale()!=scale ) {
+        this.pickerPrecision.setWarning(true, "The precision/scale are not valids");
+        this.pickerScale.setWarning(true, "The precision/scale are not valids");
+      } else {
+        this.pickerPrecision.setWarning(false);
+        this.pickerScale.setWarning(false);
+      }
+    }
+
+    @Override
+    public void setNameAsNew(FeatureType featureType) {
+        EditableFeatureType cloneFeatureType = featureType.getCopy().getEditable();
+        EditableFeatureAttributeDescriptor newAttributeDescriptor = cloneFeatureType.add(
+                cloneFeatureType.getNewFieldName(), 
+                DataTypes.STRING,
+                50);
+        this.put(newAttributeDescriptor);
+    }
+
+    @Override
+    public String getName() {
+        return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null);
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        String name = FilenameUtils.getBaseName(imageName);
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        if (theme.exists(name)) {
+            return theme.get(name);
+        }
+        URL url = this.getClass().getResource(name + ".png");
+        if (url == null) {
+            return null;
+        }
+        return new ImageIcon(url);
+    }
+
+  public static void selfRegister() {
+    String[][] iconNames = new String[][]{
+      new String[]{"dalswing", "picker-datatype"},};
+    IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+    for (String[] icon : iconNames) {
+      URL url = DefaultFeatureAttributeSelectionPanel.class.getResource(icon[1] + ".png");
+      theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+    }
+    
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanelView.java	(revision 46118)
@@ -0,0 +1,152 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureAttributeSelectionPanelView extends JPanel
+{
+   JTextField txtFilter = new JTextField();
+   JButton btnFilter = new JButton();
+   JTree treeFields = new JTree();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureAttributeSelectionPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtFilter.setName("txtFilter");
+      jpanel1.add(txtFilter,cc.xy(2,2));
+
+      btnFilter.setActionCommand("...");
+      btnFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-filter.png"));
+      btnFilter.setName("btnFilter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnFilter.setBorder(emptyborder1);
+      jpanel1.add(btnFilter,cc.xy(4,2));
+
+      treeFields.setName("treeFields");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(treeFields);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,4,3,1));
+
+      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);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributesSelectionPanelView.xml	(revision 46118)
@@ -0,0 +1,1381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/omartinez/devel/org.gvsig.desktop/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/featuretype/DefaultFeatureAttributesSelectionPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU: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">4</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstAvailableColumns</at>
+            <at name="width">584</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">481</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">6</at>
+           <at name="row">4</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstSelectedColumns</at>
+            <at name="width">215</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">481</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">6</at>
+           <at name="row">6</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">embedded.867929971</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">8</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-down.png</at>
+                   <at name="description">featuretype-column-down.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnDown</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">6</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png</at>
+                   <at name="description">featuretype-column-up.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnUp</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">4</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">embedded.2099906498</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-add-arrow.png</at>
+                   <at name="description">featuretype-column-add-arrow.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnAdd</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">1</at>
+                <at name="row">3</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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-remove-arrow.png</at>
+                   <at name="description">featuretype-column-remove-arrow.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnRemove</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.579122055</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtColumnsFilter</at>
+                 <at name="width">550</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/common-filter.png</at>
+                   <at name="description">common-filter.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnsFilter</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">6</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">embedded.659516054</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:390PX:GROW(1.0),FILL:4PX:NONE,FILL:DEFAULT:NONE,FILL:2DLU:NONE,FILL:DEFAULT:NONE,FILL:1DLU: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">7</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-down.png</at>
+                   <at name="description">featuretype-column-down.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnHistory</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png</at>
+                   <at name="description">featuretype-column-up.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnBookmarks</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/featuretype-column-up.png</at>
+                   <at name="description">featuretype-column-up.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnExpression</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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="name">txtExpression</at>
+                 <at name="width">499</at>
+                 <at name="height">20</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="7">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAttributeDescriptorPickerController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAttributeDescriptorPickerController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultAttributeDescriptorPickerController.java	(revision 46118)
@@ -0,0 +1,320 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.event.ListSelectionEvent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultAttributeDescriptorPickerController         
+        extends AbstractPickerController<FeatureAttributeDescriptor> 
+        implements AttributeDescriptorPickerController
+    {
+
+    private static class ComboOrList<T> implements Component {
+
+        private JComboBox combo;
+        private JList list;
+
+        public ComboOrList(JComboBox combo) {
+            this.combo = combo;
+            this.combo.setEditable(false);
+        }
+        
+        public ComboOrList(JList list) {
+            this.list = list;
+        }
+        
+        @Override
+        public JComponent asJComponent() {
+            if( this.combo == null ) {
+                return this.list;
+            }
+            return this.combo;
+        }
+
+        private void addSelectionListener(final ActionListener listener) {
+            if( this.combo == null ) {
+                this.list.addListSelectionListener((ListSelectionEvent e) -> {
+                    if( e.getValueIsAdjusting() ) {
+                        return;
+                    }
+                    listener.actionPerformed(new ActionEvent(list, 0, "selected"));
+                });
+            } else {
+                this.combo.addActionListener((ActionEvent e) -> {
+                    listener.actionPerformed(new ActionEvent(combo, 0, "selected"));
+                });
+                
+//                .addItemListener((ItemEvent e) -> {
+//                    if( e.getStateChange()==ItemEvent.SELECTED ) {
+//                        listener.actionPerformed(new ActionEvent(combo, 0, "selected"));
+//                    }
+//                });
+            }
+        }
+
+        public void clear() {
+            if( this.combo == null ) {
+                DefaultListModel model = new DefaultListModel();
+                this.list.setModel(model);
+            } else {
+                DefaultComboBoxModel model = new DefaultComboBoxModel();
+                this.combo.setModel(model);
+            }
+        }
+        
+        public void add(String label, T value) {
+            ListElement<T> element = new ListElement<>(label,value);
+            if( this.combo == null ) {
+                DefaultListModel model = (DefaultListModel) this.list.getModel();
+                model.addElement(element);
+            } else {
+                DefaultComboBoxModel model = (DefaultComboBoxModel) this.combo.getModel();
+                model.addElement(element);
+            }
+        }
+
+        public int getSize() {
+            if( this.combo == null ) {
+                return this.list.getModel().getSize();
+            } else {
+                return this.combo.getModel().getSize();
+            }
+        }
+
+        public void setSelectedIndex(int i) {
+            if( this.combo == null ) {
+                this.list.setSelectedIndex(i);
+            } else {
+                this.combo.setSelectedIndex(i);
+            }
+        }
+
+        public void setEnabled(boolean enabled) {
+            if( this.combo == null ) {
+                this.list.setEnabled(enabled);
+            } else {
+                this.combo.setEnabled(enabled);
+            }
+        }
+
+        public boolean isEnabled() {
+            if( this.combo == null ) {
+                return this.list.isEnabled();
+            } else {
+                return this.combo.isEnabled();
+            }
+        }
+        
+        public void setEditable(boolean editable){
+            if( this.combo != null ) {
+                ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+                if(editable){
+                    this.combo.setEditable(editable);
+                    toolsSwingManager.addClearButton(this.combo, (ActionEvent e) -> {
+                        this.combo.setSelectedIndex(-1);
+                    });
+                    toolsSwingManager.setDefaultPopupMenu(this.combo);
+                } else {
+                    toolsSwingManager.removeClearButton(this.combo);
+                    this.combo.setEditable(editable);
+                }
+            }
+        }
+        
+        public void setSelectedValue(T value) {
+            if( this.combo == null ) {
+                ListElement.setSelected(this.list, value);
+            } else {
+                ListElement.setSelected(this.combo, value);
+            }
+        }
+        
+        public T getSelectedValue() {
+            T value;
+            if( this.combo == null ) {
+                value = (T) ListElement.getSelected(this.list);
+            } else {
+                value = (T) ListElement.getSelected(this.combo);
+            }
+            return value;
+        }
+    }
+    
+    
+    private final ComboOrList<FeatureAttributeDescriptor> combo;
+    private FeatureType featureType;
+    private final Predicate<FeatureAttributeDescriptor> filter;
+    private boolean allowNull;
+
+    public DefaultAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter) {
+        this(new ComboOrList(combo), filter);
+        combo.setRenderer(new FeatureAttributeListCellRendererImpl());
+    }
+
+    public DefaultAttributeDescriptorPickerController(JList list, Predicate<FeatureAttributeDescriptor> filter) {
+        this(new ComboOrList(list), filter);
+        list.setCellRenderer(new FeatureAttributeListCellRendererImpl());
+    }
+    
+    private DefaultAttributeDescriptorPickerController(ComboOrList combo, Predicate<FeatureAttributeDescriptor> filter) {
+        this.combo = combo; 
+        this.filter = filter;
+        this.allowNull = false;
+        this.combo.addSelectionListener((ActionEvent e) -> {
+            fireChangeEvent();
+        });
+    }
+    
+    @Override
+    public void setFeatureType(FeatureType featureType) {
+        this.featureType = featureType;
+        this.combo.clear();
+        if( this.featureType==null ) {
+            return;
+        }
+        List<FeatureAttributeDescriptor> attributes = new ArrayList<>();
+        for (FeatureAttributeDescriptor descriptor : featureType) {
+            if( filter==null || filter.test(descriptor) ) {
+                attributes.add(descriptor);
+            }
+        }
+        int useLabels = DataManager.USE_LABELS_BOTH; //FIXME
+        attributes.sort((FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) -> {
+            String theLabel1;
+            String theLabel2;
+            switch(useLabels) {
+                case DataManager.USE_LABELS_NO:
+                    theLabel1 = o1.getName();
+                    theLabel2 = o2.getName();
+                    break;
+                case DataManager.USE_LABELS_YES:
+                    theLabel1 = (o1.hasLabel())? o1.getLocalizedLabel() : o1.getName();
+                    theLabel2 = (o2.hasLabel())? o2.getLocalizedLabel() : o2.getName();
+                    break;
+                case DataManager.USE_LABELS_BOTH:
+                default:
+                    theLabel1 = (o1.hasLabel())?String.format("%s [%s]", o1.getLocalizedLabel(), o1.getName()): o1.getName();
+                    theLabel2 = (o2.hasLabel())?String.format("%s [%s]", o2.getLocalizedLabel(), o2.getName()): o2.getName();
+                    break;
+            }
+            return theLabel1.compareToIgnoreCase(theLabel2);
+        });
+        if(this.allowNull) {
+            this.combo.add("", null);
+        }
+        for (FeatureAttributeDescriptor descriptor : attributes) {
+            String nameDescription = descriptor.getName();// + " [" + descriptor.getDataTypeName() + "]";
+            this.combo.add(nameDescription, descriptor);
+        }
+        if( this.combo.getSize()>0 ) {
+            this.combo.setSelectedIndex(0);
+        } else {
+            this.combo.setSelectedIndex(-1);
+        }
+    }
+    
+    @Override
+    public FeatureAttributeDescriptor get() {
+        FeatureAttributeDescriptor descriptor = this.combo.getSelectedValue();
+        return descriptor;
+    }
+
+    @Override
+    public void set(FeatureAttributeDescriptor descriptor) {
+        this.combo.setSelectedValue(descriptor);
+    }
+
+    @Override
+    public void set(String name) {
+        if( this.featureType==null ) {
+            this.combo.setSelectedIndex(-1);
+            return;
+        }
+        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(name);
+        if( descriptor == null ) {
+            // throw new IllegalArgumentException("The field '"+name+" don't exists.");
+            this.combo.setSelectedIndex(-1);
+            return;
+        }
+        this.set(descriptor);
+    }
+
+    @Override
+    public void coerceAndSet(Object descriptor) {
+        this.set((FeatureAttributeDescriptor) descriptor);
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        this.combo.setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.combo.isEnabled();
+    }
+
+    @Override
+    public String getName() {
+        Object selected = this.combo.getSelectedValue();
+        if( selected == null ) {
+            return null;
+        }
+        if(selected instanceof String){
+            String name = (String)selected;
+            if(StringUtils.isBlank(name)){
+                return null;
+            }
+            return name;
+        }
+
+        FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) selected;
+        return descriptor.getName();
+    }
+
+    @Override
+    public void clean() {
+        this.combo.setSelectedIndex(-1);
+    }
+
+    @Override
+    public void setEditable(boolean editable) {
+        super.setEditable(editable);
+        this.combo.setEditable(editable);
+    }
+    
+    @Override
+    public void setAllowNull(boolean allowNull) {
+        this.allowNull = allowNull;
+    }
+
+    @Override
+    public boolean getAllowNull() {
+        return this.allowNull;
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributeSelectionPanel.java	(revision 46118)
@@ -0,0 +1,145 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributeSelectionPanel;
+import java.awt.Dimension;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.net.URL;
+import java.util.function.Predicate;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.tree.TreePath;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.complements.Search;
+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.swing.impl.featuretype.FeatureAttributeTreeModel.Node;
+import org.gvsig.timesupport.DataTypes;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.swing.api.FilteredTreeController;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureAttributeSelectionPanel
+        extends DefaultFeatureAttributeSelectionPanelView
+        implements FeatureAttributeSelectionPanel {
+
+  private final FeatureStore store;
+    private FilteredTreeController controllerFilter;
+    private final FeatureType ftype;
+
+  public DefaultFeatureAttributeSelectionPanel(FeatureStore store, FeatureType ftype) {
+    this.store = store;
+    this.ftype = ftype;
+    this.initComponents();
+  }
+
+  private void initComponents() {
+    FeatureAttributeTreeModel treeModel = new FeatureAttributeTreeModel(
+            this.store,
+            this.ftype,
+            true,
+            Search.BASIC_TYPES_FILTER.or((FeatureAttributeDescriptor t) -> t.getType()==DataTypes.LIST)
+    );
+    this.treeFields.setCellRenderer(new FeatureAttributeTreeCellRenderer());
+    this.treeFields.setModel(treeModel);
+    try {
+      this.treeFields.setSelectionRow(1);
+    } catch (Throwable th) {
+    }
+
+    Dimension sz = this.getPreferredSize();
+    if (sz.width < DEFAULT_WIDTH) {
+      sz.width = DEFAULT_WIDTH;
+    }
+    if (sz.height < DEFAULT_HEIGHT) {
+      sz.height = DEFAULT_HEIGHT;
+    }
+    this.controllerFilter = ToolsSwingLocator
+              .getToolsSwingManager()
+              .createFilteredTreeController(treeFields, txtFilter, btnFilter);
+    
+    this.setPreferredSize(sz);
+    this.addComponentListener(new ComponentAdapter() {
+        @Override
+        public void componentHidden(ComponentEvent ce) {
+            super.componentHidden(ce);
+            if(treeFields instanceof Disposable) {
+                ((Disposable)treeFields).dispose();
+            }
+        }
+    });
+    
+  }
+
+  /**
+   * Return a TreePath<FeatureAttributeTreeModel.Node> for the selected
+   * attribute.
+   *
+   * @return
+   */
+  @Override
+  public FeatureAttributeDescriptor[] getSelectedPath() {
+    TreePath path = this.treeFields.getSelectionPath();
+    FeatureAttributeDescriptor[] attrs = new FeatureAttributeDescriptor[path.getPathCount()-1];
+    for (int i = 0; i < attrs.length; i++) {
+      Node node = (Node) path.getPathComponent(i+1); // Saltamos el 0 que es el store
+      attrs[i] = node.getValue();
+    }
+    return attrs;
+  }
+
+  @Override
+  public FeatureAttributeDescriptor getSelectedAttributeDescriptor() {
+    Node node = (Node) this.treeFields.getSelectionPath().getLastPathComponent();
+    FeatureAttributeDescriptor attrdesc = node.getValue();
+    return attrdesc;
+  }
+
+  @Override
+  public FeatureStore getSelectedStore() {
+    Node node = (Node) this.treeFields.getSelectionPath().getLastPathComponent();
+    FeatureStore theStore = node.getFeatureStore();
+    return theStore;
+  }
+
+  @Override
+  public String getSelectedName() {
+    return this.getSelectedAttributeDescriptor().getName();
+  }
+  
+  @Override
+  public JComponent asJComponent() {
+    return this;
+  }
+
+  @Override
+  public ImageIcon loadImage(String imageName) {
+    String name = FilenameUtils.getBaseName(imageName);
+    IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+    if (theme.exists(name)) {
+      return theme.get(name);
+    }
+    URL url = this.getClass().getResource(name + ".png");
+    if (url == null) {
+      return null;
+    }
+    return new ImageIcon(url);
+  }
+
+  public static void selfRegister() {
+//    String[][] iconNames = new String[][]{
+////      new String[]{"dalswing", "common-filter"},
+//    };
+//    IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+//    for (String[] icon : iconNames) {
+//      URL url = DefaultFeatureAttributeSelectionPanel.class.getResource(icon[1] + ".png");
+//      theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+//    }
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureTypePanelView.java	(revision 46118)
@@ -0,0 +1,712 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype;
+
+import com.jeta.forms.components.line.HorizontalLineComponent;
+import com.jeta.forms.components.separator.TitledSeparator;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureTypePanelView extends JPanel
+{
+   JTabbedPane tabFeatureType = new JTabbedPane();
+   JPanel gridAttributes = new JPanel();
+   HorizontalLineComponent horizontallinecomponent1 = new HorizontalLineComponent();
+   JPanel gridAttributesTable = new JPanel();
+   JTable tblFields = new JTable();
+   JButton btnNew = new JButton();
+   JButton btnDelete = new JButton();
+   JPanel gridAttributesDetail = new JPanel();
+   JPanel pnlField = new JPanel();
+   JButton btnFormFieldAccept = new JButton();
+   JButton btnFormFieldDiscard = new JButton();
+   JButton btnFormFieldModify = new JButton();
+   JLabel lblLabel = new JLabel();
+   JLabel lblDescription = new JLabel();
+   JTextField txtLabel = new JTextField();
+   JTextArea txtDescription = new JTextArea();
+   JLabel lblTags = new JLabel();
+   JPanel gridTags = new JPanel();
+   HorizontalLineComponent horizontallinecomponent2 = new HorizontalLineComponent();
+   JPanel gridTagsItems = new JPanel();
+   JTable tblTagsItems = new JTable();
+   JButton btnTagsNew = new JButton();
+   JButton btnTagsDelete = new JButton();
+   JPanel gridTagsItem = new JPanel();
+   JButton btnTagsAccept = new JButton();
+   JButton btnTagsDiscard = new JButton();
+   JButton btnTagsModify = new JButton();
+   JPanel grdTagsItemView = new JPanel();
+   JLabel lblTagsItemName = new JLabel();
+   JLabel lblTagsItemValue = new JLabel();
+   JComboBox cboTagsItemName = new JComboBox();
+   JComboBox cboTagsItemValue = new JComboBox();
+   JLabel lblTagsItemNotes = new JLabel();
+   JLabel lblTagsItemNotesValue = new JLabel();
+   JCheckBox chkRulesValidateFeatureBeforeInsert = new JCheckBox();
+   JCheckBox chkRulesValidateFeaturesAtFinishEditing = new JCheckBox();
+   TitledSeparator lblRulesDefaultRules = new TitledSeparator();
+   TitledSeparator lblRulesCustomRules = new TitledSeparator();
+   JPanel gridRules = new JPanel();
+   JPanel gridRulesTable = new JPanel();
+   JTable tblRules = new JTable();
+   JButton btnRulesNew = new JButton();
+   JButton btnRulesDelete = new JButton();
+   JPanel gridRulesDetail = new JPanel();
+   JLabel lblRuleName = new JLabel();
+   JLabel lblRuleDescription = new JLabel();
+   JLabel lblRuleCheckAtFinishEditing = new JLabel();
+   JLabel lblRuleCheckAtUpdate = new JLabel();
+   JLabel lblRuleValidation = new JLabel();
+   JTextField txtRuleName = new JTextField();
+   JCheckBox chkRuleCheckAtFinishEditing = new JCheckBox();
+   JCheckBox chkRuleCheckAtUpdate = new JCheckBox();
+   JTextField txtRuleDescription = new JTextField();
+   JButton btnRuleValidation = new JButton();
+   JButton btnRuleValidationHistory = new JButton();
+   JButton btnRuleValidationBookmarks = new JButton();
+   JTextArea txtRuleValidation = new JTextArea();
+   JButton btnRuleFormFieldAccept = new JButton();
+   JButton btnRuleFormFieldDiscard = new JButton();
+   JButton btnRuleFormFieldModify = new JButton();
+   JPanel pnlCfgActions = new JPanel();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureTypePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabFeatureType.setName("tabFeatureType");
+      tabFeatureType.addTab("_Columns",null,createPanel1());
+      tabFeatureType.addTab("_Visualization",null,createPanel4());
+      tabFeatureType.addTab("_Rules",null,createPanel7());
+      jpanel1.add(tabFeatureType,cc.xy(2,3));
+
+      jpanel1.add(createPanel13(),cc.xy(2,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      jpanel1.add(creategridAttributes(),cc.xy(2,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel creategridAttributes()
+   {
+      gridAttributes.setName("gridAttributes");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      gridAttributes.setLayout(formlayout1);
+
+      gridAttributes.add(horizontallinecomponent1,cc.xy(1,2));
+
+      gridAttributes.add(creategridAttributesTable(),cc.xy(1,1));
+      gridAttributes.add(creategridAttributesDetail(),cc.xy(1,3));
+      addFillComponents(gridAttributes,new int[]{ 1 },new int[]{ 1,3 });
+      return gridAttributes;
+   }
+
+   public JPanel creategridAttributesTable()
+   {
+      gridAttributesTable.setName("gridAttributesTable");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridAttributesTable.setLayout(formlayout1);
+
+      tblFields.setName("tblFields");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblFields);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      gridAttributesTable.add(jscrollpane1,cc.xy(1,1));
+
+      gridAttributesTable.add(createPanel2(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      addFillComponents(gridAttributesTable,new int[]{ 2,3 },new int[0]);
+      return gridAttributesTable;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnNew.setActionCommand("_New");
+      btnNew.setName("btnNew");
+      btnNew.setText("_New");
+      jpanel1.add(btnNew,cc.xy(2,1));
+
+      btnDelete.setActionCommand("_Delete");
+      btnDelete.setName("btnDelete");
+      btnDelete.setText("_Delete");
+      jpanel1.add(btnDelete,cc.xy(2,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategridAttributesDetail()
+   {
+      gridAttributesDetail.setName("gridAttributesDetail");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridAttributesDetail.setLayout(formlayout1);
+
+      pnlField.setName("pnlField");
+      gridAttributesDetail.add(pnlField,cc.xy(1,1));
+
+      gridAttributesDetail.add(createPanel3(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      addFillComponents(gridAttributesDetail,new int[]{ 2,3 },new int[0]);
+      return gridAttributesDetail;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnFormFieldAccept.setActionCommand("JButton");
+      btnFormFieldAccept.setName("btnFormFieldAccept");
+      btnFormFieldAccept.setText("Accept");
+      jpanel1.add(btnFormFieldAccept,cc.xy(2,3));
+
+      btnFormFieldDiscard.setActionCommand("JButton");
+      btnFormFieldDiscard.setName("btnFormFieldDiscard");
+      btnFormFieldDiscard.setText("_Discard");
+      jpanel1.add(btnFormFieldDiscard,cc.xy(2,5));
+
+      btnFormFieldModify.setActionCommand("JButton");
+      btnFormFieldModify.setName("btnFormFieldModify");
+      btnFormFieldModify.setText("_Modify");
+      jpanel1.add(btnFormFieldModify,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(0.1),CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.8),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblLabel.setName("lblLabel");
+      lblLabel.setText("_Label");
+      jpanel1.add(lblLabel,cc.xy(2,2));
+
+      lblDescription.setName("lblDescription");
+      lblDescription.setText("_Description");
+      lblDescription.setVerticalAlignment(JLabel.TOP);
+      jpanel1.add(lblDescription,new CellConstraints(2,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtLabel.setName("txtLabel");
+      jpanel1.add(txtLabel,cc.xy(4,2));
+
+      txtDescription.setName("txtDescription");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtDescription);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,new CellConstraints(4,4,1,1,CellConstraints.DEFAULT,CellConstraints.FILL));
+
+      lblTags.setName("lblTags");
+      lblTags.setText("_Tags");
+      lblTags.setVerticalAlignment(JLabel.TOP);
+      jpanel1.add(lblTags,cc.xy(2,6));
+
+      jpanel1.add(creategridTags(),cc.xy(4,6));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel creategridTags()
+   {
+      gridTags.setName("gridTags");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      gridTags.setLayout(formlayout1);
+
+      gridTags.add(horizontallinecomponent2,cc.xy(1,2));
+
+      gridTags.add(creategridTagsItems(),cc.xy(1,1));
+      gridTags.add(creategridTagsItem(),cc.xy(1,3));
+      addFillComponents(gridTags,new int[]{ 1 },new int[]{ 1,3 });
+      return gridTags;
+   }
+
+   public JPanel creategridTagsItems()
+   {
+      gridTagsItems.setName("gridTagsItems");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridTagsItems.setLayout(formlayout1);
+
+      tblTagsItems.setName("tblTagsItems");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblTagsItems);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      gridTagsItems.add(jscrollpane1,cc.xy(1,1));
+
+      gridTagsItems.add(createPanel5(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      addFillComponents(gridTagsItems,new int[]{ 2,3 },new int[0]);
+      return gridTagsItems;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnTagsNew.setActionCommand("_New");
+      btnTagsNew.setName("btnTagsNew");
+      btnTagsNew.setText("_New");
+      jpanel1.add(btnTagsNew,cc.xy(2,1));
+
+      btnTagsDelete.setActionCommand("_Delete");
+      btnTagsDelete.setName("btnTagsDelete");
+      btnTagsDelete.setText("_Delete");
+      jpanel1.add(btnTagsDelete,cc.xy(2,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategridTagsItem()
+   {
+      gridTagsItem.setName("gridTagsItem");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridTagsItem.setLayout(formlayout1);
+
+      gridTagsItem.add(createPanel6(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      gridTagsItem.add(creategrdTagsItemView(),cc.xy(1,1));
+      addFillComponents(gridTagsItem,new int[]{ 1,2,3 },new int[]{ 1 });
+      return gridTagsItem;
+   }
+
+   public JPanel createPanel6()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnTagsAccept.setActionCommand("JButton");
+      btnTagsAccept.setName("btnTagsAccept");
+      btnTagsAccept.setText("Accept");
+      jpanel1.add(btnTagsAccept,cc.xy(2,3));
+
+      btnTagsDiscard.setActionCommand("JButton");
+      btnTagsDiscard.setName("btnTagsDiscard");
+      btnTagsDiscard.setText("_Discard");
+      jpanel1.add(btnTagsDiscard,cc.xy(2,5));
+
+      btnTagsModify.setActionCommand("JButton");
+      btnTagsModify.setName("btnTagsModify");
+      btnTagsModify.setText("_Modify");
+      jpanel1.add(btnTagsModify,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategrdTagsItemView()
+   {
+      grdTagsItemView.setName("grdTagsItemView");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      grdTagsItemView.setLayout(formlayout1);
+
+      lblTagsItemName.setName("lblTagsItemName");
+      lblTagsItemName.setText("_Name");
+      grdTagsItemView.add(lblTagsItemName,cc.xy(1,1));
+
+      lblTagsItemValue.setName("lblTagsItemValue");
+      lblTagsItemValue.setText("_Value");
+      grdTagsItemView.add(lblTagsItemValue,cc.xy(1,3));
+
+      cboTagsItemName.setName("cboTagsItemName");
+      grdTagsItemView.add(cboTagsItemName,cc.xy(3,1));
+
+      cboTagsItemValue.setEditable(true);
+      cboTagsItemValue.setName("cboTagsItemValue");
+      cboTagsItemValue.setRequestFocusEnabled(false);
+      grdTagsItemView.add(cboTagsItemValue,cc.xy(3,3));
+
+      lblTagsItemNotes.setName("lblTagsItemNotes");
+      lblTagsItemNotes.setText("_Notes");
+      grdTagsItemView.add(lblTagsItemNotes,new CellConstraints(1,5,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      lblTagsItemNotesValue.setName("lblTagsItemNotesValue");
+      grdTagsItemView.add(lblTagsItemNotesValue,cc.xy(3,5));
+
+      addFillComponents(grdTagsItemView,new int[]{ 2 },new int[]{ 2,4 });
+      return grdTagsItemView;
+   }
+
+   public JPanel createPanel7()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkRulesValidateFeatureBeforeInsert.setActionCommand("_Validate_features_before_insert");
+      chkRulesValidateFeatureBeforeInsert.setName("chkRulesValidateFeatureBeforeInsert");
+      chkRulesValidateFeatureBeforeInsert.setText("_Validate_features_before_insert");
+      jpanel1.add(chkRulesValidateFeatureBeforeInsert,cc.xy(2,4));
+
+      chkRulesValidateFeaturesAtFinishEditing.setActionCommand("_Validate_features_at_finish_editing");
+      chkRulesValidateFeaturesAtFinishEditing.setName("chkRulesValidateFeaturesAtFinishEditing");
+      chkRulesValidateFeaturesAtFinishEditing.setText("_Validate_features_at_finish_editing");
+      jpanel1.add(chkRulesValidateFeaturesAtFinishEditing,cc.xy(2,6));
+
+      lblRulesDefaultRules.setName("lblRulesDefaultRules");
+      lblRulesDefaultRules.setText("_Default_rules");
+      jpanel1.add(lblRulesDefaultRules,cc.xywh(2,2,3,1));
+
+      lblRulesCustomRules.setName("lblRulesCustomRules");
+      lblRulesCustomRules.setText("_Custom_rules");
+      jpanel1.add(lblRulesCustomRules,cc.xywh(2,7,3,1));
+
+      jpanel1.add(creategridRules(),cc.xywh(2,9,3,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10 });
+      return jpanel1;
+   }
+
+   public JPanel creategridRules()
+   {
+      gridRules.setName("gridRules");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridRules.setLayout(formlayout1);
+
+      gridRules.add(creategridRulesTable(),cc.xy(1,1));
+      gridRules.add(creategridRulesDetail(),cc.xy(1,2));
+      addFillComponents(gridRules,new int[]{ 1 },new int[]{ 1,2 });
+      return gridRules;
+   }
+
+   public JPanel creategridRulesTable()
+   {
+      gridRulesTable.setName("gridRulesTable");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridRulesTable.setLayout(formlayout1);
+
+      tblRules.setEnabled(false);
+      tblRules.setName("tblRules");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblRules);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      gridRulesTable.add(jscrollpane1,cc.xy(1,1));
+
+      gridRulesTable.add(createPanel8(),cc.xy(3,1));
+      addFillComponents(gridRulesTable,new int[]{ 2,3 },new int[0]);
+      return gridRulesTable;
+   }
+
+   public JPanel createPanel8()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnRulesNew.setActionCommand("_New");
+      btnRulesNew.setName("btnRulesNew");
+      btnRulesNew.setText("_New");
+      jpanel1.add(btnRulesNew,cc.xy(2,1));
+
+      btnRulesDelete.setActionCommand("_Delete");
+      btnRulesDelete.setName("btnRulesDelete");
+      btnRulesDelete.setText("_Delete");
+      jpanel1.add(btnRulesDelete,cc.xy(2,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel creategridRulesDetail()
+   {
+      gridRulesDetail.setName("gridRulesDetail");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      gridRulesDetail.setLayout(formlayout1);
+
+      gridRulesDetail.add(createPanel9(),cc.xy(1,1));
+      gridRulesDetail.add(createPanel12(),cc.xy(3,1));
+      addFillComponents(gridRulesDetail,new int[]{ 1,2,3 },new int[]{ 1 });
+      return gridRulesDetail;
+   }
+
+   public JPanel createPanel9()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblRuleName.setName("lblRuleName");
+      lblRuleName.setText("_Name");
+      jpanel1.add(lblRuleName,cc.xy(1,1));
+
+      lblRuleDescription.setName("lblRuleDescription");
+      lblRuleDescription.setText("_Description");
+      jpanel1.add(lblRuleDescription,cc.xy(1,3));
+
+      lblRuleCheckAtFinishEditing.setName("lblRuleCheckAtFinishEditing");
+      lblRuleCheckAtFinishEditing.setText("_Check_at_finish_editing");
+      jpanel1.add(lblRuleCheckAtFinishEditing,cc.xy(1,5));
+
+      lblRuleCheckAtUpdate.setName("lblRuleCheckAtUpdate");
+      lblRuleCheckAtUpdate.setText("_Check_at_insert");
+      jpanel1.add(lblRuleCheckAtUpdate,cc.xy(1,7));
+
+      lblRuleValidation.setName("lblRuleValidation");
+      lblRuleValidation.setText("_Validation");
+      jpanel1.add(lblRuleValidation,new CellConstraints(1,9,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtRuleName.setName("txtRuleName");
+      jpanel1.add(txtRuleName,cc.xy(3,1));
+
+      chkRuleCheckAtFinishEditing.setName("chkRuleCheckAtFinishEditing");
+      jpanel1.add(chkRuleCheckAtFinishEditing,cc.xy(3,5));
+
+      chkRuleCheckAtUpdate.setName("chkRuleCheckAtUpdate");
+      jpanel1.add(chkRuleCheckAtUpdate,cc.xy(3,7));
+
+      txtRuleDescription.setName("txtRuleDescription");
+      jpanel1.add(txtRuleDescription,cc.xy(3,3));
+
+      jpanel1.add(createPanel10(),cc.xy(3,9));
+      addFillComponents(jpanel1,new int[]{ 2,4 },new int[]{ 2,4,6,8 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel10()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      jpanel1.add(createPanel11(),new CellConstraints(3,1,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      txtRuleValidation.setName("txtRuleValidation");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtRuleValidation);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,3 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel11()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnRuleValidation.setActionCommand("...");
+      btnRuleValidation.setName("btnRuleValidation");
+      btnRuleValidation.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnRuleValidation.setBorder(emptyborder1);
+      jpanel1.add(btnRuleValidation,cc.xy(1,1));
+
+      btnRuleValidationHistory.setActionCommand("...");
+      btnRuleValidationHistory.setName("btnRuleValidationHistory");
+      btnRuleValidationHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnRuleValidationHistory.setBorder(emptyborder2);
+      jpanel1.add(btnRuleValidationHistory,cc.xy(1,3));
+
+      btnRuleValidationBookmarks.setActionCommand("...");
+      btnRuleValidationBookmarks.setName("btnRuleValidationBookmarks");
+      btnRuleValidationBookmarks.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnRuleValidationBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnRuleValidationBookmarks,cc.xy(1,5));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel12()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:2DLU:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnRuleFormFieldAccept.setActionCommand("JButton");
+      btnRuleFormFieldAccept.setName("btnRuleFormFieldAccept");
+      btnRuleFormFieldAccept.setText("Accept");
+      jpanel1.add(btnRuleFormFieldAccept,cc.xy(2,3));
+
+      btnRuleFormFieldDiscard.setActionCommand("JButton");
+      btnRuleFormFieldDiscard.setName("btnRuleFormFieldDiscard");
+      btnRuleFormFieldDiscard.setText("_Discard");
+      jpanel1.add(btnRuleFormFieldDiscard,cc.xy(2,5));
+
+      btnRuleFormFieldModify.setActionCommand("JButton");
+      btnRuleFormFieldModify.setName("btnRuleFormFieldModify");
+      btnRuleFormFieldModify.setText("_Modify");
+      jpanel1.add(btnRuleFormFieldModify,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5,6 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel13()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      pnlCfgActions.setName("pnlCfgActions");
+      pnlCfgActions.setOpaque(false);
+      jpanel1.add(pnlCfgActions,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/DefaultFeatureAttributePanelView.xml	(revision 46118)
@@ -0,0 +1,8856 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/osc/devel/org.gvsig.desktop/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/featuretype/DefaultFeatureAttributePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblFieldName</at>
+            <at name="width">64</at>
+            <at name="text">_Field_name</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">4</at>
+           <at name="row">2</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.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="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="name">txtFieldName</at>
+            <at name="width">721</at>
+            <at name="height">22</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">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">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="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="name">lblFieldType</at>
+            <at name="width">64</at>
+            <at name="text">_Field_type</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">8</at>
+           <at name="colspan">3</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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">9</at>
+            <at name="tabLayoutPolicy">1</at>
+            <at name="name">tabAditionalFields</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Basic_fields</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.515586265</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3PX:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</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">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="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="name">lblSize</at>
+                              <at name="width">118</at>
+                              <at name="text">_Size</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">4</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.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="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="name">txtSize</at>
+                              <at name="width">624</at>
+                              <at name="height">22</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">6</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">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="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="name">lblPrecision</at>
+                              <at name="width">118</at>
+                              <at name="text">_Total_digits_precision</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="toolTipText">_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part</at>
+                              <at name="height">16</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">10</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">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="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="name">lblDefaultValue</at>
+                              <at name="width">118</at>
+                              <at name="text">_Default_value</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">6</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.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="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="name">txtPrecision</at>
+                              <at name="width">624</at>
+                              <at name="toolTipText">_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part</at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">10</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.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="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="name">txtDefaultValue</at>
+                              <at name="width">624</at>
+                              <at name="height">22</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">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">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="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="name">lblDataProfile</at>
+                              <at name="width">118</at>
+                              <at name="text">_Data_profile</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">14</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.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="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="name">cboDataProfile</at>
+                              <at name="width">624</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">16</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.JCheckBox</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JCheckBox</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="actionCommand">Campo virtual</at>
+                              <at name="name">chkVirtualField</at>
+                              <at name="width">118</at>
+                              <at name="text">_Virtual_field</at>
+                              <at name="height">18</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">8</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">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="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="name">lblScale</at>
+                              <at name="width">118</at>
+                              <at name="text">_Decimal_digits_escale</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="toolTipText">_Number_of_decimal_digits_used_to_represent_the_number</at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">8</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.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="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="name">txtScale</at>
+                              <at name="width">624</at>
+                              <at name="toolTipText">_Number_of_decimal_digits_used_to_represent_the_number</at>
+                              <at name="height">22</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">18</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">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="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="name">lblRelationType</at>
+                              <at name="width">118</at>
+                              <at name="text">_Relation_type</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">18</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.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="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="name">cboRelationType</at>
+                              <at name="width">624</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">2</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">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="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="name">lblDisplaySize</at>
+                              <at name="width">118</at>
+                              <at name="text">_Characters_in_display</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="toolTipText">_Number_of_characters_required_to_display_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated</at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">2</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.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="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="name">txtDisplaySize</at>
+                              <at name="width">624</at>
+                              <at name="toolTipText">_Number_of_bytes_required_to_store_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated_This_value_is_dependent_on_the_type_of_layer</at>
+                              <at name="height">22</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">4</at>
+                             <at name="row">16</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">embedded.289344933</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">7</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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnVirtualFieldBookmarks</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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">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.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="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="name">txtVirtualField</at>
+                                   <at name="width">550</at>
+                                   <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnVirtualFieldHistory</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnVirtualField</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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="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>
+                              <at name="name"/>
+                              <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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="1">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="7"/>
+                              </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>
+                       </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">12</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">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="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="name">lblDefaultFormat</at>
+                              <at name="width">118</at>
+                              <at name="text">_Default_format</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">12</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.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="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="name">txtDefaultFormat</at>
+                              <at name="width">624</at>
+                              <at name="height">22</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="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>
+                         <at name="name"/>
+                         <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>
+                        </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="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="8">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="9">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="10">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="11">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="12">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="13">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="14">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="15">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="16">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="17">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Geometry</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.2087111213</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblGeometryType</at>
+                              <at name="width">104</at>
+                              <at name="text">_Geometry_type</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">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">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="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="name">lblGeometrySubtype</at>
+                              <at name="width">104</at>
+                              <at name="text">_Geometry_subtype</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">6</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">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="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="name">lblCRS</at>
+                              <at name="width">104</at>
+                              <at name="text">_CRS</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">2</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.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="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="name">cboGeometryType</at>
+                              <at name="width">638</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">4</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.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="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="name">cboGeometrySubtype</at>
+                              <at name="width">638</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">4</at>
+                             <at name="row">6</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">embedded.633765272</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnCRS</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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">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.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="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="name">txtCRS</at>
+                                   <at name="width">610</at>
+                                   <at name="height">22</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="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>
+                              <at name="name"/>
+                              <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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="1">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="3"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="7">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Time</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.699086303</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblDateFormat</at>
+                              <at name="width">70</at>
+                              <at name="text">_Date_format</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">2</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.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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboDateFormat</at>
+                              <at name="width">672</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">5</at>
+                             <at name="colspan">1</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">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="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="name">lblInterval</at>
+                              <at name="width">70</at>
+                              <at name="text">_Interval</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">4</at>
+                             <at name="row">5</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">embedded.1842639798</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">lblIntervalStart</at>
+                                   <at name="width">30</at>
+                                   <at name="text">_Start</at>
+                                   <at name="fill">
+                                    <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                     <at name="name">fill</at>
+                                    </object>
+                                   </at>
+                                   <at name="height">16</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">1</at>
+                                  <at name="row">3</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">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="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="name">lblIntervalEnd</at>
+                                   <at name="width">30</at>
+                                   <at name="text">_End</at>
+                                   <at name="fill">
+                                    <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                     <at name="name">fill</at>
+                                    </object>
+                                   </at>
+                                   <at name="height">16</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">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.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="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="name">txtIntervalStart</at>
+                                   <at name="width">604</at>
+                                   <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnIntervalStart</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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">3</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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnIntervalEnd</at>
+                                   <at name="width">13</at>
+                                   <at name="text">...</at>
+                                   <at name="height">20</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">3</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.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="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="name">txtIntervalEnd</at>
+                                   <at name="width">604</at>
+                                   <at name="height">22</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="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>
+                              <at name="name"/>
+                              <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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="3">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="5"/>
+                              </at>
+                              <at name="item" index="1">
+                               <object classname="[Ljava.lang.Object;" size="5"/>
+                              </at>
+                              <at name="item" index="2">
+                               <object classname="[Ljava.lang.Object;" size="5"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="6">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Tags</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.359665576</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE</at>
+                     <at name="components">
+                      <object classname="java.util.LinkedList">
+                       <item >
+                        <at name="value">
+                         <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">2</at>
+                             <at name="row">2</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">embedded.2009726308</at>
+                          <at name="rowspecs">FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                                  <at name="row">2</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">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                               <at name="beanproperties">
+                                <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                 <at name="classname">com.jeta.forms.components.line.HorizontalLineComponent</at>
+                                 <at name="properties">
+                                  <object classname="com.jeta.forms.store.support.PropertyMap">
+                                   <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="name"/>
+                                   <at name="lineDefinition">
+                                    <object classname="com.jeta.forms.store.properties.CompoundLineProperty">
+                                     <at name="name">lineDefinition</at>
+                                     <at name="lines">
+                                      <object classname="java.util.LinkedList">
+                                       <item >
+                                        <at name="value">
+                                         <object classname="com.jeta.forms.store.properties.LineProperty">
+                                          <at name="name">lineStyle</at>
+                                          <at name="color">
+                                           <object classname="com.jeta.forms.store.properties.ColorProperty">
+                                            <at name="name">dyncolor</at>
+                                            <at name="colorkey">constant</at>
+                                            <at name="constantcolor" object="color">0,0,0</at>
+                                           </object>
+                                          </at>
+                                          <at name="thickness">1</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                     <at name="position">0</at>
+                                    </object>
+                                   </at>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                              </object>
+                             </at>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">embedded.1472128887</at>
+                               <at name="rowspecs">FILL:DEFAULT:NONE</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+                                    </super>
+                                    <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                                    <at name="beanclass">javax.swing.JTable</at>
+                                    <at name="beanproperties">
+                                     <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                      <at name="classname">javax.swing.JTable</at>
+                                      <at name="properties">
+                                       <object classname="com.jeta.forms.store.support.PropertyMap">
+                                        <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="name">tblAttrTagsItems</at>
+                                        <at name="width">643</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="height">32</at>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                   </object>
+                                  </at>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.2024444511</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="actionCommand">_New</at>
+                                             <at name="name">btnAttrTagsNew</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_New</at>
+                                             <at name="height">24</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">3</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="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="actionCommand">_Delete</at>
+                                             <at name="name">btnAttrTagsDelete</at>
+                                             <at name="width">70</at>
+                                             <at name="text">_Delete</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">grdAttrTagsItems</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </item>
+                            <item >
+                             <at name="value">
+                              <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">3</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">embedded.1412680214</at>
+                               <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                               <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE</at>
+                               <at name="components">
+                                <object classname="java.util.LinkedList">
+                                 <item >
+                                  <at name="value">
+                                   <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">3</at>
+                                       <at name="row">1</at>
+                                       <at name="colspan">1</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.FormComponent</at>
+                                    </super>
+                                    <at name="id">embedded.55160164</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                                    <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnAttrTagsAccept</at>
+                                             <at name="width">76</at>
+                                             <at name="text">Accept</at>
+                                             <at name="height">24</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">5</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="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="actionCommand">JButton</at>
+                                             <at name="name">btnAttrTagsDiscard</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Discard</at>
+                                             <at name="height">24</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">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.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="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="actionCommand">JButton</at>
+                                             <at name="name">btnAttrTagsModify</at>
+                                             <at name="width">76</at>
+                                             <at name="text">_Modify</at>
+                                             <at name="height">24</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="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>
+                                        <at name="name"/>
+                                        <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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </item>
+                                 <item >
+                                  <at name="value">
+                                   <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">embedded.268425518</at>
+                                    <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                                    <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="name">lblAttrTagsItemName</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Name</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">1</at>
+                                            <at name="row">3</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">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="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="name">lblAttrTagsItemValue</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Value</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">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.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="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="name">cboAttrTagsItemName</at>
+                                             <at name="width">579</at>
+                                             <at name="items">
+                                              <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                               <at name="name">items</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">22</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">3</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.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="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="componentCount">3</at>
+                                             <at name="editable">true</at>
+                                             <at name="requestFocusEnabled">false</at>
+                                             <at name="name">cboAttrTagsItemValue</at>
+                                             <at name="width">579</at>
+                                             <at name="items">
+                                              <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                               <at name="name">items</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">22</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">1</at>
+                                            <at name="row">5</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">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="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="name">lblAttrTagsItemNotes</at>
+                                             <at name="width">35</at>
+                                             <at name="text">_Notes</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">16</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">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">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="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="name">lblAttrTagsItemNotesValue</at>
+                                             <at name="width">579</at>
+                                             <at name="fill">
+                                              <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                               <at name="name">fill</at>
+                                              </object>
+                                             </at>
+                                             <at name="height">12</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="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>
+                                        <at name="name">grdAttrTagsItemView</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>
+                                       </object>
+                                      </at>
+                                     </object>
+                                    </at>
+                                    <at name="cellpainters">
+                                     <object classname="com.jeta.forms.store.support.Matrix">
+                                      <at name="rows">
+                                       <object classname="[Ljava.lang.Object;" size="5">
+                                        <at name="item" index="0">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="1">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="2">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="3">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </at>
+                                        <at name="item" index="4">
+                                         <object classname="[Ljava.lang.Object;" size="3"/>
+                                        </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>
+                                 </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="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>
+                                   <at name="name">gridAttrTagsItem</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>
+                                  </object>
+                                 </at>
+                                </object>
+                               </at>
+                               <at name="cellpainters">
+                                <object classname="com.jeta.forms.store.support.Matrix">
+                                 <at name="rows">
+                                  <object classname="[Ljava.lang.Object;" size="1">
+                                   <at name="item" index="0">
+                                    <object classname="[Ljava.lang.Object;" size="3"/>
+                                   </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>
+                            </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="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>
+                              <at name="name">grdAttrTags</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>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                          <at name="cellpainters">
+                           <object classname="com.jeta.forms.store.support.Matrix">
+                            <at name="rows">
+                             <object classname="[Ljava.lang.Object;" size="3">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="1">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </at>
+                              <at name="item" index="2">
+                               <object classname="[Ljava.lang.Object;" size="1"/>
+                              </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>
+                       </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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="4">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_ForeingKey</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.1624566938</at>
+                     <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">3</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.JCheckBox</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JCheckBox</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="actionCommand">_is_foreing_key</at>
+                              <at name="name">chkIsForeingKey</at>
+                              <at name="width">683</at>
+                              <at name="text">_is_foreing_key</at>
+                              <at name="height">18</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">6</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">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="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="name">lblForeingKeyTableName</at>
+                              <at name="width">80</at>
+                              <at name="text">_Table</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">8</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">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="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="name">lblForeingKeyCodeName</at>
+                              <at name="width">80</at>
+                              <at name="text">_Code</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">10</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">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="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="name">lblForeingKeyLabelFormula</at>
+                              <at name="width">80</at>
+                              <at name="text">_Label_formula</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">6</at>
+                             <at name="colspan">7</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboForeingKeyTableName</at>
+                              <at name="width">662</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">8</at>
+                             <at name="colspan">7</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="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="componentCount">3</at>
+                              <at name="editable">true</at>
+                              <at name="requestFocusEnabled">false</at>
+                              <at name="name">cboForeingKeyCodeName</at>
+                              <at name="width">662</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">22</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">4</at>
+                             <at name="row">10</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.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="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="name">txtForeingKeyFormula</at>
+                              <at name="width">593</at>
+                              <at name="height">22</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">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">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="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="name">lblIsClosedList</at>
+                              <at name="width">80</at>
+                              <at name="text">_is_closed_list</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">16</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">4</at>
+                             <at name="row">4</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.JCheckBox</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JCheckBox</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="name">chkIsClosedList</at>
+                              <at name="width">593</at>
+                              <at name="height">15</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">6</at>
+                             <at name="row">10</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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnForeingKeyFormula</at>
+                              <at name="width">13</at>
+                              <at name="text">...</at>
+                              <at name="height">20</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">8</at>
+                             <at name="row">10</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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnForeingKeyFormulaHistory</at>
+                              <at name="width">13</at>
+                              <at name="text">...</at>
+                              <at name="height">20</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">10</at>
+                             <at name="row">10</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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="name">btnForeingKeyFormulaBookmarks</at>
+                              <at name="width">13</at>
+                              <at name="text">...</at>
+                              <at name="height">20</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="11">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="8">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="9">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </at>
+                         <at name="item" index="10">
+                          <object classname="[Ljava.lang.Object;" size="11"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Visualization</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.479856930</at>
+                     <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+                     <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">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.FormContainerComponent</at>
+                          </super>
+                          <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+                          <at name="beanclass">javax.swing.JTabbedPane</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTabbedPane</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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="componentCount">2</at>
+                              <at name="tabPlacement">2</at>
+                              <at name="name">tabLayout</at>
+                              <at name="tabs">
+                               <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+                                <at name="name">tabs</at>
+                                <at name="items">
+                                 <object classname="java.util.LinkedList">
+                                  <item >
+                                   <at name="value">
+                                    <object classname="com.jeta.forms.store.properties.TabProperty">
+                                     <at name="name">tab</at>
+                                     <at name="title">_Basic</at>
+                                     <at name="icon">
+                                      <object classname="com.jeta.forms.store.properties.IconProperty">
+                                       <at name="embedded">false</at>
+                                       <at name="width">0</at>
+                                       <at name="height">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">embedded.2041260040</at>
+                                       <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0)</at>
+                                       <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblGroup</at>
+                                                <at name="width">65</at>
+                                                <at name="text">_Group</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">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">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="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="name">lblOrder</at>
+                                                <at name="width">65</at>
+                                                <at name="text">_Order</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">2</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.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="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="componentCount">3</at>
+                                                <at name="editable">true</at>
+                                                <at name="requestFocusEnabled">false</at>
+                                                <at name="name">cboGroup</at>
+                                                <at name="width">589</at>
+                                                <at name="items">
+                                                 <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                                  <at name="name">items</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">22</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">4</at>
+                                               <at name="row">4</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.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="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="name">txtOrder</at>
+                                                <at name="width">589</at>
+                                                <at name="height">22</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">6</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">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="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="name">lblHidden</at>
+                                                <at name="width">65</at>
+                                                <at name="text">_Hidden</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">6</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.JCheckBox</at>
+                                            <at name="beanproperties">
+                                             <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                              <at name="classname">javax.swing.JCheckBox</at>
+                                              <at name="properties">
+                                               <object classname="com.jeta.forms.store.support.PropertyMap">
+                                                <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="name">chkHidden</at>
+                                                <at name="width">589</at>
+                                                <at name="height">15</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">8</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">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="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="name">lblLabel</at>
+                                                <at name="width">65</at>
+                                                <at name="text">_Label</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">8</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.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="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="name">txtLabel</at>
+                                                <at name="width">589</at>
+                                                <at name="height">22</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">10</at>
+                                               <at name="colspan">1</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">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="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="name">lblDescription</at>
+                                                <at name="width">65</at>
+                                                <at name="text">_Description</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="verticalAlignment">1</at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">10</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.JTextArea</at>
+                                            <at name="beanproperties">
+                                             <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                                              <at name="classname">javax.swing.JTextArea</at>
+                                              <at name="properties">
+                                               <object classname="com.jeta.forms.store.support.PropertyMap">
+                                                <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>
+                                                <at name="scrollableTracksViewportWidth">true</at>
+                                                <at name="name">txtDescription</at>
+                                                <at name="width">587</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="height">150</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="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>
+                                           <at name="name"/>
+                                           <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>
+                                          </object>
+                                         </at>
+                                        </object>
+                                       </at>
+                                       <at name="cellpainters">
+                                        <object classname="com.jeta.forms.store.support.Matrix">
+                                         <at name="rows">
+                                          <object classname="[Ljava.lang.Object;" size="10">
+                                           <at name="item" index="0">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="1">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="2">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="3">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="4">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="5">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="6">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="7">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="8">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </at>
+                                           <at name="item" index="9">
+                                            <object classname="[Ljava.lang.Object;" size="5"/>
+                                           </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>
+                                   </at>
+                                  </item>
+                                  <item >
+                                   <at name="value">
+                                    <object classname="com.jeta.forms.store.properties.TabProperty">
+                                     <at name="name">tab</at>
+                                     <at name="title">_Values</at>
+                                     <at name="icon">
+                                      <object classname="com.jeta.forms.store.properties.IconProperty">
+                                       <at name="embedded">false</at>
+                                       <at name="width">0</at>
+                                       <at name="height">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">embedded.2143526766</at>
+                                       <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+                                       <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">6</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">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="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="name">lblAvailableValues</at>
+                                                <at name="width">664</at>
+                                                <at name="text">_List_of_values</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">8</at>
+                                               <at name="colspan">3</at>
+                                               <at name="rowspan">1</at>
+                                               <at name="halign">default</at>
+                                               <at name="valign">fill</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="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>
+                                                <at name="scrollableTracksViewportWidth">true</at>
+                                                <at name="name">lstAvailableValues</at>
+                                                <at name="width">541</at>
+                                                <at name="items">
+                                                 <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                                  <at name="name">items</at>
+                                                 </object>
+                                                </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="height">78</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">10</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">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="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="name">lblAvailableValuesLabel</at>
+                                                <at name="width">34</at>
+                                                <at name="text">_Label</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">10</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.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="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="name">txtAvailableValuesLabel</at>
+                                                <at name="width">499</at>
+                                                <at name="height">22</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">12</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">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="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="name">lblAvailableValuesValue</at>
+                                                <at name="width">34</at>
+                                                <at name="text">_Value</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</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">4</at>
+                                               <at name="row">12</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.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="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="name">txtAvailableValuesValue</at>
+                                                <at name="width">499</at>
+                                                <at name="height">22</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">2</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">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="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="name">lblValuesFilter</at>
+                                                <at name="width">664</at>
+                                                <at name="text">_Filter_for_values</at>
+                                                <at name="fill">
+                                                 <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                                  <at name="name">fill</at>
+                                                 </object>
+                                                </at>
+                                                <at name="height">16</at>
+                                               </object>
+                                              </at>
+                                             </object>
+                                            </at>
+                                           </object>
+                                          </at>
+                                         </item>
+                                         <item >
+                                          <at name="value">
+                                           <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">6</at>
+                                               <at name="row">8</at>
+                                               <at name="colspan">1</at>
+                                               <at name="rowspan">5</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.FormComponent</at>
+                                            </super>
+                                            <at name="id">embedded.1138996932</at>
+                                            <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:2DLU:NONE</at>
+                                            <at name="colspecs">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">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.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="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="actionCommand">_Add</at>
+                                                     <at name="name">btnAvailableValuesAdd</at>
+                                                     <at name="width">96</at>
+                                                     <at name="text">_Add</at>
+                                                     <at name="height">24</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">1</at>
+                                                    <at name="row">3</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="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="actionCommand">_Update</at>
+                                                     <at name="name">btnAvailableValuesUpdate</at>
+                                                     <at name="width">96</at>
+                                                     <at name="text">_Update</at>
+                                                     <at name="height">24</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">1</at>
+                                                    <at name="row">5</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="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="actionCommand">_Remove</at>
+                                                     <at name="name">btnAvailableValuesRemove</at>
+                                                     <at name="width">96</at>
+                                                     <at name="text">_Remove</at>
+                                                     <at name="height">24</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">1</at>
+                                                    <at name="row">7</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="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="actionCommand">_Remove</at>
+                                                     <at name="name">btnAvailableValuesRemoveAll</at>
+                                                     <at name="width">96</at>
+                                                     <at name="text">_Remove_all</at>
+                                                     <at name="height">24</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="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>
+                                                <at name="name"/>
+                                                <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>
+                                               </object>
+                                              </at>
+                                             </object>
+                                            </at>
+                                            <at name="cellpainters">
+                                             <object classname="com.jeta.forms.store.support.Matrix">
+                                              <at name="rows">
+                                               <object classname="[Ljava.lang.Object;" size="8">
+                                                <at name="item" index="0">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="1">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="2">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="3">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="4">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="5">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="6">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </at>
+                                                <at name="item" index="7">
+                                                 <object classname="[Ljava.lang.Object;" size="1"/>
+                                                </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>
+                                         </item>
+                                         <item >
+                                          <at name="value">
+                                           <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">2</at>
+                                               <at name="row">4</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.FormComponent</at>
+                                            </super>
+                                            <at name="id">embedded.2018386681</at>
+                                            <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                                            <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name">txtValuesFilter</at>
+                                                     <at name="width">590</at>
+                                                     <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                                                            <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                             <at name="name">border</at>
+                                                            </super>
+                                                            <at name="top">2</at>
+                                                            <at name="left">2</at>
+                                                            <at name="bottom">2</at>
+                                                            <at name="right">2</at>
+                                                           </object>
+                                                          </at>
+                                                         </item>
+                                                        </object>
+                                                       </at>
+                                                      </object>
+                                                     </at>
+                                                     <at name="actionCommand">...</at>
+                                                     <at name="name">btnValuesFilter</at>
+                                                     <at name="width">13</at>
+                                                     <at name="text">...</at>
+                                                     <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                                            <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                             <at name="name">border</at>
+                                                            </super>
+                                                            <at name="top">2</at>
+                                                            <at name="left">2</at>
+                                                            <at name="bottom">2</at>
+                                                            <at name="right">2</at>
+                                                           </object>
+                                                          </at>
+                                                         </item>
+                                                        </object>
+                                                       </at>
+                                                      </object>
+                                                     </at>
+                                                     <at name="actionCommand">...</at>
+                                                     <at name="name">btnValuesFilterHistory</at>
+                                                     <at name="width">13</at>
+                                                     <at name="text">...</at>
+                                                     <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                                                            <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                                             <at name="name">border</at>
+                                                            </super>
+                                                            <at name="top">2</at>
+                                                            <at name="left">2</at>
+                                                            <at name="bottom">2</at>
+                                                            <at name="right">2</at>
+                                                           </object>
+                                                          </at>
+                                                         </item>
+                                                        </object>
+                                                       </at>
+                                                      </object>
+                                                     </at>
+                                                     <at name="actionCommand">...</at>
+                                                     <at name="name">btnValuesFilterBookmarks</at>
+                                                     <at name="width">13</at>
+                                                     <at name="text">...</at>
+                                                     <at name="height">20</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="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>
+                                                <at name="name"/>
+                                                <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>
+                                               </object>
+                                              </at>
+                                             </object>
+                                            </at>
+                                            <at name="cellpainters">
+                                             <object classname="com.jeta.forms.store.support.Matrix">
+                                              <at name="rows">
+                                               <object classname="[Ljava.lang.Object;" size="1">
+                                                <at name="item" index="0">
+                                                 <object classname="[Ljava.lang.Object;" size="7"/>
+                                                </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>
+                                         </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="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>
+                                           <at name="name"/>
+                                           <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>
+                                          </object>
+                                         </at>
+                                        </object>
+                                       </at>
+                                       <at name="cellpainters">
+                                        <object classname="com.jeta.forms.store.support.Matrix">
+                                         <at name="rows">
+                                          <object classname="[Ljava.lang.Object;" size="13">
+                                           <at name="item" index="0">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="1">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="2">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="3">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="4">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="5">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="6">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="7">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="8">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="9">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="10">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="11">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </at>
+                                           <at name="item" index="12">
+                                            <object classname="[Ljava.lang.Object;" size="7"/>
+                                           </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>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="width">764</at>
+                              <at name="tabCount">2</at>
+                              <at name="height">320</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="1">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">795</at>
+            <at name="tabCount">6</at>
+            <at name="height">398</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">6</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">embedded.800091926</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name">lblIsPrimaryKey</at>
+                 <at name="width">70</at>
+                 <at name="text">_Primary_key</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkIsPrimaryKey</at>
+                 <at name="width">15</at>
+                 <at name="height">15</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">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.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="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="name">lblIsAutomatic</at>
+                 <at name="width">91</at>
+                 <at name="text">_Value_automatic</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkIsAutomatic</at>
+                 <at name="width">15</at>
+                 <at name="height">15</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">9</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.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="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="name">lblAllowNulls</at>
+                 <at name="width">64</at>
+                 <at name="text">_Allow_nulls</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">11</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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkAllowNulls</at>
+                 <at name="width">15</at>
+                 <at name="height">15</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">3</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.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkIsReadOnly</at>
+                 <at name="width">15</at>
+                 <at name="height">15</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">3</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.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkIsIndexed</at>
+                 <at name="width">15</at>
+                 <at name="height">15</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">1</at>
+                <at name="row">3</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">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="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="name">lblIsReadOnly</at>
+                 <at name="width">70</at>
+                 <at name="text">_Read_only</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">3</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">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="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="name">lblIsIndexed</at>
+                 <at name="width">91</at>
+                 <at name="text">_Indexed</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="12"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="12"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="12"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">4</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">embedded.622367128</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">cboFieldType</at>
+                 <at name="width">686</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featuretype/picker-datatype.png</at>
+                   <at name="description">picker-datatype.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnFieldType</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/Tag.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/Tag.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/Tag.java	(revision 46118)
@@ -0,0 +1,29 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype.tags;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class Tag {
+
+    private String name;
+    private Object value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+    
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagController.java	(revision 46118)
@@ -0,0 +1,131 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype.tags;
+
+import java.awt.event.ItemEvent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.swing.impl.featuretype.AggregateController.AggregateItemController;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class TagController implements AggregateItemController<Tag> {
+
+    private final JComboBox cboName;
+    private final JComboBox cboValue;
+    private final JLabel lblDescription;
+    private final UnmodifiableBasicMap<String, DynField> tagDefinitions;
+
+    public TagController(
+            JComboBox cboName,
+            JComboBox cboValue,
+            JLabel lblDescription
+        ) {
+        this.cboName = cboName;
+        this.cboValue = cboValue;
+        this.lblDescription = lblDescription;
+        this.tagDefinitions = ToolsLocator.getDynObjectManager().getTags();
+        this.initComponents();
+    }
+    
+    private void initComponents() {
+        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+        swingManager.setDefaultPopupMenu(this.cboName);
+        swingManager.setDefaultPopupMenu(this.cboValue);
+        
+        swingManager.addClearButton(this.cboValue);
+
+        List<String> tagsNames = new ArrayList<>();
+        for (String tag : this.tagDefinitions.keySet()) {
+            tagsNames.add(tag);
+        }
+        tagsNames.sort(null);
+        DefaultComboBoxModel model = new DefaultComboBoxModel();
+        model.addElement(" ");
+        for (String tag : tagsNames) {
+            model.addElement(tag);
+        }
+        this.cboName.setModel(model);
+        this.cboName.addItemListener((ItemEvent e) -> {
+            if( e.getStateChange()==ItemEvent.SELECTED ) {
+                doChangeTagName();
+            }
+        });
+    }
+    
+    private void doChangeTagName() {
+        String tagname = (String) this.cboName.getSelectedItem();
+        if( StringUtils.isBlank(tagname) ) {
+            this.lblDescription.setText("");
+            return;
+        }
+        for (DynField tagDefinition : tagDefinitions) {
+            if( tagname.equalsIgnoreCase(tagDefinition.getName()) ) {
+                this.lblDescription.setText("<html>"+tagDefinition.getDescription()+"<html>");
+                DefaultComboBoxModel model = new DefaultComboBoxModel();
+                LabeledValue[] values = tagDefinition.getAvailableValues();
+                if( values != null ) {
+                    for (LabeledValue value : values) {
+                        model.addElement(value);
+                    }
+                }
+                this.cboValue.setModel(model);
+                return;
+            }
+        }
+        this.lblDescription.setText("");
+    }
+    
+    @Override
+    public void put(Tag item) {
+        this.cboName.setSelectedItem(item.getName());
+        this.cboValue.setSelectedItem(Objects.toString(item.getValue(),""));
+    }
+
+    @Override
+    public boolean fetch(Tag item) {
+        String s = Objects.toString(this.cboName.getSelectedItem());
+        if( StringUtils.isBlank(s) ) {
+            return false;
+        }        
+        item.setName(s);
+        item.setValue(Objects.toString(this.cboValue.getSelectedItem()));
+        return true;
+    }
+
+    @Override
+    public void clean() {
+        this.cboName.setSelectedIndex(-1);
+        this.cboValue.setSelectedIndex(-1);
+        this.lblDescription.setText("");
+    }
+
+    @Override
+    public boolean isEditing() {
+        return this.cboName.isEnabled();
+    }
+
+    
+    @Override
+    public void setEnabled(boolean b) {
+        this.cboName.setEnabled(b);
+        this.cboValue.setEnabled(b);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.cboName.isEnabled();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagsModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagsModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretype/tags/TagsModel.java	(revision 46118)
@@ -0,0 +1,98 @@
+package org.gvsig.fmap.dal.swing.impl.featuretype.tags;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.AggregateController;
+import org.gvsig.tools.dynobject.Tags;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class TagsModel 
+    extends AbstractTableModel
+    implements AggregateController.AggregateModel<Tag>
+    {
+
+    private List<Tag> tags;
+    
+    public TagsModel(Tags tags) {
+        this.setTags(tags);
+    }
+    
+    public final void setTags(Tags tags) {
+        this.tags = new ArrayList<>();
+        if( tags == null ) {
+            return;
+        }
+        for (String tagName : tags) {
+            Tag tag = new Tag();
+            tag.setName(tagName);
+            tag.setValue(tags.get(tagName));
+            this.tags.add(tag);
+        }
+    }
+    
+    @Override
+    public void fetch(Object container) {
+        Tags theTags = (Tags) container;
+        theTags.removeAll();
+        for (Tag tag : this.tags) {
+            theTags.set(tag.getName(), tag.getValue());
+        }
+    }
+    
+    @Override
+    public int getRowCount() {
+        return this.tags.size();
+    }
+
+    @Override
+    public int getColumnCount() {
+        return 2;
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        Tag tag = this.tags.get(rowIndex);
+        switch(columnIndex) {
+            case 0:
+                return tag.getName();
+            case 1:
+                return Objects.toString(tag.getValue());
+            default:
+                return "";
+        }
+    }
+
+    @Override
+    public Tag createItem() {
+        return new Tag();
+    }
+
+    @Override
+    public int addItem(Tag item) {
+        this.tags.add(item);
+        this.fireTableDataChanged();
+        return this.tags.size()-1;
+    }
+
+    @Override
+    public void itemUpdated(int position) {
+        this.fireTableDataChanged();
+    }
+
+    @Override
+    public Tag get(int position) {
+        return tags.get(position);
+    }
+
+    @Override
+    public Iterator<Tag> iterator() {
+        return tags.iterator();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerControllerImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerControllerImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/ProjectionPickerControllerImpl.java	(revision 46118)
@@ -0,0 +1,135 @@
+package org.gvsig.fmap.dal.swing.impl;
+
+import org.gvsig.fmap.dal.swing.ProjectionPickerController;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JTextField;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.DataTypes;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.app.gui.panels.CRSSelectPanelFactory;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ProjectionPickerControllerImpl 
+        extends AbstractPickerController<IProjection>
+        implements ProjectionPickerController 
+    {
+
+    private final JTextField txtProjection;
+    private final JButton btnSelectProjection;
+    private IProjection projection;
+
+    public ProjectionPickerControllerImpl(
+            JTextField txtProjection,
+            JButton btnSelectProjection
+        ) {
+        this.txtProjection = txtProjection;
+        this.btnSelectProjection = btnSelectProjection;
+        this.projection = null;
+        this.initComponents();
+    }
+    
+    private void initComponents() {
+        this.txtProjection.setEditable(false);
+        this.txtProjection.setText("");
+        this.btnSelectProjection.addActionListener((ActionEvent e) -> {
+            doSelectProjection();
+        });
+        if( StringUtils.equals(this.btnSelectProjection.getText(), "...") && this.existsIcon("picker-crs") ) {
+            this.btnSelectProjection.setText("");
+            this.btnSelectProjection.setIcon(this.getIcon("picker-crs"));
+        }
+    }
+    
+    private void doSelectProjection() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        
+        ISelectCrsPanel crsSelectPanel = CRSSelectPanelFactory.getUIFactory().getSelectCrsPanel(
+                this.projection, 
+                true
+        );
+        WindowManager winManager = ToolsSwingLocator.getWindowManager();
+        winManager.showWindow(
+                (JComponent) crsSelectPanel, 
+                i18n.getTranslation("selecciona_sistema_de_referencia"), 
+                WindowManager.MODE.DIALOG
+        );
+        if (crsSelectPanel.isOkPressed()) {
+            this.set(crsSelectPanel.getProjection());
+            this.fireChangeEvent();
+        }
+    }
+    
+    @Override
+    public ICoordTrans getCoordinateTransformation() {
+        return null;
+    }
+    
+    @Override
+    public IProjection get() {
+        return this.projection;
+    }
+
+    @Override
+    public void set(IProjection projection) {
+        this.projection = projection;
+        if( this.projection == null ) {
+            this.txtProjection.setText("");
+        } else {
+            this.txtProjection.setText(this.projection.getAbrev());
+        }
+    }
+
+    @Override
+    public void coerceAndSet(Object o) {
+        this.set((IProjection) this.coerce(DataTypes.CRS, o, null));
+    }
+
+    @Override
+    public void setEnabled(boolean bln) {
+        this.btnSelectProjection.setEnabled(bln);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.btnSelectProjection.isEnabled();
+    }
+
+    @Override
+    public void setEditable(boolean editable) {
+        super.setEditable(editable); 
+        this.btnSelectProjection.setEnabled(editable);
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.projection == null;
+    }
+    
+    public static void selfRegister() {
+        String[][] iconNames = new String[][]{
+            new String[]{"Common", "picker-crs"}
+       
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = ProjectionPickerControllerImpl.class.getResource("projectionpicker/"+icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/SelectionFilterAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/SelectionFilterAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/SelectionFilterAction.java	(revision 46118)
@@ -0,0 +1,103 @@
+package org.gvsig.fmap.dal.swing.impl.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+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.swing.AbstractDALActionFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectionFilterAction 
+        extends AbstractAction 
+    {
+
+    public static class SelectionFilterActionFactory  extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "SelectionFilter";
+    
+        public SelectionFilterActionFactory() {
+            super(ACTION_NAME);
+        }
+
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new SelectionFilterAction(context);
+        }
+        
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SelectionFilterAction.class);
+    
+    private final DALActionContext context;
+
+    public SelectionFilterAction(DALActionContext context) {
+        this.context = context;
+        ImageIcon icon = ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-action-select-filter");
+        if( icon == null ) {
+            LOGGER.warn("Can't locate icon 'search-action-select-filter'.");
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                SelectionFilterActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_Filter_selection")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                icon
+        );
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureSelection currentSelection = featureStore.getFeatureSelection();
+            
+            Expression filter = this.context.getFilterForSelecteds();
+            if( filter == null ) {
+              FeatureQuery query = this.context.getQuery();
+              if( query != null ) {
+                filter = query.getExpressionFilter();
+              }
+            }
+            FeatureQuery query = featureStore.createFeatureQuery();
+            query.setFilter(filter);
+            FeatureSet set = featureStore.getFeatureSet(query);
+            FeatureSelection newSelection = featureStore.createFeatureSelection();
+            for (Feature feature : set) {
+                if( currentSelection.isSelected(feature) ) {
+                    newSelection.select(feature);
+                }
+            }
+            store.setSelection(newSelection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction.", ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/SelectionAddAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/SelectionAddAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/SelectionAddAction.java	(revision 46118)
@@ -0,0 +1,90 @@
+package org.gvsig.fmap.dal.swing.impl.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+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.swing.AbstractDALActionFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectionAddAction 
+        extends AbstractAction 
+    {
+
+    public static class SelectionAddActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "SelectionAdd";
+    
+        public SelectionAddActionFactory() {
+            super(ACTION_NAME);
+        }
+
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new SelectionAddAction(context);
+        }
+    }
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(SelectionAddAction.class);
+    
+    private final DALActionContext context;
+
+    public SelectionAddAction(DALActionContext context) {
+        this.context = context;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                SelectionAddActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_Add_to_selection")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-action-select-add")
+        );
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureSelection currentSelection = featureStore.getFeatureSelection();
+            
+            Expression filter = this.context.getFilterForSelecteds();
+            if( filter == null ) {
+              FeatureQuery query = this.context.getQuery();
+              if( query != null ) {
+                filter = query.getExpressionFilter();
+              }
+            }
+            FeatureQuery query = featureStore.createFeatureQuery();
+            query.setFilter(filter);
+            FeatureSet selection = featureStore.getFeatureSet(query);
+            currentSelection.select(selection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction.", ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormForOpenStoreParametersAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormForOpenStoreParametersAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormForOpenStoreParametersAction.java	(revision 46118)
@@ -0,0 +1,73 @@
+/*
+ * 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.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_REPOSITORY_NAME;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager.PopupMenuActionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ShowFormForOpenStoreParametersAction
+        extends AbstractAction {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ShowFormForOpenStoreParametersAction.class);
+
+    public static final class ShowFormForOpenStoreParametersActionFactory
+            implements PopupMenuActionFactory {
+
+        @Override
+        public String getName() {
+            return "ShowFormForOpenStoreParametersAction";
+        }
+
+        @Override
+        public boolean isApplicable(JDynFormField jfield) {
+            if (!(jfield.getForm().getContext() instanceof FeaturesFormContext)) {
+                return false;
+            }
+            FeaturesFormContext context = (FeaturesFormContext) jfield.getForm().getContext();
+            if (!context.getFeatureStore().getName().equalsIgnoreCase(TABLE_REPOSITORY_NAME)) {
+                return false;
+            }
+            return jfield.getDefinition().getName().equals(FIELD_REPOSITORY_PARAMETERS);
+        }
+
+        @Override
+        public Action create(JDynFormField jfield) {
+            return new ShowFormForOpenStoreParametersAction(jfield);
+        }
+
+    }
+
+    private final JDynFormField jfield;
+
+    public ShowFormForOpenStoreParametersAction(JDynFormField jfield) {
+        super("Show parameters");
+        this.jfield = jfield;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        Object value = this.jfield.getValue();
+    }
+
+    public static final void selfRegister() {
+        DynFormSPIManager manager = DynFormSPILocator.getDynFormSPIManager();
+        manager.addPopupMenuAction(new ShowFormForOpenStoreParametersActionFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/GraphAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/GraphAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/GraphAction.java	(revision 46118)
@@ -0,0 +1,215 @@
+package org.gvsig.fmap.dal.swing.impl.actions;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.List;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
+import org.gvsig.fmap.dal.DataStore;
+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.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.AbstractDALActionFactory;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel.SearchActionContext;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.data.category.DefaultCategoryDataset;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class GraphAction 
+        extends AbstractAction 
+        implements ListSelectionListener
+    {
+    
+    private class svDefaultCategoryDataset extends DefaultCategoryDataset {
+
+        public svDefaultCategoryDataset() {
+            
+        }
+    }
+    
+    public static class GraphActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "Graph";
+        
+        public GraphActionFactory() {
+            super(ACTION_NAME);
+        }
+
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new GraphAction(context);
+        }
+        
+        
+        
+//        public static void selfRegister() {
+//            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+//            dalSwingManager.registerFeatureStoreSearchAction(new ShowFormActionFactory());
+//            String[][] iconNames = new String[][]{
+//                new String[]{"dalswing", "search-action-showform"}
+//            };
+//            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+//            for (String[] icon : iconNames) {
+//                URL url = ShowFormAction.class.getResource(icon[1] + ".png");
+//                theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+//            }
+//        }
+
+        @Override
+        public boolean isApplicable(Object... args) {
+            return false; // args[0] instanceof SearchActionContext;
+        }
+        
+    }
+
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ShowFormAction.class);
+    
+    private final DALActionContext context;
+    private boolean showFormSingleElement;
+
+    public GraphAction(DALActionContext context) {
+        this.context = context;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                GraphActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_Show_graph")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                ToolsSwingLocator.getIconThemeManager().getCurrent().get("chart")
+        );
+        try {
+            this.showFormSingleElement = true;
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureAttributeDescriptor[] pks = featureStore.getDefaultFeatureType().getPrimaryKey();
+            if (pks == null || pks.length < 1) {
+                this.showFormSingleElement = false;
+            }
+        } catch (Exception ex) {
+        }        
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            this.setEnabled(false);
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureQuery query = this.context.getQuery();
+            
+            svDefaultCategoryDataset dataset = new svDefaultCategoryDataset();
+            FeatureSet features = featureStore.getFeatureSet(query);
+
+            Iterable<FeatureQueryOrder.FeatureQueryOrderMember> orderMembers = query.getOrder().members();
+            ArrayList<String> fields = new ArrayList<>();
+            for (FeatureQueryOrder.FeatureQueryOrderMember orderMember : orderMembers) {
+                fields.add(orderMember.getAttributeName());
+            }
+            if (fields.size()<2) {
+                return;
+            }
+            
+            fields.add((String) this.context.getQuery().getAggregateFunctions().keySet().toArray()[0]);
+            
+            String field1 = fields.get(0);
+            String field2 = fields.get(1);
+            String fieldValue = fields.get(2);
+            
+            for (Feature feature : features) {
+                Object value = feature.get(fieldValue);
+                if (value instanceof Number) {
+                    String valueField1;
+                    String valueField2;
+                    if(feature.getType().getAttributeDescriptor(field1)!=null) {
+                        valueField1 = feature.getLabelOfValue(field1);
+                    } else {
+                        valueField1 = feature.get(field1).toString();
+                    }
+                    if(feature.getType().getAttributeDescriptor(field2)!=null) {
+                        valueField2 = feature.getLabelOfValue(field2);
+                    } else {
+                        valueField2 = feature.get(field1).toString();
+                    }
+                    
+                    dataset.addValue((Number) value, valueField1, valueField2);
+                }
+            }
+            
+            JFreeChart barChart = ChartFactory.createBarChart(
+                    field1 + " " + field2,
+                    field2,
+                    fieldValue,
+                    dataset,
+                    PlotOrientation.VERTICAL,
+                    true,
+                    true,
+                    false);
+            ChartPanel chartPanel = new ChartPanel(barChart);
+            chartPanel.setPreferredSize(new Dimension( 360 , 200 ));
+            ToolsSwingLocator.getWindowManager().showWindow(chartPanel, "title", WindowManager.MODE.DIALOG);
+            
+            
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show form", ex);
+        } finally {
+            this.setEnabled(true);
+        }
+    }
+    
+    @Override
+    public void valueChanged(ListSelectionEvent e) {
+        if (e.getValueIsAdjusting()) {
+            return;
+        }
+        if (this.context.getSelectedsCount()== 0) {
+            this.setEnabled(true);
+            return;
+        }
+        this.setEnabled(showFormSingleElement);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/SelectionSetAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/SelectionSetAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/SelectionSetAction.java	(revision 46118)
@@ -0,0 +1,96 @@
+package org.gvsig.fmap.dal.swing.impl.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+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.swing.AbstractDALActionFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectionSetAction 
+        extends AbstractAction 
+    {
+
+    public static class SelectionSetActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "SelectionSet";
+    
+        public SelectionSetActionFactory() {
+            super(ACTION_NAME);
+        }
+        
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new SelectionSetAction(context);
+        }
+        
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SelectionSetAction.class);
+    
+    private final DALActionContext context;
+
+    public SelectionSetAction(DALActionContext context) {
+        this.context = context;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                SelectionSetActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_New_selection")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-action-select")
+        );
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        FeatureSet selection = null;
+        try {
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureSelection currentSelection = featureStore.getFeatureSelection();
+            
+            Expression filter = this.context.getFilterForSelecteds();
+            if( filter == null ) {
+              FeatureQuery query = this.context.getQuery();
+              if( query != null ) {
+                filter = query.getExpressionFilter();
+              }
+            }
+            FeatureQuery query = featureStore.createFeatureQuery();
+            query.setFilter(filter);
+            selection = featureStore.getFeatureSet(query);
+            currentSelection.deselectAll();
+            currentSelection.select(selection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction.", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(selection);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/actions/ShowFormAction.java	(revision 46118)
@@ -0,0 +1,146 @@
+package org.gvsig.fmap.dal.swing.impl.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
+import org.gvsig.fmap.dal.DataStore;
+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.swing.AbstractDALActionFactory;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ShowFormAction 
+        extends AbstractAction 
+        implements ListSelectionListener
+    {
+    
+    public static class ShowFormActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "ShowForm";
+        
+        public ShowFormActionFactory() {
+            super(ACTION_NAME);
+        }
+
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new ShowFormAction(context);
+        }
+        
+//        public static void selfRegister() {
+//            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+//            dalSwingManager.registerFeatureStoreSearchAction(new ShowFormActionFactory());
+//            String[][] iconNames = new String[][]{
+//                new String[]{"dalswing", "search-action-showform"}
+//            };
+//            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+//            for (String[] icon : iconNames) {
+//                URL url = ShowFormAction.class.getResource(icon[1] + ".png");
+//                theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+//            }
+//        }
+        
+    }
+
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ShowFormAction.class);
+    
+    private final DALActionContext context;
+    private boolean showFormSingleElement;
+
+    public ShowFormAction(DALActionContext context) {
+        this.context = context;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                ShowFormActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_Show_form")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                ToolsSwingLocator.getIconThemeManager().getCurrent().get("search-action-showform")
+        );
+        try {
+            this.showFormSingleElement = true;
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureAttributeDescriptor[] pks = featureStore.getDefaultFeatureType().getPrimaryKey();
+            if (pks == null || pks.length < 1) {
+                this.showFormSingleElement = false;
+            }
+        } catch (Exception ex) {
+        }        
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            this.setEnabled(false);
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            Expression filter = this.context.getFilterForSelecteds();
+            if( filter==null ) {
+              FeatureQuery query = this.context.getQuery();
+              if( query != null ) {
+                filter = query.getExpressionFilter();
+              }
+            }
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+
+            FeatureQuery query = featureStore.createFeatureQuery();
+            query.setFilter(filter);
+            query.retrievesAllAttributes();
+            JFeaturesForm form = dataSwingManager.createJFeaturesForm(featureStore);
+            form.setQuery(query);
+            form.showForm(WindowManager.MODE.WINDOW);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't show form", ex);
+        } finally {
+            this.setEnabled(true);
+        }
+    }
+
+    @Override
+    public void valueChanged(ListSelectionEvent e) {
+        if (e.getValueIsAdjusting()) {
+            return;
+        }
+        if (this.context.getSelectedsCount()== 0) {
+            this.setEnabled(true);
+            return;
+        }
+        this.setEnabled(showFormSingleElement);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,496 @@
+/* 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 java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JTextField;
+import javax.swing.text.JTextComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.FeaturesFormContext;
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.featureform.swing.JFeatureReferencesForm;
+
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.featureform.swing.impl.DefaultFeaturesFormContext;
+import org.gvsig.featureform.swing.impl.DefaultJFeatureForm;
+import org.gvsig.featureform.swing.impl.DefaultJFeatureReferencesForm;
+import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.FeatureReference;
+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.FeatureTypeDefinitionsManager;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.JFeatureTable;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.DefaultFeatureStoreElement2;
+import org.gvsig.fmap.dal.swing.impl.featuretable.FeatureTablePanel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.EmptyFeatureTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultAttributeDescriptorPickerController;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributePanel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypePanel;
+import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionPanel;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
+import org.gvsig.fmap.dal.swing.impl.actions.SelectionAddAction.SelectionAddActionFactory;
+import org.gvsig.fmap.dal.swing.impl.actions.SelectionFilterAction.SelectionFilterActionFactory;
+import org.gvsig.fmap.dal.swing.impl.actions.SelectionSetAction.SelectionSetActionFactory;
+import org.gvsig.fmap.dal.swing.impl.actions.ShowFormAction.ShowFormActionFactory;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.fmap.dal.swing.DALActionFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.ProjectionPickerController;
+import org.gvsig.fmap.dal.swing.impl.featuretable.SimpleFeaturesTableModelImpl;
+import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeListCellRendererImpl;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributesSelectionPanel;
+import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionDialog;
+import org.gvsig.fmap.dal.swing.impl.jdbc.JDBCConnectionPickerController;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryOrderPanel;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel.SearchConditionPanelFactory;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryOrderPanel;
+import org.gvsig.fmap.dal.swing.featuretable.SimpleFeaturesTableModel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributeListCellRenderer;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
+import org.gvsig.fmap.dal.swing.impl.actions.GraphAction.GraphActionFactory;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions.CheckTableFieldsSuggestionProviderFactory;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions.QuotesForFieldNameSuggestionProviderFactory;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions.StorePointFieldSuggestionProviderFactory;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions.WrongNameFieldSuggestionProviderFactory;
+import org.gvsig.fmap.dal.swing.searchPostProcess.SearchPostProcessFactory;
+import org.gvsig.tools.dynform.DynFormDefinition;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultDataSwingManager implements DataSwingManager {
+
+    private final Map<String,DALActionFactory> featureStoreSearchActions;
+    private final Map<String,SearchPostProcessFactory> searchPostProcess;
+    private Map<String,SearchConditionPanelFactory> searchConditionPanelFactories;
+    
+    public DefaultDataSwingManager() {
+        this.featureStoreSearchActions = new LinkedHashMap<>();
+        this.registerStoreAction(new SelectionAddActionFactory());
+        this.registerStoreAction(new SelectionFilterActionFactory());
+        this.registerStoreAction(new SelectionSetActionFactory());
+        this.registerStoreAction(new ShowFormActionFactory());
+        this.registerStoreAction(new GraphActionFactory());
+        
+        this.searchPostProcess = new HashMap<>();
+    }
+    
+    @Override
+    public JFeaturesForm createJFeaturesForm(FeatureStore store) throws CreateJFeatureFormException {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            
+            DefaultJFeaturesForm form = new DefaultJFeaturesForm();
+            form.bind(store, featureType2DynClass(store, featureType), null);
+            return form;
+            
+        } catch (Exception ex) {
+            throw new CreateJFeatureFormException(ex);
+        }
+    }
+
+    @Override
+    public JFeaturesForm createJFeaturesForm(FeatureStore store, FeatureQuery query) throws CreateJFeatureFormException {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            
+            DefaultJFeaturesForm form = new DefaultJFeaturesForm();
+            form.bind(store, featureType2DynClass(store, featureType), query);
+            return form;
+            
+        } catch (Exception ex) {
+            throw new CreateJFeatureFormException(ex);
+        }
+    }
+
+    public DynClass featureType2DynClass(FeatureStore store, FeatureType type) {
+        FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
+        if( featureTypeDefinitionsManager.contains(store,type) ) {
+            // Force reload next call to get.
+            featureTypeDefinitionsManager.remove(store,type);
+        }
+        DynClass dynClass = featureTypeDefinitionsManager.get(store,type);
+        // Force reload next call to get.
+        DynFormLocator.getDynFormManager().removeDefinition(dynClass.getName());
+        return dynClass;
+    }
+    
+    @Override
+    public JDBCConnectionPanel createJDBCConnectionPanel() {
+        JDBCConnectionPanel x = new DefaultJDBCConnectionPanel();
+        return x;
+    }
+
+    @Override
+    public JDBCConnectionDialog createJDBCConectionDialog() {
+        JDBCConnectionDialog x = new DefaultJDBCConnectionDialog();
+        return x;
+    }
+
+    @Override
+    public void configureExpressionBuilder(ExpressionBuilderConfig builder, FeatureStore store) {
+        DataManager dataManager = DALLocator.getDataManager();
+        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
+        FeatureSymbolTable featureSymbolTable = dataManager.createFeatureSymbolTable();
+
+        builder.removeAllElements();
+        FeatureStoreProviderFactory storeFactory = (FeatureStoreProviderFactory) store.getProviderFactory();
+        Feature sampleFeature = store.getSampleFeature();
+        builder.setAllowedFunctions(storeFactory.allowFunction());
+        if( sampleFeature!=null ) {
+            featureSymbolTable.setFeature(sampleFeature);
+            builder.setPreviewSymbolTable(featureSymbolTable.createParent());
+        }
+        builder.addSymbolTable(featureSymbolTable);
+        FeatureStoreElement storeElement = new DefaultFeatureStoreElement2(store);
+        builder.addElement(storeElement);
+        if( store.getProviderFactory().hasSQLSupport()==DataStoreProviderFactory.YES ) {
+            builder.getPreferences().setSQLCompatible(true);
+        }        
+        builder.addSuggestionFactory(new StorePointFieldSuggestionProviderFactory(store));
+        builder.addSuggestionFactory(new QuotesForFieldNameSuggestionProviderFactory(store));
+        builder.addSuggestionFactory(new WrongNameFieldSuggestionProviderFactory(store));
+        builder.addSuggestionFactory(new CheckTableFieldsSuggestionProviderFactory(store));
+    }
+
+    @Override
+    public JExpressionBuilder createQueryFilterExpresion(FeatureStore store) {
+        return this.createJExpressionBuilder(store);
+    }
+
+    @Override
+    public JExpressionBuilder createJExpressionBuilder(final FeatureStore store) {
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        final JExpressionBuilder builder = expressionSwingManager.createJExpressionBuilder();
+        this.configureExpressionBuilder(builder, store);
+        builder.expandElement(
+                (Element t) -> t!=null && StringUtils.equals(t.getName(),store.getName())
+        );
+        return builder;
+    }
+
+    @Override
+    public ExpressionPickerController createExpressionPickerController(FeatureStore store, JTextComponent text, JButton button, JButton bookmarks, JButton history) {
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        ExpressionPickerController builder = expressionSwingManager.createExpressionPickerController(text, button, bookmarks, history);
+        this.configureExpressionBuilder(builder, store);
+        return builder;
+    }
+
+    @Override
+    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException {
+        JFeatureForm form = new DefaultJFeatureForm();
+        form.setStore(store);
+        return form;
+    }
+
+    @Override
+    public JFeatureReferencesForm createJFeatureReferencesForm(FeatureStore store, List<FeatureReference> references) throws CreateJFeatureFormException {
+        JFeatureReferencesForm form = new DefaultJFeatureReferencesForm();
+        form.bind(store, references);
+        return form;
+    }
+    
+    @Override
+    public JFeatureForm createJFeatureForm(Feature feature) throws CreateJFeatureFormException {
+        JFeatureForm form = new DefaultJFeatureForm();
+        form.setFeature(feature);
+        return form;
+    }
+
+    @Override
+    public JFeatureForm createJFeatureForm(DynFormDefinition definicion) throws CreateJFeatureFormException {
+        JFeatureForm form = new DefaultJFeatureForm();
+        form.setDefinition(definicion);
+        return form;
+    }
+
+    @Override
+    public JFeatureTable createJFeatureTable(FeatureTableModel model) {
+        return this.createJFeatureTable(model, true);
+    }
+    
+    @Override
+    public JFeatureTable createJFeatureTable(FeatureTableModel model, boolean isDoubleBuffered) {
+        return new FeatureTablePanel(model, isDoubleBuffered);
+    }
+    
+    @Override
+    public FeatureTableModel createEmptyFeatureTableModel(DynStruct struct) {
+        return new EmptyFeatureTableModel(struct);
+    }
+    
+    @Override
+    public FeatureTableModel createFeatureTableModel(FeatureStore featureStore,
+            FeatureQuery featureQuery) {
+        try {
+            FeaturePagingHelper pager = DALLocator.getDataManager().createFeaturePagingHelper(
+                    featureStore, featureQuery,
+                    FeaturePagingHelper.DEFAULT_PAGE_SIZE
+            );
+            return this.createFeatureTableModel(pager);
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't create a FeatureTableModel.", ex);
+        }
+    }
+    
+    @Override
+    public FeatureTableModel createFeatureTableModel(FeaturePagingHelper featurePager) {
+        return new DefaultFeatureTableModel(featurePager);
+    }
+    
+    @Override
+    public ProjectionPickerController createProjectionPickerController(
+            JTextField txtProjection,
+            JButton btnSelectProjection
+        ) {
+        ProjectionPickerControllerImpl picker = new ProjectionPickerControllerImpl(txtProjection, btnSelectProjection);
+        return picker;
+    }
+
+    @Override
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo) {
+        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, null);
+        return controller;
+    }
+
+    @Override
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list) {
+        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, null);
+        return controller;
+    }
+
+    @Override
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter) {
+        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, filter);
+        return controller;
+    }
+
+    @Override
+    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list, Predicate<FeatureAttributeDescriptor> filter) {
+        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, filter);
+        return controller;
+    }
+
+    @Override
+    public FeatureTypePanel createFeatureTypePanel() {
+        FeatureTypePanel panel = new DefaultFeatureTypePanel();
+        return panel;
+    }
+    
+    @Override
+    public FeatureTypeAttributePanel createFeatureTypeAttributePanel() {
+        FeatureTypeAttributePanel panel = new DefaultFeatureAttributePanel();
+        return panel;
+    }
+
+    @Override
+    public FeatureStoreElement createFeatureStoreElement() {
+        FeatureStoreElement e = new DefaultFeatureStoreElement2(null);
+        return e;
+    }
+
+    @Override
+    public FeatureStoreElement createFeatureStoreElement(FeatureStore store) {
+        FeatureStoreElement e = new DefaultFeatureStoreElement2(store);
+        return e;
+    }
+
+    @Override
+    public ExpressionPickerController createExpressionPickerController(FeatureStore store, JTextComponent text, JButton button) {    
+        FeatureSymbolTable previewSymbolTable = DALLocator.getManager().createFeatureSymbolTable();
+        previewSymbolTable.setFeature(store.getSampleFeature());
+        
+        ExpressionPickerController controller = ExpressionEvaluatorSwingLocator.getManager().createExpressionPickerController(text, button);
+        controller.addElement(this.createFeatureStoreElement(store));
+        controller.setPreviewSymbolTable(previewSymbolTable);
+        
+        return controller;
+    }
+    
+
+    @Override
+    public FeatureStoreSearchPanel createFeatureStoreSearchPanel(FeatureStore store) {
+        DefaultSearchPanel e = new DefaultSearchPanel(store);
+        return e;
+    }
+
+    @Override
+    public final void registerStoreAction(DALActionFactory action) {
+        this.featureStoreSearchActions.put(action.getName().toLowerCase(), action);
+    }
+    
+    @Override
+    public  Collection<DALActionFactory> getStoreActions() {
+        return Collections.unmodifiableCollection(this.featureStoreSearchActions.values());
+    }
+
+    @Override
+    public  DALActionFactory getStoreAction(String name) {
+        DALActionFactory action = this.featureStoreSearchActions.get(name.toLowerCase());
+        return action;
+    }
+    
+    @Override
+    public void setStoreAction(AbstractButton component, String name, boolean preserveLabel, DALActionContext context) {
+        DALActionFactory factory = this.getStoreAction(name);
+        Action action = factory.createAction(context);
+        if( preserveLabel ) {
+            String s = component.getText();
+            component.setAction(action);
+            component.setText(s);
+        } else {
+            component.setAction(action);
+        }
+    }
+
+
+    @Override
+    public PickerController<JDBCServerExplorerParameters> createJDBCConnectionPickerController(
+            JComboBox cboConnection, JButton btnConnection
+        ) {
+        JDBCConnectionPickerController x = new JDBCConnectionPickerController(cboConnection, btnConnection);
+        return x;
+    }
+
+    @Override
+    public SimpleFeaturesTableModel createSimpleFeaturesTableModel(FeatureStore store) {
+        try {
+            SimpleFeaturesTableModelImpl m = new SimpleFeaturesTableModelImpl(store);
+            return m;
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't creatre SimpleFeaturesTableModel.", ex);
+        }
+    }
+    
+    @Override
+    public SimpleFeaturesTableModel createSimpleFeaturesTableModel(FeatureType featureType, List<String> columnNames, List<Feature> features) {
+        SimpleFeaturesTableModelImpl m = new SimpleFeaturesTableModelImpl(featureType, columnNames, features);
+        return m;
+    }
+    
+    @Override
+    public FeatureAttributeListCellRenderer createDefaultFeatureAttributeListCellRenderer() {
+        FeatureAttributeListCellRenderer r = new FeatureAttributeListCellRendererImpl();
+        return r;
+    }
+
+    @Override
+    public FeatureQueryOrderPanel createFeatureStoreOrderPanel() {
+        DefaultFeatureQueryOrderPanel p = new DefaultFeatureQueryOrderPanel();
+        return p;
+    }
+    
+    @Override
+    public Iterable<SearchConditionPanelFactory> getSearchConditionPanels() {
+      if( this.searchConditionPanelFactories==null ) {
+        return Collections.EMPTY_LIST;
+      }
+      return this.searchConditionPanelFactories.values();
+    }
+
+    @Override
+    public void registerSearchConditionPanel(SearchConditionPanelFactory factory) {
+      if( this.searchConditionPanelFactories==null ) {
+        this.searchConditionPanelFactories = new HashMap<>();
+      }
+      this.searchConditionPanelFactories.put(factory.getName(), factory);
+    }
+
+    @Override
+    public FeatureAttributesSelectionPanel createFeatureAttributeSelectionPanel() {
+      FeatureAttributesSelectionPanel p = new DefaultFeatureAttributesSelectionPanel();
+      return p;
+    }
+
+    @Override
+    public void registerSearchPostProcess(SearchPostProcessFactory process) {
+        this.searchPostProcess.put(process.getName(), process);
+    }
+
+    @Override
+    public Map<String,SearchPostProcessFactory> getSearchPostProcess() {
+        return this.searchPostProcess;
+    }
+
+    @Override
+    public SearchPostProcessFactory getSearchPostProcess(String name) {
+        SearchPostProcessFactory process = this.searchPostProcess.get(name);
+        return process;
+    }
+
+    @Override
+    public FeaturesFormContext createFeaturesFormContext(FeatureStore store) {
+        DefaultFeaturesFormContext context = new DefaultFeaturesFormContext(store);
+        return context;
+    }
+
+}
+
+        
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.xml	(revision 46118)
@@ -0,0 +1,1154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featurequery/DefaultFeatureQueryOrderPanelView.xml</at>
+   <at name="path">src/main/java/org/gvsig/fmap/dal/swing/impl/featurequery/DefaultFeatureQueryOrderPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU: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">4</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">3</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstAvailableColumns</at>
+            <at name="width">426</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">454</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">6</at>
+           <at name="row">4</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstOrderColumns</at>
+            <at name="width">420</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">400</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">6</at>
+           <at name="row">6</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">embedded.972730283</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">8</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-down.png</at>
+                   <at name="description">featurequery-column-down.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnDown</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">6</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-up.png</at>
+                   <at name="description">featurequery-column-up.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnUp</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JToggleButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JToggleButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-sortup.png</at>
+                   <at name="description">common-sortup.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnSortAscending</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">4</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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JToggleButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JToggleButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-sortdown.png</at>
+                   <at name="description">common-sortdown.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnSortDescending</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">4</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">embedded.2056396849</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add-arrow.png</at>
+                   <at name="description">featurequery-column-add-arrow.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnAdd</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">1</at>
+                <at name="row">3</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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove-arrow.png</at>
+                   <at name="description">featurequery-column-remove-arrow.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnRemove</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.636493401</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtColumnsFilter</at>
+                 <at name="width">392</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-filter.png</at>
+                   <at name="description">common-filter.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnsFilter</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="7">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanelView.java	(revision 46118)
@@ -0,0 +1,243 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JToggleButton;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureQueryOrderPanelView extends JPanel
+{
+   JList lstAvailableColumns = new JList();
+   JList lstOrderColumns = new JList();
+   JButton btnColumnDown = new JButton();
+   JButton btnColumnUp = new JButton();
+   JToggleButton btnColumnSortAscending = new JToggleButton();
+   JToggleButton btnColumnSortDescending = new JToggleButton();
+   JButton btnColumnAdd = new JButton();
+   JButton btnColumnRemove = new JButton();
+   JTextField txtColumnsFilter = new JTextField();
+   JButton btnColumnsFilter = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureQueryOrderPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstAvailableColumns.setName("lstAvailableColumns");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstAvailableColumns);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,4,1,3));
+
+      lstOrderColumns.setName("lstOrderColumns");
+      JScrollPane jscrollpane2 = new JScrollPane();
+      jscrollpane2.setViewportView(lstOrderColumns);
+      jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane2,cc.xy(6,4));
+
+      jpanel1.add(createPanel1(),cc.xy(6,6));
+      jpanel1.add(createPanel2(),cc.xy(4,4));
+      jpanel1.add(createPanel3(),cc.xy(2,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnColumnDown.setActionCommand("...");
+      btnColumnDown.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-down.png"));
+      btnColumnDown.setName("btnColumnDown");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnDown.setBorder(emptyborder1);
+      jpanel1.add(btnColumnDown,cc.xy(8,1));
+
+      btnColumnUp.setActionCommand("...");
+      btnColumnUp.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-up.png"));
+      btnColumnUp.setName("btnColumnUp");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnUp.setBorder(emptyborder2);
+      jpanel1.add(btnColumnUp,cc.xy(6,1));
+
+      btnColumnSortAscending.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-sortup.png"));
+      btnColumnSortAscending.setName("btnColumnSortAscending");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnColumnSortAscending.setBorder(emptyborder3);
+      jpanel1.add(btnColumnSortAscending,cc.xy(2,1));
+
+      btnColumnSortDescending.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-sortdown.png"));
+      btnColumnSortDescending.setName("btnColumnSortDescending");
+      EmptyBorder emptyborder4 = new EmptyBorder(2,2,2,2);
+      btnColumnSortDescending.setBorder(emptyborder4);
+      jpanel1.add(btnColumnSortDescending,cc.xy(4,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,5,7 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnColumnAdd.setActionCommand("...");
+      btnColumnAdd.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add-arrow.png"));
+      btnColumnAdd.setName("btnColumnAdd");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnAdd.setBorder(emptyborder1);
+      jpanel1.add(btnColumnAdd,cc.xy(1,1));
+
+      btnColumnRemove.setActionCommand("...");
+      btnColumnRemove.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove-arrow.png"));
+      btnColumnRemove.setName("btnColumnRemove");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnRemove.setBorder(emptyborder2);
+      jpanel1.add(btnColumnRemove,cc.xy(1,3));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtColumnsFilter.setName("txtColumnsFilter");
+      jpanel1.add(txtColumnsFilter,cc.xy(1,1));
+
+      btnColumnsFilter.setActionCommand("...");
+      btnColumnsFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-filter.png"));
+      btnColumnsFilter.setName("btnColumnsFilter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnsFilter.setBorder(emptyborder1);
+      jpanel1.add(btnColumnsFilter,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanel.java	(revision 46118)
@@ -0,0 +1,340 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.SymbolTableFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+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.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeListCellRendererImpl;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributesSelectionPanel;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.swing.api.FilteredListController;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryGroupByPanel;
+import org.gvsig.timesupport.DataTypes;
+import org.gvsig.tools.swing.api.FilteredListModel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureQueryGroupByPanel
+        extends DefaultFeatureQueryGroupByPanelView
+        implements FeatureQueryGroupByPanel {
+
+    private class AttributesWithAggregateRenderer extends FeatureAttributeListCellRendererImpl {
+
+        @Override
+        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+            JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); //To change body of generated methods, choose Tools | Templates.
+            FeatureAttributeDescriptor attrdesc = (FeatureAttributeDescriptor) value;
+            String aggregate = query.getAggregateFunctions().get(attrdesc.getName());
+            if (aggregate != null) {
+                c.setText(c.getText() + "  [" + aggregate + "]");
+            } else {
+                c.setText(c.getText() + "  [<NULL>]");
+            }
+            return c;
+        }
+    }
+
+    private FeatureStore store;
+    private FeatureType featureType;
+
+    private FilteredListController aggregateFunctionsController;
+    private DefaultFeatureAttributesSelectionPanel groupByPanel;
+
+    private FeatureQuery query;
+
+    public DefaultFeatureQueryGroupByPanel() {
+        this.initComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        String name = FilenameUtils.getBaseName(imageName);
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+        if (theme.exists(name)) {
+            return theme.get(name);
+        }
+        URL url = this.getClass().getResource(name + ".png");
+        if (url == null) {
+            return null;
+        }
+        return new ImageIcon(url);
+    }
+
+    @Override
+    public void setStore(FeatureStore store) {
+        try {
+            this.featureType = store.getDefaultFeatureType();
+            this.store = store;
+            this.query = store.createFeatureQuery();
+            this.groupByPanel.setFeatureType(featureType);
+            this.groupByPanel.setSelectedNames(query.getGroupByColumns());
+            this.updateControls();
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't assign store", ex);
+        }
+    }
+
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+        toolsSwingManager.translate(this.btnAttributesFilter);
+        toolsSwingManager.translate(this.tabGroup);
+
+        this.groupByPanel = new DefaultFeatureAttributesSelectionPanel();
+        this.groupByPanel.allowCalculatedAttributes(true);
+
+        this.pnlGroupByAttributes.setLayout(new BorderLayout());
+        this.pnlGroupByAttributes.add(this.groupByPanel, BorderLayout.CENTER);
+
+        this.lstAttributes.setCellRenderer(new AttributesWithAggregateRenderer());
+        this.lstAttributes.addListSelectionListener((ListSelectionEvent e) -> {
+            if (e.getValueIsAdjusting()) {
+                return;
+            }
+            doSelectAttribute();
+        });
+
+        this.cboAggretateFunctions.addActionListener((ActionEvent e) -> {
+            doSelectAttribute();
+        });
+
+        this.aggregateFunctionsController = toolsSwingManager.createFilteredListController(
+                lstAttributes,
+                txtAttributesFilter,
+                btnAttributesFilter
+        );
+        this.aggregateFunctionsController.addChangeListener((ChangeEvent ce) -> {
+            doSelectAttribute();
+        });
+        Dimension sz = this.getPreferredSize();
+        if (sz.width < DEFAULT_WIDTH) {
+            sz.width = DEFAULT_WIDTH;
+        }
+        if (sz.height < DEFAULT_HEIGHT) {
+            sz.height = DEFAULT_HEIGHT;
+        }
+        this.setPreferredSize(sz);
+    }
+
+    private void doSelectAttribute() {
+        String previuos = this.txtCurrentAttributeName.getText();
+        if (!StringUtils.isBlank(previuos)) {
+            String aggregate = (String) this.cboAggretateFunctions.getSelectedItem();
+            if (StringUtils.isBlank(aggregate) || aggregate.equalsIgnoreCase("<NULL>")) {
+                this.query.getAggregateFunctions().remove(previuos);
+            } else {
+                this.query.getAggregateFunctions().put(previuos, aggregate);
+            }
+            this.updateControls();
+        }
+
+        FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstAttributes.getSelectedValue();
+        if (attr == null) {
+            return;
+        }
+        this.txtCurrentAttributeName.setText(attr.getName());
+        String aggregate = this.query.getAggregateFunctions().get(attr.getName());
+        if (StringUtils.isBlank(aggregate) || aggregate.equalsIgnoreCase("<NULL>")) {
+            this.cboAggretateFunctions.setSelectedIndex(0);
+        } else {
+            this.cboAggretateFunctions.setSelectedItem(aggregate);
+        }
+    }
+
+    private void updateControls() {
+        int indexAttributes = this.lstAttributes.getSelectedIndex();
+        if (this.cboAggretateFunctions.getModel().getSize() < 1) {
+            List<String> aggregateFunctions = new ArrayList<>();
+            java.util.function.Function<String, Integer> isAllowed = ((FeatureStoreProviderFactory) (store.getProviderFactory())).allowFunction();
+            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+            for (SymbolTableFactory factory : manager.getSymbolTableFactories()) {
+                if (StringUtils.equalsIgnoreCase(Function.GROUP_AGGREGATE, factory.getName())) {
+                    SymbolTable symbolTable = factory.create();
+                    for (Function function : symbolTable) {
+                        if (isAllowed.apply(function.name()) != DataType.NO) {
+                            aggregateFunctions.add(function.name());
+                        }
+                    }
+                    break;
+                }
+            }
+            Collections.sort(aggregateFunctions);
+            DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
+            model.addElement("<NULL>");
+            for (String functionName : aggregateFunctions) {
+                model.addElement(functionName);
+            }
+
+            this.cboAggretateFunctions.setModel(model);
+            this.cboAggretateFunctions.setSelectedIndex(0);
+            this.txtCurrentAttributeName.setText("");
+        }
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        FilteredListModel model = toolsSwingManager.createFilteredListModel();
+        for (FeatureAttributeDescriptor attr : featureType) {
+            model.addElement(attr);
+        }
+        for (FeatureAttributeDescriptor attr : featureType.getExtraColumns().getColumns()) {
+            model.addElement(attr);
+        }
+        for (EditableFeatureAttributeDescriptor attr : query.getExtraColumn().getColumns()) {
+            model.addElement(attr);
+        }
+        model.setFilter(this.txtAttributesFilter.getText());
+        model.sort(true);
+        this.lstAttributes.setModel(model);
+        this.lstAttributes.setSelectedIndex(indexAttributes);
+        this.txtCurrentAttributeName.setText("");
+        this.cboAggretateFunctions.setSelectedIndex(0);
+
+        // 
+        //groupByPanel.setSelectedNames(query.getGroupByColumns());
+    }
+
+    public Map<String, String> getFixedConversion() {
+//      Map<String, String> fixed = new HashMap<>();
+//      ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+//
+//      for (Map.Entry<String, String> aggregate : this.query.getAggregateFunctions().entrySet()) {
+//          String key = aggregate.getKey();
+//          String value = aggregate.getValue();
+//          FeatureAttributeDescriptor attr = this.featureType.getAttributeDescriptorFromAll(value);
+//          if(attr==null) {
+//              attr = this.query.getExtraColumn().get(value);
+//              if(attr==null) {
+//                  fixed.put(key, value);
+//                  continue;
+//              }
+//          }
+//          if(StringUtils.equalsIgnoreCase(key, "SUM")) {
+//            switch (attr.getType()) {
+//                case DataTypes.BOOLEAN:
+//                case DataTypes.STRING:
+//                    value = builder.let(
+//                            attr.getName(),
+//                            builder.toInteger(
+//                                    builder.variable(attr.getName()
+//                                    )
+//                            )
+//                    ).toString();
+//            }
+//          }
+//          fixed.put(key, value);
+//          
+//      }
+// 
+//      return fixed;   
+        return this.query.getAggregateFunctions();
+    }
+
+    @Override
+    public FeatureQuery fetch(FeatureQuery query) {
+        if (query == null) {
+            FeatureQuery q = this.query.getCopy();
+            q.getAggregateFunctions().clear();
+            q.getAggregateFunctions().putAll(getFixedConversion());
+            return q;
+        }
+        query.getGroupByColumns().clear();
+        query.getGroupByColumns().addAll(this.groupByPanel.getSelectedNames());
+        query.getAggregateFunctions().clear();
+        query.getAggregateFunctions().putAll(getFixedConversion());
+
+        return query;
+    }
+
+    @Override
+    public FeatureQuery fetch() {
+        return this.fetch(null);
+    }
+
+    public void removeTypeConversion() {
+        Map<String, String> fixed = new HashMap<>();
+
+        for (Map.Entry<String, String> aggregate : this.query.getAggregateFunctions().entrySet()) {
+            String key = aggregate.getKey();
+            String value = aggregate.getValue();
+            FeatureAttributeDescriptor attr = this.featureType.getAttributeDescriptorFromAll(value);
+            if (attr == null) {
+                attr = this.query.getExtraColumn().get(value);
+                if (attr == null) {
+                    switch (key.toLowerCase()) {
+                        case "sum":
+                            Code code = ExpressionUtils.compile(value);
+                            if (code instanceof Code.Callable) {
+                                Code.Callable callable = (Code.Callable) code;
+                                switch (callable.name().toLowerCase()) {
+                                    case ExpressionBuilder.FUNCTION_LET:
+                                        value = ((Code.Identifier) callable.parameters().get(0)).name();
+                                        break;
+                                }
+                            }
+                            break;
+                    }
+
+                }
+            }
+
+            fixed.put(key, value);
+
+        }
+
+        query.getAggregateFunctions().clear();
+        query.getAggregateFunctions().putAll(fixed);
+
+    }
+
+    @Override
+    public void put(FeatureQuery query) {
+        this.query.copyFrom(query);
+//    removeTypeConversion();
+        groupByPanel.setSelectedNames(query.getGroupByColumns());
+        groupByPanel.setExtraColumns(query.getExtraColumn().getColumns());
+        this.updateControls();
+    }
+
+    public static void selfRegister() {
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryOrderPanel.java	(revision 46118)
@@ -0,0 +1,337 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.ListCellRenderer;
+import javax.swing.event.ListSelectionEvent;
+import org.apache.commons.io.FilenameUtils;
+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.FeatureQueryOrderMember;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.FilteredListController;
+import org.gvsig.tools.swing.api.FilteredListModel;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryOrderPanel;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureQueryOrderPanel
+        extends DefaultFeatureQueryOrderPanelView
+        implements FeatureQueryOrderPanel {
+
+  private FeatureQuery query;
+  private FeatureType featureType;
+  private final ActionListenerSupport actionListenerSupport;
+  private final ButtonGroup ascendingGroup;
+  private FilteredListController availableFieldsController;
+
+  public DefaultFeatureQueryOrderPanel() {
+    this.actionListenerSupport = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+    this.ascendingGroup = new ButtonGroup();
+    this.initComponents();
+  }
+
+  @Override
+  public FeatureQuery fetch(FeatureQuery query) {
+    if (query == null) {
+      return this.query.getCopy();
+    }
+    query.getOrder().copyFrom(this.query.getOrder());
+    return query;
+  }
+
+  @Override
+  public FeatureQuery fetch() {
+    return this.fetch(null);
+  }
+
+  @Override
+  public void put(FeatureQuery query) {
+    this.query.copyFrom(query);
+    this.updateControls();
+  }
+
+  private void initComponents() {
+    ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+    toolsSwingManager.translate(this.btnColumnAdd);
+    toolsSwingManager.translate(this.btnColumnDown);
+    toolsSwingManager.translate(this.btnColumnRemove);
+    toolsSwingManager.translate(this.btnColumnSortAscending);
+    toolsSwingManager.translate(this.btnColumnSortDescending);
+    toolsSwingManager.translate(this.btnColumnUp);
+    toolsSwingManager.translate(this.btnColumnsFilter);
+    
+    ListCellRenderer renderer = DALSwingLocator.getDataSwingManager().createDefaultFeatureAttributeListCellRenderer();
+    this.lstAvailableColumns.setCellRenderer(renderer);
+    this.lstOrderColumns.setCellRenderer(renderer);
+
+    this.ascendingGroup.add(this.btnColumnSortAscending);
+    this.ascendingGroup.add(this.btnColumnSortDescending);
+
+    this.lstAvailableColumns.addListSelectionListener((ListSelectionEvent e) -> {
+      if (e.getValueIsAdjusting()) {
+        return;
+      }
+      doSelectAvailableColumn();
+    });
+    this.lstOrderColumns.addListSelectionListener((ListSelectionEvent e) -> {
+      if (e.getValueIsAdjusting()) {
+        return;
+      }
+      doSelectOrderColumn();
+    });
+    this.btnColumnAdd.addActionListener((ActionEvent e) -> {
+      doColumnAdd();
+    });
+    this.btnColumnRemove.addActionListener((ActionEvent e) -> {
+      doColumnRemove();
+    });
+    this.btnColumnDown.addActionListener((ActionEvent e) -> {
+      doColumnDown();
+    });
+    this.btnColumnUp.addActionListener((ActionEvent e) -> {
+      doColumnUp();
+    });
+    this.btnColumnSortAscending.addActionListener((ActionEvent e) -> {
+      doColumnSortAscending();
+    });
+    this.btnColumnSortDescending.addActionListener((ActionEvent e) -> {
+      doColumnSortDescending();
+    });
+    this.availableFieldsController = toolsSwingManager.createFilteredListController(
+            lstAvailableColumns,
+            txtColumnsFilter,
+            btnColumnsFilter
+    );
+    Dimension sz = this.getPreferredSize();
+    if (sz.width < DEFAULT_WIDTH) {
+      sz.width = DEFAULT_WIDTH;
+    }
+    if (sz.height < DEFAULT_HEIGHT) {
+      sz.height = DEFAULT_HEIGHT;
+    }
+    this.setPreferredSize(sz);
+  }
+
+  private void doSelectAvailableColumn() {
+    if (this.lstAvailableColumns.getSelectedIndex() >= 0) {
+      this.btnColumnAdd.setEnabled(true);
+      return;
+    }
+    this.btnColumnAdd.setEnabled(false);
+  }
+
+  private void doSelectOrderColumn() {
+    if (this.lstOrderColumns.getSelectedIndex() >= 0) {
+      FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+      if (attr != null) {
+        FeatureQueryOrderMember member = this.query.getOrder().get(attr.getName());
+        if (member != null) {
+          this.btnColumnRemove.setEnabled(true);
+          this.btnColumnDown.setEnabled(true);
+          this.btnColumnUp.setEnabled(true);
+          this.btnColumnSortAscending.setEnabled(true);
+          this.btnColumnSortDescending.setEnabled(true);
+          if (member.getAscending()) {
+            this.btnColumnSortAscending.setSelected(true);
+            this.btnColumnSortDescending.setSelected(false);
+          } else {
+            this.btnColumnSortAscending.setSelected(false);
+            this.btnColumnSortDescending.setSelected(true);
+          }
+          return;
+        }
+      }
+    }
+    this.btnColumnRemove.setEnabled(false);
+    this.btnColumnDown.setEnabled(false);
+    this.btnColumnUp.setEnabled(false);
+    this.btnColumnSortAscending.setEnabled(false);
+    this.btnColumnSortDescending.setEnabled(false);
+    this.btnColumnSortAscending.setSelected(false);
+    this.btnColumnSortDescending.setSelected(false);
+  }
+
+  private void doColumnSortAscending() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    FeatureQueryOrderMember member = this.query.getOrder().get(attr.getName());
+    member.setAscending(true);
+  }
+
+  private void doColumnSortDescending() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    FeatureQueryOrderMember member = this.query.getOrder().get(attr.getName());
+    member.setAscending(false);
+  }
+
+  private void doColumnUp() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    this.query.getOrder().movePrevious(attr.getName());
+    this.updateControls();
+  }
+
+  private void doColumnDown() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    this.query.getOrder().moveNext(attr.getName());
+    this.updateControls();
+  }
+
+  private void doColumnRemove() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstOrderColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    FeatureQueryOrderMember member = this.query.getOrder().get(attr.getName());
+    this.query.getOrder().remove(member);
+    this.updateControls();
+  }
+
+  private void doColumnAdd() {
+    FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstAvailableColumns.getSelectedValue();
+    if (attr == null) {
+      return;
+    }
+    this.query.getOrder().add(attr.getName(), true);
+    this.updateControls();
+  }
+
+  @Override
+  public void setStore(FeatureStore store) {
+    try {
+      this.featureType = store.getDefaultFeatureType();
+      this.query = store.createFeatureQuery();
+    } catch (DataException ex) {
+      throw new RuntimeException("Can't assign store", ex);
+    }
+  }
+
+  @Override
+  public JComponent asJComponent() {
+    return this;
+  }
+
+  private void updateControls() {
+    int indexAvailables = this.lstAvailableColumns.getSelectedIndex();
+    int indexOrder = this.lstOrderColumns.getSelectedIndex();
+    FilteredListModel modelAvailables = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
+    DefaultListModel<FeatureAttributeDescriptor> modelOrder = new DefaultListModel<>();
+    for (FeatureAttributeDescriptor attr : featureType) {
+      if (this.query.getOrder() == null || !this.query.getOrder().contains(attr.getName())) {
+        modelAvailables.addElement(attr);
+      }
+    }
+    for (FeatureAttributeDescriptor attr : this.query.getExtraColumn().getColumns()) {
+      if (this.query.getOrder() == null || !this.query.getOrder().contains(attr.getName())) {
+        modelAvailables.addElement(attr);
+      }
+    }
+    for (FeatureQueryOrderMember member : this.query.getOrder().members()) {
+      FeatureAttributeDescriptor attr = this.featureType.getAttributeDescriptor(member.getAttributeName());
+      if (attr==null) {
+          attr = this.query.getExtraColumn().get(member.getAttributeName());
+      }
+      modelOrder.addElement(attr);
+    }
+    modelAvailables.setFilter(this.txtColumnsFilter.getText());
+    modelAvailables.sort(true);
+    this.lstAvailableColumns.setModel(modelAvailables);
+    this.lstOrderColumns.setModel(modelOrder);
+    if (indexAvailables >= 0 && modelAvailables.getSize() > 0) {
+      if (indexAvailables >= modelAvailables.getSize()) {
+        indexAvailables = modelAvailables.getSize() - 1;
+      }
+      this.lstAvailableColumns.setSelectedIndex(indexAvailables);
+      this.btnColumnAdd.setEnabled(true);
+    } else {
+      this.btnColumnAdd.setEnabled(false);
+    }
+    
+    
+    if (indexOrder >= 0 && modelOrder.getSize() > 0) {
+      if (indexOrder >= modelOrder.getSize()) {
+        indexOrder = modelOrder.getSize() - 1;
+      }
+      this.lstOrderColumns.setSelectedIndex(indexOrder);
+      FeatureAttributeDescriptor attr = modelOrder.get(indexOrder);
+      FeatureQueryOrderMember member = this.query.getOrder().get(attr.getName());
+      if (member == null) {
+        this.btnColumnSortAscending.setSelected(true);
+        this.btnColumnSortDescending.setSelected(false);
+        this.btnColumnSortAscending.setEnabled(false);
+        this.btnColumnSortDescending.setEnabled(false);
+      } else {
+        this.btnColumnSortAscending.setEnabled(true);
+        this.btnColumnSortDescending.setEnabled(true);
+        if (member.getAscending()) {
+          this.btnColumnSortAscending.setSelected(true);
+          this.btnColumnSortDescending.setSelected(false);
+        } else {
+          this.btnColumnSortAscending.setSelected(false);
+          this.btnColumnSortDescending.setSelected(true);
+        }
+      }
+      this.btnColumnRemove.setEnabled(true);
+    } else {
+      this.btnColumnSortAscending.setSelected(true);
+      this.btnColumnSortDescending.setSelected(false);
+      this.btnColumnSortAscending.setEnabled(false);
+      this.btnColumnSortDescending.setEnabled(false);
+      this.btnColumnRemove.setEnabled(false);
+    }
+  }
+
+  @Override
+  public ImageIcon loadImage(String imageName) {
+    String name = FilenameUtils.getBaseName(imageName);
+    IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+    if (theme.exists(name)) {
+      return theme.get(name);
+    }
+    URL url = this.getClass().getResource(name + ".png");
+    if (url == null) {
+      return null;
+    }
+    return new ImageIcon(url);
+  }
+
+  public static void selfRegister() {
+    String[][] iconNames = new String[][]{
+      new String[]{"dalswing", "featurequery-column-add-arrow"},
+      new String[]{"dalswing", "featurequery-column-remove-arrow"},
+      new String[]{"dalswing", "featurequery-column-down"},
+      new String[]{"dalswing", "featurequery-column-up"}
+    };
+    IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+    for (String[] icon : iconNames) {
+      URL url = DefaultFeatureQueryOrderPanel.class.getResource(icon[1] + ".png");
+      theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+    }
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.xml	(revision 46118)
@@ -0,0 +1,2036 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.6),FILL:4DLU: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">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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstAttributes</at>
+            <at name="width">360</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">478</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">4</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">embedded.1663873132</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">9</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-down.png</at>
+                   <at name="description">featurequery-column-down.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnDown</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-up.png</at>
+                   <at name="description">featurequery-column-up.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnUp</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove.png</at>
+                   <at name="description">featurequery-column-remove.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnRemove</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add.png</at>
+                   <at name="description">featurequery-column-add.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnAdd</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="9"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">2</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">embedded.699355138</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:4DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">lblName</at>
+                 <at name="width">69</at>
+                 <at name="text">_Name</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">3</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">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="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="name">lblType</at>
+                 <at name="width">69</at>
+                 <at name="text">_Type</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">11</at>
+                <at name="colspan">1</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">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="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="name">lblExpression</at>
+                 <at name="width">69</at>
+                 <at name="text">_Expression</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="colspan">3</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="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="name">txtColumnName</at>
+                 <at name="width">462</at>
+                 <at name="height">20</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">3</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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-more.png</at>
+                   <at name="description">common-more.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnColumnDataType</at>
+                 <at name="width">40</at>
+                 <at name="height">20</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">3</at>
+                <at name="colspan">2</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="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="name">cboColumnDataType</at>
+                 <at name="width">418</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">20</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">13</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.FormComponent</at>
+             </super>
+             <at name="id">embedded.1170552575</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">5</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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="icon">
+                       <object classname="com.jeta.forms.store.properties.IconProperty">
+                        <at name="embedded">false</at>
+                        <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-applychanges.png</at>
+                        <at name="description">common-applychanges.png</at>
+                        <at name="width">16</at>
+                        <at name="height">16</at>
+                       </object>
+                      </at>
+                      <at name="name">btnApplyChanges</at>
+                      <at name="width">114</at>
+                      <at name="text">_Apply_changes</at>
+                      <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="icon">
+                       <object classname="com.jeta.forms.store.properties.IconProperty">
+                        <at name="embedded">false</at>
+                        <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-more.png</at>
+                        <at name="description">common-more.png</at>
+                        <at name="width">16</at>
+                        <at name="height">16</at>
+                       </object>
+                      </at>
+                      <at name="name">btnColumnMore</at>
+                      <at name="width">58</at>
+                      <at name="text">_More</at>
+                      <at name="height">20</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="5"/>
+                 </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>
+          </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">11</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.JTextArea</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JTextArea</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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>
+                 <at name="scrollableTracksViewportWidth">true</at>
+                 <at name="name">txtColumnExpression</at>
+                 <at name="width">409</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="height">244</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">3</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="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="name">txtColumnSize</at>
+                 <at name="width">462</at>
+                 <at name="height">20</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">1</at>
+                <at name="row">5</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">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="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="name">lblSize</at>
+                 <at name="width">69</at>
+                 <at name="text">_Size</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">7</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">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="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="name">lblPrecision</at>
+                 <at name="width">69</at>
+                 <at name="text">_Precision</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">7</at>
+                <at name="colspan">3</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="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="name">txtColumnPrecision</at>
+                 <at name="width">462</at>
+                 <at name="height">20</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">1</at>
+                <at name="row">9</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">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="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="name">lblScale</at>
+                 <at name="width">69</at>
+                 <at name="text">_Scale</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">3</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="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="name">txtColumnScale</at>
+                 <at name="width">462</at>
+                 <at name="height">20</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">5</at>
+                <at name="row">11</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">embedded.Wed10f7cE17155d4bf69EV7fff</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</at>
+             <at name="colspecs">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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="name">btnColumnExpression</at>
+                      <at name="width">16</at>
+                      <at name="text">...</at>
+                      <at name="height">18</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">1</at>
+                     <at name="row">3</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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="name">btnColumnExpressionHistory</at>
+                      <at name="width">16</at>
+                      <at name="text">...</at>
+                      <at name="height">18</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">1</at>
+                     <at name="row">5</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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="name">btnColumnExpressionBookmarks</at>
+                      <at name="width">16</at>
+                      <at name="text">...</at>
+                      <at name="height">18</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="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>
+                 <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>
+                  </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="6">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="1">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="2">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="3">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="4">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="5">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </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>
+          </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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="13">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="7">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="8">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="9">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="10">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="11">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </at>
+            <at name="item" index="12">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanelView.java	(revision 46118)
@@ -0,0 +1,331 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureQueryCalculatedColumnsPanelView extends JPanel
+{
+   JList lstAttributes = new JList();
+   JButton btnDown = new JButton();
+   JButton btnUp = new JButton();
+   JButton btnRemove = new JButton();
+   JButton btnAdd = new JButton();
+   JLabel lblName = new JLabel();
+   JLabel lblType = new JLabel();
+   JLabel lblExpression = new JLabel();
+   JTextField txtColumnName = new JTextField();
+   JButton btnColumnDataType = new JButton();
+   JComboBox cboColumnDataType = new JComboBox();
+   JButton btnApplyChanges = new JButton();
+   JButton btnColumnMore = new JButton();
+   JTextArea txtColumnExpression = new JTextArea();
+   JTextField txtColumnSize = new JTextField();
+   JLabel lblSize = new JLabel();
+   JLabel lblPrecision = new JLabel();
+   JTextField txtColumnPrecision = new JTextField();
+   JLabel lblScale = new JLabel();
+   JTextField txtColumnScale = new JTextField();
+   JButton btnColumnExpression = new JButton();
+   JButton btnColumnExpressionHistory = new JButton();
+   JButton btnColumnExpressionBookmarks = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureQueryCalculatedColumnsPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(0.4),FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.6),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstAttributes.setName("lstAttributes");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstAttributes);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      jpanel1.add(createPanel1(),cc.xy(2,4));
+      jpanel1.add(createPanel2(),cc.xy(4,2));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnDown.setActionCommand("...");
+      btnDown.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-down.png"));
+      btnDown.setName("btnDown");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnDown.setBorder(emptyborder1);
+      jpanel1.add(btnDown,cc.xy(9,1));
+
+      btnUp.setActionCommand("...");
+      btnUp.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-up.png"));
+      btnUp.setName("btnUp");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnUp.setBorder(emptyborder2);
+      jpanel1.add(btnUp,cc.xy(7,1));
+
+      btnRemove.setActionCommand("...");
+      btnRemove.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-remove.png"));
+      btnRemove.setName("btnRemove");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnRemove.setBorder(emptyborder3);
+      jpanel1.add(btnRemove,cc.xy(5,1));
+
+      btnAdd.setActionCommand("...");
+      btnAdd.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/featurequery-column-add.png"));
+      btnAdd.setName("btnAdd");
+      EmptyBorder emptyborder4 = new EmptyBorder(2,2,2,2);
+      btnAdd.setBorder(emptyborder4);
+      jpanel1.add(btnAdd,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4,6,8 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:4DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblName.setName("lblName");
+      lblName.setText("_Name");
+      jpanel1.add(lblName,cc.xy(1,1));
+
+      lblType.setName("lblType");
+      lblType.setText("_Type");
+      jpanel1.add(lblType,cc.xy(1,3));
+
+      lblExpression.setName("lblExpression");
+      lblExpression.setText("_Expression");
+      jpanel1.add(lblExpression,new CellConstraints(1,11,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      txtColumnName.setName("txtColumnName");
+      jpanel1.add(txtColumnName,cc.xywh(3,1,3,1));
+
+      btnColumnDataType.setActionCommand("...");
+      btnColumnDataType.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-more.png"));
+      btnColumnDataType.setName("btnColumnDataType");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnDataType.setBorder(emptyborder1);
+      jpanel1.add(btnColumnDataType,cc.xy(5,3));
+
+      cboColumnDataType.setName("cboColumnDataType");
+      jpanel1.add(cboColumnDataType,cc.xywh(3,3,2,1));
+
+      jpanel1.add(createPanel3(),cc.xywh(1,13,5,1));
+      txtColumnExpression.setName("txtColumnExpression");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtColumnExpression);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(3,11));
+
+      txtColumnSize.setName("txtColumnSize");
+      jpanel1.add(txtColumnSize,cc.xywh(3,5,3,1));
+
+      lblSize.setName("lblSize");
+      lblSize.setText("_Size");
+      jpanel1.add(lblSize,cc.xy(1,5));
+
+      lblPrecision.setName("lblPrecision");
+      lblPrecision.setText("_Precision");
+      jpanel1.add(lblPrecision,cc.xy(1,7));
+
+      txtColumnPrecision.setName("txtColumnPrecision");
+      jpanel1.add(txtColumnPrecision,cc.xywh(3,7,3,1));
+
+      lblScale.setName("lblScale");
+      lblScale.setText("_Scale");
+      jpanel1.add(lblScale,cc.xy(1,9));
+
+      txtColumnScale.setName("txtColumnScale");
+      jpanel1.add(txtColumnScale,cc.xywh(3,9,3,1));
+
+      jpanel1.add(createPanel4(),cc.xy(5,11));
+      addFillComponents(jpanel1,new int[]{ 2,4,5 },new int[]{ 2,4,6,8,10,12,13 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnApplyChanges.setActionCommand("...");
+      btnApplyChanges.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-applychanges.png"));
+      btnApplyChanges.setName("btnApplyChanges");
+      btnApplyChanges.setText("_Apply_changes");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnApplyChanges.setBorder(emptyborder1);
+      jpanel1.add(btnApplyChanges,cc.xy(5,1));
+
+      btnColumnMore.setActionCommand("...");
+      btnColumnMore.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-more.png"));
+      btnColumnMore.setName("btnColumnMore");
+      btnColumnMore.setText("_More");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnMore.setBorder(emptyborder2);
+      jpanel1.add(btnColumnMore,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,4 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnColumnExpression.setActionCommand("...");
+      btnColumnExpression.setName("btnColumnExpression");
+      btnColumnExpression.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnColumnExpression.setBorder(emptyborder1);
+      jpanel1.add(btnColumnExpression,cc.xy(1,1));
+
+      btnColumnExpressionHistory.setActionCommand("...");
+      btnColumnExpressionHistory.setName("btnColumnExpressionHistory");
+      btnColumnExpressionHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnColumnExpressionHistory.setBorder(emptyborder2);
+      jpanel1.add(btnColumnExpressionHistory,cc.xy(1,3));
+
+      btnColumnExpressionBookmarks.setActionCommand("...");
+      btnColumnExpressionBookmarks.setName("btnColumnExpressionBookmarks");
+      btnColumnExpressionBookmarks.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnColumnExpressionBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnColumnExpressionBookmarks,cc.xy(1,5));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4,6 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.xml	(revision 46118)
@@ -0,0 +1,805 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/featurequery/DefaultFeatureQueryGroupByPanelView.xml</at>
+   <at name="path">src/main/java/org/gvsig/fmap/dal/swing/impl/featurequery/DefaultFeatureQueryGroupByPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">2</at>
+            <at name="name">tabGroup</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Group_by</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.719918204</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.JPanel</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JPanel</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <at name="name">pnlGroupByAttributes</at>
+                              <at name="width">952</at>
+                              <at name="height">428</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">_Aggregate_functions</at>
+                   <at name="icon">
+                    <object classname="com.jeta.forms.store.properties.IconProperty">
+                     <at name="embedded">false</at>
+                     <at name="width">0</at>
+                     <at name="height">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">embedded.661854866</at>
+                     <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">3</at>
+                             <at name="colspan">3</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.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="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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">lstAttributes</at>
+                              <at name="width">950</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </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="height">348</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">3</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="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="name">cboAggretateFunctions</at>
+                              <at name="width">952</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">20</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">4</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.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="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.EmptyBorderProperty">
+                                     <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                      <at name="name">border</at>
+                                     </super>
+                                     <at name="top">2</at>
+                                     <at name="left">2</at>
+                                     <at name="bottom">2</at>
+                                     <at name="right">2</at>
+                                    </object>
+                                   </at>
+                                  </item>
+                                 </object>
+                                </at>
+                               </object>
+                              </at>
+                              <at name="actionCommand">...</at>
+                              <at name="icon">
+                               <object classname="com.jeta.forms.store.properties.IconProperty">
+                                <at name="embedded">false</at>
+                                <at name="path">src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-filter.png</at>
+                                <at name="description">common-filter.png</at>
+                                <at name="width">16</at>
+                                <at name="height">16</at>
+                               </object>
+                              </at>
+                              <at name="name">btnAttributesFilter</at>
+                              <at name="width">20</at>
+                              <at name="height">20</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">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.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="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="name">txtAttributesFilter</at>
+                              <at name="width">921</at>
+                              <at name="height">20</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">5</at>
+                             <at name="colspan">3</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="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="background" object="color">236,233,216</at>
+                              <at name="editable">false</at>
+                              <at name="name">txtCurrentAttributeName</at>
+                              <at name="width">952</at>
+                              <at name="height">20</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="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>
+                         <at name="name"/>
+                         <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>
+                        </object>
+                       </at>
+                      </object>
+                     </at>
+                     <at name="cellpainters">
+                      <object classname="com.jeta.forms.store.support.Matrix">
+                       <at name="rows">
+                        <object classname="[Ljava.lang.Object;" size="8">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="5"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">997</at>
+            <at name="tabCount">2</at>
+            <at name="height">510</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="3">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryCalculatedColumnsPanel.java	(revision 46118)
@@ -0,0 +1,743 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+import java.util.List;
+import java.util.logging.Level;
+import javax.swing.DefaultListModel;
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.ListModel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.text.JTextComponent;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.featurequery.FeatureQueryCalculatedColumnsPanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.pickercontroller.DataTypePickerController;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureQueryCalculatedColumnsPanel
+        extends DefaultFeatureQueryCalculatedColumnsPanelView
+        implements FeatureQueryCalculatedColumnsPanel {
+    
+    private class AttributeListElement extends ListElement {
+        
+        public AttributeListElement(FeatureAttributeDescriptor value) {
+            super(value.getLabel(), value);
+        }
+        
+        @Override
+        public String getLabel() {
+            return ((FeatureAttributeDescriptor) this.getValue()).getName();
+        }
+        
+    }
+
+    private class ColumnController implements DocumentListener, ChangeListener, ActionListener {
+
+        private final JTextComponent txtName;
+        private final JComboBox cboDataType;
+        private final JButton btnDataType;
+        private final JButton btnExpressionBookmarks;
+        private final JButton btnExpressionHistory;
+        private final JButton btnExpression;
+        private final JTextComponent txtExpression;
+        private ExpressionPickerController expPicker;
+        private DataTypePickerController pickerDataType;
+        private boolean hasChanges;
+        private final JTextComponent txtSize;
+        private final JTextComponent txtPrecision;
+        private final JTextComponent txtScale;
+        
+        private final Logger LOGGER = LoggerFactory.getLogger(ColumnController.class);
+        private final JButton btnColumnMore;
+        private final JButton btnApplyChanges;
+
+        public ColumnController(
+                JTextComponent txtName,
+                JComboBox cboDataType,
+                JButton btnDataType,
+                JTextComponent txtExpression,
+                JButton btnExpression,
+                JButton btnExpressionHistory,
+                JButton btnExpressionBookmarks,
+                JTextComponent txtSize,
+                JTextComponent txtPrecision,
+                JTextComponent txtScale,
+                JButton btnApplyChanges,
+                JButton btnColumnMore
+        ) {
+            this.txtName = txtName;
+            this.cboDataType = cboDataType;
+            this.btnDataType = btnDataType;
+            this.txtExpression = txtExpression;
+            this.btnExpression = btnExpression;
+            this.btnExpressionHistory = btnExpressionHistory;
+            this.btnExpressionBookmarks = btnExpressionBookmarks;
+            this.txtSize = txtSize;
+            this.txtPrecision = txtPrecision;
+            this.txtScale = txtScale;
+            this.btnApplyChanges = btnApplyChanges;
+            this.btnColumnMore = btnColumnMore;
+            this.hasChanges = false;
+            this.initComponents();
+            this.setEnabled(false);
+        }
+
+        public void initComponents() {
+            this.pickerDataType = ToolsSwingLocator.getToolsSwingManager().createDataTypePickerController(this.cboDataType, this.btnDataType, false);
+
+            ExpressionEvaluatorSwingManager managerExpSwing = ExpressionEvaluatorSwingLocator.getManager();
+            this.expPicker = managerExpSwing.createExpressionPickerController(
+                    txtExpression,
+                    btnExpression,
+                    btnExpressionBookmarks,
+                    btnExpressionHistory
+            );
+            
+
+            this.txtName.getDocument().addDocumentListener(this);
+            this.cboDataType.addActionListener(this);
+            this.txtExpression.getDocument().addDocumentListener(this);
+            this.txtSize.getDocument().addDocumentListener(this);
+            this.txtPrecision.getDocument().addDocumentListener(this);
+            this.txtScale.getDocument().addDocumentListener(this);
+            //Todo: que el listener expresion lo gestion el picker
+            
+            this.cboDataType.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent ae) {
+                    doSetDefaultValuesForDataType();
+                    doEnabledByDataType();
+                }
+            });
+
+        }
+        
+        public void doEnabledByDataType() {
+            JComboBox comboBox = cboDataType;
+            if (comboBox.getSelectedItem()==null) {
+                return;
+            }
+            DataType dataType = (DataType) comboBox.getSelectedItem();
+            txtSize.setEnabled(dataType.supportSize());
+            txtPrecision.setEnabled(dataType.supportPrecision());
+            txtScale.setEnabled(dataType.supportScale());
+        }
+        
+        public void doSetDefaultValuesForDataType() {
+            if (this.cboDataType.getSelectedItem()==null) {
+                return;
+            }
+            DataType dataType = (DataType) this.cboDataType.getSelectedItem();
+            if (dataType.supportSize() && txtSize.getText().isEmpty()) {
+                txtSize.setText(String.valueOf(dataType.getDefaultSize()));
+            } else if (!dataType.supportSize()) {
+                txtSize.setText("");
+            }
+
+            if (dataType.supportPrecision() && txtPrecision.getText().isEmpty()) {
+                txtPrecision.setText(String.valueOf(dataType.getDefaultPrecision()));
+            } else if (!dataType.supportPrecision()) {
+                txtPrecision.setText("");
+            }
+
+            if (dataType.supportScale() && txtScale.getText().isEmpty()) {
+                txtScale.setText(String.valueOf(dataType.getDefaultScale()));
+            } else if (!dataType.supportScale()) {
+                txtScale.setText("");
+            }
+        }
+
+        public boolean hasChanges() {
+            return this.hasChanges;
+        }
+
+        public void setEnabled(boolean enabled) {
+            this.txtName.setEnabled(enabled);
+            this.expPicker.setEnabled(enabled);
+            this.cboDataType.setEnabled(enabled);
+            this.txtSize.setEnabled(enabled);
+            this.txtPrecision.setEnabled(enabled);
+            this.txtScale.setEnabled(enabled);
+            this.btnApplyChanges.setEnabled(enabled);
+            this.btnColumnMore.setEnabled(enabled);
+        }
+
+        public void clean() {
+            this.txtName.setText("");
+            this.expPicker.set(null);
+            this.cboDataType.setSelectedIndex(0);
+            this.txtSize.setText("");
+            this.txtPrecision.setText("");
+            this.txtScale.setText("");
+            this.btnApplyChanges.setEnabled(false);
+            this.btnColumnMore.setEnabled(false);
+            this.hasChanges = false;
+
+        }
+
+        public void put(EditableFeatureAttributeDescriptor attr) {
+            this.clean();
+            this.txtName.setText(attr.getName());
+            FeatureAttributeEmulatorExpression emu = (FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator();
+            if (emu != null) {
+                try {
+                    this.expPicker.set(emu.getExpression().clone());
+                } catch (CloneNotSupportedException ex) {
+                    LOGGER.warn("Not able to clone expression.", ex);
+                    throw new RuntimeException(ex);
+                }
+            }
+            this.pickerDataType.set(attr.getDataType());
+            Coercion coerceString = ToolsLocator.getDataTypesManager().get(DataTypes.STRING).getCoercion();
+            txtSize.setEnabled(attr.getDataType().supportSize());
+            if (attr.getDataType().supportSize()) {
+                try {
+                    this.txtSize.setText((String) coerceString.coerce(attr.getSize()));
+                } catch (CoercionException ex) {
+                    LOGGER.warn("Not able to coerce text to integer from size box.", ex);
+                }
+            }
+            txtPrecision.setEnabled(attr.getDataType().supportPrecision());
+            if (attr.getDataType().supportPrecision()) {
+                try {
+                    this.txtPrecision.setText((String) coerceString.coerce(attr.getPrecision()));
+                } catch (CoercionException ex) {
+                    LOGGER.warn("Not able to coerce text to integer from precision box.", ex);
+                }
+            }
+            txtScale.setEnabled(attr.getDataType().supportScale());
+            if (attr.getDataType().supportScale()) {
+                try {
+                    this.txtScale.setText((String) coerceString.coerce(attr.getScale()));
+                } catch (CoercionException ex) {
+                    LOGGER.warn("Not able to coerce text to integer from scale box.", ex);
+                }
+            }
+//            doEnabledByDataType();
+            this.btnColumnMore.setEnabled(true);
+            this.btnApplyChanges.setEnabled(false);
+            this.hasChanges = false;
+        }
+
+        public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor attr) {
+            attr.setName(this.txtName.getText());
+            try {
+                Expression exp = this.expPicker.get();
+                if (exp!=null) {
+                    attr.setFeatureAttributeEmulator(exp.clone());
+                } else {
+                    attr.setFeatureAttributeEmulator((Expression) null);
+                }
+            } catch (CloneNotSupportedException ex) {
+                LOGGER.warn("Not able to clone expression.", ex);
+                throw new RuntimeException(ex);
+            }
+            attr.setDataType(this.pickerDataType.get());
+            Coercion coerceInteger = ToolsLocator.getDataTypesManager().get(DataTypes.INTEGER).getCoercion();
+            try {
+                if (attr.getDataType().supportSize()) {
+                    attr.setSize((int) coerceInteger.coerce(this.txtSize.getText()));
+                }
+            } catch (CoercionException ex) {
+                LOGGER.warn("Not able to coerce text to integer from size box.", ex);
+            }
+            try {
+                if (attr.getDataType().supportPrecision()) {
+                    attr.setPrecision((int) coerceInteger.coerce(this.txtPrecision.getText()));
+                }
+            } catch (CoercionException ex) {
+                LOGGER.warn("Not able to coerce text to integer from precision box.", ex);
+            }
+            try {
+                if (attr.getDataType().supportScale()) {
+                    attr.setScale((int) coerceInteger.coerce(this.txtScale.getText()));
+                }
+            } catch (CoercionException ex) {
+                LOGGER.warn("Not able to coerce text to integer from scale box.", ex);
+            }
+            this.hasChanges = false;
+            this.btnColumnMore.setEnabled(true);
+            this.btnApplyChanges.setEnabled(false);
+            return attr;
+        }
+
+        private void doHasChanges() {
+            this.btnApplyChanges.setEnabled(true);
+            this.hasChanges = true;
+        }
+
+        @Override
+        public void insertUpdate(DocumentEvent de) {
+            doHasChanges();
+        }
+
+        @Override
+        public void removeUpdate(DocumentEvent de) {
+            doHasChanges();
+        }
+
+        @Override
+        public void changedUpdate(DocumentEvent de) {
+            doHasChanges();
+        }
+
+        @Override
+        public void stateChanged(ChangeEvent ce) {
+            doHasChanges();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            doHasChanges();
+        }
+        
+        public void setStore(FeatureStore store) {
+          DALSwingLocator.getManager().configureExpressionBuilder(expPicker, store);
+//             FeatureStoreElement calculatedStoreElement = DALSwingLocator.getSwingManager()
+//                    .createFeatureStoreElement();
+//            calculatedStoreElement.setFeatureStore(store);
+//            this.expPicker.removeAllSymbolTables();
+//            this.expPicker.addElement(calculatedStoreElement);
+        }
+    }
+
+    private ColumnController columnController;
+    private FeatureStore store;
+    private FeatureType featureType;
+    private FeatureQuery query;
+//    private JExpressionBuilder pckExpression;
+    private static final String COLUMN_DEFAULT_NAME = "Field";
+    private EditableFeatureAttributeDescriptor actualEditableAttribute;
+    private DefaultListModel lstAttributesModel;
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureQueryCalculatedColumnsPanel.class);
+
+    public DefaultFeatureQueryCalculatedColumnsPanel() {
+        this.columnController = null;
+        this.initComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        String name = FilenameUtils.getBaseName(imageName);
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+        if (theme.exists(name)) {
+            return theme.get(name);
+        }
+        URL url = this.getClass().getResource(name + ".png");
+        if (url == null) {
+            return null;
+        }
+        return new ImageIcon(url);
+    }
+
+    @Override
+    public void setStore(FeatureStore store) {
+        try {
+            this.featureType = store.getDefaultFeatureType();
+            this.store = store;
+            this.query = store.createFeatureQuery();
+            this.columnController.setStore(store);
+//            this.pckExpression = DALSwingLocator.getManager().createQueryFilterExpresion(store);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't assign store", ex);
+        }
+    }
+
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        ImageIcon icon = theme.get("picker-datatype");
+        this.btnColumnDataType.setIcon(icon);
+        toolsSwingManager.translate(this.lblExpression);
+        toolsSwingManager.translate(this.lblName);
+        toolsSwingManager.translate(this.lblType);
+        toolsSwingManager.translate(this.lblSize);
+        toolsSwingManager.translate(this.lblPrecision);
+        toolsSwingManager.translate(this.lblScale);
+        toolsSwingManager.translate(this.btnApplyChanges);
+        toolsSwingManager.translate(this.btnColumnMore);
+
+        this.columnController = new ColumnController(
+                this.txtColumnName,
+                this.cboColumnDataType,
+                this.btnColumnDataType,
+                this.txtColumnExpression,
+                this.btnColumnExpression,
+                this.btnColumnExpressionHistory,
+                this.btnColumnExpressionBookmarks,
+                this.txtColumnSize,
+                this.txtColumnPrecision,
+                this.txtColumnScale,
+                this.btnApplyChanges,
+                this.btnColumnMore
+        );
+//        this.lstAttributes.setCellRenderer(new FeatureAttributeListCellRenderer());
+
+        this.lstAttributes.addListSelectionListener((ListSelectionEvent e) -> {
+            if (e.getValueIsAdjusting()) {
+                return;
+            }
+            doSelectAttribute();
+        });
+
+        Dimension sz = this.getPreferredSize();
+        if (sz.width < DEFAULT_WIDTH) {
+            sz.width = DEFAULT_WIDTH;
+        }
+        if (sz.height < DEFAULT_HEIGHT) {
+            sz.height = DEFAULT_HEIGHT;
+        }
+        this.setPreferredSize(sz);
+
+        this.lstAttributesModel = new DefaultListModel<ListElement<EditableFeatureAttributeDescriptor>>();
+//        this.lstAttributesModel = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
+        this.lstAttributes.setModel(lstAttributesModel);
+
+        this.lstAttributes.setSelectionModel(new DefaultListSelectionModel() {
+
+            @Override
+            public void setSelectionInterval(int index0, int index1) {
+                if (checkColumnControllerHasChangesWithUser()) {
+                    super.setSelectionInterval(index0, index1);
+                    doSelectAttribute();
+                }
+            }
+
+        });
+
+        this.btnAdd.addActionListener((ActionEvent e) -> {
+            if (checkColumnControllerHasChangesWithUser()) {
+                doAdd();
+            }
+        });
+
+        this.btnRemove.addActionListener((ActionEvent e) -> {
+            doRemove();
+        });
+
+        this.btnUp.addActionListener((ActionEvent e) -> {
+            doUp(lstAttributes);
+        });
+
+        this.btnDown.addActionListener((ActionEvent e) -> {
+            doDown(lstAttributes);
+        });
+
+        this.btnApplyChanges.addActionListener((ActionEvent e) -> {
+            doApplyChanges();
+        });
+
+        this.btnColumnMore.addActionListener((ActionEvent e) -> {
+            doColumnMore();
+        });
+        
+    }
+
+    private boolean checkColumnControllerHasChangesWithUser() {
+        if (this.hasChanges()) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            String message = i18n.getTranslation("_Changes_has_not_been_saved_Are_you_sure_you_want_to_continue");
+            String title = i18n.getTranslation("_Changes_not_saved");
+            int r = ToolsSwingLocator.getThreadSafeDialogsManager().confirmDialog(message, title,
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+            if (r == JOptionPane.NO_OPTION) {
+                return false;
+            }
+
+        }
+        return true;
+    }
+
+    private void doColumnMore() {
+        if (this.columnController == null) {
+            return;
+        }
+        final I18nManager i18n = ToolsLocator.getI18nManager();
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        final FeatureTypeAttributePanel panel = DALSwingLocator.getSwingManager().createFeatureTypeAttributePanel();
+        panel.clean();
+//                panel.setNameAsNew(featureType);
+        panel.put(actualEditableAttribute);
+        panel.setMode(FeatureTypePanel.MODE_EDIT_ALL);
+        final Dialog dialog = winManager.createDialog(
+                panel.asJComponent(),
+                i18n.getTranslation("_Extra_column"),
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (dialog.getAction() != WindowManager_v2.BUTTONS_OK) {
+                    return;
+                }
+                try {
+                    FeatureAttributeDescriptor prev = actualEditableAttribute.getCopy();
+                    panel.fetch(actualEditableAttribute);
+                    columnController.put(actualEditableAttribute);
+                    if (!prev.equals(actualEditableAttribute)) {
+                        columnController.doHasChanges();
+                    }
+                } catch (Exception ex) {
+                    LOGGER.warn("Problems updating feature descriptor.", ex);
+                }
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+    }
+
+    public boolean checkPanel(StringBuilder msg) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        if (this.hasChanges()) {
+            int r = ToolsSwingLocator.getThreadSafeDialogsManager().confirmDialog(
+                    i18n.getTranslation("_Changes_has_not_been_saved_Are_you_sure_you_want_to_continue"),
+                    i18n.getTranslation("_Changes_not_saved"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+            if (r == JOptionPane.NO_OPTION) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean hasChanges() {
+        return this.columnController.hasChanges();
+    }
+
+    private void doSelectAttribute() {
+        EditableFeatureAttributeDescriptor value = null;
+        if (this.lstAttributes.getSelectedValue() != null) {
+            ListElement<EditableFeatureAttributeDescriptor> selectedValue = (ListElement<EditableFeatureAttributeDescriptor>) this.lstAttributes.getSelectedValue();
+            if (selectedValue != null) {
+                value = selectedValue.getValue();
+            }
+        }
+        if (value == null) {
+            this.columnController.clean();
+            this.columnController.setEnabled(false);
+            this.actualEditableAttribute = null;
+
+        } else {
+            //EditableFeatureAttributeDescriptor value = node.getValue();
+            this.actualEditableAttribute = value;
+            columnController.setEnabled(true);
+            columnController.put(value);
+        }
+    }
+
+    @Override
+    public FeatureQuery fetch(FeatureQuery query) {
+        if (hasChanges()) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            String message = i18n.getTranslation("_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue");
+            String title = i18n.getTranslation("_Changes_not_saved");
+            int r = ToolsSwingLocator.getThreadSafeDialogsManager().confirmDialog(message, title,
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE);
+            if (r == JOptionPane.YES_NO_OPTION) {
+                doApplyChanges();
+            }
+        }
+        
+        if (query == null) {
+            return this.query.getCopy();
+        }
+
+        this.query.getExtraColumn().clear();
+        for (int i = 0; i < lstAttributesModel.getSize(); i++) {
+            ListElement<EditableFeatureAttributeDescriptor> element = (ListElement<EditableFeatureAttributeDescriptor>) lstAttributesModel.get(i);
+            EditableFeatureAttributeDescriptor newExtraColumn = this.query.getExtraColumn().add(element.getValue().getName(), element.getValue().getType());
+            newExtraColumn.copyFrom(element.getValue());
+        }
+        query.copyFrom(this.query);
+
+        return query;
+    }
+
+    @Override
+    public FeatureQuery fetch() {
+        return this.fetch(null);
+    }
+
+    @Override
+    public void put(FeatureQuery query) {
+        this.query.copyFrom(query);
+        addExtraColumns(this.query);
+    }
+
+    private void addExtraColumns(FeatureQuery query) {
+        List<EditableFeatureAttributeDescriptor> cols = query.getExtraColumn().getColumns();
+        if (cols == null || cols.isEmpty()) {
+            return;
+        }
+        for (EditableFeatureAttributeDescriptor col : cols) {
+            ListElement lf = new AttributeListElement(col);
+            this.lstAttributesModel.addElement(lf);
+        }
+        if (this.lstAttributesModel.getSize() > 0) {
+            this.lstAttributes.setSelectedIndex(0);
+        }
+    }
+
+    public static void selfRegister() {
+        String[][] iconNames = new String[][]{
+            new String[]{"dalswing", "featurequery-column-add"},
+            new String[]{"dalswing", "featurequery-column-remove"},
+            new String[]{"dalswing", "featurequery-column-down"},
+            new String[]{"dalswing", "featurequery-column-up"}
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = DefaultFeatureQueryOrderPanel.class.getResource(icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+    }
+
+    private void doAdd() {
+        int id = 0;
+        String newName = COLUMN_DEFAULT_NAME;
+        while (checkIfValueExistInModel(newName, this.lstAttributesModel)) {
+            newName = COLUMN_DEFAULT_NAME + "_" + id;
+            id += 1;
+        }
+        EditableFeatureAttributeDescriptor newAttr = DALLocator.getDataManager().createFeatureAttributeDescriptor(
+                newName,
+                DataTypes.STRING
+        );
+        if (newAttr.getDataType().supportSize()) {
+            newAttr.setSize(newAttr.getDataType().getDefaultSize());
+        }
+        this.columnController.put(newAttr);
+        this.columnController.setEnabled(true);
+
+        this.lstAttributesModel.addElement(new AttributeListElement(newAttr));
+        ListElement.setSelected(this.lstAttributes, newAttr);
+        this.lstAttributes.revalidate();
+        this.lstAttributes.repaint();
+        this.actualEditableAttribute = newAttr;
+
+    }
+
+    private boolean checkIfValueExistInModel(String name, ListModel<ListElement<EditableFeatureAttributeDescriptor>> model) {
+        for (int i = 0; i < model.getSize(); i++) {
+            EditableFeatureAttributeDescriptor element = model.getElementAt(i).getValue();
+            if (StringUtils.equals(element.getLabel(), name)) {
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    private void doRemove() {
+        ListSelectionModel lsm = lstAttributes.getSelectionModel();
+        DefaultListModel model = (DefaultListModel) this.lstAttributes.getModel();
+        int actualIndex = lsm.getMinSelectionIndex();
+        Object selectedValue = this.lstAttributes.getSelectedValue();
+        this.lstAttributesModel.removeElement(selectedValue);
+        this.columnController.clean();
+
+        int size = model.size();
+        if (size == 0) {
+            //List is empty: disable delete, up, and down buttons.
+        } else {
+            //Adjust the selection.
+            if (model.getSize() == 0) {
+
+            } else if (actualIndex >= model.getSize()) {
+                lstAttributes.setSelectedIndex(model.getSize() - 1);
+            } else {
+                lstAttributes.setSelectedIndex(actualIndex);
+            }
+        }
+    }
+
+    private void doApplyChanges() {
+        this.columnController.fetch(this.actualEditableAttribute);
+        this.lstAttributes.invalidate();
+        this.lstAttributes.repaint();
+    }
+
+    private void doUp(JList lstColumns) {
+        int moveMe = lstColumns.getSelectedIndex();
+        if (moveMe != 0) {
+            //not already at top
+            swap(lstColumns, moveMe, moveMe - 1);
+            lstColumns.setSelectedIndex(moveMe - 1);
+            lstColumns.ensureIndexIsVisible(moveMe - 1);
+        }
+    }
+
+    private void doDown(JList lstColumns) {
+        int moveMe = lstColumns.getSelectedIndex();
+        if (moveMe != lstColumns.getModel().getSize() - 1) {
+            //not already at bottom
+            swap(lstColumns, moveMe, moveMe + 1);
+            lstColumns.setSelectedIndex(moveMe + 1);
+            lstColumns.ensureIndexIsVisible(moveMe + 1);
+        }
+    }
+
+    private void swap(JList lstColumns, int a, int b) {
+        DefaultListModel model = (DefaultListModel) lstColumns.getModel();
+        Object aObject = model.getElementAt(a);
+        Object bObject = model.getElementAt(b);
+        model.set(a, bObject);
+        model.set(b, aObject);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featurequery/DefaultFeatureQueryGroupByPanelView.java	(revision 46118)
@@ -0,0 +1,197 @@
+package org.gvsig.fmap.dal.swing.impl.featurequery;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class DefaultFeatureQueryGroupByPanelView extends JPanel
+{
+   JTabbedPane tabGroup = new JTabbedPane();
+   JPanel pnlGroupByAttributes = new JPanel();
+   JList lstAttributes = new JList();
+   JComboBox cboAggretateFunctions = new JComboBox();
+   JButton btnAttributesFilter = new JButton();
+   JTextField txtAttributesFilter = new JTextField();
+   JTextField txtCurrentAttributeName = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public DefaultFeatureQueryGroupByPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabGroup.setName("tabGroup");
+      tabGroup.addTab("_Group_by",null,createPanel1());
+      tabGroup.addTab("_Aggregate_functions",null,createPanel2());
+      jpanel1.add(tabGroup,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      pnlGroupByAttributes.setName("pnlGroupByAttributes");
+      jpanel1.add(pnlGroupByAttributes,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstAttributes.setName("lstAttributes");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstAttributes);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,3,3,1));
+
+      cboAggretateFunctions.setName("cboAggretateFunctions");
+      jpanel1.add(cboAggretateFunctions,cc.xywh(2,7,3,1));
+
+      btnAttributesFilter.setActionCommand("...");
+      btnAttributesFilter.setIcon(loadImage("src/main/resources/org/gvsig/fmap/dal/swing/impl/featurequery/common-filter.png"));
+      btnAttributesFilter.setName("btnAttributesFilter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnAttributesFilter.setBorder(emptyborder1);
+      jpanel1.add(btnAttributesFilter,cc.xy(4,1));
+
+      txtAttributesFilter.setName("txtAttributesFilter");
+      jpanel1.add(txtAttributesFilter,cc.xy(2,1));
+
+      txtCurrentAttributeName.setBackground(new Color(236,233,216));
+      txtCurrentAttributeName.setEditable(false);
+      txtCurrentAttributeName.setName("txtCurrentAttributeName");
+      jpanel1.add(txtCurrentAttributeName,cc.xywh(2,5,3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,5 },new int[]{ 1,2,3,4,5,6,7,8 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,150 @@
+/* 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.impl.DefaultJFeaturesForm;
+import org.gvsig.featureform.swing.impl.dynformfield.ImageByteArray.JDynFormFieldImageByteArrayFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.ImageFile.JDynFormFieldImageFileFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.ImageURL.JDynFormFieldImageURLFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.deprecated.linkedentities.JDynFormFieldFeaturesTableLinkFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.deprecated.linkedentity.JDynFormFieldFeatureLinkFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.features.JDynFormFieldRelatedFeaturesFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.linkforeingkey.JDynFormFieldForeingKeyFactory;
+import org.gvsig.featureform.swing.impl.dynformfield.selectableforeingkey.JDynFormFieldSelectableForeingKeyFactory;
+import org.gvsig.fmap.dal.impl.DefaultEditingNotificationManager;
+import org.gvsig.fmap.dal.swing.DALSwingLibrary;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.fmap.dal.swing.impl.actions.ShowFormForOpenStoreParametersAction;
+import org.gvsig.fmap.dal.swing.impl.dataStoreParameters.DataStoreDynObjectParametersPanelFactory;
+import org.gvsig.fmap.dal.swing.impl.dataStoreParameters.DefaultDataStoreParametersPanelManager;
+import org.gvsig.fmap.dal.swing.impl.dynobjectutils.CreateComboModelFromTable;
+import org.gvsig.fmap.dal.swing.impl.expressionevaluator.FeatureStoreElementFactory;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryCalculatedColumnsPanel;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryGroupByPanel;
+import org.gvsig.fmap.dal.swing.impl.featurequery.DefaultFeatureQueryOrderPanel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributePanel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributeSelectionPanel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributesSelectionPanel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypePanel;
+import org.gvsig.fmap.dal.swing.impl.jdbc.JDBCConnectionPickerController;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.DistinctOn;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.DistinctOnFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.FirstAggregateOperation.FirstAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.LastAggregateOperation.LastAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.MaxAggregateOperation.MaxAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.MinAggregateOperation.MinAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.NullAggregateOperation.NullAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchPostProcess.distinctOn.SumAggregateOperation.SumAggregateOperationFactory;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
+import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultDALSwingLibrary  extends AbstractLibrary{
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDALSwingLibrary.class);
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(DALSwingLibrary.class);
+    }
+
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        DALSwingLocator.registerSwingManager(DefaultDataSwingManager.class);
+        DALSwingLocator.registerEditingNotificationManager(DefaultEditingNotificationManager.class);
+
+        DALSwingLocator.registerDataStoreParametersPanelManager(DefaultDataStoreParametersPanelManager.class);
+    }
+
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        try {
+            JDynFormFieldFeatureLinkFactory.selfRegister();
+            JDynFormFieldFeaturesTableLinkFactory.selfRegister();
+            
+            JDynFormFieldImageByteArrayFactory.selfRegister();
+            JDynFormFieldImageFileFactory.selfRegister();
+            JDynFormFieldImageURLFactory.selfRegister();
+            JDynFormFieldForeingKeyFactory.selfRegister();
+            JDynFormFieldSelectableForeingKeyFactory.selfRegister();
+            JDynFormFieldRelatedFeaturesFactory.selfRegister();
+            
+            DefaultFeatureAttributePanel.selfRegister();
+            DefaultFeatureAttributeSelectionPanel.selfRegister();
+            DefaultFeatureAttributesSelectionPanel.selfRegister();
+            DefaultFeatureTypePanel.selfRegister();
+            
+            DefaultFeatureQueryCalculatedColumnsPanel.selfRegister();
+            DefaultFeatureQueryGroupByPanel.selfRegister();
+            DefaultFeatureQueryOrderPanel.selfRegister();
+            
+            DefaultSearchPanel.selfRegister();
+            
+            JDBCConnectionPickerController.selfRegister();
+            DefaultJFeaturesForm.selfRegister();
+            DefaultSearchParameters.registerPersistence();
+
+            DynObjectManager dynObjectmanager = ToolsLocator.getDynObjectManager();
+            dynObjectmanager.registerDynMethod(new CreateComboModelFromTable("DAL.createComboModelFromTable", "XXXXXXXXXXXXXXXXXXXX."));
+            
+            DataStoreParametersPanelManager dataStoreParametersPanelManager = DALSwingLocator.getDataStoreParametersPanelManager();
+            dataStoreParametersPanelManager.registerFactory(new DataStoreDynObjectParametersPanelFactory());
+
+            DefaultEditingNotificationManager.selfRegister();
+            ProjectionPickerControllerImpl.selfRegister();
+            
+            DistinctOnFactory.selfRegister();
+            DistinctOn.registerAggregateOperation(new MinAggregateOperationFactory());
+            DistinctOn.registerAggregateOperation(new MaxAggregateOperationFactory());
+            DistinctOn.registerAggregateOperation(new SumAggregateOperationFactory());
+            DistinctOn.registerAggregateOperation(new FirstAggregateOperationFactory());
+            DistinctOn.registerAggregateOperation(new LastAggregateOperationFactory());
+            DistinctOn.registerAggregateOperation(new NullAggregateOperationFactory());
+            
+            ShowFormForOpenStoreParametersAction.selfRegister();
+
+        } catch(Exception ex) {
+            LOGGER.warn("Can't register DAL components in DynForms",ex);
+        }
+        try {
+            FeatureStoreElementFactory.selfRegister();
+        } catch(Exception ex) {
+            LOGGER.warn("Can't register DAL components in ExpressionEvaluator",ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/dynobjectutils/CreateComboModelFromTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/dynobjectutils/CreateComboModelFromTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/dynobjectutils/CreateComboModelFromTable.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.fmap.dal.swing.impl.dynobjectutils;
+
+import java.util.Formatter;
+
+import javax.swing.DefaultComboBoxModel;
+
+import org.apache.commons.lang3.StringUtils;
+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.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CreateComboModelFromTable extends AbstractDynMethod {
+	
+	public static final Logger logger = LoggerFactory.getLogger(CreateComboModelFromTable.class);
+
+    private static final String DAL_foreingCode = "DAL.foreingCode";
+    private static final String DAL_foreingDescriptionMask = "DAL.foreingDescriptionMask";
+    private static final String DAL_foreingDescriptionFields = "DAL.foreingDescriptionFields";
+    private static final String DAL_pageSize = "DAL.pageSize";
+
+    public CreateComboModelFromTable(String methodName, String description) {
+        super(methodName, description);
+    }
+
+    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
+        DefaultComboBoxModel model = new DefaultComboBoxModel();
+        try {
+            DynField_v2 field = (DynField_v2) args[0];
+            String foreignCodeName = (String) field.getTags().get(DAL_foreingCode);
+            int pageSize;
+            try {
+                pageSize = field.getTags().getInt(DAL_pageSize);
+            } catch (CoercionException ex) {
+                pageSize = 100;
+            }
+            if (pageSize < 100) {
+                pageSize = 100;
+            }
+            Tags tags = field.getTags();
+            String[] foreingDescriptionFieldNames = null;
+            String foreingDescriptionMask = (String) tags.get(DAL_foreingDescriptionMask);
+            String fieldNames = (String) tags.get(DAL_foreingDescriptionFields);
+            if (!StringUtils.isEmpty(fieldNames)) {
+                foreingDescriptionFieldNames = fieldNames.split(",");
+            }
+            if (StringUtils.isEmpty(foreingDescriptionMask)
+                    && foreingDescriptionFieldNames != null
+                    && foreingDescriptionFieldNames.length == 1) {
+                foreingDescriptionMask = "%s";
+            }
+
+            DataManager manager = DALLocator.getDataManager();
+            DataStoreParameters params = manager.createStoreParameters(tags);
+            FeatureStore store = (FeatureStore) manager.openStore((String) tags.get("dal.openstore.provider"), params);
+            FeatureSet set = store.getFeatureSet();
+            DisposableIterator it = set.fastIterator();
+            while (it.hasNext()) {
+                Feature f = (Feature) it.next();
+                DynObjectValueItem item = new DynObjectValueItem(
+                        f.get(foreignCodeName),
+                        this.getDescription(f, foreingDescriptionFieldNames, foreingDescriptionMask)
+                );
+                model.addElement(item);
+            }
+        } catch (Exception ex) {
+        	logger.debug("Error while creating ComboModelFromTable:", ex);
+        }
+        return model;
+    }
+
+    private String getDescription(Feature feature, String[] foreingDescriptionFieldNames, String foreingDescriptionMask) {
+        if (StringUtils.isEmpty(foreingDescriptionMask) || foreingDescriptionFieldNames == null) {
+            return "";
+        }
+        Object[] values = new Object[foreingDescriptionFieldNames.length];
+        for (int i = 0; i < values.length; i++) {
+            values[i] = feature.get(foreingDescriptionFieldNames[i]);
+        }
+        Formatter f = new Formatter();
+        try {
+            String description = f.format(foreingDescriptionMask, values).toString();
+            return description;
+        } catch (Exception ex) {
+            // TODO: log error
+            return "";
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement2.java	(revision 46118)
@@ -0,0 +1,267 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.GroupElement;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.ForeingKey;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeTreeModel;
+import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeTreeModel.Node;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultFeatureStoreElement2
+        extends AbstractElement
+        implements SimpleElement, GroupElement, FeatureStoreElement {
+
+    private final static String DEFAULT_ELEMENT_NAME = "store";
+    
+    private class ForeingKeyElement
+            extends FeatureAttributeElement
+            implements SimpleElement, GroupElement {
+
+        private final Node node;
+        private List<Element> elements;
+
+        public ForeingKeyElement(Element parent, Node node) {
+            super(
+                    parent,
+                    node.getFeatureStore(),
+                    node.getValue(), "featurestore-foreing-key"
+            );
+            this.node = node;
+        }
+        
+        @Override
+        public String getLabel() {
+            FeatureAttributeDescriptor attribute = this.node.getValue();
+            if( attribute!=null && attribute.isForeingKey() ) {
+                ForeingKey foreingKey = attribute.getForeingKey();
+                if (getConfig().getPreferences().getShowLabelsOfElements()) {
+                    if (!StringUtils.equals(attrdesc.getName(), attrdesc.getLabel())) {
+                        return String.format(
+                            "<html>%s<br><font size=\"2\"><i>(%s[%s])</i></font></html>", 
+                            attrdesc.getLocalizedLabel(), 
+                            attrdesc.getName(),
+                            foreingKey.getTableName()
+                        );
+                    }
+                    return String.format(
+                        "<html>%s<br><font size=\"2\"><i>([%s])</i></font></html>", 
+                        attrdesc.getLocalizedLabel(), 
+                        foreingKey.getTableName()
+                    );
+                }
+                return String.format(
+                    "<html>%s<br><font size=\"2\"><i>([%s])</i></font></html>", 
+                    attrdesc.getName(), 
+                    foreingKey.getTableName()
+                );
+            }
+            return super.getLabel();
+        }
+        
+        @Override
+        public Element get(int index) {
+            return this.getElements().get(index);
+        }
+
+        @Override
+        public int size() {
+            return this.getElements().size();
+        }
+
+        @Override
+        public Iterator<Element> iterator() {
+            return this.getElements().iterator();
+        }
+
+        @Override
+        public void addElement(Element element) {
+
+        }
+
+        @Override
+        public void addElement(Function function) {
+
+        }
+
+        @Override
+        public List<Element> getElements() {
+            if (this.elements == null) {
+                this.elements = new ArrayList<>();
+                List<Node> children = this.node.getChildren();
+                for (Node child : children) {
+                    Element e;
+                    FeatureAttributeDescriptor theAttrdesc = child.getValue();
+                    if (theAttrdesc.isForeingKey()) {
+                        e = new ForeingKeyElement(this, child);
+                    } else {
+                        e = new FeatureAttributeElement(this, child.getFeatureStore(), theAttrdesc);
+                    }
+                    e.setConfig(this.getConfig());
+                    this.elements.add(e);
+                }
+            }
+            return this.elements;
+        }
+
+        @Override
+        public Element setConfig(ExpressionBuilderConfig config) {
+            super.setConfig(config);
+            if (this.elements != null) {
+                for (Element element : this.elements) {
+                    element.setConfig(config);
+                }
+            }
+            return this;
+        }
+    }
+
+    private List<Element> elements;
+    private FeatureStore store;
+    private FeatureAttributeTreeModel treemodel;
+
+    public DefaultFeatureStoreElement2(FeatureStore store) {
+        super(DEFAULT_ELEMENT_NAME, "store", "featurestore-table");
+        this.setFeatureStore(store);
+    }
+
+    @Override
+    public Element get(int index) {
+        return this.getElements().get(index);
+    }
+
+    @Override
+    public int size() {
+        return this.getElements().size();
+    }
+
+    @Override
+    public Iterator<Element> iterator() {
+        return this.getElements().iterator();
+    }
+
+    @Override
+    public void addElement(Element element) {
+    }
+
+    @Override
+    public void addElement(Function function) {
+    }
+
+    @Override
+    public Collection<Element> getValues() {
+        return this.getElements();
+    }
+
+    @Override
+    public List<Element> getElements() {
+        if( this.treemodel==null ) {
+            return null;
+        }
+        if (this.elements == null) {
+            this.elements = new ArrayList<>();
+            Node root = (Node) treemodel.getRoot();
+            List<Node> children = root.getChildren();
+            for (Node child : children) {
+                Element e;
+                FeatureAttributeDescriptor attrdesc = child.getValue();
+                if (attrdesc.isForeingKey()) {
+                    e = new ForeingKeyElement(this, child);
+                } else {
+                    e = new FeatureAttributeElement(this, child.getFeatureStore(), attrdesc);
+                }
+                e.setConfig(this.getConfig());
+                this.elements.add(e);
+            }
+        }
+        return this.elements;
+    }
+
+    @Override
+    public String getLabel() {
+        if (this.store == null) {
+            return super.getLabel();
+        }
+        return this.store.getName();
+    }
+    
+    @Override
+    public String getRenderedValue() {
+        if (this.store == null) {
+            return super.getRenderedValue();
+        }
+        return this.store.getName();
+    }
+    
+    @Override
+    public void setName(String name) {
+        super.setName(name);
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.store;
+    }
+
+    @Override
+    public final void setFeatureStore(FeatureStore store) {
+        this.store = store;
+        this.init();
+    }
+
+    @Override
+    public Element setConfig(ExpressionBuilderConfig config) {
+        super.setConfig(config);
+        this.init();
+        return this;
+    }
+
+    private void init() {
+        this.treemodel = null;
+        this.elements = null;
+        if (this.store == null || this.getConfig()==null ) {
+            return;
+        } 
+        if( StringUtils.equalsIgnoreCase(DEFAULT_ELEMENT_NAME, this.store.getName()) ) {
+            this.setName(this.store.getName());
+        }
+        if (this.getConfig().getPreviewSymbolTable()==null) { 
+        Feature sampleFeature = this.store.getSampleFeature();
+           if( sampleFeature!=null ) {
+                FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
+                featureSymbolTable.setFeature(sampleFeature);
+                this.getConfig().setPreviewSymbolTable(featureSymbolTable.createParent());
+            } 
+        }     
+        this.treemodel = new FeatureAttributeTreeModel(this.store, this.store.getDefaultFeatureTypeQuietly(), true, Search.ALL_FILTER);
+    }
+
+    @Override
+    public void reload() {
+        if( this.elements!=null ) {
+            for (Element element : this.elements) {
+                element.reload();
+            }
+        }
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureAttributeElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureAttributeElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureAttributeElement.java	(revision 46118)
@@ -0,0 +1,253 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import javax.swing.SwingUtilities;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
+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.tools.ToolsLocator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FeatureAttributeElement
+        extends AbstractElement
+        implements
+        SimpleElement
+    {
+
+    final FeatureStore store;
+    final FeatureAttributeDescriptor attrdesc;
+    List<Element> values;
+    boolean hasMoreValues;
+    private final Element parent;
+
+    FeatureAttributeElement(Element parent, FeatureStore store, FeatureAttributeDescriptor attrdesc) {
+        this(parent, store, attrdesc, "featurestore-column");
+    }
+    
+    FeatureAttributeElement(Element parent, FeatureStore store, FeatureAttributeDescriptor attrdesc, String iconName) {
+        super(attrdesc.getName(),  buildRenderedValueForAttribute(store,attrdesc), iconName);
+        this.parent = parent;
+        this.store = store;
+        this.attrdesc = attrdesc;
+        this.hasMoreValues = false;
+
+        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        String theIconName = attrdesc.getDataType().getIconName();
+        IconTheme.Icon theIcon = iconTheme.getThemeIcon(theIconName);
+        if( theIcon!=null && theIcon.getURL()!=null ) {
+            this.icon = ToolsSwingLocator.getToolsSwingManager().createCompoundIcon(
+                    SwingUtilities.HORIZONTAL, 
+                    1, 
+                    SwingUtilities.LEFT, 
+                    SwingUtilities.TOP,
+                    this.getIcon(),
+                    theIcon.getImageIcon()
+            );
+        }
+    }
+
+    private static String buildRenderedValueForAttribute(FeatureStore store, FeatureAttributeDescriptor attrdesc) {
+      String attrname = attrdesc.getName();
+      String storename = store.getName();
+      if( StringUtils.equalsIgnoreCase(storename, attrname) ) {
+        return addQuotesIfNeeded(storename)+"."+addQuotesIfNeeded(attrname);
+      }
+      return addQuotesIfNeeded(attrname);
+    }
+    
+    public Element getParent() {
+        return this.parent;
+    }
+
+    @Override
+    public String getRenderedValue() {
+        if( this.parent instanceof DefaultFeatureStoreElement2 ) {
+            return super.getRenderedValue();
+        }
+        List<String> fieldNames = new ArrayList<>();
+        fieldNames.add(attrdesc.getName());
+        Element theParent = this.parent;
+        while( theParent!=null ) {
+            if( theParent instanceof DefaultFeatureStoreElement2 ) {
+                break;
+            }
+            if( !(theParent instanceof FeatureAttributeElement) ) {
+                break; // Esto no deberia pasar
+            }
+            fieldNames.add(0, theParent.getName());
+            theParent = ((FeatureAttributeElement)theParent).getParent();
+        }
+
+        DALExpressionBuilder bbuilder = DALLocator.getDataManager().createDALExpressionBuilder();
+        String formula = bbuilder.foreing_value(fieldNames.get(0), fieldNames.get(1)).toString();
+        return formula;
+    }
+    
+    
+    @Override
+    public void reload() {
+        this.values = null;
+        hasMoreValues = false;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        if (this.getConfig().getPreferences().isSQLCompatible()) {
+            if (this.attrdesc.isComputed()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean hasMoreValues() {
+        return this.hasMoreValues;
+    }
+
+    @Override
+    public List<Element> getValues() {
+        if (this.values == null) {
+            hasMoreValues = false;
+            ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+            final List<Object> values = new ArrayList<>();
+            final int limit = this.getConfig() == null ? 60 : this.getConfig().getPreferences().getSimpleElementsLimit();
+            final long timeLimit = System.currentTimeMillis() + limit * 1000;
+            try {
+                FeatureSet set = this.store.getFeatureSet();
+                set.accept(new Visitor() {
+                    @Override
+                    public void visit(Object o) throws VisitCanceledException, BaseException {
+                        Object value = ((Feature) o).get(attrdesc.getName());
+                        if (!values.contains(value)) {
+                            values.add(value);
+                        }
+                        if (System.currentTimeMillis() > timeLimit) {
+                            hasMoreValues = true;
+                            throw new VisitCanceledException();
+                        }
+                    }
+                });
+            } catch (VisitCanceledException ex) {
+
+            } catch (Exception ex) {
+                // FIXME
+            }
+            this.values = new ArrayList<>();
+            if (!values.isEmpty()) {
+                LabeledValue[] availableValues = this.attrdesc.getAvailableValues();
+                Map<String, String> availableValuesMap = new HashMap<>();
+                if( availableValues!=null ) {
+                    for (LabeledValue availableValue : availableValues) {
+                        availableValuesMap.put(
+                                Objects.toString(availableValue.getValue()),
+                                availableValue.getLabel()
+                        );
+                    }
+                }
+                for (Object value : values) {
+                    String key = Objects.toString(value);
+                    String label = availableValuesMap.getOrDefault(key, null);
+                    ConstantElement e = manager.createConstantElement(
+                            value,
+                            label
+                    );
+                    this.values.add(e);
+                    e.setConfig(this.getConfig());
+                }
+            }
+        }
+        return this.values;
+    }
+
+    @Override
+    public String getName() {
+        return attrdesc.getName();
+    }
+    
+    @Override
+    public String getLabel() {
+        if (getConfig().getPreferences().getShowLabelsOfElements()) {
+            if (!StringUtils.equals(attrdesc.getName(), attrdesc.getLabel())) {
+                return String.format(
+                    "<html>%s<br><font size=\"2\"><i>(%s)</i></font></html>", 
+                    attrdesc.getLocalizedLabel(), 
+                    attrdesc.getName()
+                );
+            }
+            return String.format(
+                "<html>%s</html>", 
+                attrdesc.getLocalizedLabel()
+            );
+        }
+        return String.format(
+            "<html>%s</html>", 
+            attrdesc.getName()
+        );
+    }
+
+    @Override
+    public String getDescription() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        StringBuilder html = new StringBuilder();
+        html.append("<html>\n");
+
+        html.append("<b>").append(this.attrdesc.getName()).append("</b><br>");
+        if( !StringUtils.equalsIgnoreCase(attrdesc.getName(), attrdesc.getLabel()) ) {
+            html.append(this.attrdesc.getLabel()).append("<br>\n");
+        }
+        html.append("<br>\n");
+        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.store.getName()).append("<br>\n");
+        html.append("<b>").append(i18n.getTranslation("_Name")).append("</b> ").append(this.getName()).append("<br>\n");
+        html.append("<b>").append(i18n.getTranslation("_Label")).append("</b> ").append(this.attrdesc.getLocalizedLabel()).append("<br>\n");
+        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.attrdesc.getDataTypeName()).append("<br>\n");
+        if (!StringUtils.isBlank(this.attrdesc.getDescription())
+                && StringUtils.equalsAnyIgnoreCase(this.getName(), this.attrdesc.getDescription())) {
+            html.append("<b>").append(i18n.getTranslation("_Description")).append("</b><br>\n");
+            html.append(this.attrdesc.getDescription().replace("\n", "<br>")).append("<br>\n");
+        }
+        html.append("</html>\n");
+        return html.toString();
+    }
+
+    @Override
+    @SuppressWarnings("empty-statement")
+    public void used() {
+        attrdesc.recentUsed();
+    }
+    
+    private static String addQuotesIfNeeded(String fieldName) {
+        if (!fieldName.matches("^[a-zA-Z][a-zA-Z0-9_]*")) {
+            fieldName = '"'+fieldName+'"';
+        }
+        return fieldName;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElementFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElementFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/FeatureStoreElementFactory.java	(revision 46118)
@@ -0,0 +1,43 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator;
+
+import java.net.URL;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElementFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FeatureStoreElementFactory extends AbstractElementFactory {
+
+    public FeatureStoreElementFactory() {
+        super(DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT, null);
+    }
+
+    @Override
+    public Element createElement(Object... parameters) {
+        FeatureStore store = (FeatureStore) parameters[0];
+        Element e = new DefaultFeatureStoreElement2(store);
+        return e;
+    }
+    
+    public static void selfRegister() {
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        manager.registerElement(new FeatureStoreElementFactory());
+
+        URL url;
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        url = FeatureStoreElementFactory.class.getResource("/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-table.png");
+        theme.registerDefault("ExpressionBuilder", "element", "expressionbuilder-element-table", null, url);
+        url = FeatureStoreElementFactory.class.getResource("/org/gvsig/fmap/dal/swing/impl/expressionevaluator/expressionbuilder-element-table-field.png");
+        theme.registerDefault("ExpressionBuilder", "element", "expressionbuilder-element-table-field", null, url);
+        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/StorePointFieldSuggestionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/StorePointFieldSuggestionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/StorePointFieldSuggestionProviderFactory.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions;
+
+import java.util.Collections;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.SuggestionProvider;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.Factory;
+import org.gvsig.tools.visitor.VisitCanceledException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class StorePointFieldSuggestionProviderFactory implements Factory {
+
+  private static long lastSuggestedTime = 0;
+  private final FeatureStore store;
+  private boolean suggestionApplies;
+
+  public StorePointFieldSuggestionProviderFactory(FeatureStore store) {
+    this.store = store;
+    String storename = store.getName();
+    this.suggestionApplies = false;
+    for (FeatureAttributeDescriptor attr : getFeatureAttributeDescriptors() ) {
+      if (StringUtils.equalsIgnoreCase(storename, attr.getName())) {
+        this.suggestionApplies = true;
+        break;
+      }
+    }
+  }
+  
+  private Iterable<FeatureAttributeDescriptor> getFeatureAttributeDescriptors() {
+    try {
+      return this.store.getDefaultFeatureType();
+    } catch (DataException ex) {
+      return Collections.EMPTY_LIST;
+    }
+  }
+
+  @Override
+  public String getName() {
+    return "StorePointFieldSuggestion";
+  }
+
+  @Override
+  public Object create(Object... parameters) {
+    SuggestionProvider suggestionProvider = new StorePointFieldSuggestionProvider();
+    return suggestionProvider;
+
+  }
+
+  private class StorePointFieldSuggestionProvider implements SuggestionProvider {
+
+    @Override
+    public String getSuggestion(String expression) {
+      if (!suggestionApplies || StringUtils.isBlank(expression)) {
+        return null;
+      }
+      long now = System.currentTimeMillis();
+      if ( now - lastSuggestedTime >= RandomUtils.nextInt(5, 15) * 60 * 1000) {
+        lastSuggestedTime = System.currentTimeMillis();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String suggestion = i18n.getTranslation("_You_can_access_the_fields_in_a_table_by_prefixing_the_table_name_followed_by_a_period_For_example_TABLE_FIELD_This_is_necessary_whenever_the_name_of_the_field_and_the_table_match");
+        return suggestion;
+      }
+      MutableObject<String> suggestion = new MutableObject<>();
+      try {
+        Code code = ExpressionUtils.compile(expression);
+        if (code == null) {
+          return null;
+        }
+        final String storename = store.getName();
+
+        code.accept((Object obj) -> {
+          if (obj instanceof Code.Identifier) {
+            String varname = ((Code.Identifier) obj).name();
+            if (StringUtils.equalsIgnoreCase(varname, storename)) {
+              I18nManager i18n = ToolsLocator.getI18nManager();
+              suggestion.setValue(
+                      i18n.getTranslation("_You_can_access_the_fields_in_a_table_by_prefixing_the_table_name_followed_by_a_period_For_example_TABLE_FIELD_This_is_necessary_whenever_the_name_of_the_field_and_the_table_match")
+              );
+              throw new VisitCanceledException();
+            }
+          }
+        });
+      } catch (Throwable th) {
+      }
+
+      return suggestion.getValue();
+    }
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/CheckTableFieldsSuggestionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/CheckTableFieldsSuggestionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/CheckTableFieldsSuggestionProviderFactory.java	(revision 46118)
@@ -0,0 +1,124 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions;
+
+import java.util.Objects;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.apache.commons.text.similarity.LevenshteinDistance;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.SuggestionProvider;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.Factory;
+import org.gvsig.tools.visitor.VisitCanceledException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CheckTableFieldsSuggestionProviderFactory implements Factory {
+
+  private final FeatureStore store;
+  private FeatureType featureType;
+
+  public CheckTableFieldsSuggestionProviderFactory(FeatureStore store) {
+    this.store = store;
+    try {
+      this.featureType = store.getDefaultFeatureType();
+    } catch (DataException ex) {
+      this.featureType = null;
+    }            
+  }
+
+  @Override
+  public String getName() {
+    return "CheckTableFieldsSuggestion";
+  }
+
+  @Override
+  public Object create(Object... parameters) {
+    SuggestionProvider suggestionProvider = new CheckTableFieldsSuggestionProvider();
+    return suggestionProvider;
+
+  }
+
+  private class CheckTableFieldsSuggestionProvider implements SuggestionProvider {
+
+    @Override
+    public String getSuggestion(String expression) {
+      if ( StringUtils.isBlank(expression)) {
+        return null;
+      }
+      MutableObject<String> suggestion = new MutableObject<>();
+      try {
+        Code code = ExpressionUtils.compile(expression);
+        if (code == null) {
+          return null;
+        }
+        final String storename = store.getName();
+        code.accept((Object obj) -> {
+          if (obj instanceof Code.Callable ) {
+            Code.Callable callable = (Code.Callable)obj;
+            if( StringUtils.equalsIgnoreCase(callable.name(),ExpressionBuilder.FUNCTION_GETATTR) ) {
+              Code arg0 = callable.parameters().get(0);
+              Code arg1 = callable.parameters().get(1);
+              if( arg0 instanceof Code.Identifier && arg1 instanceof Code.Constant ) {
+                String theStoreName = ((Code.Identifier)arg0).name();
+                if( StringUtils.equalsIgnoreCase(storename, theStoreName) ) {
+                  String attrname = Objects.toString(((Code.Constant)arg1).value(),"");
+                  if( featureType.getAttributeDescriptor(attrname)==null ) {
+                    String suggestedAttrName = getSuggestedAttrName(attrname,3);
+                    I18nManager i18n = ToolsLocator.getI18nManager();
+                    // _The_indicated_field_does_not_exist_in_the_table
+                    // The indicated field does not exist in the table.
+                    // El campo indicado no existe en la tabla.
+                    if( StringUtils.isBlank(suggestedAttrName) ) {
+                      suggestion.setValue(
+                              i18n.getTranslation("_The_indicated_field_does_not_exist_in_the_table")+
+                                      String.format(" (%s.%s)", storename, attrname)
+                      );
+                    } else {
+                      suggestion.setValue(
+                              i18n.getTranslation("_The_indicated_field_does_not_exist_in_the_table")+
+                                      String.format("\n(%s.%s --> %s.%s)", storename, attrname, storename, suggestedAttrName)
+                      );
+                    }
+                    throw new VisitCanceledException();
+                  }
+                }
+              }
+            }
+          }
+        });
+      } catch (Throwable th) {
+      }
+      return suggestion.getValue();
+    }
+
+  }
+
+  private String getSuggestedAttrName(String nameSearched, int maxdistance) {
+    LevenshteinDistance comparator = LevenshteinDistance.getDefaultInstance();
+    nameSearched = nameSearched.toLowerCase();
+    String found_name = null;
+    int found_distance = Integer.MAX_VALUE;
+    for (FeatureAttributeDescriptor attr : featureType) {
+      String name = attr.getName();
+      int distance = comparator.apply(name.toLowerCase(), nameSearched);
+      if( distance<found_distance ) {
+        found_name = name;
+        found_distance = distance;
+      }
+    }
+    if( found_distance<=maxdistance ) {
+      return found_name;
+    }
+    return null;
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/QuotesForFieldNameSuggestionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/QuotesForFieldNameSuggestionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/QuotesForFieldNameSuggestionProviderFactory.java	(revision 46118)
@@ -0,0 +1,79 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions;
+
+import java.util.Collections;
+import java.util.regex.Pattern;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.RandomUtils;
+import org.gvsig.expressionevaluator.swing.SuggestionProvider;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.Factory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class QuotesForFieldNameSuggestionProviderFactory implements Factory {
+
+  private static long lastSuggestedTime = 0;
+  private final static Pattern VALID_IDENTIFIER = Pattern.compile("[A-Za-z_]*[A-Za-z0-9_]*");
+
+  private final FeatureStore store;
+  private boolean suggestionApplies;
+
+  public QuotesForFieldNameSuggestionProviderFactory(FeatureStore store) {
+    this.store = store;
+    String storename = store.getName();
+    this.suggestionApplies = false;
+    for (FeatureAttributeDescriptor attr : getFeatureAttributeDescriptors()) {
+      if (!VALID_IDENTIFIER.matcher(attr.getName()).matches()) {
+        this.suggestionApplies = true;
+        break;
+      }
+    }
+  }
+
+  private Iterable<FeatureAttributeDescriptor> getFeatureAttributeDescriptors() {
+    try {
+      return this.store.getDefaultFeatureType();
+    } catch (DataException ex) {
+      return Collections.EMPTY_LIST;
+    }
+  }
+
+  @Override
+  public String getName() {
+    return "QuotesForFieldNameSuggestion";
+  }
+
+  @Override
+  public Object create(Object... parameters) {
+    SuggestionProvider suggestionProvider = new QuotesForFieldNameSuggestionProvider();
+    return suggestionProvider;
+
+  }
+
+  private class QuotesForFieldNameSuggestionProvider implements SuggestionProvider {
+
+    @Override
+    public String getSuggestion(String expression) {
+      if (!suggestionApplies || StringUtils.isBlank(expression)) {
+        return null;
+      }
+      long now = System.currentTimeMillis();
+      if ( now - lastSuggestedTime >= RandomUtils.nextInt(5, 15) * 60 * 1000) {
+        lastSuggestedTime = System.currentTimeMillis();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String suggestion = i18n.getTranslation("_You_must_use_double_quotes_to_use_a_field_that_is_not_a_valid_identifier_When_the_name_does_not_start_with_a_letter_or_contains_characters_that_are_not_letters_numbers_or_underscore");
+        return suggestion;
+      }
+      return null;
+    }
+
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/WrongNameFieldSuggestionProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/WrongNameFieldSuggestionProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/suggestions/WrongNameFieldSuggestionProviderFactory.java	(revision 46118)
@@ -0,0 +1,122 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator.suggestions;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.text.similarity.LevenshteinDistance;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.swing.SuggestionProvider;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.Factory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class WrongNameFieldSuggestionProviderFactory implements Factory {
+
+  private final FeatureStore store;
+  private FeatureType featureType;
+
+  public WrongNameFieldSuggestionProviderFactory(FeatureStore store) {
+    this.store = store;
+    try {
+      this.featureType = store.getDefaultFeatureType();
+    } catch (DataException ex) {
+      this.featureType = null;
+    }            
+  }
+
+  @Override
+  public String getName() {
+    return "WrongNameFieldSuggestion";
+  }
+
+  @Override
+  public Object create(Object... parameters) {
+    SuggestionProvider suggestionProvider = new WrongNameFieldSuggestionProvider();
+    return suggestionProvider;
+
+  }
+
+  private class WrongNameFieldSuggestionProvider implements SuggestionProvider {
+
+    @Override
+    public String getSuggestion(String expression) {
+      if ( StringUtils.isBlank(expression)) {
+        return null;
+      }
+      final Map<String,String> similarFields = new HashMap<>();
+      try {
+        Code code = ExpressionUtils.compile(expression);
+        if (code == null) {
+          return null;
+        }
+        code.accept((Object obj) -> {
+          if (obj instanceof Code.Identifier) {
+            String varname = ((Code.Identifier) obj).name().toLowerCase();
+            if( varname.length()<3  || featureType.get(varname)!=null ) {
+              return;
+            }
+            if( similarFields.containsKey(varname) ) {
+              return;
+            }
+            String suggestedName = getSuggestedAttrName(varname, 3);
+            if( suggestedName!=null ) {
+                similarFields.put(varname, suggestedName);
+            }
+          }
+        });
+      } catch (Throwable th) {
+      }
+      if( similarFields.isEmpty() ) {
+        return null;
+      }
+      // Perhaps you wanted to use a similar field.
+      // Quiz�s quiso usar un campo parecido.
+      I18nManager i18n = ToolsLocator.getI18nManager();
+      StringBuilder suggestion = new StringBuilder();
+      suggestion.append(i18n.getTranslation("_Perhaps_you_wanted_to_use_a_similar_field"));
+      suggestion.append("\n");
+      boolean needAComma = false;
+      for(Map.Entry<String, String> entry : similarFields.entrySet() ) {
+        if( needAComma ) {
+          suggestion.append(", ");
+        } else {
+          needAComma = true;
+        }
+        suggestion.append(entry.getKey());
+        suggestion.append(" --> ");
+        suggestion.append(entry.getValue());
+      }
+      return suggestion.toString();
+    }
+
+  }
+
+  private String getSuggestedAttrName(String nameSearched, int maxdistance) {
+    LevenshteinDistance comparator = LevenshteinDistance.getDefaultInstance();
+    nameSearched = nameSearched.toLowerCase();
+    String found_name = null;
+    int found_distance = Integer.MAX_VALUE;
+    for (FeatureAttributeDescriptor attr : featureType) {
+      String name = attr.getName();
+      int distance = comparator.apply(name.toLowerCase(), nameSearched);
+      if( distance<found_distance ) {
+        found_name = name;
+        found_distance = distance;
+      }
+    }
+    if( found_distance<=maxdistance ) {
+      return found_name;
+    }
+    return null;
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/expressionevaluator/DefaultFeatureStoreElement.java	(revision 46118)
@@ -0,0 +1,136 @@
+package org.gvsig.fmap.dal.swing.impl.expressionevaluator;
+
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureStoreElement
+        extends AbstractElement
+        implements FeatureStoreElement, SimpleElement {
+
+    private FeatureStore store;
+    private List<Element> elements;
+    private String myName;
+
+    public DefaultFeatureStoreElement(FeatureStore store) {
+        super("store", "store", "featurestore-table");
+        this.setFeatureStore(store);
+    }
+
+    @Override
+    public Element get(int index) {
+        return this.buildElements().get(index);
+    }
+
+    @Override
+    public String getLabel() {
+        return this.getName();
+    }
+
+    @Override
+    public void setName(String name) {
+        this.myName = name;
+    }
+
+    @Override
+    public String getName() {
+        if (!StringUtils.isBlank(this.myName)) {
+            return this.myName;
+        }
+        if (this.store == null) {
+            return super.getName();
+        }
+        return this.store.getName();
+    }
+
+    @Override
+    public int size() {
+        return this.buildElements().size();
+    }
+
+    @Override
+    public Iterator<Element> iterator() {
+        return this.buildElements().iterator();
+    }
+
+    @Override
+    public void addElement(Element element) {
+    }
+
+    @Override
+    public void addElement(Function function) {
+    }
+
+    @Override
+    public List<Element> getElements() {
+        return Collections.unmodifiableList(this.buildElements());
+    }
+
+    @Override
+    public void setFeatureStore(FeatureStore store) {
+        this.store = store;
+        if( store == null ) {
+            this.elements = null;
+        }
+        this.buildElements();
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.store;
+    }
+
+    @Override
+    public Element setConfig(ExpressionBuilderConfig config) {
+        super.setConfig(config);
+        this.buildElements();
+        return this;
+    }
+
+    private List<Element> buildElements() {
+        if (this.elements == null) {
+            if (this.store == null || this.getConfig() == null) {
+                return Collections.EMPTY_LIST;
+            }
+            try {
+                FeatureType type = this.store.getDefaultFeatureType();
+
+                this.elements = new ArrayList<>();
+                Search search = (Search) ToolsLocator.getComplementsManager().get(
+                        Search.COMPLEMENT_MANE,
+                        type
+                );
+                List<Search.OrderedAttribute> attributes = search.getOrderedAttributes(
+                        FeatureType.ALL_FILTER,
+                        Search.LABEL_ORDER,
+                        -1
+                );
+                for (Search.OrderedAttribute attrdesc : attributes) {
+                    Element element = new FeatureAttributeElement(this, this.store, attrdesc.getDescriptor());
+                    element.setConfig(this.getConfig());
+                    this.elements.add(element);
+                }
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+        return this.elements;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.xml	(revision 46118)
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/DefaultJDBCConnectionDialogView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">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</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">7</at>
+           <at name="row">4</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="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="actionCommand">Acept</at>
+            <at name="name">btnAcept</at>
+            <at name="width">63</at>
+            <at name="text">Acept</at>
+            <at name="height">22</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">9</at>
+           <at name="row">4</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="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="actionCommand">Cancel</at>
+            <at name="name">btnCancel</at>
+            <at name="width">70</at>
+            <at name="text">Cancel</at>
+            <at name="height">22</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">2</at>
+           <at name="colspan">8</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.JPanel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JPanel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="name">containerJDBCConnectionPanel</at>
+            <at name="width">911</at>
+            <at name="height">442</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">4</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="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="actionCommand">More...</at>
+            <at name="name">btnMore</at>
+            <at name="width">72</at>
+            <at name="text">More...</at>
+            <at name="height">22</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.xml	(revision 46118)
@@ -0,0 +1,1416 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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/DefaultJDBCConnectionPanelView.xml</at>
+   <at name="rowspecs">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,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:NONE,FILL:DEFAULT:GROW(1.0),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">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">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="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="name">lblConnectionName</at>
+            <at name="width">131</at>
+            <at name="text">Nombre de la conexion</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblConnector</at>
+            <at name="width">131</at>
+            <at name="text">Conector</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">8</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">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="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="name">lblServer</at>
+            <at name="width">131</at>
+            <at name="text">Servidor</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">10</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">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="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="name">lblPort</at>
+            <at name="width">131</at>
+            <at name="text">Puerto</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">12</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">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="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="name">lblDataBase</at>
+            <at name="width">131</at>
+            <at name="text">Base de datos</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblUsername</at>
+            <at name="width">131</at>
+            <at name="text">Usuario</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">16</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">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="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="name">lblPassword</at>
+            <at name="width">131</at>
+            <at name="text">Clave</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">2</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.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="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="componentCount">3</at>
+            <at name="editable">true</at>
+            <at name="requestFocusEnabled">false</at>
+            <at name="name">cboConnections</at>
+            <at name="width">364</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">4</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.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="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="name">cboConnectors</at>
+            <at name="width">364</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">8</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.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="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="name">txtServer</at>
+            <at name="width">364</at>
+            <at name="height">20</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">4</at>
+           <at name="row">10</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.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="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="name">txtPort</at>
+            <at name="width">364</at>
+            <at name="height">20</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">4</at>
+           <at name="row">14</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.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="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="name">txtUsername</at>
+            <at name="width">364</at>
+            <at name="height">20</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">4</at>
+           <at name="row">12</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.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="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="name">txtDataBase</at>
+            <at name="width">364</at>
+            <at name="height">20</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">4</at>
+           <at name="row">16</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.JPasswordField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JPasswordField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">txtPassword</at>
+            <at name="width">364</at>
+            <at name="height">20</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">6</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">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="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="name">lblFile</at>
+            <at name="width">131</at>
+            <at name="text">Fichero</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">18</at>
+           <at name="colspan">3</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">embedded.541009734</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">RIGHT:12DLU:GROW(1.0)</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">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.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="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="name">lblFoother</at>
+                 <at name="width">510</at>
+                 <at name="text">&lt;html&gt; Tenga 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. &lt;html&gt;</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">28</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">6</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">embedded.1634763139</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtFile</at>
+                 <at name="width">304</at>
+                 <at name="height">20</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">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.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="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="actionCommand">...</at>
+                 <at name="name">btnDataBaseBrowser</at>
+                 <at name="width">44</at>
+                 <at name="text">...</at>
+                 <at name="height">22</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="19">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialogView.java	(revision 46118)
@@ -0,0 +1,150 @@
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JPanel;
+
+
+public class DefaultJDBCConnectionDialogView extends JPanel
+{
+   JButton btnAcept = new JButton();
+   JButton btnCancel = new JButton();
+   JPanel containerJDBCConnectionPanel = new JPanel();
+   JButton btnMore = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultJDBCConnectionDialogView()
+   {
+      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,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAcept.setActionCommand("Acept");
+      btnAcept.setName("btnAcept");
+      btnAcept.setText("Acept");
+      jpanel1.add(btnAcept,cc.xy(7,4));
+
+      btnCancel.setActionCommand("Cancel");
+      btnCancel.setName("btnCancel");
+      btnCancel.setText("Cancel");
+      jpanel1.add(btnCancel,cc.xy(9,4));
+
+      containerJDBCConnectionPanel.setName("containerJDBCConnectionPanel");
+      jpanel1.add(containerJDBCConnectionPanel,cc.xywh(2,2,8,1));
+
+      btnMore.setActionCommand("More...");
+      btnMore.setName("btnMore");
+      btnMore.setText("More...");
+      jpanel1.add(btnMore,cc.xy(5,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionPanelView.java	(revision 46118)
@@ -0,0 +1,241 @@
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+
+public class DefaultJDBCConnectionPanelView extends JPanel
+{
+   JLabel lblConnectionName = new JLabel();
+   JLabel lblConnector = new JLabel();
+   JLabel lblServer = new JLabel();
+   JLabel lblPort = new JLabel();
+   JLabel lblDataBase = new JLabel();
+   JLabel lblUsername = new JLabel();
+   JLabel lblPassword = new JLabel();
+   JComboBox cboConnections = new JComboBox();
+   JComboBox cboConnectors = new JComboBox();
+   JTextField txtServer = new JTextField();
+   JTextField txtPort = new JTextField();
+   JTextField txtUsername = new JTextField();
+   JTextField txtDataBase = new JTextField();
+   JPasswordField txtPassword = new JPasswordField();
+   JLabel lblFile = new JLabel();
+   JLabel lblFoother = new JLabel();
+   JTextField txtFile = new JTextField();
+   JButton btnDataBaseBrowser = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public DefaultJDBCConnectionPanelView()
+   {
+      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","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,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblConnectionName.setName("lblConnectionName");
+      lblConnectionName.setText("Nombre de la conexion");
+      jpanel1.add(lblConnectionName,cc.xy(2,2));
+
+      lblConnector.setName("lblConnector");
+      lblConnector.setText("Conector");
+      jpanel1.add(lblConnector,cc.xy(2,4));
+
+      lblServer.setName("lblServer");
+      lblServer.setText("Servidor");
+      jpanel1.add(lblServer,cc.xy(2,8));
+
+      lblPort.setName("lblPort");
+      lblPort.setText("Puerto");
+      jpanel1.add(lblPort,cc.xy(2,10));
+
+      lblDataBase.setName("lblDataBase");
+      lblDataBase.setText("Base de datos");
+      jpanel1.add(lblDataBase,cc.xy(2,12));
+
+      lblUsername.setName("lblUsername");
+      lblUsername.setText("Usuario");
+      jpanel1.add(lblUsername,cc.xy(2,14));
+
+      lblPassword.setName("lblPassword");
+      lblPassword.setText("Clave");
+      jpanel1.add(lblPassword,cc.xy(2,16));
+
+      cboConnections.setEditable(true);
+      cboConnections.setName("cboConnections");
+      cboConnections.setRequestFocusEnabled(false);
+      jpanel1.add(cboConnections,cc.xy(4,2));
+
+      cboConnectors.setName("cboConnectors");
+      jpanel1.add(cboConnectors,cc.xy(4,4));
+
+      txtServer.setName("txtServer");
+      jpanel1.add(txtServer,cc.xy(4,8));
+
+      txtPort.setName("txtPort");
+      jpanel1.add(txtPort,cc.xy(4,10));
+
+      txtUsername.setName("txtUsername");
+      jpanel1.add(txtUsername,cc.xy(4,14));
+
+      txtDataBase.setName("txtDataBase");
+      jpanel1.add(txtDataBase,cc.xy(4,12));
+
+      txtPassword.setName("txtPassword");
+      jpanel1.add(txtPassword,cc.xy(4,16));
+
+      lblFile.setName("lblFile");
+      lblFile.setText("Fichero");
+      jpanel1.add(lblFile,cc.xy(2,6));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,18,3,1));
+      jpanel1.add(createPanel2(),cc.xy(4,6));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("RIGHT:12DLU:GROW(1.0)","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblFoother.setName("lblFoother");
+      lblFoother.setText("<html> Tenga 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. <html>");
+      jpanel1.add(lblFoother,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[0],new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtFile.setName("txtFile");
+      jpanel1.add(txtFile,cc.xy(1,1));
+
+      btnDataBaseBrowser.setActionCommand("...");
+      btnDataBaseBrowser.setName("btnDataBaseBrowser");
+      btnDataBaseBrowser.setText("...");
+      jpanel1.add(btnDataBaseBrowser,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionPickerController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionPickerController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCConnectionPickerController.java	(revision 46118)
@@ -0,0 +1,167 @@
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import javax.swing.ComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.SwingUtilities;
+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.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.util.CompareUtils;
+import org.gvsig.tools.util.CompareUtils.NullSafeComparator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class JDBCConnectionPickerController 
+        extends AbstractPickerController<JDBCServerExplorerParameters>
+        implements PickerController<JDBCServerExplorerParameters>
+    {
+
+    private final JComboBox cboConnection;
+    private final JButton btnConnection;
+
+    public JDBCConnectionPickerController(JComboBox cboConnection, JButton btnConnection) {
+        this.btnConnection = btnConnection;
+        this.cboConnection = cboConnection;
+    
+        this.fillConnections(this.cboConnection);
+        this.btnConnection.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doAddConnection();
+            }
+        });
+        if( "...".equals(this.btnConnection.getText()) ) {
+            this.btnConnection.setText("");
+        }
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        this.btnConnection.setIcon(theme.get("database-connection-add"));
+        
+        this.cboConnection.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    SwingUtilities.invokeLater(() -> { fireChangeEvent(); });
+                }
+            }
+        });
+    }
+    
+    private void fillConnections(JComboBox combo) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+
+        DataServerExplorerParameters params;
+        combo.removeAllItems();
+
+        List<DataServerExplorerPoolEntry>entries = new ArrayList<>();
+        pool.iterator().forEachRemaining((DataServerExplorerPoolEntry e) -> {entries.add(e); });
+        entries.sort((DataServerExplorerPoolEntry o1, DataServerExplorerPoolEntry o2) -> { 
+            return StringUtils.compare(o1.getName(), o2.getName()); 
+        });
+        
+        for (DataServerExplorerPoolEntry entry : entries) {
+            if (entry.getExplorerParameters() instanceof JDBCServerExplorerParameters) {
+                JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) entry.getExplorerParameters();
+                combo.addItem(
+                        new ListElement<>(entry.getName(), dbParams)
+                );
+            }
+        }
+        combo.setSelectedIndex(-1);
+    }
+
+    private void doAddConnection() {
+        JDBCConnectionDialog dialog = DALSwingLocator.getSwingManager().createJDBCConectionDialog();
+        dialog.showDialog();
+        if (dialog.isCanceled()) {
+            return;
+        }
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+
+        JDBCServerExplorerParameters connectionParameters = dialog.getServerExplorerParameters();
+        pool.add(dialog.getConnectionName(), connectionParameters);
+        this.fillConnections(this.cboConnection);
+        ListElement.setSelected(cboConnection, connectionParameters);
+    }
+    
+    @Override
+    public JDBCServerExplorerParameters get() {
+        ListElement<JDBCServerExplorerParameters> item = (ListElement<JDBCServerExplorerParameters>) this.cboConnection.getSelectedItem();
+        if (item == null) {
+            return null;
+        }
+        JDBCServerExplorerParameters conn = item.getValue();
+        return conn;
+    }
+
+    @Override
+    public void set(JDBCServerExplorerParameters value) {
+        ComboBoxModel<ListElement<JDBCServerExplorerParameters>> model = this.cboConnection.getModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            JDBCServerExplorerParameters params = model.getElementAt(i).getValue();
+            if( params == value ) {
+                this.cboConnection.setSelectedIndex(i);
+                return;
+            }
+        }
+    }
+
+    @Override
+    public void coerceAndSet(Object value) {
+        JDBCServerExplorerParameters params;
+        try {
+            params = (JDBCServerExplorerParameters) value;
+        } catch(Exception ex) {
+            throw new IllegalArgumentException("Can't coerce value to JDBCServerExplorerParameters", ex);
+        }
+        this.set(params);
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        this.cboConnection.setEnabled(enabled);
+        this.btnConnection.setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.cboConnection.isEnabled();
+    }
+    
+    public static void selfRegister() {
+        String[][] iconNames = new String[][]{
+            new String[]{"dalswing", "database-connection-add"}
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = JDBCConnectionPickerController.class.getResource(icon[1] + ".png");
+            theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
+        }
+        
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialog.java	(revision 46118)
@@ -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.dal.swing.impl.jdbc;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Objects;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.filedialogchooser.FileDialogChooser;
+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.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.fmap.dal.swing.impl.dataStoreParameters.DataStoreDynObjectParametersPanel;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
+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;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.swing.api.DropDown;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+
+
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultJDBCConnectionDialog extends DefaultJDBCConnectionDialogView implements JDBCConnectionDialog {
+
+    private static final long serialVersionUID = -5493563028200403559L;
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(DefaultJDBCConnectionDialog.class);
+
+    private boolean isCanceled = true;
+    private JDBCConnectionPanel jdbcServerExplorer;
+    private DropDown ddnMore;
+
+    public DefaultJDBCConnectionDialog() {
+        initComponents();
+    }
+    
+    private void initComponents() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        this.btnAcept.setText(i18n.getTranslation("ok"));
+        this.btnAcept.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doAcept();
+            }
+        });
+        this.btnCancel.setText(i18n.getTranslation("cancel"));
+        this.btnCancel.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doCancel();
+            }
+        });
+        DefaultComboBoxModel<LabeledValue<String>> model = new DefaultComboBoxModel<>();
+        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("advanced"), "advanced"));
+        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("delete"), "delete"));
+        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("load"), "load"));
+        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("save"), "save"));
+        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Test_connection"), "test"));
+        this.ddnMore = toolsSwingManager.createDropDown(this.btnMore);
+        this.ddnMore.setModel(model);
+        this.ddnMore.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                LabeledValue<String> selectedItem = (LabeledValue<String>) ddnMore.getSelectedItem();
+                switch(selectedItem.getValue()) {
+                    case "advanced":
+                        doAdvanced();
+                        break;
+                    case "delete":
+                        doDelete();
+                        break;
+                    case "load":
+                        doLoad();
+                        break;
+                    case "save":
+                        doSave();
+                        break;
+                    case "test":
+                        doTest();
+                        break;
+                }
+            }
+        });
+
+        this.jdbcServerExplorer = DALSwingLocator.getSwingManager().createJDBCConnectionPanel();
+        this.containerJDBCConnectionPanel.setLayout(new BorderLayout());
+        this.containerJDBCConnectionPanel.add(
+                this.jdbcServerExplorer.asJComponent(),
+                BorderLayout.CENTER
+        );
+    }
+
+    protected void doLoad() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        DataManager dataManager = DALLocator.getDataManager();
+
+        File initialPath = folderManager.getLastPath("CONNECTIONS", null);
+        File[] f = dialogs.showChooserDialog(
+                i18n.getTranslation("_Load_connection"), 
+                FileDialogChooser.OPEN_DIALOG, 
+                FileDialogChooser.FILES_ONLY,
+                false, 
+                initialPath, 
+                new FileFilter() {
+                    @Override
+                    public boolean accept(File f) {
+                        return Objects.toString(f,"").toLowerCase().endsWith(".gvdbcon");
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        return "Database connection (gvdbcon)";
+                    }
+                }, 
+                true
+        );
+        if( ArrayUtils.isEmpty(f) || f[0]==null ) {
+            return;
+        }
+        folderManager.setLastPath("CONNECTIONS", f[0].getParentFile());
+        InputStream in = null;
+        try {
+            in = new FileInputStream(f[0]);
+            PersistenceManager persistence = ToolsLocator.getPersistenceManager();
+            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) persistence.getObject(in);
+            LabeledValueImpl<JDBCServerExplorerParameters> parameters = new LabeledValueImpl<>(
+                    entry.getName(), 
+                    (JDBCServerExplorerParameters)entry.getExplorerParameters()
+            );
+            this.jdbcServerExplorer.setLabeledServerExplorerParameters(parameters);
+        } catch(Throwable th) {
+            LOG.warn("Problems loading connection",th);
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Problems_loading_the_connection"), 
+                    i18n.getTranslation("_Load_connection"), 
+                    JOptionPane.WARNING_MESSAGE
+            );
+//            return;
+        } finally {
+            IOUtils.closeQuietly(in);
+        }
+    }
+    
+    protected void doSave() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        DataManager dataManager = DALLocator.getDataManager();
+
+        String problems = this.jdbcServerExplorer.getParametersProblems();
+        if( !StringUtils.isBlank(problems) ) {
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Some_values_are_invalids")+"\n\n"+problems,
+                    i18n.getTranslation("_Save_connection"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+        
+        LabeledValue<JDBCServerExplorerParameters> parameters = this.getLabeledServerExplorerParameters();
+        if( parameters == null || parameters.getValue()==null ) {
+            dialogs.messageDialog(
+                    i18n.getTranslation("_There_is_no_connection_to_save"), 
+                    i18n.getTranslation("_Save_connection"), 
+                    JOptionPane.INFORMATION_MESSAGE
+            );
+            return;
+        }
+        File initialPath = folderManager.getLastPath("CONNECTIONS", null);
+        File[] f = dialogs.showChooserDialog(
+                i18n.getTranslation("_Save_connection"), 
+                FileDialogChooser.SAVE_DIALOG, 
+                FileDialogChooser.FILES_ONLY,
+                false, 
+                initialPath, 
+                new FileFilter() {
+                    @Override
+                    public boolean accept(File f) {
+                        return Objects.toString(f,"").toLowerCase().endsWith(".gvdbcon");
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        return "Database connection (gvdbcon)";
+                    }
+                }, 
+                true
+        );
+        if( ArrayUtils.isEmpty(f) || f[0]==null ) {
+            return;
+        }
+        folderManager.setLastPath("CONNECTIONS", f[0].getParentFile());
+
+        File paramsFile = f[0];
+        if( !f[0].toString().toLowerCase().endsWith(".gvdbcon") ) {
+            paramsFile = new File(f[0].toString()+".gvdbcon");
+        }
+
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+        DataServerExplorerPoolEntry entry = pool.createEntry(
+                parameters.getLabel(), 
+                null, 
+                parameters.getValue()
+        );
+        
+        OutputStream out = null;
+        try {
+            out = new FileOutputStream(paramsFile);
+            PersistenceManager persistence = ToolsLocator.getPersistenceManager();
+            PersistentState state = persistence.getState(entry);
+            persistence.saveState(state, out);
+        } catch(Throwable th) {
+            LOG.warn("Problems saving connection",th);
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Problems_saving_the_connection"), 
+                    i18n.getTranslation("_Save_connection"), 
+                    JOptionPane.WARNING_MESSAGE
+            );
+//            return;
+        } finally {
+            IOUtils.closeQuietly(out);
+        }
+    }
+    
+    protected void doTest() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+        try {
+            String problems = this.jdbcServerExplorer.getParametersProblems();
+            if( StringUtils.isBlank(problems) ) {
+                JDBCServerExplorerParameters params = this.jdbcServerExplorer.getServerExplorerParameters();
+                JDBCServerExplorer server = (JDBCServerExplorer) DALLocator.getDataManager().openServerExplorer(
+                        params.getProviderName(), params
+                );
+                if( server.exists() ) {
+                    dialogs.messageDialog(
+                            i18n.getTranslation("_Connection_ok"),
+                            i18n.getTranslation("_Connection"),
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                    return;
+                }
+            }
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Test_connection_failed")+(problems==null?"":("\n\n"+problems)),
+                    i18n.getTranslation("_Connection"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+        } catch (Throwable ex) {
+                dialogs.messageDialog(
+                        i18n.getTranslation("_Test_connection_failed"),
+                        i18n.getTranslation("_Connection"),
+                        JOptionPane.WARNING_MESSAGE
+                );
+        }
+    }
+    
+    protected void doAdvanced() {
+        JDBCServerExplorerParameters myParams = this.getServerExplorerParameters();
+        try {
+            myParams.validate();
+        } catch (Exception e) {
+            // ignore... only for fill default values
+        }
+        DataStoreParametersPanelManager paramsManager = DALSwingLocator.getDataStoreParametersPanelManager();
+        DataStoreParametersPanel panel =  new DataStoreDynObjectParametersPanel(myParams);
+        paramsManager.showPropertiesDialog(myParams, panel);
+        this.jdbcServerExplorer.setServerExplorerParameters(myParams);
+    }
+    
+    protected void doAcept() {
+        this.isCanceled = false;
+        String problems = this.jdbcServerExplorer.getParametersProblems();
+        if( !StringUtils.isBlank(problems) ) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+            dialogs.messageDialog(
+                    i18n.getTranslation("_Some_values_are_invalids")+"\n\n"+problems,
+                    i18n.getTranslation("_Connection"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+        this.setVisible(false);
+    }
+    
+    protected void doCancel() {
+        this.isCanceled = true;
+        this.setVisible(false);
+    }
+    
+    protected void doDelete() {
+    	this.jdbcServerExplorer.delete();
+    	this.jdbcServerExplorer.clear();
+    }
+    
+    @Override
+    public void showDialog() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        winmgr.showWindow(
+                this, 
+                i18nManager.getTranslation("_Connection_parameters"), 
+                WindowManager.MODE.DIALOG
+        );
+    }
+    
+    @Override
+    public boolean isCanceled() {
+        return this.isCanceled;
+    }
+    
+    @Override
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        return this.jdbcServerExplorer.getServerExplorerParameters();
+    }
+    
+    @Override
+    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters() {
+        return this.jdbcServerExplorer.getLabeledServerExplorerParameters();
+    }
+    
+    @Override
+    public String getConnectionName() {
+        return this.jdbcServerExplorer.getConnectionName();
+    }
+   
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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/DefaultJDBCConnectionDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,573 @@
+package org.gvsig.fmap.dal.swing.impl.jdbc;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.File;
+import java.util.Objects;
+import javax.swing.ComboBoxModel;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.basic.BasicHTML;
+import javax.swing.text.View;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+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.ValidateDataParametersException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+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.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// org.gvsig.fmap.mapcontrol.dal.jdbc.JDBCConnectionPanel
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultJDBCConnectionPanel extends DefaultJDBCConnectionPanelView implements JDBCConnectionPanel{
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultJDBCConnectionPanel.class);
+    private static final long serialVersionUID = -6119489353793596382L;
+    private JDBCServerExplorerParameters forcedParameters;
+    private ItemListener onChangeConnectorItemListener;
+    private ConnectorFilter connectorFilter=null;
+
+    @Override
+    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);
+//        }
+//
+//        @Override
+//        public String toString() {
+//            return this.label;
+//        }
+//
+//        public JDBCServerExplorerParameters getParams() {
+//            return this.params;
+//        }
+//
+//        public String getLabel() {
+//            return this.label;
+//        }
+//    }
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public DefaultJDBCConnectionPanel() {
+        initComponents();
+    }
+
+    protected void initComponents() {
+        this.cboConnections.setEditable(true);
+        this.cboConnections.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if(e.getStateChange() != ItemEvent.SELECTED) {
+                    return;
+                }                // Lo hago asi para evitar cuelgues durante la depuracion
+                // al poner puntos de ruptura en un evento de un combo.
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        onChangeConnection();
+                    }
+                });
+            }
+        });
+        this.onChangeConnectorItemListener = new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if(e.getStateChange() != ItemEvent.SELECTED) {
+                    return;
+                }
+                // Lo hago asi para evitar cuelgues durante la depuracion
+                // al poner puntos de ruptura en un evento de un combo.
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        onChangeConnector();
+                    }
+                });
+            }
+        };
+        this.cboConnectors.addItemListener(onChangeConnectorItemListener);
+        try {
+            fillConnections();
+            fillConnectors();
+        } catch(Throwable th) {
+            // Ignore it to allow use in GUI builders
+            LOGGER.warn("Can't fill combos",th);
+        }
+        this.translate();
+        this.btnDataBaseBrowser.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                onBrowseDatabase();
+            }
+        });
+        adjustPreferedHeight(this.lblFoother,300);
+        Dimension sz = this.getPreferredSize();
+        if( sz.width<400 ) {
+            sz.width = 400;
+            this.setPreferredSize(sz);
+        }
+    }
+
+    private void adjustPreferedHeight(JLabel label, int prefWidth) {
+        JLabel resizer = new JLabel();
+        resizer.setText(label.getText());
+        View view = (View) resizer.getClientProperty(BasicHTML.propertyKey);
+        view.setSize(prefWidth,15);
+        float w = view.getPreferredSpan(View.X_AXIS);
+        float h = view.getPreferredSpan(View.Y_AXIS);
+        Dimension dim = new Dimension(
+                (int) Math.ceil(w),
+                (int) Math.ceil(h)
+        );
+        label.setPreferredSize(dim);
+    }
+    
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.lblFile.setText(i18nManager.getTranslation("_File"));
+        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>");
+    }
+
+    @Override
+    public void setLabeledServerExplorerParameters(LabeledValue<JDBCServerExplorerParameters> parameters) {
+        if( parameters == null ) {
+            return;
+        }
+        if( parameters.getValue()!=null ) {
+            this.setServerExplorerParameters(parameters.getValue());
+        }
+        if( !StringUtils.isBlank(parameters.getLabel()) ) {
+            this.cboConnections.setSelectedItem(parameters.getLabel());
+        }
+    }
+    
+    @Override
+    public void setServerExplorerParameters(JDBCServerExplorerParameters parameters) {
+        this.forcedParameters = (JDBCServerExplorerParameters) parameters.getCopy();
+        
+        int indexConnector = this.getIndexOfConnector(parameters);
+        if ( indexConnector >= 0 && this.cboConnectors.getSelectedIndex()!=indexConnector ) {
+            this.cboConnectors.removeItemListener(this.onChangeConnectorItemListener);
+            this.cboConnectors.setSelectedIndex(indexConnector);
+            this.cboConnectors.addItemListener(onChangeConnectorItemListener);
+        }
+
+        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());
+        
+        DynClass definition = parameters.getDynClass();
+        
+        DynField field = definition.getDynField(JDBCServerExplorerParameters.HOST_PARAMTER_NAME);
+        this.txtServer.setEnabled( !( field.isReadOnly() || field.isHidden() ));
+        field = definition.getDynField(JDBCServerExplorerParameters.PORT_PARAMTER_NAME);
+        this.txtPort.setEnabled( !( field.isReadOnly() || field.isHidden() ));
+        field = definition.getDynField(JDBCServerExplorerParameters.DBNAME_PARAMTER_NAME);
+        this.txtDataBase.setEnabled( !( field.isReadOnly() || field.isHidden() ));
+        field = definition.getDynField(JDBCServerExplorerParameters.USER_PARAMTER_NAME);
+        this.txtUsername.setEnabled( !( field.isReadOnly() || field.isHidden() ));
+        field = definition.getDynField(JDBCServerExplorerParameters.PASSWORD_PARAMTER_NAME);
+        this.txtPassword.setEnabled( !( field.isReadOnly() || field.isHidden() ));
+        if( parameters instanceof FilesystemStoreParameters ) {
+            File f = ((FilesystemStoreParameters) parameters).getFile();
+            if( f==null ) {
+                this.txtFile.setText("");
+            } else {
+                this.txtFile.setText(f.getAbsolutePath());
+            }
+            this.btnDataBaseBrowser.setVisible(true);
+            this.txtFile.setVisible(true);
+            this.lblFile.setVisible(true);
+        } else {
+            this.btnDataBaseBrowser.setVisible(false);
+            this.txtFile.setVisible(false);
+            this.lblFile.setVisible(false);
+        }
+    }
+
+    @Override
+    public JDBCServerExplorerParameters getServerExplorerParameters() {
+        JDBCServerExplorerParameters params;
+        JDBCServerExplorerParameters connector = this.getConnector();
+        if( connector==null ) {
+            return null;
+        }
+        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);
+        }
+        return params;
+    }
+
+    @Override
+    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters() {
+        JDBCServerExplorerParameters params = this.getServerExplorerParameters();
+        if( params == null ) {
+            return null;
+        }
+        String name = this.getConnectionName();
+        if ( StringUtils.isBlank(name) ) {
+            if( params instanceof FilesystemStoreParameters ) {
+                File f = ((FilesystemStoreParameters) params).getFile();
+                if( f!=null ) {
+                    name = FilenameUtils.getBaseName(f.getPath());
+                }
+            }
+            if( StringUtils.isBlank(name) ) {
+                StringBuilder builder = new StringBuilder();
+                builder.append(Objects.toString(params.getHost(),""));
+                if( builder.length()>0 && !builder.toString().endsWith("-")) {
+                    builder.append("-");
+                }
+                builder.append(Objects.toString(params.getPort(),""));
+                if( builder.length()>0 && !builder.toString().endsWith("-")) {
+                    builder.append("-");
+                }
+                builder.append(Objects.toString(params.getDBName(),""));
+                name = builder.toString();
+            }
+        }
+        
+        if( StringUtils.isBlank(name) ) {
+            name = getUniqueEntryName("Connection");
+        } else if( this.isNewConnection() ) {
+            name = getUniqueEntryName(name);
+        }
+        return new LabeledValueImpl<>(name,params);
+    }
+    
+    @Override
+    public boolean areTheParametersValid() {
+        try {
+            LabeledValue<JDBCServerExplorerParameters> params = this.getLabeledServerExplorerParameters();
+            params.getValue().validate();
+            return true;
+        } catch (ValidateDataParametersException ex) {
+            return false;
+        }
+    }
+    
+    @Override
+    public String getParametersProblems() {
+        try {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            JDBCServerExplorerParameters params = this.getServerExplorerParameters();
+            if( params == null ) {
+                return i18n.getTranslation("You need to select a connector");
+            }
+            params.validate();
+            return null;
+        } catch (ValidateDataParametersException ex) {
+            return ex.getLocalizedMessageStack();
+        }
+    }
+    
+    private String getUniqueEntryName(String name) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+        String baseName = name;
+        for (int i = 0; i < 1000; i++) {
+            if( !pool.contains(name) ) {
+                return name;
+            }
+            name = baseName+"-"+i;
+        }
+        return name + System.currentTimeMillis();
+    }
+
+    protected void setConnectionName(String connectionName) {
+        JTextField txtConnections = (JTextField) this.cboConnections.getEditor().getEditorComponent();
+        txtConnections.setText(connectionName);
+    }
+
+    @Override
+    public String getConnectionName() {
+        Object value = this.cboConnections.getSelectedItem();
+        String name = StringUtils.defaultIfBlank(Objects.toString(value, null), null);
+        if( StringUtils.isBlank(name) ) {
+            name = getUniqueEntryName("Connection");
+        } else if( this.isNewConnection() ) {
+            name = getUniqueEntryName(name);
+        }
+        return name;
+        
+    }
+
+    @Override
+    public boolean isNewConnection() {
+        Object value = this.cboConnections.getSelectedItem();
+        String name = StringUtils.defaultIfBlank(Objects.toString(value, null), null);
+        if( name == null ) {
+            return true;
+        }
+        ComboBoxModel<LabeledValue<JDBCServerExplorerParameters>> model = this.cboConnections.getModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            LabeledValue<JDBCServerExplorerParameters> conn = model.getElementAt(i);
+            if( StringUtils.equalsIgnoreCase(name, conn.getLabel()) ) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    protected JDBCServerExplorerParameters getConnector() {
+        LabeledValue<JDBCServerExplorerParameters> item = (LabeledValue<JDBCServerExplorerParameters>) this.cboConnectors.getSelectedItem();
+        if( item == null ) {
+            return null;
+        }
+        return item.getValue();
+    }
+
+    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;
+        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() {
+        LabeledValue<JDBCServerExplorerParameters> item = (LabeledValue<JDBCServerExplorerParameters>) this.cboConnectors.getSelectedItem();
+        if( item==null ) {
+            return;
+        }
+        JDBCServerExplorerParameters connector = item.getValue();
+        
+        if ( connector == null ) {
+            return;
+        }
+        this.setServerExplorerParameters(connector);
+    }
+
+    private void onChangeConnection() {
+        Object value = this.cboConnections.getSelectedItem();
+        if( value instanceof LabeledValue ) {
+            LabeledValue<JDBCServerExplorerParameters> item = (LabeledValue<JDBCServerExplorerParameters>) value;
+            JDBCServerExplorerParameters connection = item.getValue();
+            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++ ) {
+                LabeledValue<JDBCServerExplorerParameters> x = (LabeledValue<JDBCServerExplorerParameters>) model.getElementAt(i);
+                if ( x!=null && x.getValue()!=null && x.getValue().getExplorerName().equalsIgnoreCase(explorerParameters.getExplorerName()) ) {
+                    return i;
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get index of exporer parameter '" + code + "'.", ex);
+        }
+        return -1;
+    }
+    
+    @Override
+    public void setConnectorFilter(ConnectorFilter connectorFilter) {
+        this.connectorFilter = connectorFilter;
+        fillConnections();
+        fillConnectors();        
+    }
+
+    private void fillConnectors() {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        LabeledValue<JDBCServerExplorerParameters> last = null;
+        this.cboConnectors.removeAllItems();
+        this.cboConnectors.addItem(new LabeledValueImpl("",(JDBCServerExplorerParameters)null));
+        
+        for (DataFactory factory :  dataManager.getServerExplorerRegister() ) {
+            if( factory.isHidden() ) {
+                continue;
+            }
+            DataServerExplorerParameters params = (DataServerExplorerParameters) factory.createParameters();
+            if ( params instanceof JDBCServerExplorerParameters ) {
+                if( this.connectorFilter==null || this.connectorFilter.accept((JDBCServerExplorerParameters) params) ) {
+                    if( params.getClass() == JDBCServerExplorerParameters.class && 
+                        last == null ) {
+                        // Si es el proveedor generico de JDBC, lo guarda para 
+                        // a�adirlo al final del combo.
+                        last = new LabeledValueImpl(
+                                factory.getDescription(),
+                                (JDBCServerExplorerParameters) params
+                        );
+                    } else {
+                        this.cboConnectors.addItem(
+                            new LabeledValueImpl(
+                                    factory.getDescription(),
+                                    (JDBCServerExplorerParameters) params
+                            )
+                        );
+                    }
+                }
+            }
+        }
+        if( last!=null ) {
+            this.cboConnectors.addItem(last);
+        }
+    }
+
+    private void fillConnections() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+
+        this.cboConnections.removeAllItems();
+        for (DataServerExplorerPoolEntry entry : pool) {
+            if ( entry.getExplorerParameters() instanceof JDBCServerExplorerParameters ) {
+                if( this.connectorFilter==null || this.connectorFilter.accept((JDBCServerExplorerParameters) entry.getExplorerParameters()) ) {
+                    JDBCServerExplorerParameters dbParams = (JDBCServerExplorerParameters) entry.getExplorerParameters();
+                    this.cboConnections.addItem(
+                            new LabeledValueImpl<>(entry.getName(), dbParams)
+                    );
+                }
+            }
+        }
+        this.cboConnections.setSelectedIndex(-1);
+    }
+
+    @Override
+    public void delete() {
+        String name = this.getConnectionName();
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+        
+        pool.remove(name);
+        fillConnections();
+    }
+    
+    @Override
+    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("");
+        this.txtFile.setText("");
+    }
+    
+    private void onBrowseDatabase() {
+        if( this.forcedParameters==null ) {
+            return;
+        }
+        ThreadSafeDialogsManager dlgmanager = ToolsSwingLocator.getThreadSafeDialogsManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        File[] files = dlgmanager.showOpenFileDialog(
+                i18nManager.getTranslation("_Select_database"), 
+                null
+        );
+        if( ArrayUtils.isEmpty(files) ) {
+            return;
+        }
+        ((FilesystemStoreParameters)this.forcedParameters).setFile(files[0]);
+        this.txtFile.setText(((FilesystemStoreParameters)(this.forcedParameters)).getFile().getAbsolutePath());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DefaultFeatureTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DefaultFeatureTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DefaultFeatureTableModel.java	(revision 46118)
@@ -0,0 +1,910 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.featuretable.table;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.security.InvalidParameterException;
+import java.text.SimpleDateFormat;
+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.Set;
+
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.AbstractTableModel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.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.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.dal.swing.impl.featuretable.table.renders.GetFeatureAtException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.ComplexNotification;
+import org.gvsig.tools.observer.ComplexObserver;
+import org.gvsig.tools.observer.Observable;
+
+public class DefaultFeatureTableModel extends AbstractTableModel implements org.gvsig.fmap.dal.swing.FeatureTableModel,  ComplexObserver  {
+
+    private static final long serialVersionUID = -8223987814719746492L;
+
+    private static final Logger logger = LoggerFactory.getLogger(DefaultFeatureTableModel.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;
+
+    private final FeaturePagingHelper featurePager;
+
+    /** Used to know if a modification in the FeatureStore is created by us. */
+    private EditableFeature editableFeature;
+
+    private boolean selectionLocked=false;
+
+    private final DelayAction delayAction = new DelayAction();
+
+    private FeatureSelection selection = null;
+
+    private Set<ActionListener> changeListeners = null;
+    
+    public DefaultFeatureTableModel(FeaturePagingHelper featurePager) {
+        this.featurePager = featurePager;
+        this.localeOfData = Locale.getDefault();
+        this.initialize();
+    }
+
+    private void initialize() {
+        this.getFeatureStore().addObserver(this);
+
+        int columns = this.getOriginalColumnCount();
+
+        // Initilize visible columns
+        columnNames = new ArrayList<>(columns);
+        visibleColumnNames = new ArrayList<>(columns);
+        for (int i = 0; i < columns; i++) {
+            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
+            String columnName = descriptor.getName();
+            columnNames.add(columnName);
+
+            // By default, geometry columns will not be visible
+            if (descriptor.getType() != DataTypes.GEOMETRY) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
+
+        // Initialize alias
+        name2Alias = new HashMap<>(columns);
+        name2AliasOriginal = new HashMap<>(columns);
+
+        initializeFormatingPatterns();
+        updatePagerWithHiddenColums();
+    }
+
+    private void initializeFormatingPatterns() {
+        int columns = this.getOriginalColumnCount();
+
+        this.patterns = new HashMap<>();
+        for (int i = 0; i < columns; i++) {
+            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
+            String columnName = descriptor.getName();
+            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:
+                String defaultDoublePattern = "#,##0.0000000000";
+                this.patterns.put(columnName,defaultDoublePattern);
+                break;
+            case DataTypes.FLOAT:
+                String defaultFloatPattern = "#,##0.0000";
+                this.patterns.put(columnName,defaultFloatPattern);
+                break;
+            case DataTypes.DATE:
+                String defaultDatePattern = new SimpleDateFormat().toPattern();
+                this.patterns.put(columnName,defaultDatePattern);
+                break;
+            default:
+                this.patterns.put(columnName,null);
+            }
+        }
+
+    }
+
+    private void updatePagerWithHiddenColums() {
+    	return;
+    	
+//        FeatureQuery query = this.getFeaturePager().getFeatureQuery();
+//        if (this.getFeaturePager().getFeatureStore().isEditing()) {
+//            if (query.hasConstantsAttributeNames()) {
+//                query.clearConstantsAttributeNames();
+//            }
+//        } else {
+//            query.setConstantsAttributeNames(this.getHiddenColumnNames());
+//        }
+//        try {
+//            this.getFeaturePager().reload();
+//        } catch (BaseException ex) {
+//            logger.warn("Can't reload paging-helper.", ex);
+//        }
+    }
+
+    @Override
+    public FeaturePagingHelper getFeaturePager() {
+        return this.featurePager;
+    }
+
+    @Override
+    public FeatureQuery getFeatureQuery() {
+        return this.getFeaturePager().getFeatureQuery();
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        return this.getFeaturePager().getFeatureType();
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.getFeaturePager().getFeatureStore();
+    }
+
+    @Override
+    public int getColumnCount() {
+        return visibleColumnNames.size();
+    }
+
+    public int getOriginalColumnCount() {
+        FeatureType featureType = getFeatureType();
+        return featureType.size();
+    }
+
+    @Override
+    public String getColumnName(int column) {
+        String columName = getOriginalColumnName(column);
+        return this.getColumnAlias(columName);
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+
+        // Return the class of the FeatureAttributeDescriptor for the value
+        FeatureAttributeDescriptor attributeDesc = this.getInternalColumnDescriptor(originalIndex);
+        if (attributeDesc == null) {
+        	return super.getColumnClass(originalIndex);
+        }
+        Class<?> clazz = attributeDesc.getObjectClass();
+        return (clazz == null ? super.getColumnClass(originalIndex) : clazz);
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getColumnDescriptor(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+        return this.getInternalColumnDescriptor(originalIndex);
+    }
+
+    protected FeatureAttributeDescriptor getInternalColumnDescriptor(int columnIndex) {
+        FeatureType featureType = getFeatureType();
+        if( featureType == null ) {
+            return null;
+        }
+        return featureType.getAttributeDescriptor(columnIndex);
+    }
+
+    @Override
+    public String getOriginalColumnName(int column) {
+        return getInternalColumnDescriptor(column).getName();
+    }
+
+    @Override
+    public void setColumnVisible(String name, boolean visible) {
+        if (!columnNames.contains(name)) {
+            throw new InvalidParameterException(name); // FIXME
+        }
+        if( visible ) {
+            if ( !visibleColumnNames.contains(name) ) {
+                visibleColumnNames.add(name);
+                setVisibleColumns(visibleColumnNames);
+            }
+        } else {
+            if ( visibleColumnNames.contains(name) ) {
+                visibleColumnNames.remove(name);
+                setVisibleColumns(visibleColumnNames);
+                fireTableStructureChanged();
+            }
+        }
+    }
+
+    public void setFeatureType(FeatureType featureType) {
+        // Check if there is a new column name
+        List<String> newColumns = new ArrayList<>();
+        List<String> renamedColumnsNewName = new ArrayList<>();
+
+        Iterator<FeatureAttributeDescriptor> attrIter = featureType.iterator();
+        FeatureAttributeDescriptor fad ;
+        EditableFeatureAttributeDescriptor efad ;
+
+        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);
+
+        initializeFormatingPatterns();
+
+        getFeatureQuery().setFeatureType(featureType);
+        reloadFeatures();
+        //Selection must be locked to avoid losing it when the table is refreshed
+        selectionLocked=true;
+        //The table is refreshed
+        try {
+            fireTableStructureChanged();
+        } catch (Exception e) {
+            logger.warn("Couldn't reload changed table");
+        }finally{
+            //The locked selection is unlocked.
+            selectionLocked=false;
+        }
+
+    }
+
+    private void reloadFeatures() {
+        try {
+            this.getFeaturePager().reload();
+        } catch (BaseException ex) {
+            throw new FeaturesDataReloadException(ex);
+        }
+    }
+
+    /**
+     * 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<>();
+        resp.addAll(lista);
+        resp.retainAll(listb);
+        return resp;
+    }
+
+    public void setVisibleColumns(List<String> names) {
+        // Recreate the visible column names list
+        // to maintain the original order
+        visibleColumnNames = new ArrayList<>(names.size());
+        for (int i = 0; i < columnNames.size(); i++) {
+            String columnName = columnNames.get(i);
+            if (names.contains(columnName)) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        updatePagerWithHiddenColums();
+        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();
+    }
+
+    @Override
+    public void setColumnOrder(String name, boolean ascending)
+        throws BaseException {
+        FeatureQueryOrder order = this.getFeatureQuery().getOrder();
+        order.clear();
+        order.add(name, ascending);
+        this.getFeaturePager().reload();
+        fireTableChanged(new TableModelEvent(this, 0, this.getRowCount() - 1));
+    }
+
+    @Override
+    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 = this.getFeaturePager().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;
+        }
+    }
+
+    @Override
+    public boolean isColumnVisible(String name) {
+        return visibleColumnNames.contains(name);
+    }
+
+    @Override
+    public String getColumnAlias(String name) {
+        String alias = name2Alias.get(name);
+        return alias == null ? name : alias;
+    }
+
+    @Override
+    public void setColumnAlias(String name, String alias) {
+        name2Alias.put(name, alias);
+        fireTableStructureChanged();
+    }
+
+    @Override
+    public int getOriginalColumnIndex(int columnIndex) {
+        String columnName = visibleColumnNames.get(columnIndex);
+        return columnNames.indexOf(columnName);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public Feature getFeatureAt(int rowIndex) {
+        try {
+            return this.getFeaturePager().getFeatureAt(rowIndex);
+        } catch (BaseException ex) {
+            throw new GetFeatureAtException(rowIndex, ex);
+        }
+    }
+
+    protected Object getFeatureValue(Feature feature, int columnIndex) {
+        int realColumnIndex = getOriginalColumnIndex(columnIndex);
+        return feature.get(realColumnIndex);
+    }
+
+    protected EditableFeature setFeatureValue(Feature feature, int columnIndex,
+        Object value) {
+        int realColumnIndex = getOriginalColumnIndex(columnIndex);
+        EditableFeature editableFeature = feature.getEditable();
+        editableFeature.set(realColumnIndex, value);
+        return editableFeature;
+    }
+
+
+    public void acceptChanges() {
+    	visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
+    	name2AliasOriginal = new HashMap<>(name2Alias);
+    }
+
+    public void cancelChanges() {
+    	visibleColumnNames = new ArrayList<>(visibleColumnNamesOriginal);
+    	name2Alias = new HashMap<>(name2AliasOriginal);
+    	fireTableStructureChanged();
+    }
+
+
+    @Override
+    public String getColumnFormattingPattern(int column) {
+        String columnName = this.visibleColumnNames.get(column);
+        return this.getColumnFormattingPattern(columnName);
+    }
+
+    @Override
+    public String getColumnFormattingPattern(String columnName) {
+        String pattern = this.patterns.get(columnName);
+        return pattern;
+    }
+
+    @Override
+    public void setColumnFormattingPattern(String columnName, String pattern) {
+        this.patterns.put(columnName,pattern);
+    }
+
+    @Override
+    public Locale getLocaleOfData() {
+        return this.localeOfData;
+    }
+
+    @Override
+    public void setLocaleOfData(Locale locale) {
+        this.localeOfData = locale;
+    }
+
+    public boolean isSelectionLocked() {
+        if( !this.getFeatureType().supportReferences() ) {
+            return true;
+        }
+        return selectionLocked;
+    }
+
+    @Override
+    public boolean isSelectionUp() {
+        return this.getFeaturePager().isSelectionUp();
+    }
+
+    @Override
+    public void setSelectionUp(boolean selectionUp) {
+        this.getFeaturePager().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 static final int STATE_NEED_RELOAD_ALL_FEATURES=64;
+
+        private static final long serialVersionUID = -5692569125344166705L;
+
+        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);
+        }
+
+        private 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();
+                updatePagerWithHiddenColums();
+                break;
+            case STATE_NEED_RELOAD_ALL_FEATURES:
+                reloadFeatures();
+                fireTableChanged(new TableModelEvent(DefaultFeatureTableModel.this, 0, getRowCount()));
+                break;
+            case STATE_NEED_SELECTION_UP:
+            case STATE_NONE:
+            default:
+                break;
+            }
+            if( isSelecctionUp ) {
+                getFeaturePager().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_RELOAD_IF_FEATURE_UPDATED:
+                case STATE_NEED_RELOAD_ALL_FEATURES:
+                    this.state=STATE_NEED_RELOAD_ALL_FEATURES;
+                    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_ALL_FEATURES:
+                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_ALL_FEATURES:
+                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();
+            }
+        }
+
+    }
+
+    /**
+     * 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();
+            //Selection must be locked to avoid losing it when the table is refreshed
+            selectionLocked=true;
+            //The table is refreshed
+            try {
+                fireTableDataChanged();
+            } catch (Exception e) {
+                logger.warn("Couldn't reload changed table");
+            }finally{
+                //The locked selection is unlocked.
+                selectionLocked=false;
+            }
+        }
+    }
+
+    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 {
+            FeatureType featureType = this.getFeaturePager().getFeatureType();
+            FeatureStore store = this.getFeaturePager().getFeatureStore();
+            this.setFeatureType( store.getFeatureType(featureType.getId()) );
+        } catch (DataException e) {
+            throw new FeaturesDataReloadException(e);
+        }
+    }
+
+    @Override
+    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.isSelectionUp() ) {
+                    this.setSelectionUp(true);
+                    this.delayAction.nextState(DelayAction.STATE_NEED_SELECTION_UP);
+                }
+            }
+        }
+    }
+    
+    @Override
+    public FeatureSelection getFeatureSelection() {
+        if (selection == null) {
+            try {
+                return getFeatureStore().getFeatureSelection();
+            } catch (Exception e) {
+                logger.warn("Error getting the selection", e);
+            }
+        }
+        return selection;
+    }
+    
+    @Override
+    public void setFeatureSelection(FeatureSelection selection) {
+        this.selection = selection;
+        this.featurePager.setSelection(selection);
+        this.fireChangeListeners(new ActionEvent(this, 0,CHANGE_SELECTION));
+    }
+    
+    public void addChangeListener(ActionListener listener) {
+        if( this.changeListeners==null) {
+            this.changeListeners = new HashSet<>();
+        }
+        this.changeListeners.add(listener);
+    }
+    
+    public void fireChangeListeners(ActionEvent event) {
+        if( this.changeListeners == null ) {
+            return;
+        }
+        for( ActionListener listener : this.changeListeners ) {
+            try {
+                listener.actionPerformed(event);
+            } catch(Exception ex) {
+                // Ignore
+            }
+        }
+    }
+    
+    @Override
+    public int getSelectionCount() {
+        try {
+            FeatureSelection selection = this.getFeatureSelection();
+            return (int) selection.getSize();
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't get selection of the FeatureTableModel",ex);
+        }
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DefaultFeatureTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/WKTToGeometryException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/WKTToGeometryException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/WKTToGeometryException.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.editors;
+
+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.344/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/featuretable/table/editors/WKTToGeometryException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/TextAreaCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/TextAreaCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/TextAreaCellEditor.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.editors;
+
+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.344/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/featuretable/table/editors/TextAreaCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/GeometryWKTCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/GeometryWKTCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/GeometryWKTCellEditor.java	(revision 46118)
@@ -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.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.dal.swing.impl.featuretable.table.editors;
+
+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.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.GeometryToWKTException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.i18n.Messages;
+
+/**
+ * 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 {
+            if( wkt==null || StringUtils.isEmpty(wkt.trim()) ) {
+                return null;
+            }
+            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.344/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/featuretable/table/editors/GeometryWKTCellEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/FormattedCellEditor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/FormattedCellEditor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/editors/FormattedCellEditor.java	(revision 46118)
@@ -0,0 +1,168 @@
+package org.gvsig.fmap.dal.swing.impl.featuretable.table.editors;
+
+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.fmap.dal.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
+
+import org.gvsig.tools.dataTypes.DataTypes;
+
+public class FormattedCellEditor extends DefaultCellEditor {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1409667557139440155L;
+    private final FeatureTableModel tableModel;
+    private final SimpleDateFormat dateformat;
+    private final NumberFormat numberFormat;
+    private String pattern;
+    private int type;
+
+    public FormattedCellEditor(DefaultFeatureTableModel 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.getColumnFormattingPattern(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.344/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/featuretable/table/FeaturesDataReloadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/FeaturesDataReloadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/FeaturesDataReloadException.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.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.344/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/featuretable/table/FeaturesDataReloadException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/SelectedFeatureTypeChangeListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/SelectedFeatureTypeChangeListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/SelectedFeatureTypeChangeListener.java	(revision 46118)
@@ -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.swing.impl.featuretable.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.344/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/featuretable/table/SelectedFeatureTypeChangeListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FeatureCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FeatureCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FeatureCellRenderer.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.renders;
+
+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.344/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/featuretable/table/renders/FeatureCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryCellRenderer.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.renders;
+
+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.344/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/featuretable/table/renders/GeometryCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryToWKTException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryToWKTException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryToWKTException.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.renders;
+
+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.344/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/featuretable/table/renders/GeometryToWKTException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/TextAreaCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/TextAreaCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/TextAreaCellRenderer.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.renders;
+
+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.344/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/featuretable/table/renders/TextAreaCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/JToggleButtonHeaderCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/JToggleButtonHeaderCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/JToggleButtonHeaderCellRenderer.java	(revision 46118)
@@ -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):
+ * 2008 {DiSiD Technologies}  {{Task}}
+ */
+package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
+
+import java.awt.Component;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+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.dal.swing.impl.featuretable.FeatureTable;
+import org.gvsig.fmap.dal.swing.impl.featuretable.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);
+                }
+                table.fireColumnSelection(new ActionEvent(table, 1, "ColumnSelection"));
+            }
+        }
+    }
+
+    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.344/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/featuretable/table/renders/JToggleButtonHeaderCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryWKTCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryWKTCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GeometryWKTCellRenderer.java	(revision 46118)
@@ -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):
+ * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
+ */
+package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
+
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.TextAreaCellRenderer;
+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.344/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/featuretable/table/renders/GeometryWKTCellRenderer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FormattedCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FormattedCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/FormattedCellRenderer.java	(revision 46118)
@@ -0,0 +1,58 @@
+package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
+
+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;
+import org.gvsig.fmap.dal.swing.FeatureTableModel;
+
+public class FormattedCellRenderer extends DefaultTableCellRenderer {
+
+    private static final long serialVersionUID = -162038647556726890L;
+    private final FeatureTableModel tableModel;
+    private final DecimalFormat decimalFormat;
+    private final SimpleDateFormat dateFormat;
+
+    public FormattedCellRenderer(FeatureTableModel tableModel) {
+        this.tableModel = tableModel;
+        this.decimalFormat = (DecimalFormat) NumberFormat.getInstance(this.tableModel.getLocaleOfData());
+        this.dateFormat = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM, this.tableModel.getLocaleOfData());
+    }
+
+    @Override
+    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.getColumnFormattingPattern(column);
+                if ( !StringUtils.isBlank(pattern) ) {
+                    this.decimalFormat.applyPattern(pattern);
+                    String formated = this.decimalFormat.format(value);
+                    this.setHorizontalAlignment(SwingConstants.RIGHT);
+                    this.setText(formated);
+                    return this;
+                }
+            }
+            if ( value instanceof Date ) {
+                String pattern = this.tableModel.getColumnFormattingPattern(column);
+                if ( !StringUtils.isBlank(pattern) ) {
+                    this.dateFormat.applyPattern(pattern);
+                    String formated = this.dateFormat.format(value);
+                    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.344/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/featuretable/table/renders/GetFeatureAtException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GetFeatureAtException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/renders/GetFeatureAtException.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.renders;
+
+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.344/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/featuretable/table/renders/GetFeatureAtException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/EmptyFeatureTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/EmptyFeatureTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/EmptyFeatureTableModel.java	(revision 46118)
@@ -0,0 +1,402 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.featuretable.table;
+
+import java.awt.event.ActionListener;
+import java.security.InvalidParameterException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import javax.swing.table.AbstractTableModel;
+
+import org.gvsig.fmap.dal.DataTypes;
+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.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.ComplexObserver;
+import org.gvsig.tools.observer.Observable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EmptyFeatureTableModel extends AbstractTableModel implements org.gvsig.fmap.dal.swing.FeatureTableModel,  ComplexObserver  {
+
+    private static final long serialVersionUID = -8223987814719746492L;
+    
+    private static final Logger logger = LoggerFactory.getLogger(EmptyFeatureTableModel.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;    
+
+    private DynStruct struct = null;
+    
+
+    public EmptyFeatureTableModel(DynStruct struct) {
+        this.struct = struct;
+        this.localeOfData = Locale.getDefault();
+        this.initialize();
+    }
+
+    private void initialize() {
+        
+        int columns = this.getOriginalColumnCount();
+
+        // Initilize visible columns
+        columnNames = new ArrayList<>(columns);
+        visibleColumnNames = new ArrayList<>(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 = this.getInternalColumnDescriptor(i);
+            if (descriptor.getType() != DataTypes.GEOMETRY) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
+        
+        // Initialize alias
+        name2Alias = new HashMap<>(columns);
+        name2AliasOriginal = new HashMap<>(columns);
+
+        // Initialize formating patters
+        this.patterns = new HashMap<>();
+        for (int i = 0; i < columns; i++) {
+            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
+            String columnName = descriptor.getName();
+            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);
+            }
+        }
+
+        updatePagerWithHiddenColums();
+    }
+
+    private void updatePagerWithHiddenColums() {
+        FeatureQuery query = this.getFeaturePager().getFeatureQuery();
+        if (this.getFeaturePager().getFeatureStore().isEditing()) {
+            if (query.hasConstantsAttributeNames()) {
+                query.clearConstantsAttributeNames();
+            }
+        } else {
+            query.setConstantsAttributeNames(this.getHiddenColumnNames());
+        }
+        try {
+            this.getFeaturePager().reload();
+        } catch (BaseException ex) {
+            logger.warn("Can't reload paging-helper.", ex);
+        }
+    }
+    
+    @Override
+    public FeaturePagingHelper getFeaturePager() {
+        return null;
+    }
+        
+    @Override
+    public FeatureQuery getFeatureQuery() {
+        return null;
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        return null;
+    }
+    
+    @Override
+    public FeatureStore getFeatureStore() {
+        return null;
+    }
+
+    @Override
+    public FeatureSelection getFeatureSelection() {
+        return null;
+    }
+
+    @Override
+    public void setFeatureSelection(FeatureSelection selection) {
+        // Do nothing
+    }
+
+    @Override
+    public int getColumnCount() {
+        return visibleColumnNames.size();
+    }
+
+    public int getOriginalColumnCount() {
+        return this.struct.getDynFields().length;
+    }
+
+    @Override
+    public String getColumnName(int column) {
+        String columName = getOriginalColumnName(column);
+        return this.getColumnAlias(columName);
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+        
+        // Return the class of the FeatureAttributeDescriptor for the value
+        FeatureAttributeDescriptor attributeDesc = this.getInternalColumnDescriptor(originalIndex);
+        if (attributeDesc == null) {
+        	return super.getColumnClass(originalIndex);
+        }
+        Class<?> clazz = attributeDesc.getObjectClass();
+        return (clazz == null ? super.getColumnClass(originalIndex) : clazz);
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getColumnDescriptor(int columnIndex) {
+        int originalIndex = getOriginalColumnIndex(columnIndex);
+        return this.getInternalColumnDescriptor(originalIndex);
+    }
+    
+    protected FeatureAttributeDescriptor getInternalColumnDescriptor(int columnIndex) {
+        return new DynFieldFacadeOfAFeatureAttributeDescriptor(this.struct.getDynFields()[columnIndex]);
+    }
+
+    @Override
+    public String getOriginalColumnName(int column) {
+        return this.struct.getDynFields()[column].getName();
+    }
+
+    @Override
+    public void setColumnVisible(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();
+        }
+
+    }
+
+    public void setFeatureType(FeatureType featureType) {
+    }
+
+    private void setVisibleColumns(List<String> names) {
+        // Recreate the visible column names list
+        // to maintain the original order        
+        visibleColumnNames = new ArrayList<>(names.size());
+        for (String columnName : columnNames) {
+            if (names.contains(columnName)) {
+                visibleColumnNames.add(columnName);
+            }
+        }
+        updatePagerWithHiddenColums();
+        fireTableStructureChanged();
+    }
+
+    protected String[] getHiddenColumnNames() {
+        List<String> hiddenColumns = new ArrayList<>();
+        hiddenColumns.addAll(columnNames);
+        
+        for (String columnName : visibleColumnNames) {
+            hiddenColumns.remove(columnName);
+        }
+        if( hiddenColumns.size()<1 ) {
+            return null;
+        }
+        return (String[]) hiddenColumns.toArray(new String[hiddenColumns.size()]);
+    }
+        
+    /**
+     * Changes all columns to be visible.
+     */
+    @Override
+    public void setAllVisible() {
+        visibleColumnNames.clear();
+        visibleColumnNames.addAll(columnNames);
+        fireTableStructureChanged();
+    }
+
+    @Override
+    public void setColumnOrder(String name, boolean ascending)
+        throws BaseException {
+    }
+
+    @Override
+    public int getRowCount() {
+        return 0;
+    }
+
+    @Override
+    public boolean isColumnVisible(String name) {
+        return visibleColumnNames.contains(name);
+    }
+
+    @Override
+    public String getColumnAlias(String name) {
+        String alias = name2Alias.get(name);
+        return alias == null ? name : alias;
+    }
+
+    @Override
+    public void setColumnAlias(String name, String alias) {
+        name2Alias.put(name, alias);
+        fireTableStructureChanged();
+    }
+
+    @Override
+    public int getOriginalColumnIndex(int columnIndex) {
+        String columnName = visibleColumnNames.get(columnIndex);
+        return columnNames.indexOf(columnName);
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        return null;
+    }
+    
+    @Override
+    public Feature getFeatureAt(int rowIndex) {
+        return null;
+    }    
+    
+    protected Object getFeatureValue(Feature feature, int columnIndex) {
+        return null;
+    }
+
+    protected EditableFeature setFeatureValue(Feature feature, int columnIndex,
+        Object value) {
+        return null;
+    }
+    
+
+    public void acceptChanges() {
+    	visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
+    	name2AliasOriginal = new HashMap<>(name2Alias);
+    }
+    
+    public void cancelChanges() {
+    	visibleColumnNames = new ArrayList<>(visibleColumnNamesOriginal);
+    	name2Alias = new HashMap<>(name2AliasOriginal);
+    	fireTableStructureChanged();
+    }
+
+    
+    @Override
+    public String getColumnFormattingPattern(int column) {
+        String columnName = this.visibleColumnNames.get(column);
+        return this.getColumnFormattingPattern(columnName);
+    }
+    
+    @Override
+    public String getColumnFormattingPattern(String columnName) {
+        String pattern = this.patterns.get(columnName);
+        return pattern;
+    }
+    
+    @Override
+    public void setColumnFormattingPattern(String columnName, String pattern) {
+        this.patterns.put(columnName,pattern);
+    }
+    
+    @Override
+    public Locale getLocaleOfData() {
+        return this.localeOfData;
+    }
+    
+    @Override
+    public void setLocaleOfData(Locale locale) {
+        this.localeOfData = locale;
+    }
+    
+    @Override
+    public boolean isSelectionLocked() {
+        return false;
+    }    
+
+    @Override
+    public boolean isSelectionUp() {
+        return false;
+    }    
+
+    @Override
+    public void setSelectionUp(boolean selectionUp) {
+    }
+
+    @Override
+    public void update(final Observable observable, final Object notification) {
+    }
+
+    @Override
+    public int getSelectionCount() {
+        return 0;
+    }
+
+    @Override
+    public void addChangeListener(ActionListener listener) {
+        // Do nothing
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/EmptyFeatureTableModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/ColumnHeaderSelectionChangeNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/ColumnHeaderSelectionChangeNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/ColumnHeaderSelectionChangeNotification.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.notification;
+
+import org.gvsig.fmap.dal.swing.impl.featuretable.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.344/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/featuretable/table/notification/ColumnHeaderSelectionChangeNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/FeatureTableNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/FeatureTableNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/notification/FeatureTableNotification.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable.table.notification;
+
+import org.gvsig.fmap.dal.swing.impl.featuretable.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.344/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/featuretable/table/notification/FeatureTableNotification.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DynFieldFacadeOfAFeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DynFieldFacadeOfAFeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/table/DynFieldFacadeOfAFeatureAttributeDescriptor.java	(revision 46118)
@@ -0,0 +1,810 @@
+
+package org.gvsig.fmap.dal.swing.impl.featuretable.table;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.text.DateFormat;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.function.Supplier;
+import javax.json.JsonObject;
+import org.gvsig.json.JsonObjectBuilder;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.feature.DataProfile;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynField_v2;
+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.Tags;
+import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+
+public class DynFieldFacadeOfAFeatureAttributeDescriptor implements FeatureAttributeDescriptor {
+
+    private DynField field;
+    private CoercionContext coerceContext;
+  
+    public DynFieldFacadeOfAFeatureAttributeDescriptor(DynField field) {
+        this.field = field;
+    }
+    
+    @Override
+    public FeatureAttributeDescriptor getCopy() {
+        try {
+            return (FeatureAttributeDescriptor) field.clone();
+        } catch (CloneNotSupportedException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public MathContext getMathContext() {
+      return MathContext.UNLIMITED;
+    }
+
+    @Override
+    public String getDataTypeName() {
+        return field.getDataType().getName();
+    }
+
+    @Override
+    public int getSize() {
+        return 1;
+    }
+
+    @Override
+    public int getPrecision() {
+        return 0;
+    }
+
+    @Override
+    public int getScale() {
+        return 0;
+    }
+
+    @Override
+    public Coercion getCoercion() {
+      return this.field.getDataType().getCoercion();
+    }
+
+    @Override
+    public CoercionContext getCoercionContext() {
+      if( this.coerceContext==null ) {
+        if( this.getDataType().isNumeric() ) {
+          if( this.getSize()==0 ) {
+            this.coerceContext = DataTypeUtils.coerceContextDefaultDecimal();
+          } else {
+            this.coerceContext = DataTypeUtils.coerceContextDecimal(
+                    null, 
+                    this.getSize(), 
+                    this.getPrecision(),
+                    BigDecimal.ROUND_HALF_UP
+            );
+          }
+        } else {
+            this.coerceContext = DataTypeUtils.coerceContextDefaultLocale();
+        }
+      }
+      return this.coerceContext;
+    }
+
+    @Override
+    public Class getObjectClass() {
+        return this.getDataType().getDefaultClass();
+    }
+
+    @Override
+    public int getMinimumOccurrences() {
+        return 0;
+    }
+
+    @Override
+    public int getMaximumOccurrences() {
+        return 0;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return false;
+    }
+
+    @Override
+    public boolean allowNull() {
+        return true;
+    }
+
+    @Override
+    public Evaluator getEvaluator() {
+        return null;
+    }
+
+    @Override
+    public IProjection getSRS() {
+        return null;
+    }
+
+    @Override
+    public int getGeometryType() {
+        return Geometry.TYPES.GEOMETRY;
+    }
+
+    @Override
+    public int getGeometrySubType() {
+        return Geometry.SUBTYPES.UNKNOWN;
+    }
+
+    @Override
+    public GeometryType getGeomType() {
+        return null;
+    }
+
+    @Override
+    public DateFormat getDateFormat() {
+        return null;
+    }
+
+    @Override
+    public int getIndex() {
+        return -1;
+    }
+
+    @Override
+    public String getAdditionalInfo(String infoName) {
+        return null;
+    }
+
+    @Override
+    public boolean isAutomatic() {
+        return false;
+    }
+
+    @Override
+    public boolean isTime() {
+        return false;
+    }
+
+    @Override
+    public boolean isIndexed() {
+        return false;
+    }
+
+    @Override
+    public boolean allowIndexDuplicateds() {
+        return false;
+    }
+
+    @Override
+    public boolean isIndexAscending() {
+        return false;
+    }
+
+    @Override
+    public FeatureAttributeGetter getFeatureAttributeGetter() {
+        return null;
+    }
+
+    @Override
+    public void setFeatureAttributeGetter(FeatureAttributeGetter featureAttributeGetter) {
+    }
+
+    @Override
+    public FeatureAttributeEmulator getFeatureAttributeEmulator() {
+        return null;
+    }
+
+    @Override
+    public String getName() {
+        return this.field.getName();
+    }
+
+    @Override
+    public int getType() {
+        return this.field.getDataType().getType();
+    }
+
+    @Override
+    public DataType getDataType() {
+        return this.field.getDataType();
+    }
+
+    @Override
+    public Object getDefaultValueCoerced() {
+        try {
+            return this.getDataType().coerce(this.getDefaultValue());
+        } catch (CoercionException ex) {
+            return null;
+        }
+    }
+    
+    @Override
+    public String getSubtype() {
+        return null;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.field.getDescription();
+    }
+
+    @Override
+    public Object getDefaultValue() {
+        return this.field.getDefaultValue();
+    }
+
+    @Override
+    public String getGroup() {
+        return this.field.getGroup();
+    }
+
+    @Override
+    public int getOder() {
+        return this.field.getOder();
+    }
+
+    @Override
+    public boolean isMandatory() {
+        return this.field.isMandatory();
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return this.field.isPersistent();
+    }
+
+    @Override
+    public boolean isHidden() {
+        return this.field.isHidden();
+    }
+
+    @Override
+    public boolean isReadOnly() {
+        return this.field.isReadOnly();
+    }
+
+    @Override
+    public boolean isContainer() {
+        return this.field.isContainer();
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues() {
+        return this.field.getAvailableValues();
+    }
+
+    @Override
+    public boolean hasConstantAvailableValues() {
+        DynObjectValueItem[] values = this.field.getAvailableValues();
+        return ! ArrayUtils.isEmpty(values);
+    }
+
+    @Override
+    public Object getMinValue() {
+        return this.field.getMinValue();
+    }
+
+    @Override
+    public Object getMaxValue() {
+        return this.field.getMaxValue();
+    }
+
+    @Override
+    public Class getClassOfValue() {
+        return this.field.getClassOfValue();
+    }
+
+    @Override
+    public Class getClassOfItems() {
+        return this.field.getClassOfItems();
+    }
+
+    @Override
+    public DynField setDescription(String description) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setType(int type) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setType(DataType type) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setSubtype(String subtype) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setDefaultFieldValue(Object defaultValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setGroup(String groupName) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setOrder(int order) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setMandatory(boolean mandatory) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setHidden(boolean hidden) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setPersistent(boolean persistent) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setAvailableValues(DynObjectValueItem[] values) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setAvailableValues(List values) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setMinValue(Object minValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setMaxValue(Object maxValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setClassOfValue(Class theClass) throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setClassOfItems(Class theClass) throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setReadOnly(boolean isReadOnly) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField getElementsType() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setElementsType(int type) throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setElementsType(DynStruct type) throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public void validate(Object value) throws DynFieldValidateException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public Object coerce(Object value) throws CoercionException {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public int getTheTypeOfAvailableValues() {
+        return this.field.getTheTypeOfAvailableValues();
+    }
+
+    @Override
+    public DynField setDefaultDynValue(Object defaultValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setTheTypeOfAvailableValues(int type) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DynFieldFacadeOfAFeatureAttributeDescriptor other = (DynFieldFacadeOfAFeatureAttributeDescriptor) super.clone(); 
+        other.field = (DynField) other.field.clone();
+        return other;
+    }
+
+    @Override
+    public boolean isComputed() {
+        if( field instanceof DynField_v2 ) {
+            return ((DynField_v2)field).isCalculated();
+        }
+        return false;
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        return null;
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        return null;
+    }
+
+    @Override
+    public Interval getInterval() {
+        return null;
+    }
+
+    @Override
+    public String getDataProfileName() {
+        return null;
+    }
+
+    @Override
+    public String[] getRequiredFieldNames() {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfValue(DynStruct dynStrct) {
+        ((DynField_v2)this.field).setClassOfValue(dynStrct);
+        return this;
+    }
+
+    @Override
+    public DynField setClassOfValue(String theClassNameOfValue) {
+        ((DynField_v2)this.field).setClassOfValue(theClassNameOfValue);
+        return this;
+    }
+
+    @Override
+    public String getClassNameOfValue() {
+        return ((DynField_v2)this.field).getClassNameOfValue();
+    }
+
+    @Override
+    public DynStruct getDynClassOfValue() {
+        return ((DynField_v2)this.field).getDynClassOfValue();
+    }
+
+    @Override
+    public DynField setTypeOfItems(int type) {
+        ((DynField_v2)this.field).setTypeOfItems(type);
+        return this;
+    }
+
+    @Override
+    public int getTypeOfItems() {
+        return ((DynField_v2)this.field).getTypeOfItems();
+    }
+
+    @Override
+    public DynField setClassOfItems(DynStruct dynStrct) {
+        ((DynField_v2)this.field).setClassOfItems(dynStrct);
+        return this;
+    }
+
+    @Override
+    public DynField setClassOfItems(String theClassNameOfValue) {
+        ((DynField_v2)this.field).setClassOfItems(theClassNameOfValue);
+        return this;
+    }
+
+    @Override
+    public String getClassNameOfItems() {
+        return ((DynField_v2)this.field).getClassNameOfItems();
+    }
+
+    @Override
+    public DynStruct getDynClassOfItems() {
+        return ((DynField_v2)this.field).getDynClassOfItems();
+    }
+
+    @Override
+    public Tags getTags() {
+        return ((DynField_v2)this.field).getTags();
+    }
+
+    @Override
+    public DynField setRelationType(int relationType) {
+        ((DynField_v2)this.field).setRelationType(relationType);
+        return this;
+    }
+
+    @Override
+    public int getRelationType() {
+        return ((DynField_v2)this.field).getRelationType();
+    }
+
+    @Override
+    public DynField setAvailableValues(DynMethod computeAvailableValues) {
+        ((DynField_v2)this.field).setAvailableValues(computeAvailableValues);
+        return this;
+    }
+
+    @Override
+    public DynMethod getAvailableValuesMethod() {
+        return ((DynField_v2)this.field).getAvailableValuesMethod();
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues(DynObject self) {
+        return ((DynField_v2)this.field).getAvailableValues(self);
+    }
+
+    @Override
+    public boolean isAvailableValuesCalculated() {
+        return ((DynField_v2)this.field).isAvailableValuesCalculated();
+    }
+
+    @Override
+    public DynField setCalculateMethod(DynMethod computeValue) {
+        ((DynField_v2)this.field).setCalculateMethod(computeValue);
+        return this;
+    }
+
+    @Override
+    public DynMethod getCalculateMethod() {
+        return ((DynField_v2)this.field).getCalculateMethod();
+    }
+
+    @Override
+    public boolean isCalculated() {
+        return ((DynField_v2)this.field).isCalculated();
+    }
+
+    @Override
+    public Object getCalculatedValue(DynObject self) {
+        return ((DynField_v2)this.field).getCalculatedValue(self);
+    }
+
+    @Override
+    public void copyFrom(DynField other) {
+        ((DynField_v2)this.field).copyFrom(other);
+    }
+
+    @Override
+    public DynField setValidateElements(boolean validate) {
+        ((DynField_v2)this.field).setValidateElements(validate);
+        return this;
+    }
+
+    @Override
+    public boolean getValidateElements() {
+        return ((DynField_v2)this.field).getValidateElements();
+    }
+
+    @Override
+    public String getLabel() {
+        return ((DynField_v2)this.field).getLabel();
+    }
+
+    @Override
+    public DynField setLabel(String label) {
+        ((DynField_v2)this.field).setLabel(label);
+        return this;
+    }
+
+    @Override
+    public void recentUsed() {
+    }
+
+    @Override
+    public boolean isForeingKey() {
+        return false;
+    }
+
+    @Override
+    public ForeingKey getForeingKey() {
+        return null;
+    }
+
+    @Override
+    public String getShortLabel() {
+        return ((DynField_v2)field).getShortLabel();
+    }
+
+    @Override
+    public DynField setShortLabel(String shortLabel) {
+        ((DynField_v2)field).setShortLabel(shortLabel);
+        return this;
+    }
+
+    @Override
+    public String getLocalizedShortLabel() {
+        return ((DynField_v2)field).getLocalizedShortLabel();
+    }
+
+    @Override
+    public String getLocalizedLabel() {
+        return ((DynField_v2)field).getLocalizedLabel();
+    }
+
+    @Override
+    public String getLabelOfValue(Object value) {
+        return Objects.toString(value, "");
+    }
+
+    @Override
+    public DataProfile getDataProfile() {
+        return null;
+    }
+
+    @Override
+    public boolean hasOnlyMetadataChanges(FeatureAttributeDescriptor other) {
+        return false;
+    }
+
+    @Override
+    public boolean hasLabel() {
+        return StringUtils.isNotBlank(((DynField_v2) this.field).getLabel());
+    }
+
+    @Override
+    public boolean hasShortLabel() {
+        return StringUtils.isNotBlank(((DynField_v2) this.field).getShortLabel());
+    }
+
+    @Override
+    public boolean hasDescription() {
+        return StringUtils.isNotBlank(this.field.getDescription());
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getValue() {
+        return this;
+    }
+
+  @Override
+  public int getRoundMode() {
+    return BigDecimal.ROUND_HALF_UP;
+  }
+
+  @Override
+  public Locale getLocale() {
+    return Locale.ENGLISH;
+  }
+
+  @Override
+  public Object get(String name) {
+    return null;
+  }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        
+    }
+
+  @Override
+  public int getDisplaySize() {
+    return 0;
+  }
+
+    @Override
+    public Expression getAvailableValuesExpression() {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(String expression) {
+        return this;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(Expression expression) {
+        return this;
+    }
+
+    @Override
+    public boolean isAvoidCachingAvailableValues() {
+        return false;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return null;
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        return null;
+    }
+
+    @Override
+    public boolean isInAvailableValues(Object valueToCheck) {
+        if (hasConstantAvailableValues() && this.field.getAvailableValues().length > 0) {
+            for (DynObjectValueItem availableValue : this.field.getAvailableValues()) {
+                if (Objects.equals(valueToCheck, availableValue.getValue())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAvailableValues() {
+        return this.field.getAvailableValues()!=null;
+    }
+
+    @Override
+    public Supplier getDefaultValueSupplier() {
+        return ((DynField_v2)this.field).getDefaultValueSupplier();
+    }
+
+    @Override
+    public DynField setDefaultValueSupplier(Supplier supplier) {
+        ((DynField_v2)this.field).setDefaultValueSupplier(supplier);
+        return this;
+    }
+
+    @Override
+    public Expression getAvailableValuesFilter() {
+        return null;
+    }
+
+    @Override
+    public Object getCoercedDefaultValue() {
+        return ((DynField_v2)this.field).getCoercedDefaultValue();
+    }
+
+    @Override
+    public String getDefaultFormat() {
+        return null;
+    }
+
+    @Override
+    public String format(Object value) {
+        try {
+            return DataTypeUtils.toString(value, Objects.toString(value, ""));
+        } catch(Exception ex) {
+            return Objects.toString(value, "");
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/SelectionChangeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/SelectionChangeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/SelectionChangeException.java	(revision 46118)
@@ -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.dal.swing.impl.featuretable;
+
+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.344/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/featuretable/SelectionChangeException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureSelectionModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureSelectionModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureSelectionModel.java	(revision 46118)
@@ -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.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {}  {{Task}}
+ */
+package org.gvsig.fmap.dal.swing.impl.featuretable;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+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.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.exception.ConcurrentDataModificationException;
+import org.gvsig.fmap.dal.swing.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 final 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)  {
+		this.featureTableModel = featureTableModel;
+                this.featureTableModel.getFeatureSelection().addObserver(this);
+                this.featureTableModel.addChangeListener(new ActionListener() {
+
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        if( FeatureTableModel.CHANGE_SELECTION.equals(e.getActionCommand()) ) {
+                            featureSelectionChanged();
+                        }
+                    }
+                });
+	}
+        
+        private void featureSelectionChanged() {
+            this.featureTableModel.getFeatureSelection().addObserver(this);
+        }
+        
+    @Override
+	public int getAnchorSelectionIndex() {
+		return anchor;
+	}
+
+    @Override
+	public int getLeadSelectionIndex() {
+		return lead;
+	}
+
+    @Override
+	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;
+		*/
+	}
+
+    @Override
+	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);
+		}
+		*/
+
+	}
+
+    @Override
+	public void insertIndexInterval(int index, int length, boolean before) {
+		// Nothing to do
+	}
+
+    @Override
+	public void removeIndexInterval(int index0, int index1) {
+		// Nothing to do
+	}
+
+    @Override
+	public void setAnchorSelectionIndex(int index) {
+		this.anchor = index;
+	}
+
+    @Override
+	public void setLeadSelectionIndex(int index) {
+		this.lead = index;
+	}
+
+    @Override
+	public void addSelectionInterval(int index0, int index1) {
+	    if (!featureTableModel.isSelectionLocked()){
+	        doWithSelection(new FeatureSelectionOperation() {
+
+                    @Override
+	            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);
+	    }
+	}
+
+    @Override
+	public void setSelectionInterval(int index0, int index1) {
+	    if (!featureTableModel.isSelectionLocked()){
+	        doWithSelection(new FeatureSelectionOperation() {
+
+                    @Override
+	            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);
+	    }
+	}
+
+    @Override
+	public void removeSelectionInterval(int index0, int index1) {
+	    if (!featureTableModel.isSelectionLocked()){
+	        doWithSelection(new FeatureSelectionOperation() {
+
+                    @Override
+	            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);
+	    }
+	}
+
+    @Override
+	public void clearSelection() {
+	    if (!featureTableModel.isSelectionLocked()){
+	        try {
+	            getFeatureSelection().deselectAll();
+	        } catch (DataException e) {
+	            throw new SelectionChangeException(e);
+	        }
+	    }
+	}
+
+    @Override
+	public boolean isSelectedIndex(int index) {
+		if (index == -1) {
+			return false;
+		}
+		Feature feature = featureTableModel.getFeatureAt(index);
+		return getFeatureSelection().isSelected(feature);
+	}
+
+    @Override
+	public boolean isSelectionEmpty() {
+		try {
+			return getFeatureSelection().isEmpty();
+		} catch (Exception ex) {
+			throw new SelectionChangeException(ex);
+		}
+	}
+
+    /**
+     *
+     * @return
+     */
+    @Override
+	public boolean getValueIsAdjusting() {
+		return isAdjusting;
+	}
+
+    @Override
+	public void setValueIsAdjusting(boolean valueIsAdjusting) {
+		if (this.isAdjusting != valueIsAdjusting) {
+			this.isAdjusting = valueIsAdjusting;
+			if (this.isAdjusting) {
+				getFeatureSelection().beginComplexNotification();
+			} else {
+				getFeatureSelection().endComplexNotification();
+			}
+		}
+	}
+
+    @Override
+	public int getSelectionMode() {
+		return selectionMode;
+	}
+
+    @Override
+	public void setSelectionMode(int selectionMode) {
+		this.selectionMode = selectionMode;
+	}
+
+    @Override
+	public void addListSelectionListener(ListSelectionListener listener) {
+		listenerList.add(ListSelectionListener.class, listener);
+	}
+
+    @Override
+	public void removeListSelectionListener(ListSelectionListener listener) {
+		listenerList.remove(ListSelectionListener.class, listener);
+	}
+
+    @Override
+	public void update(Observable observable, Object notification) {
+            if( observable instanceof FeatureSelection ) {
+                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() {
+                return this.featureTableModel.getFeatureSelection();
+	}
+
+	/**
+	 * @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()) {
+                FeatureStore store = getFeatureStore();
+            	FeatureQuery query = this.featureTableModel.getFeatureQuery();
+            	if(query== null){
+                    query = store.createFeatureQuery();
+            	}else{
+                    try {
+                        query = (FeatureQuery) query.clone();
+                    } catch (CloneNotSupportedException ex) {
+                    }
+            	}
+                query.addEssentialAttributeNames(store);
+                fs = store.getFeatureSet(query);
+                diter = fs.fastIterator();
+                Feature feat;
+                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.344/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/featuretable/FeatureSelectionModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTable.java	(revision 46118)
@@ -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.swing.impl.featuretable;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+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.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.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.FormattedCellEditor;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.GeometryWKTCellEditor;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.FeatureCellRenderer;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.FormattedCellRenderer;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.GeometryWKTCellRenderer;
+import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.JToggleButtonHeaderCellRenderer;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+public class FeatureTable extends JTable implements Observer, Observable {
+
+    private static final long serialVersionUID = -6139395189283163964L;
+
+    private final FeatureTableModel featureTableModel;
+    private JToggleButtonHeaderCellRenderer headerCellRenderer;
+    private final Set<ActionListener> columnSelectionListeners;
+    private static final int COLUMN_HEADER_MARGIN = 8;
+
+    private static final int COLUMN_HEADER_MIN_WIDTH = 50;
+
+    public FeatureTable(FeatureTableModel featureTableModel) {
+        super(featureTableModel);
+        this.featureTableModel = featureTableModel;
+        this.columnSelectionListeners = new HashSet<>();
+        init();
+    }
+
+    public void addColumnSelectionListener(ActionListener listener) {
+       this.columnSelectionListeners.add(listener);
+    }
+
+    public void fireColumnSelection(ActionEvent e) {
+        for( ActionListener listener : this.columnSelectionListeners ) {
+            try {
+                listener.actionPerformed(e);
+            } catch(Exception ex) {
+
+            }
+        }
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        if( observable instanceof FeatureSelection ) {
+            // Ha cambiado la seleccion, simplemente repintamos.
+            repaint();
+            return;
+        }
+        if( observable instanceof FeatureStore ) {
+            FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
+            String type = fsNotification.getType();
+            /*
+             * 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);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void addObserver(Observer observer) {
+        headerCellRenderer.addObserver(observer);
+    }
+
+    @Override
+    public void deleteObserver(Observer observer) {
+        headerCellRenderer.deleteObserver(observer);
+    }
+
+    @Override
+    public void deleteObservers() {
+        headerCellRenderer.deleteObservers();
+    }
+
+//    public void setSelectionUp(boolean selectionUp) {
+//            ((FeatureTableModel) getModel()).setSelectionUp(selectionUp);
+//            scrollRectToVisible(getCellRect(0, 0, true));
+//    }
+    @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 DefaultFeatureTableModel) {
+            DefaultFeatureTableModel model = (DefaultFeatureTableModel) 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() {
+        setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+        featureTableModel.getFeatureStore().addObserver(this);
+        this.featureTableModel.getFeatureSelection().addObserver(this);
+        this.featureTableModel.addChangeListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if( FeatureTableModel.CHANGE_SELECTION.equals(e.getActionCommand()) ) {
+                    featureSelectionChanged();
+                }
+            }
+        });        
+        // 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);
+        }
+        this.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
+    }
+
+    private void featureSelectionChanged() {
+        this.featureTableModel.getFeatureSelection().addObserver(this);
+    }
+
+    @Override
+    public void setModel(TableModel dataModel) {
+        super.setModel(dataModel);
+    }
+
+    @Override
+    public int getSelectedColumnCount() {
+        return headerCellRenderer.getSelectedColumns().length;
+    }
+
+    @Override
+    public int[] getSelectedColumns() {
+        return headerCellRenderer.getSelectedColumns();
+    }
+
+    @Override
+    public void tableChanged(TableModelEvent e) {
+        // Clear the header selection
+        if (e != null && e.getFirstRow() == TableModelEvent.HEADER_ROW
+                && headerCellRenderer != null) {
+            headerCellRenderer.deselectAll();
+        }
+
+        super.tableChanged(e);
+    }
+
+    @Override
+    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() {
+        return this.featureTableModel.getSelectionCount();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTablePanel.java	(revision 46118)
@@ -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.fmap.dal.swing.impl.featuretable;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import javax.swing.AbstractListModel;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+
+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 org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.FeatureTableModel;
+import org.gvsig.fmap.dal.swing.JFeatureTable;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+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,JFeatureTable {
+
+    private static final Logger logger = LoggerFactory.getLogger(FeatureTablePanel.class);
+
+    private static final long serialVersionUID = -9199073063283531216L;
+
+    private FeatureTable table = null;
+    private JScrollPane jScrollPane = null;
+    private JPanel selectionPanel;
+    private JLabel selectionLabel;
+
+    public FeatureTablePanel(FeatureTableModel tableModel,
+            boolean isDoubleBuffered)  {
+        super(isDoubleBuffered);
+        table = new FeatureTable(tableModel);
+        this.initComonents();
+        tableModel.getFeatureStore().addObserver(this);
+        tableModel.getFeatureSelection().addObserver(this);
+        tableModel.addChangeListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if( FeatureTableModel.CHANGE_SELECTION.equals(e.getActionCommand()) ) {
+                    featureSelectionChanged();
+                }
+            }
+        });        
+    }
+    
+    private void featureSelectionChanged() {
+        ((FeatureTableModel)table.getModel()).getFeatureSelection().addObserver(this);
+    }
+
+    private void initComonents() {
+        this.setLayout(new BorderLayout());
+
+        table.setRowSelectionAllowed(true);
+        table.setColumnSelectionAllowed(false);
+
+        jScrollPane = new JScrollPane();
+        jScrollPane.setViewportView(table);
+        createTheRowHeader();
+
+        table.addPropertyChangeListener(new PropertyChangeListener() {
+            @Override
+            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();
+                }
+            }
+        });
+
+        getFeatureTableModel().addTableModelListener(new TableModelListener() {
+            @Override
+            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();
+            }
+        });
+        selectionLabel = new JLabel();
+        selectionLabel.setText( this.getSelectionLabel() );
+        selectionPanel = new JPanel();
+        selectionPanel.add(selectionLabel, BorderLayout.EAST);
+ 
+        this.add(jScrollPane, BorderLayout.CENTER);
+        this.add(selectionPanel, BorderLayout.SOUTH);
+        ToolsSwingLocator.getToolsSwingManager().createTableColumnAdjuster(table);
+    }
+    
+    public void addColumnSelectionListener(ActionListener listener) {
+       this.table.addColumnSelectionListener(listener);
+    }
+    
+    public void fireColumnSelection(ActionEvent e) {
+        this.table.fireColumnSelection(e);
+    }    
+
+    @Override
+    public void setModel(TableModel dataModel) {
+        this.table.setModel(dataModel);
+    }
+
+    @Override
+    public TableModel getModel() {
+        return this.table.getModel();
+    }    
+
+    @Override
+    public FeatureTableModel getFeatureTableModel() {
+        return (FeatureTableModel) this.table.getModel();
+    }    
+    
+    @Override
+    public int getSelectedColumnCount() {
+        return this.table.getSelectedColumnCount();
+    }
+
+    @Override
+    public int[] getSelectedColumns() {
+        return this.table.getSelectedColumns();
+    }
+    
+    private String getSelectionLabel() {
+        String label =
+        	getFeatureTableModel().getSelectionCount() + 
+            " / " +
+            getFeatureTableModel().getRowCount() + 
+            " " +
+            Messages.getText("registros_seleccionados_total") + 
+            ".";
+        return label;
+    }
+    
+    private 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() {
+
+            @Override
+            public void run() {
+                if( table.getRowCount()<1 ) {
+                    jScrollPane.setRowHeaderView(null);
+                    return;
+                }
+                ListModel lm = new AbstractListModel() {
+                    private static final long serialVersionUID = -310252331647118271L;
+                    @Override
+                    public int getSize() {
+                        return table.getRowCount();
+                    }
+
+                    @Override
+                    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);
+            }
+        });
+    }
+
+    @Override
+    public JTable getJTable() {
+        return this.table;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private static class RowHeaderRenderer extends JButton implements ListCellRenderer {
+        private static final long serialVersionUID = -3811876981965840126L;
+        private JTable table = null;
+        private final Dimension dimension = new Dimension();
+        private final 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;
+        }
+
+        @Override
+        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;
+        }
+
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+    	if( observable instanceof FeatureSelection ) {
+    		// Ha cambiado la seleccion, simplemente repintamos.
+    		repaint();
+    		return;
+    	}
+    	// If selection changes from nothing selected to anything selected
+    	// or the reverse, update selection info
+    	if( observable instanceof FeatureStore ) {
+    		String type = ((DataStoreNotification) notification).getType();
+    		if ( DataStoreNotification.SELECTION_CHANGE.equals(type) ) {
+    			selectionLabel.setText( this.getSelectionLabel() );
+    		}
+    	}
+    }
+
+    @Override
+    public void setCurrent(int index) {
+        logger.warn("setCurrent not implemented !!!!!!!!!!!!!!!!!!!!!!!!");
+    }
+
+    public void setVisibleStatusbar(boolean visible) {
+        this.selectionPanel.setVisible(visible);
+    }
+    
+    public boolean isVisibleStatusbar() {
+        return this.selectionPanel.isVisible();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/featuretable/FeatureTablePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModelImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModelImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/featuretable/SimpleFeaturesTableModelImpl.java	(revision 46118)
@@ -0,0 +1,491 @@
+package org.gvsig.fmap.dal.swing.impl.featuretable;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Insets;
+import org.gvsig.fmap.dal.swing.featuretable.SimpleFeaturesTableModel;
+import java.math.BigDecimal;
+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 java.util.Objects;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.exception.DataException;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.feature.paging.FacadeOfAFeaturePagingHelper;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.logger.FilteredLogger;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SimpleFeaturesTableModelImpl
+        extends AbstractTableModel
+        implements SimpleFeaturesTableModel {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleFeaturesTableModelImpl.class);
+    
+    
+//    public static class LegendOne implements TableCellRenderer {
+//        public LegendOne() {
+//            
+//        }
+//
+//        @Override
+//        public Component getTableCellRendererComponent(JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
+//            TableCellRenderer renderer = this.getRenderByValue(o);
+//            Component xxx = renderer.getTableCellRendererComponent(jtable, o, bln, bln1, i, i1);
+//            return xxx;
+//        }
+//        
+//        public Object getSymbolByValue(Object value) {
+//
+//            return null;
+//        }
+//        
+//        public TableCellRenderer getRenderByValue(Object value) {
+//            Object symbol = getSymbolByValue(value);
+//            return null;symbol.createRenderer();
+//        }
+//    }
+    
+    
+    public static class ColorRangeRenderer extends FeatureAttributeCellRenderer {
+
+        private final double max;
+        private final double min;
+
+        public ColorRangeRenderer(FeatureAttributeDescriptor descriptor,double min, double max) {
+            super(descriptor);
+            this.min = min;
+            this.max = max;
+        }
+        
+        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);
+            
+            if (this.getDescriptor().getDataType().isNumeric()) {
+                double myvalue = 0;
+                if (value==null) {
+                     myvalue = 0;
+                } else {
+                    myvalue = DataTypeUtils.toDouble(value);
+                }
+                Color color = this.getColor(myvalue);
+                label.setBackground(color);
+            }
+            return label;
+        }
+    
+        public Color getColor(double n) {
+            if (n<=min) {
+                n = 0;
+            } else if(n>=max) {
+                n = max-min;
+            }
+            int per = DataTypeUtils.toInteger((100*(n-min))/(max-min));
+            int R = (255 * per) / 100;
+            int G = (255 * (100 - per)) / 100;
+            int B = 0;
+            Color color;
+            try {
+                color = new Color(R, G, B, 100);
+            } catch(Exception ex) {
+                color = Color.GRAY;
+            }
+            return color;
+        }
+    }
+    
+    private static class FeatureAttributeCellRenderer extends DefaultTableCellRenderer {
+
+        private final FeatureAttributeDescriptor descriptor;
+        private final JCheckBox check;
+
+        public FeatureAttributeCellRenderer(FeatureAttributeDescriptor descriptor) {
+            this.descriptor = descriptor;
+            this.check = new JCheckBox(); 
+            this.check.setHorizontalAlignment(SwingConstants.CENTER); 
+            this.check.setBackground(UIManager.getColor(ToolsSwingManager.COLOR_TABLE_BACKGROUND));
+        }
+//        @Override
+//        protected void setValue(Object value) {
+//            if (value == null) {
+//                setText("");
+//            } else {
+//                setText((String) descriptor.format(value));
+//            }
+//        }
+
+        @Override
+        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);
+            int type = descriptor.getType();
+            if (value instanceof Boolean && type==DataTypes.BOOLEAN) {
+                check.setSelected((boolean) value);
+                check.setBackground(label.getBackground());
+                return check;
+            }
+            label.setText((String) descriptor.format(value));
+            if (descriptor.getAvailableValues()==null && (descriptor.getDataType().isNumeric() ||
+                    type == DataTypes.TIMESTAMP ||
+                    type == DataTypes.TIME || 
+                    type == DataTypes.DATE)) {
+                label.setHorizontalAlignment(SwingConstants.RIGHT);
+            } else if (type==DataTypes.BOOLEAN) {
+                label.setHorizontalAlignment(SwingConstants.CENTER);
+                label.setText("null");
+            } else {
+                label.setHorizontalAlignment(SwingConstants.LEFT);
+            }
+            return label;
+        }
+        
+        public FeatureAttributeDescriptor getDescriptor() {
+            return this.descriptor;
+        }
+        
+
+    }
+
+    private List<Feature> features;
+    private final List<String> columnNames;
+    private final FeatureType featureType;
+    private FilteredLogger logger;
+    private boolean errors;
+
+    public SimpleFeaturesTableModelImpl(FeatureStore store) throws DataException {
+        this(store.getDefaultFeatureType(), null, store.getFeatures());
+    }
+
+    public SimpleFeaturesTableModelImpl(FeatureType featureType) {
+        this(featureType, null, null);
+        this.logger = new FilteredLogger(LOGGER, "SimpleFeaturesTableModel", 10);
+    }
+
+    public SimpleFeaturesTableModelImpl(FeatureType featureType, List<String> columnNames, List<Feature> features) {
+        this.logger = new FilteredLogger(LOGGER, "SimpleFeaturesTableModel", 10);
+        this.features = features;
+        this.featureType = featureType;
+        this.errors = false;
+        if (columnNames == null || columnNames.isEmpty()) {
+            this.columnNames = new ArrayList<>();
+            Search search = (Search) ToolsLocator.getComplementsManager().get(
+                    Search.COMPLEMENT_MANE, featureType
+            );
+            List<Search.OrderedAttribute> attributos = search.getOrderedAttributes(
+                    Search.BASIC_TYPES_FILTER,
+                    Search.STR_INT_LONG_LABEL_ORDER,
+                    12
+            );
+            for (Search.OrderedAttribute attrdesc : attributos) {
+                this.columnNames.add(attrdesc.getDescriptor().getName());
+            }
+        } else {
+            this.columnNames = columnNames;
+        }
+    }
+    
+    private int getColumnHeaderWidth(JTable table, TableColumn tableColumn) {
+        
+        String value = Objects.toString(tableColumn.getHeaderValue());
+        TableCellRenderer renderer = tableColumn.getHeaderRenderer();
+        if (renderer == null) {
+            renderer = table.getTableHeader().getDefaultRenderer();
+        }
+        JComponent c = (JComponent) renderer.getTableCellRendererComponent(table, value, false, false, -1, tableColumn.getModelIndex());
+        Font font = c.getFont();
+        FontMetrics fm = c.getFontMetrics(font);
+        int w = fm.stringWidth(value);
+        Insets insets = c.getInsets(null);
+        int dx = insets.left + insets.right;
+        return w+dx;
+    }
+
+    @Override
+    public void setCellRenderers(JTable table) {
+        setCellRenderers(table, Collections.EMPTY_MAP);
+    }
+    
+    public void setCellRenderers(JTable table, Map<String, TableCellRenderer> renderers) {
+        if ( table.getModel() != this ) {
+            return;
+        }
+        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        
+//        JScrollPane js=new JScrollPane(table);
+//        js.setVisible(true);
+//        table.add(js);
+        
+        DefaultTableColumnModel columnsModel = new DefaultTableColumnModel();
+        int n = 0;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        FeatureAttributeDescriptor descriptor = null;
+        for (String columnName : this.columnNames) {
+            try {
+                descriptor = this.featureType.getAttributeDescriptor(columnName);
+                if (descriptor == null) {
+                    descriptor = this.featureType.getExtraColumns().get(columnName);
+                }
+                TableColumn columnModel = new TableColumn();
+                columnModel.setModelIndex(n);
+                columnModel.setHeaderValue(i18n.getTranslation(descriptor.getLabel()));
+                TableCellRenderer renderer = renderers.get(columnName);
+                if (renderer == null) {
+                    renderer = new FeatureAttributeCellRenderer(descriptor);
+                }
+                columnModel.setCellRenderer(renderer);
+                if (descriptor.getDisplaySize()>0) {
+                    int displaySize = ToolsSwingUtils.cols2px(descriptor.getDisplaySize());
+                    columnModel.setPreferredWidth(displaySize);
+                }
+                columnsModel.addColumn(columnModel);
+                n++;
+            } catch (Exception ex) {
+                throw new RuntimeException("Not able to get type of descriptor for column", ex);
+            }
+        }
+        if (descriptor!=null && descriptor.getType()==DataTypes.STRING) {
+            table.getTableHeader().setResizingColumn(columnsModel.getColumn(n-1));
+        }
+        table.setColumnModel(columnsModel);  
+        n = 0;
+        for (String columnName : this.columnNames) {
+            try {
+                descriptor = this.featureType.getAttributeDescriptor(columnName);
+                if (descriptor == null) {
+                    descriptor = this.featureType.getExtraColumns().get(columnName);
+                }
+                TableColumn columnModel = columnsModel.getColumn(n);
+                if (descriptor.getDisplaySize()<=0) {
+                    columnModel.setPreferredWidth(getColumnHeaderWidth(table, columnModel));
+                }
+                n++;
+            } catch (Exception ex) {
+                throw new RuntimeException("Not able to get type of descriptor for column", ex);
+            }
+        }
+        table.setColumnModel(columnsModel);  
+    }
+
+    @Override
+    public List<Feature> getFeatures() {
+        return this.features;
+    }
+
+    @Override
+    public int getRowCount() {
+        if (this.features == null) {
+            return 0;
+        }
+        try {
+            return this.features.size();
+        } catch (Throwable ex) {
+            this.errors = true;
+            LOGGER.warn("Can't calculate row count.", ex);
+            return 0;
+        }
+    }
+
+    @Override
+    public boolean hasErrors() {
+        return this.errors;
+    }
+
+    @Override
+    public int getColumnCount() {
+        return this.columnNames.size();
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        String attrName = this.columnNames.get(columnIndex);
+        if (this.featureType == null) {
+            return attrName;
+        }
+        FeatureAttributeDescriptor attrdesc = this.featureType.getAttributeDescriptor(attrName);
+        if (attrdesc == null) {
+            EditableFeatureAttributeDescriptor extraCol = this.featureType.getExtraColumns().get(attrName);
+            if (extraCol != null) {
+                return extraCol.getLocalizedShortLabel();
+            }
+            if (attrName == null) {
+                return "Column" + columnIndex;
+            }
+            return attrName;
+        }
+        return attrdesc.getLocalizedShortLabel();
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        if (this.featureType == null) {
+            return String.class;
+        }
+        try {
+            String attrName = this.columnNames.get(columnIndex);
+            FeatureAttributeDescriptor attrdesc = this.featureType.getAttributeDescriptor(attrName);
+            if (attrdesc == null) {
+                int extraIndex = featureType.getExtraColumns().getIndexOf(attrName);
+                if (extraIndex != -1) {
+                    attrdesc = featureType.getExtraColumns().get(extraIndex);
+                }
+            }
+            if (attrdesc == null) {
+                return String.class;
+            }
+            if (attrdesc.isForeingKey() && attrdesc.getForeingKey().isClosedList()) {
+                return String.class;
+            }
+            Class theClass = attrdesc.getDataType().getDefaultClass();
+            if (theClass == null) {
+                return String.class;
+            }
+            return theClass;
+        } catch (Exception ex) {
+            return String.class;
+        }
+    }
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        return false;
+    }
+    
+    public FeatureAttributeDescriptor getFeatureDescriptor(int columnIndex) {
+        String attrName = this.columnNames.get(columnIndex);
+        if (this.featureType == null) {
+            return null;
+        }
+        for (FeatureAttributeDescriptor attr : this.featureType.getAllAttributeDescriptors()) {
+            if (StringUtils.equals(attrName,attr.getName())) {
+                return attr;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Feature get(int position) {
+        if (this.features == null) {
+            return null;
+        }
+        Feature feature = this.features.get(position);
+        return feature;
+    }
+
+    @Override
+    public Feature getFeatureAt(int rowIndex) {
+        if (this.features == null || rowIndex<0 ) {
+            return null;
+        }
+        try {
+            Feature feature = this.features.get(rowIndex);
+            return feature;
+        } catch (Throwable th) {
+            this.errors = true;
+            logger.warn("Can't get feature at row " + rowIndex + ".", th);
+            return null;
+        }
+    }
+    
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        if (this.features == null) {
+            return null;
+        }
+        try {
+            Feature feature = this.features.get(rowIndex);
+            String attrName = this.columnNames.get(columnIndex);
+            Object value = null;
+            value = feature.get(attrName);
+            FeatureAttributeDescriptor attrdesc = this.featureType.getAttributeDescriptor(attrName);
+			if(attrdesc == null && this.featureType.getExtraColumns().get(attrName)!=null) {
+				attrdesc = this.featureType.getExtraColumns().get(attrName);
+			}
+            if (attrdesc != null) {
+                if (value == null) {
+                    return null;
+                }
+                if (attrdesc.isForeingKey() && attrdesc.getForeingKey().isClosedList()) {
+                    value = attrdesc.getForeingKey().getLabelForValue(value);
+					}
+                }
+            return value;
+        } catch (Throwable th) {
+            this.errors = true;
+            logger.warn("Can't get cell value at " + rowIndex + ", " + columnIndex + ".", th);
+            return null;
+        }
+    }
+
+    @Override
+    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+
+    }
+
+    @Override
+    public List<Feature> toList() {
+        return this.features;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.features.isEmpty();
+    }
+
+    @Override
+    public int size() {
+        return this.features.size();
+    }
+
+    @Override
+    public Iterator<Feature> iterator() {
+        return this.features.iterator();
+    }
+
+    @Override
+    public void dispose() {
+        if (this.features != null) {
+            DisposeUtils.disposeQuietly(((FacadeOfAFeaturePagingHelper) features).getFeaturePagingHelper());
+            this.features = null;
+        }
+        this.features = null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/impl/DefaultEditingNotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/impl/DefaultEditingNotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/impl/DefaultEditingNotificationManager.java	(revision 46118)
@@ -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.fmap.dal.impl;
+
+import java.awt.Dimension;
+import java.util.Arrays;
+import java.util.List;
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import org.gvsig.featureform.swing.JFeatureForm;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.EditingNotification;
+import org.gvsig.fmap.dal.EditingNotificationManager;
+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.dal.swing.DALSwingLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.observer.ObservableHelper;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.BaseNotification;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+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.
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultEditingNotificationManager implements EditingNotificationManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEditingNotificationManager.class);
+            
+    private static final String TAG_FORCE_SHOW_FORM_ON_INSERT = "forceShowFormOnInsert";
+    
+    private ObservableHelper helper = null;
+
+    private static final int SOURCE = 1;
+    private static final int DOCUMENT = 2;
+    private static final int AUXDATA = 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);
+        }
+
+        @Override
+        public Object getSource() {
+            return this.getValue(SOURCE);
+        }
+
+        @Override
+        public Object getDocument() {
+            return this.getValue(DOCUMENT);
+        }
+
+        @Override
+        public Object getAuxData() {
+            return this.getValue(AUXDATA);
+        }
+
+        @Override
+        public DataStore getStore() {
+            return (DataStore) this.getValue(STORE);
+        }
+
+        @Override
+        public FeatureStore getFeatureStore() {
+            return (FeatureStore) this.getValue(STORE);
+        }
+
+        @Override
+        public Feature getFeature() {
+            return (Feature) this.getValue(FEATURE);
+        }
+
+        @Override
+        public EditableFeatureType getFeatureType() {
+            return (EditableFeatureType) this.getValue(FEATURETYPE);
+        }
+
+        @Override
+        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() );
+        }
+
+        @Override
+        public void setSkipFeatureValidation(boolean skipTheFeatureValidation) {
+            this.validateTheFeature = !skipTheFeatureValidation;
+        }
+
+        @Override
+        public boolean shouldValidateTheFeature() {
+            return this.validateTheFeature;
+        }
+    }
+
+    public DefaultEditingNotificationManager() {
+        this.helper = new ObservableHelper();
+    }
+
+    @Override
+    public void addObserver(Observer o) {
+        this.helper.addObserver(o);
+    }
+
+    @Override
+    public void deleteObserver(Observer o) {
+        this.helper.deleteObserver(o);
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.helper.deleteObservers();
+    }
+
+    @Override
+    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, Object auxdata, DataStore store, Feature feature, EditableFeatureType featureType) {
+        EditingNotification notification = new DefaultEditingNotification(type);
+        notification.setValue(SOURCE,source);
+        notification.setValue(DOCUMENT,document);
+        notification.setValue(AUXDATA,auxdata);
+        notification.setValue(STORE,store);
+        notification.setValue(FEATURE,feature);
+        notification.setValue(FEATURETYPE,featureType);
+        return this.notifyObservers(notification);
+    }
+
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, Object auxdata, DataStore store) {
+        return this.notifyObservers(source, type, document, auxdata, store, null, null);
+    }
+
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, Object auxdata) {
+        return this.notifyObservers(source, type, document, auxdata, null, null, null);
+    }
+
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store) {
+        return this.notifyObservers(source, type, document, null, store, null, null);
+    }
+
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, Feature feature) {
+        return this.notifyObservers(source, type, document, null, store, feature, null);
+    }
+
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, DataStore store, EditableFeatureType featureType) {
+        return this.notifyObservers(source, type, document, null, store, null, featureType);
+    }
+    
+    @Override
+    public EditingNotification notifyObservers(Object source, String type, Object document, Object auxdata, DataStore store, Feature feature) {
+        return this.notifyObservers(source, type, document, auxdata, store, feature, null);
+    }
+
+    @Override
+    public boolean validateFeature(Feature feature) {
+        
+        FeatureType featureType = feature.getType();
+        Tags tags = featureType.getTags();
+        boolean forceShowForm = tags != null && tags.getBoolean(TAG_FORCE_SHOW_FORM_ON_INSERT, false);
+        while( true ) {
+            if( !forceShowForm ) {
+                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;
+            }
+            forceShowForm = false;
+        }
+    }
+    
+    private boolean needAskUser(Feature feature) {
+        FeatureType featureType = feature.getType();
+        if( !featureType.isCheckFeaturesAtInsert() ) {
+            return false;
+        }
+        FeatureAttributeDescriptor[] attributeDescriptors = featureType.getAttributeDescriptors();
+
+        for (FeatureAttributeDescriptor attrDesc : attributeDescriptors) {
+            if ( attrDesc.isAutomatic() ) {
+                continue;
+            }
+            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(() -> {
+                        showDialog(feature);
+                    });
+                } catch (Exception e1) {
+                    message("Can't show form to fill need data.",e1);
+                    this.userCancelValue = true;
+                    return;
+                }
+            }
+
+            try {
+                JFeatureForm form = DALSwingLocator.getSwingManager().createJFeatureForm(feature);
+                setPreferredSize(form.asJComponent(), 400, 400);
+                WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+                Dialog dialog = winManager.createDialog(
+                        form.asJComponent(),
+                        form.getDynForm().getDefinition().getLabel(),
+                        ToolsLocator.getI18nManager().getTranslation("_Fill_the_required_fields"), 
+                        WindowManager_v2.BUTTONS_OK_CANCEL
+                );
+                dialog.show(WindowManager.MODE.DIALOG);
+                if( dialog.getAction() == WindowManager_v2.BUTTON_OK ) {
+                    form.fetch((EditableFeature) feature);
+                    this.userCancelValue = false;
+                } else {
+                    this.userCancelValue = true;
+                }
+                
+            } 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);
+        }
+    }
+    
+    private void setPreferredSize(JComponent c, int width, int height) {
+        Dimension d = c.getPreferredSize();
+        if (d.width < width) {
+            d.width = width;
+        }
+        if (d.height > height) {
+            d.height = height;
+        }
+        c.setPreferredSize(d);
+    }
+
+    public static final void selfRegister() {
+         DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+         dynObjectManager.registerTag(
+                 TAG_FORCE_SHOW_FORM_ON_INSERT, 
+                 "String value, true/false to force show form on insert features."
+         );
+        
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/pom.xml	(revision 46118)
@@ -0,0 +1,186 @@
+<?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.344</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.file.lib</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>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.jeta</groupId>
+            <artifactId>formsrt</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.jgoodies</groupId>
+            <artifactId>jgoodies-forms</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>flib-jcalendar</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fifesoft</groupId>
+            <artifactId>rsyntaxtextarea</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.expressionevaluator.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.cresques.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</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-text</artifactId>
+            <scope>compile</scope>
+            <!--<version>1.7</version>-->
+        </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.fmap.geometry.impl}</artifactId>
+            <scope>test</scope>
+        </dependency>    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.se</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+            <scope>test</scope>
+        </dependency>      
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.lib.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.lib.proj4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.swing.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.swing.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.swing.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.shp</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jfree</groupId>
+            <artifactId>jfreechart</artifactId>
+            <version>1.0.14</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/abeille.jfpr
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/abeille.jfpr
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SupportTransactions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SupportTransactions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SupportTransactions.java	(revision 46118)
@@ -0,0 +1,33 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface SupportTransactions {
+    
+    public void setTransaction(DataTransaction transaction);
+    
+    public DataTransaction getTransaction();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerParameters.java	(revision 46118)
@@ -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;
+
+/**
+ * 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
+         * @deprecated use getProviderName
+	 */
+	public String getExplorerName();
+        
+        /**
+         * Return the provider name associated to this parameters.
+	 * @return a String containing the name of the provider
+         */
+        public String getProviderName();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_2.java	(revision 46118)
@@ -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.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)
+ * @deprecated usar DataStoreFactory 
+ */
+public interface DataStoreFactory_v2_2 {
+
+	/**
+	 * 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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_4.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_4.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory_v2_4.java	(revision 46118)
@@ -0,0 +1,21 @@
+
+package org.gvsig.fmap.dal;
+
+
+public interface DataStoreFactory_v2_4 extends DataFactory {
+        
+    /**
+     * @param parameters
+     * @return 
+     * @deprecated Se necesita hasta que se actualice el proveedor 2.2 de raster
+     */
+    public boolean canUse(DataParameters parameters); 
+    
+    /**
+     * @param store
+     * @param provider
+     * @deprecated Se necesita hasta que se actualice el proveedor 2.2 de raster
+     */
+    public void setProvider(DataStore store, DataStoreProvider provider);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerFactory.java	(revision 46118)
@@ -0,0 +1,23 @@
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+
+public interface DataServerExplorerFactory extends DataFactory {
+
+    public DataServerExplorer create(
+            DataServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+    ) throws InitializeException;
+            
+    public boolean isStoreSupported(String name);
+    
+    public int allowCreate();
+
+    public int hasTabularSupport();
+
+    public int hasVectorialSupport();
+
+    public int hasRasterSupport();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreParameters.java	(revision 46118)
@@ -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;
+
+
+/**
+ * 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
+         * @deprecated use getProviderName
+	 */
+	public abstract String getDataStoreName();
+
+        /**
+         * Return the provider name associated to this parameters.
+	 * @return a String containing the name of the provider
+         */
+        public String getProviderName();
+
+
+	/**
+	 * 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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPool.java	(revision 46118)
@@ -0,0 +1,37 @@
+
+
+package org.gvsig.fmap.dal;
+
+import java.util.Iterator;
+import org.gvsig.tools.persistence.Persistent;
+
+
+public interface DataServerExplorerPool extends Persistent, Iterable<DataServerExplorerPoolEntry> {
+    
+    public DataServerExplorerPoolEntry createEntry(String name, String description, DataServerExplorerParameters explorer);
+    
+    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);
+    
+    @Override
+    public Iterator<DataServerExplorerPoolEntry> iterator();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java	(revision 46118)
@@ -0,0 +1,209 @@
+package org.gvsig.fmap.dal;
+
+import java.io.File;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.LabeledValue;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface DatabaseWorkspaceManager 
+        extends LabeledValue<DatabaseWorkspaceManager>, SymbolTable 
+    {
+    
+    public interface DatabaseWorkspaceListener {
+        
+        public String getName();
+        
+        public void onAddDatabaseWorkspace(DatabaseWorkspaceManager databaseWorkspace);
+        
+        public void onRemoveDatabaseWorkspace(DatabaseWorkspaceManager databaseWorkspace);
+    }
+    
+    
+    
+    public static final String CONFIG_CAN_ANONYMOUS_USER_WRITE_IN_THE_TABLES = "CanAnonymousUserWriteInTheTables";
+
+    public static final String TABLE_REPOSITORY_NAME = "GVSIGD_REPOSITORY";
+    public static final String TABLE_RESOURCES_NAME = "GVSIGD_RESOURCES";
+    public static final String TABLE_CONFIGURATION_NAME = "GVSIGD_CONFIG";
+    
+    public static final String FIELD_RESOURCES_NAME = "name";
+    public static final String FIELD_RESOURCES_RESOURCE = "resource";
+
+    public static final String FIELD_REPOSITORY_NAME = "name";
+    public static final String FIELD_REPOSITORY_PARAMETERS = "parameters";
+    public static final String FIELD_REPOSITORY_FLAGS = "flags";
+
+    public static final String FIELD_CONFIGURATION_NAME = "name";
+    public static final String FIELD_CONFIGURATION_VALUE = "value";
+    
+    public static final int TABLE_RESOURCES = 0;
+    public static final int TABLE_REPOSITORY = 1;
+    public static final int TABLE_CONFIGURATION = 2;
+    
+    public static final String CONFIG_NAME_STORESREPOSITORYID = "StoresRepository.id";
+    public static final String CONFIG_NAME_STORESREPOSITORYLABEL = "StoresRepository.label";
+
+    /**
+     * Check if the indicated name corresponds to one of the configuration tables of the workspace.
+     * 
+     * @param name to check.
+     * @return true if the name is that of a configuration table.
+     */
+    public static boolean isInternalTable(String name) {
+        if( StringUtils.isBlank(name) ) {
+            return false;
+        }
+        String[] internalNames = new String[] {
+            TABLE_REPOSITORY_NAME,
+            TABLE_RESOURCES_NAME,
+            TABLE_CONFIGURATION_NAME
+        };
+        for (String internalName : internalNames) {
+            if( name.equalsIgnoreCase(internalName) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the identifier of this workspace.
+     * 
+     * @return the id.
+     */
+    public String getId();
+
+    public DataServerExplorer getServerExplorer();
+    
+    /**
+     * Returns the label of this workspace.
+     * 
+     * @return the label value.
+     */
+    @Override
+    public String getLabel();
+    
+    /**
+     * Gets the value of a configuration variable associated with 
+     * this work space.
+     * 
+     * @param name of the variable to consult 
+     * @return the value of the variable 
+     */
+    public String get(String name);
+    
+    /**
+     * Assigns the indicated value to the configuration variable.
+     * 
+     * @param name of the variable.
+     * @param value value to set.
+     * @return true if can assign the value.
+     */
+    public boolean set(String name, String value);
+    
+    /**
+     * Gets the repository of data stores associated with this workspace.
+     * 
+     * @return the data stores repository.
+     */
+    public StoresRepository getStoresRepository();
+    
+    /**
+     * Add a new data store to the workspace.
+     * 
+     * @param name of the data store.
+     * @param parameters to open the data store.
+     * @return true if ok.
+     */
+    public boolean writeStoresRepositoryEntry(String name, DataStoreParameters parameters);
+
+    public boolean canAnonymousUserWriteInTheTables();
+
+    /**
+     * Check if the indicated configuration table exists in the workspace.
+     * 
+     * @param tableid
+     * @return true if the table exists.
+     */
+    public boolean existsTable(int tableid);
+
+    /**
+     * Create the configuration table indicated in the workspace.
+     * 
+     * @param tableid identifier of the configuration table to create.
+     */
+    public void createTable(int tableid);
+    
+    /**
+     * Remove the indicated configuration table from the workspace.
+     * 
+     * @param tableid identifier of the configuration table to remove.
+     */
+    public void dropTable(int tableid);
+
+    /**
+     * Gets the data store associated with the indicated configuration table.
+     * 
+     * @param tableid identifier of the configuration table to get.
+     * @return the FeatureStore of the configuration table.
+     */
+    public FeatureStore getTable(int tableid);
+
+    /**
+     * Returns true if the connection associated with this object refers 
+     * to a valid workspace.
+     * At least the variable "StoresRepository.id" must be defined.
+     * 
+     * @return 
+     */
+    public boolean isValid();
+
+    /**
+     * Returns true if the connection associated with this object refers 
+     * to a valid workspace with a stores-repository.
+     * At least the repositories table must exist and the variable 
+     * "StoresRepository.id" must be defined.
+     * 
+     * @return 
+     */
+    public boolean isValidStoresRepository();
+    
+    /**
+     * If the workspace has an alternate resource storage defined, return it. 
+     * If don't have it, return null.
+     * 
+     * @param tableName
+     * @return the alternate resource storage.
+     */
+    public ResourcesStorage getAlternativeResourcesStorage(String tableName);
+    
+    /**
+     * Create and initialize the tables associated with a gvSIG workspace.
+     * 
+     * @param id of the workspace
+     * @param description of the workspace 
+     */
+    public void create(String id, String description);
+
+    public void drop();
+    
+    public File getBaseFolder();
+    
+    public void setBaseFolder(File baseFolder);
+    
+    public ResourcesStorage getResourcesStorage();
+
+    public void connect();
+    
+    public void disconnect();
+    
+    public void createTableRepository(String tableName);
+    
+    public void createTableResources(String tableName);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/package.html	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer.java	(revision 46118)
@@ -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.dal;
+
+import java.io.File;
+import java.util.List;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+
+/**
+ * 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, DataFactoryUnit {
+
+    public static final String FILESYSTEM_SERVER_EXPLORER_NAME = "FilesystemExplorer";
+
+    /**
+     * 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<DataStoreParameters> list() throws DataException;
+
+    public DataStoreParameters get(String name) throws DataException;
+
+    public boolean exists(DataStoreParameters parameters) 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<DataStoreParameters> list(int mode) throws DataException;
+
+    /**
+     * Creates a new DataStore in this server.
+     *
+     * @param provider
+     * @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<String> getDataStoreProviderNames();
+
+    /**
+     * Return the file resource associated to this name and store. If the
+     * resource not exists or the explorer don't support this opperation return
+     * null.
+     *
+     * @param dataStore
+     * @param resourceName
+     * @return file resource or null
+     * @throws DataException
+     * @deprecated use getResourcesStorage
+     */
+    public File getResourcePath(DataStore dataStore, String resourceName) throws DataException;
+
+    public ResourcesStorage getResourcesStorage();
+        
+    public ResourcesStorage getResourcesStorage(DataStore dataStore);
+    
+    public ResourcesStorage getResourcesStorage(DataStoreParameters parameters);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/HasDataStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/HasDataStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/HasDataStore.java	(revision 46118)
@@ -0,0 +1,10 @@
+package org.gvsig.fmap.dal;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface HasDataStore {
+
+    public DataStore getDataStore();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLocator.java	(revision 46118)
@@ -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.fmap.dal;
+
+import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
+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";
+
+    /**
+     * DataManager name used by the locator to access the instance
+     */
+    public static final String FEATURETYPE_DEFINITIONS_MANAGER_NAME = "FeatureTypeDefinitionsManager";
+
+    private static final String FEATURETYPE_DEFINITIONS_MANAGER_DESCRIPTION = "FeatureTypeDefinitionsManager 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);
+    }
+    
+    public static DataManager getManager() throws LocatorException {
+        return getDataManager();
+    }
+    
+    /**
+     * 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);
+    }
+
+    /**
+     * Return a reference to FeatureTypeDefinitionsManager.
+     *
+     * @return a reference to FeatureTypeDefinitionsManager
+     * @throws LocatorException if there is no access to the class or the class
+     * cannot be instantiated
+     * @see Locator#get(String)
+     */
+    public static FeatureTypeDefinitionsManager getFeatureTypeDefinitionsManager() throws LocatorException {
+        return (FeatureTypeDefinitionsManager) getInstance().get(FEATURETYPE_DEFINITIONS_MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the FeatureTypeDefinitionsManager
+     * interface.
+     *
+     * @param clazz implementing the FeatureTypeDefinitionsManager interface
+     */
+    public static void registerFeatureTypeDefinitionsManager(Class clazz) {
+        getInstance().register(FEATURETYPE_DEFINITIONS_MANAGER_NAME,
+                FEATURETYPE_DEFINITIONS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Registers a class as the default FeatureTypeDefinitionsManager.
+     *
+     * @param clazz implementing the FeatureTypeDefinitionsManager interface
+     */
+    public static void registerDefaultFeatureTypeDefinitionsManager(Class clazz) {
+        getInstance().registerDefault(FEATURETYPE_DEFINITIONS_MANAGER_NAME,
+                FEATURETYPE_DEFINITIONS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/NewDataStoreParameters.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStore.java	(revision 46118)
@@ -0,0 +1,352 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 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.Time;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObject_v2;
+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.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.service.spi.Services;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+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, DataFactoryUnit, Services, DynObject_v2 {
+
+	public static final String SHAPE_PROVIDER_NAME = "Shape";
+	public static final String DBASE_PROVIDER_NAME = "DBF";
+	public static final String CSV_PROVIDER_NAME = "CSV";
+	public static final String H2SPATIAL_PROVIDER_NAME = "H2Spatial";
+	public static final String MDB_PROVIDER_NAME = "MDB";
+    
+	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
+         * @throws org.gvsig.fmap.dal.exception.DataException
+	 */
+
+	public DataSet getSelection() throws DataException;
+
+	/**
+	 * Sets the current data selection with the given data set.
+	 *
+         * @param 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 UnmodifiableBasicMap with this store children.
+         * If do not have children, return an empty map.
+         * Never returns null.
+	 *
+	 * @return an UnmodifiableBasicMap with this DataStore children
+	 */
+	public UnmodifiableBasicMap<String,DataStore> 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.
+	 */
+	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);
+
+	/**
+	 * @param providerName
+	 * @param parameters
+	 * @throws DataException
+	 */
+	public void useCache(String providerName, DynObject parameters) throws DataException;
+
+	public DataStoreProviderFactory getProviderFactory();
+
+    /**
+     * @return
+     */
+    public DataCache getCache();
+
+    public ResourcesStorage getResourcesStorage();
+    
+    public StoresRepository getStoresRepository();
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProviderFactory.java	(revision 46118)
@@ -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.dal;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dataTypes.DataType;
+
+public interface DataStoreProviderFactory
+    extends DataFactory {
+
+    public static final int UNKNOWN = DataType.UNKNOWN;
+    public static final int YES = DataType.YES;
+    public static final int NO = DataType.NO;
+
+    /**
+     * 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();
+
+    public int hasSQLSupport();
+    
+    /**
+     * Builds a specific provider
+     *
+     * @param parameters
+     * @param providerServices
+     * @return the provider
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     */
+    public DataStoreProvider createProvider(DataParameters parameters, DataStoreProviderServices providerServices) throws InitializeException;
+
+    /**
+     * Return YES if the provider works best if is tiled.
+     *
+     * @return
+     */
+    public int worksBestTiled();
+
+    /**
+     * Return YES if the provider supports tiled.
+     *
+     * @return
+     */
+    public int isTiledSupported();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenDataStoreParameters.java	(revision 46118)
@@ -0,0 +1,8 @@
+
+
+package org.gvsig.fmap.dal;
+
+
+public interface OpenDataStoreParameters extends DataStoreParameters {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreNotification.java	(revision 46118)
@@ -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;
+
+import org.gvsig.tools.observer.Notification;
+
+/**
+ * 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 extends Notification {
+
+	/** 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();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorerPoolEntry.java	(revision 46118)
@@ -0,0 +1,20 @@
+
+
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.util.LabeledValue;
+
+
+
+public interface DataServerExplorerPoolEntry extends Persistent, LabeledValue<DataServerExplorerPoolEntry> {
+    
+    public String getName();
+
+    public DataServerExplorerParameters getExplorerParameters();
+    
+    public String getDescription();
+    
+    public void copyTo(DataServerExplorerPoolEntry target);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataCache.java	(revision 46118)
@@ -0,0 +1,42 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.DataException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface DataCache {
+
+
+    /**
+     * Delete cache.
+     * @throws DataException
+     */
+    public void deleteAll() throws DataException;
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameters.java	(revision 46118)
@@ -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.dal;
+
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.json.SupportFromJson;
+
+/**
+ * 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, SupportToJson, SupportFromJson {
+
+        public static final String CRS_PARAMTER_NAME = "CRS";
+
+	/**
+	 * clears the parameter container.
+	 */
+        @Override
+	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;
+        
+        public byte[] toByteArray();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypes.java	(revision 46118)
@@ -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;
+
+/**
+ * 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.expressionevaluator.DataTypes, 
+    org.gvsig.fmap.geom.DataTypes, 
+    org.gvsig.timesupport.DataTypes 
+    {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataQuery.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreProvider.java	(revision 46118)
@@ -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 extends DataFactoryUnit  {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactory.java	(revision 46118)
@@ -0,0 +1,19 @@
+package org.gvsig.fmap.dal;
+
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.extensionpoint.ExtensionSingleton;
+import org.gvsig.tools.service.spi.Services;
+
+
+public interface DataFactory extends ExtensionSingleton {
+
+    public String getName();
+
+    public String getDescription();
+    
+    public boolean isHidden();
+
+    public DynObject createParameters();
+
+    public DataFactoryUnit create(DynObject paameters, Services services);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java	(revision 46118)
@@ -0,0 +1,629 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.File;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Predicate;
+import javax.json.JsonObject;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+
+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.expressionevaluator.DALExpressionBuilder;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.spi.Services;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.DataProfile;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureRuleExpression;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.Factory;
+
+/**
+ * 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 extends Services {
+
+    public static final int RECOMENDED_SIZE_FOR_CLOB = 4096;
+    
+    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";
+
+    public static final String DAL_SYMBOL_TABLE = "DAL.SymbolTable.Global";
+//    public static final String DAL_SYMBOL_TABLE_FEATURE = "DAL.SymbolTable.Feature";
+
+    public static final String FUNCTION_FOREING_VALUE = "FOREING_VALUE";
+    public static final String FUNCTION_SELECT = "SELECT";
+    public static final String FUNCTION_UPDATE = "UPDATE";
+    public static final String FUNCTION_SELECT_COUNT = "SELECT_COUNT";
+    public static final String FUNCTION_EXISTS = "EXISTS";
+    public static final String FUNCTION_EXISTS_TABLE = "EXISTS_TABLE";
+    public static final String FUNCTION_ROW_TAG = "ROW_TAG";
+    public static final String FUNCTION_SET_ROW_TAG = "SET_ROW_TAG";
+    public static final String FUNCTION_CURRENT_ROW = "CURRENT_ROW";
+    public static final String FUNCTION_CURRENT_STORE = "CURRENT_STORE";
+    public static final String FUNCTION_ISSELECTED_CURRENT_ROW = "ISSELECTED_CURRENT_ROW";
+    public static final String FUNCTION_GEOMETRY = "GEOMETRY";
+    public static final String FUNCTION_CREATE_IN_MEMORY_TABLE = "CREATE_IN_MEMORY_TABLE";
+    public static final String FUNCTION_INSERT_INTO_TABLE = "INSERT_INTO_TABLE";
+    public static final String FUNCTION_CREATE_TABLE = "CREATE_TABLE";
+    public static final String FUNCTION_CREATE_TABLE_STRUCTURE = "CREATE_TABLE_STRUCTURE";
+    public static final String FUNCTION_SELECT_FROM_SELECTION = "SELECTFROMSELECTION";
+    public static final String FUNCTION_SELECT_COUNT_FROM_SELECTION = "SELECTCOUNTFROMSELECTION";
+    
+    public static final String DAL_PREFERRED_COLUMNS = "DAL.Preferred.Columns";
+    
+    public static final String DAL_USE_LABELS = "DAL.useLabels";
+
+    public static final int USE_LABELS_YES = 0;
+    public static final int USE_LABELS_NO = 1;
+    public static final int USE_LABELS_BOTH = 2;
+    
+    /**
+     * 
+     * Returns the default DAL's temporary directory
+     *
+     * @return Temporary directory name
+     * @deprecated use FoldersManager of org.gvsig.tools
+     */
+    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
+     * @param arguments
+     * @return the data store parameters
+     *
+     * @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, Object... arguments)
+            throws InitializeException, ProviderNotRegisteredException;
+    
+    public DataStoreParameters createStoreParameters(String name)
+            throws InitializeException, ProviderNotRegisteredException;
+
+    public DataStoreParameters createStoreParameters(byte[] data);
+
+    /**
+     * Creates, initializes and fill an instance of DataStoreParameters from the
+     * tags of the DynStruct passed as parameter.
+     *
+     * @param struct structure from which tags were created ths parameters.
+     * @return the data store parameters
+     *
+     * @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(DynStruct struct)
+            throws InitializeException, ProviderNotRegisteredException;
+
+    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException;
+
+    /**
+     * Creates, initializes and returns an instance of NewDataStoreParameters
+     * given the name with which their provider is registered.
+     *
+     * @param explorer
+     * @param provider
+     * @return
+     *
+     * @throws InitializeException
+     * @throws ProviderNotRegisteredException
+     */
+    public NewDataStoreParameters createNewStoreParameters(String explorer, String provider)
+            throws InitializeException, ProviderNotRegisteredException;
+
+    public NewDataStoreParameters createNewStoreParameters(String provider)
+            throws InitializeException, ProviderNotRegisteredException;
+
+    /**
+     *
+     * Creates, initializes and returns an instance of DataStore given the
+     * DataStoreParameters.
+     *
+     * @param provider
+     * @param parameters parameters used to instantiate and initialize the
+     * DataStore
+     * @return
+     *
+     * @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, DynObject parameters)
+            throws InitializeException, ProviderNotRegisteredException,
+            ValidateDataParametersException;
+
+    public DataStore openStore(String provider, DataStoreParameters parameters)
+            throws InitializeException, ProviderNotRegisteredException,
+            ValidateDataParametersException;
+
+    public DataStore openStore(String providerName, DataStoreParameters 
+            parameters, boolean ignoreDALResource) 
+            throws InitializeException, ProviderNotRegisteredException, 
+            ValidateDataParametersException;
+
+    public DataStore openStore(
+            String providerName,
+            Object... arguments)
+        throws
+            InitializeException,
+            ProviderNotRegisteredException,
+            ValidateDataParametersException;
+
+    public DataStore openStore(DynStruct struct)
+            throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException;
+
+    /**
+     * Create a new physical store
+     *
+     * @param explorer
+     * @param provider
+     * @param parameters
+     * @param overwrite
+     *
+     * @throws InitializeException
+     * @throws ProviderNotRegisteredException
+     * @throws ValidateDataParametersException
+     */
+    public void newStore(String explorer, String provider, NewDataStoreParameters parameters, boolean overwrite)
+            throws InitializeException, ProviderNotRegisteredException,
+            ValidateDataParametersException;
+
+    public void newStore(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 name
+     * @return
+     */
+    public List<String> 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
+     * @return
+     *
+     * @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 name
+     * @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;
+
+    public DataServerExplorer openServerExplorer(
+            String explorerName,
+            Object... arguments)
+        throws
+            InitializeException,
+            ProviderNotRegisteredException,
+            ValidateDataParametersException;
+    /**
+     * @param parameters
+     * @return
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
+     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
+     * @deprecated see openServerExplorer
+     */
+    public DataServerExplorer createServerExplorer(
+            DataServerExplorerParameters parameters)
+            throws InitializeException, ProviderNotRegisteredException,
+            ValidateDataParametersException;
+
+    /**
+     * @param parameters
+     * @return
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
+     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
+     * @deprecated see openStore
+     */
+    public DataStore createStore(DataStoreParameters 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<String> getExplorerProviders();
+
+    /**
+     * 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
+     * @deprecated use createFilter
+     */
+    public Evaluator createExpresion(String expression)
+            throws InitializeException;
+
+    /**
+     * Creates an instance of Evaluator that represents the given expression.
+     *
+     * @param expression a Expression with the filter
+     * @return instance of Evaluator representing the given expression.
+     * @throws InitializeException
+     * @deprecated use createFilter
+     */
+    public Evaluator createExpresion(Expression expression)
+            throws InitializeException;
+
+    /**
+     * 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 createFilter(String expression)
+            throws InitializeException;
+
+    /**
+     * Creates an instance of Evaluator that represents the given expression.
+     *
+     * @param expression a Expression with the filter
+     * @return instance of Evaluator representing the given expression.
+     * @throws InitializeException
+     */
+    public Evaluator createFilter(Expression 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<String> 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);
+
+    /**
+     * 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 OpenErrorHandler getOpenErrorHandler();
+
+    public DataStoreProviderFactory getStoreProviderFactory(String name);
+
+    public EditableFeatureType createFeatureType();
+    
+    public EditableFeatureType createFeatureType(JsonObject json);
+
+    public DataServerExplorerPool getDataServerExplorerPool();
+
+    public void setDataServerExplorerPool(DataServerExplorerPool pool);
+
+    public void setResourcesLoader(ClassLoader loader);
+
+    public void setResourcesLoader(File folder);
+
+    /**
+     * Return a list of the DataTypes supported for the type of the feature
+     * attributes. The list is only informative.
+     *
+     * @return
+     */
+    public List<DataType> getDataTypes();
+
+    public Register getStoreRegister();
+
+    public Register getStoreProviderRegister();
+
+    public Register getServerExplorerRegister();
+
+    public Register getFeatureIndexRegister();
+
+    /**
+     * Creates a default ExpressionBuilder.
+     *
+     * This ExpressionBuilder is not dependent on a data source,
+     * and is not advisable to use it.
+     *
+     * @return the ExpressionBuilder
+     * @deprecated use ExpressionEvaluatorManager.createExpressionBuilder()
+     */
+    public ExpressionBuilder createExpressionBuilder();
+
+    /**
+	 * 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
+     * @return 
+	 *
+	 * @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;
+
+    /**
+     * @param providerName
+     * @param params
+     * @param overwrite
+     * @throws DataException
+     */
+    public void createFileStore(String providerName, NewDataStoreParameters params, boolean overwrite) throws DataException;
+
+    public FeatureSymbolTable createFeatureSymbolTable();
+    
+    public FeatureSymbolTable createFeatureSymbolTable(String name);
+
+    public EditableFeatureAttributeDescriptor createFeatureAttributeDescriptor(String name, int type);
+    
+    public FeatureAttributeEmulatorExpression createFeatureAttributeEmulatorExpression(FeatureType type, Expression expression);
+
+    public void registerDataProfile(DataProfile profile);
+
+    public List<DataProfile> getDataProfiles();
+
+    public DataProfile getDataProfile(String name);
+    
+    public StoresRepository getStoresRepository();
+    
+    public DatabaseWorkspaceManager createDatabaseWorkspaceManager(DataServerExplorerParameters connection);
+    
+    public void addDatabaseWorkspace(DatabaseWorkspaceManager DatabaseWorkspace);
+
+    public void removeDatabaseWorkspace(DatabaseWorkspaceManager DatabaseWorkspace);
+
+    public void addDatabaseWorkspaceListener(DatabaseWorkspaceManager.DatabaseWorkspaceListener listener);
+    
+    public DatabaseWorkspaceManager getDatabaseWorkspace(String name);
+    
+    public DatabaseWorkspaceManager getDatabaseWorkspace(DataStoreParameters params);
+
+    public void writeDALResource(ResourcesStorage resources, DataStore store);
+    
+    public void writeDALResource(ResourcesStorage resources, FeatureType featureType);
+
+    /**
+     * Return a 35-40 characters unique identifier.
+     * 
+     * @return the unique identifier
+     */
+    public String createUniqueID();
+
+    public void clearAvailableValuesCache();
+
+    public DALExpressionBuilder createDALExpressionBuilder();
+    
+    public boolean isTheOldRasterRegistered();
+    
+    public void addStoreObserver(Observer observer);
+    
+    public void removeStoreObserver(Observer observer);
+
+    public String getServerExplorerFromStore(String name);
+    
+    public void setMaxSizeForSmallFeatureSelection(long size);
+
+    public long getMaxSizeForSmallFeatureSelection();
+    
+    public void registerLargeMap(Factory factory);
+    
+    public void registerLargeSet(Factory factory);
+    
+    public Map createLargeMap();
+    
+    public Set createLargeSet();
+    
+    public DataTransaction createTransaction();
+    
+    public void putFeaturesInClipboard(FeatureSet set);
+    
+    public List<EditableFeature> getFeaturesFromClipboard(
+            FeatureStore store, 
+            Predicate<FeatureAttributeDescriptor> attrFilter
+    ) throws DataException;
+
+    public FeatureRuleExpression createFeatureRuleExpression();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractDataResource.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractDataResource.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractDataResource.java	(revision 46118)
@@ -0,0 +1,41 @@
+package org.gvsig.fmap.dal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource;
+
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractDataResource implements Resource {
+
+    @Override
+    public URL getURL() {
+        return null;
+    }
+
+    @Override
+    public boolean exists() {
+        return false;
+    }
+
+    @Override
+    public InputStream asInputStream() throws IOException {
+        return null;
+    }
+
+    @Override
+    public OutputStream asOutputStream() throws IOException {
+        return null;
+    }
+
+    @Override
+    public void close() {
+
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SQLBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SQLBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SQLBuilder.java	(revision 46118)
@@ -0,0 +1,520 @@
+package org.gvsig.fmap.dal;
+
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.geom.Geometry;
+
+public interface SQLBuilder {
+
+    public static final String FEATURE_ATTRIBUTE_DESCRIPTOR = "FeatureAttributeDescriptor";
+
+    public enum Privilege {
+        SELECT,
+        INSERT,
+        UPDATE,
+        DELETE,
+        TRUNCATE,
+        REFERENCE,
+        TRIGGER,
+        ALL
+    };
+
+    public interface ColumnDescriptor {
+
+        public String getName();
+
+        public int getType();
+
+        public int getSize();
+
+        public int getPrecision();
+
+        public int getScale();
+
+        public boolean isPrimaryKey();
+
+        public boolean isIndexed();
+
+        public boolean isAutomatic();
+
+        boolean allowNulls();
+
+        public Object getDefaultValue();
+
+        public int getGeometryType();
+
+        public int getGeometrySubtype();
+
+        public Object getGeometrySRSId();
+
+        public boolean isGeometry();
+
+        public DataStoreParameters getStoreParameters();
+
+        public void setName(String name);
+
+        public void setType(int type);
+
+        public void setSize(int size);
+
+        public void setPrecision(int precision);
+
+        public void setScale(int scale);
+
+        public void setIsPrimaryKey(boolean isPk);
+
+        public void setIsAutomatic(boolean isAutomatic);
+
+        public void setAllowNulls(boolean allowNulls);
+
+        public void setDefaultValue(Object defaultValue);
+
+        public void setGeometryType(int geom_type);
+
+        public void setGeometrySubtype(int geom_subtype);
+
+        public void setGeometrySRSId(Object geom_srsid);
+    }
+
+    public interface StatementPart extends Value {
+
+    }
+
+    public interface Statement extends StatementPart {
+
+    }
+    
+    public interface Column extends Variable {
+        public TableNameBuilder table();
+        public TableNameBuilder table(TableNameBuilder table);
+    }
+
+    public interface TableNameBuilder extends StatementPart {
+
+        public TableNameBuilder database(String name);
+
+        public TableNameBuilder schema(String name);
+
+        public TableNameBuilder name(String name);
+
+        public String getDatabase();
+
+        public String getSchema();
+
+        public String getName();
+
+        public boolean has_database();
+
+        public boolean has_schema();
+    }
+
+    public interface CountBuilder extends StatementPart {
+
+        public CountBuilder all();
+
+        public CountBuilder column(Value value);
+
+        public CountBuilder distinct();
+    }
+
+    public interface SelectColumnBuilder extends StatementPart {
+
+        public SelectColumnBuilder name(String name);
+
+        public SelectColumnBuilder name(TableNameBuilder table, String name);
+
+        public SelectColumnBuilder value(Value value);
+
+        public SelectColumnBuilder as(String alias);
+
+        public SelectColumnBuilder as_geometry();
+
+        public SelectColumnBuilder all();
+
+        public String getName();
+
+        public String getAlias();
+
+        public String getValue();
+        
+        public boolean isGeometry();
+        
+        public TableNameBuilder getTable();
+    }
+
+    public interface InsertColumnBuilder extends StatementPart {
+
+        public InsertColumnBuilder name(String name);
+
+        public InsertColumnBuilder with_value(Value value);
+
+        public String getName();
+
+        public Value getValue();
+    }
+
+    public interface UpdateColumnBuilder extends InsertColumnBuilder {
+
+        @Override
+        public UpdateColumnBuilder name(String name);
+
+        @Override
+        public UpdateColumnBuilder with_value(Value value);
+
+        @Override
+        public String getName();
+
+        @Override
+        public Value getValue();
+    }
+
+    public interface FromBuilder extends StatementPart {
+
+        public TableNameBuilder table();
+
+        public FromBuilder subquery(String subquery);
+
+        public FromBuilder custom(String passthrough);
+        
+        public FromBuilder left_join(TableNameBuilder table, Value expression);
+    }
+
+    public interface OrderByBuilder extends StatementPart {
+
+        public OrderByBuilder column(String name);
+        
+        public boolean isColumn(String name);
+        
+        public boolean isColumn(Value value);
+
+//        @Deprecated
+//        public OrderByBuilder column(Value name);
+
+        public OrderByBuilder value(Value expression);
+
+        public OrderByBuilder ascending(boolean asc);
+
+        public OrderByBuilder ascending();
+
+        public OrderByBuilder descending();
+
+        public OrderByBuilder custom(String order);
+    }
+
+    public interface SelectBuilder extends Statement {
+
+        public SelectColumnBuilder column();
+        
+        public SelectBuilder remove_all_columns();
+
+        public FromBuilder from();
+
+        public GeometryExpressionBuilder where();
+
+        public OrderByBuilder order_by();
+
+        public OrderByBuilder getOrderBy(String column);
+        
+        public OrderByBuilder getOrderBy(Value column);
+
+        public SelectBuilder group_by(Value... column);
+
+        public SelectBuilder distinct();
+
+        public SelectBuilder limit(long limit);
+
+        public SelectBuilder limit(Long limit);
+
+        /**
+         * Specifies an offset to be applied to the SQL statement. Only an
+         * offset can be applied if an order has been specified. Otherwise an
+         * IllegalStateException exception will be thrown when constructing the
+         * SQL statement invoking the toString method.
+         *
+         * @param offset
+         * @return this SelectBuilder
+         */
+        public SelectBuilder offset(long offset);
+
+        public boolean has_column(String name);
+
+        public boolean has_where();
+
+        public boolean has_from();
+
+        public boolean has_order_by();
+
+        public boolean has_group_by();
+
+        public boolean has_limit();
+
+        public boolean has_offset();
+        
+        public void disable_check_order_and_offset();
+
+        /**
+         * Constructs the SQL statement. If the values associated with the SQL
+         * statement are not valid an IllegalStateException exception is thrown.
+         *
+         * @return the SQL select statement.
+         * @throws IllegalStateException if the values of select statement are
+         * not valids.
+         */
+        @Override
+        public String toString();
+        
+        public List<Value> getGroups();
+        
+        public List<SelectColumnBuilder> getColumns();
+        
+        public void remove_column(String columnName);
+
+    }
+
+    public interface UpdateBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public UpdateColumnBuilder column();
+
+        public GeometryExpressionBuilder where();
+
+        public boolean has_where();
+    }
+
+    public interface InsertBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public InsertColumnBuilder column();
+    }
+
+    public interface DeleteBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public GeometryExpressionBuilder where();
+
+        public boolean has_where();
+    }
+
+    public interface AlterTableBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public AlterTableBuilder drop_column(String columnName);
+        
+        public AlterTableBuilder drop_primary_key(String columnName);
+
+        public AlterTableBuilder add_column(FeatureAttributeDescriptor fad);
+
+        public AlterTableBuilder add_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+
+        public AlterTableBuilder add_geometry_column(String columnName, int geom_type, int geom_subtype, IProjection proj, boolean isIndexed, boolean allowNulls);
+
+        public AlterTableBuilder add_geometry_column(String columnName, int geom_type, int geom_subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls);
+
+        public AlterTableBuilder alter_column(FeatureAttributeDescriptor fad);
+
+        public AlterTableBuilder alter_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+
+        public AlterTableBuilder alter_geometry_column(String columnName, int geom_type, int geom_subtype, IProjection proj, boolean isIndexed, boolean allowNulls);
+
+        public AlterTableBuilder alter_geometry_column(String columnName, int geom_type, int geom_subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls);
+
+        public AlterTableBuilder rename_column(String source, String target);
+
+        public boolean isEmpty();
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface CreateTableBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public CreateTableBuilder add_column(FeatureAttributeDescriptor fad);
+
+        public CreateTableBuilder add_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+
+        public CreateTableBuilder add_geometry_column(String columnName, int geom_type, int geom_subtype, IProjection proj, boolean isIndexed, boolean allowNulls);
+
+        public CreateTableBuilder add_geometry_column(String columnName, int geom_type, int geom_subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls);
+
+        public ColumnDescriptor getColumnDescriptor(String columnName);
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface UpdateTableStatisticsBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface GrantRoleBuilder extends StatementPart {
+
+        public GrantRoleBuilder privilege(Privilege privilege);
+
+        public GrantRoleBuilder select();
+
+        public GrantRoleBuilder insert();
+
+        public GrantRoleBuilder delete();
+
+        public GrantRoleBuilder truncate();
+
+        public GrantRoleBuilder reference();
+
+        public GrantRoleBuilder update();
+
+        public GrantRoleBuilder trigger();
+
+        public GrantRoleBuilder all();
+    }
+
+    public interface GrantBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public GrantRoleBuilder role(String name);
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface DropTableBuilder extends Statement {
+
+        public TableNameBuilder table();
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface CreateIndexBuilder extends Statement {
+
+        public CreateIndexBuilder if_not_exist();
+
+        public CreateIndexBuilder unique();
+
+        public CreateIndexBuilder name(String name);
+
+        public CreateIndexBuilder name(String tableName, String columnName);
+
+        public CreateIndexBuilder spatial();
+
+        public CreateIndexBuilder column(String name);
+
+        public TableNameBuilder table();
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public interface DropIndexBuilder extends Statement {
+
+        public DropIndexBuilder if_not_exist();
+
+        public DropIndexBuilder name(String name);
+        
+        public DropIndexBuilder name(String tableName, String columnName);
+
+        public List<String> toStrings();
+
+        public List<String> toStrings(Formatter formatter);
+    }
+
+    public String default_schema();
+
+    public boolean support_schemas();
+
+    public boolean has_spatial_functions();
+
+    public GeometrySupportType geometry_support_type();
+
+    public String sqltype(int dataType, int size, int precision, int scale, int geomType, int geomSubtype);
+
+    public Object sqlgeometrytype(int type, int subtype);
+
+    public Object sqlgeometrydimension(int type, int subtype);
+
+    public Object srs_id(IProjection projection);
+
+    public String toString(Formatter formatter);
+
+    public List<Variable> variables();
+
+    public List<String> variables_names();
+
+    public List<Parameter> parameters();
+
+    public List<String> parameters_names();
+
+    public TableNameBuilder table_name();
+
+    public TableNameBuilder createTableNameBuilder();
+
+    public SelectBuilder select();
+
+    public UpdateBuilder update();
+
+    public InsertBuilder insert();
+
+    public DeleteBuilder delete();
+
+    public AlterTableBuilder alter_table();
+
+    public CreateTableBuilder create_table();
+
+    public CreateIndexBuilder create_index();
+    
+    public DropIndexBuilder drop_index();
+
+    public GrantBuilder grant();
+
+    public DropTableBuilder drop_table();
+
+    public UpdateTableStatisticsBuilder update_table_statistics();
+
+    public CountBuilder count();
+
+    public GeometryExpressionBuilder expression();
+
+    public String as_identifier(String id);
+
+    public String as_string(String s);
+
+    public String as_string(byte[] s);
+
+    public String as_string(boolean value);
+
+    public String as_string(Number value);
+
+    public String as_string(Object value);
+    
+    public Column column(String name);
+
+    public Column column(TableNameBuilder table, String name);
+    
+    public void setProperties(Class classToApply, Object... values);
+	
+	public Formatter formatter();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/Search.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/Search.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/Search.java	(revision 46118)
@@ -0,0 +1,83 @@
+/*
+ * 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.complements;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.function.Predicate;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.complement.Complement;
+import org.gvsig.tools.dataTypes.DataTypes;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface Search extends Complement<FeatureType> {
+
+    public static final String COMPLEMENT_MANE = "DAL.Search";
+
+    public static final String DAL_SEARCH_ATTRIBUTE_PRIORITY = "DAL.Search.Attribute.Priority";
+
+    public static Predicate<FeatureAttributeDescriptor> BASIC_TYPES_FILTER = FeatureType.BASIC_TYPES_FILTER;
+    public static Predicate<FeatureAttributeDescriptor> ALL_FILTER = FeatureType.ALL_FILTER;
+    
+    public static final Comparator<FeatureAttributeDescriptor> LABEL_ORDER = new Comparator<FeatureAttributeDescriptor>() {
+        @Override
+        public int compare(FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) {
+            return StringUtils.compareIgnoreCase(o1.getLabel(), o2.getLabel());
+        }
+    };
+
+    public static final Comparator<FeatureAttributeDescriptor> STR_INT_LONG_LABEL_ORDER = new Comparator<FeatureAttributeDescriptor>() {
+        @Override
+        public int compare(FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) {
+            int t1 = o1.getType();
+            int t2 = o2.getType();
+            if (t1 == DataTypes.STRING) {
+                if (t2 == DataTypes.STRING) {
+                    return StringUtils.compareIgnoreCase(o1.getLabel(), o2.getLabel());
+                }
+                return -1;
+            } else if (t2 == DataTypes.STRING) {
+                return 1;
+            }
+            if (t1 == DataTypes.INT || t1 == DataTypes.LONG) {
+                if (t2 == DataTypes.INT || t2 == DataTypes.LONG) {
+                    return StringUtils.compareIgnoreCase(o1.getLabel(), o2.getLabel());
+                }
+                return -1;
+            } else if (t2 == DataTypes.INT || t2 == DataTypes.LONG) {
+                return 1;
+            }
+            return StringUtils.compareIgnoreCase(o1.getLabel(), o2.getLabel());
+        }
+    };
+
+
+    public int getPriority(FeatureAttributeDescriptor attribute); 
+    
+    public List<String> getResultColumnNames();
+    
+    public interface OrderedAttribute {
+        public static final int TYPE_REGURAL = 0;
+        public static final int TYPE_RECENT = 1;
+        public static final int TYPE_FAVORITE = 2;
+        
+        public FeatureAttributeDescriptor getDescriptor();
+        public int getType();
+    }
+    public List<OrderedAttribute> getOrderedAttributes(
+            Predicate<FeatureAttributeDescriptor> filter,
+            Comparator<FeatureAttributeDescriptor> comparator,
+            int max
+    );
+
+    public List<FeatureAttributeDescriptor> getFavorites();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/RelatedFeatures.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/RelatedFeatures.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/complements/RelatedFeatures.java	(revision 46118)
@@ -0,0 +1,57 @@
+package org.gvsig.fmap.dal.complements;
+
+import java.util.List;
+import org.gvsig.fmap.dal.StoresRepository;
+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.tools.complement.Complement;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.Tagged;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface RelatedFeatures extends Complement<Tagged> {
+
+    public interface ContextRelatedFeatures extends Disposable {
+        public ContextRelatedFeatures setStoresRepository(StoresRepository repository);
+        public StoresRepository getStoresRepository();
+        public FeatureStore getFeatureStore();
+        public FeatureType getFeatureType();
+    }
+    
+    public static final String COMPLEMENT_MANE = "DAL.RelatedFeatures";
+
+    public static final String DAL_RELATED_UNIQUE_FIELD_NAME = "DAL.RelatedFeatures.Unique.Field.Name";
+//    public static final String DAL_RELATED_FOREING_KEY_NAME = "DAL.RelatedFeatures.Foreing.Key.Name";
+    public static final String DAL_RELATED_TABLE = "DAL.RelatedFeatures.Table";
+    public static final String DAL_RELATED_COLUMNS = "DAL.RelatedFeatures.Columns";
+
+    public ContextRelatedFeatures createContext();
+    
+//    public String getForeingKeyName();
+    
+    public String getUniqueKeyName();
+    
+    public String getTableName();
+    
+    public boolean isRelatedFeatures();
+    
+    public boolean isRelatedFeatures(ContextRelatedFeatures context);
+
+//    public Object getForeingKey(ContextRelatedFeatures context, Feature feature);
+    
+    public Object getUniqueKey(ContextRelatedFeatures context, Feature feature);
+    
+    public List<String> getColumns(ContextRelatedFeatures context);
+
+    public FeatureStore getFeatureStore(ContextRelatedFeatures context);
+    
+    public FeatureQuery getForeingKeyQuery(ContextRelatedFeatures context, Object codeValue);
+
+    public FeatureQuery getUniqueKeyQuery(ContextRelatedFeatures context, Object codeValue);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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);
+	}
+       
+        public AccessResourceException(String resourceName, Throwable cause) {
+		super(resourceName, 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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");
+		}
+        }
+        
+        protected ResourceException(String resourceName, String messageFormat,
+			Throwable cause, String messageKey, long code) {
+		super(messageFormat, cause, messageKey, code);
+		this.resource = null;
+                setValue("resource", resourceName);
+	}
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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, Iterable<Resource>   {
+	public Resource getResource(String name);
+
+	/**
+	 * Returns an iterator over the available resources.
+	 *
+	 * @return
+	 * 		iterator over the resources.
+	 */
+	public Iterator<Resource> 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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();
+
+        public String getResurceID();
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataParameterDescriptor.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/OpenErrorHandler.java	(revision 46118)
@@ -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;
+
+/**
+ * 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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/BaseStoresRepository.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/BaseStoresRepository.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/BaseStoresRepository.java	(revision 46118)
@@ -0,0 +1,87 @@
+package org.gvsig.fmap.dal;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class BaseStoresRepository 
+        extends AbstractStoresRepository
+        implements StoresRepository 
+    {
+
+    private final Map<String,DataStoreParameters> repository;
+
+    public BaseStoresRepository(String name) {
+        super(name);
+        this.repository = new HashMap<>();
+    }
+    
+    
+    @Override
+    protected DataStoreParameters getMyParameters(String name) {
+        return this.repository.get(name);
+    }
+
+    @Override
+    protected boolean isEmptyMyRepository() {
+        return this.repository.isEmpty();
+    }
+    
+    @Override
+    protected int getMySize() {
+        return this.repository.size();
+    }
+
+    @Override
+    protected UnmodifiableBasicSet<String> getMyKeySet() {
+        Set<String> keyset = this.repository.keySet();
+        if( keyset == null || keyset.isEmpty() ) {
+            return UnmodifiableBasicSet.EMPTY_UNMODIFIABLEBASICSET;
+        }
+        return new UnmodifiableBasicSetAdapter<>(keyset);
+    }
+    
+    public PropertiesSupport getProperties(String name) {
+        return null;
+    }
+    
+    @Override
+    public void add(String name, DataStoreParameters parameters) {
+        this.add(name, parameters, null);
+    }
+    
+    public void add(String name, DataStoreParameters parameters, PropertiesSupport properties) {
+        if( parameters == null ) {
+            throw new IllegalArgumentException("parameters can't be null.");
+        }
+        if( StringUtils.isBlank(name) ) {
+            throw new IllegalArgumentException("name can't be blank.");
+        }
+        if( this.notifyObservers(NOTIFICATION_ADD, name, parameters).isCanceled() ) {
+            return;
+        }
+        this.repository.put(name, parameters);
+    }
+
+    @Override
+    public void remove(String name) {
+        if( StringUtils.isBlank(name) ) {
+            LOGGER.warn("parameter name can't be blank");
+            return;
+        }
+        if( this.notifyObservers(NOTIFICATION_REMOVE, name).isCanceled() ) {
+            return;
+        }
+        this.repository.remove(name);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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):
+ * 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();
+    
+    public boolean isAvailable();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.feature;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * 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 extends Persistent{
+	
+	/**
+	 * 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(EditableFeature 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureTypeDefinitionsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureTypeDefinitionsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureTypeDefinitionsManager.java	(revision 46118)
@@ -0,0 +1,58 @@
+
+package org.gvsig.fmap.dal.feature;
+
+import java.io.File;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public interface FeatureTypeDefinitionsManager {
+    
+    /**
+     * Search if exists a DynClass associated to the feature type and return it.
+     * If do not exists a DynClass for this feature type return the feature type
+     * as the default dynClass for it.
+     * 
+     * @param store
+     * @param featureType
+     * @return  the DynClass associated to this feature type
+     */
+    public DynClass get(FeatureStore store, FeatureType featureType);
+
+    /**
+     * Return true if exists a DynClass defined associated to the feature 
+     * type passed as parameter.
+     * 
+     * @param store
+     * @param featureType
+     * @return 
+     */
+    public boolean contains(FeatureStore store, FeatureType featureType);
+    
+    /**
+     * Associate the DynClass to the feature type.
+     * This association persist betwen sessions.
+     * 
+     * @param store
+     * @param featureType
+     * @param dynClass 
+     */
+    public void add(FeatureStore store, FeatureType featureType, DynClass dynClass);
+    
+    /**
+     * Unlink the DynClass associated to the feature type.
+     * This force reload next time to call "get" for this
+     * feature type.
+     * 
+     * @param store
+     * @param featureType 
+     */
+    public void remove(FeatureStore store, FeatureType featureType);
+
+    /**
+     * Add the definitions of feature types in the file.
+     * 
+     * @param model 
+     */
+    public void addModel(File model);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/SQLBuilder_save.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/SQLBuilder_save.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/SQLBuilder_save.java	(revision 46118)
@@ -0,0 +1,291 @@
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dataTypes.DataType;
+
+public interface SQLBuilder_save {
+
+    public enum Privilege {
+        SELECT,
+        INSERT,
+        UPDATE,
+        DELETE,
+        TRUNCATE,
+        REFERENCE,
+        TRIGGER,
+        ALL
+    };
+
+    public enum GeometrySupportType {
+        WKT,
+        WKB,
+        EWKB
+    }
+    
+    public interface Parameter {
+        public int getType();
+        public String getName();
+        public IProjection getCRS();
+        public boolean isConstant();
+        public Object getValue();
+    }
+
+    public interface ExpBuilder {
+        public boolean isEmpty();
+        public ExpBuilder set(String value);
+        public ExpBuilder set(OpBuilder op);
+        public ExpBuilder and(String value);
+        public ExpBuilder and(OpBuilder op);
+        public ExpBuilder or(String value);
+        public ExpBuilder or(OpBuilder op);
+    }
+    
+    public interface ColumnBuilder {
+        public ColumnBuilder name(String name);
+        public ColumnBuilder geometry(String name);
+        public ColumnBuilder expression(String value);
+        public ColumnBuilder as(String alias);
+        public String getName();
+        public String getAlias();
+        public String getExpression();
+    }
+    
+    public interface OpBuilder {
+        public OpBuilder setop1(String op);
+        public OpBuilder setop2(String op);
+    }
+    
+    public interface FromBuilder {
+        public FromBuilder table(String tableName);
+        public FromBuilder table(String dbname, String schemaName, String tableName);
+        public FromBuilder subquery(String subquery);
+        public FromBuilder passThrough(String passthrough);
+    }
+    
+    public interface SelectBuilder {
+        public ColumnBuilder column();
+        public boolean has_column(String name);
+        public FromBuilder from();
+        public FromBuilder from(String s);
+        public ExpBuilder where();
+        public ExpBuilder where(String s);
+        public ExpBuilder where(OpBuilder s);
+        public SelectBuilder limit(long limit);
+        public SelectBuilder offset(long offset);
+        public SelectBuilder add_order_by(String order);
+        public SelectBuilder add_order_by(String column, boolean ascending);
+        public boolean has_order_by();
+    }
+    
+    public interface UpdateBuilder {
+        public UpdateBuilder table(String tableName);
+        public UpdateBuilder table(String dbName, String schemaName, String tableName);
+        public UpdateBuilder set(String fieldname, String value);
+        public UpdateBuilder setGeometry(String fieldname, String value, IProjection crs);
+        public ExpBuilder where();
+        public boolean hasWhere();
+    }
+    
+    public interface InsertBuilder {
+        public InsertBuilder table(String tableName);
+        public InsertBuilder table(String dbName, String schemaName, String tableName);
+        public InsertBuilder set(String fieldname, String value);
+        public InsertBuilder setGeometry(String fieldname, String value, IProjection crs);
+    }
+    
+    public interface DeleteBuilder {
+        public DeleteBuilder table(String tableid);
+        public DeleteBuilder table(String dbName, String schemaName, String tableName);
+        public ExpBuilder where();
+        public boolean hasWhere();
+    }
+    
+    public interface AlterTableBuilder {
+        public AlterTableBuilder table(String tableName);
+        public AlterTableBuilder table(String dbName, String schemaName, String tableName);
+        public AlterTableBuilder drop_column(String columnName);
+        public AlterTableBuilder add_column(String columnName, int type, int type_p, int type_s, boolean isPk, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+        public AlterTableBuilder alter_column(String columnName, int type, int type_p, int type_s, boolean isPk, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+        public AlterTableBuilder rename_column(String source, String target);
+        public List<String> toStrings();
+    }
+    
+    public interface CreateTableBuilder {
+        public CreateTableBuilder table(String tableName);
+        public CreateTableBuilder table(String dbname, String schemaName, String tableName);
+        public CreateTableBuilder add_column(String columnName, int type, int type_p, int type_s, boolean isPk, boolean allowNulls, boolean isAutomatic, Object defaultValue);
+        public List<String> toStrings();
+    }
+    
+    public interface UpdateTableStatisticsBuilder {
+        public UpdateTableStatisticsBuilder table(String tableName);
+        public UpdateTableStatisticsBuilder table(String dbName, String schemaName, String tableName);
+        public List<String> toStrings();
+    }
+        
+    public interface GrantBuilder {
+        public GrantBuilder table(String tableName);
+        public GrantBuilder table(String dbName, String schemaName, String tableName);
+        public GrantBuilder add(String roleid, Privilege privilege);
+        public GrantBuilder select(String roleid);
+        public GrantBuilder insert(String roleid);
+        public GrantBuilder delete(String roleid);
+        public GrantBuilder truncate(String roleid);
+        public GrantBuilder reference(String roleid);
+        public GrantBuilder trigger(String roleid);
+        public GrantBuilder all(String roleid);
+        public GrantBuilder select();
+        public GrantBuilder insert();
+        public GrantBuilder delete();
+        public GrantBuilder truncate();
+        public GrantBuilder reference();
+        public GrantBuilder trigger();
+        public GrantBuilder all();
+        public List<String> toStrings();
+    }
+        
+    public interface DropTableBuilder {
+        public DropTableBuilder table(String tableName);
+        public DropTableBuilder table(String dbName, String schemaName, String tableName);
+        public List<String> toStrings();
+    }
+    
+    boolean has_spatial_functions();
+    
+    String ST_AsText(String geom);
+
+    String ST_AsBinary(String geom);
+
+    String ST_AsEWKB(String geom);
+
+    String ST_Envelope(String geom);
+
+    String ST_ExtentAggregate(String geom);
+
+    String ST_UnionAggregate(String geom);
+    
+    String ST_GeomFromText(String geom, String crs);
+    
+    String ST_GeomFromWKB(String geom, String crs);
+            
+    String ST_GeomFromEWKB(String geom, String crs);
+
+    String ST_GeomFromText(String geom, int crs);
+
+    String ST_GeomFromText(Geometry geom, IProjection crs);
+
+    String ST_GeomFromWKB(Geometry geom, IProjection crs);
+    
+    String ST_GeomFromEWKB(Geometry geom, IProjection crs);
+
+    String ST_GeomFromText(Envelope env, IProjection crs);
+
+    String ST_Intersects(String geom1, String geom2);
+
+    String ST_Contains(String geom1, String geom2);
+
+    String ST_Crosses(String geom1, String geom2);
+
+    String ST_IsClosed(String geom1, String geom2);
+
+    String ST_Overlaps(String geom1, String geom2);
+
+    String ST_Touches(String geom1, String geom2);
+
+    String ST_Within(String geom1, String geom2);
+
+    String isNull(String s);
+
+    String default_schema();
+    
+    String count(String column);
+    
+    String lcase(String s);
+    
+    String ucase(String s);
+    
+    String getWKT(Geometry geom);
+    byte[] getWKB(Geometry geom);
+    byte[] getEWKB(Geometry geom);
+        
+    String getWKT(Envelope env);
+    byte[] getWKB(Envelope env);
+    byte[] getEWKB(Envelope env);
+
+    String geometry(Geometry geom, IProjection crs);
+    
+    String geometry(Envelope env, IProjection crs);
+    
+    String string(String s);
+    
+    String identifier(String id);
+    
+    String bytearray(byte[] data);
+    
+    String crs(String crs);
+    
+    String crs(IProjection crs);
+
+    String sqltype(int dataType, int p, int s);
+
+    GeometrySupportType geometry_support_type();
+    
+    OpBuilder and(String op1, String op2);
+
+    OpBuilder or(String op1, String op2);
+
+    OpBuilder eq(String op1, String op2);
+    
+    OpBuilder ne(String op1, String op2);
+    
+    OpBuilder gt(String op1, String op2);
+    
+    OpBuilder ge(String op1, String op2);
+
+    OpBuilder lt(String op1, String op2);
+    
+    OpBuilder le(String op1, String op2);
+
+    OpBuilder like(String op1, String op2);
+
+    OpBuilder ilike(String op1, String op2);
+
+    ExpBuilder createExpresionBuilder(String x);
+    
+    ExpBuilder createExpresionBuilder(OpBuilder x);
+    
+    ExpBuilder createExpresionBuilder();
+    
+    void clearParameters();
+    
+    void addParameter(DataType type, String name);
+    
+    void addParameter(int type, String name);
+    
+    void addParameter(int type, String name, IProjection crs);
+    
+    void addConstantParameter(Object value);
+
+    List<Parameter> getParameters();
+    
+    SelectBuilder select();
+    
+    UpdateBuilder update();
+
+    InsertBuilder insert();
+    
+    DeleteBuilder delete();
+    
+    AlterTableBuilder alter_table();
+
+    CreateTableBuilder create_table();
+
+    GrantBuilder grant();
+
+    DropTableBuilder drop_table();
+
+    UpdateTableStatisticsBuilder update_table_statistics();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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):
+ * 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.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.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObjectPagingHelper;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.util.GetItemWithSizeIsEmptyAndIterator64;
+
+/**
+ * Helper interface to access the values of a FeatureCollection by position.
+ *
+ * @author gvSIG team
+ */
+public interface FeaturePagingHelper extends DynObjectPagingHelper, Disposable, GetItemWithSizeIsEmptyAndIterator64<Feature> {
+
+    /**
+     * 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.
+     * @param selectionUp
+     */
+    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();
+
+    public FeatureSelection getSelection();
+
+    public void setSelection(FeatureSelection selection);
+
+    @Override
+    public boolean isEmpty();
+    
+    public FeatureSet getFeatureSet();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FacadeOfAFeaturePagingHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FacadeOfAFeaturePagingHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/paging/FacadeOfAFeaturePagingHelper.java	(revision 46118)
@@ -0,0 +1,8 @@
+
+package org.gvsig.fmap.dal.feature.paging;
+
+
+public interface FacadeOfAFeaturePagingHelper {
+    
+    public FeaturePagingHelper getFeaturePagingHelper();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.feature;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.json.SupportFromJson;
+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, SupportFromJson {
+
+	/**
+	 * Sets the default geometry attribute name
+	 * 
+	 * @param name
+	 * 			string containing the default geometry attribute name
+	 */
+	public void setDefaultGeometryAttributeName(String name);
+
+        public void setDefaultGeometryType(int type, int subType);    
+
+	/**
+	 * 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);
+        
+        public void removeAll();
+        
+        public void addAll(FeatureType other);
+
+	/**
+	 * 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);
+
+        public EditableFeatureAttributeDescriptor add(String name, String 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);
+
+        public EditableFeatureAttributeDescriptor add(String name, String 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();
+        
+        /**
+         * Returns a copy of this editable feature type.
+         * 
+         * @return the copy 
+         */
+        @Override
+        public EditableFeatureType getEditable();
+
+	/**
+	 * 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);
+        
+        public EditableFeatureAttributeDescriptor addLike(FeatureAttributeDescriptor other);
+        
+        public void setCheckFeaturesAtFinishEditing(boolean check);
+        
+        public void setCheckFeaturesAtInsert(boolean check);
+
+        public void set(String name, String value);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.feature;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+
+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( StringUtils.isEmpty(name) ) {
+            this.name = this.getClass().getName();
+        } else {
+            this.name = name;
+        }
+        this.descripcion = description;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.descripcion;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public FeatureType getDefaultFeatureType() throws DataException {
+        return defaultFeatureType;
+    }
+
+    @Override
+    public List getFeatureTypes() throws DataException {
+        return featureTypes;
+    }
+
+    @Override
+    public void setFeatureStore(FeatureStore store) {
+        this.store = store;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return store;
+    }
+    
+    @Override
+    public boolean isTransformsOriginalValues() {
+        return false;
+    }
+
+    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(false); // Mantenemos el campo por compatibilidad
+                                      // con versiones anteriores a la 2.4, pero
+                                      // ya no se recupera ni se guarda.
+        }
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+//		this.store = (FeatureStore) state.get("store");
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+//		state.set("store", store);	
+    }
+
+    @Override
+    public final void setSourceMetadata(DynObject metadata) {
+        this.originalMetadata = metadata;
+    }
+
+    protected DynObject getSourceMetadata() {
+        return this.originalMetadata;
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        throw new DynFieldNotFoundException(name, "transform");
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        return false;
+    }
+
+    @Override
+    public void setDynValue(String name, Object value)
+        throws DynFieldNotFoundException {
+        throw new DynFieldNotFoundException(name, "transform");
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.json.SupportJson;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public interface FeatureAttributeEmulator extends SupportJson {
+    
+    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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.function.Predicate;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct_v2;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.util.UnmodifiableBasicList;
+import org.gvsig.json.SupportToJson;
+
+/**
+ * <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, DynStruct_v2, UnmodifiableBasicList<FeatureAttributeDescriptor>, SupportToJson {
+	
+    public interface FeatureTypeChanged {
+      FeatureType getSource();
+
+      FeatureType getTarget();
+    }
+
+    public static final Predicate<FeatureAttributeDescriptor> BASIC_TYPES_FILTER = new Predicate<FeatureAttributeDescriptor>() {
+        @Override
+        public boolean test(FeatureAttributeDescriptor attrdesc) {
+            DataType t = attrdesc.getDataType();
+            boolean r = !(t.isContainer() || t.isDynObject() || t.isObject());
+            return r;
+        }
+    };
+
+    public static Predicate<FeatureAttributeDescriptor> ALL_FILTER = new Predicate<FeatureAttributeDescriptor>() {
+        @Override
+        public boolean test(FeatureAttributeDescriptor t) {
+            return true;
+        }
+    };
+    
+    /**
+     * Returns a new copy of this FeatureType
+     *
+     * @return a new copy of this FeatureType
+     */
+    public FeatureType getCopy();
+
+    public void copyFrom(FeatureType other);
+    
+    /**
+     * 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 FeatureAttributeDescriptor 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);
+	
+	public FeatureAttributeDescriptor getAttributeDescriptorFromAll(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 the name of the given the attribute index.
+     * If the index is incorrect, return null.
+     * 
+     * @param index of the attribute
+     *
+     * @return a String with the name of attribute
+     */
+    public String getAttributeName(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();
+
+    public boolean isEmpty();
+
+    /**
+     * 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. If not have primary keys return a empty array.
+     *
+     * @return
+     */
+    public FeatureAttributeDescriptor[] getPrimaryKey();
+
+    public boolean hasPrimaryKey();
+    
+    public boolean supportReferences();
+    
+    /**
+     * 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();
+
+    /**
+     * 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 getDefaultTimeAttributeName();
+
+    /**
+     * Returns the index of the attribute that will be used as default geometry
+     * attribute.
+     *
+     * @return index of the default geometry attribute.
+     */
+    public int getDefaultTimeAttributeIndex();
+
+    /**
+     * Return the store associated to this type.
+     *
+     * @return the FeatureStore of the type.
+     */
+    public FeatureStore getStore();
+
+    public List<FeatureAttributeDescriptor> getFilteredAttributes(
+            Predicate<FeatureAttributeDescriptor> filter,
+            int max
+    );
+
+    public List<FeatureAttributeDescriptor> getRecentUseds();
+
+    FeatureStore getAsFeatureStore();
+    
+    public String getNewFieldName();
+
+    /**
+     * Return the original feature type of this type.
+     * It will return Null when the store it's in not editing mode
+     * or the featureType has not been change
+     * 
+     * @return the original FeatureType of the type.
+     */
+    public FeatureType getOriginalFeatureType();
+    
+    public boolean hasOnlyMetadataChanges(FeatureType other);
+
+    public void writeAsDALFile(File file);
+    
+    public FeatureExtraColumns getExtraColumns();
+
+    public Iterable<FeatureAttributeDescriptor> getAllAttributeDescriptors();
+
+    public boolean isCheckFeaturesAtFinishEditing();
+
+    public boolean isCheckFeaturesAtInsert();
+        
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature;
+
+import java.util.Iterator;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * 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 extends Iterable<FeatureRule>, Persistent {
+
+	/**
+	 * Returns an object given its index.
+	 * 
+	 * @param index
+	 * 			a position in this <code>FeatureRules</code>
+	 * @return
+	 * 		the object found in the given index
+	 */
+	public FeatureRule 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
+	 * 		
+	 */
+	public boolean add(FeatureRule rule);
+
+  public boolean add(String name, String description, boolean checkAtUpdate,
+			boolean checkAtFinishEdition, Expression expression);
+  
+	/**
+	 * Returns the number of rules contained in this FeatureRules.
+	 * 
+	 * @return
+	 * 		number of rules in this FeatureRules
+	 */
+	public int size();
+
+  public boolean isEmpty();
+    
+	/**
+	 * 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 FeatureRule 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)
+	 */
+        @Override
+	public Iterator<FeatureRule> 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 gvSIG Team
+ */
+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(name,description,true,true);
+	}
+
+	protected AbstractFeatureRule(String name, String description,
+			boolean checkAtUpdate, boolean checkAtFinishEdition) {
+		this.name=name;
+		this.description=description;
+		this.checkAtUpdate = checkAtUpdate;
+		this.checkAtFinishEdition = checkAtFinishEdition;
+	}
+
+        @Override
+	public String getName() {
+		return name;
+	}
+
+        @Override
+	public String getDescription() {
+		return description;
+	}
+
+        @Override
+	public boolean checkAtFinishEditing() {
+		return this.checkAtFinishEdition;
+	}
+
+        @Override
+	public boolean checkAtUpdate() {
+		return this.checkAtUpdate;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1399 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 javax.json.JsonObject;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+
+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.SpatialIndex;
+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;
+import org.gvsig.tools.util.GetItemWithSizeIsEmptyAndIterator64;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.Size64;
+import org.gvsig.tools.util.UnmodifiableBasicList64;
+
+/**
+ * <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, Iterable<Feature>, 
+        PropertiesSupport,
+        Size64 {
+
+    public static final String METADATA_DEFINITION_NAME = "FeatureStore";
+
+    final static int MODE_UNKNOWN = -1;
+    
+    /** 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;
+    
+    final static int MODE_PASS_THROUGH = 3;
+
+    /*
+     * =============================================================
+     *
+     * 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;
+    
+    public FeatureType getDefaultFeatureTypeQuietly();
+
+    /**
+     * 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();
+
+    /**
+     * @param gvSIGgeometryType
+     * @return 
+     * @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
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     */
+    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 provider
+     * @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, String name) throws DataException;
+
+    public void copyTo(FeatureStore target);
+
+    /*
+     * =============================================================
+     *
+     * Query related services
+     */
+    
+    /** 
+     * Create a {@link FeatureQuery} with the restrictions indicateds.
+     * 
+     * "filter" will be null or a valid filter expression for the store.
+     * 
+     * "sortBy" can be null to use the store's default order.
+     * 
+     * The parameter sortBy can be an attribute name or a comma separated list. 
+     * Each attribute name can be preceded or followed by "+" or "-" to indicate 
+     * the order to use to sort by that attribute. 
+     * 
+     * If no "+" or "-" is indicated, the "asc" parameter will be used to 
+     * determine if the order is ascending, "true" or decent, "false".
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return a {@link FeatureQuery} with the restrictions.
+     * @see {@link FeatureQuery}
+     */
+    public FeatureQuery createFeatureQuery(String filter, String sortBy, boolean asc);
+    public FeatureQuery createFeatureQuery(String filter);
+    public FeatureQuery createFeatureQuery(Expression filter);
+
+    /** 
+     * Create a {@link FeatureQuery} with the restrictions indicateds.
+     * 
+     * "filter" will be null or {@link Expression} valid for the store.
+     * 
+     * "sortBy" can be null to use the store's default order.
+     * 
+     * The parameter sortBy can be an attribute name or a comma separated list. 
+     * Each attribute name can be preceded or followed by "+" or "-" to indicate 
+     * the order to use to sort by that attribute. 
+     * 
+     * If no "+" or "-" is indicated, the "asc" parameter will be used to 
+     * determine if the order is ascending, "true" or decent, "false".
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return a {@link FeatureQuery} with the restrictions.
+     * @see {@link FeatureQuery}
+     */
+    public FeatureQuery createFeatureQuery(Expression filter, String sortBy, boolean asc);
+        
+    /** 
+     * Create a {@link FeatureQuery} with the restrictions indicateds.
+     * 
+     * "filter" will be null or {@link Expression} valid for the store.
+     * 
+     * "sortBy" can be null to use the store's default order.
+     * 
+     * The parameter sortBy can be an attribute name or a comma separated list. 
+     * Each attribute name can be preceded or followed by "+" or "-" to indicate 
+     * the order to use to sort by that attribute. 
+     * 
+     * If no "+" or "-" is indicated, the "asc" parameter will be used to 
+     * determine if the order is ascending, "true" or decent, "false".
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy expression used to order the features in the store.
+     * @param asc use order ascending, true, or descending, false.
+     * @return a {@link FeatureQuery} with the restrictions.
+     * @see {@link FeatureQuery}
+     */
+    public FeatureQuery createFeatureQuery(Expression filter, Expression sortBy, boolean asc);
+    
+    /** 
+     * Create a {@link FeatureQuery} with the restrictions indicateds.
+     * 
+     * "filter" will be null or {@link Expression} valid for the store.
+     * 
+     * "sortBy" can be null to use the store's default order.
+     * 
+     * The parameter sortBy can be an attribute name or a comma separated list. 
+     * Each attribute name can be preceded or followed by "+" or "-" to indicate 
+     * the order to use to sort by that attribute. 
+     * 
+     * If no "+" or "-" is indicated, the "asc" parameter will be used to 
+     * determine if the order is ascending, "true" or decent, "false".
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy expression used to order the features in the store.
+     * @param asc use order ascending, true, or descending, false.
+     * @return a {@link FeatureQuery} with the restrictions.
+     * @see {@link FeatureQuery}
+     */
+    public FeatureQuery createFeatureQuery(String filter, Expression sortBy, boolean asc);
+
+    
+    
+    /**
+     * Returns all available features in the store.
+     *
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features
+     * @see {@link #accept(org.gvsig.tools.visitor.Visitor)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet() throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(String filter) throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * The sort order used is ascending.
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(String filter, String sortBy) throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(String filter, String sortBy, boolean asc) throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @return the {@link FeatureSet} 
+     * @throws DataException 
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(Expression filter) throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * The sort order used is ascending.
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(Expression filter, String sortBy) throws DataException;
+
+    /**
+     * Return a subset of features.
+     * 
+     * It is a utility method that calls {@link #getFeatureSet(FeatureQuery)}
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the {@link FeatureSet} 
+     * @throws DataException 
+     * @see {@link #createFeatureQuery(Expression,String,boolean)}, {@link #getFeatureSet(FeatureQuery)}
+     */
+    FeatureSet getFeatureSet(Expression filter, String sortBy, boolean asc) throws DataException;
+
+    /**
+     * Returns a subset of features taking into account the properties and
+     * restrictions of the {@link FeatureQuery}.
+     * 
+     * If {@link FeatureQuery} is null, return al 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>
+     *
+     * @param featureQuery defines the characteristics of the features to return.
+     * @return the {@link FeatureSet} 
+     * @throws ReadException if there is any error while reading the features.
+     * @see #accept(org.gvsig.tools.visitor.Visitor, org.gvsig.fmap.dal.DataQuery)
+     */
+    FeatureSet getFeatureSet(FeatureQuery featureQuery) throws DataException;
+
+    /**
+     * Loads a subset of features taking into account the properties and
+     * restrictions of the FeatureQuery. 
+     * When feature loading is finished call the Observer passing the
+     * {@link FeatureSet}  loaded.
+     *
+     * @param featureQuery defines the characteristics of the features to return.
+     * @param observer to be notified when loading is finished.
+     * @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;
+
+    /**
+     * Return a paginated list of Features filtered by the query.
+     * 
+     * If the query  is null, return all features in the store sorteds 
+     * by default order.
+     * 
+     * The return value implements {@link List} and {@link UnmodifiableBasicList64} 
+     * to support large list of features.
+     * 
+     * The returned list of Features is paginated, and the page size
+     * used is "pageSize". 
+     * 
+     * If the page size is less than or equal to 0, the default page size of 
+     * 100 will be used.
+     *
+     * @param query to filter and sort the returned feature list
+     * @param pageSize the page size of the list
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     */
+    public List<Feature> getFeatures(FeatureQuery query, int pageSize);
+
+    /**
+     * Return a paginated list of Features.
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param query to filter and sort the returned feature list
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}
+     */
+    public List<Feature> getFeatures(FeatureQuery query);
+
+    /**
+     * Return a paginated list with al Features in the store.
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}
+     */
+    public List<Feature> getFeatures();
+
+    /**
+     * Return a paginated list of Features
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * 
+     * @param filter used to filter the features in the store.
+     * @return the List of Features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public List<Feature> getFeatures(String filter);
+
+    /**
+     * Return a paginated list of Features.
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param filter used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public List<Feature> getFeatures(String filter, String sortBy);
+
+    /**
+     * Return a paginated list of Features.
+     *  
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param filter an {@link String} expression used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public List<Feature> getFeatures(String filter, String sortBy, boolean asc);
+
+    /**
+     * Return a paginated list of Features
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @return the List of Features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(Expression,String,boolean)}
+     */
+    public List<Feature> getFeatures(Expression filter);
+
+    /**
+     * Return a paginated list of Features
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(Expression,String,boolean)}
+     */
+    public List<Feature> getFeatures(Expression filter, String sortBy);
+
+    /**
+     * Return a paginated list of Features
+     * 
+     * It is a utility method that calls {@link #getFeatures(FeatureQuery, int)}
+     * using the default page size.
+     * 
+     * @param filter an {@link Expression} used to filter the features in the store.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the {@link List}/{@link UnmodifiableBasicList64} of features
+     * @see {@link #getFeatures(FeatureQuery, int)}, {@link #createFeatureQuery(Expression,String,boolean)}
+     */
+    public List<Feature> getFeatures(Expression filter, String sortBy, boolean asc);
+
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64();
+
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter);
+    
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter, String sortBy, boolean asc);
+    
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(FeatureQuery query, int pageSize);
+    
+    /**
+     * Return the first {@link Feature} of the store.
+     * 
+     * @return the first {@link Feature} or null if the store is empty.
+     * @throws DataException 
+     */
+    public Feature first() throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public Feature findFirst(String filter) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public Feature findFirst(String filter, String sortBy) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public Feature findFirst(String filter, String sortBy, boolean asc) throws DataException;
+
+    
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy Expression
+     * @param asc use order ascending, true, or descending, false.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(String,String,boolean)}
+     */
+    public Feature findFirst(String filter, Expression sortBy, boolean asc) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(Expession,String,boolean)}
+     */
+    public Feature findFirst(Expression filter) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(Expession,String,boolean)}
+     */
+    public Feature findFirst(Expression filter, String sortBy) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy Attribute names separated by commas used to sort the list to return.
+     * @param asc use order ascending, true, or descending, false.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(Expession,String,boolean)}
+     */
+    public Feature findFirst(Expression filter, String sortBy, boolean asc) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param filter {@link String} expression used to filter the features.
+     * @param sortBy expression used to sort features
+     * @param asc use order ascending, true, or descending, false.
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(Expession,String,boolean)}
+     */
+    public Feature findFirst(Expression filter, Expression sortBy, boolean asc) throws DataException;
+
+    /**
+     * Returns the first {@link Feature} that meets the criteria indicated.
+     * 
+     * It is a utility method that calls {@link #findFirst(FeatureQuery)}.
+     * 
+     * @param query to filter and sort the returned feature list
+     * @return the first {@link Feature} or null if the filter don't return any feature.
+     * @throws DataException 
+     * @see {@link #findFirst(FeatureQuery)}, {@link #createFeatureQuery(Expession,String,boolean)}
+     */
+    public Feature findFirst(FeatureQuery query) throws DataException;
+
+    /**
+     * Returns the feature given its reference.
+     *
+     * @param reference a unique FeatureReference
+     * @return 
+     * @returnThe 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.
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     */
+    public void edit() throws DataException;
+
+    /**
+     * Enters editing state specifying the editing mode.
+     *
+     * @param mode
+     *
+     * @throws DataException
+     */
+    public void edit(int mode) throws DataException;
+    
+    public int getMode();
+
+    /**
+     * Cancels all editing since the last edit().
+     *
+     * @throws DataException
+     */
+    public void cancelEditing() throws DataException;
+
+    public boolean cancelEditingQuietly();
+
+    public static boolean cancelEditingQuietly(FeatureStore store) {
+        if( store==null ) {
+            return true;
+        }
+        return store.cancelEditingQuietly();
+    }
+    
+    /**
+     * Exits editing state.
+     *
+     * @throws DataException
+     */
+    public void finishEditing() throws DataException;
+
+    public boolean finishEditingQuietly();
+    
+    public static boolean finishEditingQuietly(FeatureStore store) {
+        if( store==null ) {
+            return true;
+        }
+        return store.finishEditingQuietly();
+    }
+
+    /**
+     * 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;
+
+    /**
+     * Updates Features in the store with the values of the parameters.
+     * Examples:
+     *      update("field1",value1,"field2",value2);
+     *      update("field1",value1,"field2",value2,filter);
+     * 
+     * filter can be a {@link Expression} or a String
+     * 
+     * @param parameters
+     * @throws DataException 
+     */
+    public void update(Object... parameters) 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;
+    
+    public void delete(String filter);
+    
+    public void delete(Expression filter);
+
+    /**
+     * 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;
+
+    /**
+     * Inserts a set of {@link Feature} in the store.
+     * 
+     * The attributes of the feature are copied from the features of the set 
+     * by name, forcing the conversion of types if necessary.
+     *
+     * Any {@link FeatureSet} from this store that was still in use will be
+     * invalidated.
+     *
+     * @param set, set with the source features.
+     * @throws DataException
+     */
+    public void insert(FeatureSet set) 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;
+
+    /**
+     * Creates a new feature of default {@link FeatureType}.
+     * The new feature should be initialized with the values of the feature
+     * passed as parameter.
+     * Values are inicialiced by name from the feature specified. Error in
+     * value assignement are ignoreds.
+     *
+     * @param defaultValues the values to initialize the new feature.
+     * @return the new feature
+     * @throws DataException
+     */
+    public EditableFeature createNewFeature(Feature defaultValues)
+        throws DataException;
+
+    public EditableFeature createNewFeature(JsonObject defaultValues)
+        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
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     */
+    public void setSelection(FeatureSet selection) throws DataException;
+
+    /**
+     * Creates a {@link FeatureSelection}
+     *
+     * @return
+     *         a {@link FeatureSelection}
+     *
+     * @throws DataException
+     */
+    public FeatureSelection createFeatureSelection() throws DataException;
+    
+    public FeatureSelection createLargeFeatureSelection() throws DataException;
+            
+    /**
+     * Creates a {@link FeatureSelection}
+     *
+     * @return
+     *         a {@link FeatureSelection}
+     *
+     * @throws DataException
+     */
+    public FeatureSelection createMemoryFeatureSelection() throws DataException;
+
+
+    /**
+     * Returns the current {@link FeatureSelection}.
+     * Create a empty selection if not exits.
+     * 
+     * Manage of the selection can be slow on some data sources. 
+     * Use with care.
+     * In data sources that do not support position access to records, 
+     * it may be slow to retrieve items from the selection. In some data 
+     * sources it may be necessary to access to this to retrieve each 
+     * item in the selection.
+     *
+     * @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);
+
+
+    public ExpressionBuilder createExpressionBuilder();
+
+    /**
+     * 
+     * @return 
+     * @deprecated use createExpressionBuilder
+     */
+    public ExpressionBuilder createExpression();
+
+    public void createCache(String name, DynObject parameters)
+        throws DataException;
+
+    @Override
+    public FeatureCache getCache();
+
+    public boolean isBroken();
+
+    public Throwable getBreakingsCause();
+
+    /**
+     * Indicates if the storage is temporary.
+     * There is no guarantee that a temporary store can be recovered from 
+     * its parameters. In general these will not be persistent.
+     * 
+     * @return true if the store is temporary, otherwise false.
+     */
+    public boolean isTemporary();
+    
+    /**
+     * @param index
+     * @return
+     */
+    public SpatialIndex wrapSpatialIndex(SpatialIndex index);
+    
+    public FeatureReference getFeatureReference(String code);
+
+    /**
+     * Devuelbe el numero de operaciones pendientes de guardar en una sesion
+     * de edicion. Es un valor orientativo.
+     * Las operaciones pendientes son la suma de operaciones de borrado, insercion
+     * o modificacion de las features en una sesion de edicion.
+     * 
+     * Retorna 0 si no esta en edicion.
+     * 
+     * @return numero de operaciones pendientes. 
+     */
+    public long getPendingChangesCount();
+    
+    public Feature getSampleFeature();
+    
+    /**
+     * Return true when the default feature type of the store 
+     * support references.
+     * 
+     * @return true when support references.
+     */
+    public boolean supportReferences();
+    
+    public Feature getOriginalFeature(FeatureReference id);
+
+    public Feature getOriginalFeature(Feature feature);
+    
+    public boolean isFeatureModified(FeatureReference id);
+
+    public boolean isFeatureModified(Feature feature);
+    
+    public String getEditingSession();
+
+    public List<FeatureReference> getEditedFeatures();
+    
+    public List<FeatureReference> getEditedFeaturesNotValidated();
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureTypeDefinitionsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureTypeDefinitionsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractFeatureTypeDefinitionsManager.java	(revision 46118)
@@ -0,0 +1,7 @@
+
+package org.gvsig.fmap.dal.feature;
+
+
+public abstract class AbstractFeatureTypeDefinitionsManager implements FeatureTypeDefinitionsManager {
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature;
+
+import java.text.DateFormat;
+import java.util.Locale;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeIntegrityException;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.json.SupportFromJson;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dataTypes.DataType;
+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, SupportFromJson {
+
+    /**
+     * Checks attribute integrity
+     *
+     * @throws
+     * org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeIntegrityException
+     */
+    void checkIntegrity() throws AttributeFeatureTypeIntegrityException;
+
+    @Override
+    public EditableForeingKey getForeingKey();
+
+    /**
+     * 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);
+
+    public EditableFeatureAttributeDescriptor setDataType(DataType dataType);
+
+    public EditableFeatureAttributeDescriptor setDataProfileName(String dataProfile);
+
+    /**
+     * Sets the size. Used for arrays (byte, char/string,...)
+     *
+     * @param size a size of type int
+     * @return this
+     *
+     */
+    public EditableFeatureAttributeDescriptor setSize(int size);
+
+    /**
+     * Set the required bytes to store this attribute.
+     *
+     * This value is dependent of the store type.
+     *
+     * @param size
+     * @return
+     */
+    public EditableFeatureAttributeDescriptor setDisplaySize(int size);
+
+    /**
+     * Sets the precision
+     *
+     * @param precision of type int
+     *
+     * @return this
+     */
+    public EditableFeatureAttributeDescriptor setPrecision(int precision);
+
+    public EditableFeatureAttributeDescriptor setScale(int scale);
+
+    /**
+     * 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);
+
+    public EditableFeatureAttributeDescriptor setAvoidCachingAvailableValues(boolean avoidCachingAvailableValues);
+
+    /**
+     * Sets the {@link FeatureAttributeEmulator} that is used to update the
+     * presentation of a field.
+     *
+     * @param featureAttributeEmulator the {@link FeatureAttributeEmulator} to
+     * set.
+     * @return
+     */
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(FeatureAttributeEmulator featureAttributeEmulator);
+
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(Expression expression);
+
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(String expression);
+
+    /**
+     * 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);
+
+    public EditableFeatureAttributeDescriptor setSRS(String SRS);
+
+    public EditableFeatureAttributeDescriptor setInterval(Interval interval);
+
+    /**
+     * 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 geometry type and subtype. The format is:
+     * <code>{geometryType}{sep}[geometrySubtype}</code> where:
+     * <ul>
+     * <li>geometryType is the name of the type of geometry.</li>
+     * <li>sep is a character from ":/-!;#@".</li>
+     * <li>geometrySubtype is the name of the subtype of geometry.</li>
+     * </ul>
+     *
+     * @param geometryType
+     * @return
+     */
+    public EditableFeatureAttributeDescriptor setGeometryType(String geometryType);
+
+    public EditableFeatureAttributeDescriptor setGeometryType(int geometryType, int geometrySubType);
+
+    /**
+     * Sets the default value
+     *
+     * @param defaultValue
+     *
+     * @return this
+     */
+    public EditableFeatureAttributeDescriptor setDefaultValue(
+            Object defaultValue);
+
+    /**
+     * Sets additional information of the attribute
+     *
+     * @param infoName
+     * @param value
+     * @return
+     */
+    public EditableFeatureAttributeDescriptor setAdditionalInfo(String infoName, String value);
+
+    @Deprecated
+    public EditableFeatureAttributeDescriptor setAdditionalInfo(String infoName, Object value);
+
+    /**
+     * Sets whether the related FeatureAttribute is part of the FeatureType's
+     * primary key
+     *
+     * @param isAutomatic 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.
+     *
+     * @param dateFormat
+     * @return
+     */
+    public EditableFeatureAttributeDescriptor setDateFormat(DateFormat dateFormat);
+
+    public EditableFeatureAttributeDescriptor set(String name, Object value);
+
+    public EditableFeatureAttributeDescriptor setRoundMode(int roundMode);
+
+    public EditableFeatureAttributeDescriptor setLocale(Locale locale);
+
+    public EditableFeatureAttributeDescriptor setForeingkey(
+            boolean isForeingkey,
+            boolean isClosedList,
+            String tableName,
+            String codeName,
+            String labelFormula
+    );
+    
+    public EditableFeatureAttributeDescriptor setTag(String name, Object value);
+    
+    public EditableFeatureAttributeDescriptor setAvailableValuesFilter(Expression filter);
+    
+    public EditableFeatureAttributeDescriptor setDefaultFormat(String format);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+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;
+	public Feature getFeatureQuietly();
+
+	/**
+	 * 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();
+        
+        public String getCode();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+import java.util.List;
+import java.util.function.Function;
+
+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();
+
+  public boolean preferNotToUseNonNullRestrictions();
+
+  /**
+   *
+   * @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 allowEditableFeatureType();
+
+  public int useLocalIndexesCanImprovePerformance();
+
+  public int isOptimalRecoverFeaturesByReference();
+
+  /**
+   * Returns max size for attributes names returns -1 if it is undefined
+   *
+   * @return
+   */
+  public int getMaxAttributeNameSize();
+
+  public boolean supportNumericOID();
+
+  /**
+   *
+   * @return
+   */
+  public Function<String,Integer> allowFunction();
+
+  public int allowGroupBy();
+  
+  public boolean allowSpatialIndexSupport();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/OpenFeatureStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/OpenFeatureStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/OpenFeatureStoreParameters.java	(revision 46118)
@@ -0,0 +1,9 @@
+
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+
+
+public interface OpenFeatureStoreParameters extends OpenDataStoreParameters {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature;
+
+import java.math.MathContext;
+import java.text.DateFormat;
+import java.util.Locale;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.json.SupportToJson;
+
+/**
+ * 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_v2, LabeledValue<FeatureAttributeDescriptor>, Persistent, SupportToJson {
+
+  /**
+   * 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();
+
+  public String getDataProfileName();
+
+  public DataProfile getDataProfile();
+
+  /**
+   * 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();
+  
+  /**
+   * Return the designated column normal maximum width in characters.
+   * 
+   * @return 
+   */
+  public int getDisplaySize();
+
+  /**
+   * For attributes of type {@link DataTypes#DECIMAL}, this returns the maximum
+   * number of digits. For other types, this must always return zero.
+   *
+   * @return
+   */
+  public int getPrecision();
+
+  /**
+   * For attributes of type {@link DataTypes#DECIMAL}, this returns the maximum
+   * number of digits after the decimal point. For other types, this must always
+   * return zero.
+   *
+   * @return
+   */
+  public int getScale();
+
+  /**
+   * For attributes of type {@link DataTypes#DECIMAL}, this returns the
+   * MathContext associated to this. For other types return
+   * {@link MathContext#UNLIMITED}.
+   *
+   * @return
+   */
+  public MathContext getMathContext();
+
+  /**
+   * Return a CoercionContext for this attribute.
+   *
+   * @return the CoercionContext
+   */
+  public CoercionContext getCoercionContext();
+
+  /**
+   * Return a Coercion to convert a value to the type of this attribute.
+   *
+   * @return the Coercion.
+   */
+  public Coercion getCoercion();
+
+  /**
+   * Returns the rounding mode to use when a value is converted to the
+   * attribute's data type. It will only be used for Float, Double and Decimal
+   * data types.
+   *
+   * @return
+   */
+  public int getRoundMode();
+
+  /**
+   * Returns the Locale associated with this attribute. It is usually used to
+   * format and recognize dates and decimal numbers. The default Locale will be
+   * <code>Locale. ENGLISH</code>
+   *
+   * @return
+   */
+  public Locale getLocale();
+
+  /**
+   * 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.
+   *
+   * @return
+   */
+  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.
+   *
+   * @return
+   */
+  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.
+   *
+   * @return
+   */
+  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.
+   *
+   * @return
+   */
+  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
+   * @return 
+   */
+  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();
+
+  /**
+   * Return the default value coerced to the data type of attribute. Return null
+   * if can't coerce.
+   *
+   * @return default value or null.
+   */
+  public Object getDefaultValueCoerced();
+
+  /**
+   * Returns this attribute relative position within the {@link Feature}.
+   *
+   * @return an index
+   */
+  public int getIndex();
+
+  /**
+   * Returns additional information of the attribute
+   *
+   * @param infoName
+   * @return info
+   *
+   */
+  public String getAdditionalInfo(String infoName);
+
+  /**
+   * Returns if value is created automatically by the source
+   * @return 
+   */
+  public boolean isAutomatic();
+
+  /**
+   * Gets if the attribute is a temporal attribute.
+   *
+   * @return <code>true</code> if is a temporal attribute
+   */
+  public boolean isTime();
+
+  public Interval getInterval();
+
+  /**
+   * Return true if the attribute has and index in the table.
+   *
+   * @return true if indexed.
+   */
+  public boolean isIndexed();
+
+  public boolean allowIndexDuplicateds();
+
+  public boolean isIndexAscending();
+
+  public boolean isForeingKey();
+
+  public ForeingKey getForeingKey();
+
+  /**
+   * 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();
+
+  /**
+   * Return true if the attribute has an evaluator o an emulator.
+   *
+   * @return
+   */
+  public boolean isComputed();
+
+  /**
+   * Return the store associated to this attribute descriptor.
+   *
+   * @return the FeatureStore of the attribute descriptor.
+   */
+  public FeatureStore getStore();
+
+  public FeatureType getFeatureType();
+
+  public String[] getRequiredFieldNames();
+
+  public void recentUsed();
+
+  @Override
+  public String getLocalizedShortLabel();
+
+  @Override
+  public String getLocalizedLabel();
+
+  public String getLabelOfValue(Object value);
+
+  public boolean hasOnlyMetadataChanges(FeatureAttributeDescriptor other);
+
+  public boolean hasLabel();
+
+  public boolean hasShortLabel();
+
+  public boolean hasDescription();
+
+  /**
+   * Retrieve the value of the attribute "name".
+   * 
+   * @param name
+   * @return 
+   */
+  public Object get(String name);
+
+  public boolean hasConstantAvailableValues();
+  
+  public boolean isAvoidCachingAvailableValues();
+  
+  public Expression getAvailableValuesExpression();
+  
+  public FeatureAttributeDescriptor setAvailableValuesExpression(String expression);
+
+  public FeatureAttributeDescriptor setAvailableValuesExpression(Expression expression);
+
+  public boolean isInAvailableValues(Object valueToCheck);
+  
+  public boolean hasAvailableValues();
+
+  public Expression getAvailableValuesFilter();
+
+  public String getDefaultFormat();
+    
+  public String format(Object value);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.feature;
+
+import org.gvsig.fmap.dal.DataCache;
+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 extends DataCache{
+
+	/**
+	 * Delete all the features for a concrete scale.
+	 * @param scale
+	 * The scale.
+	 * @throws DataException
+	 */
+	public void delete(double scale) throws DataException;
+
+	/**
+	 * Add a set of features contained in a envelope for a concrete scale.
+	 * @param featureSet
+	 * The feature set retrieved from the server.
+   * @param featureStore
+	 * @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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature;
+
+import java.util.Iterator;
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
+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 FAILED_STARTEDITING = "failed_StartEditing_DataStore";
+
+
+	public static final String BEFORE_CANCELEDITING = "before_CancelEditing_DataStore";
+	public static final String AFTER_CANCELEDITING = "after_CancelEditing_DataStore";
+
+	public static final String PREPARING_FINISHEDITING = "preparing_FinishEditing_DataStore";
+	public static final String BEFORE_FINISHEDITING = "before_FinishEditing_DataStore";
+	public static final String AFTER_FINISHEDITING = "after_FinishEditing_DataStore";
+	public static final String FAILED_FINISHEDITING = "failed_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 String getEditingSession();
+    
+    public int getEditMode();            
+    
+    public Feature getFeature();
+
+    public DataSet getCollectionResult();
+
+    public boolean loadSucefully();
+
+    public Exception getExceptionLoading();
+
+    public Command getCommand();
+
+    public EditableFeatureType getFeatureType();
+  
+  public boolean isSelectionCompromised();
+
+  public Iterator<FeatureReference> getDeletedsFeatures();
+  
+  public Iterator<Feature> getInsertedsFeatures();
+  
+  public Iterator<Feature> getUpdatedsFeatures();
+  
+  public Iterator<FeatureTypeChanged> getChangedsFeatureTypes();
+  
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2008 {DiSiD Technologies}  {Create Parameter object to define FeatureCollections queries}
+ */
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+import java.util.Map;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.SymbolTable;
+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);
+
+  void retrievesAllAttributes();
+
+  /**
+   * 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);
+
+  public void addPrimaryKeyAttributeNames(FeatureStore store);
+
+  public void addEssentialAttributeNames(FeatureStore store);
+
+  /**
+   * 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();
+  
+  /** 
+   * Return the Expression associated to the filter.
+   * If the current filter is not an Expression, return null.
+   * 
+   * @return the expression of the filter.
+   */
+  Expression getExpressionFilter();
+
+  /**
+   * 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);
+
+  void setFilter(Expression filter);
+
+  void setFilter(String 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.
+   * If filter is null do nothing.
+   *
+   * @param filter a filter to apply to the {@link Feature}s to load
+   */
+  void addFilter(Evaluator filter);
+
+  void addFilter(Expression filter);
+
+  void addFilter(String filter);
+
+  void clearFilter();
+
+  /**
+   * 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();
+
+  /**
+   * @return @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);
+
+  /**
+   * Return the names of attributes for group the features.
+   * 
+   * @return the list of names to group features.
+   */
+  public List<String> getGroupByColumns();
+  
+  public boolean isAGroupByColumn(String name);
+  
+  public boolean hasGroupByColumns();
+
+  /**
+   * Return the aggregate functions useds for every attribute of the feature.
+   * The map is indexed by the name of the attribute and contains the aggregate 
+   * functions used by each attribute.
+   * 
+   * @return a Map with the aggregate function by attribute
+   */
+  public Map<String,String> getAggregateFunctions();
+  
+  public void addAggregate(String funcName, String columnName);
+
+  @Deprecated
+  public String getAggregate(String name);
+  
+  public String getAggregate(String tableName, String name);
+  
+  public boolean hasAggregateFunctions();
+
+  public void copyFrom(FeatureQuery query);
+      
+  public FeatureExtraColumns getExtraColumn();
+
+  public MutableSymbolTable getSymbolTable();
+  
+  public void setSymbolTable(MutableSymbolTable symbolTable);
+    
+  /**
+   * Set a variable in the symbol table associated to this searchPanel.
+   * 
+   * @param name
+   * @param value 
+   */
+  public void setVar(String name, Object value);
+  
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTimeSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTimeSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStoreTimeSupport.java	(revision 46118)
@@ -0,0 +1,36 @@
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Collection;
+import org.gvsig.timesupport.Interval;
+
+public interface FeatureStoreTimeSupport extends FeatureAttributeEmulator {
+
+    public String getAttributeName();
+    
+    public int getDataType();
+
+    /**
+     * 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);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.feature;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.function.Predicate;
+import javax.json.JsonObject;
+import org.gvsig.fmap.dal.exception.DataException;
+
+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 {
+        public boolean isUpdatable();
+
+        public void setUpdatable(boolean updatable);
+
+	/**
+	 * 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 BigDecimal, given its name
+	 * @param name
+	 * 			attribute's name
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDecimal(String name, BigDecimal value);
+
+	/**
+	 * Sets the value of an attribute of type BigDecimal, given its index
+	 * @param index
+	 * 			attribute's index
+	 * @param value
+	 *  		value to set
+	 */
+	public void setDecimal(int index, BigDecimal 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);	
+        
+        public void copyFrom(Feature values, Predicate<FeatureAttributeDescriptor> filter);
+        
+	public void copyFrom(JsonObject source);	
+        
+        public void copyFrom(JsonObject values, Predicate<FeatureAttributeDescriptor> filter);
+	
+	/**
+     * 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); 
+        
+    public boolean canSetValue(String name);
+    
+    public boolean canSetValue(FeatureAttributeDescriptor attr,Predicate<FeatureAttributeDescriptor> filter);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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, Iterable<FeatureStoreTransform> {
+
+	/**
+	 * 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.
+	 */
+        @Override
+	public Iterator<FeatureStoreTransform> 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/DataProfile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/DataProfile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/DataProfile.java	(revision 46118)
@@ -0,0 +1,22 @@
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.Tags;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface DataProfile {
+
+    public String getID();
+    
+    public String getName();
+    
+    public Class getDataClass();
+    
+    public Object createData(Object data, Tags tags);
+
+    public Object coerce(DataType dataType, Object value, Tags tags) throws CoercionException;
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,493 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.exception.DataException;
+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.timesupport.Time;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.util.GetItemByKeyWithSizeAndGetKeys;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.tools.dataTypes.DataType;
+
+/**
+ * <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>
+ * 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>
+ * 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.
+ * <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>Has a <code>FeatureType</code> that describes the Feature characteristics
+ * (attributes, data types, default geometry, validation rules).
+ * <li>Can obtain a copy of itself.
+ * <li>Can obtain its default geometry attribute and also a list with all the
+ * geometry attributes.
+ * <li>Can obtain its default Spatial Reference System and also a list with all
+ * the SRSs used in the geometry attributes.
+ * <li>Can obtain the envelope (extent) of the default geometry attribute.
+ * <li>Can obtain the editable instance of the Feature.
+ * <li>Has a set of utility methods to read attributes when their type is known,
+ * by both index and name.
+ * </ul>
+ *
+ */
+public interface Feature extends GetItemByKeyWithSizeAndGetKeys<String, Object>, SupportToJson {
+
+  static final int CHECK_RULES_AT_EDITING = 1;
+  static final int CHECK_RULES_AT_FINISH = 2;    
+  static final int CHECK_REQUIREDS = 4;
+  static final int CHECK_BASIC = 8;
+    
+  /**
+   * 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();
+
+ 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();
+
+  public Object getOrDefault(String name, Object defaultValue);
+
+  public Object getOrDefault(String name, DataType type, Object defaultValue);
+
+  public Object getOrDefault(String name, int type, Object defaultValue);
+
+  public String getStringOrDefault(String name, String defaultValue);
+
+  public int getIntOrDefault(String name, int defaultValue);
+
+  public long getLongOrDefault(String name, long defaultValue);
+
+  public float getFloatOrDefault(String name, float defaultValue);
+
+  public double getDoubleOrDefault(String name, double defaultValue);
+
+  public BigDecimal getDecimalOrDefault(String name, BigDecimal defaultValue);
+
+  public Date getDateOrDefault(String name, Date defaultValue);
+
+  public Object getOrDefault(int index, Object defaultValue);
+
+  public String getStringOrDefault(int index, String defaultValue);
+
+  public int getIntOrDefault(int index, int defaultValue);
+
+  public long getLongOrDefault(int index, long defaultValue);
+
+  public float getFloatOrDefault(int index, float defaultValue);
+
+  public double getDoubleOrDefault(int index, double defaultValue);
+
+  public BigDecimal getDecimalOrDefault(int index, BigDecimal defaultValue);
+
+  public Date getDateOrDefault(int index, Date defaultValue);
+
+  /**
+   * 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
+   */
+  @Override
+  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);
+
+  public boolean isNull(int index);
+
+  public boolean isNull(String name);
+
+  /**
+   * 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);
+  public boolean getBooleanOrDefault(String name, boolean defaultValue);
+
+  /**
+   * 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);
+  public boolean getBooleanOrDefault(int index, boolean defaultValue);
+
+  /**
+   * 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 BigDecimal value of an attribute given its name.
+   *
+   * @param name name of the attribute
+   * @return value of the specified attribute
+   */
+  public BigDecimal getDecimal(String name);
+
+  /**
+   * Returns the BigDecimal value of an attribute given its position.
+   *
+   * @param index position of the attribute
+   * @return value of the specified attribute
+   */
+  public BigDecimal getDecimal(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 java.sql.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 java.sql.Date getDate(int index);
+  
+  public java.sql.Time getTime(String name);
+  public java.sql.Time getTime(int index);
+  
+  public java.sql.Timestamp getTimestamp(String name);
+  public java.sql.Timestamp getTimestamp(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);
+
+  public byte[] getByteArray(String name);
+
+  public byte[] getByteArray(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);
+
+  public Object getFromProfile(int index);
+
+  public Object getFromProfile(String name);
+
+  /**
+   * 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();
+
+//  public Time getDefaultTime();
+//
+//  public Time getTime(int index);
+//
+//  public Time getTime(String name);
+//
+//  /**
+//   * 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();
+
+  /**
+   * Return the store associated to this feature.
+   *
+   * @return the FeatureStore of the feature.
+   */
+  public FeatureStore getStore();
+
+  public String getLabelOfValue(String name);
+
+  public Object getExtraValue(int index);
+
+  public Object getExtraValue(String name);
+
+  public boolean hasExtraValue(String name);
+  
+  public void setExtraValue(String name, Object value);
+
+   public boolean hasValue(String name);
+//  public Feature getRelatedFeature(String name);
+//  
+//  public List<Feature> getRelatedFeatures(String name);
+  
+    public String format(String name);
+
+    public String format(int index);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableForeingKey.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableForeingKey.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/EditableForeingKey.java	(revision 46118)
@@ -0,0 +1,27 @@
+package org.gvsig.fmap.dal.feature;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface EditableForeingKey extends ForeingKey {
+
+    public void setForeingKey(boolean foreingKey);
+
+    /**
+     * Indicates whether the foreign key reference to a closed list of values.
+     * 
+     * @param closedList 
+     */
+    public void setClosedList(boolean closedList);
+
+    public void setTableName(String tableName);
+    
+    public void setCodeName(String codeName);
+    
+    public void setLabelFormula(String labelFormula);
+
+    public void clean();
+    
+    public void unbind();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureExtraColumns.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureExtraColumns.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureExtraColumns.java	(revision 46118)
@@ -0,0 +1,38 @@
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+import org.gvsig.json.SupportFromJson;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ *
+ * @author osc
+ */
+public interface FeatureExtraColumns extends Persistent, SupportFromJson, SupportToJson {
+
+    public boolean isEmpty();
+
+    public List<EditableFeatureAttributeDescriptor> getColumns();
+
+    public void remove(String attribute);
+
+    public EditableFeatureAttributeDescriptor get(String name);
+
+    public EditableFeatureAttributeDescriptor get(int index);
+
+    public EditableFeatureAttributeDescriptor add(String name, int type);
+
+    public void merge(FeatureExtraColumns other);
+
+    public int getIndexOf(String name);
+
+    public int size();
+
+    public void copyFrom(FeatureExtraColumns extraColumn);
+
+    public void clear();
+
+    public FeatureExtraColumns getCopy();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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):
+ * 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);
+    
+    @Override
+    boolean isAvailable();
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/ForeingKey.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/ForeingKey.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/ForeingKey.java	(revision 46118)
@@ -0,0 +1,86 @@
+package org.gvsig.fmap.dal.feature;
+
+import java.util.List;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface ForeingKey extends org.gvsig.tools.lang.Cloneable {
+
+    public static final int MAX_AVAILABLE_VALUES = 1000;
+    
+    public interface ContextForeingKey extends Disposable {
+        public StoresRepository getStoresRepository();
+        public FeatureStore getFeatureStore();
+        public Expression getLabelExpression();
+        public FeatureSymbolTable getFeatureSymbolTable();
+        public SymbolTable getSymbolTable();
+        public DynObject getContextValues();
+        public void setContextValues(DynObject values);
+    }
+    
+    public ContextForeingKey createContext();
+    
+    public boolean isForeingKey();
+
+    /**
+     * Indicates whether the foreign key reference to a closed list of values.
+     * 
+     * @return 
+     */
+    public boolean isClosedList();
+    
+    public String getTableName();
+
+    public String getCodeName();
+
+    public String getLabelFormula();
+
+    
+    public boolean isEmpty();
+
+    public Object getCode(ContextForeingKey context, Feature feature);
+
+    public Feature getFeature(ContextForeingKey context, Object codeValue);
+
+    public FeatureStore getFeatureStore(ContextForeingKey context);
+
+    public FeatureType getFeatureType(ContextForeingKey context);
+
+    public List<Feature> getFeatures(ContextForeingKey context);
+
+    public String getLabel(ContextForeingKey context, Object codeValue);
+
+    public String getLabel(ContextForeingKey context, Feature feature);
+
+    public Expression getLabelExpression(ContextForeingKey context);
+
+    public FeatureQuery getQuery(ContextForeingKey context, Object codeValue);
+
+    public StoresRepository getStoresRepository(ContextForeingKey context);
+
+    public DynObjectValueItem[] getAvailableValues(ContextForeingKey context);
+    
+    public String getLabelForValue(Object value);
+
+    public boolean getEnsureReferentialIntegrity();
+    
+    public boolean isInAvailableValues(Object valueToCheck);
+    
+    public boolean hasAvailableValues();
+    
+    /**
+     * If the data store supports it, it ensures that referential integrity is respected.
+     * 
+     * @param ensureReferentialIntegrity 
+     */
+    public void setEnsureReferentialIntegrity(boolean ensureReferentialIntegrity);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRuleExpression.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRuleExpression.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRuleExpression.java	(revision 46118)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.expressionevaluator.Expression;
+import org.gvsig.json.SupportJson;
+
+public interface FeatureRuleExpression extends FeatureRule, SupportJson {
+
+    public void setName(String name);
+    
+    public void setDescription(String description);
+    
+    public void setCheckAtUpdate(boolean checkAtUpdate);
+
+    public void setCheckAtFinishEditing(boolean checkAtFinishEditing);
+
+    public Expression getExpression();
+
+    public void setExpression(Expression expression);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureRuleExpression.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.
+ *
+ */
+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<FeatureType> getFeatureTypes() throws DataException;
+
+    /**
+     * Returns the original store {@link FeatureType} that replaces
+     * targetFeatureType of this FeatureStoreTransform's
+     *
+     * @return source {@link FeatureType}
+     */
+    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.
+     *
+     * @return
+     * @see {@link FeatureStoreTransforms#isTransformsOriginalValues()}
+     *
+     */
+    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;
+
+    /**
+     * This method must perform the necessary actions to set up the transformation.
+     * 
+     * It is called automatically when adding the transformation to the store 
+     * and when the store is retrieved from the persistence.
+     * 
+     * @throws Exception 
+     */
+    public void  setUp() throws Exception ;
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FacadeOfAFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FacadeOfAFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FacadeOfAFeature.java	(revision 46118)
@@ -0,0 +1,9 @@
+
+package org.gvsig.fmap.dal.feature;
+
+
+public interface FacadeOfAFeature {
+    public Feature getFeature();
+    
+    public EditableFeature getEditableFeature();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,336 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+
+import org.gvsig.fmap.dal.DataSet;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposableIterable;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.util.IsEmpty;
+import org.gvsig.tools.util.Size;
+import org.gvsig.tools.util.Size64;
+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, Size64, Size, IsEmpty, IndexedVisitable, Iterable<Feature> {
+
+    public interface DisposableFeatureSetIterable
+            extends DisposableIterable<Feature>, Iterator<Feature>, Size64, IsEmpty {
+        
+        public FeatureSet getFeatureSet();
+    }
+
+    /**
+     * 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;
+
+    DisposableIterator iterator(long index, long elements) throws DataException;
+
+    /**
+     * Returns an iterator over the elements in this collection, in the order
+     * (if any) defined when the collection was obtained.
+     *
+     * @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).
+     *
+     * @deprecated use fastiterator. In next versions the signature of this
+     * method will be changed to "Iterator&lt;Feature&gt; iterator()".
+     */
+    @Override
+    DisposableIterator iterator();
+
+    DisposableFeatureSetIterable iterable();
+
+    DisposableFeatureSetIterable iterable(boolean disposeFeatureSet);
+
+    /**
+     * 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;
+
+    public DisposableIterator fastIterator(long index, long elemets) throws DataException;
+
+    /**
+     * Return the first feature of the set. If the set is empty return null.
+     *
+     * This not is a good method to determine if the set is empty. Use isEmpty
+     * instead.
+     *
+     * This is a utility method that call iterator and retrieve the first
+     * feature of the iterator.
+     *
+     * @return the first fearure of the set or null.
+     */
+    public Feature first();
+
+    /**
+     * 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;
+
+    public void commitChanges() 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
+     */
+    @Override
+    void accept(Visitor visitor, long firstValueIndex) throws BaseException;
+
+    void accept(Visitor visitor, long firstValueIndex, long elements) throws BaseException;
+
+    public FeatureStore getFeatureStore();
+
+    @Deprecated 
+    public JsonArray toJSON();
+    
+    public JsonArray toJson();
+
+    public JsonArrayBuilder toJsonBuilder();
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureVisitor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureVisitor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureVisitor.java	(revision 46118)
@@ -0,0 +1,14 @@
+package org.gvsig.fmap.dal.feature;
+
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureVisitor extends Visitor {
+
+    public void visit(Feature feature) throws VisitCanceledException;
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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;
+
+import java.util.Iterator;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ *
+ * @author fdiaz
+ */
+public interface FeatureQueryOrder extends Cloneable, Iterable<FeatureQueryOrderMember>, Persistent {
+
+    public interface FeatureQueryOrderMember extends Persistent, Cloneable {
+
+        FeatureQueryOrderMember clone() throws CloneNotSupportedException;
+
+        boolean getAscending();
+
+        String getAttributeName();
+
+        Evaluator getEvaluator();
+
+        boolean hasEvaluator();
+
+        void setAscending(boolean ascending);
+
+    }
+
+    Object add(String order);
+
+    Object add(String attributeName, boolean ascending);
+
+    Object add(Expression expr, boolean ascending);
+
+    void clear();
+
+    FeatureQueryOrder clone() throws CloneNotSupportedException;
+
+    boolean contains(String attributeName);
+
+    void copyFrom(FeatureQueryOrder other);
+
+    FeatureQueryOrderMember get(String attributeName);
+
+    FeatureQueryOrder getCopy();
+
+    int getIndex(String attributeName);
+
+    boolean isEmpty();
+
+    Iterator<FeatureQueryOrderMember> iterator();
+
+    Iterable<FeatureQueryOrderMember> members();
+
+    void moveNext(String name);
+
+    void movePrevious(String name);
+
+    boolean remove(FeatureQueryOrderMember member);
+
+    void remove(int index);
+
+    int size();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractDataProfile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractDataProfile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/AbstractDataProfile.java	(revision 46118)
@@ -0,0 +1,38 @@
+package org.gvsig.fmap.dal.feature;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractDataProfile implements DataProfile {
+
+    private final String id;
+    private final String name;
+    private final Class dataClass;
+
+    public AbstractDataProfile(String id, String name, Class dataClass) {
+        this.id = id;
+        this.name = name;
+        this.dataClass = dataClass;
+    }
+    
+    public AbstractDataProfile(String name, Class dataClass) {
+        this(name, name, dataClass);
+    }
+    
+    @Override
+    public String getID() {
+        return this.id;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public Class getDataClass() {
+        return this.dataClass;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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(String store, Throwable cause) {
+		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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature
___________________________________________________________________
Added: svn:ignore
   + .FeatureQuery.java.kate-swp


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java	(revision 46118)
@@ -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.spi;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.tools.service.spi.Services;
+
+/**
+ * Base inferface of services for data servers explorers
+ */
+public interface DataServerExplorerProviderServices extends Services {
+
+	public EditableFeatureType createNewFeatureType();
+
+	public Resource createResource(String name, Object[] params)
+			throws InitializeException;
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerProviderServices.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.spi;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.tools.service.spi.Services;
+
+/**
+ * Base interface of Services for data providers
+ *
+ * @author jmvivo
+ *
+ */
+public interface DataStoreProviderServices extends Services {
+
+	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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataStoreFactory.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.exception;
+
+
+public class InitializeException extends DataException {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3054877505579218816L;
+	private final static String MESSAGE_FORMAT = "Error intializing resource '%(resource)'.";
+	private final static String MESSAGE_KEY = "_InitializeException";
+
+        protected InitializeException() {
+            super();
+        }
+        
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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();
+
+        protected DataException() {
+            
+        }
+        
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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 = "There was errors loading from '%(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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+
+	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);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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 {{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 = "There was errors loading the feature '%(oid)' from '%(store)'.";
+	private final static String MESSAGE_KEY = "_ReadRuntimeException";
+
+	public ReadRuntimeException(String store, Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+		setValue("oid", "unknown");
+	}
+
+        public ReadRuntimeException(String store, Object oid,Throwable cause) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("store", store);
+		setValue("oid", String.format("%s", oid));
+	}
+        
+        protected ReadRuntimeException(String fmt, Throwable cause, String msgkey, int code) {
+            super(fmt, cause, msgkey, code);
+        }        
+        
+        protected ReadRuntimeException(String fmt, Throwable cause, String msgkey, long code) {
+            super(fmt, cause, msgkey, code);
+        }
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateFileStoreException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateFileStoreException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/exception/CreateFileStoreException.java	(revision 46118)
@@ -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 CreateFileStoreException extends DataException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8864100116239927854L;
+    private final static String MESSAGE_FORMAT = "Can't create file store '%(resource)'.";
+	private final static String MESSAGE_KEY = "_CreateFileStoreException";
+
+	public CreateFileStoreException(Throwable cause, String resource) {
+		super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+		setValue("resource", resource);
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTransaction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTransaction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTransaction.java	(revision 46118)
@@ -0,0 +1,63 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.DataException;
+import org.gvsig.tools.dispose.Disposable;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface DataTransaction extends Disposable, AutoCloseable {
+
+    public static void rollbackQuietly(DataTransaction transaction) {
+        if( transaction == null ) {
+            return;
+        }
+        transaction.rollbackQuietly();
+    }
+    
+    public String getCode();
+    
+    public void begin() throws DataException;
+    
+    public void commit() throws DataException;
+    
+    public void rollback() throws DataException;
+
+    public void rollbackQuietly();
+    
+    public void add(DataStore store) throws DataException;
+    
+    public void add(DataStore store, boolean local) throws DataException;
+
+    public void add(DataServerExplorer explorer) throws DataException;
+    
+    public void add(DataServerExplorer explorer, boolean local) throws DataException;
+
+    public void add(Disposable resource) throws DataException;
+    
+    public void remove(DataStore store) throws DataException;
+    
+    public boolean isInProgress();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSelection.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/StoresRepository.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/StoresRepository.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/StoresRepository.java	(revision 46118)
@@ -0,0 +1,43 @@
+package org.gvsig.fmap.dal;
+
+import java.util.Collection;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface StoresRepository 
+        extends 
+            UnmodifiableBasicMap<String, DataStoreParameters>,
+            Observable
+    {
+    
+    public static final String NOTIFICATION_ADDREPOSITORY = "addRepository";
+    public static final String NOTIFICATION_REMOVEREPOSITORY = "removeRepository";
+    public static final String NOTIFICATION_ADD = "add";
+    public static final String NOTIFICATION_REMOVE = "remove";
+    
+
+    public String getID();
+    
+    public String getLabel();
+    
+    public Collection<StoresRepository> getSubrepositories();
+    
+    public StoresRepository getSubrepository(String Id);
+    
+    public boolean addRepository(StoresRepository repository);
+
+    public boolean removeRepository(String name);
+    
+    public void add(String name, DataStoreParameters parameters);
+    
+    public boolean contains(DataStoreParameters parameters);
+    
+    public void remove(String name);
+    
+    public DataStore getStore(String name);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,13 @@
+
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterStoreProviderFactory extends DataStoreProviderFactory {
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/OpenRasterStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/OpenRasterStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/OpenRasterStoreParameters.java	(revision 46118)
@@ -0,0 +1,10 @@
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+
+
+public interface OpenRasterStoreParameters
+    extends OpenDataStoreParameters
+    {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterCache.java	(revision 46118)
@@ -0,0 +1,34 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.DataCache;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterCache extends DataCache{
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStoreNotification.java	(revision 46118)
@@ -0,0 +1,47 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.DataStoreNotification;
+
+/**
+ * Notificacions for RasterStore
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterStoreNotification extends DataStoreNotification{
+
+    /** Fired before refreshing the store */
+    public static final String BEFORE_REFRESH = "before_Refresh_DataStore";
+
+    /** Fired before refreshing the store */
+    public static final String AFTER_REFRESH = "after_Refresh_DataStore";
+
+    /** Fired when dataset changed */
+    public static final String DATASET_CHANGED = "dataset_changed";
+
+    /** Fired when store provider changed */
+    public static final String STORE_PROVIDER_CHANGED = "store_provider_changed";
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterQuery.java	(revision 46118)
@@ -0,0 +1,89 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.List;
+
+import org.gvsig.fmap.dal.DataQuery;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.lang.Cloneable;
+
+
+/**
+ * Dataquery for Rasters
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterQuery extends DataQuery, Cloneable {
+
+    /**
+     * Get added band queries to this {@link RasterQuery}
+     *
+     * @return A unmodifiable list with added band queries.
+     */
+    public List<BandQuery> getBands();
+
+    /**
+     * Adds {@link BandQuery} to this raster query
+     *
+     * @param query
+     *            Query to be added
+     */
+    public void addBand(BandQuery query);
+
+    /**
+     * Clears all add band queries
+     */
+    public void clearBands();
+
+    /**
+     * Returns a clip from the raster
+     * @return Envelope
+     */
+    public Envelope getClip();
+
+    /**
+     * Sets the envelope to clip from the raster
+     * @param clip
+     * @return RasterQuery
+     */
+    public RasterQuery setClip(Envelope clip);
+
+    /**
+     * Returns the pixel size requested
+     * @return Envelope
+     */
+    public double getPixelSize();
+
+    /**
+     * Sets the pixelSize to be used in the raster
+     * @param pixelSize
+     * @return RasterQuery
+     */
+    public RasterQuery setPixelSize(double pixelSize);
+
+    public RasterQuery clone() throws CloneNotSupportedException;
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandAttributeDescriptor.java	(revision 46118)
@@ -0,0 +1,74 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.List;
+
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * This class describes an attribute of band. This attribute is defined by a
+ * name, description and a list with the available values.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public interface BandAttributeDescriptor extends Persistent, Cloneable {
+
+    /**
+     * Gets band of this attribute descriptor
+     *
+     * @return band Attribute descriptor band
+     */
+    public int getBand();
+
+    /**
+     * Name of attribute
+     *
+     * @return Attribute name
+     */
+    public String getName();
+
+    /**
+     * Description of attribute
+     *
+     * @return Attribute description
+     */
+    public String getDescription();
+
+    public Object getValue();
+
+    /**
+     * Available values of this attribute band
+     *
+     * @return values A list with attribute band values
+     */
+    public List<Object> getAvailableValues();
+
+    /**
+     * String units of the levels
+     */
+    public String getUnits();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandQuery.java	(revision 46118)
@@ -0,0 +1,74 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Band query to filter raster band values by {@link BandAttributeDescriptor}
+ * values described by the {@link BandDescriptor}.
+ * 
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public interface BandQuery extends Persistent, Cloneable {
+
+    /**
+     * Band of this query band.
+     * 
+     * @return Band Band of this query band
+     */
+    public int getBand();
+
+    /**
+     * Gets {@link BandDescriptor} of this query.
+     * 
+     * @return descriptor Descriptor of this band
+     */
+    public BandDescriptor getDescriptor();
+
+    /**
+     * Sets filter raster band value. This value has to be accepted by the
+     * {@link BandAttributeDescriptor} with the name received as parameter.
+     * 
+     * @param name
+     *            Name of {@link BandAttributeDescriptor} to check if value is
+     *            accepted by it.
+     * @param value
+     *            Value to apply filter.
+     */
+    public void setValue(String name, Object value);
+
+    /**
+     * Gets the defined filter value of {@link BandAttributeDescriptor} with the
+     * name received as parameter.
+     * 
+     * @param name
+     *            Name of {@link BandAttributeDescriptor}
+     * @return value Value defined
+     */
+    public Object getValue(String name);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterQueryCloneException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterQueryCloneException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterQueryCloneException.java	(revision 46118)
@@ -0,0 +1,55 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.exceptions;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+
+
+/**
+ * Exception thrown when an error is produced while cloning a
+ * {@link RasterQuery}.
+ *
+ */
+public class RasterQueryCloneException extends DataException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -5083976241813494957L;
+
+    private final static String MESSAGE_FORMAT =
+            "Error cloning a RasterQuery";
+    private final static String MESSAGE_KEY = "_RasterQueryCloneException";
+
+    /**
+     * Creates a new {@link RasterQueryCloneException}.
+     *
+     * @param cause
+     *            the original cause of the exception
+     */
+    public RasterQueryCloneException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterSetInitializeException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterSetInitializeException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/exceptions/RasterSetInitializeException.java	(revision 46118)
@@ -0,0 +1,54 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.exceptions;
+
+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}.
+ *
+ */
+public class RasterSetInitializeException extends DataException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2549348802998322067L;
+    private final static String MESSAGE_FORMAT =
+            "Error initializing a RasterSet";
+    private final static String MESSAGE_KEY = "_RasterSetInitializeException";
+
+    /**
+     * Creates a new {@link RasterSetInitializeException}.
+     *
+     * @param cause
+     *            the original cause of the exception
+     */
+    public RasterSetInitializeException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterKernel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterKernel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterKernel.java	(revision 46118)
@@ -0,0 +1,63 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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;
+
+/**
+ * Info given by the raster in a selected row and column
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterKernel   {
+
+    /**
+     * Number of bands from the raster
+     * @return int
+     */
+    public int getBandCount();
+
+    /**
+     * Raster row which is being informed
+     * @return row
+     */
+    public int getRow();
+
+    /**
+     * Raster column which is being informed
+     * @return column
+     */
+    public int getColumn();
+
+    /**
+     * Values of the bands in the row and column given
+     * @return Object[]
+     */
+    public Object[] getValue();
+
+    /**
+     * A 3x3 matrix around the row and column given with the values of the bands
+     * @return Object[][][]
+     */
+    public Object[][][] getValues();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/BandDescriptor.java	(revision 46118)
@@ -0,0 +1,124 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.Iterator;
+
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * This class describes the available {@link BandAttributeDescriptor} of a band.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public interface BandDescriptor extends Iterable<BandAttributeDescriptor>, Persistent, Cloneable, Disposable {
+
+    /**
+     * Gets the store that the band belongs.
+     * @return
+     */
+    public RasterStore getStore();
+
+    /**
+     * Gets band of this descriptor.
+     *
+     * @return Band
+     */
+    public int getBand();
+
+    /**
+     * Gets the {@link BandAttributeDescriptor} by index.
+     *
+     * @param index
+     *            Index of {@link BandAttributeDescriptor}
+     * @return BandAttributeDescriptor The {@link BandAttributeDescriptor}
+     *         located at index. If there are not
+     *         {@link BandAttributeDescriptor} at index, null will be returned.
+     */
+    public BandAttributeDescriptor get(int index);
+
+    /**
+     * Gets the {@link BandAttributeDescriptor} by name.
+     *
+     * @param name
+     *            Name of {@link BandAttributeDescriptor}
+     * @return BandAttributeDescriptor The {@link BandAttributeDescriptor}
+     *         located at index. If there are not
+     *         {@link BandAttributeDescriptor} whit the name, null will be returned.
+     */
+    public BandAttributeDescriptor get(String name);
+
+    /**
+     * Number of {@link BandAttributeDescriptor}.
+     *
+     * @return size Number of band attribute descriptor.
+     */
+    public int size();
+
+    /**
+     * @return Returns an iterator over the elements in this list in proper
+     *         sequence.
+     */
+    public Iterator<BandAttributeDescriptor> iterator();
+
+    /**
+     * @return
+     */
+    public NoData getNoData();
+
+    /**
+     * @param noData
+     */
+    public void setNoData(NoData noData);
+
+
+    /**
+     * Gets the dataType.
+     *
+     * The possible data types are defined in {@link BufferManager}.
+     *
+     * The data type of the band can't be changed after being created.
+     *
+     * @return the data type
+     */
+    public int getDataType();
+
+    /**
+     * @return
+     */
+    public String getName();
+
+    /**
+     * @return
+     */
+    public String getDescription();
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/NewRasterStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/NewRasterStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/NewRasterStoreParameters.java	(revision 46118)
@@ -0,0 +1,23 @@
+package org.gvsig.fmap.dal.raster;
+
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+
+/**
+ * Interface for parameters to create a new raster store
+ *
+ */
+public interface NewRasterStoreParameters extends NewDataStoreParameters {
+
+    /**
+     * Gets the buffer to be created
+     * @return Buffer
+     */
+    public Buffer getBuffer();
+
+    /**
+     * Sets the buffer to be created
+     * @param buffer
+     */
+    public void setBuffer(Buffer buffer);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterSet.java	(revision 46118)
@@ -0,0 +1,47 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Access to raster data
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterSet extends Buffer, DataSet {
+
+    /**
+     * Visits raster kernels from a raster
+     * @param visitor
+     * @param firstValueIndex
+     * @throws BaseException
+     */
+    void accept(Visitor visitor, long firstValueIndex) throws BaseException;
+
+    boolean isEmpty();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/raster/RasterStore.java	(revision 46118)
@@ -0,0 +1,191 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.List;
+
+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.InitializeException;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.BandInfo;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.observer.Observer;
+
+/**
+ * Store for rasters
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterStore extends DataStore, Cloneable{
+
+    /**
+     * May provide a dynamic method to get the legend
+     */
+    final public static String DYNMETHOD_GETLEGEND_NAME = "getLegend";
+
+    /**
+     * May provide a dynamic method to get the Color Interpretation
+     */
+    final public static String DYNMETHOD_GETCOLORINTERPRETATION_NAME = "getColorInterpretation";
+
+    /**
+     * May provide a dynamic method to get the Color Table
+     */
+    final public static String DYNMETHOD_GETCOLORTABLE_NAME = "getColorTable";
+    /**
+     * Returns this store's parameters.
+     *
+     * @return
+     *         {@link DataStoreParameters} containing this store's parameters
+     */
+    public DataStoreParameters getParameters();
+
+    /**
+     * Returns all available data in the store
+     * @return RasterSet
+     * @throws DataException
+     */
+    RasterSet getRasterSet() throws DataException;
+
+    /**
+     * Returns a subset of data taking into account the properties and
+     * restrictions of the RasterQuery.
+     * @param rasterQuery
+     * @param RasterQuery
+     * @return RasterSet
+     * @throws DataException
+     */
+    RasterSet getRasterSet(RasterQuery rasterQuery) throws DataException;
+
+    /**
+     * Returns a new {@link RasterQuery} associated to this store.
+     * @return RasterQuery
+     */
+    RasterQuery createRasterQuery();
+
+    /**
+     * Returns the envelope associated to this store buffer
+     * @return Envelope
+     * @throws DataException
+     * @throws CreateEnvelopeException
+     * @throws LocatorException
+     */
+    Envelope getEnvelope() throws DataException, LocatorException, CreateEnvelopeException;
+
+    /**
+     * Creates a {@link BandQuery} from band received as parameter.
+     *
+     * @param band
+     *            Band to create BandQuery
+     * @return BandQuery
+     */
+    public BandQuery createBandQuery(int band);
+
+    /**
+     * Gets {@link BandsDescriptor} of band received as parameter. If band does
+     * not have {@link BandDescriptor}, this method will return an
+     * empty {@link BandsDescriptor}.
+     *
+     * @param band
+     *            Band to get its {@link BandsDescriptor}
+     * @return BandDescriptor
+     */
+    public BandDescriptor getBandDescriptor(int band);
+
+    /**
+     * Gets number of total bands
+     *
+     * @return Number of bands
+     */
+    public int getBands();
+
+    public List<BandDescriptor> getBandDescriptors();
+
+    /**
+     * @return
+     */
+    public RasterCache getCache();
+
+    /**
+     * Add a band from other store.
+     * If the store is the same of main store will return a IllegalAttributeException
+     *
+     * @param store
+     * @param band
+     * @throws DataException
+     */
+    public void addBand(RasterStore store, int band) throws DataException;
+
+    /**
+     * Add a list of bands from other store.
+     * If the store is the same of main store will return a IllegalAttributeException
+     *
+     * @param store
+     * @param bands
+     * @throws DataException
+     */
+    public void addBands(RasterStore store, List<Integer> bands) throws DataException;
+
+    /**
+     * Remove a band.
+     * If band belongs to main store, will return a IllegalAttributeException
+     *
+     * @param band
+     */
+    public void removeBand(int band);
+
+    /**
+     * Remove any band that does not belong to itself.
+     */
+    public void clearAdditionalBands();
+
+    /**
+     * Return true if the band is own. If the band is from additional store, return false.
+     *
+     * @param band
+     * @return
+     */
+    public boolean isOwnBand(int band);
+
+    /**
+     * Return the buffer dimensions of the complete store.
+     * @return
+     * @throws InitializeException
+     */
+    public BufferDimensions getDimensions() throws InitializeException;
+
+    public boolean isTiled();
+
+    void getRasterSet(Observer observer) throws DataException;
+
+    void getRasterSet(RasterQuery dataQuery, Observer observer) throws DataException;
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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 CoveragerStoreParameters {
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/Register.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/Register.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/Register.java	(revision 46118)
@@ -0,0 +1,32 @@
+/*
+ * 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;
+
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.tools.service.spi.Services;
+
+public interface Register extends Iterable<DataFactory> {
+
+    public DataFactoryUnit create(
+            String name, 
+            DataParameters parameters,
+            Services services
+        ) throws ProviderNotRegisteredException, InitializeException;
+
+    public boolean exits(String name);
+
+    public DataFactory getFactory(String name);
+
+    public List<String> getFactoryNames();
+
+    public void register(DataFactory factory);
+    
+    @Override
+    public Iterator<DataFactory> iterator();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DALLibrary.java	(revision 46118)
@@ -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;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.ProjectionLibrary;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLibrary;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+
+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 {
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(DALLibrary.class);
+        require(ToolsLibrary.class);
+        require(MetadataLibrary.class);
+        require(ProjectionLibrary.class);
+        require(GeometryLibrary.class);
+        require(TimeSupportLibrary.class);
+        require(ExpressionEvaluatorLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataSet.java	(revision 46118)
@@ -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.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
+     */
+    @Override
+    public void accept(Visitor visitor) throws BaseException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer_v2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer_v2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataServerExplorer_v2.java	(revision 46118)
@@ -0,0 +1,8 @@
+
+package org.gvsig.fmap.dal;
+
+
+public interface DataServerExplorer_v2 extends DataServerExplorer {
+    
+     public SQLBuilder createSQLBuilder();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypeUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypeUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataTypeUtils.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.dal;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.timesupport.Interval;
+import static org.gvsig.tools.dataTypes.DataTypeUtils.coerce;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DataTypeUtils extends org.gvsig.tools.dataTypes.DataTypeUtils {
+    
+    public static IProjection toProjection(Object value, String defaultValue) {
+        return (IProjection) coerce(DataTypes.CRS, value, defaultValue);
+    }
+
+    public static Interval toInterval(Object value, String defaultValue) {
+        return (Interval) coerce(DataTypes.INTERVAL, value, defaultValue);
+    }
+
+    public static Geometry toGeometry(Object value, String defaultValue) {
+        return (Geometry) coerce(DataTypes.GEOMETRY, value, defaultValue);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactoryUnit.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactoryUnit.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataFactoryUnit.java	(revision 46118)
@@ -0,0 +1,7 @@
+
+package org.gvsig.fmap.dal;
+
+
+public interface DataFactoryUnit {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/DALExpressionBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/DALExpressionBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/DALExpressionBuilder.java	(revision 46118)
@@ -0,0 +1,75 @@
+package org.gvsig.fmap.dal.expressionevaluator;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface DALExpressionBuilder {
+  
+  public interface SelectBuilder {
+    
+    public SelectBuilder column(String name);
+    
+    public SelectBuilder column_all();
+    
+    public SelectBuilder from(String tableName); // from === table
+    
+    public SelectBuilder where(Value where);
+    
+    public SelectBuilder order(String columnName, boolean asc);
+    
+    public SelectBuilder limit(long limit);
+    
+    public Value toValue();
+    
+    @Override
+    public String toString();
+    
+    public String toString(Formatter<Value> formatter);
+    
+  }
+  
+  public interface SelectCountBuilder {
+    
+    public SelectCountBuilder table(String tableName);
+    
+    public SelectCountBuilder where(Value where);
+    
+    public Value toValue();
+    
+    @Override
+    public String toString();
+  }
+
+  public GeometryExpressionBuilder expression();
+  
+  public Formatter<Value> formatter();
+  
+  public Formatter<Value> formatter(Formatter<Value> formatter);
+  
+  public SelectBuilder select();
+  
+  public SelectCountBuilder select_count();
+  
+  public Function exists(Value list, String id);
+  
+  public Function exists(Value list);
+  
+  public Function foreing_value(String attrlocal, String attrforeing);
+
+  public Function current_row();
+  
+  public Function current_table();
+  
+  public Function isselected_current_row();
+  
+//  public Function geometry();
+  //Use this function dissable database optimizations
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureAttributeEmulatorExpression.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureAttributeEmulatorExpression.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureAttributeEmulatorExpression.java	(revision 46118)
@@ -0,0 +1,29 @@
+package org.gvsig.fmap.dal.expressionevaluator;
+
+import java.util.List;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureAttributeEmulatorExpression extends FeatureAttributeEmulator, Persistent {
+
+    public Expression getExpression();
+    
+    public SymbolTable getSymbolTable();
+
+    public String getErrorMessage();
+
+    public List<String> getUndefinedSymbols();
+    
+    public boolean isValid();
+    
+    public void setEnableExceptions(boolean enableException);
+    
+    public boolean isEnableExceptions();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureSymbolTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureSymbolTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureSymbolTable.java	(revision 46118)
@@ -0,0 +1,28 @@
+package org.gvsig.fmap.dal.expressionevaluator;
+
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.feature.Feature;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface FeatureSymbolTable extends SymbolTable {
+    public static final String SYMBOL_CURRENT_TABLE = "$TABLE";
+    public static final String SYMBOL_CURRENT_ROW = "$ROW";
+  
+    public void setFeature(Feature feature);
+    
+    @Override
+    public FeatureSymbolTable clone() throws CloneNotSupportedException;
+    
+    /**
+     * Utility method that creates a mutable symbol table whose table 
+     * delegated to this.
+     * 
+     * @return 
+     */
+    public MutableSymbolTable createParent();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/TableAttributeHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/TableAttributeHandler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/TableAttributeHandler.java	(revision 46118)
@@ -0,0 +1,12 @@
+package org.gvsig.fmap.dal.expressionevaluator;
+
+import org.gvsig.expressionevaluator.AttributeHandler;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface TableAttributeHandler extends AttributeHandler {
+  
+  public String getName();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/ExternalStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/ExternalStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/ExternalStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,9 @@
+
+package org.gvsig.fmap.dal;
+
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+
+
+public interface ExternalStoreProviderFactory extends DataStoreProviderFactory {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractStoresRepository.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractStoresRepository.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/AbstractStoresRepository.java	(revision 46118)
@@ -0,0 +1,306 @@
+package org.gvsig.fmap.dal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.ObservableHelper;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.util.UnmodifiableBasicSetChained;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractStoresRepository  implements StoresRepository {
+    
+    protected final Logger LOGGER = LoggerFactory.getLogger(AbstractStoresRepository.class);
+    
+    private final String name;
+    private final String label;
+    private final List<StoresRepository> subrepositories;
+    private final ObservableHelper observableHelper;
+
+    public AbstractStoresRepository(String name) {
+        this(name, null);
+    }
+    
+    public AbstractStoresRepository(String name, String label) {
+        this.name = name;
+        this.label = label;
+        this.subrepositories = new ArrayList<>();
+        this.observableHelper = new ObservableHelper();
+    }
+    
+    protected abstract DataStoreParameters getMyParameters(String name);
+
+    protected abstract boolean isEmptyMyRepository();
+    
+    protected abstract int getMySize();
+
+    protected abstract UnmodifiableBasicSet<String> getMyKeySet();
+
+    @Override
+    public void addObserver(Observer o) {
+        this.observableHelper.addObserver(o);
+    }
+
+    @Override
+    public void deleteObserver(Observer o) {
+        this.observableHelper.deleteObserver(o);
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.observableHelper.deleteObservers();
+    }
+    
+    protected Notification notifyObservers(String notificationType, Object value) {
+        return this.observableHelper.notifyObservers(this, notificationType, value);
+    }
+
+    protected Notification notifyObservers(String notificationType, Object value1, Object value2) {
+        return this.observableHelper.notifyObservers(this, notificationType, value1, value2);
+    }
+
+    @Override
+    public void add(String name, DataStoreParameters parameters) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void remove(String name) {
+        throw new UnsupportedOperationException();
+    }
+    
+    @Override
+    public boolean contains(DataStoreParameters parameters) {
+        for (DataStoreParameters currentParameters : this) {
+            if( parameters.equals(currentParameters) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String getID() {
+        return this.name;
+    }
+
+    @Override
+    public String getLabel() {
+        if( StringUtils.isBlank(this.label) ) {
+            return this.getID();
+        }
+        return this.label;
+    }
+    
+    @Override
+    public Collection<StoresRepository> getSubrepositories() {
+        return this.subrepositories;
+    }
+
+    @Override
+    public StoresRepository getSubrepository(String Id) {
+        for (StoresRepository repo : this.subrepositories) {
+            if( repo!=null && StringUtils.equalsIgnoreCase(Id, repo.getID()) ) {
+                return repo;
+            }
+        }
+        return null;
+    }
+    
+    @Override
+    public boolean addRepository(StoresRepository repository) {
+        if( this.notifyObservers(NOTIFICATION_ADDREPOSITORY, repository).isCanceled() ) {
+            return false;
+        }
+        this.removeRepository(repository.getID());
+        this.subrepositories.add(repository);
+        return true;
+    }
+
+    @Override
+    public boolean removeRepository(String name) {
+        if( this.notifyObservers(NOTIFICATION_REMOVEREPOSITORY, name).isCanceled() ) {
+            return false;
+        }
+        for (int i = 0; i < subrepositories.size(); i++) {
+            StoresRepository repo = subrepositories.get(i);
+            if( StringUtils.equalsIgnoreCase(name, repo.getID()) ) {
+                this.subrepositories.remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public DataStoreParameters get(String name) {
+        DataStoreParameters parameters = this.getMyParameters(name);
+        if( parameters!=null ) {
+            return parameters;
+        }
+        for ( StoresRepository theRepository : this.subrepositories) {
+            parameters = theRepository.get(name);
+            if( parameters!=null ) {
+                return parameters;
+            }
+        }
+        return null;
+    }
+    
+     public PropertiesSupport getProperties(String name) {
+         return new PropertiesSupport() {
+             @Override
+             public Object getProperty(String name) {
+                 return null;
+             }
+
+             @Override
+             public void setProperty(String name, Object value) {
+                 
+             }
+
+             @Override
+             public Map<String, Object> getProperties() {
+                 return Collections.EMPTY_MAP;
+             }
+         };
+     }
+    
+    @Override
+    public DataStore getStore(String name) {
+        PropertiesSupport properties = this.getProperties(name);
+        if(properties!=null && 
+                StringUtils.equalsIgnoreCase(Objects.toString(properties.getProperty("ignoreDALResource")),"true")) {
+            return this.getStore(name, true);
+        }
+        return this.getStore(name, false);
+    }
+
+    public DataStore getStore(String name, boolean ignoreDALResource) {
+        DataStoreParameters parameters = this.getMyParameters(name);
+        if( parameters!=null ) {
+            try {
+                DataStore store = DALLocator.getDataManager().openStore(
+                        parameters.getDataStoreName(), 
+                        parameters,
+                        ignoreDALResource
+                );
+                return store;
+            } catch (Exception ex) {
+                throw new RuntimeException("Can't open store '"+name+"'.", ex);
+            }
+        }
+        for ( StoresRepository theRepository : this.subrepositories) {
+            DataStore store = theRepository.getStore(name);
+            if( store!=null ) {
+                return store;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean containsKey(String key) {
+        DataStoreParameters parameters = this.getMyParameters(name);
+        if( parameters!=null ) {
+            return true;
+        }
+        for ( StoresRepository theRepository : this.subrepositories) {
+            if( theRepository.containsKey(key) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public UnmodifiableBasicSet<String> keySet() {
+        List<UnmodifiableBasicSet<String>> sets = new ArrayList<>();
+        UnmodifiableBasicSet<String> keyset = this.getMyKeySet();
+        if( keyset!=null && !keyset.isEmpty() ) {
+            sets.add(keyset);
+        }
+        for (StoresRepository theRepository : this.subrepositories) {
+            if( theRepository!=null ) {
+                keyset = theRepository.keySet();
+                if( keyset!=null && !keyset.isEmpty() ) {
+                    sets.add(keyset);
+                }
+            }
+        }
+        if( sets.isEmpty() ) {
+            return UnmodifiableBasicSet.EMPTY_UNMODIFIABLEBASICSET;
+        }
+        if( sets.size()==1 ) {
+            return sets.get(0);
+        }
+        return new UnmodifiableBasicSetChained(
+            sets.toArray(
+                new UnmodifiableBasicSet[sets.size()]
+            )
+        );
+    }
+
+    @Override
+    public Map<String, DataStoreParameters> toMap() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        if( !this.isEmptyMyRepository() ) {
+            return false;
+        }
+        for ( StoresRepository theRepository : this.subrepositories) {
+            if( !theRepository.isEmpty() ) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public int size() {
+        int sz = 0;
+        if( !this.isEmptyMyRepository() ) {
+            sz = this.getMySize();
+        }
+        for ( StoresRepository theRepository : this.subrepositories) {
+            sz += theRepository.size();
+        }
+        return sz;
+    }
+
+    @Override
+    public Iterator<DataStoreParameters> iterator() {
+        final Iterator<String> it = this.keySet().iterator();
+        return new Iterator<DataStoreParameters>() {
+            @Override
+            public boolean hasNext() {
+                return it.hasNext();
+            }
+
+            @Override
+            public DataStoreParameters next() {
+                String name = it.next();
+                return get(name);
+            }
+        };
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal
___________________________________________________________________
Added: svn:ignore
   + .directory



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/resources/org/gvsig/fmap/dal/MetadataDefinitions.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,3 @@
+org.gvsig.fmap.dal.DALLibrary
+org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFetureStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFetureStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFetureStore.java	(revision 46118)
@@ -0,0 +1,961 @@
+
+package org.gvsig.fmap.dal.feature;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.json.JsonObject;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+
+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.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.metadata.exceptions.MetadataException;
+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.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.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.resourcesstorage.EmptyResourcesStorage;
+import org.gvsig.tools.util.GetItemWithSizeIsEmptyAndIterator64;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * This class is intended to be used in test.
+ * Use it directly or extend it and overwrite the methods you need.
+ * This class is maintained as part of the DAL API.
+ */
+
+
+public class DummyFetureStore implements FeatureStore {
+    
+    private int mode;
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    @Override
+    public boolean allowWrite() {
+        return false;
+    }
+
+    @Override
+    public FeatureType getDefaultFeatureType() throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureType getFeatureType(String featureTypeId) throws DataException {
+        return null;
+    }
+
+    @Override
+    public List getFeatureTypes() throws DataException {
+        return null;
+    }
+
+    @Override
+    public DataStoreParameters getParameters() {
+        return null;
+    }
+
+    @Override
+    public boolean canWriteGeometry(int gvSIGgeometryType) throws DataException {
+        return false;
+    }
+
+    @Override
+    public Envelope getEnvelope() throws DataException {
+        return null;
+    }
+
+    @Override
+    public IProjection getSRSDefaultGeometry() throws DataException {
+        return null;
+    }
+
+    @Override
+    public void export(DataServerExplorer explorer, String provider, NewFeatureStoreParameters params, String name) throws DataException {
+
+    }
+
+    @Override
+    public FeatureSet getFeatureSet() throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(FeatureQuery featureQuery) throws DataException {
+        return null;
+    }
+
+    @Override
+    public void getFeatureSet(FeatureQuery featureQuery, Observer observer) throws DataException {
+
+    }
+
+    @Override
+    public void getFeatureSet(Observer observer) throws DataException {
+
+    }
+
+    @Override
+    public List<Feature> getFeatures(FeatureQuery query, int pageSize) {
+        return null;
+    }
+
+    @Override
+    public Feature getFeatureByReference(FeatureReference reference) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature getFeatureByReference(FeatureReference reference, FeatureType featureType) throws DataException {
+        return null;
+    }
+
+    @Override
+    public void edit() throws DataException {
+        this.mode = MODE_FULLEDIT;
+    }
+
+    @Override
+    public void edit(int mode) throws DataException {
+        this.mode = mode;
+    }
+
+    @Override
+    public int getMode() {
+        return this.mode;
+    }
+    
+    
+
+    @Override
+    public void cancelEditing() throws DataException {
+        this.mode = MODE_QUERY;
+    }
+
+    @Override
+    public void finishEditing() throws DataException {
+        this.mode = MODE_QUERY;
+    }
+
+    @Override
+    public void commitChanges() throws DataException {
+
+    }
+
+    @Override
+    public boolean canCommitChanges() throws DataException {
+        return false;
+    }
+
+    @Override
+    public boolean isEditing() {
+        return false;
+    }
+
+    @Override
+    public boolean isAppending() {
+        return false;
+    }
+
+    @Override
+    public void update(EditableFeatureType featureType) throws DataException {
+
+    }
+
+    @Override
+    public void update(EditableFeature feature) throws DataException {
+
+    }
+
+    @Override
+    public void update(Object... parameters) throws DataException {
+
+    }
+    
+    @Override
+    public void delete(Feature feature) throws DataException {
+
+    }
+
+    @Override
+    public void insert(EditableFeature feature) throws DataException {
+
+    }
+
+    @Override
+    public EditableFeature createNewFeature() throws DataException {
+        return null;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(FeatureType type, Feature defaultValues) throws DataException {
+        return null;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(FeatureType type, boolean defaultValues) throws DataException {
+        return null;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(boolean defaultValues) throws DataException {
+        return null;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(Feature defaultValues) throws DataException {
+        return null;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(JsonObject defaultValues) throws DataException {
+        return null;
+    }
+    
+    @Override
+    public boolean isAppendModeSupported() {
+        return false;
+    }
+
+    @Override
+    public void beginEditingGroup(String description) throws NeedEditingModeException {
+
+    }
+
+    @Override
+    public void endEditingGroup() throws NeedEditingModeException {
+
+    }
+
+    @Override
+    public FeatureIndex createIndex(FeatureType featureType, String attributeName, String indexName) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureIndex createIndex(String indexTypeName, FeatureType featureType, String attributeName, String indexName) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureIndex createIndex(FeatureType featureType, String attributeName, String indexName, Observer observer) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureIndex createIndex(String indexTypeName, FeatureType featureType, String attributeName, String indexName, Observer observer) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureIndexes getIndexes() {
+        return null;
+    }
+
+    @Override
+    public void setSelection(FeatureSet selection) throws DataException {
+
+    }
+
+    @Override
+    public FeatureSelection createFeatureSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSelection getFeatureSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public boolean isLocksSupported() {
+        return false;
+    }
+
+    @Override
+    public FeatureLocks getLocks() throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureStoreTransforms getTransforms() {
+        return null;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery() {
+        return null;
+    }
+
+    @Override
+    public long getFeatureCount() throws DataException {
+        return 0;
+    }
+
+//    @Override
+//    public void createCache(String name, DynObject parameters) throws DataException {
+//
+//    }
+//
+//    @Override
+//    public FeatureCache getCache() {
+//        return null;
+//    }
+
+    @Override
+    public boolean isKnownEnvelope() {
+        return false;
+    }
+
+    @Override
+    public boolean hasRetrievedFeaturesLimit() {
+        return false;
+    }
+
+    @Override
+    public int getRetrievedFeaturesLimit() {
+        return 0;
+    }
+
+    @Override
+    public Feature getFeature(DynObject dynobject) {
+        return null;
+    }
+
+    @Override
+    public Iterator iterator() {
+        return null;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public String getFullName() {
+        return null;
+    }
+
+    @Override
+    public String getProviderName() {
+        return null;
+    }
+
+    @Override
+    public void refresh() throws DataException {
+
+    }
+
+    @Override
+    public DataSet getDataSet() throws DataException {
+        return null;
+    }
+
+    @Override
+    public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+        return null;
+    }
+
+    @Override
+    public void accept(Visitor visitor) throws BaseException {
+
+    }
+
+    @Override
+    public void accept(Visitor visitor, DataQuery dataQuery) throws BaseException {
+
+    }
+
+    @Override
+    public void getDataSet(Observer observer) throws DataException {
+
+    }
+
+    @Override
+    public void getDataSet(DataQuery dataQuery, Observer observer) throws DataException {
+
+    }
+
+    @Override
+    public DataSet getSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public void setSelection(DataSet selection) throws DataException {
+
+    }
+
+    @Override
+    public DataSet createSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws DataException, ValidateDataParametersException {
+        return null;
+    }
+
+    @Override
+    public DataQuery createQuery() {
+        return null;
+    }
+
+    @Override
+    public Interval getInterval() {
+        return null;
+    }
+
+    @Override
+    public Collection getTimes() {
+        return null;
+    }
+
+    @Override
+    public Collection getTimes(Interval interval) {
+        return null;
+    }
+
+    @Override
+    public void disableNotifications() {
+
+    }
+
+    @Override
+    public void enableNotifications() {
+
+    }
+
+    @Override
+    public void beginComplexNotification() {
+
+    }
+
+    @Override
+    public void endComplexNotification() {
+
+    }
+
+    @Override
+    public void addObserver(Observer obsrvr) {
+
+    }
+
+    @Override
+    public void deleteObserver(Observer obsrvr) {
+
+    }
+
+    @Override
+    public void deleteObservers() {
+
+    }
+
+    @Override
+    public void saveToState(PersistentState ps) throws PersistenceException {
+
+    }
+
+    @Override
+    public void loadFromState(PersistentState ps) throws PersistenceException {
+
+    }
+
+    @Override
+    public Object getMetadataID() throws MetadataException {
+        return null;
+    }
+
+    @Override
+    public String getMetadataName() throws MetadataException {
+        return null;
+    }
+
+    @Override
+    public Set getMetadataChildren() throws MetadataException {
+        return null;
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        return null;
+    }
+
+    @Override
+    public void implement(DynClass dc) {
+
+    }
+
+    @Override
+    public void delegate(DynObject d) {
+
+    }
+
+    @Override
+    public Object getDynValue(String string) throws DynFieldNotFoundException {
+        return null;
+    }
+
+    @Override
+    public void setDynValue(String string, Object o) throws DynFieldNotFoundException {
+
+    }
+
+    @Override
+    public boolean hasDynValue(String string) {
+        return false;
+    }
+
+    @Override
+    public Object invokeDynMethod(String string, Object[] os) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public Object invokeDynMethod(int i, Object[] os) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public void clear() {
+
+    }
+
+    @Override
+    public void dispose() {
+
+    }
+
+    @Override
+    public void undo() throws UndoException {
+
+    }
+
+    @Override
+    public void undo(int i) throws UndoException {
+
+    }
+
+    @Override
+    public void redo() throws RedoException {
+
+    }
+
+    @Override
+    public void redo(int i) throws RedoException {
+
+    }
+
+    @Override
+    public List getUndoInfos() {
+        return null;
+    }
+
+    @Override
+    public List getRedoInfos() {
+        return null;
+    }
+
+    @Override
+    public boolean canUndo() {
+        return false;
+    }
+
+    @Override
+    public boolean canRedo() {
+        return false;
+    }
+
+    @Override
+    public List<Feature> getFeatures() {
+        return null;
+    }
+
+    @Override
+    public void createCache(String name, DynObject parameters) throws DataException {
+
+    }
+
+    @Override
+    public FeatureCache getCache() {
+        return null;
+    }
+
+    @Override
+    public void useCache(String providerName, DynObject parameters) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DataStoreProviderFactory getProviderFactory() {
+        return null;
+    }
+
+    @Override
+    public boolean isBroken() {
+        return false;
+    }
+
+	@Override
+	public Throwable getBreakingsCause() {
+		return null;
+	}
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        return false;
+    }
+
+    @Override
+    public SpatialIndex wrapSpatialIndex(SpatialIndex index) {
+        return null;
+    }
+
+    @Override
+    public ExpressionBuilder createExpressionBuilder() {
+        return null;
+    }
+
+    @Override
+    public ExpressionBuilder createExpression() {
+        return createExpressionBuilder();
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter, String sortBy) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter, String sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(FeatureQuery query) {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter) {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter, String sortBy) {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter, String sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(String filter) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(String filter, String sortBy) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(String filter, String sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureReference getFeatureReference(String code) {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter, String sortBy) throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter, String sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter) {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter, String sortBy) {
+        return null;
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter, String sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(Expression filter) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, String sortBy) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, String sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature first() throws DataException {
+        return null;
+    }
+
+    @Override
+    public long getPendingChangesCount() {
+        return 0;
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        return new EmptyResourcesStorage();
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        return null;
+    }
+
+    @Override
+    public UnmodifiableBasicMap<String, DataStore> getChildren() {
+        return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+    }
+
+    @Override
+    public Feature findFirst(FeatureQuery query) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature getSampleFeature() {
+        return null;
+    }
+
+    @Override
+    public void copyTo(FeatureStore target) {
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter, String sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter, String sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public boolean supportReferences() {
+        return true;
+    }
+
+    @Override
+    public boolean isTemporary() {
+        return false;
+    }
+
+  @Override
+  public FeatureType getDefaultFeatureTypeQuietly() {
+      try {
+        return this.getDefaultFeatureType();
+      } catch (DataException ex) {
+        return null;
+      }
+  }
+
+    @Override
+    public void insert(FeatureSet set) throws DataException {
+
+    }
+
+    @Override
+    public long size64() {
+        return 0;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter, Expression sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter, Expression sortBy, boolean asc) {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(String filter, Expression sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, Expression sortBy, boolean asc) throws DataException {
+        return null;
+    }
+
+    @Override
+    public boolean cancelEditingQuietly() {
+        return true;
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return null;
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return Collections.EMPTY_MAP;
+    }
+
+    @Override
+    public boolean finishEditingQuietly() {
+        return true;
+    }
+
+    @Override
+    public void delete(String filter) {
+    }
+
+    @Override
+    public void delete(Expression filter) {
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64() {
+        return this.getFeatures64(null, -1);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter) {
+        return this.getFeatures64(filter, null, true);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter, String sortBy, boolean asc) {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatures64(query, -1);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(FeatureQuery query, int pageSize) {
+        return null;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter) {
+        return null;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter) {
+        return null;
+    }
+
+    @Override
+    public FeatureSelection createLargeFeatureSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public FeatureSelection createMemoryFeatureSelection() throws DataException {
+        return null;
+    }
+
+    @Override
+    public Feature getOriginalFeature(FeatureReference id) {
+        return null;
+    }
+
+    @Override
+    public Feature getOriginalFeature(Feature feature) {
+        return null;
+    }
+
+    @Override
+    public boolean isFeatureModified(FeatureReference id){
+        return false;
+    }
+
+    @Override
+    public boolean isFeatureModified(Feature feature){
+        return false;
+    }
+
+    @Override
+    public String getEditingSession() {
+        return null;
+    }
+
+    @Override
+    public List<FeatureReference> getEditedFeatures() {
+        return Collections.EMPTY_LIST;
+    }
+
+    @Override
+    public List<FeatureReference> getEditedFeaturesNotValidated() {
+        return Collections.EMPTY_LIST;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureType.java	(revision 46118)
@@ -0,0 +1,526 @@
+
+package org.gvsig.fmap.dal.feature;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.function.Predicate;
+import javax.json.JsonObject;
+import org.cresques.cts.IProjection;
+import org.gvsig.json.JsonObjectBuilder;
+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.Tags;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+
+/**
+ * This class is intended to be used in test.
+ * Use it directly or extend it and overwrite the methods you need.
+ * This class is maintained as part of the DAL API.
+ */
+public class DummyFeatureType implements FeatureType {
+
+    @Override
+    public FeatureType getCopy() {
+        return null;
+    }
+
+    @Override
+    public FeatureRules getRules() {
+        return null;
+    }
+
+    @Override
+    public EditableFeatureType getEditable() {
+        return null;
+    }
+
+    @Override
+    public int getIndex(String name) {
+        return 0;
+    }
+
+    @Override
+    public Object get(String name) {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor get(int index) {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getAttributeDescriptor(String name) {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getAttributeDescriptor(int index) {
+        return null;
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.size()<1;
+    }
+    
+    @Override
+    public String getId() {
+        return null;
+    }
+
+    @Override
+    public String getDefaultGeometryAttributeName() {
+        return null;
+    }
+
+    @Override
+    public int getDefaultGeometryAttributeIndex() {
+        return 0;
+    }
+
+    @Override
+    public List getSRSs() {
+        return null;
+    }
+
+    @Override
+    public IProjection getDefaultSRS() {
+        return null;
+    }
+
+    @Override
+    public boolean hasEvaluators() {
+        return false;
+    }
+
+    @Override
+    public boolean hasOID() {
+        return false;
+    }
+
+    @Override
+    public boolean allowAutomaticValues() {
+        return false;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor[] getAttributeDescriptors() {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor[] getPrimaryKey() {
+        return null;
+    }
+
+    @Override
+    public boolean hasPrimaryKey() {
+        return false;
+    }
+
+    @Override
+    public boolean supportReferences() {
+        return false;
+    }
+    
+    @Override
+    public FeatureAttributeDescriptor getDefaultGeometryAttribute() {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getDefaultTimeAttribute() {
+        return null;
+    }
+
+    @Override
+    public DynClass[] getSuperDynClasses() {
+        return null;
+    }
+
+    @Override
+    public DynMethod getDeclaredDynMethod(String string) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod[] getDeclaredDynMethods() throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod getDynMethod(String string) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod[] getDynMethods() throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod getDynMethod(int i) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public void addDynMethod(DynMethod dm) {
+
+    }
+
+    @Override
+    public void removeDynMethod(String string) {
+
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public String getNamespace() {
+        return null;
+    }
+
+    @Override
+    public String getFullName() {
+        return null;
+    }
+
+    @Override
+    public String getDescription() {
+        return null;
+    }
+
+    @Override
+    public void setNamespace(String string) {
+
+    }
+
+    @Override
+    public void setDescription(String string) {
+
+    }
+
+    @Override
+    public DynField getDynField(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField getDeclaredDynField(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField[] getDynFields() {
+        return null;
+    }
+
+    @Override
+    public DynField[] getDeclaredDynFields() {
+        return null;
+    }
+
+    @Override
+    public DynField addDynField(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldBoolean(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldInt(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldLong(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldFloat(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldDouble(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldString(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldDate(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldList(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldArray(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldMap(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldSet(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldObject(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldFile(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldFolder(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldURL(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldURI(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldSingle(String string, int i, Object o, boolean bln, boolean bln1) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldSingle(String string, int i, Object o) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldRange(String string, int i, Object o, Object o1, Object o2, boolean bln, boolean bln1) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldRange(String string, int i, Object o, Object o1, Object o2) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldChoice(String string, int i, Object o, DynObjectValueItem[] dovis, boolean bln, boolean bln1) {
+        return null;
+    }
+
+    @Override
+    public DynField addDynFieldChoice(String string, int i, Object o, DynObjectValueItem[] dovis) {
+        return null;
+    }
+
+    @Override
+    public void removeDynField(String string) {
+
+    }
+
+    @Override
+    public void validate(DynObject d) throws DynObjectValidateException {
+
+    }
+
+    @Override
+    public DynObject newInstance() {
+        return null;
+    }
+
+    @Override
+    public void extend(DynStruct ds) {
+
+    }
+
+    @Override
+    public void extend(String string, String string1) {
+
+    }
+
+    @Override
+    public void extend(String string) {
+
+    }
+
+    @Override
+    public void remove(DynStruct ds) {
+
+    }
+
+    @Override
+    public DynStruct[] getSuperDynStructs() {
+        return null;
+    }
+
+    @Override
+    public boolean isInstance(DynObject d) {
+        return false;
+    }
+
+    @Override
+    public boolean isExtendable(DynStruct ds) {
+        return false;
+    }
+
+    @Override
+    public Iterator<FeatureAttributeDescriptor> iterator() {
+        return null;
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public String getDefaultTimeAttributeName() {
+        return null;
+    }
+
+    @Override
+    public int getDefaultTimeAttributeIndex() {
+        return -1;
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> toList() {
+        return null;
+    }
+
+    @Override
+    public Tags getTags() {
+        return null;
+    }
+
+    @Override
+    public String getLabel() {
+        return null;
+    }
+
+    @Override
+    public void setLabel(String label) {
+    }
+
+    @Override
+    public DynField addDynField(String name, int type) {
+        return null;
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> getFilteredAttributes(Predicate<FeatureAttributeDescriptor> filter, int max) {
+        return null;
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> getRecentUseds() {
+        return null;
+    }
+
+    @Override
+    public void copyFrom(FeatureType other) {
+        
+    }
+
+    @Override
+    public FeatureStore getAsFeatureStore() {
+            return null;
+    }
+
+    @Override
+    public String getNewFieldName() {
+        return null;
+    }
+
+    @Override
+    public FeatureType getOriginalFeatureType() {
+        return null;
+    }
+
+    @Override
+    public boolean hasOnlyMetadataChanges(FeatureType other) {
+        return false;
+    }
+
+  @Override
+  public String getAttributeName(int index) {
+    return null;
+  }
+
+  @Override
+  public void writeAsDALFile(File file) {
+
+  }
+
+    @Override
+    public FeatureExtraColumns getExtraColumns() {
+        return null;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return null;
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        return null;
+    }
+
+    @Override
+    public Iterable<FeatureAttributeDescriptor> getAllAttributeDescriptors() {
+        return null;
+    }
+
+    @Override
+    public boolean isCheckFeaturesAtFinishEditing() {
+        return true;
+    }
+
+    @Override
+    public boolean isCheckFeaturesAtInsert() {
+        return true;
+    }
+
+	@Override
+	public FeatureAttributeDescriptor getAttributeDescriptorFromAll(String name) {
+		return null;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFeatureAttributeDescriptor.java	(revision 46118)
@@ -0,0 +1,741 @@
+
+package org.gvsig.fmap.dal.feature;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.text.DateFormat;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.function.Supplier;
+import javax.json.JsonObject;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+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.Tags;
+import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * This class is intended to be used in test.
+ * Use it directly or extend it and overwrite the methods you need.
+ * This class is maintained as part of the DAL API.
+ */
+public class DummyFeatureAttributeDescriptor implements FeatureAttributeDescriptor {
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getCopy() {
+        return null;
+    }
+
+    @Override
+    public String getDataTypeName() {
+        return null;
+    }
+
+    @Override
+    public int getSize() {
+        return 0;
+    }
+
+    @Override
+    public int getPrecision() {
+        return 0;
+    }
+
+    @Override
+    public int getScale() {
+        return 0;
+    }
+
+    @Override
+    public Coercion getCoercion() {
+      return null;
+    }
+
+    @Override
+    public CoercionContext getCoercionContext() {
+      return null;
+    }
+
+    @Override
+    public MathContext getMathContext() {
+          return MathContext.UNLIMITED;
+    }
+    
+    @Override
+    public Class getObjectClass() {
+        return null;
+    }
+
+    @Override
+    public int getMinimumOccurrences() {
+        return 0;
+    }
+
+    @Override
+    public int getMaximumOccurrences() {
+        return 0;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return false;
+    }
+
+    @Override
+    public boolean allowNull() {
+        return false;
+    }
+
+    @Override
+    public Evaluator getEvaluator() {
+        return null;
+    }
+
+    @Override
+    public IProjection getSRS() {
+        return null;
+    }
+
+    @Override
+    public int getGeometryType() {
+        return 0;
+    }
+
+    @Override
+    public int getGeometrySubType() {
+        return 0;
+    }
+
+    @Override
+    public GeometryType getGeomType() {
+        return null;
+    }
+
+    @Override
+    public DateFormat getDateFormat() {
+        return null;
+    }
+
+    @Override
+    public int getIndex() {
+        return 0;
+    }
+
+    @Override
+    public String getAdditionalInfo(String infoName) {
+        return null;
+    }
+
+    @Override
+    public boolean isAutomatic() {
+        return false;
+    }
+
+    @Override
+    public boolean isTime() {
+        return false;
+    }
+
+    @Override
+    public boolean isIndexed() {
+        return false;
+    }
+
+    @Override
+    public boolean allowIndexDuplicateds() {
+        return false;
+    }
+
+    @Override
+    public boolean isIndexAscending() {
+        return false;
+    }
+
+    @Override
+    public FeatureAttributeGetter getFeatureAttributeGetter() {
+        return null;
+    }
+
+    @Override
+    public void setFeatureAttributeGetter(FeatureAttributeGetter featureAttributeGetter) {
+
+    }
+
+    @Override
+    public FeatureAttributeEmulator getFeatureAttributeEmulator() {
+        return null;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public int getType() {
+        return 0;
+    }
+
+    @Override
+    public DataType getDataType() {
+        return null;
+    }
+
+    @Override
+    public String getSubtype() {
+        return null;
+    }
+
+    @Override
+    public String getDescription() {
+        return null;
+    }
+
+    @Override
+    public Object getDefaultValue() {
+        return null;
+    }
+
+    @Override
+    public String getGroup() {
+        return null;
+    }
+
+    @Override
+    public int getOder() {
+        return 0;
+    }
+
+    @Override
+    public boolean isMandatory() {
+        return false;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return false;
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean isReadOnly() {
+        return false;
+    }
+
+    @Override
+    public boolean isContainer() {
+        return false;
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues() {
+        return null;
+    }
+
+    @Override
+    public boolean hasConstantAvailableValues() {
+      return false;
+    }
+
+    @Override
+    public Object getMinValue() {
+        return null;
+    }
+
+    @Override
+    public Object getMaxValue() {
+        return null;
+    }
+
+    @Override
+    public Class getClassOfValue() {
+        return null;
+    }
+
+    @Override
+    public Class getClassOfItems() {
+        return null;
+    }
+
+    @Override
+    public DynField setDescription(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField setType(int i) {
+        return null;
+    }
+
+    @Override
+    public DynField setType(DataType dt) {
+        return null;
+    }
+
+    @Override
+    public DynField setSubtype(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField setDefaultFieldValue(Object o) {
+        return null;
+    }
+
+    @Override
+    public DynField setGroup(String string) {
+        return null;
+    }
+
+    @Override
+    public DynField setOrder(int i) {
+        return null;
+    }
+
+    @Override
+    public DynField setMandatory(boolean bln) {
+        return null;
+    }
+
+    @Override
+    public DynField setHidden(boolean bln) {
+        return null;
+    }
+
+    @Override
+    public DynField setPersistent(boolean bln) {
+        return null;
+    }
+
+    @Override
+    public DynField setAvailableValues(DynObjectValueItem[] dovis) {
+        return null;
+    }
+
+    @Override
+    public DynField setAvailableValues(List list) {
+        return null;
+    }
+
+    @Override
+    public DynField setMinValue(Object o) {
+        return null;
+    }
+
+    @Override
+    public DynField setMaxValue(Object o) {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfValue(Class type) throws DynFieldIsNotAContainerException {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfItems(Class type) throws DynFieldIsNotAContainerException {
+        return null;
+    }
+
+    @Override
+    public DynField setReadOnly(boolean bln) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField getElementsType() {
+        return null;
+    }
+
+    @Override
+    public DynField setElementsType(int i) throws DynFieldIsNotAContainerException {
+        return null;
+    }
+
+    @Override
+    public DynField setElementsType(DynStruct ds) throws DynFieldIsNotAContainerException {
+        return null;
+    }
+
+    @Override
+    public void validate(Object o) throws DynFieldValidateException {
+
+    }
+
+    @Override
+    public Object coerce(Object o) throws CoercionException {
+        return null;
+    }
+
+    @Override
+    public int getTheTypeOfAvailableValues() {
+        return 0;
+    }
+
+    @Override
+    public DynField setDefaultDynValue(Object o) {
+        return null;
+    }
+
+    @Override
+    public DynField setTheTypeOfAvailableValues(int i) {
+        return null;
+    }
+
+    @Override
+    public boolean isComputed() {
+        return false;
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        return null;
+    }
+
+    @Override
+    public Interval getInterval() {
+        return null;
+    }
+
+    @Override
+    public String getDataProfileName() {
+        return null;
+    }
+
+    @Override
+    public String[] getRequiredFieldNames() {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfValue(DynStruct dynStrct) {
+        return this;
+    }
+
+    @Override
+    public DynField setClassOfValue(String theClassNameOfValue) {
+        return this;
+    }
+
+    @Override
+    public String getClassNameOfValue() {
+        return null;
+    }
+
+    @Override
+    public DynStruct getDynClassOfValue() {
+        return null;
+    }
+
+    @Override
+    public DynField setTypeOfItems(int type) {
+        return this;
+    }
+
+    @Override
+    public int getTypeOfItems() {
+        return 0;
+    }
+
+    @Override
+    public DynField setClassOfItems(DynStruct dynStrct) {
+        return this;
+    }
+
+    @Override
+    public DynField setClassOfItems(String theClassNameOfValue) {
+        return this;
+    }
+
+    @Override
+    public String getClassNameOfItems() {
+        return null;
+    }
+
+    @Override
+    public DynStruct getDynClassOfItems() {
+        return null;
+    }
+
+    @Override
+    public Tags getTags() {
+        return null;
+    }
+
+    @Override
+    public DynField setRelationType(int relationType) {
+        return this;
+    }
+
+    @Override
+    public int getRelationType() {
+        return 0;
+    }
+
+    @Override
+    public DynField setAvailableValues(DynMethod computeAvailableValues) {
+        return this;
+    }
+
+    @Override
+    public DynMethod getAvailableValuesMethod() {
+        return null;
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues(DynObject self) {
+        return null;
+    }
+
+    @Override
+    public boolean isAvailableValuesCalculated() {
+        return false;
+    }
+
+    @Override
+    public DynField setCalculateMethod(DynMethod computeValue) {
+        return this;
+    }
+
+    @Override
+    public DynMethod getCalculateMethod() {
+        return null;
+    }
+
+    @Override
+    public boolean isCalculated() {
+        return false;
+    }
+
+    @Override
+    public Object getCalculatedValue(DynObject self) {
+        return null;
+    }
+
+    @Override
+    public void copyFrom(DynField other) {
+    }
+
+    @Override
+    public DynField setValidateElements(boolean validate) {
+        return this;
+    }
+
+    @Override
+    public boolean getValidateElements() {
+        return false;
+    }
+
+    @Override
+    public String getLabel() {
+        return null;
+    }
+
+    @Override
+    public DynField setLabel(String label) {
+        return this;
+    }
+
+    @Override
+    public void recentUsed() {
+    }
+
+    @Override
+    public boolean isForeingKey() {
+        return false;
+    }
+
+    @Override
+    public ForeingKey getForeingKey() {
+        return null;
+    }
+
+    @Override
+    public String getShortLabel() {
+        return null;
+    }
+
+    @Override
+    public DynField setShortLabel(String shortLabel) {
+        return this;
+    }
+
+    @Override
+    public String getLocalizedShortLabel() {
+        return this.getShortLabel();
+    }
+
+    @Override
+    public String getLocalizedLabel() {
+        return this.getLabel();
+    }
+
+    @Override
+    public String getLabelOfValue(Object value) {
+        return Objects.toString(value, "");
+    }
+
+    @Override
+    public DataProfile getDataProfile() {
+        return null;
+    }
+
+    @Override
+    public boolean hasOnlyMetadataChanges(FeatureAttributeDescriptor other) {
+        return false;
+    }
+
+    @Override
+    public boolean hasLabel() {
+        return false;
+    }
+
+    @Override
+    public boolean hasShortLabel() {
+        return false;
+    }
+
+    @Override
+    public boolean hasDescription() {
+        return false;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getValue() {
+        return this;
+    }
+
+    @Override
+    public Object getDefaultValueCoerced() {
+        return null;
+    }
+
+  @Override
+  public int getRoundMode() {
+    return BigDecimal.ROUND_HALF_UP;
+  }
+
+  @Override
+  public Locale getLocale() {
+    return Locale.ENGLISH;
+  }
+
+  @Override
+  public Object get(String name) {
+    return null;
+  }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+       
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+       
+    }
+
+  @Override
+  public int getDisplaySize() {
+    return 0;
+  }
+
+    @Override
+    public Expression getAvailableValuesExpression() {
+        return null;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(String expression) {
+        return this;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(Expression expression) {
+        return this;
+    }
+
+    @Override
+    public boolean isAvoidCachingAvailableValues() {
+        return false;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return null;
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        return null;
+    }
+
+    @Override
+    public boolean isInAvailableValues(Object valueToCheck) {
+        return false;
+    }
+
+    @Override
+    public boolean hasAvailableValues() {
+        return false;
+    }
+
+    @Override
+    public Supplier getDefaultValueSupplier() {
+        return null;
+    }
+
+    @Override
+    public DynField setDefaultValueSupplier(Supplier supplier) {
+        return this;
+    }
+
+    @Override
+    public Expression getAvailableValuesFilter() {
+        return null;
+    }
+    @Override
+    public Object getCoercedDefaultValue() {
+        return null;
+    }
+
+    @Override
+    public String getDefaultFormat() {
+        return null;
+    }
+
+    @Override
+    public String format(Object value) {
+        return Objects.toString(value,"");
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/pom.xml	(revision 46118)
@@ -0,0 +1,127 @@
+<?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>
+  <description>Define the API of the Data Access Library.</description>
+  <packaging>jar</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.344</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>
+        
+        <dependency>
+            <groupId>org.glassfish</groupId>
+            <artifactId>javax.json</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    
+    <!-- Implementation dependencies for 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>easymock</groupId>
+      <artifactId>easymockclassextension</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.expressionevaluator.lib.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.expressionevaluator.geometry.lib.api</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.raster.lib.buffer.api</artifactId>
+      <scope>compile</scope>
+    </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>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.pom.xml.kate-swp


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.DynObjectEncoder;
+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.
+     */
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public MultiResourceParameters(String name) {
+        this();
+        setName(name);
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return delegatedDynObject;
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public String getResurceID() {
+        DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder();
+        return encoder.encodePair("name",this.getName());
+    }
+
+    /**
+     * 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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,367 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 Object multiResourcelock;
+
+	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();
+		multiResourcelock = new Object();
+        this.parameters = null;
+        if( parameters != null ) {
+            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 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 && this.parameters!=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) {
+                        logger.warn("notify close in a resource already closed ("+this.parameters==null? "null": 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();
+	}
+
+	public ResourceConsumer getConsumerAt(int i){
+	    this.updateConsumersList();
+	    if (consumers==null){
+	        return null;
+	    }else{
+	        return (ResourceConsumer)consumers.get(i);
+	    }
+	}
+
+	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) {
+			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) {
+		    synchronized (multiResourcelock) {
+    			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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.spi;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.gvsig.fmap.dal.resource.ResourceParameters;
+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.DynObjectEncoder;
+
+public abstract class AbstractResourceParameters extends AbstractDataParameters
+		implements ResourceParameters {
+
+    @Override
+    public String getResurceID() {
+        DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder();
+        return encoder.encode(this.getDelegatedDynObject());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.resource.spi;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.DALLocator;
+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.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.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 Map resources = new HashMap<>();
+
+	// Initially, the first one
+	private int defaultResourcePos = 0;
+
+	//Blocks adding methods
+	private boolean isFrozen=false;
+
+	/**
+	 * 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 new ArrayList<>(resources.values());
+	}
+
+	/**
+	 * 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 {
+	    String name=(String)parameters.getDynValue("name");
+	    commonAddResource(name, parameters,defaultResource);
+	}
+
+	/**
+	 * 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 {
+	    commonAddResource(name, params,defaultResource);
+	}
+
+	private void commonAddResource(String name, Object params,
+        boolean defaultResource) throws InitializeException {
+	        String multiresourceName=null;
+	        try {
+	            multiresourceName=this.getName();
+	        } catch (AccessResourceException e1) {
+	            LOG.warn("Imposible to get MultiResource name");
+	        }
+	        Resource res = (Resource)(this.resources.get(name));
+	        if( res!=null ) {
+	            return;
+	        }
+	        if (isFrozen){
+	            LOG.warn("Added resource "+name+" to a frozen multiresource "+multiresourceName);
+	        }
+	        ResourceProvider resourceProvider =null;
+	        if (params instanceof ResourceParameters){
+	            resourceProvider =  ((ResourceManagerProviderServices) DALLocator.
+	                getResourceManager()).createAddResource((ResourceParameters)params);
+	        }else if (params instanceof Object[]){
+	            resourceProvider =  ((ResourceManagerProviderServices) DALLocator.
+                    getResourceManager()).createAddResource(name,(Object[])params);
+	        }else{
+	            LOG.warn("Resource could not be created "+name);
+	        }
+            try {
+                resources.put(resourceProvider.getName(),resourceProvider);
+            } catch (AccessResourceException e) {
+                LOG.warn("Resource not added "+name+ " to "+multiresourceName);
+            }
+	        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();
+		}
+		super.notifyChanges();
+	}
+
+	public void notifyClose() throws ResourceNotifyCloseException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyClose();
+		}
+		super.notifyClose();
+	}
+
+	public void notifyDispose() throws ResourceNotifyDisposeException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyDispose();
+		}
+		super.notifyDispose();
+	}
+
+	public void notifyOpen() throws ResourceNotifyOpenException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).notifyOpen();
+		}
+		super.notifyOpen();
+	}
+
+	public void prepare() throws PrepareResourceException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).prepare();
+		}
+		super.prepare();
+	}
+
+	public void closeRequest() throws ResourceException {
+		List resources = getResources();
+		for (int i = 0; i < resources.size(); i++) {
+			((ResourceProvider) getResources().get(i)).closeRequest();
+		}
+		super.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 {
+	    String name ="MultiResource "+ getMultiResourceParameters().getName();
+	    return name;
+	    /*
+		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);
+		}
+	}
+
+	/**
+	 * Blocks the adding methods. It is called when all their resources components are added.
+	 */
+	public void frozen(){
+	    this.isFrozen=true;
+	}
+
+    /**
+     * Locks the multiresource components to avoid another concurrent modification
+     */
+   @Override
+   public Object execute(ResourceAction action)
+       throws ResourceExecuteException {
+       Object value = null;
+       synchronized (lock) {
+           Iterator it=resources.values().iterator();
+           while (it.hasNext()){
+               AbstractResource resource=(AbstractResource)it.next();
+               resource.multiResourcelock=this.lock;
+           }
+           executeBegins();
+           try {
+               value = performExecution(action);
+           } catch (Exception e) {
+               throw new ResourceExecuteException(this, e);
+           } finally {
+               executeEnds();
+           }
+       }
+       return value;
+   }
+
+   public  void addMultiResourceConsumer(ResourceConsumer consumer) {
+       super.addConsumer(consumer);
+       Iterator it=resources.values().iterator();
+       while (it.hasNext()){
+           AbstractResource resource=(AbstractResource)it.next();
+           resource.addConsumer(consumer);
+       }
+   }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+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).
+     * @param elements
+     * @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, long elements) 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.
+     * 
+     * @param elements
+     * @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, long elements) throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature.spi;
+
+import java.util.Iterator;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTransaction;
+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.feature.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+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 type, {@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
+   * @param featureType
+	 * @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;
+
+	/**
+	 * 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
+   * @throws org.gvsig.fmap.dal.exception.DataException
+	 */
+	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();
+        
+        public FeatureStore getFeatureStore();
+        
+        public DataStoreParameters getParameters();
+        
+        /**
+         * Indicates if the storage is temporary.
+         * There is no guarantee that a temporary store can be recovered from 
+         * its parameters. In general these will not be persistent.
+         * 
+         * @return true if the store is temporary, otherwise false.
+         */
+        public boolean isTemporary();      
+        
+        public void fixFeatureTypeFromParameters();
+        
+     	public boolean supportsPassThroughMode();
+        
+	public void passThroughInsert(FeatureProvider featureProvider) throws DataException;
+
+        public void passThroughUpdate(FeatureProvider featureProvider) throws DataException;
+
+        public void passThroughDelete(FeatureReferenceProviderServices featureReference) throws DataException;
+
+        public void passThroughUpdate(Object[] parameters, Expression filter);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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
+   * @return 
+	 */
+	public FeatureStoreNotification notifyChange(String notification);
+
+	/**
+	 * Call this to send a notification to observers of this store
+	 * 
+	 * @param notification
+   * @param data
+   * @return 
+	 */
+	public FeatureStoreNotification notifyChange(String notification, FeatureProvider data);
+
+	/**
+	 * Call this to send a notification to observers of this store
+	 * 
+   * @param storeNotification
+   * @return 
+	 */
+	public FeatureStoreNotification notifyChange(FeatureStoreNotification storeNotification);
+
+	/**
+	 * Call this to send a notification to observers of this store relative to
+	 * Resources
+	 * 
+	 * @param notification
+   * @param resource
+   * @return 
+	 */
+	public FeatureStoreNotification 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}
+	 *
+   * @param type
+	 * @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 types, list of all {@link FeatureType} available
+   * @param defaultType, {@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.
+	 *
+   * @param id
+	 * @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 featureTypeId, of the {@link FeatureType}
+	 * @return
+	 */
+	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
+   * @throws org.gvsig.fmap.dal.exception.DataException
+	 */
+	public FeatureType getDefaultFeatureType() throws DataException;
+        
+  public List getFeatureTypes() throws DataException;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.spi.index;
+
+import java.util.List;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+
+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 extends DataFactoryUnit {
+	
+	/** 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.memory;
+
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+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;
+import org.gvsig.timesupport.Time;
+
+/**
+ * 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 final FeatureProvider original;
+	private final FeatureType myFeatureType;
+
+	/**
+	 * Default constructor.
+	 * 
+	 * @param original
+	 *            featureProvider
+	 * @param featureType
+	 *            to expose
+	 */
+	public MemoryFeatureProviderAttributeMapper(FeatureProvider 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();
+                        if (!attr.isComputed()) {
+                            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);
+	}
+
+    @Override
+    public Time getDefaultTime() {
+        return original.getDefaultTime();
+    }
+
+    @Override
+    public void setDefaultTime(Time time) {
+        original.setDefaultTime(time);
+    }
+
+    @Override
+    public void setExtraValue(int index, Object value) {
+        this.original.setExtraValue(index, value);
+    }
+
+    @Override
+    public Object getExtraValue(int index) {
+        return this.original.getExtraValue(index);
+    }
+
+    @Override
+    public Object getExtraValue(String name) {
+        return this.original.getExtraValue(name);
+    }
+
+    @Override
+    public void setExtraValueNames(String[] extraValueNames) {
+        this.original.setExtraValueNames(extraValueNames);
+    }
+
+  @Override
+  public boolean hasExtraValue(String name) {
+    return this.original.hasExtraValue(name);
+  }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+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(FeatureStoreProvider store,
+				Iterator it) {
+			super(store);
+			this.delegated = it;
+		}
+
+		protected void internalDispose() {
+			this.delegated = null;
+		}
+
+		protected boolean internalHasNext() {
+			return delegated.hasNext();
+		}
+
+		protected Object internalNext() {
+			Object x = delegated.next(); 
+                        return x;
+		}
+
+		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(
+				FeatureStoreProvider store, Iterator it,
+				FeatureType featureType) {
+			super(store, it);
+			this.fType = featureType;
+		}
+
+		protected Object internalNext() {
+                    FeatureProvider feature = (FeatureProvider) super.internalNext();
+                    if (fType == null) {
+                        return feature;
+                    } else {
+                        return new MemoryFeatureProviderAttributeMapper(
+                                feature,
+                                this.fType
+                        );
+                    }
+
+                }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.spi.memory;
+
+import java.util.ArrayList;
+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);
+	}
+
+        @Override
+	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) {
+        if( this.data == null ) {
+            this.data = new ArrayList();
+        }
+		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();
+	}
+
+        @Override
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference) throws DataException {
+		int oid = ((Long) reference.getOID()).intValue();
+		return (FeatureProvider) this.data.get(oid);
+	}
+
+        @Override
+	protected FeatureProvider internalGetFeatureProviderByReference(
+			FeatureReferenceProviderServices reference, FeatureType featureType)
+			throws DataException {
+        return new MemoryFeatureProviderAttributeMapper(
+            (DefaultFeatureProvider) internalGetFeatureProviderByReference(reference),
+            featureType);
+	}
+
+        @Override
+	public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType)
+			throws DataException {
+		this.open();
+		return new MemoryFeatureSet(this, query, featureType, this.data);
+	}
+
+        @Override
+	public FeatureProvider createFeatureProvider(FeatureType featureType)throws DataException  {
+		this.open();
+		return new MemoryFeatureProvider(featureType);
+	}
+
+        @Override
+	public long getFeatureCount() throws DataException {
+		return data.size();
+	}
+
+	protected AbstractMemoryStoreProvider getMemoryProvider() {
+		return this;
+	}
+
+        @Override
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		data = null;
+	}
+        
+    public class MemoryFeatureProvider extends DefaultFeatureProvider {
+
+        public MemoryFeatureProvider(FeatureType type) {
+            super(type);
+        }
+
+        public MemoryFeatureProvider(FeatureType featureType, Object createNewOID) {
+            super(featureType, createNewOID);
+        }
+
+        @Override
+        public FeatureType getType() {
+            try {
+                if (getStoreServices().getFeatureTypes().size()==1) {
+                    // Si podemos le pedimos el type al store services que el
+                    // es quien sabe si estamos en edicion y se han hecho modificaciones
+                    // en la estructura.
+                    return getStoreServices().getDefaultFeatureType();
+                } else {                    
+                    return super.getType();
+                }
+            } catch (DataException ex) {
+                return super.getType();
+            }
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.DynObjectEncoder;
+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);
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return delegatedDynObject;
+    }
+
+    @Override
+    public String getTypeName() {
+        return MemoryResource.NAME;
+    }
+
+    @Override
+    public String getResurceID() {
+        DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder();
+        return encoder.encodePair("name",this.getDynValue(FIELD_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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider_v2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider_v2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/FeatureStoreProvider_v2.java	(revision 46118)
@@ -0,0 +1,10 @@
+
+package org.gvsig.fmap.dal.feature.spi;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+
+
+public interface FeatureStoreProvider_v2 extends FeatureStoreProvider {
+    
+    public ExpressionBuilder createExpression();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.feature.spi;
+
+import java.util.List;
+import java.util.function.Function;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+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 AbstractFeatureStoreProviderFactory(String name, String description, boolean hidden) {
+    super(name, description, hidden);
+  }
+
+  @Override
+  public int allowEditableFeatureType() {
+    return UNKNOWN;
+  }
+
+  @Override
+  public List getSupportedDataTypes() {
+    // null means all supported
+    return null;
+  }
+
+  @Override
+  public List getSupportedGeometryTypesSubtypes() {
+    // null means all supported
+    return null;
+  }
+
+  @Override
+  public boolean allowsMandatoryAttributes() {
+    return true;
+  }
+
+  @Override
+  public boolean preferNotToUseNonNullRestrictions() {
+    return false;
+  }
+
+  @Override
+  public boolean allowsPrimaryKeyAttributes() {
+    return true;
+  }
+
+  @Override
+  public int useLocalIndexesCanImprovePerformance() {
+    return UNKNOWN;
+  }
+
+  /**
+   * @return dummy feature type. Must be overridden by subclasses
+   *
+   */
+  @Override
+  public FeatureType createDefaultFeatureType() {
+    DataManager dm = DALLocator.getDataManager();
+    EditableFeatureType eft = dm.createFeatureType();
+
+    if (allowEditableFeatureType() == DataStoreProviderFactory.YES) {
+      return eft;
+    } else {
+      return eft.getNotEditableCopy();
+    }
+  }
+
+  @Override
+  public int getMaxAttributeNameSize() {
+    return -1;
+  }
+
+  @Override
+  public boolean supportNumericOID() {
+    return false;
+  }
+
+  @Override
+  public int isOptimalRecoverFeaturesByReference() {
+    return UNKNOWN;
+  }
+
+  @Override
+  public Function<String,Integer> allowFunction() {
+    return (Function) (Object t) -> UNKNOWN;
+  }
+
+  @Override
+  public int allowGroupBy() {
+    return UNKNOWN;
+  }
+  
+  @Override
+    public boolean allowSpatialIndexSupport() {
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.feature.spi;
+
+import java.util.Collections;
+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;
+	}
+
+	public long getSize() {
+            if( list==null ) {
+                return 0;
+            }
+            return list.size();
+	}
+
+	public boolean isEmpty() {
+            if( list==null ) {
+                return true;
+            }
+            return list.isEmpty();
+	}
+
+	public Iterator iterator() {
+            if( list==null ) {
+                return Collections.emptyIterator();
+            }
+            return list.iterator();
+	}
+
+	public Iterator iterator(long index) {
+            if( list==null ) {
+                return Collections.emptyIterator();
+            }
+            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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java	(revision 46118)
@@ -0,0 +1,3375 @@
+package org.gvsig.fmap.dal.feature.spi;
+
+import java.text.MessageFormat;
+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.Objects;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.AbstractValue;
+import org.gvsig.expressionevaluator.ExpressionBuilder.ClassVisitorFilter;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_CONSTANT;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_VARIABLE;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Visitable;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Visitor;
+import org.gvsig.expressionevaluator.ExpressionBuilder.VisitorFilter;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.expressionevaluator.GeometryExpressionEvaluatorLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.AlterTableBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.CreateTableBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.DeleteBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.DropTableBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.FromBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.GrantBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.InsertBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.InsertColumnBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.OrderByBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.Privilege;
+import org.gvsig.fmap.dal.SQLBuilder.SelectBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.SelectColumnBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.TableNameBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.UpdateBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.UpdateColumnBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.UpdateTableStatisticsBuilder;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.dataTypes.DataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class SQLBuilderBase implements SQLBuilder {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(SQLBuilderBase.class);
+
+    protected SelectBuilder select;
+    protected UpdateBuilder update;
+    protected InsertBuilder insert;
+    protected DeleteBuilder delete;
+    protected AlterTableBuilder alter_table;
+    protected CreateTableBuilder create_table;
+    protected GrantBuilder grant;
+    protected DropTableBuilder drop_table;
+    protected UpdateTableStatisticsBuilder update_table_statistics;
+    protected CreateIndexBuilder create_index;
+    protected DropIndexBuilder drop_index;
+    protected TableNameBuilder table_name;
+
+    protected abstract class AbstractStatementPart extends AbstractValue {
+        
+    }
+
+    protected abstract class AbstractStatement extends AbstractStatementPart {
+        @Override
+        public Value clone() throws CloneNotSupportedException {
+            throw new CloneNotSupportedException();
+        }
+    }
+
+    protected class ColumnDescriptorBase implements ColumnDescriptor {
+
+        private String name;
+        private int type;
+        private int size;
+        private int precision;
+        private int scale;
+        private boolean isPk;
+        private boolean _allowNulls;
+        private boolean _isAutomatic;
+        private Object defaultValue;
+        private int geom_type;
+        private int geom_subtype;
+        private Object geom_srsdbcode;
+        private boolean _isIndexed;
+        private DataStoreParameters parameters = null;
+
+        public ColumnDescriptorBase(String name, int type, Object defaultValue) {
+            this.name = name;
+            this.type = type;
+            this.size = -1;
+            this.precision = -1;
+            this.scale = -1;
+            this.isPk = false;
+            this._allowNulls = true;
+            this._isAutomatic = false;
+            this.defaultValue = defaultValue;
+            this.geom_type = Geometry.TYPES.GEOMETRY;
+            this.geom_subtype = Geometry.SUBTYPES.GEOM2D;
+            this.geom_srsdbcode = null;
+            this._isIndexed = false;
+        }
+
+        public ColumnDescriptorBase(String name, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue) {
+            this.name = name;
+            this.type = type;
+            this.size = size;
+            this.precision = precision;
+            this.scale = scale;
+            this.isPk = isPk;
+            this._allowNulls = allowNulls;
+            this._isAutomatic = isAutomatic;
+            this.defaultValue = defaultValue;
+            this.geom_type = Geometry.TYPES.GEOMETRY;
+            this.geom_subtype = Geometry.SUBTYPES.GEOM2D;
+            this.geom_srsdbcode = null;
+            this._isIndexed = isIndexed;
+        }
+
+        public ColumnDescriptorBase(String name, int geom_type, int geom_subtype, IProjection proj, boolean isIndexed, boolean allowNulls) {
+            this.name = name;
+            this.type = DataTypes.GEOMETRY;
+            this.size = 0;
+            this.precision = 0;
+            this.scale = 0;
+            this.isPk = false;
+            this._allowNulls = allowNulls;
+            this._isAutomatic = false;
+            this.defaultValue = null;
+            this.geom_type = geom_type;
+            this.geom_subtype = geom_subtype;
+            this.geom_srsdbcode = srs_id(proj);
+            this._isIndexed = isIndexed;
+        }
+
+        public ColumnDescriptorBase(String name, int geom_type, int geom_subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls) {
+            this.name = name;
+            this.type = DataTypes.GEOMETRY;
+            this.size = 0;
+            this.precision = 0;
+            this.scale = 0;
+            this.isPk = false;
+            this._allowNulls = allowNulls;
+            this._isAutomatic = false;
+            this.defaultValue = null;
+            this.geom_type = geom_type;
+            this.geom_subtype = geom_subtype;
+            this.geom_srsdbcode = srsdbcode;
+            this._isIndexed = isIndexed;
+        }
+
+        private ColumnDescriptorBase(FeatureAttributeDescriptor fad) {
+            this(fad.getName(), fad.getType(), fad.getDefaultValue());
+            this.precision = fad.getPrecision();
+            this.size = fad.getSize();
+            this.scale = fad.getScale();
+            this.isPk = fad.isPrimaryKey();
+            this._allowNulls = fad.allowNull();
+            this._isAutomatic = fad.isAutomatic();
+            this._isIndexed = fad.isIndexed();
+
+            if (fad.getType() == org.gvsig.fmap.geom.DataTypes.GEOMETRY) {
+                this.geom_type = fad.getGeomType().getType();
+                this.geom_subtype = fad.getGeomType().getSubType();
+                this.geom_srsdbcode = fad.getSRS();
+            }
+        }
+    
+
+        @Override
+        public String getName() {
+            return this.name;
+        }
+
+        @Override
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public int getType() {
+            return this.type;
+        }
+
+        @Override
+        public void setType(int type) {
+            this.type = type;
+        }
+
+        @Override
+        public int getPrecision() {
+            return precision;
+        }
+
+        @Override
+        public void setPrecision(int precision) {
+            this.precision = precision;
+        }
+
+        @Override
+        public int getScale() {
+            return scale;
+        }
+
+        @Override
+        public void setScale(int scale) {
+            this.scale = scale;
+        }
+
+        @Override
+        public int getSize() {
+            return size;
+        }
+
+        @Override
+        public void setSize(int size) {
+            this.size = size;
+        }
+
+        @Override
+        public boolean isPrimaryKey() {
+            return isPk;
+        }
+
+        @Override
+        public void setIsPrimaryKey(boolean isPk) {
+            this.isPk = isPk;
+        }
+
+        @Override
+        public boolean allowNulls() {
+            return _allowNulls;
+        }
+
+        @Override
+        public void setAllowNulls(boolean allowNulls) {
+            this._allowNulls = allowNulls;
+        }
+
+        @Override
+        public boolean isAutomatic() {
+            return _isAutomatic;
+        }
+
+        @Override
+        public boolean isIndexed() {
+            return _isIndexed;
+        }
+
+        @Override
+        public void setIsAutomatic(boolean isAutomatic) {
+            this._isAutomatic = isAutomatic;
+        }
+
+        @Override
+        public Object getDefaultValue() {
+            return defaultValue;
+        }
+
+        @Override
+        public void setDefaultValue(Object defaultValue) {
+            this.defaultValue = defaultValue;
+        }
+
+        @Override
+        public int getGeometryType() {
+            return geom_type;
+        }
+
+        @Override
+        public void setGeometryType(int geom_type) {
+            this.geom_type = geom_type;
+        }
+
+        @Override
+        public int getGeometrySubtype() {
+            return geom_subtype;
+        }
+
+        @Override
+        public void setGeometrySubtype(int geom_subtype) {
+            this.geom_subtype = geom_subtype;
+        }
+
+        @Override
+        public Object getGeometrySRSId() {
+            return geom_srsdbcode;
+        }
+
+        @Override
+        public void setGeometrySRSId(Object geom_srsid) {
+            this.geom_srsdbcode = geom_srsid;
+        }
+
+        @Override
+        public boolean isGeometry() {
+            return this.type == DataTypes.GEOMETRY;
+        }
+
+        private void setStoreParameters(DataStoreParameters parameters) {
+            this.parameters = parameters;
+        }
+
+        @Override
+        public DataStoreParameters getStoreParameters() {
+            return this.parameters;
+        }
+    }
+
+    public class ColumnBase extends AbstractValue implements Column {
+
+        private final String name;
+        private TableNameBuilder table;
+
+        public ColumnBase(TableNameBuilder table, String name) {
+            this.name = name;
+            this.table = table;
+        }
+        
+        @Override
+        public ColumnBase clone() throws CloneNotSupportedException {
+            ColumnBase other = (ColumnBase) super.clone();
+            other.table = (TableNameBuilder) org.gvsig.tools.lang.Cloneable.cloneQuietly(table);
+            return other;
+        }
+
+
+        @Override
+        public String name() {
+            return this.name;
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            return this.table;
+        }
+
+        @Override
+        public TableNameBuilder table(TableNameBuilder table) {
+            this.table = table;
+            return this.table;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+        
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if( formatter!=null && formatter.canApply(this) ) {
+                return formatter.format(this);
+            }
+            if( this.table==null ) {
+                return as_identifier(this.name);
+            }
+            return this.table.toString(formatter) + "." + as_identifier(this.name);
+        }
+
+        @Override
+        public int compareTo(Variable o) {
+            return this.name.compareTo(o.name());
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof Variable)) {
+                return false;
+            }
+            return StringUtils.equals(this.toString(), ((Variable) obj).toString());
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            hash = 37 * hash + Objects.hashCode(this.toString());
+            return hash;
+        }
+    }
+
+    public class TableNameBuilderBase
+            extends AbstractStatementPart
+            implements TableNameBuilder {
+
+        public String tableName;
+        public String schemaName;
+        private String databaseName;
+
+        public TableNameBuilderBase() {
+        }
+        
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+        }
+
+        @Override
+        public TableNameBuilder database(String name) {
+            this.databaseName = name;
+            return this;
+        }
+
+        @Override
+        public TableNameBuilder schema(String name) {
+            if (support_schemas()) {
+                this.schemaName = name;
+            }
+            return this;
+        }
+
+        @Override
+        public TableNameBuilder name(String name) {
+            this.tableName = name;
+            return this;
+        }
+
+        @Override
+        public String getDatabase() {
+            return this.databaseName;
+        }
+
+        @Override
+        public String getSchema() {
+            return this.schemaName;
+        }
+
+        @Override
+        public String getName() {
+            return this.tableName;
+        }
+
+        @Override
+        public boolean has_schema() {
+            if (!support_schemas()) {
+                return false;
+            }
+            return !StringUtils.isEmpty(this.schemaName);
+        }
+
+        @Override
+        public boolean has_database() {
+            return !StringUtils.isEmpty(this.databaseName);
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            if (this.has_database()) {
+                if (this.has_schema()) {
+                    return as_identifier(this.databaseName) + "."
+                            + as_identifier(this.schemaName) + "."
+                            + as_identifier(this.tableName);
+                }
+            } else {
+                if (this.has_schema()) {
+                    return as_identifier(this.schemaName) + "."
+                            + as_identifier(this.tableName);
+                }
+            }
+            return as_identifier(this.tableName);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if( obj==null || !(obj instanceof TableNameBuilder) ) {
+                return false;
+            }
+            TableNameBuilder other = (TableNameBuilder) obj;
+            
+            if (this.has_database() != other.has_database()) {
+                return false;
+            }
+            String thisSchema = null;
+            String otherSchema = null;
+            if(support_schemas()) {
+                thisSchema = this.schemaName;
+                if (StringUtils.isBlank(thisSchema)) {
+                    thisSchema = default_schema();
+                }
+                otherSchema = other.getSchema();
+                if (StringUtils.isBlank(otherSchema)) {
+                    otherSchema = default_schema();
+                }
+            }
+            if (this.has_database()) {
+                    return StringUtils.equals(this.databaseName,other.getDatabase()) &&
+                           StringUtils.equals(thisSchema, otherSchema) &&
+                           StringUtils.equals(this.tableName,other.getName());
+            } else {
+                    return StringUtils.equals(thisSchema, otherSchema) &&
+                           StringUtils.equals(this.tableName,other.getName());
+            }
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            hash = 37 * hash + Objects.hashCode(this.toString());
+            return hash;
+        }
+
+    }
+
+    public class CountBuilderBase
+            extends AbstractStatementPart
+            implements CountBuilder {
+
+        protected Value value;
+        protected boolean distinct;
+        protected boolean all;
+
+        public CountBuilderBase() {
+            this.value = null;
+            this.distinct = false;
+            this.all = false;
+        }
+        
+        @Override
+        public CountBuilderBase clone() throws CloneNotSupportedException {
+            CountBuilderBase other = (CountBuilderBase) super.clone();
+            other.value = (Value) org.gvsig.tools.lang.Cloneable.cloneQuietly(value);
+            return other;
+        }
+        
+        @Override
+        public CountBuilder all() {
+            this.all = true;
+            return this;
+        }
+
+        @Override
+        public CountBuilder column(Value value) {
+            this.value = value;
+            return this;
+        }
+
+        @Override
+        public CountBuilder distinct() {
+            this.distinct = true;
+            return this;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            if (this.all) {
+                return "COUNT(*)";
+            }
+            if (this.distinct) {
+                return MessageFormat.format(
+                        "COUNT(DISTINCT {0})",
+                        value.toString(formatter)
+                );
+            }
+            return MessageFormat.format(
+                    "COUNT({0})",
+                    value.toString(formatter)
+            );
+        }
+
+    }
+
+    protected class JoinBase 
+            extends AbstractStatementPart
+            implements StatementPart 
+        {
+        protected String type;
+        protected TableNameBuilder table;
+        protected Value expression;
+        
+        public JoinBase(String type, TableNameBuilder table, Value expression) {
+            this.type = type;
+            this.table = table;
+            this.expression = expression;
+        }
+        
+        @Override
+        public JoinBase clone() throws CloneNotSupportedException {
+            JoinBase other = (JoinBase) super.clone();
+            other.table = (TableNameBuilder) org.gvsig.tools.lang.Cloneable.cloneQuietly(table);
+            other.expression = (Value) org.gvsig.tools.lang.Cloneable.cloneQuietly(expression);
+            return other;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            // INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
+            builder.append(this.type.toUpperCase());
+            builder.append(" JOIN ");
+            builder.append(this.table.toString(formatter));
+            builder.append(" ON ");
+            builder.append(this.expression.toString(formatter));
+            return builder.toString();
+        }
+        
+        
+    }
+    
+    public class FromBuilderBase
+            extends AbstractStatementPart
+            implements FromBuilder {
+
+        protected TableNameBuilder tableName;
+        protected String subquery;
+        protected String passthrough;
+        protected List<JoinBase> joins;
+
+        public FromBuilderBase() {
+            this.tableName = null;
+            this.subquery = null;
+            this.passthrough = null;
+            this.joins = null;
+        }
+        
+        @Override
+        public FromBuilderBase clone() throws CloneNotSupportedException {
+            FromBuilderBase other = (FromBuilderBase) super.clone();
+            other.tableName = (TableNameBuilder) org.gvsig.tools.lang.Cloneable.cloneQuietly(tableName);
+            if (joins!=null) {
+                for (int i = 0; i < joins.size(); i++) {
+                    other.joins.set(i, (JoinBase) joins.get(i).clone());
+                }
+            }
+            return other;
+        }
+
+        @Override
+        public FromBuilder left_join(TableNameBuilder table, Value expression) {
+            JoinBase join = createJoin("LEFT", table, expression);
+            if( this.joins==null ) {
+                this.joins = new ArrayList<>();
+            }
+            this.joins.add(join);
+            return this;
+        }
+        
+        @Override
+        public TableNameBuilder table() {
+            if (tableName == null) {
+                this.tableName = createTableNameBuilder();
+            }
+            return this.tableName;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.tableName != null) {
+                this.tableName.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public FromBuilder custom(String passthrough) {
+            this.passthrough = passthrough;
+            return this;
+        }
+
+        @Override
+        public FromBuilder subquery(String subquery) {
+            this.subquery = subquery;
+            return this;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            if (!StringUtils.isEmpty(passthrough)) {
+                return passthrough;
+            }
+            if (!StringUtils.isEmpty(subquery)) {
+                return "( " + this.subquery + ") as _subquery_alias_ ";
+            }
+            if( this.joins==null || this.joins.isEmpty() ) {
+                return this.tableName.toString(formatter);
+            }
+            StringBuilder builder = new StringBuilder();
+            builder.append(this.tableName.toString(formatter));
+            for (JoinBase join : this.joins) {
+                builder.append(" ");
+                builder.append(join.toString(formatter));
+            }
+            return builder.toString();
+        }
+
+    }
+
+    public class SelectColumnBuilderBase
+            extends AbstractStatementPart
+            implements SelectColumnBuilder {
+
+        protected Variable name = null;
+        protected String alias = null;
+        protected Value value = null;
+        protected boolean asGeometry = false;
+        protected TableNameBuilder table;
+        
+        @Override
+        public SelectColumnBuilderBase clone() throws CloneNotSupportedException {
+            SelectColumnBuilderBase other = (SelectColumnBuilderBase) super.clone();
+            other.value = (Value) org.gvsig.tools.lang.Cloneable.cloneQuietly(value);
+            other.name = (Variable) org.gvsig.tools.lang.Cloneable.cloneQuietly(name);
+            other.table = (TableNameBuilder) org.gvsig.tools.lang.Cloneable.cloneQuietly(table);
+            return other;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.name != null) {
+                this.name.accept(visitor, filter);
+            }
+            if (this.value != null) {
+                this.value.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public void replace(Value target, Value replacement) {
+            if (this.name!=null ) {
+                if( this.name == target) {
+                    this.name = (Variable) replacement;
+                }
+            }
+            if( this.value!=null ) {
+                if (this.value == target) {
+                    this.value = replacement;
+                } else {
+                    this.value.replace(target, replacement);
+                }
+            }
+        }
+
+        @Override
+        public SelectColumnBuilder name(String name) {
+            return this.name(null, name);
+        }
+
+        @Override
+        public SelectColumnBuilder name(TableNameBuilder table, String name) {
+            String quote = quote_for_identifiers();
+            if (name.startsWith(quote)) {
+                // Remove quotes
+                name = name.substring(1, name.length() - 1);
+            }
+            this.name = expression().variable(name);
+            this.table = table;
+            this.value = null;
+            this.asGeometry = false;
+            return this;
+        }
+
+        @Override
+        public SelectColumnBuilder all() {
+            this.name = null;
+            this.value = expression().custom("*");
+            this.asGeometry = false;
+            return this;
+        }
+
+        @Override
+        public SelectColumnBuilder as_geometry() {
+            this.asGeometry = true;
+            return this;
+        }
+
+        @Override
+        public SelectColumnBuilder value(Value value) {
+            this.value = value;
+            this.name = null;
+            return this;
+        }
+
+        @Override
+        public SelectColumnBuilder as(String alias) {
+            this.alias = alias;
+            return this;
+        }
+
+        @Override
+        public String getName() {
+            if (this.name==null) {
+                return null;
+            }
+            return this.name.name();
+        }
+
+        @Override
+        public String getAlias() {
+            return this.alias;
+        }
+
+        @Override
+        public String getValue() {
+            return this.alias;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            if (this.asGeometry) {
+                builder.append(expression().ST_AsBinary(this.name).toString(formatter));
+            } else {
+                if (this.name != null) {
+                    if( this.table==null ) {
+                        builder.append(this.name.toString(formatter));
+                    } else {
+                        builder.append(this.table.toString(formatter));
+                        builder.append(".");
+                        builder.append(this.name.toString(formatter));
+                    }
+                } else {
+                    builder.append(this.value.toString(formatter));
+                }
+            }
+            if (this.alias != null) {
+                builder.append(" AS ");
+                builder.append(as_identifier(this.alias));
+            }
+            return builder.toString();
+        }
+        public boolean isGeometry() {
+            return this.asGeometry;
+        }
+        
+        public TableNameBuilder getTable() {
+            return this.table;
+        }
+    }
+
+    public class OrderByBuilderBase
+            extends AbstractStatementPart
+            implements OrderByBuilder {
+
+        protected Value value;
+        protected String custom;
+        protected boolean ascending;
+
+        public OrderByBuilderBase() {
+            this.ascending = true;
+        }
+        
+        @Override
+        public OrderByBuilderBase clone() throws CloneNotSupportedException {
+            OrderByBuilderBase other = (OrderByBuilderBase) super.clone();
+            other.value = (Value) org.gvsig.tools.lang.Cloneable.cloneQuietly(value);
+            return other;
+        }
+        
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.value!=null) {
+                this.value.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public OrderByBuilder column(String name) {
+            this.value = expression().variable(name);
+            return this;
+        }
+        
+        @Override
+        public boolean isColumn(String name) {
+            if(this.value instanceof ExpressionBuilder.Variable){
+                return StringUtils.equalsIgnoreCase(((ExpressionBuilder.Variable)this.value).name(), name);
+            }
+            return false;
+        }
+        
+        @Override
+        public boolean isColumn(Value value) {
+            if(value instanceof ExpressionBuilder.Variable){
+                return isColumn(((ExpressionBuilder.Variable)value).name());
+            }
+            return this.value == value;
+        }
+        
+        @Override
+        public OrderByBuilder value(Value expression) {
+            this.value = expression;
+            return this;
+        }
+        
+        @Override
+        public OrderByBuilder custom(String order) {
+            this.custom = order;
+            return this;
+        }
+
+        @Override
+        public OrderByBuilder ascending() {
+            this.ascending = true;
+            return this;
+        }
+
+        @Override
+        public OrderByBuilder ascending(boolean asc) {
+            this.ascending = asc;
+            return this;
+        }
+
+        @Override
+        public OrderByBuilder descending() {
+            this.ascending = false;
+            return this;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            if (!StringUtils.isEmpty(this.custom)) {
+                return this.custom;
+            }
+            if (this.ascending) {
+                return this.value.toString(formatter) + " ASC NULLS LAST";
+            }
+            return this.value.toString(formatter) + " DESC NULLS FIRST";
+        }
+    }
+
+    public class SelectBuilderBase
+            extends AbstractStatement
+            implements SelectBuilder {
+
+        protected FromBuilder from;
+        protected GeometryExpressionBuilder where;
+        protected long limit = -1;
+        protected long offset = -1;
+        protected List<SelectColumnBuilder> columns;
+        protected List<OrderByBuilder> order_by;
+        protected boolean distinct;
+        protected List<Value> groupColumn;
+        protected boolean check_order_and_offset = true;
+
+        public SelectBuilderBase() {
+            this.columns = new ArrayList<>();
+            this.distinct = false;
+        }
+        @Override
+        public List<Value> getGroups() {
+            return this.groupColumn;
+        }
+        
+        public List<SelectColumnBuilder> getColumns() {
+            return Collections.unmodifiableList(this.columns);
+    }
+        
+        public void remove_column(String columnName) {
+            SelectColumnBuilder found = null;
+            for (SelectColumnBuilder column : columns) {
+                if(column.getAlias().equalsIgnoreCase(columnName)) {
+                    found = column;
+                    break;
+                }
+                    
+            }
+            if(found!=null) {
+                columns.remove(found);
+            }
+        }
+
+        @Override
+        public SelectBuilder group_by(Value... columns) {
+            if( this.groupColumn==null ) {
+                this.groupColumn = new ArrayList<>();
+            }
+            for (Value column : columns) {
+                this.groupColumn.add(column);
+            }
+            return this;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            for (SelectColumnBuilder column : columns) {
+                column.accept(visitor, filter);
+            }
+            if (this.has_from()) {
+                this.from.accept(visitor, filter);
+            }
+            if (this.has_where()) {
+                this.where.accept(visitor, filter);
+            }
+            if (this.has_order_by()) {
+                for (OrderByBuilder order : order_by) {
+                    order.accept(visitor, filter);
+                }
+            }
+            if (this.has_group_by()) {
+                for (Value group : groupColumn) {
+                    group.accept(visitor, filter);
+                }
+            }
+        }
+
+        @Override
+        public void replace(Value target, Value replacement) {
+            if( this.columns!=null ) {
+                for (int i = 0; i < columns.size(); i++) {
+                    SelectColumnBuilder column = columns.get(i);
+                    if( column == target ) {
+                        columns.set(i, (SelectColumnBuilder) replacement);
+                    } else {
+                        column.replace(target, replacement);
+                    }
+                }
+            }
+            if (this.has_from()) {
+                if( this.from == target ) {
+                    this.from = (FromBuilder) replacement;
+                } else {
+                    this.from.replace(target, replacement);
+                }
+            }
+            if (this.has_where()) {
+                if( this.where == target ) {
+                    this.where = (GeometryExpressionBuilder) replacement;
+                } else if( this.where.value() == target ) {
+                    this.where.value(replacement);
+                } else {
+                    this.where.value().replace(target, replacement);
+                }
+            }
+            if (this.has_order_by()) {
+                for (int i = 0; i < order_by.size(); i++) {
+                    OrderByBuilder order = order_by.get(i);
+                    if( order == target ) {
+                        order_by.set(i, (OrderByBuilder) replacement);
+                    } else {
+                        order.replace(target, replacement);
+                    }
+                }
+            }
+            if (this.has_group_by()) {
+                for (int i = 0; i < groupColumn.size(); i++) {
+                    Value group = groupColumn.get(i);
+                    if( group == target ) {
+                        groupColumn.set(i, replacement);
+                    } else {
+                        group.replace(target, replacement);
+                    }
+                }
+            }
+        }
+
+        @Override
+        public SelectBuilder distinct() {
+            this.distinct = true;
+            return this;
+        }
+
+        @Override
+        public SelectColumnBuilder column() {
+            SelectColumnBuilder builder = createSelectColumnBuilder();
+            this.columns.add(builder);
+            return builder;
+        }
+
+        @Override
+        public SelectBuilder remove_all_columns() {
+            this.columns = new ArrayList<>();
+            return this;
+        }
+        
+        @Override
+        public boolean has_column(String name) {
+            for (SelectColumnBuilder column : columns) {
+                if (StringUtils.equals(name, column.getName())) {
+                    return true;
+                }
+                if (StringUtils.equals(name, column.getAlias())) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public FromBuilder from() {
+            if (this.from == null) {
+                this.from = createFromBuilder();
+            }
+            return this.from;
+        }
+
+        @Override
+        public boolean has_from() {
+            return this.from != null;
+        }
+
+        @Override
+        public GeometryExpressionBuilder where() {
+            if (this.where == null) {
+                this.where = createExpressionBuilder();
+            }
+            return this.where;
+        }
+
+        @Override
+        public boolean has_where() {
+            if (this.where == null) {
+                return false;
+            }
+            return this.where.value() != null;
+        }
+
+        @Override
+        public SelectBuilder limit(long limit) {
+            this.limit = limit;
+            return this;
+        }
+
+        @Override
+        public SelectBuilder limit(Long limit) {
+            if (limit == null) {
+                this.limit = 0;
+            } else {
+                this.limit = limit;
+            }
+            return this;
+        }
+
+        @Override
+        public boolean has_limit() {
+            return this.limit > 0;
+        }
+
+        @Override
+        public SelectBuilder offset(long offset) {
+            this.offset = offset;
+            return this;
+        }
+
+        @Override
+        public boolean has_offset() {
+            return this.offset > 0;
+        }
+
+        @Override
+        public OrderByBuilder order_by() {
+            if (this.order_by == null) {
+                this.order_by = new ArrayList<>();
+            }
+            OrderByBuilder order = createOrderByBuilder();
+            this.order_by.add(order);
+            return order;
+        }
+        
+        public OrderByBuilder getOrderBy(Value column) {
+            if(this.order_by == null){
+                return null;
+            }
+            for (OrderByBuilder orderByBuilder : this.order_by) {
+                if(orderByBuilder.isColumn(column)){
+                    return orderByBuilder;
+                }
+            }
+            return null;
+        }
+        
+        public OrderByBuilder getOrderBy(String column) {
+            if(this.order_by == null){
+                return null;
+            }
+            for (OrderByBuilder orderByBuilder : this.order_by) {
+                if(orderByBuilder.isColumn(column)){
+                    return orderByBuilder;
+                }
+            }
+            return null;
+        }
+
+        @Override
+        public boolean has_order_by() {
+            if (this.order_by == null) {
+                return false;
+            }
+            return !this.order_by.isEmpty();
+        }
+        
+        @Override
+        public boolean has_group_by() {
+            if (this.groupColumn == null) {
+                return false;
+            }
+            return !this.groupColumn.isEmpty();
+        }
+        
+        @Override
+        public void disable_check_order_and_offset() {
+          this.check_order_and_offset = false;
+        }
+        
+        protected boolean isValid(StringBuilder message) {
+            if (message == null) {
+                message = new StringBuilder();
+            }
+            if( this.check_order_and_offset ) {
+              if (this.has_offset() && !this.has_order_by()) {
+                  // Algunos gestores de BBDD requieren que se especifique un
+                  // orden para poder usar OFFSET. Como eso parece buena idea para
+                  // asegurar que siempre tengamos los mismo resultados, lo exigimos
+                  // siempre.
+                  message.append("Can't use OFFSET without an ORDER BY.");
+                  return false;
+              }
+            }
+            return true;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            if (!this.isValid(builder)) {
+                throw new IllegalStateException(builder.toString());
+            }
+            builder.append("SELECT ");
+            if (this.distinct) {
+                builder.append("DISTINCT ");
+            }
+            boolean first = true;
+            for (SelectColumnBuilder column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(column.toString(formatter));
+            }
+
+            if (this.has_from()) {
+                builder.append(" FROM ");
+                builder.append(this.from.toString(formatter));
+            }
+            if (this.has_where()) {
+                builder.append(" WHERE ");
+                builder.append(this.where.toString(formatter));
+            }
+            if( this.has_group_by() ) {
+                builder.append(" GROUP BY ");
+                builder.append(this.groupColumn.get(0).toString(formatter));
+                for (int i = 1; i < groupColumn.size(); i++) {
+                    builder.append(", ");
+                    builder.append(this.groupColumn.get(i).toString(formatter));
+                }
+            }
+            if (this.has_order_by()) {
+                builder.append(" ORDER BY ");
+                first = true;
+                for (OrderByBuilder item : this.order_by) {
+                    if (first) {
+                        first = false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(item.toString(formatter));
+                }
+            }
+
+            if (this.has_limit()) {
+                builder.append(" LIMIT ");
+                builder.append(this.limit);
+            }
+            if (this.has_offset()) {
+                builder.append(" OFFSET ");
+                builder.append(this.offset);
+            }
+            return builder.toString();
+
+        }
+    }
+
+    public class DropTableBuilderBase
+            extends AbstractStatement
+            implements DropTableBuilder {
+
+        protected TableNameBuilder table;
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            this.table.accept(visitor, filter);
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+
+            sqls.add(
+                    MessageFormat.format(
+                            STMT_DROP_TABLE_table,
+                            this.table.toString(formatter)
+                    )
+            );
+            String sql;
+            if (!StringUtils.isBlank(STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table)) {
+                if (this.table.has_schema()) {
+                    sql = MessageFormat.format(
+                            STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table,
+                            as_string(this.table.getSchema()),
+                            as_string(this.table.getName())
+                    );
+                } else {
+                    sql = MessageFormat.format(
+                            STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_table,
+                            as_identifier(this.table.getName())
+                    );
+                }
+                if (!StringUtils.isEmpty(sql)) {
+                    sqls.add(sql);
+                }
+            }
+            return sqls;
+        }
+    }
+
+    public class GrantRoleBuilderBase
+            extends AbstractStatementPart
+            implements GrantRoleBuilder {
+
+        protected TableNameBuilder table;
+        protected String role;
+        protected Set<Privilege> privileges;
+
+        public GrantRoleBuilderBase(TableNameBuilder table, String role) {
+            this.table = table;
+            this.role = role;
+            this.privileges = new HashSet<>();
+        }
+        
+        @Override
+        public GrantRoleBuilderBase clone() throws CloneNotSupportedException {
+            GrantRoleBuilderBase other = (GrantRoleBuilderBase) super.clone();
+            other.table = (TableNameBuilder) org.gvsig.tools.lang.Cloneable.cloneQuietly(table);
+            other.privileges = (Set<Privilege>) org.gvsig.tools.lang.Cloneable.cloneQuietly(privileges);
+            
+            return other;
+        }
+
+        @Override
+        public GrantRoleBuilder privilege(Privilege privilege) {
+            privileges.add(privilege);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder select() {
+            privileges.add(Privilege.SELECT);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder update() {
+            privileges.add(Privilege.UPDATE);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder insert() {
+            privileges.add(Privilege.INSERT);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder delete() {
+            privileges.add(Privilege.DELETE);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder truncate() {
+            privileges.add(Privilege.TRUNCATE);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder reference() {
+            privileges.add(Privilege.REFERENCE);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder trigger() {
+            privileges.add(Privilege.TRIGGER);
+            return this;
+        }
+
+        @Override
+        public GrantRoleBuilder all() {
+            privileges.add(Privilege.ALL);
+            return this;
+        }
+
+        protected String getPrivilegeName(Privilege privilege) {
+            switch (privilege) {
+                case DELETE:
+                    return "DELETE";
+                case INSERT:
+                    return "INSERT";
+                case REFERENCE:
+                    return "REFERENCE";
+                case SELECT:
+                    return "SELECT";
+                case TRIGGER:
+                    return "TRIGGER";
+                case TRUNCATE:
+                    return "TRUNCATE";
+                case UPDATE:
+                    return "UPDATE";
+                case ALL:
+                default:
+                    return "ALL";
+            }
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (Privilege privilege : privileges) {
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(this.getPrivilegeName(privilege));
+            }
+            String sql = MessageFormat.format(
+                    STMT_GRANT_privileges_ON_table_TO_role,
+                    builder.toString(),
+                    table.toString(formatter),
+                    role
+            );
+            return sql;
+        }
+    }
+
+    public class GrantBuilderBase
+            extends AbstractStatement
+            implements GrantBuilder {
+
+        protected TableNameBuilder table;
+        protected Map<String, GrantRoleBuilder> roles;
+
+        public GrantBuilderBase() {
+            this.roles = new HashMap<>();
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public GrantRoleBuilder role(String role) {
+            GrantRoleBuilder roleBuilder = this.roles.get(role);
+            if (roleBuilder == null) {
+                roleBuilder = createGrantRoleBuilder(this.table(), role);
+                this.roles.put(role, roleBuilder);
+            }
+            return roleBuilder;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+            for (GrantRoleBuilder role : roles.values()) {
+                sqls.add(role.toString(formatter));
+            }
+            return sqls;
+        }
+    }
+
+    public class UpdateColumnBuilderBase
+            extends InsertColumnBuilderBase
+            implements UpdateColumnBuilder {
+
+        public UpdateColumnBuilderBase() {
+            super();
+        }
+
+        @Override
+        public UpdateColumnBuilder name(String name) {
+            return (UpdateColumnBuilder) super.name(name);
+        }
+
+        @Override
+        public UpdateColumnBuilder with_value(Value value) {
+            return (UpdateColumnBuilder) super.with_value(value);
+        }
+
+    }
+
+    public class UpdateBuilderBase
+            extends AbstractStatement
+            implements UpdateBuilder {
+
+        protected GeometryExpressionBuilder where;
+        protected List<UpdateColumnBuilder> columns;
+        protected TableNameBuilder table;
+
+        public UpdateBuilderBase() {
+            this.columns = new ArrayList<>();
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+            for (UpdateColumnBuilder column : columns) {
+                column.accept(visitor, filter);
+            }
+            if (this.has_where()) {
+                this.where.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public GeometryExpressionBuilder where() {
+            if (this.where == null) {
+                this.where = createExpressionBuilder();
+            }
+            return this.where;
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public UpdateColumnBuilder column() {
+            UpdateColumnBuilder column = createUpdateColumnBuilder();
+            this.columns.add(column);
+            return column;
+        }
+
+        @Override
+        public boolean has_where() {
+            return this.where != null;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            /*
+             * UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression |
+             * DEFAULT } | ( column [, ...] ) = ( { expression | DEFAULT } [, ...] )
+             * } [, ...] [ FROM fromlist ] [ WHERE condition ] [ RETURNING * |
+             * output_expression [ AS output_name ] [, ...] ]
+             */
+            StringBuilder columnsAndValues = new StringBuilder();
+
+            boolean first = true;
+            for (UpdateColumnBuilder column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    columnsAndValues.append(", ");
+                }
+                columnsAndValues.append(as_identifier(column.getName()));
+                columnsAndValues.append(" = ");
+                columnsAndValues.append(column.getValue().toString(formatter));
+            }
+
+            String sql;
+            if (this.has_where()) {
+                sql = MessageFormat.format(
+                        STMT_UPDATE_table_SET_columnsAndValues_WHERE_expresion,
+                        this.table.toString(formatter),
+                        columnsAndValues.toString(),
+                        this.where.toString(formatter)
+                );
+            } else {
+                sql = MessageFormat.format(
+                        STMT_UPDATE_table_SET_columnsAndValues,
+                        this.table.toString(formatter),
+                        columnsAndValues.toString()
+                );
+            }
+            return sql;
+        }
+    }
+
+    public class DeleteBuilderBase
+            extends AbstractStatement
+            implements DeleteBuilder {
+
+        protected GeometryExpressionBuilder where;
+        protected TableNameBuilder table;
+
+        public DeleteBuilderBase() {
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+            if (this.has_where()) {
+                this.where.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public GeometryExpressionBuilder where() {
+            if (this.where == null) {
+                this.where = createExpressionBuilder();
+            }
+            return this.where;
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public boolean has_where() {
+            return this.where != null;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            /*
+             * DELETE FROM table_name
+             * WHERE some_column=some_value; 
+             */
+            String sql;
+            if (this.has_where()) {
+                sql = MessageFormat.format(
+                        STMT_DELETE_FROM_table_WHERE_expresion,
+                        this.table.toString(formatter),
+                        this.where.toString(formatter)
+                );
+            } else {
+                sql = MessageFormat.format(
+                        STMT_DELETE_FROM_table,
+                        this.table.toString(formatter)
+                );
+            }
+            return sql;
+        }
+    }
+
+    public class CreateIndexBuilderBase
+            extends AbstractStatement
+            implements CreateIndexBuilder {
+
+        protected boolean ifNotExist = false;
+        protected boolean isUnique = false;
+        protected String indexName;
+        protected boolean isSpatial = false;
+        protected TableNameBuilder table;
+        protected final List<String> columns;
+
+        public CreateIndexBuilderBase() {
+            this.columns = new ArrayList<>();
+        }
+
+        @Override
+        public CreateIndexBuilder unique() {
+            this.isUnique = true;
+            return this;
+        }
+
+        @Override
+        public CreateIndexBuilder if_not_exist() {
+            this.ifNotExist = true;
+            return this;
+        }
+
+        @Override
+        public CreateIndexBuilder name(String name) {
+            this.indexName = name;
+            return this;
+        }
+
+        @Override
+        public CreateIndexBuilder name(String tableName, String columnName) {
+            this.indexName = tableName + "_IDX_" + columnName;
+            return this;
+        }
+
+        @Override
+        public CreateIndexBuilder spatial() {
+            this.isSpatial = true;
+            return this;
+        }
+
+        @Override
+        public CreateIndexBuilder column(String name) {
+            this.columns.add(name);
+            return this;
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("CREATE ");
+            if (this.isUnique) {
+                builder.append("UNIQUE ");
+            }
+            builder.append("INDEX ");
+            if (this.ifNotExist) {
+                builder.append("IF NOT EXISTS ");
+            }
+            builder.append(as_identifier(this.indexName));
+            builder.append(" ON ");
+            builder.append(this.table.toString(formatter));
+            if (this.isSpatial) {
+                builder.append(" USING GIST ");
+            }
+            builder.append(" ( ");
+            boolean is_first_column = true;
+            for (String column : this.columns) {
+                if (is_first_column) {
+                    is_first_column = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(column);
+            }
+            builder.append(" )");
+
+            List<String> sqls = new ArrayList<>();
+            sqls.add(builder.toString());
+            return sqls;
+        }
+
+    }
+
+    public class DropIndexBuilderBase
+            extends AbstractStatement
+            implements DropIndexBuilder {
+
+        protected boolean ifNotExist = false;
+        protected String indexName;
+
+        public DropIndexBuilderBase() {
+        }
+
+        @Override
+        public DropIndexBuilder if_not_exist() {
+            this.ifNotExist = true;
+            return this;
+        }
+
+        @Override
+        public DropIndexBuilder name(String name) {
+            this.indexName = name;
+            return this;
+        }
+
+        @Override
+        public DropIndexBuilder name(String tableName, String columnName) {
+            this.indexName = tableName + "_IDX_" + columnName;
+            return this;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("DROP INDEX ");
+            if (this.ifNotExist) {
+                builder.append("IF NOT EXISTS ");
+            }
+            builder.append(as_identifier(this.indexName));
+            List<String> sqls = new ArrayList<>();
+            sqls.add(builder.toString());
+            return sqls;
+        }
+
+    }
+
+    public class AlterTableBuilderBase
+            extends AbstractStatement
+            implements AlterTableBuilder {
+
+        protected TableNameBuilder table;
+        protected List<String> drops;
+        protected List<ColumnDescriptor> adds;
+        protected List<ColumnDescriptor> alters;
+        protected List<Pair<String, String>> renames;
+        protected String drop_primary_key_column;
+
+        public AlterTableBuilderBase() {
+            this.drops = new ArrayList<>();
+            this.adds = new ArrayList<>();
+            this.alters = new ArrayList<>();
+            this.renames = new ArrayList<>();
+        }
+
+        @Override
+        public boolean isEmpty() {
+            return this.drops.isEmpty()
+                    && this.adds.isEmpty()
+                    && this.alters.isEmpty()
+                    && this.renames.isEmpty();
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public AlterTableBuilder drop_column(String columnName) {
+            this.drops.add(columnName);
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder drop_primary_key(String columnName) {
+            this.drop_primary_key_column = columnName;
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder add_column(FeatureAttributeDescriptor fad) {
+            this.adds.add(new ColumnDescriptorBase(fad));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder add_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue) {
+            if (isPk || isAutomatic) {
+                allowNulls = false;
+            }
+            this.adds.add(new ColumnDescriptorBase(columnName, type, size, precision, scale, isPk, isIndexed, allowNulls, isAutomatic, defaultValue));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder add_geometry_column(String columnName, int type, int subtype, IProjection proj, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.adds.add(new ColumnDescriptorBase(columnName, type, subtype, proj, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder add_geometry_column(String columnName, int type, int subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.adds.add(new ColumnDescriptorBase(columnName, type, subtype, srsdbcode, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder alter_column(FeatureAttributeDescriptor fad) {
+            this.alters.add(new ColumnDescriptorBase(fad));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder alter_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue) {
+            if (isPk || isAutomatic) {
+                allowNulls = false;
+            }
+            this.alters.add(new ColumnDescriptorBase(columnName, type, size, precision, scale, isPk, isIndexed, allowNulls, isAutomatic, defaultValue));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder alter_geometry_column(String columnName, int type, int subtype, IProjection proj, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.alters.add(new ColumnDescriptorBase(columnName, type, subtype, proj, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder alter_geometry_column(String columnName, int type, int subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.alters.add(new ColumnDescriptorBase(columnName, type, subtype, srsdbcode, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public AlterTableBuilder rename_column(String source, String target) {
+            this.renames.add(new ImmutablePair(source, target));
+            return this;
+        }
+
+        protected String getConstrainName(String constrainType, String columnName) {
+            // String constraint_name = "CSTR_" + this.table().getName() + "_" + constrainType + "_" + columnName;
+            String constraint_name = this.table().getName() + "_" + constrainType + "_" + columnName;
+            return constraint_name;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+            if (this.isEmpty()) {
+                return sqls;
+            }
+            for (String column : drops) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" DROP COLUMN IF EXISTS ");
+                builder.append(as_identifier(column));
+                sqls.add(builder.toString());
+            }
+            for (ColumnDescriptor column : adds) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" ADD COLUMN ");
+                builder.append(as_identifier(column.getName()));
+                builder.append(" ");
+                if (column.getType() == DataTypes.INT && column.isAutomatic()) {
+                    builder.append(" SERIAL");
+                } else {
+                    builder.append(
+                            sqltype(
+                                    column.getType(),
+                                    column.getSize(),
+                                    column.getPrecision(),
+                                    column.getScale(),
+                                    column.getGeometryType(),
+                                    column.getGeometrySubtype()
+                            )
+                    );
+                }
+                if (column.getDefaultValue() == null) {
+                    if (column.allowNulls()) {
+                        builder.append(" DEFAULT NULL");
+                    }
+                } else {
+                    builder.append(" DEFAULT '");
+                    builder.append(Objects.toString(column.getDefaultValue(),""));
+                    builder.append("'");
+                }
+                if (column.allowNulls()) {
+                    builder.append(" NULL");
+                } else {
+                    builder.append(" NOT NULL");
+                }
+                if (column.isPrimaryKey()) {
+                    builder.append(" PRIMARY KEY");
+                }
+                sqls.add(builder.toString());
+            }
+            for (ColumnDescriptor column : alters) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" ALTER COLUMN ");
+                builder.append(as_identifier(column.getName()));
+                builder.append(" SET DATA TYPE ");
+                if (column.getType() == DataTypes.INT && column.isAutomatic()) {
+                    builder.append(" SERIAL");
+                } else {
+                    builder.append(
+                            sqltype(
+                                    column.getType(),
+                                    column.getSize(),
+                                    column.getPrecision(),
+                                    column.getScale(),
+                                    column.getGeometryType(),
+                                    column.getGeometrySubtype()
+                            )
+                    );
+                }
+                if (column.getDefaultValue() == null) {
+                    if (column.allowNulls()) {
+                        builder.append(" DEFAULT NULL");
+                    } else {
+                        builder.append(" DROP DEFAULT");
+                    }
+                } else {
+                    builder.append(" DEFAULT '");
+                    builder.append(column.getDefaultValue().toString());
+                    builder.append("'");
+                }
+                sqls.add(builder.toString());
+            }
+            for (Pair<String, String> pair : renames) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" RENAME COLUMN ");
+                builder.append(as_identifier(pair.getLeft()));
+                builder.append(" TO ");
+                builder.append(as_identifier(pair.getRight()));
+                sqls.add(builder.toString());
+            }
+            return sqls;
+        }
+
+    }
+
+    public class CreateTableBuilderBase
+            extends AbstractStatement
+            implements CreateTableBuilder {
+
+        protected TableNameBuilder table;
+        protected List<ColumnDescriptor> columns;
+
+        public CreateTableBuilderBase() {
+            this.columns = new ArrayList<>();
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public CreateTableBuilderBase add_column(FeatureAttributeDescriptor fad) {
+            this.columns.add(new ColumnDescriptorBase(fad));
+            return this;
+        }
+
+        @Override
+        public CreateTableBuilderBase add_column(String columnName, int type, int size, int precision, int scale, boolean isPk, boolean isIndexed, boolean allowNulls, boolean isAutomatic, Object defaultValue) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            if (isPk || isAutomatic) {
+                allowNulls = false;
+            }
+            this.columns.add(new ColumnDescriptorBase(columnName, type, size, precision, scale, isPk, isIndexed, allowNulls, isAutomatic, defaultValue));
+            return this;
+        }
+
+        @Override
+        public CreateTableBuilder add_geometry_column(String columnName, int type, int subtype, IProjection proj, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.columns.add(new ColumnDescriptorBase(columnName, type, subtype, proj, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public CreateTableBuilder add_geometry_column(String columnName, int type, int subtype, Object srsdbcode, boolean isIndexed, boolean allowNulls) {
+            if (StringUtils.isEmpty(columnName)) {
+                throw new IllegalArgumentException("Argument 'columnName' can't be empty.");
+            }
+            this.columns.add(new ColumnDescriptorBase(columnName, type, subtype, srsdbcode, isIndexed, allowNulls));
+            return this;
+        }
+
+        @Override
+        public ColumnDescriptor getColumnDescriptor(String columnName) {
+            if (StringUtils.isEmpty(columnName)) {
+                return null;
+            }
+            for (ColumnDescriptor column : columns) {
+                if (columnName.equals(column.getName())) {
+                    return column;
+                }
+            }
+            return null;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+            /**
+             * 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 ]
+             */
+            StringBuilder builder = new StringBuilder();
+
+            builder.append("CREATE TABLE ");
+            builder.append(this.table.toString(formatter));
+            builder.append(" (");
+            boolean first = true;
+            for (ColumnDescriptor column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(as_identifier(column.getName()));
+                builder.append(" ");
+                if (column.isAutomatic() && column.getType() == DataTypes.INT) {
+                    builder.append("SERIAL");
+                } else if (column.isAutomatic() && column.getType() == DataTypes.LONG) {
+                    builder.append("BIGSERIAL");
+                } else {
+                    builder.append(sqltype(
+                            column.getType(),
+                            column.getSize(),
+                            column.getPrecision(),
+                            column.getScale(),
+                            column.getGeometryType(),
+                            column.getGeometrySubtype()
+                    )
+                    );
+                }
+                if (column.getDefaultValue() == null) {
+                    if (column.allowNulls()) {
+                        builder.append(" DEFAULT NULL");
+                    }
+                } else {
+                    builder.append(" DEFAULT '");
+                    builder.append(Objects.toString(column.getDefaultValue(),""));
+                    builder.append("'");
+                }
+                if (column.allowNulls()) {
+                    builder.append(" NULL");
+                } else {
+                    builder.append(" NOT NULL");
+                }
+                if (column.isPrimaryKey()) {
+                    builder.append(" PRIMARY KEY");
+                }
+            }
+            builder.append(" )");
+            sqls.add(builder.toString());
+            return sqls;
+        }
+    }
+
+    public class InsertColumnBuilderBase
+            extends AbstractStatement
+            implements InsertColumnBuilder {
+
+        protected Variable name;
+        protected Value value;
+
+        public InsertColumnBuilderBase() {
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.name != null) {
+                this.name.accept(visitor, filter);
+            }
+            if (this.value != null) {
+                this.value.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public InsertColumnBuilder name(String name) {
+            this.name = expression().variable(name);
+            return this;
+        }
+
+        @Override
+        public InsertColumnBuilder with_value(Value value) {
+            this.value = value;
+            return this;
+        }
+
+        @Override
+        public String getName() {
+            return this.name.name();
+        }
+
+        @Override
+        public Value getValue() {
+            return this.value;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            return this.value.toString(formatter);
+        }
+    }
+
+    public class InsertBuilderBase
+            extends AbstractStatement
+            implements InsertBuilder {
+
+        protected List<InsertColumnBuilder> columns;
+        protected TableNameBuilder table;
+
+        public InsertBuilderBase() {
+            this.columns = new ArrayList<>();
+        }
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+            for (InsertColumnBuilder column : columns) {
+                column.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public InsertColumnBuilder column() {
+            InsertColumnBuilder column = createInsertColumnBuilder();
+            this.columns.add(column);
+            return column;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            /*
+             * INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES (
+             * { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * |
+             * output_expression [ AS output_name ] [, ...] ]
+             */
+            StringBuilder builderColumns = new StringBuilder();
+            StringBuilder builderValues = new StringBuilder();
+
+            boolean first = true;
+            for (InsertColumnBuilder column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    builderColumns.append(", ");
+                }
+                builderColumns.append(as_identifier(column.getName()));
+            }
+            first = true;
+            for (InsertColumnBuilder column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    builderValues.append(", ");
+                }
+                builderValues.append(column.toString(formatter));
+            }
+
+            String sql = MessageFormat.format(
+                    STMT_INSERT_INTO_table_columns_VALUES_values,
+                    this.table.toString(formatter),
+                    builderColumns.toString(),
+                    builderValues.toString()
+            );
+            return sql;
+
+        }
+    }
+
+    public class UpdateTableStatisticsBuilderBase
+            extends AbstractStatement
+            implements UpdateTableStatisticsBuilder {
+
+        protected TableNameBuilder table;
+
+        @Override
+        public void accept(Visitor visitor, VisitorFilter filter) {
+            if (filter==null || filter.accept(this)) {
+                visitor.visit(this);
+            }
+            if (this.table != null) {
+                this.table.accept(visitor, filter);
+            }
+        }
+
+        @Override
+        public TableNameBuilder table() {
+            if (table == null) {
+                table = createTableNameBuilder();
+            }
+            return table;
+        }
+
+        @Override
+        public String toString() {
+            return this.toString(formatter());
+        }
+
+        @Override
+        public String toString(Formatter<Value> formatter) {
+            if (formatter!=null && formatter.canApply(this)) {
+                return formatter.format(this);
+            }
+            StringBuilder builder = new StringBuilder();
+            boolean first = true;
+            for (String sql : toStrings(formatter)) {
+                if (StringUtils.isEmpty(sql)) {
+                    continue;
+                }
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append("; ");
+                }
+                builder.append(sql);
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public List<String> toStrings() {
+            return this.toStrings(formatter());
+        }
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+
+            if (!StringUtils.isBlank(STMT_UPDATE_TABLE_STATISTICS_table)) {
+                String sql = MessageFormat.format(
+                        STMT_UPDATE_TABLE_STATISTICS_table,
+                        table.toString(formatter)
+                );
+                if (!StringUtils.isEmpty(sql)) {
+                    sqls.add(sql);
+                }
+            }
+            return sqls;
+        }
+    }
+
+    protected GeometryExpressionBuilder expressionBuilder;
+
+    protected String defaultSchema;
+    protected boolean supportSchemas;
+    protected boolean hasSpatialFunctions;
+    protected GeometrySupportType geometrySupportType;
+    protected boolean allowAutomaticValues;
+
+    private static Map<Pair<Integer, Integer>, String> sqlgeometrytypes = null;
+
+    protected String constant_true = "(1=1)";
+    protected String constant_false = "(1<>1)";
+
+    protected String type_boolean = "BOOLEAN";
+    protected String type_byte = "TINYINT";
+    protected String type_bytearray = "BYTEA";
+    protected String type_geometry = "TEXT";
+    protected String type_char = "CHARACTER(1)";
+    protected String type_date = "DATE";
+    protected String type_double = "DOUBLE PRECISION"; //float con 53 bits de mantisa, float(54)
+    protected String type_decimal_ps = "NUMERIC({0,Number,##########},{1,Number,##########})";
+    protected String type_decimal_p = "NUMERIC({0,Number,##########})";
+    protected String type_float = "REAL"; //float con 24 bits de mantisa, float(24)
+    protected String type_int = "INT";
+    protected String type_long = "BIGINT";
+    protected String type_string = "TEXT";
+    protected String type_string_p = "VARCHAR({0,Number,#######})";
+    protected String type_time = "TIME";
+    protected String type_timestamp = "TIMESTAMP";
+    protected String type_version = "VARCHAR(30)";
+    protected String type_URI = "TEXT";
+    protected String type_URL = "TEXT";
+    protected String type_FILE = "TEXT";
+    protected String type_FOLDER = "TEXT";
+
+    protected String STMT_DELETE_FROM_table_WHERE_expresion = "DELETE FROM {0} WHERE {1}";
+    protected String STMT_DELETE_FROM_table = "DELETE FROM {0}";
+    protected String STMT_INSERT_INTO_table_columns_VALUES_values = "INSERT INTO {0} ( {1} ) VALUES ( {2} )";
+    protected String STMT_UPDATE_TABLE_STATISTICS_table = "VACUUM ANALYZE {0}";
+    protected String STMT_DROP_TABLE_table = "DROP TABLE {0}";
+    protected String STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table = "DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = {0} AND f_table_name = {1}";
+    protected String STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_table = "DELETE FROM GEOMETRY_COLUMNS WHERE f_table_name = {0}";
+    protected String STMT_UPDATE_table_SET_columnsAndValues_WHERE_expresion = "UPDATE {0} SET {1} WHERE {2}";
+    protected String STMT_UPDATE_table_SET_columnsAndValues = "UPDATE {0} SET {1}";
+    protected String STMT_GRANT_privileges_ON_table_TO_role = "GRANT {0} ON {1} TO {2}";
+
+    public SQLBuilderBase() {
+        this.expressionBuilder = GeometryExpressionEvaluatorLocator.getManager().createExpressionBuilder();
+
+        this.hasSpatialFunctions = false;
+        this.supportSchemas = true;
+        this.geometrySupportType = GeometrySupportType.WKT;
+
+        this.defaultSchema = "public";
+        this.allowAutomaticValues = true;
+
+    }
+    
+    @Override
+    public void setProperties(Class filter, final Object... values) {
+        this.expressionBuilder.setProperties(filter, values);
+        this.accept(new Visitor() {
+            @Override
+            public void visit(Visitable v) {
+                for (int i = 0; i < values.length; i+=2) {
+                    ((Value)v).setProperty((String) values[i], values[i+1]);
+                }
+            }
+        }, new ClassVisitorFilter(filter) );
+    }
+
+    public String quote_for_identifiers() {
+        return "\"";
+    }
+
+    public String quote_for_strings() {
+        return "'";
+    }
+
+    @Override
+    public String as_identifier(String id) {
+        String quote = this.quote_for_identifiers();
+//        No se porque no esta disponible wrapIfMissing
+//        return StringUtils.wrapIfMissing(id,quote);
+        if (id.startsWith(quote)) {
+            return id;
+        }
+        return quote + id + quote;
+
+    }
+
+    @Override
+    public String as_string(String s) {
+        String quote = this.quote_for_strings();
+//        No se porque no esta disponible wrapIfMissing
+//        return StringUtils.wrapIfMissing(id,quote);
+        if (s.startsWith(quote)) {
+            return s;
+        }
+        return quote + s + quote;
+
+    }
+
+    @Override
+    public String as_string(byte[] data) {
+        return this.expressionBuilder.bytearray_0x(data);
+//        return this.expressionBuilder.bytearray_hex(data);
+//        return this.expressionBuilder.bytearray_x(data);
+    }
+    
+    @Override
+    public String as_string(boolean value) {
+        return value? "TRUE" : "FALSE";
+    }
+
+    @Override
+    public String as_string(Number value) {
+        return Objects.toString(value);
+    }
+    
+    @Override
+    public String as_string(Object value) {
+        if( value == null ) {
+            return "NULL";
+        }
+        if( value instanceof CharSequence ) {
+            return as_string(value.toString());
+        }
+        if( value instanceof Number ) {
+            return as_string((Number)value);
+        }
+        if( value instanceof Boolean ) {
+            return as_string((boolean)value);
+        }
+        if( value instanceof byte[] ) {
+            return as_string((byte[])value);
+        }
+        throw new IllegalArgumentException("Can't support type of value '"+value.getClass().getName()+"'.");
+    }
+    
+    @Override
+    public GeometryExpressionBuilder expression() {
+        return this.expressionBuilder;
+    }
+
+    @Override
+    public boolean has_spatial_functions() {
+        return this.hasSpatialFunctions;
+    }
+
+    @Override
+    public GeometrySupportType geometry_support_type() {
+        return this.geometrySupportType;
+    }
+
+    protected GeometryExpressionBuilder createExpressionBuilder() {
+        return GeometryExpressionEvaluatorLocator.getManager().createExpressionBuilder();
+    }
+
+    @Override
+    public Object srs_id(IProjection projection) {
+        String abrev = projection.getAbrev();
+        return abrev.split(":")[1].trim();
+    }
+
+    @Override
+    public String default_schema() {
+        return this.defaultSchema;
+    }
+
+    @Override
+    public boolean support_schemas() {
+        return this.supportSchemas;
+    }
+
+    @Override
+    public String sqltype(int type, int size, int precision, int scale, int geomType, int geomSubtype) {
+        switch (type) {
+            case DataTypes.BOOLEAN:
+                return type_boolean;
+            case DataTypes.CHAR:
+                return type_char;
+
+
+            case DataTypes.BYTE:
+                return type_byte;
+            case DataTypes.INT:
+                return type_int;
+            case DataTypes.LONG:
+                return type_long;
+
+            case DataTypes.FLOAT:
+                return type_float;
+            case DataTypes.DOUBLE:
+                return type_double;
+            case DataTypes.DECIMAL:
+                if (precision < 1) {
+                    precision = DataType.DECIMAL_DEFAULT_PRECISION;
+                }
+                if (scale < 1) {
+                  return MessageFormat.format(type_decimal_p, precision);
+                }
+                return MessageFormat.format(type_decimal_ps, precision, scale);
+
+                
+            case DataTypes.STRING:
+                if (size < 0) {
+                    return type_string;
+                } else if (size < DataManager.RECOMENDED_SIZE_FOR_CLOB) {
+                    return MessageFormat.format(type_string_p, size);
+                }
+                return type_string;
+
+                
+            case DataTypes.DATE:
+                return type_date;
+            case DataTypes.TIME:
+                return type_time;
+            case DataTypes.TIMESTAMP:
+                return type_timestamp;
+
+            case DataTypes.BYTEARRAY:
+                return type_bytearray;
+
+            case DataTypes.GEOMETRY:
+                return type_geometry;
+
+            case DataTypes.VERSION:
+                return type_version;
+            case DataTypes.URI:
+                return type_URI;
+            case DataTypes.URL:
+                return type_URL;
+            case DataTypes.FILE:
+                return type_FILE;
+            case DataTypes.FOLDER:
+                return type_FOLDER;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public Object sqlgeometrytype(int type, int subtype) {
+        // Devuelve un Object por que algunos gestores de BBDD utilizan
+        // identificadores numericos para el tipo y otros strings.
+        // Por defecto vamos a devolver strings.
+        if (sqlgeometrytypes == null) {
+            sqlgeometrytypes = new HashMap<>();
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D), "POINT");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3D), "POINTZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM), "POINTM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM), "POINTZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2D), "LINESTRING");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM3D), "LINESTRINGZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2DM), "LINESTRINGM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM3DM), "LINESTRINGZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2D), "POLYGON");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM3D), "POLYGONZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2DM), "POLYGONM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM3DM), "POLYGONZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM2D), "MULTIPOINT");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM3D), "MULTIPOINTZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM2DM), "MULTIPOINTM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM3DM), "MULTIPOINTZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2D), "MULTILINESTRING");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM3D), "MULTILINESTRINGZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2DM), "MULTILINESTRINGM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM3DM), "MULTILINESTRINGZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2D), "MULTILINESTRING");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM3D), "MULTILINESTRINGZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2DM), "MULTILINESTRINGM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM3DM), "MULTILINESTRINGZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2D), "MULTIPOLYGON");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM3D), "MULTIPOLYGONZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2DM), "MULTIPOLYGONM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM3DM), "MULTIPOLYGONZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTISURFACE, Geometry.SUBTYPES.GEOM2D), "MULTIPOLYGON");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTISURFACE, Geometry.SUBTYPES.GEOM3D), "MULTIPOLYGONZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTISURFACE, Geometry.SUBTYPES.GEOM2DM), "MULTIPOLYGONM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.MULTISURFACE, Geometry.SUBTYPES.GEOM3DM), "MULTIPOLYGONZM");
+
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D), "GEOMETRY");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D), "GEOMETRYZ");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2DM), "GEOMETRYM");
+            sqlgeometrytypes.put(new ImmutablePair<>(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3DM), "GEOMETRYZM");
+        }
+        return sqlgeometrytypes.get(new ImmutablePair<>(type, subtype));
+    }
+
+    @Override
+    public Object sqlgeometrydimension(int type, int subtype) {
+        // Devuelve un Object por que algunos gestortes de BBDD utilizan
+        // identificadores numericos para las dimensiones y otros strings.
+        // Por defecto vamos a devolver enteros.
+        switch (subtype) {
+            case Geometry.SUBTYPES.GEOM3D:
+                return 3;
+            case Geometry.SUBTYPES.GEOM2DM:
+                return 3;
+            case Geometry.SUBTYPES.GEOM3DM:
+                return 4;
+            case Geometry.SUBTYPES.GEOM2D:
+            default:
+                return 2;
+        }
+    }
+
+    @Override
+    public TableNameBuilder createTableNameBuilder() {
+        return new TableNameBuilderBase();
+    }
+
+    protected SelectColumnBuilder createSelectColumnBuilder() {
+        return new SelectColumnBuilderBase();
+    }
+
+    protected UpdateColumnBuilder createUpdateColumnBuilder() {
+        return new UpdateColumnBuilderBase();
+    }
+
+    protected InsertColumnBuilder createInsertColumnBuilder() {
+        return new InsertColumnBuilderBase();
+    }
+
+    protected OrderByBuilder createOrderByBuilder() {
+        return new OrderByBuilderBase();
+    }
+
+    protected FromBuilder createFromBuilder() {
+        return new FromBuilderBase();
+    }
+
+    protected SelectBuilder createSelectBuilder() {
+        return new SelectBuilderBase();
+    }
+
+    protected UpdateBuilder createUpdateBuilder() {
+        return new UpdateBuilderBase();
+    }
+
+    protected DeleteBuilder createDeleteBuilder() {
+        return new DeleteBuilderBase();
+    }
+
+    protected GrantBuilder createGrantBuilder() {
+        return new GrantBuilderBase();
+    }
+
+    protected GrantRoleBuilder createGrantRoleBuilder(TableNameBuilder table, String role) {
+        return new GrantRoleBuilderBase(table, role);
+    }
+
+    protected DropTableBuilder createDropTableBuilder() {
+        return new DropTableBuilderBase();
+    }
+
+    protected CreateTableBuilder createCreateTableBuilder() {
+        return new CreateTableBuilderBase();
+    }
+
+    protected AlterTableBuilder createAlterTableBuilder() {
+        return new AlterTableBuilderBase();
+    }
+
+    protected InsertBuilder createInsertBuilder() {
+        return new InsertBuilderBase();
+    }
+
+    protected UpdateTableStatisticsBuilder createUpdateTableStatisticsBuilder() {
+        return new UpdateTableStatisticsBuilderBase();
+    }
+
+    protected CreateIndexBuilder createCreateIndexBuilder() {
+        return new CreateIndexBuilderBase();
+    }
+
+    protected DropIndexBuilder createDropIndexBuilder() {
+        return new DropIndexBuilderBase();
+    }
+
+    @Override
+    public SelectBuilder select() {
+        if (this.select == null) {
+            this.select = this.createSelectBuilder();
+        }
+        return this.select;
+    }
+
+    @Override
+    public UpdateBuilder update() {
+        if (this.update == null) {
+            this.update = this.createUpdateBuilder();
+        }
+        return this.update;
+    }
+
+    @Override
+    public UpdateTableStatisticsBuilder update_table_statistics() {
+        if (this.update_table_statistics == null) {
+            this.update_table_statistics = this.createUpdateTableStatisticsBuilder();
+        }
+        return this.update_table_statistics;
+    }
+
+    @Override
+    public DropTableBuilder drop_table() {
+        if (this.drop_table == null) {
+            this.drop_table = this.createDropTableBuilder();
+        }
+        return this.drop_table;
+    }
+
+    @Override
+    public CreateIndexBuilder create_index() {
+        if (this.create_index == null) {
+            this.create_index = this.createCreateIndexBuilder();
+        }
+        return this.create_index;
+    }
+
+    @Override
+    public DropIndexBuilder drop_index() {
+        if (this.drop_index == null) {
+            this.drop_index = this.createDropIndexBuilder();
+        }
+        return this.drop_index;
+    }
+
+    @Override
+    public DeleteBuilder delete() {
+        if (this.delete == null) {
+            this.delete = this.createDeleteBuilder();
+        }
+        return this.delete;
+    }
+
+    @Override
+    public InsertBuilder insert() {
+        if (this.insert == null) {
+            this.insert = this.createInsertBuilder();
+        }
+        return this.insert;
+    }
+
+    @Override
+    public TableNameBuilder table_name() {
+        if (this.table_name == null) {
+            this.table_name = this.createTableNameBuilder();
+        }
+        return this.table_name;
+    }
+
+    
+    @Override
+    public AlterTableBuilder alter_table() {
+        if (this.alter_table == null) {
+            this.alter_table = this.createAlterTableBuilder();
+        }
+        return this.alter_table;
+    }
+
+    @Override
+    public CreateTableBuilder create_table() {
+        if (this.create_table == null) {
+            this.create_table = this.createCreateTableBuilder();
+        }
+        return this.create_table;
+    }
+
+    @Override
+    public GrantBuilder grant() {
+        if (this.grant == null) {
+            this.grant = this.createGrantBuilder();
+        }
+        return this.grant;
+    }
+    
+    @Override
+    public Column column(String name) {
+        ColumnBase col = new ColumnBase(null, name);
+        return col;
+    }
+
+    @Override
+    public Column column(TableNameBuilder table, String name) {
+        ColumnBase col = new ColumnBase(table, name);
+        return col;
+    }
+    
+    protected JoinBase createJoin(String type, TableNameBuilder table, Value expression) {
+        return new JoinBase(type, table, expression);
+    }
+
+    public void accept(Visitor visitor, VisitorFilter filter) {
+        if (this.select != null) {
+            this.select.accept(visitor, filter);
+        }
+        if (this.update != null) {
+            this.update.accept(visitor, filter);
+        }
+        if (this.insert != null) {
+            this.insert.accept(visitor, filter);
+        }
+        if (this.delete != null) {
+            this.delete.accept(visitor, filter);
+        }
+        if (this.alter_table != null) {
+            this.alter_table.accept(visitor, filter);
+        }
+        if (this.create_table != null) {
+            this.create_table.accept(visitor, filter);
+        }
+        if (this.drop_table != null) {
+            this.drop_table.accept(visitor, filter);
+        }
+        if (this.table_name != null) {
+            this.table_name.accept(visitor, filter);
+        }
+    }
+
+	@Override
+    public Formatter formatter() {
+        return expression().formatter();
+    }
+
+    @Override
+    public String toString() {
+        return this.toString(formatter());
+    }
+
+    @Override
+    public String toString(Formatter formatter) {
+        if (this.select != null) {
+            return this.select.toString(formatter);
+        }
+        if (this.update != null) {
+            return this.update.toString(formatter);
+        }
+        if (this.insert != null) {
+            return this.insert.toString(formatter);
+        }
+        if (this.delete != null) {
+            return this.delete.toString(formatter);
+        }
+        if (this.alter_table != null) {
+            return this.alter_table.toString(formatter);
+        }
+        if (this.create_table != null) {
+            return this.create_table.toString(formatter);
+        }
+        if (this.drop_table != null) {
+            return this.drop_table.toString(formatter);
+        }
+        if (this.update_table_statistics != null) {
+            return this.update_table_statistics.toString(formatter);
+        }
+        if (this.create_index != null) {
+            return this.create_index.toString(formatter);
+        }
+        if (this.drop_index != null) {
+            return this.drop_index.toString(formatter);
+        }
+        if (this.table_name != null) {
+            return this.table_name.toString(formatter);
+        }
+        return "";
+    }
+
+    @Override
+    public CountBuilder count() {
+        return new CountBuilderBase();
+    }
+
+    @Override
+    public List<Parameter> parameters() {
+        final List<Parameter> params = new ArrayList<>();
+        this.accept(new Visitor() {
+            @Override
+            public void visit(Visitable value) {
+                params.add((Parameter) value);
+            }
+        }, new ClassVisitorFilter(Parameter.class));
+        return params;
+    }
+
+    @Override
+    public List<Variable> variables() {
+        final List<Variable> vars = new ArrayList<>();
+        this.accept(new Visitor() {
+            @Override
+            public void visit(Visitable value) {
+                if (!vars.contains((Variable) value)) {
+                    vars.add((Variable) value);
+                }
+            }
+        }, new ClassVisitorFilter(Variable.class));
+        return vars;
+    }
+
+    @Override
+    public List<String> parameters_names() {
+        List<String> params = new ArrayList<>();
+        for (Parameter param : parameters()) {
+            String s;
+            switch (param.type()) {
+                case PARAMETER_TYPE_CONSTANT:
+                    Object theValue = param.value();
+                    if (theValue == null) {
+                        s = "null";
+                    } else if (theValue instanceof String) {
+                        s = "'" + (String) theValue + "'";
+                    } else {
+                        s = theValue.toString();
+                    }
+                    break;
+                case PARAMETER_TYPE_VARIABLE:
+                default:
+                    s = "\"" + param.name() + "\"";
+            }
+            params.add(s);
+        }
+        return params;
+    }
+
+    @Override
+    public List<String> variables_names() {
+        List<String> vars = new ArrayList<>();
+        for (Variable var : this.variables()) {
+            vars.add(var.name());
+        }
+        Collections.sort(vars);
+        return vars;
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+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;
+	}
+    
+    @Override
+	public final DisposableIterator fastIterator() throws DataException {
+		return fastIterator(0);
+	}
+
+	public final DisposableIterator fastIterator(long index)
+			throws DataException {
+		return createFastIterator(index);
+	}
+
+    @Override
+    public final DisposableIterator fastIterator(long index, long elements) throws DataException {
+		return createFastIterator(index, elements);
+	}
+
+    @Override
+	public final DisposableIterator iterator() throws DataException {
+		return iterator(0);
+	}
+
+	public final DisposableIterator iterator(long index) throws DataException {
+		return createIterator(index);
+	}
+
+    @Override
+	public final DisposableIterator iterator(long index, long elements) throws DataException {
+		return createIterator(index, elements);
+	}
+
+	/**
+	 * 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;
+
+	protected AbstractFeatureProviderIterator createIterator(long index, long elements)
+			throws DataException {
+            return createIterator(index);
+    }
+
+    /**
+	 * 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;
+        
+	protected AbstractFeatureProviderIterator createFastIterator(
+			long index, long elements) throws DataException {
+            return createFastIterator(index);
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.feature.spi;
+
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Time;
+
+/**
+ * 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 Time getDefaultTime();
+
+  public void setDefaultEnvelope(Envelope extent);
+
+  public void setDefaultGeometry(Geometry geom);
+
+  public void setDefaultTime(Time time);
+
+  public boolean isNull(int i);
+
+  public boolean isNull(String name);
+
+  public boolean isNew();
+
+  public void setNew(boolean isNew);
+
+  public void setExtraValue(int index, Object value);
+
+  public void setExtraValueNames(String[] extraValueNames);
+
+  public Object getExtraValue(int index);
+
+  public Object getExtraValue(String name);
+
+  public boolean hasExtraValue(String name);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,624 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.io.File;
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.StoresRepository;
+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.AbstractDataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObject_v2;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract implementation of {@link FeatureStoreProvider}
+ *
+ */
+public abstract class AbstractFeatureStoreProvider extends AbstractDataStoreProvider
+		implements FeatureStoreProvider_v2 {
+
+	protected FeatureStoreProviderServices store;
+	private DelegatedDynObject metadata;
+	private DataStoreParameters parameters;
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractFeatureStoreProvider.class);
+
+
+	/**
+	 * 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;
+	}
+
+        @Override
+	public FeatureStoreProviderServices getStoreServices() {
+		return this.store;
+	}
+
+        @Override
+	public FeatureStore getFeatureStore() {
+            FeatureStoreProviderServices services = this.getStoreServices();
+            if(services == null){
+                    return null;
+            }
+            return services.getFeatureStore();
+	}
+
+        @Override
+	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 {
+            FeatureStoreProviderServices services = this.getStoreServices();
+            return services.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()
+	 */
+        @Override
+	public FeatureSelection createFeatureSelection() throws DataException {
+            FeatureStoreProviderServices services = this.getStoreServices();
+            return services.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()
+	 */
+        @Override
+	public void close() throws CloseException {
+		// Do nothing by default
+	}
+
+        @Override
+	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);
+	}
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        if( metadata instanceof DynObject_v2 ) {
+            return ((DynObject_v2)this.metadata).hasDynMethod(name);
+        }
+        return false;
+    }
+
+	public void implement(DynClass dynClass) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.implement(dynClass);
+
+	}
+
+	public Object invokeDynMethod(int code, Object[] args)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, code, args);
+	}
+
+	public Object invokeDynMethod(String name, Object[] args)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, name, args);
+	}
+
+	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();
+	}
+
+        @Override
+	public boolean supportsAppendMode() {
+		return false;
+	}
+
+        @Override
+	public UnmodifiableBasicMap<String,DataStore> getChildren() {
+		return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+	}
+
+        @Override
+        public StoresRepository getStoresRepository() {
+            return null;
+        }
+        
+        @Override
+        public ResourcesStorage getResourcesStorage() {
+            return null;
+        }
+
+	/**
+	 * unsupported by default (return null), override this otherwise
+	 *
+         * @throws org.gvsig.fmap.dal.exception.ReadException
+         * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
+	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getExplorer()
+	 */
+        @Override
+	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;
+    }
+
+    @Override
+    public ExpressionBuilder createExpression() {
+        ExpressionBuilder builder = ExpressionEvaluatorLocator.getManager().createExpressionBuilder();
+        return builder;
+    }
+
+    protected void savePrjFile(File dataFile, IProjection proj){
+        File file = new File(FilenameUtils.removeExtension(dataFile.getAbsolutePath())+".prj");
+        try {
+            String export = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
+            if(export!=null){
+                FileUtils.writeStringToFile(file, export);
+            }
+        } catch (Exception e) {
+            logger.info("Can't write prj file '" + file.getAbsolutePath() + "'.");
+        }
+    }
+
+    @Override
+    public boolean isTemporary() {
+        return false;
+    }
+
+    @Override
+    public void fixFeatureTypeFromParameters() {
+        
+    }
+
+    @Override
+    public boolean supportsPassThroughMode() {
+        return false;
+    }
+
+    @Override
+    public void passThroughInsert(FeatureProvider featureProvider) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void passThroughUpdate(FeatureProvider featureProvider) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+    
+    @Override
+    public void passThroughDelete(FeatureReferenceProviderServices featureReference) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+    
+    @Override
+    public void passThroughUpdate(Object[] parameters, Expression filter){
+        throw new UnsupportedOperationException();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature.spi;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypes;
+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.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Time;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+
+/**
+ * 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;
+    
+    private String[] extraValuesNames;
+    private Object[] extraValues;
+
+    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 DefaultFeatureProvider(FeatureType type, DefaultFeatureProvider data) {
+        this(type);
+        this.oid = data.oid;
+        this.defaultGeometry = data.defaultGeometry;
+        this.envelope = data.envelope;
+        this.isNew = data.isNew;
+    }
+
+    public boolean isReadOnly(int i) {
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(i);
+        if (attribute.getEvaluator() != null) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void set(int i, Object value) {
+        FeatureAttributeDescriptor attribute = featureType.getAttributeDescriptor(i);
+//        if (this.isReadOnly(i)) {
+//            return;
+//        }
+        if (featureType.getDefaultGeometryAttributeIndex() == i) {
+            if (value instanceof Geometry) {
+                defaultGeometry = (Geometry) value;
+            } else {
+                try {
+                    defaultGeometry = (Geometry) ToolsLocator.getDataTypesManager().coerce(DataTypes.GEOMETRY, value);
+                } catch (CoercionException ex) {
+
+                }
+            }
+            envelope = null;
+        } else if(value != null) {
+            Class objectClass = attribute.getObjectClass();
+            if (objectClass != null) {
+                if (!objectClass.isInstance(value)) {
+                    try {
+                        Coercion coercer = attribute.getDataType().getCoercion();
+                        if (attribute.getType() == DataTypes.STRING && value instanceof Boolean) {
+                            value = coercer.coerce(value, attribute.getCoercionContext());
+                            value = StringUtils.left((String) value, attribute.getSize());
+                        } else {
+                            value = coercer.coerce(value, attribute.getCoercionContext());
+                        }
+                    } catch (CoercionException e) {
+                        throw new IllegalArgumentException("Can't convert to "
+                                + attribute.getDataType().getName()
+                                + " from '"
+                                + value.getClass().getName()
+                                + "' with value '"
+                                + value.toString()
+                                + "' and context '"
+                                + attribute.getCoercionContext()
+                                + "'.");
+                    }
+                }
+            }
+        }
+        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;
+        if (this.extraValues!=null) {
+            data.extraValues = new Object[this.extraValues.length];
+            System.arraycopy(this.extraValues, 0, data.extraValues, 0, this.extraValues.length);
+        } else {
+            data.extraValues = null;
+        }
+        if (this.extraValuesNames!=null) {
+            data.extraValuesNames = new String[this.extraValuesNames.length];
+            System.arraycopy(this.extraValuesNames, 0, data.extraValuesNames, 0, this.extraValuesNames.length);
+        } else {
+            data.extraValuesNames = null;
+        }
+        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;
+    }
+
+    @Override
+    public Time getDefaultTime() {
+        int index = featureType.getDefaultTimeAttributeIndex();
+        Object value = this.get(index);
+        if (! (value instanceof Time) ) {
+            try {
+                value = (Time) ToolsLocator.getDataTypesManager().coerce(DataTypes.INSTANT, value);
+            } catch (CoercionException ex) {
+
+            }
+        }
+        return (Time) value;
+    }
+
+    /*
+     * (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;
+    }
+
+    @Override
+    public void setDefaultGeometry(Geometry geom) {
+        int i = featureType.getDefaultGeometryAttributeIndex();
+        this.set(i, geom);
+    }
+
+    @Override
+    public void setDefaultTime(Time time) {
+        int i = featureType.getDefaultTimeAttributeIndex();
+        this.set(i, time);
+    }
+
+
+    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;
+    }
+
+    @Override
+    public void setExtraValue(int index, Object value) {
+        this.extraValues[index] = value;
+    }
+
+    @Override
+    public Object getExtraValue(int index) {
+        if( this.extraValues == null ) {
+            return null;
+        }
+        return this.extraValues[index];
+    }
+
+    @Override
+    public Object getExtraValue(String name) {
+        if( this.extraValuesNames == null || this.extraValues == null) {
+            return null;
+        }
+        for (int i = 0; i < this.extraValuesNames.length; i++) {
+            if( StringUtils.equalsIgnoreCase(this.extraValuesNames[i], name) ) {
+                return this.extraValues[i];
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean hasExtraValue(String name) {
+        if( this.extraValuesNames == null ) {
+            return false;
+        }
+        for (int i = 0; i < this.extraValuesNames.length; i++) {
+            if( StringUtils.equalsIgnoreCase(this.extraValuesNames[i], name) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void setExtraValueNames(String[] extraValueNames) {
+        this.extraValuesNames = extraValueNames;
+        this.extraValues = new Object[this.extraValuesNames.length];
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataTransactionServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataTransactionServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataTransactionServices.java	(revision 46118)
@@ -0,0 +1,55 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.DataTransaction;
+import org.gvsig.fmap.dal.exception.DataException;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface DataTransactionServices extends DataTransaction {
+
+    public interface ConnectionService<T> {
+        public String getId();
+        
+        public void begin() throws DataException;
+
+        public void commit() throws DataException;
+
+        public void rollback() throws DataException;
+
+        public T get();
+    }
+    
+    public void addConnection(ConnectionService connection);
+    
+    public ConnectionService getConnection(String id);
+    
+    public void removeConnection(String id);
+    
+    public boolean existsConnection(String id);
+    
+}
+    
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.spi;
+
+import java.io.InputStream;
+import java.net.URL;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerFactory;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreFactory_v2_4;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+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.index.FeatureIndexProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+
+/**
+ * Inteface of DataManager of Services for data providers
+ *
+ */
+public interface DataManagerProviderServices extends DataManager {
+
+    /**
+     *
+     * Creates a new instance of the provider associated to the passed
+     * parameters.
+     *
+     * @param providerServices
+     * @param parameters
+     * @return
+     * @throws InitializeException
+     * @throws ProviderNotRegisteredException
+     */
+    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException;
+
+    public void registerStoreProviderFactory(DataStoreProviderFactory factory);
+
+    /**
+     * Este metodo es temporal hasta que se integre el nuevo raster en el core
+     * de gvSIG.
+     *
+     * @param rasterStoreClass
+     */
+    public void registerDefaultRasterStore(Class rasterStoreClass);
+
+    /**
+     * Returns a DataIndexProvider compatible with the attribute data type.
+     *
+     * @param name
+     * @param store associated FeatureStore
+     * @param type associated FeatureType
+     * @param indexName
+     * @param attr associated FeatureAttributeDescriptor
+     * @return empty DataIndexProvider, initialized and ready to use
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
+     */
+    public FeatureIndexProviderServices createFeatureIndexProvider(String name, FeatureStore store, FeatureType type,
+            String indexName,
+            FeatureAttributeDescriptor attr) throws InitializeException,
+            ProviderNotRegisteredException;
+
+    public void registerStoreFactory(DataStoreFactory_v2_4 factory);
+
+    public void registerServerExplorerFactory(DataServerExplorerFactory factory);
+
+    /**
+     * @param name
+     * @param dataSourceClass class of provider
+     * @param parametersClass parameters class of provider
+     * @deprecated use registerServerExplorerFactory
+     */
+    public void registerExplorerProvider(String name,
+            Class dataSourceClass, Class parametersClass);
+
+    /**
+     * Registers a store factory.
+     *
+     * @param name
+     * @param storeFactoryClass
+     * @deprecated use registerStoreFactory
+     */
+    public void registerStoreFactory(String name,
+            Class storeFactoryClass);
+
+    /**
+     * Registers a store .
+     *
+     * @param name
+     * @param dataStoreProviderClass
+     * @param parametersClass
+     * @deprecated use registerStoreFactory
+     */
+    public void registerStoreProvider(String name,
+            Class dataStoreProviderClass,
+            Class parametersClass);
+
+    /**
+     * Return the URL associated to the indicated resource. If the data manager
+     * has set a resource loader, use this to search the resource. If this don't
+     * contain the indicated resource or the data manager has not set a resource
+     * loader, search the resource in the class loader of the object
+     * "resourceLoader" indicated as parameter. This is usefull to load the
+     * resource files associateds to the xml of parameter and metadad
+     * description.
+     *
+     * @param resourcesLoader
+     * @param name
+     * @return
+     */
+    public URL getResource(Object resourcesLoader, String name);
+
+    /**
+     * Return the InputStream associated to the indicated resource. If the data
+     * manager has set a resource loader, use this to search the resource. If
+     * this don't contain the indicated resource or the data manager has not set
+     * a resource loader, search the resource in the class loader of the object
+     * "resourceLoader" indicated as parameter. This is usefull to load the
+     * resource files associateds to the xml of parameter and metadad
+     * description.
+     *
+     * @param resourcesLoader
+     * @param name
+     * @return
+     */
+    public InputStream getResourceAsStream(Object resourcesLoader, String name);
+
+    public DataStore openStore(DataStoreParameters parameters, DataStoreProvider provider);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataFactory.java	(revision 46118)
@@ -0,0 +1,40 @@
+package org.gvsig.fmap.dal.spi;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataFactory;
+
+public abstract class AbstractDataFactory implements DataFactory {
+
+    private String name = null;
+    private String description = "";
+    private boolean hidden = false;
+
+    protected AbstractDataFactory(String name, String description, boolean hidden) {
+        this.name = name;
+        this.description = description;
+        this.hidden = hidden;
+    }
+
+    protected AbstractDataFactory(String name, String description) {
+        this(name, description, false);
+    }
+
+    @Override
+    public final String getName() {
+        return this.name;
+    }
+
+    @Override
+    public final String getDescription() {
+        if( StringUtils.isEmpty(this.description) ) {
+            return this.name;
+        }
+        return this.description;
+    }
+
+    @Override
+    public boolean isHidden() {
+        return this.hidden;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStoreProvider.java	(revision 46118)
@@ -0,0 +1,42 @@
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTransaction;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractDataStoreProvider 
+        extends AbstractDisposable
+        implements DataStoreProvider 
+    {
+    
+    protected AbstractDataStoreProvider() {
+        
+    }
+        @Override
+	public UnmodifiableBasicMap<String,DataStore> getChildren() {
+		return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+	}
+
+        @Override
+        public StoresRepository getStoresRepository() {
+            return null;
+        }
+        
+        @Override
+        public ResourcesStorage getResourcesStorage() {
+            return null;
+        }
+
+    @Override
+    public void setTransaction(DataTransactionServices transaction) {
+        // Default do nothing
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolImpl.java	(revision 46118)
@@ -0,0 +1,151 @@
+package org.gvsig.fmap.dal.spi;
+
+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 DataServerExplorerPoolImpl implements DataServerExplorerPool {
+
+    
+    private static final String PERSISTENCE_DEFINITION_NAME = "DataServerExplorerPool";
+
+    private List<DataServerExplorerPoolEntry> pool;
+
+    public DataServerExplorerPoolImpl() {
+        this.pool = new ArrayList();
+    }
+
+    @Override
+    public boolean contains(String name) {
+        DataServerExplorerPoolEntry entry = this.get(name);
+        return entry!=null;
+    }
+    
+    @Override
+    public boolean contains(DataServerExplorerPoolEntry entry) {
+        return contains(entry.getName());
+    }
+    
+    @Override
+    public boolean isEmpty() {
+        return this.pool.isEmpty();
+    }
+    
+    @Override
+    public DataServerExplorerPoolEntry createEntry(String name, String description, DataServerExplorerParameters explorer) {
+        DataServerExplorerPoolEntryImpl entry = new DataServerExplorerPoolEntryImpl(name, description, explorer);
+        return entry;
+    }
+
+    @Override
+    public void add(String name, DataServerExplorerParameters explorer) {
+        this.add(name, null, explorer);
+    }
+
+    @Override
+    public void add(String name, String description, DataServerExplorerParameters explorer) {
+        DataServerExplorerPoolEntry newexplorer = createEntry(name, description, explorer);
+        DataServerExplorerPoolEntry existent = this.get(name);
+        if( existent!=null ) {
+            newexplorer.copyTo(existent);
+        } else {
+            this.pool.add(newexplorer);
+        }
+    }
+
+    @Override
+    public void remove(DataServerExplorerPoolEntry entry) {
+        this.remove(entry.getName());
+    }
+
+    @Override
+    public void remove(int explorerIndex) {
+        this.pool.remove(explorerIndex);
+    }
+
+    @Override
+    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);
+            }
+        }
+    }
+    
+    @Override
+    public int size() {
+        return this.pool.size();
+    }
+
+    @Override
+    public DataServerExplorerPoolEntry get(int index) {
+        return (DataServerExplorerPoolEntry) this.pool.get(index);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public Iterator iterator() {
+        return this.pool.iterator();
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("pool", pool);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        List l = state.getList("pool");
+        this.pool = new ArrayList();
+        this.pool.addAll(l);
+        Iterator<DataServerExplorerPoolEntry> it = this.pool.iterator();
+        while (it.hasNext()) {
+            DataServerExplorerPoolEntry next = it.next();
+            if(StringUtils.isBlank(next.getName())){
+                it.remove();
+            }
+        }
+    }
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if ( manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null ) {
+            DynStruct definition
+                    = manager.addDefinition(DataServerExplorerPoolImpl.class,
+                            PERSISTENCE_DEFINITION_NAME, PERSISTENCE_DEFINITION_NAME
+                            + " Persistent definition", null, null);
+
+            definition.addDynFieldList("pool")
+                    .setClassOfItems(DataServerExplorerPoolEntryImpl.class)
+                    .setMandatory(true)
+                    .setPersistent(true);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorerFactory.java	(revision 46118)
@@ -0,0 +1,61 @@
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataServerExplorerFactory;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import static org.gvsig.fmap.dal.DataStoreProviderFactory.UNKNOWN;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public abstract class AbstractDataServerExplorerFactory
+    extends AbstractDataFactory
+    implements DataServerExplorerFactory {
+
+    
+    protected AbstractDataServerExplorerFactory(String name, String description) {
+        super(name, description);
+    }
+
+    protected AbstractDataServerExplorerFactory(String name, String description, boolean hidden) {
+        super(name, description,hidden);
+    }
+
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        try {
+            return this.create(
+                (DataServerExplorerParameters) parameters,
+                (DataServerExplorerProviderServices) services
+            );
+        } catch (InitializeException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public int allowCreate() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasTabularSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasVectorialSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasRasterSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public boolean isStoreSupported(String name) {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DALSPILocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DALSPILocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DALSPILocator.java	(revision 46118)
@@ -0,0 +1,18 @@
+
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.resource.spi.ResourceManagerProviderServices;
+import org.gvsig.tools.locator.LocatorException;
+
+
+public class DALSPILocator {
+    
+    public static DataManagerProviderServices getDataManagerProviderServices() throws LocatorException {
+        return (DataManagerProviderServices) DALLocator.getDataManager();
+    }
+    
+    public static ResourceManagerProviderServices getResourceManagerProviderServices() throws LocatorException {
+        return (ResourceManagerProviderServices) DALLocator.getResourceManager();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.dal.spi;
+
+import java.util.Collection;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTransaction;
+import org.gvsig.fmap.dal.StoresRepository;
+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_v2;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+
+/**
+ * Base interface for all data providers
+ * 
+ * @author jmvivo
+ *
+ */
+public interface DataStoreProvider extends org.gvsig.fmap.dal.DataStoreProvider, DynObject_v2, Disposable {
+
+	/**
+	 * Returns an UnmodifiableBasicMap with subStores from this store.
+         * If do not have children, return an empty UnmodifiableBasicMap.
+         * Never returns null.
+	 *
+	 * @return SubStores UnmodifiableBasicMap
+	 */
+	public UnmodifiableBasicMap<String,DataStore> getChildren();
+
+        public StoresRepository getStoresRepository();
+        
+        /**
+         * Returns the resource store associated with this provider. 
+         * If one does not exist, it will return null.
+         * 
+         * @return the ResourcesStorage or null.
+         */
+        public ResourcesStorage getResourcesStorage();
+	/**
+	 * 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);
+    
+    public void setTransaction(DataTransactionServices transaction);
+	
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataServerExplorer.java	(revision 46118)
@@ -0,0 +1,83 @@
+package org.gvsig.fmap.dal.spi;
+
+import java.io.File;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorer_v2;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.resourcesstorage.EmptyResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractDataServerExplorer extends AbstractDisposable implements DataServerExplorer_v2 {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractDataServerExplorer.class);
+    
+    private DataServerExplorerParameters parameters;
+    private final DataServerExplorerProviderServices providerServices;
+
+    protected AbstractDataServerExplorer(DataServerExplorerParameters parameters, DataServerExplorerProviderServices providerServices) {
+        this.parameters = parameters;
+        this.providerServices = providerServices;
+    }
+
+    public DataServerExplorerProviderServices getServerExplorerProviderServices() {
+        return this.providerServices;
+    }
+    
+    @Override
+    public DataServerExplorerParameters getParameters() {
+        return this.parameters;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        this.parameters = null;
+    }
+
+    @Override
+    public DataStoreParameters get(String name) throws DataException {
+        return null;
+    }
+    
+    @Override
+    public boolean exists(DataStoreParameters parameters) throws DataException {
+        return true;
+    }
+    
+    @Deprecated
+    @Override
+    public File getResourcePath(DataStore dataStore, String resourceName) throws DataException {
+        return null;
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        EmptyResourcesStorage resourcesStorage = new EmptyResourcesStorage();
+        return resourcesStorage;
+    }
+    
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStore dataStore) {
+        EmptyResourcesStorage resourcesStorage = new EmptyResourcesStorage();
+        return resourcesStorage;
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStoreParameters parameters) {
+        EmptyResourcesStorage resourcesStorage = new EmptyResourcesStorage();
+        return resourcesStorage;
+    }
+
+    @Override
+    public SQLBuilder createSQLBuilder() {
+        return new SQLBuilderBase();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataStore.java	(revision 46118)
@@ -0,0 +1,97 @@
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.BaseStoresRepository;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractDataStore 
+        extends AbstractDisposable 
+        implements DataStore 
+    {
+    
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractDataStore.class);
+
+    protected boolean ignoreDALResource;
+    
+    protected AbstractDataStore() {
+        this.ignoreDALResource = false;
+    }
+
+    protected abstract DataManager getDataManager();
+    
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        try {
+            return this.getExplorer().getResourcesStorage(this);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't create resources storage",ex);
+            return null;
+        }
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        final StoresRepository mainRepository = this.getDataManager().getStoresRepository();
+        StoresRepository repository = new BaseStoresRepository(this.getName()) {
+            
+            @Override
+            protected DataStoreParameters getMyParameters(String name) {
+                // Uff, esta implementacion no es nada buena
+                DataStore store = getChildren().get(name);
+                if( store==null ) {
+                    return null;
+                }
+                return store.getParameters();
+            }
+
+            @Override
+            protected boolean isEmptyMyRepository() {
+                UnmodifiableBasicMap<String, DataStore> children = getChildren();
+                return children==null || children.isEmpty();
+            }
+
+            @Override
+            protected int getMySize() {
+                UnmodifiableBasicMap<String, DataStore> children = getChildren();
+                if( children==null ) {
+                    return 0;
+                }
+                return children.size();
+            }
+
+            @Override
+            public void add(String name, DataStoreParameters parameters) {
+                mainRepository.add(name, parameters);
+            }
+
+            @Override
+            public void remove(String name) {
+                mainRepository.remove(name);
+            }
+
+        };
+        return repository;
+    }
+    
+    @Override
+    public UnmodifiableBasicMap<String,DataStore> getChildren() {
+            return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+    }
+    
+    public void setIgnoreDALResource(boolean ignoreDALResource) {
+        this.ignoreDALResource = ignoreDALResource;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataStoreInitializer2.java	(revision 46118)
@@ -0,0 +1,20 @@
+package org.gvsig.fmap.dal.spi;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+
+
+public interface DataStoreInitializer2 extends DataStore {
+	
+    void intialize(
+                DataManager dataManager,
+		DataStoreParameters parameters
+        ) throws InitializeException;
+        
+        void setProvider(DataStoreProvider provider);
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.spi;
+
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public abstract class AbstractDataStoreProviderFactory
+    extends AbstractDataFactory
+    implements DataStoreProviderFactory {
+
+    protected AbstractDataStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    protected AbstractDataStoreProviderFactory(String name, String description, boolean hidden) {
+        super(name, description,hidden);
+    }
+
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services providerServices) {
+        try {
+            return this.createProvider(
+                (DataParameters) parameters,
+                (DataStoreProviderServices) providerServices
+            );
+        } catch (InitializeException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public int allowRead() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int allowWrite() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int allowCreate() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasTabularSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasVectorialSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasRasterSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int hasSQLSupport() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int worksBestTiled() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public int isTiledSupported() {
+        return NO;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolEntryImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolEntryImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/DataServerExplorerPoolEntryImpl.java	(revision 46118)
@@ -0,0 +1,116 @@
+/*
+ * 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.spi;
+
+import org.apache.commons.lang3.StringUtils;
+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 gvSIG Team
+ */
+public class DataServerExplorerPoolEntryImpl implements DataServerExplorerPoolEntry {
+
+    private static final String PERSISTENCE_DEFINITION_NAME = "DataServerExplorerPoolEntry";
+
+    protected String name;
+    protected String description;
+    protected DataServerExplorerParameters explorer;
+
+    public DataServerExplorerPoolEntryImpl() {
+        // Required by Persistent 
+    }
+    
+    public DataServerExplorerPoolEntryImpl(String name, String description, DataServerExplorerParameters explorer) {
+        if(StringUtils.isBlank(name)){
+            throw new IllegalArgumentException("Name can't be null");
+        }
+        this.name = name;
+        this.description = description;
+        this.explorer = explorer;
+
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public void copyTo(DataServerExplorerPoolEntry target) {
+        DataServerExplorerPoolEntryImpl other = (DataServerExplorerPoolEntryImpl)target;
+        if(StringUtils.isBlank(other.name)){
+            throw new IllegalArgumentException("Name can't be null");
+        }
+        other.name = this.name;
+        other.description = this.description;
+        other.explorer = this.explorer;                 
+    }
+    
+    @Override
+    public DataServerExplorerParameters getExplorerParameters() {
+        return this.explorer;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("name", this.name);
+        state.set("description", this.description);
+        state.set("explorer", this.explorer);
+    }
+
+    @Override
+    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(DataServerExplorerPoolEntryImpl.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);
+        }
+    }
+
+    @Override
+    public String getLabel() {
+        return this.getName();
+    }
+
+    @Override
+    public DataServerExplorerPoolEntry getValue() {
+        return this;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.dal.spi;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import javax.json.JsonObject;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.MutableInt;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.CopyParametersException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+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.DynObject;
+import org.gvsig.tools.dynobject.DynObjectEncoder;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.persistence.PersistenceFactory;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.persistence.xml.XMLPersistenceManager;
+import org.gvsig.tools.util.Validator;
+
+/**
+ * @author jmvivo
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractDataParameters implements DataParameters, Validator {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDataParameters.class);
+    private Exception validateException;
+
+    @Override
+    public Object getDynValue(String name) {
+        return getDelegatedDynObject().getDynValue(name);
+    }
+
+    public String getProviderName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+    
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+    
+    @Override
+    public String toString() {
+        DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder();
+        return encoder.encode(this);
+    }
+
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    public void clear() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        manager.clear(this);
+    }
+
+    protected void copyValuesTo(DataParameters target) {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        manager.copy(this, target);
+    }
+
+    @Override
+    public DataParameters getCopy() {
+        DataParameters copy;
+        try {
+            if( this instanceof Cloneable ) {
+                copy = (DataParameters) this.clone();
+            } else {
+                copy = (DataParameters) this.getClass().newInstance();
+                this.copyValuesTo(copy);
+            }
+        } catch (Exception e) {
+            throw new CopyParametersException("data parameters", e);
+        }
+        return copy;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        DynField[] fields = getDelegatedDynObject().getDynClass().getDynFields();
+
+        for (DynField field : fields) {
+            if (field.isPersistent()) {
+                String name = field.getName();
+                Object value = this.getDynValue(name);
+                state.set(name, value);
+            }
+        }
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        @SuppressWarnings("rawtypes")
+        Iterator it = state.getNames();
+        while (it.hasNext()) {
+            String name = (String) it.next();
+            try {
+                Object value = state.get(name);
+                this.setDynValue(name, value);
+            } catch (Throwable t) {
+                LOGGER.warn("Can't load '" + name + "' property", t);
+            }
+        }
+    }
+
+    @Override
+    public void delegate(DynObject dynObject) {
+        getDelegatedDynObject().delegate(dynObject);
+
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        return getDelegatedDynObject().getDynClass();
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        return getDelegatedDynObject().hasDynValue(name);
+    }
+
+    @Override
+    public void implement(DynClass dynClass) {
+        getDelegatedDynObject().implement(dynClass);
+    }
+
+    @Override
+    public Object invokeDynMethod(String name, Object[] args)
+            throws DynMethodException {
+        return getDelegatedDynObject().invokeDynMethod(this, name, args);
+    }
+
+    @Override
+    public Object invokeDynMethod(int code, Object[] args)
+            throws DynMethodException {
+        return getDelegatedDynObject().invokeDynMethod(this, code, args);
+    }
+
+    @Override
+    public void validate() throws ValidateDataParametersException {
+        try {
+            this.getDynClass().validate(this);
+        } catch (DynObjectValidateException e) {
+            throw new ValidateDataParametersException(e);
+        }
+    }
+
+    protected void loadPRJ(File file, String parameterName) {
+        File prjFile = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + ".prj");
+        if (prjFile.exists()) {
+            try {
+                String contentFile = FileUtils.readFileToString(prjFile);
+                if (StringUtils.isNotEmpty(contentFile)) {
+                    IProjection crs = CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, contentFile);
+                    this.setDynValue(parameterName, crs);
+                }
+            } catch (IOException e) {
+                LOGGER.warn("Couldn't read prj file ''{}''", prjFile.getAbsolutePath());
+            }
+        }
+    }
+
+    protected void loadWLD(File file, String parameterName) {
+        File wldFile = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + ".wld");
+        if (wldFile.exists()) {
+            try {
+                List<String> lines = FileUtils.readLines(wldFile);
+                if (lines != null && lines.size() == 6) {
+                    this.setDynValue(parameterName, lines);
+                }
+
+            } catch (IOException e) {
+                LOGGER.warn("Couldn't read wld file ''{}''", wldFile.getAbsolutePath());
+            }
+        }
+    }
+
+    @Override
+    public byte[] toByteArray() {
+            try {
+//            PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+            PersistenceManager persistenceManager = new XMLPersistenceManager();
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            PersistentState state = persistenceManager.getState(this, false, new MutableInt(1));
+            persistenceManager.saveState(state, stream);
+            return stream.toByteArray();
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get byte[] from parameters.",ex);
+            return null;
+        }
+    }
+
+    public static DataParameters fromByteArray(byte[] data) {
+        Object x;
+        PersistenceManager defaultPersistenceManager = ToolsLocator.getPersistenceManager();
+        try {
+            PersistenceManager xmlPersistenceManager = new XMLPersistenceManager();
+            for (Iterator it = defaultPersistenceManager.getFactories().iterator(); it.hasNext();) {
+              PersistenceFactory factory = (PersistenceFactory) it.next();
+              xmlPersistenceManager.registerFactory(factory);
+            }
+            ByteArrayInputStream stream = new ByteArrayInputStream(data);
+            x = xmlPersistenceManager.getObject(stream);
+            DataParameters parameters = (DataParameters) x;
+            return parameters;
+        } catch (Exception ex) {
+          LOGGER.debug("Can't get parameters from byte[] with XMLPersistenceManager.",ex);
+          // Try with the default persistence manager for compatibility
+        }      
+        try {
+            ByteArrayInputStream stream = new ByteArrayInputStream(data);
+            DataParameters parameters = (DataParameters) defaultPersistenceManager.getObject(stream);
+            return parameters;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get parameters from byte[].",ex);
+            return null;
+        }      
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if( !(obj instanceof DynObject) ) {
+            return false;
+        }
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        return manager.equals(this, (DynObject) obj);
+    }
+
+    @Override
+    public int hashCode() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        return manager.hashCode(this);
+    }
+
+    @Override
+    public JsonObject toJson() {
+        JsonObjectBuilder builder = this.toJsonBuilder();
+        return builder.build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {        
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.addAll(this);
+        return builder;
+    }
+
+    @Override
+    public void fromJson(JsonObject json) {
+        Json.addAll(this, json);
+    }
+
+    
+    /**
+     * Returns an instance of the {@link DynObject} to delegate to.
+     *
+     * @return the delegate {@link DynObject}
+     */
+    protected abstract DelegatedDynObject getDelegatedDynObject();
+
+    @Override
+    public boolean isValid(Object data, Object... args) {
+        try {
+            validate();
+            return true;
+        } catch (Exception e) {
+            this.validateException = e;
+            return false;
+        }
+    }
+
+    @Override
+    public String getMessage() {
+        if(this.validateException == null){
+            return null;
+        }
+        return this.validateException.getMessage();
+    }
+
+    @Override
+    public Throwable getCause() {
+        return this.validateException;
+    }
+    
+    
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/ZipResourcesStorage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/ZipResourcesStorage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/ZipResourcesStorage.java	(revision 46118)
@@ -0,0 +1,234 @@
+package org.gvsig.fmap.dal.spi;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.AbstractDataResource;
+import org.gvsig.tools.resourcesstorage.AbstractResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ZipResourcesStorage extends AbstractResourcesStorage {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ZipResourcesStorage.class);
+
+    public class ZipFileResource
+            extends AbstractDataResource
+            implements Resource {
+
+        private class ResourceInputStream extends InputStream {
+
+            @Override
+            public int read() throws IOException {
+                return in.read();
+            }
+
+            @Override
+            public void close() throws IOException {
+                ZipFileResource.this.close();
+            }
+        }
+
+        private class ResourceOutputStream extends OutputStream {
+
+            @Override
+            public void write(int b) throws IOException {
+                out.write(b);
+            }
+
+            @Override
+            public void flush() throws IOException {
+                out.flush();
+            }
+
+            @Override
+            public void close() throws IOException {
+                ZipFileResource.this.close();
+            }
+        }
+
+        private final File zipFile;
+        private final String tableName;
+        private final String resourceName;
+        private ZipFile zip;
+        private InputStream in;
+        private ByteArrayOutputStream out;
+
+        public ZipFileResource(File zipFile, String tableName, String resourceName) {
+            this.zipFile = zipFile;
+            this.tableName = tableName;
+            this.resourceName = resourceName;
+            this.zip = null;
+            this.in = null;
+            this.out = null;
+            if (StringUtils.isBlank(this.tableName)) {
+                LOGGER.warn("The table name is empty (URL=" + this.getURL() + ").");
+            }
+            if (StringUtils.isBlank(this.resourceName)) {
+                LOGGER.warn("The resource name is empty (URL=" + this.getURL() + ").");
+            }
+        }
+
+        public String getName() {
+          return this.resourceName;
+        }
+        
+        @Override
+        public boolean isReadOnly() {
+            return false;
+        }
+        
+        @Override
+        public final URL getURL() {
+            try {
+                return new URL("jar:" + this.zipFile.toURI().toString() + "!/" + this.tableName + "." + this.resourceName);
+            } catch (Exception ex) {
+                return null;
+            }
+        }
+
+        @Override
+        public boolean exists() {
+            try {
+                if (!this.zipFile.exists()) {
+                    return false;
+                }
+                ZipFile z = new ZipFile(zipFile);
+                try {
+                    ZipEntry entry = z.getEntry(this.tableName + "." + this.resourceName);
+                    if (entry == null) {
+                        return false;
+                    }
+                    return true;
+                } finally {
+                    IOUtils.closeQuietly(z);
+                }
+            } catch (Exception ex) {
+                LOGGER.warn("Can't access to the resource (" + Objects.toString(this.getURL()) + ").", ex);
+                return false;
+            }
+        }
+
+        @Override
+        public InputStream asInputStream() throws IOException {
+            if (!this.zipFile.exists()) {
+                return null;
+            }
+            if (this.in != null || this.out != null) {
+                throw new IllegalStateException("Resource is already open (" + this.zipFile.toString() + "!" + this.tableName + ")");
+            }
+            try {
+                if (this.zip == null) {
+                    this.zip = new ZipFile(zipFile);
+                }
+                ZipEntry entry = this.zip.getEntry(this.tableName + "." + this.resourceName);
+                if (entry == null) {
+                    return null;
+                }
+                this.in = this.zip.getInputStream(entry);
+                return new ResourceInputStream();
+            } catch (Exception ex) {
+                LOGGER.warn("Can't create input stream (" + Objects.toString(this.getURL()) + ").", ex);
+                return null;
+            }
+        }
+
+        @Override
+        public OutputStream asOutputStream() throws IOException {
+            if (this.in != null || this.out != null) {
+                throw new IllegalStateException("Resource is already open (" + Objects.toString(this.getURL()) + ").");
+            }
+            this.out = new ByteArrayOutputStream();
+            return new ResourceOutputStream();
+        }
+
+        @Override
+        public void close() {
+            if (this.in != null) {
+                IOUtils.closeQuietly(this.in);
+                this.in = null;
+            }
+            if (this.out != null) {
+                ByteArrayInputStream contents = new ByteArrayInputStream(this.out.toByteArray());
+                try {
+                    this.updateZipEntry(zipFile, this.tableName + "." + this.resourceName, contents);
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't write resource (" + Objects.toString(this.getURL()) + ").", ex);
+                } finally {
+                    IOUtils.closeQuietly(contents);
+                    IOUtils.closeQuietly(this.out);
+                    this.out = null;
+                }
+            }
+            if (this.zip != null) {
+                IOUtils.closeQuietly(this.zip);
+                this.zip = null;
+            }
+        }
+
+        private void updateZipEntry(File zip, String entryName, InputStream entryContents) throws URISyntaxException, IOException {
+            FileSystem zipfs = null;
+            try {
+                URI zipfsuri = new URI("jar:" + zip.toURI().toString());
+                zipfs = FileSystems.newFileSystem(zipfsuri, Collections.singletonMap("create", "true"));
+                Path entryPath = zipfs.getPath(entryName);
+                Files.copy(entryContents, entryPath, StandardCopyOption.REPLACE_EXISTING);
+            } finally {
+                IOUtils.closeQuietly(zipfs);
+            }
+        }
+    }
+
+    private final File zipFile;
+    private final String tableName;
+    
+    public ZipResourcesStorage(String pathName, String tableName) {
+        this.zipFile = new File(pathName + ".gvres");
+        this.tableName = tableName;
+    }
+    
+    public static boolean existsStorage(String pathName) {
+        File theZipFile = new File(pathName + ".gvres");
+        return theZipFile.exists();
+    }
+
+    @Override
+    public Resource getResource(String resourceName) {
+        ZipFileResource res = new ZipFileResource(
+                this.zipFile,
+                this.tableName,
+                resourceName
+        );
+        return res;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return !this.zipFile.exists();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProvider.java	(revision 46118)
@@ -0,0 +1,344 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.awt.Image;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStoreParameters;
+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.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+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.AbstractDataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.DynObject_v2;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Class to be extended by the providers to be implemented
+ * @author dmartinezizquierdo
+ *
+ */
+public abstract class AbstractRasterStoreProvider 
+        extends AbstractDataStoreProvider 
+        implements RasterStoreProvider
+  {
+
+    protected static final Logger LOG =
+        LoggerFactory.getLogger(AbstractRasterStoreProvider.class);
+
+    private RasterStoreProviderServices store;
+    private DelegatedDynObject metadata;
+    private DataStoreParameters parameters;
+    private ArrayList<BandDescriptor> bandDescriptors;
+    protected BufferDimensions dimensions;
+
+    protected AbstractRasterStoreProvider(DataStoreParameters params,
+        DataStoreProviderServices storeServices, DynObject metadata) {
+        this.store=(RasterStoreProviderServices)storeServices;
+        this.metadata=(DelegatedDynObject)metadata;
+        this.parameters=params;
+    }
+
+    /**
+     * @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;
+    }
+
+    /**
+     * unsupported by default (return null), override this otherwise
+     *
+     * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getChilds()
+     */
+    public Iterator<?> getChilds() {
+        return null;
+    }
+
+    /**
+     * (non-Javadoc)
+     * @return RasterStoreProviderServices
+     *
+     * @see
+     * org.gvsig.fmap.dal.feature.spi.RasterStoreProvider#getStoreServices()
+     */
+    public RasterStoreProviderServices getStoreServices() {
+        return this.store;
+    }
+
+    /**
+     * 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
+    }
+
+    /**
+     * 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
+    }
+
+    public Interval getInterval() {
+        // Do nothing
+        return null;
+    }
+
+    public Collection<?> getTimes() {
+        // Do nothing
+        return null;
+    }
+
+    public Collection<?> getTimes(Interval interval) {
+        // Do nothing
+        return null;
+    }
+
+    // --- 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 void implement(DynClass dynClass) {
+        if (this.metadata == null) {
+            return;
+        }
+        this.metadata.implement(dynClass);
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if (this.metadata == null) {
+            return null;
+        }
+        // TODO this.open??
+        return this.metadata.getDynValue(name);
+    }
+
+    public void setDynValue(String name, Object value)
+        throws DynFieldNotFoundException {
+        if (this.metadata == null) {
+            return;
+        }
+        // TODO this.open??
+        this.metadata.setDynValue(name, value);
+    }
+
+    public boolean hasDynValue(String name) {
+        if (this.metadata == null) {
+            return false;
+        }
+        // TODO this.open??
+        return this.metadata.hasDynValue(name);
+    }
+
+    public Object invokeDynMethod(int code, Object[] args)
+        throws DynMethodException {
+        if (this.metadata == null) {
+            return null;
+        }
+        // TODO this.open??
+        return this.metadata.invokeDynMethod(this, code, args);
+    }
+
+    public Object invokeDynMethod(String name, Object[] args)
+            throws DynMethodException {
+        if (this.metadata == null) {
+            return null;
+        }
+        // TODO this.open??
+        return this.metadata.invokeDynMethod(this, name, args);
+    }
+
+    public void clear() {
+        if (metadata != null) {
+            metadata.clear();
+        }
+    }
+
+    protected void doDispose() throws BaseException {
+        LOG.debug("Dispose AbstractRasterStoreProvider '"+this.getFullName()+"'");
+
+        this.metadata = null;
+        this.parameters = null;
+        if (bandDescriptors != null) {
+            for (Iterator iterator = bandDescriptors.iterator(); iterator.hasNext();) {
+                BandDescriptor bandDescriptor = (BandDescriptor) iterator.next();
+                DisposeUtils.dispose(bandDescriptor);
+                iterator.remove();
+            }
+            this.bandDescriptors = null;
+        }
+
+    }
+
+
+    @Override
+    public TileStruct getTileStruct() {
+        //Subclasses should implement this method
+        throw new UnsupportedOperationException();
+    }
+
+    protected void autoOpen(){
+        try {
+            open();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Image getImageLegend() {
+        return null;
+    }
+
+    /**
+     * @return
+     */
+    public List<BandDescriptor> getBandsDescriptor() {
+        if(bandDescriptors==null){
+            bandDescriptors = new ArrayList<BandDescriptor>();
+        }
+        if(bandDescriptors.isEmpty()){
+            for (int i = 0; i < this.getBands(); i++) {
+                bandDescriptors.add(getStoreServices().createBandDescriptor(i,
+                    new ArrayList<BandAttributeDescriptor>()));
+
+            }
+        }
+        return this.bandDescriptors;
+    }
+
+
+    @Override
+    public BandDescriptorServices getBandDescriptor(int band) {
+        if(band > this.getBands()){
+            throw new IllegalArgumentException("Invalid band");
+        }
+        return (BandDescriptorServices) this.getBandsDescriptor().get(band);
+    }
+
+
+    public NoData getNoData(RasterQuery rasterQuery, int band){
+        List<BandQuery> bands = rasterQuery.getBands();
+        for (BandQuery bandQuery : bands) {
+            if(bandQuery.getDescriptor().getBand()==band){
+                NoData noData = bandQuery.getDescriptor().getNoData();
+                if(noData == null) {
+                    break;
+                }
+                return noData;
+            }
+        }
+        return this.getBandDescriptor(band).getNoData();
+    }
+
+    public NoData[] getNoDatas(){
+        NoData[] noDatas = new NoData[this.getBands()];
+        for (int i = 0; i < this.getBands(); i++) {
+            noDatas[i] = this.getBandDescriptor(i).getNoData();
+        }
+        return noDatas;
+    }
+
+    public int[] getDataTypes(){
+        int[] dataTypes = new int[this.getBands()];
+        for (int i = 0; i < this.getBands(); i++) {
+            dataTypes[i] = this.getBandDescriptor(i).getDataType();
+        }
+        return dataTypes;
+    }
+
+    @Override
+    public boolean isTiled() {
+        return false;
+    }
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        if( metadata instanceof DynObject_v2 ) {
+            return ((DynObject_v2)this.metadata).hasDynMethod(name);
+        }
+        return false;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterCacheStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterCacheStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterCacheStoreProvider.java	(revision 46118)
@@ -0,0 +1,51 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.RasterCache;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterStore;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterCacheStoreProvider extends RasterStoreProvider, RasterCache {
+
+    /**
+     * @param provider
+     * @param store
+     * @throws DataException
+     */
+    public void apply(RasterStoreProvider provider, IProjection crs, RasterQuery query) throws DataException;
+
+    /**
+     * @return RasterStoreProvider
+     */
+    public RasterStoreProvider getInnerProvider();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProviderServices.java	(revision 46118)
@@ -0,0 +1,141 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.List;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+
+/**
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterStoreProviderServices extends DataStoreProviderServices {
+
+    /**
+     * Call this to send a notification to observers of this store
+     *
+     * @param notification
+     * @param data
+     */
+    public void notifyChange(String notification, ResourceProvider data);
+
+    /**
+     * Call this to send a notification to observers of this store relative to
+     * Resources
+     *
+     * @param notification
+     * @param resource
+     */
+    public void notifyChange(String notification, Resource resource);
+
+    /**
+     * @return Returns {@link DataManager} instance.
+     */
+    public DataManager getManager();
+
+    /**
+     * @return Returns the instance of {@link RasterStoreProvider} for this store.
+     */
+    public RasterStoreProvider getProvider();
+
+    /**
+     * @return Returns current RasterStore
+     */
+    public RasterStore getRasterStore();
+
+    /**
+     * @return Returns current FeatureStore name.
+     */
+    public String getName();
+
+    /**
+     * Creates a {@link BandDescriptor} object.
+     *
+     * @param band
+     *            BandDescriptor band
+     * @param attributes
+     *            A list with available {@link BandAttributeDescriptor}.
+     * @return New instance of band descriptor
+     */
+    public BandDescriptor createBandDescriptor(int band, List<BandAttributeDescriptor> attributes);
+
+    /**
+     * Creates a {@link BandAttributeDescriptor}.
+     *
+     * @param band
+     *            Band of attribute descriptor.
+     * @param name
+     *            Name of attribute
+     * @param description
+     *            Descriptor of attribute
+     * @param values
+     *            Values of band attribute descriptor
+     * @return A new {@link BandAttributeDescriptor}
+     */
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name,
+        String description, List<Object> values);
+
+    /**
+     * Creates a {@link BandAttributeDescriptor}.
+     *
+     * @param band
+     *            Band of attribute descriptor.
+     * @param name
+     *            Name of attribute
+     * @param description
+     *            Descriptor of attribute
+     * @param values
+     *            Values of band attribute descriptor
+     * @param units
+     *            String units
+     * @return A new {@link BandAttributeDescriptor}
+     */
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name,
+        String description, List<Object> values, String units);
+
+    /**
+     * Creates a {@link BandAttributeDescriptor}.
+     *
+     * @param band
+     *            Band of attribute descriptor.
+     * @param name
+     *            Name of attribute
+     * @param value
+     * @param description
+     *            Descriptor of attribute
+     * @param values
+     *            Values of band attribute descriptor
+     * @param units
+     *            String units
+     * @return A new {@link BandAttributeDescriptor}
+     */
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name, Object value,
+        String description, List<Object> values, String units);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractRasterStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,46 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.raster.RasterStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
+
+/**
+ * Class to be extended by provider factories to be implemented
+ * @author dmartinezizquierdo
+ *
+ */
+public abstract class AbstractRasterStoreProviderFactory extends
+AbstractDataStoreProviderFactory implements RasterStoreProviderFactory{
+
+    protected AbstractRasterStoreProviderFactory(String name,
+        String description) {
+        super(name, description);
+    }
+
+    public int isTiledSupported() {
+        return YES;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.AbstractDataStoreProvider;
+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.DynObject_v2;
+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 AbstractDataStoreProvider
+		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);
+	}
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        if( metadata instanceof DynObject_v2 ) {
+            return ((DynObject_v2)this.metadata).hasDynMethod(name);
+        }
+        return false;
+    }
+
+	public void implement(DynClass dynClass) {
+		if (this.metadata == null) {
+			return;
+		}
+		this.metadata.implement(dynClass);
+
+	}
+
+	public Object invokeDynMethod(int code, Object[] args)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, code, args);
+	}
+
+	public Object invokeDynMethod(String name, Object[] args)
+			throws DynMethodException {
+		if (this.metadata == null) {
+			return null;
+		}
+		// TODO this.open??
+		return this.metadata.invokeDynMethod(this, name, args);
+	}
+
+	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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractOpenRasterStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractOpenRasterStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractOpenRasterStoreParameters.java	(revision 46118)
@@ -0,0 +1,125 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractOpenRasterStoreParameters extends AbstractDataParameters implements OpenRasterStoreParameters{
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractOpenRasterStoreParameters.class);
+    public static final String WLD_PARAMS_NAME= "wldParams";
+
+    /**
+     * Sets CRS
+     * @param crsCode
+     */
+    public void setCRS(String crsCode) {
+        IProjection crs=CRSFactory.getCRS(crsCode);
+        setDynValue(DataStore.METADATA_CRS, crs);
+    }
+
+    /**
+     * Sets CRS
+     * @param crs
+     */
+    public void setCRS(IProjection crs) {
+        setDynValue(DataStore.METADATA_CRS, crs);
+    }
+
+
+    /**
+     * Gets CRS
+     * @return IProjection
+     */
+    public IProjection getCRS() {
+        return (IProjection) getDynValue(DataStore.METADATA_CRS);
+    }
+
+    /**
+     * Gets the 6 params of a WLD file as Strings.
+     * @return Returns WLD parameters
+     */
+    public List<String> getWldParams(){
+        return (List<String>) getDynValue(WLD_PARAMS_NAME);
+    }
+
+    /**
+     * Sets the params of a wld file
+     * @param wldParams
+     */
+    public void setWldParams(List<String> wldParams){
+        setDynValue(WLD_PARAMS_NAME,wldParams);
+    }
+
+
+    protected void loadPRJ(File file){
+        File prjFile = new File(FilenameUtils.removeExtension(file.getAbsolutePath())+".prj");
+        if (prjFile.exists()) {
+            try {
+                String contentFile = FileUtils.readFileToString(prjFile);
+                if (StringUtils.isNotEmpty(contentFile)){
+                    IProjection crs=CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, contentFile);
+                    setCRS(crs);
+                }
+
+            } catch (IOException e) {
+                logger.warn("Couldn't read wld file");
+            }
+        }
+    }
+
+    protected void loadWLD(File file){
+        File wldFile = new File(FilenameUtils.removeExtension(file.getAbsolutePath())+".wld");
+        if (wldFile.exists()) {
+            try {
+                List<String> lines = FileUtils.readLines(wldFile);
+                if (lines!=null && lines.size()==6){
+                    setWldParams(lines);
+                }
+
+            } catch (IOException e) {
+                logger.warn("Couldn't read wld file");
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/BandDescriptorServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/BandDescriptorServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/BandDescriptorServices.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.fmap.dal.raster.spi;
+
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+
+
+public interface BandDescriptorServices extends BandDescriptor {
+
+    public void setName(String name);
+
+    public void setDescription(String description);
+
+    public void setDataType(int dataType);
+
+    /**
+     * @param bandAttributeDescriptor
+     */
+    public BandAttributeDescriptor add(BandAttributeDescriptor bandAttributeDescriptor);
+
+    public BandAttributeDescriptor add(String name, Object value);
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractAwtRasterStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractAwtRasterStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/AbstractAwtRasterStoreProvider.java	(revision 46118)
@@ -0,0 +1,286 @@
+package org.gvsig.fmap.dal.raster.spi;
+
+import java.awt.image.Raster;
+//import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.CloseException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.spi.AbstractOpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.BandDescriptorServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.PageManager;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.spi.DefaultTileStruct;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractAwtRasterStoreProvider extends AbstractRasterStoreProvider {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractAwtRasterStoreProvider.class);
+    protected Envelope envelope = null;
+    private IProjection projection = null;
+    private Raster raster;
+    private List<PageManager> pageManagers;
+    private TileStruct tileStruct;
+
+    /**
+     * @param params
+     * @param storeServices
+     * @param metadata
+     */
+    public AbstractAwtRasterStoreProvider(DataStoreParameters params, DataStoreProviderServices storeServices,
+        DynObject metadata) {
+        super(params, storeServices, metadata);
+    }
+
+    protected void init(DataStoreParameters params, DataStoreProviderServices storeServices) throws InitializeException {
+        if (params == null) {
+            throw new InitializeException(
+                new NullPointerException("params is null"));
+        }
+
+        this.projection=(IProjection) params.getDynValue(DataStore.METADATA_CRS);
+
+    }
+
+    /**
+     * @param manager
+     * @param image
+     * @throws CreateEnvelopeException
+     */
+    protected void open(Raster raster) throws CreateEnvelopeException {
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        this.raster = raster;
+        pageManagers = new ArrayList<PageManager>();
+
+        for(int band=0; band<this.raster.getNumBands(); band++){
+            BandDescriptorServices bandDescriptor = getBandDescriptor(band);
+            bandDescriptor.setDataType(bufferManager.getBufferTypeFromAwtRaster(getRaster()));
+            bandDescriptor.setName(String.valueOf(band));
+            try {
+                bandDescriptor.setDescription(this.getName()+ "- band "+band);
+            } catch (Exception e) {
+                bandDescriptor.setDescription("band "+band);
+            }
+            bandDescriptor.add("X size", this.raster.getWidth());
+            bandDescriptor.add("Y size", this.raster.getHeight());
+            pageManagers.add(bufferManager.createAwtRasterBandPageManager(raster, band));
+
+        }
+
+        if (getParameters().getWldParams()!=null){
+            envelope=createWLDEnvelope(getParameters().getWldParams());
+        }else{
+        envelope =
+            GeometryLocator.getGeometryManager().createEnvelope(0, 0,
+                getRaster().getWidth(), getRaster().getHeight(), Geometry.SUBTYPES.GEOM2D);
+        }
+    }
+
+    @Override
+    public AbstractOpenRasterStoreParameters getParameters() {
+        return (AbstractOpenRasterStoreParameters) super.getParameters();
+    }
+
+    protected boolean isOpen() {
+        return this.raster!=null;
+    }
+
+    @Override
+    public int getBands() {
+        return this.getRaster().getNumBands();
+    }
+
+    @Override
+    public Buffer createBuffer(RasterQuery rasterQuery) throws BufferException {
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        int[] bandDataTypes;
+        List<PageManager> pageManagers = new ArrayList<PageManager>();
+        NoData[] bandNoData;
+        if (rasterQuery != null && !rasterQuery.getBands().isEmpty() ) {
+            List<BandQuery> bands;
+            bands = rasterQuery.getBands();
+            bandDataTypes = new int[bands.size()];
+            bandNoData = new NoData[bands.size()];
+
+            for (BandQuery bandQuery : bands) {
+                int band = bandQuery.getBand();
+                bandDataTypes[band] = this.getBandDescriptor(band).getDataType();
+                bandNoData[band] = this.getNoData(rasterQuery, band);
+                pageManagers.add(this.pageManagers.get(band));
+            }
+        } else {
+            bandDataTypes = this.getDataTypes();
+            bandNoData = this.getNoDatas();
+            pageManagers = this.pageManagers;
+        }
+
+        Buffer buffer =
+            bufferManager.createBuffer(getRaster().getHeight(), getRaster().getWidth(), bandDataTypes, bandNoData,
+                projection, envelope, pageManagers);
+
+        return buffer;
+    }
+
+    protected Envelope createWLDEnvelope(List<String> wldParams) {
+        double pixelSizeX=Double.valueOf(wldParams.get(0));
+        double rotationAxisY = Double.valueOf(wldParams.get(1));
+        double rotationAxisX = Double.valueOf(wldParams.get(2));
+        double pixelSizeY = Double.valueOf(wldParams.get(3));
+        double upperLeftPixelCenterCoordX = Double.valueOf(wldParams.get(4));
+        double upperLeftPixelCenterCoordY = Double.valueOf(wldParams.get(5));
+
+        if (0.0 != rotationAxisX || 0.0 != rotationAxisY) {
+            logger.warn(
+                "Rotation in wld file not implemented yet. It will be ignored");
+        }
+
+        double leftMostX = upperLeftPixelCenterCoordX - (pixelSizeX * 0.5);
+        double upperMostY = upperLeftPixelCenterCoordY - (pixelSizeY * 0.5);
+        double height=getRaster().getHeight()*pixelSizeY;
+        double width=getRaster().getWidth()*pixelSizeX;
+
+        // double minX, double minY, double maxX, double maxY, int subType
+        try {
+            envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                Math.min(leftMostX,leftMostX + width),
+                Math.min(upperMostY,upperMostY + height),
+                Math.max(leftMostX,leftMostX + width),
+                Math.max(upperMostY,upperMostY + height),
+                Geometry.SUBTYPES.GEOM2D);
+        } catch (LocatorException | CreateEnvelopeException e) {
+            logger.warn(
+                "Failed to create envelope from wld file with coords: minx:"+leftMostX+
+                ", miny:"+upperMostY+", maxX: "+leftMostX + width+", maxY: "+upperMostY + height);
+            e.printStackTrace();
+        }
+
+        return envelope;
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) {
+            return this.envelope;
+        } else if( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) {
+            IProjection pro = (IProjection) this.getParameters().getDynValue(DataStore.METADATA_CRS);
+            if (pro != null) {
+                return pro;
+            }
+        }
+        return super.getDynValue(name);
+    }
+
+    @Override
+    public void close() throws CloseException {
+        this.raster = null;
+    }
+
+    protected Raster getRaster() {
+        autoOpen();
+        return this.raster;
+    }
+
+    @Override
+    public TileStruct getTileStruct() {
+
+        List<Double> pixelSizes = new ArrayList<Double>();
+        Map<Integer, Double> zoomLevels = new HashMap<Integer, Double>();
+
+        if (this.tileStruct == null) {
+
+            tileStruct = new DefaultTileStruct();
+
+            int completeRows = getRaster().getHeight();
+            int completeColumns = getRaster().getWidth();
+            double completePixelSizeX = envelope.getLength(DIMENSIONS.X) / completeColumns;
+            double completePixelSizeY = envelope.getLength(DIMENSIONS.Y) / completeRows;
+
+            int maximumLength = completeColumns;
+            int tileMaximumLength = tileStruct.getColumnsPerTile(); // tileSizeX;
+            double maximumPixelSize = completePixelSizeX;
+
+            if (completeRows * tileStruct.getRowsPerTile() > completeColumns * tileStruct.getColumnsPerTile()) {
+                maximumLength = completeRows;
+                tileMaximumLength = tileStruct.getRowsPerTile();
+                maximumPixelSize = completePixelSizeY;
+            }
+
+            double pixelSize = maximumPixelSize;
+            while (maximumLength * maximumPixelSize / pixelSize > tileMaximumLength) {
+                pixelSizes.add(pixelSize);
+                pixelSize = pixelSize * 2;
+            }
+            pixelSizes.add(pixelSize);
+            int i = 0;
+            for (int zoomLevel = pixelSizes.size() - 1; zoomLevel >= 0; zoomLevel--) {
+                zoomLevels.put(i, pixelSizes.get(zoomLevel));
+                i++;
+            }
+        }
+
+        return tileStruct;
+
+    }
+
+    @Override
+    public BufferDimensions getDimensions() {
+        if(this.dimensions==null){;
+            this.dimensions = BufferLocator.getBufferManager().createBufferDimensions(this.getRaster().getHeight(), this.getRaster().getWidth(), this.envelope);
+        }
+        return this.dimensions;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        if (pageManagers != null) {
+            for (Iterator iterator = pageManagers.iterator(); iterator.hasNext();) {
+                PageManager pageManager = (PageManager) iterator.next();
+                DisposeUtils.dispose(pageManager);
+                iterator.remove();
+            }
+            pageManagers = null;
+        }
+        if(this.tileStruct != null){
+            DisposeUtils.dispose((Disposable) this.tileStruct);
+            this.tileStruct = null;
+        }
+
+        raster = null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi/RasterStoreProvider.java	(revision 46118)
@@ -0,0 +1,102 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.awt.Image;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.raster.lib.buffer.api.BandInfo;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+
+/**
+ * Interface for all raster based data providers.
+ * @author dmartinezizquierdo
+ *
+ */
+public interface RasterStoreProvider extends DataStoreProvider{
+//extends CoverageStoreProvider{
+
+    /**
+     * @param rasterQuery
+     * @return Buffer
+     * @throws BufferException
+     */
+    Buffer createBuffer(RasterQuery rasterQuery) throws BufferException;
+
+    /**
+     * Gets {@link BandDescriptor} of band received as parameter. If band does
+     * not have {@link BandAttributeDescriptor}, this method will return an
+     * empty {@link BandDescriptor}.
+     *
+     * @param band
+     *            Band to get its {@link BandDescriptor}
+     * @return BandDescriptor
+     */
+    public BandDescriptor getBandDescriptor(int band);
+
+    /**
+     * Gets bands of raster provider source
+     *
+     * @return Number of available bands from source
+     */
+    public int getBands();
+
+    /**
+     * Return the appropriate TileStruct for a tiled access to this provider, if can.
+     *
+     * @return
+     */
+    public TileStruct getTileStruct();
+
+    /**
+     * @return the image legend or null
+     */
+    public Image getImageLegend();
+
+    /**
+     * Return the parameters of this provider
+     *
+     * @return
+     */
+    public DataStoreParameters getParameters();
+
+    /**
+     * Return the buffer dimensions of the complete store.
+     * @return
+     * @throws InitializeException
+     */
+    public BufferDimensions getDimensions() throws InitializeException;
+
+    /**
+     * @return
+     */
+    public boolean isTiled();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/raster/spi
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,3 @@
+org.gvsig.fmap.dal.DALLibrary
+org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary
+
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/pom.xml	(revision 46118)
@@ -0,0 +1,69 @@
+<?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>
+    <description>This project contains the SPI of the Data Access Library used to implement providers of data.</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal</artifactId>
+        <version>2.0.344</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>
+        <dependency>
+            <groupId>org.gnu</groupId>
+            <artifactId>jel</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.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.api</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.raster.lib.buffer.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi
___________________________________________________________________
Added: svn:ignore
   + nb-configuration.xml
target/**
.classpath
.project
target
.settings/**
.settings
nbactions.xml


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGMetadata.xml	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a JIMI file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="PNG" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a PNG store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/org/gvsig/fmap/dal/file/png/PNGParameters.xml	(revision 46118)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="PNGStoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a png file</description>
+      <fields>
+        <field name="file" type="file" mandatory="true" group="Basic">
+          <description>png file</description>
+        </field>
+        <field name="crs" type="crs" mandatory="true" group="Basic">
+          <description>The coordinate reference system used in this jpg file</description>
+        </field>
+        <field name="wldParams" type="object" mandatory="false" group="Basic" classOfValue="java.util.List">
+          <description>Info given by a wld file with geolocation</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.file.png.PngLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/java/org/gvsig/fmap/dal/file/png/PngLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/java/org/gvsig/fmap/dal/file/png/PngLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/src/main/java/org/gvsig/fmap/dal/file/png/PngLibrary.java	(revision 46118)
@@ -0,0 +1,121 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.png;
+
+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.FileHelper;
+import org.gvsig.fmap.dal.file.imageio.ImageIOFileSystemServerProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProvider;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Png Library to register provider components
+ *
+ * @author fdiaz
+ *
+ */
+public class PngLibrary extends AbstractLibrary {
+
+    public static String NAME = "PNG";
+    public static String DESCRIPTION = "PNG provider";
+    public static String[] FILE_EXTENSIONS = new String[]{"png"};
+
+    @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<>();
+
+        FileHelper.registerParametersDefinition(
+                NAME + "StoreProviderParameters",
+                ImageIOStoreProviderParameters.class,
+                this.getClass().getClassLoader(),
+                this.getClass().getResource(NAME + "Parameters.xml"));
+        try {
+            try {
+                FileHelper.registerMetadataDefinition(
+                        NAME,
+                        ImageIOStoreProvider.class,
+                        this.getClass().getClassLoader(),
+                        this.getClass().getResource(NAME + "Metadata.xml"));
+            } catch (MetadataException e) {
+                exs.add(e);
+            }
+
+            DataManagerProviderServices datamanager = DALSPILocator.getDataManagerProviderServices();
+            FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
+
+            if (!datamanager.getStoreProviders().contains(NAME)) {
+                datamanager.registerStoreProviderFactory(
+                        new ImageIOStoreProviderFactory(
+                                NAME,
+                                DESCRIPTION));
+            }
+            explorerManager.registerProviderFactory(
+                    new ImageIOFileSystemServerProviderFactory(
+                            NAME,
+                            DESCRIPTION,
+                            FILE_EXTENSIONS,
+                            true
+                    )
+            );
+        } catch (Exception e) {
+            exs.add(e);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+
+    }
+
+    public static DynClass getMatadataDefinition() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynClass metadataDefinition = (DynClass) metadataManager.getDefinition(NAME);
+        return metadataDefinition;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png/pom.xml	(revision 46118)
@@ -0,0 +1,35 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.png</artifactId>
+    <name>${project.artifactId}</name>
+    <description>PNG provider</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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.dal.file.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.png
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/pom.xml	(revision 46118)
@@ -0,0 +1,40 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.bsq</artifactId>
+    <name>${project.artifactId}</name>
+    <description>BSQ, Band Sequential Format, provider</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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.mapcontext.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.basicformats</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.file.bsq.BSQLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQMetadata.xml	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a JIMI file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="BSQ" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a BSQ store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/resources/org/gvsig/fmap/dal/file/bsq/BSQParameters.xml	(revision 46118)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="BSQStoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a tiff file</description>
+      <fields>
+        <field name="file" type="file" mandatory="true" group="Basic">
+          <description>tiff file</description>
+        </field>
+        <field name="crs" type="crs" mandatory="true" group="Basic">
+          <description>The coordinate reference system used in this BSQ file</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/FileOpenRasterStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/FileOpenRasterStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/FileOpenRasterStoreParameters.java	(revision 46118)
@@ -0,0 +1,83 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.spi.AbstractOpenRasterStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+
+public class FileOpenRasterStoreParameters 
+        extends 
+            AbstractOpenRasterStoreParameters 
+        implements
+            OpenRasterStoreParameters, 
+            FilesystemStoreParameters
+    {
+
+    protected static final Logger logger = LoggerFactory.getLogger(FileOpenRasterStoreParameters.class);
+
+    public static final String FILE_PARAMTER_NAME = "file";
+
+    protected DelegatedDynObject parameters;
+
+    /**
+     * Constructor
+     * @param name
+     */
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public FileOpenRasterStoreParameters(String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(name+"StoreProviderParameters");
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    @Override
+    public boolean isValid() {
+        return (this.getFile() != null);
+    }
+
+    @Override
+    public File getFile() {
+        return (File) this.getDynValue(FILE_PARAMTER_NAME);
+    }
+
+    @Override
+    public void setFile(File file) {
+        this.setDynValue(FILE_PARAMTER_NAME, file);
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProviderFactory.java	(revision 46118)
@@ -0,0 +1,73 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.File;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+
+
+public class BSQFileSystemServerProviderFactory extends AbstractFilesystemServerExplorerProviderFactory {
+
+    protected String[] fileExtensions;
+
+    public BSQFileSystemServerProviderFactory(
+            String name, 
+            String description, 
+            String[] fileExtensions
+        ) {
+        super(name, description);
+        this.fileExtensions = fileExtensions;
+    }
+
+    @Override
+    public FilesystemServerExplorerProvider createProvider() throws InitializeException {
+        return new BSQFileSystemServerProvider(
+                this,
+                this.getName(),
+                this.getDescription(),
+                this.fileExtensions
+        );
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return FilenameUtils.isExtension(pathname.getName().toLowerCase(), this.fileExtensions);
+    }
+
+  @Override
+  public int getMode() {
+    return DataServerExplorer.MODE_RASTER;
+  }
+
+  @Override
+  public boolean isHidden() {
+    return DALLocator.getDataManager().isTheOldRasterRegistered();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,66 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProviderFactory;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+
+
+public class BSQStoreProviderFactory extends AbstractRasterStoreProviderFactory {
+
+    protected static final Logger logger = LoggerFactory.getLogger(BSQStoreProviderFactory.class);
+
+    public BSQStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    @Override
+    public RasterStoreProvider createProvider(DataParameters parameters,
+        DataStoreProviderServices providerServices) throws InitializeException {
+        return new BSQStoreProvider(
+                this.getName(), 
+                this.getDescription(), 
+                (OpenRasterStoreParameters)parameters, 
+                providerServices
+        );
+    }
+
+    @Override
+    public OpenRasterStoreParameters createParameters() {
+        return new FileOpenRasterStoreParameters(this.getName());
+    }
+
+    @Override
+    public boolean isHidden() {
+      return DALLocator.getDataManager().isTheOldRasterRegistered();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQLibrary.java	(revision 46118)
@@ -0,0 +1,113 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+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.FileHelper;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * BSQ, Band Sequential Format, Library to register provider components
+ *
+ */
+public class BSQLibrary extends AbstractLibrary {
+
+    public static String NAME = "BSQ";
+    public static String DESCRIPTION = "BSQ provider";
+    public static String[] FILE_EXTENSIONS = new String[]{"bsq"};
+
+    @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<>();
+
+
+        FileHelper.registerParametersDefinition(
+                NAME + "StoreProviderParameters",
+                FileOpenRasterStoreParameters.class,
+                this.getClass().getClassLoader(),
+                this.getClass().getResource(NAME + "Parameters.xml"));
+        try {
+            try {
+                FileHelper.registerMetadataDefinition(
+                        NAME,
+                        BSQStoreProvider.class,
+                        this.getClass().getClassLoader(),
+                        this.getClass().getResource(NAME + "Metadata.xml"));
+            } catch (MetadataException e) {
+                exs.add(e);
+            }
+            
+            DataManagerProviderServices datamanager = DALSPILocator.getDataManagerProviderServices();
+            FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
+
+            if (!datamanager.getStoreProviders().contains(NAME)) {
+                datamanager.registerStoreProviderFactory(
+                        new BSQStoreProviderFactory(
+                                NAME,
+                                DESCRIPTION));
+            }
+            explorerManager.registerProviderFactory(
+                    new BSQFileSystemServerProviderFactory(
+                            NAME,
+                            DESCRIPTION,
+                            FILE_EXTENSIONS
+                    )
+            );
+        } catch (Exception e) {
+            exs.add(e);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+    }
+
+    public static DynClass getMatadataDefinition() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynClass metadataDefinition = (DynClass) metadataManager.getDefinition(NAME);
+        return metadataDefinition;
+    }}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/AbstractFileRasterStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/AbstractFileRasterStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/AbstractFileRasterStoreProvider.java	(revision 46118)
@@ -0,0 +1,327 @@
+
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.io.FilenameUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.basicformats.FormatsFile;
+import org.gvsig.basicformats.PRJFile;
+import org.gvsig.basicformats.STXFile;
+import org.gvsig.basicformats.WLDFile;
+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.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.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.spi.AbstractAwtRasterStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProvider;
+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.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.PageManager;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.spi.DefaultTileStruct;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public abstract class AbstractFileRasterStoreProvider 
+        extends AbstractRasterStoreProvider
+        implements ResourceConsumer
+    {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractAwtRasterStoreProvider.class);
+
+    protected Envelope envelope = null;
+    protected IProjection projection = null;
+    protected List<PageManager> pageManagers;
+    protected TileStruct tileStruct;
+    protected String storeProviderName;
+    protected String storeProviderDescription;
+    protected ResourceProvider resource;
+
+    protected WLDFile wldFile;
+    protected PRJFile prjFile;
+    protected STXFile stxFile;
+    // protected CLRFile clrFile;
+    
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public AbstractFileRasterStoreProvider(
+        String storeProviderName, 
+        String storeProviderDescription, 
+        OpenRasterStoreParameters params,
+        DataStoreProviderServices storeServices
+        ) throws InitializeException {
+        super(
+                params,
+                storeServices,
+                FileHelper.newMetadataContainer(storeProviderName)
+        );
+        this.storeProviderName = storeProviderName;
+        this.storeProviderDescription = storeProviderDescription;
+        this.init(params, storeServices);
+    }
+    
+    protected void init(OpenRasterStoreParameters params, DataStoreProviderServices storeServices) throws InitializeException {
+        File file = this.getFile();
+        if (file == null) {
+            throw new InitializeException(
+                new NullPointerException(this.storeProviderName +" file is null"));
+        }
+
+        this.wldFile = FormatsFile.getWLDFile(this.getFile());
+        this.prjFile = FormatsFile.getPRJFile(this.getFile());
+        this.stxFile = FormatsFile.getSTXFile(this.getFile());
+        // this.clrFile = UtilsFile.createCLRFile(this.getFile());
+
+        this.projection = (IProjection) params.getDynValue(DataStore.METADATA_CRS);
+        if( this.projection==null ) {
+            this.projection = this.prjFile.getCRS();
+        }
+        
+        resource = this.createResource(
+            FileResource.NAME,
+            new Object[] { file.getAbsolutePath() }
+        );
+
+        resource.addConsumer(this);
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return this.resource;
+    }
+
+    protected File getFile() {
+        return ((FilesystemStoreParameters)this.getParameters()).getFile();
+    }
+    
+    @Override
+    public Object getSourceId() {
+        return this.getFile();
+    }
+
+    @Override
+    public String getName() {
+        String name = this.getFile().getName();
+        return FilenameUtils.getBaseName(name);
+    }
+
+    @Override
+    public String getFullName() {
+        return this.getFile().getAbsolutePath();
+    }
+
+    @Override
+    public String getProviderName() {
+        return this.storeProviderName;
+    }
+    
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+            DataStoreNotification.RESOURCE_CHANGED,
+            resource);
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+    }
+    
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException, ValidateDataParametersException {
+        DataManager manager = DALLocator.getDataManager();
+        FilesystemServerExplorerParameters params;
+        try {
+            params = (FilesystemServerExplorerParameters) manager
+            .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+            params.setRoot(this.getFile().getParent());
+            return manager.openServerExplorer(FilesystemServerExplorer.NAME,params);
+        } catch (DataException | ValidateDataParametersException e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+
+    }
+
+    @Override
+    public BufferDimensions getDimensions() {
+        if(this.dimensions==null){
+            this.dimensions = BufferLocator.getBufferManager().createBufferDimensions(
+                    this.getRows(), 
+                    this.getColumns(), 
+                    this.getEnvelope()
+            );
+        }
+        return this.dimensions;
+    }
+
+    @Override
+    public TileStruct getTileStruct() {
+
+        List<Double> pixelSizes = new ArrayList<>();
+        Map<Integer, Double> zoomLevels = new HashMap<>();
+
+        if (this.tileStruct == null) {
+
+            tileStruct = new DefaultTileStruct();
+
+            int completeRows = getRows();
+            int completeColumns = getColumns();
+            double completePixelSizeX = envelope.getLength(Geometry.DIMENSIONS.X) / completeColumns;
+            double completePixelSizeY = envelope.getLength(Geometry.DIMENSIONS.Y) / completeRows;
+
+            int maximumLength = completeColumns;
+            int tileMaximumLength = tileStruct.getColumnsPerTile(); // tileSizeX;
+            double maximumPixelSize = completePixelSizeX;
+
+            if (completeRows * tileStruct.getRowsPerTile() > completeColumns * tileStruct.getColumnsPerTile()) {
+                maximumLength = completeRows;
+                tileMaximumLength = tileStruct.getRowsPerTile();
+                maximumPixelSize = completePixelSizeY;
+            }
+
+            double pixelSize = maximumPixelSize;
+            while (maximumLength * maximumPixelSize / pixelSize > tileMaximumLength) {
+                pixelSizes.add(pixelSize);
+                pixelSize = pixelSize * 2;
+            }
+            pixelSizes.add(pixelSize);
+            int i = 0;
+            for (int zoomLevel = pixelSizes.size() - 1; zoomLevel >= 0; zoomLevel--) {
+                zoomLevels.put(i, pixelSizes.get(zoomLevel));
+                i++;
+            }
+        }
+
+        return tileStruct;
+
+    }
+    
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        switch(name) {
+            case DataStore.METADATA_CRS:
+                return this.getProjection();
+                
+            case DataStore.METADATA_ENVELOPE:
+                return this.getProjection();
+                
+            default:
+                return super.getDynValue(name);
+        }
+    }
+
+    @Override
+    public void setDynValue(String name, Object value)
+        throws DynFieldNotFoundException {
+        switch(name) {
+            case DataStore.METADATA_CRS:
+                this.projection = (IProjection) value;
+                break;
+                
+            case DataStore.METADATA_ENVELOPE:
+                this.envelope = (Envelope) value;
+                break;
+                
+            default:
+                super.setDynValue(name, value);
+                break;
+        }
+    }
+    
+    protected List<PageManager> getPageManagers() {
+        this.autoOpen();
+        return this.pageManagers;
+    }
+
+    protected IProjection getProjection() {
+        this.autoOpen();
+        return this.projection;
+    }
+
+    protected Envelope getEnvelope() {
+        this.autoOpen();
+        return this.envelope;
+    }
+    
+    @Override
+    public Buffer createBuffer(RasterQuery rasterQuery) throws BufferException {
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        int[] bandDataTypes;
+        List<PageManager> thePageManagers = new ArrayList<>();
+        NoData[] bandNoData;
+        if (rasterQuery != null && !rasterQuery.getBands().isEmpty() ) {
+            List<BandQuery> bands;
+            bands = rasterQuery.getBands();
+            bandDataTypes = new int[bands.size()];
+            bandNoData = new NoData[bands.size()];
+
+            for (BandQuery bandQuery : bands) {
+                int band = bandQuery.getBand();
+                bandDataTypes[band] = this.getBandDescriptor(band).getDataType();
+                bandNoData[band] = this.getNoData(rasterQuery, band);
+                thePageManagers.add(this.getPageManagers().get(band));
+            }
+        } else {
+            bandDataTypes = this.getDataTypes();
+            bandNoData = this.getNoDatas();
+            thePageManagers = this.getPageManagers();
+        }
+
+        Buffer buffer = bufferManager.createBuffer(
+                    this.getRows(), 
+                    this.getColumns(), 
+                    bandDataTypes, 
+                    bandNoData,
+                    this.getProjection(), 
+                    this.getEnvelope(), 
+                    thePageManagers
+            );
+
+        return buffer;    
+    }
+
+    @Override
+    public abstract void open() throws OpenException;
+    
+    @Override
+    public abstract int getBands();
+    
+    public abstract int getRows();
+    
+    public abstract int getColumns();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQFileSystemServerProvider.java	(revision 46118)
@@ -0,0 +1,158 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.ByteOrder;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.basicformats.FormatsFile;
+import org.gvsig.basicformats.HDRFile;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+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.raster.NewRasterStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+
+public class BSQFileSystemServerProvider extends AbstractFilesystemServerExplorerProvider {
+
+    protected String[] fileExtensions;
+
+    public BSQFileSystemServerProvider(
+            FilesystemServerExplorerProviderFactory factory,
+            String name,
+            String description,
+            String[] fileExtensions
+    ) {
+        super(factory, name, description);
+        this.fileExtensions = fileExtensions;
+    }
+
+    @Override
+    public boolean canCreate() {
+        return true;
+    }
+
+    @Override
+    public NewDataStoreParameters getCreateParameters() throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void create(NewDataStoreParameters parameters, boolean overwrite) throws CreateException {
+        FileOutputStream fos = null;
+        try {
+            Buffer buffer = ((NewRasterStoreParameters) parameters).getBuffer();
+            if (!buffer.areAllBandsOfTheSameType()) {
+                throw new IllegalArgumentException("The BSQ format does not support bands of different types.");
+            }
+            BufferDimensions dimensions = buffer.getDimensions();
+            File file = ((FilesystemStoreParameters) parameters).getFile();
+            fos = new FileOutputStream(file);
+            DataOutputStream dos = new DataOutputStream(fos);
+            HDRFile hdr = FormatsFile.createHDRFile();
+            hdr.setDataType(buffer.getBandTypes()[0]);
+            hdr.setNBands(buffer.getBandCount());
+            hdr.setByteOrder(ByteOrder.nativeOrder());
+            hdr.setDimensions(
+                    dimensions.getRows(),
+                    dimensions.getColumns(),
+                    dimensions.getEnvelope()
+            );
+            for (int nband = 0; nband < buffer.getBandCount(); nband++) {
+                writeBand(dos, buffer.getBand(nband));
+            }
+            hdr.write(file);
+        } catch (Exception ex) {
+            throw new CreateException(this.getName(), ex);
+        } finally {
+            IOUtils.closeQuietly(fos);
+        }
+    }
+
+    void writeBand(DataOutputStream dos, Band band) throws IOException {
+        int dataType = band.getDataType();
+        Object rowBuffer = band.createRowBuffer();
+        for (int row = 0; row < band.getRows(); row++) {
+            band.fetchRow(row, rowBuffer);
+            switch (dataType) {
+                case BufferManager.TYPE_BYTE:
+                    byte[] byteBuffer = (byte[]) rowBuffer;
+                    for (int n = 0; n < byteBuffer.length; n++) {
+                        dos.writeByte(byteBuffer[n]);
+                    }
+                    break;
+                case BufferManager.TYPE_SHORT:
+                case BufferManager.TYPE_USHORT:
+                    short[] shortBuffer = (short[]) rowBuffer;
+                    for (int n = 0; n < shortBuffer.length; n++) {
+                        dos.writeShort(shortBuffer[n]);
+                    }
+                    break;
+                case BufferManager.TYPE_INT:
+                    int[] intBuffer = (int[]) rowBuffer;
+                    for (int n = 0; n < intBuffer.length; n++) {
+                        dos.writeInt(intBuffer[n]);
+                    }
+                    break;
+                case BufferManager.TYPE_FLOAT:
+                    float[] floatBuffer = (float[]) rowBuffer;
+                    for (int n = 0; n < floatBuffer.length; n++) {
+                        dos.writeFloat(floatBuffer[n]);
+                    }
+                    break;
+
+                case BufferManager.TYPE_DOUBLE:
+                    double[] doubleBuffer = (double[]) rowBuffer;
+                    for (int n = 0; n < doubleBuffer.length; n++) {
+                        dos.writeDouble(doubleBuffer[n]);
+                    }
+                    break;
+
+                default:
+                    throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
+            }
+        }
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_RASTER;
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return FilenameUtils.isExtension(pathname.getName().toLowerCase(), this.fileExtensions);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQStoreProvider.java	(revision 46118)
@@ -0,0 +1,129 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import org.gvsig.basicformats.FormatsFile;
+import org.gvsig.basicformats.HDRFile;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.spi.BandDescriptorServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.exception.BaseException;
+
+public class BSQStoreProvider extends AbstractFileRasterStoreProvider {
+
+    // https://www.qgistutorials.com/en/docs/open_bil_bip_bsq_files.html
+    // http://glcf.umd.edu/data/landcover/data.shtml
+    protected HDRFile hdrFile;
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public BSQStoreProvider(
+            String name,
+            String description,
+            OpenRasterStoreParameters params,
+            DataStoreProviderServices storeServices) throws InitializeException {
+        super(
+                name,
+                description,
+                params,
+                storeServices
+        );
+        this.init(params, storeServices);
+    }
+
+    @Override
+    public int getBands() {
+        this.autoOpen();
+        return this.hdrFile.getNbands();
+    }
+
+    @Override
+    public int getRows() {
+        this.autoOpen();
+        return this.hdrFile.getNrows();
+    }
+
+    @Override
+    public int getColumns() {
+        this.autoOpen();
+        return this.hdrFile.getNcols();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        this.hdrFile = null;
+    }
+
+    @Override
+    public void open() throws OpenException {
+        if (this.hdrFile != null) {
+            return;
+        }
+        HDRFile theHDRFile;
+        theHDRFile = FormatsFile.getHDRFile(this.getFile());
+        if (theHDRFile == null || !theHDRFile.isValid()) {
+            throw new OpenException(this.getProviderName(), null);
+        }
+        this.hdrFile = theHDRFile;
+        this.envelope = this.hdrFile.getEnvelope();
+        if (this.envelope == null) {
+            this.envelope = this.wldFile.getEnvelope(
+                    this.hdrFile.getNrows(),
+                    this.hdrFile.getNcols()
+            );
+        }
+        try {
+            int dataType = this.hdrFile.getDataType();
+            this.pageManagers = new ArrayList<>();
+            for (int nband = 0; nband < this.hdrFile.getNbands(); nband++) {
+                BandDescriptorServices bandDescriptor = getBandDescriptor(nband);
+                bandDescriptor.setDataType(dataType);
+                bandDescriptor.setName(String.valueOf(nband));
+                try {
+                    bandDescriptor.setDescription(this.getName() + "- band " + nband);
+                } catch (Exception e) {
+                    bandDescriptor.setDescription("band " + nband);
+                }
+                bandDescriptor.add("X size", this.hdrFile.getNcols());
+                bandDescriptor.add("Y size", this.hdrFile.getNrows());
+                BSQBandPageManager pageManager = new BSQBandPageManager(
+                        getFile(),
+                        nband * this.hdrFile.getBandSize(),
+                        this.hdrFile.getNrows(),
+                        this.hdrFile.getNcols(),
+                        dataType,
+                        this.hdrFile.getByteorder()
+                );
+                this.pageManagers.add(pageManager);
+            }
+        } catch (IOException ex) {
+            this.hdrFile = null;
+            throw new OpenException(storeProviderName, ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQBandPageManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQBandPageManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq/src/main/java/org/gvsig/fmap/dal/file/bsq/BSQBandPageManager.java	(revision 46118)
@@ -0,0 +1,123 @@
+
+package org.gvsig.fmap.dal.file.bsq;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.ShortBuffer;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.raster.lib.buffer.api.BandInfo;
+import org.gvsig.raster.lib.buffer.api.BandPageManager;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+
+public class BSQBandPageManager extends AbstractDisposable implements BandPageManager {
+
+    private RandomAccessFile  raf;
+    private final int rows;
+    private final int columns;
+    private final int dataType;
+    private final File file;
+    private final long startpos;
+    private final ByteOrder byteOrder;
+
+    /**
+     * @param file
+     * @param startpos
+     * @param rows
+     * @param columns
+     * @param dataType
+     * @param byteOrder
+     * @throws IOException
+     */
+    public BSQBandPageManager(File file, long startpos, int rows, int columns, int dataType, ByteOrder  byteOrder) throws IOException {
+        this.rows = rows;
+        this.columns = columns;
+        this.dataType = dataType;
+        this.file = file;
+        this.startpos = startpos;
+        this.byteOrder = byteOrder;
+
+        this.raf = new RandomAccessFile(this.file, "r");
+        // BufferManager bufferManager = BufferLocator.getBufferManager();
+        //raf.setLength(rows*columns*bufferManager.getDataTypeSize(dataType));
+
+    }
+
+    @Override
+    public void load(Buffer buffer, int row, int rows, int dataType) throws IOException {
+
+        long pos = row*this.columns + this.startpos;
+        raf.seek(pos);
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        int dataTypeSize = bufferManager.getDataTypeSize(dataType);
+        int elements = buffer.capacity();
+        
+        ByteBuffer byteBuffer = ByteBuffer.allocate(elements * dataTypeSize);
+        byteBuffer.order(this.byteOrder);
+        raf.read(byteBuffer.array());
+
+        buffer.rewind();
+        byteBuffer.rewind();
+
+        switch (dataType) {
+        case BufferManager.TYPE_BYTE:
+            ((ByteBuffer) buffer).put(byteBuffer);
+            break;
+        case BufferManager.TYPE_SHORT:
+        case BufferManager.TYPE_USHORT:
+            for( int element =0 ; element<elements ; element++ ) {
+                ((ShortBuffer) buffer).put(byteBuffer.getShort());
+            }
+            break;
+        case BufferManager.TYPE_INT:
+            for( int element =0 ; element<elements ; element++ ) {
+                ((IntBuffer) buffer).put(byteBuffer.getInt());
+            }
+            break;
+        case BufferManager.TYPE_FLOAT:
+            for( int element=0 ; element<elements ; element++ ) {
+                ((FloatBuffer) buffer).put(byteBuffer.getFloat());
+            }
+            break;
+
+        case BufferManager.TYPE_DOUBLE:
+            for( int element=0 ; element<elements ; element++ ) {
+                ((DoubleBuffer) buffer).put(byteBuffer.getDouble());
+            }
+            break;
+
+        default:
+            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
+        }
+    }
+
+    @Override
+    public void save(Buffer buffer, int row, int rows, int dataType) throws IOException {
+
+    }
+
+    @Override
+    public boolean isSupportedSave() {
+        return false;
+    }
+
+    @Override
+    public BandInfo getBandInfo() {
+        return null;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        IOUtils.closeQuietly(this.raf);
+        this.raf = null;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.bsq
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.DALFileLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+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.FilesystemServerExplorerFactory;
+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 {
+
+    @Override
+    public void doRegistration() {
+        registerAsServiceOf(DALLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+    }
+
+    @Override
+    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.getServerExplorerRegister().exits(FilesystemServerExplorer.NAME)) {
+            dataman.registerServerExplorerFactory(
+                    new FilesystemServerExplorerFactory()
+            );
+            DALFileLocator.registerFilesystemSeverExplorerManager(
+                    DefaultFilesystemServerExplorerManager.class
+            );
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.dynobject.DynObjectEncoder;
+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;
+    }
+
+    @Override
+    public String getResurceID() {
+        DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder();
+        return encoder.encodePair("file",this.getFile().getAbsolutePath());
+    }
+    
+    
+
+    @Override
+    public String getTypeName() {
+        return FileResource.NAME;
+    }
+
+    @Override
+    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;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/FilesystemServerExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerFactory.java	(revision 46118)
@@ -0,0 +1,61 @@
+
+package org.gvsig.fmap.dal.serverexplorer.filesystem;
+
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.DefaultFilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorerFactory;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+
+
+public class FilesystemServerExplorerFactory
+    extends AbstractDataServerExplorerFactory {
+
+    public FilesystemServerExplorerFactory() {
+        super(
+                FilesystemServerExplorer.NAME,
+                null
+        );
+    }
+
+    @Override
+    public int allowCreate() {
+        return super.allowCreate(); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+    @Override
+    public FilesystemServerExplorerParameters createParameters() {
+        return new FilesystemServerExplorerParameters();
+    }
+
+    @Override
+    public FilesystemServerExplorer create(
+            DataServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+    ) throws InitializeException {
+        FilesystemServerExplorer explorer = new DefaultFilesystemServerExplorer(
+                (FilesystemServerExplorerParameters) parameters, 
+                providerServices);
+        return explorer;
+    }
+
+    @Override
+    public boolean isStoreSupported(String name) {
+        FilesystemServerExplorerManager manager = DALFileLocator.getFilesystemServerExplorerManager();
+        Iterator<FilesystemServerExplorerProviderFactory> it = manager.getRegisteredProviders();
+        while( it.hasNext() ) {
+           FilesystemServerExplorerProviderFactory factory = it.next();
+           if( factory!=null && StringUtils.equalsIgnoreCase(name, factory.getName()) ) {
+               return true;
+           }
+        }
+        return false;
+                
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.serverexplorer.filesystem;
+
+import java.io.File;
+import org.gvsig.tools.util.HasAFile;
+
+public interface FilesystemStoreParameters extends HasAFile {
+
+        @Override
+	public File getFile();
+
+        @Override
+	public void setFile(File file);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.";
+
+	/**
+	 * Registers a FilesystemServerExplorerManager
+	 * @param name
+	 * @param description
+	 * @param filesystemServerProvicerClass
+	 */
+    public void registerProvider(String name, String description,
+        Class filesystemServerProvicerClass);
+
+    /**
+     * Registers a FilesystemServerExplorerProviderFactory
+     * @param filesystemServerExplorerProviderFactory
+     */
+    public void registerProviderFactory(
+        FilesystemServerExplorerProviderFactory filesystemServerExplorerProviderFactory);
+
+    /**
+     * Get registered FilesystemServerExplorerManager
+     * @return
+     */
+    public Iterator getRegisteredProviders();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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 String getResourceRootPathName(DataStoreParameters parameters);
+	
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/FilesystemServerExplorerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerProviderFactory.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.spi;
+
+import java.io.FileFilter;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.tools.extensionpoint.ExtensionSingleton;
+
+/**
+ * Creates File System Server Explorer Providers
+ * @author dmartinezizquierdo
+ *
+ */
+public interface FilesystemServerExplorerProviderFactory extends ExtensionSingleton,
+    FileFilter, FilesystemProviderServices {
+
+    /**
+     * Builds a specific provider
+     * @param services
+     * @return the provider
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     */
+    public FilesystemServerExplorerProvider createProvider() throws InitializeException;
+
+    public boolean isHidden();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/FilesystemProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FilesystemProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FilesystemProviderServices.java	(revision 46118)
@@ -0,0 +1,49 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.spi;
+
+import org.gvsig.fmap.dal.DataParameters;
+
+/**
+ * Parameters to create a FilesystemServerExplorerProviderFactory
+ * @author dmartinezizquierdo
+ *
+ */
+public interface FilesystemProviderServices {//extends DataParameters
+    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 can create new stores.
+     *
+     * @return YES if has creation support
+     */
+    public int allowCreate();
+
+    /**
+     * Returns the mode supported
+     * @return DataServerExplorer.MODE
+     */
+    public int getMode();
+
+    /**
+     * Return true if any mode in the parameter is supported.
+     *
+     * @param mode
+     * @return boolean
+     */
+    public boolean isMode(int mode);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.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 = FILESYSTEM_SERVER_EXPLORER_NAME;
+
+	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 Iterator getFilters();
+
+	public Iterator getFilters(int mode);
+	
+	public FilesystemFileFilter getFilter(int mode, String description);
+	
+	public FilesystemFileFilter getGenericFilter();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/FilesystemServerExplorerProviderFactoryWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerProviderFactoryWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FilesystemServerExplorerProviderFactoryWrapper.java	(revision 46118)
@@ -0,0 +1,85 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import java.io.File;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemProviderServices;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+
+/**
+ * Class to wrap a FilesystemServerExplorerProvider into a Factory
+ * @author dmartinezizquierdo
+ *
+ */
+public class FilesystemServerExplorerProviderFactoryWrapper
+    implements FilesystemServerExplorerProviderFactory{
+
+    String name;
+    String description;
+    FilesystemServerExplorerProvider wrappedFilesystemServerExplorerProvider;
+
+    FilesystemServerExplorerProviderFactoryWrapper(String name, String description,
+        Class filesystemServerExplorerProviderClass){
+        this.name=name;
+        this.description=description;
+        try {
+            this.wrappedFilesystemServerExplorerProvider=(FilesystemServerExplorerProvider) filesystemServerExplorerProviderClass.newInstance();
+        } catch (Exception e) {
+            throw new RuntimeException(e);// FIXME !!!
+        }
+    }
+
+    @Override
+    public FilesystemServerExplorerProvider createProvider()
+        throws InitializeException {
+        return wrappedFilesystemServerExplorerProvider;
+    }
+
+
+
+    @Override
+    public boolean accept(File pathname) {
+        return wrappedFilesystemServerExplorerProvider.accept(pathname);
+    }
+
+
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public int allowCreate() {
+        if (wrappedFilesystemServerExplorerProvider.canCreate()){
+            return FilesystemProviderServices.YES;
+        }else{
+            return FilesystemProviderServices.NO;
+        }
+    }
+
+    @Override
+    public int getMode() {
+        return wrappedFilesystemServerExplorerProvider.getMode();
+    }
+
+    @Override
+    public boolean isMode(int mode) {
+        return wrappedFilesystemServerExplorerProvider.isMode(mode);
+    }
+
+  @Override
+  public boolean isHidden() {
+    return false;
+  }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,625 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.Objects;
+import java.util.Set;
+import java.util.function.Predicate;
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.fmap.dal.DALFileLocator;
+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.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.feature.NewFeatureStoreParameters;
+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.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorer;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.ZipResourcesStorage;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.resourcesstorage.FilesResourcesStorage;
+import org.gvsig.tools.util.FilteredIterator;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFilesystemServerExplorer extends AbstractDataServerExplorer
+        implements FilesystemServerExplorerProviderServices,
+        FilesystemFileFilter {
+
+    private File root;
+    private File current; // Current path
+    private List<FilesystemServerExplorerProvider> serverProviders;
+
+    public DefaultFilesystemServerExplorer(
+            FilesystemServerExplorerParameters parameters,
+            DataServerExplorerProviderServices services)
+            throws InitializeException {
+        super(parameters, services);
+        if (this.getFSParameters().getRoot() != null) {
+            this.root = new File(this.getFSParameters().getRoot());
+        }
+        if (this.getFSParameters().getInitialpath() != null) {
+            this.current = new File(this.getFSParameters().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.getFSParameters().getRoot());
+        }
+    }
+
+    private FilesystemServerExplorerParameters getFSParameters() {
+        return (FilesystemServerExplorerParameters) this.getParameters();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        this.root = null;
+        super.doDispose();
+    }
+
+    @Override
+    public List list(int mode) throws DataException {
+        if (this.current == null) {
+            throw new IllegalStateException();
+        }
+        if (!this.current.exists()) {
+            throw new org.gvsig.fmap.dal.exception.FileNotFoundException(this.current);
+        }
+
+        if (!this.current.isDirectory()) {
+            throw 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 (String f : allfiles) {
+            File file = new File(this.root, f);
+            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()) {
+            throw new FileNotFoundException(this.current);
+        }
+
+        if (!this.current.isDirectory()) {
+            throw 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;
+
+        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);
+
+            if( ndsp instanceof NewFeatureStoreParameters ) {
+                DataManager dataManager = DALLocator.getDataManager();
+                ResourcesStorage resources = this.getResourcesStorage(ndsp);
+                dataManager.writeDALResource(resources, ((NewFeatureStoreParameters) ndsp).getDefaultFeatureType());
+            }
+            return true;
+        } catch (DataException | 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 providerName)
+            throws InitializeException, ProviderNotRegisteredException {
+        Iterator providers = getProviders(FilesystemServerExplorer.MODE_ALL).iterator();
+        FilesystemServerExplorerProvider provider;
+        while (providers.hasNext()) {
+            provider = (FilesystemServerExplorerProvider) providers.next();
+            if (provider.getDataStoreProviderName().equals(providerName)) {
+                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);
+            try {
+                params.validate();
+            } catch(Throwable th) {
+                LOGGER.debug("Can't validate parameters for file '"+Objects.toString(file)+"'.", th);
+            }
+            return params;
+
+        }
+        return null;
+    }
+
+    public List<String> 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;
+    }
+
+    @Override
+    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 {
+        if (!(dsp instanceof FilesystemStoreParameters)) {
+            throw 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<FilesystemServerExplorerProvider> getProviders() {
+        if (this.serverProviders == null) {
+            Iterator iter = DALFileLocator.getFilesystemServerExplorerManager()
+                    .getRegisteredProviders();
+            this.serverProviders = new ArrayList();
+            Extension ext;
+            FilesystemServerExplorerProvider provider;
+            FilesystemServerExplorerProviderFactory factory;
+            while (iter.hasNext()) {
+                ext = (Extension) iter.next();
+                try {
+                    factory = (FilesystemServerExplorerProviderFactory) ext.create();
+                } catch (Exception e) {
+                    throw new RuntimeException(e);// FIXME !!!
+                }
+                try {
+                    provider=factory.createProvider();
+                } catch (InitializeException e) {
+                    throw new RuntimeException(e);// FIXME !!!
+                }
+                provider.initialize(this);
+                this.serverProviders.add(provider);
+            }
+        }
+        return this.serverProviders;
+    }
+
+    public List getProviders(int mode) {
+        List<FilesystemServerExplorerProvider> providers = new ArrayList();
+        List<FilesystemServerExplorerProvider> allProviders = getProviders();
+        for (FilesystemServerExplorerProvider provider:allProviders){
+            if (provider.isMode(mode)) {
+                provider.initialize(this);
+                providers.add(provider);
+            }
+        }
+        return providers;
+    }
+
+    @Override
+    public Iterator getFilters(int mode) {
+        final Iterator<FilesystemServerExplorerProvider> it = this.getProviders(mode).iterator();
+        return new FilteredIterator(it, new Predicate<FilesystemServerExplorerProvider>() {
+          @Override
+          public boolean test(FilesystemServerExplorerProvider p) {
+            if( p instanceof AbstractFilesystemServerExplorerProvider ) {
+              FilesystemServerExplorerProviderFactory factory = ((AbstractFilesystemServerExplorerProvider)p).getFactory();
+              if( factory!=null ) {
+                return !factory.isHidden();
+              }
+            }
+            return true;
+          }
+        });
+    }
+
+    @Override
+    public Iterator<FilesystemServerExplorerProvider> getFilters() {
+        final Iterator<FilesystemServerExplorerProvider> it = this.getProviders().iterator();
+        return new FilteredIterator(it, new Predicate<FilesystemServerExplorerProvider>() {
+          @Override
+          public boolean test(FilesystemServerExplorerProvider p) {
+            if( p instanceof AbstractFilesystemServerExplorerProvider ) {
+              FilesystemServerExplorerProviderFactory factory = ((AbstractFilesystemServerExplorerProvider)p).getFactory();
+              if( factory!=null ) {
+                return !factory.isHidden();
+              }
+            }
+            return true;
+          }
+        });
+    }
+
+    @Override
+    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() {
+
+            @Override
+            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;
+            }
+
+            @Override
+            public String getDescription() {
+                return description;
+            }
+
+            @Override
+            public String getDataStoreProviderName() {
+                return null;
+            }
+        };
+        return filter;
+    }
+
+    @Override
+    public FilesystemFileFilter getGenericFilter() {
+        // FIXME: Este metodo, getGenericFilter, no tengo claro que deba existir (jjdc)
+        return this;
+    }
+
+    @Override
+    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 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;
+    }
+
+    @Deprecated
+    @Override
+    public File getResourcePath(DataStore dataStore, String resourceName) throws DataException {
+        try {
+            ResourcesStorage theResourceStorage = this.getResourcesStorage(dataStore);
+            if( theResourceStorage==null ) {
+                return null;
+            }
+            FilesResourcesStorage.FileResource res = (FilesResourcesStorage.FileResource) theResourceStorage.getResource(resourceName);
+            if( res==null ) {
+                return null;
+            }
+            return res.getFile();
+        } catch(Exception ex) {
+            return null;
+        }
+    }
+
+    private String getResourcePathName(DataStoreParameters parameters) {
+        FilesystemServerExplorerProvider provider;
+        try {
+            provider = this.getProvider(parameters.getProviderName());
+        } catch (Exception ex) {
+            return null;
+        }
+        if (provider == null) {
+            return null;
+        }
+        String pathName = provider.getResourceRootPathName(parameters);
+        if (pathName == null) {
+            return null;
+        }
+        pathName = FilenameUtils.removeExtension(pathName);
+        return pathName;
+    }
+    
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStoreParameters parameters) {
+        String pathName = this.getResourcePathName(parameters);
+        ResourcesStorage theResourcesStorage;
+        if( ZipResourcesStorage.existsStorage(pathName) ) {
+            String resourceName = FilenameUtils.getBaseName(pathName);
+            theResourcesStorage = new ZipResourcesStorage(
+                    pathName,
+                    resourceName
+            );
+        } else {
+            theResourcesStorage = new FilesResourcesStorage(
+                    pathName
+            );
+        }
+        return theResourcesStorage;
+    }
+    
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStore dataStore) {
+        ResourcesStorage theResourcesStorage;
+        if( dataStore.getChildren().isEmpty() ) {
+            theResourcesStorage = this.getResourcesStorage(dataStore.getParameters());
+        } else {
+            String pathName = this.getResourcePathName(dataStore.getParameters());
+            theResourcesStorage = new ZipResourcesStorage(
+                    pathName,
+                    dataStore.getName()
+            );
+        }
+        return theResourcesStorage;
+    }
+    
+    @Override
+    public DataStoreParameters get(String name) throws DataException {
+        File theFile = new File(this.current,name);
+        DataStoreParameters dsp = this.createStoreParameters(theFile);
+        return dsp;
+    }
+
+    @Override
+    public boolean exists(DataStoreParameters parameters) throws DataException {
+        if( !(parameters instanceof FilesystemStoreParameters) ) {
+            return false;
+        }
+        File f = ((FilesystemStoreParameters)parameters).getFile();
+        return f.exists();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/AbstractFilesystemServerExplorerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractFilesystemServerExplorerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractFilesystemServerExplorerProviderFactory.java	(revision 46118)
@@ -0,0 +1,46 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+
+/**
+ * Abstract Factory to create File System Server Explorer Providers
+ * @author dmartinezizquierdo
+ *
+ */
+public abstract class AbstractFilesystemServerExplorerProviderFactory
+    implements FilesystemServerExplorerProviderFactory {
+
+    private final String name;
+    private final String description;
+
+    public AbstractFilesystemServerExplorerProviderFactory(String name, String description){
+        this.name = name;
+        this.description = description;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public int allowCreate() {
+        return UNKNOWN;
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+    
+    @Override
+    public boolean isMode(int mode) {
+        return this.getMode()==mode;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/AbstractFilesystemProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractFilesystemProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractFilesystemProviderServices.java	(revision 46118)
@@ -0,0 +1,62 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemProviderServices;
+
+/**
+ * Abstract implementation of FilesystemServerExplorerProviderFactoryParameters
+ * @author dmartinezizquierdo
+ *
+ */
+public abstract class AbstractFilesystemProviderServices implements FilesystemProviderServices{
+
+    String name=null;
+    String description=null;
+    int allowCreate=FilesystemProviderServices.UNKNOWN;
+    int mode=-1;
+
+    /**
+     * Returns the name of the provider
+     *
+     * @return name of the provider
+     */
+    public String getName(){
+        return name;
+    }
+
+    /**
+     * Return a short descripion about the provider
+     *
+     * @return description about the provider
+     */
+    public String getDescription(){
+        return description;
+    }
+
+    /**
+     * The provider can create new stores.
+     *
+     * @return YES if has creation support
+     */
+    public int allowCreate(){
+        return allowCreate;
+    }
+
+    /**
+     * Returns the mode supported
+     * @return DataServerExplorer.MODE
+     */
+    public int getMode(){
+        return mode;
+    }
+
+    /**
+     * Return true if any mode in the parameter is supported.
+     *
+     * @param mode
+     * @return boolean
+     */
+    public boolean isMode(int mode){
+        return this.mode==mode;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/DefaultFilesystemProviderServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DefaultFilesystemProviderServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DefaultFilesystemProviderServices.java	(revision 46118)
@@ -0,0 +1,30 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemProviderServices;
+
+public class DefaultFilesystemProviderServices extends AbstractFilesystemProviderServices{
+
+    /**
+     * Public constructor
+     * @param name
+     * @param description
+     */
+    public DefaultFilesystemProviderServices(String name, String description){
+       this.name=name;
+       this.description=description;
+    }
+
+    public void setAllowCreate(int allowCreate){
+        if (FilesystemProviderServices.YES == allowCreate || FilesystemProviderServices.NO == allowCreate){
+            this.allowCreate=allowCreate;
+        }else{
+            this.allowCreate=FilesystemProviderServices.UNKNOWN;
+        }
+    }
+
+    public void setMode(int mode) {
+        this.mode=mode;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2010 {Prodevelop}   {Task}
+ */
+package org.gvsig.fmap.dal.serverexplorer.filesystem.impl;
+
+import java.io.File;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+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.FileNotFoundException;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.resource.file.FileResource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+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.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
+ */
+public abstract class AbstractFilesystemServerExplorerProvider 
+        implements FilesystemServerExplorerProvider 
+  {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractFilesystemServerExplorerProvider.class);
+
+    private String name;
+    private String description;
+    private FilesystemServerExplorerProviderFactory factory;
+
+    protected AbstractFilesystemServerExplorerProvider() {
+      
+    }
+
+    protected AbstractFilesystemServerExplorerProvider(FilesystemServerExplorerProviderFactory factory, String name, String description) {
+        this.factory = factory;
+        this.name = name;
+        this.description = description;
+    }
+
+    protected AbstractFilesystemServerExplorerProvider(String name, String description) {
+      this(null, name, description);
+    }
+
+    public FilesystemServerExplorerProviderFactory getFactory() {
+      return factory;
+    }
+    
+    @Override
+    public String getDataStoreProviderName() {
+        return this.name;
+    }
+    
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+    
+    @Override
+    public String getResourceRootPathName(DataStore dataStore) {
+        return this.getResourceRootPathName(dataStore.getParameters());
+    }
+    
+    @Override
+    public String getResourceRootPathName(DataStoreParameters parameters) {
+        if( parameters instanceof FilesystemStoreParameters ) {
+            File f = ((FilesystemStoreParameters) parameters).getFile();
+            if( f != null ) {
+                return FilenameUtils.removeExtension(f.getAbsolutePath());
+            }
+        }
+        if( parameters.hasDynValue(FileResource.NAME) ) {
+            Object obj = (parameters.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();
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_ALL;
+    }
+
+    @Override
+    public boolean isMode(int mode) {
+        if( mode == DataServerExplorer.MODE_ALL ) {
+            return true;
+        }
+        return (this.getMode() & mode) != 0;
+    }
+
+    public DataStoreParameters getParameters(File file) throws DataException {
+        DataManager manager = DALLocator.getDataManager();
+        DataStoreParameters params = manager.createStoreParameters(this.getDataStoreProviderName());
+        ((FilesystemStoreParameters) params).setFile(file);
+        return params;
+    }
+
+    @Override
+    public boolean canCreate() {
+        return false;
+    }
+
+    @Override
+    public boolean canCreate(NewDataStoreParameters parameters) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void create(NewDataStoreParameters parameters, boolean overwrite)
+        throws CreateException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public NewDataStoreParameters getCreateParameters() throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void remove(DataStoreParameters parameters) throws RemoveException {
+        File file = ((FilesystemStoreParameters) 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
+
+    }
+
+    @Override
+    public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
+        
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.serverexplorer.filesystem.impl;
+
+import java.util.Iterator;
+
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+
+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) {
+	    //The class is wrapped into the factory
+	    FilesystemServerExplorerProviderFactory providerFactory= new FilesystemServerExplorerProviderFactoryWrapper
+	        (name, description, filesystemServerProvicerClass);
+	    //The factory is registered
+	    registerProviderFactory(providerFactory);
+	}
+
+   public void registerProviderFactory(
+       FilesystemServerExplorerProviderFactory filesystemServerExplorerProviderFactory) {
+       //Registers the factory
+       ToolsLocator.getExtensionPointManager().add(FILE_FILTER_EPSNAME,
+           FILE_FILTER_EPSDESCRIPTION).append(
+           filesystemServerExplorerProviderFactory.getName(),
+           filesystemServerExplorerProviderFactory.getDescription(),
+           filesystemServerExplorerProviderFactory);
+   }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReaderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReaderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReaderFactory.java	(revision 46118)
@@ -0,0 +1,195 @@
+package org.gvsig.fmap.dal.feature.spi.simpleprovider;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.util.URLUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractSimpleSequentialReaderFactory implements SimpleSequentialReaderFactory {
+
+    protected Logger LOGGER = LoggerFactory.getLogger(AbstractSimpleSequentialReaderFactory.class);
+
+    private final String name;
+    private final String description;
+    private final String[] extensions;
+
+    protected AbstractSimpleSequentialReaderFactory(
+            String name,
+            String description,
+            String[] extensions
+    ) {
+        this.name = name;
+        this.description = description;
+        this.extensions = extensions;
+    }
+
+    protected Logger logger() {
+        return LOGGER;
+    }
+    
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public String[] getExtensions() {
+        return extensions;
+    }
+
+    public final boolean isValidExtension(File f) {
+      if( f == null ) {
+        return false;
+      }
+      String[] theExtensions = this.getExtensions();
+      if( theExtensions==null ) {
+        // Si no hay especificadas extensiones decimos que vale.
+        return true; 
+      }
+      String extension = FilenameUtils.getExtension(f.getName()).trim();
+      if( extension.isEmpty() ) {
+        // Si el fichero no tiene extension decimos que vale.
+        return true; 
+      }
+      for (String currentExtension : theExtensions) {
+        if (currentExtension != null ) {
+          currentExtension = currentExtension.trim();
+          if( !currentExtension.isEmpty() && extension.equalsIgnoreCase(currentExtension) ) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+    
+    @Override
+    public boolean accept(File f) {
+        return isValidExtension(f);
+    }
+
+    @Override
+    public FeatureStoreProviderFactory createStoreProviderFactory() {
+        return new SimpleSequentialReaderStoreProviderFactory(this);
+    }
+
+    @Override
+    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory() {
+        return new SimpleSequentialReaderFilesystemServerProviderFactory(this);
+    }
+
+    private InputStream openStream(URL url) {
+//        try {
+            return URLUtils.openStream(url);
+//        } catch (IOException ex) {
+//            return null;
+//        }
+    }
+
+    @Override
+    public void selfRegister(Class loader) {
+        this.selfRegister(
+                loader.getResource(this.getName() + "Parameters.xml"),
+                loader.getResource(this.getName() + "Metadata.xml")
+        );    
+    }
+    
+    @SuppressWarnings("UseSpecificCatch")
+    @Override
+    public void selfRegister(URL parameters_xml, URL metadata_xml) {
+        DynStruct definition;
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+
+        definition = persistenceManager.getDefinition(this.getName());
+        if (definition == null) {
+            InputStream stream = this.openStream(parameters_xml);
+            if (stream == null) {
+                throw new RuntimeException("Can't access parameters definition in resource '" + parameters_xml.toString() + "'.");
+            }
+            persistenceManager.updateDefinition(
+                    SimpleSequentialReaderStoreParameters.class,
+                    this.getName(),
+                    stream,
+                    SimpleSequentialReaderStoreParameters.class.getClassLoader(),
+                    null,
+                    null
+            );
+        }
+
+        if( metadata_xml!=null ) {
+            MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+            try {
+                definition = metadataManager.getDefinition(this.getName());
+                if (definition == null) {
+                    InputStream stream = this.openStream(metadata_xml);
+                    metadataManager.addDefinition(
+                            this.getName(),
+                            stream,
+                            SimpleSequentialReaderStoreParameters.class.getClassLoader()
+                    );
+                }
+            } catch (Exception e) {
+                LOGGER.warn(
+                        "Can't access metadata definition in resource '" + metadata_xml.toString() + "'.",
+                        e
+                );
+            }
+        }
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+                .getDataManager();
+
+        if (!dataman.getStoreProviders().contains(this.getName())) {
+            dataman.registerStoreProviderFactory(
+                    new SimpleSequentialReaderStoreProviderFactory(this)
+            );
+        }
+
+        try {
+            DALFileLocator.getFilesystemServerExplorerManager()
+                    .registerProviderFactory(
+                            new SimpleSequentialReaderFilesystemServerProviderFactory(this)
+                    );
+        } catch (Exception e) {
+            LOGGER.warn(
+                "Can't register filesystem server provider factory ("+this.getName()+").",
+                e
+            );
+
+        }
+
+    }
+    
+    @Override
+    public void fetchDefaultParameters(DataParameters parameters) {
+        // Default do nothing
+    }
+    
+    @Override
+    public abstract SimpleSequentialReader createReader(OpenFeatureStoreParameters params);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProviderFactory.java	(revision 46118)
@@ -0,0 +1,67 @@
+/*
+ * 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.feature.spi.simpleprovider;
+
+import java.io.File;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SimpleSequentialReaderFilesystemServerProviderFactory
+        implements FilesystemServerExplorerProviderFactory {
+
+    private final SimpleSequentialReaderFactory readerFactory;
+
+    public SimpleSequentialReaderFilesystemServerProviderFactory(SimpleSequentialReaderFactory readerFactory) {
+        this.readerFactory = readerFactory;
+    }
+
+    @Override
+    public FilesystemServerExplorerProvider createProvider() throws InitializeException {
+        return new SimpleSequentialReaderFilesystemServerProvider(this.readerFactory);
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return this.readerFactory.accept(pathname);
+    }
+
+    @Override
+    public String getName() {
+        return this.readerFactory.getName();
+    }
+
+    @Override
+    public String getDescription() {
+        return this.readerFactory.getDescription();
+    }
+
+    @Override
+    public int allowCreate() {
+        return NO;
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
+    }
+
+    @Override
+    public boolean isMode(int mode) {
+        return this.getMode()==mode;
+    }
+
+  @Override
+  public boolean isHidden() {
+    return false;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReader.java	(revision 46118)
@@ -0,0 +1,54 @@
+/*
+ * 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.feature.spi.simpleprovider;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.spi.simpleprovider.AutomaticDetectionOfTypes.Rows;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface SimpleSequentialReader extends Rows {
+
+    public SimpleSequentialReaderFactory getFactory();
+    
+    public File getFile();
+    
+    public List<String> getFieldNames();
+
+    @Override
+    public List<Object> read();
+    
+    public void rewind();
+    
+    public void close();
+
+    public String getName();
+    
+    public String getAlias();
+    
+    public String getLabel();
+    
+    public String getDescription();
+    
+    public Map<String,String> getTags();
+
+    public List<SimpleSequentialReader> getChildren();
+    
+    public long getRowCount();
+    
+    public StoresRepository getStoresRepository();
+
+    public ResourcesStorage getResourcesStorage();
+    
+    public OpenFeatureStoreParameters getParameters();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProviderFactory.java	(revision 46118)
@@ -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.spi.simpleprovider;
+
+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.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class SimpleSequentialReaderStoreProviderFactory 
+        extends AbstractFeatureStoreProviderFactory 
+    {
+
+    private final SimpleSequentialReaderFactory readerFactory;
+    
+    protected SimpleSequentialReaderStoreProviderFactory(SimpleSequentialReaderFactory readerFactory) {
+        super(readerFactory.getName(), readerFactory.getDescription());
+        this.readerFactory = readerFactory;
+    }
+    
+    public SimpleSequentialReaderFactory getReaderFactory() {
+        return this.readerFactory;
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new SimpleSequentialReaderStoreParameters(this.readerFactory);
+    }
+
+    @Override
+    public DataStoreProvider createProvider(
+            DataParameters parameters, 
+            DataStoreProviderServices providerServices) throws InitializeException {
+        return new SimpleSequentialReaderStoreProvider(
+                this.readerFactory,
+                (SimpleSequentialReaderStoreParameters) parameters,
+                providerServices
+        );
+    }
+
+    @Override
+    public int allowCreate() {
+        return NO;
+    }
+
+    @Override
+    public int allowWrite() {
+        return NO;
+    }
+
+    @Override
+    public int allowRead() {
+        return YES;
+    }
+
+    @Override
+    public int hasRasterSupport() {
+        return NO;
+    }
+
+    @Override
+    public int hasTabularSupport() {
+        return YES;
+    }
+
+    @Override
+    public int hasVectorialSupport() {
+        return YES;
+    }
+
+    @Override
+    public int allowEditableFeatureType() {
+        return NO; //No cambiar, ver SimpleSequentialReaderFeatureProvider
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreParameters.java	(revision 46118)
@@ -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.fmap.dal.feature.spi.simpleprovider;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SimpleSequentialReaderStoreParameters 
+        extends AbstractDataParameters 
+        implements  OpenFeatureStoreParameters, FilesystemStoreParameters, Cloneable
+    {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleSequentialReaderStoreParameters.class);
+
+
+    private static final String FILE = "file";
+    private static final String IGNOREERRORS = "ignoreErrors";
+    private static final String CRS = "CRS";
+    private static final String FIELDTYPES = "fieldtypes";
+    private static final String FIELDNAMES = "fieldnames";
+    private static final String LOCALE = "locale";
+    private static final String POINT = "pointFields";
+    private static final String AUTOMATICTYPESDETECTION = "automaticTypesDetection";
+
+    private DelegatedDynObject parameters;
+    private SimpleSequentialReaderFactory readerFactory;
+
+    public SimpleSequentialReaderStoreParameters() {
+        
+    }
+    
+    public SimpleSequentialReaderStoreParameters(SimpleSequentialReaderFactory readerFactory) {
+        super();
+        this.readerFactory = readerFactory;
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(readerFactory.getName());
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, readerFactory.getName());
+    }
+
+    @Override
+    protected Object clone() throws CloneNotSupportedException {
+        SimpleSequentialReaderStoreParameters other = (SimpleSequentialReaderStoreParameters) super.clone();
+        other.parameters = (DelegatedDynObject) FileHelper.newParameters(readerFactory.getName());
+        this.copyValuesTo(other);
+        return other;
+    }
+
+    
+    @Override
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        String providerName = (String) state.get(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+        
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
+        SimpleSequentialReaderStoreProviderFactory provider = 
+                (SimpleSequentialReaderStoreProviderFactory)  dataman.getStoreProviderFactory(
+                        providerName
+        );
+        this.readerFactory = provider.getReaderFactory();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(readerFactory.getName());
+        
+        super.loadFromState(state);
+    }
+    
+    @Override
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+    @Override
+    public void setDynValue(String name, Object value) {
+        super.setDynValue(name, value);
+        if( this.readerFactory!=null && StringUtils.equalsIgnoreCase(name, FILE) ) {
+            this.readerFactory.fetchDefaultParameters(this);
+        }
+    }
+
+    @Override
+    public boolean isValid() {
+        if ( this.getPathName() == null ) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public File getFile() {
+        return (File) this.getDynValue(FILE);
+    }
+
+    @Override
+    public void setFile(File file) {
+        this.setDynValue(FILE, file);
+    }
+
+    public IProjection getCRS() {
+        return (IProjection) this.parameters.getDynValue(CRS);
+    }
+
+    public String getPathName() {
+        File f = (File) this.parameters.getDynValue(FILE);
+        if ( f == null ) {
+            return null;
+        }
+        return f.getPath();
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    public Locale getLocale() {
+        try {
+            String s = (String) this.parameters.getDynValue(LOCALE);
+            if ( s.trim().length() == 0 ) {
+                return null;
+            }
+            if ( "DEFAULT".equalsIgnoreCase(s.trim()) ) {
+                return Locale.getDefault();
+            }
+            Locale locale;
+            // 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 ODS parameters.", ex);
+            return null;
+        }
+    }
+
+    public String[] getPointDimensionNames() {
+        String s = (String) this.parameters.getDynValue(POINT);
+        if ( StringUtils.isEmpty(s) ) {
+            return null;
+        }
+        String sep = this.getDelimiter(s);
+        if ( sep == null ) {
+            return new String[] { s };
+        }
+        return s.split(sep);
+    }
+
+    public boolean getIgnoreErrors() {
+        Boolean b = (Boolean) this.parameters.getDynValue(IGNOREERRORS);
+        if ( b == null ) {
+            return false;
+        }
+        return b;
+    }
+
+    private String getDelimiter(String line) {
+        String sep = null;
+        // Cuiaddo 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;
+    }
+
+    public List<String> getFieldNames() {
+        String s = (String) this.parameters.getDynValue(FIELDNAMES);
+        if ( StringUtils.isEmpty(s) ) {
+            return null;
+        }
+        String sep = this.getDelimiter(s);
+        if ( sep == null ) {
+            return null;
+        }
+        String fieldNames[] = s.split("[" + sep + "]");
+        for (int i = 0; i < fieldNames.length; i++) {
+            fieldNames[i] = fieldNames[i].trim();
+        }
+        return Arrays.asList(fieldNames);
+    }
+    
+    public int[] getFieldTypes() {
+        String s = (String) this.parameters.getDynValue(FIELDTYPES);
+        if ( StringUtils.isEmpty(s) ) {
+            return null;
+        }
+        String sep = this.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;
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    public int[] getFieldSizes() {
+        String s = (String) this.parameters.getDynValue(FIELDTYPES);
+        if ( StringUtils.isEmpty(s) ) {
+            return null;
+        }
+        String sep = this.getDelimiter(s);
+        if ( sep == null ) {
+            return null;
+        }
+        String fieldTypeNames[] = s.split("[" + sep + "]");
+        int fieldSizes[] = new int[fieldTypeNames.length];
+        for ( int i = 0; i < fieldTypeNames.length; i++ ) {
+            String fieldtype = fieldTypeNames[i].trim();
+            if ( fieldtype.contains(":") ) {
+                try {
+                    s = fieldtype.split(":")[1];
+                    fieldSizes[i] = Integer.parseInt(s);
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't get size of field " + i + " (" + fieldtype + ").", ex);
+                }
+            } else {
+                fieldSizes[i] = 0;
+            }
+        }
+        return fieldSizes;
+    }
+
+    public boolean getAutomaticTypesDetection() {
+        Boolean b = (Boolean) this.parameters.getDynValue(AUTOMATICTYPESDETECTION);
+        if ( b == null ) {
+            return false;
+        }
+        return b;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AbstractSimpleSequentialReader.java	(revision 46118)
@@ -0,0 +1,80 @@
+package org.gvsig.fmap.dal.feature.spi.simpleprovider;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractSimpleSequentialReader implements SimpleSequentialReader {
+
+    private final SimpleSequentialReaderFactory factory;
+    private final OpenFeatureStoreParameters params;
+    
+    protected AbstractSimpleSequentialReader(
+            SimpleSequentialReaderFactory factory,
+            OpenFeatureStoreParameters params
+        ) {
+        this.factory = factory;
+        this.params = params;
+    }
+    
+    @Override
+    public SimpleSequentialReaderFactory getFactory() {
+        return this.factory;
+    }
+
+    @Override
+    public OpenFeatureStoreParameters getParameters() {
+        return this.params;
+    }
+
+    protected Object getParameter(String name) {
+        return this.params.getDynValue(name);
+    }
+    
+    @Override
+    public String getLabel() {
+        return null;
+    }
+
+    @Override
+    public String getAlias() {
+        return null;
+    }
+    
+    @Override
+    public String getDescription() {
+        return null;
+    }
+
+    @Override
+    public Map<String, String> getTags() {
+        return null;
+    }
+
+    @Override
+    public List<SimpleSequentialReader> getChildren() {
+        return Collections.EMPTY_LIST;
+    }
+
+    @Override
+    public long getRowCount() {
+        return -1;
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        return null;
+    }
+    
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFilesystemServerProvider.java	(revision 46118)
@@ -0,0 +1,87 @@
+/*
+ * 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.feature.spi.simpleprovider;
+
+import java.io.File;
+import java.util.Objects;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+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;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SimpleSequentialReaderFilesystemServerProvider 
+        extends AbstractFilesystemServerExplorerProvider 
+        implements FilesystemServerExplorerProvider, ResourceConsumer 
+    {
+    
+    private FilesystemServerExplorerProviderServices serverExplorer;
+    private final SimpleSequentialReaderFactory readerFactory;
+
+    public SimpleSequentialReaderFilesystemServerProvider(SimpleSequentialReaderFactory readerFactory) {
+        this.readerFactory = readerFactory;
+    }
+
+    @Override
+    public String getDataStoreProviderName() {
+      try {
+        return this.readerFactory.getName();
+      } catch(Throwable th) {
+        LOGGER.warn("Can't get the provider name, return the class simplename.",th);
+        return this.getClass().getSimpleName();
+      }
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
+    }
+
+    @Override
+    public boolean accept(File file) {
+      try {
+        return this.readerFactory.accept(file);
+      } catch(Throwable th) {
+        try {
+          LOGGER.warn("Can't check if the provider accept file '"+Objects.toString(file)+"', check file extension only.",th);
+          return this.readerFactory.isValidExtension(file);
+        } catch(Throwable th2) {
+          LOGGER.warn("Can't check if the provider accept file '"+Objects.toString(file)+"', return false.",th2);
+        }
+        return false;
+      }
+    }
+
+    @Override
+    public DataStoreParameters getParameters(File file) throws DataException {
+        SimpleSequentialReaderStoreParameters params = new SimpleSequentialReaderStoreParameters(this.readerFactory);
+        params.setFile(file);
+        return params;
+    }
+
+    @Override
+    public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
+        this.serverExplorer = serverExplorer;
+    }
+
+    @Override
+    public String getDescription() {
+      try {
+        return this.readerFactory.getDescription();
+      } catch(Throwable th) {
+        LOGGER.warn("Can't get the provider description, return the class name.",th);
+        return this.getClass().getName();
+      }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AutomaticDetectionOfTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AutomaticDetectionOfTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/AutomaticDetectionOfTypes.java	(revision 46118)
@@ -0,0 +1,233 @@
+package org.gvsig.fmap.dal.feature.spi.simpleprovider;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class AutomaticDetectionOfTypes {
+
+    public interface Rows {
+        public List<Object> read();
+    }
+    
+    private static class PossibleDataType {
+
+        public boolean possibleInt = true;
+        public boolean possibleFloat = true;
+        public boolean possibleDouble = true;
+        public boolean possibleDecimal = true;
+        public boolean possibleLong = true;
+        public boolean possibleURL = true;
+        public boolean possibleDate = true;
+        public boolean possibleGeometry = true;
+    }
+
+    private final String filename;
+
+    public AutomaticDetectionOfTypes() {
+        this("(unknown)");
+    }
+
+    public AutomaticDetectionOfTypes(String filename) {
+        this.filename = filename;
+    }
+
+    private String getFullFileName() {
+        return this.filename;
+    }
+    
+    @SuppressWarnings({"UseSpecificCatch", "ResultOfObjectAllocationIgnored"})
+    public int[] detect(int columns, Rows rows, boolean isFirstLineHeader, Locale locale) throws IOException {
+        List<PossibleDataType> possibleDataTypes;
+        int[] types = null;
+
+        int lineno = 0;
+        try {
+            if (isFirstLineHeader) {
+                rows.read();
+                lineno++;
+            }
+            possibleDataTypes = new ArrayList<>(columns);
+            for (int i = 0; i < columns; i++) {
+                possibleDataTypes.add(new PossibleDataType());
+            }
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+            DataTypesManager typeManager = ToolsLocator.getDataTypesManager();
+            Coercion toDecimal = typeManager.getCoercion(DataTypes.DECIMAL);
+            Coercion toDouble = typeManager.getCoercion(DataTypes.DOUBLE);
+            Coercion toFloat = typeManager.getCoercion(DataTypes.FLOAT);
+            Coercion toDate = typeManager.getCoercion(DataTypes.DATE);
+            Coercion toInt = typeManager.getCoercion(DataTypes.INT);
+            Coercion toLong = typeManager.getCoercion(DataTypes.LONG);
+            Coercion toGeom = typeManager.getCoercion(DataTypes.GEOMETRY);
+            CoercionContext coercionContext = DataTypeUtils.coerceContextLocale(locale);
+            
+            List<Object> row = rows.read();
+            lineno++;
+
+            while (row != null) {
+                for (int i = 0; i < row.size(); i++) {
+                    while( possibleDataTypes.size()<row.size() ) {
+                        possibleDataTypes.add(new PossibleDataType());
+                    }
+                    String rawvalue = Objects.toString(row.get(i),null);
+                    PossibleDataType possibleDataType = possibleDataTypes.get(i);
+                    if (possibleDataType.possibleDecimal) {
+                        try {
+                            toDecimal.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDecimal = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDecimal = false;
+                        }
+                    }
+                    if (possibleDataType.possibleDouble) {
+                        try {
+                            toDouble.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDouble = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDouble = false;
+                        }
+                    }
+                    if (possibleDataType.possibleFloat) {
+                        try {
+                            toFloat.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleFloat = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleFloat = false;
+                        }
+                    }
+                    if (possibleDataType.possibleLong) {
+                        possibleDataType.possibleLong = isValidLong(rawvalue);
+                    }
+                    if (possibleDataType.possibleInt) {
+                        possibleDataType.possibleInt = isValidInteger(rawvalue);
+                    }
+                    if (possibleDataType.possibleDate) {
+                        try {
+                            toDate.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDate = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDate = false;
+                        }
+                    }
+                    if (possibleDataType.possibleURL) {
+                        try {
+                            new URL((String) rawvalue);
+                            possibleDataType.possibleURL = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleURL = false;
+                        }
+                    }
+                    if (possibleDataType.possibleGeometry) {
+                        try {
+                            toGeom.coerce((String) rawvalue);
+                            possibleDataType.possibleGeometry = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleGeometry = false;
+                        }
+                    }
+                }
+                row = rows.read();
+            }
+            int n = 0;
+            types = new int[possibleDataTypes.size()];
+            for (PossibleDataType possibleDataType : possibleDataTypes) {
+                if (possibleDataType.possibleInt) {
+                    types[n++] = DataTypes.INT;
+                    continue;
+                }
+                if (possibleDataType.possibleLong) {
+                    types[n++] = DataTypes.LONG;
+                    continue;
+                }
+                if (possibleDataType.possibleDecimal) {
+                    types[n++] = DataTypes.DECIMAL;
+                    continue;
+                }
+                if (possibleDataType.possibleFloat) {
+                    // Forzamos los float a double para evitar perder precision
+                    types[n++] = DataTypes.DOUBLE;
+                    continue;
+                }
+                if (possibleDataType.possibleDouble) {
+                    types[n++] = DataTypes.DOUBLE;
+                    continue;
+                }
+                if (possibleDataType.possibleURL) {
+                    types[n++] = DataTypes.URL;
+                    continue;
+                }
+                if (possibleDataType.possibleDate) {
+                    types[n++] = DataTypes.DATE;
+                    continue;
+                }
+                if (possibleDataType.possibleGeometry) {
+                    types[n++] = DataTypes.GEOMETRY;
+                    continue;
+                }
+                types[n++] = DataTypes.STRING;
+            }
+        } catch (Exception ex) {
+            throw new RuntimeException("Problems reading file '" + this.getFullFileName() + "' near line " + lineno + ".", ex);
+        }
+        return types;
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    private boolean isValidLong(String s) {
+        if (s == null) {
+            return true;
+        }
+        s = s.trim().toLowerCase();
+        if (s.isEmpty()) {
+            return true;
+        }
+        try {
+            if (s.startsWith("0x")) {
+                Long.valueOf(s.substring(2), 16);
+            } else {
+                Long.valueOf(s);
+            }
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    private boolean isValidInteger(String s) {
+        if (s == null) {
+            return true;
+        }
+        s = s.trim().toLowerCase();
+        if (s.isEmpty()) {
+            return true;
+        }
+        try {
+            if (s.startsWith("0x")) {
+                Integer.valueOf(s.substring(2), 16);
+            } else {
+                Integer.valueOf(s);
+            }
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderFactory.java	(revision 46118)
@@ -0,0 +1,41 @@
+/*
+ * 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.feature.spi.simpleprovider;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.net.URL;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface SimpleSequentialReaderFactory extends FileFilter {
+    
+    public String getName();
+    
+    public String getDescription();
+    
+    public String[] getExtensions();
+    
+    public boolean isValidExtension(File f);
+    
+    public SimpleSequentialReader createReader(OpenFeatureStoreParameters params);
+    
+    public FeatureStoreProviderFactory createStoreProviderFactory();
+    
+    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory();
+    
+    public void selfRegister(URL parameters_xml, URL metadata_xml);
+    
+    public void selfRegister(Class loader);
+
+    public void fetchDefaultParameters(DataParameters parameters);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/feature/spi/simpleprovider/SimpleSequentialReaderStoreProvider.java	(revision 46118)
@@ -0,0 +1,1318 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional 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.simpleprovider;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+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 java.util.Objects;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.BaseStoresRepository;
+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.StoresRepository;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
+import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
+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.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.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.GeometryUtils;
+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.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.gvsig.tools.util.UnmodifiableBasicMapToMapAdapter;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class SimpleSequentialReaderStoreProvider extends AbstractMemoryStoreProvider implements
+        ResourceConsumer {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleSequentialReaderStoreProvider.class);
+
+    private static class SimpleSequentialReaderFeatureProvider extends DefaultFeatureProvider {
+
+        public SimpleSequentialReaderFeatureProvider(FeatureType type) {
+            super(type);
+        }
+
+        public SimpleSequentialReaderFeatureProvider(FeatureType featureType, Object createNewOID) {
+            super(featureType, createNewOID);
+        }
+
+        @Override
+        public FeatureType getType() {
+            // Esta implementacion impide que se pueda modificar la extructura de 
+            // esta tabla ya que siempre retorna el FeatureType del proveedor.
+            //
+            // Para permitir edicion de la estructura de la tabla deberia pedirle
+            // el type al store services, que es quien controla que pasa cuando
+            // estamos en edicion, pero con este proveedor, si el reader tiene varias
+            // tablas no devuelbe el tipo corriente, a fecha de hoy (11/2019) siempre 
+            // devuelbe el type de la tabla principal.
+            return super.getType();
+        }
+    }
+    
+    private class StoresRepositoryWithChildren extends BaseStoresRepository {
+        
+        public StoresRepositoryWithChildren() {
+            super(SimpleSequentialReaderStoreProvider.this.getName());
+        }
+        
+        @Override
+        public DataStore getStore(String name) {
+            if( StringUtils.equalsIgnoreCase(name, readerData.getName()) ||
+                StringUtils.equalsIgnoreCase(name, readerData.getAlias()) ) {
+                return readerData.createStore();
+            }
+            for (ReaderData child : childrenData) {
+                if( StringUtils.equalsIgnoreCase(name, child.getName()) ||
+                    StringUtils.equalsIgnoreCase(name, child.getAlias()) ) {
+                    return child.createStore();
+                }
+            }
+            return super.getStore(name);
+        }
+        
+    }
+    
+    private class ReaderData extends AbstractDisposable {
+        private FeatureType defaultFeatureType;
+        private List<FeatureType> featureTypes;
+        private List<FeatureProvider> features;
+        private boolean needCalculateEnvelope;
+        private String name;
+        private String alias;
+        private long OIDcounter;
+        private StoresRepository storesRepository;
+        private OpenFeatureStoreParameters parameters;
+        private ResourcesStorage resourcesStorage;
+        
+        public ReaderData() {
+            this.needCalculateEnvelope = false;
+            this.features = new ArrayList<>();
+            this.OIDcounter = 0;
+        }
+        
+        public String toString() {
+            return Objects.toString(name);
+        }
+
+        @Override
+        public void doDispose() {
+            this.features = null;
+            this.OIDcounter = 0;
+            this.defaultFeatureType = null;
+            this.featureTypes = null;
+            this.parameters = null;
+            this.storesRepository = null;
+        }
+        
+        public void addFeatureProvider(FeatureProvider feature) {
+		feature.setOID(this.OIDcounter++);
+		this.features.add(feature);
+        }
+        
+        public void setFeatureTypes(List<FeatureType> featureTypes, FeatureType defaultFeatureType) {
+            this.featureTypes = featureTypes;
+            this.defaultFeatureType = defaultFeatureType;
+        }
+        
+        public void setNeedCalculateEnvelope(boolean needCalculateEnvelope) {
+            this.needCalculateEnvelope = needCalculateEnvelope;
+        }
+        
+        public boolean getNeedCalculateEnvelope() {
+            return this.needCalculateEnvelope;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public List<FeatureType> getFeatureTypes() {
+            return this.featureTypes;
+        }
+
+        public FeatureType getDefaultFeatureType() {
+            return this.defaultFeatureType;
+        }
+        
+        public List<FeatureProvider> getFeatures() {
+            return this.features;
+        }
+        
+        public DataStore createStore() {
+                DataStore store;
+                try {
+                    SimpleSequentialReaderStoreProvider provider = new SimpleSequentialReaderStoreProvider(
+                            readerFactory, 
+                            (SimpleSequentialReaderStoreParameters) getParameters(),
+                            null,
+                            childrenData,
+                            this
+                    );
+                    DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+                    store = manager.openStore(
+                            getParameters(), 
+                            provider
+                    );
+                    provider.setStoreServices((FeatureStoreProviderServices) store);
+                    provider.name = this.name;
+                } catch(Exception ex) {
+                   LOGGER.warn("Can't build store form child '"+name+"'.",ex);
+                   return null; 
+                }
+            return store;
+        }
+
+        public void setStoresRepository(StoresRepository storesRepository) {
+            this.storesRepository = storesRepository;
+        }
+
+        public StoresRepository getStoresRepository() {
+            return storesRepository;
+        }
+
+        public ResourcesStorage getResourcesStorage() {
+            return resourcesStorage;
+        }
+
+        public void setResourcesStorage(ResourcesStorage resourcesStorage) {
+            this.resourcesStorage = resourcesStorage;
+        }
+
+        public void setParameters(OpenFeatureStoreParameters parameters) {
+            if( parameters==null ) {
+                LOGGER.warn("Can't set parameters to null");
+                return;
+            }
+            this.parameters = parameters;
+        }
+
+        public OpenFeatureStoreParameters getParameters() {
+            return parameters;
+        }
+
+        public String getAlias() {
+            return this.alias;
+        }
+
+        public void setAlias(String alias) {
+            this.alias = alias;
+        }
+        
+        
+    }
+    
+    class Children implements UnmodifiableBasicMap<String, DataStore> {
+        // Con esta clase se pospone la creacion de los stores hasta que se 
+        // pide cada uno de ellos, y no cuando se pide el Map de estos, ya
+        // que el map se puede pedir solo para saber si hay o cuantos hay.
+
+        @Override
+        public DataStore get(String key) {
+            for (ReaderData child : childrenData) {
+                if( StringUtils.equalsIgnoreCase(child.getName(), key) ) {
+                    return child.createStore();
+                }
+            }
+            return null;
+        }
+
+        @Override
+        public boolean isEmpty() {
+            return childrenData.isEmpty();
+        }
+
+        @Override
+        public boolean containsKey(String key) {
+            for (ReaderData child : childrenData) {
+                if( StringUtils.equalsIgnoreCase(child.getName(), key) ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public Map<String, DataStore> toMap() {
+            return new UnmodifiableBasicMapToMapAdapter<>(this);
+        }
+
+        @Override
+        public int size() {
+            return childrenData.size();
+        }
+
+        @Override
+        public UnmodifiableBasicSet<String> keySet() {
+            return new UnmodifiableBasicSet<String>() {
+
+                @Override
+                public boolean isEmpty() {
+                    return childrenData.isEmpty();
+                }
+
+                @Override
+                public int size() {
+                    return childrenData.size();
+                }
+
+                @Override
+                public Iterator<String> iterator() {
+                    final Iterator<ReaderData> it = childrenData.iterator();
+                    return new Iterator<String>() {
+                        @Override
+                        public boolean hasNext() {
+                            return it.hasNext();
+                        }
+
+                        @Override
+                        public String next() {
+                            ReaderData theReaderData = it.next();
+                            return theReaderData.getName();
+                        }
+                    };
+                }
+            };
+        }
+
+        @Override
+        public Iterator<DataStore> iterator() {
+            final Iterator<String> it = this.keySet().iterator();
+            return new Iterator<DataStore>() {
+                @Override
+                public boolean hasNext() {
+                    return it.hasNext();
+                }
+
+                @Override
+                public DataStore next() {
+                    String name = it.next();
+                    return get(name);
+                }
+            };
+        }
+        
+    }
+
+    private final ResourceProvider resource;
+
+    private Envelope envelope;
+    private boolean need_calculate_envelope = false;
+    private String name = "";
+    private final SimpleSequentialReaderFactory readerFactory;
+    private List<ReaderData> childrenData;
+    private ReaderData readerData;
+    private final boolean isAChild;
+
+    public SimpleSequentialReaderStoreProvider(
+            SimpleSequentialReaderFactory readerFactory,
+            SimpleSequentialReaderStoreParameters parameters,
+            DataStoreProviderServices storeServices
+        ) throws InitializeException {
+        this(readerFactory, parameters, storeServices, new ArrayList<ReaderData>(), null);
+    }
+    
+    private SimpleSequentialReaderStoreProvider(
+            SimpleSequentialReaderFactory readerFactory,
+            SimpleSequentialReaderStoreParameters parameters,
+            DataStoreProviderServices storeServices,
+            List<ReaderData> childrenData,
+            ReaderData readerData
+            
+        ) throws InitializeException {
+        super(
+                parameters,
+                storeServices,
+                FileHelper.newMetadataContainer(readerFactory.getName())
+        );
+        this.childrenData = childrenData;
+        for (ReaderData readerDataChild : childrenData) {
+            DisposeUtils.bind(readerDataChild);
+        }
+        this.readerData = readerData;
+        if (this.readerData != null) {
+            DisposeUtils.bind(this.readerData);
+        }
+        this.readerFactory = readerFactory;
+        this.isAChild = this.readerData!=null;
+        
+        File file = getParameters().getFile();
+        resource = this.createResource(
+                FileResource.NAME,
+                new Object[]{file.getAbsolutePath()}
+        );
+
+        resource.addConsumer(this);
+        if( this.readerData!=null ) {
+            this.name = this.readerData.getName();            
+        }
+        if( storeServices != null ) {
+            initializeFeatureTypes();
+        }
+    }
+    
+    public String toString() {
+        try {
+        if (this.readerData==null) {
+            return this.getFullName() + " " + this.childrenData.size();
+        }
+        return this.readerData.getName()+" "+this.getFullName() + " " + this.childrenData.size();
+        } catch (Exception ex) {
+            return super.toString();
+        }
+    }
+    
+    private boolean isChild() {
+        return this.isAChild;
+    }
+    
+    private void setStoreServices(FeatureStoreProviderServices storeServices) throws InitializeException {
+        this.store = storeServices;
+        initializeFeatureTypes();
+    }
+
+    @Override
+    public FeatureStoreProviderServices getStoreServices() {
+        if( this.store==null ) {
+            // Por aqui no deberia de pasar.
+            // Si pasa es que algo va mal.
+            LOGGER.warn("Algo no anda bien, el store es null");
+            DataStore theStore = this.readerData.createStore();
+            if( theStore==null ) {
+                return null;
+            }
+            this.store = (FeatureStoreProviderServices) theStore ;
+        }
+        return this.store;
+    }
+    
+    @Override
+    public SimpleSequentialReaderStoreParameters getParameters() {
+        return (SimpleSequentialReaderStoreParameters) super.getParameters();
+    }
+
+    @Override
+    public String getProviderName() {
+        if( this.readerFactory==null ) {
+            return "unknown";
+        }
+        return this.readerFactory.getName();
+    }
+
+    @Override
+    public boolean allowWrite() {
+        return false;
+    }
+
+    private String getFullFileName() {
+        // Usar solo para mostrar mensajes en el logger.
+        String s;
+        try {
+            s = getParameters().getFile().getAbsolutePath();
+        } catch (Exception e2) {
+            s = "(unknow)";
+        }
+        return s;
+    }
+
+    @Override
+    public void open() throws OpenException {
+        if ( this.data != null ) {
+            return;
+        }
+        this.data = new ArrayList<>();
+        resource.setData(new HashMap());
+        try {
+            loadFeatures();
+        } catch (RuntimeException e) {
+            LOGGER.warn("Can't load features from '"+getProviderName()+"' file '" + getFullFileName() + "'.", e);
+            throw e;
+        } catch (Exception e) {
+            LOGGER.warn("Can't load features from '"+getProviderName()+"' file '" + getFullFileName() + "'.", e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException {
+        DataManager manager = DALLocator.getDataManager();
+        FilesystemServerExplorerParameters params;
+        try {
+            params = (FilesystemServerExplorerParameters) manager
+                    .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+            params.setRoot(this.getParameters().getFile().getParent());
+            return manager.openServerExplorer(FilesystemServerExplorer.NAME, params);
+        } catch (DataException | ValidateDataParametersException e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+
+    }
+
+    @Override
+    public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    @Override
+    public boolean supportsAppendMode() {
+        return false;
+    }
+
+    @Override
+    public void append(FeatureProvider featureProvider) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void beginAppend() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void endAppend() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Object createNewOID() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public FeatureProvider createFeatureProvider(FeatureType featureType)throws DataException  {
+            return new SimpleSequentialReaderFeatureProvider(featureType);
+    }
+
+    @Override    
+    protected void doDispose() throws BaseException {
+        for (ReaderData theReaderData : this.childrenData) {
+            DisposeUtils.disposeQuietly(theReaderData);
+        }
+        this.childrenData = null;
+        DisposeUtils.disposeQuietly(this.readerData);
+        this.readerData = null;
+//        this.resource = null;
+//        this.readerFactory = null;
+        this.envelope = null;
+        super.doDispose();
+    }
+
+    
+    private void initializeFeatureTypes() throws InitializeException {
+        try {
+            this.open();
+        } catch (OpenException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+    }
+
+    @Override
+    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() {
+                @Override
+                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 '"+getProviderName()+"' file '" + this.getFullName() + "'.", e);
+            this.envelope = null;
+        }
+
+        this.need_calculate_envelope = false;
+        return this.envelope;
+    }
+
+    @Override
+    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 = this.getParameters().getCRS();
+                if ( pro != null ) {
+                    return pro;
+                }
+                FeatureType type;
+                try {
+                    type = this.getStoreServices().getDefaultFeatureType();
+                    pro = type.getDefaultSRS();
+                    if( pro!=null ) {
+                        return pro;
+                    }
+                } catch (DataException ex) {
+                }
+            }
+        }
+        return super.getDynValue(name);
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+                DataStoreNotification.RESOURCE_CHANGED,
+                resource);
+    }
+
+    @Override
+    public Object getSourceId() {
+        return this.getParameters().getFile();
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getFullName() {
+        return this.getParameters().getFile().getAbsolutePath();
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return resource;
+    }
+
+    private String[] split(String value, String separators) {
+        int firstSeparatorPosition = 1000000;
+        Character sep = null;
+        for (char ch : separators.toCharArray()) {
+            int pos = value.indexOf(ch);
+            if( pos>0 && pos<firstSeparatorPosition ) {
+                sep = ch;
+                firstSeparatorPosition = pos;
+            }
+        }
+        if( sep == null ) {
+            return new String[] { value };
+        }
+        return value.split("["+sep+"]");
+    }
+    
+    private class FieldTypeParser {
+
+        public String name = null;
+        public int type = DataTypes.STRING;
+        public int size = 0;
+        public int geomType = Geometry.TYPES.GEOMETRY;
+        public int geomSubtype = Geometry.SUBTYPES.GEOM2D;
+        public Map<String,String> tags = new HashMap<>();
+        public Map<String,String> assignments = new HashMap<>();
+
+        private String typename = "string";
+
+        FieldTypeParser() {
+        }
+
+        private int getType(String value) {
+            DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+            return dataTypesManager.getType(typename);
+        }
+
+        @SuppressWarnings("UseSpecificCatch")
+        public boolean parse(String value) {
+            String[] args;
+            if ( value.contains("__") ) {
+                args = value.split("__");
+            } else {
+                args = split(value, ":/#@!;-");
+                if( args.length == 1 ) {
+                    this.name = value;
+                    return true;
+                }
+            }                        
+            int n = 0;
+            this.name = args[n++];
+            if( n >= args.length ) {
+                return true;
+            }
+            this.typename = args[n++];
+            this.type = this.getType(this.typename);
+            if ( this.type == DataTypes.INVALID ) {
+                this.geomType = GeometryUtils.getGeometryType(this.typename);
+                if( this.geomType==Geometry.TYPES.UNKNOWN )  {
+                    this.type = DataTypes.STRING;
+                    LOGGER.info("Type '" + this.typename + "' not valid for attribute '" + value + "' in '"+getProviderName()+"' file '" + getFullFileName() + "'.");
+                } else {
+                    this.typename = "GEOMETRY";
+                    this.type = DataTypes.GEOMETRY;
+                }
+            }
+            switch(this.type) {
+                case DataTypes.STRING:
+                    this.size = 50;
+                    break;
+                case DataTypes.INT:
+                    this.size = 10;
+                    break;
+                case DataTypes.LONG:
+                    this.size = 20;
+                    break;
+                case DataTypes.FLOAT:
+                    this.size = 10;
+                    break;
+                case DataTypes.DOUBLE:
+                    this.size = 20;
+                    break;
+                default:
+                    this.size = 0;
+            }
+            while (n < args.length) {
+                String option = args[n++].toLowerCase();
+                switch (option) {
+                    case "size":
+                        try {
+                            this.size = Integer.parseInt(args[n++]);
+                        } catch (Exception ex) {
+                            LOGGER.warn("Ignore incorrect field size for field " + value + " in '"+getProviderName()+"' file '" + getFullFileName() + "'.", ex);
+                        }
+                        break;
+                    case "tag": {
+                            String x = args[n++];
+                            int pos = x.indexOf("=");
+                            if( pos < 0 ) {
+                                this.tags.put(x, null);
+                            } else {
+                                this.tags.put( 
+                                        StringUtils.substring(x, 0, pos),
+                                        StringUtils.substring(x, pos+1)
+                                );
+                            }
+                            break;
+                        }
+                    case "set": {
+                            String x = args[n++];
+                            int pos = x.indexOf("=");
+                            if( pos < 0 ) {
+                                this.assignments.put(x, null);
+                            } else {
+                                this.assignments.put( 
+                                        StringUtils.substring(x, 0, pos),
+                                        StringUtils.substring(x, pos+1)
+                                );
+                            }
+                            break;
+                        }
+                    default:
+                        LOGGER.warn("Illegal argumente '"+option+"' for field '"+this.name+"' in '"+getProviderName()+"' file '" + getFullFileName() + "' ("+value+").");
+                }
+            }
+            return true;
+        }
+
+    }
+
+    private EditableFeatureType getFeatureType(List<String> headers, int automaticTypes[]) {
+        EditableFeatureType fType = getStoreServices().createFeatureType(this.getName());
+        fType.setHasOID(true);
+//        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+
+        FieldTypeParser[] fieldTypes = new FieldTypeParser[headers.size()];
+        //
+        // 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, sobreescribiendo
+        // los tipos anteriores en caso de definirse en la cabezara.
+        for ( int i = 0; i < fieldTypes.length; i++ ) {
+            fieldTypes[i].parse(headers.get(i));
+        }
+
+        // Y por ultimo hacemos caso a lo que se haya especificado en los parametros
+        // de apertura del reader, teniendo esto prioridad sobre todo.
+        int[] param_types = this.getParameters().getFieldTypes();
+        if ( param_types != null ) {
+            for ( int i = 0; i < fieldTypes.length && i < param_types.length; i++ ) {
+                fieldTypes[i].type = param_types[i];
+            }
+        }
+
+        int[] param_sizes = this.getParameters().getFieldSizes();
+        if ( param_sizes != null ) {
+            for ( int i = 0; i < param_sizes.length; i++ ) {
+                if ( param_sizes[i] > 0 ) {
+                    fieldTypes[i].size = param_sizes[i];
+                }
+            }
+        }
+        //
+        // Una vez ya sabemos los tipos de datos rellenamos el feature-type
+        //
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+        for (FieldTypeParser fieldType : fieldTypes) {
+            EditableFeatureAttributeDescriptor fad = fType.add(fieldType.name, fieldType.type);
+            fad.setSize(fieldType.size);
+            if (fieldType.type == DataTypes.GEOMETRY ) {
+                fad.setGeometryType(fieldType.geomType, fieldType.geomSubtype);
+                if( fType.getDefaultGeometryAttributeName() == null ) {
+                    fType.setDefaultGeometryAttributeName(fieldType.name);
+                }
+            }
+            for (Map.Entry<String, String> entry : fieldType.assignments.entrySet()) {
+                try {
+                    switch(entry.getKey().toLowerCase()) {
+                        case "expression":
+                            // Los campos calculados los procesamos en una segunda
+                            // pasada, cuando ya estan definidos el resto de los campos
+                            // ya que pueden requerir campos que aun no se han definido.
+                            break;
+                        default:
+                            fad.set(entry.getKey(), entry.getValue());
+                    }
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't set property '"+entry.getKey()+"' of '"+fad.getName()+"'.", ex);
+                }
+            }
+            Tags tags = fad.getTags();
+            for (Map.Entry<String, String> entry : fieldType.tags.entrySet()) {
+                tags.set(entry.getKey(), entry.getValue());
+            }
+        }
+        // Processamos ahora los campos calculados
+        for (FieldTypeParser fieldType : fieldTypes) {
+            EditableFeatureAttributeDescriptor fad = fType.getEditableAttributeDescriptor(fieldType.name);
+            for (Map.Entry<String, String> entry : fieldType.assignments.entrySet()) {
+                try {
+                    switch(entry.getKey().toLowerCase()) {
+                        case "expression":
+                            fad.set(entry.getKey(), entry.getValue());
+                            break;
+                    }
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't set property '"+entry.getKey()+"' in '"+fad.getName()+"' of '"+getFullFileName()+"'.", ex);
+                }
+            }
+        }
+
+        String[] pointDimensionNames = this.getParameters().getPointDimensionNames();
+        if ( pointDimensionNames != null ) {
+            PointAttributeEmulator emulator = new PointAttributeEmulator(pointDimensionNames);
+            EditableFeatureAttributeDescriptor attr = fType.add("the_geom", DataTypes.GEOMETRY, emulator);
+            GeometryManager geommgr = GeometryLocator.getGeometryManager();
+            GeometryType gt;
+            try {
+                if ( emulator.fieldNames != null && emulator.fieldNames.length <= 2 ) {
+                	gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
+                } else {
+                	gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D);
+                }
+                attr.setGeometryType(gt);
+            } catch (Exception e) {
+                LOGGER.warn("Can't set geometry type for the calculated field in '"+getProviderName()+"' file '" + getFullFileName() + "'.", e);
+            }
+        }
+        return fType;
+    }
+
+    class PointAttributeEmulator implements FeatureAttributeEmulator {
+
+        private static final int XNAME = 0;
+        private static final int YNAME = 1;
+        private static final int ZNAME = 2;
+
+        private GeometryManager geommgr;
+        private String[] fieldNames;
+        private Coercion toDouble;
+        private int errorcount = 0;
+
+        public PointAttributeEmulator() {
+            
+        }
+        
+        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);
+        }
+
+        @Override
+        @SuppressWarnings("UseSpecificCatch")
+        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);
+                double y = ((Double) valueY);
+                Point point;
+                if ( this.fieldNames.length > 2 ) {
+                    point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+                    double z = ((Double) valueZ);
+                    point.setCoordinateAt(2, z);
+                } else {
+                    point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
+                }
+                return point;
+            } catch (Exception ex) {
+                if ( ++errorcount < 5 ) {
+                    LOGGER.warn("[" + errorcount + "] Can't create point from '"+getProviderName()+"' file."+
+                            "XNAME='" + this.fieldNames[XNAME] + 
+                            "', YNAME='" + this.fieldNames[YNAME] + 
+                            "', ZNAME='" + ((this.fieldNames.length > 2)? this.fieldNames[ZNAME]: "(2D)") +
+                            "' feature=" + feature.toString(), ex);
+                }
+                return null;
+            }
+        }
+
+        @Override
+        public void set(EditableFeature feature, Object value) {
+            if ( value == null ) {
+                return;
+            }
+            Point point;
+            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));
+            }
+        }
+
+        @Override
+        public boolean allowSetting() {
+            return true;
+        }
+
+        @Override
+        public String[] getRequiredFieldNames() {
+            return this.fieldNames;
+        }
+
+        @Override
+        public JsonObject toJson() {
+            return this.toJsonBuilder().build();
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder() {
+            JsonObjectBuilder builder = Json.createObjectBuilder();
+            builder.add("fieldNames",fieldNames);
+            builder.add_class(this);
+            return builder;
+        }
+
+        @Override
+        public void fromJson(JsonObject json) {
+            JsonArray jsonFieldNames = json.getJsonArray("fieldNames");
+            this.fieldNames = new String[jsonFieldNames.size()];
+            for (int i = 0; i < jsonFieldNames.size(); i++) {
+                this.fieldNames[XNAME] = jsonFieldNames.getString(i);
+            }
+            this.geommgr = GeometryLocator.getGeometryManager();
+            DataTypesManager datatypeManager = ToolsLocator.getDataTypesManager();
+
+            this.toDouble = datatypeManager.getCoercion(DataTypes.DOUBLE);
+            this.errorcount = 0;
+        }
+
+    }
+
+    private void loadFeatures() throws IOException, DataException,
+            CoercionException, CloneNotSupportedException {
+
+        ReaderData theReaderData = this.readerData;
+        if( theReaderData==null ) {
+            theReaderData = new ReaderData();
+            SimpleSequentialReader reader = this.readerFactory.createReader(this.getParameters());
+            try {
+                loadFeatures(reader, theReaderData);
+                StoresRepositoryWithChildren repoWithChildren = new StoresRepositoryWithChildren();
+                StoresRepository repo = reader.getStoresRepository();
+                if( repo!=null ) {
+                    repoWithChildren.addRepository(repo);
+                }        
+                this.childrenData = new ArrayList<>();
+                List<SimpleSequentialReader> children = reader.getChildren();
+                for(SimpleSequentialReader childReader : children ) {
+                    ReaderData childData = new ReaderData();
+                    loadFeatures(childReader, childData);
+                    this.childrenData.add(childData);
+//                    DisposeUtils.bind(childData);
+                    repoWithChildren.add(childReader.getName(), childData.getParameters());
+                    if( !StringUtils.isBlank(childReader.getAlias()) ) {
+                        repoWithChildren.add(childReader.getAlias(), childData.getParameters());
+                    }
+                    childData.setStoresRepository(repoWithChildren);
+                    childReader.close();
+                }
+                repoWithChildren.add(reader.getName(), theReaderData.getParameters());
+                if( !StringUtils.isBlank(reader.getAlias()) ) {
+                    repoWithChildren.add(reader.getAlias(), theReaderData.getParameters());
+                }
+                theReaderData.setStoresRepository(repoWithChildren);
+                this.readerData = theReaderData;
+            } finally {
+                reader.close();
+            }
+        }
+        this.name = theReaderData.getName();
+        FeatureStoreProviderServices theStore = this.getStoreServices();
+        theStore.setFeatureTypes(theReaderData.getFeatureTypes(), theReaderData.getDefaultFeatureType());
+        this.need_calculate_envelope = theReaderData.getNeedCalculateEnvelope();
+        this.data = theReaderData.getFeatures();
+
+    }
+    
+    private void loadFeatures(SimpleSequentialReader reader, ReaderData readerData) throws IOException, DataException,
+            CoercionException, CloneNotSupportedException {
+
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        SimpleTaskStatus taskStatus = manager.createDefaultSimpleTaskStatus(reader.getName());
+        taskStatus.setAutoremove(true);
+        taskStatus.setIndeterminate();
+        taskStatus.add();
+        try {
+            List<String> headers;
+
+            taskStatus.message("_preparing");
+            readerData.setName(reader.getName());
+            readerData.setStoresRepository(reader.getStoresRepository());
+            readerData.setResourcesStorage(reader.getResourcesStorage());
+            readerData.setParameters(reader.getParameters());
+            readerData.setAlias(reader.getAlias());
+            
+            boolean ignore_errors = getParameters().getIgnoreErrors();
+
+            headers = getParameters().getFieldNames();
+            if ( headers == null ) {
+                // Esto es por si el getFieldNames devuelbe algo que no es
+                // un String pero su toString hace lo que toca.
+                headers = new ArrayList<>();
+                for (Object fielddesc : reader.getFieldNames()) {
+                    headers.add(fielddesc.toString());
+                }
+            }
+
+            // Initialize the feature types
+            EditableFeatureType edftype = this.getFeatureType(headers, automaticDetectionOfTypes(reader));
+
+            edftype.setLabel(reader.getLabel());
+            edftype.setDescription(reader.getDescription());
+            Map<String, String> tagsReader = reader.getTags();
+            if( tagsReader!=null ) {
+                Tags tagsType = edftype.getTags();
+                for (Map.Entry<String, String> tag : tagsReader.entrySet()) {
+                    tagsType.set(tag.getKey(), tag.getValue());
+                }
+            }
+            
+            FeatureType ftype = edftype.getNotEditableCopy();
+            List<FeatureType> ftypes = new ArrayList<>();
+            ftypes.add(ftype);
+            readerData.setFeatureTypes(ftypes, ftype);
+
+            Coercion coercion[] = new Coercion[ftype.size()];
+            CoercionContext coercionContext[] = new CoercionContext[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.getCoercion();
+                coercionContext[i] = ad.getCoercionContext();
+                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 ) {
+                readerData.setNeedCalculateEnvelope(true);
+            }
+
+            Locale locale = getParameters().getLocale();
+            taskStatus.message("_loading");
+            long rowCount = reader.getRowCount();
+            if( rowCount >0 ) {
+                taskStatus.setRangeOfValues(0, rowCount);
+            }
+
+            int count = 0;
+
+            int count_errors = 0;
+            
+            reader.rewind();
+            List<Object> row = reader.read();
+
+            Object rawvalue;
+            while ( row != null ) {
+                taskStatus.setCurValue(++count);
+                FeatureProvider feature = this.createFeatureProvider(ftype);
+                for ( int i = 0; i < row.size(); i++ ) {
+                    try {
+                        if( ftype.get(i).isComputed() ) {
+                            continue;
+                        }
+                        rawvalue = row.get(i);
+                        if( rawvalue instanceof String && StringUtils.isBlank((String)rawvalue) ) {
+                            rawvalue = null;
+                        }
+                        Object value = coercion[i].coerce(rawvalue, coercionContext[i]);
+                        feature.set(i, value);
+                        if ( sizes[i] >= 0 && value != null ) {
+                            int x = ((String) value).length();
+                            if ( sizes[i] < x ) {
+                                sizes[i] = x;
+                            }
+                        }
+                    } catch (Exception ex) {
+                        if ( !ignore_errors ) {
+                            throw ex;
+                        }
+                        if ( count_errors++ < 10 ) {
+                            LOGGER.warn("Can't load value of attribute " + i+" ("+ftype.getAttributeName(i)+") in row " + count + " in '" +readerData.getName()+ "'(row size "+row.size()+", type size "+ftype.size()+ ").", ex);
+                        }
+                        if ( count_errors == 10 ) {
+                            LOGGER.info("Too many errors, suppress messages.");
+                        }
+                    }
+                }
+                readerData.addFeatureProvider(feature);
+                row = reader.read();
+            }
+            for ( int i = 0; i < ftype.size(); i++ ) {
+                if ( sizes[i] > 0 ) {
+                    EditableFeatureAttributeDescriptor efad = ((EditableFeatureAttributeDescriptor) edftype.getAttributeDescriptor(i));
+                    if( efad.getSize()<sizes[i] ) {
+                        efad.setSize(sizes[i]);
+                    }
+                }
+            }
+            // Volvemos a asignar al store el featuretype, ya que puede
+            // haber cambiado.
+            ftype = edftype.getNotEditableCopy();
+            ftypes = new ArrayList<>();
+            ftypes.add(ftype);
+            readerData.setFeatureTypes(ftypes, ftype);
+
+            taskStatus.terminate();
+        } catch(IOException ex) {
+            taskStatus.abort();
+            LOGGER.warn("Can't load features from '"+getProviderName()+"' file '" + getFullFileName() + "'.", ex);
+            throw ex;
+        } catch (Exception ex) {
+            taskStatus.abort();
+            LOGGER.warn("Can't load features from '"+getProviderName()+"' file '" + getFullFileName() + "'.", ex);
+        }
+    }
+    
+    private int[] automaticDetectionOfTypes(SimpleSequentialReader reader) throws IOException {
+        boolean automatic_types_detection = getParameters().getAutomaticTypesDetection();
+        if ( !automatic_types_detection ) {
+            return null;
+        }
+        int[] types = null;
+        try {
+            reader.rewind();
+            List<String> fieldNames = reader.getFieldNames();
+            if ( fieldNames == null ) {
+                fieldNames = getParameters().getFieldNames();
+            }
+
+            AutomaticDetectionOfTypes x = new AutomaticDetectionOfTypes(
+                    this.getFullFileName()
+            );
+            types = x.detect(
+                    fieldNames.size(), 
+                    reader, 
+                    false, 
+                    getParameters().getLocale()
+            );
+        } catch (Exception ex) {
+            throw new RuntimeException("Problems reading '"+getProviderName()+"' file '" + getFullFileName() + "'.", ex);
+        }
+        return types;
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        if ( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) {
+            return true;
+        } else if ( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) {
+            return true;
+        }
+        return super.hasDynValue(name);
+    }
+
+    @Override
+    public UnmodifiableBasicMap<String, DataStore> getChildren() {
+        if( this.isChild() ) {
+            return null;
+        }
+        return new Children();
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        StoresRepository repo = this.readerData.getStoresRepository();
+        return repo;
+    }
+    
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        ResourcesStorage storage = this.readerData.getResourcesStorage();
+        return storage;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.dal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import org.apache.commons.io.IOUtils;
+
+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) {
+            ClassLoader loader = theClass.getClassLoader();
+            URL resource = theClass.getResource(filename);
+            return registerParametersDefinition(name, theClass, loader, resource);
+        }
+        
+        public static DynStruct registerParametersDefinition(String name, Class theClass, ClassLoader loader, URL resource) {
+            if( name == null ) {
+                throw new IllegalArgumentException("Argument 'name' can't be null.");
+            }
+            if( theClass == null ) {
+                throw new IllegalArgumentException("Argument 'theClass' can't be null.");
+            }
+            if( resource == null ) {
+                throw new IllegalArgumentException("Argument 'resource' can't be null.");
+            }
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct definition = manager.getDefinition(name);
+            if ( definition == null) {
+                InputStream stream = null;
+                try {
+                    stream = resource.openStream();
+                    definition = manager.addDefinition(
+                        theClass,
+                        name, 
+                        stream,
+                        loader, 
+                        null, 
+                        null
+                    );
+                } catch (IOException ex) {
+                    throw new DefinitionNotFoundException(theClass, resource.toString(),ex);
+                } finally {
+                    IOUtils.closeQuietly(stream);
+                }
+            }
+            return definition;
+	}
+	public static DynStruct registerMetadataDefinition(String name, Class theClass, String filename) throws MetadataException {
+            ClassLoader loader = theClass.getClassLoader();
+            URL resource = theClass.getResource(filename);
+            return registerMetadataDefinition(name, theClass, loader, resource);
+        }
+        
+	public static DynStruct registerMetadataDefinition(String name, Class theClass, ClassLoader loader, URL resource) throws MetadataException {
+            if( name == null ) {
+                throw new IllegalArgumentException("Argument 'name' can't be null.");
+            }
+            if( theClass == null ) {
+                throw new IllegalArgumentException("Argument 'theClass' can't be null.");
+            }
+            if( resource == null ) {
+                throw new IllegalArgumentException("Argument 'resource' can't be null.");
+            }
+            MetadataManager manager = MetadataLocator.getMetadataManager();
+            DynStruct definition = manager.getDefinition(name);
+            if ( definition == null) {
+                InputStream stream = null;
+                try {
+                    stream = resource.openStream();
+                    definition = manager.addDefinition(
+                        name, 
+                        stream,
+                        theClass.getClassLoader()
+                    );
+                } catch (IOException ex) {
+                    throw new DefinitionNotFoundException(theClass, resource.toString(),ex);
+                } finally {
+                    IOUtils.closeQuietly(stream);
+                }
+            }
+            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 ) {
+                    this(theClass,filename, null);
+                }
+                
+		public DefinitionNotFoundException(Class theClass, String filename, Throwable ex ) {
+			super(
+				"Can't open parameters definition '%(filename)' from class %(classname).",
+				"_ResourceForParametersDefinitionNotFoundException",
+				serialVersionUID
+			);
+                        this.initCause(ex);
+			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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/pom.xml	(revision 46118)
@@ -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.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.344</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.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+    
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/pom.xml	(revision 46118)
@@ -0,0 +1,49 @@
+<?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.344</version>
+  </parent>  
+  <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>
+  
+  <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>
+
+    <module>org.gvsig.fmap.dal.file.imageio</module>
+    <module>org.gvsig.fmap.dal.file.jpg</module>
+    <module>org.gvsig.fmap.dal.file.png</module>
+    <module>org.gvsig.fmap.dal.file.tiff</module>
+    <module>org.gvsig.fmap.dal.file.jp2</module>
+    <module>org.gvsig.fmap.dal.file.bsq</module>
+  </modules>
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/java/org/gvsig/fmap/dal/file/tiff/TiffLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/java/org/gvsig/fmap/dal/file/tiff/TiffLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/java/org/gvsig/fmap/dal/file/tiff/TiffLibrary.java	(revision 46118)
@@ -0,0 +1,118 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.tiff;
+
+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.FileHelper;
+import org.gvsig.fmap.dal.file.imageio.ImageIOFileSystemServerProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProvider;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Tiff Library to register provider components
+ *
+ */
+public class TiffLibrary extends AbstractLibrary {
+
+    public static String NAME = "TIFF";
+    public static String DESCRIPTION = "TIFF provider";
+    public static String[] FILE_EXTENSIONS = new String[]{"tif", "tiff"};
+
+    @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<>();
+
+
+        FileHelper.registerParametersDefinition(
+                NAME + "StoreProviderParameters",
+                ImageIOStoreProviderParameters.class,
+                this.getClass().getClassLoader(),
+                this.getClass().getResource(NAME + "Parameters.xml"));
+        try {
+            try {
+                FileHelper.registerMetadataDefinition(
+                        NAME,
+                        ImageIOStoreProvider.class,
+                        this.getClass().getClassLoader(),
+                        this.getClass().getResource(NAME + "Metadata.xml"));
+            } catch (MetadataException e) {
+                exs.add(e);
+            }
+            
+            DataManagerProviderServices datamanager = DALSPILocator.getDataManagerProviderServices();
+            FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
+
+            if (!datamanager.getStoreProviders().contains(NAME)) {
+                datamanager.registerStoreProviderFactory(
+                        new ImageIOStoreProviderFactory(
+                                NAME,
+                                DESCRIPTION));
+            }
+            explorerManager.registerProviderFactory(
+                    new ImageIOFileSystemServerProviderFactory(
+                            NAME,
+                            DESCRIPTION,
+                            FILE_EXTENSIONS,
+                            true
+                    )
+            );
+        } catch (Exception e) {
+            exs.add(e);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+    }
+
+    public static DynClass getMatadataDefinition() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynClass metadataDefinition = (DynClass) metadataManager.getDefinition(NAME);
+        return metadataDefinition;
+    }}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.file.tiff.TiffLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFMetadata.xml	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a JIMI file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="TIFF" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a TIFF store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/src/main/resources/org/gvsig/fmap/dal/file/tiff/TIFFParameters.xml	(revision 46118)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="TIFFStoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a tiff file</description>
+      <fields>
+        <field name="file" type="file" mandatory="true" group="Basic">
+          <description>tiff file</description>
+        </field>
+        <field name="crs" type="crs" mandatory="true" group="Basic">
+          <description>The coordinate reference system used in this tiff file</description>
+        </field>
+        <field name="wldParams" type="object" mandatory="false" group="Basic" classOfValue="java.util.List">
+          <description>Info given by a wld file with geolocation</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff/pom.xml	(revision 46118)
@@ -0,0 +1,35 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.tiff</artifactId>
+    <name>${project.artifactId}</name>
+    <description>TIFF provider</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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.dal.file.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.tiff
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/pom.xml	(revision 46118)
@@ -0,0 +1,29 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.imageio</artifactId>
+    <name>${project.artifactId}</name>
+    <description>Base raster provider for ImageIO formats</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+        </dependency>
+    </dependencies>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProvider.java	(revision 46118)
@@ -0,0 +1,155 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.imageio;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+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.raster.NewRasterStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+
+public class ImageIOFileSystemServerProvider extends AbstractFilesystemServerExplorerProvider {
+
+    protected FilesystemServerExplorerProviderServices serverExplorer;
+
+    protected String[] fileExtensions;
+    protected boolean canCreate;
+
+    public ImageIOFileSystemServerProvider(
+            FilesystemServerExplorerProviderFactory factory,
+            String name, 
+            String description, 
+            String[] fileExtensions
+        ) {
+        this(factory, name, description, fileExtensions, false);
+    }
+    
+    public ImageIOFileSystemServerProvider(
+            FilesystemServerExplorerProviderFactory factory,
+            String name, 
+            String description, 
+            String[] fileExtensions,
+            boolean canCreate
+        ) {
+        super(factory, name, description);
+        this.fileExtensions = fileExtensions;
+        this.canCreate = canCreate;
+    }
+    
+    @Override
+    public boolean canCreate() {
+        return canCreate;
+    }
+
+    @Override
+    public NewDataStoreParameters getCreateParameters() throws DataException {
+        if( !this.canCreate() ) {
+           throw new UnsupportedOperationException();
+        }
+        return null ; // TODO: Falta la creacion de los parametros 
+    }
+
+    @Override
+    public void create(NewDataStoreParameters parameters, boolean overwrite) throws CreateException {
+        if( !this.canCreate() ) {
+           throw new UnsupportedOperationException();
+        }
+        File output = ((FilesystemStoreParameters)parameters).getFile();
+        if( output==null ) {
+            throw new IllegalArgumentException("Parameter 'file' can't be null.");
+        }
+        Buffer buffer = ((NewRasterStoreParameters)parameters).getBuffer();
+        if( buffer==null ) {
+            throw new IllegalArgumentException("Parameter 'buffer' can't be null.");
+        }
+        BufferedImage image = buffer.getBufferedImage();
+        try {
+            ImageIO.write(image, this.getName(), output);
+        } catch (IOException ex) {
+            throw new CreateException(output.getAbsolutePath(), ex);
+        }
+        
+//        DataTypesManager dtm = ToolsLocator.getDataTypesManager();
+//        ImageWriter writer = getImageWriter();
+//        ImageWriteParam writerParams = writer.getDefaultWriteParam();
+//        Class<? extends ImageWriteParam> writerParamsClass = writerParams.getClass();
+//        for( DynField field : parameters.getDynClass().getDynFields() ) {
+//            DynField_v2 field2 = (DynField_v2) field;
+//            try {
+//                String methodName = (String) field2.getTags().get(
+//                    "ImageWriteParam", 
+//                    DataTypes.STRING
+//                );
+//                if( methodName!=null ) {
+//                    Method setter = writerParamsClass.getMethod(
+//                        methodName, 
+//                        dtm.getDefaultClass(field.getType())
+//                    );
+//                    setter.invoke(
+//                        writerParams, 
+//                        parameters.getDynValue(field.getName())
+//                    );
+//                }
+//            } catch (Exception ex) {
+//            }
+//        }
+//        FileOutputStream fos = null;
+//        try {
+//            fos = new FileOutputStream(output);
+//            writer.setOutput(fos);
+//            writer.write(null, new IIOImage(image, null, null), writerParams);
+//        } catch (Exception ex) {
+//            throw new CreateException(output.getAbsolutePath(), ex);
+//        } finally {
+//            IOUtils.closeQuietly(fos);
+//        }
+        
+    }
+    
+//    private ImageWriter getImageWriter() {
+//        return null;
+//    }
+    
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_RASTER;
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return FilenameUtils.isExtension(pathname.getName().toLowerCase(), this.fileExtensions);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProvider.java	(revision 46118)
@@ -0,0 +1,220 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.imageio;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.FilenameUtils;
+
+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.DataStoreParameters;
+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.raster.spi.AbstractAwtRasterStoreProvider;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+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.tools.ToolsLocator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+
+public class ImageIOStoreProvider 
+        extends 
+            AbstractAwtRasterStoreProvider 
+        implements 
+            ResourceConsumer
+    {
+    
+    protected String storeProviderName;
+    protected String storeProviderDescription;
+    
+    protected ResourceProvider resource;
+    private BufferedImage image;
+
+    /**
+     * @param storeProviderName
+     * @param storeProviderDescription
+     * @param params
+     * @param storeServices
+     * @throws InitializeException
+     */
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public ImageIOStoreProvider(
+        String storeProviderName, 
+        String storeProviderDescription, 
+        ImageIOStoreProviderParameters params,
+        DataStoreProviderServices storeServices
+        ) throws InitializeException {
+        super(
+                params,
+                storeServices,
+                FileHelper.newMetadataContainer(storeProviderName)
+        );
+        this.storeProviderName = storeProviderName;
+        this.storeProviderDescription = storeProviderDescription;
+        this.init(params, storeServices);
+    }
+
+    @Override
+    public String getProviderName() {
+        return this.storeProviderName;
+    }
+
+    @Override
+    protected void init(DataStoreParameters params, DataStoreProviderServices storeServices) throws InitializeException {
+        super.init(params, storeServices);
+
+        File file = getParameters().getFile();
+        if (file == null) {
+            throw new InitializeException(
+                new NullPointerException(this.storeProviderName +" file is null"));
+        }
+
+        resource = this.createResource(
+            FileResource.NAME,
+            new Object[] { file.getAbsolutePath() }
+        );
+
+        resource.addConsumer(this);
+
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return this.resource;
+    }
+
+    @Override
+    public Object getSourceId() {
+        return this.getParameters().getFile();
+    }
+
+    @Override
+    public String getName() {
+        String name = this.getParameters().getFile().getName();
+        return FilenameUtils.getBaseName(name);
+    }
+
+    @Override
+    public String getFullName() {
+        return this.getParameters().getFile().getAbsolutePath();
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+            DataStoreNotification.RESOURCE_CHANGED,
+            resource);
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        resource.removeConsumer(this);
+        resource = null;
+        image = null;
+    }
+
+    @Override
+    public ImageIOStoreProviderParameters getParameters() {
+        return (ImageIOStoreProviderParameters) super.getParameters();
+    }
+
+    @Override
+    public void open() throws OpenException {
+        if (this.isOpen()) {
+            return;
+        }
+        SimpleTaskStatus taskStatus = null;
+        try {
+            taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(this.getName());
+            taskStatus.setIndeterminate();
+            taskStatus.setAutoremove(true);
+            taskStatus.message("Loading "+this.getName()+"...");
+            taskStatus.add();
+            image = ImageIO.read((File) getResource().getParameters().getDynValue(FileResource.NAME));
+            open(image.getRaster());
+
+        } catch (Exception e) {
+            if( taskStatus!=null ) {
+                taskStatus.abort();
+                taskStatus = null;
+            }
+            try {
+                throw new OpenException(resource.getName(), e);
+            } catch (AccessResourceException e1) {
+                throw new OpenException(getProviderName(), e);
+            }
+        } finally {
+            if( taskStatus!=null ) {
+                taskStatus.terminate();
+                taskStatus = null;
+            }
+        }
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException, ValidateDataParametersException {
+        DataManager manager = DALLocator.getDataManager();
+        FilesystemServerExplorerParameters params;
+        try {
+            params = (FilesystemServerExplorerParameters) manager
+            .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+            params.setRoot(this.getParameters().getFile().getParent());
+            return manager.openServerExplorer(FilesystemServerExplorer.NAME,params);
+        } catch (DataException | ValidateDataParametersException e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+
+    }
+
+    /**
+     * @return BufferedImage
+     */
+    public BufferedImage getImage() {
+        autoOpen();
+        return this.image;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderParameters.java	(revision 46118)
@@ -0,0 +1,96 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.imageio;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.spi.AbstractOpenRasterStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+
+public class ImageIOStoreProviderParameters 
+        extends 
+            AbstractOpenRasterStoreParameters 
+        implements
+            OpenRasterStoreParameters, 
+            FilesystemStoreParameters
+    {
+
+    protected static final Logger logger = LoggerFactory.getLogger(ImageIOStoreProviderParameters.class);
+
+    public static final String FILE_PARAMTER_NAME = "file";
+
+    protected DelegatedDynObject parameters;
+
+    /**
+     * Constructor
+     * @param name
+     */
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public ImageIOStoreProviderParameters(String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(name+"StoreProviderParameters");
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    @Override
+    public boolean isValid() {
+        return (this.getFile() != null);
+    }
+
+    @Override
+    public File getFile() {
+        return (File) this.getDynValue(FILE_PARAMTER_NAME);
+    }
+
+    @Override
+    public void setFile(File file) {
+        this.setDynValue(FILE_PARAMTER_NAME, file);
+        loadWLD(file);
+        if (getCRS()==null){
+            loadPRJ(file);
+        }
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+    @Override
+    public void setDynValue(String name, Object value) {
+        super.setDynValue(name, value);
+        if(name.equals(FILE_PARAMTER_NAME)){
+            loadWLD((File) value);
+        }
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOFileSystemServerProviderFactory.java	(revision 46118)
@@ -0,0 +1,91 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.imageio;
+
+import java.io.File;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
+
+
+public class ImageIOFileSystemServerProviderFactory 
+        extends AbstractFilesystemServerExplorerProviderFactory 
+  {
+
+    protected String[] fileExtensions;
+    protected boolean canCreate;
+
+    public ImageIOFileSystemServerProviderFactory(
+            String name, 
+            String description, 
+            String[] fileExtensions
+        ) {
+        this(name, description, fileExtensions, false);
+    }
+
+    public ImageIOFileSystemServerProviderFactory(
+            String name, 
+            String description, 
+            String[] fileExtensions,
+            boolean canCreate
+        ) {
+        super(name, description);
+        this.fileExtensions = fileExtensions;
+        this.canCreate = canCreate;
+    }
+
+    @Override
+    public FilesystemServerExplorerProvider createProvider() {
+        return new ImageIOFileSystemServerProvider(
+                this,
+                this.getName(),
+                this.getDescription(),
+                this.fileExtensions,
+                this.canCreate
+        );
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return FilenameUtils.isExtension(
+                pathname.getName().toLowerCase(), 
+                this.fileExtensions
+        );
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_RASTER;
+    }
+
+  @Override
+  public boolean isHidden() {
+    return DALLocator.getDataManager().isTheOldRasterRegistered();
+  }
+
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio/src/main/java/org/gvsig/fmap/dal/file/imageio/ImageIOStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.imageio;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+
+
+public class ImageIOStoreProviderFactory extends AbstractRasterStoreProviderFactory {
+
+    protected static final Logger logger = LoggerFactory.getLogger(ImageIOStoreProviderFactory.class);
+
+    public ImageIOStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    @Override
+    public ImageIOStoreProvider createProvider(DataParameters parameters,
+        DataStoreProviderServices providerServices) throws InitializeException {
+        return new ImageIOStoreProvider(
+                this.getName(), 
+                this.getDescription(), 
+                (ImageIOStoreProviderParameters)parameters, 
+                providerServices
+        );
+    }
+
+    @Override
+    public ImageIOStoreProviderParameters createParameters() {
+        return new ImageIOStoreProviderParameters(this.getName());
+    }
+
+    @Override
+    public boolean isHidden() {
+      return DALLocator.getDataManager().isTheOldRasterRegistered();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.imageio
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/pom.xml	(revision 46118)
@@ -0,0 +1,126 @@
+<?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.344</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.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.se</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+        <scope>test</scope>
+    </dependency>      
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.basicformats</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+
+
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- Skip test execution ? -->
+          <skipTests>false</skipTests>
+          <!-- Ignore test execution failure ? -->
+          <testFailureIgnore>false</testFailureIgnore>
+        </configuration>
+      </plugin>
+        
+      <!-- Skip test compilation ? -->
+      <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>false</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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

Index: tags/org.gvsig.desktop-2.0.344/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/SHPStoreSaveEncodingMethod.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPStoreSaveEncodingMethod.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPStoreSaveEncodingMethod.java	(revision 46118)
@@ -0,0 +1,55 @@
+package org.gvsig.fmap.dal.store.shp;
+
+
+import java.io.File;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.OpenDataStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseCodepage;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-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 SHPStoreSaveEncodingMethod extends AbstractDynMethod {
+
+    public SHPStoreSaveEncodingMethod() {
+        super("saveEncoding", "Save the current encoding in the '.cpg' file associated to this shape.");
+    }
+    
+    @Override
+    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
+        SHPStoreProvider provider = (SHPStoreProvider)self;
+        OpenDataStoreParameters shapeOpenParameters = (OpenDataStoreParameters) provider.getParameters();
+        File f = (File) shapeOpenParameters.getDynValue(SHPStoreParameters.SHPFILE_PARAMTER_NAME);
+        String encoding = (String) shapeOpenParameters.getDynValue(SHPStoreParameters.ENCODING_PARAMTER_NAME);
+        DbaseCodepage cp = new DbaseCodepage(f);
+        cp.write(encoding);
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.store.shp;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLibrary;
+
+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.fmap.geom.GeometryLibrary;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+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);
+        require(GeometryLibrary.class);
+        require(ExpressionEvaluatorLibrary.class);
+    }
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		List<Throwable> exs = new ArrayList<>();
+        DynClass metadataDefinition;
+        
+		FileHelper.registerParametersDefinition(
+				SHPStoreParameters.PARAMETERS_DEFINITION_NAME,
+				SHPStoreParameters.class, "SHPParameters.xml");
+		FileHelper.registerParametersDefinition(
+				SHPNewStoreParameters.PARAMETERS_DEFINITION_NAME,
+				SHPNewStoreParameters.class, "SHPParameters.xml");
+		try {
+			metadataDefinition = (DynClass) FileHelper.registerMetadataDefinition(
+					SHPStoreProvider.METADATA_DEFINITION_NAME,
+					SHPStoreProvider.class, "SHPMetadata.xml");
+            metadataDefinition.addDynMethod(new SHPStoreSaveEncodingMethod());
+		} 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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/SHPPolygon2DWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPPolygon2DWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPPolygon2DWriter.java	(revision 46118)
@@ -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.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiPolygon;
+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.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ *
+ *
+ */
+public class SHPPolygon2DWriter implements SHPShapeWriter {
+    private Geometry geometry;
+    private int m_type;
+    private int[] parts;
+    private Point[] points;
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPPolygon2DWriter.class);
+
+
+	/**
+	 * Crea un nuevo SHPPolygon.
+	 */
+	public SHPPolygon2DWriter() {
+		m_type = SHP.POLYGON2D;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public synchronized void write(ByteBuffer buffer) throws WriteException {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+
+
+        try {
+            initialize(geometry);
+        } catch (BaseException e) {
+            throw new WriteException("SHPPolygon2DWriter", e);
+        }
+
+		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++) {
+            Point point = points[t];
+            buffer.putDouble(point.getX());
+            buffer.putDouble(point.getY());
+        }
+
+	}
+
+	   /**
+     * @throws GeometryException
+	 * @throws GeometryOperationException
+	 * @throws GeometryOperationNotSupportedException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+
+        geometry = g;
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        if(geometry instanceof Polygon){
+            Polygon polygon = (Polygon)geometry;
+            polygon.ensureOrientation(false);
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < polygon.getNumVertices(); i++) {
+                arrayPoints.add(polygon.getVertex(i));
+            }
+            if(polygon.getNumInteriorRings()!=0){
+                index += polygon.getNumVertices();
+                arrayParts.add(index);
+            }
+            for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                Ring ring = polygon.getInteriorRing(r);
+                ring.ensureOrientation(true);
+                for (int i = 0; i < ring.getNumVertices(); i++) {
+                    arrayPoints.add(ring.getVertex(i));
+                }
+                if(r<polygon.getNumInteriorRings()-1){
+                    index += ring.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        } else {
+
+            MultiPolygon multiPolygon = null;
+            if (geometry instanceof MultiPolygon) {
+                multiPolygon = (MultiPolygon) geometry;
+            } else if (geometry instanceof MultiSurface) {
+                multiPolygon = geomManager.createMultiPolygon(Geometry.SUBTYPES.GEOM2D);
+                MultiSurface multiSurface = (MultiSurface) geometry;
+                for (int i = 0; i < multiSurface.getPrimitivesNumber(); i++) {
+                    Surface surface = (Surface) multiSurface.getPrimitiveAt(i);
+                    if (surface instanceof Polygon) {
+                        Polygon polygon = (Polygon)surface;
+                        polygon.ensureOrientation(false);
+                        multiPolygon.addPrimitive(polygon);
+                    } else {
+                        MultiPolygon polygons = surface.toPolygons();
+                        for (int j = 0; j < polygons.getPrimitivesNumber(); j++) {
+                            Primitive polygon = polygons.getPrimitiveAt(j);
+                            polygon.ensureOrientation(false);
+                            multiPolygon.addPrimitive(polygon);
+                        }
+                    }
+                }
+            } else {
+                multiPolygon = geometry.toPolygons();
+            }
+
+            arrayParts.add(0);
+            int index = 0;
+            for (int i = 0; i < multiPolygon.getPrimitivesNumber(); i++) {
+                Polygon polygon = (Polygon) multiPolygon.getPrimitiveAt(i);
+
+                polygon.ensureOrientation(false);
+                for (int j = 0; j < polygon.getNumVertices(); j++) {
+                    arrayPoints.add(polygon.getVertex(j));
+                }
+                if(polygon.getNumInteriorRings()!=0 || i<multiPolygon.getPrimitivesNumber()-1){
+                    index += polygon.getNumVertices();
+                    arrayParts.add(index);
+                }
+                for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                    Ring ring = polygon.getInteriorRing(r);
+                    ring.ensureOrientation(true);
+                    for (int j = 0; j < ring.getNumVertices(); j++) {
+                        arrayPoints.add(ring.getVertex(j));
+                    }
+                    if((i<multiPolygon.getPrimitivesNumber()-1) || (r<polygon.getNumInteriorRings()-1)){
+                        index += ring.getNumVertices();
+                        arrayParts.add(index);
+                    }
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public synchronized int getLength() {
+		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;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPPolygon3DWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPPolygon3DWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPPolygon3DWriter.java	(revision 46118)
@@ -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.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiPolygon;
+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.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ *
+ *
+ */
+public class SHPPolygon3DWriter implements SHPShapeWriter {
+    private Geometry geometry;
+    private int m_type;
+    private int[] parts;
+    private Point[] points;
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPPolygon3DWriter.class);
+
+
+	/**
+	 * Crea un nuevo SHPPolygon.
+	 */
+	public SHPPolygon3DWriter() {
+		m_type = SHP.POLYGON3D;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+    public synchronized void write(ByteBuffer buffer) throws WriteException {
+        Envelope env = geometry.getEnvelope();
+
+        buffer.putDouble(env.getMinimum(0));
+        buffer.putDouble(env.getMinimum(1));
+        buffer.putDouble(env.getMaximum(0));
+        buffer.putDouble(env.getMaximum(1));
+
+        try {
+            initialize(geometry);
+        } catch (BaseException e) {
+            throw new WriteException("SHPPolygon2DWriter", e);
+        }
+
+        double minM = Double.POSITIVE_INFINITY;
+        double maxM = Double.NEGATIVE_INFINITY;
+        double minZ = Double.POSITIVE_INFINITY;
+        double maxZ = Double.NEGATIVE_INFINITY;
+        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++) {
+            Point point = points[t];
+            buffer.putDouble(point.getX());
+            buffer.putDouble(point.getY());
+            double z = point.getCoordinateAt(Geometry.DIMENSIONS.Z);
+            if (z < minZ) {
+                minZ = z;
+            }
+            if (z > maxZ) {
+                maxZ = z;
+            }
+            if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+                double m = point.getCoordinateAt(point.getDimension()-1);
+                if (m < minM) {
+                    minM = m;
+                }
+                if (m > maxM) {
+                    maxM = m;
+                }
+            }
+        }
+        buffer.putDouble(minZ);
+        buffer.putDouble(maxZ);
+        for (int t = 0; t < npoints; t++) {
+            Point point = points[t];
+            buffer.putDouble(points[t].getCoordinateAt(Geometry.DIMENSIONS.Z));
+        }
+
+        if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+            buffer.putDouble(minM);
+            buffer.putDouble(maxM);
+            for (int t = 0; t < npoints; t++) {
+                Point point = points[t];
+                buffer.putDouble(points[t].getCoordinateAt(point.getDimension()-1));
+            }
+        }
+    }
+
+	   /**
+     * @throws GeometryException
+	 * @throws GeometryOperationException
+	 * @throws GeometryOperationNotSupportedException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+
+        geometry = g;
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        if(geometry instanceof Polygon){
+            Polygon polygon = (Polygon)geometry;
+            polygon.ensureOrientation(false);
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < polygon.getNumVertices(); i++) {
+                arrayPoints.add(polygon.getVertex(i));
+            }
+            if(polygon.getNumInteriorRings()!=0){
+                index += polygon.getNumVertices();
+                arrayParts.add(index);
+            }
+            for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                Ring ring = polygon.getInteriorRing(r);
+                ring.ensureOrientation(true);
+                for (int i = 0; i < ring.getNumVertices(); i++) {
+                    arrayPoints.add(ring.getVertex(i));
+                }
+                if(r<polygon.getNumInteriorRings()-1){
+                    index += ring.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        } else {
+
+            MultiPolygon multiPolygon = null;
+            if (geometry instanceof MultiPolygon) {
+                multiPolygon = (MultiPolygon) geometry;
+            } else if (geometry instanceof MultiSurface) {
+                multiPolygon = geomManager.createMultiPolygon(geometry.getGeometryType().getSubType());
+                MultiSurface multiSurface = (MultiSurface) geometry;
+                for (int i = 0; i < multiSurface.getPrimitivesNumber(); i++) {
+                    Surface surface = (Surface) multiSurface.getPrimitiveAt(i);
+                    if (surface instanceof Polygon) {
+                        Polygon polygon = (Polygon)surface;
+                        polygon.ensureOrientation(false);
+                        multiPolygon.addPrimitive(surface);
+                    } else {
+                        MultiPolygon polygons = surface.toPolygons();
+                        for (int j = 0; j < polygons.getPrimitivesNumber(); j++) {
+                            Primitive polygon = polygons.getPrimitiveAt(j);
+                            polygon.ensureOrientation(false);
+                            multiPolygon.addPrimitive(polygon);
+                        }
+                    }
+                }
+            } else {
+                multiPolygon = geometry.toPolygons();
+            }
+
+            arrayParts.add(0);
+            int index = 0;
+            for (int i = 0; i < multiPolygon.getPrimitivesNumber(); i++) {
+                Polygon polygon = (Polygon) multiPolygon.getPrimitiveAt(i);
+
+                polygon.ensureOrientation(false);
+                for (int j = 0; j < polygon.getNumVertices(); j++) {
+                    arrayPoints.add(polygon.getVertex(j));
+                }
+                if(polygon.getNumInteriorRings()!=0 || i<multiPolygon.getPrimitivesNumber()-1){
+                    index += polygon.getNumVertices();
+                    arrayParts.add(index);
+                }
+                for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                    Ring ring = polygon.getInteriorRing(r);
+                    ring.ensureOrientation(true);
+                    for (int j = 0; j < ring.getNumVertices(); j++) {
+                        arrayPoints.add(ring.getVertex(j));
+                    }
+                    if((i<multiPolygon.getPrimitivesNumber()-1) || (r<polygon.getNumInteriorRings()-1)){
+                        index += ring.getNumVertices();
+                        arrayParts.add(index);
+                    }
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public synchronized int getLength() {
+        int numlines;
+        int numpoints;
+        int length;
+
+        numlines = parts.length;
+        numpoints = points.length;
+        // 44 = Shape Type + Box + NumParts + NumPoints
+        // (4 * numlines) = Parts
+        // (numpoints * 16) = Points
+        // 16 = ZMin + ZMax
+        // (numpoints * 8) = Zarray
+        length = 44 + (4 * numlines) + (numpoints * 16) + 16 + (numpoints * 8);
+        if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+            // 16 = MMin + MMax
+            // (numpoints * 8) = Marray
+            length += 16 + (numpoints * 8);
+        }
+
+        return length;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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 writer del tipo m�s adecuado.
+     *
+     * @param type Tipo de geometr�a.
+     *
+     * @return ShapeWriter m�s adecuado.
+     *
+     * @throws ShapefileException Se lanza cuando es causada por la creaci�n del shape.
+     */
+    public static SHPShapeWriter create(int type) {
+        SHPShapeWriter writer;
+
+        switch (type) {
+        case NULL:
+            writer = new SHPNullWriter();
+            break;
+
+        case POINT2D:
+        case POINT3D:
+        case POINTM:
+            writer = new SHPPointWriter(type);
+            break;
+
+        case POLYLINE2D:
+            writer = new SHPMultiLine2DWriter();
+            break;
+        case POLYLINE3D:
+            writer = new SHPMultiLine3DWriter();
+            break;
+        case POLYLINEM:
+            writer = new SHPMultiLine2DMWriter();
+            break;
+
+        case POLYGON2D:
+            writer = new SHPPolygon2DWriter();
+            break;
+        case POLYGON3D:
+            writer = new SHPPolygon3DWriter();
+            break;
+        case POLYGONM:
+            writer = new SHPPolygon2DMWriter();
+            break;
+
+        case MULTIPOINT2D:
+        case MULTIPOINT3D:
+        case MULTIPOINTM:
+            writer = new SHPMultiPointWriter(type);
+            break;
+
+        default:
+            writer = null;
+        }
+
+        return writer;
+    }
+
+    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 prjFile = findEnd(str, files, ends);
+		return prjFile;
+	}
+
+    private static File findEnd(String str,File[] files, String[] ends) {
+        if( files!=null ) {
+            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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPMultiLine2DWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine2DWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine2DWriter.java	(revision 46118)
@@ -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.fmap.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ *
+ * @author fdiaz
+ */
+public class SHPMultiLine2DWriter implements SHPShapeWriter {
+    private Geometry geometry;
+	private int m_type;
+	private int[] parts;
+	private Point[] points;
+	private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SHPMultiLine2DWriter.class);
+
+	/**
+	 * Crea un nuevo SHPMultiLine.
+	 */
+	public SHPMultiLine2DWriter() {
+		m_type = SHP.POLYLINE2D;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer) throws WriteException {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+
+		try {
+            initialize(geometry);
+        } catch (GeometryException e) {
+            throw new WriteException("SHPMultiLine2D write", e);
+        }
+
+		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());
+		}
+	}
+
+	/**
+	 * @throws GeometryException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException {
+
+        geometry = g;
+
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        if(g instanceof Line){
+            Line line = (Line)g;
+            arrayParts.add(0);
+            for (int i = 0; i < line.getNumVertices(); i++) {
+                arrayPoints.add(line.getVertex(i));
+            }
+        } else {
+
+            MultiLine multiLine = null;
+            if (g instanceof MultiLine) {
+                multiLine = (MultiLine) g;
+            } else if (g instanceof MultiCurve) {
+                multiLine = geomManager.createMultiLine(Geometry.SUBTYPES.GEOM2D);
+                MultiCurve multiCurve = (MultiCurve) g;
+                for (int i = 0; i < multiCurve.getPrimitivesNumber(); i++) {
+                    Curve curve = (Curve) multiCurve.getPrimitiveAt(i);
+                    if (curve instanceof Line) {
+                        multiLine.addPrimitive(curve);
+                    } else {
+                        MultiLine lines = curve.toLines();
+                        for (int j = 0; j < lines.getPrimitivesNumber(); j++) {
+                            multiLine.addPrimitive(lines.getPrimitiveAt(j));
+                        }
+                    }
+                }
+            } else {
+                multiLine = g.toLines();
+            }
+
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < multiLine.getPrimitivesNumber(); i++) {
+                Line line = (Line) multiLine.getPrimitiveAt(i);
+                for (int j = 0; j < line.getNumVertices(); j++) {
+                    arrayPoints.add(line.getVertex(j));
+                }
+                if (i < multiLine.getPrimitivesNumber() - 1) {
+                    index += line.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+    /**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+	 */
+	public int getLength() {
+		int numlines;
+		int numpoints;
+		int length;
+
+		numlines = parts.length;
+		numpoints = points.length;
+        length = 44 + (4 * numlines) + (numpoints * 16);
+
+		return length;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine3DWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine3DWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine3DWriter.java	(revision 46118)
@@ -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.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ *
+ * @author fdiaz
+ */
+public class SHPMultiLine3DWriter implements SHPShapeWriter {
+    private Geometry geometry;
+	protected int m_type;
+	protected int[] parts;
+	protected Point[] points;
+	private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+	private static final Logger logger = LoggerFactory.getLogger(SHPMultiLine3DWriter.class);
+
+	/**
+	 * Crea un nuevo SHPMultiLine.
+	 */
+	public SHPMultiLine3DWriter() {
+		m_type = SHP.POLYLINE3D;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer) throws WriteException {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+
+		try {
+            initialize(geometry);
+        } catch (GeometryException e) {
+            throw new WriteException("SHPMultiLine3D write", e);
+        }
+
+		double minM=Double.POSITIVE_INFINITY;
+        double maxM=Double.NEGATIVE_INFINITY;
+        double minZ=Double.POSITIVE_INFINITY;
+        double maxZ=Double.NEGATIVE_INFINITY;
+		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++) {
+			Point point = points[t];
+            buffer.putDouble(point.getX());
+			buffer.putDouble(point.getY());
+            double z = point.getCoordinateAt(Geometry.DIMENSIONS.Z);
+            if(z<minZ){
+                minZ = z;
+            }
+            if(z>maxZ){
+                maxZ = z;
+            }
+            if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+                double m = point.getCoordinateAt(point.getDimension()-1);
+                if (m < minM) {
+                    minM = m;
+                }
+                if (m > maxM) {
+                    maxM = m;
+                }
+            }
+		}
+        buffer.putDouble(minZ);
+        buffer.putDouble(maxZ);
+        for (int t = 0; t < npoints; t++) {
+            Point point = points[t];
+            buffer.putDouble(point.getCoordinateAt(Geometry.DIMENSIONS.Z));
+        }
+        if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+            buffer.putDouble(minM);
+            buffer.putDouble(maxM);
+            for (int t = 0; t < npoints; t++) {
+                Point point = points[t];
+                buffer.putDouble(point.getCoordinateAt(point.getDimension()-1));
+            }
+        }
+	}
+
+	/**
+	 * @throws GeometryException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException {
+
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        geometry = g;
+
+        if(geometry instanceof Line){
+            Line line = (Line)g;
+            arrayParts.add(0);
+            for (int i = 0; i < line.getNumVertices(); i++) {
+                arrayPoints.add(line.getVertex(i));
+            }
+        } else {
+
+            MultiLine multiLine = null;
+            if (geometry instanceof MultiLine) {
+                multiLine = (MultiLine) g;
+            } else if (g instanceof MultiCurve) {
+                multiLine = geomManager.createMultiLine(g.getGeometryType().getSubType());
+                MultiCurve multiCurve = (MultiCurve) geometry;
+                for (int i = 0; i < multiCurve.getPrimitivesNumber(); i++) {
+                    Curve curve = (Curve) multiCurve.getPrimitiveAt(i);
+                    if (curve instanceof Line) {
+                        multiLine.addPrimitive(curve);
+                    } else {
+                        MultiLine lines = curve.toLines();
+                        for (int j = 0; j < lines.getPrimitivesNumber(); j++) {
+                            multiLine.addPrimitive(lines.getPrimitiveAt(j));
+                        }
+                    }
+                }
+            } else {
+                multiLine = g.toLines();
+            }
+
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < multiLine.getPrimitivesNumber(); i++) {
+                Line line = (Line) multiLine.getPrimitiveAt(i);
+                for (int j = 0; j < line.getNumVertices(); j++) {
+                    arrayPoints.add(line.getVertex(j));
+                }
+                if (i < multiLine.getPrimitivesNumber() - 1) {
+                    index += line.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+    /**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+	 */
+	public int getLength() {
+		int numlines;
+		int numpoints;
+		int length;
+
+		numlines = parts.length;
+		numpoints = points.length;
+		// 44 = Shape Type + Box + NumParts + NumPoints
+		// (4 * numlines) = Parts
+		// (numpoints * 16) = Points
+		// 16 = ZMin + ZMax
+		// (numpoints * 8) = Zarray
+        length = 44 + (4 * numlines) + (numpoints * 16) + 16 + (numpoints * 8);
+        if (geometry.getGeometryType().getSubType() == Geometry.SUBTYPES.GEOM3DM) {
+            // 16 = MMin + MMax
+            // (numpoints * 8) = Marray
+            length += 16 + (numpoints * 8);
+        }
+
+		return length;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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/AbstractSHPReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractSHPReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractSHPReader.java	(revision 46118)
@@ -0,0 +1,234 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ByteOrder;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ReadRuntimeException;
+import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractSHPReader implements SHPReader {
+    private final SHPStoreParameters params;
+
+    /**
+     *
+     * @param params
+     */
+    public AbstractSHPReader(SHPStoreParameters params) {
+        this.params = params;
+    }
+
+    protected class InvalidNumberOfPointsInLinearRingException extends ReadRuntimeException {
+
+        private final static String MESSAGE_FORMAT = "Invalid number of points in LinearRing (found %(NumPoints) - must be 0 or >= 4).\nCheck 'Fix LinearRings and LineStrings' in the shape's properties of the add layer dialog to try fix it.";
+        private final static String MESSAGE_KEY = "_InvalidNumberOfPointsInLinearRingException";
+        private static final long serialVersionUID = -8265770463632826027L;
+
+        public InvalidNumberOfPointsInLinearRingException(int numPoints) {
+            super(MESSAGE_FORMAT, null, MESSAGE_KEY, serialVersionUID);
+            setValue("NumPoints", numPoints);
+            this.getMessage();
+        }
+    }
+
+    protected class InvalidNumberOfPointsInLineStringException extends ReadRuntimeException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = -6458824187605578665L;
+        private final static String MESSAGE_FORMAT = "Invalid number of points in LineString (found %(NumPoints) - must be 0 or >= 2).\nCheck 'Fix LinearRings and LineStrings' in the shape's properties of the add layer dialog to try fix it.";
+        private final static String MESSAGE_KEY = "_InvalidNumberOfPointsInLineStringException";
+
+        public InvalidNumberOfPointsInLineStringException(int numPoints) {
+            super(MESSAGE_FORMAT, null, MESSAGE_KEY, serialVersionUID);
+            setValue("NumPoints", numPoints);
+            this.getMessage();
+        }
+    }
+    public void checkNumVerticesOfRing(Ring ring ) throws InvalidNumberOfPointsInLinearRingException {
+            if( ring.getNumVertices()<4 ) {
+                if( this.fixLinearRings() ) {
+                    Point p = ring.getVertex(ring.getNumVertices()-1);
+                    while( ring.getNumVertices()<4 ) {
+                        p = (Point) p.cloneGeometry();
+                        ring.addVertex(p);
+                    }
+                } else {
+                    throw new InvalidNumberOfPointsInLinearRingException(ring.getNumVertices());
+                }
+            }
+    }
+
+    public void checkNumVerticesOfLine(Line line) throws InvalidNumberOfPointsInLinearRingException {
+        if( line == null ) {
+            return;
+        }
+        if (line.getNumVertices() > 0 && line.getNumVertices() < 2) {
+            if (this.fixLinearRings()) {
+                Point p = line.getVertex(line.getNumVertices() - 1);
+                while (line.getNumVertices() < 2) {
+                    p = (Point) p.cloneGeometry();
+                    line.addVertex(p);
+                }
+            } else {
+                throw new InvalidNumberOfPointsInLineStringException(line.getNumVertices());
+            }
+        }
+    }
+
+    public boolean fixLinearRings() {
+        return params.getFixLinearRings();
+    }
+
+    /**
+     * @param p
+     * @param bb
+     */
+    protected void fillXY(Point p, BigByteBuffer2 bb) {
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        double x = bb.getDouble();
+        double y = bb.getDouble();
+        p.setX(x);
+        p.setY(y);
+    }
+
+    protected void fillM(Geometry geometry, BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+        double[] boxM = new double[2];
+        boxM[0] = bb.getDouble();
+        boxM[1] = bb.getDouble();
+        if (geometry instanceof MultiPrimitive) {
+            for (int primitivesNumber = 0; primitivesNumber < ((MultiPrimitive) geometry).getPrimitivesNumber(); primitivesNumber++) {
+                Primitive primitive = ((MultiPrimitive) geometry).getPrimitiveAt(primitivesNumber);
+                if (primitive instanceof Point) {
+                    Point point = (Point) primitive;
+                    point.setCoordinateAt(point.getDimension()-1, bb.getDouble());
+                }
+                if (primitive instanceof Line) {
+                    Line line = (Line) primitive;
+                    for (int i = 0; i < line.getNumVertices(); i++) {
+                        line.setCoordinateAt(i, line.getDimension()-1, bb.getDouble());
+                    }
+                }
+                if (primitive instanceof Polygon) {
+                    Polygon polygon = (Polygon) primitive;
+                    for (int i = 0; i < polygon.getNumVertices(); i++) {
+                        polygon.setCoordinateAt(i, polygon.getDimension()-1, bb.getDouble());
+                    }
+                    int rings = polygon.getNumInteriorRings();
+                    for (int i = 0; i < rings; i++) {
+                        Ring ring = polygon.getInteriorRing(i);
+                        for (int j = 0; j < ring.getNumVertices(); j++) {
+                            ring.setCoordinateAt(j, ring.getDimension()-1, bb.getDouble());
+                        }
+                    }
+                }
+            }
+        } else if (geometry instanceof Line) {
+            Line line = (Line) geometry;
+            for (int i = 0; i < line.getNumVertices(); i++) {
+                line.setCoordinateAt(i, line.getDimension()-1, bb.getDouble());
+            }
+        } else if (geometry instanceof Polygon) {
+            Polygon polygon = (Polygon) geometry;
+            for (int i = 0; i < polygon.getNumVertices(); i++) {
+                polygon.setCoordinateAt(i, polygon.getDimension()-1, bb.getDouble());
+            }
+            int rings = polygon.getNumInteriorRings();
+            for (int i = 0; i < rings; i++) {
+                Ring ring = polygon.getInteriorRing(i);
+                for (int j = 0; j < ring.getNumVertices(); j++) {
+                    ring.setCoordinateAt(j, ring.getDimension()-1, bb.getDouble());
+                }
+            }
+        }
+    }
+
+    protected void fillZ(Geometry geometry, BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+        double[] boxM = new double[2];
+        boxM[0] = bb.getDouble();
+        boxM[1] = bb.getDouble();
+        if (geometry instanceof MultiPrimitive) {
+            for (int primitivesNumber = 0; primitivesNumber < ((MultiPrimitive) geometry).getPrimitivesNumber(); primitivesNumber++) {
+                Primitive primitive = ((MultiPrimitive) geometry).getPrimitiveAt(primitivesNumber);
+                if (primitive instanceof Point) {
+                    Point point = (Point) primitive;
+                    point.setCoordinateAt(Geometry.DIMENSIONS.Z, bb.getDouble());
+                }
+                if (primitive instanceof Line) {
+                    Line line = (Line) primitive;
+                    for (int i = 0; i < line.getNumVertices(); i++) {
+                        line.setCoordinateAt(i, Geometry.DIMENSIONS.Z, bb.getDouble());
+                    }
+                }
+                if (primitive instanceof Polygon) {
+                    Polygon polygon = (Polygon) primitive;
+                    for (int i = 0; i < polygon.getNumVertices(); i++) {
+                        polygon.setCoordinateAt(i, Geometry.DIMENSIONS.Z, bb.getDouble());
+                    }
+                    int rings = polygon.getNumInteriorRings();
+                    for (int i = 0; i < rings; i++) {
+                        Ring ring = polygon.getInteriorRing(i);
+                        for (int j = 0; j < ring.getNumVertices(); j++) {
+                            ring.setCoordinateAt(j, Geometry.DIMENSIONS.Z, bb.getDouble());
+                        }
+                    }
+                }
+            }
+        } else if (geometry instanceof Line) {
+            Line line = (Line) geometry;
+            for (int i = 0; i < line.getNumVertices(); i++) {
+                line.setCoordinateAt(i, Geometry.DIMENSIONS.Z, bb.getDouble());
+            }
+        } else if (geometry instanceof Polygon) {
+            Polygon polygon = (Polygon) geometry;
+            for (int i = 0; i < polygon.getNumVertices(); i++) {
+                polygon.setCoordinateAt(i, Geometry.DIMENSIONS.Z, bb.getDouble());
+            }
+            int rings = polygon.getNumInteriorRings();
+            for (int i = 0; i < rings; i++) {
+                Ring ring = polygon.getInteriorRing(i);
+                for (int j = 0; j < ring.getNumVertices(); j++) {
+                    ring.setCoordinateAt(j, Geometry.DIMENSIONS.Z, bb.getDouble());
+                }
+            }
+        }
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/SHPPointWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPPointWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPPointWriter.java	(revision 46118)
@@ -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.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ */
+public class SHPPointWriter implements SHPShapeWriter {
+    private static final Logger logger = LoggerFactory.getLogger(SHPPointWriter.class);
+    private int m_type;
+    private Point point;
+
+    /**
+     * Crea un nuevo SHPPoint.
+     *
+     * @param type DOCUMENT ME!
+     *
+     * @throws ShapefileException DOCUMENT ME!
+     */
+    public SHPPointWriter(int type)  {
+        m_type = type;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+     */
+    public int getShapeType() {
+        return m_type;
+    }
+
+    /**
+     * @Deprecated Use SHPReader
+     */
+    @Deprecated
+    public Geometry read(MappedByteBuffer buffer, int type) {
+        return null;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+     */
+    public void write(ByteBuffer buffer) {
+        buffer.putDouble(point.getX());
+        buffer.putDouble(point.getY());
+        double z;
+        double m;
+
+        if(m_type == SHP.POINT3D) { //Only POINT3D has Z
+            z = point.getCoordinateAt(Geometry.DIMENSIONS.Z);
+            if (Double.isNaN(z)) { // nan means not defined
+                buffer.putDouble(0.0);
+            } else {
+                buffer.putDouble(z);
+            }
+        }
+
+        if ((m_type == SHP.POINT3D) || (m_type == SHP.POINTM)){ //Both, POINT3D and POINTM, has M
+            m = point.getCoordinateAt(point.getDimension()-1);
+            if (Double.isNaN(m)) { // nan means not defined
+                buffer.putDouble(0.0);
+            } else {
+                buffer.putDouble(m);
+            }
+        }
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+     */
+    public int getLength() {
+        switch (m_type) {
+        case SHP.POINT2D:
+            return 20;
+        case SHP.POINTM:
+            return 28;
+        case SHP.POINT3D:
+            return 36;
+        default:
+            //Nunca deber�a pasar por aqu�
+            return 20;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPShapeWriter#initialize(org.gvsig.fmap.geom.Geometry)
+     */
+    public void initialize(Geometry geometry) {
+        point = (Point)geometry;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPPolygon2DMWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPPolygon2DMWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPPolygon2DMWriter.java	(revision 46118)
@@ -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.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiPolygon;
+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.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Primitive;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.fmap.geom.primitive.Surface;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ *
+ *
+ */
+public class SHPPolygon2DMWriter implements SHPShapeWriter {
+    private Geometry geometry;
+    private int m_type;
+    private int[] parts;
+    private Point[] points;
+
+    private static final Logger logger = LoggerFactory.getLogger(SHPPolygon2DMWriter.class);
+
+	/**
+	 * Crea un nuevo SHPPolygon.
+	 */
+	public SHPPolygon2DMWriter() {
+		m_type = SHP.POLYGONM;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public synchronized void write(ByteBuffer buffer) throws WriteException {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+
+
+        try {
+            initialize(geometry);
+        } catch (BaseException e) {
+            throw new WriteException("SHPPolygon2DWriter", e);
+        }
+
+        double Mmin=Double.POSITIVE_INFINITY;
+        double Mmax=Double.NEGATIVE_INFINITY;
+		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++) {
+            Point point = points[t];
+            buffer.putDouble(point.getX());
+            buffer.putDouble(point.getY());
+            double m = point.getCoordinateAt(point.getDimension()-1);
+            if(m<Mmin){
+                Mmin = m;
+            }
+            if(m>Mmax){
+                Mmax = m;
+            }
+        }
+        buffer.putDouble(Mmin);
+        buffer.putDouble(Mmax);
+        for (int t = 0; t < npoints; t++) {
+            Point point = points[t];
+            buffer.putDouble(point.getCoordinateAt(point.getDimension()-1));
+        }
+	}
+
+	   /**
+     * @throws GeometryException
+	 * @throws GeometryOperationException
+	 * @throws GeometryOperationNotSupportedException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+
+        geometry = g;
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        if(geometry instanceof Polygon){
+            Polygon polygon = (Polygon)geometry;
+            polygon.ensureOrientation(false);
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < polygon.getNumVertices(); i++) {
+                arrayPoints.add(polygon.getVertex(i));
+            }
+            if(polygon.getNumInteriorRings()!=0){
+                index += polygon.getNumVertices();
+                arrayParts.add(index);
+            }
+            for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                Ring ring = polygon.getInteriorRing(r);
+                ring.ensureOrientation(true);
+                for (int i = 0; i < ring.getNumVertices(); i++) {
+                    arrayPoints.add(ring.getVertex(i));
+                }
+                if(r<polygon.getNumInteriorRings()-1){
+                    index += ring.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        } else {
+
+            MultiPolygon multiPolygon = null;
+            if (geometry instanceof MultiPolygon) {
+                multiPolygon = (MultiPolygon) geometry;
+            } else if (geometry instanceof MultiSurface) {
+                multiPolygon = geomManager.createMultiPolygon(Geometry.SUBTYPES.GEOM2DM);
+                MultiSurface multiSurface = (MultiSurface) geometry;
+                for (int i = 0; i < multiSurface.getPrimitivesNumber(); i++) {
+                    Surface surface = (Surface) multiSurface.getPrimitiveAt(i);
+                    if (surface instanceof Polygon) {
+                        Polygon polygon = (Polygon)surface;
+                        polygon.ensureOrientation(false);
+                        multiPolygon.addPrimitive(surface);
+                    } else {
+                        MultiPolygon polygons = surface.toPolygons();
+                        for (int j = 0; j < polygons.getPrimitivesNumber(); j++) {
+                            Primitive polygon = polygons.getPrimitiveAt(j);
+                            polygon.ensureOrientation(false);
+                            multiPolygon.addPrimitive(polygon);
+                        }
+                    }
+                }
+            } else {
+                multiPolygon = geometry.toPolygons();
+            }
+
+            arrayParts.add(0);
+            int index = 0;
+            for (int i = 0; i < multiPolygon.getPrimitivesNumber(); i++) {
+                Polygon polygon = (Polygon) multiPolygon.getPrimitiveAt(i);
+
+                polygon.ensureOrientation(false);
+                for (int j = 0; j < polygon.getNumVertices(); j++) {
+                    arrayPoints.add(polygon.getVertex(j));
+                }
+                if(polygon.getNumInteriorRings()!=0 || i<multiPolygon.getPrimitivesNumber()-1){
+                    index += polygon.getNumVertices();
+                    arrayParts.add(index);
+                }
+                for (int r=0; r<polygon.getNumInteriorRings(); r++){
+                    Ring ring = polygon.getInteriorRing(r);
+                    ring.ensureOrientation(true);
+                    for (int j = 0; j < ring.getNumVertices(); j++) {
+                        arrayPoints.add(ring.getVertex(j));
+                    }
+                    if((i<multiPolygon.getPrimitivesNumber()-1) || (r<polygon.getNumInteriorRings()-1)){
+                        index += ring.getNumVertices();
+                        arrayParts.add(index);
+                    }
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public synchronized int getLength() {
+        int numlines;
+        int numpoints;
+        int length;
+
+        numlines = parts.length;
+        numpoints = points.length;
+        // 44 = Shape Type + Box + NumParts + NumPoints
+        // (4 * numlines) = Parts
+        // (numpoints * 16) = Points
+        // 16 = MMin + MMax
+        // (numpoints * 8) = Marray
+        length = 44 + (4 * numlines) + (numpoints * 16) + 16 + (numpoints * 8);
+
+        return length;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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/SHPReader2D.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPReader2D.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPReader2D.java	(revision 46118)
@@ -0,0 +1,224 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ByteOrder;
+import org.gvsig.fmap.dal.store.shp.SHPStoreParameters;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class SHPReader2D extends AbstractSHPReader {
+
+    /**
+     *
+     */
+    public SHPReader2D(SHPStoreParameters params) {
+        super(params);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoint(BigByteBuffer2 bb) throws CreateGeometryException{
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        double x = bb.getDouble();
+        double y = bb.getDouble();
+        Point p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D);
+        p.setX(x);
+        p.setY(y);
+        return p;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLyline(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLyline(BigByteBuffer2 bb) throws CreateGeometryException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        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];
+
+        MultiLine multiLine = null;
+        Line line = null;
+        if (numParts > 1) {
+            multiLine = (MultiLine) gManager.create(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2D);
+        }
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        j = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = (Point) readPoint(bb);
+
+            if (i == tempParts[j]) {
+                if(multiLine!=null && line != null){
+                    multiLine.addCurve(line);
+                }
+                line = (Line) gManager.create(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2D);
+                if (j < (numParts - 1)) {
+                    j++;
+                }
+            }
+            line.addVertex(p);
+        }
+        checkNumVerticesOfLine(line);
+
+        if (multiLine != null) {
+            multiLine.addCurve(line);
+            return multiLine;
+        } else {
+            return line;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLygon(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLygon(BigByteBuffer2 bb) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+
+        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();
+        }
+
+        MultiPolygon multipolygon = null;
+        Polygon polygon = null;
+        Ring ring = null;
+
+        int pointsCounter = 0;
+        for(int part=0; part<numParts; part++){
+            ring = (Ring) gManager.create(Geometry.TYPES.RING, Geometry.SUBTYPES.GEOM2D);
+            int lastPoint = numPoints;
+            if(part<numParts-1){
+                lastPoint = tempParts[part+1];
+            }
+            while(pointsCounter<lastPoint){
+                p = (Point) readPoint(bb);
+                ring.addVertex(p);
+                pointsCounter++;
+            }
+            ring.closePrimitive();
+            checkNumVerticesOfRing(ring);
+            if (ring.isCCW() && polygon!=null) {
+                // Los anillos interiores deben ser CCW pero si encontramos un
+                // anillo interior que no est� envuelto en un pol�gono
+                // consideramos que es un pol�gono en s� y nos aseguramos de
+                // darle la vuelta (en el else)
+                //FIXME: Comprobar que este es el comportamiento deseado
+                polygon.addInteriorRing(ring);
+            } else {
+                if(polygon!=null){
+                    if(multipolygon==null){
+                        multipolygon = (MultiPolygon) gManager.create(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2D);
+                    }
+                    multipolygon.addPrimitive(polygon);
+                }
+                polygon = (Polygon) gManager.create(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2D);
+                polygon.ensureCapacity(ring.getNumVertices());
+                if(ring.isCCW()){
+                    //To ensure CW orientation for polygons
+                    for (int v = ring.getNumVertices()-1; v >=0; v--) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                } else {
+                    for (int v = 0; v < ring.getNumVertices(); v++) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                }
+            }
+        }
+
+        if (multipolygon != null) {
+            multipolygon.addPrimitive(polygon);
+            return multipolygon;
+        } else {
+            return polygon;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readMultiPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readMultiPoint(BigByteBuffer2 bb) throws CreateGeometryException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        int numPoints;
+        bb.position(bb.position() + 32);
+        numPoints = bb.getInt();
+
+        MultiPoint multipoint = gManager.createMultiPoint(Geometry.SUBTYPES.GEOM2D);
+
+        for (int i = 0; i < numPoints; i++) {
+            multipoint.addPoint((Point)readPoint(bb));
+        }
+        return multipoint;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.store.shp.utils;
+
+import java.io.IOException;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.tools.exception.BaseException;
+
+public class SHPFileWrite {
+
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(SHPFileWrite.class);
+    private SHPShapeWriter 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;
+    }
+
+    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];
+            try {
+                m_shape.initialize(fgeometry);
+            } catch (BaseException e) {
+                throw new WriteException("SHPFileWrite write headers", e);
+            }
+            int size = m_shape.getLength() + 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.
+        ((Buffer)m_bb).position(0);
+        ((Buffer)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 = ((Buffer)m_bb).position();
+        try {
+            m_shape.initialize(g);
+        } catch (BaseException e) {
+            throw new WriteException("SHPFileWrite write geometry", e);
+        }
+        int length = m_shape.getLength();
+
+        // 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);
+
+        m_pos = ((Buffer)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.LINE:
+            case Geometry.TYPES.MULTICURVE:
+            case Geometry.TYPES.MULTILINE:
+            case Geometry.TYPES.ARC:
+            case Geometry.TYPES.SPLINE:
+            case Geometry.TYPES.CIRCUMFERENCE:
+            case Geometry.TYPES.PERIELLIPSE:
+                return SHP.POLYLINE3D;
+
+            case Geometry.TYPES.SURFACE:
+            case Geometry.TYPES.POLYGON:
+            case Geometry.TYPES.MULTISURFACE:
+            case Geometry.TYPES.MULTIPOLYGON:
+            case Geometry.TYPES.CIRCLE:
+            case Geometry.TYPES.ELLIPSE:
+            case Geometry.TYPES.ELLIPTICARC:
+            case Geometry.TYPES.FILLEDSPLINE:
+                return SHP.POLYGON3D;
+
+            case Geometry.TYPES.MULTIPOINT:
+                return SHP.MULTIPOINT3D; //TODO falta aclarar cosas aqu�.
+            }
+
+        } else if ( geometrySubType == Geometry.SUBTYPES.GEOM2DM  ) {
+            switch (geometryType) {
+            case Geometry.TYPES.NULL:
+                return SHP.NULL;
+
+            case Geometry.TYPES.POINT:
+                return SHP.POINTM;
+
+            case Geometry.TYPES.CURVE:
+            case Geometry.TYPES.LINE:
+            case Geometry.TYPES.MULTICURVE:
+            case Geometry.TYPES.MULTILINE:
+            case Geometry.TYPES.ARC:
+            case Geometry.TYPES.SPLINE:
+            case Geometry.TYPES.CIRCUMFERENCE:
+            case Geometry.TYPES.PERIELLIPSE:
+                return SHP.POLYLINEM;
+
+            case Geometry.TYPES.SURFACE:
+            case Geometry.TYPES.POLYGON:
+            case Geometry.TYPES.MULTISURFACE:
+            case Geometry.TYPES.MULTIPOLYGON:
+            case Geometry.TYPES.CIRCLE:
+            case Geometry.TYPES.ELLIPSE:
+            case Geometry.TYPES.ELLIPTICARC:
+            case Geometry.TYPES.FILLEDSPLINE:
+                return SHP.POLYGONM;
+
+            case Geometry.TYPES.MULTIPOINT:
+                return SHP.MULTIPOINTM; //TODO falta aclarar cosas aqu�.
+            }
+
+        } else {
+            switch (geometryType) {
+            case Geometry.TYPES.POINT:
+                return SHP.POINT2D;
+
+            case Geometry.TYPES.CURVE:
+            case Geometry.TYPES.LINE:
+            case Geometry.TYPES.MULTICURVE:
+            case Geometry.TYPES.MULTILINE:
+            case Geometry.TYPES.ARC:
+            case Geometry.TYPES.SPLINE:
+            case Geometry.TYPES.CIRCUMFERENCE:
+            case Geometry.TYPES.PERIELLIPSE:
+                return SHP.POLYLINE2D;
+
+            case Geometry.TYPES.SURFACE:
+            case Geometry.TYPES.POLYGON:
+            case Geometry.TYPES.MULTISURFACE:
+            case Geometry.TYPES.MULTIPOLYGON:
+            case Geometry.TYPES.CIRCLE:
+            case Geometry.TYPES.ELLIPSE:
+            case Geometry.TYPES.ELLIPTICARC:
+            case Geometry.TYPES.FILLEDSPLINE:
+                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.344/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.344/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/SHPShapeWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPShapeWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPShapeWriter.java	(revision 46118)
@@ -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.store.shp.utils;
+
+import java.nio.ByteBuffer;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+
+/**
+ * Interfaz para escribir todos los tipos de formato shape.
+ *
+ * @author fdiaz
+ */
+public interface SHPShapeWriter {
+	/**
+	 * Devuelve el tipo de shape de que se trata.
+	 *
+	 * @return Tipo de shape.
+	 */
+	public int getShapeType();
+
+	/**
+	 * Escribe en el buffer la geometr�a que se pasa como par�metro.
+	 *
+	 * @param buffer Buffer donde escribir.
+	 * @throws WriteException
+	 */
+	public void write(ByteBuffer buffer) throws WriteException;
+
+	/**
+	 * Devuelve el tama�o de la geometr�a.
+	 *
+	 * @param geometry Geometr�a a medir.
+	 *
+	 * @return Tama�o de la geometr�a.
+	 */
+	public int getLength();
+
+    /**
+     * Inicializa el writer con la geometr�a.
+     *
+     * @param geometry la Geometr�a.
+     * @throws GeometryException
+     * @throws GeometryOperationException
+     * @throws GeometryOperationNotSupportedException
+     *
+     */
+	public void initialize(Geometry geometry) throws GeometryException, GeometryOperationNotSupportedException, GeometryOperationException;
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPMultiPointWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPMultiPointWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPMultiPointWriter.java	(revision 46118)
@@ -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.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.aggregate.MultiPoint;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+
+/**
+ * Elemento shape de tipo multipunto.
+ *
+ */
+public class SHPMultiPointWriter implements SHPShapeWriter {
+	private static final Logger logger = LoggerFactory.getLogger(SHPMultiPointWriter.class);
+	private int m_type;
+	private MultiPoint multipoint;
+	private int numpoints;
+
+	/**
+	 * Crea un nuevo SHPMultiPoint.
+	 *
+	 * @param type Tipo de multipunto.
+	 *
+	 * @throws ShapefileException
+	 */
+	public SHPMultiPointWriter(int type) {
+		m_type = type;
+	}
+
+	/**
+	 * Devuelve el tipo de multipoint en concreto.
+	 *
+	 * @return Tipo de multipoint.
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @Deprecated Use SHPReader
+	 */
+	@Deprecated
+	public Geometry read(MappedByteBuffer buffer, int type) {
+		return null;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer) {
+        Envelope env = multipoint.getEnvelope();
+
+        buffer.putDouble(env.getMinimum(0));
+        buffer.putDouble(env.getMinimum(1));
+        buffer.putDouble(env.getMaximum(0));
+        buffer.putDouble(env.getMaximum(1));
+
+        buffer.putInt(numpoints);
+
+        for (int i = 0; i < numpoints; i++) {
+            Point point = (Point) multipoint.getPrimitiveAt(i);
+            buffer.putDouble(point.getX());
+            buffer.putDouble(point.getY());
+        }
+
+        if (m_type == SHP.MULTIPOINT3D) {
+            putExtraCoordinateValuesInBuffer(buffer, Geometry.DIMENSIONS.Z);
+            putExtraCoordinateValuesInBuffer(buffer, multipoint.getDimension()-1);
+        }
+
+        if (m_type == SHP.MULTIPOINTM) {
+            putExtraCoordinateValuesInBuffer(buffer, multipoint.getDimension()-1);
+        }
+	}
+
+    /**
+     * @param buffer
+     * @param coordinate
+     */
+    private void putExtraCoordinateValuesInBuffer(ByteBuffer buffer, int coordinate) {
+        double min = Double.POSITIVE_INFINITY;
+        double max = Double.NEGATIVE_INFINITY;
+        List<Double> values = new ArrayList<Double>();
+        for (int i = 0; i < numpoints; i++) {
+            Point point = (Point) multipoint.getPrimitiveAt(i);
+            double value = point.getCoordinateAt(coordinate);
+            if (value < min) {
+                min = value;
+            }
+            if (value > max) {
+                max = value;
+            }
+            values.add(value);
+        }
+        buffer.putDouble(min);
+        buffer.putDouble(max);
+        for (Iterator iterator = values.iterator(); iterator.hasNext();) {
+            Double value = (Double) iterator.next();
+            buffer.putDouble(value);
+        }
+    }
+
+    /**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(com.iver.cit.gvsig.core.BasicShape.FGeometry)
+	 */
+	public int getLength() {
+		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
+		    // add the additional MMin, MMax for 16, then 8 per measure
+			length = (numpoints * 16) + 40 + 16 + (8 * numpoints) + 16 + (8 * numpoints);
+		} else {
+			throw new IllegalStateException("Expected ShapeType of Multipoint, got " +
+				m_type);
+		}
+
+		return length;
+	}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPShapeWriter#initialize(org.gvsig.fmap.geom.Geometry)
+     */
+    public void initialize(Geometry geometry) throws GeometryException {
+        multipoint = (MultiPoint) geometry;
+        numpoints = multipoint.getPrimitivesNumber();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,622 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.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.primitive.PointGeometryType;
+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.exception.BaseException;
+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 SHPReader reader;
+
+    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();
+
+        switch (subType) {
+        case SUBTYPES.GEOM2D:
+            reader = new SHPReader2D(this.params);
+            break;
+        case SUBTYPES.GEOM2DM:
+            reader = new SHPReader2DM(this.params);
+            break;
+        case SUBTYPES.GEOM3DM:
+            reader = new SHPReader3DM(this.params);
+            break;
+
+        default:
+            break;
+        }
+
+
+        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):
+        case (SHP.POINTM):
+            auxType = Geometry.TYPES.POINT;
+
+            break;
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYLINEM):
+            auxType = Geometry.TYPES.MULTILINE;
+
+            break;
+
+        case (SHP.POLYGON2D):
+        case (SHP.POLYGON3D):
+        case (SHP.POLYGONM):
+            auxType = Geometry.TYPES.MULTIPOLYGON;
+
+            break;
+        case (SHP.MULTIPOINT2D):
+        case (SHP.MULTIPOINT3D):
+        case (SHP.MULTIPOINTM):
+            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.GEOM3DM;
+        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( ! this.params.getAllowInconsistenciesInGeometryType() ) {
+                throw new InconsistenciesInGeometryTypeException(shapeType);
+            }
+        }
+
+        // retrieve that shape.
+        switch (type) {
+        case (SHP.POINT2D):
+        case (SHP.POINT3D):
+        case (SHP.POINTM):
+            return reader.readPoint(bb);
+
+        case (SHP.POLYLINE2D):
+        case (SHP.POLYLINE3D):
+        case (SHP.POLYLINEM):
+            return reader.readPoLyline(bb);
+
+        case (SHP.POLYGON2D):
+        case (SHP.POLYGON3D):
+        case (SHP.POLYGONM):
+            try {
+                return reader.readPoLygon(bb);
+            } catch (BaseException e) {
+                throw new CreateGeometryException(Geometry.TYPES.POLYGON, getGeometrySubType(), e);
+            }
+
+        case (SHP.MULTIPOINT2D):
+        case (SHP.MULTIPOINTM):
+
+        case (SHP.MULTIPOINT3D):
+            return reader.readMultiPoint(bb);
+        }
+        return null;
+    }
+    
+    private class InconsistenciesInGeometryTypeException extends ReadException {
+
+        private final static String MESSAGE_FORMAT = "The geometry type  (%(geomTypeOfHeader)) of the shape file (%(fname)) does not match the type of the current geometry (%(geomTypeOfGeometry)).\nCheck 'Allow inconsistencies in geometry type' in the shape's properties of the add layer dialog to ignore it.";
+        private final static String MESSAGE_KEY = "_InconsistenciesInGeometryTypeException";
+        private static final long serialVersionUID = 8991813814092628916L;
+
+        public InconsistenciesInGeometryTypeException(int geomTypeOfGeometry) {
+            super(MESSAGE_FORMAT, null, MESSAGE_KEY, serialVersionUID);
+            setValue("geomTypeOfHeader", SHP.getTypeName(type));
+            setValue("geomTypeOfGeometry", SHP.getTypeName(geomTypeOfGeometry));
+            setValue("fname", params.getSHPFile().getName());
+            
+        }
+    }
+
+    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.POLYLINEM):
+        case (SHP.POLYGON2D):
+        case (SHP.POLYGONM):
+        case (SHP.MULTIPOINT2D):
+        case (SHP.MULTIPOINTM):
+        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.344/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.344/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/SHPReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPReader.java	(revision 46118)
@@ -0,0 +1,47 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface SHPReader {
+
+    public Geometry readPoint(BigByteBuffer2 bb) throws CreateGeometryException;
+
+    public Geometry readPoLyline(BigByteBuffer2 bb) throws CreateGeometryException, ReadException;
+
+    public Geometry readPoLygon(BigByteBuffer2 bb) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException, ReadException;
+
+    public Geometry readMultiPoint(BigByteBuffer2 bb) throws CreateGeometryException, ReadException;
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPMultiLine2DMWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine2DMWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPMultiLine2DMWriter.java	(revision 46118)
@@ -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.fmap.dal.store.shp.utils;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+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.aggregate.MultiCurve;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+import org.gvsig.fmap.geom.primitive.Curve;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+
+
+/**
+ *
+ * @author fdiaz
+ */
+public class SHPMultiLine2DMWriter implements SHPShapeWriter {
+    private Geometry geometry;
+	private int m_type;
+	private int[] parts;
+	private Point[] points;
+
+	private static final Logger logger = LoggerFactory.getLogger(SHPMultiLine2DMWriter.class);
+
+	/**
+	 * Crea un nuevo SHPMultiLine.
+	 */
+	public SHPMultiLine2DMWriter() {
+		m_type = SHP.POLYLINEM;
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getShapeType()
+	 */
+	public int getShapeType() {
+		return m_type;
+	}
+
+	/**
+	 * @throws WriteException
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#write(ByteBuffer, IGeometry)
+	 */
+	public void write(ByteBuffer buffer) throws WriteException {
+		Envelope env = geometry.getEnvelope();
+
+		buffer.putDouble(env.getMinimum(0));
+		buffer.putDouble(env.getMinimum(1));
+		buffer.putDouble(env.getMaximum(0));
+		buffer.putDouble(env.getMaximum(1));
+
+		try {
+            initialize(geometry);
+        } catch (GeometryException e) {
+            throw new WriteException("SHPMultiLine2DM write", e);
+        }
+
+		double Mmin=Double.POSITIVE_INFINITY;
+        double Mmax=Double.NEGATIVE_INFINITY;
+		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++) {
+			Point point = points[t];
+            buffer.putDouble(point.getX());
+			buffer.putDouble(point.getY());
+			double m = point.getCoordinateAt(point.getDimension()-1);
+			if(m<Mmin){
+			    Mmin = m;
+			}
+            if(m>Mmax){
+                Mmax = m;
+            }
+		}
+		buffer.putDouble(Mmin);
+		buffer.putDouble(Mmax);
+		for (int t = 0; t < npoints; t++) {
+		    Point point = points[t];
+            buffer.putDouble(points[t].getCoordinateAt(point.getDimension()-1));
+		}
+	}
+
+	/**
+	 * @throws GeometryException
+     *
+     */
+    public void initialize(Geometry g) throws GeometryException {
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        geometry = g;
+        ArrayList<Point> arrayPoints = new ArrayList<Point>();
+        ArrayList<Integer> arrayParts = new ArrayList<Integer>();
+
+        if(geometry instanceof Line){
+            Line line = (Line)geometry;
+            arrayParts.add(0);
+            for (int i = 0; i < line.getNumVertices(); i++) {
+                arrayPoints.add(line.getVertex(i));
+            }
+        } else {
+
+            MultiLine multiLine = null;
+            if (g instanceof MultiLine) {
+                multiLine = (MultiLine) geometry;
+            } else if (g instanceof MultiCurve) {
+                multiLine = geomManager.createMultiLine(Geometry.SUBTYPES.GEOM2DM);
+                MultiCurve multiCurve = (MultiCurve) g;
+                for (int i = 0; i < multiCurve.getPrimitivesNumber(); i++) {
+                    Curve curve = (Curve) multiCurve.getPrimitiveAt(i);
+                    if (curve instanceof Line) {
+                        multiLine.addPrimitive(curve);
+                    } else {
+                        MultiLine lines = curve.toLines();
+                        for (int j = 0; j < lines.getPrimitivesNumber(); j++) {
+                            multiLine.addPrimitive(lines.getPrimitiveAt(j));
+                        }
+                    }
+                }
+            } else {
+                multiLine = g.toLines();
+            }
+
+            int index = 0;
+            arrayParts.add(index);
+            for (int i = 0; i < multiLine.getPrimitivesNumber(); i++) {
+                Line line = (Line) multiLine.getPrimitiveAt(i);
+                for (int j = 0; j < line.getNumVertices(); j++) {
+                    arrayPoints.add(line.getVertex(j));
+                }
+                if (i < multiLine.getPrimitivesNumber() - 1) {
+                    index += line.getNumVertices();
+                    arrayParts.add(index);
+                }
+            }
+        }
+        points = arrayPoints.toArray(new Point[0]);
+        parts = new int[arrayParts.size()];
+        for (int i = 0; i < parts.length; i++) {
+            parts[i] = arrayParts.get(i);
+        }
+    }
+
+    /**
+	 * @see com.iver.cit.gvsig.fmap.shp.SHPShape#getLength(int)
+	 */
+	public int getLength() {
+		int numlines;
+		int numpoints;
+		int length;
+
+		numlines = parts.length;
+		numpoints = points.length;
+		// 44 = Shape Type + Box + NumParts + NumPoints
+		// (4 * numlines) = Parts
+		// (numpoints * 16) = Points
+		// 16 = MMin + MMax
+		// (numpoints * 8) = Marray
+        length = 44 + (4 * numlines) + (numpoints * 16) + 16 + (numpoints * 8);
+
+		return length;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/SHPReader2DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPReader2DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPReader2DM.java	(revision 46118)
@@ -0,0 +1,240 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ByteOrder;
+
+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.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class SHPReader2DM extends AbstractSHPReader {
+
+    /**
+     *
+     */
+    public SHPReader2DM(SHPStoreParameters params) {
+        super(params);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoint(BigByteBuffer2 bb) throws CreateGeometryException {
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        // bytes 13 to 20 are the X coordinate
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        double x = bb.getDouble();
+        double y = bb.getDouble();
+        double m = bb.getDouble();
+        Point p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM);
+        p.setX(x);
+        p.setY(y);
+        p.setCoordinateAt(p.getDimension()-1, m);
+        return p;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLyline(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLyline(BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        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];
+
+        MultiLine multiLine = null;
+        Line line = null;
+        if (numParts > 1) {
+            multiLine = (MultiLine) gManager.create(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2DM);
+        }
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        j = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM);
+            fillXY(p, bb);
+
+            if (i == tempParts[j]) {
+                if(multiLine!=null && line != null){
+                    multiLine.addCurve(line);
+                }
+                line = (Line) gManager.create(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2DM);
+                if (j < (numParts - 1)) {
+                    j++;
+                }
+            }
+            line.addVertex(p);
+        }
+        checkNumVerticesOfLine(line);
+
+        if (multiLine != null) {
+            multiLine.addCurve(line);
+            fillM(multiLine, bb);
+            return multiLine;
+        } else {
+            fillM(line, bb);
+            return line;
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLygon(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLygon(BigByteBuffer2 bb) throws CreateGeometryException, ReadException, GeometryOperationNotSupportedException, GeometryOperationException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+
+        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();
+        }
+
+        MultiPolygon multipolygon = null;
+        Polygon polygon = null;
+        Ring ring = null;
+
+        int pointsCounter = 0;
+        for(int part=0; part<numParts; part++){
+            ring = (Ring) gManager.create(Geometry.TYPES.RING, Geometry.SUBTYPES.GEOM2DM);
+            int lastPoint = numPoints;
+            if(part<numParts-1){
+                lastPoint = tempParts[part+1];
+            }
+            while(pointsCounter<lastPoint){
+                p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM);
+                fillXY(p, bb);
+                ring.addVertex(p);
+                pointsCounter++;
+            }
+            ring.closePrimitive();
+            checkNumVerticesOfRing(ring);
+            if (ring.isCCW() && polygon!=null) {
+                // Los anillos interiores deben ser CCW pero si encontramos un
+                // anillo interior que no est� envuelto en un pol�gono
+                // consideramos que es un pol�gono en s� y nos aseguramos de
+                // darle la vuelta (en el else)
+                //FIXME: Comprobar que este es el comportamiento deseado
+                polygon.addInteriorRing(ring);
+            } else {
+                if(polygon!=null){
+                    if(multipolygon==null){
+                        multipolygon = (MultiPolygon) gManager.create(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2DM);
+                    }
+                    multipolygon.addPrimitive(polygon);
+                }
+                polygon = (Polygon) gManager.create(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2DM);
+                polygon.ensureCapacity(ring.getNumVertices());
+                if(ring.isCCW()){
+                    //To ensure CW orientation for polygons
+                    for (int v = ring.getNumVertices()-1; v >=0; v--) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                } else {
+                    for (int v = 0; v < ring.getNumVertices(); v++) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                }
+            }
+        }
+
+        if (multipolygon != null) {
+            multipolygon.addPrimitive(polygon);
+            fillM(multipolygon, bb);
+            return multipolygon;
+        } else {
+            fillM(polygon, bb);
+            return polygon;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readMultiPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readMultiPoint(BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        int numPoints;
+        bb.position(bb.position() + 32);
+        numPoints = bb.getInt();
+
+        MultiPoint multipoint = gManager.createMultiPoint(Geometry.SUBTYPES.GEOM2DM);
+
+        for (int i = 0; i < numPoints; i++) {
+            Point point = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM);
+            point.setX(bb.getDouble());
+            point.setY(bb.getDouble());
+            multipoint.addPoint(point);
+        }
+
+        fillM(multipoint, bb);
+        return multipoint;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/SHPReader3DM.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPReader3DM.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPReader3DM.java	(revision 46118)
@@ -0,0 +1,248 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ByteOrder;
+
+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.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.fmap.geom.primitive.Line;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.geom.primitive.Polygon;
+import org.gvsig.fmap.geom.primitive.Ring;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class SHPReader3DM extends AbstractSHPReader {
+
+    /**
+     *
+     */
+    public SHPReader3DM(SHPStoreParameters params) {
+        super(params);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Point readPoint(BigByteBuffer2 bb) throws CreateGeometryException {
+        // bytes 1 to 4 are the type and have already been read.
+        // bytes 4 to 12 are the X coordinate
+        // bytes 13 to 20 are the Y coordinate
+        // bytes 21 to 28 are the Z coordinate
+        // bytes 29 to 36 are the M coordinate
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+        bb.order(ByteOrder.LITTLE_ENDIAN);
+        double x = bb.getDouble();
+        double y = bb.getDouble();
+        double z = bb.getDouble();
+        double m = bb.getDouble();
+        Point p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM);
+        p.setX(x);
+        p.setY(y);
+        p.setCoordinateAt(Geometry.DIMENSIONS.Z, z);
+        p.setCoordinateAt(p.getDimension()-1, m);
+        return p;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLyline(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLyline(BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        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];
+
+        MultiLine multiLine = null;
+        Line line = null;
+        if (numParts > 1) {
+            multiLine = (MultiLine) gManager.create(Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM3DM);
+        }
+
+        for (i = 0; i < numParts; i++) {
+            tempParts[i] = bb.getInt();
+        }
+
+        j = 0;
+
+        for (i = 0; i < numPoints; i++) {
+            p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM);
+            fillXY(p, bb);
+
+            if (i == tempParts[j]) {
+                if(multiLine!=null && line != null){
+                    multiLine.addCurve(line);
+                }
+                line = (Line) gManager.create(Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM3DM);
+                if (j < (numParts - 1)) {
+                    j++;
+                }
+            }
+            line.addVertex(p);
+        }
+        checkNumVerticesOfLine(line);
+
+        if (multiLine != null) {
+            multiLine.addCurve(line);
+            fillZ(multiLine, bb);
+            fillM(multiLine, bb);
+            return multiLine;
+        } else {
+            fillZ(line, bb);
+            fillM(line, bb);
+            return line;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readPoLygon(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readPoLygon(BigByteBuffer2 bb) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException, ReadException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        Point p = null;
+        int numParts;
+        int numPoints;
+        int i;
+
+        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();
+        }
+
+        MultiPolygon multipolygon = null;
+        Polygon polygon = null;
+        Ring ring = null;
+
+        int pointsCounter = 0;
+        for(int part=0; part<numParts; part++){
+            ring = (Ring) gManager.create(Geometry.TYPES.RING, Geometry.SUBTYPES.GEOM3DM);
+            int lastPoint = numPoints;
+            if(part<numParts-1){
+                lastPoint = tempParts[part+1];
+            }
+            while(pointsCounter<lastPoint){
+                p = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM);
+                fillXY(p, bb);
+                ring.addVertex(p);
+                pointsCounter++;
+            }
+            ring.closePrimitive();
+            checkNumVerticesOfRing(ring);
+            if (ring.isCCW() && polygon!=null) {
+                // Los anillos interiores deben ser CCW pero si encontramos un
+                // anillo interior que no est� envuelto en un pol�gono
+                // consideramos que es un pol�gono en s� y nos aseguramos de
+                // darle la vuelta (en el else)
+                //FIXME: Comprobar que este es el comportamiento deseado
+                polygon.addInteriorRing(ring);
+            } else {
+                if(polygon!=null){
+                    if(multipolygon==null){
+                        multipolygon = (MultiPolygon) gManager.create(Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM3DM);
+                    }
+                    multipolygon.addPrimitive(polygon);
+                }
+                polygon = (Polygon) gManager.create(Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM3DM);
+                polygon.ensureCapacity(ring.getNumVertices());
+                if(ring.isCCW()){
+                    //To ensure CW orientation for polygons
+                    for (int v = ring.getNumVertices()-1; v >=0; v--) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                } else {
+                    for (int v = 0; v < ring.getNumVertices(); v++) {
+                        polygon.addVertex(ring.getVertex(v));
+                    }
+                }
+            }
+        }
+
+        if (multipolygon != null) {
+            multipolygon.addPrimitive(polygon);
+            fillZ(multipolygon, bb);
+            fillM(multipolygon, bb);
+            return multipolygon;
+        } else {
+            fillZ(polygon, bb);
+            fillM(polygon, bb);
+            return polygon;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPReader#readMultiPoint(org.gvsig.utils.bigfile.BigByteBuffer2)
+     */
+    public Geometry readMultiPoint(BigByteBuffer2 bb) throws CreateGeometryException, ReadException {
+
+        GeometryManager gManager = GeometryLocator.getGeometryManager();
+
+        int numPoints;
+        bb.position(bb.position() + 32);
+        numPoints = bb.getInt();
+
+        MultiPoint multipoint = gManager.createMultiPoint(Geometry.SUBTYPES.GEOM3DM);
+
+        for (int i = 0; i < numPoints; i++) {
+            Point point = (Point) gManager.create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM);
+            point.setX(bb.getDouble());
+            point.setY(bb.getDouble());
+            multipoint.addPoint(point);
+        }
+
+        fillZ(multipoint, bb);
+        fillM(multipoint, bb);
+        return multipoint;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/SHPNullWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/SHPNullWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/SHPNullWriter.java	(revision 46118)
@@ -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.store.shp.utils;
+
+import java.nio.ByteBuffer;
+
+import org.gvsig.fmap.dal.exception.WriteException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryException;
+
+public class SHPNullWriter implements SHPShapeWriter {
+
+	public SHPNullWriter() {
+	}
+
+	public int getShapeType() {
+	    return SHP.NULL;
+	}
+
+	public void write(ByteBuffer buffer, Geometry geometry) {
+	}
+
+	public int getLength() {
+		return 4;
+	}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPShapeWriter#write(java.nio.ByteBuffer)
+     */
+    public void write(ByteBuffer buffer) throws WriteException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.dal.store.shp.utils.SHPShapeWriter#initialize(org.gvsig.fmap.geom.Geometry)
+     */
+    public void initialize(Geometry geometry) throws GeometryException {
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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(getNameForMessages(), this.getOID(), e);
+		} finally {
+			loading = false;
+			loaded = true;
+		}
+	}
+        
+        protected String getNameForMessages() {
+            // Solo con proposito de mostrar en mensajes de error.
+            try {
+                return this.store.getName();
+            } catch(Exception ex) {
+                return "unknown";
+            }
+        }
+
+	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();
+                Geometry geom = this.defaultGeometry;
+                if( geom!=null && geom.getProjection()==null ) {
+                    geom.setProjection(this.store.getProjection());
+                }
+		return geom;
+	}
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.store.shp;
+
+import java.io.File;
+import java.io.IOException;
+import org.gvsig.basicformats.FormatsFile;
+import org.gvsig.basicformats.PRJFile;
+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.EditableFeatureType;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class SHPFilesystemServerProvider extends DBFFilesystemServerProvider {
+    
+        protected static final Logger LOGGER = LoggerFactory.getLogger(SHPFilesystemServerProvider.class);
+
+
+        @Override
+	public boolean accept(File pathname) {
+		return pathname.getName().toLowerCase().endsWith(".shp");
+	}
+
+        @Override
+	public int getMode() {
+		return DataServerExplorer.MODE_GEOMETRY|DataServerExplorer.MODE_FEATURE;
+	}
+
+        @Override
+	public boolean canCreate() {
+		return true;
+	}
+
+	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;
+	// }
+
+        @Override
+	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;
+	}
+
+        @Override
+	public boolean closeResourceRequested(ResourceProvider resource) {
+		// while it is using a resource anyone can't close it
+		return false;
+	}
+
+        @Override
+	public void create(NewDataStoreParameters parameters, boolean overwrite)
+			throws CreateException {
+
+		final SHPNewStoreParameters params = (SHPNewStoreParameters) parameters;
+                final EditableFeatureType fType  = params.getDefaultFeatureType();
+
+		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() {
+                                @Override
+				public Object run() throws Exception {
+					SHPFeatureWriter writer =
+							new SHPFeatureWriter(getDataStoreProviderName());
+
+					writer.begin(params, fType, 0);
+                                        
+                                        PRJFile prjFile = FormatsFile.createPRJFile();
+                                        prjFile.setCRS(params.getCRS());
+                                        prjFile.writeQuietly(params.getFile());
+
+					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 void removeConsumer(FileResource[] resources) {
+            for (FileResource resource : resources) {
+                resource.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 (FileResource resource : resources) {
+                resource.notifyChanges();
+            }
+
+	}
+
+        @Override
+	public NewDataStoreParameters getCreateParameters() {
+		SHPNewStoreParameters params =
+				(SHPNewStoreParameters) super.getCreateParameters();
+
+		EditableFeatureType fType =
+				(EditableFeatureType) params.getDefaultFeatureType();
+		// SHPStoreProvider.addGeometryColumn(fType);
+		// params.setDefaultFeatureType(fType);
+		return params;
+	}
+
+        @Override
+	protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
+		return new SHPNewStoreParameters();
+	}
+
+        @Override
+	public String getDataStoreProviderName() {
+		return SHPStoreProvider.NAME;
+	}
+
+        @Override
+	public String getDescription() {
+		return SHPStoreProvider.DESCRIPTION;
+	}
+
+        @Override
+	public DataStoreParameters getParameters(File file) throws DataException {
+		DataManager manager = DALLocator.getDataManager();
+		SHPStoreParameters params =
+				(SHPStoreParameters) manager.createStoreParameters(this.getDataStoreProviderName());
+		params.setSHPFile(file.getPath()); 
+		return params;
+
+	}
+
+        @Override
+	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 {
+			resource = createResource(shpFile, otherFiles);
+			resource.closeRequest();
+			resource.closeRequest();
+		} catch (DataException e1) {
+			throw new RemoveException(shpFile.getPath(), e1);
+		}
+
+		try {
+			resource.execute(new ResourceAction() {
+                                @Override
+				public Object run() throws Exception {
+					deleteFile(shpFile);
+					deleteFile(dbfFile);
+					deleteFile(shxFile);
+					resource.notifyChanges();
+					return null;
+				}
+			});
+		} catch (Exception e) {
+			throw new RemoveException(this.getDataStoreProviderName(), e);
+		} finally {
+			resource.removeConsumer(this);
+		}
+	}
+
+	private void deleteFile(File file) throws RemoveException {
+		if (file.exists() && !file.delete()) {
+			throw new RemoveException(this.getDataStoreProviderName(),
+					new IOException()); // FIXME Exception
+		}
+	}
+
+        @Override
+	public String getResourceRootPathName(DataStore dataStore) {
+		SHPStoreParameters shpParams = (SHPStoreParameters) dataStore.getParameters();
+		return removeFileExtension(shpParams.getSHPFile());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,608 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+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.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.SHP;
+import org.gvsig.fmap.dal.store.shp.utils.SHPFile2;
+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.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 GEOM_MANAGER = GeometryLocator.getGeometryManager();
+    private static final Logger LOGGER = LoggerFactory.getLogger(SHPStoreProvider.class);
+    
+    public static String NAME = DataStore.SHAPE_PROVIDER_NAME;
+    public static String DESCRIPTION = "Shape file";
+    private ISHPFile shpFile;
+
+    private MultiResource resource;
+
+    public static final String GEOMETRY_ATTIBUTE_NAME = "GEOMETRY";
+
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private SHPFeatureWriter writer = null;
+
+    private boolean loTengoEnUso;
+
+    /**
+     * @param params
+     * @param storeServices
+     * @throws InitializeException
+     */
+    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());
+    }
+
+    @Override
+    public SHPStoreParameters getParameters() {
+        return (SHPStoreParameters) super.getParameters();
+    }
+
+    public IProjection getProjection() {
+        return this.getShpParameters().getCRS();
+    }
+    
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if (DataStore.METADATA_CRS.equalsIgnoreCase(name)) {
+
+            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.frozen();
+        resource.addMultiResourceConsumer(this);
+        super.initResource(resource, storeServices);
+    }
+
+    ;
+
+    public ResourceProvider getResource() {
+        return resource;
+    }
+
+    /**
+     *
+     * @throws ResourceNotifyChangesException
+     */
+    protected void resourcesNotifyChanges() throws ResourceNotifyChangesException {
+        getResource().notifyChanges();
+        // TODO .prj
+
+    }
+
+    /**
+     * @throws ResourceNotifyCloseException
+     *
+     */
+    protected void resourcesNotifyClose() throws ResourceNotifyCloseException {
+        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 {
+        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;
+                }
+            }
+        }
+
+        if (attr == null) {
+            String geofield = createGeometryFieldName(fType);
+            attr = fType.add(geofield, DataTypes.GEOMETRY);
+            attr.setDefaultValue(null);
+        }
+
+        attr.setObjectClass(Geometry.class);
+        attr.setAllowNull(true);
+//        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 EditableFeatureType getTheFeatureType() throws InitializeException{
+        try {
+            this.open();
+        } catch (DataException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+        final EditableFeatureType fType = super.getTheFeatureType();
+        try {
+            getResource().execute(new ResourceAction() {
+
+                public Object run() throws Exception {
+                    EditableFeatureAttributeDescriptor attr = addGeometryColumn(fType);
+
+                    attr.setGeometryType(GEOM_MANAGER.getGeometryType(
+                        shpFile.getGeometryType(),
+                        shpFile.getGeometrySubType()
+                    ));
+
+                    IProjection srs = getShpParameters().getCRS();
+                    attr.setSRS(srs);
+
+                    return null;
+                }
+            });
+            return fType;
+        } catch (ResourceExecuteException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    protected SHPStoreParameters getShpParameters() {
+        return (SHPStoreParameters) getParameters();
+    }
+
+    public String getProviderName() {
+        return NAME;
+    }
+
+    public boolean allowWrite() {
+        return this.shpFile.isEditable() &&
+            super.allowWrite() &&
+            !this.getShpParameters().getLoadCorruptGeometriesAsNull() &&
+            !this.getShpParameters().getAllowInconsistenciesInGeometryType() &&
+            !this.getShpParameters().getFixLinearRings();
+    }
+
+    /**
+     *
+     * @param index
+     * @param featureType
+     * @return
+     * @throws ReadException
+     */
+    protected FeatureProvider getFeatureProviderByIndex(long index, FeatureType featureType) throws DataException {
+        this.open();
+        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 {
+        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
+     */
+    @Override
+    protected void loadFeatureProviderByIndex(FeatureProvider featureProvider) throws DataException {
+
+        FeatureType featureType = featureProvider.getType();
+        long index = ((Long) featureProvider.getOID());
+        boolean hasGeometry = false;
+        int i = featureType.getDefaultGeometryAttributeIndex();
+        if (i >= 0) {
+            if (!featureProvider.isReadOnly(i)) {
+                Geometry geom;
+                try {
+                    geom = this.shpFile.getGeometry(index);
+                } catch (Exception e) {
+                    if( this.getShpParameters().getLoadCorruptGeometriesAsNull() ) {
+                        geom = null;
+                    } else {
+                        throw new ReadGeometryException(getName(), featureProvider.getOID(), e);
+                    }
+                }
+                featureProvider.set(i, geom);
+            }
+            hasGeometry = true;
+        }
+        if (hasDBFAttributes(featureType, hasGeometry)) {
+            super.loadFeatureProviderByIndex(featureProvider);
+        }
+
+    }
+
+    public class ReadGeometryException extends ReadException {
+
+        private final static String MESSAGE_FORMAT = "There was errors loading a geometry from '%(store)'.\nCheck 'Load corrupt geometries as null' in the shape's properties of the add layer dialog to skip corrupt geometries. The layer will become read only.";
+        private final static String MESSAGE_KEY = "_ReadGeometryException";
+        private static final long serialVersionUID = 2626155328734197112L;
+
+        public ReadGeometryException(String store, Object oid, Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+            setValue("store", store);
+            setValue("storeParameters",getParameters());
+        }
+    }
+
+    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, long 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();
+    }
+
+    @SuppressWarnings("rawtypes")
+    public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds,
+        Iterator originalFeatureTypesUpdated) throws PerformEditingException {
+        final List<Object> originalFeatureTypesUpdatedList = new ArrayList<>();
+        while (originalFeatureTypesUpdated.hasNext()) {
+            originalFeatureTypesUpdatedList.add(originalFeatureTypesUpdated.next());
+        }
+        
+        /*
+         * This will throw an exception if there are new fields
+         * with names too long
+         */
+        checkNewFieldsNameSize(originalFeatureTypesUpdatedList.iterator());
+
+        final FeatureType fType;
+        try {
+            fType = this.getStoreServices().getDefaultFeatureType();
+        } catch (DataException e) {
+            throw new PerformEditingException(this.getProviderName(), e);
+        }
+        try {
+            // TODO repasar el concepto de enUso de un recurso.
+            loTengoEnUso = true;
+            resourceCloseRequest();
+
+            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, set.getSize());
+
+                        iter = set.fastIterator();
+                        while (iter.hasNext()) {
+                            Feature feature = (Feature) iter.next();
+                            writer.append(feature);
+                        }
+
+                        writer.end();
+                        loTengoEnUso = false;
+                        close();
+
+
+                        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
+                                + "'");
+                        }
+                        if (shpParams.getCPGFile().exists() && !shpParams.getCPGFile().delete()) {
+                            LOGGER.debug("Can't delete cpg file '" + shpParams.getCPGFile() + "'.");
+                            throw new IOException("Can't delete cpg '"
+                                + FilenameUtils.getBaseName(shpParams.getCPGFileName())
+                                + "' file to replace with the new cpg.\nThe new cpg is in temporary file '" + str_base
+                                + "'");
+                        }
+
+                        File prjFile = SHP.getPrjFile(shpParams.getSHPFile());
+                        if (prjFile.exists()) {
+                            if (!prjFile.delete()) {
+                                LOGGER.debug("Can't delete prj file '" + prjFile + "'.");
+                                throw new IOException("Can't delete shx '"
+                                    + FilenameUtils.getBaseName(prjFile.getPath())
+                                    + "' 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());
+                        FileUtils.moveFile(tmpParams.getCPGFile(), shpParams.getCPGFile());
+
+                        savePrjFile(shpParams.getFile(), tmpParams.getCRS());
+
+                        resourcesNotifyChanges();
+                        if (!originalFeatureTypesUpdatedList.isEmpty()) {
+                             initFeatureType();
+                        }
+                       
+                        return null;
+                    } finally {
+                        loTengoEnUso = false;
+                        dispose(set);
+                        dispose(iter);
+                    }
+                }
+            });
+
+        } catch (Exception e) {
+            throw new PerformEditingException(this.getProviderName(), e);
+        }
+
+    }
+
+    protected void resourceCloseRequest() throws ResourceException {
+        getResource().closeRequest();
+    }
+
+    public Envelope getEnvelope() throws DataException {
+        this.open();
+        return (Envelope) this.getDynValue("Envelope");
+    }
+
+    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 {
+        getResource().execute(new ResourceAction() {
+
+            public Object run() throws Exception {
+                FeatureStore store = getFeatureStore();
+                FeatureType fType = store.getDefaultFeatureType();
+
+                writer = new SHPFeatureWriter(getProviderName());
+                writer.begin(getShpParameters(), fType, store.getFeatureCount());
+                return null;
+            }
+        });
+    }
+
+    public void endAppend() throws DataException {
+        getResource().execute(new ResourceAction() {
+
+            public Object run() throws Exception {
+                writer.end();
+                close();
+
+                SHPStoreParameters shpParameters = SHPStoreProvider.this.getShpParameters();
+
+                savePrjFile(shpParameters.getFile(), shpParameters.getCRS());
+
+                resourcesNotifyChanges();
+                return null;
+            }
+        });
+    }
+
+    public Object getSourceId() {
+        return this.getShpParameters().getFile();
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.EditableFeatureType;
+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.GeometryUtils;
+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 GEOM_MANAGER = GeometryLocator.getGeometryManager();
+    private static final Logger LOGGER = LoggerFactory.getLogger(SHPFeatureWriter.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, 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(
+                GEOM_MANAGER.createEnvelope(0, 0, 0, 0, featureType.getDefaultGeometryAttribute().getGeomType().getSubType()),
+                shapeType, 0, 0);
+        } catch (CreateEnvelopeException e) {
+            LOGGER.warn("Error creating the envelope", e);
+        }
+
+        this.shpFeatureType = featureType;
+
+        EditableFeatureType efType = featureType.getEditable();
+        efType.remove(efType.getDefaultGeometryAttributeIndex());
+        efType.setDefaultGeometryAttributeName(null);
+        super.begin(dbfParameters, efType, 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 =
+                    GEOM_MANAGER.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) {
+        if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.NULL };
+            return;
+        }
+        if( GeometryUtils.isSubtype(Geometry.TYPES.MULTIPOINT, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTIPOINT, Geometry.TYPES.NULL };
+            return;
+        }
+        if( GeometryUtils.isSubtype(Geometry.TYPES.CURVE, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTICURVE, Geometry.TYPES.CURVE, Geometry.TYPES.NULL };
+            return;
+        }
+        if( GeometryUtils.isSubtype(Geometry.TYPES.MULTICURVE, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTICURVE, Geometry.TYPES.CURVE, Geometry.TYPES.NULL };
+            return;
+        }
+        if( GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTISURFACE, Geometry.TYPES.SURFACE, Geometry.TYPES.NULL };
+            return;
+        }
+        if( GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, gvSIG_geometryType) ) {
+            supportedGeometryTypes =
+                new int[] { Geometry.TYPES.MULTISURFACE, Geometry.TYPES.SURFACE, Geometry.TYPES.NULL };
+            return;
+        }
+        supportedGeometryTypes = new int[] {};
+    }
+
+    public boolean canWriteGeometry(int gvSIGgeometryType) {
+        for (int i = 0; i < supportedGeometryTypes.length; i++) {
+            if( GeometryUtils.isSubtype(supportedGeometryTypes[i], gvSIGgeometryType)) {
+                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.344/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.344/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.344/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.344/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 46118)
@@ -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 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) {
+        if (featureType instanceof EditableFeatureType) {
+            ((EditableFeatureType) featureType).setHasOID(true);
+        } else {
+            EditableFeatureType editable = featureType.getEditable();
+            editable.setHasOID(true);
+            featureType = editable;
+        }
+        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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.DataTypes;
+import org.gvsig.fmap.dal.exception.InitializeException;
+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.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseFile;
+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;
+
+@SuppressWarnings("UseSpecificCatch")
+public class SHPStoreProviderFactory extends AbstractFeatureStoreProviderFactory {
+
+    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.MULTIPOLYGON;
+    public static final int DEFAULT_GEOMETRY_SUBTYPE = Geometry.SUBTYPES.GEOM2D;
+
+    protected SHPStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    @Override
+    public DataStoreProvider createProvider(DataParameters parameters,
+            DataStoreProviderServices providerServices)
+            throws InitializeException {
+        return new SHPStoreProvider((SHPStoreParameters) parameters, providerServices);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new SHPStoreParameters();
+    }
+
+    @Override
+    public int allowCreate() {
+        return YES;
+    }
+
+    @Override
+    public int allowWrite() {
+        return YES;
+    }
+
+    @Override
+    public int allowRead() {
+        return YES;
+    }
+
+    @Override
+    public int hasRasterSupport() {
+        return NO;
+    }
+
+    @Override
+    public int hasTabularSupport() {
+        return YES;
+    }
+
+    @Override
+    public int hasVectorialSupport() {
+        return YES;
+    }
+
+    public int allowMultipleGeometryTypes() {
+        return NO;
+    }
+
+    @Override
+    public int allowEditableFeatureType() {
+        return YES;
+    }
+
+    @Override
+    public int useLocalIndexesCanImprovePerformance() {
+        return YES;
+    }
+
+    @Override
+    public int isOptimalRecoverFeaturesByReference() {
+        return YES;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public List getSupportedGeometryTypesSubtypes() {
+        // null means all supported
+
+        List<int[]> supported = new ArrayList<>();
+
+        supported.add(new int[]{Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D});
+        supported.add(new int[]{Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2D});
+        supported.add(new int[]{Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2D});
+
+        supported.add(new int[]{Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2DM});
+        supported.add(new int[]{Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM2DM});
+        supported.add(new int[]{Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM2DM});
+
+        supported.add(new int[]{Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM3DM});
+        supported.add(new int[]{Geometry.TYPES.LINE, Geometry.SUBTYPES.GEOM3DM});
+        supported.add(new int[]{Geometry.TYPES.POLYGON, Geometry.SUBTYPES.GEOM3DM});
+
+        supported.add(new int[]{Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM2D});
+        supported.add(new int[]{Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2D});
+        supported.add(new int[]{Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2D});
+
+        supported.add(new int[]{Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM2DM});
+        supported.add(new int[]{Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM2DM});
+        supported.add(new int[]{Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM2DM});
+
+        supported.add(new int[]{Geometry.TYPES.MULTIPOINT, Geometry.SUBTYPES.GEOM3DM});
+        supported.add(new int[]{Geometry.TYPES.MULTILINE, Geometry.SUBTYPES.GEOM3DM});
+        supported.add(new int[]{Geometry.TYPES.MULTIPOLYGON, Geometry.SUBTYPES.GEOM3DM});
+
+        return supported;
+    }
+
+    @Override
+    public boolean allowsMandatoryAttributes() {
+        return false;
+    }
+
+    @Override
+    public boolean allowsPrimaryKeyAttributes() {
+        return false;
+    }
+
+    /**
+     * @return dummy feature type. Must be overridden by subclasses
+     *
+     */
+    @Override
+    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, DEFAULT_GEOMETRY_SUBTYPE);
+        }
+        eft.setDefaultGeometryAttributeName(DEFAULT_GEOMETRY_FIELD_NAME);
+        return eft.getNotEditableCopy();
+    }
+
+    @Override
+    public int getMaxAttributeNameSize() {
+        return DbaseFile.MAX_FIELD_NAME_LENGTH;
+    }
+
+    @Override
+    public boolean supportNumericOID() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.store.shp;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.crs.CRSFactory;
+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";
+    /* friend */ 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";
+    private static final String LOAD_CORRUPT_GEOMETRIES_AS_NULL = "loadCorruptGeometriesAsNull";
+    private static final String FIX_LINEARRINGS = "fixLinearRings";
+
+	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));
+		}
+        if (getCRS() == null){
+            String wktEsri = loadPrj(file);
+            if (wktEsri != null) {
+                IProjection proj = CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, wktEsri);
+                setCRS(proj);
+            }
+        }
+
+	}
+
+	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));
+		}
+        if (getCRS() == null){
+            String wktEsri = loadPrj(file);
+            if (wktEsri != null) {
+                IProjection proj = CRSFactory.getCRSFactory().get(ICRSFactory.FORMAT_WKT_ESRI, wktEsri);
+                setCRS(proj);
+            }
+        }
+	}
+
+	private String loadPrj(File shpFile){
+        File prjFile = SHP.getPrjFile(shpFile);
+        if (prjFile.exists()) {
+            try {
+                return FileUtils.readFileToString(prjFile);
+            } catch (IOException e) {
+                return null;
+            }
+        }
+        return null;
+	}
+
+	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));
+        }
+        
+        public boolean getLoadCorruptGeometriesAsNull() {
+		return BooleanUtils.isTrue((Boolean) getDynValue(LOAD_CORRUPT_GEOMETRIES_AS_NULL));
+        }
+        
+        public boolean getFixLinearRings() {
+		return BooleanUtils.isTrue((Boolean) getDynValue(FIX_LINEARRINGS));
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,101 @@
+<?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>_SHP_loading_parameters</description>
+            <fields>
+                <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 order="5" name="dbfFile" type="file" mandatory="false" group="Advanced">
+                    <description>dbf file</description>
+                </field>
+                <field order="6" name="shxFile" type="file" mandatory="false" group="Advanced">
+                    <description>The shx file associated to this shape file
+                    </description>
+                </field>
+
+                <field order="200" name="useNullGeometry" label="Use NullGeometry instead of null" type="boolean" group="Advanced" hidden="true" mandatory="false" defaultValue="false">
+                    <description>If set, use NullGeometry object instead a null value</description>
+                </field>
+                <field order="210" 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. The layer will be read only.</description>
+                </field>
+                <field order="220" name="loadCorruptGeometriesAsNull" label="Load corrupt geometries as null" type="boolean" mandatory="false" group="Advanced" defaultValue="false">
+                    <description>If set, load geometries that have inconsistencies as null and not fails. The layer will be read only.</description>
+                </field>
+                <field order="230" name="fixLinearRings" label="Fix LinearRings and LineString" type="boolean" mandatory="false" group="Advanced" defaultValue="false">
+                    <description>If set, fix LinearRings to minimum four vertices and fix LineStrings to minimum two vertices duplicating last vertex. The layer will be read only.</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="LINE">18</value>
+                        <value label="POLYGON">19</value>
+                        <value label="MULTIPOINT">7</value>
+                        <value label="MULTILINE">21</value>
+                        <value label="MULTIPOLYGON">22</value>
+                        <value label="CURVE (deprecated)">2</value>
+                        <value label="SURFACE (deprecated)">3</value>
+                        <value label="MULTICURVE (deprecated)">8</value>
+                        <value label="MULTISURFACE (deprecated)">9</value>
+                        
+                    </availableValues>
+                </field>
+            </fields>
+        </class>
+
+    </classes>
+</definitions>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.shp.SHPLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/log4j.xml	(revision 46118)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2012 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-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.construc">
+		<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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/org/gvsig/fmap/dal/store/shp/testCreateSource1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/org/gvsig/fmap/dal/store/shp/testCreateSource1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.shp/src/test/resources/org/gvsig/fmap/dal/store/shp/testCreateSource1.csv	(revision 46118)
@@ -0,0 +1,20 @@
+ID/Integer;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Decimal/Decimal/set/precision=6/set/scale=3;Geometry/Geometry/set/geomtype=Point:2D/set/srs=EPSG:4326
+ ;  ; ;    ;              ;        ;      ; ;      ; ;           ; ;      ;T;       ;
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-3.8945156972987958 42.01053743584765)
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-2.1079618220646115 41.983079082675474)
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (-2.57249737803327 41.35372113353277)
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (-4.061822048036304 41.35877680235475)
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (-3.974317066986988 40.78701209315094)
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (-2.510509736717547 40.69847453392384)
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;456.123;POINT (-0.5317736981843011 40.66396082637622)
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;456.123;POINT (-0.3626917259170671 41.13652386601604)
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;456.123;POINT (-1.2461823078608523 41.84950010180092)
+10;;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-1.2145405488596532 41.22158511004416)
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-0.7699089544899235 41.630581204431756)
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (0.4821915816701051 41.75970939133133)
+12;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (0.7912661147227479 41.919324620992036)
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (1.052534629531243 41.493736996249545)
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (0.8097002367335026 41.0899480235613)
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;456.123;POINT (-0.4883960310112362 41.17597288081971)
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;456.123;POINT (-0.6439030698437881 40.89530766155764)
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T; ;POINT (-1.3061826868199504 40.72372835570524)
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 46118)
@@ -0,0 +1,65 @@
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.net.URL;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+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.feature.FeatureStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestUtils  {
+    
+    public static final Logger LOGGER = LoggerFactory.getLogger(TestUtils.class);
+
+    
+    public static DataServerExplorer openServerExplorer() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorer explorer = dataManager.openServerExplorer(
+                DataServerExplorer.FILESYSTEM_SERVER_EXPLORER_NAME, 
+                "root=", TestUtils.getTargetFolder()
+        );    
+        return explorer;
+    }
+    
+    public static File getTargetFolder() throws Exception {
+        URL url = TestUtils.class.getResource("/");
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+    
+    public static File getResource(String name) throws Exception {
+        File x = new File(getTargetFolder(), name);
+        return x;
+    }
+    
+    public static File getResourceAsFile(String pathname) throws Exception {
+        URL url = TestUtils.class.getResource(pathname);
+        File x = new File(url.toURI());
+        return x;
+    }
+
+    public static void removeDALFile(String fname) throws Exception {
+        File f = getResource(fname);
+        f = new File(FilenameUtils.removeExtension(f.getAbsolutePath())+".dal");
+        FileUtils.deleteQuietly(f);
+    }
+
+    public static FeatureStore openSourceStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResourceAsFile("/org/gvsig/fmap/dal/store/shp/testCreateSource1.csv");
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",f,
+                "automaticTypesDetection=", false,
+                "locale=","en"
+        );
+        return store;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestCreate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 46118)
@@ -0,0 +1,227 @@
+package org.gvsig.fmap.dal.store.shp;
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter;
+import static org.gvsig.fmap.dal.store.shp.SHPStoreProvider.GEOMETRY_ATTIBUTE_NAME;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCreate extends TestCase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestCreate.class);
+    
+    public TestCreate(String testName) {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    
+    protected String getProviderName() {
+        return DataStore.SHAPE_PROVIDER_NAME;
+    }
+    
+    protected String getTargetFilename() {
+        return "testCreateTarget1.shp";
+    }
+
+    protected FeatureStore openTargetStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = TestUtils.getResource(getTargetFilename());
+        FeatureStore store;
+        try {
+            store = (FeatureStore) dataManager.openStore(
+                    getProviderName(), 
+                    "shpFile=",f,
+                    DataParameters.CRS_PARAMTER_NAME, "EPSG:4326"
+            );
+        } catch(ValidateDataParametersException ex) {
+            LOGGER.warn(ex.getLocalizedMessageStack());
+            throw ex;
+        }
+        return store;
+    }
+
+    protected void createFrom(FeatureStore sourceStore) throws Exception {
+        DataServerExplorer explorer = TestUtils.openServerExplorer();
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getProviderName()
+        );
+        ((FilesystemStoreParameters)params).setFile(TestUtils.getResource(getTargetFilename()));
+        params.setDynValue(DataParameters.CRS_PARAMTER_NAME, "EPSG:4326");
+        params.setDynValue("GeometryType", Geometry.TYPES.POINT);
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.copyFrom(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+    
+    protected void checkTypes(FeatureType sourceFeatureType) throws Exception {
+//        DataType STRING_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.STRING);
+//        DataType INT_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.INT);
+        
+        FeatureStore targetStore = openTargetStore1();
+        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
+
+        assertEquals("Feature type size",sourceFeatureType.size(), targetFeatureType.size());
+        for (int i = 0; i < sourceFeatureType.size(); i++) {
+            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
+            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
+            switch(sourceAttr.getType()) {
+                case DataTypes.GEOMETRY:
+                    if( targetAttr.getName().equalsIgnoreCase(GEOMETRY_ATTIBUTE_NAME) ) {
+                        // Si no hay fichero DAL se le habra asignado el nombre por defecto.
+                    } else {
+                        assertEquals(
+                                String.format("Field %s name mismatch", sourceAttr.getName()), 
+                                sourceAttr.getName(), 
+                                targetAttr.getName()
+                        );
+                    }
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getDataTypeName(), 
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s geometry type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getGeomType().getName(), 
+                            targetAttr.getGeomType().getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s geometry SRS mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSRS().toString(), 
+                            targetAttr.getSRS().toString()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                default:
+                    // Solo comprobams que pasa con las geometrias, los otros 
+                    // tipos de datos confiamos que los comprueben los test
+                    // del dbf.
+                    break;
+            }
+        }
+    }
+    
+    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    protected void checkData(FeatureStore sourceStore) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+
+        List<Feature> sourceFeatures = sourceStore.getFeatures();
+        List<Feature> targetFeatures = targetStore.getFeatures();
+        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
+        for (int i = 0; i < targetFeatures.size(); i++) {
+            Feature sourceFeature = sourceFeatures.get(i);
+            Feature targetFeature = targetFeatures.get(i);
+            for (FeatureAttributeDescriptor sourceAttr : sourceStore.getDefaultFeatureType()) {
+                switch(sourceAttr.getType()) {
+                    case DataTypes.GEOMETRY:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.get(sourceAttr.getName())
+                        );
+                        break;
+                    default:
+                      // Solo comprobams que pasa con las geometrias, los otros 
+                      // tipos de datos confiamos que los comprueben los test
+                      // del dbf.
+                      break;
+                }
+            }
+        }
+    }
+    
+    
+    public void testCreateWithDALFile() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        
+        createFrom(sourceStore);        
+        
+        checkTypes(sourceStore.getDefaultFeatureType());
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        checkData(sourceStore);
+        
+        createFrom(sourceStore);
+        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+        checkData(sourceStore);
+
+    }
+    
+    public void testCreateWithoutDALFile() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        
+        createFrom(sourceStore);        
+        TestUtils.removeDALFile(getTargetFilename());
+        
+        checkTypes(sourceStore.getDefaultFeatureType());
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        TestUtils.removeDALFile(getTargetFilename());
+        checkData(sourceStore);
+        
+        createFrom(sourceStore);
+        TestUtils.removeDALFile(getTargetFilename());
+        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+        TestUtils.removeDALFile(getTargetFilename());
+        checkData(sourceStore);
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents.csv	(revision 46118)
@@ -0,0 +1,9 @@
+"ID__Long","NAME__String__100"
+"1","Africa"
+"2","Asia"
+"3","Europe"
+"4","North America"
+"5","South America"
+"6","Oceania"
+"7","Seven seas (open ocean)"
+"8","Antarctica"
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/esp_provincias.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/esp_provincias.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/esp_provincias.csv	(revision 46118)
@@ -0,0 +1,51 @@
+COD_PROVINCIA/Integer/set/pk=true/set/label=Codigo/set/order=10;PRO_NAME/String/set/size=80/set/label=Nombre/set/order=20;COD_COMUNIDAD/Integer/set/label=Comunidad/set/order=30/set/fk=true/set/fk_table=esp_comunidades/set/fk_code=COD_COMUNIDAD/set/fk_label=FORMAT('%02d - %s', COD_COMUNIDAD, COM_NAME)/set/fk.closedlist=false;GEOMETRY/Geometry/set/srs=EPSG@4326/set/geomtype=Multipolygon@2D/set/hidden=true/set/order=30
+25;Lleida;51;000000000600000002000000000300000002000001273ff0be170a2185d14044b8673c6d4c3d3ff071863acab4cd4044b4629d1acfdd3ff00a65731031c04044b3be4c11b79f3fefbe37ab92eb564044b1ca1e358ef23fef6c30e6e3e0764044b224c48580883feec93b5e611a894044af094dab1d6b3feedbf84201be594044ad793c56f3583fee3f5684c6f9a54044acc4c0e902a83feb9fe55ed02b384044ab473a195f003feae1cf0c060c794044ae4fc9d974c93fea883b61c4afe34044adba5f52dd033fea169ad3195be14044a9d960a87b233fe86635f75dc5034044aac8984813733fe80c78861b040a4044a8aee0cd23a43fe56e7b92eacb324044a7a95e0156dc3fe41a1de1ce77d94044a53aeab5739e3fe31b1fdcfb545b4044a58fbaa85d023fe2965d2a8eb0184044a8f1ff8c3cba3fe1bdddbe8c982b4044a9d033069b2e3fe0d36b1c2db3174044a52d9d9698223fe01ad308b744e24044a515dc59cc693fdeb67de0ab7bef4044a966a25c9cf63fdd8b35f936374b4044aae3b66ef8983fdbcde9d62599a04044a8fc9df7ef883fdbb8bb56f26ee24044a3554c71b76d3fdb3e42c4286c0d4044a318248ab50d3fd8acfabe9164864044a3a9949092ad3fd81b2fe2acef1f4044a4d12c19b0ce3fd766c4eb2c08724044a6e88df7bead3fd79987ddd1cf384044a8b4c8e5f3a13fd64d151f548ca84044a9fed6ddfb513fd7ef1623e9fb424044acff39a8e58a3fd6ee35a3e203264044af9d829aad1e3fd47b7a49c820154044b27496b143153fd5e0bac8f1d4774044b4f7e8c91b823fd6bb480fb9308e4044b9bd50f916d83fd5f35f687056d54044bb3f91cc81e03fd5bd43da6cbfe94044bdddcf222b683fd96ec2ad8682de4044becb16bae8b03fdc9a6446f3d1c14044c567fb6b349c3fdb8a8273fcebbd4044c859b05547db3fdbe4f9013bc7e04044caf7bc66c57f3fdb6c739dd3dd5a4044cd1aa8ab62f93fd9babe6000236f4044cbde2b41d5c13fd6600e71f782f34044ccbb3cbb8bf73fd621dae44542074044cf99356a33eb3fd6e92ce930f55a4044d0dc327d4d2a3fd4e123696f37fa4044d4c2f3609b883fd50169affa8cac4044d72d5a6765d13fd79818149ec8834044db6aa99fa9b23fd7a1442c6e8cbf4044dcc1e58634c13fd89f9be94c81b04044dec2880968233fd94ed3c2e039e74044ddb18eb66f463fd983e6d2bb00fb4044e0fff23363b03fddfd8fe670149a4044e1eabc11fabb3fdeed453d4be5dd4044e69658197a2d3fe07ea85780222d4044e942e1e0f4e73fe164f43e895b3c4044e9030465da143fe1c449ba197d104044ed2f7aaa48c73fe28fcb92c39a274044ecea9ce1a29d3fe28e8452be1b8d4044ee8b34c50c423fe3707526aed1a14044ef97e34fdfd63fe377504305db844044f072c8d2f5ba3fe2f275308c42774044f134c118cab93fe33b4484f2cc194044f44b21e535ad3fe309626615777b4044f57f8adeaf923fe37088bb7253d24044f5ac1fbafdba3fe1faeb251eeac94044f81790c6c8623fe2c2b1c1613c644044fbcb022b6d303fe36024ab3019f94044fae177067a4c3fe3bd0bec9d4cad4044fe5b3f49749c3fe470773334ad294044ff4f79e7efe13fe48bf84baba50a4044fdb83204a3c33fe4b254b357fe114044ff87c48b70f33fe51021db3e770140450054991884203fe53e38598523e4404501ef9335d24a3fe4dbbfd2cf816f4045035a9785ee163fe504f8ad7b4dd440450522a0e79f3f3fe58168e61d80c54045060c161229e83fe56fcc8f17e909404507ea34dcd6863fe6633a1060e50c40450d7545f6c90f3fe641845a4ad7c940451361750dd1ae3fe6d7da5d9542ae404514d745a5eb513fe656b012236583404515fdaa2b486a3fe676ac839aee74404518339d64320d3fe6dde3848e088640451cb6c2d722083fe78f16442051964045204e3b50a7d23fe7d5a65fd0a0164045268cfdf2e81d3fe877caed23af5d40452947122d7f153fe7cc3539618f56404529c4d5f2e63c3fe7b107a0f7f68b40452b1ea55c9b623fe8ae8b54f7171240452ce1dc2664a23fe71c76084d8a0040452f07a043930e3fe7e00638e55ffd40453140588efc213fe73aef79c25b27404533deaad078a93fe7896bec8d3182404535169dcf10fe3fe6b97c0eb30ffc404537db79876f3a3fe6aff887aa729f40453ac7d3828d533fe613a8649ecc4540453dea9c8770df3fe65dcca2c19caa40453f5a98a9fce13fe6d3f3ca340d9b40453e5cd63171e03fe7bfbe44517140404540b79b10abe43fe7096accc9ea11404541a4734d90be3fe7174928a41f404045432f6bd7ae413fe782ff2ae5534e4045452a0bb322be3fe816ad753275e3404544586f0ca82f3fe7b4b83611dfd2404545cf9f001c163fe8410c414e4b5f404548f3d2b7bfc23fe88fc62e780d8340454e3c9acc2fd53fe79c6ed64c7d5d40454e61d34880bc3fe65b4c588cf8bc4045507d9b58ade43fe6802192c434c64045522522c47b1a3fe6424d38dcaf324045544dca2b65673fe51dbb3c569d714045581e5f14fd2c3fe5a31fe078aec64045586e62ab93393fe5d77193c1128540455abccc460ba03fe58a6f340cc45640455be6f55df6bd3fe5c3e649d4121940455c938920f2e33fe52612be9e8bc74045603d5e582d9d3fe474fa971ba12d4045609f6bbe72a03fe559e371e6079840456336e26c68ac3fe4a2625364df8740456438d1ebf9163fe56f6a4d149f8e404566b1562819943fe546fda8c05bae404568275672cac63fe57187b3acda02404569821a3ad8883fe5173535635b9240456b3e47ae95553fe5b490398d593440456c82fa1d09733fe5b1cee89713eb40456d796614d4453fe6b211ff17330a40456e44010106e73fe8e0fe2762c57240456b06e89420003fe9f27b5f3e4b6240456b5b4bbc523d3feb771f8c0c6844404569b162d93e203feda52deb8f746c40456508290a4b9a3feeb9a381c7375a40456727d869c1993fef7c13cff42739404564b2ae79b6b73ff0170d25cfbfbe40456539bc23dd2a3ff0c413ac852ea9404563f73fa119853ff1431ea779c5d9404564e83471cca13ff20d2505e2b1d6404560b713c3e85e3ff2219324930ff140455d37f6e307073ff2b8b5a7c2265640455aa38105f1533ff3aa699c7bcc2a40455d271f1bd7ab3ff40b227bcd4d4840455b739a3426d73ff5516588f96bf040455cc3f53384783ff5b79a1819a74640455c1fd89a57d23ff59e0571c8b3fe404559f2a5c4a02e3ff63a58673076fd404557f06d83ef973ff632f3f1d4c41340455597a6895af73ff69e58c071b0d9404553eaa93ce0ee3ff6ba1517c7d06d40455000640ae3d63ff7169e05059ac140454d274761e9543ff6d2de75db683540454a993f457eff3ff71e80e75fe4dc404548b4a2c5a3743ff6c9a93ae61ec84045474e8483990e3ff69e21b79bf44e404544b0149ce77a3ff7356ee74f96274045451b2ed63d753ff77e6d611b3cb740454148338d17a33ff6b503b4e2c2a540453dfa1b7c29bf3ff70f1f4e0a354a40453cd87dbf0c5f3ff71c3bd1d7118e4045388092a64f243ff82f9f4ec2e44a404536ec92e17fc93ff8d3a9a453b1d94045375c9c6322903ff8fa28742c3b8c40453ab4e83f191b3ff944619bb7923a40453990675876313ff98ed442eb6aa640453bb0763d51a33ffa83285160787040453bee8172b14e3ffab83ac31f79ee4045408945f9df553ffadf21959e59c040453f51b312b3da3ffb41fc9ce2e90840453eb1d675dcc03ffb9c25daec307c4045408f4756e7d63ffbb5f24cb07f314045385e7bd8b5dc3ffcd320b1d9dfe440453663d2f46a5c3ffcf9e81c2afb4e404534a0136834143ffcccff1dace426404530621f7a18cb3ffce587f72fcccd40452f5f1b4c145f3ffd47a27093f801404530d1ed45f1b03ffdae50fa437d8440452f50a3f1e2303ffd865c14febfba40452d734779ab013ffd5af77d2498e840452d7568f3f08f3ffd6e25f6c5d5ca40452b67597171993ffd5663ae1413ce404529e47b9521bb3ffd7ad2273ae89a4045273524c5314d3ffd55b13cce678340452677eb6d90963ffce0058b7c97cf404526a6970dce1f3ffcb5603f1ebda0404525a1ce0c791c3ffbda04a5a38a81404525323fdcfe8d3ffbbfcd448e46cd4045245a200d77c93ffab993cc58bc384045240ea94a2a8b3ffb0ad07a00771f404523782b3b53503ffb1ef49d3a26dd404521c57b4bf3153ffaf429e2852374404520d2ffa7fc9a3ffb45eb0e9b123040451e919e6973483ffae2e849e7100140451cb7e909882e3ffae2bab298eefa40451a66124bba9d3ffb50971947e0d14045184f642df4523ffb8b8d34e4ecb240451919aa941b5e3ffbcf089bc1225b4045183ef20562e33ffbd038f970c4ba404514eb068931173ffb95637af99b624045138915a638173ffb6bb498675945404513cdbe64543f3ffb2d0357bd1a174045113a7137722a3ffb6590373ca49a40450f3c432747173ffb456d342d509340450d90cb9298a73ffb90e3a14f9b7440450ccf6a33d8fe3ffb8dea8349a9a040450baf3514e84d3ffb527140092f7f40450a8d3b9f34dc3ffb0f1443f38e9d40450b1bec4b28843ffb0ee107ed344c404509a6d0f196fe3ffacb448dce8a3d40450781d32fce8b3ffac106de9f0fd940450537f36161193ffadf18369c6312404504e4583ba2bb3ffaecd6aa825b4b40450632e6dd194c3ffb1548b6e43e6a404505d49f1c430c3ffb31f90177e90a404503b22c3570ae3ffab8379940d0a34045020139c02ef43ffaa951b633b6c5404500628d626d783ffaa165f56c171b404502c48290e9723ffa889e6801e95d404502cd43cd00c73ffa5a7310f751ba4044fffa7843550c3ffa6eb971f384bf4044fef9120d7c483ffa85edf0cda1ce4045005f7ce60d443ffa9854b5057d3a4044fedd2692a2153ffaf4ccd89c74fd4044ff60802e9fb83ffb28acc773c7784044fe2aa1df63533ffb0a9b5121273a404500a75636a99c3ffb2dbd4b023a76404501c4601f58133ffb7a9941ec19d64044fffe814734c03ffb663006f2a7424044ff0b5184796f3ffb8246c7537ff44044fe14a6847d6d3ffaeb21181ffec64044fbdc04e5ba513ffaaf380c4fb3614044fc330224b7343ffaca1a2f08dfac4044fdca8e101af83ffa61a0dcc8b2254044fd65a551c4d53ffa4e3d29e842054044fb61c7b0ae343ffa672a6bb9618c4044f8f0e4fc65e43ffa475192d5ec424044f863360de19e3ffa6b575e581c6f4044f69d569f6b623ffa3353092b3bb24044f6a0a71d18733ff960121e4bd6aa4044f1b30d1d9fce3ff93766e601ebd84044f20ce8f19b903ff918b8a33057724044f09d4249eb4b3ff9548c79e538184044efcddf8072703ff99f110d7714934044f130590c13683ff9e79be545b6e64044f0d7552006cb3ffa15bc88649b944044edec813074c63ffa1a731ea803374044ec1f9eabd22c3ff9c297ddfa13244044eb062e0416b33ff9c886f3e9601b4044e8acc34cc6583ff96bc4322fb93d4044e7013eb558a33ff998e480a6363e4044e4fefc2dfd2e3ff97f5d776e3a604044e39322a5241a3ff92946db5bb0d64044e41d86bf887e3ff87dd204e767d14044e054ef0756ae3ff885d1964efb2a4044e1c2d465f34f3ff82c8137b432894044e2a9a48b87803ff804a8f04eb2154044e510078a0d0a3ff7b98f2a6616464044e541bdee15503ff7bf4785584ca64044e2cb843a03543ff7809a4cd070cf4044e2a846f100343ff75fb875fdb31f4044e363dee448e23ff791a0f4acbab44044e42af696d34b3ff78a91a48b42c94044e67985ac40aa3ff6d5d5d05f311c4044e6a6f9984bab3ff6aa52d209f87d4044e5c0d09754123ff67236ff5f5ffc4044df6e83ec33453ff6ca9e0acb12c24044ddc8268ea3e13ff61c43b321efae4044da79fbb358f83ff66743bf839f434044da273f635c0a3ff65540f546463e4044d90b1789113f3ff6767d3c632a154044d8e49ece6a653ff677b35fcf849f4044d7d4282d3d1d3ff6c5e0a3b311d54044d790143d57573ff6a5e3a7fd01154044d65c69ebdf963ff7367c6ce302444044d1e76f0911103ff6e39aee7227d54044d09dcd2982ca3ff643954f1852434044d13195975f0b3ff5c42f9283948f4044ce8ad4e79ad13ff684709e1a29444044ccd7cb1a3c8f3ff6863de43393224044cb9d58cdc3e53ff646bc307263a04044ca161fa09e0a3ff673780fe4ad1c4044c768935848273ff4de2c7be78a9d4044c9259aef2f233ff383d5241a77b74044c8ec6c5c41173ff35f3ce2df5dc94044c63cb803df553ff29f477ff9e8ee4044c4694688ae183ff2c87130cd5af04044c401d2d7c28e3ff29e310f169e524044c1b06153a4653ff2da164ee5b00d4044be61c5dc876f3ff1baa56554c37c4044bbcc49b3ecf13ff1ac60e70f5d044044bcd829fc6c933ff0a19926b5a9f94044c02d0fab77463ff0c6ae7d9b25244044be67c36429873ff0996c30bbf0c34044bd7053c1037c3ff1353dcf29af8d4044bae02d0ae9d83ff0be170a2185d14044b8673c6d4c3d000000053ffa4fda62f3a66740450e44c120d84e3ffadc7af67c84c840450d3817beb88d3ffb20d04d82364940450dd8178184833ffae830bc131eca40450ea0b99800813ffa4fda62f3a66740450e44c120d84e000000000300000001000000063ffb4cd0cbceb9d14044f1d8531d89533ffb62dc9cdfb0664044f1d5898bfcc73ffb57d427e884ed4044f2d5241c9d793ffb993a5cf3201e4044f24ec98b3da53ffb800081a781dd4044f0f26c09a4ab3ffb4cd0cbceb9d14044f1d8531d8953
+24;León;41;00000000030000000200000128c013efd374edcee240452b3f7184fd81c013c51df29e068040452c5bb988bc16c013d054ac0762ff4045260935712e9fc013e4ddd826b6e8404524f3c51a6213c01427453d909e0d40452608445ca64ac0142a9a37f180594045223f54adf104c014368c996fc1f440452103d4719804c01445d416ff31354045216eb81540ebc0143faea4b26b3d40452391d56634a4c0144cf412835cb9404523b29944e005c014600104b7cab240452796fa782bb6c01472b0b28748ac404527ea708c2f24c01493c7a726a89440452409d7b61b16c014bb1aec956a0a404521d1a154c64ec014caa7b7fb959f40452159750f2947c014e19a04924fbd40452393017e4920c014e9ef4c7e88c74045219875393477c014ebd38d056194404523487bfa7755c014f22cdff6b9f5404522fd1c5e3823c0150418c15bc43b40451eb0f5c137c4c014e76ae7299a5940451d054c98e878c014f7476c83bf7240451b754890815cc0151004fe27c9da40451afeb949f451c01525cfb8b1da2540451d6e4942d8ddc015351e9211650440451c6f8b86b9f7c0153ad74d957051404519818e4cabcdc01571e7731ee42540451cd1c70e0233c0158d6abb9bde2940451c584039673bc0158dd5b77975da40451a46dc0bc8d1c0158559ec51efaf4045195454356161c0158e352697325040451615ec077207c01584b46750463f404514e829f34c1bc0157c70c45aafc7404510a5f0d344eac015859c8c5f96b640450e0e5f3e53fac015816d7466731640450cbce7065eeac0158f7ad9baf1d940450b7ee142b6c5c0157c19b8c9f1b8404506955b241b9cc0158153290babca4045054ec33809c3c015ae5cfede97d1404503bdae9d72ffc015ec772e09d394404506b5ddce630cc015e88aff9a4be94045073a2030e6c2c015fe6cfe97306f40450ab5c32e4618c0161ba6e5a148d540450d59b088d1ffc0162c676d664eaf40450cb887bdc66cc01632a41bc26d1240450900903bd577c0163e277d7b089340450729f3bdec23c0164f96407c4f904045086096720ba5c01658af603b9036404506843f38e9c6c0165aa05530c52b404509e5d3144accc0168a489c6ac91140450a7ec6735b31c0167b054bf7d8c840450da700e8e6bdc01692d587a8cdb7404510c609da4962c016ab93ebe346144045122f31013afbc016bfab72c62c5b404511a77cd5ad60c016b502c9dedbc340450f672ed43a10c016f8c747047ef440450e8200cdd2a9c0170551682786ad4045117cee033983c0171b58fb217c8540451162305ad57ec01738a96298034a40450ff26619398dc01739d92c2bad02404510b5ffa3303ec01761208b32451940450e2bed8ee434c0177a20fa7f153d40450fa368920721c0178a0f3f96a176404511b8d25ba463c017862428ba6f8f40451299e163c3dbc01796f6e274ffb2404513fb1ae6bec4c017a57ac89e13fe404511feb48854c5c017cae01bb410944045122a7af5361ac017d059dba4bd2040450fd4d8272693c017fb90f74d6db6404512b663114fe8c018327d022309b54045147651b62b20c0187fb3c604757540451455b856a6b4c0188c90d5722f3f404515157e3f53b1c01892d92b10353e404514545088c855c018a40edf7d0edc4045153806345525c018d97e18004949404512f42c5776e0c018e73d00cd9688404514baee219ffdc01904390d1a785a40451561b1bcb73ec01902028d5f34d540451626c0242e19c0192cc80f78c3e2404516c9cbb2e8c3c019401648ca51d240451a7161254db3c019a3acfb4b3a664045190c1ada3ab9c019b62a1fdb89f7404519d93a81b9b2c019c4d3b09f4d41404518c5ba700f18c019d6e5b8b49a854045193c0ad73850c019e9b9f3a39da14045175329a86ff7c019fd8081ce29774045174c95fafe8fc01a1a9ff8fba14340451a07a7df5795c01a73fbe5bf0c1a40451a02f17b46b7c01a8df9bec8523f40451bd05b26053cc01ae0f8be1fe95d40451b4f13ecfa73c01aeee34a11c6fd40451cacb15f9a2bc01af07b31799faa40451e283fe74312c01b094f3db3726740451e8c8a7f16d9c01b23324ff829b74045207a23e1cb51c01b11679e38a984404520f45ffd856cc01b0f653bbb6467404522e923abbceec01af6eeef0b91034045263a9ac61477c01aef91725020f840452df75cd47d82c01b10f07e243f9d40452eb9ed6a2ed1c01b1d554c62af22404530c461a85563c01b4880ed9d9f314045315cca328b0fc01b5fc1c81d20df404533f2c0e5967bc01b533c5183c50b40453444f0189b1cc01b48a9ff5c2ff2404535f0dd0ce0e4c01b4c9a23128fe240453683b84aa381c01b41d0c20b0e0d404536b388a577ecc01b4980fd7ca9314045377651e78f82c01b4a83cbc96404404539f90a760345c01b3bb70b780bde40453bfb78669912c01b4b00f5a6e94140453ee250c90178c01b5920a236f70e40453f6c2320b8d5c01b658f6ce7565f40453e4cf7729b5cc01b71371175598540453e9a6b70e749c01bba9178a7a05d404542a12f26d67bc01bd72171eaa901404542460ff15c1bc01bea06d12a7f8640453f22ebf74e46c01c00fabc26eadb404540babb992ef7c01c1d5f9bc6f06a40453fba07b8b10cc01c2ed9767e6185404540fee8f61a9cc01c4eeb230a5759404541062840c475c01c3cdbee52d96c404543ea24699f5fc01c4885912c963f404544d3e5ce591ec01c41736ed15dc54045463754fc97d2c01c472ff14e2541404546e9f7fc8c95c01c3a83ab4e55824045475fe7d1e0dec01c398fa9f904b240454883f4b0855ec01c225e22864df440454ac378bd4d76c01c335f62cd3aed40454c893446ae91c01c30220653f0dd404550fc53daeaeac01c12410cee2da44045529681726c96c01c04762dbfe7f440455249a2dacfb4c01c15fed2474ee440455372d3313fe9c01c0cf04e6d5c8b40455432bfe1be07c01c0fe2b038ed5d404555117110275ac01c2e46c4d7d83c404558ee12845e6cc01c0b261e33021d40455ca0ea169adec01bf5f582c5e4f440455d0183519d72c01bef597849f14440455bfe2bc80d7ec01be43bd0d55edc40455cccfa7bfef7c01be42a7458fe8640455e74246c3d63c01bd682ab5a501d404560a4d466b04ac01bc99eacd3de0f40455ee9c6faf31ec01bbe0eb4cea94740455ed4999da8fcc01b783fb1c6b70a404564c21bb4cd8ec01b7824111b1f30404566d9b912f56ac01b5c7d28fe2ea340456964041a85acc01b7c309d67eb8840456fda05086c4fc01b55c0769f90f7404570e73d0e5becc01b5c7dd80347f04045706829b950b3c01b5698bfdd83b240456fc831229df6c01b434c96e511f140456f5491b049bdc01b5e2f30556e834045740382d06e31c01b4bf84f5c899940457520b7e635d5c01b152aaee66e1a404573061a62fa18c01b1607f199936e404570f76cb161c0c01b06d4552c574c404571080791d5e7c01ae48c8e185c184045756ca1265e6dc01ac2765d87f911404576134b140320c01a73a2f0d2b2e440457657c895fdd0c01a6d0f0b8ba46440457542e40490a3c01a2faf3c296236404574c171ad74f7c01a0ad48d7a4052404576e0bbeadadec019f586261f4e7b404575cab86f0b96c019ea12aba0a49e4045777f0cffb196c019bb7eff0e936c40457849f3b21c7bc019c435ae48e45c4045794160412223c019bc0baf3e4f2440457b6997dc88b6c019e45d16d3ce6c40457bdf4a30835fc019e99c5ad8d86440457edfcab841f3c019c9275844cbc940457db7c008a1c3c019bf96e8dc9a4240457f1ba4f2cf51c019b24e588ec89740457e6a786cabd9c019a124bc77eaf440457fed15fc8566c019a4f93148912e4045822ad6c7913ec01993d0fc5c5c784045822055feedbac019969393ceb208404584e7b9601116c0197e82dd036a8840458542fc9f2270c0196fb4b23d992d404587a0372d12dec0195526e854c634404585f3500a3fb1c0194e541761f9f9404584029e262c76c0192e401d6b39a440458371af08b06dc01924090232345b404584a7bf74fe0dc0190e07bba4f6084045820ed07f8137c018e8406b663bb0404581240c4c9d1bc018eb5bb07fe513404582f2aee51681c018dcbbb47f2bb84045860aa9536d5dc018b6aed34dd6894045861e41b8cbd3c0188bf28a7f2807404582afe533539dc018633a0b58678f404583ec03f4ac3ac0185bf8adeaf922404584e22cbf6a7ec0185e0e39873dd540458890d48a419ec018533d3ff3d84c404589b6f192c3acc018156e36bf59c8404586e2715baf4bc017fc3cfc45f26440458769ddea2b83c017f4ae04be33604045889aba876119c017e53658a3fd6e4045885bfed73e9fc017d94035357d21404586c6dc508100c017e0edbee866394045853a14251d69c017d37c35497cbb40458241cc8f4b74c017bbd9ab5787264045815f5a22e12cc017a1b56233372140457ecc208c5eebc0178c7a96db348040457f3e3c979c25c0178dcf1c2137a240457d56308c1784c0177269eb89aef440457da7ddb6f745c0175f35d582868c40457b6ccf7d118ac01712b29df7774640457bf93c09a422c0170a88139b797f40457c8076501c00c017109cdd8aa3f840457e3d78af46dec016e9bdbda171e7404585705875c07fc016c5bc4b867765404587362b88f86bc0168bfc3827ed394045847b0b594f7ec0164c91088410a44045841bdc49c26cc0164774c716185f404582d364a9d65cc0162926b8c03f3a4045825964822d0ec016067185b1e3c6404583a84f4e0abfc015f9a7365caac9404582b812dabceac015ea01fb35738840458707419fa9f7c0158fd250891e3b40458650aa5a8fa2c015884c515622bc40458b2a936d6bd0c01579fea8df543140458c1b1d253273c0155fef3ba6631b40458c034767f385c0155da44f32cbb840458ab96e37e369c0154ec90df2d44040458a2f4e45cd04c0153ef9788d969340458ac5b71fcd8cc01520e45c691520404589e92848daa1c01512f2bdaace7e40458b351f01df0fc014ddcbb21a99e040458ad0810c5a01c0149759a14ad7af40458ebc3899be47c014900e11ef1e6440458d2c5c92b0a5c014682d5f11660d40458d0955b241bac014602798a8e1694045924d57704323c0144d2b613557b04045955cd7c9777cc0144e7740286423404596e7d9a12430c0143ce603549e3d4045965087e4b2bfc01429e06ee2833a404597a3aa1a2b8cc01415f9a39a79694045977d604eb079c013fd902cf81f7c404595cb162b070dc013fc53d38920f3404597b8baf8752ec013da2d901fe20d40459b38bc04e4a8c013944362bc73f640459e7c372a8608c0137be9f5c1518940459d2fa6b492cdc013717bcc655a0940459a47d3da9950c0135bb399ed48e640459846d69a114ac0136838900331a84045962724c78a9ac01356989b28204140459427bc7eee3fc01367dc165aa42b4045901ef606cf4ac013585858e5271540458ed0be269f5ac01355801267944240458d1361e52af1c01318517e66a71840458a228d1b8f87c013113e1e7c4a874045898f77c22e64c01310708839861a404587138c576f5cc012f930756020ca404587179602d003c012ef7e9eb048a24045858479d11622c012f92a0308c8fd4045836f99c74d18c012f44fb6cc85554045826019eccc58c01307279ac60be0404581fc0a4756acc0131156bd2610b64045803344d3102bc0132de404ef1f8040457e4a94ecbf39c0132ec4171ba57840457ca7bb297b13c0133a9fcbc065ea40457bddd4870065c01335e9614f72a740457989819a2fa8c0133ca7d024565d404577156d1c0490c01359f77b7fb0c34045740fd65934f2c0135a829991a5c940457299b1d162a3c0136c087487802c404572237773a9f1c013765bd967066c40456e266e71d63ac013859e3328c3bb40456ed7295403b0c01399ed52c30a4540456e144c7740c3c0138de1daae955d40456baa49b555b8c0139c877529cdaf404567ad37d3785ac0139560f8f1cc6a40456480853ea15ac013a2e827689c18404563c4715a4684c013aeb7861c41de404560f49e51531ec013be038b7230ed404560d397aed538c013bed52d883d4040455f4ab0d9b854c013ac81949522e840455dfb4fbfe465c013a9df9cc4579a40455c3b4f5d1ba1c0138fee90748a7440455c93c1f84c47c0137c96bb31b39b40455a9f6dae8438c0138ff2d0c27aba404558aeaa06122dc01399e702944025404555c681306398c0139420ac72e52540454fdac4b66ca8c0139e84e6da143340454d339368b0a2c0139c2cc2a31fa2404549fa95b94b77c013a9ef3e9a4d27404547022f37d994c013a44e2b3131264045454dcec43797c0138d4c60f0748c404544bd52af2d08c01399996e50959b404539aff64574b2c013b2293651981b404537d38a698385c013a3c32a61a8674045378a65d6ebd7c0139eb45a3a332d40453657d55c9bebc013a8c88036f2054045350cab78d8f4c013a8423bdc1b984045335a462530f0c0139ceb05b6bd0540453179b4b97d07c013e005161d00764045304b3eeda68cc013efd374edcee240452b3f7184fd8100000005c01539cb1a4dbcaa404522c3483841d5c01561a1684da4d7404522464006bc6ec0155d822fc5957640451dcaa853e06cc015369a97707488404520416ebbb0adc01539cb1a4dbcaa404522c3483841d5
+23;Jaén;61;000000000300000001000000bcc00810d0b7cf1ff54042cdd17fb5a901c008691862b38fa14042cf256de9a3afc00876a12dd1634f4042cda64167ff43c008b4a015e8274f4042cc3aa9ce5ee2c0090ea93add87c24042ce9a14f00d55c009605d6b739f124042d2498eb8d9c0c00a1991c21afe454042d1d19349e312c00a5eae57e40f014042cb4c0002481ec00b2eeb5237ca0b4042c831c61e906dc00b7eb81ac1aae44042c9756c5df72cc00bb074468a0e484042cc99067496dfc00c0d3fc67ab4644042cf02edaa2bd2c00c4b54cbdf3c114042cc60233c814cc00c4abb4ed3ab414042ca45d7e3dfc2c00d05527fcc0a7d4042c3a4755dd8acc00d79bba0bbb3074042c2424f9f944ac00dd73f9120b5694042be67205785c6c00e35bdbb9e0c814042bcfd6a842d4cc00e34e6dbd2e0494042be7f3de9abbcc00e48dbbecf807f4042bed5bce2965ac00e556fdd99b4da4042bbabffbc7d0ec00e784729e8ba474042bac8edaf9b64c00e6b3cf5875eb74042b9f56622629bc00e9cbd1cdf117c4042b4ee14905ad7c00e9a73f47713664042b382bfe13497c00ebad325092c844042b1702d12f76ec00f9b6af208bde34042b06daa5f5bfec00fdd1da8ee876e4042b1aa4058be3bc0101354a3bdac404042b5b9aa8c9739c010314bed3e5c5c4042bbe68babab7bc01047d820e041c14042bc6e707a554bc01059c1d0f8df024042be37b766df08c0103d6f3c8a05384042c0be7959d581c0106469643f11304042c179dc7c8f95c010657993613daa4042c3ecd9ec89c6c0107d3f9dbe86274042c5fea37ca4f5c0107be10edf521c4042c6f34ce2cb81c010a4dafc87c7d84042c99ebd44ef74c010a52db94bbb964042cb3fa610d3ecc010ae9d65a36a4b4042cb53233d9cc4c010a6ef8d04fa804042ccb835cb01e1c010b0c9a6d292344042ce287d283006c010c055f5ef9fa54042ceeb83ab3491c010d49222fa22684042ce0ec0510241c010e1f89995790a4042cf5a691be72bc010e993b87b7e734042d1dc4cc783e3c010a850353b64f54042d73b97c85591c010bb83dc87c49f4042da6dcd6b8bc8c010f3f13d2abf024042dc174ccb9345c010eaec8c3865ab4042e0afbb0e5e68c010d41c9ddf3d574042e29583e26f99c010d3c88c318d524042e3b36d916428c011259e412f5b744042e5f522928d47c0111967c3bc35844042f38ec34fa914c0110cb119cf1a404042f5213ef066ecc011083ec197f6934042f83bb4a187d0c0110ea8a9c6a7334042fc99ee2a61f6c0112346d23b3a834043007da9a8494fc0112106a08baed3404302eb7d088bb7c01109a42a0525f4404302de5765e4d9c01112fa07f6f7f74043052fbe695cbbc010f6a1ab1c3425404305e51839180bc010f5afa4508a65404306c925785f8ec011019970319ee74043062b47bd9509c0110191674ea15740430874569a7caac010f1f4a1385aa14043080985a32034c010e9061a651fd940430a373a62ec23c010ef41ee1d3ab540430ab2f93c1687c010e24cc73f2a7440430aa41fda65e8c010e920ec1a004340430bb280dbb299c010da4e6922361440430b94e6ae97a5c010df8e5c71118840430e24aae2cac4c010cf316c78680b40430df0d1e6df6ac010c73f161e0227404310654673e055c010b2c39e723dd8404310dc502f64bfc010a4ca70e3283f404312950dd4e607c010ac4f60c3edb44043172b7168222ac010ce00ee926f5940431b67198e3553c010c8b490a712e540431e71c75818c6c010dde2f85d495d40431f9c27ba1475c010d53b1873ae124043221d2ae8e1d7c010dbfac696631540432283c4fdedcfc010d7437fa062fc40432695fa0e09c0c010e9871c35e3094043268cf2b32192c010e84a8cf4a33340432774e1061d59c010f44345f24a02404328556a6215ecc010f3241c8c4a1d40432bb79d8c539cc011138f84ba30e140432c763785b979c0111b2c6c6f94e440433207557ce7bbc01105b01da5be7d4043336ec0e64248c010a0507823b954404330cf410e70bac010946739305e7e40433176975422a0c010069a151d263440432f1d0cf88357c00f522a90cd423f40432f354d747d00c00ed59318179b4b404330049c898572c00ea4fd3e84a00d4043324aa43be796c00ea3f4628a5b31404334d67ee7bc93c00e48ef1054c8154043366f34201824c00de99a6ba6972f404334f5fdb54468c00dd70e3a6f2b7640433651a7565f77c00cf6b9d1a603134043326e31541386c00cafcfd76e3b72404333eac4666e41c00caa23bcc006b9404339c9bbaf5ce9c00c89f27d0200ae404339dc3457e533c00c4803e3c2e6224043383eb5ecd03dc00c3a4026f2c43f4043344e5987e443c00bc4a351c30512404332f19e7542f0c00b6609eccf06f540433411fe9aa533c00b487d88d3090f404336372cce2579c00b0372ebe3710740433844ae70405ac00b00064d6e6a3940433cd47fdce2a3c00a9ca8106ea6ec40433db622eb8132c00a712b389b858b40433d58eb8d9bfac00a3c426396972040433ae9457181d6c0091b36e236b8c74043382349077d45c008850d1852986540433d3738a88a70c00805269f849dbd40433441ccfcd0ffc007f014f288fc9c404336dc03270d1cc007f2b4b4160b744043399d8386e642c007d0c3858c829640433a39f3db7348c007b56cb9e797d540433c589dbd8d0cc0073f0d8ffa4d5340433c25ecbb4c14c0070d4aadce2ef8404339f0449ef3ffc00709b638ae13c740433b48d5647e8fc006ce3f79008bb040433cbf0ff175e0c006d5881fdaccfc40433d4f9d65f0bac006b88a7c67a6fc40433d1603280ecec006b35db0e0323040433dffc79ec32dc006a604cc4b254b40433cfc7e608323c006a58b25c10d5a40433e63de8a1724c00680f57c3adb6b40433ee2d7e4609bc00673e83bc6b33640434063e11f83eec00656e0897e54ab40434057dc3b65eec0064c9ae8a418cf404341fcf94b9714c0063d58fa75b00e4043413e0be351e4c00623483d5b802f40434439cc095870c005700285519f4140433f9b1d4568c9c004ef6a160d216b404341a1b71f6678c004a40029bde0ee404340743680112ac00488723732a4cc40433ec79a464568c0049d453159e19640433d18cacbaf86c0048a08d0f02e3740433af6d6b01449c0049da5dcf3e16440433796bed7db63c00493378c22268b404335022583361ac00467c5439682b9404333995b885e56c003dbddd27b03fa404332b68589528bc003f0650b3eefcd40432f86da3130c7c003d4e5c7bce4f040432ca5e9dab5d5c003e1b39f3a7e944043266ec691f536c00387ec426f21874043248f69f36c53c0037e29b176a774404322d529f56946c003921300852d7440431f4eaeeb20b1c0038659c5a1bdde40431dc75f5a5891c003a27c3c08106740431b951c46dd8ac003908b0683d2b340431a3b68bf64b8c00391f98ae8484b404317b4703f5830c003bf6951f58d834043161e74b0e827c003cb00e3aab4ca404313f0834236a9c0041a7bb1c9889740431030d27f5814c00429867216eb2140430dcb36c20063c004513e5ea43efe40430bdaa1e65e08c004d9bd0e57a06a404307eae4db0b7fc004c44fc1110a72404306cec986f222c004c81d35ce76a4404300ec27708752c004d74850af4d944042ffc344a34819c0055bcd74119fbb4042fb101c4255e6c0058490e0ebf1334042fca5e9ab7734c0059f12dd970e3e4042fc5ad1bb51aec005c86a065073834042fb318fa082a8c006132854ddd2da4042f64508c8a678c00623bb42d90ff44042f5ad2c79ecbdc0062f810d7578414042f684d920cbb0c00646e0f78d50f34042f5753f5645f7c006732e029426604042f0c2601b6276c0068e8b73911c484042f0251529432cc0068ecc62d5c95c4042ed2c9a9d7aa5c006a190b815fde64042eb283896a801c006fc37e7c5430d4042e54f914b1f16c0070ad6734753044042e145d79f2792c0073af21d8ba3854042e0264f6c713ac0073652d06da75f4042d83abe2a503fc0071281a29bbaa04042d7356dfe93cdc00737b5dfc2c0274042d535dbfe87cac007d2c7178126064042d12662c48a22c007cabb1ffc1eca4042cfbb5e78b9d9c007e00ffe2d758d4042ce9fe74a9640c007d34e7fc86ac64042cd26fe062abdc00810d0b7cf1ff54042cdd17fb5a901
+22;Huesca;24;000000000300000001000001113fd62e4d6255d7f04044be7a61ffe91e3fd5bd43da6cbfe94044bdddcf222b683fd5f097b17bd24d4044bb5360b4399d3fd6bf1587af3efb4044b9ea461379753fd57e7db79967784044b4278e5779c23fd3c49d2310fc274044b59c91f3aa543fcecba5d2af5c464044b6d44440ddd23fcc0b49d5611af84044b3a82e02adec3fc760dc9fe4c87d4044b27bfc947f6f3fc4f28ed567c85e4044b4081573ebc73fbfe8b9d2ca11dc4044b1180049486b3fbb3658f9e3a8a94044ace7a394e77b3fb7e690e141d76e4044accbd1df1f243f83d9fbbd02ddde4044ae229da665febf686e7a175974214044b1a737df36d4bf97f62228156a424044b2d0a812720ebf9dfcdb29d4313d4044b05c56fadaf5bf803e4d5c6e03d84044ac84e501a1ecbfa9502df360e8d74044ae238cc8b6fabfb29cd82c403ea34044b046b12bfedabfbadf6d1a5710aa4044be2431404778bfc11ba7234d95934044c2ba16a510a4bfc40d873a7a02024044c48487f172ecbfc4283e46a6715d4044c8c08a1394b3bfc56bdf5d595da64044ca61d984154ebfc4066cbcd2eada4044cb8442243cccbfca5590f882aa8c4044cd16e189d96fbfcf551a3f2ca1db4044c95bd2a4273dbfd358fb1f56c3994044cdd0521d2e3abfd40177570222f94044cfe29246691bbfd7026ae61f50a04044d14f013a3cbdbfd770cdf142ab7f4044d70767f5aa08bfd7f7de35216c594044d8143dfed7fcbfdb6d2efd189a004044da4d286b9dcdbfdc798c9f715b1d4044da125091b541bfdf52bb144ed2b44044dda73cf27119bfe0991c2e08fcd44044dd49e177a119bfe005ae54b403cb4044e172d618476cbfe0620c4930edd64044e45708988880bfe08933c438e5b64044eb1b784de6e0bfe0de5c6f75366c4044ed2abf374929bfe1c4455198ceef4044ef87b64f2956bfe34e57f17af9684044f1007a1f1124bfe30e0d191829ee4044f325e5869bd5bfe42dba2e4ad2484044f4da1a9bc043bfe50ce9ab5d6efa4044fa8f365e8bd2bfe8e715a01cb7e94044fa8bf92c1521bfec515fcfda84824045007547fa2e74bfeb393f8d6fd0da40450358f1f1fde8bfeb2a4685d3f28f40450560ada1b0b7bfeb6c96b88281bf40450686d77b8da7bfea0393c953a42040450bd724789f12bfe9c0ca724bef3a40450c584ec96f53bfe9c153acfb4b3b40450974d592ccaabfe964b9fe68fc18404506f682da20afbfe8f3633e602f6240450700f0172127bfe86ba845c00ee1404508a328c88febbfe85859a9a5bc7940450a2d150c00c0bfe8a5288e3e9c9e40450b2a5d0d6ea0bfe82847cf43ece240450b98b7807926bfe86819f5a815e740450cdb871c35e3bfe81a834bcf615240450fd8407362a4bfe858fa9a31e7514045109f055a4329bfe81194542cca5b404510e6bf08b655bfe847725e278ecc404512cf8416fb71bfe7eaa04175e37f404513f53c7e46bebfe850481deabb64404515ca25bdffabbfe80d4058c6d1c9404516227186a269bfe8511cd3a8e79e404516deb813a49abfe803deb0354da6404519862db05639bfe85e5d9496e19540451b7395970924bfe84cd4b5e08853404521bf34938584bfe8100e2cb5e2f3404521be47f127c3bfe7f3a9653e9e2140452386551fa84ebfe752dc1a6a05fc404525ede4dfe90abfe7d3abbbdb0d0240452b59dac9b208bfe786122ebce81040452d3a56167bddbfe7d5c88fe271e140452e4b62fb8909bfe790d2853fe7c440452f5815e75927bfe8e4dba0357b4940453214b1a85925bfe8b2abe9a84fc040452c611dd66e7bbfe9cf1c8376f60a404522a1551e594cbfea04e0e3c1413a404521dab64ae66abfeb017e12e69dc040452433c89596bcbfeb7433c8d1b7e64045232ad56dd28ebfec100d2b0330594045240cf7a3ffbebfec8481b5de59fa404521ab573e21c6bfec7f5f74ebcb7c40451eb94912d4abbfed67b44552abb0404520efbe96759bbfec73024c71aed6404524b2bebdaf3dbfec8c096d5e74a240452601749256b8bfec25b398c93a1c404528d14ffec5efbfeb6194ab25e6a340452b828352855ebfeaf7ed73a52d1040452ee4593298a6bfeb0382ae1218ff4045313bf5c90938bfea4b240f42ace8404531393996936fbfea1752acf617ca4045328e3d02727fbfeabbe1c161c5d4404532a0a23b4290bfeaf2604fff7a53404534253f5283e4bfec4b8542274a7b404535e54587a732bfecfaf0dec74297404537ddc8fc1065bfecae54a0268cc3404538ce91c053babfeceb98c396ff4740453a03e388eababfecae7601865f4d40453aee21c47e7ebfec3885eefe0b4540453a80d0122f37bfec1268c6cf181240453bba077a6a21bfecb4641132be8040453d529452eef7bfec7d425c2c36fc40453ec4660d9d6fbfec9a6bd54c5e6440454156859db939bfedde9e83b93293404540c0a35c18b9bfed538acb39689c404544c7077d9a2dbfecbe8f10986d65404544fcc2c4f249bfeca43c207de01140454647ae5fa457bfecc771b7300b13404547ad8c4ca166bfed6531d449aa00404547138818ceeabfed7dc9c89ca2a04045491e6f7f9d4dbfede4b536582bbc4045494c8b0cd2bbbfed97e18b4acc5740454b4286cdba09bfed13d51194d2e240454b26e9db9dc3bfecf36815794a2b40454cad96fc864ebfed4516349fc4d740454d19107cfad3bfecf2fbca889c3e40454e74de27acdcbfedaf4097cab774404553ffbe376ee9bfec943952288e37404554c7c96d46d6bfec28959a7de78440455814e47136d8bfecd97b318236b0404559d6ef589b81bfed84d1a42a9fc5404559b3efe8fdfebfecf0708907aea940455b28ffb79f83bfed04dfc2eb190a40455d016defaddfbfecb31f1612327e40455e2a2e116050bfecd12f594dbde940456156f3c22f0fbfebf227d028a1e0404561265142bdc0bfeb1efd54bb29734045649903fd3aa9bfeb852d75fc52ef40456637496910ccbfeb3f005836f0244045675eff1eae98bfeb6b1975ea345f40456c6c5e2444fcbfea3211db1eca1b40456f2fedfbbdf4bfea323878863d6140457364619c85bbbfe90dec9b5a7529404575f5d2369083bfe7453fcdfed998404575ab6f176d8ebfe7919177e20ed4404574e0c3f1ff2ebfe76c4fd30d3ee9404572b3bad3b733bfe65fcc97257e9e4045707c6ffb6e29bfe5b7e52f4cd24a40457138c81d908abfe4fc081761d79d40456de236a7981cbfe345e4d125770840456a71486a858ebfe32bcd0deddcf1404566fe539a2858bfe236af8b62381e40456749d0c62307bfe2417a83d4b65140456438fc2ab35dbfe1aaa806913616404563920cb6b67abfe1661fdcbf3331404565870d837ed9bfe0c062b932bc1540456606b20098adbfe0cce30130707a404567f4d4f82e3fbfe02b276a41003f404569e9160e5f3fbfdc44df9548c96a404565ceb5c59f31bfda2996312f4cf5404567616806c6e6bfd9438804f1ac55404566448d5a936cbfd753c5eab062894045687f8568ac8abfd6329ff132c3e040456b3c8206aaeabfd4be7e658ba00740456ad927a408dfbfd40c8522d8e1c840456cb8424450c6bfd054442718c00d404568dfe345f138bfcf25dcf82ce6ad4045696d5ef35578bfce8fe0884080cf4045677ff436c915bfc826195577bce1404564ba7d1c93e8bfc6a16682151896404564999c131b91bfc47a771263b86a40456625d0f94617bfc2cd0cf075c0c440456358c225a148bfc32b388ea301b340456274f4f03da7bfbf6f135149266d40456035e53477acbfbb3d6ff80a932c40455c3d250f0329bfb186913615323940455be9dbd7bdd3bfacddd04cab76b34045589d8c7a43b63f31635d501ad31e404557b87691e0463f90305f8814a5c3404559d57ec02d0a3fadea557c66e16940455949bae1345b3fb3f6d76f348d9e40455b7f939a37603fbdf0784d9990e040455b071f3afb203fc180428e22a09c40455c78cf9f8ffe3fc4b57d7f208b5540455c91651140893fc6807be42f9d8540455e577309f4063fcd0ae6832c44d740455bd0fdba66aa3fd0a3ed7563da4540455ba664df8ed83fd130d872fbd3a94045599bc3c4aa2e3fd0e05f31a4f9db404558bbfd8729d63fd2e5a36e95c60c4045562b3eca37943fd491175e2f4f14404557691fd430c53fd4cfa64933026940455a3e44e9e9ea3fd70e06d938151a40455cb77af41aa43fd927e8f7d0b18940455b4a931ce3f83fd94cae26f7ef1840455989faa6600d3fdb038747f7295c40455860f0bb69783fde5947621cde3b4045599e84c5a20c3fe08977efbf84d64045587e0fc59ad53fe0dfc183ee619e404559ed13f2aebd3fe2cbab0483a5f0404558e51f7ef6563fe31b612988061640455a4e8d4e29263fe51f47507690004045586de6d66be73fe6424d38dcaf324045544dca2b65673fe6802192c434c64045522522c47b1a3fe65b4c588cf8bc4045507d9b58ade43fe6a599138438ac40454f7f74161ec83fe88fc62e780d8340454e3c9acc2fd53fe8410c414e4b5f404548f3d2b7bfc23fe7b4b83611dfd2404545cf9f001c163fe816ad753275e3404544586f0ca82f3fe782ff2ae5534e4045452a0bb322be3fe7174928a41f404045432f6bd7ae413fe7096accc9ea11404541a4734d90be3fe7bfbe44517140404540b79b10abe43fe6d3f3ca340d9b40453e5cd63171e03fe66a9333f9d79d40453f6d30358e133fe6543e9a89478140453e3f1708158a3fe613fe6b10ab5b40453e50daf0c94e3fe6aff887aa729f40453ac7d3828d533fe6b97c0eb30ffc404537db79876f3a3fe7896bec8d3182404535169dcf10fe3fe73aef79c25b27404533deaad078a93fe7e00638e55ffd40453140588efc213fe7250b33a9947e40452eccf9e5ac0f3fe8ae8b54f7171240452ce1dc2664a23fe7b107a0f7f68b40452b1ea55c9b623fe7cc3539618f56404529c4d5f2e63c3fe877caed23af5d40452947122d7f153fe7d5a65fd0a0164045268cfdf2e81d3fe78f16442051964045204e3b50a7d23fe6dde3848e088640451cb6c2d722083fe6757daffb7d314045182500a8cff63fe656b012236583404515fdaa2b486a3fe6d7da5d9542ae404514d745a5eb513fe641845a4ad7c940451361750dd1ae3fe6633a1060e50c40450d7545f6c90f3fe56fcc8f17e909404507ea34dcd6863fe58168e61d80c54045060c161229e83fe504f8ad7b4dd440450522a0e79f3f3fe4db32b90fd68d404503115a094fa43fe53e6948ddae36404501e3129a9d8c3fe49634e8c8897a4044fdd53ad400373fe470773334ad294044ff4f79e7efe13fe3f7e93e2532484044fef4b9905a013fe36024ab3019f94044fae177067a4c3fe2c2b1c1613c644044fbcb022b6d303fe1faeb251eeac94044f81790c6c8623fe37088bb7253d24044f5ac1fbafdba3fe309626615777b4044f57f8adeaf923fe33b4484f2cc194044f44b21e535ad3fe2f275308c42774044f134c118cab93fe377504305db844044f072c8d2f5ba3fe3707526aed1a14044ef97e34fdfd63fe28e8452be1b8d4044ee8b34c50c423fe28fcb92c39a274044ecea9ce1a29d3fe1c449ba197d104044ed2f7aaa48c73fe164f43e895b3c4044e9030465da143fe07ea85780222d4044e942e1e0f4e73fdeed453d4be5dd4044e69658197a2d3fddfd8fe670149a4044e1eabc11fabb3fd983e6d2bb00fb4044e0fff23363b03fd94ed3c2e039e74044ddb18eb66f463fd89f9be94c81b04044dec2880968233fd7a1442c6e8cbf4044dcc1e58634c13fd79818149ec8834044db6aa99fa9b23fd50169affa8cac4044d72d5a6765d13fd4e123696f37fa4044d4c2f3609b883fd6e92ce930f55a4044d0dc327d4d2a3fd621dae44542074044cf99356a33eb3fd6600e71f782f34044ccbb3cbb8bf73fd9babe6000236f4044cbde2b41d5c13fdb6c739dd3dd5a4044cd1aa8ab62f93fdbe4f9013bc7e04044caf7bc66c57f3fdb8a8273fcebbd4044c859b05547db3fdc9a6446f3d1c14044c567fb6b349c3fd96ec2ad8682de4044becb16bae8b03fd62e4d6255d7f04044be7a61ffe91e
+21;Huelva;61;000000000300000001000000cfc01cec3b2078aca140429a0a079e628ac01d2fabb9a41d784042993ec93c521fc01d52ce794a43c7404297e5780335afc01d4f51cc8c9c4240429723ae185f50c01d7cc5bf4d9978404295d22557b98cc01d9ccd96319663404296538900bc8bc01da7dc2fec2be340429d00d93f8812c01dbbefeaab7c6840429ff75b7227ccc01dafcfd322b8784042a30b621c326fc01dc4ca498fc0ff4042a7d8acb6cf2cc01dc30c4aa24bd74042b20cca44428cc01dd9cfd1fea9ad4042b459c142e717c01dc843f29e17ae4042b59851b90ddcc01dd49a9fb1943f4042b6efd759d4c4c01dd3abf6e955f04042b9e6154615edc01de00d810bc7fb4042bbf90d2dcc28c01dda9a01da86db4042be329dc3ed22c01defd6e07f8fb54042bfc504e437c5c01df7fa08bc89814042c2d67114aefec01e0c00acdf57d14042c32f67aa3bdcc01e1710a1e3c0034042c7487ad6688bc01e06cfc2ba3e1a4042c75f0f6b3e23c01e07c96cac36e74042c89364a58adac01e1043b76d72a84042c8e2ab774dd1c01e017bc1b9c0a34042c9feb9d7b034c01dfc61d47dbd934042cc088798bb23c01e03c427841fd84042cd673f4de27bc01df4c7fe8f702a4042cd4423b0df31c01dee01ee7546b24042cfd63dbbefa8c01de1e05ca196954042cff3c12d5c5ac01dde8addd8d2834042d31b1c43b616c01dd172c055b4d84042d2b87a720375c01dd2d26cc140ca4042d4b7ba990fffc01dc6ce16e893974042d515f13ae2a2c01dcf5d2b98f9d24042d6ccc44083a0c01db6c4c95961014042decb4e92b524c01dac628e7328754042df5a3e1e0ca0c01daf3691aee0f74042e12ae7d11b4dc01da21138619b504042e239f9268333c01d964864fc36a74042e1d382ff2362c01d76babc98bbe84042e57969673b93c01d4be7fd4c3de84042e86b050033c7c01d224305746f504042ef3dfb13c33dc01d20f4cc78c79c4042f2dfb3e4f461c01d1842056f3be04042f317490ff1eec01d0c5c4d191e9c4042f64f8e550f49c01d0586610b3b504042f61b46be9187c01cfe78306852a54042fa2c6d10a493c01cfff73c7bcb184042fbc66884a3bfc01d0d821e0e192f4042fd6bcbba1702c01cf955f100e7394042fefb2de6cbafc01ce4208bd57a8b4042feb49acfad30c01ccf124bf6bd5040430071edf4f6c9c01cb13ab89ed3a74042ff20fb9cb2c3c01c88090232345b4042fffe4e5589b1c01c7b99039c97a6404300aac76fd1dcc01c8428baf8fe9e404301614c76254dc01c83347a38b3da404303d299e4dcd3c01c65268ccb6ec34043059cb4676175c01c44b305952f16404304487dea88eec01c3cb9d7c1614f4043023b63e625dcc01c0274999ebbdd404302e6848a4f0ac01c029fb2b84e914043059d22229d42c01bf5e1000a91d5404307186b080326c01bf30f3b202b5e40430d4c7a38f892c01be693b1337a6840430d5e747f83c4c01bcef617a76f234043138e679d8446c01bd99b5fcaf464404313c846a4c3dec01be02116d0fcde40431545a4c51bd4c01bba041ee25d1c40431aaa208dc7b2c01b64ca9f427263404316afaa13dca3c01b2e2cb287f478404316da6f2a62dec01b32baaed6dc5f40431267f9434d5dc01b4364ff77dea340430f60ad658f8dc01b3b35306c0c2140430e38dd8e8866c01b14893652aafc40430e59b9cfefedc01b1834bbafaa3940430d65ae701567c01b0f49975ee7ff40430d91615e3639c01b1491ccacd29840430cbaf90b804dc01b086a0853d8e840430bddf61fac6fc01aed8f13a61c8240430b86d892b9e8c01aeae6620569de40430cbc88b1eacac01ae106380ea06840430ce120543bf5c01adc339c311af940430bd6be8640aac01ac131e0e77abd40430cd465aa4b3ac01a9cb31c219eb740430c59849ebe50c01a98e15671a6b740430b85d5d5bd95c01a917735ca19f340430c7c01e3dadcc01a7d08e226d12640430c6abf465173c01a527556ccc8fa404306c13f340c3bc01a55962d4ade43404302b974e5490ac01a2eca37c716ab4043039965708bf3c019faec0b2b823b40430272efbafd31c019f78966e04da240430136299b0c94c019e7ff5b95520d40430100b786a5b3c019dc7d5960de2b4043016f5f89527ac019e53b841830ac404303206f78d622c019c6415fbe230940430602b1e77f67c019cf4c399d0d4b40430729aaa90b7dc019c6fab71e6d5c404307a11185ecf2c019780f7749ec1040430642fa6ea42bc0196fb6b896e86d40430221cef68c7ec019635f853a80ca4043005c6ade89fec01936a6d39c7d584042fd372043a888c01901ffbb47d0604042fc56372a74dac018f4faf6ce1f804042fabe362eeeb4c018ce5a6caa6fa34042fb24dbd1106dc018c8b167ca1c4c4042f9706df17523c018b890d149085d4042f8738a800ff5c018bc5a57ba51204042f6bbeb6ce4cac018ae0c418a6c894042f474d0f5aef8c018a7accb9457554042f57fe0c9369ec01894b2b5fddbec4042f5d2e34fa3b5c01880084cde32af4042f3d038045be3c018a83c997d2ded4042ee5653f0534bc018a2da3073cc674042ed535174198cc01891925ddd783a4042ed86bb5f55ebc0187c947b99f6af4042e8862d7ccc15c018817672086c474042e609a474fb10c0188d83e97b7b994042e5d19effc630c018893b6dd0793b4042e4d7aaa9ead4c018ab70e353323e4042e579fb09b242c018bd1684038ddd4042e7a35bc94345c018cf412f9794aa4042e71bb9efd05dc018dca29845dc844042e55154efa41bc018d1bf7553f2a44042e20d41402b02c018e11c50ee85044042e0a9c76878a9c018dd6af4c91dcb4042df5a4f188e64c018e3d6ece9d6514042dea2a5cb9ae3c019027b86a2e0af4042df136c8e9e94c018fa899ada1ca84042dfb6508ff694c019025f9a66c0764042e1aeba5f8442c0191d2d9dea589c4042e1139227a423c0193e7c7a3dcd854042e1e73e1cf128c0198f63f753e7924042dfb46a397383c019cccb325cb8574042dc04d818a7b9c019e686b3159f2d4042dcd16dbdc00cc019ef4aa627adab4042dc288d02ee83c019e4ce48a2dc0e4042dac383afc4ccc019ea28e35f469e4042db1b73478f26c019f9071fb788f74042d826ecf62f69c01a0174df6135364042d8277b4a8a4ec01a015fd27888524042d57fb2524d2ac01a19f8a1d698c34042d505a25430e3c01a24f4674589784042d35330cbf229c01a1e4ff11dd3c04042d178f746b7bac01a2748f46e2f124042d014e6d98ac3c01a1d4f0dfc8f554042ced25c8c508fc01a0f59b1de452c4042d008ae7c7717c019f0870894c66e4042ced8678211b5c019c5e8b7cb192a4042cfca115fe88dc01995105cf806404042ce3c8988aa5ec0199bec199097344042cc9e2a605965c01992d7da0ae7aa4042caf5e52e0668c0199c6c4c9e2d164042ca3f5acb7501c01992e8149e3f134042c74402c84b22c01977431aa0aefc4042c48f8ac0158dc01978245b766ab84042c2461ba73f39c0196d12ac43da0f4042bf83c07a952ec0195ae7b371cbba4042be19c88aeb23c01954f20d1a921f4042bb78e7bfb9b7c0193925a476b9be4042b7c6f6abe5c4c019400ccd7673834042b595f7541b1cc0196d00abc3e00c4042b4bdf8afbad5c01972a5d5f095884042b0183fc5706bc0196257d76001514042aed04b7ed0e3c01989ccfd38135c4042ab32d4cb6b46c01954fe01bcdd5b4042a64908fdaa91c0195f0bae78bd9b4042a3fcb68e35d2c019592ae5cb90264042a32acd03e579c0196620093d74084042a1f10f570affc019707b9521babb40429e79f07e4f33c0196187e386192c40429bf0b30c6d88c01969dc1ba7d9d740429976f74fa4a6c01966f97d6289ec4042971ca5704515c019582ef8b351f4404295b604a53c77c019704e4348c3d8404291b7edfeb1dfc0195e93a552a42c40428fbdb52cc80ac01970bb1ce5d8a740428f0336bac0f6c0196cdbebf98dcb40428e299809a195c0198351edc4a54840428c463c043d27c0198ba9f12aa51b404289c3dbf5bd3ac0196a6fee35b95c40427e86e56ed192c019748b4e74a48f404279100ee11960c01983fc77a41538404277a4755dd8acc01952f3f8f1d5014042730bfadddfcec0196194f28d481f404271cf03bc55bac019695f4fbe25b840426dbe9da1b366c01961cb2b25e2574042663c838d8279c0197c2ac9823f8b404265c478e92881c01996ba52a1b87740426754d54244d2c019cc0c3e96827e404274326083002ec01a0fd826948bb640427c7c9182ec26c01a654d341052df4042830c66a4be81c01b1756b81d933940428e313c33c917c01b7f3b7faa519b404292fcc48e5c46c01baaae1bb1b749404296910827b924c01baf90f4039d6f404295c870b219c3c01b8eefd3f419aa404292bd1a76bd91c01b69133f91aa26404290dc2753002dc01b547363d8752b40428dcf5260fe7bc01b681044d7dc8740429068a7afee00c01bc82aeaff00c14042960be2ccbe5fc01bcbbd2b88dea6404294fc02312a11c01c1188059d78cd4042998eca8cf058c01c3d157e27b46140429afb48423074c01cec3b2078aca140429a0a079e628a
+20;Gipuzkoa;21;00000000030000000100000071c004d24bd8234abc40457db9a3c346c5c004be00a7f9366b40457e698ab0fc15c004ceb9c86330a74045802cc7a30619c004c5b314b73e934045812f0ea0d7a7c004658b5fded1a1404582887033662cc00432e54f470773404585cd43fc3f68c004628c4f48008f4045899c522a331fc00453f52030aaa1404589d117638db3c00460caeefc21a440458ad6c29c13bfc0045ac03223828040458bba8e79de71c00434cba4fbefc840458c3f325c95fbc0041c0516b79ee040458b85b160c6d1c0040257b01dc81b40458c5b42a8be72c003f8404b636f8040458fcbef3093b6c00401647d136244404593714c1fb5a0c00413e6752e4425404594aa2cf19d09c003df76856d67b8404595e022cab03dc003f09962bd0e9440459726f1b38372c003e522f77bcd00404599c8d439fe7fc003feefd00faaf740459ad988b045e1c003fbca6fc7b07b40459c2671a852b4c003f3f399e28c1f40459ce39e4a835cc003b4be3b8f782e40459c9a8bb86ba8c0037e1dfa1994b040459f31c65efd1bc0038315d47504314045a03c055f0f85c003583078b288174045a240c93bfc39c0038315223748a94045a5bf9bbd4685c0034b36452dd3f04045a97ec745cf42c002d2cbb49ed89e4045a63bf0190ac7c002bebef697c3ce4045a6d4b6d77e3dc0024322d16ed0a14045a5c9dac5eff5c001d3e3d5f536f14045a7cf444938b7c001a68238cc46b84045a6f621960e05c0019e9c33d2c0574045a7e69b50ba13c0019280a28559244045a71d7dabf4b4c0019cdff833e9f94045a68ad53fa6cec001843dfda2bec34045a56c3437256dc00164f1c54c1c5b4045a4ec636b0964c001325e2614d66b4045a5e21eae15fec0010b44b4ff95664045a4cb54f93cd4c000df25ed5810404045a68d1b7a0c94c0003e65e07361924045a9167627e943c00011487fdcc0464045a97f30cf4d27bfffdae45b89be854045a86e8d6d4c9bbfffde35ca44e5c14045a9cbd5069354bfffaedccbfbf50e4045a970d5f6413bbfff65f938e67b764045ab4861ce5132bffec7ced0c439674045aa802004f1f1bffed987403f7a044045aaf8f4af252fbffe223f0570cf984045acbc7e7c6df6bffdd6ea9ce3c85f4045afaa2e9f1c32bffca9002dbc14b34045b2ad2ff74728bffc9b3aa91e46e84045b16e8b3aa895bffcc04aae3dda454045b0f57492345cbffc76d29fe4503b4045ae8436707f6fbffca0b7fa9c829c4045ad2e8faef8ecbffbcc50d54961e34045aa4288d790b2bffbddd93ef60a084045a87fc3e0fc15bffbab7eb3e51f544045a59bfed0cd5abffc8829cf53b2274045a4b6830daad3bffcb3dd6a0f239a4045a36312942c48bffcb9543e79401140459f8766550d68bffd1b30ed80180c40459e97a9253906bffd5a90a0295e5140459cb1d5968625bffd999c5343852240459d3ed149e7b4bffdc99359b984c840459b25d3235317bffde1dcf44877fb40459d80617be852bffdfa5dfc123d4e40459cf320e33e42bffe06d7563da45040459daf0dee99ebbffe172bee456d7440459c3dbf7c09f1bffdfc04ef1f7f6f40459c1add05d502bffe17ba755c4d8940459be4aea928e2bffdffbac153ea2f40459af1241e5c26bffe1c4b10161a1640459a780b83b093bffe32257ae3cbed40459b78af8b95c3bffe3e2370a60dfa40459a8841466026bffe73bde38c122e40459b0c279eb312bffea05dd7a1920c40459cd26af7d6cdbffebb23cfe8e10140459347d3dee4d3bffe6e652d22c54a40459163ad4a36c1bfff29103ef89f7640458c7bc147ef94bfff8b9a85c18f4640458befb1f23398bfff9a3662567b2740458aac772e8216c0002ebe72ca8075404588583fec1806c00029dd079c4560404585fb4717b065c00054c6ac999dee404583cd39a8b200c00039f8bd6b85e040457fd9eeb3d255c0004316f79349f540457e5c765a71b3c0006bace5483b2540457cf82501e47ec000c336583ce92740457c736ee28bd1c000d3fca1c90a6d40457969cd83d6e5c000ef907c6d168d4045789c2f8daea2c001729b4e71f55d404577b23974511cc00189f3d4dfa70140457979d366d609c001ae9b879f34fe40457996b6904a66c001b95d92be6f4d404577ec095ba6f9c001e27069d30b084045769b165e07c0c001e6ed928c817b404572b00180efbbc0020199445f2a88404572a751c47f07c00250fbf7904d744045737edf1cf548c0026b272d51ae0440457685abaea29ec002b0d935771674404577aad49938bbc002d6a02b72e43d4045799a7bf7723dc003036e83a77b15404579596b4957c1c00347781b6f9d1c40457ad0f20d1a92c0039b84bbaad54540457a6cd6f679f8c003d277894e72d540457ba3daac19b5c00402773051f12940457ad063b8bfaec004484da832165c40457c99d9d2bc1dc0045abd09e12a52404579a29e5ac97bc00468c5f586ef0c40457ab42a15ca8fc004a5efa74ae5b540457b6cc61e544cc004d24bd8234abc40457db9a3c346c5
+19;Guadalajara;42;00000000060000000200000000030000000100000111bffb17b1cdb1bded404449f062a2a64dbffb08c315e1353140444882c36d974dbffb3af3413359a8404444e442ac9a4abffb14876b7fe6fd40443e503eba588abffbfa43dccea29040443b40327b8e7dbffc9122f8b109d7404434e32fa97fb0bffccf6f247272864044350507a04c2abffce4adf661b56c404432efcaa01932bffd63226fb8ece940443686bcea78fdbffd86763da788fa4044356928baabb0bffdb51e26d3f6b1404436721f6415ccbffddbe8850f1e01404439a56943eef6bffdca6829817b0d40443b3242bfba8dbffdfc7fef238ed240443c4ac9ca305dbffe38800299b84e40444085cc1cce98bffe1a7454b302184044423c542c85a3bffe659b0689ba8740444540bb8924fabffe8d2d7572e29040444554db731c9cbffe78c89ef35352404445f26c81e6febffea9f17c848aea40444a9a006091d5bffed2bb344070d640444c0a7fe72728bfff45d26500fa6b40444cdb1673814fbfff637878d9fddc40444e4722a501bebfff7d6ab2e27c1d40444de5cf839c94bfff7458b248bd0940444bc600e2a06bbfffc4b782c1438b40444aef7d756577c00049508542636c40444d00206594f4c00079622676f3634044500984ea7134c000e185aa3d449e404453609fd95feac0014167ec9abfd7404454500817c8ecc0015a9f5c59d0b5404450ab7bb7640ec001b5e4b5e6702640444f412c7691bec002326222007d4c404452874af7f5f1c0025bb773c1902540444fbb67ef1668c00249d04e6a23e940444bcdf89bdd97c002579970319ee7404449fefb1f67f2c002ab093a88b46740444899c3849367c002e0f7a2ca80ff40444a525d44ff8fc002d5cabec4653940444bde6921aca3c002fb079cdffdb640444db75c37b956c003313b4728de7140444e8e293cd40bc0034cb33a32338d40444d1224bf40e2c0035697e0648cd040444aae6852faa4c00310ce81690767404446dd1878b68fc003114ff13798d14044453b21dd2818c0034b68c0bc50dd40444347c6f19f1dc00369f90dd1019a404445373ac5b4e7c00396d102c509e940444323d1248f1bc003f7bf4a945f0440444120b014c16ac0041bdae411b7e440444204b40ac53cc00437c7290daf2f404445aad1518e35c0044f49170eff114044445aeb4ab3a5c0045ec0b11bd2804044426d22515272c0043ad4de9cb68d40443fcaf1421978c0045b0a4fb1907e40443cc0c6d1828cc0042f2db5ce612a40443bc726adf24ac00409493e0c80164044396d5350c628c0041fabdc9ad3b44044364ed4842640c00457228351727e40443674fc89dc6bc0045f6dbb66c04b404437aeb9cb571bc004b09c3ea0b5d4404439a212af2f2dc004cbe3af925456404438c04c6db939c00521f26026a8ae40443973e0551d72c0054f8e22ba6188404437d082af1c63c00562a07f335e494044396c053f629fc0057b3111df9541404438bdc1ccbe8ac005692d85049d5a404437c7a4a8db1ac0057ae81052bc19404436bfeb7f8ccbc005a0aa3fda0aa340443672b2f69e13c00572377a7341494044338c099b00c5c0057b24c2d8015f404432f1bd3a3b43c005867d3dbac30240443293c320a694c005a40868731fcc4044353f862c1851c005bd4c6b016f86404435bcd17530b8c005ba74ef0cb51240443435421f3ce5c005d2ffb04ee7c6404434a9a16caa56c005c87fb618ab48404432d4bb69df28c0061487062a4cc1404434c768496a83c00628b11b045717404435f074692adfc006149fb96e4b39404438933de8767fc0063f60a531525e404438da90c0e925c00652013de50a53404437415e03c157c00649ccdf8e92cd404436afe20e052fc006659cad52e78d404436396a03ffbfc0067620c0a6092540443411d06873eec0067274de8a75a24044320b52d5a118c00689255557a8e740442e985488760fc0066bca00a5d375404421cb975a4695c006970e18bee01d40441a0165e2184ac006e7ae4af8ef0c4044199d464e9054c006fd6a29d9312340441637aa61fa02c0074ab81db594f04044141b4fafc93ac007936b8816ede1404415b5c096b38dc0080a62cd65e01540441ac45d678f31c0082b27097ba12e404417ffc4865748c008191ad427f11c40441644aeb0ad07c00820b29fd880934044138befe942b6c0088298373b4d004044158941949749c0088af26424dc734044143687f1a676c0089f3ceb31ab8e40441544f5d13093c008b4b1f5a85a9f404419a405f96938c008a2ba0778446040441aac45d4dca2c008a33bead691e240441d27ab50e258c008e023cc854ba740442481316995acc0093ad05befe248404421c15d314d44c009631ded50d0d340441df94672ab1ac0098e3b46fdeb5340441fbfadd565cec00993e06bee992e404420f74e19824cc00979430323bab440442285c69e3489c009767dad215837404427754f21fc2ac0092133a424eb7b40442cde9310f1f5c0093a396186bedd40442f10e5ebd7abc0091b36a502ae5c40443011ca690086c0092591a19fefc34044319aba44ceabc0090b61f7b094f8404433dd1a12e1ecc0092dcdcb60a23e404435b50793f312c0093e7e62feca434044383f12082f13c00996b9d839a3a14044389bb8f2692fc0099981f4c87a94404441d972463259c009c8696004bc424044435283dfb7d1c009d9edbe11a6a640444513d5e6b817c009d97816897bb74044440fcce4fe25c009ffd37ae6d105404445ac251fd2b8c00a5088706b3bd24044440a0d5f8f07c00a60841bea278d404444cd7ee1baf9c00a43cb1aa3a2e64044468600dc2f27c00a45c5f57e5806404448d43a636cfcc00aa04e9e377cde40444c2399e0efcdc00aa6bd9debf4ed40444d4e0ba48188c00a92ba04845a5440444e5c51d672a4c00ab547cacd76ca4044501bcf205b8dc00a96e31812c657404450999038b69ac00a882f5390dcee404453dcd4ccf669c00a9e0baa46ffb3404451fec2865578c00ac3c8f83d2434404451a18ec60101c00aee383f58fdc0404452f2b002b407c00ae6084379042c404453adb1fd4645c00afbbf7678016f404456bf716d5e30c00b2596ce15d5b3404458a278fde515c00b34a2e50ba1b940445855b1dccb37c00b3ce56b87c108404455b6b33cd038c00b6799f1d920c4404457580db98d3bc00b69f38f36f2ba40445610058481e3c00b889c3315c5d44044564c757ff00cc00bbf96f10c8bef4044584fcf7eb672c00b7ac46a52af2540445d2ea6a4a295c00b88f99dfff48840445e6dde4a22b9c00b9a737f064e0140445e10c6e672aac00b8e03c80b9ced4044617b706a318ac00bac0d821ea8b8404464026cac50acc00c17b342d1d087404464ed6e37c10dc00bef7d4bec4dd84044663299ca04e1c00bd1b01813d0a04044696a706bf8cdc00bd5628cbd124540446b376601d65ec00bc20b289f7dd840446bed43ee49fec00bcf8625c9684040446cf6e10c38b8c00bb9fc20de831440446daebd57b9d1c00bc8066ba15b2740446e9ab74ebedec00b861e43a6b7aa4044700b776ace33c00b8f04fe0e04c84044718c9ce48559c00b844910fc37db40447211304b6eb6c00baf4e748232f640447301109ac6afc00baf431ad439204044740d646a6b62c00b8d707dfd980240447413a42e9561c00b9c3c2af5ef53404474d8c3f356c7c00b974115f4dee6404476155df7cf52c00b547232e721d240447ce764c48bf2c00b58ab9954021440447e687b42db36c00b27d5911693404044800918f453e1c00b82f03d2e22974044857633855ff4c00b68757e315e4740448867a1edd996c00b680cb011ab2440448a9c6ba41b87c00b964cf243764440448a5251f40af7c00bcd1d86b4cbb740448c31b47eb376c00be8f66580151840448c11d3022c3cc00c12f7d28164114044917567d878cac00c542b4903ffea4044932848f68b5ac00c5159de5c860240449520110205eac00c234040f3f745404494d899f0bda9c00c00b2bab0732e404496dca0456b81c00bbb6cb478061040449779218797c2c00b8da07aabba2540449b9046c5c85ec00b384ac108374b40449b57ddde2850c00b401fa19fbc3840449df94d4b03d7c00b2f147648757f40449f22e45daf80c00b322d3fff1e844044a094dce6a05ec00b4acc6bf63fb04044a15edb286b6bc00b5238562a25904044a2f81ff2f5bec00b473a60c660c54044a15c1b5cb063c00ab0d861ab6baa4044a06355bced53c00a96c6be3fec2a4044a180c30d4a30c00a52436b424bde4044a103d7a8147fc00a34c12b2e011c4044a33454880efac00a31b20f42795e4044a150602e82b9c00a08bbbdc1fe234044a112b35ec53bc009d996bca3119c4044a5be37823c1fc0099918f78c82ca4044a6f78970ceeec0087ec5ecbc5ef44044a2ffa79585b9c00824e4eb157c024044a501bb7d2a5fc0080c439a2b06614044a4671a28d3bec00799de80c322c44044a57520da5156c007878f06a1377d4044a82f119f7e7ac00740db3784e2ba4044a9efda384541c006f3affdb420594044a895499346f0c006ef630da7999e4044a321aae68440c00693f544f73c1e4044a0d8bf3a4e41c006343f2efb26634044a002bc863643c006166aa16720ff4044a313357e896bc005bbf3154720384044a349315b5b8bc005ad26855877994044a040e8c014d0c0055caeec2263bf40449e5c53347cd7c0052b09b2cb07c040449ebf364de736c0050899032cec5940449b8c29ef67adc004fdbf5c18512740449ca36b096356c004b7446817741940449cbdab1df2d3c004bffb6b56f744404499a054267b73c004f5c6ec74432f40449901d03127b8c004f9fdf3adae9c4044980fff6d6f2cc0049eb48a9ce2b6404496de70090dacc004c3342c713bf24044933b7ff9c692c0049ac82b74c547404491da356d419ac00457198424563b4044934916d94f2bc0044ac5f575c100404494cda1bc8662c004238bd2b19336404492ed75cd144ec0041220592aad6d40448f36b56d4e7cc003dbab862b27cc40448ee20291de42c003c177897965f4404489ff82141f7bc003701dc6a09f0340448940cadc98d9c00359ed716e3d8740448762e53ae05bc002d7b6c6366bde40448b10e9a107bcc00296567e3bf01c4044873ba5dbcfd4c002594123b6be6e4044891ee0e997e8c0021bbcb49e243b404488a50007c047c001db6fb2fc7d5040448c6adf0f223bc0016702af7f2b7c40448ab87aa58d99c0010e0a243d996040448f1dd464a44dc000e0167f03a76640448c7c8a166641c000a6d45a23a6bd40448b0d879d42c7c00092d219ceef4d4044894759f58394c0007393c3b08838404488eb9f9a536dc00062abc6c2c79140448a084db93dc7c0008664ea90572640448c42d33d9902c00080737c23920140448e7a8c6bbc45c000679b85b594ab4044901d621f9e9bc00061851ca3be7b4044938a1cbfe56fbfffdf65752d5c3940449479a213a1dabfff5822113314674044961406e8518ebffeeb4d32c9e7fd404491bd51f8a3c9bffe3fc71ab1313b40449110aba32045bffde87512036b4f40448dd00145e172bffcda48280ce46a40448b81a9c5ae17bffc1fc01a9df7334044870cad1dc118bffbf442fcdd695b40448456cba4eac2bff9e1125fe52921404478cc3cd9fb09bff9b9f92d7de78d404476bc3fa5a12abffa03fdb623bdf640447307e0ce504abff9f1385d9485b4404470b0f2c6dc73bff96ba57ddc017c40446c29dac2b753bff920ba9c1dad6640446a4027536742bff8f2c38e9bcade40446a567048ac30bff8ad66c8d0ad9c404467d603be61b7bff8a376c798c1944044615fb5e859c7bff8fe05ab7f63fe40445eb02f097a4abff8da768f1fe57040445a5a484f3df0bff891f9064cdc63404457f03b379fbbbff89fb5c309c43e4044543c4f77c8a0bff909a6adcba22340444eafe12eae95bff8ba6e07223bc840444c2f5bf00d3bbff9947a2b8c9822404447f161e02273bffa25e32ae5ba6440444a36ae254a70bffaa9d288924f1240444a806bf84315bffaca0ecfda260540444bcc3c4e64e8bffb17b1cdb1bded404449f062a2a64d00000000030000000100000005c00b0e9cdbbac8b6404450b34293899cc00afe0d97a965a7404451f3ae493a43c00ae8aa3d6f90f7404451b7c82dd6a8c00af94d1cfa72df404450192ec9b0d3c00b0e9cdbbac8b6404450b34293899c
+18;Granada;61;000000000300000001000000bfc00bb8b974081830404258f2175f173dc00bdc8c024eb1364042594096ed869bc00c34fb6c6140fd40425cb02877ff7dc00c1cf0d52e89f040425b3175768246c00c44868822816840425c6ce10de637c00c684eaad54d9d40425b7726bb5e43c00ca2343a2a847540425c90ad45e2a7c00cd172d410968440425f518f90677dc00d4303ca28c76440425f8f19a7b5abc00d69cd3801a41a40425d629ffd8bddc00dc30c74c7410d40425db32238b16fc00dd1ea863d93ad40425c0deb636e6dc00e002ebe50d57e40425e79800b4a84c00e2404557198ed40425d574f8581e8c00e38327a59401640425e740cd7a9cbc00e421bab685f4d404261d98cc618f6c00e22107f3a58fe404264873fc2ec2cc00e25287a615eda404266a6732d0481c00e9d12c9cafe8640426d7b48c0e40cc00ef0dda8b48c0640426ce3105b16fdc00f1fe07fee330a40426f0bc875a51ec00f59497c75c75840426f1d4ffee84bc00f6faa96dbbdf140427102354aa0cac0102fa97c76da38404273966c643d7ec0103eb4f7aa2c4a404275bf45db567ec0105c1ee06ae45040427750a8cb210dc010661efb878f1a404279f2c5d44ee7c010aa9f698111d240427a7f845e62d1c010dc97935a0f6b40427ef238367d40c010ece3092cd8034042822b1e6b13e4c01101f8d6c98375404282f10b8e8720c011170cbebb784d404281e85155bba7c01125f4d427dfee40428f4c70fa71aac0115002153f3d944042978f9f8766b4c011056ff79250d940429d62639bf584c0110d921dc6b1cd4042a15414f10f08c010fe1559f32a494042a272829c8590c010f22f725e6c474042a60b4465cf57c010f217f1fdf8834042aafd280da9fcc010d0eeaf2854bc4042ad2c41ee482fc010a1a0bcc5e5f54042abcee5e5bc4cc0108245d3c9c12a4042b06ac26feb64c0105801913e70174042b3adf51d704bc01000d7498ea5864042b377b39a0fa5c00fdd1da8ee876e4042b1aa4058be3bc00f9b6af208bde34042b06daa5f5bfec00ebceb3e6bba544042b160488ea8eac00e9a73f47713664042b382bfe13497c00e9cbd1cdf117c4042b4ee14905ad7c00e6b3cf5875eb74042b9f56622629bc00e784729e8ba474042bac8edaf9b64c00e556fdd99b4da4042bbabffbc7d0ec00e48dbbecf807f4042bed5bce2965ac00e34e6dbd2e0494042be7f3de9abbcc00e35bdbb9e0c814042bcfd6a842d4cc00dd73f9120b5694042be67205785c6c00d79bba0bbb3074042c2424f9f944ac00d05527fcc0a7d4042c3a4755dd8acc00c4abb4ed3ab414042ca45d7e3dfc2c00c4b54cbdf3c114042cc60233c814cc00c0d3fc67ab4644042cf02edaa2bd2c00bb074468a0e484042cc99067496dfc00b7eb81ac1aae44042c9756c5df72cc00b31c59f75c0664042c832cd4b9193c00a5eae57e40f014042cb4c0002481ec00a1991c21afe454042d1d19349e312c009b9d7a3fc85334042d274b8d5853fc009605d6b739f124042d2498eb8d9c0c0090ea93add87c24042ce9a14f00d55c008b4a015e8274f4042cc3aa9ce5ee2c00876a12dd1634f4042cda64167ff43c00868603a74bd644042cf2651f4fb7cc007d34e7fc86ac64042cd26fe062abdc007e00ffe2d758d4042ce9fe74a9640c007cabb1ffc1eca4042cfbb5e78b9d9c007d2c7178126064042d12662c48a22c00737b5dfc2c0274042d535dbfe87cac0071281a29bbaa04042d7356dfe93cdc0073652d06da75f4042d83abe2a503fc0073af21d8ba3854042e0264f6c713ac0070ad6734753044042e145d79f2792c006fc37e7c5430d4042e54f914b1f16c006a190b815fde64042eb283896a801c0068ecc62d5c95c4042ed2c9a9d7aa5c0068e8b73911c484042f0251529432cc006732e029426604042f0c2601b6276c00646e0f78d50f34042f5753f5645f7c0062f810d7578414042f684d920cbb0c00623bb42d90ff44042f5ad2c79ecbdc006132854ddd2da4042f64508c8a678c005c86a065073834042fb318fa082a8c0059f12dd970e3e4042fc5ad1bb51aec0058490e0ebf1334042fca5e9ab7734c0055bcd74119fbb4042fb101c4255e6c004d74850af4d944042ffc344a34819c004c81d35ce76a4404300ec27708752c004c44fc1110a72404306cec986f222c004da5f92e29b41404307dd57943b8cc00485e6c4d6c55b40430ab17ba30e8ec00374f7415955764043058bf80a2c18c003607e675b7b494043044537391ea7c002fc10e304d027404302facd1d211bc002bac49749324e4043034fae7a3790c002630e160fae414043005bd4e7f94ec00244ff603f52484042fc15b666951cc001faa2a1106c9b4042f79483dd3c28c001a98d50be91ff4042f5479b863f05c002019a4a3b04054042f2d6b6904a66c0021f83a3049ec34042f0c2e365a6b5c0024ee44dd90d094042f14c29862da4c0025c0ef9cb91164042f02b2043862cc00250aa3855e56e4042ea6df0c9564bc0026a08d5e77da84042e775d92462d0c00236db0a9f8d9c4042e35b218ec601c00275cb0ec2ccaa4042dc943425b2a9c00273e738109b374042dae85df9fdaac002819706b9a4f54042db0e4640f967c0029632cb595a3a4042d8d0d99d7be3c0029b3971549ad14042d60480e36a48c0027bbceff125584042d0a435e821f1c002889c242fd7814042cf9858d1d347c002c3728a4fe9664042d08a456d0b61c002e063c85167fd4042cf85a7f74ccbc003215233f6c9ef4042d0f541f66f89c0031c3f9ca30e634042cf1acc02bc37c00302020b3f70a64042ce5e86f1d4cdc002f1734716e23c4042cbb8c2988537c002ffdbfc95924f4042c9f66484d3a9c002f08d6a25269b4042c811e3ab1348c002fe90307e10ec4042c7573cfdb751c002d888916fbab54042c603dacb3d2bc002de3ae11ee0b94042c2da7e18e837c0030c986a4d2e654042c2eefdc46677c0032d8050f3379b4042c1b692769841c0034b29aee13aaa4042c3313f05570bc00363e5dab235144042c1a5f253ab34c003a68ccf30d5354042c134dc84ea7ac003a901291fdeee4042bed36e3c1dbec0041cfcf37d880e4042bd61285fabc9c0048c3125f8f42f4042b9233ef8a80cc0049e3e54f1c1474042b6ea8b18f84ac00515c13e347f4a4042b275710a1d29c005253ff03895514042b01ee87eeb29c00514a91605c8394042aeaf41362b36c005192c90e040254042abf24819d2c3c0053c9f44649a1a4042ab9902924deec00534fbe36e577f4042a7fa616bbbf7c0055340a2a9dafd4042a485ad3beb72c00547ea6f9ff60040429b229c1f8e6fc0058ab7647d249140429bce31b7ef2cc005dd3b576665b240429e608a99cc70c005eb7e06c10f5540429d47db20779ac006127fcdeb85cb40429d04f37a0ab3c00639c5e06bdd6c40429fdf2a2db72fc0063b6653d82a8b4042a19eb3b08250c00684e05e12f4944042a2aca1f8d27ec0068e0e7d93a0ff4042a3a03f3882b1c006c3595bd5ad8b4042a3bd863b7682c006ffecb1078e2e40429da052b0d1f1c0070c42489c486d404297f2fe6d6160c0072993030520af40429561efee28d7c0076ee421d30e864042940a5e796e3dc00771d45647cf12404291e50023ab1ac007936e2cae5ece40428fa46b3318a0c007977a828e4b6e40428c5bcec4040dc00800864c8ac81b40428c2834e7e933c0081ebe7a7101c340428e8017496a24c0083c92b331ac5c40428e7f1f115f9cc0080bb21bcf1c10404282fcd50e75f6c007dc2eb6659c01404280c395115ad8c007cf3dc8ebf53a40427d4277e15a70c007ec8a58d6525440427aa5cc55b720c0083c154c985f0740427948940301bdc0084022cad2990c40427658d2f755afc008751e5eee5592404274ad6973fbbfc0089351ed2a06dd404275ab2f9088c7c0088ec6f47941be404273274df13e60c00841b12460ee9440426e337666b107c0083b683232461340426c16a783b478c0084c8e81dad87640426aee565054e9c0089774a17030484042698f3dd5ce7ec0091d917d62cea4404264ebf1712d25c009078ae38485724042601c87c6c487c009267142b8615b40425f3b29b50dc7c00a1237fa175dc14042606f9ddafa6bc00a7058947ce06240425e7e6ba92404c00ab5fcf6f24b7340425e801dbcd45dc00aeb0af48352b940425b70e0c8823bc00b39eb79716c3b40425a86f9b5495fc00b5af38bb10148404258d3cc659ec1c00bb8b974081830404258f2175f173d
+17;Girona;51;0000000006000000030000000003000000010000010a40061013ee49743f4044d6f66f1d194140063236dc79d7cd4044d9a31305fd5740062079cd0f56a44044dce3c939559e4006354c53eb8f864044de12dbc0c1b84005f53fa8f38fec4044de13d47df11d4005cc657e453b854044df45b905225d400584a58e334dcf4044dee9fcd3a5af400574381929a54a4044dfc6ffffe63b40057e1c8bf436ec4044dee36213e021400571c362c0bf794044deab1d7a8f3e400542c183b240744044dfb45f8fffe040051f12682648d94044df2738d406fe400508900e3327284044dd910e6127f54004614f5b070cba4044dc07e03e6ea64004200265a4b94d4044dfd4a31ec252400420b634266fa34044e186056e90124003c0d0468781724044e38e83439f704003c703e76b33ab4044e51184d17a4b4003a561a53685ce4044e4603d7bfb3d40037e030a20954c4044e6c4cd3984324002d19a35f6b1f94044e77f3e25cce64002c20810113c8b4044eb2ee84f231840029a3fbf99c49e4044ed8d56cd0db24002a8dc58c21f304044ee7d1c93e80840029669c6a0c15f4044eff0a4f8f34740029faa8b732a084044f1065691064d4002b3414668bc7a4044f1cfc57878404002d88c9f9c4e3b4044f0c813e031af4002f521e9f972364044f166e1a3151040030f58c9ce48564044ef94d71445d5400341c3351e6fd84044f29d316708d840038a4156030e4a4044f199f102612f4003d929ce5a967a4044f54197648b1a4003c5c44b5a2cae4044f81bb039072240038a002651b48f4044f880a3e5891840037e7db55149e44044f9573c1e60b64003880fdfd828874044fade6776533b40036b1424d019084044fc067f7a4d684003cb6560e90a2c4044fc137c9ce7354003c7614b7d099f4044fcd6e5aa694b4003e778848749f24044fe099679201f4003c00fdfb5cc6f4044ff35fd8a514a4003cfe83c5023954045002a376bd20c4003fdbff784e4e040450031cf2bb2f3400406d50ac511284045013d291182704003f614726c9dd24045017ed90a2e134003f3c90bf805e1404502b73bcbb31d40040c9dd4197ad9404504218d3addef4003db951b271a434045064dd1dca37c4003f818a683d1a04045078d8bef37054003ed69e2d8e3ee404508b6e1e743cf4003aa0ff947542840450a25dc2c2a1a40036b185b409877404507d3d03493e4400357167cc420d740450851234689b0400327eda2e3cdce40450b1b179790194003338e444850c940450d27184e3bb4400309bb029fed7140450d4490be28c54002ecc1d92039a940450f7ad327514a400290db8964537840450ef274e562cf40025cee865af87440450d235aff663940026e114e9824b640450e611ab9b71340026679d41b398640451122b95b897240025511acb6e8f14045108a1426b9ba400228b1950557a54045128fb9b5b29940020f6eb0148ddf404511be96d1f1ae4001b744a325bd074045122b31bcbb884001a46c4e6e08584045111a0fee011d4001b42d1b8e73434045107fdad47ffd4001a135dd17d9cd404510d3a10946f340019af6adc6cd2f40450fdc04bcecf54001828604ab244c40450fe89ec973154001728543cc329e4045114ff849ecf840012607fc11a2af404510c1f6c9ba384001015e9df8ac8240450e612ee21e4c4000cc57690c4cda40450fee9d72fe364000cf859d04d574404511e62d14a4ed4000bced9b34b57b4045127bd08e80eb40007bf3dfcff8954045114d829079c7400038a0d7d9f9ba4045138f85dc19ea400008614e46008d4045132b0d995f7c3fffd8e8e383c879404515f008b154773fffde8b1445b23c404517502e1397403fff72df3c3b19b1404516e11a27afae3fff6f37fa983719404519731fc37afb40000fd6e7e158d4404518c91264fed53ffff67444feeb374045187dfd57954f40000c01b02e5b884045176c462ac2de3fffef3345967bf3404516044f382a1c40000988abd80202404514cb729a265d40003958d79027df4045155450d83d4c40004c8d1e0b2ddc404516de745490a64000765552cb5c944045165c317fe5fb400081e0c7891eab40451883a7b2ea8140006ae3ba9c6afd404519039044fe8540006cc27d462f6d40451c16e5e464b340003d6e88042c1b40451b9a58e085ab400022e05503ac4c40451db81058a3ed400032c7c99c857640451dc66c8948c84000396194f8fe8d40452057a41cbb89400056ef0a3969d940452279bb84f33c40008df631418de24045253f33780dbf40002654cb19aa88404527b90bad65dd3fffbcc22b66beae4045262561b732bb3fff312f757d497140452867c7c971933fff178490955b694045277bcd82f78e3fff074ef5a04474404528821056f66d3ffe732e0a3aa7ad40452961ee9244663ffd7a369bc872f64045273637db9fb53ffd5663ae1413ce404529e47b9521bb3ffd6e25f6c5d5ca40452b67597171993ffd5af77d2498e840452d7568f3f08f3ffd865c14febfba40452d734779ab013ffdae50fa437d8440452f50a3f1e2303ffd47a27093f801404530d1ed45f1b03ffce587f72fcccd40452f5f1b4c145f3ffcccff1dace426404530621f7a18cb3ffcef99415a127140453268a8faa4663ffcea65e457d04440453583b93d4dea3ffcb6c5dea49930404537269eb89af03ffc4f97a95477a7404536ca45b60f133ffbb5f24cb07f314045385e7bd8b5dc3ffb9eaf61c6b34740453b27053469b73ffbbabe56563cbd40453ca4a9d65b4a3ffb9b15197de69c40453e8278e30d233ffbf11aea08944640453f6bfb16c8553ffc33e7846f4c2540453e4e6a5de42f3ffce0d83583110f40453ebf3997b77e3ffd5ae318577e8740453dcd6d5dc8d63ffd8f635b3b876340453be2b32cd7693ffe1127ab484b5240453af7ef5a964f3ffe41d2e308c5c4404539560e1cabe63ffea68a81b4dca84045391c2e98de783ffefca72d55f98740453a2a3d0656ee3fff0d75a627fafa404537181625a0123fff56505d7f50dd40453632fd6dd46f3fff471b0a0b6075404534ac0b3cb0463fff7265b4d47755404530c2297af89b400020e89b2be25440452c6d92143f284000304fa186809640452d8a6d58eb4b4000adfa24962ece40452e51f944d8804000b7286249cc2740452fda16a623854000ef1df179f7b54045311001570f7e4000eb2de1f6bbc540453281d123d22040010781825ccd47404534ce69e1565840012f9e93ee22cd404535d09ae6e56c4001576abdf529ca404536631b116d2a4001a7444e971a6c4045356c9e4e5f3440020e30abc4697c4045382881dced094002541062928b2240453621a6b07ad4400280354c70a48c404536d88988434a4002e3a9b6fbb2c74045338dc8dc637f40037635729ffd0340453266679dc8ff4003779ac51b5b2e40453055e56b3a724003bad06019092b40452e2b5cb64a914003d8e67185f69c40452ba466e34a2340040077e70eb9cf40452bedd2bd0cf840043f432591009140452a9d6cba09f44004636b3615210b40452b6d14150ad440046f21670b857840452d4b96a808da4004916c4ecc859a40452dd4e4554c0540055f880310a30840452b9da58f3d98400566b13ec935e140452db377fa6b1f40054979719fc44540452ed97429616740054aa4d4e9af6540453043a4bab4f3400536046bca7e694045317268eac78140055e1155d791bc4045318ed31713c34005606f68763eaa404533a49f37a46e4005de4cd50109fd40453660a1cdbd0640060af4eb3528e840453685d93d9e71400629f8f11805b1404534affd44750c400664fd3ffe951440453590b72e104540066e6b2cfd41be4045376dfbc8b02a40069e5135db36d14045383a04015b394006b7897943966140453ac8e407da734006e42fdd68507740453a467eac24da4006f66f9894360340453bde7c1b484a400758ed6048c8a540453a64b6b498b5400793a541ff8fff40453db61618008e4007bd4417c3266c40453b92ff4533d64007e90233d0abc440453cb15a03f14040081b12f604872c40453bb20119858d40084411c18d426440453cc8aa0826c04008ae754243bebe404536823ddb35794008ca4020a3dbe040453669576745094008f7ad738d8dc0404538180a42a4154009659f51ea5879404537b9563c3b8a400948d09482837e404536c82d0433db40095c50675cc1b44045366d9738a77840095e2a86dea35c4045354c1b38b7fa40093f38d8fe4d3d40453414ccc729b1400951f7f9dd625840453348ba9db9ff40093a39f1cf76dd4045321a3b218b8e4009564bb3e6299e404531c7e655815f40093da39204be9b4045307928cd760d4009522edda7d53640452fe84d601ee940094db73e22d8fc40452e238e53da0c400980d1aae09c6c40452d086edbcd3e40097bc3198982ba40452c03f089843d40098e9cbb3fba3340452afbd46a58974009a0947850266740452b28b252f0604009a0b76ff6e68540452c6d08b2e8314009d58a6eae5e7940452cffef8657954009ff81142b74e940452a3608493e7d400a243d54ca31bd40452b937f6e7529400a4a3ed9f44175404529a89a16dbd5400a5abaa0e172b340452a39a5ace718400a94045933ab87404528e5607daa61400a4b98e49b7e29404526de819e2ddc400a582e62e9da2440452699e7474c70400a4a49b97edea5404525898311feed400a64f338f239ef4045246aea1938e1400a35a94d8e1fb6404524bf53a1818a400a4d8bc194b55a40452203555f82f3400a409655fe75784045207c6d61b5dc400a0799453e812340452051d493c092400a1d6f7c8f9d9840451e7291ab41404009d60ca78bd33b4045203237e92e0a4009d5d5c4f69d3440451ece1ac46b444009bebd84f50b9f40451dbcc113279d400992aa17c9a8df40451f9e152b82b2400975f540111ab940451f658f5dcdde400971a2c57880d7404520fdae94dbf940094d0a3cf86184404521d21e97001e400913a1df16032b40451f9eefa0479a4008e4d5f6ed06d440451a5b024283104008e87ccddbeb7a404514b54460e9354008fdaf5e51efe240451071c579353a400918121b13346e404510364246cc6e40091ad5b2ad198740450ed10e747bc240093140c94047bd40450f865815b81b40096a1da7d30faa40450e46d2dc4a3240095b363b1cd8f740450d7b810a818f400978637d27f3e640450d40f390300f4009b7b36934b322404507d5273954e14009978d1adb22a64045064daab20997400990cfe55b0e19404501c3356de4cf4009aeb3eea6de9e4044fc9e75292a7a4009d99bb76fdd224044fc09e21f220d4009de26d12521224044f9a5e0da75d84009b6cf81f7ab374044f7e1ef379f994009c3a212c282fb4044f7a9501d1b3c4009b828ebd3f07a4044f6e8a73585ec4009c3576fed3c9f4044f60d06ecb6d64009a8cf3eca9ea84044f56b26a176d54009b2542cb92cc44044f45e21e53e4440099fc54599e81e4044f22133ecc18a400977753defa4bf4044f1a3158e879840096a00107111664044eee3fc7c9b65400926753c398e8f4044edcda546c3564009297729e943b84044ecd0500003c240090e9389bdb70e4044ebc8a8a7f6cd4008f67929c8b77c4044ebb32ef0473f4009069401ddae504044ebe627c5497f4008fa1e51e0d9874044ec904576c6754008d14a6efdd36f4044ec27fdb79db3400892aaec637c384044e8e499fdc28e40087359c7bee8554044e4cefc9d1f0b40083cc8e38926db4044e3c5e7fce52a40083dc67fbcdfd64044e2a9e8be9244400816c9211317824044e2d6d02843634007d10468bccf4c4044e0f543728a51400779cefda98e864044db86c09937ca40068e6f9e3751eb4044d82e7c793c1b400654ff3a2127dd4044d60bb1da2d334006389eab62800e4044d3485f25909a40061013ee49743f4044d6f66f1d19410000000003000000010000000740002296c666bd6040450df42065729840000f9c510c959840450da1056d411040000487f24114614045100c9aee027d400034977bcbed18404510b3022f73fb4000416c3f186eb740451029ba29983b4000271eabc548d340450f7c086201dc40002296c666bd6040450df420657298000000000300000001000000093fff8d943570690f40453e04d0d4ef313fffaa9949703f0c40453f5bd9760eb73fffd5889c018f0940453f31326115083ffff98a009f623140453e1ee7fe11d03fffcc5dda2e67d140453c1bb294788440001a2aa3b9fb5c40453963c0c4abc13fff5b76dccd984840453a05576b29783fff68ca010450b740453d465dd6e4983fff8d943570690f40453e04d0d4ef31
+16;Cuenca;42;000000000300000001000000e2c0054c78dcf1c43a4043a9359fb8dc44c005f0a75351c7da4043a8bc8401794ac0062d3a8f8cbf304043af4ee75d8b91c00635508451dec54043b28788e6d51dc0065007cce42ffc4043b2e21a200096c0069c8429df913b4043adf53fc3cb83c006c6ff76537f964043ac8daeb6aea0c006e1568b8e24574043ac64947f287fc006ea05f1f640d44043ad9b5d57e3b1c0070f4a96a720ec4043accda6e53a35c00726d89071ca154043ade502c3d4acc007190b9f4e17184043b0fc8700201dc006f7841000ba4c4043b1257bdf0d5bc006f66b6f289b9a4043b2070bdc70f4c0071730a7b507ac4043b3eff600bc83c0071e42335643af4043b5f7594e8c12c00743d228678e6b4043b7165d3325b6c0075188f1e7ca914043b9445e80e134c00775950d8796d24043b9eb7b617dd2c0076d0e95192c4c4043bc2aec1c9e47c0077c83bf2b93464043bf3566987f2cc0077b7ae03d645d4043c3496521a06dc0075d7cdf46188b4043c791eb48fd8fc0076773ff9258184043cd07b8a42973c0074f5a77d6e2614043ce8ea7add96dc00757c6c6f0b7304043cfc0569cc4c8c007440fd08b25ec4043d237efdd956ac007fb6373cb5c684043dc03ccc8f0f5c0081fd8f2a887274043e1e87e5d6cddc00853050660528d4043e4cf71a4aa67c0087a370162c5624043eb3242704597c0089c3ed3942b0a4043ed87d13c957fc008c5273e6e8be04043ef3ef4583d3fc009048fd29b6ddb4043eff5a0447265c008dae2d37cf2ce4043f39a140e90f9c008c6c70d4dcef44043f77bd61e4905c008c5d4df95d23a4043fe540934baa6c00923f979a90e574043fe13518dde9dc0095ca3edfdc159404406296b719baec0094ae9454ada3c4044084f95722037c008f20d2a6891ee404407dce6d60d69c008b7be716a5081404408f9d78bb169c0087c540667783540440b97992e8fb6c0086c828406e8db40440cb8bdf4f640c0087315e0abc0a840440e8f217b4fd8c0089e0e5865fb3c4044115a032bae85c008c074d2a99f65404411dcb197f942c008c76c1f37fe9f404413c1cd41892fc008b0a0d9bb0307404414fab9be96eec0088d13c8ac232c4044140b1576a390c0088298373b4d004044158941949749c00820b29fd880934044138befe942b6c008191ad427f11c40441644aeb0ad07c0082b27097ba12e404417ffc4865748c0080ba32a9a90ef40441abc18f123d6c007936b8816ede1404415b5c096b38dc0074ab81db594f04044141b4fafc93ac006fd6a29d9312340441637aa61fa02c006e7ae4af8ef0c4044199d464e9054c006927f0837a0c640441a4369f56fb7c0066bca00a5d375404421cb975a4695c00689255557a8e740442e985488760fc0067274de8a75a24044320b52d5a118c0067620c0a6092540443411d06873eec006659cad52e78d404436396a03ffbfc00649ccdf8e92cd404436afe20e052fc00652013de50a53404437415e03c157c0063e17f615f159404438ee02a99ff0c006149fb96e4b39404438933de8767fc00628b11b045717404435f074692adfc0061487062a4cc1404434c768496a83c005c87fb618ab48404432d4bb69df28c005d2ffb04ee7c6404434a9a16caa56c005ba74ef0cb51240443435421f3ce5c005bd4c6b016f86404435bcd17530b8c005a40868731fcc4044353f862c1851c005867d3dbac30240443293c320a694c0057b24c2d8015f404432f1bd3a3b43c00572377a7341494044338c099b00c5c005a0aa3fda0aa340443672b2f69e13c0057ae81052bc19404436bfeb7f8ccbc005692d85049d5a404437c7a4a8db1ac0057b3111df9541404438bdc1ccbe8ac00562a07f335e494044396c053f629fc0054f8e22ba6188404437d082af1c63c00521f26026a8ae40443973e0551d72c004cbe3af925456404438c04c6db939c004b09c3ea0b5d4404439a212af2f2dc0045f6dbb66c04b404437aeb9cb571bc00457228351727e40443674fc89dc6bc0041fabdc9ad3b44044364ed4842640c00409493e0c80164044396d5350c628c0042f2db5ce612a40443bc726adf24ac0045b0a4fb1907e40443cc0c6d1828cc0043ad4de9cb68d40443fcaf1421978c0045ec0b11bd2804044426d22515272c0044f49170eff114044445aeb4ab3a5c00437c7290daf2f404445aad1518e35c0041bdae411b7e440444204b40ac53cc003f7bf4a945f0440444120b014c16ac00396d102c509e940444323d1248f1bc00369f90dd1019a404445373ac5b4e7c0034b68c0bc50dd40444347c6f19f1dc003114ff13798d14044453b21dd2818c00310ce81690767404446dd1878b68fc0035697e0648cd040444aae6852faa4c0034cb33a32338d40444d1224bf40e2c00332342691fee040444e8773d8a605c002df4bb5be9be640444c6547736d47c002d4e93dfa3f2a40444b75893d9aafc002e0f7a2ca80ff40444a525d44ff8fc002bf5cfb8c3083404448e197230b8dc002619bcaa14e6f40444952f8cd7e1ac00249d04e6a23e940444bcdf89bdd97c0025a9d129feac240444ff491059027c002326222007d4c404452874af7f5f1c001b5e4b5e6702640444f412c7691bec0015a9f5c59d0b5404450ab7bb7640ec0014167ec9abfd7404454500817c8ecc000bac8446bae94404452bc1858ab2cc00049508542636c40444d00206594f4bfffc4b782c1438b40444aef7d756577bfff7458b248bd0940444bc600e2a06bbfff6e6a23e8c60640444e46720a0898bfff43daea1be81540444cd1cb50ee27bffed2bb344070d640444c0a7fe72728bffe78c89ef35352404445f26c81e6febffe8d2d7572e29040444554db731c9cbffe659b0689ba8740444540bb8924fabffe1caecc0e698440444268c7f77260bffe38800299b84e40444085cc1cce98bffdfc7fef238ed240443c4ac9ca305dbffdca6829817b0d40443b3242bfba8dbffddbe8850f1e01404439a56943eef6bffda9d2728f4fcf404435fefc12125abffd86763da788fa4044356928baabb0bffd63226fb8ece940443686bcea78fdbffcf66dd6ae5e3340443321140a2bb1bffc71be244ea510404432290adfc6bfbffbdd8476e1779940442cc2480e8c8bbffb29af91975b6b404429201adb2b3dbffb4f37347d3dcc4044282420953aa9bffb85bda7e32ad5404428c4d94bbecebffbabddba0d8b0c404426c5ada2ffb9bffb8a1e68d45d6e404423ac71c9ad19bffb65ada9b5b5484044239f2bbb0002bffb52b84ace74314044260838dc7311bffb0ba7fa0d2a69404427a2f151667abff8a5d1340fa7124044186c44162f6dbff82ca8169b333340441a13572caf02bff7973518ef17d9404417af72ff7bf7bff706ff58eeb73640441937be5f6e1cbff713ee1046fd9e4044142c240acc38bff74ca613bf3e5e404410c317aeeab1bff685849717cdec40440cfacb9a950fbff6b97d6132529740440bf847a2b47ebff62153c0d888ff404404fcd276e36abff6079dfa6298624044021ca57b01ddbff55f55b0fb4eda4044022255dc3bbcbff3fdc596deba724043ff5f8a565214bff2b0efc6994e684044015adcafeec6bff25b8de98d21e74043fe8a53c31810bff250053a6b4f9e4043fc2ea1c71836bff354b8bda135c64043f8ce9ea94deebff357ed819a96bc4043f6cdf1d8fe67bff3223e14a770b74043f4fba49564f1bff33361088387344043edea132eb0eebff370a79809f77c4043e785ea631354bff468138e96f5ea4043de8bc61e7f3fbff43121f9ad89194043d975c9dff73cbff45a8726942d384043d7d0228f1884bff4abf10c3e9f1a4043d615c7f0f884bff50156c78cf1ec4043d5d26bf3183bbff5e584928792c34043d8454c9f59bcbff6afd9331533cd4043d3d4ef7f9902bff764b010538a414043c9ceb885ff1abff811de66fe10e84043c82dee3a5ac5bff80bb27efef4cf4043c6af8dca8c09bff8542397a38f004043c66f3c8e50bcbff80aa8cdbf10214043c5d6be34a5f2bff81cad8b01eb014043c2a46d9d924dbff804afa53878064043c1fc08551f53bff81d8fa12e74994043c101934eb805bff7fc8839a875de4043c00ebb646f97bff80efdde2b88b44043bee96635940cbff83303139f88e14043bf85bcd86303bff814b4ec8650924043be6d1a2c1d8dbff8336f914c31f74043bdda924e31f9bff80d338d0f0b7b4043bd5b3bee7649bff8353e6175ccf24043bc51cb372915bff836d9f8483f794043baa884b937c5bff8767038d5bd154043ba3054a8f11dbff84b0e0f3755824043b96471d175f7bff864500bf5c65a4043b8b70ca6d770bff83f47e4a3b6b24043b827ecabede3bff85634f9f695624043b74361addebabff7f24d8d26999d4043b6a8c2a1a5adbff9f68e3fc0aca64043ae6c61d9750dbffbd418cdf994fa4043a91bc4ccce25bffc35b02405d4e84043a69758e88aaabffc5151e4a42ef44043a3e7b08452f2bffd85e6fccec8254043a49f854ffa58bffe3177bee492f94043a7035d806c55bfffd637647042084043a5974fe624ebbfffebd4cfd08d4d4043a7a7d5f48b25c0003a3a495203834043ab1c892d65bfc00029a3770a6fe84043ad088f6c554fc000c3d6fcd177574043ae01a1a6ea77c00096ed483135f24043a91a7b1c6725c0009e66ce267a4f4043a774556bb118c000685f4114588e4043a22277c45cbcc001597574a13ca74043a3fa39774506c001746dc8a7c67b4043a278b8bf5fe3c001c05d4464f0004043a1796679c2cbc0024f360a869f4a40439d033b82d1c6c0026a26187621224043a1be095f1325c00291cc7835932d4043a4518f18252ac002cc931034f8d34043a3a742128de6c002e3837c7f601040439f8f0ecab7e4c002fe1bdc65ad3f40439dcbda1e191bc004169f2b3a26a94043abcba9aa3b86c00463e4fbc2ae914043a966fc2db875c004bfd8bd1afe094043ab72024a76e1c004f43dc3a756934043ab89d096e466c005146b79d434ff4043a9d33c47d9dfc0054c78dcf1c43a4043a9359fb8dc44
+15;A Coruña;11;000000000600000003000000000300000003000001d0c021ea79f40440a4404563ef89744c48c021eec29ecb87a9404563bc0b9aa417c021f31daa687c744045654b01b5509ec021f69373e5aaea404563978889f42dc02209223d52d7fb404563f6e3e88373c02205d76353b762404565bfb1bbfa42c0220a85806e35a44045667c5bdfe979c02217a1c808ba31404564978e4b20aac02220b4e85d29b0404564b9547b6893c022187d380f10144045628ada391c01c0221e1ad1f998994045610cf9e3864dc022291b3abb5f344045605162394151c022282c655b1afb40455e8fcb22056cc0222dd61c3471ab40455e867f7827a7c022344f9b48c643404560b991a901b9c0223b39c0ebedfb4045608753f3ea6bc02244e5c972fb204045653590b091d9c0224d7d35be5b794045664b4eb95cbfc0223eaffa9dda354045674a165fcf04c0223713273df64a4045692bec465391c0223944fa8e849c40456bdabeb91f02c02246c1dfeffb6240456cc6f7604941c0224ce9ef1c82ee40456fa2c7d83dbcc02246f22133f10d404571bd04690188c022494be75f1f4b404572bad80f9871c022403f436a6b8d404573eb21cea93ec022523c1e35c27c404574b43a4abaccc0225876a1d9146a404578dec9550450c0226086d66ad2a9404579eb8bdf71c0c02262e784e78e78404578fc08e94c79c0225dc334bff296404575424a344e08c0226b18f964f5114045754cd8a95786c0226f9e830d661b40457883f1cba39cc022767dc14be53140457885e44143d5c022777069748dc7404576a2ad4fc018c02286a2507766bf4045759dbe21385fc0228643b9cf554f4045740f5f9747e4c02282e82506b9724045746405bd480fc0228a1ea372fb0e404570b34a045b04c0228fdfd97788ac404571dbce78da99c0228d0d18ed36d0404574839a001343c022988789545aa94045762a7abb3ab2c02295b8812a25dd40457848cccb52d8c02290555d0fe1b1404578b78aeac3f4c022912e47c4985440457a40fa6aae8fc02285b987ba62d740457c912dd63842c02283b444f42e6f404580501cadb5b1c0228eed3dfddee0404581936c792505c02293057e77b2c84045859388390541c0229a1c539db6e040458605ff71426bc02299474708ca7740458731ab8fa185c02295f20dd78ca24045878699eb2bbcc0228dad60d45ec5404585a908cd590fc022890b731d2577404586c73c2df271c0228642b0987d7f40458631744590f3c0227fc45822f08a4045892588a5ab76c02283930623fdd940458bc1d2bdfd7cc0227eca2d9c569f40458be1f4f03510c0227cc4ce730c8a40458ad41300fd70c022796fa53a9dc740458ba5602e356ac0227128e309606240458b51a58cf57ac0226ff3bbe026ad40458ea54af2ed73c0226e632456655740458d458e0b9354c0226595a021036c40458d4f4a7a1081c022607fdd0d954840458b878e7d0e7dc0225e137cce4b9740458d386d332307c02255924f5e9e2d40458d7fcce58795c02250fe3f1bdae3404590344ad59143c02255aa57d7d844404590ee2cf76281c02254bc2602eb65404593919f73bd00c02257777342dc8e40459192b8945b98c0225e85c288617440459078bda35b87c0225b47f3f0b94d40458fecacbe30f5c02262c727cfdb5340458fa325bf2c51c0226940bc19069e404590b978fb1c1fc0226d8e04cc28ca404594ba384eeab9c0226608d89f468b404593c21cee55e7c0225c45115fac6c4045958b53b94336c0225956a5ba4a7b404598863f457668c022529d8d4cb7c8404597756350d4a7c0224d887f1508fc404597d98c612a70c0224cddbd34ff3d40459901eef6200bc022458b225d780140459877c83f04b4c02242ae8d9c8b3c40459963497d99d7c02238cc0bf67227404597cc4912dd42c02232754105eae2404598b874fc006cc0222c45b25e2e00404598330e5b73abc0222e6c7e9496b74045971eb091a526c0221e8db4f8b476404597ad05e15a3dc0221427838dcfc94045992b86810e09c022109ba9830a7b40459b9779d3447ac0220ba8146cdab040459b571e3027f8c022050f39a6365840459cbf709aea1ec0220695d45f8aa240459de2251d34b3c021fdf2713aef8440459baeac67f4d4c021f6390aec1fd740459d5b480947ecc021e127838dcfc840459d0a2cf6fb6cc021e21fff8af64f40459ec910ed2f91c021e7d6388ef05140459fc5125256d4c021e7d015bdbda24045a1b96cc45fa7c021f4266080b8104045a18905f89279c021fb8a3cc922e34045a32aa5c81d88c021e9e0daa961ed4045a5994b98264ac021dafe58e983c64045a417e0f69436c021d9cdc124b4264045a596e12710aac021d01319c965f74045a5a7dc708c63c021d2d81a802b564045a913e3660532c021c4dc94e348dd4045a8fad0f4ad45c021c045a7dd87b94045a7ffe722dbc5c021bdbb3245a2774045a9695e16d06cc021b257c1908c334045a8e74abce7a8c021b2cbb654eece4045aaf6fda2d889c021aeb114e061d54045ac32388a3dbac021aa04f52118994045ac112859c3f5c021a7510e20bb484045aa0b2d4ba3d4c0219cc1b28135e54045a9d1a1a21584c0219ae0bf1474cf4045a81fa616324fc02191eb94ca382e4045a6e4d80666cdc0217ed58e9aeb874045a5abb71521f3c02173aaf63856084045a6434f351c6dc0216c555e813fb14045a51dc0f711d6c02146f7b32a64584045a75785a2ecaac02136dfd87e6cff4045a9426e59cfd5c02122df42b4f52f4045a7e8539ffefec02111efdbce251a4045a8717768b9a0c0210301bdab82e24045aa51f23b1b5fc020fc919582f85d4045ae21472b1560c020f4942d51a56d4045ad1541906e22c020e9d9b23876ea4045ae0e67fc0188c020eaec4bff43284045af7511444b09c020e127e48f50044045b0d511eab91cc020d1560e5d18934045af43f976706cc020ce9c1ec8dcc24045aff29edd3f25c020d2b9e71f91f54045b148b3357f9dc020cd31ca1652ed4045b1ea9f1446a3c020c85d83f2460c4045b14ae9325e21c020cb4c76254b3f4045b0d10c7561e0c020c7070deedea34045af77917c3ec0c020bfa3789e2a014045aeba163bd69bc020cbe3a76af9b04045af50f4a8f8a1c020cedba11d68e94045ae8d3a83bd18c020c687f9e795af4045ae43ec2ef8f8c020ca883e6c3b2c4045ae3c88a2e27fc020c52578236c054045ad485ae07ee4c020c1c2fed3ec374045adbb0141e33ec020c62a206d915c4045ab7414c2e348c020b64ef7c605f04045abf923283463c020b19d82ee6d984045aca6d2a361abc020b4585a8a0f384045ad9ad771c164c020acf3534953304045b03fe6ccf589c020b6090b8ecbd84045b0ba7db95815c020b213ef066ec14045b155275319f3c020b5e8eacbcc834045b1f718d0b15ec0209d1d155bff274045b3ed0a64b2ddc020980a900478134045b2ecbddb0ed2c02097d1212b84fb4045b14e5a26ce32c0208ba46ee848b24045b188e3df0d17c020850f6d7512404045af527eac4735c0207bf2d1a1d1544045ae75da532e62c0208036cc9236c64045ae6d6be93234c0207d0e5818ac054045adef9dc7a69ec0208107279a2b6e4045acc821f3abf1c0206aea1c1b9d1d4045a9f698e16b73c0206d6fd90979af4045ab7fd255195ac020673d532de09f4045aaf54b0e4ed7c02070e3d1e5d5214045ad3d7a22ca9fc0206aee0a23085d4045ae6d11347496c0206f7929952d574045af091945ee99c0206e2cf1d092544045b0553a41f8d2c020723322972eb14045b185abef0f4bc020696843cffd484045b45efa05030ec02059eb3485b2764045b4bed8e9f7bec02058eed306f8984045b5bf1d1d0281c0206578c50524a54045b69c24cec16fc0206e80c2ccdd834045b57d8e9aa6cfc0207762ae75f4a44045b6f2edfa2a3ac0207d064b0c87924045b664f8a5f729c0207ac7560cc95f4045b5a92dafd55fc02084cc1b0fea9e4045b57c4fd1fa5fc0208f355192e71b4045b7e341744fc5c020a2148048426d4045b8f61a92c229c0209b00ed9953ac4045b92f302a7b65c020a00aed4c7cb94045ba262094e4c3c0208a76067517b84045bb540375b3eac0208898905a2ac44045ba34e5089ca1c0208284af2f609f4045bbabcb10704cc020767df2b0476d4045bb39a231b26fc0207694289677264045ba401b0b7cbfc0206726a7ce547b4045bae3953b3b15c02062591a9ad8564045bb7108fd65d8c02062e3bd5ccae54045bc5f95cbc885c0205cedda638e454045bc78517342ccc02062e5af46d4fc4045bcc849946267c0205dc3c73703194045bdd1653c33a7c02056d59bb9959f4045bd81d307012fc020537a49028e8c4045bf93a45bae41c020570e6d7875d54045bfcd684a8e91c0204dfcfbb610c04045c0861899901bc020524a63d160b14045c0589a1319c2c0204d80d81b79474045c23d47a73c23c020565e6213a4004045c1f969f4f775c020584ab9a66e2d4045bfb659ca31f9c02063637658322d4045bea7683503d4c02065292102fc564045be2c887eea16c0205f5044b35aae4045be11eac82436c02066a51171ed584045bd1415317bb5c0206d5b808ce0d74045bdf33e0799f5c0207781776c7bb24045bc580c573787c020767f0fccf4074045bd9d72255036c0207f47a4af4c5f4045bcf3a5044216c0207ea167bb9d724045bf257664becfc02084bdc6dbad4c4045be6c2c3f0967c0208481a03140f44045bca353bff933c0208849d71731294045bbde02385851c020987112f8e7434045bafdb197ce4fc020a25b56aca3d24045bc3b5b310f53c020aea3c190ae8f4045baabc31408c4c020b22e786369064045bb5d56d74109c020a3af031e7ead4045bfbfd863950cc020aa1f7c83447f4045c1ab3969ae1ac020a5eb43b8efff4045c345296ea819c0209b4f770ba5254045c34adbb75c8ac02097b7f96fdccc4045c47ba8f6617ac0209b6c5cf5796a4045c5fdfe797e58c020a0bcd18213404045c5ea0514c568c020a1191a35e9d04045c714a8ddc90ec020a5dee3c808654045c6f96bfca85dc020a4e610621a494045c85999d5bac4c0209ebd56c94b9f4045c8e53ba5ead8c02096e9808cad4d4045c733e4241295c0208529c88c87744045c76962a70b95c0206f496f09ce0a4045ca7567edf25ac0206ecdaeca026d4045cbd3cda3729dc02066f5084ca2124045cd3c867f46c4c020628a6eb6f57e4045cd31d0653b4dc02064fda32e6dd24045ce43cc865e87c02060a1b0e1ac254045ce76dc577bb5c0206079f0f691864045cf811ab67e71c02058f3746797244045ce6561ccac4ac0204f9f3d252d144045cec1a13964ebc0203ecb8650bc864045d26b9a893eeac02033bd1780adc34045d2ed46b966aec0202fc426ad60434045d553eaf09bacc02027921d9327aa4045d27576c923e5c02023cdb22500c14045d35a32e6dd1bc0201b94c79193554045d310812eb619c0201c8c4ffc640c4045d472b6203804c02026db1b21cd0d4045d483b77ea0b4c0202420b5460c434045d64518877a21c02026ce1b45449d4045d768985608ddc020221ce944d2984045d7601f58129ac02020d747604d034045da1e948475b5c02010e356fce6f14045db77cc2e302ec0200033c49762f84045da40f35ecbadc01fcf8160343f9b4045dd32cdbf8863c01fc949d3a26dc44045df3d50f2a594c01fb0e1562cee874045df220c083ad2c01f9e2b59caf78b4045e28ac50ab693c01f8e7e25fe49fd4045e1add2762f07c01f7ae92a61b9954045e313e88c9345c01f6fe590cf2bde4045e1bb0c1a9583c01f772118ff55614045df559f16b9b4c01f72d607c52c814045ddf84e76c1bac01f7cf69355eedc4045de231e145f80c01f6ba947eb03ce4045dcc414de44acc01f65a64a1259054045daeb6bbe94fcc01f73fdd1b8ab144045dafd0d28d4d8c01f810c857d0aa14045dc9499053053c01f7a37d025f2ae4045da8473c074aec01f8509d7a2c7484045d9aab263c885c01f829fb04dd4e54045d80b1b2f3907c01f91686be8f6134045d7a6044522e4c01f7c41365628564045d718c5f8e1efc01f7cc8dae0f2db4045d603a3049ec3c01f8bd99192754a4045d6bd834bd7f9c01f9e2f57ba03d04045d5eee855945cc01f7eefb4bf76094045d4b600a4e2f1c01f5f60621573db4045d6154abba13dc01f718390b284104045d7704ce2397ac01f7917ffa612fa4045d95a4561c529c01f6cb0e0f7c0dc4045da22ad540b9bc01f7118fbd805c54045da76f0a68a88c01f5bf88e82cb5f4045d9fb77b45b56c01f560dd3a8333b4045db03d9401a19c01f4f02e98bc1b94045d9bf74bb79fbc01f5afaa2b7bf394045d91d34ddf1fdc01f485fd4ecdc9e4045d9b0ca807a86c01f5179693c48754045dae3b4f0b80fc01f3ec2892705a94045db8d445f082cc01f401276adb9ec4045dd00aa7092a1c01f3411d92c92c34045dc7691325320c01f2cc46414f4d34045de3e220461bac01f1fcb9866b60f4045ddd19743cb54c01efff928756a104045df9a999ca749c01ee6dbddae3de24045df95a0e46f34c01edc7523875d714045e21c7635efdac01ebfc3885579854045e365c21beec9c01ec1dd6ed2e8ea4045e54a08b7b48ec01ea5ac0c8540ea4045e380e598a0a1c01ec1adbcf854a24045e0cebed2c1b7c01ebef05dff17574045df1c9319dee1c01ecde2958356da4045de545baa7e4cc01ec618e31d3da14045dba87e6e9ae9c01ed4939ccccc454045daef060bf774c01ecb5c8be0e31f4045d90b4a9035ddc01ecf74d720157e4045d7da78401c6ac01ee08fdd6963584045d7fc3589e968c01ec3967976050d4045d3b8050363d2c01eceaf3095db314045d26614ff37fcc01eddff1a494ecb4045d2afa9e49e03c01ee0d12905906d4045d0de8d495432c01ef122a16207544045cfa234e8eae6c01ee3a96f94514b4045cdd6c54088d4c01eebf380eba2d04045cd1e9d3540bbc01ee18839166e794045cc9644ffa831c01edf27c7557ac34045caad0ed4b7b1c01efeba11f053a24045c9f11c5e15c7c01ef9a911e5385e4045c8fbecb5756ec01f0a8ef50380474045c625d11dc7f0c01efdec305090fa4045c55cf47590dac01f05587b051dbc4045c4121877565fc01efa5d444293e94045c3e56e52ddb8c01effa902a963cf4045c27c5f7097b2c01efa4ab56c193f4045c185d10b8703c01f08fcda6442aa4045c11599083e01c01f074b99f624a44045bfc3b7224934c01f12b690d3d5de4045be69774143dcc01f1ecd63533f214045b975dd003a7dc01f3aa607329bac4045b7facea1d2e8c01f38b395aa5cf34045b69b21acd697c01f4ad1c11725d14045b34b9a973454c01f871b0c75da214045b429fe2b3e9ec01f987ab129b6bc4045b1e4e5bfaf50c01f8a62264c00454045b00c0da61712c01f8c3d4bcc17814045ab2898f7188cc01fc9d7feb7b4154045a49c60a90d2ac01faffaa8ece2864045a27dacdca008c01fd8763d852ce24045984c84415c86c01fcd0d36632d3b404596b0737acbf9c01fbf8f6ffd9c8140458e4f6d7fcf07c01faad4fe499c8140458b4c7a38f892c01fc59df97213bd404588a7e414e7efc01f9f0a7cca6fc040457e21759db351c01fa1f7a0018a11404579c2e5d24623c01faa4b978313f240457755a6d70014c01fc5f63163e9fb4045756bc564bd5ec01fbdf657934271404573a470080bfac01fd31fa76dcb3f4045713624679bfac01fe95bd398f7664045704f78a3aac0c01ffaf838d8b0ff40456ce11c4f96ecc0200c71e6ef852b40456c6fb677b1fac02017f951a1439940456a6e048ef4bfc02020d8db3cc0eb40456b1d7a5767a4c0201ef1d5ce5bcc40456bf1613455fcc0202671887adab440456d395d25c254c0203bd34186074240456babfb4c783ac0203dc114eee0af40456cdcca45deddc020473354c1227540456beb28d41adbc0205dd5f1b9963a40456e190289b6e8c0206938605d7ca240456bf0f41192d8c020710ca4edcf6b40456c11d42860c8c02069783ad7cae140456a864279cd21c0206a1f985ce9cc4045699ed7552ac4c020786a1002f13b40456a9ad59b74dec0207dd2a25ff7f4404569eee446328cc0208256d012c9d440456b191e9b31dcc0208dc3242c85194045692b7f7b9c6ac0208f17080cf260404567cb789de548c020996383c42b7a404568d1de599218c020960308a6a04640456a1821c1be1ec0209ee2cc34eec240456a4bef4c7e89c020a1547990200540456c44c574f24ec020a68bd3213e8340456a644cf11f68c020a8d4b3986abd40456bc980d8e9a2c020adea5f5140b340456b9a24b55243c020b12bbcad811440456a877cd6c041c020a92ff043db89404569e5877905a6c020a9cbdc3f8f15404565afdabf8fdfc020b59dbcbee2aa404563b05538d2c1c020c8be8cd44a8140456509b3a612d8c020c86ab9ee5eff4045636a29291929c020cc9ccf0332e6404563ed6ebac028c020d44e004f416e404562200d77c8f6c020d08d68d624b240456083d145d852c020f0d26b69a7dc40455f3105392d7cc020fd0b51e51c72404560dbc67a4d4ec021114abe8c8f934045603af45d348fc0211cf29066fc1f4045615b80866f93c0211c2502904a8840455f8db14e412cc0213329fa2d0ad940455f1e7b222c9ec0213698f424a1ee40455b8a171eef49c0213f7815f7745240455b6cb0373fdec0214d4877c693ac40455d54e2b8fae7c0214f5ae4f55a0140455c395474f74ec0215b3ab01064b940455b16cec3c7ecc0216fc5272ad60740455a5e4fa7c43bc021769d81a802b64045580bd81cd977c021745ae23d911f404556a9237c7e4ec0217d541918102940455546982a58c4c0217e712b32d60e4045534dd6d3f2edc0218a3cf7935b23404553982608f595c02196fb7fd76a7a4045517bbd02dddfc021a6e1b8ed1bf8404552b35c8e4b5ec0219fe0558485a540455567cf06b8d7c021a86ccee8e4634045554d633dc591c021b06fee694380404557f0e9f800d8c021ae14687dfef04045549c7d6eeb9bc021b43ed132486340455525cc6299a9c021b8e275f035f8404552be4b6810e9c021acec76d89bdb404550eee187f865c021b7c5cd90525a4045503494c7a2c2c021b6fc519718d940454d9db4a6904ec021c67dbe0214eb40454e25aca6ab6ac021c679ffe516e040454f6dbb5e2945c021bf3aaeec55ee404550f1ea485dbdc021cc3f5c2533b040455280d2f936b9c021ce15021220614045510d947734afc021de167e01f4b340454e8d7b6cf794c021dc48f4a1b93440454d74c448d5eec021dfe4b927a96840454db528ff863dc021d6fadc99625640454b22ea232780c021e894183f2ad240454ad1a129d331c021ecc45515416c404548dae0493404c021fa0235a91e0b4045486d5531cf75c021f74adef6700a404545d0e82fa9bcc021fde77f221678404543c8ce5675ebc02204ce9ab5d6f0404543686dd29666c02205ae6cba68714045424febdfa65dc022071823a712ee404542f8e4d8b234c02215bfec8bfc454045423399a44533c02215226bcbe730404544a74d49bd6cc0220f3947fdce2a40454625838e25afc0221419bedcb8ed4045486420b1257dc0221d9145c0b215404549f426fd5eaac022266941d1cb534045493c6682ebd9c02225d4897375894045487f3dfcff8ac0222ecf05e21737404549ca40a0af0dc0222894673bdf9140454a416dfeb629c022288dbb02e4a640454c8df8843e47c0222107d8bc6f3240454cd7f4309c89c0221f58dbfe06f140454f0eb30dd64fc02214c05c1d849840455194ee3f9f64c022156189e650e0404555a4e9f7de7dc0220eb1df1353f9404557b60017270ec022114ecb143af6404558fc3ed32d17c0220c614855956f40455a9dc45ef2b3c022059e2f10cae540455af86e059719c022046e8e41e66e40455d0e30b63c79c021fe259941aff940455d214877f187c021fb5afe980fc640455ec9b0043693c021e88ecc94a14040455fcedf3ca22ec021e5ab55aeb332404562022c6425dfc021e4e3b30717bb404561330cea15abc021d96233959d7b404564e6c06b0c0ac021cecf34528f67404564ebbd6ec71ac021d0f80b253352404565ad2afff7b7c021cc13c084c885404565f1deae6573c021cb1cb0a99a5d4045680af6a6ee75c021ccf0559b9b864045674d26d5bdf4c021cea42086448c4045680b4a68d7b1c021d162cc1f7533404565eebead2cfdc021d97e6216dca24045661aa1a3cb99c021dcd8557d463840456756059062bac021ea79f40440a4404563ef89744c4800000007c021ce76c264713a4045682e30db5082c021c2432abbda2540456875c4a1c9d9c021c05e9061c01740456a19db6ac1b8c021c688a5c53acc4045686a53b96e29c021cd3ad071ae2a404568d5aec8aad5c021ccc22af6d7884045697e0c9b6319c021ce76c264713a4045682e30db508200000004c021cca12c3d428b404569ac1852826ac021cc508fb1dba740456a1c97611657c021d15478dbbc884045699e8c30022fc021cca12c3d428b404569ac1852826a00000000030000000100000004c021b06306f19cf74045ad77b3f44164c021b3098b5544674045ae43fe98b2fbc021ac61e9208ce14045ae4a1394b255c021b06306f19cf74045ad77b3f4416400000000030000000100000005c0220557bb978a0f40453b4266cd139ac0220a6da1aa457540453cb733592f02c02207fd7706133740453e2dc512ccbfc021ffac178f579040453c01be755feec0220557bb978a0f40453b4266cd139a
+14;Córdoba;61;00000000060000000200000000030000000100000119c015a5cb8f8af7ec4042d77d32703faec0158d9172727d0f4042d9515abb8d60c015895e9feae3dc4042d735574b7c92c01580220484159c4042d6c61402e3adc0157379e8acdac84042d93cad7430c4c0155fb4df11c03f4042da53a7046ed9c0154ef324692fb44042d886feef2b3ec01546a91cbbc4df4042d9cb21dc9ea7c0153afc797c877f4042d980aade182dc0153834bd90b3864042dd8fc05635b1c01546529b7abcac4042e10ddfb3fc94c0153d301bb7d2a64042e304df5e8604c01566505da1acf54042e5aa836148f1c0155b40b551dbeb4042ea7e38c68140c01560c76f5998e84042eb80ea60b171c015a8a96dde3b1b4042ef4a7f32c3abc015b0313eab254c4042f1c6e215f900c015a7a2c30e072a4042f36281b0d5ddc015b034c49c96684042f58f0ef38540c015aa8164772b8f4042f6d45b65c61dc015b272a8adcd724042f6b01f9c4159c015a9960963a3604042f8ca530eb493c015e5ad79cb48134042fcd85d0c2836c015f999e6d7a1234042ff9bedf45c2bc015f4c32c4b48ba404303b425ae5cc2c015fb022bb1e8234043055b27724e96c016288660234db040430a83f3369058c01627b652fc960240430c01fc4c9fcac01653a507e1cbb840430ec7d972f870c01657b25db5bdbd404311f7258eb873c01628a003ebf2d84043149156e40136c01627a2e2317cbf404319ad69316951c01614ddc076387d40431aae3c0c8f76c0161a94a45624ea404321cecdfd683ac0162d76c41b6729404324237067c70fc01638dc70729d9c404328ab837bf5f0c0164d7698e3913540432a20286dcc25c01644845426e28740432e67e4cd96efc0163cab77b4e4c640432ef6154140fac016571b88d02653404331634fa3b4d9c016564c9da3a59e40433353013ddc74c0164a8875402f2c404336bb2c50ebd6c016360f4b88a5bd4043390a1d812b75c01614324ac4b91c40433b4d0dd86362c0160526931a572240433a793736d68ac015f7824bb068d040433bb222ea073dc015f03b1656839b40433b42066a7d4dc015eb06f9324a4440433dfc0916655ac015a3d7c95db51b40434296afb5cbe6c015aa3be349d5a6404343c8300fbd38c0159d1bd41bf681404344a4d1aa9be5c015a0b2ac65234640434597cfa62c36c01588df491da2a040434519afdd0589c01592254827d0c4404346d88bc7c9d9c01588c84d7af6db404347295aaeef8fc0158f298d86d58c404347f55760f621c01580b3d7e6e4da404348bce5707f11c0157cab8a06ff7940434ab27a70df67c0153beb0bebe053404349ef68159ba7c0153dad11b54def40434bfa5d135674c0152b402d4a43a440434e2ef515c133c0150488dbcb063d40435017bf5bc26bc015041786e2e6484043510c7c9d00fac014fa9243fea14a404350f01824feacc014fd6649d85d9c404351e65dcd3ab1c014f4dab0a1593d40435181062d7435c014e441f7e0e679404352fd19be0e92c014e525634d12944043540f24647d1cc014dbe629aee9d2404353043da52faec014d57cf7d5ed914043557718bf8352c014ccc88e936ff94043540a65d2a054c014c999d3d9b9f94043556a2eee9129c014bca79d685b3440435471f5b31767c014b75e6e0e3f4d404355368112dc73c014be38e54ecec54043564b322d79b6c014ab565d626457404357199ad547b5c014bceec418733f40435c1efb5c9bfcc014aa9b168b209f40435b17e71863b6c01479db81a40d1940435baa97c7f714c0146592013011fd40435a945dbcebfdc01430133f21fed940435d52bc3ca920c014199eff92a56840435cff4d9305d7c0140211b82813df40435aa58fa4abcfc01404b5c3238950404358f8e0193869c013c37363cfde254043573c4f3981b5c0138204674b714b404357d1ee8c5c92c01379bbbe65339440435728db5e9392c01370d0a2bca55a40434e96da3fafa1c01348eac357d90540434c59bbc44d08c01326721159329040434c6c3687da07c012ef0213df0da04043498df69cc3b5c012d457d54b6ddf40434935838950bbc012d0d8520882d3404346ce4e4c693bc012aa056f0854164043461bd1a6c00dc0127db9dd7e42484043430babc98bbfc0126fa21013511f40433f5cda3a626cc0125ff08e7b8bf040433e41c029505cc0125671460231a440433f2190bc83ddc01243e35fd8a51540433ed72aafe821c0123c8ead8af0bd40433d0ab2a54813c0122a7bcd5e75b540433daeda46659ec0122427ed03f9e040433c28c7b2ba30c0120cfef1fccbdd40433b5f956b2583c011cfdbfa922cea4043334fbe5d8d13c011bd9e04b84b8c4043337c6efbe139c011a0341495ca694043310a4c2fea90c0118eb5e7b690a94043316a25b23003c01153f737fcbdf940432e2a416307f4c0114838031577fb40432e622ead5654c0112639e712af6c40432bdf99c38b05c0111a2fbac7807740432ceaa0498379c01105ef56c30de540432b8b6c80ede4c010f3241c8c4a1d40432bb79d8c539cc010f44345f24a02404328556a6215ecc010e84a8cf4a33340432774e1061d59c010e9871c35e3094043268cf2b32192c010d70df4c6772f404326828e4d93bbc010dbfac696631540432283c4fdedcfc010d53b1873ae124043221d2ae8e1d7c010dde2f85d495d40431f9c27ba1475c010c8b490a712e540431e71c75818c6c010ce00ee926f5940431b67198e3553c010ac4f60c3edb44043172b7168222ac010a4ca70e3283f404312950dd4e607c010b2c39e723dd8404310dc502f64bfc010c73f161e0227404310654673e055c010cf316c78680b40430df0d1e6df6ac010df8e5c71118840430e24aae2cac4c010da4e6922361440430b94e6ae97a5c010e920ec1a004340430bb280dbb299c010e24cc73f2a7440430aa41fda65e8c010ef41ee1d3ab540430ab2f93c1687c010e9061a651fd940430a373a62ec23c010f1f4a1385aa14043080985a32034c0110191674ea15740430874569a7caac011019970319ee74043062b47bd9509c010f5afa4508a65404306c925785f8ec010f6a1ab1c3425404305e51839180bc01112fa07f6f7f74043052fbe695cbbc01109a42a0525f4404302de5765e4d9c0112106a08baed3404302eb7d088bb7c0112346d23b3a834043007da9a8494fc0110ea8a9c6a7334042fc99ee2a61f6c011083ec197f6934042f83bb4a187d0c0110cb119cf1a404042f5213ef066ecc0111967c3bc35844042f38ec34fa914c011259e412f5b744042e5f522928d47c010d3c88c318d524042e3b36d916428c010d41c9ddf3d574042e29583e26f99c010eaec8c3865ab4042e0afbb0e5e68c010f3f13d2abf024042dc174ccb9345c010bb83dc87c49f4042da6dcd6b8bc8c010a850353b64f54042d73b97c85591c010e95662e324274042d1e45a92c89ac010dfafd4c467fb4042d055e4b28b72c010e321f2e65e664042cf9c1a2de4d1c010d49222fa22684042ce0ec0510241c010c055f5ef9fa54042ceeb83ab3491c010b0c9a6d292344042ce287d283006c010a6ef8d04fa804042ccb835cb01e1c010ae9d65a36a4b4042cb53233d9cc4c010a52db94bbb964042cb3fa610d3ecc010a4dafc87c7d84042c99ebd44ef74c0107be10edf521c4042c6f34ce2cb81c0107d3f9dbe86274042c5fea37ca4f5c010657993613daa4042c3ecd9ec89c6c0106469643f11304042c179dc7c8f95c0103d6f3c8a05384042c0be7959d581c01059c1d0f8df024042be37b766df08c01047d820e041c14042bc6e707a554bc010314bed3e5c5c4042bbe68babab7bc01000d7498ea5864042b377b39a0fa5c0105801913e70174042b3adf51d704bc0108245d3c9c12a4042b06ac26feb64c010a1a0bcc5e5f54042abcee5e5bc4cc010d0eeaf2854bc4042ad2c41ee482fc010f217f1fdf8834042aafd280da9fcc010f22f725e6c474042a60b4465cf57c010fe1559f32a494042a272829c8590c0110d921dc6b1cd4042a15414f10f08c011056ff79250d940429d62639bf584c0115002153f3d944042978f9f8766b4c0115343314f7ab5404298fbe225c6dcc0114a5f59c689ac40429a2dced22d01c0117c8e881892c940429b8bd60eb74bc01187c1a4d0846840429da344d3999bc01184cf1811d5d24042a33abc4fb836c011a126d1b728874042a30b75dfab21c011ad2e813690244042a41f1ce419f9c011bb69b0eb11534042a30f842603bac011c7ae50ad39004042a387f75f0b6dc011d3f04ac50f024042a11491c39d8cc011df7ab65d27564042a0f731d47d34c011dc6750be80d14042a0315a57b1bac011e87e6a71c16c4042a0f13dbaa0a6c011f0d32adfd28e4042a0515f11cd21c011e903c440f34c40429f5341860741c011f6f3c9b3344240429e89d8f1c931c011fe0802c79f5640429c96377e3554c011ff53e55a624c40429d7c0f6327f6c012236e5c879df740429b1f2b492ef3c0123ea32f89495940429c126009aafac0124d3e0e724d6a40429ac919b599e7c01268c0fc78d0bb40429ac84a24440bc01262962a5f8b3c40429cce97f79cc9c012751adfb2e11c40429f21ad5de075c012747f86fc66a14042a0a698678ccfc01294d175fedfc540429f98f1c2bf47c012a6019b3e3d064042a451b89c0ab0c012b97042883acd4042a5203e32847cc012b374ab08e8ee4042a6a0d057fa46c012a477e0aea3644042a5b06076738bc012a9c0963b48df4042a64e5dd1417cc012a2d3074e7de84042a70cb768b77ac012bc7ce9b590c64042a85d9c956edfc012b9d70274933f4042a964799c791dc012ac7b25eeafaa4042a8ef5f1335e8c012b7e32a28bfdf4042aa3d3ed1ef43c012af496d39f2c94042aad0abc130dac012be1c817c27aa4042aa463a323c24c012bf3a11a74fef4042abaa7a699ff9c012dfea59ae24ca4042ade34ad532c5c012e3f50bb8ce724042ac57bd31b56bc012ee8a7c78d5074042abe034efb211c012e77da069c2674042abc0f35ca5ebc012eab99c6e60304042aaebfc1aa0c9c012feb245eb7a414042aa5b55dc5581c01311df0b2406ac4042ab3aa440bc89c01320ff5cf582014042aa0c5ab09477c01349db548b2dd84042add951889167c0134b60ecbb0ff24042af3391f97864c013423d84e829164042b052fb967508c0134dd7d51c2f3f4042b085ad48cdfac0136634ab8351034042b4907a611a22c01359bf5e4f40b14042b62cc1b6e67fc0135ccf5f2351134042b7cf79203896c01389f944c751b04042b80fd6147cc3c0138059ae026d7f4042b9a86ea50a78c0139dc9812413164042bbd3f0488e20c013a4069fd74b564042bd6970401dc2c0139e2ce0d610904042bea78fed599cc013a92a832527c74042bdf8f5a3f557c013aa2438f7f6d04042bf101e681763c0139fc3c544cbc04042bffaa6f21427c013b2cc7adc2e034042c00c8b2697cdc013bc5bf88a7c014042c28a733a4e1fc013cbb57e1e0a7a4042c2cf2a147b8dc013ba64d2340c444042c5e057f79658c013c02857b7f7d44042c9322de51599c013b88aa5688d664042c9b5721466e2c013ba180ce7192a4042ceec6dc2e24fc013c2b5deec00914042cf84e43c1063c013e5aa41290c8b4042ccd1f1da785cc013d528183338ce4042cf91e36aa69bc013d0a81bb4debd4042d38342100111c013ee46c470c3f44042d690c4a2a098c013ffd1056ba4bf4042da718b798188c014305c4934afe94042dbf111b8eda6c0144a52f9d5a2114042da95c2f78351c0145b2fc76de83b4042d8eab14850c1c0145db3a5bcf1164042d70885e4cab5c014478e03ecd22f4042d4659196e329c014643a34da27544042d5cc1862de83c0145fda91ba04d24042d67ba038b3ebc0146f381976f47e4042d9af7805d3b2c01484d2b27b231d4042d9708d3746d0c0147436f751ca674042d8284b31c666c0146e82b00ce75e4042d4cf5c5ea5a8c0148b028186f5a04042d59392257e61c01499a7ae9efe224042d498ea08ea2cc014b5029e624da04042d71d2355b457c015185c0bef77724042d010107f9040c0154b1031f3ba6f4042ce9fbc1d7d14c015684ddd475d264042cac9f67b1369c0156ebe6bad6f874042cae5bdf7136ac01570925e1999624042cd7f55c51d45c0158658c2305e0f4042ce322886b1e1c015a7f3b007e7784042d2985f6573d6c015930b7f7ed50d4042d3f867abf1f2c015a4deb69dfb174042d4ad9b1af069c015a5cb8f8af7ec4042d77d32703fae0000000003000000010000000cc014129597bd879c4042cbca2647700ac0141b3c350f81534042cc36cdc3281ac0141fc06774ea744042ce2844de9284c014310f384e9d6a4042cdd787f5c707c014295ffbcf54f94042d0272530c4a2c014565875370eb54042d2f46179a034c0143714ace8df5b4042d23947d0b54bc0142feaeb81ffdc4042d0e37739ae89c0141ff08e8cb9fc4042d21d586d20e2c0141b21e4ce98a34042d14cd9823cdcc01422ab53ab4dcc4042cf91e1ffb9dfc014129597bd879c4042cbca2647700a
+13;Ciudad Real;42;000000000600000002000000000300000001000000efc005dba1ee6305c6404364139cf14e1dc00591fc9f921ae4404364371c3ab7fcc0051f09ec81b7c040435ef16525a737c0053e93f1c28326404355f183d3003ac00559d093670bba40435319ad8c50edc005993c9ce0c3474043500bcd601206c005bd9d2e09e4c24043500419c01a8dc005d372bb4d375b40434edb8ea280dac0061c0a206a58bb4043505e93d6837dc0060032aaef79c340434ecad986de45c0061fbe31cbcc69404349740745bbefc005f96cd096638d404345fdffd9ae4cc0062fdbac74cec6404343ae37379c1bc0062948ebc5fb11404342a4d25cd9a0c0063d58fa75b00e4043413e0be351e4c0064c9ae8a418cf404341fcf94b9714c00656e0897e54ab40434057dc3b65eec00673e83bc6b33640434063e11f83eec00680f57c3adb6b40433ee2d7e4609bc006a58b25c10d5a40433e63de8a1724c006a604cc4b254b40433cfc7e608323c006b35db0e0323040433dffc79ec32dc006b88a7c67a6fc40433d1603280ecec006d5881fdaccfc40433d4f9d65f0bac006ce3f79008bb040433cbf0ff175e0c00709b638ae13c740433b48d5647e8fc0070d4aadce2ef8404339f0449ef3ffc0073f0d8ffa4d5340433c25ecbb4c14c007b56cb9e797d540433c589dbd8d0cc007d0c3858c829640433a39f3db7348c007f2b4b4160b744043399d8386e642c007f014f288fc9c404336dc03270d1cc008038244b5b3f940433443de398f4cc008850d1852986540433d3738a88a70c0091b36e236b8c74043382349077d45c00a3c426396972040433ae9457181d6c00a712b389b858b40433d58eb8d9bfac00a9ca8106ea6ec40433db622eb8132c00b00064d6e6a3940433cd47fdce2a3c00b0372ebe3710740433844ae70405ac00b487d88d3090f404336372cce2579c00b6609eccf06f540433411fe9aa533c00b9d140a7068c14043333da26490c6c00c3a4026f2c43f4043344e5987e443c00c55c99e77ad6a404339025f963d9ac00caa23bcc006b9404339c9bbaf5ce9c00cafcfd76e3b72404333eac4666e41c00cc930146737954043330132e38ab2c00cf6b9d1a603134043326e31541386c00dd70e3a6f2b7640433651a7565f77c00de99a6ba6972f404334f5fdb54468c00e48ef1054c8154043366f34201824c00ea3f4628a5b31404334d67ee7bc93c00ea4fd3e84a00d4043324aa43be796c00ed59318179b4b404330049c898572c00f522a90cd423f40432f354d747d00c010069a151d263440432f1d0cf88357c010946739305e7e40433176975422a0c010a0507823b954404330cf410e70bac01107f86e07bcda40433366e221c8a8c0111b7180a0cf43404331f24618931fc0111352ab4898a040432c70191137d0c0111b04a500551140432cea0a8cee32c01125d0e512f25440432bdf730ce7f0c0114838031577fb40432e622ead5654c01153f737fcbdf940432e2a416307f4c0118eb5e7b690a94043316a25b23003c011a0341495ca694043310a4c2fea90c011bd9e04b84b8c4043337c6efbe139c011cfdbfa922cea4043334fbe5d8d13c0120cfef1fccbdd40433b5f956b2583c0122427ed03f9e040433c28c7b2ba30c0122a7bcd5e75b540433daeda46659ec0123c8ead8af0bd40433d0ab2a54813c01243e35fd8a51540433ed72aafe821c0125671460231a440433f2190bc83ddc0125ff08e7b8bf040433e41c029505cc0126fa21013511f40433f5cda3a626cc0127db9dd7e42484043430babc98bbfc012aa056f0854164043461bd1a6c00dc012d0d8520882d3404346ce4e4c693bc012d457d54b6ddf40434935838950bbc012ef0213df0da04043498df69cc3b5c01326721159329040434c6c3687da07c01348eac357d90540434c59bbc44d08c01370d0a2bca55a40434e96da3fafa1c01379bbbe65339440435728db5e9392c0138204674b714b404357d1ee8c5c92c013c37363cfde254043573c4f3981b5c01404b5c3238950404358f8e0193869c01400721dc3792b404359c15493d60cc0140837c071dbcd40435b8c9f0e9259c01430133f21fed940435d52bc3ca920c013f5c0e4f3456e40435eb0604da62fc013d84f90d0b701404364ebec4a9f14c013c620a96dcd0e40436d5c45cccf0dc013a8e600c7c87940437197a563266cc01363a7b362c36f404370f291c951d5c0135de99d09880c4043758b64689b86c0135313d0a88ab5404377c21dc960ffc0136189e8ddb5ba4043791362f19a6bc013908479bb9c94404379ea7a6deb7cc0139ecb23ef0c5740437b4d9d07c95fc013ac422e090e0240437a8071d334a4c013bc13e36a50b540437cdfadcbbbe7c013d99ac6b7ac4c404387845b596d04c013bd93b89dda8b40438738b4b89519c013851b6f8356c9404384267f56de70c01371a76cfd14a5404384117a309dadc013658d54f8e6ee404385d318db0711c01354c79fbc4871404385e88e789806c0134ec81046ec70404388350ba9c627c0136f04b3e64363404389d595191287c0137f63ad2c262d40438cdb0219b5b4c0136d6fbf89200340438fc77ff9e8eec01369a5a925057c4043938313a1aea2c013538439ad6d2e4043950588461b54c01354322005257c40439668f674cd18c0133db8554f1a784043998672be6c15c0131835192b3903404398418b76d256c012f85eb82d69ac404398e60635347cc012b4c8aac2fb83404395b539d13aa4c012977137ae4ab54043955bdfd3ff60c012c075d3271529404399fe4aad3c28c012d53a12dc8cc540439adcf6162d7ac012daac74c62e2b40439f45c937ecd7c012ef4a1ac517104043a05351f718a6c0130b5ca75374244043a90d4741c42cc012d40d9899ea4d4043a9fb5fc9e183c012d129f2642d744043aea6000cf3b7c012adbd2347beed4043b5539dd0a4b8c012bf6c4e6571524043b990bb822a45c01278f788e3130b4043ba29cc957800c01272456eec69424043bae5e30f3fa0c0127944936078194043be09120acd16c0125c7309a6b6a94043bff79d880819c012458d2b18a9e84043bfa6ecd81ed5c01237f036d6a3324043c16121d27c7ec0123eeb1ba88e3b4043c43dde341fbac0122bb54c974c274043c5a1dbbf505ac0121fd5ae03194c4043c40b9db8373fc01220353d79882d4043c70cd78548bbc012198ca91b41d04043c7e3530fe139c011edc2ca148ba94043c4f74db8df49c01201b58953143e4043c47e0a5c7a55c0120b7d3cf531794043c2d4faf73534c011ffe24686a21b4043c24382fb614fc011eedddc610bd64043be8269130b6dc011d8aa1b1379264043bd4107ee472cc011cff43b6a7e124043c236807c898bc011c482e8c1e4ab4043c2f5f10edca3c011afddd6098c714043c0ea58636e65c0114858f51fe35c4043bde06f6e195bc010f5318d7ce6ed4043bd35d428c7dcc010c5df0d8e80594043bf68c0d615eec010a28a5bdb6a6c4043c9d35215293bc0107f54548d6d5e4043c822a14c8dc5c0102ac7dee28a354043c9a53441fbf9c0101ecd4825664a4043c2d008786befc0103d84875288fe4043c2bea466b857c01045e1e84e18ce4043c0536bcd588ec0103c3da9bfe89f4043bc70981ab5dcc01045c41d61f6d24043ba80bdb9a33ec0105345e6ade3424043b9d052e70b45c01078e80b3910904043ba7b1d6d2344c01082f7ece114584043b45546bd6d78c01097a0c7d893a24043ae6f189a3350c0107b6e99ccd66e4043ae6a4dc9030bc0106af4c16619ee4043aba98cfd652ec0104b225aeb2a7e4043aec3444d61dec00fc711bb8ba9394043ad14164cf379c00fbae4069407a44043a8813f182168c00fab6025af91ff4043a79ff331ddc0c00fbc1eec6e16a34043a636ff1aa7ccc00edbdd38aac1614043a1169adf7275c00ebbc0052468524043a139f15b800cc00e7f5653403b524043a4b30b9b13c3c00e546710ca167e4043a57d98a0e502c00e1522130b86ae4043a555f9f89031c00dc7b97b501c3b4043a2827c4f3982c00d814e62b988a34043a47663bf4220c00d71055e7d7d9e4043a62e16512dcec00cb159794ba3f64043a7618f3160cbc00c8972b2e9bb8a4043a650582312e6c00c42be78d4b0a54043a6ee9c6d0000c00bd0a6b3de69584043abec23bd7d02c00bc38c5aca59894043afa244e6057bc00b48400039fb694043b3c9917939a8c00ac287a94e8fd34043b43fd1151fbcc00a78478730beee4043b30b5e91f57bc00a87db4e5ea1904043b78e53864b1ac00a5aa01caf52024043bc423b14644dc0097b37b77c58974043bcccc0d23180c009791e022fc14a4043be7c907ac82fc009411d8addf2984043bf80e8996d35c008c45dbac63a0d4043bc90fc1befcbc0088f1d2dc978154043b99ba87029bdc0082e7c983d34504043ba8376730a1fc0081e6b8c8d63f94043b8f81eb2fc1fc007fec6d4eeb7e24043b885e27c255ac007f5512e3d4c894043b9c6ad11e041c007a782c165e6644043b93e5090c4bdc0076d9aa96411fa4043bc31b7fc0de1c00775950d8796d24043b9eb7b617dd2c0075188f1e7ca914043b9445e80e134c00743d228678e6b4043b7165d3325b6c0071e42335643af4043b5f7594e8c12c0071730a7b507ac4043b3eff600bc83c006f66b6f289b9a4043b2070bdc70f4c006f7841000ba4c4043b1257bdf0d5bc007168c4ff3cd064043b12f7379e40cc0072c9f9d8377de4043aedc3b3263b3c0070f4a96a720ec4043accda6e53a35c006ea05f1f640d44043ad9b5d57e3b1c006e1568b8e24574043ac64947f287fc006c5122c7d61804043ac9a0b05b9f6c0069c8429df913b4043adf53fc3cb83c0065860ac0114164043b2e922b07b80c00635508451dec54043b28788e6d51dc0062d3a8f8cbf304043af4ee75d8b91c005c7099ecb6de44043a2332e7193a8c006bdc3234497794043913700dfc646c0069e3cb704526440438c971e1ef9ecc00670a8f6e252a440438a1ad45509fcc006787180870a31404383abf8f106d8c006a87a39c6b9fd404382f99ffac2e6c006c1b8acaf4b0740437e410312e28fc006f7bcebea5a8e40437b97157d3730c0071027cdf1b25740437820780b9093c007027ef3ae968a40437677087b8accc006dc7efbaafe13404376b4588ed9c5c006afbaa69e53ad404373f6fc69502fc00656f7771a68b8404373e932d217eec006533f86cb023f4043721f1b2e03cac006184fa277053d404370aed889de2ac0060258476134f140436c96b9fa5104c006057c9cf86297404368491d9e541cc005e04afee80e2d404365cc0edf9f6bc005dba1ee6305c6404364139cf14e1d00000000030000000100000012c013c351d62554e84043b2933723718ec013a202555603ff4043bf313f6a4591c01373d67f644a6a4043c72fd0b951acc0130cc5f0f6b3e34043c1cbfd553c03c012f8ae10d293bf4043be67f587ac07c012fff3474620dd4043bbf2dd739f47c012f648832f27944043ba63a0ae8bc4c01311644d9009564043b77de85cba04c013114d130bd3fd4043b64711de0a1dc01303cc84d363eb4043b67448c32392c0130580180ab02a4043b53615bba90ec01319345e5f0e8c4043b2d741db41b0c0133de27840ea924043b2c2cf43b0c0c01361d6ae4d04ec4043b089d22652fbc013715df5ff76184043b09b4b8f395ec0137bd6543da2814043af24e0c4145cc0139ba6700e27584043afefba8713cac013c351d62554e84043b2933723718e
+12;Castelló/Castellón;52;000000000300000001000000a4bfe986b73b03fbd24043f0c6d179f47dbfea8f4008fbf47a4043f411785605a4bfeae4bea64376224043f664c3fe35ebbfeac7f0b67abfa94043f78f1e0466b1bfeb14dd3bfd28ad4043f94e2a8564afbfeabe5d95a9c2554043fae125813b4cbfeacf382320db314043fd080edbffb6bfe8e279d0e2974b4043ffcbcd80485dbfe88d9e0d3e23744044014892bc96dbbfe86485a147c169404405481752cf53bfe81e33599eacd4404405f72f7074ccbfe7ed0238834305404404d75802c2cbbfe5ce411e2d6798404405c6c23bfa2dbfe412761dd846ee404409af2d83e08fbfe3a18c68f34d59404408e850bd42febfe41cf23e17e01440440d214a3f35c3bfe36fe0348006c3404410619f461ab1bfe284379517a9c04044119430d34b5bbfe2375c56dcca604044145f73852a44bfe24f23998d2f534044173a89172f36bfe1da3965041948404419b50fb4dc74bfe169faad5ac1984044203660a4b079bfe0d42a3d850a8540441e6061904effbfdfa622403e2b0240441d471403cb9abfde140e67185f6a40441ebcac727e11bfddaf203930784340441def3d582dc7bfdb6586148a2e4a40441f34ec61ceb9bfd88f1c03270d1d404421d233f27e6bbfd88073aedf8d2a4044239331ab48c4bfd99f73c596efe8404425c16c5e1989bfd8e08351c863754044274b6a63c36cbfd76ee365c910324044270f78b4d8ccbfd79c583f201538404427e8338147fbbfd6947377fa6b1e4044281c86624911bfd66472f1393db9404429f27e86b27bbfd5f60f2e79c399404429a551733a35bfd5c9d5ba39d5c440442b6f099a7febbfd38a5f321d3c2f40442e5f7412e626bfd1fd2d5d0569a140442eba34d5dbd1bfd245fc82b6c2e44044317238073e9fbfd634e116388434404438bcec48d7cfbfd55eb418a977bc40443a96b0506a51bfd1716acae8e0c340443c9ca7c54533bfd1fe5c5e472a83404440a379347ce8bfd3184f99bda331404440b7ee617aa2bfd356949a33fbe4404441e93c3db7b6bfd293d0783932e3404445a41e6d536bbfd33109eab1dc7e404449e5e4ee232bbfd2c531050e3a5e40444e369acd3188bfd3f0e09d8f1c9340444e44069b8bc9bfd4a2e0cd01477540444d28fda30c12bfd7b5fdc55f928440444e8a2f09691cbfd84cdf2cdce90b40444fe39694f9c4bfd7bb214e59545a4044534c81989beebfd8645fb2e56770404455057cb6dfd1bfd6cb751f77fba0404456beacac2393bfd50b5ad879e55a40445713651ba76bbfd3a5da2aea75904044546a64150600bfd2cac800c65fb140445644797f7b69bfce34f60bb56adb40445876363d28d6bfce839069805d6f40445c5b513d120dbfccad27b6276eda404460883fb6f191bfcb3e2e056e4b5a4044610f2156cdffbfc93d13601de6b5404464690fca33a7bfc29964d1a204de404464995f914ee2bfc269657abf4a144044626478db3317bfc03c50f82eea124044606cb4447becbfb0901c01e9393f40445d1babcb2810bfa015982050601d40445c78964311bdbf9250a4d5844dcf40445d92d55e858c3f8f6d19668c03b740445d3ccb3bc1e73f9d4ed02de67e6040445b69fb3feb983f9a6be397ae4bc7404459101b7207963fa597ec78ed2f4b40445872e1e3a4193fb28f985b4d7aff40445b6354ac32563fbd71b075c2e98e40445d269da16eae3fc280fe1fdea03c40445bf222f6e9c73fc5100c4bac958f40445ca6071f47de3fc5d27987dee4b040445dd0d8a8abb93fc9418a4c5246a740445cb1da136d823fccedda94f2a70d40445dd0c4486eda3fcd1880e2350b4740445ba0f4d588103fceacab8d3fa1b8404459b7cca44cc03fd0cc0e856dac7040445a5bb97568483fd2b03d2252eec5404458082d9a86c53fd1221c3381259e4044543ebe277eb13fd100ac23702dcc4044528c9e26a4b83fd1d925beb40ded404450a055644f4f3fd5a0a0920ee95a40444dec975a1ba23fd9b9c0514f8f1c40444d1ad09968a53fdae441fc824faf40444af0585364683fdc6995a5992c3640444a03388cc1f93fdbbd03e93b0eec4044485e5a68d72f3fdc079b33916bbd40444606129c42743fe07870a39ae914404442f3303afda53fde943d97c3b42a40443ab7f24c5a9a3fde697ac6226c4640443bb3e722b9693fddd9751374c94f40443ae6023700b73fdc3ad8e658059d404436e055c4f2523fdbdc01641462ca40443469fc61d4a03fdbcbeeccb810384044354b88ae53aa3fdabdacd62ec2ae40443346922f30df3fd9dba1d505083040442ec1bbf1212f3fda23f9bc3b7c7a40442dbd96e0120b3fd91baf2b84c6ac40442d0bd6891f603fd51b54ccad649f404423c6eccc4f2c3fd1d0b1f42e659940441f404708e43c3fd0e573e192f14e40441ab1e81c2afd3fcd9286684211504044195968e54f593fc8c9c052ebe0384044163d7950568e3fc4453c1af4893b40440f44cb006ee63fc2e30ee347b87b40440a9cf516a0893fbee3780e485bfe404407f79076408b3fb5c275276bcc234044074590518b273fa9a2aa4210fa2c4044049169db771b3f9a2a63c59108144043fde03c91e7db3fa0a788e7e7fda24043fc01fb1bae763f9d900763656ede4043fa52b869687b3f9d206bfda178584043fbc887229e913f919e8fa29fd2994043fcb7aa61fa023f940916cc6ca20c4043fbdd20570d833f89a7479be4bc474043fbe4a012af853f96e5da4289c5f04043fbd745a19fce3f8b05be638614e04043fbd32abd76773f8b3b9edef53acc4043f9ed38bfb17e3f74577f31a8327d4043fa2aed697a6d3f9215cda36625424043f9b9fdca44fb3f8caacf995243664043f953b7deba483f6b060c19cff1004043f9a05d7ca1abbf751e1d6ec82c214043f5244c5680febfadaae4bcfaea0e4043efc44ba77be3bfb1263b1f8827fa4043edbdd350b0aebfb219412ad3cf5c4043eea55bad028bbfb34371af44d1964043ee520d0c9cb6bfb1ab5ddea4dde84043ede38535897abfb3d07cc0d706734043ee6c08c1088ebfb6c05671d1a9804043ed4f37d43555bfc8194aae12e7274043dc677b599299bfd0e8451bc68da14043df6c6e52c3f3bfd1b2a2564e0ccb4043e2a1209b19e6bfd3bf954d14ecdd4043e603cd9fb08abfd50230e2201b284043e696f773139ebfd82fd4f5cc5b9f4043e66260dfe11fbfd8eba543e0994c4043e50480244a04bfd8ad06db88c9b54043e2f01dc1a950bfd9599ce0313ece4043e11a44af876dbfda36e3b944d20e4043df629b2f09c8bfdc19f212094a8a4043de51761cf05abfdc83684e61d19d4043dbddd030c0a4bfdd31fdecb2f9c74043db7b379723a7bfdfe35921958d2c4043dfaff2f30d65bfe0fd1e156132984043e5eab48bafc4bfe18c882541c7bb4043e5da9c3cd0dbbfe2772e94e043c54043e2f84be37ab1bfe2d2063f00be394043deef68b48595bfe42fa256cee6244043df869a8c3b6bbfe4e0b33e5b5a6f4043e0865ffecbd6bfe4a171a2b82ee44043e552b25aecc7bfe4ff30f92d64234043eb00c152e87dbfe61d95241406734043ed1d856a1551bfe6cd3543f363aa4043e88e621cc476bfe75fe499c812a94043e84c47dfc62dbfe8c105a7c5e86a4043ef557c313184bfe986b73b03fbd24043f0c6d179f47d
+11;Cádiz;61;000000000300000002000000d2c0153e2475e7490b40421e80ecbe4895c015575100ce870d40421744c11a670ac0155afc25aadf68404213a445533520c01575ddd156f530404213d9a16b0e05c01569760c4bbdc440421417bd8575e5c0157b67135f8349404215af37343886c0157f4ea62b4d61404214f6be9ccd1ac01586f0e4af16af404216d8dc33b6d6c0159137054fcb1a40421728a1c3ce67c0159dcb3b523b8c40421682ff5d5c97c015984563b75f7e4042171ef8f89395c015a99d270f2fec4042172e083fd94ec015c36e43a1e2b6404214b474d82a60c015c73534a6610f404210c1ae920a6bc015c3429a0c0dde4042130b6d286ed7c015be03b30a505e404212fc8910680bc015c4338966bdf2404210375f8a20a2c015ba04536e33874042106d7c158b69c015b680ef06662a404212e636fef84cc015b865aedb753240421110a5927ed1c015b0f96177b693404211001de9ed3cc015b06e3c48b09e40420f596104d2a3c015c57faa96524e40420f267acd148ac015bda8c4ebe90340420f30c97cf255c015b982b585102940420d92ac59539dc015c2c04f54c0bc40420d2a8eb8aecdc015c6180c8004e240420b74c7455700c015b4cd4119836840420a9f93162564c015b813e7c701bb4042090de6e8acd3c015dbbcfb9e71704042066f70c666adc015f2952540ac43404206f296192052c0164bf7d25670f3404201ed3e19c9b4c0166c28d78f9e6e404201518fe427f7c01670e0cc89052240420009051b619fc016784bf576e50f404202b44e957e1bc0169c2935c827bc404206cdcfd71856c016c1d52024dafa4042089f44604e98c016e530557fb0b2404207afe566ddc1c0171af899af3e1c40420b3bcdce2102c0173060afa0ca9940420a04d6fb0a33c0177583dbcaca1c40421326d4c92328c017a8db97d1ff78404217a66f060361c017bd40b3a45cc2404217d1ed6c994ac017b44ed5728525404216f4920fd9dfc017c763faaee5e5404217e212b154efc017ec5468eb847c40421699f19ad9d8c0181442db1beff6404217d493ba2067c01822fd7fbf7543404217297b8aa115c018693b240fcc1e4042245da45c2683c01876e3aba54e9e404225b3bbed0936c0188c0a0ace6dc0404225777fde878bc0189ab86a8c88314042273c363c2723c018ba95193d79f040422f2d593228fcc018e000bf9886ca4042323f2b126c2dc018efa107bbcfea404237c17c0bbf26c018feb9db7245dd404238da2d148291c01927c42f08450d404242ff8966e04fc0193d07f1d5b497404243a929edc2c5c019385fff21bc46404244b403e44c57c0191e0fc0f96b23404245812776ab47c0192b4f1ec386f6404244351a64c15cc0191fda3ec7b355404243b33ed7e845c0191b7b6f1d556240424536f2721a46c0191313ef2033d340424418871ba3dcc01920b3526c22574042438449e037a8c0191451fce6b4c540424119320aea14c0190a3f21f6415d404240fc3814996ac0190a93a393f6f640423ff5b9128e56c01906953afef355404241004e41dffdc0190474725c82a740424012fc91b677c019111a50c1c20c40423ea2a3837d4ec01907c76a14fa4140423c8f02ec076ac018eb5a2dc04f0840423b369d87202cc018d98811173ac140423c2e651a5869c018da4ee09660de40423d98eeeac00ec018c650ce82373040423e4db23ca011c018c4b54e2b063e40423fe142c181d2c018af8ad448b0e340424186b3ce4e2dc018b16701747cde404242bd88cc97c9c018cd57d22c90b6404243ad54459651c018c912c48ef6e6404242d41e3c7879c018d4db332831b440424139e1abb4adc018eddddbcf04714042407903aed893c018fb8591465b5140424125b455c3bdc01900db52d517a8404241ffbe4005efc018f9755121160c4042425c5d2ffe42c01905ccf896aa264042428dd80fa108c019092c44e8a37f404243bc8eb7cf76c018ea9dd43bd6f14042433595ffed47c018e89dbb003574404249ced17f0e28c018edb6b8635e4a40424a59cefa09d8c018f50ae9fa156c4042497df6e650d8c018f827f6ade09340424af0d9f24f3ec01907fc614b2fbb40424a68e77519b3c0190430e4570ab2404249dcfd9c7871c019105195f4c96c40424a38d24a7657c0191e87968432cd40424d46afc337dfc01934d0046d55a240424f2559ec2f94c01952589ccf2e2640424fead1bf13c1c019571288b2856840424f77efd2d8a2c0194df52b43584d40424e21361f6590c01960647a16e132404250208db01293c0196af30eaae8a240424f9067904bd7c019689cc1b0feaa40424e8df022e838c0198e1ffc0504de40425092e02ea0cac019c66a0eb3ef5340425e3ee9d796f8c0195e7a6b4d7851404265aa63d49953c0196a69f5abd7fa40426b4e1bdfe308c0195e73008640544042724fe7f4c666c0191cf7e5d5317640427496ae3dfca1c01903e23d43cfb04042726b8db5be46c018ec89b65ddbba404272f52bb974dfc0189fe6a91f7c254042715cefebc6f4c0186af410d5dd8f40426dba949ff974c017e47a4b7e364540426c0e49f84f3bc017cfb7696bdcfc40426d333bd4f5efc017b38f3c511cb140426d314db149f6c0179070b4730ec140426bcceebd84d4c017818e7ab5308340427285e7f44e24c01777859e5c6e634042729558b77c2ec01761cccc90aba440427525a73d8aebc017373abe531d9b4042767763681e11c016dae5e769cae5404275cf35498552c016c8e2a2b32efe404277b72cb23aa6c016c74800b0e62340427a77bbffb137c016abfa9768f06240427cec121fc5ccc0169941c6851b4440427a27310b2999c016812c058ed79740427a2b06afd8b2c01678ebee6158464042785731b9a542c0166cd49b2af1cf404279b399055b45c0165932f42f4d8740427937b9a66596c0165567c050092540427521bdf14df2c01622a221b108544042725c900398bcc01634131c08ec8540427628e10c6c42c0162f3923c0ad0d404277103005ce99c0161961ffbe2a8d404277fa85d81bb6c0160e38f7d4739c40427a700479254ac015e10188c12f3540427df2011ff6d2c0160b40028ab0034042844d1d9da850c015caa81e52e28d4042866d72db5004c015b9ab3a9a9f6d40428673502ec18ac015ae2ac9a49ba3404281bc3cebb285c015bdaef246590140427edd18db7f54c015d713dfd3313840427d2e9c5bd1f4c015c17c23b45c8b404277b7826711ccc015a79601560dcb4042784b28bfb42dc015a747dfac674140427a1d2ce7fbb9c01591cf033b7c6140427c949531efabc015716a5a2ab2a040427e199814e7cdc015355b1981306d404284c84e876656c015336de705aa87404281c24d0c4d41c014f0297272c1c74042787452240692c0148d258a4a939a40428044fea8a333c01461dff0dab7e140427bf11a837dbec01470c2109ffa2040427acb6224c975c01458da1240db79404273da0367cfafc0146b99f35315c9404272ef92b94474c014887da162de1340426b67af399c8dc014b066115f817a40426968abd2a39ec014e357660fcbc840426bde52c8c726c014e6c8bd9e869440426da440806789c01510b23c52c1994042700ae2041f27c01514403d5cd7c84042712df86fd798c01534d23d71720040426f5076c5af22c01539a45fe8954d40426dc593c64e8cc015547cf004792640426b57656c9657c0155ce41bb7b04a404268e2acdbc948c015477e96918501404264b3a52252aac01529ead77137f340426338c5a85a16c0154c6ab9d499ee40425cac4fdf6658c0154f7bf30cf4d3404258f23e54013dc015465d0d3b15c5404258619d7cb0b4c01552538e7b0b17404256f3e6c661e9c0154bce526687d2404256300a15cfeec01555d6052fbfb740425610f4107ff8c01585daed65b85b404250de31549cf7c015c106d74e74c740424e9d33752b03c015d2db03d862ea40424f4e7cc9c3f3c015d7e04513744040424b5d4a30d945c015f54da17382b040424904d5833aefc016021b5d4b0128404246182e3b0d03c01617e28545cf98404243fbd541182cc01625f473a7390c40424379cac95ed1c0162aa412a1f6be404244d230238947c0166167d889f7ef404246845c3d0f22c0167275995f371e4042455332c04f44c0166e81882adc4d4042418a25975810c01649e329b07d8c4042419e7f37ffb2c0163d3d0aab075e40424079c6127c0cc0161795138098f640423fcd21979092c015f7358e09f703404244c38606eaacc015e5164aa2c419404244c152182e53c015dcae4cf3bd6c404243acbac07d2bc015d75ea870bbc4404244da542331a2c015b9f018f998804042446c62c7d3f3c015a6d0452fe8844042429a75e8f68bc015950a8ffbe10d40423c1b32aba3dec0156c535e185b8e4042379c4301b25dc0156ddbba9dc29740423640486b39f1c015572473743859404232945808a208c0155729ef81717440422f6d2dcf5fe9c01542b856e2d49040422bf277383d2bc01547c448889eba4042299bec580b0dc0151c7f7714c59b40422b26dc37ced0c0150268af6351d7404227d6332a1b54c01513891ecd1fae4042264a81611c2ec015142e603aa848404224971791caa1c01515702ba617dc404224d2022a9b80c0152f5991eca70840421f819144e15cc0153e2475e7490b40421e80ecbe489500000004c01515cd4bf05f4c404224e30f03345ec015187933c884694042256045d905c9c01521d8d2ea7326404224edd60f7445c01515cd4bf05f4c404224e30f03345e
+10;Cáceres;43;00000000030000000100000116c0173dd0c396311f40439281a4c17c1dc01746ea99efde534043909f53f654e4c0174407402a007540438f53fb47e7ffc0175573ecd9291e40438e1f424de0e8c0177d02b019c9e740438d592f1f970ec017b2e350b6959840438aa5bed21e82c017c02577efe1e140438ab97a9bb8bfc017b3c0ea1e1f0340438c03281dd655c017b4e5b60568a940438d64c58da47fc017c4e76d50d51f40438de3cb76b66bc017ed3fee352fec404388d09401aa25c0180987fdd49b67404386b9265c8b1cc018130d007fbde240439086fbabcc3bc018508a22d086e340438bff5588fc1bc01891946b0f203740438407b80319c4c018a2a91300b02140438728d5704e36c018cfcddc7d801a4043874e5dd3673dc018ec74f6d5927740438b7c7b7ba161c0192ded2e74bb1d40438c84a0eca7bcc0193f75178cc22440438e36941b8064c0193b164e8732cb404392d94e04c5b8c0194bf3873a8b30404397e18cda3aecc01969a9d381248c404396ef0ffee1d9c0197c9d84d80deb404394c7e93eaea3c019a90fe89a21994043953810dba308c019c137205b47d8404396820af66cf3c019f6e9521c351e4043957e84999c0dc01a295367b9ab3b40439741ca676435c01a28e741061e6c404393df9e71d6c4c01a4c090ac93a4f40439445097698b0c01a4be14100aedc40439576f864ab26c01a566cf37354b7404395e714e20f55c01a5204c6747f40404397038611a773c01a88911340d8154043993228667b8ac01aa391a93543034043997b233d580cc01ab9586fbee5eb404396ace7dda7efc01b00a7b42854f8404398d6582aa83ac01b11ec1a4d91b74043981c8edf89f2c01b2bf6cbac6ee740439b1e5dbf8a00c01b34145ef6745540439ea54816a2b8c01b0b7177e76d384043a367fb82d3ecc01afcaade06fe444043a92f26062c9fc01b3022684e8cc64043ac18f223624ac01b29f5f32e2cdc4043af266cacb7c0c01b3551c62c85d74043b1db09e6de9cc01b886c09b5d8b74043b0fe47ae9555c01bc9882041e1444043b34c8f9d0de5c01bfb4528b1ad964043b65829328f86c01c3291ea119af74043b7e4e48ebdfcc01c44a23adb7bc54043b507b16b2db2c01c097d43cd8a384043b1b9deda26b9c01c212e163dda014043af1acbaab03ac01c1ebb51a539354043ace8f340765fc01c312c9af13b1f4043aab0667e7df9c01c2f0429b8e9a04043a99731fe5d72c01c5179f3028df34043a7dbbe5fd532c01c54d74aa186454043aaf3e4cfdf0cc01c6835ac00c6c74043ac4b6b522251c01c698416ea41164043ad624d7ae5adc01c64f45c21adbf4043adf7c406d588c01c5105ff03bce04043acfb2994d771c01c407af07254984043afa69c02f7cfc01c65956842c5b44043b1505d251f1fc01c80c0f64c44744043b0ca4bb136f8c01ca51911fd611e4043ae404b76c34ec01cb612d5920fb04043aa57426b2354c01cac8e29ac7f594043a8fac08a0d24c01ca31d4f79c36f4043aa53a50debfcc01c9bab508c70a34043a9264bf9d396c01cd0c041b53d4b4043a20266236ce4c01d11cdad2db1504043a6947c36badbc01d3dfda8a6969c4043aba454af4006c01d39c1c6e7e4094043ad8fafc93978c01d4b3f3a053d0a4043b0e338cc1bc5c01d358489f08ccf4043b4e7cd86528dc01d3c57639cbb154043b73dd8c26834c01d2f9d770d975e4043babd39331edec01d600db96adf0a4043bd43a1d3ad70c01d637144a201af4043be73a686ce21c01d727bb21f6ed34043bdb5d8dfaaa0c01d866bc6cd84584043bef387f9ab75c01d8366bcbc4d3e4043bf98e375499dc01d8f4703275a6c4043c077316f8eafc01d9081ebd2f75f4043c3d311de2c7ac01db80ef9a934ff4043c46abb1f5053c01dd7f1111392734043c94bf943b471c01dfbcb07835fa64043cb1097fdb827c01e0a0fdf2c5c0f4043cf2150f30ca8c01e1c47c4a981894043d10c0865c3eec01e1f0d4051cc1d4043d410eae99860c01e2e1b01d2d7c44043d4ed12a3acd4c01dcfb378a411d54043d4e45196d420c01d9bf6454127be4043d2c4daf2ccb3c01d7fb887e8b9894043d35e92a146a6c01d54d45a9be9124043d211e77a086bc01d2562f13355e64043d4aef25df851c01d0024b3600ba64043d566b2ad7804c01c98e2a91345694043d3923e9bf20fc01c81333bec95404043d4fdb544675bc01c45b3ef6c70274043d42c298fd78ac01c0fb5976ada034043d5dc80921448c01bff56bb89bf994043db6b09008d4dc01bf28c83c2a8ee4043dd26846181aec01bf87d0c22d6a34043dec93c5ab56ac01be8284803e0f24043e2e7ee958e36c01bf53e836ad07b4043e5b22d9e37a8c01bf297ea7587cb4043e7b148a480f6c01be1a452f4de534043e9a5d4ea9752c01bcb6f8d5695394043e9f1c2e813f4c01bb72ca8e6a4cc4043ed6e1bda84a4c01b9d372b5cc7794043ef86fb62c889c01b9a159636b00d4043f47ec811d210c01ba2c116fadd1b4043f5a6df051140c01b8b0707b124504043f8606b20709fc01b8e002ae1efb94043fb49a1fb7919c01b84dda6e4b0c54043fc65038db1b8c01b8ae3a827f4334043fd7dfcb23a1cc01b7f71d3a44ecd404400d6e08a4c7ec01b74d2fca2e48340440198076ef05fc01b81dd1bcf69604044024998cbfa7bc01b8615ae098a904044054587c31c3ac01b967b98e3cd56404406a851200bc2c01b91e80c76e46c404407b3989e46fec01baacdf38ac91440440865361622bec01bb07f3048028a40440b32569ad290c01bc5d5fd78105d40440d619629efe0c01bc35c3865214240440e657703a8bec01bf26c97d8cf3a40440f40a6182d1ec01bf8efabe3b7e540440e622db8862bc01bf9161d6788c040440f464e98ea48c01c0d656ebc17c14044102c7b648b81c01c0930643214e2404410a7fd7b7c8ac01c15becb8ae0f84044126dc778faeac01c0e9d38cf433a4044131d8111afcec01c167c5f88370240441569c3bbdf9ec01c10e1d82a569f404416965eb9fd45c01c1e9fa8516d5b404417db16b3edfbc01c135e4b5c414240441940d9fea856c01c0c976ce5fec640441cf0a8bd2ba3c01bea8e0af01e0b40441ecdc13e7938c01bda689d44c14840441e7e2074f325c01bce42558fff67404420f810cc9abdc01ba11ae5df6d644044207fb2a60da4c01b81483fb4cbd0404421473b2a19fdc01b7590432ea8e04044229e141230afc01b568ced303c0040441fb0b585ef7fc01b3a0d5b883bfa40441eea270beeb2c01b3354bbf79b0b40441efb438b4dafc01b35693429b0de40441ff18d24daf0c01b224cffc09d9e40441febf293162ec01b05bcac297a5e40441e950b5b6410c01b017a83f71268404420071b25280cc01adfd233e1505f404422752e14e641c01ac2b349c3ee5740441f0f9078ab04c01aafdff83c80ff404421b199cd6876c01a591c4ad326c8404422a6fdbd270ac01a39860eb3883f404425382d9f5bb7c01a424ca0307b624044284540bc5dbfc01a3ddc374df50140442a1e46f2adb2c01a2527a5b65d7540442c728078e9d5c019dec3a6b35d9040442fa83f485924c019c0d5a99dd14040442fb70476e5c3c019c232b7376446404430d786f63a15c019ace0a9a37cf34044331beeef9d99c0197b1b766cdd934044338289fdc53ec019728cf6843c774044341b6da4733dc0197652d6557b77404436104739bf2ec01960ea13623b12404438acdf4f3901c01919ef17135bc340443ab0a75f2170c018f5b1afd4b33a40443e30a150a5bec018cbdfbbb4430b40443dacd6e9976fc018b8c509c60da840443b2939ddfad0c0189e33141854a540443a2e60071e24c018968b86e4e9ad404437d2b8a7af65c01876e9e09511dc40443885df86158cc018849780b20e7d404435dc5ec803ddc0184284912762ce404432c3f3301f13c0185735d3293aec404431fba1d2df47c01849e337612f09404431894366984cc01858667b67b2f64044306351d658dfc018545af7c84e0d40442e7db9897910c0186c40ba967a9240442dab78897e9ac018356a46f9415340442bb7ea2d96f9c0181066a8d6787440442b8eb25fe417c018140decf502c44044294c67682a47c0180614eb9f75d2404427249ecc44a3c017c04a09275fdc404423f9fd968806c017ab2f97ea8f4d4044238b9521314bc017897772dbc846404429ce2ce96d18c0176b7f504237b440442b4fd6cb0601c01763757b460b41404429fd71e5f66ac0174970f1376dde40442c98d6e8a6ebc01732856afd3dc840442d47b2af72d3c01720c295801e38404427fe8d914504c0173600417f8d6540442618d65f368bc0172c2e103c40d7404424b2be6e3a46c0170f59e183fa32404423f090c3a985c016f3436fdb1e0e404425a5d4b932f0c016c5492b30f50540442563bb3fa06ec016a0755541a5e84044229c7e65e187c016a3d739e325aa404420fe8da6be93c01698c797e23cff40441ff6d5b6f89dc0167ced8350acec40441f790a2cff93c0167544a41641af40441bf13269ac0ec0162a21cf5da0c54044191263718bd6c015e2365a042d6340441a9aedf14e7cc015df4e15af0b3e40441cb11b045717c015c253a760c65940441de783f4e410c015b76528dfd956404420556ae73ac9c01595253b0926ac40442009af3c7f49c01560acdebd319c404421e394e32f18c0156f5b7baf567840441d1791f36e33c0157a8ac84e159640441bf1a589bcd8c01574d55d3f2052404419ef5a9a9a0fc01578d3b9478142404415018745146ec015580a39c8564e40440ed320e676e5c01579ddeb2d351840440ccf981ae0cfc0157ed488b67b0540440797de04cfebc0157313d58eac1a404401a419ee464dc01575e84ee6f6784043fdd046d2aae6c0159fdb33fef1494043f0596d0e763bc0154b611ad5a1e74043f22419449f98c01522dda7907d3c4043ee937206c760c015401712962fad4043e981d63fa36bc01543d017dae8194043e2d4ef459d99c0153b79157bce694043e1487bc6ed32c01504f054efcf0e4043e04cbee66b6bc014d36baddf32114043e6166cfcb627c014aae7b93743b94043e66286455c89c014a242fca9df374043e13c94970c88c014b223a5656e894043e0291d815668c0148d19d10c77884043db8515d1d701c0149b7feb3689184043d916d3b28057c014a0282732ec334043d64245346791c01498b39c7187a44043d53975f829c8c014a6523f120ea14043d3e24e158418c014a5a59a2de91d4043d23b5ff6fa62c014d395846123314043cc721cc1c679c01455e85184fa484043bece22b1ca82c0143c4e5dfe5a5b4043bea539d60f97c01408ca17187e044043b7ac79f32d81c013cf5f87c7568e4043b28f1f558e5bc013e6078040c6df4043b2796fff27a4c013e059b3a589674043b111622c5ec8c013efcd509179204043af95496853d2c01409191a3e80d74043b06b507b4297c0141412a0493ec14043af240615540cc01437206f02b9914043ae63fa1892fdc0145c06c85fef6e4043b1f76b603a17c014744f80a45dcc4043b1987dd03a6bc014728abb8de8bf4043adc30069cc11c0147e82d33727bd4043ab1259b45156c0149d1c10b562814043a8ebc58fb07cc014fd900a46216f4043a6a228d6b048c01521e1bace25454043a8e618000491c0155c0fe5bffc9f4043aab1e42242bac0156be7f730dfad4043a246fc2ca595c015637c8c53c70e40439e9ce5fb0251c01589898716a3f74043964261a68588c015a7bce8b1b8524043940d359fc174c015b6e32eb06403404394cdf3f4031dc015d6e09875710a4043944557c9a6b9c0160121ea9410a24043981cdb2f3295c0160eed9247c94b40439ad7defbc5d7c0161cd1efeeb248404398822d1cd4dec016343cbd7596db40439ba1cf7765d7c01673f64ac1e78f4043981774d13842c0164e66138542f640439350e3b933a4c0165434cf6a8be5404391e7905d04e9c016678ba02922314043911ea144a28bc01655a1583279ae40438f1e3298e218c0165903ea4defac40438e8b6eed8d51c01670bc5adc110540438cb3dfa2dfb6c0169570205fad2040438d18eae3f544c016af058fe1dfda40438a582a4be189c016c5a290db7c6040438ad49fdfaed2c017054d21013da9404390ef138d6a51c0173dd0c396311f40439281a4c17c1d
+9;Burgos;41;00000000060000000500000000030000000100000028c006f36cac6a707b40455ebcc06980e7c006d2e77954077240455fb9041c5e1fc006c9761b31ac17404561b389a504ddc006d4cd934eda624045624917b8a5c6c006bc1a47cc3ed54045635a67a63da8c006af0cbf6744c4404565ec29156f76c0069d4fcad4b63740456468df655e5dc0066899bd9a998e404565778f817061c005da384bb2164f404565b29ac5464fc005265039422fc0404561e238b7e00ac004d19b5d1bc287404562a40a1c1ed6c004b705bb2ae3da4045600a932e1204c00477674168e731404561a13e5e5f87c00494be45395ee140455cd26e307909c004b848bf3f233440455afa4d638b15c004cd6eab9580c240455b8ddf10c723c004df313acf4da040455911f88a03bfc004c0ca2d4f0769404558532efc16e8c0049f449914c20d40455587fcd50e76c004631409b36e3e4045559b50c4cfbac00450b0636837d6404557e1d6dd7a78c0042d1ade168fff4045578e5861afb9c00423a13e4b0bba404552bb0510d862c0046065f0164a67404551958b9187ecc0046a5d5fb524ee4045531ad2339402c005142cea07b4ef404552eaf47df456c00545fdad36d1c6404556130a39d0efc00554c7f72da70b40455545c20116d7c005a08cd529d75a4045564f269d9267c005c0d544f4037b404554b808daeffdc00624a8acee1b634045553fd874c318c00634b8c0951fd1404555cac4542d54c0062a005e49b75a4045569bf24a9becc00646a97d4d99cd40455976ee1bda85c0069a37ed798d0240455abe704641b7c006a1c38df8956d40455c088b8a0c5ec006d014f2ab58b440455cd031953d2ec006d77e6fd8bc2b40455d47dc2f0cd6c006c61f4b639a7340455d89980668f3c006f36cac6a707b40455ebcc06980e70000000003000000030000016dc00e62c1e7492d7a4044bef76e9b0214c00e4d16f223b8304044be30d1750e5bc00e974d2d8de05c4044bd95ceedd31cc00ef18e2354fff34044c42837b75166c00f1614c897918b4044c42297623a66c00f280bf6fb96dd4044c6acf626d217c00f9fd78460cd4b4044c9665ad72ae4c00fb5eb306db99f4044cb04bfad548dc00fda6134f931044044cab56c4cc921c00ff1600a1aa4e14044cde887641e1ec01008f1a41413554044ce1591aac066c0100611afe6f4274044cf47402a0074c0101d674c03528b4044cea4cced47dcc01024213b41a81f4044cf7093a88b47c0101956f43ebce64044d4b159650752c0101aa9bd6460384044d89ff3bf99a3c0103636529136384044dc1aa6bb5161c0104e314c284ca64044dcf04f03af74c0104e8ab583b8904044dde5752d5c38c010392045114e7f4044decec33a2f85c01032c63d88eef44044e25478659ff6c01027ee70ea00984044e2cb0360aa08c01026e8f8fd57594044e519de5614bec0105c3aa3fc04594044ea59c22ad4b8c0105a2962240c7a4044ec1df00f0afac0105138f3a2b5b44044ec99ee8493b5c0105af4fa3d73534044ef7172b1d6dbc010404712e408534044f0455f475aaac0102679f8e1cb034044efb6fe2c48e7c00fd8792a85b1fe4044f34766de7dc7c00fd9c8ae7c77174044f72147d29655c00f9e124210b5754044f7b82c415185c00f6ee23fd93c7b4044facc791d80cdc00f22c6e5b5af844044fa9dc175c56ec00f1e33fb5a28ec4044fed638b7bdaec00f21ba9ce33eed4044ff92148e9c2ac00f4816ff9848844044ff9c9e736a7ec00fecf4fcb91b0b4044fad91e589f6ec01021c4cbfffbd74044fa1f5e527953c0100f214c3392dd4044ffd1a36b7f80c00ff54e1231b0d4404500b12e3a13e7c00fc4c239e598bc404504406682400cc00fda799aa941b640450688c0a178eac00ff872f6dc59a2404505c18b7f695cc0102830bf5cef11404506d43c6286dec010310871be893d404504ffa723b4aac01041352468d9cd4045059621232a16c01051cdfa6bb8d8404504b54c438badc0106a9ae0fd9781404507e3629904fdc01069823c63663540450b244607989dc0104f58616267f740450a951f83cb49c010398e42bd2db740450ceabdfb9b0ec0106a45209b80fb40450e0a475d1cf8c0107b19cef7e417404510667d82b7abc010917e3b4ce5c040450f4fe988807ec0109abd8f3990bd404510ceae47eb40c010b503f6c964524045101c289fdc54c010d1eed7a861ce4045111a18e7cfd5c010cd98b0bb74354045133b76361acdc010d30c46459ad0404513b5e09759fac010c41364832ec1404514dddff3dfd0c010c12bcc95221a404516939dd715fcc010dc73ba594f1e40451a7b78d1f8dcc010ecfe5e032f4f40451aae7c27a163c010e86047ad2c8e40451d6256ead0f8c010f318886aa5c440451e3eef6984d4c010ea41100473c74045200c4837d22ac010f9f703c6cdc9404521342a3c722ac01101ee6d7dd439404527ae3d015f9ec0110e913818979e40452811aca39524c0110f4b6717cd634045296d57e77296c01106f0847327fc40452953120d6b1ac011142d2719634340452b6be7c96c34c0110f2db40fb3f540452d1f29f19605c0111f4096a6a8ab40452e908426eba8c01117464fb4620c4045315f3fcbc7ebc0111a93458ef7cd4045322a92789ba6c011494e486b0667404530a084197faec01152dffffcc75e4045320c0000225cc01151700006fab540453405fffefe4ec0114400000000004045348000000000c011553ffffdda4040453558000044bac011575ffff87bdb4045371dffff4306c01144b431f6474540453abe26f765a8c0113a65cf11cb8540453a076985189dc010f86a9756260540453a66012a913ec011047f9389095440453be4aa482c59c010fabafb46bb5940453c6e0ba7ba2ac01100d6781c465d40453d78293a13abc010fcf87fa5741040453f52d752e2a6c0110cf3322b0f3c40454183d9717e7bc0112512966336e5404541884250a9dec01116adfed65f484045428eba088b25c0111c5b2254578a404545b83ed1b322c011369c6f9e03c840454715ee1148b1c01130c7b5bf47b2404547ba594ad295c01138aca97460ae404549102832346cc011154f9f69561f40454a6aec8e6f56c01124491a72946a40454a7e5e123799c0112cf3b1235f3c40454d7905b8af3dc0110e34abfb935640454f192bc6be7cc0111bd882dadda9404552568e18d45ac0111aa8831f0c69404556272466e796c011285747061b45404556d2ff78bdfac0112c351d9918154045586f5262115cc0111117f0032a2440455a4723f84f29c01112106fed5663404558dde5bb7d92c0110736046b410e404558140c110561c010fee589cbe002404559646ab46509c010dfd14d6da4a740455a3311cbeb8dc010bdd5ac220ffe40455e3b38813709c0109472bcad674f404560526dd1fbc7c0107fc609c2aa124045603628188088c0107ef6096d4d4740455e3ad27fd056c010702ef49b591e40455defc0e50474c010574e42c7ea7f404561cd7f0ed3dac010032af6d73ff6404561b5a6460b8fc00fece0d2d7ed82404562af9d021516c00fd4c17b2c688c40456108cebb6470c00fb9bde01fe5cf40456119c3758b1dc00f71d86f983e5040456322647d71e0c00f49a1912c2f2b4045625a762fd47cc00f46fe3478d883404564aa2afd3feec00f342c023c70494045650722bec6d1c00f27d354a64a84404566fb1711585cc00ee831080abb71404564aaab0cbc2fc00e96a4c060a529404566410893a25fc00e870bdeb9110c404568159a88a44cc00e89338ca7f73340456b1131a75327c00eadd81d96717a40456d9069c96122c00e9c0a3ba95f9c40456f7da380088bc00ee91c442e582f404571df8cad77f3c00efd921574640a40456ff8496e443dc00ef2273523226e40456db33b08f322c00f0a278007de5740456cf18a2859dec00f4fc967e8719a40456e1c6a34e348c00f2ce8250f5078404570d8896c5877c00f6491897fc60a404571c7d963f026c00f233c9e8e42704045718aaa7330a5c00f44f5192d5ec54045751e761bd4e2c00f1e52d6557b774045737e4f88a0c6c00eecc8ce0f97f94045731cc143791ec00ed039d0dc2607404575b1c1ddca3ac00eaac186a62a8140457591d61a9821c00ea534e86a0c3a4045770e8f021994c00eefcf413daf5b40457a37d93760b7c00f195c6b54a68f4045797131792767c00f215608b165a6404576764eb338cac00f4abb461a493740457631a95ad7bdc00f78d9ffffeed3404573286236785ac00f6fe7f6ec277e40457514db4603bdc00fc943eb9acbd1404574aeda918f13c00fe72015380f554045768a2d66a6bac00fd343a1da1eb540457af04cca9a29c00fa611864b6f5240457fbd3d021402c00f462addb5638c4045820f7a647db7c00f20df2f25069f404585552832708dc00ece68ba0eeb3d404585061008fb6cc00ea776847ce3114045882b76098b5ec00ece4509fde34e404589dccc2d596fc00ec6aeabc6e52440458ace4faebef0c00e1dd64d0f638740458a5f50ca9532c00e09ff5d652d4e40458cdec5b54dcdc00da32d8c77948440458ee2189b4ec8c00d36ca5f92c0404045972435cc371dc00ce64ba008ebda404595b2c7771149c00cd40e9eee061c40459327532d4601c00cae9e0d57e886404593c3bab742f0c00c0cf5c69626f44045915dfc9badadc00b8edc3ce879e3404590d610872593c00b473ffca2dbec4045912d7e1d3c51c00acd3af233278f404593ae16263ab0c00ababe0bb6390440459560c823bd16c00a7a8d507142ca404596076e132e06c00a38dde7402f5f404598e5c3d42abac00a06b43f736e9e404599708d5331a3c009caf1251bc355404595c6e6c89041c009aa40469faa33404596f6eb52e397c009801a97caa646404595a978926b86c0093bc335b90e43404596a714f788e3c009227cd1f3e44f404594a01fbadb5ec0094b7738e06017404593bede4a8137c009558d2e627a2f404592cf0aaa2808c0094ab3863afe3f40459253f30d398bc009744c6b4ebebc40458f78f463fbbac009376a3440125a40458d53c23adeb5c00921c65cf9b3c040458e2988f8c024c009124f85f1937840458c722bce5c67c00943f7ce945e58404589795b3e47c2c0091f5bca9add2b4045889860db1d59c0092e7156da574f4045846a71560c2fc009228788b12538404583d0f2bf584fc0095caba6e25779404583b8ae6115b4c0096c239a751cf4404582d061fc3839c0092887489a5ecd404580e019f117dbc0087ba1b8b320904045806934e6ab5fc0084bfc54be8d0840457dacbfb5a6dbc00855bef051727540457c0f8d2cb4fbc008274fde17559040457a1dc01e2c80c007f545984bccef404579dfcdbb3449c007d9f2454eb6134045784de2858a88c008187abec93a2d4045760c718c790fc00826b82c9b83444045744a1f486fb1c008bc9fb635a8fc4045730b2e51a20ac008d659b04a8b14404574801bead35bc0090322b90157b3404573b83763077bc009101252e8db21404574eceee3198dc00931b602dbd27a404575624f5357f5c009286907f8bf3c404577a3ac2c993cc009cc3ee30389bd4045798f7fb3d925c009e26b2f67bb6a404578d076d4b76cc009fd04ed583b34404574c12e8b252fc00a37c92bc747ed40457366f5ab45f2c00a3612a94758fd40457189e0f4a1fec00a4b4c781782984045714c8d1d1aaac009bc5a9c94dcd8404569cb429c655ac009a4eeb9e51c2d404569e847694287c009c70400eb8d5940456b586adaea47c0098686a1b4092140456f4a94431884c0094d7610fe550640456da98bea846ec0091c193f85ebac40456f868bb77b24c009016d638e4d6940457216b52bceefc008eb65af06684f404571d2e8db204ec008d725f0299e34404570964be92efbc008e7bb1f255f3640456e375a6a03d6c00921269a03dded40456b03c7732444c0094619c3edcd70404566fcda14cdb2c008fc6cdfc9a11640456508a14ec4b5c0092eed306f897b404560db72079587c008cd9da426769e404562388d2075a8c008adbe95dafbc3404560e908754d13c008a3c2382f828b4045622f9ed63bd9c0088406229da88c4045614dcf2d71a0c008626066698ddb404561f749ff63b4c008555501393b0b40455e9da229827dc008221e799b550f40455ed95f59793bc00820fda282a15b40455de56868e3dec0080b0700e9f99f40455dcc56ce4b86c008127a9db38d3f40455cbb4ff36e89c007e95b7730495b40455c0b5664298fc007d845b6cc0d1240455a0bc50b9e80c007736b9695c7ed40455aaceb707beac007714a3e22e1944045598ea5f9e8ffc0073852cc335271404558c7f8ce43adc007291257d7938c404556f3b7bf96d1c0072c0d7fd68b23404553bc92c73147c006dd527779bcb8404551b69183eddac0070ea14ef83e4940454f73e7ae4f8ac00726e6f700b91f40454f87c2d78085c007283418adc33f404550578a513868c00753fc1b4c953840454f4c740e920cc0079254c1f93434404551d51fe6940dc007d8349247af864045514eebab344cc00809bd74e2777c4045527744066191c00824e3d8e089f7404550eb32711f05c008ac57e8049cda40455202042af6bec008b0f43bfc857840455059045546a7c008904bcd55553f40454f8a801cd70dc0087a8865e1fe8640454b6a85b4234dc008b08753e0969e40454a85df528b69c008a8ab94c3c6ea404549796b5dbe6fc008d4787e5226a5404546cc3885e109c00912fce0e6b52c40454561fd2d0945c008dc11cb59852d404543aebcdb2bfac008b6e43a853fa3404544e647bf7ea8c00894a064058573404543b3c005020dc008a263e3a19ceb40453fe237717527c008c1efa5ae949840453e79386c1360c008b92f253a29d040453d2b4532e505c008837ffbec52ad40453c4803cd9d8bc0085e3751ea9d32404538facf472e1cc00881a31c2ce4ef404536636fcb02e2c008747dedc18f0140452f651ba76a2cc008a9458adfd3a1404532dd7a531c21c008a01c5ca46822404535374f4a73a0c008b90bf8d409244045361038d6cff5c008cf8ecbb54aa640453558f4ec5938c008c4124d010709404533dd029a3927c008d7980906f5fa404531748c106678c008adb16e106da64045315456aa97d5c00881f876d24cf240452da843355eddc008e099dbcd8a7c40452cfc43636841c008e2b187aa8c6440452b5683a0c519c008c453a1569629404529d82f523944c008da731e85a71f404528033c2e9e3dc008b78b609bcc24404522f344cc9ee6c008c820df513c67404521acf41f212ec008b56e590a438c40451f73eb3ab23fc008d1055133e06940451ddea8123e83c008d48e01f203d040451b5a12814826c00908523a9301834045194c83fca456c008ec2e8e88c460404518192f97d962c008e825508b4c944045169237d4c75cc008c5c7c1fe9b2f404515b0a8e1ad7cc008af780f5b3cbd4045112e22161936c00878bd4bfb56234045104085a38fdfc008466596e63e9740450b00d7df581ec007730c6c974f5f40450b1b73f9cce0c0074f19f8e94f29404502ecd1a2d307c0077515c984b29c4045024cf9201a86c0079aacaaa99d844044ff38189be967c007b9f647f0599a4044fba721b14475c007ae3e79fd0af24044f99d914aeb8cc007c42ebe2e79674044f6f26dd75a2bc007fadea8fe77a74044f767b5978d36c00810881e696efc4044f60b6ead20a4c0082258e39bf1384044f1862632a248c00878149766b9734044f216ef96e26cc008b3ada8f8bac64044f02c1d304db7c008c6fe3a60ac9c4044f0c683d2b2ebc008c6fb188f98e54044ee41eeaaf697c008e6996f49b1474044ece36cb296fdc00916ef1405aca44044e7edb82e1e10c0095eed840da76f4044e58180d81b7ac009823a7332408a4044e69cd7b1d82bc00995f32eb64bd74044e89a564d3ea3c0098e541cc05db24044ea1a3febc220c009e0072a15d3264044eb9a25dfd253c009f975d5669bb84044ed9c080d2e81c009f25d4a3b960c4044ee97721523ddc00a27eede91e8984044ef44d8145c36c00a2b1334f73ecd4044f07b3889ce0fc00a4522bc8fe02b4044f120ac9dd843c00a510a0522bad24044f02e2d39f4efc00a3b775af7bfb74044ef17d2c954e2c00a4fe325ff98fd4044ebd5cec72b81c00a3fc6c77a278f4044e954c985f070c00a4ae9bec26a6b4044e6c564745a01c00a33fc1699fdf74044e5ac6a74c684c00a4972ccd1297e4044e4e53aaccf2cc00a342131fed5b44044e263ccc39292c00a4be71a44be914044e14bf13a6a5fc00a75317e85ca8e4044e14c9a82a2b2c00a954b317916394044ded6d0668a4ec00ad5c7a523432f4044de5e538e58afc00addff2acb8e3c4044d8c2019bfb38c00b25ad706619904044d86605157134c00b51311303a40b4044d5193b1a325cc00b5a3d6692dc114044d271eab3bd88c00b70224c1f013c4044d2b93ef2d166c00b7e0befefb3fa4044d1bd43c718f3c00b7b9abd0dc5994044cf9eaa7cb82fc00bad6d858350f24044cb6d301deec3c00bcd8a0574558a4044cc68f0f40d48c00c147eda84231a4044cc708d9e5b17c00c3bb4f4130cce4044ce6a910fd4acc00c674c37cd32094044cc5cfd8924a4c00c4a018a6617594044cb115f0d819ec00c55214f38aaf54044c9ef086768d6c00c883867695f844044ca3c07ab789dc00c94bb012e8f724044c85f011fee3bc00cded3d1c6283c4044c876b8f565afc00cef47e66263e94044c9e05057864fc00d49d34616426b4044c875406f97fac00d8849c204b68d4044c46bb48c97b1c00dd391704cbb924044c241f7da7535c00dca2d20dba8f04044bd5692d402a1c00ddbf7b8b3bb2e4044bc2558d0b7cfc00dd52ff5cd32604044ba936ddda07cc00dea761c1999b94044b9b34bafb46cc00df3fe837e24494044bb03fba4c8efc00e2873e60967664044bae642a1879cc00e212795f118874044c4dade976958c00e6e2882cd71b04044c3254aea566dc00e62c1e7492d7a4044bef76e9b021400000006c010269941a761a640450d21901b742ec0101c42f73a4d7340450b3ec356a3c8c01020b3c25c27ec40450a10c1163de3c01018e7e72f799640450a609b944e34c010223ced82602940450db15e20359ac010269941a761a640450d21901b742e00000009c0106932f00626a5404511911860f4e3c010557b05afc250404512151f45845ec0103fa0e7857996404510d79cbaf26bc0104c45403738e3404513fbe4700a32c010433679b9aa5b404514eda37e6c39c0104e1f75efa3f04045157c781e7d4dc010607d7314c1fc4045143036bcde20c010728730719e0e4045144c4f86477ac0106932f00626a5404511911860f4e300000000030000000100000005c0078fcc7fed428640454d4c25365f27c00779db0d34fa6740454e9a04675ca0c007618b2adab8e440454ce7f6a5498dc007836f60fab07a40454c11c1f00b27c0078fcc7fed428640454d4c25365f2700000000030000000100000004c007feb9e228428440454cebcfa9427cc007f4c94d4ca02940454ec865b2bfe4c007e1bbdebde60040454e9ec14548fac007feb9e228428440454cebcfa9427c00000000030000000100000005c011015d1f623d5a40455cff7fe7ecb9c0110d771a465ae140455d8055d95900c0110ae348ba2e0f40455e93fc9d5b2cc010faf0b3b1c8bb40455e345ae1b421c011015d1f623d5a40455cff7fe7ecb9
+8;Barcelona;51;0000000006000000030000000003000000040000012740005f61ff125e164044a299a08320643ffef5f60ce210ad4044a197952e36303ffdda3d013d41d440449e47c94d107f3ffd0a09020fd84340449e34006917ad3ffc9e01411dac8f40449ca1b51e26d43ffbe1793bcd82f840449bebac3e95703ffbb70ca13453d640449a88dd3e89ff3ffbc560617ad57040449ba9692ba3d93ffba6bfe3c16c2d40449b831c74d5c03ffbaab2ad9a601c40449a9eed8fffac3ffb72b136ddfc6440449b11cfcdd5833ffa5b1558d7b285404498aceafa5f583ffa79f215cb5d25404499370a76592c3ffa46a13f4427674044998a065186633ffa428253c6956a40449b1a8b9ea6973ffa734ecb9dab5540449a8c7c3812743ffa41734b1dad0740449e207c1f3de73ff9fbf2ebab9b6040449c8951e572583ff9546748c2194940449e37cba90b523ff91f34336bf0c84044a15d2bd9667d3ff98243e3c957674044a125e4f6ba313ff9b209036771314044a00cc22359293ff9ea4fc63be4074044a0794181cced3ffa0a11437448fe4044a27fbf4829e73ff9eb8bd60c91894044a376c9e7506d3ffa112319fa40e94044a43221209d403ffa0b63bfc2f9104044a5b75ec043973ffa304b8d4fbce04044a5e1c03745c53ff9dca1afcecb664044a584a0bd691c3ff9cafac37785eb4044a4802c647bc53ff9699d96310cf14044a595875958c03ff98aac8fd1aaea4044a77b4fe2407d3ff9322cfd27f8314044a856e08e98013ff8f1fce4d3bae44044abf20b12e1373ff9403fdb7369ec4044ad3d25fd620e3ff93f52d98586ac4044ae64fe2045b53ff8d5a29fe3c6cb4044af1e4793bd623ff8979f9404844a4044b152eba63cfd3ff8260c2afdfce84044b27cfba097323ff7919239f63d564044b0bcaaa4c8913ff7d7b75c223fc64044b363c8c3390c3ff799fdbd7459084044b6f84b82d7ae3ff7ec58316f63bb4044b7c2071424023ff79c4def54bfa94044b7d1e79e8a463ff77ee8e4631f124044b8d3c9c9c0b23ff7bb18eee44eca4044ba9a41d116f03ff7c0c39743fede4044bcca3e85aa573ff7953b29a1b9fa4044be3db81e8c553ff73b3571a6e1564044be40f01d926c3ff722ffbac6f7064044bf561c7b4f9c3ff657704e6911084044c1a676502d2f3ff68a20efc24dcc4044c47884a10f053ff72d65d08329854044c4bec885c8e03ff725c690c88fa74044c6b4a8b834543ff6e57da3a264a24044c71fe26029583ff7458fe62b5c694044c8db16d64a133ff6b703f24a57344044ca92d7fc895c3ff647cef0b5d78b4044c9a028a9ed4f3ff6863de43393224044cb9d58cdc3e53ff684709e1a29444044ccd7cb1a3c8f3ff5c42f9283948f4044ce8ad4e79ad13ff643954f1852434044d13195975f0b3ff6e39aee7227d54044d09dcd2982ca3ff7367c6ce302444044d1e76f0911103ff6a5e3a7fd01154044d65c69ebdf963ff6c5e0a3b311d54044d790143d57573ff677b35fcf849f4044d7d4282d3d1d3ff6767d3c632a154044d8e49ece6a653ff65540f546463e4044d90b1789113f3ff66743bf839f434044da273f635c0a3ff61c43b321efae4044da79fbb358f83ff6ca9e0acb12c24044ddc8268ea3e13ff67236ff5f5ffc4044df6e83ec33453ff6aa52d209f87d4044e5c0d09754123ff6d5d5d05f311c4044e6a6f9984bab3ff78a91a48b42c94044e67985ac40aa3ff791a0f4acbab44044e42af696d34b3ff75fb875fdb31f4044e363dee448e23ff7809a4cd070cf4044e2a846f100343ff7bf4785584ca64044e2cb843a03543ff7b98f2a6616464044e541bdee15503ff804a8f04eb2154044e510078a0d0a3ff82c8137b432894044e2a9a48b87803ff885d1964efb2a4044e1c2d465f34f3ff87dd204e767d14044e054ef0756ae3ff92946db5bb0d64044e41d86bf887e3ff97f5d776e3a604044e39322a5241a3ff998e480a6363e4044e4fefc2dfd2e3ff96bc4322fb93d4044e7013eb558a33ff9c886f3e9601b4044e8acc34cc6583ff9c297ddfa13244044eb062e0416b33ffa1a731ea803374044ec1f9eabd22c3ffa15bc88649b944044edec813074c63ff9e79be545b6e64044f0d7552006cb3ff99f110d7714934044f130590c13683ff9548c79e538184044efcddf8072703ff918b8a33057724044f09d4249eb4b3ff93766e601ebd84044f20ce8f19b903ff960121e4bd6aa4044f1b30d1d9fce3ffa3353092b3bb24044f6a0a71d18733ffa6b575e581c6f4044f69d569f6b623ffa475192d5ec424044f863360de19e3ffa672a6bb9618c4044f8f0e4fc65e43ffa4e3d29e842054044fb61c7b0ae343ffa61a0dcc8b2254044fd65a551c4d53ffaca1a2f08dfac4044fdca8e101af83ffaaf380c4fb3614044fc330224b7343ffaeb21181ffec64044fbdc04e5ba513ffb8246c7537ff44044fe14a6847d6d3ffb663006f2a7424044ff0b5184796f3ffb7a9941ec19d64044fffe814734c03ffb2dbd4b023a76404501c4601f58133ffb0a9b5121273a404500a75636a99c3ffb28acc773c7784044fe2aa1df63533ffaf4ccd89c74fd4044ff60802e9fb83ffa9854b5057d3a4044fedd2692a2153ffa85edf0cda1ce4045005f7ce60d443ffa6eb971f384bf4044fef9120d7c483ffa5a6369c2f8744044fffdcbb4ec283ffa889e6801e95d404502cd43cd00c73ffaa165f56c171b404502c48290e9723ffaa951b633b6c5404500628d626d783ffab8379940d0a34045020139c02ef43ffb31f90177e90a404503b22c3570ae3ffb1548b6e43e6a404505d49f1c430c3ffaecd6aa825b4b40450632e6dd194c3ffadf18369c6312404504e4583ba2bb3ffac106de9f0fd940450537f36161193ffacb448dce8a3d40450781d32fce8b3ffb0ee107ed344c404509a6d0f196fe3ffb0f1443f38e9d40450b1bec4b28843ffb527140092f7f40450a8d3b9f34dc3ffb8dea8349a9a040450baf3514e84d3ffb90e3a14f9b7440450ccf6a33d8fe3ffb456d342d509340450d90cb9298a73ffb6590373ca49a40450f3c432747173ffb2d0357bd1a174045113a7137722a3ffb6bb498675945404513cdbe64543f3ffb95637af99b624045138915a638173ffbd027c3128ece404514e4d2702d6e3ffbcf089bc1225b4045183ef20562e33ffb8b8d34e4ecb240451919aa941b5e3ffb50971947e0d14045184f642df4523ffae2bab298eefa40451a66124bba9d3ffae2e849e7100140451cb7e909882e3ffb45eb0e9b123040451e919e6973483ffaf429e2852374404520d2ffa7fc9a3ffb1ef49d3a26dd404521c57b4bf3153ffb0ad07a00771f404523782b3b53503ffac0f84e0d87b1404523dda20d97aa3ffacd07c919865c4045249892de69833ffbab477ec4ac18404524490491f1403ffbda04a5a38a81404525323fdcfe8d3ffc76c295e7327f4045253b268fbf593ffe732e0a3aa7ad40452961ee9244663fff074ef5a04474404528821056f66d3fff178490955b694045277bcd82f78e3fff312f757d497140452867c7c971933fffbcc22b66beae4045262561b732bb40002654cb19aa88404527b90bad65dd40008df631418de24045253f33780dbf400056ef0a3969d940452279bb84f33c4000396194f8fe8d40452057a41cbb89400032c7c99c857640451dc66c8948c8400022e05503ac4c40451db81058a3ed40003d6e88042c1b40451b9a58e085ab40006cc27d462f6d40451c16e5e464b340006ae3ba9c6afd404519039044fe85400081e0c7891eab40451883a7b2ea814000765552cb5c944045165c317fe5fb40004c8d1e0b2ddc404516de745490a640003958d79027df4045155450d83d4c40000988abd80202404514cb729a265d3fffef3345967bf3404516044f382a1c40000c01b02e5b884045176c462ac2de3ffff67444feeb374045187dfd57954f40000fd6e7e158d4404518c91264fed53fff6f37fa983719404519731fc37afb3fff72df3c3b19b1404516e11a27afae3fffde8b1445b23c404517502e1397403fffd8e8e383c879404515f008b15477400008614e46008d4045132b0d995f7c400038a0d7d9f9ba4045138f85dc19ea40007bf3dfcff8954045114d829079c74000bced9b34b57b4045127bd08e80eb4000cf859d04d574404511e62d14a4ed4000cc57690c4cda40450fee9d72fe364001015e9df8ac8240450e612ee21e4c40012607fc11a2af404510c1f6c9ba384001728543cc329e4045114ff849ecf84001828604ab244c40450fe89ec9731540019af6adc6cd2f40450fdc04bcecf54001a135dd17d9cd404510d3a10946f34001b42d1b8e73434045107fdad47ffd4001a46c4e6e08584045111a0fee011d4001b744a325bd074045122b31bcbb8840020f6eb0148ddf404511be96d1f1ae400228b1950557a54045128fb9b5b29940025511acb6e8f14045108a1426b9ba40026679d41b398640451122b95b897240026e114e9824b640450e611ab9b71340025cee865af87440450d235aff6639400290db8964537840450ef274e562cf4002ecc1d92039a940450f7ad327514a400309bb029fed7140450d4490be28c54003338e444850c940450d27184e3bb4400327eda2e3cdce40450b1b17979019400357167cc420d740450851234689b040036b185b409877404507d3d03493e44003aa2441a02ad040450a25ddb301a94003d7c9680acdb140450999ca25167f4003f59175dea96e404507dfa9af778e4003db951b271a434045064dd1dca37c40040c9dd4197ad9404504218d3addef4003f3c90bf805e1404502b73bcbb31d4003f614726c9dd24045017ed90a2e13400406d50ac511284045013d291182704003fdbff784e4e040450031cf2bb2f34003cfe83c5023954045002a376bd20c4003c00fdfb5cc6f4044ff35fd8a514a4003e778848749f24044fe099679201f4003b8c20e8b66af4044fbbe9f0ca02340038297e8947e7d4044fc9dba2975df40036b1424d019084044fc067f7a4d684003880fdfd828874044fade6776533b40037e7db55149e44044f9573c1e60b640038a002651b48f4044f880a3e589184003c5c44b5a2cae4044f81bb03907224003d929ce5a967a4044f54197648b1a40038a4156030e4a4044f199f102612f400341c3351e6fd84044f29d316708d840030f58c9ce48564044ef94d71445d54002f521e9f972364044f166e1a315104002d88c9f9c4e3b4044f0c813e031af4002b3414668bc7a4044f1cfc578784040029faa8b732a084044f1065691064d40029669c6a0c15f4044eff0a4f8f3474002a8dc58c21f304044ee7d1c93e80840029a3fbf99c49e4044ed8d56cd0db24002c20810113c8b4044eb2ee84f23184002d19a35f6b1f94044e77f3e25cce640037e030a20954c4044e6c4cd3984324003a561a53685ce4044e4603d7bfb3d4003c703e76b33ab4044e51184d17a4b4003c0d0468781724044e38e83439f70400420b634266fa34044e186056e90124004200265a4b94d4044dfd4a31ec2524004614f5b070cba4044dc07e03e6ea6400508900e3327284044dd910e6127f540051f12682648d94044df2738d406fe400542c183b240744044dfb45f8fffe0400571c362c0bf794044deab1d7a8f3e40057e1c8bf436ec4044dee36213e021400574381929a54a4044dfc6ffffe63b400584a58e334dcf4044dee9fcd3a5af4005cc657e453b854044df45b905225d4005f53fa8f38fec4044de13d47df11d4006354c53eb8f864044de12dbc0c1b840062079cd0f56a44044dce3c939559e40063236dc79d7cd4044d9a31305fd5740061013ee49743f4044d6f66f1d19414006332f7549bf4d4044d2eb8efa036740047c41056a086f4044c999363a823b40047188c286cdba4044ca28a29cb3bc4003be125700d3f74044c5d767472e6040038e88526bd5084044c35c36795b2d400392ef59f3191b4044c418e7c73ddc4002f3cd1911b8a94044bec6f2a51afa400221b88223418a4044bac4fe1f32d44001f5d4618e06e14044b82cf45085904001dc3991d192544044b5177dcf0c284001d1ec98442f044044b52de7a8dff84001ce77a154d77c4044b3f911c69e574001962ea23278004044b185b95f541b40017b9e68b64cda4044adca44ee57c940017dd68997a17b4044b098916f314440016c7bd9fc46744044afe39fed45c0400177a3893a2e834044ae81ec0235ff400166dc457f7fd74044acd800139886400161fb4f163daf4044a89a9d6750eb40015ffce83fe7434044aca737fd47694001754650b614bf4044aea8b544b4aa40015e09d664f36c4044ae1c8bd84c18400155d4bbbfc5644044ac6f5f6b41e6400135154bc19f724044ac599feef33e4001277e9fc329604044aad90f00e00c400130c7932fa5be4044aa3c6b96261d4001413cbd5bd1c94044abd07c7c1ed7400154635cace5624044abade205c4104001237ac949e0744044a6f0ca5c48f04001368b0dcaa7b04044a62acf5f2e5e40011b65db2ec2ea4044a659812c20ac40011a68bd02d5484044a583ee031fbe4001055d8cb43f1f4044a5fa03c75fd140005f61ff125e164044a299a08320640000000740002296c666bd6040450df4206572984000271eabc548d340450f7c086201dc4000416c3f186eb740451029ba29983b400034977bcbed18404510b3022f73fb40000487f24114614045100c9aee027d40000f9c510c959840450da1056d411040002296c666bd6040450df420657298000000063ffb4cd0cbceb9d14044f1d8531d89533ffb800081a781dd4044f0f26c09a4ab3ffb993a5cf3201e4044f24ec98b3da53ffb57d427e884ed4044f2d5241c9d793ffb62dc9cdfb0664044f1d5898bfcc73ffb4cd0cbceb9d14044f1d8531d8953000000043ffa21bb0a466ebf4044a82078345df03ffa1046a885f09b4044a7c38e72fd823ffa47ae16a0a2c54044a80ee65567993ffa21bb0a466ebf4044a82078345df00000000003000000010000000640013cf670e85a634044a61fc4777896400155f32c6e2e424044a7ade8aa92aa400152c8e310e4884044a8af13dcdf484001568d69ace4474044a7a7859e17b740013e6f109dcbc74044a61d3c9c129b40013cf670e85a634044a61fc4777896000000000300000001000000053ffa4fda62f3a66740450e44c120d84e3ffae830bc131eca40450ea0b99800813ffb20d04d82364940450dd8178184833ffadc7af67c84c840450d3817beb88d3ffa4fda62f3a66740450e44c120d84e
+7;Illes Balears;53;00000000060000000b00000000030000000100000069401119f442ffd1544043f132bfd2b5bd4011283dd078b1764043f11ba5537254401136f7a83a12c34043ef80bfb4719e40113aefbd11c3cd4043eeacd361803d401131d5cd268ee04043ee940c3e1e4140113938876394ae4043ee7e3524a4fc40113c2686ec31b14043eca8a1496651401131ab295b65794043eba5a519ef2f401137286fa497694043ea8389391ba240112ba548d7e8be4043ea1c311d1d3640112dbab46033364043e92a3f751c1d401113a3585f3ca74043e78ff1983bd44010f315d06e39664043e834ff8aa9014010e00c4a1044714043ea20cb8fe9764010d530894e8c9a4043e9940f0d8673401096680cd9ad304043eeb0cfb6612640107841ccfef6c14043ef6785da38e040103c048b43da394043f3f6563983c1400feb64817013494043f728ceab4945400f7e9894a5adbe4043f81c1226c081400f339309eea77b4043f613586ece62400f23c762e6bb474043f6c11f6915b2400f12897f565d964043f60227b18e9d400e97c37d8784084043f60144bf88d3400e995df610a4244043f9db72aacaf8400eaf478a9454474043fbd17bbbc0bf400ea3c7a79eeae84043fc7eec4210a5400eb6f77f4a5a654043fd3c05589e41400ea553c49a9b9a4043fd6cfe9fc775400e9e15f26bd3f64043ff0d3565c60b400eaeccff553dd44043ff44908cc463400e9a2551d1b7774043ff85399b014e400eb0094c3799a940440050315084fe400e92c3518a1c8c4043ff6ddb11807e400e645eb7e8b17e4043ffb73e543d5e400e538773fd27df404402106713be01400e7bfc0eaec47a4044036e3355532b400e759d8434d87a404404466d3fd206400ea20ef6c678ff404406d0363af1e6400ef07b71d51e444044076d86d69e5d400f07c62cfe187d404406b9e0dd8c1e400f305adc78191f404407a87470f3bc400f5ec1a5c9a015404405cdcf0b1588400f5bed862ad1e64044074693a4da62400f78b8334051de4044080db4daa3e2400fd471229339134044068a5cb22a01400ff50ae1a7c7a84044078dd878db114010108f7e73df874044071dbdc4e0df401020e2cb5e2f2d404408645b9d125340103703f216cd10404406a3bf03d8ca40103ccbd682ae1b404407909819a2fb40104e0debe222054044079bbd4cf4724010564168219ed94044099aac31546a40105b895e3819a2404408d42dff97a640105c54c40dc7a540440a8a0a5c9cb14010536ea10c437440440b65b1a0209d40105eb1b2030bbd40440b749e3dff51401065c7376a2d2340440ae00bf762ab40105f14e185e3d2404407a0f91a99c6401069d76b02cfb6404405b195e2887f40107061968cb8a5404406f90ccd2925401088bb809f21c4404408186e8bced640107ac76b865841404404993ee4dbfc401081a2a9b0099540440358e013da0540109030bed37eb2404404990f5f5d4d40108bd2ca230a83404408961c6e6d1340109f37c115113d404408b155afd7404010b0dd908bcb47404407b44570bc454010a86e8156c67b4044076666394d874010aa5240361d6b404405ac714d1f434010a24a493e2645404405c19e4bec234010a4a8cf390527404404490c9d61144010af30886f35ff404404abcdc3edab4010aceed5f24b9e404403705b3620684010ba9b9dd5be63404402ca22db43ab4010bfc7a8d427be4044044334e8bff34010c7fe56cc594f4044041f707555644010c5d39cb978764044030aa66c65da4010cfc109fe8f1b404402620ad96f3f4010c6c426e0ea6640440142862caa584010cef251b065a8404401c24d75874a4010ca46d1421ed6404400e1b6ad95694010d2358f256ec74043ff1bb0e91f1c4010cd4eb76a8756404400c3c732b7964010d489627b0596404401aa987a34d04010e1bfb7907a8c4043ff93a82eeee74010feb7600f457f4044003a9cdaa7e840111454608808ab4043ff8eab49446d401104f783da958f4043ff15f6073ef540110984341b7f514043fda3f43b7bac4011109004bcca994043fdaf600e7756401104e194ec1c044043fb625880b0d14011148684fb0d384043face0396ebf340110fd6a6b7b1aa4043f996b8f22d0e40111f65b98fa59d4043f99692faaa3c401118ed774d7a994043f7828279a008401131b40d9f61154043f2dcd868616940113bc5da3f51244043f31317361eee40113d2557d350a04043f0af7d07dfeb40114fa69e4b15644043f03f12d87d6340113dcb89a323d44043ef5d850526cb40112f39bee888954043f228773e362d401106a68f901a2e4043f2d4635996a140111aee0af130ec4043f20782c0ba1a401119f442ffd1544043f132bfd2b5bd0000000003000000010000000440111b89178db2a84043fa614620cba840111c93cf32e1324043fbbdda7658a34011230c504567be4043faea422abf3e40111b89178db2a84043fa614620cba8000000000300000001000000c240083c718ec12c0e4043a5177c4cc6714008062c397778904043a89bbf3ae0484007e3585305ea034043a87133b8adf64007ed26b06df1764043ab1b475d7b754007a9031123e1294043ae68f6142a1540076e50501357904043ae9cc4dcbe5d40074ede0f72ed3b4043ad1bffadfe3440070e370eac62974043aede417ed06c4006addc3097f85a4043ae346171092d4006b0552b66c7464043aed5a67ef4164006a1e72afa88254043ad95d7e7a1d5400671ba898f71894043aeff8396ab8740064c79da143baa4043ae78b7ac7f254005efacb76133554043b3ff8f7bcd454005fa7ff74252724043b8821a4e2c564005c6a5c9dc35294043bce48a3cc9234005f979d0c8d2394043c0547ba4b376400602623ad50a814043bfedbf37db304005fdd4618e06e24043c1403f2641c54005cf95b5c5856c4043c3fb8201777a4005b04018c9d06e4043c44f082e804f40055b33a38a4d104043c7fe9f153728400529a63a3be60b4043c8685f6d816c400513674e06b7ef4043c79182df42f14005272ddf4789e94043c89521f901bd40050fcc4d75ff8c4043c8c2563bcbde4004fef9c49661454043c6fb5e9f617440050f406f646f744043c6c4afbaf6bf4004f5917599f13f4043c657e394980640050eb5f906f8a94043c5d6ad5c804540051d94c1f70e734043c6bc3f08dcfc40050f4991325bb74043c5c91fc415994004cefbd6bf58b54043c68af08744b64004b8f66df4bef34043c3f9edd7b45d4004540e20a182944043c32dc2aec45740044cba1133591f4043c22de67c3a27400460b3005927754043c16ce1c023f2400445523328a15f4043c094cb2f241640044ad5f69720994043be72ec3b7d0440042a89e150f97e4043bcf6037abc6840042c874742c5e04043ba71e47e9a3a40040076501bffc44043bb19e17717a94003ec1bb7b049ce4043bc85ff23f3364003cf048a1734694043bbae74ec7fe04003d54ac9db5e694043bef7cd1eb4d54003bdbc64d346ed4043bec8a017621d4003a6437643cb7f4043c09c58aa7fe04003d61cb14438c84043c2473ec7aabe4003bc2626c1710b4043c26a910517e540039cd67baaced44043c4b8397129a840035b0360cc625e4043c2ee3117f25d40036391dbcee2154043c4b6bf1b80b240034f2df00e818a4043c4fe56c5e80a400319d56c1c779f4043c2ac50d4368140031ae2d5c510634043c457a38668a14002e9385ae553d84043c40732e4aec140031fc41ba3499c4043c5ea2f57cb324002fa3063d397a04043c5aba403e6fc4002c5b28f08f1ec4043c843778a36614002d5d8c91e305c4043c9d040c654f54002c477905a55b74043cabd8edd393d4002c6aa6ee5213e4043cc23994651624002f3ac7e9b07fb4043ce9bdd5631e6400329d13b7170304043cf10a95045e940036014a55c231f4043d0a2c69a69e04003628ecbbde1ac4043d1bfe308bd2d4003b2a2a9c9cea74043d3751630ddb3400438d22eaddfc44043d9ca735ecff84004718d1bff31714043d99c216b2c164004af883d0c0b384043dbb2ef9ac6da4004fb9de34cb8624043dfbc4a9e89c44004f5682b2663304043e0c30782917d4005057457486ee34043e06afde322d840051602e1ff057c4043e1f5637ded864005219d299c05b04043e14f276bbaf640054e39d0863fcb4043e2de17c0ef7d40055afe1d85549c4043e5679e81ad364005707c0e76eed44043e6365e22977c40058e0bdbcdbe064043e5487f3319914005834af9b49d934043e622d07e4bfa4005987e040946734043e7c9e792ff554005efa18e49732b4043ea9ed565192c40060a404fc020864043ea1b7d8e3a044006230567f3da2d4043ebe556eb62ff4006346ba77684a04043eb805399d27140063a1c15fa01284043ed83fd3211c3400666b7647d24914043ecf2d8f26c6640066f8ea8cfc2774043ee61c6123754400699527e74718f4043eda6c60c02314006b4749711e6184043eec1a6039b7d4006c2935a7f16504043ee4da1b6151d4006d44984ae500a4043efebeb3e2f9a4006ffe25708e18d4043f0623badefd7400737c63c0662e84043f2e1176dc10a40077caf5f4b0b8f4043f3b8c8c0c5fb40079a58ba22c87a4043f5c50e700de34007dc7e933f1db54043f4416aa3b7d640080247c98fa2ee4043f634673accb04008562d8c3b735a4043f80817ef937f40084d3a76da8e124043f71153c749ce40087d18bca095f44043f75ef08c80be4008716e2a99cb5d4043f605e791856040087b7ddcbe76374043f5bd3220cab74008c3d67c5f32514043f7cb681ba5d74008d021e4a3a5844043f7b5fb513c004008c79a070df7764043f6c499129c4b4008f6c812e4f0414043f7379e06bbb14009534c07149c454043fade8eaff56b400970329a8f966a4043fb073327412f400962941f872ede4043f9de3b7054b840096fc89eb732294043f9bc8c7eba2c4009b56ef0f97cda4043fb33ab2a5d1940099e3436cf86214043f8cf6e96fb49400971b78aa3e6024043f86525152fb540093c343aa2c6c84043f62bfe8fd73d40090cf55d39c1ee4043f6a39d0863fd400904d1c16d0c0c4043f559fb920fc04008e0e1534a32874043f4a33b90c7304008e2e6b3a0226d4043f31b21aefc584008bb5525652e1c4043f49feafb7acf4008a3ecda19a2a54043f37dafa371344008ab98b35978064043f00fddcc2c1c4008d8592c49bd974043edc79955c0c140090ddbae67061f4043ef463b3eab9e400928f2f90efda84043eec83cb1d979400985ddcb4cc5004043f23ae5de5a834009a2bbd3b3cf594043f1c49ae2778d4009818aacd2ed8a4043f0d9065cf78e40097e2251d34b304043ee7ed532a1e9400993e4360ec98c4043ee5160c7e35140096da8bff499924043eb9823a2c76b4009204eb3279b614043ea7ca6de6a7340090c36f0cf57e44043eba572c953cf4008f75562ddf0b74043ea81d2accf714008f18f6cf8846a4043e7b4c89aca2d4009149ef59b6f7f4043e42e811ccb1240096c7e5830d4c64043e0c767504ed6400a054ca382e2b04043dd5be4a28175400aa19a476976114043e141218865eb400aae40aa143b214043e45d662f006b400ac8f3596d48724043e50a08bc0010400afdd1460bdb894043e25b54c0ddbd400b3b6e971da4934043e1ca9a44b1af400b751f74c2fe204043df5f67e4c0b5400bb0c7ac0432f44043dfc1e1ccb92d400b9f1a954667884043dc7a73d79bbc400bd406e9cb82984043db8c0ba08beb400ba7551b0f7af34043da4e0039c7de400ba5c30fce6dfd4043d401cce0e62c400b872ee251d5714043d40787350a71400b7d83f0875e7b4043d12fbf5c0723400b462a36346f744043d19ebbf5ed8b400b2cd42d1bf5884043d06c7e564fcc400b1483ff75e3d54043cbe0c3802e1f400b3b8b51fa96014043ca2b28ba55ca400b090c348e1e894043c9bccc14a73e400af2503d48fa8a4043c68472a9486c400ab9c8d501b5c94043c4d57af58369400aa7a684ed17cf4043c52d1f591ce4400ab8f8208d94284043c47709ca8cb5400a8a7738c69b054043c30942bcf196400a55b2a50bf12e4043bf44d1df38e9400a5acdc38f2dd34043be57869c0857400a4c5d9191c97d4043be3f01a625f8400a5470c9b9137f4043bd8f02afe640400a3cb9c4b24c184043bbbe9e810a01400a32e9447cb1ae4043b53d20db1f7f400a230a785c90ae4043b6c377ead964400a1672b235580d4043b646bc361580400a123f3d01be1c4043b53fceaef192400a25228c3e5ead4043b537719bcea8400a0da8e9d4d6984043b48398212fb7400a1b9db70201b14043b46251c442e64009fb442f9600f04043b254b715c528400a058e3d5eca004043b22dae2c2b604009f48abfa5e1964043b04ff0e823da4009ea1e24c7fa444043b0922227ae564009e5caa702b8c24043af482c2f9a084009c6ee40c372394043afba3d91639e4009e0aae8b297a94043af0cfdf0c25c4009db83f65e04874043ae48cec846f94009c2aac03b219d4043adaf297f3b864009b02688329c934043aeb00140830e4009acabbffb9cde4043ad8386b2b7224009b8fad49463c84043ad6e335107a740098108238ffd0f4043ad0c4021a58f40098360f6a9aed54043ab423b8ecc6140096a923224c8eb4043aa2638ae9d3740095aca50cf2e044043aaafe56b294440095e51ee67dab94043a9cbde51fcc540092bd1d97c07b94043aa3c9601f94440088cd2bc8c1e184043a223cfdbfe77400866a5af04428e4043a1ff3737fa9940083c718ec12c0e4043a5177c4cc67100000000030000000100000010400793ca98950cc2404390054b0b9fa440075b09c0595d2640439082db2af84040076a4a8d8f419f404390ddab3f3c094007504630cd0da14043921404ed832f40075f0ef1c692884043939a8c0e51e4400755cb49254921404394b001b8c562400771c17942c838404392550b419eff40077fa405ea60ee40439283878dc23a400772dde21555cb404394080083cd44400798ec22974876404392ff2761879f40079b1a0fba76f940439534ecb369714007cfecbf86683a4043943f38df087e4007c17f98f00412404392e9d326f2cd4007a7493654d0bd404392e4f7840e204007a9d8e72ec5324043903eb8e9514e400793ca98950cc2404390054b0b9fa4000000000300000001000000044007b22e5c00535a4043967313fa44104007a58e72c9f7054043978ec4a51c404007c225ff3a7fa640439855575300b74007b22e5c00535a4043967313fa441000000000030000000100000004400272c96ac296934043c93eb66da996400276125cc64bf84043ca7aa6a29f304002b62ab978426d4043cc90d37986a1400272c96ac296934043c93eb66da996000000000300000001000000043ffa60bf9bbf6c454043840fc598ae973ffa2f09d504c3784043854175539cbe3ffa56f71dfb8af4404385345a06a9093ffa60bf9bbf6c454043840fc598ae97000000000300000001000000553ff68fe6af29ac554043720a342dd16c3ff67351eb04455f40436ff809e985373ff67eb0efddaf2f40436a6ed383866e3ff626c370ad921f40436bd3981a35023ff5f06df39ae43f40436a4b0ecb63b03ff5c7c047fb8ea440436e2731e634b13ff57d708d8f52cd40436f7fa8bde0063ff5207193dad79740436d8a4e0411543ff5128bf8d854a740436f012a43edb83ff4c25035e7316d40436e5ba940780d3ff4e2208a8f0fa940436efb8f2f29dc3ff4c22f55ea289040437031fed7d93d3ff4593892ffb2ba404370916c6c98633ff3f7afe7d37d2f40436d8b2406aba73ff3c5540a434fe140436faf46632a8c3ff39632365e0af940436f76c5a8affd3ff39a5fc2cd0876404371b03ce0d3623ff36a7bf100f868404372df86581e4f3ff3956d3878d38d404374eec691f5373ff387eae79d91294043761cf231bec83ff3c89ff1cd62494043782a618a55fd3ff3704270120bc840437aa21aafe2393ff3aab4cbd7b7eb40437cbddc07ecf93ff3c0bde8586e8240437bf6dfc182523ff3e2ff27acb11340437c8740e920b83ff3eaa62611591140437ba3a69214593ff4e78cad333aa740437c7801097b903ff48d290d7ba4ce40437f36c552c9c23ff4c8712f3109d2404381385bd5d87e3ff4a3a3f78de2fa4043839d1fd859eb3ff5363e29b9eb52404386b94910aee93ff577cc920bd315404386c955bf24433ff583d2996a74bf4043888f9b9615783ff5a229809bb59840438850e83a66843ff5bdcccce691df4043897af8da1bec3ff600ac47f20719404387f84dfc59a53ff63bc6f6db246540438a278dbf01193ff6ab8eae953a76404389e9f99f4ef73ff6d20dd16015a640438bd843319cca3ff70c65422411d940438a4e2e3a94c13ff7673491a47a1640438d410c719fcd3ff7bf042d58a02240438ceb79f01fd23ff7d09a1025d6c340438e2644fad33d3ff7f9462199d01840438ca4becf10d33ff82519ace0847640438d2f4a072c923ff81d36b50cab7940438e8dd4c3aaff3ff83ff9ea00283340438deefe8160fa3ff852e738a2a29c40438e9a64e803823ff8396e82c8247a40438eee9b1567123ff8853a9280a93d40438f274cfe93f83ff8ad1d828ba4d440438edfb87ba0cf3ff89875c99f8a8f40438da7a2125b6f3ff8ea0e4c519adb40438bf1a469f9913ff979542d8fec5840438c86e4ff26443ff9aaf5bc51a1d640438ba26b7a4c783ff9934ddedb173e40438a8cabe884413ff9c23277fff47640438a269444d7313ff976bb897adfe84043899bf0744f673ff968598a3d8eb54043881b02b4541f3ff9c15769f43a7a404385a0800e69613ff9bc492c18e2a54043847b6ae526353ff9ebe560d3909d404384b3e8c9c74e3ff9f1a31bc5d0a7404383895b1d87fc3ff9b2c7060e61ee404383cc9a35537d3ff986fdd0bf8f67404383273063a8a53ff9830c89fc17be404381fb6b01110a3ff95d0a67eb7f494043820341c2b1db3ff93f04c58c919f40438022e7c36a9b3ff94d2c94c4aed840437ea2ace014cb3ff8d4217339aae940437f090b2e28d53ff8bcd90cee725c40437dd43f78cd023ff87026b54b7bd540437dc0bec1c7363ff886261db228c340437b16d828f66f3ff852184817be30404379f6bac766b23ff8762a3b0962cd404378f4c6e0687a3ff829ba5df0874e40437930a331af0b3ff8155a9a21cc25404377706af0a88e3ff7d1f1e68cbc67404376c7f7e20a883ff7a113a35c2150404374ddc6c2fb1b3ff747f431f4218340437561d64d98d43ff75099e577712f404373ad2d5b69193ff70859d1603802404375557521031f3ff7049cf70afda4404373861788d51e3ff6c76c47598e70404373d27af93ce53ff68fe6af29ac554043720a342dd16c0000000003000000010000001a3ff6378218afb576404351f838606eab3ff616d3c188a0f9404358a871e1f8363ff63ee42014615040435987f5b18c443ff61596217b361340435c12507c3bb33ff6585f2a658cd640435e244e77f6f73ff66d177635b3b940435d2be34a5f173ff697e0f581548740435d90cea047c53ff683c703bdad5340435c696a6b9d773ff6b53efc58f04b40435c7b2fd291c43ff698000abcc77140435da9085b88003ff6db46fc93b9dc40435e7bc0d61e853ff6eea978564a5c404362c5527e96ce3ff725ead74edbdc40435dd03731e7d13ff76b6fe8454e3f40435c7c53ff6cc43ff79007903995f140435d3367427bc83ff7a4c89fe3d7f9404359e83127fc5a3ff7ee65bf2a2a7f4043582918fdfdc83ff87c11f781dfc84043561eb4c9d4533ff91ada0c47d9554043588711e6a1233ff95b03e9d5ad58404355bb5b4ad4653ff92951e866418f404353539584c8383ff889fa8ec0bc624043536bf76198433ff7ae328210ef7040435722bd3dd2633ff7271b001cc193404357ad2f7893903ff6e1e2cb333c0f4043552e337bfac53ff6378218afb576404351f838606eab000000000300000001000000053ff6e9ee25484a2d4043631067f0eeda3ff6d2e5a8aa9d674043641aa2046e9c3ff6b5b902fc9ad7404363c013d8f2423ff6bff94e0a241c4043660fbe45edc33ff6e9ee25484a2d4043631067f0eeda000000000300000001000000043ff36cdcf9f42ae940437ceb2ba7ce913ff34d21d660eca240437debb02529e43ff36b0fbcfb375d40437f64d9e54a593ff36cdcf9f42ae940437ceb2ba7ce91
+6;Badajoz;43;00000000030000000100000160c01bb2f6ab7eaf9a40431a468b9fdbd3c01bc0a68861db3440431a844eb97684c01bbef1fb969ffd40431c3a1511568cc01bc9272464c1d640431b1ef8a08797c01bd3b40e17a36940431bc124cdeaafc01be32baaf604cc404319e6ecf62f69c01beed134b2dc8440431b09b2de5b8dc01c0b7a8e193b6e40431a2eb7f73057c01c0a5108055d0d4043192239b0fbb6c01c1d4209f6e0024043176099f18bd2c01c2c472ccb7647404317f7ff4f19dec01c3c8fec4f51ab404316bf2566b93fc01c39f4226266b9404317cac7481760c01c43fc03cfa0f2404317e19a30baabc01c445d55c6860c404316df39c3bd7cc01c57a9237a588c404315aeb8f271c5c01c6e741ac8c7f54043181272c0b432c01c782bbe63974440431b605308ddedc01c924d23857c6840431ec7e74c774ac01c9a2b9b7e0f144043234b948d0424c01cadae882cf977404323bf3bdfd513c01cce9b8bd989ec40432a0e492c4c6dc01d156d5eece4344043328f208cf0f3c01d1f4200808375404335cde5e6fa20c01d4424699f5e8a4043384ba84e5715c01d58067ef5288d404337b329a982d7c01d42d5469054994043398230060223c01d41acb8c9fa5040433af6cf1f0c8bc01d2eab87f26c0840433d277bfaa248c01d3455c39ab8c240433dea16ffcbd3c01d410c08bbaa2a40433cc51bd3702ac01d4a5cf0c6d20c40433d36a391505bc01d417f270dc726404341c34e3369bac01d3551ed5d90ff4043437a09cf6a3fc01d364f8f67f007404345bfb8922d3fc01d2413fb2bfd2d4043498f434df749c01d0e12794bbdbc40434b511a84909ec01d07499cce79c440434e55f65042a8c01cf9fdbb5fc59840434fd31828c956c01d0f581e242d5d404350738a3d7d87c01d142a89e3bb74404351c3f0f92f8ac01d113271fe5b4d40435854d8f1039fc01d056e055af78c40435cea19772809c01cd042b97cd2a940436011d0e501c5c01cc524cf75d21c40436241c429a9e3c01ca4c0b19414d3404363efadfebc9bc01c83a272cae78a4043682c23091985c01c5b4edad97fe4404368d0d476edd1c01c45f56ffb87ee40436d49e942a440c01c2848305f322f40436eb10b4bf4b2c01c21eea1c4f27540437088e7b69940c01c3548e18175f34043741def7f2956c01c1b91cb5dd0b0404376443d2f131cc01bce25a09ae211404383125fbc5bc4c01bdf1c4c4d1bce40438518c45eb691c01bd983a9ff5399404387cfffbabe60c01bfbc5b2401d6d40438cb48d90ccc2c01c2808d61b07cc40438f2736812ca3c01c6c561bda3fec40438cb665ba107fc01c9341facc397f40438dfc0af99469c01c991a8cd1bdab40438fab099294b2c01c8b5e72d2049c40439292269367a8c01c89d0caa21401404395e672ac2b28c01cd51af6fc4b41404397fa054e3760c01cf72532fb911740439ab19260e291c01cfdb8fb11615b4043a0817f48ace5c01cecf30499eda84043a3a156c56731c01cd0c041b53d4b4043a20266236ce4c01c9eec5dea49934043a83fed8fd4b9c01c9f2564d835a64043aa3269ee9ff5c01cac8e29ac7f594043a8fac08a0d24c01cb619934665b84043aa6564fedd41c01c9e002069e0784043af0a9b3981d7c01c79b9d5d7c0fb4043b11bc2534c2ec01c4ba5f60d26ca4043b0cbd59ac07ac01c407af07254984043afa69c02f7cfc01c5105ff03bce04043acfb2994d771c01c64f45c21adbf4043adf7c406d588c01c688cb4bff6e24043ac55f4557448c01c54d74aa186454043aaf3e4cfdf0cc01c4f049760d1a04043a7b401e0e6f2c01c2d2fdb4b26004043a9d8aefeecc1c01c312c9af13b1f4043aab0667e7df9c01c1e8b47f2320d4043acfe1caa4984c01c21655eb21aa34043af0ec03fd434c01c097d43cd8a384043b1b9deda26b9c01c44a23adb7bc54043b507b16b2db2c01c3291ea119af74043b7e4e48ebdfcc01bfb4528b1ad964043b65829328f86c01bc9882041e1444043b34c8f9d0de5c01b886c09b5d8b74043b0fe47ae9555c01b3551c62c85d74043b1db09e6de9cc01b29f5f32e2cdc4043af266cacb7c0c01b3022684e8cc64043ac18f223624ac01afcaade06fe444043a92f26062c9fc01b0b7177e76d384043a367fb82d3ecc01b34145ef6745540439ea54816a2b8c01b2bf6cbac6ee740439b1e5dbf8a00c01b11ec1a4d91b74043981c8edf89f2c01b00a7b42854f8404398d6582aa83ac01ab9586fbee5eb404396ace7dda7efc01aa391a93543034043997b233d580cc01a88911340d8154043993228667b8ac01a5204c6747f40404397038611a773c01a566cf37354b7404395e714e20f55c01a4be14100aedc40439576f864ab26c01a4c090ac93a4f40439445097698b0c01a28e741061e6c404393df9e71d6c4c01a295367b9ab3b40439741ca676435c019f6e9521c351e4043957e84999c0dc019c137205b47d8404396820af66cf3c019a90fe89a21994043953810dba308c0197c9d84d80deb404394c7e93eaea3c01969a9d381248c404396ef0ffee1d9c0194bf3873a8b30404397e18cda3aecc0193b164e8732cb404392d94e04c5b8c0193f75178cc22440438e36941b8064c0192ded2e74bb1d40438c84a0eca7bcc018ec74f6d5927740438b7c7b7ba161c018cfcddc7d801a4043874e5dd3673dc018a2a91300b02140438728d5704e36c01891946b0f203740438407b80319c4c018508a22d086e340438bff5588fc1bc018130d007fbde240439086fbabcc3bc0180987fdd49b67404386b9265c8b1cc017ed3fee352fec404388d09401aa25c017c4e76d50d51f40438de3cb76b66bc017b4e5b60568a940438d64c58da47fc017b3c0ea1e1f0340438c03281dd655c017c02577efe1e140438ab97a9bb8bfc017b2e350b6959840438aa5bed21e82c0177d02b019c9e740438d592f1f970ec0175573ecd9291e40438e1f424de0e8c0174407402a007540438f53fb47e7ffc01746ea99efde534043909f53f654e4c0173dd0c396311f40439281a4c17c1dc017054d21013da9404390ef138d6a51c016bf88ca60d92c40438a80dc8da3dcc016aeb82eb016b440438a5cd0a81b09c0169570205fad2040438d18eae3f544c0166ae8270187d140438cd9b3a13de4c01655a1583279ae40438f1e3298e218c0166869ed598a3540439072c8e1fe04c016674bab68e8bc404391324aeb60b7c01654c5c12ea2c5404391db0ef5cd5ec0164e66138542f640439350e3b933a4c01673f64ac1e78f4043981774d13842c016343cbd7596db40439ba1cf7765d7c0161cd1efeeb248404398822d1cd4dec0160eed9247c94b40439ad7defbc5d7c0160121ea9410a24043981cdb2f3295c015d6e09875710a4043944557c9a6b9c015b6e32eb06403404394cdf3f4031dc015a6934e14cfb54043941721bc8aadc015893d29ce7cf34043964bba88d277c0157811d276961c40439b42599058edc015656e30e8b3bc40439de532834ec4c0156be7f730dfad4043a246fc2ca595c0155c0fe5bffc9f4043aab1e42242bac01521e1bace25454043a8e618000491c014fd900a46216f4043a6a228d6b048c0149d1c10b562814043a8ebc58fb07cc0147e82d33727bd4043ab1259b45156c014728abb8de8bf4043adc30069cc11c014744f80a45dcc4043b1987dd03a6bc0145c06c85fef6e4043b1f76b603a17c01437206f02b9914043ae63fa1892fdc0141412a0493ec14043af240615540cc01409191a3e80d74043b06b507b4297c013f04609cf8c9b4043af90e568d890c013e059b3a589674043b111622c5ec8c013e568c72d95544043b284fe3286a2c013bef2abf352384043b2b35d7ed004c0139ba6700e27584043afefba8713cac0137bd6543da2814043af24e0c4145cc013715df5ff76184043b09b4b8f395ec01361d6ae4d04ec4043b089d22652fbc0133de27840ea924043b2c2cf43b0c0c01319345e5f0e8c4043b2d741db41b0c0130501d3b719294043b54d59f481e3c012c2d80e1e7bc14043b9d437607aa6c012ad046d1980514043b64344ea260cc012d129f2642d744043aea6000cf3b7c012d40d9899ea4d4043a9fb5fc9e183c0130b5ca75374244043a90d4741c42cc012ef4a1ac517104043a05351f718a6c012daac74c62e2b40439f45c937ecd7c012d53a12dc8cc540439adcf6162d7ac012a920dcef59c0404397d2bfda39e2c012988b8a0c5ddd4043951b99cef399c012f85eb82d69ac404398e60635347cc0131835192b3903404398418b76d256c0133db8554f1a784043998672be6c15c01354322005257c40439668f674cd18c013538439ad6d2e4043950588461b54c01369a5a925057c4043938313a1aea2c0136d6fbf89200340438fc77ff9e8eec0137f63ad2c262d40438cdb0219b5b4c0136f04b3e64363404389d595191287c0134ec81046ec70404388350ba9c627c01354c79fbc4871404385e88e789806c013658d54f8e6ee404385d318db0711c01371a76cfd14a5404384117a309dadc013851b6f8356c9404384267f56de70c013bd93b89dda8b40438738b4b89519c013d99ac6b7ac4c404387845b596d04c013bc13e36a50b540437cdfadcbbbe7c013ac422e090e0240437a8071d334a4c0139ecb23ef0c5740437b4d9d07c95fc01386d8b7f8bb7a404379802bc591d7c0135464962410a34043782e1b9a17f8c01363a7b362c36f404370f291c951d5c013a8e600c7c87940437197a563266cc013c620a96dcd0e40436d5c45cccf0dc013d84f90d0b701404364ebec4a9f14c013f5c0e4f3456e40435eb0604da62fc01427c3a7ced55540435ddd23962103c0146592013011fd40435a945dbcebfdc01479db81a40d1940435baa97c7f714c014aa9b168b209f40435b17e71863b6c014bceec418733f40435c1efb5c9bfcc014ab565d626457404357199ad547b5c014be38e54ecec54043564b322d79b6c014b75e6e0e3f4d404355368112dc73c014bca79d685b3440435471f5b31767c014c999d3d9b9f94043556a2eee9129c014ccc88e936ff94043540a65d2a054c014d57cf7d5ed914043557718bf8352c014dbe629aee9d2404353043da52faec014e525634d12944043540f24647d1cc014e441f7e0e679404352fd19be0e92c014f4dab0a1593d40435181062d7435c014fd6649d85d9c404351e65dcd3ab1c014fa9243fea14a404350f01824feacc015041786e2e6484043510c7c9d00fac0150488dbcb063d40435017bf5bc26bc0152b402d4a43a440434e2ef515c133c0153dad11b54def40434bfa5d135674c0153beb0bebe053404349ef68159ba7c0157cab8a06ff7940434ab27a70df67c01580b3d7e6e4da404348bce5707f11c0158f298d86d58c404347f55760f621c01588c84d7af6db404347295aaeef8fc01592254827d0c4404346d88bc7c9d9c015885d6c97addc4043452e63b5dcf2c015a0b2ac65234640434597cfa62c36c0159d1bd41bf681404344a4d1aa9be5c015aa028d4e06c9404343dde3826847c015a3415eb3d951404342b8241e4261c015acaa06cf271b404341a12011a987c015b613bec61b50404341dfaf90da61c015bd131cbd50034043408fc4d76890c015eb06f9324a4440433dfc0916655ac015f03b1656839b40433b42066a7d4dc015f7824bb068d040433bb222ea073dc0160526931a572240433a793736d68ac01614324ac4b91c40433b4d0dd86362c01645c546cf24f54043377967d5a73cc01656853580e2b64043333c690b761ac016571b88d02653404331634fa3b4d9c0163cab77b4e4c640432ef6154140fac01644845426e28740432e67e4cd96efc0164d7698e3913540432a20286dcc25c01638dc70729d9c404328ab837bf5f0c0162d76c41b6729404324237067c70fc0161a94a45624ea404321cecdfd683ac01614ddc076387d40431aae3c0c8f76c01627a2e2317cbf404319ad69316951c01628a003ebf2d84043149156e40136c01633e5b7433c854043148d105630dcc0163d8a886242484043130427a8a1b1c0164dae347dad784043132782d96c4bc01656d2cda8fbf4404310dbba45b699c01687ae4ca66e36404311bc3b53aceac016c64736ba152940430ab7fbf6414cc016d779da72b8ec40430a5fbed76bb8c016f089a0c1f0c040430b0a6a9ab125c016f683d36fe552404310326e922eecc016f1aa85e13c2c4043115341950f8bc016dc94f465ba67404311215ec83ffec016c76231abfd274043133e88cd7fb7c016d2b98739897e404315ae4f91c13cc016c7afc3a78a1e404315e643d0532ec016bcaa25bf128c4043141aac5e6d49c016c12381ba54d040431747c13d5529c016cbba4bc0c8b3404317285c18f45dc016c76763d62d0d404317dfeef33d4fc016da9ea3cd2ccd404317ca1797319cc016e9a36915063c40431944f803d499c01707747242bd954043171cb6e52ef0c01720770ce2f89a404317caeb3a0f0ac017329eb16cb03e40431658c0e5a7a9c01767f5b875ca29404316010497945cc0176cc940bffd76404314b16adc16edc017826eea075f09404313ee78c8578cc01785ccf2aed610404310ee941ab23cc017a66b5473051740430fbd8887df99c017b49c60a6e76940430d710ed40be4c017b79b8509c83540430b6b2fece047c017a4ab54be2e8c40430a026bb10f3ec017a2cc2793f64b4043080b584fefa4c017ad573e77ac574043065fbd011f32c017bca54540c941404305fffc0eaec5c017bb25c2203a4c404303f01e2ae359c017d093a3d8af264042ff677dc857c8c017f958c4f954fd4042fff12121db14c0181183338cdb824042fedd17fc28b9c01830131a27e3384042ffa8f6b539c6c0184fb84b0a955b4042fe0848f12cf7c0187613000ceb204042fdaa8b2e71dac018abd7cf8a41624042fa585df1f015c018b890d149085d4042f8738a800ff5c018c8b167ca1c4c4042f9706df17523c018ce5a6caa6fa34042fb24dbd1106dc018efa048cf15974042faa0635bdebdc01902a33e2a7f7d4042fc5d07cb8400c01936e98c4b27714042fd3a2392565ac019692bd62ddac0404300f268992cc9c019780f7749ec1040430642fa6ea42bc0198f79603e2e394043063308e34ae0c019a7d60b39efe64043077efe71cf3fc019cf4c399d0d4b40430729aaa90b7dc019c6415fbe230940430602b1e77f67c019e0e42c5c4bd3404303fbbdd551f1c019e3f00d5d7a744043021b85d7f0c3c019dc7d5960de2b4043016f5f89527ac019e7ff5b95520d40430100b786a5b3c019f78966e04da240430136299b0c94c019faec0b2b823b40430272efbafd31c01a2eca37c716ab4043039965708bf3c01a55962d4ade43404302b974e5490ac01a527556ccc8fa404306c13f340c3bc01a7d08e226d12640430c6abf465173c01a917735ca19f340430c7c01e3dadcc01a98e15671a6b740430b85d5d5bd95c01a9cb31c219eb740430c59849ebe50c01ac131e0e77abd40430cd465aa4b3ac01adc339c311af940430bd6be8640aac01ae106380ea06840430ce120543bf5c01aeae6620569de40430cbc88b1eacac01aed8f13a61c8240430b86d892b9e8c01b086a0853d8e840430bddf61fac6fc01b1491ccacd29840430cbaf90b804dc01b0f49975ee7ff40430d91615e3639c01b1834bbafaa3940430d65ae701567c01b14893652aafc40430e59b9cfefedc01b3b35306c0c2140430e38dd8e8866c01b4364ff77dea340430f60ad658f8dc01b32baaed6dc5f40431267f9434d5dc01b2e2cb287f478404316da6f2a62dec01b64ca9f427263404316afaa13dca3c01bb2f6ab7eaf9a40431a468b9fdbd3
+5;Ávila;41;000000000300000001000000d4c011d8649330269740442b7e189ae7b4c011d0b478d4386240442aa2d6774e1ec011d2b2f78e975d404428e08335dd90c01202b774ee35f64044284daa516694c0121b6e2e7e3a0f40442c24cfdf0c26c0122f55aaac667b40442bc0ed3f21eec0121e15910bd678404425851d5e933cc01238be6ed4e3b74044236fda74666bc0123a01d2bdfd7c404421d6f4bb4abcc0124734d91d099e404420eeb194f42bc0123e5e672d4f8940441c8482cf305dc012778d468b3aef404419998e91a8b5c0129dffbb14463c40441959a57c9597c012beed3635017b40441afa3e18ae3cc012bf0b55d2222a40441e2df579c7cbc012c6544707aeff40441edb6100313ac012bfb258be6e4d40441ff314ac81cbc012cfc22bd669fc404421750d16d8a4c012c6ce97e448fc40442218f54cfc3bc012cae5922f5bd24044241ee1e924d9c012ea171b2d35a1404422a048b55085c012f87345c7e0544044233c56aa531dc0130bde4852dda6404421653e2803d5c01336c09dfb8f3f4044233be4c3caacc01345e2245e146f4044209c6cbf934bc0133b0f19810e1040441e1eeb4c2d9bc01349df41e6cca040441d6dbf5c5d0ac01348c4b141ce4e40441c8be39ae6eec0135775ec8da9c440441b33592f0187c01374aafd3ba1e440441a2d55180a64c013836ce58682104044185b8e2e8a0ac013b2de13ad422a404415c20b9556e2c013abfdbc504a3d404413af19685bdfc013b3aa3bcaa8d3404411699f000ae8c013d33e6a518b16404411118ab502e0c013d1747d88f56540440f810b0041cdc0140daa1578f44440440e3712f5bfcfc01406d4fc350910404410a1c1a00cbfc01412fcb0d9ebde4044145bd8bf8578c0141bb1f74d42c340441445db96ea12c01445c368a893904044133c968fb526c01459e0c958f9ee40440fe9d042110cc014678f705382bd40441048ead350a8c01490cdf4aed7de40440bbe7ec74184c014cc965db624d140440a8dbc22a7edc014d878663a93f240440bbc71e50e7cc014dc7a6ca5113f40440dcdecae24d3c0154199778239f940440daf6f7bb047c015580a39c8564e40440ed320e676e5c01578d3b9478142404415018745146ec01574d55d3f2052404419ef5a9a9a0fc0157a8ac84e159640441bf1a589bcd8c0156f5b7baf567840441d1791f36e33c01560acdebd319c404421e394e32f18c01595253b0926ac40442009af3c7f49c015b76528dfd956404420556ae73ac9c015c253a760c65940441de783f4e410c015df4e15af0b3e40441cb11b045717c015e2365a042d6340441a9aedf14e7cc0161fb50d1b2427404418ec8a2e8f01c01670ae633b74dd40441b94e100bef6c01679c24dedc99d40441ca74ec5d834c016746a04d67e7d40441ddc13fae745c0167ced8350acec40441f790a2cff93c01698c797e23cff40441ff6d5b6f89dc016a3d739e325aa404420fe8da6be93c016a0755541a5e84044229c7e65e187c016c5492b30f50540442563bb3fa06ec016f3436fdb1e0e404425a5d4b932f0c016db765e5eb8a6404429a3a058a589c016b12f1cb451e940442c9cca8cbccec016bed4f0aa191040442d7cba9fbd64c016bf80a29f1e37404430174ae418b3c016b6b90135569c40443189bf3bbf9fc016c3c723e2d59b40443603e2986613c016a0500fb7d8f5404437e91fc0dcf7c01689648d8473a940443aefe392b6fdc0163e62d663fa5140443d11961fbc89c0163d62206cc33340443b3d9518cdd0c0164c64721a79a9404438dd35a7cf09c0162dd3c25f608e40443627fda89569c0161a8c7a3b1e53404436100a0a0046c0160bbead57f00a40443690b98ba769c0160ae29f024a6f4044389545188555c01614bdfcadee994044395429c98e3bc0160a1135069cfe40443b59586535a9c015ee22f30556e940443a746bfc6c3cc015dcb8520de13740443ba317b44915c015d90a65d6ebd740443edf2d95980bc015cf37d30017a840443f3e697f1704c015c9b8336b44fb4044429014035befc015bbda39bf35d8404444387343c47bc015b6cabd30ab22404448407f67fb4dc015ed24730d241140444742941ba2c1c0161948bbfde9f340444536c0c28e97c0161de0c6650fe1404446b2a69d8584c01610af9e2c9524404448ad8316b184c016109c7812ada440444aedb6d68522c01600e1707b70c340444c75feb91cdcc015ffa656e3b3e740444a716f36a231c015ca64c697ee3840444a301ca8574dc015ad6fe3705ae540444dcf8eaf4107c015882525311a8840444f751383d198c0157e1f7eba3408404451c466706634c015838001b1caad4044529f69319cdbc01576ac7ef9853d4044530b053f8d93c0158b10eea98539404454e87111a9e6c0158ab53f33e9df404455f207686dedc0155940eb68d5684044583a116b2ec5c01550a5109296be40445a4b417630cec0152bdf3b30cff940445aea01b7a153c014fff13b8e6de540445f16b96ebae3c014db9551c78420404461007b431feec014e03f72c2d15d404462f0bbbd388ec014bcd680d5a869404464f3e01f6d8ec014b5e48f725f80404467130bd847cdc014a5620a7af1fe4044683141e5ed49c014a14035244f154044697c8b724ab2c014ad03354fd43a40446b84f090dd6fc014a7bd784ea3db40446f27365413c3c014852cfb83100d4044733dc934f8eec01475ce5301263d4044738f27926290c01471f12e11468b4044753101b7878ec01482a9c0584a4440447a207d344467c0146b5b8152726040447ae99aa9cb27c01462c946ca2da540447d3efc346e72c0146607df13ee9740447eaa34d66541c0145bff502cbe2440447f918a523a1bc0146d29e4a24deb404483c69c3e0618c014960f6f08cc584044859610d474c8c0149caa16d9243840448828bf8b5f89c0149826f471bd9940448bcbb5b604e0c01484440d42802540448d7d03bb0f4fc0147f0531dce0b04044915b6192389fc014721e2b16e2a4404491481c12491dc014668855821b2c404492d42e8296c0c0143d4c5b08a074404491be5b3e83e3c014164c89d795e5404493a7ad29549fc0140e3081f55a8240449506227d7236c013ded5470896ee4044937eaee98460c013da146e65d308404491ef483dc296c013cda0f094c1de40449202bd7b066dc0137467ce3cdbcb40448c08b192bd3ac0136c16c184e77e40448ce4bfbd6fb8c013428676e3477440448d3dd307acfcc013410c7d3beae94044908f707c5019c013250e6584a5524044926023ec9946c012e36ea5243c4b4044931cdac3d2cbc012ddec3ab7722e404490fa7ddbb42dc012e5f35a21abef40448fb328d2c342c012d711ec9a253940448cb4f016fecac012df1d402cc0d440448b8539632ba7c012d41f13f5080840448b5cff77107ac012ddb5891f8a1b40448929b28badf4c012d9d336622b88404487f2f82b5b8ac012d020058c8f79404486b623167450c012b87597e54218404486847343e6d7c0128d9bac18774640448401d774e041c012780fd5b5ff8140448077ad2f3c73c0126d4f586908ea40447c4349315d82c01243f1c521293d40447a64baecc7e2c01235b573839f2140447427cfd70728c0123cfe9876d9d1404471637f4b8fa1c012242929f87f8c40446fa9f3d365b2c0122053356d5b5f40446de7f797f3f5c012330decdb3db340446d3aaa1ff99bc0123a11b93af49e40446b0d02159dbbc0122f805db36471404469ab822cf408c011f99f850d67ea40446ab0b9da097fc011e488e28102e440446667f73fe7f8c011ed1e2a0c98eb404464e9255d879bc011e3ff9235bbe940446432089513bdc011e535c90711e540446327e0c6cc25c011b979630fbc2d40445f06733f456ec011b521c6be03cb40445d6420f19229c011bd1de282db5640445a63daf2f7a7c011b03cbaa408e74044566ee043b345c011adb18a95df6a4044511428fd8b6dc011549d49b896f14044518d7f48cf41c01150033d101a99404452d9821ecb14c011062f0dd6fa9b40445363104e3474c01103f82c77016a404454b8d8347031c011189022de8d7b404457085c5402a6c01102f9033f2d45404458429e398043c010bbb613d6543e40445959b787d258c010a4147571b5ea4044584c1ce41162c010b1af88322ce840445644da944f72c010aa92496e330f4044538a77f356a5c010b1004d57cc9b404450afb55c3a35c010a50d1cc0777740444fcdb292864dc010fb544fdad61d40444d1cfb7b0277c0110c6ea17beec240444d7689a596e4c011159bae3e38c340445083d1305ec3c01129af8e08d2f44044505c847f1a01c0112905ce066eeb40444dc85ad1769ac0111d421898162640444d34c093a5dcc01128344034b4a440444837846c9cf3c0114b79060c6fb640444658b6045e5fc01150185cd4528f40444452293c283fc01147cf63bc2343404443ea8b573f35c0114f3aa6b3cd3c404440ecbfc6d4e6c01143415136b1f740443b7d6ff1994fc0114d0c197173bf40443ae4939960a0c01147609a748aed404439da7e41b594c0115432d479d08d404439712f2cbe50c0115d7112b42f14404436deec4de04dc0114b42cc947ee44044363417b281d1c01148cb6e27fbc840443484ff502427c011a9829966b2ac4044346dd755df27c011c660e5eb4e3a4044315e9f4588a9c011c1fa9b92174540442ce5c9b7b34fc011d8649330269740442b7e189ae7b4
+4;Almería;61;0000000003000000010000009dc00541f229863ed2404259565d422e01c0059a4683d08d2a4042576c81c4a1edc00615a6c05146f840425714da603bdec00681678dfb224340425a5a70a8a367c006c55d8b5ca630404258fe8d620663c006dc3bc55b9ce84042596b21ecb9d2c0072bc724c22c3540425e53a5fe70a3c007660f362044e740426034b666c00fc007d24a991a319f40425e8180de8cbec0082ca15c0e515b40425fa903597bc8c0082879797138b040425eceb7b9fc4cc008486f791ada3340425fb4293abf77c009078ae38485724042601c87c6c487c0091f1a8e4bb2b1404264d659a49d3fc0083b683232461340426c16a783b478c008589e8bd7f632404270871fd9e50fc0088ec6f47941be404273274df13e60c0089351ed2a06dd404275ab2f9088c7c008751e5eee5592404274ad6973fbbfc0084022cad2990c40427658d2f755afc0083c154c985f0740427948940301bdc007ec8a58d6525440427aa5cc55b720c007cf49a5ddc20a40427d331bcbb87bc007dc2eb6659c01404280c395115ad8c0080bb21bcf1c10404282fcd50e75f6c0083c92b331ac5c40428e7f1f115f9cc0081ebe7a7101c340428e8017496a24c00800864c8ac81b40428c2834e7e933c007977a828e4b6e40428c5bcec4040dc007936e2cae5ece40428fa46b3318a0c00771d45647cf12404291e50023ab1ac0076ee421d30e864042940a5e796e3dc0072993030520af40429561efee28d7c0070c42489c486d404297f2fe6d6160c006ffecb1078e2e40429da052b0d1f1c006c3595bd5ad8b4042a3bd863b7682c0068e0e7d93a0ff4042a3a03f3882b1c00684e05e12f4944042a2aca1f8d27ec0063b6653d82a8b4042a19eb3b08250c00639c5e06bdd6c40429fdf2a2db72fc006127fcdeb85cb40429d04f37a0ab3c005eb7e06c10f5540429d47db20779ac005dd3b576665b240429e608a99cc70c0058ab7647d249140429bce31b7ef2cc00547ea6f9ff60040429b229c1f8e6fc0055340a2a9dafd4042a485ad3beb72c00534fbe36e577f4042a7fa616bbbf7c0053c9f44649a1a4042ab9902924deec005192c90e040254042abf24819d2c3c00514a91605c8394042aeaf41362b36c005253ff03895514042b01ee87eeb29c00515c13e347f4a4042b275710a1d29c0049e3e54f1c1474042b6ea8b18f84ac0048c3125f8f42f4042b9233ef8a80cc0041cfcf37d880e4042bd61285fabc9c003a901291fdeee4042bed36e3c1dbec003a68ccf30d5354042c134dc84ea7ac00363e5dab235144042c1a5f253ab34c0034b29aee13aaa4042c3313f05570bc0032d8050f3379b4042c1b692769841c0030c986a4d2e654042c2eefdc46677c002de3ae11ee0b94042c2da7e18e837c002d888916fbab54042c603dacb3d2bc002fe90307e10ec4042c7573cfdb751c002f08d6a25269b4042c811e3ab1348c002ffdbfc95924f4042c9f66484d3a9c002f1734716e23c4042cbb8c2988537c00302020b3f70a64042ce5e86f1d4cdc0031c3f9ca30e634042cf1acc02bc37c003215233f6c9ef4042d0f541f66f89c002e063c85167fd4042cf85a7f74ccbc002c3728a4fe9664042d08a456d0b61c002889c242fd7814042cf9858d1d347c00278b3d9a5920f4042d11428a7a532c0028f44d829d5c54042d2f4ba62ce12c0029af4a4e0a82a4042d73cf4eee60ec00236db0a9f8d9c4042e35b218ec601c0026a08d5e77da84042e775d92462d0c00250aa3855e56e4042ea6df0c9564bc0025ef86194df3a4042eec788e063d9c0024ee44dd90d094042f14c29862da4c0021f83a3049ec34042f0c2e365a6b5c002019a4a3b04054042f2d6b6904a66c001a98d50be91ff4042f5479b863f05c001608e7ee6ee6a4042f1bf5258f0e6c000ffc734ffb3774042f33c47974beac000c734668f00394042f03e18b8f849c00074ea0d7a66fa4042f0bfbddb1769c0002c294b41b69e4042ef2135558884c000094d0e9df4eb4042f0a701385bb4bfffb91e4aaa03864042efdb743e8510bfff969a593ab76a4042ef00f66c7acabfffeca7d0d022d54042ebb28108cb78c00012188cad91b84042e3319a1cdd6dbfffeeede19a64454042dd30a76c03f9c0000facb2d0f82b4042dc22286704fbc00019e8e5a0f2ee4042d9ad49757b13c0001831cc89639f4042d60c3a11041bbfffbaa6fd9f16754042d1c8ec7eaa11bfffa10054a867ac4042cf3279715275bfff48d26d5bdf364042cce92061eca8bfff42b21fde7de14042cb420ed244a0bffdbe07727ee7554042bd6dcbd3862dbffd857d0e1da5024042ba3df64766eabffcefdf6d522cb94042b77e02826ee4bffcfcf43b0c00d04042b9cc98a3bf27bffbcb0f424e6a584042b8a836ad07adbffa178f3d8659884042afd25ba462eebffa5034c14198154042af890503c24fbffa7462904303b64042ad575524524ebffad5532fc1a8714042ad2a0a392db9bffb55310bc437054042a6ed2c6698efbffc2417dd3036184042a1acb7c621dbbffc671d60a7cf5740429ea773b0eb8abffcc2d23d82a00d40429d63e084e583bffd1000f402011e404296e3d691fb1fbffd0bcba49d7285404297ca3fe18ec8bffd1e979a77205a4042977656dedef3bffd54886094c8da40428f43a82f7858bffd93c341ab128c40428c7755882df3bffd9773d234c0a6404288bfac43d178bffe01d6b604b445404284a670640d93bffe0afc05522cfd404281dae0696a5bbffe6984bef4a58c40427e6ed12e8651bffe4d4da7c26b0e40427ca5dba4df7cbffe69dfb463a7f940427d42c0c08b32bffe53da17ec8e674042796e468d35bcbffe75ba71ab68f9404277fbbcb14326bfff0c6871a5d70c404277dff9ea0029bfff7a1142a6206f4042730df146f702bfffaf72588472e4404273947a73c222bfffdf92c264e9e540427265c023462cc00007f0a2bfddfc404270c0d7f0862ac0000be032e3b5a540426e2c4fb027b7bfffed4c318f77b640426cd950f68a02bffffe63ad45eb3e40426b85e4fe3e57c00033f2d24d9dcb40426add7118e0bcc0007aed02aaddc3404267a500b38cbec0007b729aafccc04042638fb37a1e07c000aa88752f0120404261ea266adf03c000d97d6c9ae67f4042619ea1359a41c000da854ca7f0c24042604443eda6c9c000f82b49f4849140425f99841bbf35c000eb7ef89d4ef540425e66e13c00cac0018c18839e497140425c4ce5cc4d20c002290adaad12d1404266d3b54727bbc0029210cb9909ed40426ad033318e4bc002f545fa68c4ee40426b9d1790c8eec0036a188b11409a404267c65b29d87dc003d4044b1be5c340426b1e3e5ba7bec003b685b1db2ee6404269b5891d6459c003db0a326f243740426af4332da9ddc00405490dffb6c94042698d3da4c002c004858202bde44140426829ae5c15cdc004cbedb69eaf7b4042633cc7575335c004f2eb405df1ac40425d317c57720bc00541f229863ed2404259565d422e01
+3;Alacant/Alicante;52;00000000060000000200000000030000000100000089bfe811735595bc484042f1b454d783f1bfe8650c58cb3fa84042ec5e5daa1071bfe8a9d1e91ef08f4042ec053a1343a1bfeac99de26d61c84042ef424821e058bfed7a6022a1e2e14042f8dccab9d5adbfeee76496e9a22d4043019f6770c9e4bff047bc47e6c0e1404308ab55525bb2bff07c4125394a7a40430c6d1287c201bff09683109ebc4c404311a0a47f14a2bfefa4d86e048439404319816fe8567dbfeef6fd3665dc6d40432348dc76d2b4bfefa5cd506f1d094043290bf89176b6bff0739a0ed6d4db40432b5267e3b66bbff1594d5287fbfc40432c50620f8c07bff1677b91f1af8740433414605f3b4fbff15da9381490d3404336ee7d5892b7bff13c3c601c64294043373a6c152f9bbff181884ed4b58b4043380ed2224399bff0f32ed976174e40433a5628adc090bff0392bedef873740433f94c34ea761bff06a79ea1e38c8404342ebd01f5f0ebff005f4df295f8f4043494c18650445bff06aebd717ee22404353ed104615b1bfeecc863c2ae4c240435416212de6ddbfed4e2da6f109dd404359155e22c26fbfee44e8653744ef40435e4cdd3992afbfeec4062010d2c94043632c5ec77a6dbfedb9dc5ce2af0c40436454a9db303dbfed46ea8544780140436405529ca763bfed3923bf9a2bb3404362827198e355bfecf5abc7de3f564043622fa9fc3d53bfeb92fcfa670ed8404362ac8787f42bbfeab539fdca122a40435dc04cd91903bfe7848e8afb4ec9404361357fa707cbbfe7771addc0a9c340436037b9885502bfe6f33e7f52d7a540436012e06ac1f4bfe6a14ba327c90340435dedcb2e2afbbfe60a86adc8698040435ee1e191aae3bfe5aea8b9bf764540435d53648108ffbfe49bdcca9bc51840435d33a33466d4bfe48f1a881f266a40435a2145507d58bfe41e4eb2f4113d404357e0fd5b5ff8bfe3c71373e9f66d404357e43b558df4bfe03a4a156f4a5d40435f19cbc9fea3bfe03d324c474528404360ac71e9e370bfe0ab1413c46938404360db4aa525fbbfe0f2b38a41c90a40436230286b1cf4bfe219bdaa2b486a404360b1d1d6994cbfe2b243dbbbc1d240436259bf4818b8bfe30c03f4ac39db404365c5be7b2566bfe1213aba5d80dc404367b9f86dd433bfdd8f6274a57f9440436760ec901cd5bfdd7ac54986edd74043684d64da16afbfd9dc3c849e3d7640436aa3d61bde8dbfd9d124744260e740436b7bbe3c6638bfd86972f8f9841940436addf9653132bfd649ebeb64d73440436e47807f0dcabfd4b6f8548ffa3440436e86e12128d6bfd3e44a779d7069404370d55d8e9549bfcd82575b8f258040436d3f2512f8c5bfc920e9da79b3a040436e02120f325fbfc82707bcf3f7f040436fcc2237b853bfc49624917c3629404371960ad72722bfc3da176ddaceee40436e24172bc0a3bfc2f42dd5b7684840436de112c19b0dbfba22e1522623bc40437000efdafffdbfb792c76d67618e40436f8e35354997bfb6fc3a8138d8414043708ace5eb70abfb213e8076e66ee4043715f4b49d561bfa594c82c31bfc940436da03ad9abeabf9c0d9fea855e3d40436e48e7e5d7e1bf996372ec05cd1f40436fa8af9d4d3fbfa3352dce084ff440437186f8f1dd983f8f46b4a2e7ff8c40436e90c3e5a6163fc01a379b9a1c4340436c9ec8cb93f23fbc087953dc7ea440436c3a39215ecb3fc94875266a1971404366eb1e2435f33fc7a23e548aacfe4043662ed105b8f43fc7887bbc3069cd4043648ca3087a9b3fca704682230e004043617f421943e33fccc524e092aff9404361d410fd980b3fcda1d2b22dd3e840435da953199c4e3fca1cc6bba1e85940435dbac73bbe473fc75944ae9f7efb40435c428e924bea3fc3ed841864361c4043595952345ddf3fc30590692a7733404356f1e26c2c8b3fc2d025987c1e70404357f4bd7f857a3fc0b978e37ccdc2404357efea9602d93fbd7c085fdc19d84043563be2c8fc4d3fb934c1865044444043561fa4ad6b553fb2d710d55cb5b04043528563b313fb3fb57efdeed0243d404350c73aafb1e83faa4d4f2cfda8d24043521649519c6f3fa1d051cdb942124043516abeaffe8b3f9f48cdc69445ea4043501e1af0fab33f856b0fe5c893a5404350f0c78abafcbf90441e0977c556404350367eb990d3bfaf9c728956cdb940434a808e02c02dbfb065a6040290754043493ac2a95d5cbfa96308b04a2c96404347f5e4f1e53ebfb8f987c0d41b20404343011a2d0e12bfbc5f90daea5809404344571df62c8fbfc32d56f913b03f404344902679f87bbfc60522c9d97d5f404342147915b7f0bfcc87f35a66641e4043410fdb09a672bfd3fa914d92268040433d1c8121f5ecbfd8bed8d36b4c7f40433738c6f75bfebfd9f26b2d86b21d40433302f06865f9bfd9d885ae915e9e40432d1df7b36686bfdbdd1bcc30bd0440432d7774984fbabfdc6ed3c9517e6040432e7efcd1329fbfde57b9088e88b340432c8a32e0f546bfdf54adb92dab00404329fafd078e50bfdebdff254ace6c40432bf76fa7718ebfdf561ff79725cc40432a8b21e75b70bfdfd04db6d34c7f40432ad8674a3c0fbfdf9794b8199d9e40432a2699226190bfe02eac7673ad5540432a91107c2caabfe0a34750dda44740432616c19a610dbfe04fa873c972c8404319ecbfb5a6dbbfe13622a7dbe2d1404317efb2a025d0bfe2f07e91c528ae404318349860e800bfe3a26802506fe3404316506d2f1c3cbfe4708f2c2d5a82404310948062077fbfe4e36e46da84f2404303402072777dbfe4b97840475ca54042ffffa6cff430bfe4fb83442048ff4042fdd983f5179abfe5fdb17be37b3a4042fb6ceb5b025abfe5cce95600a3d04042fcd27efde1eebfe6306592ce45c14042fc817207a6b5bfe6085926a6a1af4042fbbce45d9e52bfe64bb5660677c74042fc17840475cbbfe68ed6754ab8694042f872aa81f437bfe6f7afdef7bf0c4042f7f00c2c8920bfe708cd8c98ddbb4042f4a81e753ea4bfe7b60565f90bce4042f45e61790595bfe811735595bc484042f1b454d783f100000000030000000100000004bfdea059356a33ea40431555560a7013bfddbf1908424c5e404314dba8d963c6bfdf0c5946ba9bea4043155a5bf6cbcfbfdea059356a33ea40431555560a7013
+2;Albacete;42;000000000300000001000000c9c00618bba3da902f40434431303b538bc005f96cd096638d404345fdffd9ae4cc0061fbe31cbcc69404349740745bbefc0060032aaef79c340434ecad986de45c0061c0a206a58bb4043505e93d6837dc005d372bb4d375b40434edb8ea280dac005bd9d2e09e4c24043500419c01a8dc005993c9ce0c3474043500bcd601206c00559d093670bba40435319ad8c50edc0053e93f1c28326404355f183d3003ac0051ac4d5d4d5a840435e1fd1728a1dc00525cd4974683240435f898299bc99c0054dcc1d13500340436073849c8760c00591fc9f921ae4404364371c3ab7fcc005dba1ee6305c6404364139cf14e1dc005e04afee80e2d404365cc0edf9f6bc006057c9cf86297404368491d9e541cc0060258476134f140436c96b9fa5104c006193491934c09404370bd0c8153e4c006533f86cb023f4043721f1b2e03cac00656f7771a68b8404373e932d217eec006afbaa69e53ad404373f6fc69502fc006dc7efbaafe13404376b4588ed9c5c007027ef3ae968a40437677087b8accc0071027cdf1b25740437820780b9093c006f7bcebea5a8e40437b97157d3730c006c1b8acaf4b0740437e410312e28fc006a87a39c6b9fd404382f99ffac2e6c0067abdcea48ab14043830ce0699de5c00670a8f6e252a440438a1ad45509fcc0069e3cb704526440438c971e1ef9ecc006bdc3234497794043913700dfc646c005c91938e9b4174043a1e4b805c05fc005f317fe8204304043a8727d985396c005e2808fffb44d4043a8fe252bd5e9c0054c78dcf1c43a4043a9359fb8dc44c005146b79d434ff4043a9d33c47d9dfc004f43dc3a756934043ab89d096e466c004bfd8bd1afe094043ab72024a76e1c00463e4fbc2ae914043a966fc2db875c004169f2b3a26a94043abcba9aa3b86c002fe1bdc65ad3f40439dcbda1e191bc002e3837c7f601040439f8f0ecab7e4c002cc931034f8d34043a3a742128de6c00291cc7835932d4043a4518f18252ac0026a26187621224043a1be095f1325c0024f360a869f4a40439d033b82d1c6c001c05d4464f0004043a1796679c2cbc001746dc8a7c67b4043a278b8bf5fe3c001597574a13ca74043a3fa39774506c000685f4114588e4043a22277c45cbcc0009e66ce267a4f4043a774556bb118c00096ed483135f24043a91a7b1c6725c000c3d6fcd177574043ae01a1a6ea77c00029a3770a6fe84043ad088f6c554fc0003a3a495203834043ab1c892d65bfbfffebd4cfd08d4d4043a7a7d5f48b25bfffd637647042084043a5974fe624ebbffe3177bee492f94043a7035d806c55bffd85e6fccec8254043a49f854ffa58bffc5151e4a42ef44043a3e7b08452f2bffc35b02405d4e84043a69758e88aaabffbd418cdf994fa4043a91bc4ccce25bff9f68e3fc0aca64043ae6c61d9750dbff8e41014dc41464043b36fc2837b53bff7bf4450bcdbe94043b624cd3ee295bff7cc7c1e9219fc4043b344f4e0abecbff79766066698de4043b45c51e7a0b0bff775a20aa3bf5a4043b38770bbee9dbff79a83451964ab4043b2f6cfde2ccfbff7938cd7bf44244043b21a6b978ee4bff75ef883ce9af24043b3491c73d40ebff73a0aaf8f01ef4043b2e7992123bcbff752ebeaf52be74043b1c0eeb6f132bff73d5d2fd34ebf4043b1194e4fef2cbff77aecdd9f94164043b0ffa4d3000fbff72c2e4675966c4043b073062fcd81bff7443324ce1e3b4043ae3837db49cfbff719cc44ab6f744043ae589a0ca87dbff6ea22138c60074043b04f98b9cabdbff6e533f68dcc984043aeb25083bfd8bff6caf2716e79a84043ae949bdf554cbff6ccca58a939754043b0b61f6c0105bff69d237a7ae7cb4043b0b6d8ef9ad8bff688aa0e0e94204043afa33720c25cbff6555350816f234043aff16c53e631bff685f9d5aaa81b4043aee34ef5c2a2bff625b78a1a75a24043aeed102a2addbff625f0ce6ff6444043ad44d309b8f8bff5da8d862127ff4043ad7433d75092bff56168131ffe8a4043aaba18b9a415bff555d43ecadac94043ab9422e00770bff4fe7967caea754043abe339ebdf0cbff4c314ee4610a84043aa45c1e0e080bff466701dfdca7a4043aabafa36005cbff40327e8afdfe04043a94f7d5a8d84bff3f47a17f4128c4043aa146b5823eabff3e88887a377ea4043a9267ddac3a8bff391d35d2c226b4043a870b9683870bff3526d4e733bc84043a9cd98666029bff3256d4516a44b4043a82fb7da07afbff2a226284c941c4043a7b095d07285bff2cc0c56d071474043a3bf6a34626fbff2e4a98cce268c40439b1cfb070ba7bff3274a5b767be64043969f095cc270bff3a1c79e288e594043936b1fb3a488bff3d920f997279c40438e8edf2b7422bff4176e5f6a59f840438d96f9cc5f40bff417d1de2e9efa40438ac14c9548c1bff440502c09c096404389a8ec3047fabff438f21b0ffbcc404385c5a3ea10bcbff39fe603187d1440438328791482b3bff292ffd809634e40437a3768528af9bff258b1df3e4716404376f5075c1d6bbff08db31139e4284043779bfec61093bfeffa89817c1f1540437987b8528ebbbfeeb37d4a4ffcbb404378e810751830bfee9bd9373e5ab0404375c696563200bfed95cf66156ee540437224f227d029bfedf13b10cd2cc640436d8f55dc3325bfed989aee24d8a040436963ed6548afbfedd976ef1fb2f9404367d794dc9b78bfedb9dc5ce2af0c40436454a9db303dbfeec4062010d2c94043632c5ec77a6dbfee44e8653744ef40435e4cdd3992afbfed4e2da6f109dd404359155e22c26fbfeecc863c2ae4c240435416212de6ddbff08b40146488624043540b4aa9faefbff1da39d57d8f3c40435b0f70df18debff1ea104069fd7540435e6e4e6b8cb0bff2f0c0c125cf9e404360a69a9a30d5bff3feb83edc6fea40435e8c2237b853bff48a355a32841540435a84912dd413bff57d3d6a3b299a404356b55772242cbff5dd653041a27340435a1b8eda5681bff6240ec50c30884043598037a66812bff6bf3d7dc28122404356a9cb33224abff729afc4535695404353221209d3fbbff717f42ded56b94043518860613eb5bff73b77f1d4184640434a6d5352ebe9bff7cdc77b20aa1140434818551857b2bff7f10963abf6ea4043453da793b5debff7adc07ac8b7d940433d6c0e3b5719bff7a913e33f5d974043302302bb938cbff96eebe8685623404327ac61b2cd73bffab79bb57da5c9404327e9f47029dfbffb17ce3512ed7f40432b37cfff4b13bffb127a802c68c940432c6b9fc9920ebffae747f141877140432cbd80940f16bffb019161df0f9240432ecbd3236445bffb42edb0585e2240432ff77fcb33bdbffb82a0ac4c3d8b40432e7b0d89cdc1bffbe84942c7ae5e404330bf3907d5dabffc13c981cfdf8d40432fae66f0a4efbffc5472ae1d5f374043308123ca123bbffc53ef2c8ceaa440432e9f286abe76bffcb85c7e6c52ca40432f3c4141f247bffc8b9a4373d95240432d8c80477444bffcfadfcdfdc6b940432cf70f08ba17bffd38a134ffa24940432aaefc7bd5d3bffd9dae6807d13040432aabb701ce26bffe84ea663230774043261b0a7d3184bfffb8a6fdf4fcb1404323fdc4bc5d13c000637a02831ab040432720fa7232b5c000818f67330c6a404326142835d423c000a8d04710f1d140432202958243f9c000e72fa05f392940431e6c6ebe23bdc00158b1257c665840431cfb081a3bfdc001b4d099e0e736404319dcde5d1809c002201620cb1e1940430dee5f16997dc002a004e1b38622404308c0714578c2c002bac49749324e4043034fae7a3790c002dbd553146046404302e148ff3c25c00363260fd684284043045059d2b7d1c00374f7415955764043058bf80a2c18c003d87c2c42cb79404306cc5ce112bbc004690e11d5595240430ac38868cd52c003cb00e3aab4ca404313f0834236a9c003bf6951f58d834043161e74b0e827c00391f98ae8484b404317b4703f5830c003908b0683d2b340431a3b68bf64b8c003a27c3c08106740431b951c46dd8ac0038659c5a1bdde40431dc75f5a5891c003921300852d7440431f4eaeeb20b1c0037e29b176a774404322d529f56946c00387ec426f21874043248f69f36c53c003e1b39f3a7e944043266ec691f536c003d4e5c7bce4f040432ca5e9dab5d5c003f0650b3eefcd40432f86da3130c7c003ddfff554669b404332ed01b3e7d7c00467c5439682b9404333995b885e56c00493378c22268b404335022583361ac0049da5dcf3e16440433796bed7db63c0048a08d0f02e3740433af6d6b01449c0049d453159e19640433d18cacbaf86c00488723732a4cc40433ec79a464568c004bdd8e8a8ba3840434162815f3b24c004f2e49f2f0d684043419bb2004b5dc005700285519f4140433f9b1d4568c9c005d32669c38a7c404341861350a5f1c00618bba3da902f40434431303b538b
+1;Araba/Álava;21;000000000300000002000000cac0090ce53fa41e9e404560fa860ba5dac0092eed306f897b404560db72079587c008fc6cdfc9a11640456508a14ec4b5c0094619c3edcd70404566fcda14cdb2c00921269a03dded40456b03c7732444c008e7bb1f255f3640456e375a6a03d6c008d725f0299e34404570964be92efbc008eb65af06684f404571d2e8db204ec009016d638e4d6940457216b52bceefc0091c193f85ebac40456f868bb77b24c0094d7610fe550640456da98bea846ec0098686a1b4092140456f4a94431884c009c70400eb8d5940456b586adaea47c009a4eeb9e51c2d404569e847694287c009bc5a9c94dcd8404569cb429c655ac00a4b4c781782984045714c8d1d1aaac00a3612a94758fd40457189e0f4a1fec00a37c92bc747ed40457366f5ab45f2c009fd04ed583b34404574c12e8b252fc009e26b2f67bb6a404578d076d4b76cc009cc3ee30389bd4045798f7fb3d925c009286907f8bf3c404577a3ac2c993cc00931b602dbd27a404575624f5357f5c009101252e8db21404574eceee3198dc0090322b90157b3404573b83763077bc008d659b04a8b14404574801bead35bc008bc9fb635a8fc4045730b2e51a20ac00826b82c9b83444045744a1f486fb1c008187abec93a2d4045760c718c790fc007d9f2454eb6134045784de2858a88c0085c8602db490940457c8d18ed36d0c00848e6b41864c040457dcae91ce493c00809391e0c631940457dc8b8e7a3cfc008011c0044511c40457eac3a347313c007c4aa3a1492a340457eb169deafbdc007a54600fc657d40457fda63f77edbc007e2c2a59b496140457efe39fde3d8c007eef14cf89af6404580060b294b4cc007e35a5def746d4045818c688e5ed3c00843639b637bd94045829a481bb3ccc00825fdafc3a78b404584d21b28adfdc0083bb01756d61d404584bab977b8fdc0083aa3fb588c9b404585f674cd17b3c00865ddef678a064045860b77a2a3dac008865ac0e32c02404582f62f110f9dc008b943cdac93134045813940f4110ac008b640589bdeaa40458035a064a8bbc0092887489a5ecd404580e019f117dbc0096c239a751cf4404582d061fc3839c0095caba6e25779404583b8ae6115b4c009228788b12538404583d0f2bf584fc0092e7156da574f4045846a71560c2fc0091f5bca9add2b4045889860db1d59c00943f7ce945e58404589795b3e47c2c009124f85f1937840458c722bce5c67c00921c65cf9b3c040458e2988f8c024c009376a3440125a40458d53c23adeb5c0097424e09b46ff40458f665e7b2ceac0094ab3863afe3f40459253f30d398bc009558d2e627a2f404592cf0aaa2808c0094b7738e06017404593bede4a8137c0091a2f3326fc77404594d65027cf6cc008e2ad7efeb8ae4045925093cbfa3fc00836813131c0064045949e54742090c008220d3ef19c29404599eecb8b6a68c008515787c0172140459af7483a453ac00842e459a8b53840459bc3995ab810c0080d3cdf0c1d2340459916d73ee30dc007d7215bc54da8404599d669184775c007bf6e16ab5f8d4045974b6781076cc0079236f70d1238404595df04f77a65c007a22186379213404594713ebc5358c0077c8bb20b91954045916f69c76653c007cdca12b335f840458cbb70bbcc41c007273f7f0224da404585f11dd19988c006e91053e8bdf8404586a66a4463d5c00693562ab7973a4045847c6fdb37d3c0063fda3732601440458459f1968e55c00628739bd077f54045837017f39a4ac005ec1569fd27674045845ff9f6e2b2c005d67adf10be8c40458310d90b747ec005a1c6283a5330404583fb6699a33bc0057f015cdd8cca404582c4ab82c793c00555c664a0350c40458405e9389345c00511a9b418f6c74045828c6843355fc00511cf7c7f826d404585bc9ae5f4e7c0054a00233b6e6b4045886ad8214fedc0054b1beb20a87540458981afe557d6c005107cda57602040458b24291f5e15c004bd61c211ddce40458a64d9fac3e8c0045f00334e028f40458b43e15646b4c00453f52030aaa1404589d117638db3c004628c4f48008f4045899c522a331fc00432e54f470773404585cd43fc3f68c004658b5fded1a1404582887033662cc004c5b314b73e934045812f0ea0d7a7c004ceb9c86330a74045802cc7a30619c004be00a7f9366b40457e698ab0fc15c004d24bd8234abc40457db9a3c346c5c004c08f85f804bd40457c8db9397aa9c0045abd09e12a52404579a29e5ac97bc004484da832165c40457c99d9d2bc1dc00402773051f12940457ad063b8bfaec003d277894e72d540457ba3daac19b5c0039b84bbaad54540457a6cd6f679f8c00347781b6f9d1c40457ad0f20d1a92c003036e83a77b15404579596b4957c1c002d6a02b72e43d4045799a7bf7723dc002b0d935771674404577aad49938bbc0026b272d51ae0440457685abaea29ec00250fbf7904d744045737edf1cf548c0020322711085d7404572c0db722c18c001ed88fe40e31f4045715c7b945393c001dc8b1434843040456c0260ba4c64c002243c1311e6c44045681dbb40a221c002264a4c321051404565b9573bc87bc0023f82e1e0f4e74045647f45721c75c002199c0e68f96940455fb8646cde72c0026f64ebdf590e40455e2d4f5f74ecc00288e884c1cecb40455ea2dbb7a142c0029791473aa71b40455ca4902f5a03c00280b875f51c1940455ab62aec343ec00288efe42072df4045575c3b1f0fe6c00279723881a6b4404555e8659176adc002593f35a88c04404556c6b3900741c002509954ea00ff4045558a630df4e9c00258c05d0572394045534f4cb1000ac002a84ea8af8c20404552b61fca7e47c002c2575b4a6d5140455137ba5457cfc0030e3b417d2b84404551309f48f4d7c002fa1c6d1579874045525a64158f70c0030da42bd50135404552dd0d72eb6cc003029474e3fa084045534a74f0644ec003538d78cef3c4404554d2b3f73de5c00399c10122d0f7404552d92c7b21f9c003a2fec4e3ec9c404551433ce301bac003dd550ce6872240454e5b35749accc004002b5bce5cf040454ee8aef7f20cc003eccfee14702540454aecebd9b5f2c003b298a4e3350040454b2f79b352dcc003a03d5757078240454896fcf81ef2c0035e748cefbd1240454db63f1b0cbbc0032c8d9dd1a66a40454caf50493268c0031e9ff607b73740454647bb62639ac003355b78658631404544edbab8ce13c003233b099eedca4045422b7e2ec043c003628d239d1bb84045415eec3a8c7fc0035d5a41254a7940453e9f3a894f05c0039726e15a115e40453f999a3ef4cdc003d1c7d30a4aff40453e4a1ba02229c00423284cd03d4540453ef15878ce2fc0040ae74bd413e940454187fa5fd802c00415aede24630c4045428cf8dd8819c0044ccb7f6735bc40453f5f2c5152eac0043c36e5cdd84440453df53a3ec030c0046e9661df4bb340453def59e85c53c0048c1668de4c0d40453f3dda3a3779c0049ee83e1767d140453dd1eb315e3fc004bdeca83cfe1640453da187fcb08dc004b12253111f0d40453cc772a9da74c004bf7e418aa01340453c7651f4720bc004d1e2ccf1e94540453d765633127cc004bd24ac7f1be240453f02105d67b2c004d75a2167367940454070d9b1e291c0052b642b89d7c140453dd37cf93eb5c0053f8412041fb140454070fb4eda1dc0056c389f1caa1f4045413998d0cf6fc0056a2e50fed3b94045435c73d858b6c005a5531460457740454221d4ef8ea2c0058833ba0e25ab40454559b7e8755bc00574433113598b40454c35e64532a9c005af5a4c7cb05540454cf07aa90af3c005ecf6c804215e40454fac153831b1c0061c88032a681a40454fac07c17b9cc00638aeb226fb8f40454a8722bca10fc0066de7ca9042bf40454841a958288bc00684b7f8ddd567404548deee01d0bbc0069942c837cdde404546fe45ab2fefc006b9ed856dd76340454a5f36556b5cc0068f022381f67640454bb4baa78642c0068cd78c8827f140454e6d7a6e7d84c006bc01c1c37bb840454de6901ffbd2c006c8fcc3b576f040454efe8142e93dc006bfd745f78609404550b4212f4fa4c0072c0d7fd68b23404553bc92c73147c007291257d7938c404556f3b7bf96d1c0073852cc335271404558c7f8ce43adc007714a3e22e1944045598ea5f9e8ffc007736b9695c7ed40455aaceb707beac007d845b6cc0d1240455a0bc50b9e80c007e95b7730495b40455c0b5664298fc008127a9db38d3f40455cbb4ff36e89c0080b0700e9f99f40455dcc56ce4b86c00820fda282a15b40455de56868e3dec008221e799b550f40455ed95f59793bc008555501393b0b40455e9da229827dc0086392f65621e5404561fde7142961c0088406229da88c4045614dcf2d71a0c008a3c2382f828b4045622f9ed63bd9c008adbe95dafbc3404560e908754d13c008cf101ed3772e4045623671631114c0090ce53fa41e9e404560fa860ba5da00000027c0063bbff011edb640456578e2f7a8e6c0069d4fcad4b63740456468df655e5dc006af0cbf6744c4404565ec29156f76c006bc1a47cc3ed54045635a67a63da8c006d4cd934eda624045624917b8a5c6c006c9761b31ac17404561b389a504ddc006d2e77954077240455fb9041c5e1fc006f36cac6a707b40455ebcc06980e7c006c61f4b639a7340455d89980668f3c006d77e6fd8bc2b40455d47dc2f0cd6c006d014f2ab58b440455cd031953d2ec006a1c38df8956d40455c088b8a0c5ec0069a37ed798d0240455abe704641b7c00646a97d4d99cd40455976ee1bda85c0062a005e49b75a4045569bf24a9becc00634b8c0951fd1404555cac4542d54c005c0d544f4037b404554b808daeffdc005a08cd529d75a4045564f269d9267c00554c7f72da70b40455545c20116d7c00544845c121c0440455610e765ccb0c005142cea07b4ef404552eaf47df456c0046a5d5fb524ee4045531ad2339402c0046065f0164a67404551958b9187ecc00423a13e4b0bba404552bb0510d862c0042d1ade168fff4045578e5861afb9c00450b0636837d6404557e1d6dd7a78c004631409b36e3e4045559b50c4cfbac0049f449914c20d40455587fcd50e76c004c0ca2d4f0769404558532efc16e8c004df313acf4da040455911f88a03bfc004cd6eab9580c240455b8ddf10c723c004b848bf3f233440455afa4d638b15c00494be45395ee140455cd26e307909c00477674168e731404561a13e5e5f87c004b705bb2ae3da4045600a932e1204c004d19b5d1bc287404562a40a1c1ed6c005265039422fc0404561e238b7e00ac005da384bb2164f404565b29ac5464fc0063bbff011edb640456578e2f7a8e6
+52;Melilla;64;0000000003000000010000000ac0079f00af5268834041a8ff98fac0dac0077c30578bad1d4041a5bbc0a06ea0c00762a57af0ae764041a4f91e4212fec0077c7fd7a69a894041a562ede9859ec0077aea8341129a4041a391a01d63b6c00764b0170986e84041a3d95419b2afc0076baf8390c3b34041a3031f59b782c0079ab5ee6c8d504041a1fb8734e814c007c32a4a9286914041a4f36ab73f2dc0079f00af5268834041a8ff98fac0da
+51;Ceuta;63;0000000003000000010000000ec015873ae9463b5f4041f4c96267b1c9c01577c19002c1fd4041f58051898a83c01557ca3bf8d4934041f278fdfeda22c0154cb6a861f8324041f351fc1440b4c0153eb247769d524041f2b4e5abd212c0154c81a7fa1e594041f2cab6ea59c8c015410b9943e6e94041f1cd0f7068fdc015275536fa4e4c4041f41f1713e532c0151cf94ecfb5a54041f2eea568f47ac01538def4d3b8354041f13ac7c308e5c015465e57f17afa4041f19411d8a323c0155fbacde08ce24041ef745b8b5ad7c0157cc46324702b4041f0d2dc0e10eec015873ae9463b5f4041f4c96267b1c9
+50;Zaragoza;24;0000000003000000030000016f3fd4a24374a77a6040449cd4b0dc56583fd3698f040333ab4044950a6390f4053fd179049f5d39274044930c36d63c1e3fd030fd67b9109c4044933834283f7e3fcff902913b0c824044909710276a7d3fcb66dc8b8f48654044918775bdfad63fcbfc30a81384ed404490bb27532b213fc9b692bd763179404490310a843d673fcac9f27f05661340448ef57bfc94803fc9af8c9de6380b40448adad029bd583fcc191ab051e44640448aaa7f4fc15f3fcc44ac712677a840448922ffade46e3fc5821a9fc70dcf40448913d96ca9883fc2ab6162708d8740448811c7d393bc3fbe462baacb11ae404489d56c6bec963fb421661b00d12540448a48a5faeab23fad7554c96394584044899b3feecfcf3faa890315d6786a404487045b50d5fe3fa2e712b8025432404485f5f5bb02a0bf4574aae68cd62c40448b926e5b6c27bf890b76a316e84640448f644b52a889bf9a6782ceaf8399404490650c33bff6bfb466c7dbdd721d40449352bfba038cbfbf55aa9b386ef64044940cd1f35adfbfc729844ebfe7c84044981521d8cb68bfccb23537d66c484044984104a25124bfcf8a742461809b40449b203d849243bfd15e2e26b7826b40449baf2f7617e8bfd43a96797e9c124044a0e0d0ec276dbfd4cae1c29f99b04044a0800ff25dcebfd4c9e57e6be31f40449f675f8aaa13bfd647e63438271f40449ee25c19f610bfd79b693248a78f4044a163b336565cbfd9f99a02d3a2884044a2dcaa78c292bfdb5ce4c39fb8a94044a55f7cf2efcdbfdaf9d8b40bb5c14044a7fb0d835c7dbfde172cc47b91eb4044a8bc640969e1bfdeb735f61ff1264044ac478f44c5c7bfdf4d052127171b4044acd59484e560bfe05658c5d014914044ad52aab46b7abfe19f0f246031994044ac3953b5d70abfe22ad920536dcd4044ad4d0ba3999abfe29dff32b6c7b94044ac8f41d1dc81bfe29e29ca067c7a4044a9248253b568bfe21d8d4ba4e6784044a6d8acac1265bfe16f6623edbd554044a679e162b0fbbfe0de6b1bf191ed4044a4e4565873acbfe032a7e58cb7334044a0084a9eac20bfe04f6966c34fee40449e7fe7b92eadbfe102aef6448cc540449d28c90c78e0bfe18d3f0240c4634044a2456f7e70a7bfe35e4e0478684f4044a96257a9f13cbfe426a8be4fb16e4044a7e7c5634369bfe403be03c2688140449fc435104f7bbfe491a66cd5851c40449e82acf6a13bbfe56a35d00a5dc140449e5108e8ff2abfe3845099f660c540449888e60f8b5bbfe481a0c1ac075b404495e2555b6264bfe61a2ce06efc4940448e8b41db1f54bfe6ca356dcb09aa40448f955d8a49c6bfe749b7b687886d4044926b7b63a394bfe85d80b91a5fca404495b75cadd5e7bfe8fcc833fa9d2f404492d0b85444d1bfe911e7b2f0f26040448f214afc3046bfe95ebce785128340448d84623c828abfea835687dd3fc840448c5772ad9c86bfeb8431befb0e3a40448dd35a3ea9a3bfec46f3b6e8d73c404490a796114eddbfec43b290fb29474044930a998145e6bfec871faf7b60d3404492942d64f93bbfec7f5d7ccc9e18404490149c715cb1bfed4a2eee9128ee40448d75c162b659bfed3395069e100840448be7bad16f16bfee7e4e786f38af404489a8091574d4bfeff480cdf0b93b40448c3089c2836bbff0024cc38e45e540448eb305bbd6b1bfef1e0efb345811404493a46f39e36cbff00386790071eb40449127468d4f81bff0a10260a4d2d54044913e6cc49bc9bff116ca7889a98d404493dc6a5b8ae3bff1b0d8c2fa3b1a404495738cae6878bff1f216bdc2d4e3404491455219a848bff2c8aae03dedcd40448fd52325a78dbff35c16ef160912404491c4551ffe34bff4120a54d3d30d40448fbc7ad1faacbff45788bbe1ff2040448d38463e3907bff40d878157f320404489e5d8f5ada0bff455b8bdffb30740448702ecc23e31bff49951c0f07e36404486411d6e4753bff5aaac1094a2bb4044875d0f1c1f13bff5c312f377b16840448929ee794d7dbff5a33b23cb13ee40448a741f3f3e0cbff5b15a8622324940448b54e06eb791bff67bc9666e7c934044887cc1c119d5bff68f6ee4d3ee6e404487697a4ccd39bff67a2ba770135b4044867aff44ef1ebff6ab3140fbd9e74044859a2e20f20bbff694120a07849e4044847e0c8cf899bff6ae2d1e0a1afb404483cef0a05dfcbff79f56e8192e7b404481e96c485b41bff7597cd55779a9404480dda86b8853bff72544ca67f63d40447e061343c368bff79160fc8054e1404479724e6ae0e4bff815e22cf51a6340447b6868720cecbff8eb15e4b28b72404478414d501d83bff96ed76614174b404477d5ea606422bffa28f67e76fe65404479f296cd83cfbffa9383a7b7360540447d39b941212abffbf442fcdd695b40448456cba4eac2bffc1fc01a9df7334044870cad1dc118bffcda48280ce46a40448b81a9c5ae17bffde87512036b4f40448dd00145e172bffe3fc71ab1313b40449110aba32045bffeeb4d32c9e7fd404491bd51f8a3c9bfff360a9a7c87544044959e24834215bfff5822113314674044961406e8518ec00069de2fd436ac404492cbf24f70dfc000a3a082410d67404495e2d1b5ae92c0012b80b297ed474044979a40cf643dc0014067956582664044a11b1d11dea5c0014edee24e135f4044a43fa640128cc00163adc30284d14044a4dff808f6dbc0015ab2018930db4044a93e7c4b99ccc00141c46ea6c9254044aabf6cdafd45c0014e1ad35131874044ad7c1ab1f6cdc0013195be9015844044ad964575c4c2c000eda287bb060c4044b0e6eb3bcdb7c000ef23a1bd21004044b664a5bc3cb2c000cfe9e8dec89a4044b90f9b221ea8c00048f4d633dc594044b6a44acd83acc000473628fe48694044b3c3ef4764dec000593e14f4bfec4044b2d5ca775d04c00055d343abc8bf4044b1bd3ae2c3c9c0003bf225298dcc4044b12c14d3432bc00013c5c37f57604044b1631bc3aae5bfffb5c44d7fee2b4044b37f45117972bffeff28f4fcfdd44044b4348fdb1018bffefc00b99f84a74044b5bf3fc88f48bfff424c22c34e754044b64e3f23e879bfff409df4d9418b4044bb31961612a3bfffb2a1fb096d8a4044be43826959eabfffa781ee014fe34044c34f7bd5dbb7bfff7a33cc1b882e4044c5e583b6f30bbfffe623768de2124044c9ddfa267738bfffe44dca4975fc4044ccdd84dc596ebfffc08b052c39c64044cdb4862f03a4bffec504f0d595a04044cc9639c20766bffe5dca56e1f53b4044d0f2e20e9737bffdfbd4ab09fbce4044d1a95a793faabffdbe6d185c424c4044d4ad03e8b19fbffce64b1ec87e454044d506951ecf68bffd0063918ea20a4044d7d1342fdd69bffc989af4dad5464044d97bdac62380bffc91ba0ab97da14044dbcbe6885fb6bffc67ec0e16d5404044dcc5e2603a86bffcf1dd9e789dee4044de3f6b4fda33bffcd8c350660dbf4044e02ea6d606f7bffd3742de4bfb2c4044e3aa780c08d6bffda24d3c9ec1ce4044e4e5a65e344fbffd19971a2fce724044ea1e6e34e6e8bffd14883e7d69384044ed313ecfa726bffd2959d580c7de4044eec6a8051741bffd5c66bf9672374044eee938978feebffd6ba8333a6a0a4044f1cb6771ff21bffdb76c8086ce104044f46b0089bdafbffdad10e94b21824044fac57fed5c4bbffdd7cf703797ea4044fd22101be825bffd8135d4c58c084044fe60f5928293bffd9f06bafc8d284044ffc0c74e1062bffd8e11c0247b68404501061dacca5fbffd56d8f0adb8c74044ff5e48bc17afbffcf72cc9953d734044ffbf312dca69bffca989b688ced84044feac2442a1dfbffc4535386873aa4044ff760647fed9bffbdc9bd49884574044fbf372665781bffb718b891342304044fa7dc78779c3bffafd34da2fea5d4044f9f700d2e3bebffaceb43a3766fe4044fbbe882e95c9bffa9e3fd4452af24044fae0d55a067ebffa7761950a2c9a4044fb90a34615b9bff9d652026774954044f9aae5c96a64bff98a3f5123b4104044f6aaf8c0e04abff8f2b621062c624044f4fc1f75bc1abff85f76f5a2257c4044f47765bd1e2ebff807367e7d6fa94044f64eb6afb295bff6bf9a616212114044f4df93433e44bff69274c012cc834044f5a052b51d73bff674f340dd736c4044f7b08fced95cbff61da21c9ff3d14044f8bf71199db6bff62cff0ffc32a84044fa870ec7c3fabff5fd5a129276324044fb22cf316fd4bff56eace2a1a04f4045024e47408658bff4e08d8ac291364045057f5d4d8dfebff4f830239a751d4045094189bc70a3bff5a2ed73f27c454045095a5fc39b31bff5de3f3ec06b5140450db0e68dfa3bbff661d1861173e940451027f4b537f5bff6453f50e792e640451738b6da0b14bff6ae3436cf862140451b2edc65b5d7bff6430dec968583404522d4be2e8a94bff662a3cc3c47f4404525494fbfb0dbbff543ec58d9351040452d7d458c376dbff56128e4027c0f40452f9de41ae0f1bff59c1e7561002040452f5e7a902538bff5c22b91b1cc494045306396300b3fbff576d11bbbf33640453643964471edbff50b161f7c1c314045398007e6edfabff48074a326467740453b7314094c5abff45d4edfae733d40453daedf601127bff466dc2aa78d3c40453f74fea706e2bff4967390e0266040453fcfb2dd59dbbff4b2139609ed1440454166fb4e61dbbff49c35f90b442c404542eac717c5dfbff43c7ee3c6f58440454745524275a4bff39e60940bdd7d4045456840be02a7bff33ea14a00eed74045465b449f414fbff33b10f751b93940454a03bb5a7861bff2874f6e274ffc40454cb114d7cacfbff2e05bf2d6320d40454e28e9e82a65bff2c02d6001eab440454efbecb129ebbff2838b9d240a1840454e31af8dd549bff26ec7f37cc27c404552eddbb6dbb0bff0d4afd8392b5f4045524089094afbbff096c47cd853fb40455368e3cccc2abff085142f149e264045567a06e41739bff0a081085335b2404558877d489150bff0729c347e8cce4045599b91d6d793bfef03c782b5fd5340455a1304e84fbebfee5b8e5531a48240455b10df673f66bfed89176348fa9b40455f3b6a60015abfed1762edb5fb7a40455f3c9205eb41bfecb31f1612327e40455e2a2e116050bfed04dfc2eb190a40455d016defaddfbfecf0708907aea940455b28ffb79f83bfed84d1a42a9fc5404559b3efe8fdfebfecd97b318236b0404559d6ef589b81bfec28959a7de78440455814e47136d8bfec943952288e37404554c7c96d46d6bfedaf4097cab774404553ffbe376ee9bfecf2fbca889c3e40454e74de27acdcbfed4516349fc4d740454d19107cfad3bfecf36815794a2b40454cad96fc864ebfed13d51194d2e240454b26e9db9dc3bfed97e18b4acc5740454b4286cdba09bfede4b536582bbc4045494c8b0cd2bbbfed7dc9c89ca2a04045491e6f7f9d4dbfed6531d449aa00404547138818ceeabfecc771b7300b13404547ad8c4ca166bfeca43c207de01140454647ae5fa457bfecbe8f10986d65404544fcc2c4f249bfed538acb39689c404544c7077d9a2dbfedde9e83b93293404540c0a35c18b9bfec93685a3179cb40454142d3463008bfec7d425c2c36fc40453ec4660d9d6fbfecb4641132be8040453d529452eef7bfec1646ea5b643b40453b1721f014d1bfeceb98c396ff4740453a03e388eababfecae54a0268cc3404538ce91c053babfecf0f27eeba102404537a62ad969e1bfeaf2604fff7a53404534253f5283e4bfeabbe1c161c5d4404532a0a23b4290bfea170cc125f1fa40453296c66b08e3bfea4b240f42ace8404531393996936fbfeb0382ae1218ff4045313bf5c90938bfeaf7ed73a52d1040452ee4593298a6bfeb6194ab25e6a340452b828352855ebfec25b398c93a1c404528d14ffec5efbfec8c096d5e74a240452601749256b8bfec73024c71aed6404524b2bebdaf3dbfed67b44552abb0404520efbe96759bbfec7f5f74ebcb7c40451eb94912d4abbfec8481b5de59fa404521ab573e21c6bfec100d2b0330594045240cf7a3ffbebfeb7433c8d1b7e64045232ad56dd28ebfeb017e12e69dc040452433c89596bcbfea04e0e3c1413a404521dab64ae66abfe9cf1c8376f60a404522a1551e594cbfe8b2abe9a84fc040452c611dd66e7bbfe8e4dba0357b4940453214b1a85925bfe790d2853fe7c440452f5815e75927bfe7d5c88fe271e140452e4b62fb8909bfe786122ebce81040452d3a56167bddbfe7d3abbbdb0d0240452b59dac9b208bfe752dc1a6a05fc404525ede4dfe90abfe7f3a9653e9e2140452386551fa84ebfe8100e2cb5e2f3404521be47f127c3bfe84cd4b5e08853404521bf34938584bfe85e5d9496e19540451b7395970924bfe803deb0354da6404519862db05639bfe8511cd3a8e79e404516deb813a49abfe80d4058c6d1c9404516227186a269bfe850481deabb64404515ca25bdffabbfe7eaa04175e37f404513f53c7e46bebfe847725e278ecc404512cf8416fb71bfe81194542cca5b404510e6bf08b655bfe858fa9a31e7514045109f055a4329bfe81a834bcf615240450fd8407362a4bfe86819f5a815e740450cdb871c35e3bfe82847cf43ece240450b98b7807926bfe8a5288e3e9c9e40450b2a5d0d6ea0bfe85859a9a5bc7940450a2d150c00c0bfe86ba845c00ee1404508a328c88febbfe8f3633e602f6240450700f0172127bfe964b9fe68fc18404506f682da20afbfe9c153acfb4b3b40450974d592ccaabfe9c0ca724bef3a40450c584ec96f53bfea0393c953a42040450bd724789f12bfeb6c96b88281bf40450686d77b8da7bfeb2a4685d3f28f40450560ada1b0b7bfeb393f8d6fd0da40450358f1f1fde8bfec515fcfda84824045007547fa2e74bfe8e715a01cb7e94044fa8bf92c1521bfe50ce9ab5d6efa4044fa8f365e8bd2bfe42dba2e4ad2484044f4da1a9bc043bfe30e0d191829ee4044f325e5869bd5bfe34e57f17af9684044f1007a1f1124bfe1c4455198ceef4044ef87b64f2956bfe0de5c6f75366c4044ed2abf374929bfe08933c438e5b64044eb1b784de6e0bfe0620c4930edd64044e45708988880bfe005ae54b403cb4044e172d618476cbfe0991c2e08fcd44044dd49e177a119bfdf52bb144ed2b44044dda73cf27119bfdc798c9f715b1d4044da125091b541bfdb6d2efd189a004044da4d286b9dcdbfd7f7de35216c594044d8143dfed7fcbfd770cdf142ab7f4044d70767f5aa08bfd7026ae61f50a04044d14f013a3cbdbfd40177570222f94044cfe29246691bbfd358fb1f56c3994044cdd0521d2e3abfcf551a3f2ca1db4044c95bd2a4273dbfca5590f882aa8c4044cd16e189d96fbfc4066cbcd2eada4044cb8442243cccbfc56bdf5d595da64044ca61d984154ebfc4283e46a6715d4044c8c08a1394b3bfc40d873a7a02024044c48487f172ecbfc11ba7234d95934044c2ba16a510a4bfbadf6d1a5710aa4044be2431404778bfb29cd82c403ea34044b046b12bfedabfa9502df360e8d74044ae238cc8b6fabf803e4d5c6e03d84044ac84e501a1ecbf9dfcdb29d4313d4044b05c56fadaf5bf97f62228156a424044b2d0a812720ebf686e7a175974214044b1a737df36d43f83d9fbbd02ddde4044ae229da665fe3fb7e690e141d76e4044accbd1df1f243fbb3658f9e3a8a94044ace7a394e77b3fbfe8b9d2ca11dc4044b1180049486b3fc4f28ed567c85e4044b4081573ebc73fc760dc9fe4c87d4044b27bfc947f6f3fcc0b49d5611af84044b3a82e02adec3fcecba5d2af5c464044b6d44440ddd23fd55b7d9172a6074044b467f8e6f5dd3fd47b7a49c820154044b27496b143153fd6ee35a3e203264044af9d829aad1e3fd7ddbc4367b3c54044ad3ece0462ef3fd64d151f548ca84044a9fed6ddfb513fd78a14057082494044a8e0e3d8e08a3fd778cfa0a2de784044a681a76816f43fd8acfabe9164864044a3a9949092ad3fd7e7a45853420b40449fd407e7de7f3fd867674033aa5a40449e4353ee24f33fd755aefb22172340449e8cec7bd8843fd71862ea52662140449cddd3dd59b03fd5c796d294e2d140449d93745330763fd54206a252f30e40449c8b69da530c3fd4a24374a77a6040449cd4b0dc565800000008bff1a2210bf1d95540453dcc5e5f5344bff211e03e18bf6a4045392e2cb4d012bff113903d35a6bc4045379e7c712e87bff0d88607b03c624045380db4ab6541bff11c2704e2cefe40453bb23520371cbff1696c07ee947c40453cdfd5011294bff15cbd5159b9db40453ddede0f72eebff1a2210bf1d95540453dcc5e5f534400000005bff2ecd620888bab4045364247a106ffbff2f9b27f54db0b404533700ab9055fbff28a523a1abf304045346fd628e372bff251d0d1693eb34045388f2d2ce773bff2ecd620888bab4045364247a106ff
+49;Zamora;41;000000000300000001000000ffc0186fef028a518640449b36e900093bc01889ba1017e15a4044985e990c19d9c018e695c21606f540449d264b65a670c019129aaf20f2f34044a0b7b755b0fcc0192fdde9d59c2a4044a0d2fbffaf11c019454e8cde7dd84044a2aca8fe441cc0196388ac5044554044a2e12dfe7c2fc0197d360448e4f74044a4a577a06ceac019a8af9bf5a59b4044a3533b484ceec019aaee78eeff284044a431abb1fd9dc019c809b60c41014044a45551425f43c019d13635be753e4044a562c9eaab6cc019ea90b2c031334044a4e9d2dbc959c019e16599c063914044a680314cc2ebc019ce6580c0e33e4044a630867467a0c019c011ca2448574044a7217e45e751c019bd34183e17f24044a8ddb5503704c019acbf40028ab04044a9d21d2e3924c019b56c4bd89b8e4044aac9b2cf5343c019aa24242a34664044ac8a150a5bd7c01984aee4c09aa14044adb9c4a5698fc01982b89d03cb2b4044ae74a48f0d71c019936f59542f2e4044af77eb897b6ac0198f49579e07cf4044b153b45d1459c019777ed8ce0ce94044b26ce3b25b4dc0196925bc8e4c704044b069c94ba7b8c0194548c698554c4044b15fffa6e123c01944d4e6ef04524044b2d5aab94904c019554498e137ea4044b48598501872c019335388f1b4414044b6e0e6aeba01c0192defe406adcd4044b7d78f7c11fdc01938bec12c96c94044b98edb24a958c01924e04e2b538e4044bbb6db62ab8bc01922dba069056c4044bd507108ce28c0190c605f3b4ee14044be546094eb34c019102b5e8ebcd84044bfc687cec0eec0190120403c5b264044c0065ff634d0c01907efc403e19e4044c1ce6283d8bdc018f2a129dbc6904044c2bbd30802e2c018d8e5d86180794044c79266453f8dc018c1b5d41574104044c993ed278b35c018ce4b0ead531c4044cc1a8316a8edc018f175f4bd9b714044cdb3e2ac4351c019048f03b5e4764044d105fccaa795c019358bdfd8d4544044d4b629ae6062c0196b2c7c8ac00d4044d69457eedcf6c019c6ed6d2b51934044d7a8b69e735ac019d455504fb4db4044d552ec13c289c019ff8ce5b4add04044d41bb581f14bc01a316d7cc9eee64044d7c185b9f15cc01a3848605acd704044d96c1ea81cfcc01a2b8151fa1dbf4044d9bf698ce17bc01a384817ad01114044dc4892d65bedc01a31fa7d2b9c334044dcde044454bbc01a46a10a2ee09c4044df3445fa2ca4c01a2c96a482e7e34044e3a5a5c17023c01a30317f17d1f34044e5c160a8366bc01a24b74389d3bb4044e8b68b7797e7c01a1c132d8cdea94044e90f7887bfedc01a213ea740dd524044ead5e944ec5dc01a0fe2ef0948e64044ef9280e55c80c01a48e0dc9302404044f11653e9e207c01a2ef346197b0d4044f7cca90a13c4c01a553890fc4d554044fb918a96f24bc01a5a98a8a5479c4044fbdf5f119997c01a65bfead5e6154044f95ecb700905c01a7c1f36a706144044f85063f4e0d7c01acc0e468c22db4044f77749e15320c01b00a323fe595a4044f8c116ebd4d0c01b1327197470404044fdf056544a85c01b3ecf0a1c6c254044ff0afed905e3c01b3d722b6b93a24044fc19f350f008c01b495090663f254044f916ba706d95c01b5278598b95284044f8c4660fc331c01bc41a9249e6764044f8d12f0503d4c01bd4c87992236a4044fc063bb4c830c01bf16b1d2f65ca4044fc4b04cb96c2c01bf6e4efb6e5384044fe820f486132c01bd82a280b7ba3404503926eaf2ca2c01be47499154b7d40450501704b1f41c01be62fc34d585f4045070f5f6197fec01c0c1dab506a15404506b590ca56ebc01c1fc009b4a37b4045081a11233df3c01c22a91aebe99e4045096011b66967c01c022bfb1f5f5b40450ad42a8ad440c01c02949a89e22040450c6e2abe4d36c01bf57b6e7188eb40450cfd7a859364c01bf1d385b4c68240450fe0297c6161c01bcb6c2e62a5224045115b14119ea8c01bc11b5cca27cf404516a2963e2b9bc01b9a78051f4ea540451840799e37cbc01b8bd6987d8fcf40451b761c64c32cc01b6c1d810918c840451d0a213cccccc01b35c137a0debb40451bfff06e4536c01b2fc1d8e4188040451abf97ade4b3c01b25e110148ef340451ba2fc7767f4c01b365aabae554f40451e98fce24f7dc01b261ec3d444804045208961885b2ec01b094f3db3726740451e8c8a7f16d9c01af8d2c13eb55940451ebdfb655df5c01ae2727c96a0e440451b63155afd74c01ad0aee187f86640451accbc12b7b5c01a8df9bec8523f40451bd05b26053cc01a73fbe5bf0c1a40451a02f17b46b7c01a1a9ff8fba14340451a07a7df5795c019fd8081ce29774045174c95fafe8fc019e9b9f3a39da14045175329a86ff7c019d6e5b8b49a854045193c0ad73850c019c4d3b09f4d41404518c5ba700f18c019b62a1fdb89f7404519d93a81b9b2c019a3acfb4b3a664045190c1ada3ab9c019401648ca51d240451a7161254db3c0192cc80f78c3e2404516c9cbb2e8c3c01902028d5f34d540451626c0242e19c01904390d1a785a40451561b1bcb73ec018e73d00cd9688404514baee219ffdc018d97e18004949404512f42c5776e0c018a40edf7d0edc4045153806345525c01892d92b10353e404514545088c855c0188c90d5722f3f404515157e3f53b1c0187fb3c604757540451455b856a6b4c018327d022309b54045147651b62b20c017fb90f74d6db6404512b663114fe8c017d059dba4bd2040450fd4d8272693c017cae01bb410944045122a7af5361ac017a57ac89e13fe404511feb48854c5c01796f6e274ffb2404513fb1ae6bec4c017862428ba6f8f40451299e163c3dbc0178a0f3f96a176404511b8d25ba463c0177a20fa7f153d40450fa368920721c01761208b32451940450e2bed8ee434c01739d92c2bad02404510b5ffa3303ec01738a96298034a40450ff26619398dc0171b58fb217c8540451162305ad57ec0170551682786ad4045117cee033983c016f8c747047ef440450e8200cdd2a9c016b502c9dedbc340450f672ed43a10c016bfab72c62c5b404511a77cd5ad60c016ab93ebe346144045122f31013afbc01692d587a8cdb7404510c609da4962c0167b054bf7d8c840450da700e8e6bdc0168a489c6ac91140450a7ec6735b31c0165aa05530c52b404509e5d3144accc01658af603b9036404506843f38e9c6c0164f96407c4f904045086096720ba5c0163e277d7b089340450729f3bdec23c01632a41bc26d1240450900903bd577c0162c676d664eaf40450cb887bdc66cc0161ab6c875f26d40450d485993a2bec016019f576b184a40450883bd4cafbac01607ee001aa4694045075c5e834badc015f22eb06c99dd404504f78f817061c015f887de417a8540450442fb0fb3dbc015e2bac4d9dba14045014adcdb6b54c015f420ac2e2cf74044ff6dc1d1937ec015f14e1b96df554044fe2f88e8b627c015da3d10345e344044fcdbdc8e7a9cc015c0cc3ea9d64a4044fbd36f738056c015b9cf3e49c54f4045008da9e606cac015ca2cef328e84404501bf7487efd7c01589a3660fee2440450563cc90086ec015655221fa9577404502e41aa2a9cac0154d54fa4fb4404045029c65a4a81fc0153681afe557d64044fedc682f5821c0151f6290f767334044fd4951c0f07fc01504ca9aa1092e4044fda692930c85c01524283973d8da4044fcafc6ccd88cc01557429f48157f4044f7ff1db7a0ecc01548936aab6f854044f80062f191d4c0152cc83f52030b4044f5c083bc154dc0153e8738d519e04044f21fa1c2184fc01539d430d5711d4044edcda4ffe565c015525bf7efdd964044ea784703ca90c015260a1e894f6c4044e9f19914b976c0151b75756f65354044e9548a057cedc0151d4c41ef5b0f4044e84b3f3af5c2c0154a655c7294144044e4e4167982e9c0157b0fcd49ecab4044e39077b8598ac01590c6e136a2654044e1586dd9911bc015803349c839da4044dc220187948ac015725f20aa78174044dd4ade4eef16c0156ebb4f6e49ac4044d98f9a2902fbc0155f1b22f11bb74044d9a7b405f8e0c0154f35d103796e4044d71b7f2ed6a5c015472e0cd8ab7e4044d181ac81c27dc01550c9889fa1464044ced6704f1d75c01515080c68ef024044ccf20afb41e7c0151262a1823daa4044cb86a4ce9ac7c0152c1b6a0b2dfe4044c9850508b99fc01517296723f2f14044c79378131d50c0151731d5b270f94044c66c51f61f8ac014fdbbade2f4234044c5fc8dcb9652c014ea5dbbea48d64044c3a3a3e953c1c014ef735d19e17e4044c244d148e601c014f779aef62ac84044c2886b73ec61c0150c2afa074b2d4044c078bd854af2c0152f594cde912c4044c0263679d370c015547a9058c1fd4044bce219ca1a5ac01561028ccd2d704044bd58425add35c0155997648b19fa4044bb0b9704605ac0154c960c71527e4044ba48aec12f46c0155b612a22a4814044b67a030c8b0fc0153aeadcfa8eca4044b4ffaf3e2cc8c01556a7cda8aea54044af7140d0e6c9c01549d9dcaabb564044a9c53df366d2c01536cb69dc78ce4044a871ff69e0a2c0152abe030e05044044a274d12d849ec0153575e158a0004044a12fd1df8638c0152cb2fe44940440449cf5da261583c0153b00333cd48340449cc60afe582dc0155c76b1af8764404498d87129d2a6c0155231b8563f9f404496bc3814996ac01527ac6f5f336d4044974b818cf739c01531c9fe3b59c9404494d56d9ab828c0152991a0039ea4404492cb8cb969f7c0153101b98af3054044901cbbc704d1c01550d83e6ffd3e40448eff8586bd1ec0156d8e166148f94044920675e5e044c0158c40010823f740449163ac465e4dc0159b307966eb94404492eb1f2c59eac0159618a7858453404494dea5788635c015a16073aa940b404497c184e331c7c015ac2335edab48404498054464ab48c015e852ae22bd9b404496d3495decf1c015e11b249e9ae140449437a25ad5b1c015eff6ea79fe414044929fd943fe88c015f0e69c120019404496e4af0e1768c01606903b90be994044971354d58924c01612835b4fee11404498f15d5aa411c01642a0edff551340449bc7e805264bc0165a0a5accd531404499e98a9fce09c0168367a0c57f4840449b73560bd8dac01689ad859af04240449dadf2aeab1bc016a0b97204b2cb40449f6e1abac15dc016b73c17772ed040449dadec09dc81c017014796cb10be40449ce8edbfb68fc01711b91b7b41d140449b9c1961e204c0173c1c6d6b5fc240449cbb70a42cf1c017574444cad7a240449c3435bca563c0179737c9dfa15540449e8a3210a6f5c017af7138155efc40449bec7286a79cc017a70c8515f659404496d3be9f73b5c017b33ddecc986440449657a34821b6c017bf9cd4d9d8f34044944707be06d9c017bc47ca9155a040449362f6e12e95c017d01f73407214404491eecf9680b6c017e840aae263b0404496466abfdecac01802a0fd3b29a240449399f5d52ec6c01818765ae9f54140449424acf983f7c0181c2922a7e47a404496ed830bf4bcc018090bf5e01f18404499a9ec063ccac0182fd750b44d7b40449ac0e0743850c0183f7f8376753040449c4b68cde392c0184bd1c48be93640449b0c7fa88a56c0186fef028a518640449b36e900093b
+48;Bizkaia;21;0000000006000000020000000003000000020000007ac00b99e6b9b2e9a240459e3c0e94ff68c00b4cdca3a6db1940459ef2397676dec00b4f0454674f3540459ff8c99bd113c00b2ae542a936b540459fb62d58d3adc00b109506731cea4045a29b57699e55c00ab56b95fb29824045a3977fcc469fc00abeba14e43dad4045a5aaf7e189afc00aa8c417b643e44045a6a3f09779a7c00a96e9c6d000004045a56f3d4d7100c00a5c0ba0ae470c4045a67f2aa2c0e1c00a5437cbfccbcc4045a52ab0f8dbcac00a1dafbb99f4894045a5e409343135c009acf3a00681604045a44d39fa4cb8c0098bb121c2eac44045a633a327844bc009423465ebcac84045a691a403f82ac0093273b24bb98a4045a8de4d3d4a8fc00939eebfc4593f4045ad396fe78854c008ee61d065c4bd4045acb240c2c66ec008dff4bc55056b4045aeae153c274ec008ac30cab454ed4045b06167d56284c008d61a84aa63054045aead1d46af34c008a9d6d67fc2c84045ae898e5610fbc0089ede1425847d4045ad5d84d80debc00893fe9c52b17e4045ae6d9cd777ddc0085cbfaccb1c154045adf37ef2fa33c0089531376321414045ae113fd6b83cc0085e8d3b3c6c174045abf1ca1a9e70c0084148618773414045ac5f325fce9dc00853e3381e298c4045ab9fc7acb897c008405257d56dca4045ab2ba5d3c23dc00859ad9da154e94045ab6930e8779bc0082a6d102c50a04045a9ab6b0e7d02c00814fbd0c656914045ab2abf1d8417c00838f716aaefe14045abc4f8ebc239c0081f37b71544504045ab9f92de4fbec00819c9b8a3d38d4045ac82c7bb4008c008511c347a414b4045afc88e41d541c007ee48e38d725e4045b227b0bc2899c007c386bf774ec14045b4e9a48b8780c0078f8ca27673354045b4d535330a10c007a4cd8e79e7084045b605e9ca9aabc00793450858fb2a4045b7cfb7c37b40c00674b0f0df61e14045b71a479ada73c006496bc8b724ab4045b95b592ebccfc00636c3f63982ae4045b8f3ccc30921c006046ce65d41a54045ba7d821029dec005e8def70aa7be4045b6fffa38623fc005ad6dcd7422ce4045b612d1174e15c005c9e0f6ea1b814045b58e48e7943ec005a3d01cafdb734045b572cc1654bdc00590bf7e3847ce4045b410d087c257c0052ba4098a17714045b53d8b1f7226c004f2f48be9bedd4045b228990c921bc004cfab3ff903264045b27e99b8f931c004aab1d8771c644045b1218153966fc0048063bc81bfcd4045b20ccb217365c004671f96a6d39d4045afe0ea8edd31c00413ee923337aa4045b04d856eea44c00405565edc595d4045ae9ee7f9c64dc003e663b1b3ca504045ae8274dc4258c003ad8b84a5631e4045aaf3d7eb305dc00375a45aac8dac4045aabaaf75c64ec0034d032b94bf7c4045a91f53c0a4ffc0038315223748a94045a5bf9bbd4685c003583078b288174045a240c93bfc39c0038315d47504314045a03c055f0f85c0037e1dfa1994b040459f31c65efd1bc003b4be3b8f782e40459c9a8bb86ba8c003f3f399e28c1f40459ce39e4a835cc003fbca6fc7b07b40459c2671a852b4c003feefd00faaf740459ad988b045e1c003e522f77bcd00404599c8d439fe7fc003f09962bd0e9440459726f1b38372c003df76856d67b8404595e022cab03dc00413e6752e4425404594aa2cf19d09c00401647d136244404593714c1fb5a0c003f8404b636f8040458fcbef3093b6c00403b7918d6ccc40458c28d27c642ac004bd61c211ddce40458a64d9fac3e8c005107cda57602040458b24291f5e15c0054b1beb20a87540458981afe557d6c0054a00233b6e6b4045886ad8214fedc00511cf7c7f826d404585bc9ae5f4e7c00511a9b418f6c74045828c6843355fc00555c664a0350c40458405e9389345c0057f015cdd8cca404582c4ab82c793c005a1c6283a5330404583fb6699a33bc005d67adf10be8c40458310d90b747ec005ec1569fd27674045845ff9f6e2b2c00628739bd077f54045837017f39a4ac0063fda3732601440458459f1968e55c00693562ab7973a4045847c6fdb37d3c006e91053e8bdf8404586a66a4463d5c007273f7f0224da404585f11dd19988c007cdca12b335f840458cbb70bbcc41c0077c8bb20b91954045916f69c76653c007a22186379213404594713ebc5358c0079236f70d1238404595df04f77a65c007bf6e16ab5f8d4045974b6781076cc007d7215bc54da8404599d669184775c0080d3cdf0c1d2340459916d73ee30dc0083753809f667c40459bcccb59490cc008515787c0172140459af7483a453ac008220d3ef19c29404599eecb8b6a68c00836813131c0064045949e54742090c00887618a2b0910404593e730324443c00898de13cf9e41404592bb237fea7ac008bfe50e6aaf7f40459351c10e8ecbc008e4b88dd924a84045925701ef6e64c00943877efea781404596c9bb4c9425c0097d481ccf43a0404595a811a3e3c2c009aa40469faa33404596f6eb52e397c009caf1251bc355404595c6e6c89041c00a06b43f736e9e404599708d5331a3c00a38dde7402f5f404598e5c3d42abac00a7a8d507142ca404596076e132e06c00ababe0bb6390440459560c823bd16c00acd3af233278f404593ae16263ab0c00b5742e433cf444045911080b22843c00b7784c14df12f404595e0f2265634c00b76ca94fded4540459a67f515daf8c00b99e6b9b2e9a240459e3c0e94ff680000000ac00a6faffa5922064045a10e8c16c68ec00a575e54e3cbdc40459ed4c34ea761c00a5fe075badbf940459a5ed78243a3c00a474e96bbeeaf4045993cf3ed335bc00a27b62e027a62404599f5c1ee4c7ac00a2a89037453ba40459d777473cde1c00a04212024fd5540459f80d6cc7760c009fe5038db1b784045a13c34e26873c00a1f0f0965e2e74045a23350ba57abc00a6faffa5922064045a10e8c16c68e00000000030000000100000013c008b640589bdeaa40458035a064a8bbc008b943cdac93134045813940f4110ac008865ac0e32c02404582f62f110f9dc00865ddef678a064045860b77a2a3dac0083aa3fb588c9b404585f674cd17b3c0083bb01756d61d404584bab977b8fdc00825fdafc3a78b404584d21b28adfdc00843639b637bd94045829a481bb3ccc007e35a5def746d4045818c688e5ed3c007eef14cf89af6404580060b294b4cc007e2c2a59b496140457efe39fde3d8c007a54600fc657d40457fda63f77edbc007c4aa3a1492a340457eb169deafbdc008011c0044511c40457eac3a347313c00809391e0c631940457dc8b8e7a3cfc0084c68fd199bb340457db641bd5c0ec0087ba1b8b320904045806934e6ab5fc0089d067d5040684045811cdcb60a24c008b640589bdeaa40458035a064a8bb
+47;Valladolid;41;000000000600000003000000000300000001000000edc012632c75b267504044a908fe678abac0126bac56e08c734044a814f5e620b2c012686cf520d3e04044a6bd61d13c85c0124e5ce259260c4044a476788adecac0124ba7b600c73f4044a339c7f7d0ddc012650ac0c5a4dd4044a1d03e330decc01275ef5062f77a40449ee50d266a5fc0129a7bce1b703840449c5786cb46f7c0129a3d767a7d164044999d02ba6f7dc0128b9fc3990b4340449865cea445f9c01282d185d552bf404495dc9fbbfb21c0129324a1b12665404495845453fb66c012b8e50d1bad98404497c636ddaf15c012cf3251834cca404496564c2104a2c012e36ea5243c4b4044931cdac3d2cbc0131d721c0d62fc4044928f4c2569eac013392f3da7a2be4044914d0bdd9503c01345591b46a4cd40448eb4b9d2ec6ec013428676e3477440448d3dd307acfcc0134fd429514be740448cb117627ad2c0136c16c184e77e40448ce4bfbd6fb8c0137467ce3cdbcb40448c08b192bd3ac013cda0f094c1de40449202bd7b066dc013da146e65d308404491ef483dc296c013ded5470896ee4044937eaee98460c013f02bf65b9a0e4044937c8bca56b0c013f57d366190eb404494953ffcb40ac0140e3081f55a8240449506227d7236c014164c89d795e5404493a7ad29549fc0143d4c5b08a074404491be5b3e83e3c014668855821b2c404492d42e8296c0c0147fed726ff039404490e6da8a4fa5c014b7f85758f12240449569df6cb78fc014d4e91887e1364044955a4930ba4cc014df75064d88304044946d4a29de90c014eb1ce08b708c4044986343a9198cc0150309fb67a6134044999237968071c0152763f4712b9240449909ef240713c01527ac6f5f336d4044974b818cf739c015547d02e00437404496d1753d99bfc0154fad62d7c42b4044973e874d196cc0155c76b1af8764404498d87129d2a6c0153b00333cd48340449cc60afe582dc0152cb2fe44940440449cf5da261583c0153575e158a0004044a12fd1df8638c0152abe030e05044044a274d12d849ec01536cb69dc78ce4044a871ff69e0a2c01549d9dcaabb564044a9c53df366d2c01556a7cda8aea54044af7140d0e6c9c0153aeadcfa8eca4044b4ffaf3e2cc8c0155b612a22a4814044b67a030c8b0fc0154c960c71527e4044ba48aec12f46c0155997648b19fa4044bb0b9704605ac01561028ccd2d704044bd58425add35c015547a9058c1fd4044bce219ca1a5ac0152f594cde912c4044c0263679d370c0150c2afa074b2d4044c078bd854af2c014f779aef62ac84044c2886b73ec61c014ef735d19e17e4044c244d148e601c014ea5dbbea48d64044c3a3a3e953c1c014fdbbade2f4234044c5fc8dcb9652c0151731d5b270f94044c66c51f61f8ac01517296723f2f14044c79378131d50c0152c1b6a0b2dfe4044c9850508b99fc0151262a1823daa4044cb86a4ce9ac7c01515080c68ef024044ccf20afb41e7c01550c9889fa1464044ced6704f1d75c015472e0cd8ab7e4044d181ac81c27dc0154f35d103796e4044d71b7f2ed6a5c0155f1b22f11bb74044d9a7b405f8e0c0156ebb4f6e49ac4044d98f9a2902fbc01570ce2827cd8b4044dd12a55c7906c015803349c839da4044dc220187948ac01590119a39db224044e05450af6ff0c01590c6e136a2654044e1586dd9911bc0157b0fcd49ecab4044e39077b8598ac0154a655c7294144044e4e4167982e9c0151d4c41ef5b0f4044e84b3f3af5c2c0151b75756f65354044e9548a057cedc015260a1e894f6c4044e9f19914b976c015525bf7efdd964044ea784703ca90c01539d430d5711d4044edcda4ffe565c0153e8738d519e04044f21fa1c2184fc0152cc83f52030b4044f5c083bc154dc01548936aab6f854044f80062f191d4c01557429f48157f4044f7ff1db7a0ecc01524283973d8da4044fcafc6ccd88cc01504819f96a2884044fd8f703be36dc0151f6290f767334044fd4951c0f07fc0153681afe557d64044fedc682f5821c0154d54fa4fb4404045029c65a4a81fc015655221fa9577404502e41aa2a9cac015816db155c55140450513158008bec0157e178bb7d9a1404508333e2384c8c0158f7ad9baf1d940450b7ee142b6c5c015816d7466731640450cbce7065eeac015859c8c5f96b640450e0e5f3e53fac0157c70c45aafc7404510a5f0d344eac01584b46750463f404514e829f34c1bc0158e352697325040451615ec077207c0158559ec51efaf4045195454356161c0158dd5b77975da40451a46dc0bc8d1c0158d6abb9bde2940451c584039673bc01571e7731ee42540451cd1c70e0233c0153ad74d957051404519818e4cabcdc015351e9211650440451c6f8b86b9f7c01525cfb8b1da2540451d6e4942d8ddc0151004fe27c9da40451afeb949f451c014f7476c83bf7240451b754890815cc014e76ae7299a5940451d054c98e878c0150418c15bc43b40451eb0f5c137c4c014f22cdff6b9f5404522fd1c5e3823c014ebd38d056194404523487bfa7755c014e9ef4c7e88c74045219875393477c014e19a04924fbd40452393017e4920c014caa7b7fb959f40452159750f2947c014bb1aec956a0a404521d1a154c64ec01493c7a726a89440452409d7b61b16c01472b0b28748ac404527ea708c2f24c014600104b7cab240452796fa782bb6c0144cf412835cb9404523b29944e005c0143faea4b26b3d40452391d56634a4c01445d416ff31354045216eb81540ebc014381fed862ad2404520f688478cb2c0142a9a37f180594045223f54adf104c01427453d909e0d40452608445ca64ac014033654bf8ebb4045251c76ee9edac01408de497f837740452177709c41b7c0141342680d0d384045207e6fa0e684c0140961756e74b140451d924ef56424c014197f2a353b5440451bd05a6b307bc0140cb0e4751b474045184a1075d52bc01420a8f4bc9128404516397979cfb6c0141b9d16f404c2404513b3658e8b5bc0140f6357be2cf740451411f0f064fac013f434a10b41c34045127b20eec932c013dd9788a5df00404513eff05fc65cc013d98adc00603c404513263d907319c013b5c20e4f45854045133a4139b127c013b6ff0f83f05440450f24e7f47917c013a60613b7ba3940450baf84dd9fd9c013abda38bd832640450b9f1fad10e9c0139de09ad753b140450a08d394a34cc013b6036ab26a3a404509685d3f28e9c013ca5e53c85418404506f3aec3a257c013be786882b1874045024b13a27ccbc013dcb6601b401b404500e73b4faeb7c013e6e7f3aaee3d4044ff2c8f7107e8c013e7891fac76494044fc9f6a0636afc013f9ee5efefa2d4044fb357307114ac01404f756f540704044f80ea48efc43c013ef4ab66534ec4044f47bba3e3274c013cc606d5314a54044f787b0f51121c013bad37100c9294044f69c89721defc013b634f22db7fd4044f51fa8ee3189c013a5ae1fd247244044f5344fe8cb86c0138f21cfcd4c134044f7657ecc8623c01379f16b9b37314044f742dd91266ac013788544f041694044f573f7e9b109c0135a62e5f5b51b4044f303212dde46c0132830a78a148e4044e8b5066301bfc013089f929326494044e9b364a477f8c012e7dfe7edcbb14044ed60d0f072f0c012e9b98e4e03664044ef35c420f080c012adc015a6a7c24044f343c9ae5f4fc0128c99aa46cc294044f1ada03d32f8c012870ff61748f24044ee4d0fd10c00c01243ab515a99324044e80270ed16dec01231396b280e8a4044e8d49a3eb8abc0123255af78c2cf4044ea5eb6888188c0120c6a1afbd9d64044e96202aba354c01208cbd9aa224b4044ea892fc9c734c011e4a84640e8394044ebe858e277e3c011e9cb12fd21984044ea0f351e9234c011d83713c60e204044e90191ee8812c011f3099dc9bb314044e8f8eb32575ac011f837c2a8cb554044e3aaef86a4e4c012013642f6e4684044e2bd712d476ac011d123c4917b244044e12c5da145e1c011bc65108c25794044e18208451556c0118ea3e02ab3c44044e4d5c35e9799c01145438cfb2e3d4044e1b887d565bdc0113a273262c2874044e35182986500c011257519a155954044e32f5ef74b15c0110a7ad46525274044e712ad00d492c010fd613bb7c4b14044e6c66280e4d3c010f1b0937d98294044e83020057b62c010db14f5db63eb4044e652ef7ba365c010b71e6d28776e4044e6d9afbccf32c0109d8e33a3b5404044e5ea5dfdf347c0107e26ee78bb754044e755e182803dc01066adc7cee1244044e329ae3e0538c0105b3b48b401834044e3cac406de1fc01029db909b29784044e2596c178050c01032c63d88eef44044e25478659ff6c010392045114e7f4044decec33a2f85c01046c0e8347eaf4044dede82b10e9ac0104e314c284ca64044dcf04f03af74c0103636529136384044dc1aa6bb5161c0101aa9bd6460384044d89ff3bf99a3c0101956f43ebce64044d4b159650752c01024213b41a81f4044cf7093a88b47c0101d674c03528b4044cea4cced47dcc0100611afe6f4274044cf47402a0074c01008f1a41413554044ce1591aac066c00ff1600a1aa4e14044cde887641e1ec00fe01162eda4ce4044cc7a93c0a2d9c00fd87fe534efef4044c98a1b43caa8c00ff36e9d8ee90a4044c72b6a19acd8c00ffe33cf542a694044c222c4e0082dc0101c0e88eb06db4044c2472bc57812c0103b6d76ae90ab4044bfa80d450cfbc01089c799313ee84044bd27dd701954c01091e7ae60b7364044bc26de1d239fc010a21e1513e3624044bdb572168ca5c010ef19322289654044ba559597c61fc010fe31575d566a4044bb25c4149767c0110b5de2aba8b24044b9acfa1c6ed5c011149d63a004e54044bb0b042ed296c01141053c887a154044ba41193c896bc0114fb9ce426db94044b8eec286dee8c01173170db8a54e4044b99753163021c01175ac34eb88ea4044b7ceed58b376c011a478662965e64044b887e73b493ec011df652f624bd84044b4dfaeba1acdc0120f51185ca9604044b46fb13ff5dcc0120fa50e0e57ff4044b2718a88fce1c011ef9e100fb1684044aef354a537a2c011fbce2795c6264044ae95246155a8c011fc9ba87029bd4044acc01c76697ac0120494953cac734044ac70edf6349dc011f9c38f2dd2434044a9c7cec75f0bc011e1d8071b2fe54044a8c34f79d49cc011e2c726338a354044a551e680ecbfc0121d50c0da1cb94044a919c77a3026c0123cf7fe7634874044a6ad5c7587fec012632c75b267504044a908fe678aba0000000003000000010000000ac01559344e55116f40451d8ba99f7ebfc01561a1684da4d7404522464006bc6ec0155063ab53b3e54045231737f0ee51c0154801bbdba7a0404522333d2c8eddc01534fff7a51b3640452276654619afc015369a97707488404520416ebbb0adc015445d78f0c66b40451ff16f7b5a61c015440955693e0840451edd242602a7c01554d306e769a040451e8e5e815976c01559344e55116f40451d8ba99f7ebf00000000030000000100000011c015f420ac2e2cf74044ff6dc1d1937ec015e2bac4d9dba14045014adcdb6b54c015f887de417a8540450442fb0fb3dbc015f22eb06c99dd404504f78f817061c01607ee001aa4694045075c5e834badc016019f576b184a40450883bd4cafbac016156462f86a2c40450c6f124f9674c015fe6cfe97306f40450ab5c32e4618c015e88aff9a4be94045073a2030e6c2c015ec772e09d394404506b5ddce630cc015c1343852122d4045040841284f91c015afb4bdfc1351404503ed2ba778abc015ca2cef328e84404501bf7487efd7c015b9cf3e49c54f4045008da9e606cac015c0cc3ea9d64a4044fbd36f738056c015f07068032fc74044fe063b361498c015f420ac2e2cf74044ff6dc1d1937e
+46;València/Valencia;52;000000000600000002000000000300000001000000eabfdca31c961ef6f7404368ebafb57e97bfde5e16661dec24404366e4bd23b76bbfe1213aba5d80dc404367b9f86dd433bfe30c03f4ac39db404365c5be7b2566bfe2b243dbbbc1d240436259bf4818b8bfe219bdaa2b486a404360b1d1d6994cbfe0f2b38a41c90a40436230286b1cf4bfe0ab1413c46938404360db4aa525fbbfe03d324c474528404360ac71e9e370bfe03a4a156f4a5d40435f19cbc9fea3bfe3c71373e9f66d404357e43b558df4bfe41e4eb2f4113d404357e0fd5b5ff8bfe48f1a881f266a40435a2145507d58bfe49bdcca9bc51840435d33a33466d4bfe5aea8b9bf764540435d53648108ffbfe60a86adc8698040435ee1e191aae3bfe6a14ba327c90340435dedcb2e2afbbfe6f33e7f52d7a540436012e06ac1f4bfe7771addc0a9c340436037b9885502bfe7848e8afb4ec9404361357fa707cbbfeab539fdca122a40435dc04cd91903bfeb92fcfa670ed8404362ac8787f42bbfecf5abc7de3f564043622fa9fc3d53bfed3923bf9a2bb3404362827198e355bfed46ea8544780140436405529ca763bfedb9dc5ce2af0c40436454a9db303dbfedd976ef1fb2f9404367d794dc9b78bfed989aee24d8a040436963ed6548afbfedf13b10cd2cc640436d8f55dc3325bfed95cf66156ee540437224f227d029bfee9bd9373e5ab0404375c696563200bfeeb37d4a4ffcbb404378e810751830bfeffa89817c1f1540437987b8528ebbbff08db31139e4284043779bfec61093bff258b1df3e4716404376f5075c1d6bbff292ffd809634e40437a3768528af9bff39fe603187d1440438328791482b3bff438f21b0ffbcc404385c5a3ea10bcbff440502c09c096404389a8ec3047fabff417d1de2e9efa40438ac14c9548c1bff4176e5f6a59f840438d96f9cc5f40bff3d920f997279c40438e8edf2b7422bff3a1c79e288e594043936b1fb3a488bff3274a5b767be64043969f095cc270bff2e4a98cce268c40439b1cfb070ba7bff2cc0c56d071474043a3bf6a34626fbff2a226284c941c4043a7b095d07285bff3256d4516a44b4043a82fb7da07afbff3526d4e733bc84043a9cd98666029bff391d35d2c226b4043a870b9683870bff3e88887a377ea4043a9267ddac3a8bff3f47a17f4128c4043aa146b5823eabff40327e8afdfe04043a94f7d5a8d84bff466701dfdca7a4043aabafa36005cbff4c314ee4610a84043aa45c1e0e080bff4fe7967caea754043abe339ebdf0cbff555d43ecadac94043ab9422e00770bff56168131ffe8a4043aaba18b9a415bff5da8d862127ff4043ad7433d75092bff625f0ce6ff6444043ad44d309b8f8bff625b78a1a75a24043aeed102a2addbff685f9d5aaa81b4043aee34ef5c2a2bff6555350816f234043aff16c53e631bff688aa0e0e94204043afa33720c25cbff69d237a7ae7cb4043b0b6d8ef9ad8bff6ccca58a939754043b0b61f6c0105bff6caf2716e79a84043ae949bdf554cbff6e533f68dcc984043aeb25083bfd8bff6ea22138c60074043b04f98b9cabdbff719cc44ab6f744043ae589a0ca87dbff7443324ce1e3b4043ae3837db49cfbff72c2e4675966c4043b073062fcd81bff77aecdd9f94164043b0ffa4d3000fbff73d5d2fd34ebf4043b1194e4fef2cbff752ebeaf52be74043b1c0eeb6f132bff73a73dc70aec04043b2edd78db4cebff760e2cbe79f8c4043b3449708c5a2bff7938cd7bf44244043b21a6b978ee4bff79a83451964ab4043b2f6cfde2ccfbff775a20aa3bf5a4043b38770bbee9dbff79766066698de4043b45c51e7a0b0bff7cc7c1e9219fc4043b344f4e0abecbff7bb82f9c4fd764043b611cf4f21ebbff813adc792bffb4043b56187bc43e0bff7f3442ce6cf134043b6eb4a1b2c2cbff85634f9f695624043b74361addebabff83f47e4a3b6b24043b827ecabede3bff864500bf5c65a4043b8b70ca6d770bff84b0e0f3755824043b96471d175f7bff8768ece8f6fa04043ba3933323181bff836d9f8483f794043baa884b937c5bff8353e6175ccf24043bc51cb372915bff80d338d0f0b7b4043bd5b3bee7649bff8336f914c31f74043bdda924e31f9bff814b4ec8650924043be6d1a2c1d8dbff83303139f88e14043bf85bcd86303bff80efdde2b88b44043bee96635940cbff7fc8839a875de4043c00ebb646f97bff81d8fa12e74994043c101934eb805bff804afa53878064043c1fc08551f53bff81cad8b01eb014043c2a46d9d924dbff80aa8cdbf10214043c5d6be34a5f2bff8542397a38f004043c66f3c8e50bcbff80bb27efef4cf4043c6af8dca8c09bff811de66fe10e84043c82dee3a5ac5bff7638477c0ce344043c9d80b5bf618bff6afd9331533cd4043d3d4ef7f9902bff5e584928792c34043d8454c9f59bcbff4ecf697d4fbf94043d5dd558a64e2bff479292ea27fc84043d6c50daa7c5abff43121f9ad89194043d975c9dff73cbff468138e96f5ea4043de8bc61e7f3fbff370a79809f77c4043e785ea631354bff33361088387344043edea132eb0eebff3223e14a770b74043f4fba49564f1bff357ed819a96bc4043f6cdf1d8fe67bff3437e05ae2e964043f9841b045faebff2474024e6c7d44043fc654d259179bff1f2ae6cd42d834043fafd2a71b264bff1f9c939f03bbd4043fbb146a56714bff1ae241f21b6e84043fccbf9592e00bff1796ea00a90c24043fbe0dca87bcfbff12a0202cac6ca4043fd61080f9064bff0693dad34ac044043fcbf8f190481bfefa16260725b934043fda612d750bdbfedd20248511ef94043fa60bad7fa1fbfed6463accda8eb4043fb38ef9353e3bfece29438a074444043f746db0c3bdfbfed3e0682c869344043f5813e4161d3bfed1b90849d08394043f3058fb2a139bfeccec94c6d498f4043f227a227d4febfed358fae55b5b84043efc02fe84774bfec6f32b7da99b74043ed11f6efd862bfeba23e5b8561d54043ec77ec21f413bfea85046025c9584043ef81d1b5d985bfe96687929fc41a4043f0d2d571d959bfe8c105a7c5e86a4043ef557c313184bfe75fe499c812a94043e84c47dfc62dbfe6cd3543f363aa4043e88e621cc476bfe61d95241406734043ed1d856a1551bfe4ff30f92d64234043eb00c152e87dbfe4a171a2b82ee44043e552b25aecc7bfe4e0b33e5b5a6f4043e0865ffecbd6bfe45a63a91cc45c4043dfbda1abe1c6bfe2d2063f00be394043deef68b48595bfe2772e94e043c54043e2f84be37ab1bfe18c882541c7bb4043e5da9c3cd0dbbfe0fd1e156132984043e5eab48bafc4bfdfe35921958d2c4043dfaff2f30d65bfdd31fdecb2f9c74043db7b379723a7bfdc83684e61d19d4043dbddd030c0a4bfdc19f212094a8a4043de51761cf05abfda36e3b944d20e4043df629b2f09c8bfd9599ce0313ece4043e11a44af876dbfd8ad06db88c9b54043e2f01dc1a950bfd8eba543e0994c4043e50480244a04bfd82fd4f5cc5b9f4043e66260dfe11fbfd50230e2201b284043e696f773139ebfd3bf954d14ecdd4043e603cd9fb08abfd1b2a2564e0ccb4043e2a1209b19e6bfd0e8451bc68da14043df6c6e52c3f3bfc820d3c426a4c94043dc687814f5c2bfca9d9786801d834043d4e201d4e3bfbfca516230aa4a744043d23e38279752bfcb9f1baedd22b04043d3dbfd3d1342bfcb2e27838538c24043d247d868aeb8bfccb242f344b0b84043d1ebb465f017bfcb0d5c15f7db664043d1a599c8fa97bfcb9854be25f38d4043d0894b19fc22bfcd86e49a37bdf64043d1c57df4b3adbfd056823e6f62a04043cf630ae2ee33bfd1be031bfa6dab4043c8b1a24ef4dbbfd4aa92e50e50ec4043c159ae9f31acbfd48fbda0928fc34043bbca170b9b7cbfd400b6eacd4d5d4043bb2a8e0372e0bfd3b2cd4ca473674043bb3e977dbe25bfd2498b565747064043ba3e2bcc5901bfd2a71d232f0cbc4043b8d7a16d89adbfd252e31d2c71df4043ba3dd97d3cf6bfd3cc449d7a0a184043ba8f03b80a37bfd35323017b99ee4043b8efcbc87380bfd2e46d49d1d2934043b9bf5d4fb3bfbfd3627346627ebf4043b77f911a4424bfd3854cf87899914043b8e45278507dbfd4033a1a0acbbf4043b8904a22ec72bfd3b912e8875fd34043b9a03ba9fa3abfd4202d470b01664043b91b75e14772bfd4b64e268fc7f04043baaae123b5acbfd4ce4b9d375de54043b91fb46c3effbfd43d6a4087fcdb4043b8b1e19bde3abfd5236c16e5b0db4043b7b4485e350cbfd3c92b704ed0254043b7018b20ec1abfd4500a5303f7cb4043b5d595575972bfd546b8056a78194043b74468e59ca8bfd4b4379b88ee394043b63e097afdf8bfd59045eabd45124043b66ceb0db325bfd51c727715e1134043b613dcdf472dbfd53f976f9dc7a74043b476283f2823bfd3f8436cab12d84043ace0c3c09accbfd1713b54727ba64043a3ac8b1456e1bfd1d34240dc020e4043a3a5295c672cbfcbaf1611a90e9b404397da05199a5bbfce812b72b949d24043969e874e2c4dbfcea7b74957e2c0404393c14519ba92bfcddf364efa16bb4043935ea2a2acbebfcea75a5b84fac0404392ce4e6a79cfbfca0aff91b4e28f40438872aae4bcfbbfc401005b19ac2440437fcd48bddef4bfc277f5df2e92ff40437f6535795e91bfc4a016d8abf58940437f05de6cc389bfc2c9a7b634516340437f4964c76eaebfc2fd9875f1e37640437e1920446582bfbb6912cf4bbe5640437896f4029bbcbfa3352dce084ff440437186f8f1dd98bf99641b07984fc340436fafc5e710acbf9bc98adf27d46c40436e56dbe6bd87bfa594c82c31bfc940436da03ad9abeabfb213e8076e66ee4043715f4b49d561bfb6fc3a8138d8414043708ace5eb70abfb792c76d67618e40436f8e35354997bfba22e1522623bc40437000efdafffdbfc2f42dd5b7684840436de112c19b0dbfc3da176ddaceee40436e24172bc0a3bfc49624917c3629404371960ad72722bfc82707bcf3f7f040436fcc2237b853bfc920e9da79b3a040436e02120f325fbfcd82575b8f258040436d3f2512f8c5bfd3e44a779d7069404370d55d8e9549bfd4b6f8548ffa3440436e86e12128d6bfd649ebeb64d73440436e47807f0dcabfd86972f8f9841940436addf9653132bfd9d124744260e740436b7bbe3c6638bfd9dc3c849e3d7640436aa3d61bde8dbfdca31c961ef6f7404368ebafb57e970000000003000000010000001dbff35079b2e330814044003c1d3a810ebff403fec7682b5a4043ff63d5b6f006bff55f55b0fb4eda4044022255dc3bbcbff6079dfa6298624044021ca57b01ddbff62153c0d888ff404404fcd276e36abff6b97d6132529740440bf847a2b47ebff685849717cdec40440cfacb9a950fbff715c0f2819ad340440f1c15d3598dbff750d5ef01cd57404411499016e3f3bff72e834a9a247c4044129a90355305bff64c0a3ebfa5c040441132cc0b97f5bff5d18e5836bc9a404411bdfa527d37bff5cbfee0e88507404410a826fd3c4ebff5ac6daa301d5d404410928fb5d144bff510bfa705a41540441327e9eb8dfbbff52af70e477411404417a95bd96f9fbff50a35fd233d03404419c67ebf78a7bff4c58abca9608440441b186f085cacbff48ca9baf9e68c404415f39c51514ebff409e72fad1f6740441257a0029cf2bff3e8a32487c9b9404412af1bea74dcbff4029cd18771a440440fbe5aaea240bff3e8212b267cf540440ec9185569f3bff32166aea4877840440e133a91c3afbff265c6579b500640440eb14293df82bff12770b8b5fab5404407bdf26fdac0bff158ffde026571404404a278aa249bbff22ddbf2736948404401ee8ee0d05dbff35079b2e330814044003c1d3a810e
+45;Toledo;42;00000000030000000100000127c0159fdb33fef1494043f0596d0e763bc01575e84ee6f6784043fdd046d2aae6c0157313d58eac1a404401a419ee464dc0157ed488b67b0540440797de04cfebc01579ddeb2d351840440ccf981ae0cfc01570124617803e40440de0406fe549c015598e8f0ab09b40440ed5fc98b9c2c0154199778239f940440daf6f7bb047c014dd9093c7aebc40440dd329ccf1d0c014d067165c045b40440aadf3bd4057c014afbc1417e4f940440adb5f2c0a75c01490cdf4aed7de40440bbe7ec74184c014678f705382bd40441048ead350a8c01459e0c958f9ee40440fe9d042110cc0144497c67d1edc40441351546ca500c01412fcb0d9ebde4044145bd8bf8578c01406d4fc350910404410a1c1a00cbfc0140daa1578f44440440e3712f5bfcfc013d1747d88f56540440f810b0041cdc013d33e6a518b16404411118ab502e0c013b3aa3bcaa8d3404411699f000ae8c013abfdbc504a3d404413af19685bdfc013b2de13ad422a404415c20b9556e2c013836ce58682104044185b8e2e8a0ac01374aafd3ba1e440441a2d55180a64c0135775ec8da9c440441b33592f0187c01348c4b141ce4e40441c8be39ae6eec01349df41e6cca040441d6dbf5c5d0ac0133b0f19810e1040441e1eeb4c2d9bc01345e2245e146f4044209c6cbf934bc01336c09dfb8f3f4044233be4c3caacc0130bde4852dda6404421653e2803d5c012f87345c7e0544044233c56aa531dc012ea171b2d35a1404422a048b55085c012cae5922f5bd24044241ee1e924d9c012c6ce97e448fc40442218f54cfc3bc012cfc22bd669fc404421750d16d8a4c012bfb258be6e4d40441ff314ac81cbc012c6544707aeff40441edb6100313ac012bf0b55d2222a40441e2df579c7cbc012bfc0932502bc40441b22e3f69b39c0129dffbb14463c40441959a57c9597c012778d468b3aef404419998e91a8b5c01250f95846123340441bcd158bc738c0124cb440dc359840441a714096eb61c0121c94c6b23cba4044199ca436bcbcc0120a0629ee439e40441c0e6abe8732c011bfec88a1462e40441e4c17aa2f83c011bdb0ec468fb24044212b11e70838c011b56cdc660bbd404420f79ee3ec8bc01188af811db300404424ff96209be0c0118c77248248f94044268cbcd3fdbbc011853b3842f01e404428bf6a74cf1bc0116cf08767120840442780e7a8e88fc0116f05ae6ab70340442369ac7f5803c01161aa1d52ffb54044207c538504afc01164da0ec3810f40441e4db5efaa62c01155db5401bd7840441e8493f27f7ec011493c6a7aae5840441cf76e451bd8c0113b616bc48dfe40441defd57f3cbbc0113974fcb4cf8940441c633b1aaa9ec0112e4608f0360040441c044c98008ac0111470b925a60240441e2aefcfa897c010fdf36dcb5f90404423017087406bc010d01b797a8cb1404422689d9aa783c010d0b34af92b2d404424c646ebf7b6c010c3738ef6860d4044260fb7b8be78c010b09fd4cfae31404424e078164d5bc010a87530478a47404422a2d5ff0bcbc010937280d98cd8404421df191fe19dc0109a57c32cdd5040441fe6daacabbdc01095445ff8b07840441f61f910c4ecc0106ac62e91d29540441ef466aaeb0cc0105262dec776214044222b199c91d0c0104aa4c8b2f2ed404421fa4fff6924c0103555c3c5abe04044203219cbb6abc010188f8111e35840441fdd93167b4bc0101ac95961008740441e28831ce6a7c00fed9225061ed440441ad03276b98ac00f9f785707566a40441b3cf250e23dc00fa67f01e8b8674044197b9dbd0c32c00f9997a875210c404418352a41a59bc00f72fb2978ec9e40441a1be74f8d90c00f4b2f0ee1445440441854d00cae76c00f02b502df360f40441879fc343251c00eac69e54bf4a1404414a732920128c00e6fd366190e9a404416a2b63a8686c00e44146737940f404414afb2f3e64ac00e29e2eea2349e404411d7d69a6fc8c00df47aed175645404410ecbce86469c00dc7193063dc2f404412e8434f23efc00d7843d0cb703d404410ee36138d51c00d56a7d50a77c340441257588e58ecc00d402a7fd2c07a4044100b25d686e9c00cdc6c273cfd2e40440df29fa71c31c00cee3ba3556b5340440c2482225105c00cd474df8c285440440be06ab95c58c00ce2068dec44ec40440a7ab4ab5caac00d0818fb79888340440a049da0b1b4c00ceeba19521cbf404408cead2c737cc00cf9a9f97cf2de4044070606929eddc00d1e04bad861354044066710e3db90c00d16b5594ee1f840440553ff25e56dc00d2d9653f2790e40440554108decbec00d348d2075a78840440410487e044ec00d544eb8a85b3340440481be8cff3ec00d6f96f173a036404402102fbaa525c00d99609b3185704044028060e59568c00dc776829bd9c44044000da78ee0eac00dc2bd82cf4a234043fe022664b276c00de109dc555e8a4043fe17a38cd9e5c00ddf6562a7b7614043fcdd3c9c129bc00df9116a46d6e74043fd892752f796c00de782498aa7544043fbfec804ef87c00dca27d5ee19e04043fc3d2ce07794c00dd2d02b7c04b54043fb7634e58fe8c00e122d9e5a03e94043fc03da07d164c00e0934099ce1ce4043f9a6b4ddf649c00e2a5b35ecdd1f4043f9ad85d0a028c00e10540faa4aa04043faaabdf529cac00e1bdb8db86d774043fbd7a483cfd1c00e4a66774fba1e4043fa34cf99ca86c00e444b30d5e0c74043f8ef103b0303c00e79f4278d404e4043fa1b881de897c00e985680d9f3ec4043f940d382a718c00ea805c97ecac94043f73d5ce8f55ec00eb86936247f3d4043f892001f5700c00f0063d68b89d94043f6e0d49d0bfbc00ef395df3eae2b4043f3df0c7b9f9bc00ead27ad29549f4043f3310a99b6f6c00e84e6fc92a6fc4043f16000ed4c05c00e6f68286603474043f13e7baed59fc00e3afa2aba240f4043f496d9f2606cc00e0d7b8d72a2684043f5e7005b2adbc00df3720cf3ea854043f86c3634198dc00db0583a8fda0f4043fa33e4625981c00d94a9500130684043f92e107a87c2c00d4af32cef079c4043fba0008a8340c00d1374295039084043fba25760ed8ac00d1a9b5e6ac46f4043fe8319bf32a0c00cc3431a061092404400256027c426c00cb859a243f35c404401b135d18ceac00c285e1dd3b6b4404402b33c7e9ca5c00c2360cca715b740440523328e6171c00c0e0e683c6e354044063af2648bf1c00bc2b2df211e6f40440535bc694126c00b962d673029ae4044065eaa945780c00b91572b689721404404c3eaf34adec00b715bb5bbecb4404404e8dde94395c00b65360c341e74404405ffc728a69bc00b356510d974af404404600b2d85a0c00b24e0039c7de1404404ad2585a92bc00b21da87edc208404406324d71c537c00b0199fc625e114044068f8d01c1dec00b058b5bb5aabf40440991fe897727c00aace35f01e58040440a5fecbe7388c00a7e8bd162914e404408bc93c04cf4c00a6b821735c071404406d2fb4925d3c00a3389acf016314044060e63fff385c00a1e457c5862904044074f1d251016c00a0fc76aaf98ac4044067355a07910c00a08e2c41ec2274044076c5553439fc009f2f0584acd62404406d6750a4bbcc0099b8ec7d0dbf3404407be0edb8772c009a8dd6c93625a4044082b91d42861c0096938e4bcc76040440b1cd85b7ee1c0096fccc8f0f52140440bb228464534c00954e1c831878d40440ba97dbb1f59c0094a81e52e28c4404407ea91d56635c0095ca3edfdc159404406296b719baec00923f979a90e574043fe13518dde9dc008c5d4df95d23a4043fe540934baa6c008c6c70d4dcef44043f77bd61e4905c008dae2d37cf2ce4043f39a140e90f9c009048fd29b6ddb4043eff5a0447265c008c5273e6e8be04043ef3ef4583d3fc0089c3ed3942b0a4043ed87d13c957fc0087a370162c5624043eb3242704597c00853050660528d4043e4cf71a4aa67c0081fd8f2a887274043e1e87e5d6cddc007fb6373cb5c684043dc03ccc8f0f5c007440fd08b25ec4043d237efdd956ac00757c6c6f0b7304043cfc0569cc4c8c0074f5a77d6e2614043ce8ea7add96dc0076773ff9258184043cd07b8a42973c0075d7cdf46188b4043c791eb48fd8fc0077db39e8eb21d4043c16f1cd2627dc007734458635d374043bc458ecab398c007a782c165e6644043b93e5090c4bdc007f5512e3d4c894043b9c6ad11e041c007fec6d4eeb7e24043b885e27c255ac0081e6b8c8d63f94043b8f81eb2fc1fc0082e7c983d34504043ba8376730a1fc0088f1d2dc978154043b99ba87029bdc008c45dbac63a0d4043bc90fc1befcbc0092584f61e7fc84043bf6e6f2b5363c009791e022fc14a4043be7c907ac82fc0097b37b77c58974043bcccc0d23180c00a5aa01caf52024043bc423b14644dc00a87db4e5ea1904043b78e53864b1ac00a78478730beee4043b30b5e91f57bc00ac287a94e8fd34043b43fd1151fbcc00b48400039fb694043b3c9917939a8c00bc38c5aca59894043afa244e6057bc00bd0a6b3de69584043abec23bd7d02c00c42be78d4b0a54043a6ee9c6d0000c00c8972b2e9bb8a4043a650582312e6c00cb159794ba3f64043a7618f3160cbc00d71055e7d7d9e4043a62e16512dcec00d814e62b988a34043a47663bf4220c00dc7b97b501c3b4043a2827c4f3982c00e1522130b86ae4043a555f9f89031c00e546710ca167e4043a57d98a0e502c00e7f5653403b524043a4b30b9b13c3c00ebbc0052468524043a139f15b800cc00edbdd38aac1614043a1169adf7275c00fbc1eec6e16a34043a636ff1aa7ccc00fab6025af91ff4043a79ff331ddc0c00fbae4069407a44043a8813f182168c00fc711bb8ba9394043ad14164cf379c0104b225aeb2a7e4043aec3444d61dec0106af4c16619ee4043aba98cfd652ec0107b6e99ccd66e4043ae6a4dc9030bc01097a0c7d893a24043ae6f189a3350c01082f7ece114584043b45546bd6d78c01078e80b3910904043ba7b1d6d2344c0105345e6ade3424043b9d052e70b45c01045c41d61f6d24043ba80bdb9a33ec0103c3da9bfe89f4043bc70981ab5dcc01045e1e84e18ce4043c0536bcd588ec0103d84875288fe4043c2bea466b857c0101ecd4825664a4043c2d008786befc0102ac7dee28a354043c9a53441fbf9c0107f54548d6d5e4043c822a14c8dc5c010a28a5bdb6a6c4043c9d35215293bc010c5df0d8e80594043bf68c0d615eec010f7e707021f374043bd2bc06d6dedc0118243648c4f374043bf7c5f72bd73c011afddd6098c714043c0ea58636e65c011c482e8c1e4ab4043c2f5f10edca3c011cff43b6a7e124043c236807c898bc011d8aa1b1379264043bd4107ee472cc011eedddc610bd64043be8269130b6dc011ffe24686a21b4043c24382fb614fc0120b7d3cf531794043c2d4faf73534c01201b58953143e4043c47e0a5c7a55c011edc2ca148ba94043c4f74db8df49c012198ca91b41d04043c7e3530fe139c01220353d79882d4043c70cd78548bbc0121fd5ae03194c4043c40b9db8373fc0122bb54c974c274043c5a1dbbf505ac0123eeb1ba88e3b4043c43dde341fbac01237f036d6a3324043c16121d27c7ec012458d2b18a9e84043bfa6ecd81ed5c0125c7309a6b6a94043bff79d880819c0127944936078194043be09120acd16c01272456eec69424043bae5e30f3fa0c01278f788e3130b4043ba29cc957800c012c2d80e1e7bc14043b9d437607aa6c0130580180ab02a4043b53615bba90ec01303cc84d363eb4043b67448c32392c013114d130bd3fd4043b64711de0a1dc01312891ff9c57f4043b7078d8a6414c012f648832f27944043ba63a0ae8bc4c012fff3474620dd4043bbf2dd739f47c012f8ae10d293bf4043be67f587ac07c01301c03e2f4bda4043c03bf7dfc26bc0130cc5f0f6b3e34043c1cbfd553c03c01373d67f644a6a4043c72fd0b951acc0139cab12d78cde4043c0791835bd0dc013c351d62554e84043b2933723718ec013cc773fe3abf34043b25180e0290fc01408ca17187e044043b7ac79f32d81c0143c4e5dfe5a5b4043bea539d60f97c01454e0a58b841c4043bebaf23101cdc0147ec2540090d34043c2c397c6fdf9c01496215449bf784043c66399c504fac014d395846123314043cc721cc1c679c014a5a59a2de91d4043d23b5ff6fa62c014a6523f120ea14043d3e24e158418c01498b39c7187a44043d53975f829c8c014a0282732ec334043d64245346791c0149b7feb3689184043d916d3b28057c0148d19d10c77884043db8515d1d701c014b223a5656e894043e0291d815668c014a242fca9df374043e13c94970c88c014aae7b93743b94043e66286455c89c014d36baddf32114043e6166cfcb627c01504f054efcf0e4043e04cbee66b6bc0153b79157bce694043e1487bc6ed32c01543d017dae8194043e2d4ef459d99c015401712962fad4043e981d63fa36bc01522dda7907d3c4043ee937206c760c0154b611ad5a1e74043f22419449f98c0159fdb33fef1494043f0596d0e763b
+44;Teruel;24;000000000300000001000001163fc2182934b546fd40445bee3f04c5033fbd71b075c2e98e40445d269da16eae3fb28f985b4d7aff40445b6354ac32563fa597ec78ed2f4b40445872e1e3a4193f9a6be397ae4bc7404459101b7207963f9d4ed02de67e6040445b69fb3feb983f9098dd311e052440445d30756f2914bf9250a4d5844dcf40445d92d55e858cbfa015982050601d40445c78964311bdbfb0901c01e9393f40445d1babcb2810bfc03c50f82eea124044606cb4447becbfc269657abf4a144044626478db3317bfc2801016dfa6aa4044648966189659bfc51d4f3956c160404464f1de00733abfc93d13601de6b5404464690fca33a7bfcb3e2e056e4b5a4044610f2156cdffbfccad27b6276eda404460883fb6f191bfce9a572c953cf540445c12f65847a6bfce34f60bb56adb40445876363d28d6bfd2cac800c65fb140445644797f7b69bfd3a5da2aea75904044546a64150600bfd50b5ad879e55a40445713651ba76bbfd83071b6c05fc840445571cf2dd8b4bfd86ab937d5c078404454aeb4c72521bfd7bb214e59545a4044534c81989beebfd84c7bf134828b40444fcfcba2dec6bfd7b5fdc55f928440444e8a2f09691cbfd4a2e0cd01477540444d28fda30c12bfd3f0e09d8f1c9340444e44069b8bc9bfd2c531050e3a5e40444e369acd3188bfd33109eab1dc7e404449e5e4ee232bbfd293d0783932e3404445a41e6d536bbfd356949a33fbe4404441e93c3db7b6bfd3184f99bda331404440b7ee617aa2bfd1fe5c5e472a83404440a379347ce8bfd1716acae8e0c340443c9ca7c54533bfd55eb418a977bc40443a96b0506a51bfd634e116388434404438bcec48d7cfbfd245fc82b6c2e44044317238073e9fbfd1fd2d5d0569a140442eba34d5dbd1bfd38a5f321d3c2f40442e5f7412e626bfd5c9d5ba39d5c440442b6f099a7febbfd5f60f2e79c399404429a551733a35bfd66472f1393db9404429f27e86b27bbfd6947377fa6b1e4044281c86624911bfd79c583f201538404427e8338147fbbfd76ee365c910324044270f78b4d8ccbfd8e08351c863754044274b6a63c36cbfd99f73c596efe8404425c16c5e1989bfd88073aedf8d2a4044239331ab48c4bfd88f1c03270d1d404421d233f27e6bbfdb6586148a2e4a40441f34ec61ceb9bfddaf203930784340441def3d582dc7bfde140e67185f6a40441ebcac727e11bfdfa622403e2b0240441d471403cb9abfe0d42a3d850a8540441e6061904effbfe169faad5ac1984044203660a4b079bfe1da3965041948404419b50fb4dc74bfe24f23998d2f534044173a89172f36bfe2375c56dcca604044145f73852a44bfe284379517a9c04044119430d34b5bbfe36fe0348006c3404410619f461ab1bfe41cf23e17e01440440d214a3f35c3bfe3a18c68f34d59404408e850bd42febfe412761dd846ee404409af2d83e08fbfe5ce411e2d6798404405c6c23bfa2dbfe7ed0238834305404404d75802c2cbbfe81e33599eacd4404405f72f7074ccbfe86485a147c169404405481752cf53bfe88d9e0d3e23744044014892bc96dbbfe8e279d0e2974b4043ffcbcd80485dbfeacf382320db314043fd080edbffb6bfeabe5d95a9c2554043fae125813b4cbfeb14dd3bfd28ad4043f94e2a8564afbfeac7f0b67abfa94043f78f1e0466b1bfeae4bea64376224043f664c3fe35ebbfea8f4008fbf47a4043f411785605a4bfe986b73b03fbd24043f0c6d179f47dbfea85046025c9584043ef81d1b5d985bfeba23e5b8561d54043ec77ec21f413bfec6f32b7da99b74043ed11f6efd862bfed33b92970ab7f4043efa953223353bfeccec94c6d498f4043f227a227d4febfed1b90849d08394043f3058fb2a139bfed3e0682c869344043f5813e4161d3bfece29438a074444043f746db0c3bdfbfed745c29bb54194043fb7194712a7fbfedd20248511ef94043fa60bad7fa1fbfefa9030531dce24043fdac81dc413dbff0693dad34ac044043fcbf8f190481bff12a0202cac6ca4043fd61080f9064bff1796ea00a90c24043fbe0dca87bcfbff1ae241f21b6e84043fccbf9592e00bff1f9c939f03bbd4043fbb146a56714bff1f2ae6cd42d834043fafd2a71b264bff2474024e6c7d44043fc654d259179bff2a49c0127f3394044014ad600ecd4bff158ffde026571404404a278aa249bbff12770b8b5fab5404407bdf26fdac0bff265c6579b500640440eb14293df82bff32166aea4877840440e133a91c3afbff3e8212b267cf540440ec9185569f3bff4029cd18771a440440fbe5aaea240bff3e8a32487c9b9404412af1bea74dcbff409e72fad1f6740441257a0029cf2bff48ca9baf9e68c404415f39c51514ebff4c3ba7bab35e840441b137f47cd8ebff50a35fd233d03404419c67ebf78a7bff52af70e477411404417a95bd96f9fbff510bfa705a41540441327e9eb8dfbbff5ac6daa301d5d404410928fb5d144bff5cbfee0e88507404410a826fd3c4ebff5d18e5836bc9a404411bdfa527d37bff64c0a3ebfa5c040441132cc0b97f5bff720f8dd2102da404412615119b443bff706ff58eeb73640441937be5f6e1cbff7973518ef17d9404417af72ff7bf7bff82ca8169b333340441a13572caf02bff8a5d1340fa7124044186c44162f6dbffb0ba7fa0d2a69404427a2f151667abffb52b84ace74314044260838dc7311bffb65ada9b5b5484044239f2bbb0002bffb8a1e68d45d6e404423ac71c9ad19bffbabddba0d8b0c404426c5ada2ffb9bffb85bda7e32ad5404428c4d94bbecebffb4f37347d3dcc4044282420953aa9bffb29af91975b6b404429201adb2b3dbffbdd8476e1779940442cc2480e8c8bbffc71be244ea510404432290adfc6bfbffce40003164623404432f181ad3ebdbffccf6f247272864044350507a04c2abffc9122f8b109d7404434e32fa97fb0bffbfa43dccea29040443b40327b8e7dbffb14876b7fe6fd40443e503eba588abffb39da1079973e404445429fad0405bffb08c315e1353140444882c36d974dbffb17b1cdb1bded404449f062a2a64dbffad9800df9b53040444ba4536489a0bff9947a2b8c9822404447f161e02273bff8ba6e07223bc840444c2f5bf00d3bbff909a6adcba22340444eafe12eae95bff89fb5c309c43e4044543c4f77c8a0bff891f9064cdc63404457f03b379fbbbff8da768f1fe57040445a5a484f3df0bff8fe05ab7f63fe40445eb02f097a4abff8a376c798c1944044615fb5e859c7bff8ad66c8d0ad9c404467d603be61b7bff8f2c38e9bcade40446a567048ac30bff920ba9c1dad6640446a4027536742bff96ba57ddc017c40446c29dac2b753bff9f1385d9485b4404470b0f2c6dc73bffa03fdb623bdf640447307e0ce504abff9b9f92d7de78d404476bc3fa5a12abff9e1125fe52921404478cc3cd9fb09bff8fc6fb73f694440447824a245538bbff815e22cf51a6340447b6868720cecbff79160fc8054e1404479724e6ae0e4bff72544ca67f63d40447e061343c368bff7597cd55779a9404480dda86b8853bff79f56e8192e7b404481e96c485b41bff6ae2d1e0a1afb404483cef0a05dfcbff694120a07849e4044847e0c8cf899bff6ab3140fbd9e74044859a2e20f20bbff67a2ba770135b4044867aff44ef1ebff68f6ee4d3ee6e404487697a4ccd39bff67bc9666e7c934044887cc1c119d5bff5b15a8622324940448b54e06eb791bff5a33b23cb13ee40448a741f3f3e0cbff5c312f377b16840448929ee794d7dbff5aaac1094a2bb4044875d0f1c1f13bff49951c0f07e36404486411d6e4753bff455b8bdffb30740448702ecc23e31bff40d878157f320404489e5d8f5ada0bff45788bbe1ff2040448d38463e3907bff4120a54d3d30d40448fbc7ad1faacbff35c16ef160912404491c4551ffe34bff2c8aae03dedcd40448fd52325a78dbff1f216bdc2d4e3404491455219a848bff1b0d8c2fa3b1a404495738cae6878bff116ca7889a98d404493dc6a5b8ae3bff0a10260a4d2d54044913e6cc49bc9bff00386790071eb40449127468d4f81bfef1e0efb345811404493a46f39e36cbff0024cc38e45e540448eb305bbd6b1bfeff480cdf0b93b40448c3089c2836bbfee7e4e786f38af404489a8091574d4bfed3395069e100840448be7bad16f16bfed4a2eee9128ee40448d75c162b659bfec7f5d7ccc9e18404490149c715cb1bfec871faf7b60d3404492942d64f93bbfec43b290fb29474044930a998145e6bfec46f3b6e8d73c404490a796114eddbfeb8431befb0e3a40448dd35a3ea9a3bfea835687dd3fc840448c5772ad9c86bfe95ebce785128340448d84623c828abfe911e7b2f0f26040448f214afc3046bfe8fcc833fa9d2f404492d0b85444d1bfe85d80b91a5fca404495b75cadd5e7bfe634ff11dd3bf540448e5fa907f69abfe481a0c1ac075b404495e2555b6264bfe3845099f660c540449888e60f8b5bbfe56a35d00a5dc140449e5108e8ff2abfe491a66cd5851c40449e82acf6a13bbfe403be03c2688140449fc435104f7bbfe426a8be4fb16e4044a7e7c5634369bfe35e4e0478684f4044a96257a9f13cbfe18d3f0240c4634044a2456f7e70a7bfe102aef6448cc540449d28c90c78e0bfe04f6966c34fee40449e7fe7b92eadbfe032a7e58cb7334044a0084a9eac20bfe0de6b1bf191ed4044a4e4565873acbfe16f6623edbd554044a679e162b0fbbfe21d8d4ba4e6784044a6d8acac1265bfe29e29ca067c7a4044a9248253b568bfe29dff32b6c7b94044ac8f41d1dc81bfe22ad920536dcd4044ad4d0ba3999abfe19f0f246031994044ac3953b5d70abfe05658c5d014914044ad52aab46b7abfdf4d052127171b4044acd59484e560bfdeb735f61ff1264044ac478f44c5c7bfde172cc47b91eb4044a8bc640969e1bfdaf9d8b40bb5c14044a7fb0d835c7dbfdb5ce4c39fb8a94044a55f7cf2efcdbfd9f99a02d3a2884044a2dcaa78c292bfd79b693248a78f4044a163b336565cbfd647e63438271f40449ee25c19f610bfd4c9e57e6be31f40449f675f8aaa13bfd4cae1c29f99b04044a0800ff25dcebfd43a96797e9c124044a0e0d0ec276dbfd15e2e26b7826b40449baf2f7617e8bfcf8a742461809b40449b203d849243bfccb23537d66c484044984104a25124bfc729844ebfe7c84044981521d8cb68bfbf55aa9b386ef64044940cd1f35adfbfb466c7dbdd721d40449352bfba038cbf9a6782ceaf8399404490650c33bff6bf890b76a316e84640448f644b52a889bf4574aae68cd62c40448b926e5b6c273fa2e712b8025432404485f5f5bb02a03faa890315d6786a404487045b50d5fe3fad7554c96394584044899b3feecfcf3fb421661b00d12540448a48a5faeab23fbe462baacb11ae404489d56c6bec963fc2ab6162708d8740448811c7d393bc3fc5821a9fc70dcf40448913d96ca9883fcbff9a83be29e14044893990cdf6a13fcc195c161a377e404487b5f05407e23fcd877b02997c2c40448703f2c90acc3fcbd85c59ea797d40448614b4edddea3fcc234106ca3862404485535852e38e3fcdd106fb1353914044860b43f624093fcdb51cf5e2a3564044847aab6ab0003fcf623cd1fea11640448555568b496d3fd1dc029b76fa99404482b47e50acb03fd08d79a054f4a4404481df696dbe053fd18d368bfa9702404480e9d1eb44b23fd12e9844ebfe7d40447fc85f6e944c3fd1fd5539dd0a4b40447e5b5a7fe4783fd204c78ff7038240447cad87e30dd73fd2c71fed38db9c40447c2a514437b53fd16303c6f02528404478ed90c53d3f3fd18daaf8e787e4404477e34e92f9dc3fd03ef349a80385404475b71b1483703fd005a77ce4b5aa4044729f6f84d0be3fce8b95974ddc4e40447138e18425253fd05a02e3bdb2b140446fddc5bad7243fd05a4fe491310d40446c398171ebbc3fd1e46149d8217b4044691049235f823fcde59deffbb72c404464bc2d84ead93fcd6e10baf46e6340446239fceabb8f3fcb272154ecf4e94044623f151e75363fc85165bae73e8a4044600fb5acc20d3fc675f775645287404460a0a69e64db3fc65d3c79b682e740445edefe5f8e533fc45c6a1b1e35ed4044600c0bbe9c803fc5d27987dee4b040445dd0d8a8abb93fc4c313cec7816740445c7e4abc44723fc2182934b546fd40445bee3f04c503
+43;Tarragona;51;000000000600000002000000000300000001000000de3fe291a3786208d640444d4d3ce1543b3fe1878a297dec84404449805857267a3fe1cdb86344842540444923e3b0a5353fe136a04cde77674044489af35c94bd3fe07870a39ae914404442f3303afda53fde85f15756e525404444187107768f3fdbf71e23456e3a40444622806a6afb3fdbbd03e93b0eec4044485e5a68d72f3fdc6995a5992c3640444a03388cc1f93fdae441fc824faf40444af0585364683fd9b9c0514f8f1c40444d1ad09968a53fd5a0a0920ee95a40444dec975a1ba23fd1d925beb40ded404450a055644f4f3fd100ac23702dcc4044528c9e26a4b83fd1221c3381259e4044543ebe277eb13fd2b03d2252eec5404458082d9a86c53fd0cc0e856dac7040445a5bb97568483fceacab8d3fa1b8404459b7cca44cc03fcd1880e2350b4740445ba0f4d588103fccedda94f2a70d40445dd0c4486eda3fc9418a4c5246a740445cb1da136d823fc4f89fdbca630840445ec370f695d23fc45c6a1b1e35ed4044600c0bbe9c803fc65d3c79b682e740445edefe5f8e533fc675f775645287404460a0a69e64db3fc85165bae73e8a4044600fb5acc20d3fcb272154ecf4e94044623f151e75363fcd6e10baf46e6340446239fceabb8f3fcde59deffbb72c404464bc2d84ead93fd1e46149d8217b4044691049235f823fd05a4fe491310d40446c398171ebbc3fd05a02e3bdb2b140446fddc5bad7243fce8b95974ddc4e40447138e18425253fd005a77ce4b5aa4044729f6f84d0be3fd03ef349a80385404475b71b1483703fd18daaf8e787e4404477e34e92f9dc3fd15e1d9be10b62404478dc6e8d48cb3fd2c8b76c9be83140447c3b57e2f3893fd204c78ff7038240447cad87e30dd73fd1fd5539dd0a4b40447e5b5a7fe4783fd12e9844ebfe7d40447fc85f6e944c3fd18d368bfa9702404480e9d1eb44b23fd08d79a054f4a4404481df696dbe053fd1dc029b76fa99404482b47e50acb03fcf623cd1fea11640448555568b496d3fcdb51cf5e2a3564044847aab6ab0003fcdd106fb1353914044860b43f624093fcbf81da01b605040448579a29255723fcd7b62de01e49840448749ad1272493fcc048a8f76bc34404487d67c0b71d73fcc258cd5439c6b40448a9f3c47fc3b3fc9af8c9de6380b40448adad029bd583fcac9f27f05661340448ef57bfc94803fc9d58f8724aa8d40449053a1ac7c643fcbfc30a81384ed404490bb27532b213fcb66dc8b8f48654044918775bdfad63fcff902913b0c824044909710276a7d3fd030fd67b9109c4044933834283f7e3fd179049f5d39274044930c36d63c1e3fd3698f040333ab4044950a6390f4053fd48d390469ad5440449cab9105ffd23fd5c796d294e2d140449d93745330763fd71862ea52662140449cddd3dd59b03fd755aefb22172340449e8cec7bd8843fd867674033aa5a40449e4353ee24f33fd7e7a45853420b40449fd407e7de7f3fd8acfabe9164864044a3a9949092ad3fdbb8bb56f26ee24044a3554c71b76d3fdbcde9d62599a04044a8fc9df7ef883fdd8b35f936374b4044aae3b66ef8983fdeb67de0ab7bef4044a966a25c9cf63fe01ad308b744e24044a515dc59cc693fe0d36b1c2db3174044a52d9d9698223fe1bdddbe8c982b4044a9d033069b2e3fe2965d2a8eb0184044a8f1ff8c3cba3fe31b1fdcfb545b4044a58fbaa85d023fe41a1de1ce77d94044a53aeab5739e3fe56e7b92eacb324044a7a95e0156dc3fe80c78861b040a4044a8aee0cd23a43fe86635f75dc5034044aac8984813733fea169ad3195be14044a9d960a87b233fea883b61c4afe34044adba5f52dd033feae1cf0c060c794044ae4fc9d974c93feb9fe55ed02b384044ab473a195f003fee3f5684c6f9a54044acc4c0e902a83feedbf84201be594044ad793c56f3583feec93b5e611a894044af094dab1d6b3fef6c30e6e3e0764044b224c48580883fefbe37ab92eb564044b1ca1e358ef23ff00a65731031c04044b3be4c11b79f3ff071863acab4cd4044b4629d1acfdd3ff0be170a2185d14044b8673c6d4c3d3ff132f0faf6ce204044baacadd782f83ff0996c30bbf0c34044bd7053c1037c3ff0c6ae7d9b25244044be67c36429873ff0a19926b5a9f94044c02d0fab77463ff1c956872045464044bbd05617167b3ff2e064ed7313264044be84e8d708543ff29e310f169e524044c1b06153a4653ff2c87130cd5af04044c401d2d7c28e3ff29f477ff9e8ee4044c4694688ae183ff35f3ce2df5dc94044c63cb803df553ff383d5241a77b74044c8ec6c5c41173ff4de2c7be78a9d4044c9259aef2f233ff5f298a67f861d4044c85a695808563ff62b469314f8bf4044c7265314bec33ff673780fe4ad1c4044c768935848273ff64796dfbc23ef4044c99f5cd8844d3ff691a8d0547cec4044c9a9749883443ff6a845c5f6b3954044ca92132189ae3ff7458fe62b5c694044c8db16d64a133ff6e57da3a264a24044c71fe26029583ff725c690c88fa74044c6b4a8b834543ff72d65d08329854044c4bec885c8e03ff68a20efc24dcc4044c47884a10f053ff657704e6911084044c1a676502d2f3ff722ffbac6f7064044bf561c7b4f9c3ff73b3571a6e1564044be40f01d926c3ff7953b29a1b9fa4044be3db81e8c553ff7c0c39743fede4044bcca3e85aa573ff7bb18eee44eca4044ba9a41d116f03ff77ee8e4631f124044b8d3c9c9c0b23ff79c4def54bfa94044b7d1e79e8a463ff7ec58316f63bb4044b7c2071424023ff799fdbd7459084044b6f84b82d7ae3ff7d7b75c223fc64044b363c8c3390c3ff7919239f63d564044b0bcaaa4c8913ff8260c2afdfce84044b27cfba097323ff8979f9404844a4044b152eba63cfd3ff8d5a29fe3c6cb4044af1e4793bd623ff93f52d98586ac4044ae64fe2045b53ff9403fdb7369ec4044ad3d25fd620e3ff8f1fce4d3bae44044abf20b12e1373ff9322cfd27f8314044a856e08e98013ff98aac8fd1aaea4044a77b4fe2407d3ff9699d96310cf14044a595875958c03ff9cafac37785eb4044a4802c647bc53ff9dca1afcecb664044a584a0bd691c3ffa304b8d4fbce04044a5e1c03745c53ffa0b63bfc2f9104044a5b75ec043973ffa112319fa40e94044a43221209d403ff9eb8bd60c91894044a376c9e7506d3ffa0a11437448fe4044a27fbf4829e73ff9ea4fc63be4074044a0794181cced3ff9b209036771314044a00cc22359293ff98243e3c957674044a125e4f6ba313ff91f34336bf0c84044a15d2bd9667d3ff9546748c2194940449e37cba90b523ff9fbf2ebab9b6040449c8951e572583ffa41734b1dad0740449e207c1f3de73ffa734ecb9dab5540449a8c7c3812743ffa428253c6956a40449b1a8b9ea6973ffa50e67880ab74404498c1bb8c32a93ff9b87b5e8150df40449781de9416f13ff9b773327ca9f54044983339e2be963ff976b80fe2875b40449820a7f8238a3ff83699bd896b82404496c85e4639ff3ff76d58440ecda440449526e9273a463ff6517e97c6c1d7404490d90ff164b23ff4c4461ccd73c54044905ad43088223ff4169eca526b7f40448e4bf27a63fd3ff36aa1dcb4208440448a0fae01f53d3ff3fc4c278713c240448de7e9915c3c3ff39d31202ae52940448d7913673af83ff3904cc987480940448c4d8b5272d93ff38e8f46039a6a40448d89b0ff78013ff366de5a12f0f440448caf68d9076e3ff375ec56e6fdb740448b8ea36f38fc3ff346f06c4a673e40448c405b4b10863ff36d5da11aed4240448b262d6865673ff32e8e270e7b8840448c08cf5e99e13ff30d3050aabd5940448b1d9c50b6b03ff32311bc15199840448a972f2ccf7d3ff2fd2ea7bbced740448a6a8962e21a3ff2b9b71fefe80e404486fe38053b3a3ff24b91296eca7540448935566c25f73ff1fbacba10653140448991a87848803ff15696d27b1dbf404487e6043eb1a03ff0c949f857d13440448834f012b3483fef8816e90bd8e34044851da8900a2d3fee3238e1c0464f4044811e88a5c53b3fedc9837aaf84cf40447e81726c953b3fed470b59fb490d40447e59662fac383feb97619842ced540447939e648d2613feb39a28a47dbd14044768c8d8eebb83feaace2660894f2404475431ecbfba03fe958f58f05387140446ee8fe4867453fe7fa9c83255b5140446c00e730a63b3fe7b906466b1e5c40446962b64bb4923fe6665d78f0c66b404466d5d60472c63fe756875f15a06240446288b00e0b6d3fe866295dd889804044618140ce37983fe9073980e6559d404462656f56b62c3fe7349883cd8812404464d5cfdc32013fe89129c0652ccd40446559bd82fa3f3fea8693e7f6405b40445de5fd6eefe73feb7800be521be840445e6521463a913febf44261fa460240445d75c48c504a3feba839c9bf1519404458a50adc27083fe83347f8e808be404451e85d9fcbec3fe6775764624c9e40444a4bd6220b183fe529d37f883a3b40444756b23e56273fe3c3b62a4067c7404446dacdf2cdcf3fe348505e3c4b60404447e729fd20f53fe30a211488df49404449fee0d0e5b73fe3c987a014546e40444936c0cf71203fe3c5971e143d2440444afcd462a97f3fe4c426939b307c4044495605f99cc23fe5216265474eec40444bb556095d323fe6ad859b79b26340444ba2462824da3fe7d8f48990733c4044516c34e0cc223fe62ac15d94160a404451e56839a53e3fe5457e6933ed904044502a2bdebc4a3fe376282f0cf7a540444fc4443d1bc03fe377200e8212ae40444f0242f0957f3fe35ac104fea8a440444fc4277963103fe3254434e3369c40444f551744d1523fe37905d2fdbe5d40444ee9d34729243fe2fc23da7ab55340444ee34b4d75183fe358cf263ac9a240444df725de2d6a3fe2f5532c89063540444e89d74ce10d3fe291a3786208d640444d4d3ce1543b000000000300000001000000043ffa21bb0a466ebf4044a82078345df03ffa47ae16a0a2c54044a80ee65567993ffa1046a885f09b4044a7c38e72fd823ffa21bb0a466ebf4044a82078345df0
+42;Soria;41;000000000300000001000000dcbfffe623768de2124044c9ddfa267738bfff7a33cc1b882e4044c5e583b6f30bbfffa781ee014fe34044c34f7bd5dbb7bfffb2a1fb096d8a4044be43826959eabfff409df4d9418b4044bb31961612a3bfff424c22c34e754044b64e3f23e879bffefc00b99f84a74044b5bf3fc88f48bffeff28f4fcfdd44044b4348fdb1018bfffb5c44d7fee2b4044b37f45117972c00013c5c37f57604044b1631bc3aae5c0003bf225298dcc4044b12c14d3432bc00055d343abc8bf4044b1bd3ae2c3c9c000593e14f4bfec4044b2d5ca775d04c000473628fe48694044b3c3ef4764dec00048f4d633dc594044b6a44acd83acc000cfe9e8dec89a4044b90f9b221ea8c000ef23a1bd21004044b664a5bc3cb2c000eda287bb060c4044b0e6eb3bcdb7c0013195be9015844044ad964575c4c2c0014e1ad35131874044ad7c1ab1f6cdc00141c46ea6c9254044aabf6cdafd45c0015ab2018930db4044a93e7c4b99ccc0016276974fd71d4044a5ce52352370c0014067956582664044a11b1d11dea5c0012b80b297ed474044979a40cf643dc000a3a082410d67404495e2d1b5ae92c00069de2fd436ac404492cbf24f70dfc000679b85b594ab4044901d621f9e9bc00080737c23920140448e7a8c6bbc45c0008664ea90572640448c42d33d9902c00062abc6c2c79140448a084db93dc7c0007393c3b08838404488eb9f9a536dc00092d219ceef4d4044894759f58394c000a6d45a23a6bd40448b0d879d42c7c000e0167f03a76640448c7c8a166641c0010e0a243d996040448f1dd464a44dc0016702af7f2b7c40448ab87aa58d99c001db6fb2fc7d5040448c6adf0f223bc0021bbcb49e243b404488a50007c047c002594123b6be6e4044891ee0e997e8c00296567e3bf01c4044873ba5dbcfd4c002d7b6c6366bde40448b10e9a107bcc00359ed716e3d8740448762e53ae05bc003701dc6a09f0340448940cadc98d9c003c177897965f4404489ff82141f7bc003dbab862b27cc40448ee20291de42c0041220592aad6d40448f36b56d4e7cc004238bd2b19336404492ed75cd144ec0044ac5f575c100404494cda1bc8662c00457198424563b4044934916d94f2bc0049ac82b74c547404491da356d419ac004c3342c713bf24044933b7ff9c692c0049eb48a9ce2b6404496de70090dacc004f9fdf3adae9c4044980fff6d6f2cc004f5c6ec74432f40449901d03127b8c004bffb6b56f744404499a054267b73c004b7446817741940449cbdab1df2d3c004fdbf5c18512740449ca36b096356c0050899032cec5940449b8c29ef67adc0052b09b2cb07c040449ebf364de736c0055caeec2263bf40449e5c53347cd7c005ad26855877994044a040e8c014d0c005bbf3154720384044a349315b5b8bc006166aa16720ff4044a313357e896bc006343f2efb26634044a002bc863643c00693f544f73c1e4044a0d8bf3a4e41c006ef630da7999e4044a321aae68440c006e9aefb66cf554044a4c7f121511ac006fbfb92aa5e864044a63565dfd02cc006ef4cb506d4d34044a812be4acb4dc0071b7e94c1a9c04044a9a16315e8bac00740db3784e2ba4044a9efda384541c007878f06a1377d4044a82f119f7e7ac00799de80c322c44044a57520da5156c0080c439a2b06614044a4671a28d3bec00824e4eb157c024044a501bb7d2a5fc0087ec5ecbc5ef44044a2ffa79585b9c009a8a7bc4718994044a6f132181155c009e51664ceea3c4044a8c588777fb6c009e3ecf82a377c4044aa46c1fb8d80c00a27975cf5c6b94044abb7ba58a352c00a2d5127cc08124044ad2669137282c00aa23d382263e24044b0298fa40004c00acde37ce787394044b28b18cb309ec00ab82b75936ecd4044b9bd5bd6149fc00aa49b6599036a4044baf8e4d466b1c00ac9578646221b4044ba6e85cb16d1c00aebad5515e4a24044bbdf8ebdbfe1c00b0c7afbb88c684044bb7e8b9f0dabc00b4e7310f751ba4044bcf181c92991c00b646ae6dc4b234044bdca1146237bc00b5f0a4a0e74964044c1c665c66998c00baa1bd073a8f84044c4b7765922b1c00bd6619a2c6f284044c2ad2c0a416fc00c477e796046c64044c63a98914ab0c00c59ec3dab5c3a4044c939c372527bc00c4a018a6617594044cb115f0d819ec00c674c37cd32094044cc5cfd8924a4c00c3bb4f4130cce4044ce6a910fd4acc00c147eda84231a4044cc708d9e5b17c00bcd8a0574558a4044cc68f0f40d48c00bad6d858350f24044cb6d301deec3c00b7b9abd0dc5994044cf9eaa7cb82fc00b7e0befefb3fa4044d1bd43c718f3c00b70224c1f013c4044d2b93ef2d166c00b5a3d6692dc114044d271eab3bd88c00b51311303a40b4044d5193b1a325cc00b25ad706619904044d86605157134c00addff2acb8e3c4044d8c2019bfb38c00ad5c7a523432f4044de5e538e58afc00a954b317916394044ded6d0668a4ec00a75317e85ca8e4044e14c9a82a2b2c00a4be71a44be914044e14bf13a6a5fc00a342131fed5b44044e263ccc39292c00a4972ccd1297e4044e4e53aaccf2cc00a33fc1699fdf74044e5ac6a74c684c00a4ae9bec26a6b4044e6c564745a01c00a3fc6c77a278f4044e954c985f070c00a4fe325ff98fd4044ebd5cec72b81c00a3b775af7bfb74044ef17d2c954e2c00a510a0522bad24044f02e2d39f4efc00a4522bc8fe02b4044f120ac9dd843c00a2b1334f73ecd4044f07b3889ce0fc00a27eede91e8984044ef44d8145c36c009f25d4a3b960c4044ee97721523ddc009f975d5669bb84044ed9c080d2e81c009e0072a15d3264044eb9a25dfd253c0098e541cc05db24044ea1a3febc220c00995f32eb64bd74044e89a564d3ea3c009823a7332408a4044e69cd7b1d82bc0095eed840da76f4044e58180d81b7ac009468745fc5afd4044e6395dd5da4ec00916ef1405aca44044e7edb82e1e10c008e6996f49b1474044ece36cb296fdc008cdc06238e2d44044edabe80bfea2c008c6fe3a60ac9c4044f0c683d2b2ebc008b3ada8f8bac64044f02c1d304db7c00878149766b9734044f216ef96e26cc0082258e39bf1384044f1862632a248c007fed8d0bc1aa34044f745c4bd2b3dc007c42ebe2e79674044f6f26dd75a2bc007ae3e79fd0af24044f99d914aeb8cc007b9f647f0599a4044fba721b14475c0077515c984b29c4045024cf9201a86c0074c3507dad103404502ec7d0973a5c007121346b7521a40450136df9243b2c006d56d07147152404503e62888b546c0069a1dbe5f7f4a4045053a6e5d4d30c006804874e3d7ac404504b08a3008f6c0066246b88fedb8404505fefb845678c0065c0d771d2917404508224374a77bc0066d3f6d5bd69e40450a4d4a3e453ec0065236ffa4182c40450c0f77fe4f8dc00655366846e64440450deb97a23767c00632e5163c23ea40450fd00690f15dc0060266fad8454940450f130248262cc005e098caab792f40450ffe7acf7f04c005a5c7841ec44d40450d4152b0a6fdc005aad8a380df4a40450b0b7afda22dc0060f883293fbf64045042cc0bdcad2c005f826292beab74045011c5ff6cf6fc005a41e98f254c7404501efff8eb862c005637e4e4acce94044ffc0934dd018c005035947915b7f404500d520948646c004a3a751be0dc34044ff85924e7f48c004647d1452c84f40450697e3bb3fa1c0041e79a13ce245404508d073d8365ac0042e66575e1bfc40450a9bda6f2a63c0041e0e81780fb140450ea94cd79677c003dffcc64ae3bb40450d9cd4166d2ac003ab3e656b69b140450ec2b7cb07fcc003862436c10747404511821873944dc002c918244a485f404512c74405d820c0028baf05669c424045129546e63ad5c00241dd0018202a404510dba4b6ae28c00241041dfa6f7b40450ddfc919cb14c002281e36f7b8df40450b55c4739e19c00212355405f7cd40450b2bf825040bc001e719cb695ba040450d157a9b51abc001caeab6867e2340450c904d6ee27bc001abcaca1bcb1640450d6583fdd0fcc0012f54e2f51c1040450d5e9ccc06b2c00104c29168256140450c700b80bca9c001049625683bcb40450a4c92d9fba4c0014b98f471f1234045088abb1c17b0c0013cf58fb104e840450605589383c5c000efa2116aea0d404502c0c90a97d6c000dc6e3cc0f2f24045005ae88a53bdc000fe198c1826be4044ff6644e77f70c000e133378fe4394044fa9b66f9335ec0005f862d9245a44044f9b803ec3790c0004a87d1701fa34044f83e656fb534c00039fce3150daf4044fa089108a66dbfffbeef657e091b4044f5c5535ded69bfff865705868de04044f5a66f060361bffea4886c1fb8da4044f75405549776bffe81b4f220d5744044f9091d2ea8cfbffdb1d4817fa5044044fbaf9e01a206bffdb76c8086ce104044f46b0089bdafbffd6ba8333a6a0a4044f1cb6771ff21bffd5c66bf9672374044eee938978feebffd2959d580c7de4044eec6a8051741bffd14883e7d69384044ed313ecfa726bffd19971a2fce724044ea1e6e34e6e8bffda24d3c9ec1ce4044e4e5a65e344fbffd3742de4bfb2c4044e3aa780c08d6bffcd8c350660dbf4044e02ea6d606f7bffcf1dd9e789dee4044de3f6b4fda33bffc67ec0e16d5404044dcc5e2603a86bffc91ba0ab97da14044dbcbe6885fb6bffc989af4dad5464044d97bdac62380bffd0063918ea20a4044d7d1342fdd69bffce64b1ec87e454044d506951ecf68bffdbe6d185c424c4044d4ad03e8b19fbffdfbd4ab09fbce4044d1a95a793faabffe5dca56e1f53b4044d0f2e20e9737bffec504f0d595a04044cc9639c20766bfffc08b052c39c64044cdb4862f03a4bfffe44dca4975fc4044ccdd84dc596ebfffe623768de2124044c9ddfa267738
+41;Sevilla;61;00000000030000000200000130c017c3ef3489522d40426d0bdc934f8fc017e47a4b7e364540426c0e49f84f3bc0186af410d5dd8f40426dba949ff974c0189fe6a91f7c254042715cefebc6f4c018ec89b65ddbba404272f52bb974dfc01903e23d43cfb04042726b8db5be46c0191cf7e5d5317640427496ae3dfca1c01952f3f8f1d5014042730bfadddfcec01983fc77a41538404277a4755dd8acc019748b4e74a48f404279100ee11960c0196a6fee35b95c40427e86e56ed192c0198b69b434e19b40428a4a1ff887abc01981ab5ec6927f40428c7dc4a4bdc3c0196cdbebf98dcb40428e299809a195c01970bb1ce5d8a740428f0336bac0f6c0195e93a552a42c40428fbdb52cc80ac019704e4348c3d8404291b7edfeb1dfc019582ef8b351f4404295b604a53c77c01966f97d6289ec4042971ca5704515c01969dc1ba7d9d740429976f74fa4a6c0196187e386192c40429bf0b30c6d88c019707b9521babb40429e79f07e4f33c0196620093d74084042a1f10f570affc019592ae5cb90264042a32acd03e579c0195f0bae78bd9b4042a3fcb68e35d2c01954fe01bcdd5b4042a64908fdaa91c01989ccfd38135c4042ab32d4cb6b46c0196257d76001514042aed04b7ed0e3c01972a5d5f095884042b0183fc5706bc0196d00abc3e00c4042b4bdf8afbad5c019400ccd7673834042b595f7541b1cc0193925a476b9be4042b7c6f6abe5c4c01954f20d1a921f4042bb78e7bfb9b7c0195ae7b371cbba4042be19c88aeb23c0196d12ac43da0f4042bf83c07a952ec01978245b766ab84042c2461ba73f39c01977431aa0aefc4042c48f8ac0158dc01992e8149e3f134042c74402c84b22c0199c6c4c9e2d164042ca3f5acb7501c01992d7da0ae7aa4042caf5e52e0668c0199bec199097344042cc9e2a605965c01995105cf806404042ce3c8988aa5ec019c5e8b7cb192a4042cfca115fe88dc019f0870894c66e4042ced8678211b5c01a0f59b1de452c4042d008ae7c7717c01a1d4f0dfc8f554042ced25c8c508fc01a2748f46e2f124042d014e6d98ac3c01a1e4ff11dd3c04042d178f746b7bac01a24f4674589784042d35330cbf229c01a19f8a1d698c34042d505a25430e3c01a015fd27888524042d57fb2524d2ac01a0174df6135364042d8277b4a8a4ec019f9071fb788f74042d826ecf62f69c019ea28e35f469e4042db1b73478f26c019e4ce48a2dc0e4042dac383afc4ccc019ef4aa627adab4042dc288d02ee83c019e686b3159f2d4042dcd16dbdc00cc019cccb325cb8574042dc04d818a7b9c0198f63f753e7924042dfb46a397383c0193e7c7a3dcd854042e1e73e1cf128c0191d2d9dea589c4042e1139227a423c019025f9a66c0764042e1aeba5f8442c018fa899ada1ca84042dfb6508ff694c019027b86a2e0af4042df136c8e9e94c018e3d6ece9d6514042dea2a5cb9ae3c018dd6af4c91dcb4042df5a4f188e64c018e11c50ee85044042e0a9c76878a9c018d1bf7553f2a44042e20d41402b02c018dca29845dc844042e55154efa41bc018cf412f9794aa4042e71bb9efd05dc018bd1684038ddd4042e7a35bc94345c018ab70e353323e4042e579fb09b242c018893b6dd0793b4042e4d7aaa9ead4c0188d83e97b7b994042e5d19effc630c018817672086c474042e609a474fb10c0187c947b99f6af4042e8862d7ccc15c01891925ddd783a4042ed86bb5f55ebc018a2da3073cc674042ed535174198cc018a83c997d2ded4042ee5653f0534bc0187fe6557030254042f3c3ee952722c01894b2b5fddbec4042f5d2e34fa3b5c018a7accb9457554042f57fe0c9369ec018aad7f2227a5c4042f4592b977fdcc018b331bbdc31124042f521cdff9693c018bc7be33f18df4042f6e9454ada3cc018abd7cf8a41624042fa585df1f015c018774b402b7a694042fd9e95eb16eec0184fb84b0a955b4042fe0848f12cf7c01834f3310700734042ff988427b9d0c0181183338cdb824042fedd17fc28b9c017f958c4f954fd4042fff12121db14c017d093a3d8af264042ff677dc857c8c017bb25c2203a4c404303f01e2ae359c017bca54540c941404305fffc0eaec5c017ad573e77ac574043065fbd011f32c017a2cc2793f64b4043080b584fefa4c017a4ab54be2e8c40430a026bb10f3ec017b79b8509c83540430b6b2fece047c017b49c60a6e76940430d710ed40be4c017a66b5473051740430fbd8887df99c01785ccf2aed610404310ee941ab23cc0177fad188da6ae404314447af9706fc0176cc940bffd76404314b16adc16edc01767f5b875ca29404316010497945cc017329eb16cb03e40431658c0e5a7a9c01720770ce2f89a404317caeb3a0f0ac01707747242bd954043171cb6e52ef0c016e9a36915063c40431944f803d499c016da9ea3cd2ccd404317ca1797319cc016c76763d62d0d404317dfeef33d4fc016ca9df34e1e7a404316ff8c11c6a7c016c12381ba54d040431747c13d5529c016bc7aa8d768f740431438a1064a72c016c7afc3a78a1e404315e643d0532ec016d2b98739897e404315ae4f91c13cc016c7f1a06bc5cc40431329c03813eec016dc94f465ba67404311215ec83ffec016f48c3db2e0604043110035b20af7c016f089a0c1f0c040430b0a6a9ab125c016c64736ba152940430ab7fbf6414cc01687ae4ca66e36404311bc3b53aceac01656d2cda8fbf4404310dbba45b699c01653a507e1cbb840430ec7d972f870c01627b652fc960240430c01fc4c9fcac016288660234db040430a83f3369058c015fb022bb1e8234043055b27724e96c015f4c32c4b48ba404303b425ae5cc2c015f8fd1d2a3af04042ff75133acde5c015e03107a3a7294042fc4072e1c9dfc015a9960963a3604042f8ca530eb493c015b272a8adcd724042f6b01f9c4159c015aa8164772b8f4042f6d45b65c61dc015b034c49c96684042f58f0ef38540c015a7a2c30e072a4042f36281b0d5ddc015b0313eab254c4042f1c6e215f900c015a8a96dde3b1b4042ef4a7f32c3abc0155b75ee6eb3114042eaa00c021f73c0156671dafd80e44042e5b9319e7769c015514c5eed0f274042e39ddc33f2f7c0153d79ce0872524042e319f3d1c961c01546529b7abcac4042e10ddfb3fc94c0153834bd90b3864042dd8fc05635b1c0153a6f4d5993df4042d99ed63bd8c1c01546a91cbbc4df4042d9cb21dc9ea7c0154ef324692fb44042d886feef2b3ec01558f26130f2674042da53844e254ac015611cdb6096f84042da48b7ce51ccc0157379e8acdac84042d93cad7430c4c015816004bc41294042d6ba5a07cd18c0158e6a54d4e5ee4042d950ce1d48aac015a1d4cbdaf08e4042d852eaeb683bc015a8245e7b82d04042d654abfecbf9c015a375c56dcca64042d47a434e4498c01596bf9f1a6a984042d4c96be47f9cc015930b7f7ed50d4042d3f867abf1f2c015a7f3b007e7784042d2985f6573d6c0158658c2305e0f4042ce322886b1e1c01570925e1999624042cd7f55c51d45c0156e8c7f65f7e84042cadc1f47905ac015614eb0922e974042cb0c223c03d6c0154b1031f3ba6f4042ce9fbc1d7d14c015185c0bef77724042d010107f9040c014b5029e624da04042d71d2355b457c01499a7ae9efe224042d498ea08ea2cc0148b028186f5a04042d59392257e61c0146e82b00ce75e4042d4cf5c5ea5a8c0147436f751ca674042d8284b31c666c01484d2b27b231d4042d9708d3746d0c0146f381976f47e4042d9af7805d3b2c0145fda91ba04d24042d67ba038b3ebc014643a34da27544042d5cc1862de83c014478e03ecd22f4042d4659196e329c0145db3a5bcf1164042d70885e4cab5c0145b2fc76de83b4042d8eab14850c1c0144a52f9d5a2114042da95c2f78351c014305c4934afe94042dbf111b8eda6c013ffd1056ba4bf4042da718b798188c013ee46c470c3f44042d690c4a2a098c013d0a81bb4debd4042d38342100111c013d528183338ce4042cf91e36aa69bc013e5aa41290c8b4042ccd1f1da785cc013c2b5deec00914042cf84e43c1063c013ba180ce7192a4042ceec6dc2e24fc013b88aa5688d664042c9b5721466e2c013c02857b7f7d44042c9322de51599c013ba64d2340c444042c5e057f79658c013cbb57e1e0a7a4042c2cf2a147b8dc013bc5bf88a7c014042c28a733a4e1fc013b2cc7adc2e034042c00c8b2697cdc0139fc3c544cbc04042bffaa6f21427c013aa2438f7f6d04042bf101e681763c013a92a832527c74042bdf8f5a3f557c0139e2ce0d610904042bea78fed599cc013a4069fd74b564042bd6970401dc2c0139dc9812413164042bbd3f0488e20c0138059ae026d7f4042b9a86ea50a78c01389f944c751b04042b80fd6147cc3c0135ccf5f2351134042b7cf79203896c01359bf5e4f40b14042b62cc1b6e67fc0136634ab8351034042b4907a611a22c0134dd7d51c2f3f4042b085ad48cdfac013423d84e829164042b052fb967508c0134b60ecbb0ff24042af3391f97864c01349db548b2dd84042add951889167c01320ff5cf582014042aa0c5ab09477c01311df0b2406ac4042ab3aa440bc89c012feb245eb7a414042aa5b55dc5581c012eab99c6e60304042aaebfc1aa0c9c012e77da069c2674042abc0f35ca5ebc012ee8a7c78d5074042abe034efb211c012e3f50bb8ce724042ac57bd31b56bc012dfea59ae24ca4042ade34ad532c5c012bf3a11a74fef4042abaa7a699ff9c012be1c817c27aa4042aa463a323c24c012af496d39f2c94042aad0abc130dac012b7e32a28bfdf4042aa3d3ed1ef43c012ac7b25eeafaa4042a8ef5f1335e8c012b9d70274933f4042a964799c791dc012bc7ce9b590c64042a85d9c956edfc012a2d3074e7de84042a70cb768b77ac012a9c0963b48df4042a64e5dd1417cc012a477e0aea3644042a5b06076738bc012b374ab08e8ee4042a6a0d057fa46c012b97042883acd4042a5203e32847cc012a6019b3e3d064042a451b89c0ab0c0129d07dd80347f4042a0befa0615efc012db2b9bfee86d4042a05d058140aac012e0f6ca7fc9174042a13dbbe71034c012eb8e6123a8c94042a07173f1d079c012f1674089909640429f56bf387e66c012df2d0899231f40429eb4d947fcbcc012ede21e76405740429cf26a063f46c012e8a963bc121540429b05965bbb57c012d85704dac16940429a7aaee19928c012d59cdc805a3f4042994e1cffa64fc0130a41159661a3404296b07396b6cdc0132ba7aacbbd7b404293b165f3cfc6c0133458e504b832404294798d4c50b4c0133265fdc6fbe44042960e37b76294c0134a65a6df0da9404297114b6a3f42c0134f47d4aae7a0404297eddc0cc1ecc01346e078c88b1640429947b175ea79c0134dba5d1130b3404299b0b46c9d7cc0136a5b4befdc624042996b3f55cdb5c0136d428a133ecd40429637711af54fc0138083126e978e4042943fa716d221c0138593743b9126404294e6031aa2d5c01397292ec4dbdf404293f8c0053e2ec0139ed5d418acb140429747592980c7c013b35d23adc054404295d845394db2c013c22750da6ba54042967d50964e14c013c549f495be994042942bd6e23e3dc0139c82c34f86b74042919cb71aded4c013a213bf71e7c740428ec1783eefc4c013af916c34c2bc40428d5ab5b6b943c013cf1ed673ae6840428c140e72e808c013eb99df1ff1c9404288cf93752c16c0141b5b2787c8254042869d678ae4dcc01418a80f5bc62d404285e2c1314960c0142262a90662e04042864351705779c014365d11a8f4d7404283ead41caae4c014554e8e3616c6404284070c38c874c01472ebbb0abeb1404282723cbbfba2c0147dc9d7fad3464042838b6242da09c014a68a6c2a1fba40427d9f4663b3fcc014d3a483cfd02f40427b2b2640d3d2c014e752361c8b6b4042788e4e41ac73c014f2eada6db906404278bb9b100017c015336de705aa87404281c24d0c4d41c015355b1981306d404284c84e876656c015716a5a2ab2a040427e199814e7cdc01591cf033b7c6140427c949531efabc015a747dfac674140427a1d2ce7fbb9c015a79601560dcb4042784b28bfb42dc015c17c23b45c8b404277b7826711ccc015d755955533b140427cd6bbd2c34bc015bdaef246590140427edd18db7f54c015ae30c668d1f3404281b1003fb849c015bdf73db107ed404286af648b5eb2c0160b40028ab0034042844d1d9da850c015e10188c12f3540427df2011ff6d2c0160e38f7d4739c40427a700479254ac0161961ffbe2a8d404277fa85d81bb6c0162f3923c0ad0d404277103005ce99c01634131c08ec8540427628e10c6c42c01622a221b108544042725c900398bcc0165567c050092540427521bdf14df2c0165932f42f4d8740427937b9a66596c0166cd49b2af1cf404279b399055b45c01678ebee6158464042785731b9a542c016812c058ed79740427a2b06afd8b2c0169941c6851b4440427a27310b2999c016abfa9768f06240427cec121fc5ccc016c74800b0e62340427a77bbffb137c016c8e2a2b32efe404277b72cb23aa6c016d5becfd663f24042761487383a7cc016f1fa2b3afd6a4042758839416198c017373abe531d9b4042767763681e11c01761cccc90aba440427525a73d8aebc01777859e5c6e634042729558b77c2ec017818e7ab5308340427285e7f44e24c0179307ae4193c140426d00abdfcadfc0178e1e31ef3b6240426bf149cab582c017c3ef3489522d40426d0bdc934f8f0000000cc014129597bd879c4042cbca2647700ac01422ab53ab4dcc4042cf91e1ffb9dfc0141b21e4ce98a34042d14cd9823cdcc0141ff08e8cb9fc4042d21d586d20e2c0142feaeb81ffdc4042d0e37739ae89c0143714ace8df5b4042d23947d0b54bc014565875370eb54042d2f46179a034c014295ffbcf54f94042d0272530c4a2c014310f384e9d6a4042cdd787f5c707c0141fc06774ea744042ce2844de9284c0141b3c350f81534042cc36cdc3281ac014129597bd879c4042cbca2647700a
+40;Segovia;41;000000000300000001000000a9c00f8f4c35ec28bc404473a047e50234c00f9e42f8c570844044726287f94cf8c00f89f1428922ba404471c9c16c3de4c00f93abe5bb4a0840446e75f1d693eec00fb95b12cb33c640446b434f68a691c00fb26ccb7420ff40446966b7a4c775c00fd6f4a2762e7e404466524b9a65d0c00fd66038e99a524044646c4af4f970c01003ba53561bf4404464f4a5a85f74c010212b768c8a794044640bdc0e2ab3c01047c614298b484044659f05113f76c010628f7a4ab8a5404461f476f10954c01063518cee182a40445fb5ebc3ccb8c0107ba93ad4f0bc40445e2a8899050ec01096a4ba67a305404458d3dd97f62cc010a4147571b5ea4044584c1ce41162c010bbb613d6543e40445959b787d258c01102f9033f2d45404458429e398043c01143c8565f4c05404455580913d883c0114be69c1a971f4044543a4942fb39c011472c9d4a86c0404452e69c8e8df0c01150033d101a99404452d9821ecb14c011549d49b896f14044518d7f48cf41c011adb18a95df6a4044511428fd8b6dc011b03cbaa408e74044566ee043b345c011bd1de282db5640445a63daf2f7a7c011b521c6be03cb40445d6420f19229c011b979630fbc2d40445f06733f456ec011e535c90711e540446327e0c6cc25c011e3ff9235bbe940446432089513bdc011ed1e2a0c98eb404464e9255d879bc011e488e28102e440446667f73fe7f8c011f99f850d67ea40446ab0b9da097fc0122f805db36471404469ab822cf408c0123a11b93af49e40446b0d02159dbbc012330decdb3db340446d3aaa1ff99bc0122053356d5b5f40446de7f797f3f5c012242929f87f8c40446fa9f3d365b2c0123cfe9876d9d1404471637f4b8fa1c01235b573839f2140447427cfd70728c01243f1c521293d40447a64baecc7e2c0126d4f586908ea40447c4349315d82c012780fd5b5ff8140448077ad2f3c73c0128d9bac18774640448401d774e041c012b87597e54218404486847343e6d7c012d020058c8f79404486b623167450c012d9d336622b88404487f2f82b5b8ac012ddb5891f8a1b40448929b28badf4c012d41f13f5080840448b5cff77107ac012df1d402cc0d440448b8539632ba7c012d711ec9a253940448cb4f016fecac012e5f35a21abef40448fb328d2c342c012ddec3ab7722e404490fa7ddbb42dc012e2fa26c48751404493f85febab93c012b8e50d1bad98404497c636ddaf15c0129324a1b12665404495845453fb66c01282d185d552bf404495dc9fbbfb21c0128b9fc3990b4340449865cea445f9c0129a3d767a7d164044999d02ba6f7dc0129a7bce1b703840449c5786cb46f7c01275ef5062f77a40449ee50d266a5fc012650ac0c5a4dd4044a1d03e330decc0124ba7b600c73f4044a339c7f7d0ddc0124e5ce259260c4044a476788adecac012686cf520d3e04044a6bd61d13c85c0126bac56e08c734044a814f5e620b2c012632c75b267504044a908fe678abac0123cf7fe7634874044a6ad5c7587fec0121d50c0da1cb94044a919c77a3026c01205822c6a97234044a7d85ed59232c0120010e0ab84874044a684452da066c011df034aa707054044a5dfa2db6a52c011e1d8071b2fe54044a8c34f79d49cc011f9c38f2dd2434044a9c7cec75f0bc0120494953cac734044ac70edf6349dc011fc9ba87029bd4044acc01c76697ac011fbce2795c6264044ae95246155a8c011ef9e100fb1684044aef354a537a2c0120fa50e0e57ff4044b2718a88fce1c0120f51185ca9604044b46fb13ff5dcc011df652f624bd84044b4dfaeba1acdc011a478662965e64044b887e73b493ec01175ac34eb88ea4044b7ceed58b376c01173170db8a54e4044b99753163021c0114fb9ce426db94044b8eec286dee8c01141053c887a154044ba41193c896bc011149d63a004e54044bb0b042ed296c0110b5de2aba8b24044b9acfa1c6ed5c010fe31575d566a4044bb25c4149767c010ef19322289654044ba559597c61fc010a21e1513e3624044bdb572168ca5c01091e7ae60b7364044bc26de1d239fc01089c799313ee84044bd27dd701954c0103b6d76ae90ab4044bfa80d450cfbc0101c0e88eb06db4044c2472bc57812c00fffcdcddc49f74044c20fa813afe1c00ff36e9d8ee90a4044c72b6a19acd8c00fd867bb83acd14044caabf417c7fcc00fb5eb306db99f4044cb04bfad548dc00f9fd78460cd4b4044c9665ad72ae4c00f26fb105fa7394044c6a149a04bd5c00f1614c897918b4044c42297623a66c00ef18e2354fff34044c42837b75166c00e974d2d8de05c4044bd95ceedd31cc00e4d16f223b8304044be30d1750e5bc00e62c1e7492d7a4044bef76e9b0214c00e6e2882cd71b04044c3254aea566dc00e212795f118874044c4dade976958c00e2873e60967664044bae642a1879cc00df3fe837e24494044bb03fba4c8efc00dea761c1999b94044b9b34bafb46cc00dd52ff5cd32604044ba936ddda07cc00ddbf7b8b3bb2e4044bc2558d0b7cfc00dca2d20dba8f04044bd5692d402a1c00dd391704cbb924044c241f7da7535c00d8849c204b68d4044c46bb48c97b1c00d5fb06370cedb4044c7bc412e9e79c00cef47e66263e94044c9e05057864fc00cded3d1c6283c4044c876b8f565afc00c94bb012e8f724044c85f011fee3bc00c883867695f844044ca3c07ab789dc00c5f12c90e04034044ca4056ee5f80c00c4e80188b89834044c6a87771c051c00c03f9251a6bbd4044c3bc47031ec4c00bd6619a2c6f284044c2ad2c0a416fc00baa1bd073a8f84044c4b7765922b1c00b63afc9171be34044c21584475e1fc00b646ae6dc4b234044bdca1146237bc00b4e7310f751ba4044bcf181c92991c00b0c7afbb88c684044bb7e8b9f0dabc00aebad5515e4a24044bbdf8ebdbfe1c00ac9578646221b4044ba6e85cb16d1c00aa49b6599036a4044baf8e4d466b1c00ab82b75936ecd4044b9bd5bd6149fc00acde37ce787394044b28b18cb309ec00aa23d382263e24044b0298fa40004c00a2d5127cc08124044ad2669137282c00a27975cf5c6b94044abb7ba58a352c009e3ecf82a377c4044aa46c1fb8d80c009e51664ceea3c4044a8c588777fb6c009a7ca6911b3d44044a743923735dec009e956c27346634044a4db506206f5c00a08bbbdc1fe234044a112b35ec53bc00a31b20f42795e4044a150602e82b9c00a34c12b2e011c4044a33454880efac00a52436b424bde4044a103d7a8147fc00a96c6be3fec2a4044a180c30d4a30c00ab0d861ab6baa4044a06355bced53c00b473a60c660c54044a15c1b5cb063c00b5238562a25904044a2f81ff2f5bec00b4acc6bf63fb04044a15edb286b6bc00b322d3fff1e844044a094dce6a05ec00b2f147648757f40449f22e45daf80c00b401fa19fbc3840449df94d4b03d7c00b384ac108374b40449b57ddde2850c00b8da07aabba2540449b9046c5c85ec00bbb6cb478061040449779218797c2c00c00b2bab0732e404496dca0456b81c00c230ab6811fbf404494d99b7aa2e7c00ca96983f48e2b404494a96b9c8ecac00ce8dcf0d3b49540449314283188a0c00d6894aa1b9cea40448b18d798bee5c00d94d95f9c0ba840448a7aecb8d903c00dec73ab1d7a90404486ddaf5fcbe6c00e403ce00538d04044800a37f87b0dc00f1fa6c446e3b740447c0925fd846ac00f5fc414ed4cf640447707e677dd76c00f80eb6c977a54404476add9390e36c00f8f4c35ec28bc404473a047e50234
+39;Cantabria;13;000000000600000002000000000300000003000000f5c00b9a4624406aee40459e354e581f1ec00b76ca94fded4540459a67f515daf8c00b7784c14df12f404595e0f2265634c00b5742e433cf444045911080b22843c00bf0ccf6cf65eb40459121192a487ec00cae9e0d57e886404593c3bab742f0c00cd40e9eee061c40459327532d4601c00ce64ba008ebda404595b2c7771149c00d3548a8cc78a54045972c5057a8abc00da32d8c77948440458ee2189b4ec8c00e09ff5d652d4e40458cdec5b54dcdc00e0e5d38a675de40458ae2c9ca7515c00e1e96932151d740458a5a83acfbd5c00ec6aeabc6e52440458ace4faebef0c00ece4509fde34e404589dccc2d596fc00ea776847ce3114045882b76098b5ec00ece68ba0eeb3d404585061008fb6cc00f203f8300589e4045855a8bbedcedc00f462addb5638c4045820f7a647db7c00fa611864b6f5240457fbd3d021402c00fd343a1da1eb540457af04cca9a29c00fe72015380f554045768a2d66a6bac00fc943eb9acbd1404574aeda918f13c00f6fe7f6ec277e40457514db4603bdc00f8035d12e6c8b404573d0ccc5afbcc00f77e56e8442194045732625bb72d5c00f4abb461a493740457631a95ad7bdc00f215608b165a6404576764eb338cac00f195c6b54a68f4045797131792767c00eefcf413daf5b40457a37d93760b7c00eb9e2b14bce1c4045786710f72f5ec00ea3f8851d9cdb404576db844ef372c00eabd2de675c8f4045758373e40e99c00ed039d0dc2607404575b1c1ddca3ac00ef19fe38aa9684045730de6095638c00f44f5192d5ec54045751e761bd4e2c00f233c9e8e42704045718aaa7330a5c00f6491897fc60a404571c7d963f026c00f2ce8250f5078404570d8896c5877c00f4fc967e8719a40456e1c6a34e348c00f0a278007de5740456cf18a2859dec00ef2273523226e40456db33b08f322c00efd921574640a40456ff8496e443dc00ee91c442e582f404571df8cad77f3c00eac0c0f690fca40457047e84592f6c00e9a52e9ee010d40456f2f601fa562c00eac31218b151d40456d1e758e1901c00e89338ca7f73340456b1131a75327c00e870bdeb9110c404568159a88a44cc00e96a4c060a529404566410893a25fc00edfa9710e4651404564b5228c1c03c00f27d354a64a84404566fb1711585cc00f342c023c70494045650722bec6d1c00f46fe3478d883404564aa2afd3feec00f49a1912c2f2b4045625a762fd47cc00f71d86f983e5040456322647d71e0c00fb9bde01fe5cf40456119c3758b1dc00fff49700b80be4045626de5ae1199c00ff8dc2f269a5b4045664449b31ec9c01003a3f5123b4140456a6b8f7245bac010154755f74fd0404568e07528d494c0100e85f6c6e8ab4045673760290a91c01021b5ce3ece034045668f963bfd43c0101e96079c5f25404564e86ed8949bc0102f34be67731b40456494872d7db4c0102f38006edd2540456226852faa3dc01037ca5ba5ba87404561b6f0b592d2c0105369d3139f004045617cdb36b6bbc010573a16c0fb77404562da2592831dc010608fdcbd96e0404562fe8ce79e4fc01064e80bf60b124045654900285db1c0109a27f68b847b4045650b5a86df2dc010bae22296d033404567bc4ca8606dc010bcc1bdd004bb40456931c95b7e2bc010a1dc9016ec8940456b329f286899c010900f720de46f40456a2019a81429c010810ab28b830140456da7b5640313c0109494bae2948b40456e607bc50c28c01099b87f853dba40456f8b49526202c010cc029ee326f940456c13312ebaeec010db1c7df6363940456c74c20d9ae2c010e705d614048040456de9c0697850c010ec4c52adbbab404573cefc2d73bdc010e3cb0d267b8d404574934bc41b1ac010f2b0cc3b2c7c40457584fa503db0c010f40b1eb0def540457a21c25d0742c0110ce42f2dd9c740457b90345c0e5ac01164541671755240457c7752a9bd76c0117e51d103125940457f5d75736c00c01197a7d8b2c54b4045847b33d2eb4ac011ca4c00f0a7034045877887299946c011d928a06e5b39404587ce7bd0a846c011e6c1352dce09404584f37b466128c01215c1e169f069404586158bbc7b0ac0123ccc79da7b50404582760a9381d3c0126cfe3edfb9ba40458488d62a1017c0128edb5d6f83014045821836cdc774c012c30bae678f8f404583636ea2a895c012e65ef42c37414045824907140a3dc012f91ad7941d7c4045836745bf26f2c012ef7e9eb048a24045858479d11622c012f5d084811d66404586ce363f934fc01310708839861a404587138c576f5cc013113e1e7c4a874045898f77c22e64c01355364036847f40458d0b2de86801c013585858e5271540458ed0be269f5ac01367dc165aa42b4045901ef606cf4ac01356989b28204140459427bc7eee3fc013682d52b84d7e40459620accf3ca5c013646be8f61205404596cd2a23d9bec0131db0cd11ec1240459896228bf110c01304608ada391c4045978d4de02184c012f05b125b8878404598291fb3fa6ec012f22446b9d65940459a7cefc6323bc012e250d1a9ab6040459d60a1ff2167c012ec7cc12cecaf4045a0f060c3c2c1c012d2fc61dd37204045a228b7cf64adc01286b9832190a74045a22fca8cc565c0128bd1243934184045a343aa41e608c0126e256a0ba6414045a6399be0a44ec01235015b6397c44045a4b34bc30839c0123082cf97713a4045a26dea9eefc5c0121813c9a53ed84045a39b13e03a46c0121705acbd37da4045aaf82b754eb7c0122785b70e9f804045abf6f3177579c0122328bfb42ce64045ad3655a330d9c01228e0ba9dfeb74045ad9389ca9997c012202ead119b894045adf78a7b18a5c01223340bf62d6f4045af10265e0da8c01215a8fbbfdd034045aede19a41e8dc0120ac0e902a73e4045b0d11b38f41bc0120bc64ef31c064045b26367b6fc09c011e82094f5f0de4045b2a181d02446c011e3c9f3177e104045b1c915972fccc011a8a113c799434045b2fc15bef2dfc0118a46191c8f364045b299060b5cd6c0118eb33bf0e0c24045b1e8edfbd7b9c0115cd742fb04f74045b3f39d32cdaac0114fe484933bf74045b2148d91dfa3c0112c5ed4296b114045b29036aa9d34c0111efaf23de4564045b1a9deba79d3c010ee8a60d2b9dd4045b345f71437e0c010b36e9248b1394045b355ba73d12bc01072086f6dd4a34045b59d4de82f18c010532e73fe20fa4045b81af0510b61c0104f36342224204045b7260ef2e20bc01039c01da30f4b4045b77c6c6f0b73c0102f678e95c0ae4045b8fb8090197ac0102cf9ee20b80f4045b7e39c765c98c01021e70452ed5a4045b7c741ccc2d6c01015b0508415be4045b971e1cf685ec01001cabd5b9e3f4045b8474e7de762c00fe14fc666d7254045b92248bd91a4c00fd4595267e8034045b86e9a2b53b0c00f9079d0f3c5584045bc4e96f3c456c00f40634219aaf74045bd29e025668fc00f22f61ed5ae1d4045bd0e98bb0891c00f28d3b9ae95894045bc440a3f8dcfc00f07bcb3f257c54045bd7d13e31d02c00ee6e42b9f51504045bcef9ce1debec00ebddd65d4cead4045bdf3718926a8c00eb59332ef8de54045bd3a86aedb4bc00e7e16582882784045bf59f37571e1c00e4818d75ec37e4045bef232e4fc10c00e4b513881d1a64045be3ae7a378fdc00e3a3af35fcd5f4045be278495f3c0c00e4771c0b795af4045bd04ea622b66c00e1b35ccc924804045bbcd10d92ff7c00e9a4a8f92a7044045b9d07651b852c00e84c9d768cbe14045b8efb8e67729c00e9f12c1ac3ae54045b8a4b5d31c59c00e856f374dfd994045b7efd32c625fc00ea53ebb62d3454045b7b3387c1d5dc00e6e03d9c319344045b6930be52a56c00ea1ae2190f45b4045b43978f8f65dc00e92678110024e4045b4c36830513dc00e7b23863961ed4045b263c3e9fa30c00e21e084d454704045b3f8ca7290a8c00e74fe403752a84045b2b8e87642f5c00e85c3baaa60664045b42ae9fb284ec00e758a90a362014045b56f8eac0865c00e672948dfd3f74045b4aae2995f2fc00e3babfd5a9a674045b5e23f118530c00e5489e65976fa4045b752b951561bc00e3554bf74f5764045b986c15ec953c00e0c23a16fd1cb4045b95cd115a095c00e19a0451e31084045b792a1425a6ec00e0ec7e22c5a7d4045b71eee355adfc00de437824d4cb94045b73bc8df6897c00dcfdb811a9cba4045b8a12c3737f2c00daccc632baf974045b4a43035fdbec00dcf450361abba4045b8c2385ec12cc00de901f69ca1594045b76824728c4bc00e050f873a241b4045b7befdbd6bc2c00df870485649d44045b9d6f786676cc00e37a9a3ec9d934045baa6c95c43bdc00de07f917475e44045bac99df2888dc00dc9472821760c4045bc9e2ce27262c00d72fb23f82ccd4045bd30fb170476c00d2892680838444045bfd6815681c2c00ce4f7c83cdef24045bfe5417a6b23c00cb705f971cf024045c1bf68f8b454c00ca0afcd7c63ee4045c0d52cfca71fc00c5ee9ab4c40ee4045c0fc8b543a1dc00c4f18f261a9354045bf28e440c2fac00c1ac532d8221f4045bf010c42612cc00c1df535990b774045bd79de8cd784c00bfb8f355667db4045bc72715f715ec00b727329cbdeef4045bb22a9bcec1ec00b70328f495e9a4045b87303b64b8ac00bac31433b60764045b827e75c9275c00bb841239cf95c4045b8e8b044ce33c00bb7df1704dce84045b7e43cb5bde8c00beef71b4c59174045b65fbc9e566dc00bb563c6456b934045b7342f2f7618c00bb7bf45139f334045b3b439ff9157c00b99b41ede9b0a4045b7d0d95f34f8c00b66429e93b2024045b4e3ddbbee95c00b4c0f50c4ad5e4045b5a78a3d5b2bc00ab2f417f2ee7e4045b4d1ed329de2c00a960efe28421d4045b5a428626392c00a90ecd39fc7284045b38e9f05a56dc00a6f5b618330554045b471cd79e846c009c7a35fe361dc4045b27d9eda53d2c009ce63358d08454045b19614fd9babc009abad75d5ab544045b0cb8a08125ac009be4c56f93ea44045b10229b2ce41c009b1f40f4223784045affabf45c803c00934c10441ae214045aca2b1093badc0093273b24bb98a4045a8de4d3d4a8fc009423465ebcac84045a691a403f82ac0098bb121c2eac44045a633a327844bc009acf3a00681604045a44d39fa4cb8c00a1dafbb99f4894045a5e409343135c00a5437cbfccbcc4045a52ab0f8dbcac00a5c0ba0ae470c4045a67f2aa2c0e1c00a96e9c6d000004045a56f3d4d7100c00aa8c417b643e44045a6a3f09779a7c00abeba14e43dad4045a5aaf7e189afc00ab56b95fb29824045a3977fcc469fc00b109506731cea4045a29b57699e55c00b2ae542a936b540459fb62d58d3adc00b4f0454674f3540459ff8c99bd113c00b4cdca3a6db1940459ef2397676dec00b9a4624406aee40459e354e581f1e00000006c010680276f5214c404565991b447f0bc0105ba3afae3f2a404566710046298ec0105b00e5d07647404568c5bcc95ab9c0106de005974c40404569f21fe4ef25c01073f1170c949740456879a9ab1addc010680276f5214c404565991b447f0b00000004c010acacd83abf19404567e1f53d8445c010a5778fb72046404569009e4492f1c010bb5f6fafc3db40456905fb5fbadac010acacd83abf19404567e1f53d84450000000003000000010000000ac00a6faffa5922064045a10e8c16c68ec00a1f0f0965e2e74045a23350ba57abc009fe5038db1b784045a13c34e26873c00a04212024fd5540459f80d6cc7760c00a2a89037453ba40459d777473cde1c00a27b62e027a62404599f5c1ee4c7ac00a474e96bbeeaf4045993cf3ed335bc00a5fe075badbf940459a5ed78243a3c00a575e54e3cbdc40459ed4c34ea761c00a6faffa5922064045a10e8c16c68e
+37;Salamanca;41;000000000300000001000000ecc0164ae977c21d364044395a8714dcb1c0163d62206cc33340443b3d9518cdd0c0163e62d663fa5140443d11961fbc89c0167db5b728ee0340443b9dfaa75092c016a0500fb7d8f5404437e91fc0dcf7c016c3c723e2d59b40443603e2986613c016b6b90135569c40443189bf3bbf9fc016bf80a29f1e37404430174ae418b3c016bed4f0aa191040442d7cba9fbd64c016b12f1cb451e940442c9cca8cbccec016db765e5eb8a6404429a3a058a589c016fa3fb40ed49e404424f978c120b6c0170f59e183fa32404423f090c3a985c0172c2e103c40d7404424b2be6e3a46c017357f49e22148404425f53816d8f2c01720c295801e38404427fe8d914504c01732856afd3dc840442d47b2af72d3c0174970f1376dde40442c98d6e8a6ebc01763757b460b41404429fd71e5f66ac0176b7f504237b440442b4fd6cb0601c0178a4a268c283a404429bec2b9df9cc017ab2f97ea8f4d4044238b9521314bc01805729460e4614044271663f604e6c018140decf502c44044294c67682a47c0181066a8d6787440442b8eb25fe417c018356a46f9415340442bb7ea2d96f9c0186c40ba967a9240442dab78897e9ac018545af7c84e0d40442e7db9897910c01858667b67b2f64044306351d658dfc01849e337612f09404431894366984cc0185735d3293aec404431fba1d2df47c0184321f1168325404432dd1afcf54ec018849780b20e7d404435dc5ec803ddc01876e9e09511dc40443885df86158cc018968b86e4e9ad404437d2b8a7af65c0189e33141854a540443a2e60071e24c018b8c509c60da840443b2939ddfad0c018cbdfbbb4430b40443dacd6e9976fc018f5b1afd4b33a40443e30a150a5bec01919ef17135bc340443ab0a75f2170c01960ea13623b12404438acdf4f3901c0197652d6557b77404436104739bf2ec019728cf6843c774044341b6da4733dc0197b1b766cdd934044338289fdc53ec019ace0a9a37cf34044331beeef9d99c019c232b7376446404430d786f63a15c019c0d5a99dd14040442fb70476e5c3c019dec3a6b35d9040442fa83f485924c01a2527a5b65d7540442c728078e9d5c01a3ddc374df50140442a1e46f2adb2c01a424ca0307b624044284540bc5dbfc01a39860eb3883f404425382d9f5bb7c01a591c4ad326c8404422a6fdbd270ac01aafdff83c80ff404421b199cd6876c01ac2b349c3ee5740441f0f9078ab04c01adf764ad7611d404422766f5fabafc01b017a83f71268404420071b25280cc01b05bcac297a5e40441e950b5b6410c01b224cffc09d9e40441febf293162ec01b35693429b0de40441ff18d24daf0c01b3354bbf79b0b40441efb438b4dafc01b3a0d5b883bfa40441eea270beeb2c01b5947e25b991d40441fd1cfba81b6c01b7590432ea8e04044229e141230afc01b74a8c71a4186404425e95ce19395c01b4c2c2cc879c64044294c1aad21d9c01b2d3e23626bed40442a15e3f1456cc01b2c82447992d140442d943a5464b2c01b1fbda4aa889940442ead941e15d1c01b56d57bd925874044343e4f710175c01b661643d30260404439ee00b98e57c01b4247de90ef7c4044403561a3557dc01b2e1bd389ef1d404441866ca97f1ec01b382e6faa06fb4044449bd1c4d0a2c01b340cab816ffa4044467afd90feb0c01b6118886aa5c44044486e9eccbce6c01b59aa12850a3840444c0f88ba8a67c01b3b431107f655404450941a1e0e5ec01b2cf2746263b4404454b1f16348eac01b38cfbc269d8a404455976862a624c01b3e79dffc0fc240445bd12262e792c01b4c69a4ce19ee40445d65fc4ae11dc01b532596927e1d40446056667a43a5c01b44953940461f4044668cc982fc86c01b4df1ac6ef82040446bef448ab844c01b3383015a50b740446c94322ae449c01b3c2a108e875c404470e6ce7c608bc01b520a9ca248d140447141c9ac8f74c01b64d7e7880f044044734e78b3f0dec01b65614bf54bf240447657c407e868c01b70d0fbecb12a404479758b816cc1c01ba261b345b48d40447fdd8ddebf2dc01bafaf23885f244044806d3ec9e1aec01bb983528df4ff4044822697f395ffc01bb869172365bf404483d9488a772cc01ba911cc63cee6404484fb8fd6aad0c01b76bcba8e8f584044836f69174e59c01b3bc2c0af5d26404484ab3ea5b5bbc01b3c940d689e504044859f031abc9ac01b1eb7eb2d23ea4044889bd73f1f2ec01b04159cdb7ea840448d27de179a48c01b14d38d1f26a640448fedbf407236c01b11d608798ffe4044914e91307217c01ace26187621234044971726487a54c01ac1aef81cff0c4044997fba32c9e0c01ac48d8fb9e0a640449aaa5d544c91c01a9c78e736495740449e299fbd056bc01a9750112936f540449fb0421ab541c01a657e87f04edd40449f432670572bc01a5d95859660074044a0b2c9830db5c01a56faad96e2c240449ef4693e3215c01a48f7cc6605d540449e986ca45444c01a353146d27ff340449f647665fca3c01a2fd8f66a99c14044a10b02a5d545c01a1659621bfee54044a353e4cecc2cc01a0a1961bfa7664044a1c1dbe4e514c019ecb24db457a54044a2f0e85989f9c019f798d9108e2a4044a4910b46964ec019eb38571213314044a5ad22e7a55ac019e9046de7a8e04044a4cf49ae0db4c019d13635be753e4044a562c9eaab6cc019c809b60c41014044a45551425f43c019ac367e1ef2684044a43f34f8740ac019a8af9bf5a59b4044a3533b484ceec0197d360448e4f74044a4a577a06ceac0196388ac5044554044a2e12dfe7c2fc019454e8cde7dd84044a2aca8fe441cc0192fdde9d59c2a4044a0d2fbffaf11c019129aaf20f2f34044a0b7b755b0fcc018e695c21606f540449d264b65a670c01889ba1017e15a4044985e990c19d9c0186fef028a518640449b36e900093bc0184bd1c48be93640449b0c7fa88a56c0183f7f8376753040449c4b68cde392c0182fd750b44d7b40449ac0e0743850c018090bf5e01f18404499a9ec063ccac0181c2922a7e47a404496ed830bf4bcc01816598749a4a9404493df9f9e7c94c01802a0fd3b29a240449399f5d52ec6c017eab82781d7bb404496587181dea4c017d01f73407214404491eecf9680b6c017bc47ca9155a040449362f6e12e95c017bf9cd4d9d8f34044944707be06d9c017b33ddecc986440449657a34821b6c017a70c8515f659404496d3be9f73b5c017af7138155efc40449bec7286a79cc0179737c9dfa15540449e8a3210a6f5c017574444cad7a240449c3435bca563c0173c1c6d6b5fc240449cbb70a42cf1c01711b91b7b41d140449b9c1961e204c017014796cb10be40449ce8edbfb68fc016b73c17772ed040449dadec09dc81c016a6b2c962d75d40449f76ab5196bbc01689ad859af04240449dadf2aeab1bc0168367a0c57f4840449b73560bd8dac0165a0a5accd531404499e98a9fce09c01642a0edff551340449bc7e805264bc01612835b4fee11404498f15d5aa411c01606903b90be994044971354d58924c015f0e69c120019404496e4af0e1768c015eff6ea79fe414044929fd943fe88c015e11b249e9ae140449437a25ad5b1c015e852ae22bd9b404496d3495decf1c015ac2335edab48404498054464ab48c015a16073aa940b404497c184e331c7c0159618a7858453404494dea5788635c0159b307966eb94404492eb1f2c59eac0158c40010823f740449163ac465e4dc0156e5e306a89954044920d4e744ea9c01553d02c30683140448f19eec2daa0c01543a1ed3ef6fb40448f3ea690c557c0152f6fe8bd909240449090402ddc4cc0152991a0039ea4404492cb8cb969f7c01531c9fe3b59c9404494d56d9ab828c01526df4f6c8aff404496b28b4b2ad5c0152763f4712b9240449909ef240713c0150309fb67a6134044999237968071c014eb1ce08b708c4044986343a9198cc014df75064d88304044946d4a29de90c014d4e91887e1364044955a4930ba4cc014b7f85758f12240449569df6cb78fc0148b703ec628324044926ec7dcab9bc0147fed726ff039404490e6da8a4fa5c01484440d42802540448d7d03bb0f4fc0149b0887048dfc40448aec539f5331c01497e32e0d2e92404486259a3f1729c014902bbb2af508404484c47809d1e6c0146d29e4a24deb404483c69c3e0618c0145bff502cbe2440447f918a523a1bc0146607df13ee9740447eaa34d66541c01462c946ca2da540447d3efc346e72c0146b5b8152726040447ae99aa9cb27c01482a9c0584a4440447a207d344467c01471f12e11468b4044753101b7878ec01475ce5301263d4044738f27926290c014852cfb83100d4044733dc934f8eec014a7bd784ea3db40446f27365413c3c014ad03354fd43a40446b84f090dd6fc014a14035244f154044697c8b724ab2c014a5620a7af1fe4044683141e5ed49c014b5e48f725f80404467130bd847cdc014bcd680d5a869404464f3e01f6d8ec014e03f72c2d15d404462f0bbbd388ec014db9551c78420404461007b431feec014fff13b8e6de540445f16b96ebae3c0152bdf3b30cff940445aea01b7a153c01550a5109296be40445a4b417630cec0155940eb68d5684044583a116b2ec5c0158ab53f33e9df404455f207686dedc0158b10eea98539404454e87111a9e6c01576ac7ef9853d4044530b053f8d93c015838001b1caad4044529f69319cdbc0157e1f7eba3408404451c466706634c015882525311a8840444f751383d198c015ad6fe3705ae540444dcf8eaf4107c015ca64c697ee3840444a301ca8574dc015ffa656e3b3e740444a716f36a231c01600e1707b70c340444c75feb91cdcc016109c7812ada440444aedb6d68522c01610af9e2c9524404448ad8316b184c0161de0c6650fe1404446b2a69d8584c0161acdb7e1e1bb40444547fd4b2b08c015b96c1994e2b84044489b1cbe1e2bc015b3c4dd3f35cb4044473ff7f044aac015bbda39bf35d8404444387343c47bc015c9b8336b44fb4044429014035befc015cf37d30017a840443f3e697f1704c015d90a65d6ebd740443edf2d95980bc015de56d7c1e22740443b64979e05a9c015ee22f30556e940443a746bfc6c3cc0160a1135069cfe40443b59586535a9c016125976faef5d404439f7e0818a85c01609f11e29a58540443821a185a140c0160dead65e57354044363dbf7598abc0162dd3c25f608e40443627fda89569c0164ae977c21d364044395a8714dcb1
+36;Pontevedra;11;00000000060000000700000000030000000100000100c021a934437e84ec4044f349677aec0dc021ada5b292cb054044f17376739390c021bd014c976e834044eef43641ca3fc021c3848a01bada4044f0c78146c514c021c2dbdccee7484044f32d70a4607bc021bf9233dadf1b4044f313f6999c41c021c389ef46632b4044f3481c72ec20c021c0c345d4396d4044f478ccbaae3ec021c555c3ce42e64044f55bef6c2b6fc021c6f0e8c70f854044fd1e0190d75cc021c0eeb84034094045004cbba30c68c021c791344dedfd40450359391b1879c021c4966c9c1324404504e6a1f13d2bc021cb22f863baa14045088d59dce291c021c87e2620a61340450a871a033f03c021cd2595ef48ac40450e5f689f9576c021c2df5f6df11740450e1bcf876fd4c021b40a895fa9784045106b8d710617c021aea92a16902240450eac92519e25c021a6ee5e283a9840450ebae4fcde27c021a3e8a32849dd40451218a35a37afc021b1e785a488fb40451308c4dbcdd8c021b34d4f13389740451408a824f7b2c021a51ffc970c434045141b3ea4196ac0219fc3a05347254045171584837f4ac021a1c42db94325404517fed14e3337c0218f0ff983755140451a103dd6b66cc0218cea7e63883b40451c6edfe98186c021837480db5cb340451cb166c643d8c02186c69a02cb0c40451d88a5ad9b7cc02180b68d4de46d40451e1196f8a1e0c0217aca0a94725740451dc6d73f6c7dc02181966d03276c40451d8632c16abcc021807de9c35b3d40451cd4e7945f85c0217b1d56ca5e8040451cf74f3fb6d8c021779ec74d536840451ecd39cd33d9c0216cebca24372840451edadb653861c02169f57935c353404520d5a9a66846c0215a8494d8475d404521d6d37884efc02152881ad24f7f40452477114a6667c02138c34ffef979404524cd3c84fcbbc0213df1a628a6c64045252ef6baa956c0213a80b890ef6c4045264af1647590c0213f59c9cae4c1404527a9c4ae8a06c021391a0d13dc23404529c86ea8431ac0213946c3efea9b40452c2fc3e18586c0214607f40ca42040452c7ab0913e12c0214a62093d1e2140452b2bb4aaa846c02145c212673e5c404529cb0e95b3cbc0214f7ce56a0dcc4045292dc0a4edadc0215314dbc06bd2404527d3440c6bc1c0214dc030e5aea44045261aeccb19f0c021611c3f7bc0ec404523d72d8e589ec0216cc90586c16a4045234af73d415dc0216f3499dd02c8404524ef3d37f771c021702293b9ecdd40452401c0e4251dc0217684af8546db404524b256ce5cb4c021798dbcd2bfe7404522b3b7ce9f1bc021882453c7526640452111a837dbd4c021917998b70a5e404521a5f1118bd5c02195cabd05b80440451f883c73928ec021a0b04e199c11404521356b6f9847c021a8693a925e4d4045201c813323f8c021b5dbe73e5f8440452175e1f9afafc021ba467cb37c3c40451f8df58371b2c021befcbba7e15b40451fff6158a44bc021b63184b256d5404527a7747f1419c021a9c7bb95edbe4045239877859d8fc021a23c956dcc1d404523ac0dbec943c021a57e81903872404524b1b3633bb2c021a30a0b358207404528215b7a2435c021a764b8dea5b540452ab73e8e38c6c021ada6afbdd97b40452b686f79a44bc02199c4ed409be440452b55c21606f5c021950ed86894f3404529dc6f4c6910c02182914bfe6c6940452b82722d107cc0217945c5537e24404530349ab19c9bc021690c7bb95edc4045331315cf7db5c02164c4ca74d8c5404532619783ae90c02161bfcc10edc24045333f3e059690c021658e10d7f2234045338b46cbfd81c0215e928267e88c404533c58f6de909c0214e3d9ad16346404537625620f3ecc0215a719e3921c6404535d25a646950c0215eea138d2e2f4045364bd1dad3a1c0215ff57a1519ee40453806ccf25059c02163ef0c3ccf3f40453805eda67257c0218ca72e3550224045319ee5e532dcc021903ff7b42380404532a4680dca32c021a06af7d6cce7404533598661b708c021ad8499b5d1bc4045312fe064d18ac021bac35100ac2b404534a3902c4c53c021c30a491558e940453519c0aa6e6dc021be0c29145c95404537b6ab22581ac021c3e0ac8638f340453a375324258bc021d315761a1ecc40453b310feb3826c021ddd948dc11e4404539fb9a552b56c021e222376b03e340453b51ab00d2c2c021dffc878bb63e40453d56853f3bf8c021d149bb4622e140453cd946fd2e59c021c81b7096378740453e4702af1818c021c798d0e9338240453d913904d0c2c021c40f0748b87040453e8e798efbf6c021c8991ca4aeff40453e8e3f68a0a9c021c8401fa2292d40453f55e9229046c021be44f47bbd66404540277e87780dc021be53bb9c815e40453f7652392a3bc021b7943034616d40453fc0b5cc4400c021b605da9ba8a440453c830b33760bc021bed85ef3a2c740453b16153125cec021bd261f9bc91640453959d496b47cc021b23a9085dadc40453aec08244461c021a3a850b06075404539d39643e87cc021a96a0683fda640453dfea8adefcec021a6486117c7f340453f4d0fa618e2c021a3274e6ff1f840453eb0e71ddbdec0219c52e68a6bb24045401a1dfd2fdbc021a2fc2181b88540454047a2068bc7c021a2f48646a2f44045427e14bcea46c021a71006b34d75404541f64409c526c021a07f25f24f60404543b471477c27c021a86870b552664045425ca7288107c021a6a8853c36e0404544f89563bb22c021ac369ba616de404547828c057626c021a6c9a94e39ec404546c11377116bc021a31ef9b7b3d9404547963691fc31c021ab73d6bc64cb4045484af67e2119c021a6d4dbed84b1404549f9fa109695c02197213446f34940454a3fb1e07c1bc0219211e78079b040454cbf66543f3fc0218b5fce3e336440454bef4c940256c02189846600bae640454da44448eb69c0218ed983ae39a940454e9c7d3facfbc02174df3ab88da640455576244ffca9c0217338ebd9d84e4045597a21da1a69c0216f4b2121c9e640455a6a29d70b62c0215b3ab01064b940455b16cec3c7ecc0214f5ae4f55a0140455c395474f74ec0214d4877c693ac40455d54e2b8fae7c0213f7815f7745240455b6cb0373fdec0213698f424a1ee40455b8a171eef49c0213329fa2d0ad940455f1e7b222c9ec0211cd093c588fb40455f7c8f972611c0211e9b6e639381404560e8e3dbd474c0211b5da2b73e5f404561726c258f7ec021114abe8c8f934045603af45d348fc020fcc6cab2c9ca404560d82cc78941c020f0d26b69a7dc40455f3105392d7cc020d08d68d624b240456083d145d852c020d44e004f416e404562200d77c8f6c020cc9ccf0332e6404563ed6ebac028c020c86ab9ee5eff4045636a29291929c020c8be8cd44a8140456509b3a612d8c020b59dbcbee2aa404563b05538d2c1c020a9cbdc3f8f15404565afdabf8fdfc020a92ff043db89404569e5877905a6c020af71797b274f40456a0add57f92ac020b0f6e27d96b840456b002b64eed4c020a90c09c5f3e240456bd087033663c020a62e24f8d53640456a6b9677b758c020a1db2439ac5b40456c44adc8bf67c0209ee2cc34eec240456a4bef4c7e89c020963ec811d21040456a30cf267f83c020996383c42b7a404568d1de599218c0208fa899891ff1404567caac565fb3c0208c5ee6841cca4045681048c4e23fc0208dc3242c85194045692b7f7b9c6ac0208256d012c9d440456b191e9b31dcc0207dd2a25ff7f4404569eee446328cc020786a1002f13b40456a9ad59b74dec0206a1f985ce9cc4045699ed7552ac4c02069783ad7cae140456a864279cd21c020710ca4edcf6b40456c11d42860c8c0206938605d7ca240456bf0f41192d8c0205dd5f1b9963a40456e190289b6e8c020473354c1227540456beb28d41adbc0203dc114eee0af40456cdcca45deddc0203bd34186074240456babfb4c783ac0202671887adab440456d395d25c254c0201ef1d5ce5bcc40456bf1613455fcc02020d8db3cc0eb40456b1d7a5767a4c02017f951a1439940456a6e048ef4bfc02006f56492f40640456cd384b75f53c01feeb21fefabec40456bd1757123e3c01fe0210c25637940456cc224433c7cc01fd35c7f0f883c40456b7ccd83df7cc01fec04019ff0d6404567d9f2e9dbc0c01fe9e48e099886404563ac8e75c678c01fbdd1bf723dad40455eafe64ca5a0c01f772f59701a0040455c3dcd19679fc01f721a2f3c69d040455a64bde4fd71c01f92072a270133404556bd9ae90296c01f8cd14dbaf3de40455497c27a9f95c01f91f912c8510a40455097cb521236c01fad5630c1c76940454acb2b5fddbfc01fdc0cbbadc93140454886d849b635c01ff84e625b0b61404549479efb026bc0200989c87c6c494045456773f9ef3dc02018cc79f44062404547072a4511c7c0201e66c8d0ad9c4045463b6351f8b5c0202e5572a335a5404547649aee4735c0204b2e02134d074045463adb913e5fc0205904250ee963404549367382614dc0206f66ccbdb3554045445577c79df5c0207a4bcb7ce2f7404544edf0352924c02087080eb9a39d40454349917faaedc0208cadad330fb34045411306397768c0209aff34a8ff1340453ebf30ed5dbcc020ae54bfb1169f40453f0710c29259c020b48aad87510740453d899eedc9fbc020bb917dec3f0340453e6169020854c020af1d36adcd3f40453b9c1f67c6b0c020ad30af3095db4045377ab543d553c020a120df513c67404530c40a4a4a96c020a6250f1ced3b40452f4249a69226c020a28a2c71d69040452d9b1679f293c020a63f4293abf840452c2a81a075fac0209c478f8ba3b840452b84959dd8e6c02091d1f4f72fc4404528a906046221c020861ef1f76d794045285e62cc5300c0208bb9f127f5e9404524261ea4d32bc020877729be509a4045205dd0d84198c020757bd22ad20840451dd0b17e11d4c020682a5e55ff4440451f4c4de7d09cc0205302521d61c440451f4ad5fa7b90c02058686ec31b0c40451e1ab5ee8eeac0205447394f81f440451c5817546ba4c020627060bb2bbb40451ac47f138f07c020597c5f6e71f040451a15dd9354c3c0205a8af1715818404517fe077be416c02052c69e122cdc404517360ffec814c02054ab065c18384045163adb8cf2dcc020723f3495ab454045111200da2bc2c0207e1c59d2da2d404511d0a2a0ba87c0208335a71aa5624045114c3e0d121ec02084b8c5e2557e40450f7da82a08c6c0208c7a2cf55f1b40450fc826f5b829c02099b916c8aa9040450d82761c3bf6c020a514dc85fd5b40450d0ca1fe30e2c020a9eea053947440450ac730289a5cc020ba1b9b3c061640450b8d1d8a5483c020c317ee809e18404509e4287e4e65c020cf0df569aca040450a4be638eabfc020db4953860ef94045093ef806fc0dc020e3000ea9cd2a40450a9d8fe22492c0210c0f0092bbca40450a0aa81c0ac5c0210d0eb069613a40450840fd8bb17bc0211d0c8fd2bdca404506945b142b64c02142a5a1a9774c40450665cb17e343c02150c356816bfc404503ecba5968e4c02153b68e3e69144045004861764535c021797c6b1327024044fc1cbeee7901c0217e8f4ad88dc34044fb20c27c55abc0217de65d978acc4044f95dcac12edfc02182bf26935f104044f7a816454cf8c021a934437e84ec4044f349677aec0d00000000030000000100000004c02192d4748bee0b40454e978d610d48c02193cf505727d240454f61ad50fdecc0218f81d307012f40454fa8da7034aec02192d4748bee0b40454e978d610d4800000000030000000100000004c021b1af1762d0b940453dadeb06040dc021b4cf617c9cb440453e8ff1bee36fc021af1410bf51204045401b1c5b5567c021b1af1762d0b940453dadeb06040d00000000030000000100000010c021be568b04b3f840454316db3f3c92c021c37bd77807b5404543dd3cfa8fddc021bdfdce43e7ae4045441b46fefe34c021c27c95856b6d40454527a5dadf4ec021be4aeae87451404545c0af994674c021bd72673f6e19404547cbccbab6d4c021c2f09734edfc404547621ab207fbc021c8a91ab85f7a404548c37be6e767c021c0d87b8a429840454995e972053dc021bddc8e4fa84e40454833bd91f15ac021b635a5d43a804045487259681501c021b9cfc49b47664045469de6e82362c021b648fcd1aae1404545fd8394dbabc021bc6a78d5e5e24045458d57296532c021ba4534f101124045435fd13668f3c021be568b04b3f840454316db3f3c9200000000030000000100000004c021c8f4a5b767bf404518671e87aa85c021d34ad9d42d7b40451907a4d1a877c021d331e85a71e740451a5c11b93af6c021c8f4a5b767bf404518671e87aa8500000000030000000100000007c021d3dd1283ffee40451b0d7e6dc429c021ce9871032b0c40451cb729be509ac021d409116e08ea40452031f97dc108c021ca7b52c2d6bb40451d1b792280b4c021cdc95ab0027040451cc639b162cbc021cc66d4a8ecd240451bca2c9aa3ecc021d3dd1283ffee40451b0d7e6dc42900000000030000000100000007c021e0bf1452726940452d75ac2548a0c021e58751ff8d5040452e3dab0cc4c6c021e058d1caafdf40452f71c2945379c021e3e5d91e7afc404530ae3e098395c021dd3e319c8dc9404532f98bb22557c021d79a6387d38e40453327ffd6edecc021e0bf1452726940452d75ac2548a0
+34;Palencia;41;000000000600000005000000000300000002000000f2c010ba76202a38fa404568f3dfc64ae2c010be54a4b6c7ed4045689979747153c0109a27f68b847b4045650b5a86df2dc01064e80bf60b124045654900285db1c010608fdcbd96e0404562fe8ce79e4fc010573a16c0fb77404562da2592831dc0105369d3139f004045617cdb36b6bbc010702ef49b591e40455defc0e50474c0107ef6096d4d4740455e3ad27fd056c0107fc609c2aa124045603628188088c0109472bcad674f404560526dd1fbc7c010bdd5ac220ffe40455e3b38813709c010dfd14d6da4a740455a3311cbeb8dc010fee589cbe002404559646ab46509c0110736046b410e404558140c110561c01112106fed5663404558dde5bb7d92c0111117f0032a2440455a4723f84f29c0112c351d9918154045586f5262115cc011285747061b45404556d2ff78bdfac0111aa8831f0c69404556272466e796c0111bd882dadda9404552568e18d45ac0110e34abfb935640454f192bc6be7cc0112cf3b1235f3c40454d7905b8af3dc01124491a72946a40454a7e5e123799c011154f9f69561f40454a6aec8e6f56c01138aca97460ae404549102832346cc01130c7b5bf47b2404547ba594ad295c011369c6f9e03c840454715ee1148b1c0111c5b2254578a404545b83ed1b322c01116adfed65f484045428eba088b25c0112512966336e5404541884250a9dec0110cf3322b0f3c40454183d9717e7bc010fcf87fa5741040453f52d752e2a6c01100d6781c465d40453d78293a13abc010fabafb46bb5940453c6e0ba7ba2ac011047f9389095440453be4aa482c59c010f86a9756260540453a66012a913ec0113a65cf11cb8540453a076985189dc01144b431f6474540453abe26f765a8c01157100005e7d5404535c3ffff5435c0114400000000004045348000000000c01151bffff98ebc404533e7ffffbb48c01152dffffcc75e4045320c0000225cc011494e486b0667404530a084197faec0111a93458ef7cd4045322a92789ba6c01117464fb4620c4045315f3fcbc7ebc0111f4096a6a8ab40452e908426eba8c0110f2db40fb3f540452d1f29f19605c011142d2719634340452b6be7c96c34c01106f0847327fc40452953120d6b1ac0110f4b6717cd634045296d57e77296c0110e913818979e40452811aca39524c01101ee6d7dd439404527ae3d015f9ec010f9f703c6cdc9404521342a3c722ac010ea41100473c74045200c4837d22ac010f318886aa5c440451e3eef6984d4c010e86047ad2c8e40451d6256ead0f8c010ecfe5e032f4f40451aae7c27a163c010dc73ba594f1e40451a7b78d1f8dcc010c12bcc95221a404516939dd715fcc010c41364832ec1404514dddff3dfd0c010d30c46459ad0404513b5e09759fac010cd98b0bb74354045133b76361acdc010d1eed7a861ce4045111a18e7cfd5c010b503f6c964524045101c289fdc54c0109abd8f3990bd404510ceae47eb40c010917e3b4ce5c040450f4fe988807ec0107b19cef7e417404510667d82b7abc0106a45209b80fb40450e0a475d1cf8c010398e42bd2db740450ceabdfb9b0ec0104f58616267f740450a951f83cb49c01069823c63663540450b244607989dc0106a9ae0fd9781404507e3629904fdc01051cdfa6bb8d8404504b54c438badc01041352468d9cd4045059621232a16c010310871be893d404504ffa723b4aac0102830bf5cef11404506d43c6286dec00ff872f6dc59a2404505c18b7f695cc00fda799aa941b640450688c0a178eac00fc4c239e598bc404504406682400cc00ff54e1231b0d4404500b12e3a13e7c0100f214c3392dd4044ffd1a36b7f80c0101dca28e9bf5d4044fcfffd5fd66fc01021c4cbfffbd74044fa1f5e527953c01018cc9591c4864044fa2076f46452c00fecf4fcb91b0b4044fad91e589f6ec00f4816ff9848844044ff9c9e736a7ec00f21ba9ce33eed4044ff92148e9c2ac00f1e33fb5a28ec4044fed638b7bdaec00f22c6e5b5af844044fa9dc175c56ec00f6ee23fd93c7b4044facc791d80cdc00f9e124210b5754044f7b82c415185c00fd9c8ae7c77174044f72147d29655c00fd8792a85b1fe4044f34766de7dc7c0102679f8e1cb034044efb6fe2c48e7c010404712e408534044f0455f475aaac0105af4fa3d73534044ef7172b1d6dbc0105138f3a2b5b44044ec99ee8493b5c0105a2962240c7a4044ec1df00f0afac0105c3aa3fc04594044ea59c22ad4b8c01026e8f8fd57594044e519de5614bec01029db909b29784044e2596c178050c0105b3b48b401834044e3cac406de1fc01066adc7cee1244044e329ae3e0538c0107e26ee78bb754044e755e182803dc0109d8e33a3b5404044e5ea5dfdf347c010b71e6d28776e4044e6d9afbccf32c010db14f5db63eb4044e652ef7ba365c010f1b0937d98294044e83020057b62c010fd613bb7c4b14044e6c66280e4d3c0110a7ad46525274044e712ad00d492c011257519a155954044e32f5ef74b15c0113a273262c2874044e35182986500c01145438cfb2e3d4044e1b887d565bdc0118ea3e02ab3c44044e4d5c35e9799c011bc65108c25794044e18208451556c011d123c4917b244044e12c5da145e1c012013642f6e4684044e2bd712d476ac011f837c2a8cb554044e3aaef86a4e4c011f3099dc9bb314044e8f8eb32575ac011d83713c60e204044e90191ee8812c011e9cb12fd21984044ea0f351e9234c011e4a84640e8394044ebe858e277e3c01208cbd9aa224b4044ea892fc9c734c0120c6a1afbd9d64044e96202aba354c0123255af78c2cf4044ea5eb6888188c01231396b280e8a4044e8d49a3eb8abc01243ab515a99324044e80270ed16dec012870ff61748f24044ee4d0fd10c00c0128c99aa46cc294044f1ada03d32f8c012adc015a6a7c24044f343c9ae5f4fc012e9b98e4e03664044ef35c420f080c012e7dfe7edcbb14044ed60d0f072f0c013089f929326494044e9b364a477f8c0132830a78a148e4044e8b5066301bfc0135a62e5f5b51b4044f303212dde46c013788544f041694044f573f7e9b109c01379f16b9b37314044f742dd91266ac0138f21cfcd4c134044f7657ecc8623c013a5ae1fd247244044f5344fe8cb86c013b634f22db7fd4044f51fa8ee3189c013bad37100c9294044f69c89721defc013cc606d5314a54044f787b0f51121c013ef4ab66534ec4044f47bba3e3274c01404f756f540704044f80ea48efc43c013f9ee5efefa2d4044fb357307114ac013e7891fac76494044fc9f6a0636afc013e6e7f3aaee3d4044ff2c8f7107e8c013dcb6601b401b404500e73b4faeb7c013be786882b1874045024b13a27ccbc013ca5e53c85418404506f3aec3a257c013b6036ab26a3a404509685d3f28e9c0139de09ad753b140450a08d394a34cc013abda38bd832640450b9f1fad10e9c013a60613b7ba3940450baf84dd9fd9c013b6ff0f83f05440450f24e7f47917c013b5c20e4f45854045133a4139b127c013d98adc00603c404513263d907319c013dd9788a5df00404513eff05fc65cc013fa2ba14387144045128c2cc766e5c0140f6357be2cf740451411f0f064fac0141b9d16f404c2404513b3658e8b5bc01420a8f4bc9128404516397979cfb6c0140cb0e4751b474045184a1075d52bc01419425d2de9af40451c257a0d0c58c0140961756e74b140451d924ef56424c0141342680d0d384045207e6fa0e684c01408de497f837740452177709c41b7c01402314c284ca7404525022e4754edc013e4ddd826b6e8404524f3c51a6213c013d054ac0762ff4045260935712e9fc013c50d1022a6b8404529eba0f1ec5bc013c51df29e068040452c5bb988bc16c013efd374edcee240452b3f7184fd81c013e3e4e9097f9740452febdd0a7f02c0139ceb05b6bd0540453179b4b97d07c013a8423bdc1b984045335a462530f0c013a8c88036f2054045350cab78d8f4c0139eb45a3a332d40453657d55c9bebc013a3c32a61a8674045378a65d6ebd7c013b2293651981b404537d38a698385c01399996e50959b404539aff64574b2c0138d4c60f0748c404544bd52af2d08c013a44e2b3131264045454dcec43797c013a9ef3e9a4d27404547022f37d994c0139c2cc2a31fa2404549fa95b94b77c0139e84e6da143340454d339368b0a2c0139420ac72e52540454fdac4b66ca8c01399e702944025404555c681306398c0138ff2d0c27aba404558aeaa06122dc0137c96bb31b39b40455a9f6dae8438c0138fee90748a7440455c93c1f84c47c013a9df9cc4579a40455c3b4f5d1ba1c013ac81949522e840455dfb4fbfe465c013bed52d883d4040455f4ab0d9b854c013be038b7230ed404560d397aed538c013aeb7861c41de404560f49e51531ec013a2e827689c18404563c4715a4684c0139560f8f1cc6a40456480853ea15ac0139c877529cdaf404567ad37d3785ac0138de1daae955d40456baa49b555b8c0139a6d883b19d440456d0104b37f2fc01397eea7680e5d40456e7b290b6712c013765bd967066c40456e266e71d63ac0136c087487802c404572237773a9f1c0135a829991a5c940457299b1d162a3c01359f77b7fb0c34045740fd65934f2c0133ca7d024565d404577156d1c0490c01335e9614f72a740457989819a2fa8c0133a9fcbc065ea40457bddd4870065c0132ec4171ba57840457ca7bb297b13c0132de404ef1f8040457e4a94ecbf39c0131156bd2610b64045803344d3102bc01307279ac60be0404581fc0a4756acc012c30bae678f8f404583636ea2a895c0128edb5d6f83014045821836cdc774c0126cfe3edfb9ba40458488d62a1017c0123ccc79da7b50404582760a9381d3c01215c1e169f069404586158bbc7b0ac011e6c1352dce09404584f37b466128c011d928a06e5b39404587ce7bd0a846c011ca4c00f0a7034045877887299946c01197a7d8b2c54b4045847b33d2eb4ac0117e51d103125940457f5d75736c00c01164541671755240457c7752a9bd76c0110ce42f2dd9c740457b90345c0e5ac010f40b1eb0def540457a21c25d0742c010f2b0cc3b2c7c40457584fa503db0c010e3cb0d267b8d404574934bc41b1ac010ec4c52adbbab404573cefc2d73bdc010e705d614048040456de9c0697850c010db1c7df6363940456c74c20d9ae2c010cc029ee326f940456c13312ebaeec01099b87f853dba40456f8b49526202c0109494bae2948b40456e607bc50c28c010810ab28b830140456da7b5640313c010900f720de46f40456a2019a81429c010a1dc9016ec8940456b329f286899c010b9b431b5e9b84045690592c3299cc010a5778fb72046404569009e4492f1c010acacd83abf19404567e1f53d8445c010ba76202a38fa404568f3dfc64ae200000005c011015d1f623d5a40455cff7fe7ecb9c010faf0b3b1c8bb40455e345ae1b421c0110ae348ba2e0f40455e93fc9d5b2cc0110d771a465ae140455d8055d95900c011015d1f623d5a40455cff7fe7ecb90000000003000000010000000bc0102f38006edd2540456226852faa3dc010328b8afce283404563ff1dd9fd04c0102ccdcf5ed602404564f7339775edc0101e96079c5f25404564e86ed8949bc01021b5ce3ece034045668f963bfd43c0100e85f6c6e8ab4045673760290a91c010154755f74fd0404568e07528d494c010025ab8c4686140456a5b653ed1abc00ff7b0f5337be2404564a2e45daf80c010032af6d73ff6404561b5a6460b8fc0102f38006edd2540456226852faa3d00000000030000000100000006c010269941a761a640450d21901b742ec010223ced82602940450db15e20359ac01018e7e72f799640450a609b944e34c01020b3c25c27ec40450a10c1163de3c0101c42f73a4d7340450b3ec356a3c8c010269941a761a640450d21901b742e00000000030000000100000009c0106932f00626a5404511911860f4e3c010728730719e0e4045144c4f86477ac010607d7314c1fc4045143036bcde20c0104e1f75efa3f04045157c781e7d4dc010433679b9aa5b404514eda37e6c39c0104c45403738e3404513fbe4700a32c0103fa0e7857996404510d79cbaf26bc010557b05afc250404512151f45845ec0106932f00626a5404511911860f4e300000000030000000100000006c010680276f5214c404565991b447f0bc01073f1170c949740456879a9ab1addc0106de005974c40404569f21fe4ef25c0105b00e5d07647404568c5bcc95ab9c0105ba3afae3f2a404566710046298ec010680276f5214c404565991b447f0b
+33;Asturias;12;0000000006000000020000000003000000010000012fc016c5518601fa504045c9fb3059e486c016bfcea4cf68f04045c8e11a5b39d2c016b41c7b0ae3334045c914c4e26179c016b8a35686ca5f4045c853b9b0bb4ac016ce165a2be7de4045c877abed1d14c016c841f1a32c264045c66a3154bf53c016bccfd40aa6194045c7c557dcfa87c016b8bdd17618a54045c72ffd1ba7afc016c72109a124ba4045c5ea0cecab19c016b6204976968b4045c5276bf4f0aec016a8c43910a9014045c65e6f1217c1c016973dc81dccab4045c55f49a2c77cc016786306e905f14045c78dd5244e02c01663b78bc7f4cc4045c61ff96926cfc0161d92434a3dcd4045c5d88d6640b8c01612adfaf1f0964045c6a26334e13cc015f9a13f2a62554045c5a27804c969c015a72a242fa3f74045c70602b6c730c01596f3f07d2b244045c6649fd4689ac0158d8a8fa1af4e4045c3cea89c3852c0158d4b18d813274045c49997b444cac0158ad03d2252ef4045c3db7b2e7d1fc0157cbb6a576a534045c514f66088c6c01569ccd38b607a4045c3f3f325ebbcc0152e7e780016d24045c48006f88f15c0150fbb9d60b4b24045c26020ff207fc01512af4914822a4045c0e530d5cf9ac014dd6b262d80054045bcc9712f8f87c0147e7b536ea3324045be079fb3b16bc01475e2ebf302c24045bcff0cd072f5c0145882dccfe0654045bcf1ee9e9d7fc0144b25b70d8ca04045bbac037c69e7c0143a87748f2f444045bc0e6e10ee7fc01425ee2ef230e04045baf79c9337f0c013f0bec555bdab4045bb137cbd1d8bc013ee60dd9900754045ba3af32a1d7ac013e68112a8e8dc4045bb2bc07e9bf9c013bf007f67fb4d4045ba7e5a1403d5c013b44ae59b3ea44045bb2f908d11b2c0137fbc635951e74045b886d00ce200c0135b6ee178f01b4045b92912683777c01358ec64e4fe6a4045b778a29a048ac0135536885ae0804045b84bbb8413e6c0134070a0a6ff084045b842da06e976c0133b973d5a0ed14045b73d879980b4c013107b285929564045b6f32f9e3978c012f5f970aaf41c4045b51ef34449a0c012cb23c4e7615f4045b4cea58817f0c012cc17f76d8a474045b3d026d20478c012b9363fbe422c4045b461b0bd2a4bc01279cf1aebfacc4045b2973cf7460cc0124e940120b3cc4045b2a80d9af336c012230cb7d1f1834045b33049cbf356c0120cba278c3e9b4045b2570b14303ac0120ac0e902a73e4045b0d11b38f41bc01215a8fbbfdd034045aede19a41e8dc01223340bf62d6f4045af10265e0da8c012202ead119b894045adf78a7b18a5c01228e0ba9dfeb74045ad9389ca9997c0122328bfb42ce64045ad3655a330d9c0122785b70e9f804045abf6f3177579c012178d291544834045ab46a0c3847ac01216f6b45a6dbe4045a3b79535ba56c0123082cf97713a4045a26dea9eefc5c01235015b6397c44045a4b34bc30839c0126e256a0ba6414045a6399be0a44ec0128bd1243934184045a343aa41e608c01286b9832190a74045a22fca8cc565c012d2fc61dd37204045a228b7cf64adc012ec7cc12cecaf4045a0f060c3c2c1c012e250d1a9ab6040459d60a1ff2167c012ec52aa2d20dc40459c91faee0c27c012ef39747c0f01404598736f183bb6c012f8cd1297dd2c4045979ec4f1e205c0131db0cd11ec1240459896228bf110c01346a0d316346d404596ed51853669c0135d35323be76240459723cc877168c0135bb399ed48e640459846d69a114ac013717bcc655a0940459a47d3da9950c0137be9f5c1518940459d2fa6b492cdc013a25b99fc0c7840459e75b7ee7f8cc013ebe00ca32f23404599a3011af6ebc013fc53d38920f3404597b8baf8752ec013fd902cf81f7c404595cb162b070dc01415f9a39a79694045977d604eb079c01429e06ee2833a404597a3aa1a2b8cc0143ce603549e3d4045965087e4b2bfc0144e7740286423404596e7d9a12430c0144d2b613557b04045955cd7c9777cc014602798a8e1694045924d57704323c014682d5f11660d40458d0955b241bac014900e11ef1e6440458d2c5c92b0a5c0149759a14ad7af40458ebc3899be47c014ddcbb21a99e040458ad0810c5a01c01512f2bdaace7e40458b351f01df0fc01520e45c691520404589e92848daa1c0153ef9788d969340458ac5b71fcd8cc0154ec90df2d44040458a2f4e45cd04c0155da44f32cbb840458ab96e37e369c0155fef3ba6631b40458c034767f385c01579fea8df543140458c1b1d253273c015884c515622bc40458b2a936d6bd0c0158fd250891e3b40458650aa5a8fa2c015ea01fb35738840458707419fa9f7c015f9a7365caac9404582b812dabceac016067185b1e3c6404583a84f4e0abfc0162926b8c03f3a4045825964822d0ec0164774c716185f404582d364a9d65cc0164c91088410a44045841bdc49c26cc0168bfc3827ed394045847b0b594f7ec016c5bc4b867765404587362b88f86bc016e9bdbda171e7404585705875c07fc01710cefb58d9ea40457e316276755bc0170a88139b797f40457c8076501c00c017374d38b1bc1440457b36f9f8653ec0175f35d582868c40457b6ccf7d118ac0177269eb89aef440457da7ddb6f745c0178dcf1c2137a240457d56308c1784c0178c7a96db348040457f3e3c979c25c017a1b56233372140457ecc208c5eebc017bbd9ab5787264045815f5a22e12cc017d37c35497cbb40458241cc8f4b74c017e0edbee866394045853a14251d69c017d94035357d21404586c6dc508100c017e53658a3fd6e4045885bfed73e9fc017f4ae04be33604045889aba876119c017fc3cfc45f26440458769ddea2b83c018156e36bf59c8404586e2715baf4bc018533d3ff3d84c404589b6f192c3acc0185e0e39873dd540458890d48a419ec0185bf8adeaf922404584e22cbf6a7ec0186244456e0d1340458400e93ca2a7c0188bf28a7f2807404582afe533539dc018b6aed34dd6894045861e41b8cbd3c018dcbbb47f2bb84045860aa9536d5dc018eb5bb07fe513404582f2aee51681c018e8406b663bb0404581240c4c9d1bc0190e07bba4f6084045820ed07f8137c01924090232345b404584a7bf74fe0dc0192e401d6b39a440458371af08b06dc0194e541761f9f9404584029e262c76c0195526e854c634404585f3500a3fb1c0196fb4b23d992d404587a0372d12dec0197e82dd036a8840458542fc9f2270c019969393ceb208404584e7b9601116c01993d0fc5c5c784045822055feedbac019a4f93148912e4045822ad6c7913ec019a124bc77eaf440457fed15fc8566c019b24e588ec89740457e6a786cabd9c019bf96e8dc9a4240457f1ba4f2cf51c019c9275844cbc940457db7c008a1c3c019e99c5ad8d86440457edfcab841f3c019e45d16d3ce6c40457bdf4a30835fc019bc0baf3e4f2440457b6997dc88b6c019c435ae48e45c4045794160412223c019bb7eff0e936c40457849f3b21c7bc019ea12aba0a49e4045777f0cffb196c019f586261f4e7b404575cab86f0b96c01a0ad48d7a4052404576e0bbeadadec01a247fa1d4593c404575f7b58c46ffc01a2a394658e607404574cd0ea8b1b2c01a6d0f0b8ba46440457542e40490a3c01a73a2f0d2b2e440457657c895fdd0c01a83aacea03697404575b1f2113b22c01a8e1d21231051404576758e0e4287c01ae400f2880c184045757025f5e680c01b06d4552c574c404571080791d5e7c01b1765a9ecbcc7404570f72997a900c01b152aaee66e1a404573061a62fa18c01b57d281cb245f4045754abc4d0904c01b5e085b9096de404576d754df9a1ec01b57d6ed2e8e8140457a9614fb75e9c01b7c0113aee71240457e89ac75ae1cc01ba3d79302036e40457eb4ecaf1deec01bc367825f0437404581799cccdd72c01bc994e600a56d4045842ada44eba9c01bd3bcdcbfb40c404584ade39dc9aac01bdbe8adba1e3140458369ab841695c01bd2fd28e8b51440457f7df22065cac01bd94e264278bc40457ec91925b843c01bfcd4675c15e74045828141ff28ebc01bedbf10ddaf044045854d05302f62c01be3e26e9703e0404583e393ee5eeec01bdc3c4f88f6ac404584737135662dc01bd92dd67cf9d2404586b04073a75cc01be01b2dd8d64640458747cef02c68c01bc137a7d96fc040458b12d205acfac01ba985c10e6c70404589608bf5b0e1c01b93c07242dff140458bbdc65cf9b4c01b7c921a40c05c40458ba68ca07ba5c01b4f783cca023a40458fc35feae602c01b49db1d3ef78440459258b66b72a6c01b5aabcaebee73404595384395786fc01b72abc062b1264045974d04936b35c01b7ac66a3ab9ee40459709728502b4c01b783e5287479940459854f958be55c01b8cae271a4b304045954522e39e90c01b8b23b9c385a740459412e83c365fc01bbfceddda4c79404591e049e1f655c01bc3f74ca8244c404590dc1ae8b994c01bd40c3cb579304045914447b1df25c01bec4fbbb2a6ba404595515cf05727c01bdc0f13d55b2240459801770341a9c01be252be2cbab840459a24dd1dec94c01c017ab403dbb640459a88038f56a0c01c09d01fc6219640459c87630b3d20c01c1488da736d4f40459b4b72da9309c01c3f119c9bbdc840459f3cf5d8f970c01c49394509e41f4045a2b74661d2f3c01c3d383482713d4045a715344d4231c01c675aede246314045a6e33f1f4fa7c01c75fee5dfd4784045a9c004e1d5e3c01c865b44d2cb744045aa699f3a0650c01c8297faa1e1004045afb15632d65cc01c8dc2c493cbd84045b1131bddf968c01ca362fb3322d44045aff6ee315414c01cbade5fb60cdc4045b23c18b0b729c01cacd009cbb95b4045b3cfb15f1952c01cb4a56f65be764045b50472242390c01cb0fcc856e0274045b711b9619c3ac01c6926a0dc36ab4045b6a8212f2d48c01c66c4be1329314045b86f8d275699c01c58512072d5fb4045b8c741aeb242c01c5c63eabeadd94045ba46575f2edcc01c307615b9834e4045bd1ce4674839c01c2e50ec706fef4045c1e5c8a91e14c01c21fcb6ca56fc4045c5b9db7245ddc01c1684da80fba54045c641efe47ef1c01c1e1f841897c14045c73a9b226bf7c01c17c7e680747c4045c7a02be4b54cc01be56ff2bd5d804045c743a577af76c01bd0932ad9614a4045c8c5b5aa2409c01bcab40a91b1f84045c8240e9294eec01bc9071561d5cd4045c99745a5eb51c01bbb28223305bc4045c8ea1569ebfbc01bb396703332a24045c9991bee25c1c01b814aa94f21da4045c7fd1e9301eac01b76de63781f774045c90671adb118c01b6a504dba0bef4045c90593ef1be9c01b6806fe3230bb4045c805513a51adc01b50314cf675354045c87f28119f99c01b3e8efc98d3884045c6f88e84f11fc01b23cb98ab6e3f4045c72ae369ad7fc01b219aaa65c4ab4045c855b528c140c01b115b446320254045c8ce293cd40bc01b08c416c5bf3d4045c7d9cd4c8aafc01aef134afa3e0e4045c8404f27a7ddc01ae361dbb493934045c72a3ab9edd6c01ad6884b4ec41a4045c834be541f4ec01abd308615ea5f4045c7824441bd29c01a8157046b161c4045c954f3594aedc01a74e2211cdb2e4045c7e4b74aeb9ec01a69f55421e2a14045c87569639bdcc01a64d937d062144045c6ea846fde2cc01a2b813fca5f244045c702446ed608c01a22192a3fe6ee4045c5ca03e09b72c01a20c45822f08a4045c67e1e93e9d8c019e5e27e0662934045c66ec309de03c019e182fe7794b74045c91ba433af0dc019b811459a0a7b4045c6c0d93f8812c01996629dc02b0f4045c7bcdbde37afc0196c4f418f4a134045c68c11bbea27c0190616ab70ba304045c9f508dc83b6c018f8505876d3604045cb5e4c6cfc3ec018fa6066f2fe3a4045cc2ec7714bd1c018e13b88cac7ee4045ca28c37a8b03c018d6287866907b4045cae5d22811a9c018cff03144b5564045c955272826d5c018c0b9812f594e4045ca2e5862c298c018c49cd379a8fe4045c8f05e52d7d1c018be2b5507323e4045c8274f28a0f8c0189e2d2210e5c64045c90dd25d7cd7c01873b363b3f3514045c718638e9ab8c0186c6a3c1186c44045c7f7959ef45ec0185ebb5da86b894045c77707d1e417c0184f393d6362d14045c9031756deb4c0184fce11b522fc4045c83ada6d2f95c018439d5b677c334045c86f3d582dc7c01811afaba125774045cb4c29d37cd9c017fc91c82dc57a4045c97bde121988c017d348c936591d4045ca35a4a1236bc017c4764a4559b84045cb4ad3ea33a2c017c90ba3ef804e4045cbdbea67f975c017b7dc864aa9bf4045cb59d83890c1c017cac845b219764045cc6fe4a14c39c017ac0b51b1924f4045cd7cd858463ec017a7bb8c6632ee4045cfec39f40667c0178d0b1e1ed7904045cfc311938c76c017777906da98464045d0cf39d79abac0176fca0400d1c94045d177a73ed155c0176f76f099a8004045d3db36f94c9ac0175d311c57a4824045d490326bfcc3c01751c953fa05c94045d1ecc8f87946c0173ecf6ed767f64045d23d45b72a8bc0173d5bdf23e7664045d0f81c5bd640c01721e4b4f5eb7f4045d0ce7c66fb2fc01721a98755fdc14045cf40ab22d05cc01729dc358f47cb4045ce99c5ac7aa6c017156e4307444b4045cdd7ea7e1ed1c0170abfc4d180bc4045cb15f9dca55dc016f0f71948f3b24045c96dfd2d2ba1c016d8b8e9514e0d4045c8befcfe4b7ec016c5518601fa504045c9fb3059e48600000000030000000100000004c016c43bd20539294045ca0cddbbcd84c016b3cd40a9d81a4045cb18a2f32368c016b2b62be54feb4045ca31f0076479c016c43bd20539294045ca0cddbbcd84
+32;Ourense;11;000000000300000001000000cbc01c22dc325f3c9640450928ab51ca45c01c0c1dab506a15404506b590ca56ebc01be62fc34d585f4045070f5f6197fec01be47499154b7d40450501704b1f41c01bd82a280b7ba3404503926eaf2ca2c01bf6e4efb6e5384044fe820f486132c01bf16a6a1253a64044fc490889b3c0c01c0664e07f5c2c4044f9ac5c9d6d6dc01c4b322142f9584044f999bc904fd5c01c5999ca1ea53b4044fc9afe95ea04c01c90d7fe0350984044fed136f03d51c01ca22cc88af3ba4044fcf652a03e82c01cb671a987f09d4044fd72ace1b11cc01cbf9079f16ed54044fc18f508440cc01cba7fb030d7304044f9dfad0c9ba3c01cc21cdc8d3cc84044f88f05cec36ac01cb1983e60f4f44044f5a368d273cec01cc973a978926b4044f0a33bdbf0a4c01d42915a74af6f4044ebe1c3924419c01d6cfdb0ab952b4044eb9693c26187c01d768f0de93b874044ed28403f4f0fc01d8fc966c462d04044ebd30a404232c01d972166e929624044e9c698532621c01db68596ad56104044e75369b02e18c01db4106bc42f824044ea44cc80d532c01dc664a52c5b0f4044eb709ef5345cc01dcf59f069e8864044eebb231d21b5c01df0e91c9fda0c4044ee3eeb4d407bc01df71371c434f24044ef8510be9cbdc01e02453d3220cb4044ef481c8a8b70c01e0d9f8e94f2864044ee5a01d63b58c01e059d0f5eb1814044ece5d80dbfffc01e15c9ce3fbe884044ebbe887e0ac1c01e721b1c43b6164044ea22dc76c186c01e7240eded14264044ec61b5023c01c01e68344012588c4044eeef365d78f1c01e5617d21d886b4044f0166969e22dc01e57ebde4ec4234044f0e0e71182c6c01e9d8ead712bab4044f0cb4ba0f0dac01ecdaa24f981044044f42e90eaa706c01eeef282469f544044f23651fd0911c01f0dd2a54b4afb4044f312c7d8c72cc01f25cf72e6c9c54044f12a36de1629c01f61774d8bc66a4044f0cdf1f09db8c01f5db59578a2a94044eee8e0adef00c01f771a76bd905e4044edefe2e91047c01f7dc054ef459d4044ec247a34f1c7c01f919ea934278c4044ee04acc93275c01f88ade476af024044f5978179c5c8c01f921766f148254044f6b07ef0426bc01fa2c8b5b34d174044f620f93f1b9fc01faf140c51720f4044f083d96d32f8c01fcaff82bdc6304044ef7b5f94319ec01fec670cc34bb54044efa9ad6fdcaac02006ca8f1eb0334044ea16acf791bfc02012f37dc42ea14044ea4da1f45c09c0201d75cef557414044e87822caf4f6c020300f298b0b2e4044e78b9b33f880c0205489463a4c014044e8bd252aedfcc02052ca40d65ef24044ee297c00bda7c02057599228c8324044f084997dfc16c020664210e8fdd34044efdfdc1366bac0206f1dafbe49274044f4f1c7e7fa6ac020658d7d2ba4ca4044f8496a8f0c70c02059b95b78432a4044fa3f99da1775c02053b32c568ef24044fdc94aac7696c02047fbec9ffbdf4044fe908adf0e10c0204154440296e7404500b1a7be86a0c0202bc19d3b31264045022c631b946dc0202b2836aae1ec4045061048f1fb1fc020319bc9a832c2404509312adaca11c0203cae444b896c40450a8299716f73c0204c578bad1cd940450a394f61bd0ac0205a48ed1d93ff40450885bcd63d42c0205fe5dfee3cb44045098d6e1ce91ac02060b5c631386e4045126599b5a6c9c02065e8cce62acb404513c3b4821fa2c0205d02b3164af940451430bdb5e12cc0205284738f104b404516ee887822ecc0205a22a2415def404517c51806a0c8c0205bffd549036640451ade8f7e1dfbc020627060bb2bbb40451ac47f138f07c0205447394f81f440451c5817546ba4c02058686ec31b0c40451e1ab5ee8eeac02052dd2704732440451f3f28fffe7fc020682a5e55ff4440451f4c4de7d09cc020757bd22ad20840451dd0b17e11d4c020877729be509a4045205dd0d84198c0208bb9f127f5e9404524261ea4d32bc020861ef1f76d794045285e62cc5300c02091d1f4f72fc4404528a906046221c0209c478f8ba3b840452b84959dd8e6c020a63f4293abf840452c2a81a075fac020a28a2c71d69040452d9b1679f293c020a6250f1ced3b40452f4249a69226c020a120df513c67404530c40a4a4a96c020ad30af3095db4045377ab543d553c020af1d36adcd3f40453b9c1f67c6b0c020bb917dec3f0340453e6169020854c020b48aad87510740453d899eedc9fbc020ae54bfb1169f40453f0710c29259c0209aff34a8ff1340453ebf30ed5dbcc0208cadad330fb34045411306397768c02087080eb9a39d40454349917faaedc0207a4bcb7ce2f7404544edf0352924c0206f66ccbdb3554045445577c79df5c0205904250ee963404549367382614dc0204b2e02134d074045463adb913e5fc0202e5572a335a5404547649aee4735c0201e66c8d0ad9c4045463b6351f8b5c02018cc79f44062404547072a4511c7c0200989c87c6c494045456773f9ef3dc01ff84e625b0b61404549479efb026bc01fde36ee2026084045487fb44d1b89c01fb64650f235e740454a0d3fe89214c01fa56f3267dc334045472d62884f34c01f8f673622af614045466ce186288ac01f8e0ff24c9f52404544e1559f32a5c01fb22e82db784840454334a14762ecc01f9b3d611ab347404542bbf541be9ac01fa71870dc837240454112c8a07e77c01f806c7504751640454166be635b22c01f82f62f46bf8440454055ee741175c01f722c4dde26b440454086c7153909c01f5e4b6da2d6ec40453ec928b54d4cc01f46716446509e40453eeeb75a6c2ac01f3489c96cf0f040453d71774cceccc01f0f631dd3f2d440453f3a074905bfc01efe450c23a4cb40453d703a40a9d0c01f2745c90462b340453c9b16625343c01f27d5224a9c7640453ba5c43f8a85c01f02cbecca658c404539bb52fef7e5c01ef4e9ef36480140453a72f8e8560dc01eda4a9bda9187404539e786c897c5c01eca9f47029dec404536fb53b7a6e5c01ea6095151453240453625d75da805c01e86911ad62b574045341a5e8a12d8c01e79ed0cf7f9e74045314424d0a278c01e4df2b71fc4f6404533d2bada536bc01e2af8d77de6f3404531355e37291ec01e07c348836b494045318217bf30d0c01ddd01e6c62e5f4045341db79a7a59c01dc9a843220b114045341b9506e2c9c01d98d3f7275824404537c06a12ee45c01d7ac73d6bc64d404535ef1f8c5121c01d3a4d6972e8df404536f820199d58c01d29ce3274e9af40453511166400c2c01d13e4956b61a24045351c453ced69c01cfdc1673565b4404531e876c1a857c01ce158e69872494045318f5c6516edc01ceb2a8110945640453034e3e04254c01cec79a4fef4e040452df86ff7ce72c01ccf893c98fc55404529b08bb06f41c01cc31690e616cc40452e98fc187271c01caffa5796e2274045308aa376560dc01caa30898aadc4404533c503168245c01c9666a242d7e4404535fe6db0d4ecc01c98d9dc0785e4404537d3f2aebc4ac01c6622d5a08e8940453ab9762542a7c01c66ae60ae9f1840453be2d4428457c01c4e041a40f3e740453f957e99856fc01c4eeb230a5759404541062840c475c01c2ed9767e6185404540fee8f61a9cc01c1d5f9bc6f06a40453fba07b8b10cc01c00fabc26eadb404540babb992ef7c01bea06d12a7f8640453f22ebf74e46c01bd72171eaa901404542460ff15c1bc01bba9178a7a05d404542a12f26d67bc01b71371175598540453e9a6b70e749c01b658f6ce7565f40453e4cf7729b5cc01b5920a236f70e40453f6c2320b8d5c01b4b00f5a6e94140453ee250c90178c01b3bb70b780bde40453bfb78669912c01b4a83cbc96404404539f90a760345c01b4980fd7ca9314045377651e78f82c01b41d0c20b0e0d404536b388a577ecc01b4c9a23128fe240453683b84aa381c01b48a9ff5c2ff2404535f0dd0ce0e4c01b533c5183c50b40453444f0189b1cc01b5fc1c81d20df404533f2c0e5967bc01b4880ed9d9f314045315cca328b0fc01b1d554c62af22404530c461a85563c01b10f07e243f9d40452eb9ed6a2ed1c01aef91725020f840452df75cd47d82c01af6eeef0b91034045263a9ac61477c01b0f653bbb6467404522e923abbceec01b11679e38a984404520f45ffd856cc01b29c120f2130340452060db371dcfc01b365aabae554f40451e98fce24f7dc01b25e110148ef340451ba2fc7767f4c01b2fc1d8e4188040451abf97ade4b3c01b35c137a0debb40451bfff06e4536c01b5fe47433589d40451d391a731ddac01b8bd6987d8fcf40451b761c64c32cc01b9a78051f4ea540451840799e37cbc01bc67fc2ea062a404515ff86fc66a1c01bcb6c2e62a5224045115b14119ea8c01bf539f9d4756c40450f8e96e29649c01bf57b6e7188eb40450cfd7a859364c01c02949a89e22040450c6e2abe4d36c01c022bfb1f5f5b40450ad42a8ad440c01c1432c80f89f240450aa952f51a74c01c22dc325f3c9640450928ab51ca45
+31;Navarra;22;0000000006000000030000000003000000010000010bbffe8c3de625ca7c404507915642f186bffe45c317b9a77a40450b0195c3ee7abffd71c4b98b850d404510667dcbbb5fbffd519426cf32ea404512f93cacd993bffd2559e0a4a397404513a829ef0098bffc76cdd04f5aa9404511a050487e05bffc3c3f917f32aa40451340ba0698eebffbd5fbd079075c4045132a8bad2571bffb84b08f909271404511148d5a09fcbffadfe226fc183f4045136a8e2481a6bffb19d00b4e456740451447e3d58e23bffb36e0113c015240451628e9e604a4bffadf5893b74ed94045187765ca00b7bffb44911f108045404518946b6fc33abffb590b34ded15540451ae0f375581cbffcd6538ba97d2240451c9950512ed0bffd1ce2976cf72e40451db4dcd239b0bffd1b85125f395d40451fd375fc641dbffd468f82697c4640451f3fe4c76a63bffd98bde632ad054045212f4056d49bbffdb130df57243c40451ff48df39586bffdf4d81c25137b4045205778a8c46bbffe04eb20c239c540452126b9162575bffddbfc454f2e57404523406f828009bffdee3731f8ff0e404524fcd627c7f9bffe9eff1aec843d40452669fcd3a5afbffe8352580060e94045277c1ae1356ebffeb4157c1bb7f64045287766e5787cbffeb23b15bbe530404529d9fb8dc43dbffee78182e63da64045293d7115a819bfff13997f7ea18240452ae74efb8819bfff6ead4ac8c87e40452aba9d5da703bfff83738f3b3e3b40452d1eafe18d2cbfffa886c1721d2140452cc91b31b4aebfffeda6b013bfb840452e8ab81f969fc0000c675abe4dbf40452e2f97815544c00020cca6aea26240452f4526e61dd7c0008f52d9632a9440452bd7d295cabfc000b83d7386930b40452c698df45b18c000a10e0d0065f940452f1ebe10f241c000be13f95c21ea4045301aee13aa93c000b684982217a5404531474588642cc000ec92bad82da9404533151a8c7bd8c000d7342a291e5d4045353d88d97a52c000e52d21069c0d404535c11ed4e88cc00136d665b8fd9f404535959e21e98ac001667992e0645140453431b07c342ec0017d27c34eaff84045359a3f4cd831c001bb673a297a2b4045353f6d2400f8c001b254703c1f8e404535eee7a356a1c001e135b89600804045368bf728afbcc001ed7e82087ac64045388ddee7f9c7c002360b300146f54045392c78dc0140c0024dd97732c50340453bd273f1a586c00260046fc01b2840453bec279954aec00263c6c8f41c9540453a8c77ce7ee5c002a3d08e3c322540453c01b7653188c002b10f7f2c8e8740453b775eb9d252c002a79a102e6dc940453a1ced4977a1c002c0fdb70bab96404539cbf02563dfc002d223e389fd9b40453b9a398babb4c002e8b7dacd409040453b16a09807ecc0030359608844cd40453c8581833c24c0033337c4e851e440453c57e4519289c0035d5a41254a7940453e9f3a894f05c00363d7d2c2e39e4045413b9d51ac68c003233b099eedca4045422b7e2ec043c003355b78658631404544edbab8ce13c0031e9ff607b73740454647bb62639ac0032c8d9dd1a66a40454caf50493268c0035e748cefbd1240454db63f1b0cbbc003a03d5757078240454896fcf81ef2c003b298a4e3350040454b2f79b352dcc003eccfee14702540454aecebd9b5f2c004002b5bce5cf040454ee8aef7f20cc003dd550ce6872240454e5b35749accc003a2fec4e3ec9c404551433ce301bac00399c10122d0f7404552d92c7b21f9c003538d78cef3c4404554d2b3f73de5c003029474e3fa084045534a74f0644ec0030da42bd50135404552dd0d72eb6cc002fa1c6d1579874045525a64158f70c0030e3b417d2b84404551309f48f4d7c002c2575b4a6d5140455137ba5457cfc002a84ea8af8c20404552b61fca7e47c0024ecf0b51a8fc404553d94da1fcf3c002593f35a88c04404556c6b3900741c00279723881a6b4404555e8659176adc00288efe42072df4045575c3b1f0fe6c00280b875f51c1940455ab62aec343ec0029791473aa71b40455ca4902f5a03c00288e884c1cecb40455ea2dbb7a142c0026f64ebdf590e40455e2d4f5f74ecc00218eb0f71d1c440455fcd9142ddf6c0023f82e1e0f4e74045647f45721c75c002264a4c321051404565b9573bc87bc002243c1311e6c44045681dbb40a221c001dea1ef39c55a40456b95b77fe71fc001ed88fe40e31f4045715c7b945393c0020649940c80b1404572466f2dbddcc001e6ed928c817b404572b00180efbbc001e27069d30b084045769b165e07c0c001b95d92be6f4d404577ec095ba6f9c001ae9b879f34fe40457996b6904a66c00189f3d4dfa70140457979d366d609c001729b4e71f55d404577b23974511cc000ef907c6d168d4045789c2f8daea2c000d3fca1c90a6d40457969cd83d6e5c000c336583ce92740457c736ee28bd1c0004e845369e80440457d9139bd7fc2c00039f8bd6b85e040457fd9eeb3d255c00054c6ac999dee404583cd39a8b200c00029dd079c4560404585fb4717b065c0002ebe72ca8075404588583fec1806bfff9a3662567b2740458aac772e8216bfff8b9a85c18f4640458befb1f23398bfff29103ef89f7640458c7bc147ef94bffe6e652d22c54a40459163ad4a36c1bffebb23cfe8e10140459347d3dee4d3bffea05dd7a1920c40459cd26af7d6cdbffe73bde38c122e40459b0c279eb312bffe3e2370a60dfa40459a8841466026bffe32257ae3cbed40459b78af8b95c3bffe1c4b10161a1640459a780b83b093bffdfb5bca5624fc40459c3301aa4f1fbffe172bee456d7440459c3dbf7c09f1bffe184698af7da040459d48903ca3a0bffde25d2d603e0d40459d850a46e701bffdc74146cfd0c140459b2abda16950bffd999c5343852240459d3ed149e7b4bffd5a90a0295e5140459cb1d5968625bffd1b30ed80180c40459e97a9253906bffcb9543e79401140459f8766550d68bffcb3dd6a0f239a4045a36312942c48bffc8829cf53b2274045a4b6830daad3bffbab7eb3e51f544045a59bfed0cd5abffb1c355100dfb64045a7f3af75e014bffab02f183ddbd14045a84b1ab2ab30bffa00bed6fc0be64045a742adde8edbbff9f1590a90db394045a669cf28bf09bffa14915eaf045d4045a47c05d52c17bff9bd46efe4bb134045a0414e380b23bff935e34e996b2140459ffdfd88f9b1bff8e6d97b30f8c74045a3c29559769dbff906744bb4e7dd4045a4f6d9b977e4bff890aca1df0d6d4045a5b7a3d2a4f6bff8187dd2a4e4374045a58c9444e85fbff7e0e7ec49251f4045a3f10c29258bbff7015d4cf35eee4045a2287f47803fbff69e52cb7657ee4045a30791a482acbff61d722594ed974045a0019fc5e129bff60b71f916acc040459d7f00640699bff62fc55bbf4378404598f17b0a95e4bff61a40b809a4cd4045984772e8215fbff66f8a2c2d1e60404596c55e188f18bff66f5b4440c40d404593f8a14d2863bff6a88855b5a54f4045931fa149d5fcbff68f555ed725ed40459249dbdd1c37bff6a016bc7c6a014045906c3c4d5208bff78aa68b44973440458bbf53bf921ebff78e4f01116f6140458a708558efdcbff70f30907ccb94404585eef0ffee1ebff5aaacbd73fa8a404583999192754abff57b2046355d49404586f82ad664c9bff583ae3043588940458c19ec1c3fc9bff51d3ae4a4d22a40458e6fdc10b789bff45e24f8d535ca40458f33b433341dbff4cb50b1c0a44240458bd4bfaef0debff4f18b54baf5e94045891c3464c7bcbff450580d0fe6864045870e41093d49bff4343499a978a4404585a28eaf499fbff3f6f12a9c83264045857c6286ddd6bff3aae81505535a40458720ec26e2ccbff366c7e542a0a04045869db0368b7abff2e61355bf9c85404584209e5f6ae4bff2ca36041df1d9404584c66f58b0fabff2545d5de549ad4045834e19643b4fbff2450d0ecb0dcb404580f194c2c537bff1d5b81fe3ed724045831017426f6fbff154a9edb5e1b54045815cd1583303bff14ce504511d7f40458014d747cff9bff031a53f618c2f40457f0cb66704c7bfeff151a324a18f40457ceeb224d5cebfee3e43a6b7a91440457a0a806a2642bfed128cd53b056640457b741036f3a1bfeba4bbee7a93e8404579b385e0cc81bfe9efa963c4a91b404579c43fe6dbfebfe88e6590fe6a7f40457c0ea58a3db1bfe80f3bdc9c700640457bd7f64ba13fbfe7ca146c84c9ba404579b068258bdfbfe766bf01322f284045795153b1d03fbfe770c8c1942353404576d5a5970675bfe736b48f0ac1c9404575b70c21b294bfe90dec9b5a7529404575f5d2369083bfea35954964084f404573555f28c0a5bfea3211db1eca1b40456f2fedfbbdf4bfeb6b1975ea345f40456c6c5e2444fcbfeb3f005836f0244045675eff1eae98bfeb852d75fc52ef40456637496910ccbfeb1efd54bb29734045649903fd3aa9bfebacc059ef2c15404561b591b6900fbfecd12f594dbde940456156f3c22f0fbfecd0e3dfdb3ece40455f1d70d8740fbfed89176348fa9b40455f3b6a60015abfee5b8e5531a48240455b10df673f66bff0729c347e8cce4045599b91d6d793bff0a081085335b2404558877d489150bff085142f149e264045567a06e41739bff096c47cd853fb40455368e3cccc2abff0d4afd8392b5f4045524089094afbbff26ec7f37cc27c404552eddbb6dbb0bff2838b9d240a1840454e31af8dd549bff2c02d6001eab440454efbecb129ebbff2e05bf2d6320d40454e28e9e82a65bff2874f6e274ffc40454cb114d7cacfbff33b10f751b93940454a03bb5a7861bff33ea14a00eed74045465b449f414fbff39e60940bdd7d4045456840be02a7bff43c7ee3c6f58440454745524275a4bff49c35f90b442c404542eac717c5dfbff4b2139609ed1440454166fb4e61dbbff4967390e0266040453fcfb2dd59dbbff466dc2aa78d3c40453f74fea706e2bff45d4edfae733d40453daedf601127bff48074a326467740453b7314094c5abff50b161f7c1c314045398007e6edfabff576d11bbbf33640453643964471edbff5c22b91b1cc494045306396300b3fbff59c1e7561002040452f5e7a902538bff56128e4027c0f40452f9de41ae0f1bff543ec58d9351040452d7d458c376dbff662a3cc3c47f4404525494fbfb0dbbff6430dec968583404522d4be2e8a94bff6ae3436cf862140451b2edc65b5d7bff6453f50e792e640451738b6da0b14bff661d1861173e940451027f4b537f5bff5de3f3ec06b5140450db0e68dfa3bbff5a2ed73f27c454045095a5fc39b31bff4f830239a751d4045094189bc70a3bff4e08d8ac291364045057f5d4d8dfebff56eace2a1a04f4045024e47408658bff5fd5a129276324044fb22cf316fd4bff62cff0ffc32a84044fa870ec7c3fabff61da21c9ff3d14044f8bf71199db6bff674f340dd736c4044f7b08fced95cbff69274c012cc834044f5a052b51d73bff6bf9a616212114044f4df93433e44bff807367e7d6fa94044f64eb6afb295bff8190f8061cb5e4044f53adc92f112bff88d182f296be84044f48a3deb0becbff98a3f5123b4104044f6aaf8c0e04abff9d652026774954044f9aae5c96a64bffa7761950a2c9a4044fb90a34615b9bffa9e3fd4452af24044fae0d55a067ebffaceb43a3766fe4044fbbe882e95c9bffafd34da2fea5d4044f9f700d2e3bebffb718b891342304044fa7dc78779c3bffbdc9bd49884574044fbf372665781bffc4535386873aa4044ff760647fed9bffcad708762c6854044feae3dab0654bffcf72cc9953d734044ffbf312dca69bffd56d8f0adb8c74044ff5e48bc17afbffd8ada7988ad0d40450106728d07b3bffdaf0374ee585340450055529c1df2bffe208d4ff900764045035ec62fb5e2bffe6cdbbc204ea1404503cc8de4d1f4bffe8c3de625ca7c404507915642f18600000000030000000100000006bff211e03e18bf6a4045392e2cb4d012bff1a54722e56e6b40453dfea8179ce7bff177745cfcb8d840453e2c80ad75abbff0d0be9e583ca540453890d9502caebff0ef3b6c67b2414045378c9668841bbff211e03e18bf6a4045392e2cb4d01200000000030000000100000005bff2ecd620888bab4045364247a106ffbff251d0d1693eb34045388f2d2ce773bff28a523a1abf304045346fd628e372bff2f9b27f54db0b404533700ab9055fbff2ecd620888bab4045364247a106ff
+30;Murcia;62;000000000600000002000000000300000001000000b6bffd92fd8309458c4042bb0150cf9dafbfff42b21fde7de14042cb420ed244a0bfff48d26d5bdf364042cce92061eca8bfffa10054a867ac4042cf3279715275bfffbaa6fd9f16754042d1c8ec7eaa11c000186b3d073edb4042d615b528c140c0000facb2d0f82b4042dc22286704fbbfffeeede19a64454042dd30a76c03f9c00012188cad91b84042e3319a1cdd6dbfffeca7d0d022d54042ebb28108cb78bfff966bf85442ab4042ef2a161e4f77bfffeb680f4cbde44042f0ad08ef095ac0002c294b41b69e4042ef2135558884c00074ea0d7a66fa4042f0bfbddb1769c000c734668f00394042f03e18b8f849c000ffc734ffb3774042f33c47974beac001608e7ee6ee6a4042f1bf5258f0e6c0018eb1005feea04042f472bc736be6c001faa2a1106c9b4042f79483dd3c28c00244ff603f52484042fc15b666951cc002630e160fae414043005bd4e7f94ec002bac49749324e4043034fae7a3790c002a399c2df38354043087a63effab6c002201620cb1e1940430dee5f16997dc001b1c3feb6c39040431a06ffcc5c18c00158b1257c665840431cfb081a3bfdc000e72fa05f392940431e6c6ebe23bdc000a8d04710f1d140432202958243f9c000818f67330c6a404326142835d423c000637a02831ab040432720fa7232b5bfffb8a6fdf4fcb1404323fdc4bc5d13bffe84ea663230774043261b0a7d3184bffd9dae6807d13040432aabb701ce26bffd38a134ffa24940432aaefc7bd5d3bffcfadfcdfdc6b940432cf70f08ba17bffc8b9a4373d95240432d8c80477444bffcb85c7e6c52ca40432f3c4141f247bffc53ef2c8ceaa440432e9f286abe76bffc5472ae1d5f374043308123ca123bbffc13c981cfdf8d40432fae66f0a4efbffbe84942c7ae5e404330bf3907d5dabffb82a0ac4c3d8b40432e7b0d89cdc1bffb42edb0585e2240432ff77fcb33bdbffb019161df0f9240432ecbd3236445bffae747f141877140432cbd80940f16bffb127a802c68c940432c6b9fc9920ebffb17ce3512ed7f40432b37cfff4b13bffab79bb57da5c9404327e9f47029dfbff96eebe8685623404327ac61b2cd73bff8efe242a233694043299db20ab240bff8ab0fab43bb1640432be97b035677bff7a8344a56ddab4043302aa99b5e2fbff7adc07ac8b7d940433d6c0e3b5719bff7fae61f0be7734043441cd6e3af9bbff7cde9dcdb96474043481750133dcbbff73b77f1d4184640434a6d5352ebe9bff717f42ded56b94043518860613eb5bff729afc4535695404353221209d3fbbff6bf3d7dc28122404356a9cb33224abff5dd653041a27340435a1b8eda5681bff57d3d6a3b299a404356b55772242cbff48a355a32841540435a84912dd413bff3feb83edc6fea40435e8c2237b853bff2f0c0c125cf9e404360a69a9a30d5bff1ea104069fd7540435e6e4e6b8cb0bff1da39d57d8f3c40435b0f70df18debff06aebd717ee22404353ed104615b1bff005f4df295f8f4043494c18650445bff06a79ea1e38c8404342ebd01f5f0ebff0392bedef873740433f94c34ea761bff0f32ed976174e40433a5628adc090bff181884ed4b58b4043380ed2224399bff13c3c601c64294043373a6c152f9bbff15da9381490d3404336ee7d5892b7bff1677b91f1af8740433414605f3b4fbff1594d5287fbfc40432c50620f8c07bff0739a0ed6d4db40432b5267e3b66bbfefa5cd506f1d094043290bf89176b6bfeef6fd3665dc6d40432348dc76d2b4bfefa4d86e048439404319816fe8567dbff09683109ebc4c404311a0a47f14a2bff05c912830f698404309b039dde10bbfecce4692941f664042f629184bc00cbfea9204965687e64042eea3e451b4e5bfe9b88ee9dfa48e4042edfd5c7d9594bfe8ffb8e08f54fb4042ec1e6568310fbfe8650c58cb3fa84042ec5e5daa1071bfe83fb053bcb7fa4042e9674ba920cbbfe8070d0efe97ee4042e93111a599d8bfe843c821167b174042e8af0d720c16bfe81219ed8952474042e4e3e5c312e5bfe8d30f4f30f3464042e8d8a2e41b1dbfe97b15c618863d4042e7be94b4c737bfe9b373de26c4ef4042e609ed87b5f6bfe9895854910d154042e47401192fa7bfea76a178fad7664042e0aeea49f177bfeb08dba0131f314042dfbfd94b82adbfeb83b07c67b8294042dc835bc3e4e1bfeb6cd0407d51434042db4f79adf478bfe9b04cb27168094042d440049260ebbfe80462cac7dc454042d225e76e1667bfe7d0a9c6ebead34042d10d43c469c1bfe7491dbe8a72684042d140dd68aef4bfe7088534b2ba274042d30ca925fe98bfe73c9ff09825734042d483915e5087bfe7b053d7067b5e4042d46b196907acbfe75b7bf04c94eb4042d4bc9334b6d2bfe7dd12fbb8d1214042da5dc807403dbfe7a5f85ddb63a54042de60b287d21cbfe7dc24c6b3d90b4042dfc69a991df4bfe7792f963d10244042df8e94bcd4ccbfe7daf13cbb13b54042dfde22820271bfe7ffcf317409c54042e3e6d6504c55bfe7e31ed6b866974042e3efa4d7d503bfe7af164d40c7e94042e2dbfd79346cbfe7d790dbb880994042e1205406451cbfe715dbc84e74134042deb9661f910dbfe7752fc9601f954042df9af8741a84bfe757a90d99b5624042de8a828dc1febfe79fad31a6ec134042de07a0dc0bb8bfe7b5a2bf90acbf4042dadd92575b06bfe76815e53364cc4042d6d8bd865dd3bfe6b603f74a3dab4042d2167d811b5abfe60680a44406594042d0fe251aa7debfe6789038581c5d4042d0ac68cdb89fbfe6f7ebd6ca9eed4042cdaedf5bc5a4bfe76b4e49b1714a4042ccfe0978d837bfe909387c2e8ae94042cc1d80076615bfea3d7ba2a7791c4042c99a498d11ccbfeb3389a2df1b374042ca82529e3b1dbfec1197d549481e4042c9dea5a7c4d6bfec2105e47082754042c8f5f7cb4a8ebfed6a484e2b0ed64042c6eae3007377bfef18a60e3e7e8e4042c7a2b728e56cbfef5762303208224042c8913c460a03bfef24f5041ae42b4042c7db812bcac6bfeeee6000acdf574042c8004023a8f4bfef126285dc22814042c8dbfc393acebfeec3704c65aba34042c8218293900dbfee6a5885410bd34042c8be7df081efbfef39f1ca1878af4042c9e38bb5d63cbfef35b4aff57b984042cb5494303cf9bfef791eff0d808b4042cb67138ec1e9bfef23b9a937240d4042cc71339ee8e4bfefabef729cb3324042ccfafb91e4cdbfefcaee69075e224042cc390232bdcbbfef7d3e13586ecf4042cac9f56c7e2ebff005f7de14eb164042cb7b1bd2f7e8bfeff9d2e127bc764042cac79e2442d6bff028987a8ab5a64042cafcefc40c79bff015b5cd4e495c4042cab4b99d3c89bff04977a118b6524042c952c87bfc9dbff12f2c7aee6eef4042cac5799802a7bff18857facef9df4042c8cfccf1e0aebff1bd0c02a04bee4042c8e1110b84debff208c98431c2344042c6ac13c0626ebff1c6e272d9efd44042c45cc6f7c312bff2a9db7e5a3cd24042c562b76d9d9bbff2c953c749cd764042c8147046dc55bff36a6b4e8b30ff4042c9a4ec3bb08ebff3f08e629506c94042c9bd437132b7bff41ea8885b14094042c87f5a05e378bff41791c13ba7aa4042c75eded0b8f4bff53807e2e72f3e4042c8078d031977bff640ed5a3e98754042c32aaff50356bff66cea78b7d54e4042c0ec9f58a8ecbff6d8e8c5b7ebd14042c07a68e52465bff75ad95edf11274042be47ea6f9ff6bff7b44d4a3e453e4042b9ed2449fb10bff7bf4507461a6d4042b7b6edf532eabff79fd4c57ada224042b7388a30d71fbff7c78e9b1f10f94042b6224876b3b3bff84ddd573398894042b744a11e0c1fbff8c140274013744042b489cd0a81b1bff8f447337044e24042b4a58a03b5a9bff8f2351ad8b82d4042b3cbf7a76354bff973ef27733f1b4042b377e7dabc9cbffa07354dd0d4804042afdc10416bb0bffbcb0f424e6a584042b8a836ad07adbffcfcf43b0c00d04042b9cc98a3bf27bffcefdf6d522cb94042b77e02826ee4bffd92fd8309458c4042bb0150cf9daf00000000030000000100000005bfe8a444a293b5a24042d857f2b25c00bfe8d633d5e7caf84042d90c029e262dbfe8b3ba84423bde4042d9f896d2f360bfe877a513b173e84042d8cb9149a522bfe8a444a293b5a24042d857f2b25c00
+29;Málaga;61;000000000300000001000000b0c0125c0cac9450b84042492118fd2f9fc01271d24db79047404247182a9099b8c0128c00f39aecd6404241020f95b067c012b40f1ec5acb740424072e400ce90c012c7633eb6159e40423eba1b716cf8c012f91f1431293240423dcad04ca2e0c0136cacdd6598ae404240dd9c0e2442c013a6123ce5dbdf404240b65c6ea70ec01406084504273e40423ad1e834dd2dc014539e48c4aeb5404239a65273af13c0146efcdb213d2c40423785f8dfc79ec0148fb78251983d40423686dd5f163bc014a03f25a725ec404234b84a31b004c014b19791819d244042353e56ce7f10c014e1526eaf2ca14042300d55eb9156c015004e3ca3f53e404227b74645e820c0151c7f7714c59b40422b26dc37ced0c01547c448889eba4042299bec580b0dc01542b856e2d49040422bf277383d2bc0155729ef81717440422f6d2dcf5fe9c0155702214b06ed4042328b45bb4283c015637d0c5ef7cc404235963662bd90c015950a8ffbe10d40423c1b32aba3dec015a6d0452fe8844042429a75e8f68bc015b73081ca67664042444cbb0edf41c015d376be671d35404244ec6de318a5c015dcae4cf3bd6c404243acbac07d2bc015e5164aa2c419404244c152182e53c015f7358e09f703404244c38606eaacc0161795138098f640423fcd21979092c0163d3d0aab075e40424079c6127c0cc01649e329b07d8c4042419e7f37ffb2c0166e81882adc4d4042418a25975810c0167275995f371e4042455332c04f44c0166167d889f7ef404246845c3d0f22c0162aa412a1f6be404244d230238947c01625f473a7390c40424379cac95ed1c01617e28545cf98404243fbd541182cc016021b5d4b0128404246182e3b0d03c015f54da17382b040424904d5833aefc015d7e04513744040424b5d4a30d945c015d2db03d862ea40424f4e7cc9c3f3c015c106d74e74c740424e9d33752b03c01585daed65b85b404250de31549cf7c01555d6052fbfb740425610f4107ff8c0154bce526687d2404256300a15cfeec01552538e7b0b17404256f3e6c661e9c015465d0d3b15c5404258619d7cb0b4c0154f7bf30cf4d3404258f23e54013dc0154c6ab9d499ee40425cac4fdf6658c01529ead77137f340426338c5a85a16c015477e96918501404264b3a52252aac0155ce41bb7b04a404268e2acdbc948c015547cf004792640426b57656c9657c01539a45fe8954d40426dc593c64e8cc01534d23d71720040426f5076c5af22c01514403d5cd7c84042712df86fd798c01510b23c52c1994042700ae2041f27c014e6c8bd9e869440426da440806789c014e357660fcbc840426bde52c8c726c014b066115f817a40426968abd2a39ec014894a6af708a540426b56187d1bd7c0146b99f35315c9404272ef92b94474c01458da1240db79404273da0367cfafc01470c2109ffa2040427acb6224c975c01461dff0dab7e140427bf11a837dbec01491ccbf24b2564042807e8e8a60b1c0147dc9d7fad3464042838b6242da09c01472ebbb0abeb1404282723cbbfba2c014554e8e3616c6404284070c38c874c014365d11a8f4d7404283ead41caae4c0142262a90662e04042864351705779c01418a80f5bc62d404285e2c1314960c0141b5b2787c8254042869d678ae4dcc013eb99df1ff1c9404288cf93752c16c013cf1ed673ae6840428c140e72e808c013af916c34c2bc40428d5ab5b6b943c013a213bf71e7c740428ec1783eefc4c0139c82c34f86b74042919cb71aded4c013c549f495be994042942bd6e23e3dc013c22750da6ba54042967d50964e14c013b35d23adc054404295d845394db2c0139ed5d418acb140429747592980c7c01397292ec4dbdf404293f8c0053e2ec0138593743b9126404294e6031aa2d5c0138083126e978e4042943fa716d221c0136d428a133ecd40429637711af54fc0136a5b4befdc624042996b3f55cdb5c0134dba5d1130b3404299b0b46c9d7cc013470226ba98b2404298954029ccebc0134f47d4aae7a0404297eddc0cc1ecc0133265fdc6fbe44042960e37b76294c0133458e504b832404294798d4c50b4c0132d3fbef68f2e404293a5b2f593c9c0130a41159661a3404296b07396b6cdc012d59cdc805a3f4042994e1cffa64fc012d85704dac16940429a7aaee19928c012e8a963bc121540429b05965bbb57c012ede21e76405740429cf26a063f46c012df2d0899231f40429eb4d947fcbcc012f1674089909640429f56bf387e66c012e0f6ca7fc9174042a13dbbe71034c012db2b9bfee86d4042a05d058140aac012c39e523b0b444042a03cbd12ce17c012a291c1bc81034042a0fd78d8143ac0129413730208cd40429f93f5464ed6c01274eec8a8ae684042a0b1a11346c0c012751adfb2e11c40429f21ad5de075c01262962a5f8b3c40429cce97f79cc9c01268c0fc78d0bb40429ac84a24440bc0124e095b3fe41340429ac5cfa2c009c0123ea32f89495940429c126009aafac012286a6dee2b5340429b0bf886b9eec011ff53e55a624c40429d7c0f6327f6c011fe0802c79f5640429c96377e3554c011f6f3c9b3344240429e89d8f1c931c011e903c440f34c40429f5341860741c011f16169d256a54042a040e779a9eec011e87e6a71c16c4042a0f13dbaa0a6c011db488e16e2234042a0441ba79520c011df7ab65d27564042a0f731d47d34c011d3f04ac50f024042a11491c39d8cc011c6b1da023f764042a393dec49bfcc011bb69b0eb11534042a30f842603bac011ad2e813690244042a41f1ce419f9c011a126d1b728874042a30b75dfab21c011857fdfcdf5304042a34ab8cb6316c0118116da620bb94042a0ec8adea6fbc01187c1a4d0846840429da344d3999bc0117c8e881892c940429b8bd60eb74bc0114a5f59c689ac40429a2dced22d01c011542ea197d99540429877d346f599c01125f4d427dfee40428f4c70fa71aac011170cbebb784d404281e85155bba7c01101f8d6c98375404282f10b8e8720c010ece3092cd8034042822b1e6b13e4c010dc97935a0f6b40427ef238367d40c010aa9f698111d240427a7f845e62d1c010661efb878f1a404279f2c5d44ee7c0105c1ee06ae45040427750a8cb210dc0103eb4f7aa2c4a404275bf45db567ec0102fa97c76da38404273966c643d7ec00f6faa96dbbdf140427102354aa0cac00f59497c75c75840426f1d4ffee84bc00f1fe07fee330a40426f0bc875a51ec00ef0dda8b48c0640426ce3105b16fdc00e9e0af4698da940426d81f861bfd3c00e25287a615eda404266a6732d0481c00e22107f3a58fe404264873fc2ec2cc00e421bab685f4d404261d98cc618f6c00e398b8c29885440425e6b57c120e1c00e56a79ef37e4640425f8894d575cfc00ec1f9f7163b4540426074530bf433c00f12df18ee7d3c40425ecfbd0a3fa8c00f5cc2fe869d0240425ed2e3f4fee8c00fa87a25e97c3a40425cf06b03fc5dc01005128b95416840425edd41309948c01049c3a699987e40425fd3317598dfc0106e873ced12b540425ce2e4686c48c010b582a185764c40425b8af7fa3be0c0114f256116230b40425b0efdbabc90c01194add4a03c0740425c719685bdf0c011a63907aae69640425b6ef5e3e9c2c011a87b8235019d4042596ea05e513cc011a72533962f8240425bdfd3bccd74c011ac7feecda89540425bcc5983eea7c011ac45efa36677404259bcd76c0d1ac011b5cc5a9d40aa404259c4658652d1c011b3ea4456f20040425ae1ee9f26efc011bc0411eea622404259cd487926c4c011c3fe57f068194042572d4baa44dac011ed597544d92c404251d74c5e0db9c0120c46b5ad31b840424be167d78846c0120e5a6ddfac7940424c814aa982acc01227baa3ddf3c540424a0f44ae273dc0125c0cac9450b84042492118fd2f9f
+28;Madrid;30;00000000060000000200000000030000000200000114c01250f95846123340441bcd158bc738c0123e5e672d4f8940441c8482cf305dc01246707b1244fc4044211d7ad61b3dc0121e15910bd678404425851d5e933cc0122f55aaac667b40442bc0ed3f21eec0121b6e2e7e3a0f40442c24cfdf0c26c0120500194438834044285d15dcd880c011d2b2f78e975d404428e08335dd90c011d7a68746637040442bb26188fe65c011c12b474de9bb40442d25f65a75ffc011c660e5eb4e3a4044315e9f4588a9c011afda0e875fe4404433ff4f0f209ec01148cb6e27fbc840443484ff502427c0114b42cc947ee44044363417b281d1c0115d7112b42f14404436deec4de04dc0115432d479d08d404439712f2cbe50c01147609a748aed404439da7e41b594c0114d0c197173bf40443ae4939960a0c01143415136b1f740443b7d6ff1994fc0114f3aa6b3cd3c404440ecbfc6d4e6c01147cf63bc2343404443ea8b573f35c01150185cd4528f40444452293c283fc0114b79060c6fb640444658b6045e5fc01128344034b4a440444837846c9cf3c0111d421898162640444d34c093a5dcc0112905ce066eeb40444dc85ad1769ac01129af8e08d2f44044505c847f1a01c011159bae3e38c340445083d1305ec3c0110c6ea17beec240444d7689a596e4c010fb544fdad61d40444d1cfb7b0277c010a50d1cc0777740444fcdb292864dc010b1004d57cc9b404450afb55c3a35c010aa92496e330f4044538a77f356a5c010afaf3e6051be4044571ec35590e8c01093d5e3c42c8d404459115c0643c5c0107ba93ad4f0bc40445e2a8899050ec01063518cee182a40445fb5ebc3ccb8c010628f7a4ab8a5404461f476f10954c0104e8a84640e84404464fa106dc795c01047c614298b484044659f05113f76c010212b768c8a794044640bdc0e2ab3c01003ba53561bf4404464f4a5a85f74c00fd66038e99a524044646c4af4f970c00fd6f4a2762e7e404466524b9a65d0c00fb26ccb7420ff40446966b7a4c775c00fb95b12cb33c640446b434f68a691c00f93abe5bb4a0840446e75f1d693eec00f89f1428922ba404471c9c16c3de4c00f9e42f8c570844044726287f94cf8c00f7f18964ee16640447534fe1fbc45c00f80eb6c977a54404476add9390e36c00f5fc414ed4cf640447707e677dd76c00f41f044baded440447a475d36bcd6c00f0845d905c8cb40447cd3686be8f6c00ef5abf8b9313140447c4c50e22bebc00e403ce00538d04044800a37f87b0dc00dec73ab1d7a90404486ddaf5fcbe6c00d94d95f9c0ba840448a7aecb8d903c00d6894aa1b9cea40448b18d798bee5c00d1160a06d8d124044902bd78be4f3c00d0fecc3d1eb3440449173ad433c0dc00ca96983f48e2b404494a96b9c8ecac00c59eaa5ea79a04044953a66a37815c00c4b2bc442d4554044948dc465ed67c00c542b4903ffea4044932848f68b5ac00c04b656c73fa340449054fc553f67c00be8f66580151840448c11d3022c3cc00bcd1d86b4cbb740448c31b47eb376c00b964cf243764440448a5251f40af7c00b680cb011ab2440448a9c6ba41b87c00b68757e315e4740448867a1edd996c00b82f03d2e22974044857633855ff4c00b27d5911693404044800918f453e1c00b58ab9954021440447e687b42db36c00b547232e721d240447ce764c48bf2c00b974115f4dee6404476155df7cf52c00b9c3c2af5ef53404474d8c3f356c7c00b8d707dfd980240447413a42e9561c00baf431ad439204044740d646a6b62c00baf4e748232f640447301109ac6afc00b844910fc37db40447211304b6eb6c00b8f04fe0e04c84044718c9ce48559c00b861e43a6b7aa4044700b776ace33c00bc8066ba15b2740446e9ab74ebedec00bb9fc20de831440446daebd57b9d1c00bcf8625c9684040446cf6e10c38b8c00bc20b289f7dd840446bed43ee49fec00bd5628cbd124540446b376601d65ec00bd1b01813d0a04044696a706bf8cdc00bef7d4bec4dd84044663299ca04e1c00c17b342d1d087404464ed6e37c10dc00bac0d821ea8b8404464026cac50acc00b8e03c80b9ced4044617b706a318ac00b9a737f064e0140445e10c6e672aac00b88f99dfff48840445e6dde4a22b9c00b7ac46a52af2540445d2ea6a4a295c00bbf96f10c8bef4044584fcf7eb672c00b889c3315c5d44044564c757ff00cc00b69f38f36f2ba40445610058481e3c00b6799f1d920c4404457580db98d3bc00b3ce56b87c108404455b6b33cd038c00b34a2e50ba1b940445855b1dccb37c00b2596ce15d5b3404458a278fde515c00afbbf7678016f404456bf716d5e30c00ae6084379042c404453adb1fd4645c00aee383f58fdc0404452f2b002b407c00ac3c8f83d2434404451a18ec60101c00a9e0baa46ffb3404451fec2865578c00a882f5390dcee404453dcd4ccf669c00a96e31812c657404450999038b69ac00ab547cacd76ca4044501bcf205b8dc00a92ba04845a5440444e5c51d672a4c00aa6bd9debf4ed40444d4e0ba48188c00aa04e9e377cde40444c2399e0efcdc00a45c5f57e5806404448d43a636cfcc00a43cb1aa3a2e64044468600dc2f27c00a60841bea278d404444cd7ee1baf9c00a5088706b3bd24044440a0d5f8f07c009ffd37ae6d105404445ac251fd2b8c009d97816897bb74044440fcce4fe25c009d9edbe11a6a640444513d5e6b817c009c8696004bc424044435283dfb7d1c0099981f4c87a94404441d972463259c00996b9d839a3a14044389bb8f2692fc0093e7e62feca434044383f12082f13c0092dcdcb60a23e404435b50793f312c0090b61f7b094f8404433dd1a12e1ecc0092591a19fefc34044319aba44ceabc0091b36a502ae5c40443011ca690086c0093a396186bedd40442f10e5ebd7abc0092133a424eb7b40442cde9310f1f5c009767dad215837404427754f21fc2ac00979430323bab440442285c69e3489c00993e06bee992e404420f74e19824cc0098e3b46fdeb5340441fbfadd565cec009631ded50d0d340441df94672ab1ac0093ad05befe248404421c15d314d44c008e6c1b8fb11624044248a8a298684c008cfee29a4fb334044239887b1f6c4c008a33bead691e240441d27ab50e258c008afa2a4ec4448404417d39c7b318bc0088af26424dc734044143687f1a676c008b6d68a7f8f1c404414dc36e06f75c008c627ad20bd9940441239caded860c0089438bb077d78404410c91909cd71c0086c828406e8db40440cb8bdf4f640c008b5ddf45ed97740440909375cf4b4c008f20d2a6891ee404407dce6d60d69c0094af53b55ec714044084df5f98e44c0095422ab6a6b4840440b9da3d92768c0096c70eb8bbaf040440bce39e5bb17c009a8dd6c93625a4044082b91d42861c0099b8ec7d0dbf3404407be0edb8772c009f2f0584acd62404406d6750a4bbcc00a08e2c41ec2274044076c5553439fc00a0fc76aaf98ac4044067355a07910c00a1e457c5862904044074f1d251016c00a32ed073b18ec4044060fa7548f9dc00a6b821735c071404406d2fb4925d3c00a7e8bd162914e404408bc93c04cf4c00aace35f01e58040440a5fecbe7388c00b058b5bb5aabf40440991fe897727c00b0199fc625e114044068f8d01c1dec00b21da87edc208404406324d71c537c00b24e0039c7de1404404ad2585a92bc00b356510d974af404404600b2d85a0c00b65360c341e74404405ffc728a69bc00b715bb5bbecb4404404e8dde94395c00b91572b689721404404c3eaf34adec00b962d673029ae4044065eaa945780c00bc2b2df211e6f40440535bc694126c00c0e0e683c6e354044063af2648bf1c00c2360cca715b740440523328e6171c00c285e1dd3b6b4404402b33c7e9ca5c00cb859a243f35c404401b135d18ceac00cc3431a061092404400256027c426c00d1a9b5e6ac46f4043fe8319bf32a0c00d1374295039084043fba25760ed8ac00d4af32cef079c4043fba0008a8340c00d94a9500130684043f92e107a87c2c00db0583a8fda0f4043fa33e4625981c00df3720cf3ea854043f86c3634198dc00e0d7b8d72a2684043f5e7005b2adbc00e3afa2aba240f4043f496d9f2606cc00e6f68286603474043f13e7baed59fc00ead27ad29549f4043f3310a99b6f6c00ef254fdf801c94043f3d26a527b9bc00f00e0082cb90b4043f49155ef310cc00ef0887811bd214043f5617574e5f5c00f0063d68b89d94043f6e0d49d0bfbc00eb86936247f3d4043f892001f5700c00ea805c97ecac94043f73d5ce8f55ec00e985680d9f3ec4043f940d382a718c00e79f4278d404e4043fa1b881de897c00e444b30d5e0c74043f8ef103b0303c00e4a66774fba1e4043fa34cf99ca86c00e1bdb8db86d774043fbd7a483cfd1c00e10540faa4aa04043faaabdf529cac00e2a5b35ecdd1f4043f9ad85d0a028c00e0934099ce1ce4043f9a6b4ddf649c00e122d9e5a03e94043fc03da07d164c00dd2d02b7c04b54043fb7634e58fe8c00dca27d5ee19e04043fc3d2ce07794c00de782498aa7544043fbfec804ef87c00df9116a46d6e74043fd892752f796c00ddf6562a7b7614043fcdd3c9c129bc00de109dc555e8a4043fe17a38cd9e5c00dc2bd82cf4a234043fe022664b276c00dc776829bd9c44044000da78ee0eac00d99609b3185704044028060e59568c00d6f96f173a036404402102fbaa525c00d544eb8a85b3340440481be8cff3ec00d348d2075a78840440410487e044ec00d2d9653f2790e40440554108decbec00d16b5594ee1f840440553ff25e56dc00d1e04bad861354044066710e3db90c00cf9a9f97cf2de4044070606929eddc00ceeba19521cbf404408cead2c737cc00d0818fb79888340440a049da0b1b4c00ce2068dec44ec40440a7ab4ab5caac00cd474df8c285440440be06ab95c58c00cee3ba3556b5340440c2482225105c00cdc6c273cfd2e40440df29fa71c31c00d402a7fd2c07a4044100b25d686e9c00d56a7d50a77c340441257588e58ecc00d7843d0cb703d404410ee36138d51c00dc7193063dc2f404412e8434f23efc00df47aed175645404410ecbce86469c00e29e2eea2349e404411d7d69a6fc8c00e44146737940f404414afb2f3e64ac00e6fd366190e9a404416a2b63a8686c00eac69e54bf4a1404414a732920128c00f02b502df360f40441879fc343251c00f4b2f0ee1445440441854d00cae76c00f72fb2978ec9e40441a1be74f8d90c00f9997a875210c404418352a41a59bc00fa67f01e8b8674044197b9dbd0c32c00f9f785707566a40441b3cf250e23dc00fed9225061ed440441ad03276b98ac0101ac95961008740441e28831ce6a7c010188f8111e35840441fdd93167b4bc0103555c3c5abe04044203219cbb6abc0104aa4c8b2f2ed404421fa4fff6924c0105262dec776214044222b199c91d0c0106ac62e91d29540441ef466aaeb0cc01095445ff8b07840441f61f910c4ecc0109a57c32cdd5040441fe6daacabbdc010937280d98cd8404421df191fe19dc010a87530478a47404422a2d5ff0bcbc010b09fd4cfae31404424e078164d5bc010c3738ef6860d4044260fb7b8be78c010d0b34af92b2d404424c646ebf7b6c010d01b797a8cb1404422689d9aa783c010e7bfcc2ab2d44044228b5e73e4e6c010ed08fd0ff1cc40442369d6976aafc010ff3b5a26c59a404422e97084d5f1c011143ecccd005740441e311db9fa38c0112e4608f0360040441c044c98008ac01139f4a7428ad140441c6b9caab4e5c0113b616bc48dfe40441defd57f3cbbc011493c6a7aae5840441cf76e451bd8c01155db5401bd7840441e8493f27f7ec01164da0ec3810f40441e4db5efaa62c01161aa1d52ffb54044207c538504afc0116f05ae6ab70340442369ac7f5803c0116cf08767120840442780e7a8e88fc011853b3842f01e404428bf6a74cf1bc0118c77248248f94044268cbcd3fdbbc01188af811db300404424ff96209be0c011b56cdc660bbd404420f79ee3ec8bc011bdb0ec468fb24044212b11e70838c011bfec88a1462e40441e4c17aa2f83c0120a0629ee439e40441c0e6abe8732c0121c94c6b23cba4044199ca436bcbcc0124cb440dc359840441a714096eb61c01250f95846123340441bcd158bc73800000005c00b0e9cdbbac8b6404450b34293899cc00af94d1cfa72df404450192ec9b0d3c00ae8aa3d6f90f7404451b7c82dd6a8c00afe0d97a965a7404451f3ae493a43c00b0e9cdbbac8b6404450b34293899c00000000030000000100000007c011472c9d4a86c0404452e69c8e8df0c0114be69c1a971f4044543a4942fb39c01128ed0c997ca54044571ca9cad05ac01111dc80ec4607404456578a12f17dc01103f82c77016a404454b8d8347031c011062f0dd6fa9b40445363104e3474c011472c9d4a86c0404452e69c8e8df0
+27;Lugo;11;00000000030000000100000107c01c40485ada0da0404546d11306dcadc01c472ff14e2541404546e9f7fc8c95c01c41736ed15dc54045463754fc97d2c01c4892008cdc8d404544da57465a4fc01c3ce5d48e3fd2404543e4d3e7fcb2c01c4eeb230a5759404541062840c475c01c4e041a40f3e740453f957e99856fc01c66ae60ae9f1840453be2d4428457c01c6622d5a08e8940453ab9762542a7c01c98d9dc0785e4404537d3f2aebc4ac01c9666a242d7e4404535fe6db0d4ecc01caa30898aadc4404533c503168245c01caffa5796e2274045308aa376560dc01cc31690e616cc40452e98fc187271c01ccf893c98fc55404529b08bb06f41c01cec79a4fef4e040452df86ff7ce72c01ceb2a8110945640453034e3e04254c01ce158e69872494045318f5c6516edc01cfdc1673565b4404531e876c1a857c01d13e4956b61a24045351c453ced69c01d29ce3274e9af40453511166400c2c01d37cc4296dc03404536e54f19ee94c01d607f7838d467404536fe21ddba1fc01d7ac73d6bc64d404535ef1f8c5121c01d98d3f7275824404537c06a12ee45c01dc9a843220b114045341b9506e2c9c01ddd01e6c62e5f4045341db79a7a59c01e07c348836b494045318217bf30d0c01e2af8d77de6f3404531355e37291ec01e4df2b71fc4f6404533d2bada536bc01e77736198ee9c4045312e43a62e39c01e86911ad62b574045341a5e8a12d8c01ea6095151453240453625d75da805c01eca9f47029dec404536fb53b7a6e5c01eda4a9bda9187404539e786c897c5c01ef4e9ef36480140453a72f8e8560dc01f02cbecca658c404539bb52fef7e5c01f27d5224a9c7640453ba5c43f8a85c01f2745c90462b340453c9b16625343c01efe450c23a4cb40453d703a40a9d0c01f0f631dd3f2d440453f3a074905bfc01f35fa3b44fa8740453d798ff95ccec01f46716446509e40453eeeb75a6c2ac01f5e4b6da2d6ec40453ec928b54d4cc01f722c4dde26b440454086c7153909c01f82f62f46bf8440454055ee741175c01f806c7504751640454166be635b22c01fa71870dc837240454112c8a07e77c01f9b3d611ab347404542bbf541be9ac01fb22e82db784840454334a14762ecc01f8e0ff24c9f52404544e1559f32a5c01f8f673622af614045466ce186288ac01fa56f3267dc334045472d62884f34c01fb9164cc8859740454a0f900d4b3ac01fa6a4ad2f33dc40454bbbf7b083cac01f91f912c8510a40455097cb521236c01f8f10f898241b40455783c7af456dc01f721a2f3c69d040455a64bde4fd71c01f772f59701a0040455c3dcd19679fc01fbdd1bf723dad40455eafe64ca5a0c01fe9e48e099886404563ac8e75c678c01fec04019ff0d6404567d9f2e9dbc0c01fd35c7f0f883c40456b7ccd83df7cc01fe0210c25637940456cc224433c7cc01feeb21fefabec40456bd1757123e3c01fffb9cc1cac3c40456ca897f34018c01fe95bd398f7664045704f78a3aac0c01fd31fa76dcb3f4045713624679bfac01fbdf657934271404573a470080bfac01fc5f63163e9fb4045756bc564bd5ec01faa4b978313f240457755a6d70014c01fa1f7a0018a11404579c2e5d24623c01f9f0a7cca6fc040457e21759db351c01fc59df97213bd404588a7e414e7efc01faad4fe499c8140458b4c7a38f892c01fbf8f6ffd9c8140458e4f6d7fcf07c01fcd0d36632d3b404596b0737acbf9c01fd8763d852ce24045984c84415c86c01faffaa8ece2864045a27dacdca008c01fc9d7feb7b4154045a49c60a90d2ac01f8c3d4bcc17814045ab2898f7188cc01f8a62264c00454045b00c0da61712c01f97be27ee5b934045b210af5a7619c01f871b0c75da214045b429fe2b3e9ec01f4960ca4dca164045b36a2b32efd3c01f38b395aa5cf34045b69b21acd697c01f3aa607329bac4045b7facea1d2e8c01f1ecd63533f214045b975dd003a7dc01f12b690d3d5de4045be69774143dcc01f074b99f624a44045bfc3b7224934c01f08fcda6442aa4045c11599083e01c01efa4ab56c193f4045c185d10b8703c01effa902a963cf4045c27c5f7097b2c01efa5d444293e94045c3e56e52ddb8c01f05587b051dbc4045c4121877565fc01efdec305090fa4045c55cf47590dac01f0a8ef50380474045c625d11dc7f0c01ef9a911e5385e4045c8fbecb5756ec01efc290f208cf24045ca562ca35d4ec01edf06cf520d3e4045cac0fe57b447c01ee1ce047cb3d44045cca32effd8fac01eebf380eba2d04045cd1e9d3540bbc01ee3a96f94514b4045cdd6c54088d4c01ef122a16207544045cfa234e8eae6c01ee0d12905906d4045d0de8d495432c01eddff1a494ecb4045d2afa9e49e03c01eceaf3095db314045d26614ff37fcc01ec3967976050d4045d3b8050363d2c01ee08731847ecd4045d7e4106f52b8c01ecf74d720157e4045d7da78401c6ac01ecb5c8be0e31f4045d90b4a9035ddc01ed49bd0b415a54045dadcfc8bbd75c01ec618e31d3da14045dba87e6e9ae9c01eca857cd716274045de7b0302b636c01ebb7e2278588a4045dd713acd27dfc01eb1efca63f80a4045de1f22851020c01eb09ecbaa046d4045df9442ba0644c01e9e120e7563b14045df2ccbbf4a72c01e96d2e095b5134045e038f6812631c01e889c4d6448104045e01b619acfa5c01e84b3405ebfd44045dc6eb3abad5ec01e6ca380bceda24045dbdfd2b05df9c01e7564aca7e93e4045d9f81438c71cc01e6bb994024d594045d939eb01dae6c01e751d9fabb5044045d733da3be4f8c01e6f7b62d56ae04045d60857835acfc01e62ffc99bb74d4045d64e25f97508c01e62fd3711a8e44045d4d1b52fde51c01e6095745fbd1a4045d6f758a099d8c01e671501cd68314045d744cf790abfc01e4e1b53c3768d4045d8b4132020e6c01e56e356d1f3d34045db0eaefc4ebdc01e3bb24b972d2e4045db0b80061faac01e32797f36b0b24045dcc56392dda4c01e3a3ec299a9474045dd725cf477b7c01e21fe12bff6254045dd4e06be6023c01e18914b8ec11b4045de4ed97fc135c01e0ee05e7a08dc4045dc05c31a68dac01e0aa3217183944045dcfbd972d614c01ddf79a57fce394045dcb2c6e509e4c01dd621d8c2cf494045dbb70acc3f67c01de446c058cb1e4045dc0d74520c68c01de9e3d0521b094045dab9a509b1a7c01de05fb1045e244045d9fb837b6c80c01dd6e65f33dbea4045db3b5c7deb7ac01dd9984d693f5f4045d9fe66e78478c01dc5998623701d4045d9463970f61ec01dcbb7168ab98b4045d8a8bc5708d1c01dbee66cc2314f4045d9bdc8e13873c01dbd3e09bfb6294045d89cf9c937ccc01d6d8528da7af24045d5e6e913e678c01d626c66633ef34045d4105a9c94dec01d6c62a8d2d8bc4045d4893df92c49c01d6b0cd7e5ebbe4045d3c40a45ff13c01d575ed7f414b24045d1b833a98be7c01d59a584a32c304045d0cd4381d753c01d3d4ba58114a44045cf0348927394c01d2d7701fb3e0b4045cbd1bf04b821c01cfb6b3f133b474045c99f37f82dbec01d08024cf2882f4045c7bbbaf0702fc01d159a762fd47c4045c8027f56775bc01d01b890e6d3c74045c7317fec6bc6c01d0bc01f9546a54045c68d32abd768c01d05e4248ad7684045c6007fde17dfc01cf7ac0d86f39c4045c6917a845e27c01cfe550a6248654045c877fc00fe13c01cf1c45ef2b2434045c8d9d53e3570c01cb50721baee5c4045c82707f07e1cc01cb42e3c649b724045c7494a5f2761c01ca53f6fd77e574045c6e555bc976dc01c79e17479a4874045c6f5c35b5ef7c01c76bc803d40ed4045c7e35695d2aac01c49d8533528a44045c6c8a0d45ca0c01c3abc93079df34045c78a44896943c01c23556cddbda54045c6667fde290dc01c20bcfe1182234045c47463bb4c84c01c2f9596c46bef4045c156726c47ecc01c307615b9834e4045bd1ce4674839c01c5c63eabeadd94045ba46575f2edcc01c58512072d5fb4045b8c741aeb242c01c66c4be1329314045b86f8d275699c01c6926a0dc36ab4045b6a8212f2d48c01cb0fcc856e0274045b711b9619c3ac01cb4a56f65be764045b50472242390c01cacd009cbb95b4045b3cfb15f1952c01cbade5fb60cdc4045b23c18b0b729c01ca362fb3322d44045aff6ee315414c01c8dc2c493cbd84045b1131bddf968c01c8297faa1e1004045afb15632d65cc01c865b44d2cb744045aa699f3a0650c01c75fee5dfd4784045a9c004e1d5e3c01c675aede246314045a6e33f1f4fa7c01c3d383482713d4045a715344d4231c01c49394509e41f4045a2b74661d2f3c01c3f119c9bbdc840459f3cf5d8f970c01c1488da736d4f40459b4b72da9309c01c09d01fc6219640459c87630b3d20c01c017ab403dbb640459a88038f56a0c01be252be2cbab840459a24dd1dec94c01bdc0f13d55b2240459801770341a9c01bec4fbbb2a6ba404595515cf05727c01bd40c3cb579304045914447b1df25c01bc3f74ca8244c404590dc1ae8b994c01bbfceddda4c79404591e049e1f655c01b8b23b9c385a740459412e83c365fc01b8cae271a4b304045954522e39e90c01b783e5287479940459854f958be55c01b7ac66a3ab9ee40459709728502b4c01b72abc062b1264045974d04936b35c01b5b0bc64b981e404595442ccae440c01b49db1d3ef78440459258b66b72a6c01b4f783cca023a40458fc35feae602c01b7c921a40c05c40458ba68ca07ba5c01b93c07242dff140458bbdc65cf9b4c01ba985c10e6c70404589608bf5b0e1c01bc137a7d96fc040458b12d205acfac01be01b2dd8d64640458747cef02c68c01bd92dd67cf9d2404586b04073a75cc01bdc3c4f88f6ac404584737135662dc01be3e26e9703e0404583e393ee5eeec01bedbf10ddaf044045854d05302f62c01bfcd4675c15e74045828141ff28ebc01bd94e264278bc40457ec91925b843c01bd2fd28e8b51440457f7df22065cac01bdbe8adba1e3140458369ab841695c01bd3bcdcbfb40c404584ade39dc9aac01bc994e600a56d4045842ada44eba9c01bc367825f0437404581799cccdd72c01ba3d79302036e40457eb4ecaf1deec01b86004a8ed5ad40457ee302f58ef4c01b754ec5711f0e40457dec7daa8355c01b57d6ed2e8e8140457a9614fb75e9c01b5e085b9096de404576d754df9a1ec01b57d281cb245f4045754abc4d0904c01b4bf84f5c899940457520b7e635d5c01b5e2f30556e834045740382d06e31c01b4cf6be8dc4d04045703da637d16ec01b41971c9a481e40456f939ddfad02c01b529efe772da340456f826abc3f14c01b5c7dd80347f04045706829b950b3c01b55c0769f90f7404570e73d0e5becc01b7c309d67eb8840456fda05086c4fc01b5c7d28fe2ea340456964041a85acc01b7824111b1f30404566d9b912f56ac01b783fb1c6b70a404564c21bb4cd8ec01bbe0eb4cea94740455ed4999da8fcc01bc99eacd3de0f40455ee9c6faf31ec01bd682ab5a501d404560a4d466b04ac01be42a7458fe8640455e74246c3d63c01be43bd0d55edc40455cccfa7bfef7c01bef597849f14440455bfe2bc80d7ec01bf5f582c5e4f440455d0183519d72c01c0b261e33021d40455ca0ea169adec01c2e46c4d7d83c404558ee12845e6cc01c0fe2b038ed5d404555117110275ac01c0cf04e6d5c8b40455432bfe1be07c01c15fed2474ee440455372d3313fe9c01c04762dbfe7f440455249a2dacfb4c01c12410cee2da44045529681726c96c01c30220653f0dd404550fc53daeaeac01c335f62cd3aed40454c893446ae91c01c225e22864df440454ac378bd4d76c01c40485ada0da0404546d11306dcad
+26;La Rioja;23;000000000300000003000000dac0060f883293fbf64045042cc0bdcad2c005aad8a380df4a40450b0b7afda22dc005a75e8ba691d040450d86be1fb5d3c005d51da1d1768040450fc351b2e9e7c0060266fad8454940450f130248262cc00632e5163c23ea40450fd00690f15dc00655366846e64440450deb97a23767c0065236ffa4182c40450c0f77fe4f8dc0066d3f6d5bd69e40450a4d4a3e453ec0065c0d771d2917404508224374a77bc0066246b88fedb8404505fefb845678c006804874e3d7ac404504b08a3008f6c00696f29db9305b404505408cf20530c006c1d0b4492e844045046984a4a624c006f6a6a0796de7404501d905e28f7ac0071db88c56989c40450154dd31c9d2c007212296b66def4045022d3f03dd16c0074f19f8e94f29404502ecd1a2d307c007730c6c974f5f40450b1b73f9cce0c008466596e63e9740450b00d7df581ec00878bd4bfb56234045104085a38fdfc008af780f5b3cbd4045112e22161936c008c5c7c1fe9b2f404515b0a8e1ad7cc008e825508b4c944045169237d4c75cc008ec2e8e88c460404518192f97d962c0090753269004114045192b2f636fe7c008d48e01f203d040451b5a12814826c008d1055133e06940451ddea8123e83c008b56e590a438c40451f73eb3ab23fc008c820df513c67404521acf41f212ec008b78b609bcc24404522f344cc9ee6c008da731e85a71f404528033c2e9e3dc008c453a1569629404529d82f523944c008e2b187aa8c6440452b5683a0c519c008e099dbcd8a7c40452cfc43636841c00881f876d24cf240452da843355eddc008adb16e106da64045315456aa97d5c008d7980906f5fa404531748c106678c008c4124d010709404533dd029a3927c008cf8ecbb54aa640453558f4ec5938c008b90bf8d409244045361038d6cff5c008a01c5ca46822404535374f4a73a0c008a6ed428e1a0a4045329661ea087bc00883eb81d4e80c40452fc99cd710c9c0086cd610b218b140452fcc28e2f833c00881a31c2ce4ef404536636fcb02e2c0085e3751ea9d32404538facf472e1cc008837ffbec52ad40453c4803cd9d8bc008b92f253a29d040453d2b4532e505c008c1efa5ae949840453e79386c1360c008a263e3a19ceb40453fe237717527c0089340cbde4b8c40454398e8b1513ec008b6e43a853fa3404544e647bf7ea8c008dc11cb59852d404543aebcdb2bfac00912fce0e6b52c40454561fd2d0945c008d4787e5226a5404546cc3885e109c008a8ab94c3c6ea404549796b5dbe6fc008b08753e0969e40454a85df528b69c0087a8865e1fe8640454b6a85b4234dc008904bcd55553f40454f8a801cd70dc008b0f43bfc857840455059045546a7c008ac57e8049cda40455202042af6bec00824e3d8e089f7404550eb32711f05c00809bd74e2777c4045527744066191c007d8349247af864045514eebab344cc0079254c1f93434404551d51fe6940dc00753fc1b4c953840454f4c740e920cc007283418adc33f404550578a513868c00726e6f700b91f40454f87c2d78085c0070ea14ef83e4940454f73e7ae4f8ac00702a6806573ab404550c4b90aabb4c006d85295708c7d404551a215133796c006bdeb84fc5c3b4045508f1e9893d8c006c8fcc3b576f040454efe8142e93dc006bc01c1c37bb840454de6901ffbd2c0068cd78c8827f140454e6d7a6e7d84c0068f022381f67640454bb4baa78642c006b9ed856dd76340454a5f36556b5cc006950863da4d9d404546f16692b9b4c00684b7f8ddd567404548deee01d0bbc0066de7ca9042bf40454841a958288bc00638aeb226fb8f40454a8722bca10fc0061c88032a681a40454fac07c17b9cc005ecf6c804215e40454fac153831b1c005af5a4c7cb05540454cf07aa90af3c00571d4bb36550540454c0f05c85225c0058833ba0e25ab40454559b7e8755bc005a5531460457740454221d4ef8ea2c0056a2e50fed3b94045435c73d858b6c0056c389f1caa1f4045413998d0cf6fc0053f8412041fb140454070fb4eda1dc0052ea64602f73440453de0bb971a64c004d7c7a0e8ee414045407298d534b7c004bcec89ab8fe840453ef7accc73aec004d1487270c6f940453daeddf2feaac004c5ac7c1f604440453c862a804b03c0048c1668de4c0d40453f3dda3a3779c0046e9661df4bb340453def59e85c53c0043eaf918ec46540453de58790a4f6c0044ccb7f6735bc40453f5f2c5152eac00415aede24630c4045428cf8dd8819c0040ae74bd413e940454187fa5fd802c004261c4131d71d40453fbb9dbf31f4c0041df766a0c04c40453ebfe9354975c003d1c7d30a4aff40453e4a1ba02229c0039726e15a115e40453f999a3ef4cdc00382109672951640453e9b8b342ebac0035348ad6de1db40453ec9f7138c14c0033337c4e851e440453c57e4519289c0030359608844cd40453c8581833c24c002e8b7dacd409040453b16a09807ecc002d223e389fd9b40453b9a398babb4c002c625f4390005404539d3ae3f905cc002a79a102e6dc940453a1ced4977a1c002b10f7f2c8e8740453b775eb9d252c002a3d08e3c322540453c01b7653188c00263c6c8f41c9540453a8c77ce7ee5c00260046fc01b2840453bec279954aec0024dd97732c50340453bd273f1a586c002360b300146f54045392c78dc0140c001ed7e82087ac64045388ddee7f9c7c001e135b89600804045368bf728afbcc001b254703c1f8e404535eee7a356a1c001bb673a297a2b4045353f6d2400f8c0017d27c34eaff84045359a3f4cd831c001667992e0645140453431b07c342ec00136d665b8fd9f404535959e21e98ac000e5f1a8f19db4404535c5a46aea15c000d7342a291e5d4045353d88d97a52c000ec92bad82da9404533151a8c7bd8c000b684982217a5404531474588642cc000be13f95c21ea4045301aee13aa93c000a10e0d0065f940452f1ebe10f241c000b83d7386930b40452c698df45b18c0008f52d9632a9440452bd7d295cabfc00020cca6aea26240452f4526e61dd7c0000c675abe4dbf40452e2f97815544bfffeda6b013bfb840452e8ab81f969fbfffa886c1721d2140452cc91b31b4aebfff83738f3b3e3b40452d1eafe18d2cbfff6ead4ac8c87e40452aba9d5da703bfff13997f7ea18240452ae74efb8819bffee78182e63da64045293d7115a819bffeb23b15bbe530404529d9fb8dc43dbffeb4157c1bb7f64045287766e5787cbffe8352580060e94045277c1ae1356ebffe9eff1aec843d40452669fcd3a5afbffdee3731f8ff0e404524fcd627c7f9bffddbfc454f2e57404523406f828009bffe04eb20c239c540452126b9162575bffdf4d81c25137b4045205778a8c46bbffdb130df57243c40451ff48df39586bffd98bde632ad054045212f4056d49bbffd468f82697c4640451f3fe4c76a63bffd1b85125f395d40451fd375fc641dbffd0e163474d1ba40451d4d89b1d639bffc7b8d77bc130740451cb1bca60e1dbffc5cbde4fd702e40451b7237149437bffc432ab1a6ce0240451c51ed797bd3bffb590b34ded15540451ae0f375581cbffb44911f108045404518946b6fc33abffadc03e08a43e74045184115c154c1bffb36e0113c015240451628e9e604a4bffb19d00b4e456740451447e3d58e23bffadfe226fc183f4045136a8e2481a6bffb84b08f909271404511148d5a09fcbffbd5fbd079075c4045132a8bad2571bffc3c3f917f32aa40451340ba0698eebffc76cdd04f5aa9404511a050487e05bffd2559e0a4a397404513a829ef0098bffd519426cf32ea404512f93cacd993bffd71c4b98b850d404510667dcbbb5fbffe45c317b9a77a40450b0195c3ee7abffe8c3de625ca7c404507915642f186bffe6cdbbc204ea1404503cc8de4d1f4bffe208d4ff900764045035ec62fb5e2bffdaf0374ee585340450055529c1df2bffd8e11c0247b68404501061dacca5fbffd9f06bafc8d284044ffc0c74e1062bffd8135d4c58c084044fe60f5928293bffdd7cf703797ea4044fd22101be825bffdb4648e8ebd614044fbb31166fd07bffe0a9e436ee2044044f9e95b5abc06bffe81b4f220d5744044f9091d2ea8cfbffea4886c1fb8da4044f75405549776bfff471a2e3220174044f6b66541ce2cbfff61a9274d99334044f5cc8465de5fbfffbeef657e091b4044f5c5535ded69c00039fce3150daf4044fa089108a66dc0004a87d1701fa34044f83e656fb534c0005f862d9245a44044f9b803ec3790c000ea338136cc454044fb06c3689ffdc000fe198c1826be4044ff6644e77f70c000dc6e3cc0f2f24045005ae88a53bdc000efa2116aea0d404502c0c90a97d6c0013cf58fb104e840450605589383c5c0014b98f471f1234045088abb1c17b0c001049625683bcb40450a4c92d9fba4c0011127f0007af240450cf23924dc25c001e451d08ad00640450d1eebed3d4ac00212355405f7cd40450b2bf825040bc002281e36f7b8df40450b55c4739e19c00241041dfa6f7b40450ddfc919cb14c00241dd0018202a404510dba4b6ae28c0028baf05669c424045129546e63ad5c00381f823bd9f5e404511920030850cc003ab3e656b69b140450ec2b7cb07fcc003dffcc64ae3bb40450d9cd4166d2ac0041e0e81780fb140450ea94cd79677c0042e66575e1bfc40450a9bda6f2a63c0041e79a13ce245404508d073d8365ac004647d1452c84f40450697e3bb3fa1c004a3a751be0dc34044ff85924e7f48c005035947915b7f404500d520948646c005637e4e4acce94044ffc0934dd018c005a41e98f254c7404501efff8eb862c005f826292beab74045011c5ff6cf6fc0060f883293fbf64045042cc0bdcad200000005c0078fcc7fed428640454d4c25365f27c007836f60fab07a40454c11c1f00b27c007618b2adab8e440454ce7f6a5498dc00779db0d34fa6740454e9a04675ca0c0078fcc7fed428640454d4c25365f2700000004c007feb9e228428440454cebcfa9427cc007e1bbdebde60040454e9ec14548fac007f4c94d4ca02940454ec865b2bfe4c007feb9e228428440454cebcfa9427c
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/testCreateSource1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/testCreateSource1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/testCreateSource1.csv	(revision 46118)
@@ -0,0 +1,20 @@
+ID/Integer;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Geometry/Geometry/set/geomtype=Point:2D/set/srs=EPSG:4326
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;"POINT (-3.8945156972987958 42.01053743584765)"
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;"POINT (-2.1079618220646115 41.983079082675474)"
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;"POINT (-2.57249737803327 41.35372113353277)"
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;"POINT (-4.061822048036304 41.35877680235475)"
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;"POINT (-3.974317066986988 40.78701209315094)"
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;"POINT (-2.510509736717547 40.69847453392384)"
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;"POINT (-0.5317736981843011 40.66396082637622)"
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;"POINT (-0.3626917259170671 41.13652386601604)"
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;"POINT (-1.2461823078608523 41.84950010180092)"
+10;;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;"POINT (-1.2145405488596532 41.22158511004416)"
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;"POINT (-0.7699089544899235 41.630581204431756)"
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;"POINT (0.4821915816701051 41.75970939133133)"
+12;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;"POINT (0.7912661147227479 41.919324620992036)"
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;"POINT (1.052534629531243 41.493736996249545)"
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;"POINT (0.8097002367335026 41.0899480235613)"
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;"POINT (-0.4883960310112362 41.17597288081971)"
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;"POINT (-0.6439030698437881 40.89530766155764)"
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T;"POINT (-1.3061826868199504 40.72372835570524)"
+19;97;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;"POINT (-1.4673843010413785 40.51985891271157)"
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/twocountries.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/twocountries.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/twocountries.csv	(revision 46118)
@@ -0,0 +1,3 @@
+SOVEREIGNT__String__32,SOV_A3__String__3,NAME__String__36,NAME_LONG__String__40,ABBREV__String__13,POSTAL__String__4,FORMAL_EN__String__52,NAME_SORT__String__36,NAME_ALT__String__38,LASTCENSUS__Double,ECONOMY__String__26,FIPS_10__String__3,ISO_A2__String__5,ISO_A3__String__3,ISO_N3__String__3,CONTINENT__String__23,REGION_UN__String__23,SUBREGION__String__25,REGION_WB__String__26,COATOFARMS__File
+Netherlands,NL1,Aruba,Aruba,Aruba,AW,Aruba,Aruba,xxxx,2.010,6. Developing region,AA,AW,ABW,533,North America,Americas,Caribbean,Latin America & Caribbean,countries/COATOFARMS/Aruba.png
+Afghanistan,AFG,Afghanistan,Afghanistan,Afg.,AF,Islamic State of Afghanistan,Afghanistan,,1.979,7. Least developed region,AF,AF,AFG,004,Asia,Asia,Southern Asia,South Asia,
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents2.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents2.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/continents2.csv	(revision 46118)
@@ -0,0 +1,9 @@
+ID/Long;NAME/String/set/size=100;
+"1";"Africa";
+"2";"Asia";
+"3";"Europe";
+"4";"North America";
+"5";"South America";
+"6";"Oceania";
+"7";"Seven seas (open ocean)";
+"8";"Antarctica";
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/countries.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/countries.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/org/gvsig/fmap/dal/store/csv/countries.csv	(revision 46118)
@@ -0,0 +1,256 @@
+SOVEREIGNT__String__32,SOV_A3__String__3,NAME__String__36,NAME_LONG__String__40,ABBREV__String__13,POSTAL__String__4,FORMAL_EN__String__52,NAME_SORT__String__36,NAME_ALT__String__38,LASTCENSUS__Double,ECONOMY__String__26,FIPS_10__String__3,ISO_A2__String__5,ISO_A3__String__3,ISO_N3__String__3,CONTINENT__String__23,REGION_UN__String__23,SUBREGION__String__25,REGION_WB__String__26,COATOFARMS__File
+Netherlands,NL1,Aruba,Aruba,Aruba,AW,Aruba,Aruba,xxxx,2.010,6. Developing region,AA,AW,ABW,533,North America,Americas,Caribbean,Latin America & Caribbean,countries/COATOFARMS/Aruba.png
+Afghanistan,AFG,Afghanistan,Afghanistan,Afg.,AF,Islamic State of Afghanistan,Afghanistan,,1.979,7. Least developed region,AF,AF,AFG,004,Asia,Asia,Southern Asia,South Asia,
+Angola,AGO,Angola,Angola,Ang.,AO,People's Republic of Angola,Angola,,1.970,7. Least developed region,AO,AO,AGO,024,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+United Kingdom,GB1,Anguilla,Anguilla,Ang.,AI,,Anguilla,,-99,6. Developing region,AV,AI,AIA,660,North America,Americas,Caribbean,Latin America & Caribbean,
+Albania,ALB,Albania,Albania,Alb.,AL,Republic of Albania,Albania,,2.001,6. Developing region,AL,AL,ALB,008,Europe,Europe,Southern Europe,Europe & Central Asia,
+Finland,FI1,Aland,Aland Islands,Aland,AI,Ãland Islands,Aland,,-99,2. Developed region: nonG7,-99,AX,ALA,248,Europe,Europe,Northern Europe,Europe & Central Asia,
+Andorra,AND,Andorra,Andorra,And.,AND,Principality of Andorra,Andorra,,1.989,2. Developed region: nonG7,AN,AD,AND,020,Europe,Europe,Southern Europe,Europe & Central Asia,
+United Arab Emirates,ARE,United Arab Emirates,United Arab Emirates,U.A.E.,AE,United Arab Emirates,United Arab Emirates,,2.010,6. Developing region,AE,AE,ARE,784,Asia,Asia,Western Asia,Middle East & North Africa,
+Argentina,ARG,Argentina,Argentina,Arg.,AR,Argentine Republic,Argentina,,2.010,5. Emerging region: G20,AR,AR,ARG,032,South America,Americas,South America,Latin America & Caribbean,
+Armenia,ARM,Armenia,Armenia,Arm.,ARM,Republic of Armenia,Armenia,,2.001,6. Developing region,AM,AM,ARM,051,Asia,Asia,Western Asia,Europe & Central Asia,
+United States of America,US1,American Samoa,American Samoa,Am. Samoa,AS,American Samoa,American Samoa,,2.010,6. Developing region,AQ,AS,ASM,016,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Antarctica,ATA,Antarctica,Antarctica,Ant.,AQ,,Antarctica,,-99,6. Developing region,AY,AQ,ATA,010,Antarctica,Antarctica,Antarctica,Antarctica,
+Australia,AU1,Ashmore and Cartier Is.,Ashmore and Cartier Islands,A.C.Is.,AU,Territory of Ashmore and Cartier Islands,Ashmore and Cartier Islands,,-99,7. Least developed region,AT,-99,-99,036,Oceania,Oceania,Australia and New Zealand,East Asia & Pacific,
+France,FR1,Fr. S. Antarctic Lands,French Southern and Antarctic Lands,Fr. S.A.L.,TF,Territory of the French Southern and Antarctic Lands,French Southern and Antarctic Lands,,-99,6. Developing region,FS,TF,ATF,260,Seven seas (open ocean),Seven seas (open ocean),Seven seas (open ocean),Sub-Saharan Africa,
+Antigua and Barbuda,ATG,Antigua and Barb.,Antigua and Barbuda,Ant.B.,AG,Antigua and Barbuda,Antigua and Barbuda,,2.011,6. Developing region,AC,AG,ATG,028,North America,Americas,Caribbean,Latin America & Caribbean,
+Australia,AU1,Australia,Australia,Auz.,AU,Commonwealth of Australia,Australia,,2.006,2. Developed region: nonG7,AS,AU,AUS,036,Oceania,Oceania,Australia and New Zealand,East Asia & Pacific,
+Austria,AUT,Austria,Austria,Aust.,A,Republic of Austria,Austria,,2.011,2. Developed region: nonG7,AU,AT,AUT,040,Europe,Europe,Western Europe,Europe & Central Asia,
+Azerbaijan,AZE,Azerbaijan,Azerbaijan,Aze.,AZ,Republic of Azerbaijan,Azerbaijan,,2.009,6. Developing region,AJ,AZ,AZE,031,Asia,Asia,Western Asia,Europe & Central Asia,
+Burundi,BDI,Burundi,Burundi,Bur.,BI,Republic of Burundi,Burundi,,2.008,7. Least developed region,BY,BI,BDI,108,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Belgium,BEL,Belgium,Belgium,Belg.,B,Kingdom of Belgium,Belgium,,2.011,2. Developed region: nonG7,BE,BE,BEL,056,Europe,Europe,Western Europe,Europe & Central Asia,
+Benin,BEN,Benin,Benin,Benin,BJ,Republic of Benin,Benin,,2.002,7. Least developed region,BN,BJ,BEN,204,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Burkina Faso,BFA,Burkina Faso,Burkina Faso,B.F.,BF,Burkina Faso,Burkina Faso,,2.006,7. Least developed region,UV,BF,BFA,854,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Bangladesh,BGD,Bangladesh,Bangladesh,Bang.,BD,People's Republic of Bangladesh,Bangladesh,,2.011,7. Least developed region,BG,BD,BGD,050,Asia,Asia,Southern Asia,South Asia,
+Bulgaria,BGR,Bulgaria,Bulgaria,Bulg.,BG,Republic of Bulgaria,Bulgaria,,2.011,2. Developed region: nonG7,BU,BG,BGR,100,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Bahrain,BHR,Bahrain,Bahrain,Bahr.,BH,Kingdom of Bahrain,Bahrain,,2.010,6. Developing region,BA,BH,BHR,048,Asia,Asia,Western Asia,Middle East & North Africa,
+The Bahamas,BHS,Bahamas,Bahamas,Bhs.,BS,Commonwealth of the Bahamas,"Bahamas, The",,2.010,6. Developing region,BF,BS,BHS,044,North America,Americas,Caribbean,Latin America & Caribbean,
+Bosnia and Herzegovina,BIH,Bosnia and Herz.,Bosnia and Herzegovina,B.H.,BiH,Bosnia and Herzegovina,Bosnia and Herzegovina,,1.991,6. Developing region,BK,BA,BIH,070,Europe,Europe,Southern Europe,Europe & Central Asia,
+Bajo Nuevo Bank (Petrel Is.),BJN,Bajo Nuevo Bank (Petrel Is.),Bajo Nuevo Bank (Petrel Islands),,,,Bajo Nuevo Bank (Petrel Is.),,-99,7. Least developed region,-99,-99,-99,-99,North America,Americas,Caribbean,Latin America & Caribbean,
+France,FR1,St-BarthÃ©lemy,Saint-BarthÃ©lemy,St. B.,BL,Saint-BarthÃ©lemy,St-BarthÃ©lemy,,-99,2. Developed region: nonG7,TB,BL,BLM,652,North America,Americas,Caribbean,Latin America & Caribbean,
+Belarus,BLR,Belarus,Belarus,Bela.,BY,Republic of Belarus,Belarus,,2.009,6. Developing region,BO,BY,BLR,112,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Belize,BLZ,Belize,Belize,Belize,BZ,Belize,Belize,,2.010,6. Developing region,BH,BZ,BLZ,084,North America,Americas,Central America,Latin America & Caribbean,
+United Kingdom,GB1,Bermuda,Bermuda,Berm.,BM,The Bermudas or Somers Isles,Bermuda,,2.010,2. Developed region: nonG7,BD,BM,BMU,060,North America,Americas,Northern America,North America,
+Bolivia,BOL,Bolivia,Bolivia,Bolivia,BO,Plurinational State of Bolivia,Bolivia,,2.001,5. Emerging region: G20,BL,BO,BOL,068,South America,Americas,South America,Latin America & Caribbean,
+Brazil,BRA,Brazil,Brazil,Brazil,BR,Federative Republic of Brazil,Brazil,,2.010,3. Emerging region: BRIC,BR,BR,BRA,076,South America,Americas,South America,Latin America & Caribbean,
+Barbados,BRB,Barbados,Barbados,Barb.,BB,Barbados,Barbados,,2.010,6. Developing region,BB,BB,BRB,052,North America,Americas,Caribbean,Latin America & Caribbean,
+Brunei,BRN,Brunei,Brunei Darussalam,Brunei,BN,Negara Brunei Darussalam,Brunei,,2.001,6. Developing region,BX,BN,BRN,096,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Bhutan,BTN,Bhutan,Bhutan,Bhutan,BT,Kingdom of Bhutan,Bhutan,,2.005,7. Least developed region,BT,BT,BTN,064,Asia,Asia,Southern Asia,South Asia,
+Botswana,BWA,Botswana,Botswana,Bwa.,BW,Republic of Botswana,Botswana,,2.011,6. Developing region,BC,BW,BWA,072,Africa,Africa,Southern Africa,Sub-Saharan Africa,
+Central African Republic,CAF,Central African Rep.,Central African Republic,C.A.R.,CF,Central African Republic,Central African Republic,,2.003,7. Least developed region,CT,CF,CAF,140,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Canada,CAN,Canada,Canada,Can.,CA,Canada,Canada,,2.011,1. Developed region: G7,CA,CA,CAN,124,North America,Americas,Northern America,North America,countries/COATOFARMS/Canada.png
+Switzerland,CHE,Switzerland,Switzerland,Switz.,CH,Swiss Confederation,Switzerland,,2.010,2. Developed region: nonG7,SZ,CH,CHE,756,Europe,Europe,Western Europe,Europe & Central Asia,
+Chile,CHL,Chile,Chile,Chile,CL,Republic of Chile,Chile,,2.002,5. Emerging region: G20,CI,CL,CHL,152,South America,Americas,South America,Latin America & Caribbean,
+China,CH1,China,China,China,CN,People's Republic of China,China,,2.010,3. Emerging region: BRIC,CH,CN,CHN,156,Asia,Asia,Eastern Asia,East Asia & Pacific,
+Ivory Coast,CIV,CÃ´te d'Ivoire,CÃ´te d'Ivoire,I.C.,CI,Republic of Ivory Coast,CÃ´te d'Ivoire,,1.998,6. Developing region,IV,CI,CIV,384,Africa,Africa,Western Africa,Sub-Saharan Africa,
+France,FR1,Clipperton I.,Clipperton Island,Clp. I.,CI,,Clipperton Island,,-99,7. Least developed region,IP,-99,-99,-99,Seven seas (open ocean),Americas,Central America,Latin America & Caribbean,
+Cameroon,CMR,Cameroon,Cameroon,Cam.,CM,Republic of Cameroon,Cameroon,,2.005,6. Developing region,CM,CM,CMR,120,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Cyprus No Mans Area,CNM,Cyprus U.N. Buffer Zone,Cyprus U.N. Buffer Zone,,,Cyprus No Mans Land,Cyprus No Mans Area,,-99,6. Developing region,-99,-99,-99,-99,Asia,Asia,Western Asia,Europe & Central Asia,
+Democratic Republic of the Congo,COD,Dem. Rep. Congo,Democratic Republic of the Congo,D.R.C.,DRC,Democratic Republic of the Congo,"Congo, Dem. Rep.",,1.984,7. Least developed region,CG,CD,COD,180,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Republic of Congo,COG,Congo,Republic of Congo,Rep. Congo,CG,Republic of Congo,"Congo, Rep.",,2.007,6. Developing region,CF,CG,COG,178,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+New Zealand,NZ1,Cook Is.,Cook Islands,Cook Is.,CK,,Cook Islands,,-99,6. Developing region,CW,CK,COK,184,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Colombia,COL,Colombia,Colombia,Col.,CO,Republic of Colombia,Colombia,,2.006,6. Developing region,CO,CO,COL,170,South America,Americas,South America,Latin America & Caribbean,
+Comoros,COM,Comoros,Comoros,Com.,KM,Union of the Comoros,Comoros,,2.003,7. Least developed region,CN,KM,COM,174,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Cape Verde,CPV,Cape Verde,Cape Verde,C.Vd.,CV,Republic of Cape Verde,Cape Verde,,2.010,6. Developing region,CV,CV,CPV,132,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Costa Rica,CRI,Costa Rica,Costa Rica,C.R.,CR,Republic of Costa Rica,Costa Rica,,2.011,5. Emerging region: G20,CS,CR,CRI,188,North America,Americas,Central America,Latin America & Caribbean,
+Australia,AU1,Coral Sea Is.,Coral Sea Islands,C.S.I.,CS,Coral Sea Islands Territory,Coral Sea Islands,,-99,7. Least developed region,CR,-99,-99,-99,Oceania,Oceania,Australia and New Zealand,East Asia & Pacific,
+Cuba,CUB,Cuba,Cuba,Cuba,CU,Republic of Cuba,Cuba,,2.002,5. Emerging region: G20,CU,CU,CUB,192,North America,Americas,Caribbean,Latin America & Caribbean,
+Netherlands,NL1,CuraÃ§ao,CuraÃ§ao,Cur.,CW,CuraÃ§ao,CuraÃ§ao,,-99,6. Developing region,NT,CW,CUW,531,North America,Americas,Caribbean,Latin America & Caribbean,
+United Kingdom,GB1,Cayman Is.,Cayman Islands,Cym. Is.,KY,Cayman Islands,Cayman Islands,,2.010,5. Emerging region: G20,CJ,KY,CYM,136,North America,Americas,Caribbean,Latin America & Caribbean,
+Northern Cyprus,CYN,N. Cyprus,Northern Cyprus,N. Cy.,CN,Turkish Republic of Northern Cyprus,"Cyprus, Northern",,-99,6. Developing region,-99,-99,-99,-99,Asia,Asia,Western Asia,Europe & Central Asia,
+Cyprus,CYP,Cyprus,Cyprus,Cyp.,CY,Republic of Cyprus,Cyprus,,2.001,6. Developing region,CY,CY,CYP,196,Asia,Asia,Western Asia,Europe & Central Asia,
+Czech Republic,CZE,Czech Rep.,Czech Republic,Cz. Rep.,CZ,Czech Republic,Czech Republic,,2.011,2. Developed region: nonG7,EZ,CZ,CZE,203,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Germany,DEU,Germany,Germany,Ger.,D,Federal Republic of Germany,Germany,,2.011,1. Developed region: G7,GM,DE,DEU,276,Europe,Europe,Western Europe,Europe & Central Asia,
+Djibouti,DJI,Djibouti,Djibouti,Dji.,DJ,Republic of Djibouti,Djibouti,,2.009,7. Least developed region,DJ,DJ,DJI,262,Africa,Africa,Eastern Africa,Middle East & North Africa,
+Dominica,DMA,Dominica,Dominica,D'inca,DM,Commonwealth of Dominica,Dominica,,2.011,6. Developing region,DO,DM,DMA,212,North America,Americas,Caribbean,Latin America & Caribbean,
+Denmark,DN1,Denmark,Denmark,Den.,DK,Kingdom of Denmark,Denmark,,2.011,2. Developed region: nonG7,DA,DK,DNK,208,Europe,Europe,Northern Europe,Europe & Central Asia,
+Dominican Republic,DOM,Dominican Rep.,Dominican Republic,Dom. Rep.,DO,Dominican Republic,Dominican Republic,,2.010,6. Developing region,DR,DO,DOM,214,North America,Americas,Caribbean,Latin America & Caribbean,
+Algeria,DZA,Algeria,Algeria,Alg.,DZ,People's Democratic Republic of Algeria,Algeria,,2.008,6. Developing region,AG,DZ,DZA,012,Africa,Africa,Northern Africa,Middle East & North Africa,
+Ecuador,ECU,Ecuador,Ecuador,Ecu.,EC,Republic of Ecuador,Ecuador,,2.010,6. Developing region,EC,EC,ECU,218,South America,Americas,South America,Latin America & Caribbean,
+Egypt,EGY,Egypt,Egypt,Egypt,EG,Arab Republic of Egypt,"Egypt, Arab Rep.",,2.006,5. Emerging region: G20,EG,EG,EGY,818,Africa,Africa,Northern Africa,Middle East & North Africa,
+Eritrea,ERI,Eritrea,Eritrea,Erit.,ER,State of Eritrea,Eritrea,,1.984,7. Least developed region,ER,ER,ERI,232,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+United Kingdom,GB1,Dhekelia,Dhekelia,Dhek.,DH,,Dhekelia Soverign Base Area,,-99,2. Developed region: nonG7,-99,-99,-99,-99,Asia,Asia,Western Asia,Europe & Central Asia,
+Spain,ESP,Spain,Spain,Sp.,E,Kingdom of Spain,Spain,,2.001,2. Developed region: nonG7,SP,ES,ESP,724,Europe,Europe,Southern Europe,Europe & Central Asia,countries/COATOFARMS/Spain.png
+Estonia,EST,Estonia,Estonia,Est.,EST,Republic of Estonia,Estonia,,2.000,2. Developed region: nonG7,EN,EE,EST,233,Europe,Europe,Northern Europe,Europe & Central Asia,
+Ethiopia,ETH,Ethiopia,Ethiopia,Eth.,ET,Federal Democratic Republic of Ethiopia,Ethiopia,,2.007,7. Least developed region,ET,ET,ETH,231,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Finland,FI1,Finland,Finland,Fin.,FIN,Republic of Finland,Finland,,2.010,2. Developed region: nonG7,FI,FI,FIN,246,Europe,Europe,Northern Europe,Europe & Central Asia,
+Fiji,FJI,Fiji,Fiji,Fiji,FJ,Republic of Fiji,Fiji,,2.007,6. Developing region,FJ,FJ,FJI,242,Oceania,Oceania,Melanesia,East Asia & Pacific,
+United Kingdom,GB1,Falkland Is.,Falkland Islands,Flk. Is.,FK,Falkland Islands,Falkland Islands,Islas Malvinas,-99,2. Developed region: nonG7,FK,FK,FLK,238,South America,Americas,South America,Latin America & Caribbean,
+France,FR1,France,France,Fr.,F,French Republic,France,,-99,1. Developed region: G7,FR,-99,-99,250,Europe,Europe,Western Europe,Europe & Central Asia,
+Denmark,DN1,Faeroe Is.,Faeroe Islands,Faeroe Is.,FO,FÃ¸royar Is. (Faeroe Is.),Faeroe Islands,,2.011,2. Developed region: nonG7,FO,FO,FRO,234,Europe,Europe,Northern Europe,Europe & Central Asia,
+Federated States of Micronesia,FSM,Micronesia,Federated States of Micronesia,F.S.M.,FSM,Federated States of Micronesia,"Micronesia, Federated States of",,2.000,6. Developing region,FM,FM,FSM,583,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Gabon,GAB,Gabon,Gabon,Gabon,GA,Gabonese Republic,Gabon,,2.003,6. Developing region,GB,GA,GAB,266,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+United Kingdom,GB1,United Kingdom,United Kingdom,U.K.,GB,United Kingdom of Great Britain and Northern Ireland,United Kingdom,,2.011,1. Developed region: G7,UK,GB,GBR,826,Europe,Europe,Northern Europe,Europe & Central Asia,
+Georgia,GEO,Georgia,Georgia,Geo.,GE,Georgia,Georgia,,2.002,6. Developing region,GG,GE,GEO,268,Asia,Asia,Western Asia,Europe & Central Asia,
+United Kingdom,GB1,Guernsey,Guernsey,Guern.,GG,Bailiwick of Guernsey,Guernsey,,2.001,2. Developed region: nonG7,GK,GG,GGY,831,Europe,Europe,Northern Europe,Europe & Central Asia,
+Ghana,GHA,Ghana,Ghana,Ghana,GH,Republic of Ghana,Ghana,,2.010,6. Developing region,GH,GH,GHA,288,Africa,Africa,Western Africa,Sub-Saharan Africa,
+United Kingdom,GB1,Gibraltar,Gibraltar,Gib.,GI,,Gibraltar,,-99,2. Developed region: nonG7,GI,GI,GIB,292,Europe,Europe,Southern Europe,Europe & Central Asia,
+Guinea,GIN,Guinea,Guinea,Gin.,GN,Republic of Guinea,Guinea,,1.996,7. Least developed region,GV,GN,GIN,324,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Gambia,GMB,Gambia,The Gambia,Gambia,GM,Republic of the Gambia,"Gambia, The",,2.003,7. Least developed region,GA,GM,GMB,270,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Guinea Bissau,GNB,Guinea-Bissau,Guinea-Bissau,GnB.,GW,Republic of Guinea-Bissau,Guinea-Bissau,,2.009,7. Least developed region,PU,GW,GNB,624,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Equatorial Guinea,GNQ,Eq. Guinea,Equatorial Guinea,Eq. G.,GQ,Republic of Equatorial Guinea,Equatorial Guinea,,2.002,7. Least developed region,EK,GQ,GNQ,226,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Greece,GRC,Greece,Greece,Greece,GR,Hellenic Republic,Greece,,2.011,2. Developed region: nonG7,GR,GR,GRC,300,Europe,Europe,Southern Europe,Europe & Central Asia,
+Grenada,GRD,Grenada,Grenada,Gren.,GD,Grenada,Grenada,,2.011,6. Developing region,GJ,GD,GRD,308,North America,Americas,Caribbean,Latin America & Caribbean,
+Denmark,DN1,Greenland,Greenland,Grlnd.,GL,Greenland,Greenland,,2.010,2. Developed region: nonG7,GL,GL,GRL,304,North America,Americas,Northern America,Europe & Central Asia,
+Guatemala,GTM,Guatemala,Guatemala,Guat.,GT,Republic of Guatemala,Guatemala,,2.002,6. Developing region,GT,GT,GTM,320,North America,Americas,Central America,Latin America & Caribbean,
+United States of America,US1,Guam,Guam,Guam,GU,Territory of Guam,Guam,,2.010,6. Developing region,GQ,GU,GUM,316,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Guyana,GUY,Guyana,Guyana,Guy.,GY,Co-operative Republic of Guyana,Guyana,,2.002,6. Developing region,GY,GY,GUY,328,South America,Americas,South America,Latin America & Caribbean,
+China,CH1,Hong Kong,Hong Kong,H.K.,HK,"Hong Kong Special Administrative Region, PRC","Hong Kong SAR, China",,2.006,6. Developing region,HK,HK,HKG,344,Asia,Asia,Eastern Asia,East Asia & Pacific,
+Australia,AU1,Heard I. and McDonald Is.,Heard I. and McDonald Islands,H.M.Is.,HM,Territory of Heard Island and McDonald Islands,Heard Island and McDonald Islands,,-99,7. Least developed region,HM,HM,HMD,334,Seven seas (open ocean),Seven seas (open ocean),Seven seas (open ocean),Sub-Saharan Africa,
+Honduras,HND,Honduras,Honduras,Hond.,HN,Republic of Honduras,Honduras,,2.001,6. Developing region,HO,HN,HND,340,North America,Americas,Central America,Latin America & Caribbean,
+Croatia,HRV,Croatia,Croatia,Cro.,HR,Republic of Croatia,Croatia,,2.011,2. Developed region: nonG7,HR,HR,HRV,191,Europe,Europe,Southern Europe,Europe & Central Asia,
+Haiti,HTI,Haiti,Haiti,Haiti,HT,Republic of Haiti,Haiti,,2.003,7. Least developed region,HA,HT,HTI,332,North America,Americas,Caribbean,Latin America & Caribbean,
+Hungary,HUN,Hungary,Hungary,Hun.,HU,Republic of Hungary,Hungary,,2.001,2. Developed region: nonG7,HU,HU,HUN,348,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Indonesia,IDN,Indonesia,Indonesia,Indo.,INDO,Republic of Indonesia,Indonesia,,2.010,4. Emerging region: MIKT,ID,ID,IDN,360,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+United Kingdom,GB1,Isle of Man,Isle of Man,IoMan,IM,,Isle of Man,,2.006,2. Developed region: nonG7,IM,IM,IMN,833,Europe,Europe,Northern Europe,Europe & Central Asia,
+India,IND,India,India,India,IND,Republic of India,India,,2.011,3. Emerging region: BRIC,IN,IN,IND,356,Asia,Asia,Southern Asia,South Asia,
+Australia,AU1,Indian Ocean Ter.,Indian Ocean Territories,Ind. Oc. Ter.,IOT,,Indian Ocean Territories,,-99,2. Developed region: nonG7,-99,-99,-99,-99,Asia,Seven seas (open ocean),Seven seas (open ocean),East Asia & Pacific,
+United Kingdom,GB1,Br. Indian Ocean Ter.,British Indian Ocean Territory,I.O.T.,IO,,British Indian Ocean Territory,,-99,2. Developed region: nonG7,IO,IO,IOT,086,Seven seas (open ocean),Seven seas (open ocean),Seven seas (open ocean),Sub-Saharan Africa,
+Ireland,IRL,Ireland,Ireland,Ire.,IRL,Ireland,Ireland,,2.011,2. Developed region: nonG7,EI,IE,IRL,372,Europe,Europe,Northern Europe,Europe & Central Asia,
+Iran,IRN,Iran,Iran,Iran,IRN,Islamic Republic of Iran,"Iran, Islamic Rep.",,2.006,5. Emerging region: G20,IR,IR,IRN,364,Asia,Asia,Southern Asia,Middle East & North Africa,
+Iraq,IRQ,Iraq,Iraq,Iraq,IRQ,Republic of Iraq,Iraq,,1.997,6. Developing region,IZ,IQ,IRQ,368,Asia,Asia,Western Asia,Middle East & North Africa,
+Iceland,ISL,Iceland,Iceland,Iceland,IS,Republic of Iceland,Iceland,,-99,2. Developed region: nonG7,IC,IS,ISL,352,Europe,Europe,Northern Europe,Europe & Central Asia,
+Israel,IS1,Israel,Israel,Isr.,IS,State of Israel,Israel,,2.009,2. Developed region: nonG7,-99,IL,ISR,376,Asia,Asia,Western Asia,Middle East & North Africa,
+Italy,ITA,Italy,Italy,Italy,I,Italian Republic,Italy,,2.012,1. Developed region: G7,IT,IT,ITA,380,Europe,Europe,Southern Europe,Europe & Central Asia,
+Jamaica,JAM,Jamaica,Jamaica,Jam.,J,Jamaica,Jamaica,,2.011,6. Developing region,JM,JM,JAM,388,North America,Americas,Caribbean,Latin America & Caribbean,
+United Kingdom,GB1,Jersey,Jersey,Jey.,JE,Bailiwick of Jersey,Jersey,,2.001,2. Developed region: nonG7,JE,JE,JEY,832,Europe,Europe,Northern Europe,Europe & Central Asia,
+Jordan,JOR,Jordan,Jordan,Jord.,J,Hashemite Kingdom of Jordan,Jordan,,2.004,6. Developing region,JO,JO,JOR,400,Asia,Asia,Western Asia,Middle East & North Africa,
+Japan,JPN,Japan,Japan,Japan,J,Japan,Japan,,2.010,1. Developed region: G7,JA,JP,JPN,392,Asia,Asia,Eastern Asia,East Asia & Pacific,
+Kazakhstan,KAZ,Baikonur,Baikonur Cosmodrome,Bayk.,BK,,Baikonur Cosmodrome,Baykonur Cosmodrome,-99,2. Developed region: nonG7,-99,-99,-99,-99,Asia,Asia,Central Asia,Europe & Central Asia,
+Kashmir,KAS,Siachen Glacier,Siachen Glacier,Siachen,SG,,Kashmir,,-99,6. Developing region,-99,-99,-99,-99,Asia,Asia,Southern Asia,South Asia,
+Kazakhstan,KAZ,Kazakhstan,Kazakhstan,Kaz.,KZ,Republic of Kazakhstan,Kazakhstan,,2.009,6. Developing region,KZ,KZ,KAZ,398,Asia,Asia,Central Asia,Europe & Central Asia,
+Kenya,KEN,Kenya,Kenya,Ken.,KE,Republic of Kenya,Kenya,,2.009,5. Emerging region: G20,KE,KE,KEN,404,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Kyrgyzstan,KGZ,Kyrgyzstan,Kyrgyzstan,Kgz.,KG,Kyrgyz Republic,Kyrgyz Republic,,2.009,6. Developing region,KG,KG,KGZ,417,Asia,Asia,Central Asia,Europe & Central Asia,
+Cambodia,KHM,Cambodia,Cambodia,Camb.,KH,Kingdom of Cambodia,Cambodia,,2.008,7. Least developed region,CB,KH,KHM,116,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Kiribati,KIR,Kiribati,Kiribati,Kir.,KI,Republic of Kiribati,Kiribati,,2.005,7. Least developed region,KR,KI,KIR,296,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Saint Kitts and Nevis,KNA,St. Kitts and Nevis,Saint Kitts and Nevis,St.K.N.,KN,Federation of Saint Kitts and Nevis,St. Kitts and Nevis,,2.011,6. Developing region,SC,KN,KNA,659,North America,Americas,Caribbean,Latin America & Caribbean,
+South Korea,KOR,Korea,Republic of Korea,S.K.,KR,Republic of Korea,"Korea, Rep.",,2.010,4. Emerging region: MIKT,KS,KR,KOR,410,Asia,Asia,Eastern Asia,East Asia & Pacific,
+Kosovo,KOS,Kosovo,Kosovo,Kos.,KO,Republic of Kosovo,Kosovo,,1.981,6. Developing region,KV,-99,-99,-99,Europe,Europe,Southern Europe,Europe & Central Asia,
+Kuwait,KWT,Kuwait,Kuwait,Kwt.,KW,State of Kuwait,Kuwait,,2.010,6. Developing region,KU,KW,KWT,414,Asia,Asia,Western Asia,Middle East & North Africa,
+Laos,LAO,Lao PDR,Lao PDR,Laos,LA,Lao People's Democratic Republic,Lao PDR,,2.005,7. Least developed region,LA,LA,LAO,418,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Lebanon,LBN,Lebanon,Lebanon,Leb.,LB,Lebanese Republic,Lebanon,,1.970,6. Developing region,LE,LB,LBN,422,Asia,Asia,Western Asia,Middle East & North Africa,
+Liberia,LBR,Liberia,Liberia,Liberia,LR,Republic of Liberia,Liberia,,2.008,7. Least developed region,LI,LR,LBR,430,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Libya,LBY,Libya,Libya,Libya,LY,Libya,Libya,,2.006,6. Developing region,LY,LY,LBY,434,Africa,Africa,Northern Africa,Middle East & North Africa,
+Saint Lucia,LCA,Saint Lucia,Saint Lucia,S.L.,LC,Saint Lucia,St. Lucia,,2.010,6. Developing region,ST,LC,LCA,662,North America,Americas,Caribbean,Latin America & Caribbean,
+Liechtenstein,LIE,Liechtenstein,Liechtenstein,Liech.,FL,Principality of Liechtenstein,Liechtenstein,,2.010,2. Developed region: nonG7,LS,LI,LIE,438,Europe,Europe,Western Europe,Europe & Central Asia,
+Sri Lanka,LKA,Sri Lanka,Sri Lanka,Sri L.,LK,Democratic Socialist Republic of Sri Lanka,Sri Lanka,,2.001,6. Developing region,CE,LK,LKA,144,Asia,Asia,Southern Asia,South Asia,
+Lesotho,LSO,Lesotho,Lesotho,Les.,LS,Kingdom of Lesotho,Lesotho,,2.006,7. Least developed region,LT,LS,LSO,426,Africa,Africa,Southern Africa,Sub-Saharan Africa,
+Lithuania,LTU,Lithuania,Lithuania,Lith.,LT,Republic of Lithuania,Lithuania,,2.011,2. Developed region: nonG7,LH,LT,LTU,440,Europe,Europe,Northern Europe,Europe & Central Asia,
+Luxembourg,LUX,Luxembourg,Luxembourg,Lux.,L,Grand Duchy of Luxembourg,Luxembourg,,2.011,2. Developed region: nonG7,LU,LU,LUX,442,Europe,Europe,Western Europe,Europe & Central Asia,
+Latvia,LVA,Latvia,Latvia,Lat.,LV,Republic of Latvia,Latvia,,2.011,2. Developed region: nonG7,LG,LV,LVA,428,Europe,Europe,Northern Europe,Europe & Central Asia,
+China,CH1,Macao,Macao,Mac.,MO,"Macao Special Administrative Region, PRC","Macao SAR, China",,2.011,6. Developing region,MC,MO,MAC,446,Asia,Asia,Eastern Asia,East Asia & Pacific,
+France,FR1,St-Martin,Saint-Martin,St. M.,MF,Saint-Martin (French part),St. Martin (French part),,-99,6. Developing region,RN,MF,MAF,663,North America,Americas,Caribbean,Latin America & Caribbean,
+Morocco,MAR,Morocco,Morocco,Mor.,MA,Kingdom of Morocco,Morocco,,2.004,6. Developing region,MO,MA,MAR,504,Africa,Africa,Northern Africa,Middle East & North Africa,countries/COATOFARMS/Morocco.png
+Monaco,MCO,Monaco,Monaco,Mco.,MC,Principality of Monaco,Monaco,,2.008,2. Developed region: nonG7,MN,MC,MCO,492,Europe,Europe,Western Europe,Europe & Central Asia,
+Moldova,MDA,Moldova,Moldova,Mda.,MD,Republic of Moldova,Moldova,,2.004,6. Developing region,MD,MD,MDA,498,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Madagascar,MDG,Madagascar,Madagascar,Mad.,MG,Republic of Madagascar,Madagascar,,1.993,7. Least developed region,MA,MG,MDG,450,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Maldives,MDV,Maldives,Maldives,Mald.,MV,Republic of Maldives,Maldives,,2.011,6. Developing region,MV,MV,MDV,462,Seven seas (open ocean),Asia,Southern Asia,South Asia,
+Mexico,MEX,Mexico,Mexico,Mex.,MX,United Mexican States,Mexico,,2.010,4. Emerging region: MIKT,MX,MX,MEX,484,North America,Americas,Central America,Latin America & Caribbean,countries/COATOFARMS/Mexico.png
+Marshall Islands,MHL,Marshall Is.,Marshall Islands,M. Is.,MH,Republic of the Marshall Islands,Marshall Islands,,2.011,6. Developing region,RM,MH,MHL,584,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Macedonia,MKD,Macedonia,Macedonia,Mkd.,MK,Former Yugoslav Republic of Macedonia,"Macedonia, FYR",,2.010,6. Developing region,MK,MK,MKD,807,Europe,Europe,Southern Europe,Europe & Central Asia,
+Mali,MLI,Mali,Mali,Mali,ML,Republic of Mali,Mali,,2.009,7. Least developed region,ML,ML,MLI,466,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Malta,MLT,Malta,Malta,Malta,M,Republic of Malta,Malta,,2.005,2. Developed region: nonG7,MT,MT,MLT,470,Europe,Europe,Southern Europe,Middle East & North Africa,
+Myanmar,MMR,Myanmar,Myanmar,Myan.,MM,Republic of the Union of Myanmar,Myanmar,,1.983,7. Least developed region,BM,MM,MMR,104,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Montenegro,MNE,Montenegro,Montenegro,Mont.,ME,Montenegro,Montenegro,,2.011,6. Developing region,MJ,ME,MNE,499,Europe,Europe,Southern Europe,Europe & Central Asia,
+Mongolia,MNG,Mongolia,Mongolia,Mong.,MN,Mongolia,Mongolia,,2.010,6. Developing region,MG,MN,MNG,496,Asia,Asia,Eastern Asia,East Asia & Pacific,
+United States of America,US1,N. Mariana Is.,Northern Mariana Islands,N.M.I.,MP,Commonwealth of the Northern Mariana Islands,Northern Mariana Islands,,2.010,6. Developing region,CQ,MP,MNP,580,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Mozambique,MOZ,Mozambique,Mozambique,Moz.,MZ,Republic of Mozambique,Mozambique,,2.007,7. Least developed region,MZ,MZ,MOZ,508,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Mauritania,MRT,Mauritania,Mauritania,Mrt.,MR,Islamic Republic of Mauritania,Mauritania,,2.000,7. Least developed region,MR,MR,MRT,478,Africa,Africa,Western Africa,Sub-Saharan Africa,
+United Kingdom,GB1,Montserrat,Montserrat,Monts.,MS,,Montserrat,,-99,6. Developing region,MH,MS,MSR,500,North America,Americas,Caribbean,Latin America & Caribbean,
+Mauritius,MUS,Mauritius,Mauritius,Mus.,MU,Republic of Mauritius,Mauritius,,2.011,6. Developing region,MP,MU,MUS,480,Seven seas (open ocean),Africa,Eastern Africa,Sub-Saharan Africa,
+Malawi,MWI,Malawi,Malawi,Mal.,MW,Republic of Malawi,Malawi,,2.008,7. Least developed region,MI,MW,MWI,454,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Malaysia,MYS,Malaysia,Malaysia,Malay.,MY,Malaysia,Malaysia,,2.010,6. Developing region,MY,MY,MYS,458,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Namibia,NAM,Namibia,Namibia,Nam.,NA,Republic of Namibia,Namibia,,2.001,6. Developing region,WA,NA,NAM,516,Africa,Africa,Southern Africa,Sub-Saharan Africa,
+France,FR1,New Caledonia,New Caledonia,New C.,NC,New Caledonia,New Caledonia,,2.009,6. Developing region,NC,NC,NCL,540,Oceania,Oceania,Melanesia,East Asia & Pacific,
+Niger,NER,Niger,Niger,Niger,NE,Republic of Niger,Niger,,2.001,7. Least developed region,NG,NE,NER,562,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Australia,AU1,Norfolk Island,Norfolk Island,Nfk. I.,NF,Territory of Norfolk Island,Norfolk Island,,-99,6. Developing region,NF,NF,NFK,574,Oceania,Oceania,Australia and New Zealand,East Asia & Pacific,
+Nigeria,NGA,Nigeria,Nigeria,Nigeria,NG,Federal Republic of Nigeria,Nigeria,,2.006,5. Emerging region: G20,NI,NG,NGA,566,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Nicaragua,NIC,Nicaragua,Nicaragua,Nic.,NI,Republic of Nicaragua,Nicaragua,,2.005,6. Developing region,NU,NI,NIC,558,North America,Americas,Central America,Latin America & Caribbean,
+New Zealand,NZ1,Niue,Niue,Niue,NU,,Niue,,-99,6. Developing region,NE,NU,NIU,570,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Netherlands,NL1,Netherlands,Netherlands,Neth.,NL,Kingdom of the Netherlands,Netherlands,,2.011,2. Developed region: nonG7,NL,NL,NLD,528,Europe,Europe,Western Europe,Europe & Central Asia,
+Norway,NOR,Norway,Norway,Nor.,N,Kingdom of Norway,Norway,,2.001,2. Developed region: nonG7,-99,-99,-99,-99,Europe,Europe,Northern Europe,Europe & Central Asia,
+Nepal,NPL,Nepal,Nepal,Nepal,NP,Nepal,Nepal,,2.001,7. Least developed region,NP,NP,NPL,524,Asia,Asia,Southern Asia,South Asia,
+Nauru,NRU,Nauru,Nauru,Nauru,NR,Republic of Nauru,Nauru,,-99,6. Developing region,NR,NR,NRU,520,Oceania,Oceania,Micronesia,East Asia & Pacific,
+New Zealand,NZ1,New Zealand,New Zealand,N.Z.,NZ,New Zealand,New Zealand,,2.006,2. Developed region: nonG7,NZ,NZ,NZL,554,Oceania,Oceania,Australia and New Zealand,East Asia & Pacific,
+Oman,OMN,Oman,Oman,Oman,OM,Sultanate of Oman,Oman,,2.010,6. Developing region,MU,OM,OMN,512,Asia,Asia,Western Asia,Middle East & North Africa,
+Pakistan,PAK,Pakistan,Pakistan,Pak.,PK,Islamic Republic of Pakistan,Pakistan,,1.998,5. Emerging region: G20,PK,PK,PAK,586,Asia,Asia,Southern Asia,South Asia,
+Panama,PAN,Panama,Panama,Pan.,PA,Republic of Panama,Panama,,2.010,6. Developing region,PM,PA,PAN,591,North America,Americas,Central America,Latin America & Caribbean,
+United Kingdom,GB1,Pitcairn Is.,Pitcairn Islands,Pit. Is.,PN,"Pitcairn, Henderson, Ducie and Oeno Islands",Pitcairn Islands,,-99,7. Least developed region,PC,PN,PCN,612,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Peru,PER,Peru,Peru,Peru,PE,Republic of Peru,Peru,,2.007,5. Emerging region: G20,PE,PE,PER,604,South America,Americas,South America,Latin America & Caribbean,
+Spratly Islands,PGA,Spratly Is.,Spratly Islands,Spratly Is.,SP,,Spratly Islands,,-99,7. Least developed region,PG,-99,-99,-99,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Philippines,PHL,Philippines,Philippines,Phil.,PH,Republic of the Philippines,Philippines,,2.010,5. Emerging region: G20,RP,PH,PHL,608,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Palau,PLW,Palau,Palau,Palau,PW,Republic of Palau,Palau,,2.010,6. Developing region,PS,PW,PLW,585,Oceania,Oceania,Micronesia,East Asia & Pacific,
+Papua New Guinea,PNG,Papua New Guinea,Papua New Guinea,P.N.G.,PG,Independent State of Papua New Guinea,Papua New Guinea,,2.000,6. Developing region,PP,PG,PNG,598,Oceania,Oceania,Melanesia,East Asia & Pacific,
+Poland,POL,Poland,Poland,Pol.,PL,Republic of Poland,Poland,,2.011,2. Developed region: nonG7,PL,PL,POL,616,Europe,Europe,Eastern Europe,Europe & Central Asia,
+United States of America,US1,Puerto Rico,Puerto Rico,P.R.,PR,Commonwealth of Puerto Rico,Puerto Rico,,2.010,6. Developing region,RQ,PR,PRI,630,North America,Americas,Caribbean,Latin America & Caribbean,
+North Korea,PRK,Dem. Rep. Korea,Dem. Rep. Korea,N.K.,KP,Democratic People's Republic of Korea,"Korea, Dem. Rep.",,2.009,7. Least developed region,KN,KP,PRK,408,Asia,Asia,Eastern Asia,East Asia & Pacific,
+Portugal,PRT,Portugal,Portugal,Port.,P,Portuguese Republic,Portugal,,2.011,2. Developed region: nonG7,PO,PT,PRT,620,Europe,Europe,Southern Europe,Europe & Central Asia,
+Paraguay,PRY,Paraguay,Paraguay,Para.,PY,Republic of Paraguay,Paraguay,,2.002,5. Emerging region: G20,PA,PY,PRY,600,South America,Americas,South America,Latin America & Caribbean,
+Israel,IS1,Palestine,Palestine,Pal.,PAL,West Bank and Gaza,Palestine (West Bank and Gaza),,2.007,6. Developing region,-99,PS,PSE,275,Asia,Asia,Western Asia,Middle East & North Africa,
+France,FR1,Fr. Polynesia,French Polynesia,Fr. Poly.,PF,French Polynesia,French Polynesia,,2.007,6. Developing region,FP,PF,PYF,258,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Qatar,QAT,Qatar,Qatar,Qatar,QA,State of Qatar,Qatar,,2.010,6. Developing region,QA,QA,QAT,634,Asia,Asia,Western Asia,Middle East & North Africa,
+Romania,ROU,Romania,Romania,Rom.,RO,Romania,Romania,,2.011,2. Developed region: nonG7,RO,RO,ROU,642,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Russia,RUS,Russia,Russian Federation,Rus.,RUS,Russian Federation,Russian Federation,,2.010,3. Emerging region: BRIC,RS,RU,RUS,643,Europe,Europe,Eastern Europe,Europe & Central Asia,countries/COATOFARMS/Russian_Federation.png
+Rwanda,RWA,Rwanda,Rwanda,Rwa.,RW,Republic of Rwanda,Rwanda,,2.002,7. Least developed region,RW,RW,RWA,646,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Western Sahara,SAH,W. Sahara,Western Sahara,W. Sah.,WS,Sahrawi Arab Democratic Republic,Western Sahara,,-99,7. Least developed region,WI,EH,ESH,732,Africa,Africa,Northern Africa,Middle East & North Africa,
+Saudi Arabia,SAU,Saudi Arabia,Saudi Arabia,Saud.,SA,Kingdom of Saudi Arabia,Saudi Arabia,,2.010,2. Developed region: nonG7,SA,SA,SAU,682,Asia,Asia,Western Asia,Middle East & North Africa,
+Scarborough Reef,SCR,Scarborough Reef,Scarborough Reef,S.R.,SR,,,,-99,7. Least developed region,-99,-99,-99,-99,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Sudan,SDN,Sudan,Sudan,Sudan,SD,Republic of the Sudan,Sudan,,2.008,6. Developing region,SU,SD,SDN,729,Africa,Africa,Northern Africa,Sub-Saharan Africa,
+South Sudan,SDS,S. Sudan,South Sudan,S. Sud.,SS,Republic of South Sudan,South Sudan,,2.008,7. Least developed region,-99,SS,SSD,728,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Senegal,SEN,Senegal,Senegal,Sen.,SN,Republic of Senegal,Senegal,,2.002,7. Least developed region,SG,SN,SEN,686,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Serranilla Bank,SER,Serranilla Bank,Serranilla Bank,S.B.,SB,,Serranilla Bank,,-99,7. Least developed region,-99,-99,-99,-99,North America,Americas,Caribbean,Latin America & Caribbean,
+Singapore,SGP,Singapore,Singapore,Sing.,SG,Republic of Singapore,Singapore,,2.010,6. Developing region,SN,SG,SGP,702,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+United Kingdom,GB1,S. Geo. and S. Sandw. Is.,South Georgia and South Sandwich Islands,S.G. S.S. Is.,GS,South Georgia and South Sandwich Islands,South Georgia and the Islands,,-99,7. Least developed region,SX,GS,SGS,239,Seven seas (open ocean),Seven seas (open ocean),Seven seas (open ocean),Antarctica,
+United Kingdom,GB1,Saint Helena,Saint Helena,St.H.,SH,,St. Helena,,-99,6. Developing region,SH,SH,SHN,654,Seven seas (open ocean),Africa,Western Africa,Sub-Saharan Africa,
+Solomon Islands,SLB,Solomon Is.,Solomon Islands,S. Is.,SB,,Solomon Islands,,2.009,7. Least developed region,BP,SB,SLB,090,Oceania,Oceania,Melanesia,East Asia & Pacific,
+Sierra Leone,SLE,Sierra Leone,Sierra Leone,S.L.,SL,Republic of Sierra Leone,Sierra Leone,,2.004,7. Least developed region,SL,SL,SLE,694,Africa,Africa,Western Africa,Sub-Saharan Africa,
+El Salvador,SLV,El Salvador,El Salvador,El. S.,SV,Republic of El Salvador,El Salvador,,2.007,6. Developing region,ES,SV,SLV,222,North America,Americas,Central America,Latin America & Caribbean,
+San Marino,SMR,San Marino,San Marino,S.M.,RSM,Republic of San Marino,San Marino,,2.010,2. Developed region: nonG7,SM,SM,SMR,674,Europe,Europe,Southern Europe,Europe & Central Asia,
+Somaliland,SOL,Somaliland,Somaliland,Solnd.,SL,Republic of Somaliland,Somaliland,,-99,6. Developing region,-99,-99,-99,-99,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Somalia,SOM,Somalia,Somalia,Som.,SO,Federal Republic of Somalia,Somalia,,1.987,7. Least developed region,SO,SO,SOM,706,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+France,FR1,St. Pierre and Miquelon,Saint Pierre and Miquelon,St. P.M.,PM,Saint Pierre and Miquelon,St. Pierre and Miquelon,,-99,2. Developed region: nonG7,SB,PM,SPM,666,North America,Americas,Northern America,North America,
+Republic of Serbia,SRB,Serbia,Serbia,Serb.,RS,Republic of Serbia,Serbia,,2.011,6. Developing region,RI,RS,SRB,688,Europe,Europe,Southern Europe,Europe & Central Asia,
+Sao Tome and Principe,STP,SÃ£o TomÃ© and Principe,SÃ£o TomÃ© and Principe,S.T.P.,ST,Democratic Republic of SÃ£o TomÃ© and Principe,SÃ£o TomÃ© and Principe,,2.001,7. Least developed region,TP,ST,STP,678,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Suriname,SUR,Suriname,Suriname,Sur.,SR,Republic of Suriname,Suriname,,2.004,6. Developing region,NS,SR,SUR,740,South America,Americas,South America,Latin America & Caribbean,
+Slovakia,SVK,Slovakia,Slovakia,Svk.,SK,Slovak Republic,Slovak Republic,,2.011,2. Developed region: nonG7,LO,SK,SVK,703,Europe,Europe,Eastern Europe,Europe & Central Asia,
+Slovenia,SVN,Slovenia,Slovenia,Slo.,SLO,Republic of Slovenia,Slovenia,,2.011,2. Developed region: nonG7,SI,SI,SVN,705,Europe,Europe,Southern Europe,Europe & Central Asia,
+Sweden,SWE,Sweden,Sweden,Swe.,S,Kingdom of Sweden,Sweden,,-99,2. Developed region: nonG7,SW,SE,SWE,752,Europe,Europe,Northern Europe,Europe & Central Asia,
+Swaziland,SWZ,Swaziland,Swaziland,Swz.,SW,Kingdom of Swaziland,Swaziland,,2.007,6. Developing region,WZ,SZ,SWZ,748,Africa,Africa,Southern Africa,Sub-Saharan Africa,
+Netherlands,NL1,Sint Maarten,Sint Maarten,St. M.,SX,Sint Maarten (Dutch part),St. Maarten (Dutch part),,-99,6. Developing region,NT,SX,SXM,534,North America,Americas,Caribbean,Latin America & Caribbean,
+Seychelles,SYC,Seychelles,Seychelles,Syc.,SC,Republic of Seychelles,Seychelles,,2.010,6. Developing region,SE,SC,SYC,690,Seven seas (open ocean),Africa,Eastern Africa,Sub-Saharan Africa,
+Syria,SYR,Syria,Syria,Syria,SYR,Syrian Arab Republic,Syrian Arab Republic,,2.004,6. Developing region,SY,SY,SYR,760,Asia,Asia,Western Asia,Middle East & North Africa,
+United Kingdom,GB1,Turks and Caicos Is.,Turks and Caicos Islands,T.C. Is.,TC,Turks and Caicos Islands,Turks and Caicos Islands,,2.001,6. Developing region,TK,TC,TCA,796,North America,Americas,Caribbean,Latin America & Caribbean,
+Chad,TCD,Chad,Chad,Chad,TD,Republic of Chad,Chad,,2.009,7. Least developed region,CD,TD,TCD,148,Africa,Africa,Middle Africa,Sub-Saharan Africa,
+Togo,TGO,Togo,Togo,Togo,TG,Togolese Republic,Togo,,2.010,7. Least developed region,TO,TG,TGO,768,Africa,Africa,Western Africa,Sub-Saharan Africa,
+Thailand,THA,Thailand,Thailand,Thai.,TH,Kingdom of Thailand,Thailand,,2.010,5. Emerging region: G20,TH,TH,THA,764,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Tajikistan,TJK,Tajikistan,Tajikistan,Tjk.,TJ,Republic of Tajikistan,Tajikistan,,2.010,6. Developing region,TI,TJ,TJK,762,Asia,Asia,Central Asia,Europe & Central Asia,
+Turkmenistan,TKM,Turkmenistan,Turkmenistan,Turkm.,TM,Turkmenistan,Turkmenistan,,1.995,6. Developing region,TX,TM,TKM,795,Asia,Asia,Central Asia,Europe & Central Asia,
+East Timor,TLS,Timor-Leste,Timor-Leste,T.L.,TL,Democratic Republic of Timor-Leste,Timor-Leste,East Timor,2.010,7. Least developed region,TT,TL,TLS,626,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Tonga,TON,Tonga,Tonga,Tongo,TO,Kingdom of Tonga,Tonga,,2.006,6. Developing region,TN,TO,TON,776,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Trinidad and Tobago,TTO,Trinidad and Tobago,Trinidad and Tobago,Tr.T.,TT,Republic of Trinidad and Tobago,Trinidad and Tobago,,2.011,6. Developing region,TD,TT,TTO,780,North America,Americas,Caribbean,Latin America & Caribbean,
+Tunisia,TUN,Tunisia,Tunisia,Tun.,TN,Republic of Tunisia,Tunisia,,2.004,6. Developing region,TS,TN,TUN,788,Africa,Africa,Northern Africa,Middle East & North Africa,
+Turkey,TUR,Turkey,Turkey,Tur.,TR,Republic of Turkey,Turkey,,2.000,4. Emerging region: MIKT,TU,TR,TUR,792,Asia,Asia,Western Asia,Europe & Central Asia,countries/COATOFARMS/Turkey.png
+Tuvalu,TUV,Tuvalu,Tuvalu,Tuv.,TV,Tuvalu,Tuvalu,,2.002,7. Least developed region,TV,TV,TUV,798,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Taiwan,TWN,Taiwan,Taiwan,Taiwan,TW,,Taiwan,,-99,2. Developed region: nonG7,TW,TW,TWN,158,Asia,Asia,Eastern Asia,East Asia & Pacific,
+United Republic of Tanzania,TZA,Tanzania,Tanzania,Tanz.,TZ,United Republic of Tanzania,Tanzania,,2.002,7. Least developed region,TZ,TZ,TZA,834,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Uganda,UGA,Uganda,Uganda,Uga.,UG,Republic of Uganda,Uganda,,2.002,7. Least developed region,UG,UG,UGA,800,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Ukraine,UKR,Ukraine,Ukraine,Ukr.,UA,Ukraine,Ukraine,,2.001,6. Developing region,UP,UA,UKR,804,Europe,Europe,Eastern Europe,Europe & Central Asia,
+United States of America,US1,U.S. Minor Outlying Is.,United States Minor Outlying Islands,U.S. MOI,UM,,United States Minor Outlying Islands,,-99,7. Least developed region,-99,UM,UMI,581,North America,Seven seas (open ocean),Seven seas (open ocean),East Asia & Pacific,
+Uruguay,URY,Uruguay,Uruguay,Ury.,UY,Oriental Republic of Uruguay,Uruguay,,2.004,5. Emerging region: G20,UY,UY,URY,858,South America,Americas,South America,Latin America & Caribbean,
+United States of America,US1,United States,United States,U.S.A.,US,United States of America,United States of America,,2.010,1. Developed region: G7,US,US,USA,840,North America,Americas,Northern America,North America,countries/COATOFARMS/UUSS.png
+Cuba,CUB,USNB Guantanamo Bay,US Naval Base Guantanamo Bay,Guantan.,GB,,Guantanamo Bay USNB,"Gitmo, GTMO",-99,2. Developed region: nonG7,-99,-99,-99,-99,North America,Americas,Caribbean,Latin America & Caribbean,
+Uzbekistan,UZB,Uzbekistan,Uzbekistan,Uzb.,UZ,Republic of Uzbekistan,Uzbekistan,,1.989,6. Developing region,UZ,UZ,UZB,860,Asia,Asia,Central Asia,Europe & Central Asia,
+Vatican,VAT,Vatican,Vatican,Vat.,V,State of the Vatican City,Vatican (Holy Sea),Holy Sea,-99,2. Developed region: nonG7,VT,VA,VAT,336,Europe,Europe,Southern Europe,Europe & Central Asia,
+Saint Vincent and the Grenadines,VCT,St. Vin. and Gren.,Saint Vincent and the Grenadines,St.V.G.,VC,Saint Vincent and the Grenadines,St. Vincent and the Grenadines,,2.011,6. Developing region,VC,VC,VCT,670,North America,Americas,Caribbean,Latin America & Caribbean,
+Venezuela,VEN,Venezuela,Venezuela,Ven.,VE,Bolivarian Republic of Venezuela,"Venezuela, RB",,2.001,5. Emerging region: G20,VE,VE,VEN,862,South America,Americas,South America,Latin America & Caribbean,
+United Kingdom,GB1,British Virgin Is.,British Virgin Islands,V.I. (Br.),VG,British Virgin Islands,British Virgin Islands,,-99,2. Developed region: nonG7,VI,VG,VGB,092,North America,Americas,Caribbean,Latin America & Caribbean,
+United States of America,US1,U.S. Virgin Is.,United States Virgin Islands,V.I. (U.S.),VI,Virgin Islands of the United States,Virgin Islands (U.S.),,2.010,6. Developing region,VQ,VI,VIR,850,North America,Americas,Caribbean,Latin America & Caribbean,
+Vietnam,VNM,Vietnam,Vietnam,Viet.,VN,Socialist Republic of Vietnam,Vietnam,,2.009,5. Emerging region: G20,VM,VN,VNM,704,Asia,Asia,South-Eastern Asia,East Asia & Pacific,
+Vanuatu,VUT,Vanuatu,Vanuatu,Van.,VU,Republic of Vanuatu,Vanuatu,,2.009,7. Least developed region,NH,VU,VUT,548,Oceania,Oceania,Melanesia,East Asia & Pacific,
+France,FR1,Wallis and Futuna Is.,Wallis and Futuna Islands,Wlf.,WF,Wallis and Futuna Islands,Wallis and Futuna,,-99,6. Developing region,WF,WF,WLF,876,Oceania,Oceania,Polynesia,East Asia & Pacific,
+United Kingdom,GB1,Akrotiri,Akrotiri,Akr.,AK,,Akrotiri Sovereign Base Area,,-99,2. Developed region: nonG7,-99,-99,-99,-99,Asia,Asia,Western Asia,Europe & Central Asia,
+Samoa,WSM,Samoa,Samoa,Samoa,WS,Independent State of Samoa,Samoa,,2.006,7. Least developed region,WS,WS,WSM,882,Oceania,Oceania,Polynesia,East Asia & Pacific,
+Yemen,YEM,Yemen,Yemen,Yem.,YE,Republic of Yemen,"Yemen, Rep.",,2.004,7. Least developed region,YM,YE,YEM,887,Asia,Asia,Western Asia,Middle East & North Africa,
+South Africa,ZAF,South Africa,South Africa,S.Af.,ZA,Republic of South Africa,South Africa,,2.001,5. Emerging region: G20,SF,ZA,ZAF,710,Africa,Africa,Southern Africa,Sub-Saharan Africa,
+Zambia,ZMB,Zambia,Zambia,Zambia,ZM,Republic of Zambia,Zambia,,2.010,7. Least developed region,ZA,ZM,ZMB,894,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
+Zimbabwe,ZWE,Zimbabwe,Zimbabwe,Zimb.,ZW,Republic of Zimbabwe,Zimbabwe,,2.002,5. Emerging region: G20,ZI,ZW,ZWE,716,Africa,Africa,Eastern Africa,Sub-Saharan Africa,
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/test/resources/log4j.xml	(revision 46118)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2012 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-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.construc">
+		<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.344/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/TestLastColumnEmpty.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestLastColumnEmpty.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestLastColumnEmpty.java	(revision 46118)
@@ -0,0 +1,55 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+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.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestLastColumnEmpty extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestLastColumnEmpty.class);
+
+  public TestLastColumnEmpty(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testLastColumnEmpty() throws Exception {
+    TestUtils.initialiceRepository();
+    FeatureStore  continents1 = TestUtils.openStore("continents");
+    FeatureStore  continents2 = TestUtils.openStore("continents2");
+    assertEquals(continents1.getDefaultFeatureTypeQuietly().size(), continents2.getDefaultFeatureTypeQuietly().size());
+    
+    List<Feature> features1 = continents1.getFeatures();
+    List<Feature> features2 = continents2.getFeatures();
+    assertEquals(features1.size(), features2.size());
+    
+    FeatureType ft = continents1.getDefaultFeatureTypeQuietly();
+    for (int i = 0; i < features1.size(); i++) {
+        Feature f1 = features1.get(i);
+        Feature f2 = features2.get(i);
+        for (int j = 0; j < ft.size(); j++) {
+            assertEquals(f1.get(j), f2.get(j));
+        }
+    }
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 46118)
@@ -0,0 +1,118 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.net.URL;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestUtils  {
+    
+    public static final Logger LOGGER = LoggerFactory.getLogger(TestUtils.class);
+    
+    public static File getTargetFolder() throws Exception {
+        URL url = TestUtils.class.getResource("/");
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+    
+    public static File getResource(String name) throws Exception {
+        File x = FileUtils.getFile(getTargetFolder(), "test-classes", name);
+        return x;
+    }
+    
+    public static File getResourceAsFile(String pathname) throws Exception {
+        URL url = TestUtils.class.getResource(pathname);
+        File x = new File(url.toURI());
+        return x;
+    }
+
+    public static void removeDALResource(String fname) throws Exception {
+        File f = getResource(fname);
+        f = new File(FilenameUtils.removeExtension(f.getAbsolutePath())+".dal");
+        FileUtils.deleteQuietly(f);
+    }
+
+    public static FeatureStore openSourceStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResource("/org/gvsig/fmap/dal/store/csv/testCreateSource1.csv");
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",f,
+                "automaticTypesDetection=", false,
+                "locale=","en"
+        );
+        return store;
+    }
+    
+    public static FeatureStore openStore(String name) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        StoresRepository repository = dataManager.getStoresRepository();
+        FeatureStore store = (FeatureStore) repository.getStore(name);
+        return store;
+    }
+    
+    public static FeatureStore openSourceCountries() throws Exception {
+        return openStore("countries");
+    }
+
+    public static FeatureStore openSourceTwoCountries() throws Exception {
+        return openStore("twocountries");
+    }
+
+    public static FeatureStore openSourceContinents() throws Exception {
+        return openStore("continents");
+    }
+    
+    public static void initialiceRepository() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        StoresRepository repository = dataManager.getStoresRepository();
+        repository.add(
+                "continents", 
+                dataManager.createStoreParameters(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",getResource("/org/gvsig/fmap/dal/store/csv/continents.csv"),
+                "automaticTypesDetection=", false,
+                "delimiter=",",",
+                "locale=","en"
+                )
+        );
+        repository.add(
+                "continents2", 
+                dataManager.createStoreParameters(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",getResource("/org/gvsig/fmap/dal/store/csv/continents2.csv"),
+                "automaticTypesDetection=", true,
+                "delimiter=",";",
+                "locale=","en"
+                )
+        );
+        repository.add(
+                "countries", 
+                dataManager.createStoreParameters(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",getResource("/org/gvsig/fmap/dal/store/csv/countries.csv"),
+                "automaticTypesDetection=", false,
+                "delimiter=",",",
+                "locale=","en"
+                )
+        );
+        repository.add(
+                "twocountries", 
+                dataManager.createStoreParameters(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",getResource("/org/gvsig/fmap/dal/store/csv/twocountries.csv"),
+                "automaticTypesDetection=", false,
+                "delimiter=",",",
+                "locale=","en"
+                )
+        );
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestCreate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 46118)
@@ -0,0 +1,351 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Date;
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCreate extends TestCase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestCreate.class);
+    
+    public TestCreate(String testName) {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    
+    protected File getTargetFolder() throws Exception {
+        URL url = this.getClass().getResource("/");
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+    
+    protected File getFile(String name) throws Exception {
+        File x = new File(getTargetFolder(), name);
+        return x;
+    }
+    
+    protected File getResource(String pathname) throws Exception {
+        URL url = this.getClass().getResource(pathname);
+        File x = new File(url.toURI());
+        return x;
+    }
+
+    public FeatureStore openSourceStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResource("/org/gvsig/fmap/dal/store/csv/testCreateSource1.csv");
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file",f,
+                "automaticTypesDetection", false,
+                "locale","en"
+        );
+        return store;
+    }
+
+    protected String getProviderName() {
+        return DataStore.CSV_PROVIDER_NAME;
+    }
+    
+    protected String getTargetFilename() {
+        return "testCreateTarget.csv";
+    }
+
+    protected FeatureStore openTargetStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getFile(getTargetFilename());
+        FeatureStore store;
+        try {
+            store = (FeatureStore) dataManager.openStore(
+                getProviderName(), 
+                "file",f,
+                "automaticTypesDetection", false,
+                "locale","en"
+            );
+        } catch(ValidateDataParametersException ex) {
+            LOGGER.warn(ex.getLocalizedMessageStack());
+            throw ex;
+        }
+        return store;
+    }
+
+    private void removeDALFile() throws Exception {
+        File f = getFile(getTargetFilename());
+        f = new File(FilenameUtils.removeExtension(f.getAbsolutePath())+".dal");
+        FileUtils.deleteQuietly(f);
+    }
+    
+    protected void createFrom(FeatureStore sourceStore) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorer explorer = dataManager.openServerExplorer(
+                DataServerExplorer.FILESYSTEM_SERVER_EXPLORER_NAME, 
+                "root", getTargetFolder()
+        );
+        
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getProviderName()
+        );
+        ((FilesystemStoreParameters)params).setFile(getFile(getTargetFilename()));
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.copyFrom(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+    
+    protected void checkTypes(FeatureType sourceFeatureType) throws Exception {
+//        DataType STRING_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.STRING);
+//        DataType INT_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.INT);
+        
+        FeatureStore targetStore = openTargetStore1();
+        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
+
+        assertEquals("Feature type size",sourceFeatureType.size(), targetFeatureType.size());
+        for (int i = 0; i < sourceFeatureType.size(); i++) {
+            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
+            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
+            switch(sourceAttr.getType()) {
+                case DataTypes.BYTE:
+                case DataTypes.INT:
+                case DataTypes.LONG:
+                case DataTypes.BOOLEAN:
+                case DataTypes.DATE:
+                case DataTypes.STRING:
+                case DataTypes.TIME:
+                case DataTypes.TIMESTAMP:
+                case DataTypes.DOUBLE:
+                case DataTypes.FLOAT:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()), 
+                            sourceAttr.getName(), 
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getDataTypeName(), 
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.GEOMETRY:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()), 
+                            sourceAttr.getName(), 
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getDataTypeName(), 
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s geometry type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getGeomType().getName(), 
+                            targetAttr.getGeomType().getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s geometry SRS mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSRS().toString(), 
+                            targetAttr.getSRS().toString()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    break;
+                default:
+                    fail(
+                        String.format("Field %s type %d (%s) not supported.", 
+                                targetAttr.getName(),
+                                targetAttr.getType(),
+                                targetAttr.getDataTypeName()
+                        )
+                    );
+            }
+        }
+    }
+    
+    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+        targetStore.edit(mode); // For debug
+        int counter = 0;
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+                counter++;
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    protected void checkData(FeatureStore sourceStore) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+
+        List<Feature> sourceFeatures = sourceStore.getFeatures();
+        List<Feature> targetFeatures = targetStore.getFeatures();
+        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
+        for (int i = 0; i < targetFeatures.size(); i++) {
+            Feature sourceFeature = sourceFeatures.get(i);
+            Feature targetFeature = targetFeatures.get(i);
+            for (FeatureAttributeDescriptor sourceAttr : sourceStore.getDefaultFeatureType()) {
+                switch(sourceAttr.getType()) {
+                    case DataTypes.BYTE:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.getInt(sourceAttr.getName()),
+                                targetFeature.getInt(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.TIMESTAMP:
+                        Date sourceTimestamp = sourceFeature.getDate(sourceAttr.getName());
+                        Date targetTimestamp = targetFeature.getDate(sourceAttr.getName());
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceTimestamp,
+                                targetTimestamp
+                        );
+                        break;
+                    case DataTypes.TIME:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.getDate(sourceAttr.getName()),
+                                targetFeature.getDate(sourceAttr.getName())
+                        );
+                        break;
+//                    case DataTypes.FLOAT:
+//                    case DataTypes.DOUBLE:
+//                        assertEquals(
+//                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+//                                sourceFeature.getDouble(sourceAttr.getName()),
+//                                targetFeature.getDouble(sourceAttr.getName())
+//                        );
+//                        break;
+                    case DataTypes.GEOMETRY:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.get(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.STRING:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                StringUtils.defaultIfBlank(sourceFeature.getString(sourceAttr.getName()), null),
+                                StringUtils.defaultIfBlank(targetFeature.getString(sourceAttr.getName()), null)
+                        );
+                        break;
+                    case DataTypes.INT:
+                    case DataTypes.LONG:
+                    case DataTypes.FLOAT:
+                    case DataTypes.DOUBLE:
+                    default:
+                        Object sourceValue = sourceFeature.get(sourceAttr.getName());
+                        Object targetValue = targetFeature.get(sourceAttr.getName());
+                        if( sourceValue == null ) {
+                            LOGGER.info("sourceValue is null");
+                        }
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceValue,
+                                targetValue
+                        );
+                }
+            }
+        }
+    }
+    
+    
+    public void testCreateWithDALFile() throws Exception {
+        try {
+            FeatureStore sourceStore = openSourceStore1();
+
+            createFrom(sourceStore);
+
+            checkTypes(sourceStore.getDefaultFeatureType());
+            copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+            checkData(sourceStore);
+
+            createFrom(sourceStore);
+            copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+            checkData(sourceStore);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw e;
+        }
+
+    }
+    
+    public void testCreateWithoutDALFile() throws Exception {
+        FeatureStore sourceStore = openSourceStore1();
+        
+        createFrom(sourceStore);        
+        removeDALFile();
+        
+        checkTypes(sourceStore.getDefaultFeatureType());
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        removeDALFile();
+        checkData(sourceStore);
+        
+        createFrom(sourceStore);
+        removeDALFile();
+        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+        removeDALFile();
+        checkData(sourceStore);
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestFilter1.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestFilter1.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestFilter1.java	(revision 46118)
@@ -0,0 +1,111 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestFilter1 extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestFilter1.class);
+
+  public TestFilter1(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testSimpleFilter1() throws Exception {
+    TestUtils.initialiceRepository();
+    FeatureStore countries = TestUtils.openSourceCountries();
+    List<Feature> features = countries.getFeatures("LASTCENSUS > 0");
+    assertEquals("Filter: LASTCENSUS > 0", features.size(), 209);
+  }
+
+  public void testSimpleFilter2() throws Exception {
+    TestUtils.initialiceRepository();
+    FeatureStore countries = TestUtils.openSourceCountries();
+    List<Feature> features = countries.getFeatures("countries.LASTCENSUS > 0");
+    assertEquals("Filter: countries.LASTCENSUS > 0", features.size(), 209);
+  }
+
+  public void testSubselectFilter1() throws Exception {
+    TestUtils.initialiceRepository();
+
+    // Sobre la tabla de continentes, para obtener la lista de continentes 
+    // que tienen paises asociados a Gran Breta�a.
+    // Filtramos continentes por un campo del pais.
+    StringBuilder filter = new StringBuilder();
+    filter.append("EXISTS(");
+    filter.append(" SELECT * FROM countries");
+    filter.append("   WHERE ");
+    filter.append("     continents.NAME = countries.CONTINENT AND ");
+    filter.append("     countries.SOV_A3 = 'GB1' "); //FR1=4, GB1=6
+    filter.append("   LIMIT 1; ");
+    filter.append(")");
+
+    FeatureStore continents = TestUtils.openSourceContinents();
+    List<Feature> features = continents.getFeatures(filter.toString());
+    assertEquals("Filter: subselect GB1", 6, features.size());
+  }
+
+  public void testSubselectFilter2() throws Exception {
+    TestUtils.initialiceRepository();
+
+    // Sobre la tabla de continentes, para obtener la lista de continentes 
+    // que tienen paises asociados a Francia.
+    StringBuilder filter = new StringBuilder();
+    filter.append("EXISTS(");
+    filter.append(" SELECT CONTINENT FROM countries");
+    filter.append("   WHERE ");
+    filter.append("     continents.NAME = countries.CONTINENT AND ");
+    filter.append("     countries.SOV_A3 = 'FR1' "); //FR1=4, GB1=6
+    filter.append("   LIMIT 1; ");
+    filter.append(")");
+
+    FeatureStore continents = TestUtils.openSourceContinents();
+    List<Feature> features = continents.getFeatures(filter.toString());
+    assertEquals("Filter: subselect FR1", 4, features.size());
+  }
+
+    public void testSimple1() throws Exception {
+        TestUtils.initialiceRepository();
+        FeatureStore countries = TestUtils.openSourceTwoCountries();
+        FeatureSet features = countries.getFeatureSet();
+        int i = 0;
+        for (Feature feature : features) {
+            System.out.println((i++) + ": " + feature);
+        }
+//    assertEquals("Filter: LASTCENSUS > 0", features.size(), 209);
+    }
+
+    public void testSimple2() throws Exception {
+        TestUtils.initialiceRepository();
+        FeatureStore countries = TestUtils.openSourceCountries();
+        FeatureSet features = countries.getFeatureSet();
+        int i = 0;
+        for (Feature feature : features) {
+            System.out.println((i++) + ": " + feature);
+        }
+//    assertEquals("Filter: LASTCENSUS > 0", features.size(), 209);
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,573 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional 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.basicformats.CPGFile;
+import org.gvsig.basicformats.FormatsFile;
+import org.gvsig.basicformats.PRJFile;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.FileHelper;
+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.feature.OpenFeatureStoreParameters;
+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.Geometry;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.Tags;
+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;
+
+@SuppressWarnings("UseSpecificCatch")
+public class CSVStoreParameters extends AbstractDataParameters implements
+        OpenFeatureStoreParameters, 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";
+    public static final String FIRST_LINE_HEADER = "firstLineHeader";
+    public static final String HEADER = "header";
+    private static final String SURROUNDINGSPACESNEEDQUOTES = "surroundingSpacesNeedQuotes";
+
+    //private static final String IGNOREEMPTYLINES = "ignoreEmptyLines";
+    private static final String CRS = CRS_PARAMTER_NAME;
+    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 static final String POINT_COLUMN_NAME = "pointColumnName";
+    private static final String LIMIT = "limit";
+    private static final String INCLUDE_METADATA_IN_HEADER = "includeMetadataInHeader";
+    private static final String GEOMETRY_COLUMN = "geometry_column";
+    private static final String GEOMETRY_TYPE = "GeometryType";
+    private static final String GEOMETRY_SUBTYPE = "GeometrySubtype";
+    private static final String GEOMETRY_FORMAT = "GeometryFormat";
+
+    private DelegatedDynObject parameters;
+    private FeatureType featureType;
+    private boolean defaultValueOfAutomaticTypesDetection = true;
+
+    public CSVStoreParameters() {
+        this(PARAMETERS_DEFINITION_NAME);
+    }
+
+    protected CSVStoreParameters(String parametersDefinitionName) {
+        this(parametersDefinitionName, CSVStoreProvider.NAME);
+    }
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public CSVStoreParameters(String parametersDefinitionName, String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    private FeatureType getFeatureType() {
+        if( this.featureType==null ) {
+            try {
+                EditableFeatureType ftype = DALLocator.getDataManager().createFeatureType();
+                boolean all_fields_declare_type = CSVUtils.loadFeatureType(this, ftype, false, null);
+                defaultValueOfAutomaticTypesDetection = !all_fields_declare_type;
+                this.featureType = ftype;
+            } catch (Exception ex) {
+                LOGGER.debug("Can't detect feature type from csv header", ex);
+                // Do nothing, continue
+            }
+        }
+        return this.featureType;
+    }
+    
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+    @Override
+    public void setDynValue(String name, Object value) {
+        super.setDynValue(name, value);
+    }
+
+    @Override
+    public void validate() throws ValidateDataParametersException {
+        File f = this.getFile();
+        if( f!=null ) {
+            IProjection proj = null;
+            FeatureType ftype = this.getFeatureType();
+            if( ftype!=null ) {
+                this.setDynValue(AUTOMATICTYPESDETECTION, defaultValueOfAutomaticTypesDetection);
+                proj = ftype.getDefaultSRS();
+                if( proj!=null ) {
+                    this.setDynValue(CRS_PARAMTER_NAME, proj);
+                }
+                FeatureAttributeDescriptor attrgeom = ftype.getDefaultGeometryAttribute();
+                if( attrgeom!=null ) {
+                    this.setDynValue(GEOMETRY_COLUMN, attrgeom.getName());
+                    this.setDynValue(GEOMETRY_TYPE, attrgeom.getGeomType().getType());
+                    this.setDynValue(GEOMETRY_SUBTYPE, attrgeom.getGeomType().getSubType());
+                } else {
+                    this.setDynValue(GEOMETRY_COLUMN, null);
+                    this.setDynValue(GEOMETRY_TYPE, Geometry.TYPES.UNKNOWN);
+                    this.setDynValue(GEOMETRY_SUBTYPE, Geometry.SUBTYPES.UNKNOWN);
+                }
+                Tags ftypeTags = ftype.getTags();
+                for (String tagname : ftypeTags) {
+                    if( StringUtils.startsWithIgnoreCase(tagname, "csvparameters.") ) {
+                        String paramname = tagname.substring(14);
+                        String paramvalue = ftypeTags.getString(tagname,null);
+                        if( paramvalue!=null ) {
+                            this.setDynValue(paramname, paramvalue);
+                        }
+                    }
+                }
+            }
+            if( proj==null ) {
+                PRJFile prjfile = FormatsFile.getPRJFile(f);
+                if( prjfile!= null ) {
+                    this.setDynValue(CRS_PARAMTER_NAME, prjfile.getCRS());
+                }
+            }
+            String charsetName = getCharset(this);
+            if( StringUtils.isBlank(charsetName) ) {
+                CPGFile cpgfile = FormatsFile.getCPGFile(f);
+                if( cpgfile!=null ) {
+                    this.setDynValue(CHARSET, cpgfile.getCharsetName());
+                }
+            }
+        }
+        super.validate();
+    }
+    
+    @Override
+    public boolean isValid() {
+        if ( getFileName(this) == null ) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public File getFile() {
+        return (File) this.getDynValue(FILE);
+    }
+
+    @Override
+    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;
+    }
+
+    public static IProjection getCRS(DynObject dynobj) {
+        return (IProjection) dynobj.getDynValue(CRS);
+    }
+
+    public static String getFileName(DynObject dynobj) {
+        File f = (File) dynobj.getDynValue(FILE);
+        if ( f == null ) {
+            return null;
+        }
+        return f.getPath();
+    }
+
+    public 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);
+    }
+
+    public static String getGeometryColumn(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(GEOMETRY_COLUMN);
+        return s;
+    }
+
+    public static int getGeometryType(DynObject dynobj) {
+        Integer gtype = (Integer) dynobj.getDynValue(GEOMETRY_TYPE);
+        if( gtype == null ) {
+            return Geometry.TYPES.UNKNOWN;
+        }
+        return gtype;
+    }
+
+    public static String getGeometryFormat(DynObject dynobj) {
+        String gformat = (String) dynobj.getDynValue(GEOMETRY_FORMAT);
+        if( StringUtils.isBlank(gformat) ) {
+            return "WKT";
+        }
+        return gformat;
+    }
+
+    public static int getGeometrySubType(DynObject dynobj) {
+        Integer gsubtype = (Integer) dynobj.getDynValue(GEOMETRY_SUBTYPE);
+        if( gsubtype == null ) {
+            return Geometry.SUBTYPES.UNKNOWN;
+        }
+        return gsubtype;
+    }
+    
+    public static boolean isBlankOrDefaultLocale(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(LOCALE);
+        if (StringUtils.isBlank(s)) {
+            return true;
+        }
+        return StringUtils.equalsIgnoreCase("DEFAULT",s.trim());
+    }
+
+    public static Locale getLocale(DynObject dynobj) {
+        try {
+            String s = (String) dynobj.getDynValue(LOCALE);
+            if ( StringUtils.isBlank(s) ) {
+                return null;
+            }
+            if (StringUtils.equalsIgnoreCase("DEFAULT",s.trim())) {
+                return Locale.getDefault();
+            }
+            Locale locale;
+            // 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 getPointColumnName(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(POINT_COLUMN_NAME);
+        return 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);
+    }
+
+    public static String getHeader(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(HEADER);
+        s = StringEscapeUtils.unescapeJava(s);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s;
+    }
+
+    public 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;
+    }
+
+    public 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;
+    }
+
+    public static String getCharset(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(CHARSET);
+        return StringEscapeUtils.unescapeJava(s);
+    }
+
+    public 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);
+    }
+    
+    public static boolean getIncludeMetadataInHeader(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(INCLUDE_METADATA_IN_HEADER);
+        return BooleanUtils.isTrue(b);
+    }
+
+    public static boolean getAutomaticTypesDetection(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(AUTOMATICTYPESDETECTION);
+        return BooleanUtils.isTrue(b);
+    }
+
+    public static boolean getIgnoreErrors(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(IGNOREERRORS);
+        return BooleanUtils.isTrue(b);
+    }
+
+    public static boolean isFirstLineHeader(DynObject dynobj) {
+        Boolean b = (Boolean) dynobj.getDynValue(FIRST_LINE_HEADER);
+        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;
+//    }
+
+    public static String getRawFieldTypes(DynObject dynobj) {
+        String s = (String) dynobj.getDynValue(FIELDTYPES);
+        if ( StringUtils.isBlank(s) ) {
+            return null;
+        }
+        return s.trim();
+    }
+
+    public static int getSkipLines(DynObject dynobj) {
+        Integer n = (Integer) dynobj.getDynValue("skipLines");
+        if ( n == null ) {
+            return 0;
+        }
+        return n;
+    }
+
+    public static int getLimit(DynObject dynobj) {
+        Integer n = (Integer) dynobj.getDynValue(LIMIT);
+        if ( n == null ) {
+            return -1;
+        }
+        return n;
+    }
+
+    public 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 final int start;
+        private final int end;
+
+        public FieldDefinition(String def) {
+            def = def.trim();
+            String[] ss = def.split(":");
+            this.start = Integer.parseInt(ss[0]);
+            if ( ss.length < 2 ) {
+                this.end = -1;
+            } else {
+                this.end = Integer.parseInt(ss[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.344/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.344/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/AutomaticDetectionOfTypes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AutomaticDetectionOfTypes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AutomaticDetectionOfTypes.java	(revision 46118)
@@ -0,0 +1,365 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.geom.GeometryCoercionContext;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class AutomaticDetectionOfTypes {
+
+    public interface Rows {
+
+        public List<String> nextRowValues();
+    }
+    
+    public interface DetectedValue {
+        public int getType();
+        public int getDisplaySize();
+        public int getPrecision();
+        public int getScale();
+        public boolean isBlank();
+    }
+    
+    private static class DetectedValueImpl implements DetectedValue {
+
+        private int type;
+        private int displaySize;
+        private int integerDigits;
+        private int decimalDigits;
+        private boolean blank;
+        
+        @Override
+        public int getType() {
+            return this.type;
+        }
+
+        @Override
+        public int getDisplaySize() {
+            return this.displaySize;
+        }
+
+        @Override
+        public int getPrecision() {
+            return this.decimalDigits + this.integerDigits;
+        }
+
+        @Override
+        public int getScale() {
+            return this.decimalDigits;
+        }
+        
+        public boolean isBlank() {
+            return this.blank;
+        }
+    }
+
+    private static class PossibleDataType {
+
+        public boolean possibleInt = true;
+        public boolean possibleFloat = true;
+        public boolean possibleDouble = true;
+        public boolean possibleDecimal = true;
+        public boolean possibleLong = true;
+        public boolean possibleURL = true;
+        public boolean possibleDate = true;
+        public boolean possibleTime = true;
+        public boolean possibleTimestamp = true;
+        public boolean possibleGeometry = true;
+    }
+
+    private final String filename;
+
+    public AutomaticDetectionOfTypes() {
+        this("(unknown)");
+    }
+
+    public AutomaticDetectionOfTypes(String filename) {
+        this.filename = filename;
+    }
+
+    private String getFullFileName() {
+        return this.filename;
+    }
+
+    @SuppressWarnings({"UseSpecificCatch", "ResultOfObjectAllocationIgnored"})
+    public DetectedValue[] detect(int columns,
+            Rows rows,
+            boolean isFirstLineHeader,
+            Locale locale,
+            SimpleTaskStatus status
+    ) throws IOException {
+        List<PossibleDataType> possibleDataTypes;
+        List<DetectedValueImpl> detectedValues = new ArrayList<>(columns);
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        
+        if( status!=null ) {
+            status.message(i18n.getTranslation("_Types_detection"));
+        }
+        
+        int lineno = 0;
+        try {
+            if (isFirstLineHeader) {
+                rows.nextRowValues();
+                lineno++;
+            }
+            possibleDataTypes = new ArrayList<>(columns);
+            for (int i = 0; i < columns; i++) {
+                possibleDataTypes.add(new PossibleDataType());
+                detectedValues.add(new DetectedValueImpl());
+            }
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+            DataTypesManager typeManager = ToolsLocator.getDataTypesManager();
+            Coercion toDecimal = typeManager.getCoercion(DataTypes.DECIMAL);
+            Coercion toDouble = typeManager.getCoercion(DataTypes.DOUBLE);
+            Coercion toFloat = typeManager.getCoercion(DataTypes.FLOAT);
+            Coercion toDate = typeManager.getCoercion(DataTypes.DATE);
+            Coercion toTime = typeManager.getCoercion(DataTypes.TIME);
+            Coercion toTimestamp = typeManager.getCoercion(DataTypes.TIMESTAMP);
+            Coercion toInt = typeManager.getCoercion(DataTypes.INT);
+            Coercion toLong = typeManager.getCoercion(DataTypes.LONG);
+            Coercion toGeom = typeManager.getCoercion(DataTypes.GEOMETRY); 
+
+            GeometryCoercionContext  geometryCoercionContext = GeometryLocator.getGeometryManager().createGeometryCoercionContext();
+            geometryCoercionContext.setMode(GeometryCoercionContext.MODE_ONERROR_THROW);
+
+            CoercionContext coercionContext = DataTypeUtils.coerceContextLocale(locale);
+            List<String> row = rows.nextRowValues();
+            lineno++;
+
+            int detectedValuesSize = detectedValues.size();
+            while (row != null) {
+                if( status!=null ) {
+                    status.incrementCurrentValue();
+                    if( status.isCancellationRequested() ) {
+                        status.cancel();
+                        break;
+                    }
+                }
+                int rowsize = row.size();
+                if( rowsize>detectedValuesSize ) {
+                    for (int i = detectedValuesSize; i < rowsize; i++) {
+                        possibleDataTypes.add(new PossibleDataType());
+                        detectedValues.add(new DetectedValueImpl());
+                    }
+                    detectedValuesSize = detectedValues.size();
+                }
+                for (int i = 0; i < rowsize; i++) {
+                    while( possibleDataTypes.size()<row.size() ) {
+                        possibleDataTypes.add(new PossibleDataType());
+                    }
+                    String rawvalue = row.get(i);
+                    if( rawvalue == null ) {
+                       continue; 
+                    }
+                    
+                    PossibleDataType possibleDataType = possibleDataTypes.get(i);
+                    DetectedValueImpl detectedValue = detectedValues.get(i);
+                    if( detectedValue.blank ) {
+                        detectedValue.blank = StringUtils.isBlank(rawvalue);
+                    }
+                    int displaySize = rawvalue.length();
+                    if( displaySize>detectedValue.displaySize ) {
+                        detectedValue.displaySize = displaySize;
+                    }
+                    if (possibleDataType.possibleDecimal) {
+                        try {
+                            BigDecimal decimal = (BigDecimal) toDecimal.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDecimal = true;
+                            if( decimal.scale() > detectedValue.decimalDigits ) {
+                                detectedValue.decimalDigits = decimal.scale();
+                            }
+                            int integerDigits = decimal.precision() - decimal.scale();
+                            if( integerDigits>detectedValue.integerDigits ) {
+                                detectedValue.integerDigits = integerDigits;
+                            }
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDecimal = false;
+                        }
+                    }
+                    if (possibleDataType.possibleDouble) {
+                        try {
+                            toDouble.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDouble = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDouble = false;
+                        }
+                    }
+                    if (possibleDataType.possibleFloat) {
+                        try {
+                            toFloat.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleFloat = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleFloat = false;
+                        }
+                    }
+                    if (possibleDataType.possibleLong) {
+                        possibleDataType.possibleLong = isValidLong(rawvalue);
+                    }
+                    if (possibleDataType.possibleInt) {
+                        possibleDataType.possibleInt = isValidInteger(rawvalue);
+                    }
+                    if (possibleDataType.possibleDate) {
+                        try {
+                            toDate.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleDate = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleDate = false;
+                        }
+                    }
+                    if (possibleDataType.possibleTime) {
+                        try {
+                            toTime.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleTime = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleTime = false;
+                        }
+                    }
+                    if (possibleDataType.possibleTimestamp) {
+                        try {
+                            toTimestamp.coerce(rawvalue, coercionContext);
+                            possibleDataType.possibleTimestamp = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleTimestamp = false;
+                        }
+                    }
+                    if (possibleDataType.possibleURL) {
+                        try {
+                            new URL((String) rawvalue);
+                            possibleDataType.possibleURL = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleURL = false;
+                        }
+                    }
+                    
+                    if (possibleDataType.possibleGeometry) {
+                        try {
+                            toGeom.coerce((String) rawvalue, geometryCoercionContext);
+                            possibleDataType.possibleGeometry = true;
+                        } catch (Exception ex) {
+                            possibleDataType.possibleGeometry = false;
+                        }
+                    }
+                }
+                row = rows.nextRowValues();
+                lineno++;
+            }
+            if( status!=null ) {
+                status.setRangeOfValues(0, lineno);
+                status.setCurValue(0);
+            }
+            int n = 0;
+            for (PossibleDataType possibleDataType : possibleDataTypes) {
+                if (possibleDataType.possibleInt) {
+                    detectedValues.get(n++).type = DataTypes.INT;
+                    continue;
+                }
+                if (possibleDataType.possibleLong) {
+                    detectedValues.get(n++).type = DataTypes.LONG;
+                    continue;
+                }
+                if (possibleDataType.possibleDecimal) {
+                    // Preferimos un Decimal que un Float/Double
+                    detectedValues.get(n++).type = DataTypes.DECIMAL;
+                    continue;
+                }
+                if (possibleDataType.possibleFloat) {
+                    // Forzamos los float a double para evitar perder precision
+                    detectedValues.get(n++).type = DataTypes.DOUBLE;
+                    continue;
+                }
+                if (possibleDataType.possibleDouble) {
+                    detectedValues.get(n++).type = DataTypes.DOUBLE;
+                    continue;
+                }
+                if (possibleDataType.possibleURL) {
+                    detectedValues.get(n++).type = DataTypes.URL;
+                    continue;
+                }
+                if (possibleDataType.possibleDate) {
+                    detectedValues.get(n++).type = DataTypes.DATE;
+                    continue;
+                }
+                if (possibleDataType.possibleTime) {
+                    detectedValues.get(n++).type = DataTypes.TIME;
+                    continue;
+                }
+                if (possibleDataType.possibleTimestamp) {
+                    detectedValues.get(n++).type = DataTypes.TIMESTAMP;
+                    continue;
+                }
+                if (possibleDataType.possibleGeometry) {
+                    detectedValues.get(n++).type = DataTypes.GEOMETRY;
+                    continue;
+                }
+                detectedValues.get(n++).type = DataTypes.STRING;
+            }
+        } catch (Throwable ex) {
+            status.abort();
+            throw new RuntimeException("Problems reading file '" + this.getFullFileName() + "' near line " + lineno + ".", ex);
+        }
+        DetectedValue[] r = detectedValues.toArray(new DetectedValue[detectedValues.size()]);
+        return r;
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    private boolean isValidLong(String s) {
+        if (s == null) {
+            return true;
+        }
+        s = s.trim().toLowerCase();
+        if (s.isEmpty()) {
+            return true;
+        }
+        try {
+            if (s.startsWith("0x")) {
+                Long.valueOf(s.substring(2), 16);
+            } else {
+                Long.valueOf(s);
+            }
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    @SuppressWarnings("UseSpecificCatch")
+    private boolean isValidInteger(String s) {
+        if (s == null) {
+            return true;
+        }
+        s = s.trim().toLowerCase();
+        if (s.isEmpty()) {
+            return true;
+        }
+        try {
+            if (s.startsWith("0x")) {
+                Integer.valueOf(s.substring(2), 16);
+            } else {
+                Integer.valueOf(s);
+            }
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestXML.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestXML.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestXML.java	(revision 46118)
@@ -0,0 +1,285 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.MutableLong;
+import org.gvsig.tools.util.ListBuilder;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class TestXML {
+    
+    private static final String XMLFILE1 = "/home/jjdelcerro/datos/geodata/vector/sigpac/2018/Declaracion.xml";
+    private static final String XMLFILE2 = "/home/jjdelcerro/datos/geodata/vector/ARENA2/quincenas-0/TV_03_2019_01_Q1/victimas.xml";
+    private static final String XMLFILE_BIG = "/home/jjdelcerro/datos/geodata/vector/RSUPAC/2020/BDA_RSU_PAC20_1713052020_001.XML";
+            
+    public static void main(String[] args) throws Exception {
+        TestXML t = new TestXML();
+        
+        Set<String> tags = t.extractTags(XMLFILE1);
+        System.out.println("Tags: -------------------------");
+        for (String tag : tags) {
+            System.out.println(tag);
+        }
+        List<List<String>> records = t.getRecords1(
+                XMLFILE1, 
+                "DECLARACION/LINEA_DECLARACION", 
+                ListBuilder.create(
+                    "DECLARACION/LINEA_DECLARACION/PROV",
+//                    "DECLARACION/LINEA_DECLARACION/MUN_INE",
+//                    "DECLARACION/LINEA_DECLARACION/MUN_CAT",
+//                    "DECLARACION/LINEA_DECLARACION/AGREGADO",
+                    "DECLARACION/LINEA_DECLARACION/ZONA",
+                    "DECLARACION/LINEA_DECLARACION/POLIGONO",
+                    "DECLARACION/LINEA_DECLARACION/PARCELA",
+                    "DECLARACION/LINEA_DECLARACION/RECINTO",
+                    "DECLARACION/LINEA_DECLARACION/PARCELA_AGRICOLA",
+                    "DECLARACION/LINEA_DECLARACION/CULTIVO",
+//                    "DECLARACION/LINEA_DECLARACION/WKT",
+                    "DECLARACION/LINEA_DECLARACION/DN_SURFACE",
+                    "DECLARACION/LINEA_DECLARACION/SUPERFICIE_DECLARADA"
+//                    "DECLARACION/LINEA_DECLARACION/FC_ALMENDROS",
+//                    "DECLARACION/LINEA_DECLARACION/FC_ALGARROBOS",
+//                    "DECLARACION/LINEA_DECLARACION/FC_AVELLANOS",
+//                    "DECLARACION/LINEA_DECLARACION/FC_NOGALES",
+//                    "DECLARACION/LINEA_DECLARACION/FC_PISTACHOS",
+//                    "DECLARACION/LINEA_DECLARACION/FC_TOTAL"
+                )
+        );
+        for (List<String> record : records) {
+            System.out.println(StringUtils.join(record, ","));
+        }
+    }
+    
+    private Reader openFileReader(File xmlfile) throws Exception  {
+        FileInputStream fis = new FileInputStream(xmlfile);
+//        EncodingDetector encodingDetector = TikaConfig.getDefaultConfig().getEncodingDetector();
+//        Charset encoding = encodingDetector.detect(fis, null);
+        Charset encoding = StandardCharsets.UTF_8;
+        InputStreamReader reader = new InputStreamReader(fis, encoding);
+        return reader;
+    }
+    
+    private Set<String> extractTags(String xmlfile) throws Exception {
+        SAXParserFactory spf = SAXParserFactory.newInstance();
+        spf.setNamespaceAware(true);
+        SAXParser saxParser = spf.newSAXParser();
+//        RandomAccessFileReader reader = new RandomAccessFileReader(new File(xmlfile), StandardCharsets.UTF_8);
+        Reader reader = openFileReader(new File(xmlfile));
+        InputSource is = new InputSource(reader);
+
+        List<String> path = new ArrayList<>();
+        Set<String> tags = new LinkedHashSet<>();
+
+        System.out.println("Parse (extract-tags): -------------------------");
+        saxParser.parse(is, new DefaultHandler() {
+            private Locator locator;
+            
+            @Override
+            public void setDocumentLocator(Locator locator) {
+                this.locator = locator;
+            }
+            
+            @Override
+            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                    path.add(localName);
+
+                    int line = this.locator.getLineNumber();
+                    int column = this.locator.getColumnNumber()-2-localName.length();
+                    String path_s = StringUtils.join(path, "/");
+
+                    tags.add(path_s);
+                    for (int i = 0; i < attributes.getLength(); i++) {
+                        String name = attributes.getLocalName(i);
+                        tags.add(path_s+"/#"+name);
+                    }
+                    if( "DECLARACION/LINEA_DECLARACION".equals(StringUtils.join(path, "/")) ) {
+                        System.out.println(path_s+": "+line+":"+column);
+                    }
+                    if( "DECLARACION".equals(StringUtils.join(path, "/")) ) {
+                        System.out.println(path_s+": "+line+":"+column);
+                    }
+            }
+
+            @Override
+            public void endElement(String uri, String localName, String qName) throws SAXException {
+                    path.remove(path.size()-1);
+            }
+        });
+
+        return tags;
+    }
+    
+    private List<List<String>> getRecords1(String xmlfile, String recordPath, List<String>fieldPaths) throws Exception {
+        class ParseRecordsHandler extends DefaultHandler {
+            Locator locator;
+            List<String> path = new ArrayList<>();
+            List<List<String>> records = new ArrayList<>();
+            Map<String,String> record = new HashMap<>();
+            StringBuilder value = new StringBuilder();
+            
+            @Override
+            public void setDocumentLocator(Locator locator) {
+                this.locator = locator;
+            }
+            
+            @Override
+            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                    path.add(localName);
+
+                    int line = this.locator.getLineNumber();
+                    int column = this.locator.getColumnNumber()-2-localName.length();
+                    String path_s = StringUtils.join(path, "/");
+
+                    if( StringUtils.equalsIgnoreCase(path_s, recordPath) ) {
+                        return;
+                    }
+                    this.value.setLength(0);
+//                    this.value.trimToSize();
+            }
+
+            @Override
+            public void characters(char[] ch, int start, int length) throws SAXException {
+                value.append(new String(ch, start, length));
+            }
+            
+            @Override
+            public void endElement(String uri, String localName, String qName) throws SAXException {
+                    int line = this.locator.getLineNumber();
+                    int column = this.locator.getColumnNumber()-2-localName.length();
+                    String path_s = StringUtils.join(path, "/");
+
+                    if( StringUtils.equalsIgnoreCase(path_s, recordPath) ) {
+                        List<String> values = new ArrayList<>();
+                        for (String fieldPath : fieldPaths) {
+                            values.add(record.get(fieldPath));
+                        }
+                        records.add(values);
+                        record.clear();
+                    } else {
+                        for (String fieldPath : fieldPaths) {
+                            if( StringUtils.equalsIgnoreCase(path_s, fieldPath) ) {
+                                record.put(fieldPath, this.value.toString());
+                                // No break to handle repeated columns
+                            }
+                        }
+                    }
+
+                    path.remove(path.size()-1);
+            }
+        }
+        
+        SAXParserFactory spf = SAXParserFactory.newInstance();
+        spf.setNamespaceAware(true);
+        SAXParser saxParser = spf.newSAXParser();
+//        RandomAccessFileReader reader = new RandomAccessFileReader(new File(xmlfile), StandardCharsets.UTF_8);
+        Reader reader = openFileReader(new File(xmlfile));
+        InputSource is = new InputSource(reader);
+
+
+        ParseRecordsHandler handler = new ParseRecordsHandler();
+        
+        System.out.println("Parse (getRecords): -------------------------");
+        saxParser.parse(is, handler);
+        
+        return handler.records;
+    }
+
+    private long getRecordCount(String xmlfile, String recordPath) throws Exception {
+        SAXParserFactory spf = SAXParserFactory.newInstance();
+        spf.setNamespaceAware(true);
+        SAXParser saxParser = spf.newSAXParser();
+        Reader reader = openFileReader(new File(xmlfile));
+        InputSource is = new InputSource(reader);
+
+        List<String> path = new ArrayList<>();
+        MutableLong numRecords = new MutableLong(0);
+
+        System.out.println("Parse (countRecords)");
+        saxParser.parse(is, new DefaultHandler() {
+            @Override
+            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                    path.add(localName);
+                    String path_s = StringUtils.join(path, "/");
+
+                    if( StringUtils.equalsIgnoreCase(path_s, recordPath) ) {
+                        numRecords.increment();
+                    }
+            }
+
+            @Override
+            public void endElement(String uri, String localName, String qName) throws SAXException {
+                    path.remove(path.size()-1);
+            }
+        });
+
+        return numRecords.longValue();
+    }
+    
+//    private void createIndex(String xmlfile, String recordPath) throws Exception {
+//        
+//        long countRecords = getRecordCount(xmlfile, recordPath);
+//        if (countRecords < 1) {
+//            return;
+//        }
+//        RandomAccessFileIndex record_idx = new RandomAccessFileIndex();
+//        record_idx.create(fileIndex, countRecords);
+//
+//        SAXParserFactory spf = SAXParserFactory.newInstance();
+//        spf.setNamespaceAware(true);
+//        SAXParser saxParser = spf.newSAXParser();
+//        Reader reader = openFileReader(new File(xmlfile));
+//        InputSource is = new InputSource(reader);
+//        List<String> path = new ArrayList<>();
+//
+//        System.out.println("Parse (createIndex)");
+//        saxParser.parse(is, new DefaultHandler() {
+//            Locator locator;
+//            
+//            @Override
+//            public void setDocumentLocator(Locator locator) {
+//                this.locator = locator;
+//            }
+//            @Override
+//            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+//                    path.add(localName);
+//                    int line = this.locator.getLineNumber();
+//                    int column = this.locator.getColumnNumber()-2-localName.length();
+//                    String path_s = StringUtils.join(path, "/");
+//
+//                    if( StringUtils.equalsIgnoreCase(path_s, recordPath) ) {
+//                        record_idx.set(lineno++, position);
+//                    }
+//            }
+//
+//            @Override
+//            public void endElement(String uri, String localName, String qName) throws SAXException {
+//                    path.remove(path.size()-1);
+//            }
+//        });
+//
+//        return numRecords.longValue();
+//    }
+    
+    
+    
+    private void test() {
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/RecordsFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/RecordsFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/RecordsFile.java	(revision 46118)
@@ -0,0 +1,104 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.sql.Timestamp;
+import java.util.List;
+import org.gvsig.fmap.dal.store.csv.RecordsFile.Record;
+import org.gvsig.tools.util.GetItem;
+import org.gvsig.tools.util.GetItem64;
+import org.gvsig.tools.util.Size;
+import org.gvsig.tools.util.Size64;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface RecordsFile extends List<Record>, Size, Size64, GetItem<Record>, GetItem64<Record>, Closeable {
+    
+    public static final byte TYPE_BYTE = 0;
+    public static final byte TYPE_SHORT = 1;
+    public static final byte TYPE_INTEGER = 2;
+    public static final byte TYPE_LONG = 3;
+    public static final byte TYPE_DOUBLE = 4;
+    public static final byte TYPE_TIMESTAMP = 5;
+    public static final byte TYPE_STRING = 6;
+    public static final byte TYPE_BYTES = 7;
+
+    public interface Record {
+        public RecordType getType();
+        public byte[] getBytes();
+        public void setBytes(byte[] bytes);
+        public ByteBuffer getBuffer();
+        
+        public int getByte(int n);
+        public int getShort(int n);
+        public int getInt(int n);
+        public long getLong(int n);
+        public double getDouble(int n);
+        public Timestamp getTimestamp(int n);
+        public String getString(int n);        
+        public byte[] getBytes(int n);        
+
+        public void setByte(int n, byte v);
+        public void setShort(int n, short v);
+        public void setInt(int n, int v);
+        public void setLong(int n, long v);
+        public void setDouble(int n, double v);
+        public void setTimestamp(int n, Timestamp v);
+        public void setString(int n, String v);        
+        public void setBytes(int n, byte[] v);        
+    }
+    
+    public interface RecordType {
+        public int getSize();
+        public int getFieldCount();
+        public int getFieldType(int n);
+        public int getFieldSize(int n);
+        public int getFieldOffset(int n);
+        public Record createRecord();
+        public byte[] toBytes();
+        
+        public static RecordType from(byte[] bytes) {
+            return RecordsFileImpl.RecordTypeImpl.from(bytes);
+        }
+        
+        public static RecordType from(ByteBuffer bytes) {
+            return RecordsFileImpl.RecordTypeImpl.from(bytes);
+        }
+    }
+    
+    public interface RecordTypeBuilder {
+        public RecordTypeBuilder addbyte();
+        public RecordTypeBuilder addShort();
+        public RecordTypeBuilder addInteger();
+        public RecordTypeBuilder addLong();
+        public RecordTypeBuilder addDouble();
+        public RecordTypeBuilder addTimestamp();
+        public RecordTypeBuilder addString(int size);
+        public RecordTypeBuilder addBytes(int size);
+        public RecordType build();
+        
+        public static RecordTypeBuilder recordTypeBuilder() {
+            return RecordsFileImpl.RecordTypeBuilderImpl.recordTypeBuilder();
+        }
+    }
+    
+    
+    public RecordType getRecordType();
+
+    public void open(File f) throws IOException;
+    
+    public void open(RandomAccessFile raf) throws IOException;
+
+    public void create(File f, RecordType recordType, long sz) throws IOException;
+    
+    public void create(RandomAccessFile raf, RecordType recordType, long sz) throws IOException ;
+    
+    public boolean isOpen();
+      
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.store.csv;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.lang3.StringUtils;
+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;
+import org.supercsv.comment.CommentStartsWith;
+import org.supercsv.prefs.CsvPreference;
+import org.supercsv.quote.QuoteMode;
+
+public class CSVFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider
+        implements FilesystemServerExplorerProvider, ResourceConsumer {
+
+    protected FilesystemServerExplorerProviderServices serverExplorer;
+
+    @Override
+    public String getDataStoreProviderName() {
+        return CSVStoreProvider.NAME;
+    }
+
+    @Override
+    public int getMode() {
+        return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
+    }
+
+    @Override
+    public boolean accept(File file) {
+        String pathname = file.getName().toLowerCase();
+        if ( pathname.endsWith(".csv") || pathname.endsWith(".json")){
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public String getDescription() {
+        return CSVStoreProvider.DESCRIPTION;
+    }
+
+    @Override
+    public DataStoreParameters getParameters(File file) throws DataException {
+        DataManager manager = DALLocator.getDataManager();
+        CSVStoreParameters params = (CSVStoreParameters) manager
+                .createStoreParameters(this.getDataStoreProviderName());
+        params.setFile(file);
+        return params;
+    }
+
+    @Override
+    public boolean canCreate() {
+        return true;
+    }
+
+    @Override
+    public boolean canCreate(NewDataStoreParameters parameters) {
+        CSVNewStoreParameters params = (CSVNewStoreParameters) parameters;
+        if (params.getFile().getParentFile().canWrite()) {
+            return false;
+        }
+        if (params.getFile().exists()) {
+            if (!params.getFile().canWrite()) {
+                return false;
+            }
+        }
+        if (params.getDefaultFeatureType() == null) {
+            return false;
+        }
+        return true;
+    }
+
+    public void create(NewDataStoreParameters parameters, boolean overwrite)
+            throws CreateException {
+
+        final CSVNewStoreParameters params = (CSVNewStoreParameters) parameters;
+        final File file = params.getFile();
+
+        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.getFile().getAbsolutePath(), e1);
+        }
+        resource.addConsumer(this);
+
+        try {
+            resource.execute(new ResourceAction() {
+                @Override
+                public Object run() throws Exception {
+                    String s;
+                    char quoteChar;
+                    int delimiterChar;
+                    String endOfLineSymbols;
+
+                    CSVFeatureWriter writer = new CSVFeatureWriter();
+
+                    CSVNewStoreParameters newparams = (CSVNewStoreParameters) params;
+                    CsvPreference defaultPreference = CSVStoreParameters.getPredefinedCSVPreferences(newparams);
+                    
+                    s = CSVStoreParameters.getQuoteCharacter(params);
+                    if (StringUtils.isBlank(s)) {
+                        quoteChar = (char) defaultPreference.getQuoteChar();
+                    } else {
+                        quoteChar = s.charAt(0);
+                    }
+
+                    s = CSVStoreParameters.getDelimiter(newparams);
+                    if (StringUtils.isBlank(s)) {
+                        delimiterChar = defaultPreference.getDelimiterChar();
+                    } else {
+                        delimiterChar = s.charAt(0);
+                    }
+
+                    endOfLineSymbols = CSVStoreParameters.getRecordSeparator(params);
+                    if (StringUtils.isBlank(endOfLineSymbols)) {
+                        endOfLineSymbols = defaultPreference.getEndOfLineSymbols();
+                    }
+
+                    CsvPreference.Builder builder = new CsvPreference.Builder(quoteChar, delimiterChar, endOfLineSymbols);
+
+                    s = CSVStoreParameters.getCommentStartMarker(newparams);
+                    if (!StringUtils.isBlank(s)) {
+                        CommentStartsWith cs = new CommentStartsWith(s);
+                        builder.skipComments(cs);
+                    }
+
+                    //builder.surroundingSpacesNeedQuotes(CSVStoreParameters
+                    //        .getSurroundingSpacesNeedQuotes(newparams));
+                    builder.surroundingSpacesNeedQuotes(true);
+                    
+                    QuoteMode quoteMode = CSVStoreParameters.getQuoteMode(newparams);
+                    if (quoteMode != null) {
+                        builder.useQuoteMode(quoteMode);
+                    }
+                    
+                    CsvPreference csvpreferences = builder.build();
+                    
+                    writer.initialize(params, file.getAbsoluteFile(), params.getDefaultFeatureType(), csvpreferences);
+                    writer.begin();
+
+//                    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 CSVNewStoreParameters();
+    }
+
+    @Override
+    public NewDataStoreParameters getCreateParameters() {
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) this
+                .createInstanceNewDataStoreParameters();
+        params.setDefaultFeatureType(this.serverExplorer
+                .getServerExplorerProviderServices().createNewFeatureType());
+        return params;
+    }
+
+    @Override
+    public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
+        this.serverExplorer = serverExplorer;
+
+    }
+
+    @Override
+    public void remove(DataStoreParameters parameters) throws RemoveException {
+        CSVStoreParameters params = (CSVStoreParameters) parameters;
+        File file = params.getFile();
+        if (!file.exists()) {
+            throw new RemoveException(this.getDataStoreProviderName(),
+                    new FileNotFoundException(params.getFile()));
+        }
+        if (!file.delete()) {
+            throw new RemoveException(this.getDataStoreProviderName(),
+                    new IOException()); // FIXME Exception
+        }
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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);
+                    attr.setScale(0);
+                    break;
+                case DataTypes.LONG:
+                    s = String.valueOf(Long.MAX_VALUE);
+                    attr.setSize(18);
+                    attr.setPrecision(0);
+                    attr.setScale(0);
+                    break;
+                case DataTypes.FLOAT:
+                    attr.setSize(18);
+                    attr.setPrecision(6);
+                    attr.setScale(0);
+                    break;
+                case DataTypes.DOUBLE:
+                    attr.setSize(18);
+                    attr.setPrecision(6);
+                    attr.setScale(0);
+                    break;
+            }
+        }
+        return newFeatureType;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/CSVPointAttributeEmulator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVPointAttributeEmulator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVPointAttributeEmulator.java	(revision 46118)
@@ -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.fmap.dal.store.csv;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+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.Point;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+class CSVPointAttributeEmulator implements FeatureAttributeEmulator {
+    
+    private static final Logger logger = LoggerFactory.getLogger(CSVStoreProvider.ToPointEvaluaror.class);
+    private static final int XNAME = 0;
+    private static final int YNAME = 1;
+    private static final int ZNAME = 2;
+    private GeometryManager geommgr;
+    private String[] fieldNames;
+    private Coercion toDouble;
+    private DataType dataType;
+    private int errorcount = 0;
+
+    public CSVPointAttributeEmulator() {
+    }
+
+    public CSVPointAttributeEmulator(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 String[] getFieldNames() {
+        return fieldNames;
+    }
+    
+    @Override
+    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;
+            double y = (Double) valueY;
+            Point point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+            if (this.fieldNames.length > 2) {
+                double z = (Double) valueZ;
+                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;
+        }
+    }
+
+    @Override
+    public void set(EditableFeature feature, Object value) {
+        if (value == null) {
+            return;
+        }
+        Point point;
+        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));
+        }
+    }
+
+    @Override
+    public boolean allowSetting() {
+        return true;
+    }
+
+    @Override
+    public String[] getRequiredFieldNames() {
+        return this.fieldNames;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return this.toJsonBuilder().build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.add("fieldNames", fieldNames);
+        return builder;
+    }
+
+    @Override
+    public void fromJson(JsonObject json) {
+        JsonArray jsonFieldNames = json.getJsonArray("fieldNames");
+        this.fieldNames = new String[jsonFieldNames.size()];
+        for (int i = 0; i < jsonFieldNames.size(); i++) {
+            this.fieldNames[XNAME] = jsonFieldNames.getString(i);
+        }
+        this.geommgr = GeometryLocator.getGeometryManager();
+        DataTypesManager datatypeManager = ToolsLocator.getDataTypesManager();
+        this.toDouble = datatypeManager.getCoercion(DataTypes.DOUBLE);
+        this.dataType = datatypeManager.get(DataTypes.GEOMETRY);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/FieldTypeParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FieldTypeParser.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FieldTypeParser.java	(revision 46118)
@@ -0,0 +1,198 @@
+/*
+ * 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.csv;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FieldTypeParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(FieldTypeParser.class);
+    
+    public String name = null;
+    public int type = DataTypes.UNKNOWN;
+    public int size = 0;
+    public int geomType = Geometry.TYPES.GEOMETRY;
+    public int geomSubtype = Geometry.SUBTYPES.GEOM2D;
+    public Map<String, String> tags = new HashMap<>();
+    public Map<String, String> typetags = new HashMap<>();
+    public Map<String, String> assignments = new HashMap<>();
+    public Map<String, String> typeAssignments = new HashMap<>();
+    // Valores obtenidos desde la deteccion automatica desde los datos
+    public AutomaticDetectionOfTypes.DetectedValue detectedValue = null;
+    private String typename = "string";
+    private final String fullFileName;
+    private final String providerName;
+
+    FieldTypeParser(String providerName, String fullFileName) {
+        this.providerName = providerName;
+        this.fullFileName = fullFileName;
+    }
+
+    public String getProviderName() {
+        return this.providerName;
+    }
+
+    public String getFullFileName() {
+        return this.fullFileName;
+    }
+
+    public void clear() {
+        this.name = null;
+        this.type = DataTypes.UNKNOWN;
+        this.size = 0;
+        this.tags = new HashMap<>();
+        this.typetags = new HashMap<>();
+        this.assignments = new HashMap<>();
+        this.typeAssignments = new HashMap<>();
+    }
+
+    public void copyFrom(FieldTypeParser other) {
+        this.name = other.name;
+        this.type = other.type;
+        this.size = other.size;
+        this.tags = new HashMap<>();
+        this.tags.putAll(other.tags);
+        this.typetags = new HashMap<>();
+        this.typetags.putAll(other.typetags);
+        this.assignments = new HashMap<>();
+        this.assignments.putAll(other.assignments);
+        this.typeAssignments = new HashMap<>();
+        this.typeAssignments.putAll(other.typeAssignments);
+    }
+
+    private int getType(String value) {
+        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+        return dataTypesManager.getType(typename);
+    }
+
+    private String[] split(String value, String separators) {
+        int firstSeparatorPosition = 1000000;
+        Character sep = null;
+        for (char ch : separators.toCharArray()) {
+            int pos = value.indexOf(ch);
+            if (pos > 0 && pos < firstSeparatorPosition) {
+                sep = ch;
+                firstSeparatorPosition = pos;
+            }
+        }
+        if (sep == null) {
+            return new String[]{value};
+        }
+        return value.split("[" + sep + "]");
+    }
+
+    @SuppressWarnings(value = "UseSpecificCatch")
+    public boolean parse(String value) {
+        String[] args;
+        if (value.contains("__")) {
+            args = value.split("__");
+        } else {
+            args = split(value, ":/#@!;-");
+            if (args.length == 1) {
+                this.name = value;
+                return true;
+            }
+        }
+        int n = 0;
+        this.name = StringUtils.trim(args[n++]);
+        if (n >= args.length) {
+            return true;
+        }
+        this.typename = StringUtils.trim(args[n++]);
+        this.type = this.getType(this.typename);
+        if (this.type == DataTypes.INVALID) {
+            this.geomType = GeometryUtils.getGeometryType(this.typename);
+            if (this.geomType == Geometry.TYPES.UNKNOWN) {
+                this.type = DataTypes.STRING;
+                LOGGER.info("Type '" + this.typename + "' not valid for attribute '" + value + "' in '" + getProviderName() + "' file '" + getFullFileName() + "'.");
+            } else {
+                this.typename = "GEOMETRY";
+                this.type = DataTypes.GEOMETRY;
+            }
+        }
+        this.size = 0;
+        while (n < args.length) {
+            String option = StringUtils.trim(args[n++].toLowerCase());
+            switch (option) {
+                case "size":
+                    try {
+                        this.size = Integer.parseInt(args[n++]);
+                    } catch (Exception ex) {
+                        LOGGER.warn("Ignore incorrect field size for field " + value + " in '" + getProviderName() + "' file '" + getFullFileName() + "'.", ex);
+                    }
+                    break;
+                case "tag":
+                    {
+                        String x = StringUtils.trim(args[n++]);
+                        int pos = x.indexOf("=");
+                        if (pos < 0) {
+                            this.tags.put(x, null);
+                        } else {
+                            this.tags.put(StringUtils.trim(StringUtils.substring(x, 0, pos)), StringUtils.trim(StringUtils.substring(x, pos + 1)));
+                        }
+                        break;
+                    }
+                case "typetag":
+                    {
+                        String x = StringUtils.trim(args[n++]);
+                        int pos = x.indexOf("=");
+                        if (pos < 0) {
+                            this.typetags.put(x, null);
+                        } else {
+                            this.typetags.put(StringUtils.trim(StringUtils.substring(x, 0, pos)), StringUtils.trim(StringUtils.substring(x, pos + 1)));
+                        }
+                        break;
+                    }
+                case "set":
+                    {
+                        String x = StringUtils.trim(args[n++]);
+                        int pos = x.indexOf("=");
+                        if (pos < 0) {
+                            this.assignments.put(x, null);
+                        } else {
+                            this.assignments.put(StringUtils.trim(StringUtils.substring(x, 0, pos)), StringUtils.trim(StringUtils.substring(x, pos + 1)));
+                        }
+                        break;
+                    }
+                case "typeset":
+                    {
+                        String x = StringUtils.trim(args[n++]);
+                        int pos = x.indexOf("=");
+                        if (pos < 0) {
+                            this.typeAssignments.put(x, null);
+                        } else {
+                            this.typeAssignments.put(StringUtils.trim(StringUtils.substring(x, 0, pos)), StringUtils.trim(StringUtils.substring(x, pos + 1)));
+                        }
+                        break;
+                    }
+                default:
+                    if (StringUtils.isNumeric(option) && this.size == 0) {
+                        try {
+                            this.size = Integer.parseInt(option);
+                        } catch (Exception ex) {
+                            LOGGER.warn("Ignore incorrect field size for field " + value + " in '" + getProviderName() + "' file '" + getFullFileName() + "'.", ex);
+                        }
+                        break;
+                    }
+                    LOGGER.warn("Illegal argumente '" + option + "' for field '" + this.name + "' in '" + getProviderName() + "' file '" + getFullFileName() + "' (" + value + ").");
+            }
+        }
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/CSVFeatureWriter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVFeatureWriter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVFeatureWriter.java	(revision 46118)
@@ -0,0 +1,250 @@
+/*
+ * 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.csv;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Locale;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+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.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.ToolsLocator;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dynobject.Tags;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.supercsv.io.CsvListWriter;
+import org.supercsv.prefs.CsvPreference;
+
+/**
+ *
+ * @author osc
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CSVFeatureWriter {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(CSVFeatureWriter.class);
+
+  private Envelope envelope = null;
+  private boolean calculate_envelope = false;
+  private CsvListWriter listWriter = null;
+  private CsvPreference csvpreferences = null;
+  private Writer writer = null;
+  private FeatureType ftype;
+  private File file;
+  private String[] values;
+  private FeatureAttributeDescriptor[] descriptors;
+  private Coercion convert = null;
+//  private CoercionContext converContext = null;
+  private int errorcounts = 0;
+  private Throwable lasterror = null;
+  private CSVStoreParameters storeParameters;
+  private String charset = null;
+  private boolean includeMetadataInHeader;
+    private Locale locale;
+    private GeometryManager geometryManager;
+
+  public void initialize(CSVStoreParameters storeParameters, File file, FeatureType ftype, CsvPreference csvpreferences) {
+    this.file = file;
+    this.ftype = ftype;
+    this.storeParameters = storeParameters;
+    if (csvpreferences == null) {
+      this.csvpreferences = CSVStoreParameters.getPredefinedCSVPreferences(storeParameters);
+    } else {
+      this.csvpreferences = csvpreferences;
+    }
+
+    if (this.ftype != null) {
+      this.descriptors = this.ftype.getAttributeDescriptors();
+      if (ftype.getDefaultGeometryAttributeName() != null) {
+        this.calculate_envelope = true;
+      }
+    }
+    this.convert = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.STRING);
+//    this.converContext = DataTypeUtils.coerceContextLocale(CSVStoreParameters.getLocale(this.storeParameters));
+    this.errorcounts = 0;
+    this.charset = CSVStoreParameters.getCharset(storeParameters);
+    this.includeMetadataInHeader = CSVStoreParameters.getIncludeMetadataInHeader(storeParameters);
+    this.locale = CSVStoreParameters.getLocale(storeParameters);
+    this.geometryManager = GeometryLocator.getGeometryManager();
+    }
+
+  public void beginAppend() {
+    try {
+      FileOutputStream fos = new FileOutputStream(file, true);
+      if (this.charset != null) {
+        this.writer = new OutputStreamWriter(fos, this.charset);
+      } else {
+        this.writer = new OutputStreamWriter(fos);
+      }
+      this.listWriter = new CsvListWriter(this.writer, this.csvpreferences);
+      if (ftype != null) {
+        this.descriptors = ftype.getAttributeDescriptors();
+        int n = 0;
+        for (FeatureAttributeDescriptor descriptor : descriptors) {
+          if (descriptor.getEvaluator() == null) {
+            n++;
+          }
+        }
+        this.values = new String[n];
+      }
+
+    } catch (IOException e) {
+      LOGGER.warn("Can't open file for write (" + file.getAbsolutePath() + ").", e);
+      throw new RuntimeException(e);
+    }
+  }
+
+  public void begin() {
+    try {
+      this.writer = 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.writer, this.csvpreferences);
+    int n = 0;
+    for (FeatureAttributeDescriptor descriptor : descriptors) {
+      if (descriptor.getEvaluator() == null) {
+        n++;
+      }
+    }
+
+    String[] header = new String[n];
+    this.values = new String[n];
+    n = 0;
+      for (FeatureAttributeDescriptor descriptor : descriptors) {
+          if (!descriptor.isComputed()) {
+              if (includeMetadataInHeader) {
+                header[n++] = (String) descriptor.get("all");
+              } else {
+                header[n++] = (String) descriptor.getName();
+              }
+          }
+      }
+      Tags tags = this.ftype.getTags();
+      if( tags!=null && !tags.isEmpty() ) {
+        String s = header[0];
+          for (String tagName : tags) {
+              s += "/typetag/"+tagName+"="+tags.getString(tagName, "?");
+          }
+          header[0] = s;
+      }
+    try {
+      listWriter.writeHeader(header);
+    } catch (Exception e) {
+      LOGGER.warn("Can't write header '" + ArrayUtils.toString(header) + "' 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());
+        }
+      }
+    }
+
+    for (int i = 0; i < descriptors.length; i++) {
+      FeatureAttributeDescriptor descriptor = descriptors[i];
+      if (descriptor.getEvaluator() == null) {
+        Object value = feature.get(i);
+        try {
+          if( descriptor.getType()==DataTypes.GEOMETRY ) {
+              if(value != null){
+                if( StringUtils.equalsIgnoreCase("WKT", CSVStoreParameters.getGeometryFormat(storeParameters))) {
+                  values[i] = ((Geometry)value).convertToWKT();
+                } else {
+                  values[i] = ((Geometry)value).convertToHexWKB();
+                }
+              }
+          } else {
+            values[i] = (String) this.convert.coerce(value, descriptor.getCoercionContext());
+          }
+        } catch (CoercionException|GeometryOperationNotSupportedException|GeometryOperationException e) {
+          try {
+            values[i] = value.toString();
+          } catch (Exception ex) {
+            values[i] = "";
+          }
+          if (errorcounts++ <= 10) {
+            this.lasterror = e;
+            LOGGER.warn("Can't convert value of field " + i + " to string in CVS file '" + this.file.getAbsolutePath() + "'.", e);
+            if (errorcounts == 10) {
+              LOGGER.warn("Too many error writing CVS file '" + this.file.getAbsolutePath() + "', don't output more.");
+            }
+          }
+        }
+        if( values[i]!=null ) {
+            values[i] = values[i].replaceAll("\\n","\\\\n");
+            values[i] = values[i].replaceAll("\\r","\\\\r");
+        }
+      }
+    }
+    try {
+      this.listWriter.write(values);
+    } catch (IOException e) {
+      if (errorcounts++ <= 10) {
+        this.lasterror = e;
+        LOGGER.warn("Can't write values to CVS file '" + this.file.getAbsolutePath() + "'.", e);
+        if (errorcounts == 10) {
+          LOGGER.warn("Too many error writing CVS file '" + this.file.getAbsolutePath() + "', 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 (writer != null) {
+      try {
+        writer.close();
+      } catch (Exception ex) {
+        // Ignore error
+      }
+      writer = null;
+    }
+  }
+
+  public Envelope getEnvelope() {
+    return this.envelope;
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/CSVNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVNewStoreParameters.java	(revision 46118)
@@ -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.csv;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+
+public class CSVNewStoreParameters extends CSVStoreParameters implements
+        NewFeatureStoreParameters {
+
+    public static final String PARAMETERS_DEFINITION_NAME = "CSVNewStoreParameters";
+
+    public static final String FEATURETYPE_PARAMTER_NAME = "FeatureType";
+
+    public static final String CODEPAGE_PARAMTER_NAME = "codePage";
+
+    public CSVNewStoreParameters() {
+        super(PARAMETERS_DEFINITION_NAME);
+    }
+
+    public byte getCodePage() {
+        return ((Byte) this.getDynValue(CODEPAGE_PARAMTER_NAME));
+    }
+
+    public void setCodePage(byte value) {
+        setDynValue(CODEPAGE_PARAMTER_NAME, value);
+    }
+
+    @Override
+    public EditableFeatureType getDefaultFeatureType() {
+        return (EditableFeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+    }
+
+    @Override
+    public void setDefaultFeatureType(FeatureType featureType) {
+        this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/CSVNewStoreParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/AbstractFeatureProviderLoadedOnDemand.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractFeatureProviderLoadedOnDemand.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractFeatureProviderLoadedOnDemand.java	(revision 46118)
@@ -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.dal.store.csv;
+
+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 abstract class AbstractFeatureProviderLoadedOnDemand extends DefaultFeatureProvider {
+
+    protected boolean loading;
+    protected boolean loaded;
+
+    public AbstractFeatureProviderLoadedOnDemand(FeatureType type) {
+        super(type);
+        loading = false;
+        loaded = false;
+    }
+
+    protected void load() {
+        if (loading || loaded || this.isNew()) {
+            return;
+        }
+        loading = true;
+        try {
+            doLoad();
+        } catch (Exception e) {
+        } finally {
+            loading = false;
+            loaded = true;
+        }
+    }
+
+    protected abstract void doLoad();
+
+    @Override
+    public void set(int i, Object value) {
+        this.load();
+        super.set(i, value);
+    }
+
+    @Override
+    public void set(String name, Object value) {
+        this.load();
+        super.set(featureType.getIndex(name), value);
+    }
+
+    @Override
+    public Object get(int i) {
+        this.load();
+        return super.get(i);
+    }
+
+    @Override
+    public Object get(String name) {
+        this.load();
+        return super.get(name);
+    }
+
+    @Override
+    public Geometry getDefaultGeometry() {
+        return null;
+    }
+
+    @Override
+    public Envelope getDefaultEnvelope() {
+        return null;
+    }
+
+    @Override
+    public void setOID(Object oid) {
+        this.loaded = false;
+        super.setOID(oid);
+    }
+
+    @Override
+    public FeatureProvider getCopy() {
+        this.load();
+        return super.getCopy();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/AbstractFeatureProviderLoadedOnDemand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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 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 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 YES;
+	}
+	
+	public int allowEditableFeatureType() {
+		return YES;
+	}
+
+        public int useLocalIndexesCanImprovePerformance() {
+            return YES;
+        }
+
+        @Override
+        public int isOptimalRecoverFeaturesByReference() {
+            return YES;
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/CSVUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVUtils.java	(revision 46118)
@@ -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.fmap.dal.store.csv;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.Locale;
+import java.util.Map;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.BOMInputStream;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import static org.gvsig.fmap.dal.store.csv.CSVStoreProvider.NAME;
+import org.gvsig.fmap.dal.store.csv.simplereaders.CSVReaderSuperCSV;
+import org.gvsig.fmap.dal.store.csv.simplereaders.FixedLenReader;
+import org.gvsig.fmap.dal.store.csv.simplereaders.JSonReader;
+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.type.GeometryType;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author gvSIG  Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CSVUtils {
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(CSVUtils.class);
+
+    private CSVUtils() {
+        
+    }
+    public static InputStreamReader openFile(File f, String charsetName) throws FileNotFoundException {
+        String fullFileName = f==null? "NULL":f.getAbsolutePath();
+        Charset charset = Charset.defaultCharset();
+        InputStream fis = new BOMInputStream(new FileInputStream(f));
+        if (StringUtils.isNotBlank(charsetName)) {
+            if (Charset.isSupported(charsetName)) {
+                try {
+                    charset = Charset.forName(charsetName);
+                } catch (Throwable th) {
+                    LOGGER.warn("Can't use charset '" + charsetName + "' for read csv '" + fullFileName + "'.", th);
+                }
+            } else {
+                LOGGER.warn("charset '" + charsetName + "' not supported for read csv '" + fullFileName + "'.");
+            }
+        }
+        InputStreamReader isr = new InputStreamReader(fis, charset);
+        return isr;
+    }
+    
+    public static boolean loadFeatureType(CSVStoreParameters parameters, EditableFeatureType featureType, boolean  detectTypes, SimpleTaskStatus status) throws IOException {
+        InputStreamReader in = null;
+        SimpleReader reader = null;
+        try {
+            String headers[];
+
+            in = openFile(
+                    parameters.getFile(),
+                    CSVStoreParameters.getCharset(parameters)
+            );
+
+            reader = getSimpleReader(parameters, in);
+
+            headers = CSVStoreParameters.getHeaders(parameters);
+            if (headers == null) {
+                if (CSVStoreParameters.isFirstLineHeader(parameters)) {
+                    headers = reader.getHeader();
+                    if (headers == null) {
+                        if (CSVStoreParameters.getIgnoreErrors(parameters)) {
+                            headers = getFixedHeaders(reader.getColumnsCount());
+                        } else {
+                            String msg = "Can't retrieve header from csv file '"
+                                    + parameters.getFile()
+                                            .getAbsolutePath()
+                                    + "' and not specified in the parameters.";
+                            LOGGER.warn(msg);
+                            throw new RuntimeException(msg);
+                        }
+                    }
+                } else {
+                    headers = getFixedHeaders(reader.getColumnsCount());
+                }
+            } else {
+                if (CSVStoreParameters.isFirstLineHeader(parameters)) {
+                    reader.getHeader(); // Skip and ignore the header of file
+                }
+            }
+
+            AutomaticDetectionOfTypes.DetectedValue[] detectedTypes = null;
+            if( detectTypes ) {
+                detectedTypes = automaticDetectionOfTypes(parameters, headers, status);
+            }
+            if( StringUtils.isBlank(headers[headers.length-1]) &&
+                (detectedTypes==null || detectedTypes[headers.length-1].isBlank()) ) {
+                headers = ArrayUtils.remove(headers, headers.length-1);
+            }
+            if (detectedTypes != null && detectedTypes.length > headers.length) {
+                // Se han detectado mas columnas que las que hay en la cabezera,
+                // a�adimos mas columnas a la cabezera.
+                String[] headers2 = new String[detectedTypes.length];
+                for (int i = 0; i < headers2.length; i++) {
+                    if (i < headers.length) {
+                        headers2[i] = headers[i];
+                    } else {
+                        headers2[i] = getFixedHeader(i);
+                    }
+                }
+                headers = headers2;
+            }
+            for (int i = 0; i < headers.length; i++) {
+                if (StringUtils.isBlank(headers[i])) {
+                    headers[i] = getFixedHeader(i);
+                }
+            }
+            // Initialize the feature types
+            return fillFeatureType(parameters, featureType,  headers, detectedTypes);
+        } finally {
+            IOUtils.closeQuietly(in);
+            IOUtils.closeQuietly(reader);
+        }
+    }
+    public static SimpleReader getSimpleReader(CSVStoreParameters parameters, Reader in) throws IOException {
+        SimpleReader reader;
+        String filename = CSVStoreParameters.getFileName(parameters);
+        if (FilenameUtils.isExtension(filename, "json")){
+            reader= new JSonReader(in,parameters);
+        } else if (CSVStoreParameters.getRawFieldsDefinition(parameters) != null) {
+            reader = new FixedLenReader(in, parameters);
+        } else {
+            reader = new CSVReaderSuperCSV(in, parameters);
+        }
+        return reader;
+    }
+
+    private static String getFixedHeader(int column) {
+        char[] header = new char[3];
+
+        String s = String.format("%03d", column);
+        header[0] = (char) (s.charAt(0) + 17);
+        header[1] = (char) (s.charAt(1) + 17);
+        header[2] = (char) (s.charAt(2) + 17);
+        return String.valueOf(header);
+    }
+
+    private static String[] getFixedHeaders(int count) {
+        String[] headers = new String[count];
+        for (int i = 0; i < headers.length; i++) {
+            headers[i] = getFixedHeader(i);
+        }
+        return headers;
+    }
+
+    private static AutomaticDetectionOfTypes.DetectedValue[] automaticDetectionOfTypes(CSVStoreParameters parameters, String[] headers, SimpleTaskStatus status) throws IOException {
+        String fullFileName = parameters.getFile()==null? "NULL":parameters.getFile().getAbsolutePath();
+        boolean automatic_types_detection = CSVStoreParameters.getAutomaticTypesDetection(parameters);
+        if (!automatic_types_detection) {
+            return null;
+        }
+        AutomaticDetectionOfTypes.DetectedValue[] types = null;
+
+        Reader in = null;
+        SimpleReader reader = null;
+
+        try {
+            in = openFile(
+                    parameters.getFile(),
+                    CSVStoreParameters.getCharset(parameters)
+            );
+            reader = getSimpleReader(parameters, in);
+            AutomaticDetectionOfTypes x = new AutomaticDetectionOfTypes(
+                    fullFileName
+            );
+            types = x.detect(
+                    headers.length,
+                    reader,
+                    CSVStoreParameters.isFirstLineHeader(parameters),
+                    CSVStoreParameters.getLocale(parameters),
+                    status
+            );
+        } catch (Exception ex) {
+            int lineno = 0;
+            if (reader != null) {
+                lineno = reader.getLine();
+            }
+            throw new RuntimeException("Problems reading file '" + fullFileName + "' near line " + lineno + ".", ex);
+
+        } finally {
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(in);
+        }
+        return types;
+    }
+    
+    private static boolean fillFeatureType(CSVStoreParameters parameters, EditableFeatureType fType, String headers[], AutomaticDetectionOfTypes.DetectedValue automaticTypes[]) {
+        String fullFileName = parameters.getFile()==null? "":parameters.getFile().getAbsolutePath();
+        String providerName = NAME;
+        
+        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(providerName, fullFileName);
+        }
+
+        // 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].detectedValue = automaticTypes[i];
+                fieldTypes[i].type = automaticTypes[i].getType();
+            }
+        }
+        // Luego probamos con lo que diga las cabezeras del CVS, sobreescribiendo
+        // los tipos anteriores en caso de definirse en la cabezara.
+        boolean all_fields_declare_type = true;
+        for (int i = 0; i < fieldTypes.length; i++) {
+            if (!fieldTypes[i].parse(headers[i])) {
+                LOGGER.warn("Can't parse header of field "+i+ "( "+headers[i]+") in '"+providerName+"' file '" + fullFileName + "'.");
+            }
+            if( fieldTypes[i].type == DataTypes.UNKNOWN ) {
+                all_fields_declare_type = false;
+                fieldTypes[i].type = DataTypes.STRING;
+            }
+        }
+
+        // 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(parameters);
+        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);
+                FieldTypeParser parser = new FieldTypeParser(providerName, fullFileName);
+                for (String param_type : param_types) {
+                    parser.clear();
+                    parser.parse(param_type);
+                    for (FieldTypeParser fieldType : fieldTypes) {
+                        if (StringUtils.equalsIgnoreCase(fieldType.name, parser.name)) {
+                            fieldType.copyFrom(parser);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        //
+        // Una vez ya sabemos los tipos de datos rellenamos el feature-type
+        //
+        Tags ftypeTags = fType.getTags();
+        for (FieldTypeParser fieldType : fieldTypes) {
+            EditableFeatureAttributeDescriptor fad = fType.add(fieldType.name, fieldType.type);
+            if( fieldType.detectedValue!=null ) {
+                fad.setDisplaySize(Math.max(fieldType.detectedValue.getDisplaySize(), fieldType.size));
+                fad.setSize(Math.max(fieldType.detectedValue.getDisplaySize(), fieldType.size));
+                if( fad.getPrecision()<fieldType.detectedValue.getPrecision() ) {
+                    fad.setPrecision(fieldType.detectedValue.getPrecision());
+                }
+                if( fad.getScale()<fieldType.detectedValue.getScale()) {
+                    fad.setScale(fieldType.detectedValue.getScale());
+                }
+            } else {
+                fad.setDisplaySize(fieldType.size);
+            }
+            if (fieldType.type == DataTypes.GEOMETRY ) {
+                fad.setGeometryType(fieldType.geomType, fieldType.geomSubtype);
+                if( fType.getDefaultGeometryAttributeName() == null ) {
+                    fType.setDefaultGeometryAttributeName(fieldType.name);
+                }
+            } 
+            Locale locale = null;
+            if (fieldType.type == DataTypes.TIMESTAMP ) {
+                if(!CSVStoreParameters.isBlankOrDefaultLocale(parameters)){
+                    locale = CSVStoreParameters.getLocale(parameters);
+                }
+            } else {
+                locale = CSVStoreParameters.getLocale(parameters);
+            }
+            fad.setLocale(locale);
+            for (Map.Entry<String, String> entry : fieldType.assignments.entrySet()) {
+                try {
+                    switch(entry.getKey().toLowerCase()) {
+                        case "expression":
+                            // Los campos calculados los procesamos en una segunda
+                            // pasada, cuando ya estan definidos el resto de los campos
+                            // ya que pueden requerir campos que aun no se han definido.
+                            break;
+                        default:
+                                fad.set(entry.getKey(), entry.getValue());
+                            }
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't set property '"+entry.getKey()+"' of '"+fad.getName()+"'.", ex);
+                }
+            }            
+            Tags tags = fad.getTags();
+            for (Map.Entry<String, String> entry : fieldType.tags.entrySet()) {
+                tags.set(entry.getKey(), entry.getValue());
+            }
+            for (Map.Entry<String, String> entry : fieldType.typetags.entrySet()) {
+                ftypeTags.set(entry.getKey(), entry.getValue());
+            }
+            for (Map.Entry<String, String> entry : fieldType.typeAssignments.entrySet()) {
+                try {
+                    fType.set(entry.getKey(), entry.getValue());
+                } catch(Exception ex) {
+                    LOGGER.warn("Can't set attribute '"+entry.getKey()+"' in the feature type.", ex);
+                }
+            }
+        }
+        // Processamos ahora los campos calculados
+        for (FieldTypeParser fieldType : fieldTypes) {
+            EditableFeatureAttributeDescriptor fad = fType.getEditableAttributeDescriptor(fieldType.name);
+            for (Map.Entry<String, String> entry : fieldType.assignments.entrySet()) {
+                try {
+                    switch(entry.getKey().toLowerCase()) {
+                        case "expression":
+                            fad.set(entry.getKey(), entry.getValue());
+                            break;
+                    }
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't set property '"+entry.getKey()+"' in '"+fad.getName()+"' of '"+fullFileName+"'.", ex);
+                }
+            }
+        }
+        String[] pointDimensionNames = CSVStoreParameters.getPointDimensionNames(parameters);
+        if ( pointDimensionNames != null ) {
+            CSVPointAttributeEmulator emulator = new CSVPointAttributeEmulator(pointDimensionNames);
+            String columnName = CSVStoreParameters.getPointColumnName(parameters);
+            if( StringUtils.isBlank(columnName) ) {
+                columnName = "geom";
+            }
+            EditableFeatureAttributeDescriptor attr = fType.add(columnName, DataTypes.GEOMETRY, emulator);
+            GeometryManager geommgr = GeometryLocator.getGeometryManager();
+            GeometryType gt;
+            try {
+                if ( emulator.getFieldNames() != null && emulator.getFieldNames().length <= 2 ) {
+                	gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
+                } else {
+                	gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D);
+                }
+                attr.setGeometryType(gt);
+            } catch (Exception e) {
+                LOGGER.warn("Can't set geometry type for the calculated field in '"+providerName+"' file '" + fullFileName + "'.", e);
+            }
+        }        
+        
+        String geometry_column = CSVStoreParameters.getGeometryColumn(parameters);
+        if (!StringUtils.isEmpty(geometry_column)) {
+            EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) fType.get(geometry_column);
+            if (attr != null ) {
+                if( attr.getType() != DataTypes.GEOMETRY ) {
+                    attr.setDataType(DataTypes.GEOMETRY);
+                }
+                GeometryManager geommgr = GeometryLocator.getGeometryManager();
+                GeometryType gt;
+                try {
+                    gt = geommgr.getGeometryType(
+                            CSVStoreParameters.getGeometryType(parameters),
+                            CSVStoreParameters.getGeometrySubType(parameters)
+                    );
+                    attr.setGeometryType(gt);
+                } catch (Exception e) {
+                    LOGGER.warn("Can't set geometry type for the calculated field in CSV file '" + fullFileName + "'.", e);
+                }
+                fType.setDefaultGeometryAttributeName(geometry_column);
+            }
+        }
+        return all_fields_declare_type;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/CSVReaderSuperCSV.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVReaderSuperCSV.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVReaderSuperCSV.java	(revision 46118)
@@ -0,0 +1,237 @@
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.List;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.store.csv.CSVStoreParameters;
+import org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileIndex;
+import org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader;
+import static org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader.FILTER_NONE;
+import org.gvsig.fmap.dal.store.csv.virtualrows.SuperCSVList;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.GetItemWithSize64;
+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 CSVReaderSuperCSV extends AbstractSimpleReader {
+
+    //
+    // http://supercsv.sourceforge.net/examples_reading.html
+    // http://supercsv.sourceforge.net/apidocs/index.html
+    //
+    private static final Logger LOGGER = LoggerFactory.getLogger(CSVReaderSuperCSV.class);
+
+    private CsvListReader reader;
+    private final CSVStoreParameters parameters;
+    private List<String>  nextLine;
+    private int columns;
+
+    public CSVReaderSuperCSV(Reader in, CSVStoreParameters parameters) {
+        this(parameters);
+        this.reader = new CsvListReader(in, getCSVPreferences());
+    }    
+    
+    public CSVReaderSuperCSV(CSVStoreParameters parameters) {
+        this.reader = null;
+        this.parameters = parameters;
+        this.reader = null;
+        this.nextLine = null;
+        this.columns = 0;
+    }
+
+    public CSVStoreParameters getParameters() {
+        return this.parameters;
+    }
+
+    @Override
+    public String[] getHeader() throws IOException {
+        return this.reader.getHeader(true);
+    }
+    
+    @Override
+    public int getColumnsCount() throws IOException {
+        if( this.columns <= 0 ) {
+            this.columns = reader.length();
+            if( this.columns <= 0 ) {
+                this.nextLine = this.reader.read();
+                this.columns = reader.length();
+            }
+        }
+        return this.columns;
+    }
+
+    @Override
+    public GetItemWithSize64<List<String>>  getVirtualRows(SimpleTaskStatus status) {
+        RandomAccessFileReader theReader = null;
+        RandomAccessFileIndex theIndex = null;
+        try {
+            CSVStoreParameters params = getParameters();
+            File data_file = CSVStoreParameters.getFile(params);
+            if( data_file.length()< 10*1024*1024 ) {
+                return null;
+            }
+
+            String charset = CSVStoreParameters.getCharset(params);
+            File index_file = new File(FilenameUtils.removeExtension(data_file.getAbsolutePath()) + ".idx");
+            
+            theReader = new RandomAccessFileReader(data_file, charset);
+            theIndex = theReader.createOrOpenIndexOfLines(index_file, false, FILTER_NONE, status);
+            
+            SuperCSVList list = new SuperCSVList(
+                    theReader, 
+                    theIndex, 
+                    CSVStoreParameters.isFirstLineHeader(getParameters())?1:0
+            );
+            
+            list.setPreferences(this.getCSVPreferences());
+            return list;
+        } catch (IOException ex) {
+            return null;
+        } finally {
+            // We do not close the index or the reader because we need it to remain open
+//            IOUtils.closeQuietly(theReader);
+//            IOUtils.closeQuietly(theIndex);
+        }
+    }
+    
+    @Override
+    public List<String> read() throws IOException {
+        List<String> line;
+        if( this.nextLine != null ) {
+            line = this.nextLine;
+            this.nextLine = null;
+        } else {
+            line = this.reader.read();
+        }
+        if( line!=null ) {
+            for (int i = 0; i < line.size(); i++) {
+                String s = line.get(i);
+//                System.out.println("CSVReaderSuperCSV.read(): bef s ='"+s+"'");
+                if( s!=null ) {
+                    s = s.replaceAll("\\\\n","\n");
+                    s = s.replaceAll("\\\\r","\r");
+                    line.set(i, s);
+//                    System.out.println("CSVReaderSuperCSV.read(): aft s ='"+s+"'");
+                }
+            }
+        }
+        return line;
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.reader.close();
+    }
+
+    @Override
+    public List<String> skip(int lines) throws IOException {
+        if( lines <= 0 ) {
+            return null;
+        }
+        if( this.nextLine != null ) {
+            this.nextLine = null;
+            lines--;
+        }
+        List<String> row = null;
+        for ( int i = 0; i < lines; i++ ) {
+            row = reader.read();
+        }
+        return row;
+    }
+
+    public final CsvPreference getCSVPreferences() {
+        try {
+            String s;
+            char quoteChar;
+            int delimiterChar;
+            String endOfLineSymbols;
+
+            DynObject params = this.getParameters();
+
+            CsvPreference.Builder builder;
+
+            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;
+        try {
+            s = getParameters().getFile().getAbsolutePath();
+        } catch (Exception e2) {
+            s = "(unknow)";
+        }
+        return s;        
+    }
+
+    @Override
+    public int getLine() {
+        if( this.reader==null ) {
+            return 0;
+        }
+        return this.reader.getLineNumber();
+    }
+
+    @Override
+    public List<String> nextRowValues() {
+        try {
+            return this.read();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/JSonReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JSonReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JSonReader.java	(revision 46118)
@@ -0,0 +1,151 @@
+/*
+ * To change this license theHeader, 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.csv.simplereaders;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.store.csv.CSVStoreParameters;
+import static org.gvsig.fmap.dal.store.csv.CSVStoreParameters.FIRST_LINE_HEADER;
+import static org.gvsig.fmap.dal.store.csv.CSVStoreParameters.HEADER;
+import org.gvsig.json.Json;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jovivas
+ */
+public class JSonReader implements SimpleReader {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CSVReaderSuperCSV.class);
+
+    private JsonArray jsonData;
+//    private final CSVStoreParameters parameters;
+//    private List<String>  nextLine;
+    private int columns;
+    private String[] header;
+    private int currentElement = 0;
+    private final CSVStoreParameters parameters;
+
+    public JSonReader(Reader reader, CSVStoreParameters csvParameters) throws IOException {
+        String input = IOUtils.toString(reader);
+        this.jsonData = Json.createArray(input);
+        this.columns = -1;
+        this.header = null;
+        this.parameters = csvParameters;
+        this.parameters.setDynValue(FIRST_LINE_HEADER, false);
+        if (StringUtils.isBlank((CharSequence) this.parameters.getDynValue(HEADER))){
+            this.parameters.setDynValue(HEADER, StringUtils.join(this.getHeader(), ','));
+        }
+    }
+
+    @Override
+    public String[] getHeader() throws IOException {
+        if (this.header == null) {
+            JsonObject firstItem = this.jsonData.getJsonObject(0);
+            String[] theHeader = new String[firstItem.size()];
+            int i = 0;
+            for (String item : firstItem.keySet()) {
+                theHeader[i++] = item;
+            }
+            this.header = theHeader;
+        }
+        return this.header;
+    }
+
+    @Override
+    public int getColumnsCount() throws IOException {
+        if (this.columns <= 0) {
+            this.columns = this.getHeader().length;
+        }
+        return this.columns;
+    }
+
+    @Override
+    public List<String> read() throws IOException {
+        List<String> values = this.read(currentElement);
+        if (values == null) {
+            return null;
+        }
+        currentElement += 1;
+        return values;
+    }
+
+    public List<String> read(int rowNumber) throws IOException {
+        List<String> values = new ArrayList<>();
+        if (rowNumber < jsonData.size()) {
+            JsonObject feature = jsonData.getJsonObject(rowNumber);
+            for (String columName : this.getHeader()) {
+                if (feature.isNull(columName)) {
+                    values.add("");
+                } else {
+                    JsonValue value = feature.get(columName);
+                    switch (value.getValueType()) {
+                        case FALSE:
+                            values.add("false");
+                            break;
+                        case STRING:
+                            values.add(((JsonString) value).getString());
+                            break;
+                        case TRUE:
+                            values.add("true");
+                            break;
+                        case NULL:
+                            values.add("");
+                            break;
+                        case NUMBER:
+                        case ARRAY:
+                        case OBJECT:
+                        default:
+                            values.add(value.toString());
+                            break;
+                    }
+                }
+            }
+            return values;
+        }
+        return null;
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.jsonData = null;
+    }
+
+    @Override
+    public List<String> skip(int lines) throws IOException {
+        this.currentElement += lines;
+        if (this.currentElement > this.jsonData.size()) {
+            return null;
+        }
+        return read(this.currentElement);
+    }
+
+    @Override
+    public int getLine() {
+        if (this.jsonData == null) {
+            return 0;
+        }
+        return this.currentElement;
+    }
+
+    @Override
+    public List<String> nextRowValues() {
+        try {
+            return this.read();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,22 @@
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.IOException;
+import java.util.List;
+import java.io.Closeable;
+import org.gvsig.fmap.dal.store.csv.AutomaticDetectionOfTypes.Rows;
+
+public interface SimpleReader extends Closeable, Rows {
+
+    public String[] getHeader() throws IOException;
+
+    public int getColumnsCount() throws IOException ;
+            
+    public List<String> read() throws IOException;
+
+    @Override
+    public void close() throws IOException;
+
+    public List<String> skip(int lines) throws IOException;
+    
+    public int getLine();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/AbstractSimpleReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/AbstractSimpleReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/AbstractSimpleReader.java	(revision 46118)
@@ -0,0 +1,17 @@
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.util.List;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.util.GetItemWithSize64;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public abstract class AbstractSimpleReader implements SimpleReader {
+
+    public GetItemWithSize64<List<String>>  getVirtualRows(SimpleTaskStatus status) {
+        return null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,115 @@
+
+package org.gvsig.fmap.dal.store.csv.simplereaders;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+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(Reader 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;
+    }
+
+    @Override
+    public int getColumnsCount() throws IOException {
+        return this.fieldCount;
+    }
+
+    public List<String> read() throws IOException {
+        String line = this.reader.readLine();
+        this.currentLine++;
+        while( !StringUtils.isEmpty(line) && !StringUtils.isEmpty(this.commentStartMarker) && 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;
+    }
+
+    @Override
+    public List<String> nextRowValues() {
+        try {
+            return this.read();
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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");
+        FileHelper.registerParametersDefinition(
+                CSVNewStoreParameters.PARAMETERS_DEFINITION_NAME,
+                CSVNewStoreParameters.class, "CSVParameters.xml");
+        try {
+
+        } catch (Exception e) {
+            exs.add(e);
+        }
+        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.344/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.344/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/XMLFileAsList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/XMLFileAsList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/XMLFileAsList.java	(revision 46118)
@@ -0,0 +1,355 @@
+/*
+ * 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.csv;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.store.csv.RecordsFile.Record;
+import org.gvsig.fmap.dal.store.csv.RecordsFile.RecordType;
+import static org.gvsig.fmap.dal.store.csv.RecordsFile.RecordTypeBuilder.recordTypeBuilder;
+import org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader;
+import org.gvsig.tools.util.GetItemWithSize64;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class XMLFileAsList
+        extends AbstractList<List<String>>
+        implements Closeable, GetItemWithSize64<List<String>> {
+
+    private static final int IDXFIELD_LINE = 0;
+    private static final int IDXFIELD_COLUMN = 1;
+    private static final int IDXFIELD_LINEPOS = 2;
+    private static final int IDXFIELD_RECORDPOS = 3;
+
+    private final RandomAccessFileReader reader;
+    private final String recordPath;
+    private RecordsFile index;
+    private List<String> fieldPaths;
+
+    public XMLFileAsList(File text, Charset charset, String recordPath, List<String> fieldPaths) throws IOException {
+        this.reader = new RandomAccessFileReader(text, charset);
+        this.index = null;
+        this.recordPath = recordPath;
+    }
+
+    public XMLFileAsList(File text, File index, Charset charset, String recordPath, List<String> fieldPaths) throws IOException {
+        this.reader = new RandomAccessFileReader(text, charset);
+        if (index.exists()) {
+            // TODO: Force to create index if text newer than index
+            this.index = new RecordsFileImpl(index);
+        } else {
+            this.createIndex(index);
+        }
+        this.recordPath = recordPath;
+    }
+
+    public XMLFileAsList(RandomAccessFileReader reader, RecordsFile index, String recordPath, List<String> fieldPaths) throws IOException {
+        this.reader = reader;
+        this.index = index;
+        this.recordPath = recordPath;
+    }
+
+    @Override
+    public void close() {
+        IOUtils.closeQuietly(this.reader);
+        IOUtils.closeQuietly(this.index);
+    }
+
+    private List<String> getRecord(long position, List<String> fieldPaths) {
+        class StopParserSAXException extends SAXException {
+        }
+
+        class ParseRecordsHandler extends DefaultHandler {
+
+            Locator locator;
+            List<String> path = new ArrayList<>();
+            Map<String, String> record = new HashMap<>();
+            StringBuilder value = new StringBuilder();
+            List<String> values = new ArrayList<>();
+
+            @Override
+            public void setDocumentLocator(Locator locator) {
+                this.locator = locator;
+            }
+
+            @Override
+            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                path.add(localName);
+                String path_s = StringUtils.join(path, "/");
+                if (StringUtils.equalsIgnoreCase(path_s, recordPath)) {
+                    return;
+                }
+                this.value.setLength(0);
+//                    this.value.trimToSize();
+            }
+
+            @Override
+            public void characters(char[] ch, int start, int length) throws SAXException {
+                value.append(new String(ch, start, length));
+            }
+
+            @Override
+            public void endElement(String uri, String localName, String qName) throws SAXException {
+                String path_s = StringUtils.join(path, "/");
+
+                if (StringUtils.equalsIgnoreCase(path_s, recordPath)) {
+                    for (String fieldPath : fieldPaths) {
+                        values.add(record.get(fieldPath));
+                    }
+                    throw new StopParserSAXException();
+                } else {
+                    for (String fieldPath : fieldPaths) {
+                        if (StringUtils.equalsIgnoreCase(path_s, fieldPath)) {
+                            record.put(fieldPath, this.value.toString());
+                            // No break to handle repeated columns
+                        }
+                    }
+                }
+
+                path.remove(path.size() - 1);
+            }
+        }
+
+        ParseRecordsHandler handler = null;
+        try {
+            Record record = this.index.get64(position);
+            long recordPosition = record.getLong(IDXFIELD_RECORDPOS);
+            this.reader.seek(recordPosition);
+            BufferedReader breader = new BufferedReader(this.reader, 1024 * 8);
+
+            InputSource is = new InputSource(breader);
+            SAXParserFactory spf = SAXParserFactory.newInstance();
+            spf.setNamespaceAware(true);
+            SAXParser saxParser = spf.newSAXParser();
+            handler = new ParseRecordsHandler();
+
+            saxParser.parse(is, handler);
+        } catch (StopParserSAXException ex) {
+            if (handler != null) {
+                return handler.values;
+            }
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't parse record " + position, ex);
+        }
+        return null; // ?????
+    }
+
+    @Override
+    public List<String> get(int index) {
+        return this.getRecord(index, fieldPaths);
+    }
+
+    @Override
+    public List<String> get64(long position) {
+        return this.getRecord(position, fieldPaths);
+    }
+
+    @Override
+    public int size() {
+        return this.index.size();
+    }
+
+    @Override
+    public long size64() {
+        return this.index.size64();
+    }
+
+    final public void createIndex(File indexFile) throws IOException {
+        try {
+            // 1. Creamos el indice vacio
+            RecordType recordType = recordTypeBuilder()
+                    .addLong() // IDXFIELD_LINE
+                    .addLong() // IDXFIELD_COLUMN
+                    .addLong() // IDXFIELD_LINEPOS
+                    .addLong() // IDXFIELD_RECORDPOS
+                    .build();
+            Record record = recordType.createRecord();
+            final RecordsFile theIndex = new RecordsFileImpl();
+            theIndex.create(indexFile, recordType, 0);
+
+            // 2. Rellenamos los campos numero de linea y columna de cada registro 
+            //    en el indice.
+            // Para ello nos recorremos el XML y vamos escribiendo en el indice.
+            this.reader.rewind();
+            InputSource is = new InputSource(reader);
+            SAXParserFactory spf = SAXParserFactory.newInstance();
+            spf.setNamespaceAware(true);
+            SAXParser saxParser = spf.newSAXParser();
+
+            List<String> path = new ArrayList<>();
+            // TODO: Aqui habria que quedarse con la primera aparicion de
+            // los campos solicitados que no pertenezcan al registro principal.
+            // Probablemente habria que guardar esos valores en disco junto al
+            // fichero de indice.
+            saxParser.parse(is, new DefaultHandler() {
+                Locator locator;
+
+                @Override
+                public void setDocumentLocator(Locator locator) {
+                    this.locator = locator;
+                }
+
+                @Override
+                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                    path.add(localName);
+                    String path_s = StringUtils.join(path, "/");
+
+                    if (StringUtils.equalsIgnoreCase(path_s, recordPath)) {
+                        record.setLong(IDXFIELD_LINE, locator.getLineNumber() - 1);
+                        record.setLong(IDXFIELD_COLUMN, locator.getColumnNumber() - 1);
+                        record.setLong(IDXFIELD_LINEPOS, 0);
+                        record.setLong(IDXFIELD_RECORDPOS, 0);
+                        theIndex.add(record);
+                    }
+                }
+
+                @Override
+                public void endElement(String uri, String localName, String qName) throws SAXException {
+                    path.remove(path.size() - 1);
+                }
+            });
+
+            // 3. Nos recorremos el indice y calculamos la posicion de la linea
+            //    para cada registro.
+            this.reader.rewind();
+            PositionCalculator positionCalculator = new PositionCalculator(reader);
+
+            for (int i = 0; i < theIndex.size(); i++) {
+                Record r = theIndex.get(i);
+                positionCalculator.next(r.getLong(IDXFIELD_LINE), r.getLong(IDXFIELD_COLUMN));
+                r.setLong(IDXFIELD_LINEPOS, positionCalculator.getLinePosition());
+                r.setLong(IDXFIELD_RECORDPOS, positionCalculator.getColumnPosition());
+                theIndex.set(i, record);
+            }
+            this.index = new RecordsFileImpl(indexFile);
+        } catch (Exception ex) {
+            throw new IOException("Can't create index " + Objects.toString(indexFile), ex);
+        }
+    }
+
+    private static class CharacterSize {
+
+        private final Charset charset;
+        private final CharBuffer charBuffer;
+
+        public CharacterSize(Charset charset) {
+            this.charset = charset;
+            this.charBuffer = CharBuffer.allocate(1);
+        }
+
+        public int size(char ch) {
+            this.charBuffer.put(0, ch);
+            this.charBuffer.position(0);
+            ByteBuffer buffer = this.charset.encode(this.charBuffer);
+            return buffer.limit();
+        }
+
+        public int size(char[] cbuf, int off, int len) {
+            CharBuffer cb = CharBuffer.wrap(cbuf, off, len);
+            ByteBuffer byteBuffer = this.charset.encode(cb);
+            return byteBuffer.limit();
+        }
+
+        public int size(char[] cbuf) {
+            CharBuffer cb = CharBuffer.wrap(cbuf, 0, cbuf.length);
+            ByteBuffer byteBuffer = this.charset.encode(cb);
+            return byteBuffer.limit();
+        }
+
+        public int size(String s) {
+            CharBuffer cb = CharBuffer.wrap(s);
+            ByteBuffer byteBuffer = this.charset.encode(cb);
+            return byteBuffer.limit();
+        }
+    }
+
+    private static class PositionCalculator {
+
+        private final RandomAccessFileReader reader;
+        private final BufferedReader breader;
+        private long currentPosition;
+        private long currentColumn;
+        private long currentLine;
+        private long currentColumnPosition;
+        private long currentLinePosition;
+
+        private final char[] ch;
+        private final CharacterSize characterSize;
+
+        public PositionCalculator(RandomAccessFileReader reader) {
+            this.reader = reader;
+            this.breader = new BufferedReader(this.reader, 1024 * 8);
+            this.currentPosition = this.reader.getCurrentPosition();
+            this.currentLine = 0;
+            this.currentColumn = 0;
+            this.ch = new char[1];
+            this.characterSize = new CharacterSize(this.reader.getCharset());
+        }
+
+        public boolean next(long line, long column) throws IOException {
+            while (this.currentLine < line) {
+                if (breader.read(this.ch, 0, 1) < 1) {
+                    return false;
+                }
+                char c = ch[0];
+                this.currentPosition += characterSize.size(c);
+                if (c == '\n') {
+                    this.currentLine++;
+                    this.currentColumn = 0;
+                }
+            }
+            this.currentLinePosition = this.currentPosition;
+            while (this.currentColumn < column) {
+                if (breader.read(this.ch, 0, 1) < 1) {
+                    return false;
+                }
+                char c = ch[0];
+                this.currentPosition += characterSize.size(c);
+                if (c == '\n') {
+                    // Uff, esto seria un error, ya que la linea corriente no
+                    // tiene tantas columnas.
+                    throw new IOException("Illegal column number " + column + " for line " + line);
+                }
+                this.currentColumn++;
+            }
+            this.currentColumnPosition = this.currentPosition;
+            return true;
+        }
+
+        public long getLinePosition() {
+            return this.currentLinePosition;
+        }
+
+        public long getColumnPosition() {
+            return this.currentColumnPosition;
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/CSVList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/CSVList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/CSVList.java	(revision 46118)
@@ -0,0 +1,23 @@
+/*
+ * 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.csv.virtualrows;
+
+import java.io.Closeable;
+import java.util.List;
+import org.gvsig.tools.util.GetItemWithSize;
+import org.gvsig.tools.util.GetItemWithSize64;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface CSVList extends 
+        List<List<String>>, 
+        Closeable, 
+        GetItemWithSize<List<String>>,
+        GetItemWithSize64<List<String>> 
+    {
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileIndex.java	(revision 46118)
@@ -0,0 +1,174 @@
+package org.gvsig.fmap.dal.store.csv.virtualrows;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.LongBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.AbstractList;
+import java.util.Iterator;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.tools.util.GetItemWithSize64;
+import org.gvsig.tools.util.SetItem;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class RandomAccessFileIndex 
+        extends AbstractList<Long>
+        implements Closeable, GetItemWithSize64<Long>, SetItem<Integer, Long>
+    {
+
+    private static final int SIZE_OF_LONG = 8;
+    
+    private static final int HEADER_SIZE = 20;
+    
+    private RandomAccessFile raf;
+    private MappedByteBuffer fileByteBuffer;
+    private LongBuffer buffer;
+    private long sz;
+    
+    public RandomAccessFileIndex() {
+        
+    }
+    
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public RandomAccessFileIndex(File f) throws IOException {
+        this.open(f);
+    }
+    
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public RandomAccessFileIndex(RandomAccessFile raf) throws IOException {
+        this.open(raf);
+    }
+    
+    public void open(File f) throws IOException {
+        RandomAccessFile theRaf = new RandomAccessFile(f,"r");
+        this.open(theRaf);
+    }
+    
+    public void open(RandomAccessFile raf) throws IOException {
+        this.raf = raf;
+        this.fileByteBuffer = this.raf.getChannel().map(
+                FileChannel.MapMode.READ_ONLY, 
+                0, 
+                this.raf.length()
+        );
+        this.buffer = this.fileByteBuffer.asLongBuffer();
+        this.sz = buffer.limit()-HEADER_SIZE;
+    }
+
+    public void create(File f, long sz) throws IOException {
+        RandomAccessFile theRaf = new RandomAccessFile(f,"rw");
+        this.create(theRaf,sz);
+    }
+    
+    public void create(RandomAccessFile raf, long sz) throws IOException {
+        this.raf = raf;
+        this.raf.setLength((sz+HEADER_SIZE)*SIZE_OF_LONG);
+        this.fileByteBuffer = this.raf.getChannel().map(
+                FileChannel.MapMode.READ_WRITE, 
+                0, 
+                this.raf.length()
+        );
+        this.buffer = this.fileByteBuffer.asLongBuffer();
+        this.sz = buffer.limit()-HEADER_SIZE;
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.fileByteBuffer.force();
+        IOUtils.closeQuietly(this.raf);
+        this.buffer = null;
+        this.fileByteBuffer = null;
+        this.sz = -1;
+    }
+
+    public boolean isOpen() {
+        return this.buffer!=null;
+    }
+      
+    @Override
+    public Long get(int position) {
+        position = checkIndex(position);
+        return this.buffer.get(position+HEADER_SIZE);
+    }
+
+    @Override
+    public int size() {
+        return (int) this.sz;
+    }
+
+    @Override
+    public long size64() {
+        return this.sz;
+    }
+
+    @Override
+    public Long get64(long position) {
+        position = checkIndex(position);
+        return this.buffer.get((int)position+HEADER_SIZE);
+    }
+
+    @Override
+    public void set(Integer position, Long value) {
+        position = checkIndex(position);
+        this.buffer.put(position+HEADER_SIZE, value);
+    }
+    
+    public void set(int position, long value) {
+        position = checkIndex(position);
+        this.buffer.put(position+HEADER_SIZE, value);
+    }
+    
+    public void setHeader(int index, long value) {
+        index = checkHeaderIndex(index);
+        this.buffer.put(index, value);
+    }
+    
+    public long getHeader(int index) {
+        index = checkHeaderIndex(index);
+        return this.buffer.get(index);
+    }
+    
+    private int checkIndex(long index) {
+        if (this.buffer == null) {
+            throw new IllegalStateException("Index not open");
+        }
+        if( index < 0 ) {
+            index = ((int)this.sz) + index;
+        }
+        if( index<0 || index>=this.sz) {
+            throw new IllegalArgumentException("Index out of range ("+index+")");
+        }
+        return (int) index;
+    }
+
+    private int checkHeaderIndex(int index) {
+        if (this.buffer == null) {
+            throw new IllegalStateException("Index not open");
+        }
+        if( index < 0 ) {
+            index = HEADER_SIZE + index;
+        }
+        if( index<0 || index>=HEADER_SIZE) {
+            throw new IllegalArgumentException("Index out of range ("+index+")");
+        }
+        return index;
+    }
+    
+//    public void add(int initpos, Iterator<Long> values) {
+//        if (this.buffer == null) {
+//            throw new IllegalStateException("Index not open");
+//        }
+//        int position = initpos;
+//        while( values.hasNext() ) {
+//            Long value = values.next();
+//            this.buffer.put(position++, value);
+//        }
+//    }
+        
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/AbstractCSVList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/AbstractCSVList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/AbstractCSVList.java	(revision 46118)
@@ -0,0 +1,86 @@
+/*
+ * 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.csv.virtualrows;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.AbstractList;
+import java.util.List;
+import org.apache.commons.io.IOUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public abstract class AbstractCSVList
+        extends AbstractList<List<String>>
+        implements CSVList {
+
+    protected final RandomAccessFileReader reader;
+    protected final RandomAccessFileIndex index;
+    protected int skipLines;
+
+    public AbstractCSVList(File text, File index, Charset charset) throws IOException {
+        // FIXME: falla con campos multilinea
+        // FIXME: falla si hay comentarios en el CSV
+        this.reader = new RandomAccessFileReader(text, charset);
+        this.index = new RandomAccessFileIndex(index);
+        this.skipLines = 0;
+    }
+
+    public AbstractCSVList(RandomAccessFileReader reader, RandomAccessFileIndex index) throws IOException {
+        this.reader = reader;
+        this.index = index;
+        this.skipLines = 0;
+    }
+
+    @Override
+    public void close() {
+        IOUtils.closeQuietly(this.reader);
+        IOUtils.closeQuietly(this.index);
+    }
+
+    @Override
+    public List<String> get(int index) {
+        try {
+            long pos = this.index.get(index+skipLines);
+            this.reader.seek(pos);
+            return nextRecord();
+        } catch (IOException ex) {
+            throw new RuntimeException("Can't access to " + index + " element.", ex);
+        }
+    }
+
+    @Override
+    public int size() {
+        return this.index.size()-skipLines;
+    }
+
+    @Override
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long size64() {
+        return this.index.size64()-skipLines;
+    }
+
+    @Override
+    public List<String> get64(long index) {
+        try {
+            long pos = this.index.get64(index+skipLines);
+            this.reader.seek(pos);
+            return nextRecord();
+        } catch (IOException ex) {
+            throw new RuntimeException("Can't access to " + index + " element.", ex);
+        }
+    }
+
+    abstract protected List<String> nextRecord() throws IOException;
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/TextFileAsList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/TextFileAsList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/TextFileAsList.java	(revision 46118)
@@ -0,0 +1,158 @@
+/*
+ * 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.csv.virtualrows;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.AbstractList;
+import java.util.Date;
+import java.util.List;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import static org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader.FILTER_NONE;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.gvsig.tools.util.GetItemWithSize64;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class TextFileAsList 
+        extends AbstractList<String> 
+        implements Closeable, GetItemWithSize64<String>
+    {
+
+    private final RandomAccessFileReader reader;
+    private final RandomAccessFileIndex index;
+    
+    public TextFileAsList(File text, File index, Charset charset) throws IOException {
+        this.reader = new RandomAccessFileReader(text, charset);
+        this.index = new RandomAccessFileIndex(index);
+     }
+
+    public TextFileAsList(RandomAccessFileReader reader, RandomAccessFileIndex index) throws IOException {
+        this.reader = reader;
+        this.index = index;
+    }
+
+    @Override
+    public void close() {
+        IOUtils.closeQuietly(this.reader);
+        IOUtils.closeQuietly(this.index);
+    }
+
+    @Override
+    public String get(int index) {
+        try {
+            long pos = this.index.get(index);
+            this.reader.seek(pos);
+            return nextLine();
+        } catch (IOException ex) {
+            throw new RuntimeException("Can't access to " + index + " element.", ex);
+        }
+    }
+
+    @Override
+    public int size() {
+        return this.index.size();
+    }
+
+    @Override
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long size64() {
+        return this.index.size64();
+    }
+
+    @Override
+    public String get64(long position) {
+        try {
+            long pos = this.index.get64(position);
+            this.reader.seek(pos);
+            return nextLine();
+        } catch (IOException ex) {
+            throw new RuntimeException("Can't access to " + position + " element.", ex);
+        }
+    }
+    
+//    private String nextLine() throws IOException {
+//        String line = this.reader.readLine();
+//        return line;
+//    }
+
+    private String nextLine() throws IOException {
+        BufferedReader br = new BufferedReader(this.reader);
+        String line = br.readLine();
+        return line;
+    }
+
+    public static void main(String[] args) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        
+        String fname;
+//        fname = "/home/jjdelcerro/Descargas/test/origen_coordenadas.csv";
+        fname = "/home/jjdelcerro/Descargas/test/esp_poblaciones.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_provincias.csv";
+
+        File data_file = new File(fname);
+        File index_file = new File(FilenameUtils.removeExtension(data_file.getAbsolutePath()) + ".idx");
+
+        final TaskStatusManager taskStatusManager = ToolsLocator.getTaskStatusManager();
+        taskStatusManager.addObserver((Observable observable, Object notification) -> {
+            TaskStatus status = taskStatusManager.getRunningTaskStatusMostRecent();
+//            System.out.print("\033[?25l\r");
+//            if( status!=null && status.isRunning() ) {
+//                System.out.print("\033[?25l\r");
+//                System.out.print(status.getTitle()+ " - " + status.getLabel());
+//                System.out.print("\033[K\033[?12l\033[?25h");
+//            }
+//            System.out.flush();
+        });
+        SimpleTaskStatus status = taskStatusManager.createDefaultSimpleTaskStatus(data_file.getName());
+        status.add();
+
+        RandomAccessFileReader reader = new RandomAccessFileReader(data_file , "UTF-8");
+        RandomAccessFileIndex index_lines = reader.createOrOpenIndexOfLines(index_file, FILTER_NONE, null);
+
+        List<String> text = new TextFileAsList(reader,index_lines);
+        System.out.println("Lines: " + text.size());
+        int n = 0;
+        for (String line : text) {
+            if( n<100 ) {
+                System.out.println(String.format("%6d: %s", n, line));
+            } else if( n==100 ) {
+                System.out.println("More records...");
+            }
+            n++;
+        }
+        System.out.println("-----------------");
+        long t1 = new Date().getTime();
+        for (int i = text.size()-1; i >= 0 ; i--) {
+            String line = text.get(i);
+            if( i<100 ) {
+                System.out.println(String.format("%6d: %s", i, line));
+            } else if( i==100 ) {
+                System.out.println("More records...");
+            }
+
+        }
+        long t2 = new Date().getTime();
+        System.out.println("Time: "+ (t2-t1) + " ms");
+        IOUtils.closeQuietly((Closeable) text);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/ApacheCommonsCSVList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/ApacheCommonsCSVList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/ApacheCommonsCSVList.java	(revision 46118)
@@ -0,0 +1,114 @@
+/*
+ * 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.csv.virtualrows;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import static org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader.FILTER_NONE;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class ApacheCommonsCSVList extends AbstractCSVList {
+
+    public ApacheCommonsCSVList(File text, File index, Charset charset) throws IOException {
+        super(text, index, charset);
+    }
+
+    public ApacheCommonsCSVList(RandomAccessFileReader reader, RandomAccessFileIndex index) throws IOException {
+        super(reader, index);
+    }
+
+    @Override
+    protected List<String> nextRecord() throws IOException {
+        CSVParser parser = CSVFormat.EXCEL.parse(this.reader);
+        Iterator<CSVRecord> it = parser.iterator();
+        if (!it.hasNext()) {
+            return null;
+        }
+        CSVRecord record = it.next();
+        List<String> values = new ArrayList<>();
+        for (String value : record) {
+            values.add(value);
+        }
+        return values;
+    }
+
+    public static void main(String[] args) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        
+        String fname;
+        fname = "/home/jjdelcerro/Descargas/test/origen_coordenadas.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_poblaciones.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_provincias.csv";
+
+        File data_file = new File(fname);
+        File index_file = new File(FilenameUtils.removeExtension(data_file.getAbsolutePath()) + ".idx");
+
+        final TaskStatusManager taskStatusManager = ToolsLocator.getTaskStatusManager();
+        taskStatusManager.addObserver((Observable observable, Object notification) -> {
+            TaskStatus status = taskStatusManager.getRunningTaskStatusMostRecent();
+//            System.out.print("\033[?25l\r");
+//            if( status!=null && status.isRunning() ) {
+//                System.out.print("\033[?25l\r");
+//                System.out.print(status.getTitle()+ " - " + status.getLabel());
+//                System.out.print("\033[K\033[?12l\033[?25h");
+//            }
+//            System.out.flush();
+        });
+        SimpleTaskStatus status = taskStatusManager.createDefaultSimpleTaskStatus(data_file.getName());
+        status.add();
+        
+        RandomAccessFileReader reader = new RandomAccessFileReader(data_file, "UTF-8");
+        RandomAccessFileIndex index_lines = reader.createOrOpenIndexOfLines(index_file, FILTER_NONE, null);
+
+        CSVList csv = new ApacheCommonsCSVList(reader, index_lines);
+        System.out.println("Lines " + csv.size());
+        int n = 0;
+        for (List<String> record : csv) {
+            if( n<100 ) {
+                System.out.println(String.format("%6d: %s", n, ArrayUtils.toString(record)));
+            } else if( n==100 ) {
+                System.out.println("More records...");
+            }
+            n++;
+        }
+        System.out.println("-----------------");
+        long t1 = new Date().getTime();
+        for (int i = csv.size() - 1; i >= 0; i--) {
+            List<String> record = csv.get(i);
+            if( i<100 ) {
+                System.out.println(String.format("%6d: %s", i, ArrayUtils.toString(record)));
+            } else if( i==100 ) {
+                System.out.println("More records...");
+            }
+        }
+        long t2 = new Date().getTime();
+        System.out.println("Time: " + (t2 - t1) + " ms");
+        IOUtils.closeQuietly(csv);
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileReader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileReader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/RandomAccessFileReader.java	(revision 46118)
@@ -0,0 +1,965 @@
+package org.gvsig.fmap.dal.store.csv.virtualrows;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.io.Reader;
+import java.io.UncheckedIOException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.channels.Channels;
+import java.nio.charset.Charset;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class RandomAccessFileReader extends Reader {
+
+    public static final Predicate<String> FILTER_NONE = (String t) -> false;
+
+    protected static final int INDEX_HEADER_FILESIZE = 0;
+    protected static final int INDEX_HEADER_INDEXCREATIONCOST = 1;
+
+    protected RandomAccessFile raf;
+    protected Reader reader;
+    protected long currentPosition;
+    protected final Charset charset;
+    protected long lastModified;
+
+    public RandomAccessFileReader(File f, String charsetName) throws IOException {
+        this(new RandomAccessFile(f, "r"), Charset.forName(charsetName));
+        this.lastModified = f.lastModified();
+    }
+
+    public RandomAccessFileReader(File f, Charset charset) throws IOException {
+        this(new RandomAccessFile(f, "r"), charset);
+        this.lastModified = f.lastModified();
+    }
+
+    public RandomAccessFileReader(RandomAccessFile raf, String charsetName) throws IOException {
+        this(raf, Charset.forName(charsetName));
+        this.lastModified = -1;
+    }
+
+    public RandomAccessFileReader(RandomAccessFile raf, Charset charset) throws IOException {
+        this.charset = charset;
+        this.raf = raf;
+        this.reader = null;
+        this.currentPosition = 0;
+        this.lastModified = -1;
+    }
+
+    public Charset getCharset() {
+        return this.charset;
+    }
+    
+    @Override
+    public int read(char[] cbuf, int off, int len) throws IOException {
+        if (this.reader == null) {
+            this.createReader();
+        }
+        int n = this.reader.read(cbuf, off, len);
+        if (n > 0) {
+            // Update current position (bytes) adding the read characters.
+            CharBuffer charBuffer = CharBuffer.wrap(cbuf, off, len);
+            ByteBuffer byteBuffer = this.charset.encode(charBuffer);
+            this.currentPosition += byteBuffer.limit();
+        }
+        return n;
+    }
+
+    protected void createReader() {
+        this.reader = Channels.newReader(this.raf.getChannel(), this.charset.name());
+    }
+
+//    protected InputStream is;
+//    protected void createReader() {
+//        if( this.is==null ) {
+//            this.is = new InputStream() {
+//                @Override
+//                public int read() throws IOException {
+//                    return raf.read();
+//                }
+//            };
+//        }
+//        this.reader = new InputStreamReader(this.is, charset);
+//    }
+    @Override
+    public void close() throws IOException {
+//        IOUtils.closeQuietly(this.is);
+        IOUtils.closeQuietly(this.reader);
+        IOUtils.closeQuietly(this.raf);
+    }
+
+    public long getFilePointer() throws IOException {
+        return this.raf.getFilePointer();
+    }
+
+    public long getCurrentPosition() {
+        return this.currentPosition;
+    }
+
+    public void rewind() throws IOException {
+        this.raf.seek(0);
+        this.reader = null;
+        this.currentPosition = 0;
+    }
+
+    public void seek(long position) throws IOException {
+        this.raf.seek(position);
+        this.reader = null;
+        this.currentPosition = position;
+    }
+
+    public String readLine() throws IOException {
+        StringBuilder buffer = new StringBuilder();
+        int c = -1;
+        boolean eol = false;
+
+        while (!eol) {
+            switch (c = this.read()) {
+                case -1:
+                case '\n':
+                    eol = true;
+                    break;
+                case '\r':
+                    eol = true;
+                    long cur = raf.getFilePointer();
+                    if ((raf.read()) != '\n') {
+                        raf.seek(cur);
+                    }
+                    break;
+                default:
+                    buffer.append((char) c);
+                    break;
+            }
+        }
+        if ((c == -1) && (buffer.length() == 0)) {
+            return null;
+        }
+        return buffer.toString();
+    }
+
+    public long countLines(Predicate<String> filter, SimpleTaskStatus status) throws IOException {
+        if (raf.length() == 0) {
+            return 0;
+        }
+        long savedpos = this.getCurrentPosition();
+        long count = -1;
+        if (status != null) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            status.message(i18n.getTranslation("_Calculating_number_of_lines"));
+            status.setIndeterminate();
+        }
+        BufferedReader breader = new BufferedReader(this, 10240);
+        try {
+            String line;
+            count = 0;
+            while ((line = breader.readLine()) != null) {
+                if (status != null) {
+                    if (status.isCancellationRequested()) {
+                        return -1;
+                    }
+//                    status.incrementCurrentValue();
+                    if((count % 1000) == 0){
+                        status.setCurValue(count);
+                    }
+                }
+                if (filter.test(line)) {
+                    continue;
+                }
+                count++;
+            }
+            status.setCurValue(count);
+            if (status != null) {
+                status.message("");
+                status.setIndeterminate();
+            }
+        } finally {
+            this.seek(savedpos);
+        }
+        return count;
+    }
+
+    public boolean isRecomemendedTheRecreationOfTheLinesIndex(File index) {
+        RandomAccessFileIndex line_idx = null;
+        try {
+            if (this.lastModified > 0 && this.lastModified > index.lastModified()) {
+                return true;
+            }
+            line_idx = new RandomAccessFileIndex();
+            line_idx.open(index);
+            if (this.raf.length() != line_idx.getHeader(INDEX_HEADER_FILESIZE)) {
+                return true;
+            }
+            long creationCost = line_idx.getHeader(INDEX_HEADER_FILESIZE);
+            if (creationCost < 2000) { // < 2 sec.
+                return true;
+            }
+            if (line_idx.get(-1) == 0) {
+                // if last index == 0, index is corrupt
+                return true;
+            }
+//            FIXME: isValidIndexOfLines not full implemented 
+//            Podria comprobarse que  una muestra de 4 o 5 bloques de datos
+//            repartidas por el fichero tengan el checksum correcto
+            return false;
+        } catch (IOException ex) {
+            return true;
+        } finally {
+            IOUtils.closeQuietly(line_idx);
+        }
+    }
+
+    public RandomAccessFileIndex createOrOpenIndexOfLines(File index, Predicate<String> filter, SimpleTaskStatus status) throws IOException {
+        return this.createOrOpenIndexOfLines(index, false, filter, status);
+    }
+
+    public RandomAccessFileIndex createOrOpenIndexOfLines(File index, boolean safe, Predicate<String> filter, SimpleTaskStatus status) throws IOException {
+        if (this.isRecomemendedTheRecreationOfTheLinesIndex(index)) {
+            return this.createIndexOfLines(index, safe, filter, status);
+        }
+        return new RandomAccessFileIndex(index);
+    }
+
+    public RandomAccessFileIndex createIndexOfLines(File index, Predicate<String> filter, SimpleTaskStatus status) throws IOException {
+        return this.createIndexOfLines(index, false, filter, status);
+    }
+
+    public RandomAccessFileIndex createIndexOfLines(File index, boolean safe, Predicate<String> filter, SimpleTaskStatus status) throws IOException {
+        long countLines = this.countLines(filter, status);
+        if (countLines < 1) {
+            return null;
+        }
+        RandomAccessFileIndex line_idx = new RandomAccessFileIndex();
+        line_idx.create(index, countLines);
+
+        long savedpos = this.getCurrentPosition();
+        try {
+            if (status != null) {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                status.push();
+                status.message(i18n.getTranslation("_Creating_the_index_of_the_lines"));
+                status.setRangeOfValues(0, line_idx.size64());
+                status.setCurValue(0);
+            }
+            long t1 = System.currentTimeMillis();
+            String line;
+            int lineno = 0;
+            long position = 0;
+//            line_idx.set(lineno++, position);
+            if (safe) {
+                // Don't use buffered reader, slow and safe calculate position
+                int x = (int) (countLines / 100);
+                while (lineno < countLines) { //true ) {
+                    line = this.readLine();
+                    if (line == null) {
+                        break;
+                    }
+                    if (filter.test(line)) {
+                        continue;
+                    }
+                    line_idx.set(lineno++, position);
+                    if (status != null) {
+                        if (status.isCancellationRequested()) {
+                            status.cancel();
+                            return null;
+                        }
+//                        status.incrementCurrentValue();
+                        if((lineno % x) == 0){
+                            status.setCurValue(lineno);
+                        }
+                    }
+                    position = this.getCurrentPosition();
+//                    line_idx.set(lineno++, position);
+                }
+                status.setCurValue(lineno);
+            } else {
+                // Use buffered reader, fast and unsafe calculate position.
+                while (lineno < countLines) {
+                    this.seek(position);
+                    MyBufferedReader breader = new MyBufferedReader(this, 10240);
+                    line = breader.readLine();
+                    if (line == null) {
+                        break;
+                    }
+                    if (filter.test(line)) {
+                        continue;
+                    }
+                    line_idx.set(lineno++, position);
+                    if (status != null) {
+                        if (status.isCancellationRequested()) {
+                            status.cancel();
+                            return null;
+                        }
+                        status.incrementCurrentValue();
+                    }
+                    CharBuffer charBuffer = null;
+                    // � Y si hay un \r\n ?
+                    if(breader.isSkipLf()){
+                        charBuffer = CharBuffer.wrap(line + "\r\n");
+                    } else {
+                        charBuffer = CharBuffer.wrap(line + "\n");
+                    }
+                    ByteBuffer byteBuffer = this.charset.encode(charBuffer);
+                    position += byteBuffer.limit();
+
+//                    line_idx.set(lineno++, position);
+                }
+            }
+            long t2 = System.currentTimeMillis();
+            line_idx.setHeader(INDEX_HEADER_FILESIZE, this.raf.length());
+            line_idx.setHeader(INDEX_HEADER_INDEXCREATIONCOST, t2 - t1);
+            if (status != null) {
+                status.message("");
+                status.pop();
+            }
+            return line_idx;
+        } finally {
+            this.seek(savedpos);
+        }
+    }
+
+    public long getLastLinesIndexCreationCost(RandomAccessFileIndex index) {
+        return index.getHeader(INDEX_HEADER_INDEXCREATIONCOST);
+    }
+
+    public static void main(String[] args) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+
+        String fname;
+        fname = "/home/jjdelcerro/Descargas/test/origen_coordenadas.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_poblaciones.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_provincias.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/sigpac.csv";
+
+        File data_file = new File(fname);
+        File idx_file = new File(FilenameUtils.removeExtension(data_file.getAbsolutePath()) + ".idx");
+
+        final TaskStatusManager taskStatusManager = ToolsLocator.getTaskStatusManager();
+        taskStatusManager.addObserver((Observable observable, Object notification) -> {
+            TaskStatus status = taskStatusManager.getRunningTaskStatusMostRecent();
+//            System.out.print("\033[?25l\r");
+//            if( status!=null && status.isRunning() ) {
+//                System.out.print("\033[?25l\r");
+//                System.out.print(status.getTitle()+ " - " + status.getLabel());
+//                System.out.print("\033[K\033[?12l\033[?25h");
+//            }
+//            System.out.flush();
+        });
+        SimpleTaskStatus status = taskStatusManager.createDefaultSimpleTaskStatus(data_file.getName());
+        status.add();
+
+        RandomAccessFileReader reader = new RandomAccessFileReader(data_file, "UTF-8");
+        System.out.println("Index '" + idx_file.getName() + "', is creation recomended: " + reader.isRecomemendedTheRecreationOfTheLinesIndex(idx_file));
+        RandomAccessFileIndex lines_idx = reader.createOrOpenIndexOfLines(idx_file, FILTER_NONE, status);
+
+        for (int linenumber = 0; linenumber < lines_idx.size(); linenumber++) {
+            long lineoffset = lines_idx.get(linenumber);
+            reader.seek(lineoffset);
+            MyBufferedReader breader = new MyBufferedReader(reader, 10240);
+            String line = breader.readLine();
+            if (linenumber < 100) {
+                System.out.println(String.format("%6d/%d: %s", lineoffset, linenumber, line));
+            } else if (linenumber == 100) {
+                System.out.println("More records...");
+            }
+        }
+
+        System.out.println("------------------------------------");
+
+        for (int linenumber = lines_idx.size() - 1; linenumber >= 0; linenumber--) {
+            long lineoffset = lines_idx.get(linenumber);
+            reader.seek(lineoffset);
+            MyBufferedReader breader = new MyBufferedReader(reader, 10240);
+            String line = breader.readLine();
+            if (linenumber < 100) {
+                System.out.println(String.format("%6d/%d: %s", lineoffset, linenumber, line));
+            } else if (linenumber == 100) {
+                System.out.println("More records...");
+            }
+        }
+
+    }
+
+    public static class MyBufferedReader extends BufferedReader {
+
+        private Reader in;
+
+        private char cb[];
+        private int nChars, nextChar;
+
+        private static final int INVALIDATED = -2;
+        private static final int UNMARKED = -1;
+        private int markedChar = UNMARKED;
+        private int readAheadLimit = 0;
+        /* Valid only when markedChar > 0 */
+
+        /**
+         * If the next character is a line feed, skip it
+         */
+        private boolean skipLF = false;
+
+        /**
+         * The skipLF flag when the mark was set
+         */
+        private boolean markedSkipLF = false;
+
+        private static int defaultCharBufferSize = 8192;
+        private static int defaultExpectedLineLength = 80;
+
+        /**
+         * Creates a buffering character-input stream that uses an input buffer
+         * of the specified size.
+         *
+         * @param in A Reader
+         * @param sz Input-buffer size
+         *
+         * @exception IllegalArgumentException If {@code sz <= 0}
+         */
+        public MyBufferedReader(Reader in, int sz) {
+            super(in);
+            if (sz <= 0) {
+                throw new IllegalArgumentException("Buffer size <= 0");
+            }
+            this.in = in;
+            cb = new char[sz];
+            nextChar = nChars = 0;
+        }
+
+        /**
+         * Creates a buffering character-input stream that uses a default-sized
+         * input buffer.
+         *
+         * @param in A Reader
+         */
+        public MyBufferedReader(Reader in) {
+            this(in, defaultCharBufferSize);
+        }
+
+        /**
+         * Checks to make sure that the stream has not been closed
+         */
+        private void ensureOpen() throws IOException {
+            if (in == null) {
+                throw new IOException("Stream closed");
+            }
+        }
+
+        /**
+         * Fills the input buffer, taking the mark into account if it is valid.
+         */
+        private void fill() throws IOException {
+            int dst;
+            if (markedChar <= UNMARKED) {
+                /* No mark */
+                dst = 0;
+            } else {
+                /* Marked */
+                int delta = nextChar - markedChar;
+                if (delta >= readAheadLimit) {
+                    /* Gone past read-ahead limit: Invalidate mark */
+                    markedChar = INVALIDATED;
+                    readAheadLimit = 0;
+                    dst = 0;
+                } else {
+                    if (readAheadLimit <= cb.length) {
+                        /* Shuffle in the current buffer */
+                        System.arraycopy(cb, markedChar, cb, 0, delta);
+                        markedChar = 0;
+                        dst = delta;
+                    } else {
+                        /* Reallocate buffer to accommodate read-ahead limit */
+                        char ncb[] = new char[readAheadLimit];
+                        System.arraycopy(cb, markedChar, ncb, 0, delta);
+                        cb = ncb;
+                        markedChar = 0;
+                        dst = delta;
+                    }
+                    nextChar = nChars = delta;
+                }
+            }
+
+            int n;
+            do {
+                n = in.read(cb, dst, cb.length - dst);
+            } while (n == 0);
+            if (n > 0) {
+                nChars = dst + n;
+                nextChar = dst;
+            }
+        }
+
+        /**
+         * Reads a single character.
+         *
+         * @return The character read, as an integer in the range 0 to 65535
+         * (<tt>0x00-0xffff</tt>), or -1 if the end of the stream has been
+         * reached
+         * @exception IOException If an I/O error occurs
+         */
+        public int read() throws IOException {
+            synchronized (lock) {
+                ensureOpen();
+                for (;;) {
+                    if (nextChar >= nChars) {
+                        fill();
+                        if (nextChar >= nChars) {
+                            return -1;
+                        }
+                    }
+                    if (skipLF) {
+                        skipLF = false;
+                        if (cb[nextChar] == '\n') {
+                            nextChar++;
+                            continue;
+                        }
+                    }
+                    return cb[nextChar++];
+                }
+            }
+        }
+
+        /**
+         * Reads characters into a portion of an array, reading from the
+         * underlying stream if necessary.
+         */
+        private int read1(char[] cbuf, int off, int len) throws IOException {
+            if (nextChar >= nChars) {
+                /* If the requested length is at least as large as the buffer, and
+               if there is no mark/reset activity, and if line feeds are not
+               being skipped, do not bother to copy the characters into the
+               local buffer.  In this way buffered streams will cascade
+               harmlessly. */
+                if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {
+                    return in.read(cbuf, off, len);
+                }
+                fill();
+            }
+            if (nextChar >= nChars) {
+                return -1;
+            }
+            if (skipLF) {
+                skipLF = false;
+                if (cb[nextChar] == '\n') {
+                    nextChar++;
+                    if (nextChar >= nChars) {
+                        fill();
+                    }
+                    if (nextChar >= nChars) {
+                        return -1;
+                    }
+                }
+            }
+            int n = Math.min(len, nChars - nextChar);
+            System.arraycopy(cb, nextChar, cbuf, off, n);
+            nextChar += n;
+            return n;
+        }
+
+        /**
+         * Reads characters into a portion of an array.
+         *
+         * <p>
+         * This method implements the general contract of the corresponding
+         * <code>{@link Reader#read(char[], int, int) read}</code> method of the
+         * <code>{@link Reader}</code> class. As an additional convenience, it
+         * attempts to read as many characters as possible by repeatedly
+         * invoking the <code>read</code> method of the underlying stream. This
+         * iterated <code>read</code> continues until one of the following
+         * conditions becomes true: <ul>
+         *
+         * <li> The specified number of characters have been read,
+         *
+         * <li> The <code>read</code> method of the underlying stream returns
+         * <code>-1</code>, indicating end-of-file, or
+         *
+         * <li> The <code>ready</code> method of the underlying stream returns
+         * <code>false</code>, indicating that further input requests would
+         * block.
+         *
+         * </ul> If the first <code>read</code> on the underlying stream returns
+         * <code>-1</code> to indicate end-of-file then this method returns
+         * <code>-1</code>. Otherwise this method returns the number of
+         * characters actually read.
+         *
+         * <p>
+         * Subclasses of this class are encouraged, but not required, to attempt
+         * to read as many characters as possible in the same fashion.
+         *
+         * <p>
+         * Ordinarily this method takes characters from this stream's character
+         * buffer, filling it from the underlying stream as necessary. If,
+         * however, the buffer is empty, the mark is not valid, and the
+         * requested length is at least as large as the buffer, then this method
+         * will read characters directly from the underlying stream into the
+         * given array. Thus redundant <code>BufferedReader</code>s will not
+         * copy data unnecessarily.
+         *
+         * @param cbuf Destination buffer
+         * @param off Offset at which to start storing characters
+         * @param len Maximum number of characters to read
+         *
+         * @return The number of characters read, or -1 if the end of the stream
+         * has been reached
+         *
+         * @exception IOException If an I/O error occurs
+         */
+        public int read(char cbuf[], int off, int len) throws IOException {
+            synchronized (lock) {
+                ensureOpen();
+                if ((off < 0) || (off > cbuf.length) || (len < 0)
+                        || ((off + len) > cbuf.length) || ((off + len) < 0)) {
+                    throw new IndexOutOfBoundsException();
+                } else if (len == 0) {
+                    return 0;
+                }
+
+                int n = read1(cbuf, off, len);
+                if (n <= 0) {
+                    return n;
+                }
+                while ((n < len) && in.ready()) {
+                    int n1 = read1(cbuf, off + n, len - n);
+                    if (n1 <= 0) {
+                        break;
+                    }
+                    n += n1;
+                }
+                return n;
+            }
+        }
+
+        /**
+         * Reads a line of text. A line is considered to be terminated by any
+         * one of a line feed ('\n'), a carriage return ('\r'), or a carriage
+         * return followed immediately by a linefeed.
+         *
+         * @param ignoreLF If true, the next '\n' will be skipped
+         *
+         * @return A String containing the contents of the line, not including
+         * any line-termination characters, or null if the end of the stream has
+         * been reached
+         *
+         * @see java.io.LineNumberReader#readLine()
+         *
+         * @exception IOException If an I/O error occurs
+         */
+        String readLine(boolean ignoreLF) throws IOException {
+            StringBuilder s = null;
+            int startChar;
+
+            synchronized (lock) {
+                ensureOpen();
+                boolean omitLF = ignoreLF || skipLF;
+
+                bufferLoop:
+                for (;;) {
+
+                    if (nextChar >= nChars) {
+                        fill();
+                    }
+                    if (nextChar >= nChars) {
+                        /* EOF */
+                        if (s != null && s.length() > 0) {
+                            return s.toString();
+                        } else {
+                            return null;
+                        }
+                    }
+                    boolean eol = false;
+                    char c = 0;
+                    int i;
+
+                    /* Skip a leftover '\n', if necessary */
+                    if (omitLF && (cb[nextChar] == '\n')) {
+                        nextChar++;
+                    }
+                    skipLF = false;
+                    omitLF = false;
+
+                    charLoop:
+                    for (i = nextChar; i < nChars; i++) {
+                        c = cb[i];
+                        if ((c == '\n') || (c == '\r')) {
+                            eol = true;
+                            break charLoop;
+                        }
+                    }
+
+                    startChar = nextChar;
+                    nextChar = i;
+
+                    if (eol) {
+                        String str;
+                        if (s == null) {
+                            str = new String(cb, startChar, i - startChar);
+                        } else {
+                            s.append(cb, startChar, i - startChar);
+                            str = s.toString();
+                        }
+                        nextChar++;
+                        if (c == '\r') {
+                            skipLF = true;
+                        }
+                        return str;
+                    }
+
+                    if (s == null) {
+                        s = new StringBuilder(defaultExpectedLineLength);
+                    }
+                    s.append(cb, startChar, i - startChar);
+                }
+            }
+        }
+
+        /**
+         * Reads a line of text. A line is considered to be terminated by any
+         * one of a line feed ('\n'), a carriage return ('\r'), or a carriage
+         * return followed immediately by a linefeed.
+         *
+         * @return A String containing the contents of the line, not including
+         * any line-termination characters, or null if the end of the stream has
+         * been reached
+         *
+         * @exception IOException If an I/O error occurs
+         *
+         * @see java.nio.file.Files#readAllLines
+         */
+        public String readLine() throws IOException {
+            return readLine(false);
+        }
+
+        /**
+         * Skips characters.
+         *
+         * @param n The number of characters to skip
+         *
+         * @return The number of characters actually skipped
+         *
+         * @exception IllegalArgumentException If <code>n</code> is negative.
+         * @exception IOException If an I/O error occurs
+         */
+        public long skip(long n) throws IOException {
+            if (n < 0L) {
+                throw new IllegalArgumentException("skip value is negative");
+            }
+            synchronized (lock) {
+                ensureOpen();
+                long r = n;
+                while (r > 0) {
+                    if (nextChar >= nChars) {
+                        fill();
+                    }
+                    if (nextChar >= nChars) /* EOF */ {
+                        break;
+                    }
+                    if (skipLF) {
+                        skipLF = false;
+                        if (cb[nextChar] == '\n') {
+                            nextChar++;
+                        }
+                    }
+                    long d = nChars - nextChar;
+                    if (r <= d) {
+                        nextChar += r;
+                        r = 0;
+                        break;
+                    } else {
+                        r -= d;
+                        nextChar = nChars;
+                    }
+                }
+                return n - r;
+            }
+        }
+
+        /**
+         * Tells whether this stream is ready to be read. A buffered character
+         * stream is ready if the buffer is not empty, or if the underlying
+         * character stream is ready.
+         *
+         * @exception IOException If an I/O error occurs
+         */
+        public boolean ready() throws IOException {
+            synchronized (lock) {
+                ensureOpen();
+
+                /*
+             * If newline needs to be skipped and the next char to be read
+             * is a newline character, then just skip it right away.
+                 */
+                if (skipLF) {
+                    /* Note that in.ready() will return true if and only if the next
+                 * read on the stream will not block.
+                     */
+                    if (nextChar >= nChars && in.ready()) {
+                        fill();
+                    }
+                    if (nextChar < nChars) {
+                        if (cb[nextChar] == '\n') {
+                            nextChar++;
+                        }
+                        skipLF = false;
+                    }
+                }
+                return (nextChar < nChars) || in.ready();
+            }
+        }
+
+        /**
+         * Tells whether this stream supports the mark() operation, which it
+         * does.
+         */
+        public boolean markSupported() {
+            return true;
+        }
+
+        /**
+         * Marks the present position in the stream. Subsequent calls to reset()
+         * will attempt to reposition the stream to this point.
+         *
+         * @param readAheadLimit Limit on the number of characters that may be
+         * read while still preserving the mark. An attempt to reset the stream
+         * after reading characters up to this limit or beyond may fail. A limit
+         * value larger than the size of the input buffer will cause a new
+         * buffer to be allocated whose size is no smaller than limit. Therefore
+         * large values should be used with care.
+         *
+         * @exception IllegalArgumentException If {@code readAheadLimit < 0}
+         * @exception IOException If an I/O error occurs
+         */
+        public void mark(int readAheadLimit) throws IOException {
+            if (readAheadLimit < 0) {
+                throw new IllegalArgumentException("Read-ahead limit < 0");
+            }
+            synchronized (lock) {
+                ensureOpen();
+                this.readAheadLimit = readAheadLimit;
+                markedChar = nextChar;
+                markedSkipLF = skipLF;
+            }
+        }
+
+        /**
+         * Resets the stream to the most recent mark.
+         *
+         * @exception IOException If the stream has never been marked, or if the
+         * mark has been invalidated
+         */
+        public void reset() throws IOException {
+            synchronized (lock) {
+                ensureOpen();
+                if (markedChar < 0) {
+                    throw new IOException((markedChar == INVALIDATED)
+                            ? "Mark invalid"
+                            : "Stream not marked");
+                }
+                nextChar = markedChar;
+                skipLF = markedSkipLF;
+            }
+        }
+
+        public void close() throws IOException {
+            synchronized (lock) {
+                if (in == null) {
+                    return;
+                }
+                try {
+                    in.close();
+                } finally {
+                    in = null;
+                    cb = null;
+                }
+            }
+        }
+
+        /**
+         * Returns a {@code Stream}, the elements of which are lines read from
+         * this {@code BufferedReader}. The {@link Stream} is lazily populated,
+         * i.e., read only occurs during the
+         * <a href="../util/stream/package-summary.html#StreamOps">terminal
+         * stream operation</a>.
+         *
+         * <p>
+         * The reader must not be operated on during the execution of the
+         * terminal stream operation. Otherwise, the result of the terminal
+         * stream operation is undefined.
+         *
+         * <p>
+         * After execution of the terminal stream operation there are no
+         * guarantees that the reader will be at a specific position from which
+         * to read the next character or line.
+         *
+         * <p>
+         * If an {@link IOException} is thrown when accessing the underlying
+         * {@code BufferedReader}, it is wrapped in an {@link
+         * UncheckedIOException} which will be thrown from the {@code Stream}
+         * method that caused the read to take place. This method will return a
+         * Stream if invoked on a BufferedReader that is closed. Any operation
+         * on that stream that requires reading from the BufferedReader after it
+         * is closed, will cause an UncheckedIOException to be thrown.
+         *
+         * @return a {@code Stream<String>} providing the lines of text
+         * described by this {@code BufferedReader}
+         *
+         * @since 1.8
+         */
+        public Stream<String> lines() {
+            Iterator<String> iter = new Iterator<String>() {
+                String nextLine = null;
+
+                @Override
+                public boolean hasNext() {
+                    if (nextLine != null) {
+                        return true;
+                    } else {
+                        try {
+                            nextLine = readLine();
+                            return (nextLine != null);
+                        } catch (IOException e) {
+                            throw new UncheckedIOException(e);
+                        }
+                    }
+                }
+
+                @Override
+                public String next() {
+                    if (nextLine != null || hasNext()) {
+                        String line = nextLine;
+                        nextLine = null;
+                        return line;
+                    } else {
+                        throw new NoSuchElementException();
+                    }
+                }
+            };
+            return StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+                    iter, Spliterator.ORDERED | Spliterator.NONNULL), false);
+        }
+        
+        public boolean isSkipLf() {
+            return this.skipLF;
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/virtualrows/SuperCSVList.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/virtualrows/SuperCSVList.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/virtualrows/SuperCSVList.java	(revision 46118)
@@ -0,0 +1,120 @@
+/*
+ * 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.csv.virtualrows;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.Date;
+import java.util.List;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.CloseShieldReader;
+import org.apache.commons.lang3.ArrayUtils;
+import static org.gvsig.fmap.dal.store.csv.virtualrows.RandomAccessFileReader.FILTER_NONE;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.supercsv.io.CsvListReader;
+import org.supercsv.prefs.CsvPreference;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SuperCSVList extends AbstractCSVList {
+    
+    private CsvPreference preferences;
+    
+    public SuperCSVList(File text, File index, Charset charset) throws IOException {
+        super(text, index, charset);
+        this.preferences = CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE;
+    }
+
+    public SuperCSVList(RandomAccessFileReader reader, RandomAccessFileIndex index, int skipLines) throws IOException {
+        super(reader, index);
+        this.preferences = CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE;
+        this.skipLines  = skipLines;
+    }
+
+    public void setPreferences(CsvPreference preferences) {
+        this.preferences = preferences;
+    }
+    
+    @Override
+    protected List<String> nextRecord() throws IOException {
+        CsvListReader parser = null;
+        try {
+            CloseShieldReader theReader = CloseShieldReader.wrap(this.reader);
+            parser = new CsvListReader(theReader, this.preferences);
+            List<String> values = parser.read();
+            return values;
+        } finally {
+            IOUtils.closeQuietly(parser);
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new DefaultLibrariesInitializer().fullInitialize();
+        
+        String fname;
+        fname = "/home/fdiaz/Descargas/origen_coordenadas.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/origen_coordenadas.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_poblaciones.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/esp_provincias.csv";
+//        fname = "/home/jjdelcerro/Descargas/test/sigpac.csv";
+
+        File data_file = new File(fname);
+        File index_file = new File(FilenameUtils.removeExtension(data_file.getAbsolutePath()) + ".idx");
+
+        final TaskStatusManager taskStatusManager = ToolsLocator.getTaskStatusManager();
+        taskStatusManager.addObserver((Observable observable, Object notification) -> {
+            TaskStatus status = taskStatusManager.getRunningTaskStatusMostRecent();
+//            System.out.print("\033[?25l\r");
+//            if( status!=null && status.isRunning() ) {
+//                System.out.print("\033[?25l\r");
+//                System.out.print(status.getTitle()+ " - " + status.getLabel());
+//                System.out.print("\033[K\033[?12l\033[?25h");
+//            }
+//            System.out.flush();
+        });
+        SimpleTaskStatus status = taskStatusManager.createDefaultSimpleTaskStatus(data_file.getName());
+        status.add();
+
+        RandomAccessFileReader reader = new RandomAccessFileReader(data_file, "UTF-8");
+        RandomAccessFileIndex index_lines = reader.createOrOpenIndexOfLines(index_file, FILTER_NONE, null);
+
+        CSVList csv = new SuperCSVList(reader, index_lines, 0);
+        System.out.println("Lines " + csv.size());
+        int n = 0;
+        for (List<String> record : csv) {
+            if( n<100 ) {
+                System.out.println(String.format("%6d: %s", n, ArrayUtils.toString(record)));
+            } else if( n==100 ) {
+                System.out.println("More records...");
+            }
+            n++;
+        }
+        System.out.println("-----------------");
+        long t1 = new Date().getTime();
+        for (int i = csv.size() - 1; i >= 0; i--) {
+            List<String> record = csv.get(i);
+            if( i<100 ) {
+                System.out.println(String.format("%6d: %s", i, ArrayUtils.toString(record)));
+            } else if( i==100 ) {
+                System.out.println("More records...");
+            }
+        }
+        long t2 = new Date().getTime();
+        System.out.println("Time: " + (t2 - t1) + " ms");
+        IOUtils.closeQuietly(csv);
+
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/CSVSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CSVSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CSVSetProvider.java	(revision 46118)
@@ -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.dal.store.csv;
+
+import java.util.List;
+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 CSVSetProvider extends AbstractFeatureSetProvider {
+
+    private static class CSVFeatureProvider extends AbstractFeatureProviderLoadedOnDemand {
+
+        protected CSVStoreProvider store;
+
+        public CSVFeatureProvider(CSVStoreProvider store, FeatureType type) {
+            super(type);
+            this.store = store;
+        }
+
+        @Override
+        protected void doLoad() {
+            try {
+                CSVStoreProvider.RowToFeatureTranslator translator = this.store.getRowToFeatureTranslator();
+                long index = this.getOID();
+                List<String> row = this.store.getRowByIndex(index);
+                translator.translate(index, row, this);
+            } catch (Exception ex) {
+                throw new ReadRuntimeException(getStoreFullName(), this.getOID(), ex);
+            }
+        }
+
+        @Override
+        public Long getOID() {
+            return (Long) super.getOID();
+        }
+
+        public void setOID(long oid) {
+            super.setOID(oid); 
+        }
+
+        private String getStoreFullName() {
+            try {
+                return this.store.getFullName();
+            } catch (Exception ex) {
+                return "unknown";
+            }
+        }
+
+    }
+    private class CSVIterator extends AbstractFeatureProviderIterator {
+
+        protected long index;
+        protected FeatureType type;
+        protected long count;
+
+        public CSVIterator(CSVStoreProvider store, FeatureType type,
+                long startOn) throws DataException {
+            super(store);
+            this.index = startOn;
+            this.type = type;
+            this.count = store.getFeatureCount();
+        }
+
+        @Override
+        protected boolean internalHasNext() {
+            return this.count > index;
+        }
+
+        @Override
+        protected FeatureProvider internalNext() {
+            if (index >= this.count) {
+                throw new NoSuchElementException();
+            }
+            CSVFeatureProvider data = new CSVFeatureProvider(getStore(), type);
+            data.setOID(index++);
+            return data;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        protected void internalDispose() {
+            type = null;
+        }
+
+        @Override
+        protected void doDispose() throws BaseException {
+            // Nothing to do
+        }
+    }
+
+    private class FastCSVIterator extends CSVIterator {
+
+        protected FeatureProvider data;
+
+        public FastCSVIterator(CSVStoreProvider store, FeatureType type,
+                long startOn) throws DataException {
+            super(store, type, startOn);
+            this.data = new CSVFeatureProvider(store, type);
+        }
+
+        @Override
+        protected FeatureProvider internalNext() {
+            if (index >= this.count) {
+                throw new NoSuchElementException();
+            }
+            data.setOID(index++);
+            return this.data;
+        }
+
+        @Override
+        protected void internalDispose() {
+            super.internalDispose();
+            data = null;
+        }
+    }
+
+    public CSVSetProvider(CSVStoreProvider store, FeatureQuery query,
+            FeatureType featureType)
+            throws DataException {
+        super(store, query, featureType);
+    }
+
+    @Override
+    protected CSVStoreProvider getStore() {
+        return (CSVStoreProvider) super.getStore();
+    }
+
+    protected String getStoreFullName() {
+        try {
+            return this.getStore().getFullName();
+        } catch (Throwable th) {
+            return "unknown";
+        }
+    }
+
+    @Override
+    public boolean canFilter() {
+        return false;
+    }
+
+    @Override
+    public boolean canIterateFromIndex() {
+        return true;
+    }
+
+    @Override
+    public boolean canOrder() {
+        return false;
+    }
+
+    @Override
+    public long getSize() throws DataException {
+        return getStore().getFeatureCount();
+    }
+
+    @Override
+    public boolean isEmpty() throws DataException {
+        return getSize() == 0;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+    }
+
+    @Override
+    protected AbstractFeatureProviderIterator createIterator(long index)
+            throws DataException {
+        return new CSVIterator(
+                getStore(),
+                getFeatureType(),
+                index
+        );
+    }
+
+    @Override
+    protected AbstractFeatureProviderIterator createFastIterator(long index)
+            throws DataException {
+        return new FastCSVIterator(
+                getStore(),
+                getFeatureType(),
+                index
+        );
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/CSVSetProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,852 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+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.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.CreateFeatureException;
+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.FeatureSetProvider;
+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.AbstractSimpleReader;
+import org.gvsig.fmap.dal.store.csv.simplereaders.CSVReaderSuperCSV;
+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.primitive.Envelope;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+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.prefs.CsvPreference;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.GetItemWithSize64;
+
+@SuppressWarnings("UseSpecificCatch")
+public class CSVStoreProvider extends AbstractMemoryStoreProvider implements
+        ResourceConsumer {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CSVStoreProvider.class);
+
+    public static final String NAME = DataStore.CSV_PROVIDER_NAME;
+    public static final String DESCRIPTION = "CSV file";
+
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private final ResourceProvider resource;
+
+    private long counterNewsOIDs = 0;
+    private Envelope envelope;
+    private boolean need_calculate_envelope = false;
+    private final SimpleTaskStatus taskStatus;
+    private final CSVFeatureWriter writer;
+    private FeatureType featureType;
+    private GetItemWithSize64<List<String>> virtualrows;
+    private RowToFeatureTranslator rowToFeatureTranslator;
+
+    @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+    public CSVStoreProvider(CSVStoreParameters parameters,
+            DataStoreProviderServices storeServices) throws InitializeException {
+        super(
+                parameters,
+                storeServices,
+                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+        );
+        this.writer = new CSVFeatureWriter();
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("CSV");
+        this.taskStatus.setAutoremove(true);
+
+        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();
+    }
+
+    @Override
+    public String getProviderName() {
+        return NAME;
+    }
+
+    @Override
+    public boolean allowWrite() {
+        return true;
+    }
+
+    private String getFullFileName() {
+        // Usar solo para mostrar mensajes en el logger.
+        String s;
+        try {
+            s = getCSVParameters().getFile().getAbsolutePath();
+        } catch (Exception e2) {
+            s = "(unknow)";
+        }
+        return s;
+    }
+
+    @Override
+    public void open() throws OpenException {
+        if (this.data != null) {
+            return;
+        }
+        this.data = new ArrayList<>();
+        resource.setData(new HashMap());
+        counterNewsOIDs = 0;
+        try {
+            loadFeatures();
+        } catch (RuntimeException e) {
+            LOGGER.debug("Can't load features from CSV '" + getFullFileName() + "'.", e);
+            throw e;
+        } catch (Exception e) {
+            LOGGER.debug("Can't load features from CSV '" + getFullFileName() + "'.", e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    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 (Exception e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+
+    }
+
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
+
+        try {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            this.taskStatus.add();
+            taskStatus.message(i18n.getTranslation("_Preparing_writing"));
+            this.getResource().closeRequest();
+            getResource().execute(new ResourceAction() {
+                @Override
+                public Object run() throws Exception {
+                    FeatureSet features = null;
+                    DisposableIterator it = null;
+                    try {
+                        File file = (File) resource.get();
+                        features = getStoreServices().getFeatureStore().getFeatureSet();
+
+                        taskStatus.message(i18n.getTranslation("_Writing_records"));
+                        if (virtualrows == null) {
+                            List<FeatureProvider> newdata = new ArrayList<>();
+                            FeatureType ftype = getStoreServices().getDefaultFeatureType();
+                            writer.initialize(getCSVParameters(), file, ftype, getCSVPreferences());
+                            writer.begin();
+                            it = features.fastIterator();
+                            taskStatus.setRangeOfValues(0, features.getSize());
+                            taskStatus.setCurValue(0);
+                            while (it.hasNext()) {
+                                taskStatus.incrementCurrentValue();
+                                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();
+                            
+                        } else {
+
+                            CSVStoreParameters csvParams = getCSVParameters();
+                            CSVStoreParameters tmpParams = (CSVStoreParameters) csvParams.getCopy();
+
+                            String tmpBase = File.createTempFile("tmp_" + System.currentTimeMillis(), null).getAbsolutePath();
+                            File tmpFile = new File(tmpBase + ".csv");
+                            tmpParams.setFile(tmpFile);
+
+                            FeatureType ftype = getStoreServices().getDefaultFeatureType();
+                            writer.initialize(tmpParams, tmpFile, ftype, getCSVPreferences());
+                            writer.begin();
+                            it = features.fastIterator();
+                            taskStatus.setIndeterminate();
+                            taskStatus.setCurValue(0);
+                            while (it.hasNext()) {
+                                taskStatus.incrementCurrentValue();
+                                if( taskStatus.isCancellationRequested() ) {
+                                    taskStatus.cancel();
+                                    LOGGER.info("CSV writing canceled ("+getFullFileName()+")");
+                                    break;
+                                }
+                                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());
+                                }
+                            }
+                            if (writer.getEnvelope() != null) {
+                                envelope = writer.getEnvelope().getGeometry().getEnvelope();
+                            }
+                            resource.notifyChanges();
+                            writer.end();
+                            if( !taskStatus.isCancelled() ) {
+                                if (!csvParams.getFile().delete()) {
+                                    LOGGER.debug("Can't delete csv file '" + csvParams.getFile() + "'.");
+                                    throw new IOException("Can't delete csv '"
+                                            + FilenameUtils.getBaseName(csvParams.getFile().getAbsolutePath())
+                                            + "' file to replace with the new csv.\nThe new csv is in temporary file '" + tmpFile.getAbsolutePath()
+                                            + "'");
+                                }
+
+                                File csvFile = csvParams.getFile();
+                                FileUtils.moveFile(tmpParams.getFile(), csvFile);
+                                FileUtils.delete(new File(FilenameUtils.removeExtension(csvFile.getAbsolutePath())+".idx"));
+
+                                loadFeatures();
+                            }
+                        }
+                    } finally {
+                        if (it != null) {
+                            it.dispose();
+                        }
+                        if (features != null) {
+                            features.dispose();
+                        }
+                    }
+                    return null;
+                }
+
+            });
+            this.taskStatus.terminate();
+        } catch (Exception e) {
+            this.taskStatus.abort();
+            throw new PerformEditingException(getResource().toString(), e);
+        }
+    }
+
+    private CsvPreference getCSVPreferences() {
+        CSVReaderSuperCSV reader = new CSVReaderSuperCSV(getCSVParameters());
+        return reader.getCSVPreferences();
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    @Override
+    public boolean supportsAppendMode() {
+        return true;
+    }
+
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public void append(final FeatureProvider featureProvider) {
+        //todo
+        getResource().execute(new ResourceAction() {
+            @Override
+            public Object run() throws Exception {
+                //writer.append(getStoreServices().createFeature(featureProvider));
+                writer.add(featureProvider);
+                return null;
+            }
+        });
+    }
+
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public void beginAppend() throws DataException {
+        this.close();
+        getResource().execute(new ResourceAction() {
+            @Override
+            public Object run() throws Exception {
+                writer.initialize(
+                        getCSVParameters(),
+                        getCSVParameters().getFile(),
+                        getFeatureStore().getDefaultFeatureType(),
+                        getCSVPreferences()
+                );
+                writer.beginAppend();
+                return null;
+            }
+        });
+
+    }
+
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public void endAppend() {
+        try {
+            getResource().execute(new ResourceAction() {
+                @Override
+                public Object run() throws Exception {
+                    writer.end();
+                    resource.notifyChanges(); //resourcesNotifyChanges();
+                    counterNewsOIDs = -1;
+                    return null;
+                }
+            });
+            writer.end();
+        } catch (PerformEditingException ex) {
+            LOGGER.warn("Not been able to end append '" + this.getFullName() + "'.", ex);
+        }
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        throw new NotYetImplemented();
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        throw new NotYetImplemented();
+    }
+
+    @Override
+    public Object createNewOID() {
+        return counterNewsOIDs++;
+    }
+
+    protected void initializeFeatureTypes() throws InitializeException {
+        try {
+            this.open();
+        } catch (OpenException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+    }
+
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public Envelope getEnvelope() throws DataException {
+        this.open();
+        if (this.envelope != null) {
+            return this.envelope;
+        }
+        if (!this.need_calculate_envelope) {
+            return null;
+        }
+        try {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            this.taskStatus.add();
+            this.taskStatus.message(i18n.getTranslation("_Calculating_envelope"));
+            FeatureStore fs = this.getFeatureStore();
+            FeatureType ft = fs.getDefaultFeatureType();
+            FeatureAttributeDescriptor fad = ft.getAttributeDescriptor(ft.getDefaultGeometryAttributeIndex());
+            this.taskStatus.setRangeOfValues(0, fs.getFeatureCount());
+            this.envelope = GeometryLocator.getGeometryManager().createEnvelope(fad.getGeomType().getSubType());
+            fs.accept(new Visitor() {
+                @Override
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    taskStatus.incrementCurrentValue();
+                    if(taskStatus.isCancellationRequested()){
+                        taskStatus.cancel();
+                        throw new VisitCanceledException();
+                    }
+                    Feature f = (Feature) obj;
+                    Geometry geom = f.getDefaultGeometry();
+                    if (geom != null) {
+                        envelope.add(geom.getEnvelope());
+                    }
+                }
+            });
+            taskStatus.terminate();
+        } catch (VisitCanceledException e) {
+            return null;
+        } catch (BaseException e) {
+            taskStatus.abort();
+            LOGGER.warn("Can't calculate the envelope of CSV file '" + this.getFullName() + "'.", e);
+            return null;
+        }
+
+        this.need_calculate_envelope = false;
+        return this.envelope;
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+                DataStoreNotification.RESOURCE_CHANGED,
+                resource);
+    }
+
+    @Override
+    public Object getSourceId() {
+        return this.getCSVParameters().getFile();
+    }
+
+    @Override
+    public String getName() {
+        String name = this.getCSVParameters().getFile().getName();
+        return FilenameUtils.getBaseName(name);
+    }
+
+    @Override
+    public String getFullName() {
+        return this.getCSVParameters().getFile().getAbsolutePath();
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return resource;
+    }
+
+    private boolean isEmpty(String s) {
+        if (s == null) {
+            return true;
+        }
+        return s.trim().length() == 0;
+    }
+
+    private void init(CSVStoreParameters parameters, DataStoreProviderServices storeServices) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    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 final 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);
+        }
+
+        @Override
+        public Object evaluate(EvaluatorData data) throws EvaluatorException {
+            try {
+                double x = ((Double) toDouble.coerce(data.getDataValue(xname)));
+                double y = ((Double) toDouble.coerce(data.getDataValue(yname)));
+                Point point = geommgr.createPoint(x, y, Geometry.SUBTYPES.GEOM3D);
+                if (zname != null) {
+                    double z = ((Double) toDouble.coerce(data.getDataValue(zname)));
+                    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;
+            }
+        }
+
+        @Override
+        public String getName() {
+            return "ToPointEvaluaror";
+        }
+
+    }
+
+    public static class RowToFeatureTranslator {
+
+        private Coercion coercion[];
+        private CoercionContext coercionContext[];
+        private int sizes[];
+        private String[] names;
+        private final boolean ignore_errors;
+        private long count_errors;
+        private FeatureType csvFeatureType;
+
+        public RowToFeatureTranslator(boolean ignore_errors) {
+            this.ignore_errors = ignore_errors;
+            this.count_errors = 0;
+        }
+
+        public int getColumnSize(int column) {
+            return this.sizes[column];
+        }
+
+        public void initialize(FeatureType ftype) {
+            this.csvFeatureType = ftype;
+            int columns = this.csvFeatureType.size();
+            this.names = new String[columns];
+            this.coercion = new Coercion[columns];
+            this.coercionContext = new CoercionContext[columns];
+            this.sizes = new int[columns];
+            int index = 0;
+            for (int i = 0; i < this.csvFeatureType.size(); i++) {
+                FeatureAttributeDescriptor ad = this.csvFeatureType.getAttributeDescriptor(i);
+                names[i] = null;
+                if( ad.isComputed() ) {
+                    continue;
+                }
+                names[index] = ad.getName();
+                coercion[index] = ad.getCoercion();
+                coercionContext[index] = ad.getCoercionContext();
+                sizes[index] = ad.getSize();
+                index++;
+            }
+        }
+
+        public void translate(long rowindex, List<String> row, FeatureProvider feature) throws Exception {
+
+            feature.setOID(rowindex);
+            for (int i = 0; i < names.length; i++) {
+                String name = names[i];
+                if( name == null ) {
+                    break;
+                }
+                Object rawvalue = row.get(i);
+                try {
+                    Object value = null;
+                    if (coercion[i] != null) {
+                        value = coercion[i].coerce(rawvalue, coercionContext[i]);
+                    }
+                    int findex = feature.getType().getIndex(name);
+                    if( findex>=0 ) {
+                        // Ojo que puede que se este filtrando el featuretype y no 
+                        // tenga todos los atributos, por ejemplo al pintar la vista.
+                        feature.set(findex, value);
+                    }
+                    if (sizes[i] >= 0
+                            && (value instanceof String || value instanceof URL
+                            || value instanceof URI || value instanceof File)) {
+                        int x = value.toString().length();
+                        if (sizes[i] < x) {
+                            sizes[i] = x;
+                        }
+                    }
+                } catch (Exception ex) {
+                    if (!ignore_errors) {
+                        throw ex;
+                    }
+                    if (count_errors++ < 10) {
+                        LOGGER.warn("Can't load value of attribute " + name +"/" +i+" in row " + rowindex + ".", ex);
+                    }
+                    if (count_errors == 10) {
+                        LOGGER.info("Too many errors, suppress messages.");
+                    }
+                }
+            }
+        }
+    }
+
+    private void loadFeatures() {
+        InputStreamReader in = null;
+        SimpleReader reader = null;
+        try {
+            taskStatus.setTitle("CSV "+this.getName());
+            taskStatus.add();
+//            boolean ignore_errors = CSVStoreParameters.getIgnoreErrors(getCSVParameters());
+
+            // Initialize the feature types
+            EditableFeatureType edftype = getStoreServices().createFeatureType(this.getName());
+            CSVUtils.loadFeatureType(getCSVParameters(), edftype, true, taskStatus);
+            FeatureType ftype = edftype.getNotEditableCopy();
+            this.setFeatureType(ftype);
+
+            in = CSVUtils.openFile(
+                    this.getCSVParameters().getFile(),
+                    CSVStoreParameters.getCharset(this.getCSVParameters())
+            );
+            reader = CSVUtils.getSimpleReader(getCSVParameters(), in);
+            if (CSVStoreParameters.isFirstLineHeader(getCSVParameters())) {
+                reader.getHeader(); // Skip and ignore the header of file
+            }
+            this.rowToFeatureTranslator = new RowToFeatureTranslator(
+                    CSVStoreParameters.getIgnoreErrors(getCSVParameters())
+            );
+            this.rowToFeatureTranslator.initialize(ftype);
+            if (ftype.getDefaultGeometryAttributeName() != null) {
+                this.need_calculate_envelope = true;
+            }
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            taskStatus.message(i18n.getTranslation("_Loading"));
+
+            if(this.virtualrows != null && this.virtualrows instanceof Closeable){
+                IOUtils.closeQuietly((Closeable) this.virtualrows);
+                this.virtualrows = null;
+            }
+            
+            this.virtualrows = ((AbstractSimpleReader) reader).getVirtualRows(this.taskStatus);
+            if (this.virtualrows == null) {
+
+                List<String> row = reader.read();
+
+                int skipLines = CSVStoreParameters.getSkipLines(getCSVParameters());
+                if (skipLines > 0) {
+                    row = reader.skip(skipLines);
+                }
+                int limit = CSVStoreParameters.getLimit(getCSVParameters());
+                while (row != null) {
+                    taskStatus.incrementCurrentValue();
+                    if( taskStatus.isCancellationRequested() ) {
+                        taskStatus.cancel();
+                        break;
+                    }
+                    FeatureProvider feature = this.createFeatureProvider(ftype);
+                    this.rowToFeatureTranslator.translate(reader.getLine(), row, feature);
+
+                    this.addFeatureProvider(feature);
+                    if (limit > 0) {
+                        if (limit < this.data.size()) {
+                            break;
+                        }
+                    }
+                    row = reader.read();
+                }
+                for (int i = 0; i < ftype.size(); i++) {
+                    if (this.rowToFeatureTranslator.getColumnSize(i) > 0) {
+//                    if (sizes[i] > 0) {
+                        EditableFeatureAttributeDescriptor efad = ((EditableFeatureAttributeDescriptor) edftype.getAttributeDescriptor(i));
+//                        efad.setSize(sizes[i]);
+                        efad.setSize(this.rowToFeatureTranslator.getColumnSize(i));
+                    }
+                }
+                // Volvemos a asignar al store el featuretype, ya que puede
+                // haber cambiado.
+                ftype = edftype.getNotEditableCopy();
+                this.setFeatureType(ftype);
+            }
+            if( taskStatus.isRunning() ) {
+                taskStatus.terminate();
+            }
+        } catch (Throwable ex) {
+            taskStatus.abort();
+            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;
+            }
+        }
+    }
+
+    @Override
+    public void fixFeatureTypeFromParameters() {
+        String param_types_def = CSVStoreParameters.getRawFieldTypes(this.getParameters());
+        String[] pointDimensionNames = CSVStoreParameters.getPointDimensionNames(this.getParameters());
+        String geometry_column = CSVStoreParameters.getGeometryColumn(this.getParameters());
+        if (StringUtils.isNotBlank(param_types_def)
+                || pointDimensionNames != null
+                || !StringUtils.isBlank(geometry_column)) {
+            this.setFeatureType(featureType);
+        }
+    }
+
+    private void setFeatureType(FeatureType ftype) {
+        List<FeatureType> ftypes = new ArrayList<>();
+        ftypes.add(ftype);
+        this.featureType = ftype;
+        this.getStoreServices().setFeatureTypes(ftypes, ftype);
+    }
+
+    @Override
+    public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType)
+            throws DataException {
+        if (this.virtualrows == null) {
+            return super.createSet(query, featureType);
+        }
+        return new CSVSetProvider(this, query, featureType);
+    }
+
+    public List<String> getRowByIndex(long index) {
+        if (this.virtualrows == null) {
+            return null;
+        }
+        return this.virtualrows.get64(index);
+    }
+
+    public RowToFeatureTranslator getRowToFeatureTranslator() {
+        if (this.rowToFeatureTranslator == null) {
+            boolean ignore_errors = CSVStoreParameters.getIgnoreErrors(getCSVParameters());
+            this.rowToFeatureTranslator = new RowToFeatureTranslator(ignore_errors);
+            this.rowToFeatureTranslator.initialize(featureType);
+        }
+        return this.rowToFeatureTranslator;
+    }
+
+    @Override
+    public long getFeatureCount() throws DataException {
+        if (this.virtualrows == null) {
+            return super.getFeatureCount();
+        }
+        return this.virtualrows.size64();
+    }
+
+    @Override
+    public long getDataSize() throws DataException {
+        if (this.virtualrows == null) {
+            return super.getDataSize();
+        }
+        return this.virtualrows.size64();
+    }
+
+    @Override
+    protected FeatureProvider internalGetFeatureProviderByReference(
+            FeatureReferenceProviderServices reference) throws DataException {
+        if (this.virtualrows == null) {
+            return super.internalGetFeatureProviderByReference(reference);
+        }
+        int oid = ((Long) reference.getOID()).intValue();
+        RowToFeatureTranslator translator = getRowToFeatureTranslator();
+        FeatureProvider feature = this.createFeatureProvider(this.featureType);
+        try {
+            translator.translate(oid, this.virtualrows.get64(oid), feature);
+        } catch (Exception ex) {
+            throw new CreateFeatureException(ex, this.getName());
+        }
+        return feature;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        if (this.virtualrows != null && this.virtualrows instanceof Closeable) {
+            IOUtils.closeQuietly((Closeable) this.virtualrows);
+            this.virtualrows = null;
+        }
+    }
+    
+    
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/RecordsFileImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/RecordsFileImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/RecordsFileImpl.java	(revision 46118)
@@ -0,0 +1,498 @@
+package org.gvsig.fmap.dal.store.csv;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.sql.Timestamp;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.IOUtils;
+import org.gvsig.fmap.dal.store.csv.RecordsFile.Record;
+import static org.gvsig.fmap.dal.store.csv.RecordsFile.TYPE_BYTE;
+import static org.gvsig.fmap.dal.store.csv.RecordsFile.TYPE_STRING;
+import static org.gvsig.fmap.dal.store.csv.RecordsFile.TYPE_TIMESTAMP;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RecordsFileImpl 
+        extends AbstractList<Record>
+        implements RecordsFile 
+    {
+
+    public static class RecordImpl implements Record {
+        private final RecordType type;
+        private final ByteBuffer buffer;
+        
+        public RecordImpl(RecordType type) {
+            this.type = type;
+            this.buffer = ByteBuffer.allocateDirect(this.type.getSize());
+        }
+        
+        @Override
+        public RecordType getType() {
+            return this.type;
+        }
+
+        @Override
+        public byte[] getBytes() {
+            return this.buffer.array();
+        }
+
+        @Override
+        public ByteBuffer getBuffer() {
+            return this.buffer;
+        }
+        
+        @Override
+        public void setBytes(byte[] bytes) {
+            this.buffer.position(0);
+            this.buffer.put(bytes);
+        }
+
+        @Override
+        public int getInt(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            return this.buffer.getInt();
+        }
+
+        @Override
+        public long getLong(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            return this.buffer.getLong();
+        }
+
+        @Override
+        public double getDouble(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            return this.buffer.getDouble();
+        }
+
+        @Override
+        public Timestamp getTimestamp(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            long l = this.buffer.getLong();
+            return new Timestamp(l);
+        }
+
+        @Override
+        public String getString(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            short sz = this.buffer.getShort();
+            char[] chars = new char[sz];
+            for (int i = 0; i < sz; i++) {
+                chars[i] = this.buffer.getChar(i);
+            }
+            return new String(chars);
+        }
+
+        @Override
+        public byte[] getBytes(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            int sz = this.buffer.getInt();
+            byte[] bytes = new byte[sz];
+            for (int i = 0; i < sz; i++) {
+                bytes[i] = this.buffer.get(i);
+            }
+            return bytes;
+        }
+
+        @Override
+        public int getByte(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            return this.buffer.get();
+        }
+
+        @Override
+        public int getShort(int n) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            return this.buffer.getShort();
+        }
+
+        @Override
+        public void setByte(int n, byte v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.put(v);
+        }
+
+        @Override
+        public void setShort(int n, short v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putShort(v);
+        }
+
+        @Override
+        public void setInt(int n, int v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putInt(v);
+        }
+
+        @Override
+        public void setLong(int n, long v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putLong(v);
+        }
+
+        @Override
+        public void setDouble(int n, double v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putDouble(v);
+        }
+
+        @Override
+        public void setTimestamp(int n, Timestamp v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putLong(v.getTime());
+        }
+
+        @Override
+        public void setString(int n, String v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putShort((short) v.length());
+            for (int i = 0; i < v.length(); i++) {
+                this.buffer.putChar(v.charAt(i));
+            }
+        }
+
+        @Override
+        public void setBytes(int n, byte[] v) {
+            this.buffer.position(this.type.getFieldOffset(n));
+            this.buffer.putInt(v.length);
+            for (int i = 0; i < v.length; i++) {
+                this.buffer.put(v[i]);
+            }
+        }
+    }
+
+    
+    public static class RecordTypeImpl implements RecordType {
+
+        private static class FieldType {
+            public byte type;
+            public int size;
+            public int offset;
+        }
+        
+        private final List<FieldType> fields;
+        private int size;
+        
+        public RecordTypeImpl() {
+            this.fields = new ArrayList<>();
+            this.size = -1;
+        }
+
+        public void add(int type, int size) {
+            FieldType field = new FieldType();
+            field.size = size;
+            field.type = (byte) type;
+            this.size = -1;
+            field.offset = this.getSize();
+            this.fields.add(field);
+        }
+        
+        @Override
+        public int getSize() {
+            if( this.size<0 ) {
+                int sz = 0;
+                for (FieldType field : fields) {
+                    switch(field.type) {
+                        case TYPE_BYTE:
+                            sz += 1;
+                            break;
+                        case TYPE_SHORT:
+                            sz += 2;
+                            break;
+                        case TYPE_INTEGER:
+                            sz += 4;
+                            break;
+                        case TYPE_TIMESTAMP:
+                        case TYPE_LONG:
+                            sz += 8;
+                            break;
+                        case TYPE_DOUBLE:
+                            sz += 8;
+                            break;
+                        case TYPE_STRING:
+                            sz += 2 + (field.size*2);
+                            break;
+                        case TYPE_BYTES:
+                            sz += 4 + field.size;
+                            break;
+                    }
+                }
+                this.size = sz;
+            }
+            return this.size;
+        }
+
+        @Override
+        public int getFieldCount() {
+            return this.fields.size();
+        }
+
+        @Override
+        public int getFieldType(int n) {
+            return this.fields.get(n).type;
+        }
+
+        @Override
+        public int getFieldSize(int n) {
+            return this.fields.get(n).size;
+        }
+
+        @Override
+        public int getFieldOffset(int n) {
+            return this.fields.get(n).offset;
+        }
+
+        @Override
+        public Record createRecord() {
+            return new RecordImpl(this);
+        }
+
+        @Override
+        public byte[] toBytes() {
+            ByteBuffer buffer = ByteBuffer.allocateDirect(this.fields.size()*(1+4));
+            for (FieldType field : fields) {
+                buffer.put(field.type);
+                buffer.putInt(field.size);
+            }
+            return buffer.array();
+        }
+        
+        public static RecordType from(ByteBuffer bytes) {
+            RecordTypeImpl recordType = new RecordTypeImpl();
+            
+            bytes.position(0);
+            int len = bytes.limit()/(1+4);
+            for (int i = 0; i < len; i++) {
+                int type = bytes.get();
+                int size = bytes.getInt();
+                recordType.add(type, size);
+            }
+            return recordType;
+        }
+        
+        public static RecordType from(byte[] bytes) {
+            ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length);
+            buffer.put(bytes);
+            return from(buffer);
+        }
+        
+    }
+    
+    public static class RecordTypeBuilderImpl implements RecordTypeBuilder {
+
+        private final RecordTypeImpl recordType;
+        
+        public RecordTypeBuilderImpl() {
+            this.recordType = new RecordTypeImpl();
+        }
+        
+        @Override
+        public RecordTypeBuilder addbyte() {
+            this.recordType.add(TYPE_BYTE, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addShort() {
+            this.recordType.add(TYPE_SHORT, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addInteger() {
+            this.recordType.add(TYPE_INTEGER, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addLong() {
+            this.recordType.add(TYPE_LONG, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addDouble() {
+            this.recordType.add(TYPE_DOUBLE, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addTimestamp() {
+            this.recordType.add(TYPE_TIMESTAMP, 0);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addString(int size) {
+            this.recordType.add(TYPE_STRING, size);
+            return this;
+        }
+
+        @Override
+        public RecordTypeBuilder addBytes(int size) {
+            this.recordType.add(TYPE_BYTES, size);
+            return this;
+        }
+
+        @Override
+        public RecordType build() {
+            return this.recordType;
+        }
+        
+        public static RecordTypeBuilder recordTypeBuilder() {
+            return new RecordTypeBuilderImpl();
+        }
+
+    }
+    
+    private static final int HEADER_SIZE = 1024;
+    
+    private RandomAccessFile raf;
+    private MappedByteBuffer fileByteBuffer;
+    private long sz;
+    private int header_size;
+    private int type_size;
+    private RecordType recordType;
+
+    public RecordsFileImpl() {
+        
+    }
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public RecordsFileImpl(File f) throws IOException {
+        this.open(f);
+    }
+    
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public RecordsFileImpl(RandomAccessFile raf) throws IOException {
+        this.open(raf);
+    }
+    
+    @Override
+    public RecordType getRecordType() {
+        return this.recordType;
+    }
+    
+    @Override
+    public void open(File f) throws IOException {
+        RandomAccessFile theRaf = new RandomAccessFile(f,"r");
+        this.open(theRaf);
+    }
+    
+    @Override
+    public void open(RandomAccessFile raf) throws IOException {
+        this.raf = raf;
+        this.fileByteBuffer = this.raf.getChannel().map(
+                FileChannel.MapMode.READ_ONLY, 
+                0, 
+                this.raf.length()
+        );
+        this.header_size = this.fileByteBuffer.getInt();
+        this.type_size = this.fileByteBuffer.getInt();
+        this.recordType = RecordType.from(this.fileByteBuffer.get(new byte[type_size]));
+        this.sz = (fileByteBuffer.limit()-this.header_size) / this.recordType.getSize();
+        // TODO: meter en la cabecera el numero de registros para poder escribir datos al final
+    }
+
+    @Override
+    public void create(File f, RecordType recordType, long sz) throws IOException {
+        RandomAccessFile theRaf = new RandomAccessFile(f,"rw");
+        this.create(theRaf,recordType, sz);
+    }
+    
+    @Override
+    public void create(RandomAccessFile raf, RecordType recordType, long sz) throws IOException {
+        this.raf = raf;
+        this.recordType = recordType;
+        this.header_size = HEADER_SIZE;
+        this.raf.setLength(this.header_size +(sz*this.recordType.getSize()));
+        this.fileByteBuffer = this.raf.getChannel().map(
+                FileChannel.MapMode.READ_WRITE, 
+                0, 
+                this.raf.length()
+        );
+        this.sz = (fileByteBuffer.limit()-this.header_size) / this.recordType.getSize();
+        byte[] recordTypeBytes = this.recordType.toBytes();
+        this.fileByteBuffer.position(0);
+        this.fileByteBuffer.putLong(this.header_size);
+        this.fileByteBuffer.putLong(recordTypeBytes.length);
+        this.fileByteBuffer.put(recordTypeBytes);
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.fileByteBuffer.force();
+        IOUtils.closeQuietly(this.raf);
+        this.raf = null;
+        this.fileByteBuffer = null;
+        this.sz = -1;
+    }
+
+    @Override
+    public boolean isOpen() {
+        return this.fileByteBuffer!=null;
+    }
+      
+    @Override
+    public Record get(int position) {
+        position = checkIndex(position);
+        Record record = this.recordType.createRecord();
+        this.fileByteBuffer.position(this.header_size+(position*this.recordType.getSize()));
+        this.fileByteBuffer.get(record.getBytes());
+        return record;
+    }
+
+    @Override
+    public Record get64(long position) {
+        position = checkIndex(position);
+        Record record = this.recordType.createRecord();
+        this.fileByteBuffer.position((int) (this.header_size+(position*this.recordType.getSize())));
+        this.fileByteBuffer.get(record.getBytes());
+        return record;
+    }
+
+    @Override
+    public int size() {
+        return (int) this.sz;
+    }
+
+    @Override
+    public long size64() {
+        return this.sz;
+    }
+
+    @Override
+    public Record set(int position, Record record) {
+        position = checkIndex(position);
+        this.fileByteBuffer.position((int) (this.header_size+(position*this.recordType.getSize())));
+        this.fileByteBuffer.put(record.getBytes());
+        return record;
+    }
+    
+    private int checkIndex(long index) {
+        if (this.fileByteBuffer == null) {
+            throw new IllegalStateException("Index not open");
+        }
+        if( index < 0 ) {
+            index = ((int)this.sz) + index;
+        }
+        if( index<0 || index>=this.sz) {
+            throw new IllegalArgumentException("Index out of range ("+index+")");
+        }
+        return (int) index;
+    }
+
+    @Override
+    public void add(int index, Record record) {
+        // TODO: implement add method
+        throw new UnsupportedOperationException();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.csv.CSVLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,216 @@
+<?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>_CSV_loading_parameters</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="charset" label="_Charset" type="string" mandatory="false" defaultValue="UTF-8" group="Basic">
+                    <description>Sets the String to use for null values for output.</description>
+                </field>
+                <field name="firstLineHeader" type="boolean" mandatory="false" defaultValue="true" group="Basic">
+                    <description>Set to true to use the first line of file as the header.</description>
+                </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" label="_Automatic_type_detection" type="boolean" mandatory="false" defaultValue="true" group="Basic">
+                    <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="Geometry" order="10">
+                    <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="pointColumnName" label="_Point_column_name" type="string" mandatory="false" defaultValue="geom" group="Geometry" order="20">
+                    <description>Name to set to the column of the Point geometry.</description>
+                </field>
+                <field name="point" type="string" label="_Point_columns" mandatory="false" defaultValue="" group="Geometry" order="30">
+                    <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 geometry attribute of type point to add to the table.</description>
+                </field>
+                <field name="geometry_column" label="_Geometry_column" type="string" mandatory="false" defaultValue="" group="Geometry" order="40">
+                    <description>Name of the geometry column (the geometry must be in WKT format).</description>
+                </field>        
+                <field name="GeometryType" label="_Geometry_type" type="integer" mandatory="false" defaultValue="-1" group="Geometry" order="50">
+                  <description>Geometry type</description>
+                  <availableValues>
+                      <value label="(Select an item)">-1</value>
+                      <value label="GEOMETRY">0</value>
+                      <value label="POINT">1</value>
+                      <value label="MULTIPOINT">7</value>
+                      <value label="CIRCLE">11</value>
+                      <value label="ARC">12</value>
+                      <value label="ELLIPSE">13</value>
+                      <value label="SPLINE">14</value>
+                      <value label="ELLIPTICARC">15</value>
+                      <value label="LINE">18</value>
+                      <value label="POLYGON">19</value>
+                      <value label="MULTILINE">21</value>
+                      <value label="MULTIPOLYGON">22</value>
+                      <value label="CIRCUMFERENCE">23</value>
+                      <value label="PERIELLIPSE">24</value>
+                      <value label="FILLEDSPLINE">25</value>
+                  </availableValues>
+                </field>
+                <field name="GeometrySubtype"  label="_Geometry_subtype" type="integer" mandatory="false" defaultValue="4" group="Geometry" order="60">
+                  <description>Geometry subtype</description>
+                  <availableValues>
+                      <value label="(Select an item)">4</value>
+                      <value label="2D">0</value>
+                      <value label="3D">1</value>
+                      <value label="2DM">2</value>
+                      <value label="3DM">3</value>
+                  </availableValues>
+                </field>
+                <field name="GeometryFormat"  type="string" mandatory="false" defaultValue="WKT" group="Geometry" order="70">
+                  <description>Format to use when write geometries in the file</description>
+                  <availableValues>
+                      <value label="Well Known Text">WKT</value>
+                      <value label="Well Known Binary in hexadecimal">WKB</value>
+                  </availableValues>
+                </field>
+                <field name="ignoreErrors" label="_Ignore_errors" type="boolean" mandatory="false" defaultValue="false" group="Basic">
+                    <description>Set to true to ignore errors during load of data.</description>
+                </field>
+                <field name="limit" type="integer" mandatory="false" defaultValue="-1" group="Advanced">
+                    <description>Limit the number of record to load of CSV file.</description>
+                </field>
+                <field name="includeMetadataInHeader" type="boolean" mandatory="false" defaultValue="true" group="Advanced">
+                    <description>If all the metadata has to be included in each header field.</description>
+                </field>
+            </fields>
+        </class>
+        <class name="CSVNewStoreParameters">
+            <description>Store the parameters need to create a csv file</description>
+      <extends>
+        <class>CSVStoreParameters</class>
+        <class namespace="dal" name="NewProviderParameters"/>
+      </extends>
+            <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="escapeCharacter" type="string" mandatory="false" defaultValue="" group="Advanced">
+                    <description>Sets the escape character of the format to the specified character</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>-->
+            </fields>
+        </class>
+    </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/pom.xml	(revision 46118)
@@ -0,0 +1,121 @@
+<?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.344</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>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.se</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+        <scope>test</scope>
+    </dependency>      
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.basicformats</artifactId>
+        <scope>compile</scope>
+    </dependency>
+
+<dependency>
+    <groupId>org.apache.commons</groupId>
+    <artifactId>commons-csv</artifactId>
+    <version>1.8</version>
+</dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!-- Skip test execution ? -->
+                    <skipTests>false</skipTests>
+                    <!-- Ignore test execution failure ? -->
+                    <testFailureIgnore>false</testFailureIgnore>
+                </configuration>
+            </plugin>
+        
+            <!-- Skip test compilation ? -->
+            <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>false</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,804 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+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.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.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.FeatureType.FeatureTypeChanged;
+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.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.FeatureStoreProviderServices;
+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.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.fmap.dal.store.dbf.utils.FieldFormatter;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dataTypes.CoercionException;
+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;
+import org.gvsig.tools.logger.FilteredLogger;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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 final String NAME = DataStore.DBASE_PROVIDER_NAME;
+    public static final String DESCRIPTION = "DBF file";
+
+    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 boolean loTengoEnUso;
+
+    private boolean allowDuplicatedFieldNames;
+    private FilteredLogger logger;
+    
+    protected FeatureType featureType;
+
+
+    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 {
+        this(
+                params,
+                storeServices,
+                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
+        );
+    }
+
+    protected DBFStoreProvider(DBFStoreParameters params,
+            DataStoreProviderServices storeServices, DynObject metadata)
+            throws InitializeException {
+        super(params, storeServices, metadata);
+        this.logger = new FilteredLogger(LOG, "DBFStoreProvider", -1);
+        this.logger.setInterval(2000);
+        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();
+        allowDuplicatedFieldNames = params.allowDuplicatedFieldNames();
+        this.dbfFile = new DbaseFile(theFile, charset, allowDuplicatedFieldNames);
+
+        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 this.dbfFile.getCodePageInt();
+        }
+        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);
+    }
+
+    protected void initResource(ResourceProvider resource,
+        DataStoreProviderServices storeServices){
+        dbfResource = resource;
+        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 | ValidateDataParametersException e) {
+            throw new ReadException(this.getName(), e);
+        }
+    }
+
+    protected FeatureProvider internalGetFeatureProviderByReference(
+            FeatureReferenceProviderServices reference, FeatureType featureType)
+            throws DataException {
+        return this.getFeatureProviderByIndex(
+                ((Number) 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 {
+            // TODO repasar el concepto de enUso de un recurso.
+            loTengoEnUso = true;
+            final FeatureStore theStore = this.getStoreServices().getFeatureStore();
+            resourceCloseRequest();
+            getResource().execute(new ResourceAction() {
+
+                public Object run() throws Exception {
+                    FeatureSet set = null;
+                    DisposableIterator iter = null;
+                    try {
+                        set = theStore.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, theStore.getDefaultFeatureType(),
+                                set.getSize());
+
+                        iter = set.fastIterator();
+                        while (iter.hasNext()) {
+                            Feature feature = (Feature) iter.next();
+                            writer.append(feature);
+                        }
+
+                        writer.end();
+                        loTengoEnUso = false;
+                        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 {
+                        loTengoEnUso = false;
+                        if (set != null) {
+                            set.dispose();
+                        }
+                        if (iter != null) {
+                            iter.dispose();
+                        }
+                    }
+                    return null;
+                }
+            });
+        } catch (ResourceExecuteException | ResourceException e) {
+            throw new PerformEditingException(NAME, 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;
+        FeatureType ft;
+        FeatureAttributeDescriptor[] atts;
+        while (ft_updated.hasNext()) {
+            item = (FeatureTypeChanged) ft_updated.next();
+            ft = item.getTarget();
+            atts = ft.getAttributeDescriptors();
+            for (FeatureAttributeDescriptor att : atts) {
+                if (att.getName().length() > MAX_FIELD_NAME_LENGTH) {
+                    if (resp.length() == 0) {
+                        resp = att.getName();
+                    } else {
+                        resp = resp + ", " + att.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 {
+        FeatureType defaultType = this.getTheFeatureType().getNotEditableCopy();
+        this.setFeatureType(defaultType);
+    }
+
+    private void setFeatureType(FeatureType ftype) {
+        FeatureStoreProviderServices store = this.getStoreServices();
+        List<FeatureType> ftypes = new ArrayList<>();
+        ftypes.add(ftype);
+        this.featureType = ftype;
+        store.setFeatureTypes(ftypes, ftype);
+    }
+        
+    protected EditableFeatureType getTheFeatureType() throws InitializeException {
+        try {
+            this.open();
+        } catch (DataException e) {
+            throw new InitializeException(this.getProviderName(), e);
+        }
+        EditableFeatureType featureType = (EditableFeatureType) getResource().execute(
+            new ResourceAction() {
+                public Object run() throws Exception {
+                    EditableFeatureType featureType = getStoreServices().createFeatureType(getName());
+                    featureType.setHasOID(true);
+                    dbfFile.getHeader().toFeatureType(
+                            featureType,
+                            getDBFParameters().handleDatesAsStrings()
+                    );
+                    return featureType;
+                }
+            }
+        );
+        return featureType;
+    }
+    
+    
+    protected void loadValue(FeatureProvider featureProvider, long rowIndex,
+            FeatureAttributeDescriptor descriptor) throws ReadException {
+
+        if (descriptor.getEvaluator() != null) {
+            // Nothing to do
+            return;
+        }
+
+        int dbfFieldIndex = this.dbfFile.getFieldIndex(descriptor.getName());
+
+        if (dbfFieldIndex < 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.
+            this.logger.warn("The requested field ("+descriptor.getName()+") does not exist in the DBF file. Assumed it's a new field in editing mode.");
+            return;
+        }
+
+        String value = null;
+        try {
+            value = this.dbfFile.getStringFieldValue(rowIndex, dbfFieldIndex);
+        } catch (DataException e) {
+            throw new ReadException(this.getName(), e);
+        }
+        value = value.trim();
+        FieldFormatter formatter = new FieldFormatter();
+        
+        int index = descriptor.getIndex();
+        Object defaultValue = descriptor.getDefaultValueCoerced();
+        
+        switch (descriptor.getType()) {
+            case DataTypes.STRING:
+                featureProvider.set(index, formatter.parseString(value, (String) defaultValue));
+                break;
+
+            case DataTypes.DECIMAL:
+                featureProvider.set(index, 
+                    formatter.parseDecimal(
+                        value, 
+                        descriptor.getMathContext(), 
+                        descriptor.getScale(),
+                        (BigDecimal) defaultValue
+                  )
+                );
+                break;
+
+            case DataTypes.DOUBLE:
+                featureProvider.set(index, formatter.parseDouble(value, (Double) defaultValue));
+                break;
+
+            case DataTypes.FLOAT:
+                featureProvider.set(index, formatter.parseFloat(value, (Float) defaultValue));
+                break;
+
+            case DataTypes.LONG:
+                featureProvider.set(index, formatter.parseLong(value, (Long) defaultValue));
+                break;
+
+            case DataTypes.INT:
+                featureProvider.set(index, formatter.parseInt(value, (Integer) defaultValue));
+                break;
+
+            case DataTypes.BYTE:
+                featureProvider.set(index, formatter.parseByte(value, (Byte) defaultValue));
+                break;
+
+            case DataTypes.BOOLEAN:
+                featureProvider.set(index, formatter.parseBoolean(value, (Boolean) defaultValue));
+                break;
+
+            case DataTypes.TIMESTAMP:
+                featureProvider.set(index, formatter.parseTimestamp(value, (java.sql.Timestamp) defaultValue));
+                break;
+                
+            case DataTypes.TIME:
+                featureProvider.set(index, formatter.parseTime(value, (java.sql.Time) defaultValue));
+                break;
+
+            case DataTypes.DATE:
+                featureProvider.set(index, formatter.parseDate(value, (java.sql.Date) defaultValue));
+                break;
+
+            default: {
+                    Object v;
+                    try {
+                        v = descriptor.getDataType().coerce(value);
+                    } catch (CoercionException ex) {
+                        v = defaultValue;
+                    }
+                    featureProvider.set(index, v);
+                }
+                break;
+        }
+    }
+
+    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) dbfFile.getRecordCount();
+            }
+        });
+    }
+
+    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();
+        // necessary when editing the file
+        this.getDBFParameters().setEffectiveEncoding(this.dbfFile.getCharsetName());
+    }
+
+    public void close() throws CloseException {
+        if( loTengoEnUso ) {
+            return;
+        }
+        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() {
+        if(allowDuplicatedFieldNames){
+            return false;
+        }
+        return this.dbfFile.isWritable();
+    }
+
+    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(index);
+        return featureProvider;
+    }
+
+    protected void initFeatureProviderByIndex(FeatureProvider featureProvider,
+            long index, FeatureType featureType) throws DataException {
+        featureProvider.setOID(index);
+    }
+
+    /**
+     *
+     * @param featureProvider
+     * @throws DataException
+     */
+    protected void loadFeatureProviderByIndex(FeatureProvider featureProvider)
+            throws DataException {
+
+        long index = ((Long) featureProvider.getOID());
+        int rec_count = this.dbfFile.getRecordCount();
+
+        if (index >= rec_count) {
+
+            ReadException rex = new ReadException(this.getName(),
+                    new ArrayIndexOutOfBoundsException(
+                            "Index of requested feature ("
+                            + index + ") is >= record count (" + rec_count + ")"));
+
+            LOG.info("Error while loading feature. ", rex);
+            throw rex;
+        }
+
+        for (FeatureAttributeDescriptor desc : featureProvider.getType()) {
+            this.loadValue(featureProvider, index, desc);
+        }
+    }
+
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+
+    public Object createNewOID() {
+        if (this.counterNewsOIDs < 0) {
+            try {
+                this.counterNewsOIDs = this.getFeatureCount();
+            } catch (DataException e) {
+                LOG.warn("Can't initialice counter for news OIDs.",e);
+            }
+
+        } else {
+            this.counterNewsOIDs++;
+        }
+        return 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;
+            }
+        });
+    }
+
+    public void resourceChanged(ResourceProvider resource) {
+        if (this.getStoreServices()!=null){
+            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;
+    }
+    
+    @Override
+    public void fixFeatureTypeFromParameters() {
+        FeatureStoreProviderServices store = this.getStoreServices();
+        try {
+            int sizeWithoutComputed = 0;
+            for (FeatureAttributeDescriptor featureAttributeDescriptor : store.getDefaultFeatureType()) {
+                if (featureAttributeDescriptor.isComputed()) {
+                    continue;
+                }
+                sizeWithoutComputed +=1;
+            }
+            if(this.featureType.size()!=sizeWithoutComputed) {
+                this.setFeatureType(featureType);
+            }
+        } catch (DataException ex) {
+            
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.DbaseCodepage;
+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 {
+
+		String charset = storeParameters.getEffectiveEncodingName();	
+		if (charset==null) {
+			// set a safe encoding in case none has been defined
+			charset = "UTF-8";
+		}
+		try {
+			myHeader = DbaseFileHeader.fromFeatureType(featureType, charset);
+		} catch (DataException e1) {
+			throw new WriteException(this.name, e1);
+		}
+
+		dbfFile = storeParameters.getDBFFile();
+		
+		// .cpg will be redundant if LDID was already set, but we still
+		// want to write it with the hopes of increasing the range of programs
+		// that will correctly interpret the charset
+		DbaseCodepage cpWriter = new DbaseCodepage(dbfFile);
+		cpWriter.write(charset);
+
+		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);
+			} 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()) {
+			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.344/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.344/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.344/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.344/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 46118)
@@ -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.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) {
+            if (featureType instanceof EditableFeatureType) {
+                ((EditableFeatureType) featureType).setHasOID(true);
+            } else {
+                EditableFeatureType editable = featureType.getEditable();
+                editable.setHasOID(true);
+                featureType = editable;
+            }
+            this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType);
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/DBFStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DBFStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DBFStoreProviderFactory.java	(revision 46118)
@@ -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.store.dbf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataParameters;
+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.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.dbf.utils.DbaseFile;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DBFStoreProviderFactory extends AbstractFeatureStoreProviderFactory  {
+
+    private static final Logger logger = LoggerFactory.getLogger(DBFStoreProviderFactory.class);
+
+	protected DBFStoreProviderFactory(String name, String description) {
+		super(name, description);
+	}
+        
+    @Override
+    public FeatureStoreProvider createProvider(
+            DataParameters parameters,
+            DataStoreProviderServices providerServices
+        ) throws InitializeException {
+        return new DBFStoreProvider((DBFStoreParameters) parameters, providerServices);
+    }
+    
+	public DynObject createParameters() {
+		return new DBFStoreParameters();
+	}
+
+	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 NO;
+	}
+
+	public int allowMultipleGeometryTypes() {
+		return NO;
+	}
+
+
+    public int allowEditableFeatureType() {
+        return YES;
+    }
+
+    public int useLocalIndexesCanImprovePerformance() {
+        return YES;
+    }
+    
+    @Override
+    public int isOptimalRecoverFeaturesByReference() {
+        return YES;
+    }
+    
+    public List<DataType> getSupportedDataTypes() {
+
+        DataTypesManager manager = ToolsLocator.getDataTypesManager();
+
+        ArrayList<DataType> resp = new ArrayList<DataType>();
+        resp.add(manager.get(DataTypes.STRING));
+        resp.add(manager.get(DataTypes.INT));
+        resp.add(manager.get(DataTypes.FLOAT));
+        resp.add(manager.get(DataTypes.DATE));
+        return resp;
+    }
+
+    public boolean allowsMandatoryAttributes() {
+        return false;
+    }
+
+    public boolean allowsPrimaryKeyAttributes() {
+        return false;
+    }
+
+	public int getMaxAttributeNameSize() {
+	    return DbaseFile.MAX_FIELD_NAME_LENGTH;
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.DataParameters;
+
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+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.dal.store.dbf.utils.DbaseCodepage;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DBFStoreParameters extends AbstractDataParameters implements
+		OpenFeatureStoreParameters, 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";
+    public static final String ALLOW_DUPLICATED_FIELD_NAMES = "allowDuplicatedFieldNames";
+
+    // We don't want to persist or show effective encoding in the store parameters dialog
+    // But we still need it to properly encode layers when editing!! 
+    private String effectiveEncoding = null;
+	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 getCPGFileName() {
+		return DbaseCodepage.getCpgFileName(getDBFFileName());
+	}
+	
+	public File getCPGFile() {
+		return new File(DbaseCodepage.getCpgFileName(getDBFFileName()));
+	}
+
+	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);
+	}
+
+	/**
+	 * The encoding actually used to read/write the dbf
+	 * 
+	 * @param encoding
+	 */
+	public String getEffectiveEncodingName() {
+		if (effectiveEncoding==null) {
+			return getEncodingName();
+		}
+		return effectiveEncoding.trim();
+	}
+	
+	/**
+	 * The encoding actually used to read/write the dbf
+	 * 
+	 * @param encoding
+	 */
+	public Charset getEffectiveEncoding() {
+		String name = getEffectiveEncodingName();
+		if (name==null) {
+			return null;
+		}
+		return Charset.forName(name);
+	}
+
+	public void setEncoding(String encoding) {
+		this.setEncoding(Charset.forName(encoding));
+    }
+
+	/**
+	 * The encoding actually used to read/write the dbf
+	 * 
+	 * @param encoding
+	 */
+	public void setEffectiveEncoding(String encoding) {
+		this.effectiveEncoding = encoding;
+    }
+
+    public boolean handleDatesAsStrings() {
+        Boolean x = (Boolean) getDynValue(HANDLE_DATES_AS_STRINGS);
+        return BooleanUtils.isTrue(x);
+    }
+
+    public boolean allowDuplicatedFieldNames() {
+        Boolean x = (Boolean) getDynValue(ALLOW_DUPLICATED_FIELD_NAMES);
+        return BooleanUtils.isTrue(x);
+    }
+
+    public void setEncoding(Charset charset) {
+        this.setDynValue(ENCODING_PARAMTER_NAME, charset.name());
+	}
+    
+	/**
+	 * The encoding actually used to read/write the dbf
+	 * 
+	 * @param encoding
+	 */
+    public void setEffectiveEncoding(Charset charset) {
+    	this.effectiveEncoding = charset.name();
+	}
+    
+    @Override
+    public DataParameters getCopy() {
+    	DataParameters copy = super.getCopy();
+    	if (copy instanceof DBFStoreParameters) {
+    		DBFStoreParameters dbfParams = (DBFStoreParameters) copy;
+    		dbfParams.setEffectiveEncoding(this.effectiveEncoding);
+    	}
+    	return copy;
+    }
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+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<>();
+
+		FileHelper.registerParametersDefinition(
+				DBFStoreParameters.PARAMETERS_DEFINITION_NAME,
+				DBFStoreParameters.class,
+				"DBFParameters.xml"
+		);
+		
+		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);
+		}
+		updateEncodingDefinition();
+		
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+				.getDataManager();
+
+		try {
+			if (!dataman.getStoreProviders().contains(DBFStoreProvider.NAME)) {
+			    dataman.registerStoreProviderFactory(new DBFStoreProviderFactory(DBFStoreProvider.NAME, DBFStoreProvider.DESCRIPTION));
+			}
+		} 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) );
+		
+		MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+		DynStruct dynStruct = metadataManager.getDefinition(DBFStoreProvider.METADATA_DEFINITION_NAME);
+		DynObjectValueItem[] metadataValues = dynStruct.getDynField("Encoding").getAvailableValues();
+		Set<DynObjectValueItem> metadataCharsetSets = new LinkedHashSet<DynObjectValueItem>(160);
+		metadataCharsetSets.addAll( Arrays.asList(metadataValues) );
+		
+		Map<String,Charset> charsets = Charset.availableCharsets();
+		Iterator<String> iter = charsets.keySet().iterator();
+		while (iter.hasNext()){
+			String value = (String) iter.next();
+			String label= value;
+			DynObjectValueItem item = new DynObjectValueItem(value, label);
+			charsetSet.add(item);
+			metadataCharsetSets.add(item);
+		}
+
+		parametersDefinition.getDynField("Encoding")
+			.setAvailableValues(
+					(DynObjectValueItem[]) charsetSet.toArray(new DynObjectValueItem[charsets.size()])
+			);
+		dynStruct.getDynField("Encoding")
+			.setAvailableValues(
+					(DynObjectValueItem[]) metadataCharsetSets.toArray(
+						new DynObjectValueItem[metadataCharsetSets.size()])
+			);
+
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/DbaseFieldDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DbaseFieldDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DbaseFieldDescriptor.java	(revision 46118)
@@ -0,0 +1,192 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.feature.exception.AttributeFeatureTypeNotSuportedException;
+import static org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter.BOOLEAN_SIZE;
+import static org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter.DATE_SIZE;
+import org.gvsig.tools.dataTypes.DataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class for holding the information assicated with a record.
+ */
+public class DbaseFieldDescriptor {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DbaseFieldDescriptor.class);
+
+    public static final char DBFTYPE_STRING = 'C';
+    public static final char DBFTYPE_NUMBER = 'N';
+    public static final char DBFTYPE_FLOAT = 'F';
+    public static final char DBFTYPE_DATE = 'D';
+    public static final char DBFTYPE_BOOLEAN = 'L';
+
+    public static final char DBFTYPE_LONG = 'l';
+    public static final char DBFTYPE_DOUBLE = 'O';
+    public static final char DBFTYPE_TIMESTAMP = '@';
+    public static final char DBFTYPE_AUTOINCREMENT = '+';
+
+    public static final int MAX_SIZE = 254;
+    public static final int MAX_NUMBER_SIZE = 20;
+
+    // Field Name
+    private String name;
+    private String name_trim;
+
+    // Field Type (C N L D F or M)
+    private char type;
+    // Field Data Address offset from the start of the record.
+    private int offsetInRecord;
+    // Length of the data in bytes
+    private int size;
+
+    private int scale;
+
+    public String getName() {
+        return this.name.trim();
+    }
+
+    public int getSize() {
+        return this.size;
+    }
+
+    public int getScale() {
+        return this.scale;
+    }
+
+    public int getPrecision() {
+        switch (this.getType()) {
+            case DBFTYPE_FLOAT:
+            case DBFTYPE_NUMBER:
+                if (this.scale < 1) {
+                    return this.size; // -XXX (ignoramos el signo)
+                } else {
+                    return this.size - 2; // -0.XXX (ignoramos el signo)
+                }
+        }
+        return 0;
+    }
+
+    public char getType() {
+        return this.type;
+    }
+
+    public int getOffsetInRecord() {
+        return this.offsetInRecord;
+    }
+
+    public String getName_trim() {
+        return name_trim;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setName_trim(String name_trim) {
+        this.name_trim = name_trim;
+    }
+
+    public void setType(char type) throws AttributeFeatureTypeNotSuportedException {
+        switch (type) {
+            case DBFTYPE_NUMBER:
+            case DBFTYPE_FLOAT:
+            case DBFTYPE_STRING:
+            case DBFTYPE_DATE:
+            case DBFTYPE_BOOLEAN:
+                this.type = type;
+                break;
+            case 'c':
+                this.type = DBFTYPE_STRING;
+                break;
+            case 'S':
+            case 's':
+                warn("Field type for " + name + " set to S which is flat out wrong people!, I am setting this to C, in the hopes you meant character.");
+                this.type = DBFTYPE_STRING;
+                break;
+            case 'd':
+                this.type = DBFTYPE_DATE;
+                break;
+            case 'f':
+                this.type = DBFTYPE_FLOAT;
+                break;
+            case 'n':
+                this.type = DBFTYPE_NUMBER;
+                break;
+            case 'l':
+                this.type = DBFTYPE_BOOLEAN;
+                break;
+            default:
+                throw new AttributeFeatureTypeNotSuportedException(name, type, "unknown", "DBF");
+        }
+    }
+
+    public void setOffsetInRecord(int offsetInRecord) {
+        this.offsetInRecord = offsetInRecord;
+    }
+
+    public void setSize(int size) {
+        switch (this.getType()) {
+            case DBFTYPE_FLOAT:
+            case DBFTYPE_NUMBER:
+                this.size = size;
+                break;
+
+            case DBFTYPE_STRING:
+                if (size > MAX_SIZE) {
+                    warn("Field Length for " + this.name + " set to " + size + " Which is longer than " + MAX_SIZE + " not consistent with dbase III");
+                }
+                this.size = size;
+                break;
+            case DBFTYPE_DATE:
+                this.size = DATE_SIZE;
+                break;
+            case DBFTYPE_BOOLEAN:
+                this.size = BOOLEAN_SIZE;
+                break;
+            default:
+                this.size = size;
+        }
+    }
+
+    public void setScale(int scale) {
+        if (scale == 0) {
+            this.scale = 0;
+            return;
+        }
+        switch (this.getType()) {
+            case DBFTYPE_FLOAT:
+            case DBFTYPE_NUMBER:
+                this.scale = this.getPrecision() - 1; //In the dbf's header do ignore scale
+                break;
+            default:
+                this.scale = 0;
+        }
+    }
+
+    private void warn(String msg) {
+        LOGGER.warn(msg);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/DbaseCodepage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DbaseCodepage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DbaseCodepage.java	(revision 46118)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2016 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.BufferedReader;
+import java.io.BufferedWriter;
+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.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.utils.StringUtilities;
+
+
+/**
+ * Reads and writes codepage (.cpg) files which are sometime
+ * used to externally specify the charset encoding of a DBF file.
+ * 
+ * @author Cesar Martinez Izquierdo <cmartinez@scolab.es>
+ *
+ */
+public class DbaseCodepage {
+	private File codePageFile;
+	private String charset = null;
+	
+	/**
+	 * Define the valid dbf Language driver IDs (equivalent to MSDOS code pages), which are used on the byte 29
+	 * of the DBF header to define the DBF codepage.
+	 * 
+	 * The equivalences of these charsets using Java NIO charset names are defined on the {@link #ldidJava} array
+	 * (so 0x01 is equivalent to IBM437, 0x02 to IBM850, etc)
+	 * 
+	 * See some other equivalences in:
+	 *  https://github.com/infused/dbf/blob/master/docs/supported_encodings.csv
+	 *  https://github.com/olemb/dbfread/blob/master/dbfread/codepages.py
+	 *  https://joinup.ec.europa.eu/svn/gvsig-desktop/trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dbf/DbfEncodings.java
+	 */
+	public static final short[] dbfLdid= {
+			0x01, 0x02, 0x03, 0x04,
+			0x08, 0x09, 0x0a, 0x0b,
+			0x0d, 0x0e, 0x0f, 0x10,
+			0x11, 0x12, 0x13, 0x14,
+			0x15, 0x16, 0x17, 0x18,
+			0x19, 0x1a, 0x1b, 0x1c,
+			0x1d, 0x1f, 0x22, 0x23,
+			0x24, 0x25, 0x26, 0x37,
+			0x40, 0x4d, 0x4e, 0x4f,
+			0x50, 0x57, 0x58, 0x59,
+			0x64, 0x65, 0x66, 0x67,
+			0x68, 0x69, 0x6a, 0x6b,
+			0x6c, 0x78, 0x79, 0x7a,
+			0x7b, 0x7c, 0x7d, 0x7d, 
+			0x86, 0x87,	0x88, 0xc8,
+			0xc9, 0xca,	0xcb, 0xcc};
+	
+	/**
+	 * Equivalent Java charset names to the code pages defined in {@link #dbfLdid}, using Java NIO Charset names
+	 * (which differ from JAVA IO names, see https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html)
+	 */
+	public static final String[] ldidJava = new String[] {
+			"IBM437", "IBM850", "windows-1252", "x-MacRoman",
+			"IBM865", "IBM437", "IBM850", "IBM437",
+			"IBM437", "IBM850", "IBM437", "IBM850",
+			"IBM437", "IBM850", "x-IBM943", "IBM850",
+			"IBM437", "IBM850", "IBM865", "IBM437",
+			"IBM437", "IBM850", "IBM437", "IBM863",
+			"IBM850", "IBM852", "IBM852", "IBM852",
+			"IBM860", "IBM850", "IBM866", "IBM850",
+			"IBM852", "x-mswin-936", "x-IBM949", "IBM950",
+			"x-IBM874", "windows-1252", "windows-1252", "windows-1252",
+			"IBM852", "IBM866", "IBM865", "IBM861",
+			// 0x68 and 0x69 are unofficial "Codepage 895 Kamenicky (Czech) MS-DOS" and "Codepage 620  Mazovia (Polish) MS-DOS",
+			// but there is no Java equivalent
+			// so we use CP437 which is the closest charset for the latin characters part
+			"IBM437", "IBM437", "x-IBM737", "IBM857",
+			"IBM863", "x-IBM950", "x-IBM949", "x-mswin-936",
+			"x-IBM942", "x-IBM874", "windows-1255", "windows-1256",
+			"x-IBM737", "IBM852", "IBM857", "windows-1250",
+			"windows-1251", "windows-1254",	"windows-1253", "windows-1257"};
+	
+	/**
+	 * Defines the dbfFile and constructs the name of the .cpg
+	 * file based on it
+	 * @param dbfFile
+	 */
+	public DbaseCodepage(File dbfFile) {
+		String cpfileName = getCpgFileName(dbfFile.getAbsolutePath()); 
+		this.codePageFile = new File(cpfileName);
+	}
+	
+	public static String getCpgFileName(String dbfFile) {
+		return FilenameUtils.removeExtension(dbfFile) + ".cpg";
+	}
+	
+	public String getCharset() {
+		return this.charset;
+	}
+	
+	public void setCharset(String charset) {
+		this.charset = charset;
+	}
+	
+	public static String cpg2java(String codePage) {
+		if (codePage.equals("UTF8")) {
+			return "UTF-8";
+		}
+		if (codePage.equals("SJIS")) {
+			return "Shift_JIS";
+		}
+		
+		if (StringUtils.isNumeric(codePage)) {
+			if (codePage.startsWith("8859") && codePage.length()>4) {
+				return "ISO-8859-" + codePage.substring(4); 
+			}
+			if (codePage.startsWith("125") && codePage.length()==4) {
+				return "windows-"+codePage;
+			}
+			if (codePage.length()==3) {
+				return "IBM-"+codePage;
+			}
+			for (int i=0; i<ldidJava.length; i++) {
+				if (ldidJava[i].contains(codePage)) {
+					return codePage;
+				}
+			}
+		}
+		if (codePage=="65001") {
+			return "UTF-8";
+		}
+		return codePage;
+	}
+	
+	public static String java2cpg(String charset) {
+		if (charset.startsWith("windows-") ||
+				charset.startsWith("ISO-8859") ||
+				charset.startsWith("IBM-") ||
+				charset.startsWith("x-IBM") ||
+				charset.startsWith("x-mswin-")) {
+			return charset.replaceAll("[^\\d]", "");
+		}
+		if (charset.equals("Shift_JIS")) {
+			return "SJIS";
+		}
+		// For the rest of the charsets, we'll directly write the Java NIO Charset
+		// Probably they will only be recognized by gvSIG, but it's better than nothing
+	    return charset;
+	}
+	
+	/**
+	 * Reads the charset from the codepage file, and updates the internal
+	 * charset definition
+	 * @return
+	 */
+	public String read() {
+		BufferedReader bufReader = null;
+		try {
+			InputStreamReader reader = new InputStreamReader(new FileInputStream(codePageFile), "ISO-8859-1");
+			bufReader = new BufferedReader(reader);
+			String cp = bufReader.readLine();
+			String charset = cpg2java(cp);
+			this.charset = charset;
+		} catch (FileNotFoundException e) {
+		} catch (IOException e) {
+		} finally {
+			if (bufReader!=null) {
+				try {
+					bufReader.close();
+				}
+				catch (Exception ex) {}
+			}
+		}
+		return getCharset();
+	}
+	
+	/**
+	 * Writes the specified charset to the codepage file, and updates
+	 * the internal charset definition
+	 * 
+	 * @param charset
+	 */
+	
+	public void write(String charset) {
+		this.charset = charset;
+		OutputStreamWriter writer = null;
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream(codePageFile), "ISO-8859-1");
+			writer.write(java2cpg(charset));
+		} catch (UnsupportedEncodingException e) {
+		} catch (FileNotFoundException e) {
+		} catch (IOException e) {
+		} finally {
+			if (writer!=null) {
+				try {
+					writer.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Gets the dbf Language driver IDs (code pages) corresponding
+	 * to the provided charset name
+	 *  
+	 * @return The LDID code, or 0x00 if no equivalent LDID code
+	 * was found for the provided charsetName
+	 */
+	public static int getLdid(String charsetName) {
+		for (int i=0; i<DbaseCodepage.ldidJava.length; i++) {
+			if (DbaseCodepage.ldidJava[i].equals(charsetName)) {
+				return DbaseCodepage.dbfLdid[i];
+			}
+		}
+		// default
+		return 0x00;
+	}
+	
+	/**
+	 * Gets the Java NIO charset name equivalent to the provided ldid
+	 * value. Gets null if the provided ldid is not recognised as
+	 * a valid code
+	 * 
+	 * @param ldid
+	 * @return
+	 */
+	public static String getCharsetName(int ldid) {
+		if (ldid!=0) {
+			for (int i=0; i<DbaseCodepage.dbfLdid.length; i++) {
+				if (DbaseCodepage.dbfLdid[i]==ldid) {
+					return DbaseCodepage.ldidJava[i];
+				}
+			}
+		}
+		return null;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/CoerceDateToDbfTimeAsString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CoerceDateToDbfTimeAsString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CoerceDateToDbfTimeAsString.java	(revision 46118)
@@ -0,0 +1,30 @@
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import java.util.Date;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CoerceDateToDbfTimeAsString  extends AbstractCoercion
+    {
+
+    private final FieldFormatter formater;
+    
+    public CoerceDateToDbfTimeAsString() {
+        this.formater = new FieldFormatter();
+    }
+
+    @Override
+    public Object coerce(Object value, CoercionContext context) throws CoercionException {
+        if( value instanceof Date ) {
+            String s = formater.formatTime((Date) value);
+            return s;
+        }
+        throw new CoercionException();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,944 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.Buffer;
+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.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.UnsupportedVersionException;
+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.AttributeFeatureTypeNotSuportedException;
+import org.gvsig.fmap.dal.feature.exception.UnknownDataTypeException;
+import org.gvsig.fmap.dal.store.dbf.DBFStoreProvider;
+import org.gvsig.fmap.dal.store.dbf.DuplicatedFieldNameException;
+import static org.gvsig.fmap.dal.store.dbf.utils.DbaseFieldDescriptor.DBFTYPE_BOOLEAN;
+import static org.gvsig.fmap.dal.store.dbf.utils.DbaseFieldDescriptor.DBFTYPE_DATE;
+import static org.gvsig.fmap.dal.store.dbf.utils.DbaseFieldDescriptor.DBFTYPE_FLOAT;
+import static org.gvsig.fmap.dal.store.dbf.utils.DbaseFieldDescriptor.DBFTYPE_NUMBER;
+import static org.gvsig.fmap.dal.store.dbf.utils.DbaseFieldDescriptor.DBFTYPE_STRING;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.utils.bigfile.BigByteBuffer2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter.TIMESTAMP_SIZE;
+import static org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter.TIME_SIZE;
+
+/**
+ * Class to represent the header of a Dbase III file.
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DbaseFileHeader {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(DbaseFileHeader.class);
+
+  // 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 int myLanguageID = 0x00;
+  /**
+   * Only considered when myLanguageID = 0x00;
+   */
+  private String charset = null;
+
+  private List<String> encodingSupportedByString = null;
+
+  private int origLanguageID = 0x00;
+
+  /**
+   * Headers must always be encoded using ASCII/ISO-8859-1, regardless the
+   * encoding of the records
+   */
+  private static final Charset HEADER_CHARSET = Charset.forName("ISO-8859-1");
+
+  /**
+   * DbaseFileHreader constructor comment.
+   */
+  public DbaseFileHeader() {
+    super();
+
+    encodingSupportedByString = new ArrayList<>();
+    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 fieldName DOCUMENT ME!
+   * @param fieldType DOCUMENT ME!
+   * @param fieldSize DOCUMENT ME!
+   * @param fieldPrecision
+   * @param fieldScale DOCUMENT ME!
+   * @throws
+   * org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeNotSuportedException
+   *
+   */
+  public void addColumn(String fieldName, char fieldType,
+          int fieldSize, int fieldPrecision, int fieldScale)
+          throws AttributeFeatureTypeNotSuportedException {
+//    if (fieldSize <= 0) {
+//      fieldSize = 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].setOffsetInRecord(tempLength);
+      tempLength = tempLength + myFieldDescriptions[i].getSize();
+      tempFieldDescriptors[i] = myFieldDescriptions[i];
+    }
+
+    tempFieldDescriptors[myFieldDescriptions.length] = new DbaseFieldDescriptor();
+    tempFieldDescriptors[myFieldDescriptions.length].setType(fieldType);
+    tempFieldDescriptors[myFieldDescriptions.length].setSize(fieldSize);
+    tempFieldDescriptors[myFieldDescriptions.length].setScale(fieldScale);
+    tempFieldDescriptors[myFieldDescriptions.length].setOffsetInRecord(tempLength);
+
+    // set the field name
+    String tempFieldName = fieldName;
+
+    if (tempFieldName == null) {
+      tempFieldName = "NoName";
+    }
+
+    if (tempFieldName.length() > DbaseFile.MAX_FIELD_NAME_LENGTH) {
+      tempFieldName = tempFieldName.substring(0, DbaseFile.MAX_FIELD_NAME_LENGTH);
+      warn("FieldName " + fieldName
+              + " is longer than " + DbaseFile.MAX_FIELD_NAME_LENGTH + " characters, truncating to "
+              + tempFieldName);
+    }
+
+    tempFieldDescriptors[myFieldDescriptions.length].setName(tempFieldName);
+//    tempFieldDescriptors[myFieldDescriptions.length].setName_trim(tempFieldName.trim());
+    tempFieldDescriptors[myFieldDescriptions.length].setName_trim(StringUtils.stripEnd(tempFieldName, null));
+
+    // the length of a record
+    tempLength += tempFieldDescriptors[myFieldDescriptions.length].getSize();
+
+    // set the new fields.
+    myFieldDescriptions = tempFieldDescriptors;
+    myHeaderLength = 33 + (32 * myFieldDescriptions.length);
+    myNumFields = myFieldDescriptions.length;
+    myRecordLength = tempLength;
+  }
+
+  /**
+   * Remove a column from this DbaseFileHeader.
+   *
+   * @param inFieldName
+   *
+   * @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].getName().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].setOffsetInRecord(tempLength);
+        tempLength += tempFieldDescriptors[j].getSize();
+
+        // 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;
+  }
+
+  private void warn(String inWarn) {
+    LOGGER.warn(inWarn);
+  }
+
+  /**
+   * Return the Field Descriptor for the given field.
+   *
+   * @param index, the index of the requeted field description
+   * @return the dbase field descriptor.
+   */
+  public DbaseFieldDescriptor getFieldDescription(int index) {
+    return myFieldDescriptions[index];
+  }
+
+  public DbaseFieldDescriptor getFieldDescription(String name) {
+    int index = this.getFieldIndex(name);
+    return myFieldDescriptions[index];
+  }
+
+  public int getFieldIndex(String name) {
+    for (int i = 0; i < myFieldDescriptions.length; i++) {
+      if (myFieldDescriptions[i].getName_trim()
+              .equalsIgnoreCase(StringUtils.stripEnd(name, null))) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Return the date this file was last updated.
+   *
+   * @return
+   */
+  public Date getLastUpdateDate() {
+    return myUpdateDate;
+  }
+
+  /**
+   * Return the number of fields in the records.
+   *
+   * @return
+   */
+  public int getNumFields() {
+    return myNumFields;
+  }
+
+  /**
+   * Return the number of records in the file
+   *
+   * @return
+   */
+  public int getNumRecords() {
+    return myNumRecords;
+  }
+
+  /**
+   * Return the length of the records in bytes.
+   *
+   * @return
+   */
+  public int getRecordLength() {
+    return myRecordLength;
+  }
+
+  /**
+   * Return the length of the header
+   *
+   * @return
+   */
+  public int getHeaderLength() {
+    return myHeaderLength;
+  }
+
+  /**
+   * Read the header data from the DBF file.
+   *
+   * @param in
+   * @param charsName
+   * @param allowDuplicatedFieldNames
+   * @throws UnsupportedVersionException
+   * @throws AttributeFeatureTypeNotSuportedException
+   *
+   */
+  public void read(BigByteBuffer2 in, String charsName, boolean allowDuplicatedFieldNames)
+          throws UnsupportedVersionException, 
+            AttributeFeatureTypeNotSuportedException {
+    // 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);
+
+    // read the language bit (LDID) 
+    in.position(29);
+    origLanguageID = byteAsUnsigned(in.get());
+    if (charsName != null) {
+      // ignore the language bit, use the provided charset name
+      myLanguageID = DbaseCodepage.getLdid(charsName);
+      this.charset = charsName;
+    } else {
+      // use the read the language bit
+      myLanguageID = origLanguageID;
+      charsName = getCharsetName();
+    }
+
+    // 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;
+
+    List fieldNames = new ArrayList<>();
+
+    // FIXME: should field names be always read using ISO8859-1??
+    for (int i = 0; i < myNumFields; i++) {
+      myFieldDescriptions[i] = new DbaseFieldDescriptor();
+
+      // read the field name
+      byte[] buffer = new byte[11];
+      in.get(buffer);
+      String fieldName;
+      fieldName = new String(buffer, HEADER_CHARSET);
+
+      if (allowDuplicatedFieldNames) {
+        fieldName = getUniqueFieldName(fieldName, fieldNames);
+      }
+      fieldNames.add(fieldName);
+
+      myFieldDescriptions[i].setName(fieldName);
+
+      myFieldDescriptions[i].setName_trim(myFieldDescriptions[i].getName().trim());
+
+      // read the field type
+      myFieldDescriptions[i].setType((char) in.get());
+
+      // read the field data address, offset from the start of the record.
+      myFieldDescriptions[i].setOffsetInRecord(in.getInt());
+
+      // read the field length in bytes
+      int tempLength = in.get();
+
+      if (tempLength < 0) {
+        tempLength = tempLength + 256;
+      }
+
+      myFieldDescriptions[i].setSize(tempLength);
+
+      // read the field decimal count in bytes
+      myFieldDescriptions[i].setScale(in.get());
+
+      myFieldDescriptions[i].setOffsetInRecord(fieldOffset);
+      
+      fieldOffset += tempLength;
+
+      // 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
+   */
+  public void setNumRecords(int inNumRecords) {
+    myNumRecords = inNumRecords;
+  }
+
+  /**
+   * Returns the value of the unsigned byte as a short Bytes are always signed
+   * in Java, so if we are reading a C unsigned byte with value > 128, it will
+   * appear as a negative value.
+   *
+   * In this case, we need to get the original unsigned value and return it as
+   * short or int, as byte will never correctly store the value in Java.
+   *
+   * @return
+   */
+  private int byteAsUnsigned(byte b) {
+    int i;
+    if (b < 0) {
+      i = b & 0xFF;
+    } else {
+      i = b;
+    }
+    return i;
+  }
+
+  /**
+   * Gets the Language driver IDs (code page) defined on the file header (or
+   * guessed from the provided charset)
+   *
+   * Some examples: 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
+   *
+   * See the java equivalences in
+   * {@link DbaseCodepage#dbfLdid} & {@link DbaseCodepage#ldidJava} objects.
+   *
+   * See some others here:
+   * https://github.com/infused/dbf/blob/master/docs/supported_encodings.csv
+   *
+   * @return
+   */
+  public int getLanguageID() {
+
+    return myLanguageID;
+  }
+
+  /**
+   * 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 write(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
+    ((Buffer) buffer).position(((Buffer) buffer).position() + 17);
+
+    // write the language id
+    buffer.put((byte) getLanguageID());
+
+    // write the reserved bytes in the header		
+    ((Buffer) buffer).position(((Buffer) buffer).position() + 2);
+
+    // 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].getName().length() > j) {
+            buffer.put((byte) myFieldDescriptions[i].getName().charAt(j));
+          } else {
+            buffer.put((byte) 0);
+          }
+        }
+
+        // write the field type
+        buffer.put((byte) myFieldDescriptions[i].getType());
+
+        // // write the field data address, offset from the start of the
+        // record.
+        buffer.putInt(tempOffset);
+        tempOffset += myFieldDescriptions[i].getSize();
+
+        // write the length of the field.
+        buffer.put((byte) myFieldDescriptions[i].getSize());
+
+        // write the decimal count.
+        buffer.put((byte) myFieldDescriptions[i].getScale());
+
+        // write the reserved bytes.
+        // for (in j=0; jj<14; j++) out.writeByteLE(0);
+        ((Buffer) buffer).position(((Buffer) buffer).position() + 14);
+      }
+    }
+    // write the end of the field definitions marker
+    buffer.put((byte) 0x0D);
+
+    ((Buffer) buffer).position(0);
+
+    int r = buffer.remaining();
+
+    while ((r -= out.write(buffer)) > 0) {
+      // do nothing
+    }
+  }
+
+  public String getCharsetName() {
+    return getCharsetName(getLanguageID());
+  }
+
+  public String getCharsetName(int ldid) {
+    if (ldid != 0) {
+      charset = DbaseCodepage.getCharsetName(ldid);
+    }
+    if (charset != null) {
+      // use charset otherwise
+      return charset;
+    }
+    // default
+    return "ISO-8859-1";
+  }
+
+  public String getOriginalCharset() {
+    return getCharsetName(this.origLanguageID);
+  }
+
+  public String mappingEncoding(String dbfEnconding) {
+    if (encodingSupportedByString.contains(dbfEnconding)) {
+      return dbfEnconding;
+    } else {
+      return "UTF-8";
+    }
+  }
+
+  private String getUniqueFieldName(String fieldName, List fieldNames) {
+
+    int index = 0;
+    String tempFieldName = fieldName;
+    while (fieldNames.contains(tempFieldName) && index < 1000) {
+      index++;
+      String sufix = String.valueOf(index);
+      tempFieldName = tempFieldName.substring(0, DbaseFile.MAX_FIELD_NAME_LENGTH - sufix.length()) + sufix;
+    }
+    if (index >= 1000) {
+      throw new RuntimeException("Can't fix duplicated name for field '" + fieldName + "'.");
+    }
+    return tempFieldName;
+  }
+
+  public EditableFeatureType toFeatureType(EditableFeatureType featureType, boolean handleDatesAsStrings) throws DataException {
+    featureType.setHasOID(true);
+
+    for (DbaseFieldDescriptor dbfattr : this.myFieldDescriptions) {
+      if (featureType.get(dbfattr.getName()) != null) {
+        throw new DuplicatedFieldNameException(dbfattr.getName());
+      }
+      EditableFeatureAttributeDescriptor attr;
+      switch (dbfattr.getType()) {
+        case DBFTYPE_BOOLEAN:
+          attr = featureType.add(dbfattr.getName(), DataTypes.BOOLEAN);
+          attr.setSize(0);
+          attr.setDefaultValue(null);
+          attr.setAllowNull(true);
+          break;
+        case DBFTYPE_FLOAT:
+          if (dbfattr.getScale()==-1 || dbfattr.getScale() > 0) {
+            if (dbfattr.getSize() > DataType.DOUBLE_MAX_PRECISION+3) {
+              attr = featureType.add(dbfattr.getName(),
+                      DataTypes.DECIMAL, dbfattr.getSize());
+              attr.setScale(DataType.SCALE_NONE);
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+
+            } else if (dbfattr.getSize() > DataType.FLOAT_MAX_PRECISION+3) {
+              attr = featureType.add(dbfattr.getName(),
+                      DataTypes.DOUBLE, dbfattr.getSize());
+              attr.setScale(dbfattr.getScale());
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else {
+              attr = featureType.add(dbfattr.getName(),
+                      DataTypes.FLOAT, dbfattr.getSize());
+              attr.setScale(dbfattr.getScale());
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            }
+          } else {
+            if (dbfattr.getPrecision() > DataType.LONG_MAX_PRECISION) {
+              attr = featureType.add(dbfattr.getName(),
+                      DataTypes.DECIMAL, dbfattr.getSize());
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(DataType.SCALE_NONE);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else if (dbfattr.getPrecision() > DataType.INT_MAX_PRECISION) {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.LONG
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else if (dbfattr.getPrecision() > DataType.BYTE_MAX_PRECISION) {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.INT
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.DECIMAL
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            }
+          }
+          break;
+        case DBFTYPE_NUMBER:
+          if (dbfattr.getScale()==-1 || dbfattr.getScale() > 0) {
+            attr = featureType.add(dbfattr.getName(),
+                    DataTypes.DECIMAL, dbfattr.getSize());
+            attr.setPrecision(dbfattr.getPrecision());
+            attr.setScale(DataType.SCALE_NONE);
+            attr.setDefaultValue(null);
+            attr.setAllowNull(true);
+          } else {
+            if (dbfattr.getPrecision() > DataType.LONG_MAX_PRECISION) {
+              attr = featureType.add(dbfattr.getName(),
+                      DataTypes.DECIMAL, dbfattr.getSize());
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(DataType.SCALE_NONE);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else if (dbfattr.getPrecision() > DataType.INT_MAX_PRECISION) {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.LONG
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else if (dbfattr.getPrecision() > DataType.BYTE_MAX_PRECISION) {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.INT
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            } else {
+              attr = featureType.add(
+                      dbfattr.getName(),
+                      DataTypes.DECIMAL
+              );
+              attr.setPrecision(dbfattr.getPrecision());
+              attr.setScale(0);
+              attr.setDefaultValue(null);
+              attr.setAllowNull(true);
+            }
+          }
+          break;
+        case DBFTYPE_STRING:
+          attr = featureType.add(dbfattr.getName(),
+                  DataTypes.STRING, dbfattr.getSize());
+          attr.setDefaultValue(null);
+          attr.setAllowNull(true);
+          if (dbfattr.getSize() == TIMESTAMP_SIZE) {
+            try {
+              DataType dataType = ToolsLocator.getDataTypesManager().get(DataTypes.STRING).clone();
+              dataType.addCoercion(new CoerceDateToDbfTimestampAsString());
+              attr.setDataType(dataType);
+            } catch (Exception ex) {
+              // Do nothing
+            }
+          } else if (dbfattr.getSize() == TIME_SIZE) {
+            try {
+              DataType dataType = ToolsLocator.getDataTypesManager().get(DataTypes.STRING).clone();
+              dataType.addCoercion(new CoerceDateToDbfTimeAsString());
+              attr.setDataType(dataType);
+            } catch (Exception ex) {
+              // Do nothing
+            }
+          }
+          break;
+        case DBFTYPE_DATE:
+          if (handleDatesAsStrings) {
+            attr = featureType.add(dbfattr.getName(),
+                    DataTypes.STRING, dbfattr.getSize());
+            attr.setDefaultValue(null);
+            attr.setAllowNull(true);
+          } else {
+            attr = featureType.add(dbfattr.getName(),
+                    DataTypes.DATE
+            );
+            attr.setDefaultValue(null);
+            attr.setAllowNull(true);
+          }
+          break;
+        default:
+          throw new UnknownDataTypeException(
+                  dbfattr.getName(), String.valueOf(dbfattr.getType()),
+                  DBFStoreProvider.NAME
+          );
+      }
+      attr.setDisplaySize(dbfattr.getSize());
+    }
+    return featureType;
+  }
+
+  public static DbaseFileHeader fromFeatureType(FeatureType featureType)
+          throws DataException {
+    return fromFeatureType(featureType, null);
+  }
+
+  public static DbaseFileHeader fromFeatureType(FeatureType featureType, String charsetName)
+          throws DataException {
+    DbaseFileHeader header = new DbaseFileHeader();
+    Iterator iterator = featureType.iterator();
+    header.myLanguageID = DbaseCodepage.getLdid(charsetName);
+    header.charset = charsetName;
+    while (iterator.hasNext()) {
+      FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) iterator.next();
+
+      if (descriptor.isComputed()) {
+        continue;
+      }
+      int type = descriptor.getType();
+      String colName = descriptor.getName();
+      if (colName.length() > DbaseFile.MAX_FIELD_NAME_LENGTH) {      
+        throw new FieldNameTooLongException("DBF file", colName);        
+      }
+
+      int size = descriptor.getSize();
+      int scale = descriptor.getScale();
+      int precision = descriptor.getPrecision();
+      int displaySize = descriptor.getDisplaySize();
+      switch (type) {
+        case DataTypes.DECIMAL:
+          if( displaySize<1 ) {
+            if( precision < 0) {
+              displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+            } else {
+              displaySize = precision + 3;
+            }
+          }
+          header.addColumn(colName, DBFTYPE_NUMBER, displaySize, precision, scale);
+          break;
+        case DataTypes.DOUBLE:
+          if( displaySize<1 ) {
+            displaySize = DataType.DOUBLE_MAX_PRECISION+3;
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_FLOAT, displaySize, precision, scale);
+          break;
+        case DataTypes.FLOAT:
+          if( displaySize<1 ) {
+            displaySize = DataType.FLOAT_MAX_PRECISION+3;
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_FLOAT, displaySize, precision, scale);
+          break;
+        case DataTypes.INT:
+          if( displaySize<1 ) {
+            if( precision>=DataType.INT_MAX_PRECISION ) {
+              displaySize = precision;
+            } else {
+              displaySize = precision + 1;
+            }
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_NUMBER, displaySize, precision, scale);
+          break;
+        case DataTypes.LONG:
+          if( displaySize<1 ) {
+            if( precision>=DataType.LONG_MAX_PRECISION ) {
+              displaySize = precision;
+            } else {
+              displaySize = precision + 1;
+            }
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_NUMBER, displaySize, precision, scale);
+          break;
+        case DataTypes.DATE:
+          header.addColumn(colName, DBFTYPE_DATE, FieldFormatter.DATE_SIZE, 0, 0);
+          break;
+        case DataTypes.TIME:
+          header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIME_SIZE, 0, 0);
+          break;
+        case DataTypes.TIMESTAMP:
+          header.addColumn(colName, DBFTYPE_STRING, FieldFormatter.TIMESTAMP_SIZE, 0, 0);
+          break;
+        case DataTypes.BOOLEAN:
+          header.addColumn(colName, DBFTYPE_BOOLEAN, 1, 0, 0);
+          break;
+        case DataTypes.STRING:
+          if( displaySize<1 ) {
+            displaySize = size;
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_STRING, displaySize, 0, 0);
+          break;
+        case DataTypes.BYTE:
+          if( displaySize<1 ) {
+            if( precision>=DataType.BYTE_MAX_PRECISION ) {
+              displaySize = precision;
+            } else {
+              displaySize = precision + 1;
+            }
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_NUMBER_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_NUMBER_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_NUMBER,displaySize, precision, scale);
+          break;
+        default:
+          // Si no sabemos lo que es intentaremos guardarlo como un string
+          if( displaySize<1 ) {
+            if( size < 20 ) {
+              displaySize = 20;
+            } else {
+              displaySize = size;
+            }
+          }
+          if( displaySize>DbaseFieldDescriptor.MAX_SIZE ) {
+            displaySize = DbaseFieldDescriptor.MAX_SIZE;
+          }
+          header.addColumn(colName, DBFTYPE_STRING, displaySize, 0, 0);
+          break;
+      }
+    }
+    return header;
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/FieldFormatter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/FieldFormatter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/FieldFormatter.java	(revision 46118)
@@ -0,0 +1,391 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.math.MathContext;
+import java.nio.BufferOverflowException;
+import java.sql.Timestamp;
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.tools.logger.FilteredLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FieldFormatter {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(FieldFormatter.class);
+
+  public static final int TIME_SIZE = 6;
+  public static final int TIMESTAMP_SIZE = 14;
+  public static final int DATE_SIZE = 8;
+  public static final int BOOLEAN_SIZE = 1;
+
+  private static final SimpleDateFormat YYYYMMDD_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
+  private static final SimpleDateFormat HHMMSS_DATE_FORMAT = new SimpleDateFormat("HHmmss");
+  private static final SimpleDateFormat YYYYMMDDHHMMSS_DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
+
+  private static final FieldPosition FIELDPOSITION = new FieldPosition(NumberFormat.INTEGER_FIELD);
+
+  private static final int MAXCHARS = 255;
+
+  private StringBuffer buffer;
+  private NumberFormat numberFormatter;
+  private FilteredLogger logger;
+
+  public FieldFormatter() {
+
+  }
+
+  private StringBuffer getBuffer() {
+    if (this.buffer == null) {
+      this.buffer = new StringBuffer(MAXCHARS);
+    }
+    return this.buffer;
+  }
+
+  private NumberFormat getNumberFormatter() {
+    if (this.numberFormatter == null) {
+      this.numberFormatter = NumberFormat.getNumberInstance(Locale.US);
+      // Avoid grouping on number format
+      this.numberFormatter.setGroupingUsed(false);
+    }
+    return this.numberFormatter;
+  }
+
+  private FilteredLogger getLogger() {
+    if (this.logger == null) {
+      this.logger = new FilteredLogger(LOGGER, "DBFFiledFormatter", -1);
+      this.logger.setInterval(2000);
+    }
+    return this.logger;
+  }
+
+  public String format(String s, int size) {
+    if (s.length() > size) {
+      return s.substring(0, size);
+    } else {
+      return s;
+    }
+  }
+
+  public String format(boolean b) {
+    return b ? "T" : "F";
+  }
+
+  public String formatDate(Date date) {
+    if (date == null) {
+      //      yyyyMMdd
+      return "        ";
+    }
+    StringBuffer buf = this.getBuffer();
+    buf.setLength(0); // Fast clear of buffer
+    YYYYMMDD_DATE_FORMAT.format(date, buf, FIELDPOSITION);
+    return buf.toString();
+  }
+
+  public String formatTime(Date date) {
+    if (date == null) {
+      //      HHMMSS
+      return "      ";
+    }
+    StringBuffer buf = this.getBuffer();
+    buf.setLength(0); // Fast clear of buffer
+    HHMMSS_DATE_FORMAT.format(date, buf, FIELDPOSITION);
+    return buf.toString();
+  }
+
+  public String formatTimestamp(Date date) {
+    if (date == null) {
+      //      YYYYMMDDHHMMSS
+      return "              ";
+    }
+    StringBuffer buf = this.getBuffer();
+    buf.setLength(0); // Fast clear of buffer
+    YYYYMMDDHHMMSS_DATE_FORMAT.format(date, buf, FIELDPOSITION);
+    return buf.toString();
+  }
+
+  public String formatTimestamp(Timestamp timestamp) {
+    if (timestamp == null) {
+      //      YYYYMMDDHHMMSS
+      return "              ";
+    }
+    StringBuffer buf = this.getBuffer();
+    buf.setLength(0); // Fast clear of buffer
+    YYYYMMDDHHMMSS_DATE_FORMAT.format(timestamp, buf, FIELDPOSITION);
+    return buf.toString();
+  }
+
+  public String format(byte n) {
+    StringBuffer buf = this.getBuffer();
+    NumberFormat nf = this.getNumberFormatter();
+
+    buf.setLength(0); // Fast clear of buffer
+    nf.setMaximumFractionDigits(0);
+    nf.setMinimumFractionDigits(0);
+    nf.format(n, buf, FIELDPOSITION);
+    String s = buf.toString();
+    if (s.length() > 2) {
+      throw new BufferOverflowException();
+    }
+    return s;
+  }
+
+  public String format(int n, int size) {
+    StringBuffer buf = this.getBuffer();
+    NumberFormat nf = this.getNumberFormatter();
+
+    buf.setLength(0); // Fast clear of buffer
+    nf.setMaximumFractionDigits(0);
+    nf.setMinimumFractionDigits(0);
+    nf.format(n, buf, FIELDPOSITION);
+    String s = buf.toString();
+    if (s.length() > size) {
+      throw new BufferOverflowException();
+    }
+    return s;
+  }
+
+  public String format(long n, int size) {
+    StringBuffer buf = this.getBuffer();
+    NumberFormat nf = this.getNumberFormatter();
+
+    buf.setLength(0); // Fast clear of buffer
+    nf.setMaximumFractionDigits(0);
+    nf.setMinimumFractionDigits(0);
+    nf.format(n, buf, FIELDPOSITION);
+    String s = buf.toString();
+    if (s.length() > size) {
+      throw new BufferOverflowException();
+    }
+    return s;
+  }
+
+  public String format(BigDecimal n, int size) {
+    String s = n.toPlainString();
+    if (s.length() > size) {
+        int index = s.indexOf('.');
+        if(index < 0 || index >= size ) {
+          throw new BufferOverflowException();
+        }
+        if(index == size-1 ) {
+            s = s.substring(0, size-1);
+        } else {
+            s = s.substring(0, size);
+        }
+    }
+    return s;
+  }
+
+  public String format(double n, int size, int scale) {
+    String s = String.format(Locale.ENGLISH, "%f", n);
+    if (s.length() > size) {
+        int index = s.indexOf('.');
+        if(index < 0 || index >= size ) {
+          throw new BufferOverflowException();
+        }
+        if(index == size-1 ) {
+            s = s.substring(0, size-1);
+        } else {
+            s = s.substring(0, size);
+        }
+    }
+    return s;
+  }
+
+  public String format(float n, int size, int scale) {
+    String s = String.format(Locale.ENGLISH, "%f", n);
+    if (s.length() > size) {
+        int index = s.indexOf('.');
+        if(index < 0 || index >= size ) {
+          throw new BufferOverflowException();
+        }
+        if(index == size-1 ) {
+            s = s.substring(0, size-1);
+        } else {
+            s = s.substring(0, size);
+        }
+    }
+    return s;
+  }
+
+  public String parseString(String value, String defaultValue) {
+    if (value == null || value.length() == 0) {
+      return defaultValue;
+    }
+    return value;
+  }
+
+  public BigDecimal parseDecimal(String value, MathContext context, int scale, BigDecimal defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      BigDecimal x = new BigDecimal(value, context);
+      if( scale>=0) {
+        x = x.setScale(scale, context.getRoundingMode());
+      }
+      return x;
+    } catch (Exception ex) {
+      if (!StringUtils.containsOnly(value, "*")) {
+        this.getLogger().warn("Can't parse value '" + value + "' as BigDecimal.", ex);
+      }
+      return defaultValue;
+    }
+  }
+
+  public Double parseDouble(String value, Double defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Double x = Double.parseDouble(value);
+      return x;
+    } catch (Exception ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as double.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Float parseFloat(String value, Float defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Float x = Float.parseFloat(value);
+      return x;
+    } catch (Exception ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as float.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Integer parseInt(String value, Integer defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      int x = Integer.parseInt(value);
+      return x;
+    } catch (Exception ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as int.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Long parseLong(String value, Long defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Long x = new Long(value);
+      return x;
+    } catch (Exception ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as long.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Byte parseByte(String value, Byte defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      byte x = Byte.parseByte(value);
+      return x;
+    } catch (Exception ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as byte.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Boolean parseBoolean(String value, Boolean defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    switch (value.trim().charAt(0)) {
+      case 'T':
+      case 't':
+        return true;
+      case 'F':
+      case 'f':
+        return false;
+      case ' ':
+        return null;
+      default:
+        return defaultValue;
+    }
+  }
+
+  public Date parseTimestamp(String value, Date defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Date x = YYYYMMDDHHMMSS_DATE_FORMAT.parse(value);
+      return new java.sql.Timestamp(x.getTime());
+    } catch (ParseException ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as timestamp.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Date parseTime(String value, Date defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Date x = HHMMSS_DATE_FORMAT.parse(value);
+      return new java.sql.Time(x.getTime());
+    } catch (ParseException ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as time.", ex);
+      return defaultValue;
+    }
+  }
+
+  public Date parseDate(String value, Date defaultValue) {
+    if (StringUtils.isBlank(value)) {
+      return defaultValue;
+    }
+    try {
+      Date x = YYYYMMDD_DATE_FORMAT.parse(value);
+      return new java.sql.Date(x.getTime());
+    } catch (ParseException ex) {
+      this.getLogger().warn("Can't parse value '" + value + "' as date.", ex);
+      return defaultValue;
+    }
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.store.dbf.utils;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.nio.Buffer;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.util.Date;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+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 final DbaseFileHeader header;
+    private FieldFormatter formatter = new FieldFormatter();
+    private FileChannel channel;
+    private ByteBuffer buffer;
+    private boolean headDrity = false;
+    private ByteBuffer blank;
+    private int blankSize;
+
+    private Charset charset;
+
+    /**
+     * 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.
+     * @param isNew
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     *
+     *
+     */
+    public DbaseFileWriter(DbaseFileHeader header, FileChannel out,
+            boolean isNew) throws InitializeException {
+        this.header = header;
+        this.channel = out;
+        this.headDrity = isNew;
+        this.setCharset(Charset.forName(header.mappingEncoding(header.getCharsetName())));
+
+        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) 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.write(channel);
+        } catch (IOException e) {
+            throw new WriteException("DBF Writer", e);
+        }
+    }
+
+    /**
+     * Write a single dbase record.
+     *
+     * @param feature
+     * @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) 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.isComputed()) {
+                    continue;
+                }
+
+                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;
+                }
+                encodeField(fad, feature);
+            }
+        } 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 feature
+     * @param numReg
+     * @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 void encodeField(FeatureAttributeDescriptor attr, Feature feature) throws java.io.UnsupportedEncodingException, UnsupportedEncodingException {
+        DbaseFieldDescriptor descriptor = this.header.getFieldDescription(attr.getName());
+
+        int type = attr.getType();
+        final int fieldLen = descriptor.getSize();
+        String fieldString;
+
+//        if( buffer.position()!=descriptor.getOffsetInRecord() ) {
+//            throw new RuntimeException("Encoding field '"+descriptor.getName()+"' found an incorrect offset.");
+//        }
+        if( feature.isNull(attr.getIndex()) ) {
+            safeEncode(" ", fieldLen, false);
+            return;
+        }
+        if (DataTypes.BOOLEAN == type) {
+            boolean b = feature.getBoolean(attr.getIndex());
+            safeEncode(b? "T":"F", 1, true);
+
+        } else if (DataTypes.TIME == type) {
+            Date date = feature.getTime(attr.getIndex());
+            fieldString = formatter.formatTime(date);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.TIMESTAMP == type) {
+            Date date = feature.getTimestamp(attr.getIndex());
+            fieldString = formatter.formatTimestamp(date);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.DATE == type) {
+            Date date = feature.getDate(attr.getIndex());
+            fieldString = formatter.formatDate(date);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.DECIMAL == type) {
+            BigDecimal n = feature.getDecimal(attr.getIndex());
+            fieldString = formatter.format(n, fieldLen);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.DOUBLE == type) {
+            double n = feature.getDouble(attr.getIndex());
+            fieldString = formatter.format(n, fieldLen, descriptor.getScale());
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.FLOAT == type) {
+            float n = feature.getFloat(attr.getIndex());
+            fieldString = formatter.format(n, fieldLen, descriptor.getScale());
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.LONG == type) {
+            long l = feature.getLong(attr.getIndex());
+            fieldString = formatter.format(l, fieldLen);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.INT == type) {
+            int n = feature.getInt(attr.getIndex());
+            fieldString = formatter.format(n, fieldLen);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.BYTE == type) {
+            int n = feature.getInt(attr.getIndex());
+            fieldString = formatter.format(n, fieldLen);
+            safeEncode(fieldString, fieldLen, false);
+
+        } else if (DataTypes.STRING == type) {
+            String s = feature.getString(attr.getIndex());
+            safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
+
+        } else {
+            // Si no conocemos el tipo intentamos guardarlo como un string
+            String s = feature.getString(attr.getIndex());
+            safeEncode(StringUtils.defaultIfEmpty(s, ""), fieldLen, true);
+
+        }
+
+    }
+
+    /**
+     * Returns a safely padded (and potentially truncated) string
+     *
+     * This may truncate some record, but it is required to ensure that the
+     * field limit is not overflowed when using variable-length charsets such as
+     * UTF-8.
+     *
+     * @throws UnsupportedEncodingException
+     */
+    private void safeEncode(String in, int limit, boolean rightPadding) throws UnsupportedEncodingException {
+        try {
+            byte[] encodedString = in.getBytes(this.charset);
+            if (encodedString.length > limit) {
+                // too long, truncating
+                /*
+    			 * The block code bellow is equivalent to this simple code
+    			 * fragment:
+
+    		if (rightPadding) {
+    			in = in.substring(0, in.length()-1);
+    			encodedString = in.getBytes(charset);
+    		}
+    		else {
+    			in.substring(1, in.length());
+    			encodedString = in.getBytes(charset);
+    		}
+
+    		However, the implemented algorithm has a much better performance
+    		for the average and worst cases (when the input string has a lot
+    		of multibyte characters), while keeping a good performance
+    		for the best case (when all the characters in the input string
+    		can be represented as single bytes using the selected charset).
+
+    		The general strategy is to compute the deviation from the
+    		required maximum number of bytes (limit) and the actual number
+    		of bytes of the encoded String.
+
+    		Then, we use this deviation to estimate the amount of characters
+    		to truncate, based on the average factor of bytes per char in the
+    		input string.
+
+    		We truncate the string using this approach until the deviation
+    		gets stable.
+
+    		Finally, as we should be close enough to the right truncation position,
+    		we increment/decrement the truncated string by only 1 character, to
+    		ensure we truncate in the exact position. 
+                 */
+                String str = in;
+                int estimatedDiff, deviation;
+                int deviationPrev;
+                double ratio;
+                byte[] encodedChar;
+                int truncatePos = 0;
+                deviation = encodedString.length - limit;
+                deviationPrev = deviation - 1;
+                while (Math.abs(deviation) > Math.abs(deviationPrev) && str.length() > 0) {
+                    ratio = ((double) encodedString.length) / ((double) str.length());
+                    // apply the estimated diff, ensuring it is at least >= 1.0 in absolute value
+                    estimatedDiff = Math.max((int) (((double) deviation) / ratio), (int) (Math.signum(deviation) * 1));
+                    // too long, truncating
+                    if (rightPadding) {
+                        truncatePos = Math.max(str.length() - estimatedDiff, 0);
+                        str = in.substring(0, truncatePos);
+                    } else {
+                        truncatePos = Math.max(truncatePos + estimatedDiff, 0);
+                        str = in.substring(truncatePos);
+                    }
+                    encodedString = str.getBytes(charset);
+                    deviationPrev = deviation;
+                    deviation = encodedString.length - limit;
+                }
+                // now we are close enough, get the exact position for truncating
+                while (encodedString.length > limit) {
+                    // too long, truncating
+                    //    				  System.out.println("truncating");
+                    if (rightPadding) {
+                        str = in.substring(0, str.length() - 1);
+                    } else {
+                        truncatePos = truncatePos + 1;
+                        str = in.substring(truncatePos);
+                    }
+                    encodedString = str.getBytes(charset);
+                }
+                while (encodedString.length < limit && str.length() < in.length()) {
+                    // Extend if necessary:
+                    // 1 - Get the length in bytes of the next char
+                    // 2 - Add the char to the substring if we are still within the limits 
+                    //    				  System.out.println("extending");
+                    if (rightPadding) {
+                        encodedChar = in.substring(str.length(), str.length() + 1).getBytes(charset);
+                    } else {
+                        encodedChar = in.substring(truncatePos - 1, truncatePos).getBytes(charset);
+                        //    					  System.out.println(encodedChar);
+                        //    					  System.out.println(encodedChar.length);
+                        //    					  System.out.println(testStrings[i].substring(truncatePos-1, truncatePos));
+                    }
+                    //    				  System.out.println(testStrings[i].substring(in.length(), in.length()+1));
+                    if ((encodedString.length + encodedChar.length) > limit) {
+                        // one more char would overflow the limit
+                        break;
+                    }
+                    // too short, extending
+                    if (rightPadding) {
+                        str = in.substring(0, str.length() + 1);
+                    } else {
+                        truncatePos = truncatePos - 1;
+                        str = in.substring(truncatePos);
+                    }
+                    encodedString = str.getBytes(charset);
+                }
+            }
+            if (rightPadding) {
+                buffer.put(encodedString);
+            }
+            if (encodedString.length < limit) {
+                // too short, padding
+                int i = encodedString.length;
+                while (i < limit) {
+                    ((Buffer) blank).position(0);
+                    buffer.put(blank);
+                    i = i + blankSize;
+                }
+                if (i > limit) {
+                    // Might happen for instance if charset is UTF16 and the
+                    // limit of characters in the field is an odd number
+                    throw new UnsupportedEncodingException(new Exception("Impossible to encode this DBF using the selected charset"));
+                }
+            }
+            if (!rightPadding) {
+                buffer.put(encodedString);
+            }
+        } catch (BufferOverflowException exc) {
+            // Might happen for instance if charset is UTF16 and the
+            // limit of characters in the field is an odd number
+            throw new UnsupportedEncodingException(exc);
+        }
+    }
+
+
+    /**
+     * Release resources associated with this writer. <B>Highly recommended</B>
+     *
+     * @throws CloseException
+     */
+    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;
+    }
+
+    public void setCharset(Charset charset) {
+        this.charset = charset;
+        blank = charset.encode(" ");
+        blankSize = blank.limit();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/CoerceDateToDbfTimestampAsString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/CoerceDateToDbfTimestampAsString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/CoerceDateToDbfTimestampAsString.java	(revision 46118)
@@ -0,0 +1,31 @@
+package org.gvsig.fmap.dal.store.dbf.utils;
+
+import java.util.Date;
+import java.util.Locale;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.CoercionContext;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CoerceDateToDbfTimestampAsString  extends AbstractCoercion
+    {
+
+    private final FieldFormatter formater;
+    
+    public CoerceDateToDbfTimestampAsString() {
+        this.formater = new FieldFormatter();
+    }
+
+    @Override
+    public Object coerce(Object value, CoercionContext context) throws CoercionException {
+        if( value instanceof Date ) {
+            String s = formater.formatTimestamp((Date) value);
+            return s;
+        }
+        throw new CoercionException();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.store.dbf.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.util.Date;
+
+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.fmap.dal.feature.exception.AttributeFeatureTypeNotSuportedException;
+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 long recordOffset;
+
+    private ByteBuffer cachedRecord = null;
+
+    private byte[] bytesCachedRecord = null;
+
+    private final Number NULL_NUMBER = 0;
+
+    private final String NULL_STRING = "";
+
+    private final String NULL_DATE = "        ";
+
+    private Charset chars = null;
+    private Charset charsOriginal;
+
+    private boolean isOpen = false;
+
+    private boolean allowDuplicatedFieldNames;
+
+    public DbaseFile(File afile) {
+        this(afile, null);
+    }
+
+    public DbaseFile(File afile, Charset chars) {
+        this(afile, chars, false);
+    }
+
+    public DbaseFile(File afile, Charset chars, boolean allowDuplicatedFieldNames) {
+        this.file = afile;
+        this.chars = chars;
+        this.allowDuplicatedFieldNames = allowDuplicatedFieldNames;
+    }
+
+    public DbaseFileHeader getHeader() {
+        return myHeader;
+    }
+//
+//    /**
+//     * @deprecated Use {@link #getCodePageInt()} instead
+//     */
+//    @Deprecated
+//	public byte getCodePage() {
+//		return (byte) myHeader.getLanguageID();
+//	}
+
+    public int getCodePageInt() {
+        return myHeader.getLanguageID();
+    }
+
+    /**
+     * Returns the charset used to read/write this dbf. Maybe different from the
+     * declared in the file if we have forced a different one
+     *
+     * @return
+     */
+    public String getCharsetName() {
+        return chars.name();
+        //return myHeader.getCharsetName();
+    }
+
+    /**
+     * Returns the charset declared on the dbf file (or the default one if none
+     * is declared)
+     *
+     * @return
+     */
+    public String getOriginalCharsetName() {
+        return myHeader.getOriginalCharset();
+    }
+
+    // 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(long rowIndex, int fieldId) {
+        DbaseFieldDescriptor descriptor = this.myHeader.getFieldDescription(fieldId);
+
+        long 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 += descriptor.getSize();
+        }
+
+        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(long rowIndex, int fieldId)
+            throws UnsupportedEncodingException {
+        DbaseFieldDescriptor descriptor = this.myHeader.getFieldDescription(fieldId);
+
+        int fieldOffset = descriptor.getOffsetInRecord();
+        byte[] data = new byte[descriptor.getSize()];
+        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;
+
+        }
+        ((Buffer) cachedRecord).position(fieldOffset);
+        cachedRecord.get(data);
+
+        return new String(data, chars);
+    }
+
+    public void setFieldValue(long rowIndex, int fieldId, Object obj) throws UnsupportedEncodingException, WriteException {
+        try {
+            DbaseFieldDescriptor descriptor = this.myHeader.getFieldDescription(fieldId);
+
+            int fieldOffset = descriptor.getOffsetInRecord();
+            String str = fieldString(obj, fieldId);
+            byte[] data = new byte[descriptor.getSize()];
+            recordOffset = (myHeader.getRecordLength() * rowIndex)
+                    + myHeader.getHeaderLength() + 1;
+
+            ByteBuffer aux = ByteBuffer.wrap(data);
+            aux.put(str.getBytes(chars));
+//			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);
+        }
+
+    }
+
+    /**
+     * read the DBF file into memory.
+     *
+     * @throws FileNotFoundException
+     * @throws UnsupportedVersionException
+     * @throws IOException
+     * @throws AttributeFeatureTypeNotSuportedException
+     */
+    public void open() throws FileNotFoundException,
+            UnsupportedVersionException, IOException, AttributeFeatureTypeNotSuportedException {
+
+        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.read(buffer, null, allowDuplicatedFieldNames);
+        } else {
+            myHeader.read(buffer, chars.name(), allowDuplicatedFieldNames);
+        }
+        if (myHeader.getLanguageID() == 0x00) {
+            // read from the .cpg file if ldid is 0x00
+            DbaseCodepage cpReader = new DbaseCodepage(file);
+            String charsetName = cpReader.read();
+            if (charsetName == null) {
+                charsetName = "ISO-8859-1"; // for compatibility with old gvSIG files
+            }
+            charsOriginal = Charset.forName(myHeader.mappingEncoding(charsetName));
+        } else {
+            charsOriginal = Charset.forName(myHeader.mappingEncoding(myHeader.getOriginalCharset()));
+        }
+        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) {
+        DbaseFieldDescriptor descriptor = this.myHeader.getFieldDescription(col);
+
+        String o;
+        final int fieldLen = descriptor.getSize();
+        switch (descriptor.getType()) {
+            case 'C':
+            case 'c':
+                o = formatter.format(
+                        (obj == null) ? NULL_STRING : ((String) obj),
+                        fieldLen
+                );
+                break;
+            case 'L':
+            case 'l':
+                o = (obj == null) ? "F" : ((Boolean) obj) == true ? "T" : "F";
+                break;
+            case 'M':
+            case 'G':
+                o = formatter.format(
+                        (obj == null) ? NULL_STRING : (String) obj,
+                        fieldLen
+                );
+                break;
+            case 'N':
+            case 'n':
+            case 'F':
+            case 'f':
+                Number number;
+                if (obj == null) {
+                    number = NULL_NUMBER;
+                } else {
+                    Number gVal = (Number) obj;
+                    number = gVal.doubleValue();
+                }
+                o = formatter.format(
+                        (double) number,
+                        fieldLen,
+                        descriptor.getScale()
+                );
+                break;
+            case 'D':
+            case 'd':
+                if (obj == null) {
+                    o = NULL_DATE;
+                } else {
+                    o = formatter.formatDate(((Date) obj));
+                }
+                break;
+            default:
+                throw new RuntimeException("Unknown type " + descriptor.getType());
+        }
+        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;
+    }
+
+    public boolean isWritable() {
+        return this.file.canWrite();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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(getNameForMessages(), this.getOID(), e);
+		} finally {
+			loading = false;
+			loaded = true;
+		}
+	}
+        
+        protected String getNameForMessages() {
+            // Solo con proposito de mostrar en mensajes de error.
+            try {
+                return this.store.getName();
+            } catch(Exception ex) {
+                return "unknown";
+            }
+        }
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.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()), 
+                                                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();
+            EditableFeatureType featureType = this.serverExplorer
+                    .getServerExplorerProviderServices().createNewFeatureType();
+            featureType.setHasOID(true);
+		params.setDefaultFeatureType(featureType);
+		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(10);
+//                    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(10);
+//                    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.344/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.344/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.344/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.344/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 46118)
@@ -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.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(getNameForMessages(), index,e);
+			}
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+
+		protected void internalDispose() {
+			type = null;
+		}
+
+		protected DBFStoreProvider getDBFStoreProvider() {
+			return (DBFStoreProvider) getFeatureStoreProvider();
+		}
+                
+                protected String getNameForMessages() {
+                    // Solo con proposito de mostrar en mensajes de error.
+                    try {
+                        return getFeatureStoreProvider().getName();
+                    } catch(Exception ex) {
+                        return "unknown";
+                    }
+                }
+
+		@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(getNameForMessages(), index, e);
+			}
+			index++;
+			return this.data;
+		}
+
+		protected void internalDispose() {
+			super.internalDispose();
+			data = null;
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/DuplicatedFieldNameException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/DuplicatedFieldNameException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/DuplicatedFieldNameException.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.fmap.dal.store.dbf;
+
+import org.gvsig.fmap.dal.exception.ReadException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DuplicatedFieldNameException extends ReadException {
+    
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1671651605329756160L;
+    private static final String MESSAGE_FORMAT = "Duplicated field name '%(fieldName)'.\nCheck 'Allow duplicated field names' in layer properties in add layer dialog. The layer will become read only.";
+    private static final String MESSAGE_KEY = "_DuplicatedFieldNameException";
+
+    @SuppressWarnings(value = "OverridableMethodCallInConstructor")
+    public DuplicatedFieldNameException(String fieldName) {
+        super(MESSAGE_FORMAT, null, MESSAGE_KEY, serialVersionUID);
+        setValue("fieldName", fieldName);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.dbf.DBFLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,124 @@
+<?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>_DBF_loading_parameters</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 order="10" 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 order="30" name="dateFormat" label="Date format" type="string" mandatory="false" defaultValue="" group="Advanced">
+          <description>Date format used to parse fields of type date.</description>
+        </field>
+        <field order="100" 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 order="105" name="allowDuplicatedFieldNames" label="Allow duplicated field names" type="boolean" mandatory="false" defaultValue="false" group="Advanced">
+          <description>If set allow duplicated field names. The layer will be read only.</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 order="20" 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestUtils.java	(revision 46118)
@@ -0,0 +1,54 @@
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.net.URL;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestUtils  {
+    
+    public static final Logger LOGGER = LoggerFactory.getLogger(TestUtils.class);
+    
+    public static File getTargetFolder() throws Exception {
+        URL url = TestUtils.class.getResource("/");
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+    
+    public static File getResource(String name) throws Exception {
+        File x = new File(getTargetFolder(), name);
+        return x;
+    }
+    
+    public static File getResourceAsFile(String pathname) throws Exception {
+        URL url = TestUtils.class.getResource(pathname);
+        File x = new File(url.toURI());
+        return x;
+    }
+
+    public static void removeDALFile(String fname) throws Exception {
+        File f = getResource(fname);
+        f = new File(FilenameUtils.removeExtension(f.getAbsolutePath())+".dal");
+        FileUtils.deleteQuietly(f);
+    }
+
+    public static FeatureStore openSourceStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResourceAsFile("/org/gvsig/fmap/dal/store/dbf/testCreateSource1.csv");
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file",f,
+                "automaticTypesDetection", false,
+                "locale","en"
+        );
+        return store;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestExtraColumn.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestExtraColumn.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestExtraColumn.java	(revision 46118)
@@ -0,0 +1,115 @@
+package org.gvsig.fmap.dal.store.dbf;
+
+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.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+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.FeatureExtraColumns;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class TestExtraColumn extends TestCase {
+    
+    public TestExtraColumn(String testName) {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+
+    protected String getProviderName() {
+        return DataStore.DBASE_PROVIDER_NAME;
+    }
+    
+    protected String getTargetFilename() {
+        return "testCreateTarget1.dbf";
+    }
+
+    protected FeatureStore openTargetStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = TestUtils.getResource(getTargetFilename());
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                getProviderName(), 
+                "DbfFile",f
+        );
+        return store;
+    }
+
+    protected void createFrom(FeatureStore sourceStore) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorer explorer = dataManager.openServerExplorer(
+                DataServerExplorer.FILESYSTEM_SERVER_EXPLORER_NAME, 
+                "root", TestUtils.getTargetFolder()
+        );
+        
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getProviderName()
+        );
+        ((FilesystemStoreParameters)params).setFile(TestUtils.getResource(getTargetFilename()));
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.addAll(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+    
+    
+    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    public void testColumnExtra1() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        
+        createFrom(sourceStore);        
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        FeatureStore store = openTargetStore1();
+        FeatureQuery query = store.createFeatureQuery();
+        FeatureExtraColumns extra = query.getExtraColumn();
+        query.addFilter("ID = 3");
+        EditableFeatureAttributeDescriptor descriptor = extra.add("test1",DataTypes.LONG);
+        query.retrievesAllAttributes();
+        descriptor.setFeatureAttributeEmulator("Long/10.0");
+        Feature f = store.findFirst(query);
+
+        // El feature type de la feature debe tener la columna extra
+        EditableFeatureAttributeDescriptor descriptor2 = f.getType().getExtraColumns().get("test1");
+        assertTrue(descriptor2!=null);
+        
+        // El feature type de los descriptores de los columnas extra debe ser null siempre.
+        assertTrue(descriptor2.getFeatureType()==null);
+        
+        // El valor de la columna extra debe ser el que toca.
+        Number value = (Number) f.get("test1");
+        assertEquals(Long.valueOf(300), value);   
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestCreate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestCreate.java	(revision 46118)
@@ -0,0 +1,353 @@
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.util.List;
+import junit.framework.TestCase;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+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.DataTypeUtils;
+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.FeatureAttributeDescriptor;
+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.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class TestCreate extends TestCase {
+    
+    public TestCreate(String testName) {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+
+    protected String getProviderName() {
+        return DataStore.DBASE_PROVIDER_NAME;
+    }
+    
+    protected String getTargetFilename() {
+        return "testCreateTarget1.dbf";
+    }
+
+    protected FeatureStore openTargetStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = TestUtils.getResource(getTargetFilename());
+        FileUtils.forceMkdir(f.getParentFile());
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                getProviderName(), 
+                "DbfFile",f
+        );
+        return store;
+    }
+
+    protected void createFrom(FeatureStore sourceStore) throws Exception {
+        File folder = TestUtils.getTargetFolder();
+        FileUtils.forceMkdir(folder.getParentFile());
+
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorer explorer = dataManager.openServerExplorer(
+                DataServerExplorer.FILESYSTEM_SERVER_EXPLORER_NAME, 
+                "root", folder
+        );
+        
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getProviderName()
+        );
+        ((FilesystemStoreParameters)params).setFile(TestUtils.getResource(getTargetFilename()));
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.copyFrom(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+    
+    protected void checkTypes(FeatureType sourceFeatureType, boolean useDalFile) throws Exception {        
+        FeatureStore targetStore = openTargetStore1();
+        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
+
+        assertEquals("Feature type size",sourceFeatureType.size(), targetFeatureType.size());
+        for (int i = 0; i < sourceFeatureType.size(); i++) {
+            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
+            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
+            assertEquals(sourceAttr.getName(), sourceAttr.getName(), targetAttr.getName());
+            switch(sourceAttr.getType()) {
+                case DataTypes.TIME:
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            useDalFile?sourceAttr.getDataTypeName():DataTypes.STRING_NAME,  
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            targetAttr.getSize(),
+                            useDalFile? targetAttr.getSize():FieldFormatter.TIME_SIZE
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.TIMESTAMP:
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            useDalFile?sourceAttr.getDataTypeName():DataTypes.STRING_NAME,  
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            targetAttr.getSize(),
+                            useDalFile? targetAttr.getSize():FieldFormatter.TIMESTAMP_SIZE
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.DECIMAL:
+                    if( useDalFile ) {
+                      assertEquals(
+                              String.format("Field %s type mismatch", sourceAttr.getName()), 
+                              sourceAttr.getDataTypeName(), 
+                              targetAttr.getDataTypeName()
+                      );
+                      assertEquals(
+                              String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                              sourceAttr.getPrecision(),
+                              targetAttr.getPrecision() 
+                      );
+                        assertEquals(
+                                String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                                sourceAttr.getScale(),
+                                targetAttr.getScale()
+                        );
+                    } else {
+                      assertEquals(
+                              String.format("Field %s type mismatch", sourceAttr.getName()), 
+                              sourceAttr.getScale()==0?"Integer":sourceAttr.getDataTypeName(), 
+                              targetAttr.getDataTypeName()
+                      );
+//                      assertEquals(
+//                              String.format("Field %s precision mismatch", sourceAttr.getName()), 
+//                              sourceAttr.getPrecision(),
+//                              targetAttr.getPrecision() 
+//                      );
+                        assertEquals(
+                                String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                                sourceAttr.getScale()==0?0:-1,
+                                targetAttr.getScale()
+                        );
+                    }
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    break;
+
+                case DataTypes.BYTE:
+                    if( useDalFile ) {
+                      assertEquals(
+                              String.format("Field %s type mismatch", sourceAttr.getName()), 
+                              sourceAttr.getDataTypeName(),  
+                              targetAttr.getDataTypeName()
+                      );
+                    } else {
+                      assertEquals(
+                              String.format("Field %s type mismatch", sourceAttr.getName()), 
+                              DataTypes.DECIMAL_NAME,  
+                              targetAttr.getDataTypeName()
+                      );
+                    }
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),  
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                  
+                case DataTypes.DOUBLE:
+                case DataTypes.FLOAT:
+                  break;
+                case DataTypes.INT:
+                case DataTypes.LONG:
+                case DataTypes.BOOLEAN:
+                case DataTypes.DATE:
+                case DataTypes.STRING:
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()), 
+                            sourceAttr.getDataTypeName(), 
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()), 
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                default:
+                    fail("Type '"+targetAttr.getType()+"' not supported for field '"+targetAttr.getName()+"'.");
+            }
+        }
+    }
+    
+    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    protected void checkData(FeatureStore sourceStore) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+
+        FeatureType sourceFeatureType = sourceStore.getDefaultFeatureType();
+        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
+        
+        List<Feature> sourceFeatures = sourceStore.getFeatures();
+        List<Feature> targetFeatures = targetStore.getFeatures();
+        
+        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
+        for (int i = 0; i < targetFeatures.size(); i++) {
+            Feature sourceFeature = sourceFeatures.get(i);
+            Feature targetFeature = targetFeatures.get(i);
+            for (FeatureAttributeDescriptor sourceAttr : sourceFeatureType) {
+                FeatureAttributeDescriptor targetAttr = targetFeatureType.getAttributeDescriptor(sourceAttr.getName());
+                switch(sourceAttr.getType()) {
+                    case DataTypes.TIMESTAMP:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.getTimestamp(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.TIME:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.getTime(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.STRING:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                StringUtils.defaultIfBlank(sourceFeature.getString(sourceAttr.getName()), null),
+                                targetFeature.get(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.BYTE:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                DataTypeUtils.coerce(DataTypes.BYTE, targetFeature.get(sourceAttr.getName()),null)
+                        );
+                        break;
+                    case DataTypes.DECIMAL:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.getDecimal(sourceAttr.getName())
+                        );
+                        break;
+                    default:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s (%s/%s)", i, sourceAttr.getName(), sourceAttr.getDataType().getName(), targetAttr.getDataType().getName() ),
+                                sourceFeature.get(sourceAttr.getName()),
+                                targetFeature.get(sourceAttr.getName())
+                        );
+                }
+            }
+        }
+    }
+    
+    
+    public void testCreateWithDALFile() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        
+        createFrom(sourceStore);        
+        
+        checkTypes(sourceStore.getDefaultFeatureType(),true);
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        checkData(sourceStore);
+        
+        createFrom(sourceStore);
+        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+        checkData(sourceStore);
+
+    }
+    
+    public void testCreateWithoutDALFile() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        
+        createFrom(sourceStore);        
+        TestUtils.removeDALFile(this.getTargetFilename());
+        
+        checkTypes(sourceStore.getDefaultFeatureType(),false);
+        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+        TestUtils.removeDALFile(this.getTargetFilename());
+        checkData(sourceStore);
+        
+        createFrom(sourceStore);
+        TestUtils.removeDALFile(this.getTargetFilename());
+        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
+        TestUtils.removeDALFile(this.getTargetFilename());
+        checkData(sourceStore);
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/TestExpressionField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/TestExpressionField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/TestExpressionField.java	(revision 46118)
@@ -0,0 +1,131 @@
+package org.gvsig.fmap.dal.store.dbf;
+
+import java.io.File;
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+import junit.framework.TestCase;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.DataTypeUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+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.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class TestExpressionField extends TestCase {
+    
+    public TestExpressionField(String testName) {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+
+    protected String getProviderName() {
+        return DataStore.DBASE_PROVIDER_NAME;
+    }
+    
+    protected String getTargetFilename() {
+        return "testExpressionField1.dbf";
+    }
+
+    protected FeatureStore openTargetStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = TestUtils.getResource(getTargetFilename());
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                getProviderName(), 
+                "DbfFile",f
+        );
+        return store;
+    }
+
+    protected void createFrom(FeatureStore sourceStore) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataServerExplorer explorer = dataManager.openServerExplorer(
+                DataServerExplorer.FILESYSTEM_SERVER_EXPLORER_NAME, 
+                "root", TestUtils.getTargetFolder()
+        );
+        
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getProviderName()
+        );
+        ((FilesystemStoreParameters)params).setFile(TestUtils.getResource(getTargetFilename()));
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.addAll(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+    
+    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1();
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    public void testTimestamp() throws Exception {
+      DataManager dataManager = DALLocator.getDataManager();
+      FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+      createFrom(sourceStore);        
+      copyFrom(sourceStore, FeatureStore.MODE_APPEND);
+
+      FeatureStore targetStore = openTargetStore1();
+      EditableFeatureType featureType = targetStore.getDefaultFeatureType().getEditable();
+
+      FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
+              featureType, 
+              ExpressionUtils.createExpression("TO_TIMESTAMP(TOINTEGER(RANDOM()*(20-10)+10)||'/1/2020','dd/MM/yyyy')")
+      );
+      targetStore.edit();
+      featureType.add("cct", DataTypes.TIMESTAMP, emulator);
+      targetStore.update(featureType);
+      targetStore.finishEditing();
+      targetStore.dispose();
+      
+      targetStore = openTargetStore1();
+      for (Feature feature : targetStore.getFeatureSet()) {
+        Date cct = feature.getTimestamp("cct");
+
+        assertEquals(true, cct.getDate()>=10 && cct.getDate()<=20);
+        assertEquals(0, cct.getMonth());
+        
+        // The java Date does not go well with 2020 and does not return 
+        // a good year, so we use a LocalDateTime to get the year.
+        assertEquals(2020, LocalDateTime.ofInstant(cct.toInstant(), ZoneId.systemDefault()).getYear() );
+      }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/org/gvsig/fmap/dal/store/dbf/testCreateSource1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/org/gvsig/fmap/dal/store/dbf/testCreateSource1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/org/gvsig/fmap/dal/store/dbf/testCreateSource1.csv	(revision 46118)
@@ -0,0 +1,21 @@
+ID/Integer;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Decimal6_3/Decimal/set/precision=6/set/scale=3;Decimal6_0/Decimal/set/precision=6/set/scale=0
+ ;  ; ;    ;              ;        ;      ; ;      ; ;           ; ;      ;T;;
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;-456.123;-456
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;456
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;+456
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;-456
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;-456
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;-456
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;456.123;-456
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;456.123;-456
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;456.123;-456
+10; ;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;-456
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;-456
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;-456
+12;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;-456
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;-456
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;-456
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;456.123;-456
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;456.123;-456
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T;456.123;-456
+19;97;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;-456
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/test/resources/log4j.xml	(revision 46118)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2012 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-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.construc">
+		<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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/pom.xml	(revision 46118)
@@ -0,0 +1,129 @@
+<?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.344</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.file.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.utils</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.fmap.dal.impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.compat.se</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+        <scope>test</scope>
+    </dependency>      
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    
+  </dependencies>
+
+
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- Skip test execution ? -->
+          <skipTests>false</skipTests>
+          <!-- Ignore test execution failure ? -->
+          <testFailureIgnore>false</testFailureIgnore>
+        </configuration>
+      </plugin>
+        
+      <!-- Skip test compilation ? -->
+      <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>false</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Metadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Metadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Metadata.xml	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a JIMI file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="JP2" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a JPeg 2000 store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Parameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Parameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/org/gvsig/fmap/dal/file/jp2/JP2Parameters.xml	(revision 46118)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="JP2StoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a png file</description>
+      <fields>
+        <field name="file" type="file" mandatory="true" group="Basic">
+          <description>png file</description>
+        </field>
+        <field name="crs" type="crs" mandatory="true" group="Basic">
+          <description>The coordinate reference system used in this jpg file</description>
+        </field>
+        <field name="wldParams" type="object" mandatory="false" group="Basic" classOfValue="java.util.List">
+          <description>Info given by a wld file with geolocation</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.file.jp2.JP2Library
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/java/org/gvsig/fmap/dal/file/jp2/JP2Library.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/java/org/gvsig/fmap/dal/file/jp2/JP2Library.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/src/main/java/org/gvsig/fmap/dal/file/jp2/JP2Library.java	(revision 46118)
@@ -0,0 +1,120 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.fmap.dal.file.jp2;
+
+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.FileHelper;
+import org.gvsig.fmap.dal.file.imageio.ImageIOFileSystemServerProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProvider;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Jp2 Library to register provider components
+ *
+ * @author fdiaz
+ *
+ */
+public class JP2Library extends AbstractLibrary {
+
+    public static String NAME = "JP2";
+    public static String DESCRIPTION = "JPeg 2000 provider";
+    public static String[] FILE_EXTENSIONS = new String[]{"jp2"};
+
+    @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<>();
+
+        FileHelper.registerParametersDefinition(
+                NAME + "StoreProviderParameters",
+                ImageIOStoreProviderParameters.class,
+                this.getClass().getClassLoader(),
+                this.getClass().getResource(NAME + "Parameters.xml"));
+        try {
+            try {
+                FileHelper.registerMetadataDefinition(
+                        NAME,
+                        ImageIOStoreProvider.class,
+                        this.getClass().getClassLoader(),
+                        this.getClass().getResource(NAME + "Metadata.xml"));
+            } catch (MetadataException e) {
+                exs.add(e);
+            }
+
+            DataManagerProviderServices datamanager = DALSPILocator.getDataManagerProviderServices();
+            FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
+
+            if (!datamanager.getStoreProviders().contains(NAME)) {
+                datamanager.registerStoreProviderFactory(
+                        new ImageIOStoreProviderFactory(
+                                NAME,
+                                DESCRIPTION));
+            }
+            explorerManager.registerProviderFactory(
+                    new ImageIOFileSystemServerProviderFactory(
+                            NAME,
+                            DESCRIPTION,
+                            FILE_EXTENSIONS
+                    )
+            );
+        } catch (Exception e) {
+            exs.add(e);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+
+    }
+
+    public static DynClass getMatadataDefinition() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynClass metadataDefinition = (DynClass) metadataManager.getDefinition(NAME);
+        return metadataDefinition;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2/pom.xml	(revision 46118)
@@ -0,0 +1,35 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.jp2</artifactId>
+    <name>${project.artifactId}</name>
+    <description>JPEG2000 provider</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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.dal.file.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jp2
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGMetadata.xml	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a JIMI file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="JPEG" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a JPG store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/org/gvsig/fmap/dal/file/jpg/JPEGParameters.xml	(revision 46118)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="JPEGStoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a png file</description>
+      <fields>
+        <field name="file" type="file" mandatory="true" group="Basic">
+          <description>png file</description>
+        </field>
+        <field name="crs" type="crs" mandatory="true" group="Basic">
+          <description>The coordinate reference system used in this jpg file</description>
+        </field>
+        <field name="wldParams" type="object" mandatory="false" group="Basic" classOfValue="java.util.List">
+          <description>Info given by a wld file with geolocation</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.file.jpg.JpgLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/java/org/gvsig/fmap/dal/file/jpg/JpgLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/java/org/gvsig/fmap/dal/file/jpg/JpgLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/src/main/java/org/gvsig/fmap/dal/file/jpg/JpgLibrary.java	(revision 46118)
@@ -0,0 +1,121 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.fmap.dal.file.jpg;
+
+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.FileHelper;
+import org.gvsig.fmap.dal.file.imageio.ImageIOFileSystemServerProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProvider;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderFactory;
+import org.gvsig.fmap.dal.file.imageio.ImageIOStoreProviderParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Jpg Library to register provider components
+ *
+ */
+public class JpgLibrary extends AbstractLibrary {
+
+
+    public static String NAME = "JPEG";
+    public static String DESCRIPTION = "JPEG provider";
+    public static String[] FILE_EXTENSIONS = new String[]{"jpg", "jpeg"};
+
+    @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<>();
+
+        FileHelper.registerParametersDefinition(
+                NAME + "StoreProviderParameters",
+                ImageIOStoreProviderParameters.class,
+                this.getClass().getClassLoader(),
+                this.getClass().getResource(NAME + "Parameters.xml"));
+        try {
+            try {
+                FileHelper.registerMetadataDefinition(
+                        NAME,
+                        ImageIOStoreProvider.class,
+                        this.getClass().getClassLoader(),
+                        this.getClass().getResource(NAME + "Metadata.xml"));
+            } catch (MetadataException e) {
+                exs.add(e);
+            }
+
+            DataManagerProviderServices datamanager = DALSPILocator.getDataManagerProviderServices();
+            FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
+
+            if (!datamanager.getStoreProviders().contains(NAME)) {
+                datamanager.registerStoreProviderFactory(
+                        new ImageIOStoreProviderFactory(
+                                NAME,
+                                DESCRIPTION));
+            }
+            explorerManager.registerProviderFactory(
+                    new ImageIOFileSystemServerProviderFactory(
+                            NAME,
+                            DESCRIPTION,
+                            FILE_EXTENSIONS
+                    )
+            );
+        } catch (Exception e) {
+            exs.add(e);
+        }
+
+        if (exs.size() > 0) {
+            throw new LibraryException(this.getClass(), exs);
+        }
+
+    }
+
+    public static DynClass getMatadataDefinition() {
+        MetadataManager metadataManager = MetadataLocator.getMetadataManager();
+        DynClass metadataDefinition = (DynClass) metadataManager.getDefinition(NAME);
+        return metadataDefinition;
+    }    
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg/pom.xml	(revision 46118)
@@ -0,0 +1,35 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.file</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.file.jpg</artifactId>
+    <name>${project.artifactId}</name>
+    <description>JPG Provider</description>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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.dal.file.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.jpg
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file
___________________________________________________________________
Added: svn:ignore
   + .classpath
target/**
.project
.directory
.settings/**
.settings
target


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/org.gvsig.expressionevaluator/testData1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/org.gvsig.expressionevaluator/testData1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/resources/org.gvsig.expressionevaluator/testData1.csv	(revision 46118)
@@ -0,0 +1,21 @@
+ID/Integer;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Decimal/Decimal/set/precision=6/set/scale=3
+ ;  ; ;    ;              ;        ;      ; ;      ; ;           ; ;      ;T;
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;456.123
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;456.123
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;456.123
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;456.123
+10; ;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123
+12;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;456.123
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;456.123
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;456.123
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T;456.123
+19;97;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestGrammarCompiler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestGrammarCompiler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestGrammarCompiler.java	(revision 46118)
@@ -0,0 +1,364 @@
+package org.gvsig.expressionevaluator;
+
+import java.util.Objects;
+import junit.framework.TestCase;
+import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TestGrammarCompiler extends TestCase {
+
+    public TestGrammarCompiler(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    
+    protected LexicalAnalyzer createLexicalAnalyzer() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
+        return lexer;
+    }
+
+    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        Compiler compiler = manager.createCompiler();
+        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
+        return compiler;
+    }
+
+    protected SymbolTable createSymbolTable() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        MutableSymbolTable symbolTable = manager.createSymbolTable();
+        symbolTable.setVar("precio", 200);
+        symbolTable.setVar("1990", 0.168873933773767);
+        return symbolTable;
+    }
+
+    protected Interpreter createInterpreter(SymbolTable symbolTable) {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        Interpreter interpreter = manager.createInterpreter();
+        interpreter.setSymbolTable(symbolTable);
+        return interpreter;
+    }
+    
+    private void link(Code code) {
+      code.link(createSymbolTable());
+    }
+
+    private void dump(String testname, Object expected, Object actual) {
+        System.out.println("### ---------------------");
+        System.out.println("### "+testname);
+        System.out.println("### expected: "+Objects.toString(expected));
+        System.out.println("### actual  : "+Objects.toString(actual));
+    }
+    
+    private void checkEquals(String testname, Object expected, Object actual) {
+        dump(testname,expected,actual);
+        assertEquals(expected, actual);
+    }
+
+    public void testSelect() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries;");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelect", "SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL)", code.toString());
+    }
+    
+    public void testSelect1() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelect1", "SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL)", code.toString());
+    }
+    
+    public void testSelect2() {
+        StringBuilder source = new StringBuilder();
+        source.append("BEGIN ");
+        source.append("  SET X = 0; ");
+        source.append("  FOR row in (SELECT * FROM countries;) "); // Con ;
+        source.append("    BEGIN ");
+        source.append("      IF row.LASTCENSUS > 0 THEN ");
+        source.append("        SET X = X + row.LASTCENSUS ");
+        source.append("      END IF ");
+        source.append("    END FOR ");
+        source.append("END");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelect2", "BLOCK(LET('X', 0), FOREACH('row', SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL), IF((\"row\".\"LASTCENSUS\" > 0), LET('X', (\"X\" + \"row\".\"LASTCENSUS\")))))", code.toString());
+    }
+
+    public void testSelect3() {
+        StringBuilder source = new StringBuilder();
+        source.append("BEGIN ");
+        source.append("  SET X = 0; ");
+        source.append("  FOR row in (SELECT * FROM countries) "); // Sin ;
+        source.append("    BEGIN ");
+        source.append("      IF row.LASTCENSUS > 0 THEN ");
+        source.append("        SET X = X + row.LASTCENSUS ");
+        source.append("      END IF ");
+        source.append("    END FOR ");
+        source.append("END");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelect3", "BLOCK(LET('X', 0), FOREACH('row', SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), NULL), IF((\"row\".\"LASTCENSUS\" > 0), LET('X', (\"X\" + \"row\".\"LASTCENSUS\")))))", code.toString());
+    }
+
+    public void testSelectWhere() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  WHERE LASTCENSUS > 0;  ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectWhere", "SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL)", code.toString());
+    }
+
+    public void testSelectCountWhere() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT COUNT(*) FROM countries  ");
+        source.append("  WHERE LASTCENSUS > 0 ; ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectCountWhere", "SELECT_COUNT(\"countries\", (\"LASTCENSUS\" > 0))", code.toString());
+    }
+
+    public void testSelectCountWhere2() {
+        StringBuilder source = new StringBuilder();
+        source.append("BEGIN");
+        source.append("  tableName := 'countries';");
+        source.append("  SELECT COUNT(*) FROM :tableName  ");
+        source.append("    WHERE countries.LASTCENSUS > 0 ; ");
+        source.append("END");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectCountWhere", "BLOCK(LET('tableName', 'countries'), SELECT_COUNT($HOSTEXPRESSION(\"tableName\", 'IN'), (\"countries\".\"LASTCENSUS\" > 0)))", code.toString());
+    }
+
+    public void testSelectWhere2() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  WHERE countries.LASTCENSUS > 0 ; ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectWhere2", "SELECT(TUPLE(), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL)", code.toString());
+    }
+
+    public void testSelectWhere3() {
+        StringBuilder source = new StringBuilder();
+        source.append("BEGIN");
+        source.append("  tableName := 'countries';");
+        source.append("  SELECT * FROM :tableName  ");
+        source.append("    WHERE countries.LASTCENSUS > 0 ; ");
+        source.append("END");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectWhere3", "BLOCK(LET('tableName', 'countries'), SELECT(TUPLE(), $HOSTEXPRESSION(\"tableName\", 'IN'), (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL))", code.toString());
+    }
+
+    public void testSelectOrder() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  ORDER BY CONTINENT ASC, LASTCENSUS DESC; ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectOrder", "SELECT(TUPLE(), \"countries\", NULL, TUPLE(\"CONTINENT\", \"LASTCENSUS\"), TUPLE(TRUE, FALSE), NULL)", code.toString());
+    }
+
+    public void testSelectWhereOrder() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  WHERE LASTCENSUS > 0  ");
+        source.append("  ORDER BY ID ; ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectWhereOrder", "SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(\"ID\"), TUPLE(TRUE), NULL)", code.toString());
+    }
+
+    public void testSelectWhereOrderLimit() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  WHERE LASTCENSUS > 0  ");
+        source.append("  ORDER BY LASTCENSUS DESC");
+        source.append("  LIMIT 3 ;");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectWhereOrderLimit", "SELECT(TUPLE(), \"countries\", (\"LASTCENSUS\" > 0), TUPLE(\"LASTCENSUS\"), TUPLE(FALSE), 3)", code.toString());
+    }
+
+    public void testSelectLimit() {
+        StringBuilder source = new StringBuilder();
+        source.append("SELECT * FROM countries  ");
+        source.append("  LIMIT 3; ");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testSelectLimit", "SELECT(TUPLE(), \"countries\", NULL, TUPLE(), TUPLE(), 3)", code.toString());
+    }
+
+    public void testExists() {
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(NULL)");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        String id = "????????????????????????????????";
+        String s = code.toString();
+        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
+        checkEquals("testExists", "EXISTS(NULL, 'EXISTS????????????????????????????????')", s);
+    }
+
+    public void testExistsSelect1() {
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(");
+        source.append(" SELECT \"ISO_A2\" FROM countries");
+        source.append("   WHERE countries.LASTCENSUS > 0 ; ");
+        source.append(")");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        String id = "????????????????????????????????";
+        String s = code.toString();
+        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
+        checkEquals("testExistsSelect1", "EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL), 'EXISTS????????????????????????????????')", s);
+    }
+
+    public void testExistsSelect2() {
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(");
+        source.append(" SELECT \"ISO_A2\" FROM countries");
+        source.append("   WHERE countries.LASTCENSUS > 0 ");
+        source.append(")");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        String id = "????????????????????????????????";
+        String s = code.toString();
+        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
+        checkEquals("testExistsSelect2", "EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), NULL), 'EXISTS????????????????????????????????')", s);
+    }
+
+    public void testExistsSelectLimit1() {
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(");
+        source.append(" SELECT \"ISO_A2\" FROM countries  ");
+        source.append("   WHERE countries.LASTCENSUS > 0  ");
+        source.append("   LIMIT 1; ");
+        source.append(")");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        String id = "????????????????????????????????";
+        String s = code.toString();
+        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
+        checkEquals("testExistsSelectLimit1", "EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", (\"countries\".\"LASTCENSUS\" > 0), TUPLE(), TUPLE(), 1), 'EXISTS????????????????????????????????')", s);
+    }
+
+    public void testExistsSelectLimit2() {
+        // Sobre la tabla de continentes, para obtener la lista de continentes 
+        // que tienen paises sin censo.
+        // Filtramos continentes por un campo del pais.
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(");
+        source.append(" SELECT \"ISO_A2\" FROM countries");
+        source.append("   WHERE ");
+        source.append("     continents.NAME = countries.CONTINENT AND ");
+        source.append("     countries.LASTCENSUS < 0 ");
+        source.append("   LIMIT 1; ");
+        source.append(")");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        String id = "????????????????????????????????";
+        String s = code.toString();
+        s = s.substring(0, s.length()-id.length()-2)+id+s.substring(s.length()-2);
+        checkEquals("testExistsSelectLimit2", "EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", ((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), TUPLE(), TUPLE(), 1), 'EXISTS????????????????????????????????')", s);
+    }
+
+    public void testExistsSelectLimit3() {
+        // Sobre la tabla de continentes, para obtener la lista de continentes 
+        // que tienen paises sin censo.
+        // Filtramos continentes por un campo del pais.
+        StringBuilder source = new StringBuilder();
+        source.append("EXISTS(");
+        source.append(" SELECT \"ISO_A2\" FROM countries");
+        source.append("   WHERE ");
+        source.append("     continents.NAME = countries.CONTINENT AND ");
+        source.append("     countries.LASTCENSUS < 0 ");
+        source.append("   LIMIT 1 ");
+        source.append(" ,");
+        source.append(" 'patata'");
+        source.append(")");
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(source.toString());
+        link(code);
+        checkEquals("testExistsSelectLimit3", "EXISTS(SELECT(TUPLE(\"ISO_A2\"), \"countries\", ((\"continents\".\"NAME\" = \"countries\".\"CONTINENT\") AND (\"countries\".\"LASTCENSUS\" < 0)), TUPLE(), TUPLE(), 1), 'patata')", code.toString());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestExpressionBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestExpressionBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/expressionevaluator/TestExpressionBuilder.java	(revision 46118)
@@ -0,0 +1,110 @@
+package org.gvsig.expressionevaluator;
+
+import junit.framework.TestCase;
+import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder.SelectBuilder;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TestExpressionBuilder extends TestCase {
+
+    public TestExpressionBuilder(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    
+    protected LexicalAnalyzer createLexicalAnalyzer() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
+        return lexer;
+    }
+
+    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        Compiler compiler = manager.createCompiler();
+        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
+        return compiler;
+    }
+
+    protected SymbolTable createSymbolTable() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        MutableSymbolTable symbolTable = manager.createSymbolTable();
+        return symbolTable;
+    }
+
+    protected Interpreter createInterpreter(SymbolTable symbolTable) {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        Interpreter interpreter = manager.createInterpreter();
+        interpreter.setSymbolTable(symbolTable);
+        return interpreter;
+    }
+    
+    private void link(Code code) {
+      code.link(createSymbolTable());
+    }
+
+    public void testUseCase1() {
+      DataManager dataManager = DALLocator.getDataManager();
+      DALExpressionBuilder builder = dataManager.createDALExpressionBuilder();
+
+      SelectBuilder select = builder.select()
+              .column("LID_ACCIDENTE")
+              .from("ARENA2_VEHICULOS")
+              .where(
+                      builder.expression().and(
+                              builder.expression().eq(
+                                      builder.expression().getattr("ARENA2_VEHICULOS","ID_ACCIDENTE"),
+                                      builder.expression().getattr("ARENA2_ACCIDENTES","LID_ACCIDENTE")
+                              ),
+                              builder.expression().eq(
+                                      builder.expression().column("MODELO"),
+                                      builder.expression().constant("307")
+                              )
+                      )
+              )
+              .limit(1);
+        ExpressionBuilder.Value exists = builder.exists(select.toValue(), "EXISTS123");
+
+        String filter = exists.toString(new DALFormatter());
+        
+        assertEquals("EXISTS((SELECT \"LID_ACCIDENTE\" FROM \"ARENA2_VEHICULOS\" WHERE (( (\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\") = (\"ARENA2_ACCIDENTES\".\"LID_ACCIDENTE\") ) AND ( (\"MODELO\") = ('307') )) LIMIT 1), 'EXISTS123')", filter);
+        
+        // Comprobamos que con el formatter por defecto obtenemos lo mismo.
+        assertEquals(filter, exists.toString());
+
+        Compiler compiler = createCompiler();
+
+        Code code = compiler.compileExpression(filter);
+        link(code);
+        assertEquals("EXISTS(SELECT(TUPLE(\"LID_ACCIDENTE\"), \"ARENA2_VEHICULOS\", ((\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\" = \"ARENA2_ACCIDENTES\".\"LID_ACCIDENTE\") AND (\"MODELO\" = '307')), TUPLE(), TUPLE(), 1), 'EXISTS123')", code.toString());
+    }
+    
+    public void testForeintValue1() {
+      DataManager dataManager = DALLocator.getDataManager();
+      DALExpressionBuilder builder = dataManager.createDALExpressionBuilder();
+      
+      ExpressionBuilder.Function value = builder.foreing_value("SENTIDO", "DESCRIPCION");
+      String s = value.toString(new DALFormatter());
+      assertEquals("FOREING_VALUE('SENTIDO.DESCRIPCION')", s);
+      
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/DataStoreTest.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/AllTests.java	(revision 46118)
@@ -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;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.gvsig.fmap.dal.commands.CommandTest;
+
+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);
+
+		//$JUnit-END$
+		return suite;
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/SQLBuilderTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/SQLBuilderTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/test/java/org/gvsig/fmap/dal/store/SQLBuilderTest.java	(revision 46118)
@@ -0,0 +1,469 @@
+package org.gvsig.fmap.dal.store;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.Privilege;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+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.primitive.Polygon;
+import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
+
+public class SQLBuilderTest extends AbstractLibraryAutoInitTestCase {
+    
+    @Override
+    protected void doSetUp() throws Exception {
+
+    }
+        
+    private SQLBuilder createSQLBuilder() {
+        return new SQLBuilderBase();
+    }
+    
+    public void testCalulateEnvelope() throws Exception {
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+        
+        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
+        limit.addVertex(0, 0);
+        limit.addVertex(0, 100);
+        limit.addVertex(100, 100);
+        limit.addVertex(100, 0);
+        limit.addVertex(0, 0);
+        
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(
+            expbuilder.as_geometry(
+              expbuilder.ST_ExtentAggregate(
+                expbuilder.column("the_geom")
+              )
+            )
+        ).as("envelope");
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.ST_Intersects(
+                expbuilder.ST_Envelope(
+                    expbuilder.column("the_geom")
+                ),
+                expbuilder.geometry(limit, proj)
+            )
+        );
+        sqlbuilder.select().where().and(
+                expbuilder.custom("x = 27")
+        );
+        
+        // SELECT ST_AsBinary(ST_Extent("the_geom")) AS "envelope" FROM "master"."dbo"."test1" WHERE ST_Intersects((ST_Envelope("the_geom")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27
+        
+        System.out.println("# Test:: testCalulateEnvelope");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "SELECT ST_AsBinary(ST_Extent(\"the_geom\")) AS \"envelope\" FROM \"master\".\"dbo\".\"test1\" WHERE ST_Intersects((ST_Envelope(\"the_geom\")), (ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', (4326)))) AND x = 27",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[the_geom]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testCount() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(sqlbuilder.count().all());
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().from().subquery(null);
+        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
+
+        System.out.println("# Test:: testCount");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+
+        //# Test:: testCount
+        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
+        //# Variables:: []
+        //# Parametros:: []
+
+        assertEquals(
+                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+    
+    public void testCreateTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.create_table().add_column(
+                "name",
+                DataTypes.STRING,
+                45,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+        sqlbuilder.create_table().add_column(
+                "id",
+                DataTypes.INT,
+                0,
+                0,
+                0,
+                true,
+                false,
+                false,
+                true,
+                0
+        );
+        sqlbuilder.create_table().add_column(
+                "geom",
+                DataTypes.GEOMETRY,
+                0,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+
+        
+        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
+        System.out.println("# Test:: testCreateTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testDropTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
+
+        // DROP TABLE "master"."dbo"."test1"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'
+        
+        System.out.println("# Test:: testDropTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "DROP TABLE \"master\".\"dbo\".\"test1\"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureProviderByReference() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        String value = "yoyo";
+        sqlbuilder.select().column().name("name");
+        sqlbuilder.select().column().name("id");
+        sqlbuilder.select().column().name("geom").as_geometry();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.eq(
+                expbuilder.column("name"),
+                expbuilder.parameter(value).as_constant()
+            )
+        );
+        sqlbuilder.select().limit(1);
+
+        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
+
+        System.out.println("# Test:: testFetchFeatureProviderByReference");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "['yoyo']",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureType() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().all();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().limit(1);
+
+        System.out.println("# Test:: testFetchFeatureType");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        
+        //# Test:: testFetchFeatureType
+        //# SQL:: SELECT * FROM [master].[dbo].[test1] LIMMIT 1
+        //# Variables:: []
+        //# Parametros:: []        
+        
+        assertEquals(
+                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+        
+    public void testPerformDeletes() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id1"),
+                expbuilder.parameter("id1").as_variable()
+            )
+        );
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id2"),
+                expbuilder.parameter("id2").as_variable()
+            )
+        );
+
+        // DELETE FROM "master"."dbo"."test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
+
+        System.out.println("# Test:: testPerformDeletes");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"id1\") = (?) ) AND ( (\"id2\") = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[id1, id2]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id1\", \"id2\"]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts1() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(proj));
+        
+        // INSERT INTO "master"."dbo"."test1" ( "id", "name", "geom" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )
+        
+        System.out.println("# Test:: testPerformInserts1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (4326)) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\"]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts2() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(expbuilder.parameter().value(proj)));
+        
+        System.out.println("# Test:: testPerformInserts2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromText(?, (?)) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\", 4326]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformUpdates() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.update().where().and(
+            expbuilder.eq(
+                expbuilder.column("id"), 
+                expbuilder.parameter("id").as_variable()
+            )
+        );
+        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.update().column().name("geom").with_value(
+                expbuilder.parameter("geom").as_variable()
+                        .srs(expbuilder.parameter().value(proj)) 
+        );
+
+        // UPDATE "master"."dbo"."test1" SET "name" = ?, "geom" = ST_GeomFromText(?, (?)) WHERE ( ("id") = (?) )
+
+        System.out.println("# Test:: testPerformUpdates");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromText(?, (?)) WHERE ( (\"id\") = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"name\", \"geom\", 4326, \"id\"]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant1() throws Exception {
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").select().insert().update();
+        sqlbuilder.grant().role("gis").all();
+                
+        
+        System.out.println("# Test:: testGrant1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant2() throws Exception {
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
+                .privilege(Privilege.INSERT)
+                .privilege(Privilege.UPDATE);
+        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
+                
+        
+        System.out.println("# Test:: testGrant2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(expbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(expbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(expbuilder.parameters_names())
+        );
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,352 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-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 java.util.ArrayList;
+import java.util.List;
+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.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.OpenFeatureStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+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 static final Logger LOGGER = LoggerFactory.getLogger(MemoryStoreProviderTest.class);
+
+    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";
+
+    @Override
+    protected void doSetUp() throws Exception {
+    }
+
+    public OpenFeatureStoreParameters createMemoryStoreParameters() throws DataException {
+        DataManager dataManager = DALLocator.getDataManager();
+        MemoryStoreParameters memoryParameters = (MemoryStoreParameters) dataManager
+                .createStoreParameters(MemoryStoreProvider.NAME);
+        return memoryParameters;
+    }
+
+    protected FeatureStore createStoreWithGeomField() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStoreParameters params = this.createMemoryStoreParameters();
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                params.getProviderName(),
+                params
+        );
+        store.edit();
+        EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
+        editableFeatureType.add(ID, DataTypes.OBJECT)
+                .setIsPrimaryKey(true)
+                .setObjectClass(Object.class);
+        editableFeatureType.add(IDSYM, DataTypes.OBJECT)
+                .setObjectClass(Object.class);
+        editableFeatureType.add(GEOM, DataTypes.GEOMETRY)
+                .setGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
+        editableFeatureType.add(LABEL, DataTypes.STRING);
+        editableFeatureType.add(FEATUREID, DataTypes.OBJECT)
+                .setObjectClass(Object.class);
+
+        store.update(editableFeatureType);
+        store.finishEditing();
+        return store;
+    }
+    
+    protected FeatureStore createStoreWithoutGeomField() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStoreParameters params = this.createMemoryStoreParameters();
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                params.getProviderName(),
+                params
+        );
+        store.edit();
+        EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
+        editableFeatureType.add(ID, DataTypes.OBJECT)
+                .setIsPrimaryKey(true)
+                .setObjectClass(Object.class);
+        editableFeatureType.add(IDSYM, DataTypes.OBJECT)
+                .setObjectClass(Object.class);
+        editableFeatureType.add(LABEL, DataTypes.STRING);
+        editableFeatureType.add(FEATUREID, DataTypes.OBJECT)
+                .setObjectClass(Object.class);
+
+        store.update(editableFeatureType);
+        store.finishEditing();
+        return store;
+    }
+    
+    protected FeatureStore createStoreWithGeomFieldFilled(List<Geometry> geoms) throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
+        FeatureStore store = createStoreWithGeomField();
+
+        store.edit();
+        int id = -1;
+        geoms.add(GeometryUtils.createPoint(1, 1));
+        geoms.add(GeometryUtils.createLine(Geometry.SUBTYPES.GEOM2D)
+            .addVertex(0, 0)
+            .addVertex(1, 0)
+            .addVertex(1, 1)
+            .addVertex(0, 1)
+            .addVertex(0, 0));
+        geoms.add(GeometryUtils.createPolygon(Geometry.SUBTYPES.GEOM2D)
+            .addVertex(0, 0)
+            .addVertex(1, 0)
+            .addVertex(1, 1)
+            .addVertex(0, 1)
+            .addVertex(0, 0));
+        
+        EditableFeature feature;
+        
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        feature.set(GEOM, geoms.get(id));
+        store.insert(feature);
+
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        feature.set(GEOM, geoms.get(id));
+        store.insert(feature);
+
+
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        feature.set(GEOM, geoms.get(id));
+        store.insert(feature);
+
+        Envelope envelope = store.getEnvelope();
+        assertNotNull(envelope);
+
+        store.finishEditing();
+        return store;
+    }
+    
+    protected FeatureStore createStoreWithoutGeomFieldFilled() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
+        FeatureStore store = createStoreWithoutGeomField();
+
+        store.edit();
+        int id = 0;
+        
+        EditableFeature feature;
+        
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        store.insert(feature);
+
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        store.insert(feature);
+
+
+        feature = store.createNewFeature();
+        feature.set(ID, ++id);
+        feature.set(LABEL, "Hi");
+        store.insert(feature);
+
+        Envelope envelope = store.getEnvelope();
+        assertNull(envelope);
+
+        store.finishEditing();
+        return store;
+    }
+    
+
+    public void testInitializeStore() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStoreParameters params = this.createMemoryStoreParameters();
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                params.getProviderName(),
+                params
+        );
+        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 = createStoreWithGeomField();
+        FeatureAttributeDescriptor attributeDescriptor = store.getDefaultFeatureType()
+                .getAttributeDescriptor(ID);
+        assertNotNull(attributeDescriptor);
+        assertEquals(attributeDescriptor.getType(), DataTypes.OBJECT);
+
+        store.dispose();
+    }
+
+    public void testAddFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        List<Geometry> geoms = new ArrayList<>();
+        
+        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
+        int n = -1;
+        for (Feature feature : store.getFeatureSet()) {
+            assertEquals(++n, feature.get(ID));
+            assertEquals(geoms.get(n), feature.get(GEOM));
+        }
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature();
+        feature.set(ID, 4);
+        feature.set(GEOM, GeometryUtils.createPolygon(Geometry.SUBTYPES.GEOM2D)
+            .addVertex(0, 0)
+            .addVertex(1, 0)
+            .addVertex(1, 1)
+            .addVertex(0, 1)
+            .addVertex(0, 0)
+        );
+        store.insert(feature);
+        store.finishEditing();
+        assertEquals(4, store.getFeatureCount());
+        
+        store.dispose();
+    }
+
+    public void testRemoveFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        List<Geometry> geoms = new ArrayList<>();
+        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
+
+        Feature f;
+        
+        store.edit();
+        FeatureSet featureSet = store.getFeatureSet();
+        DisposableIterator it = featureSet.fastIterator();
+        it.next();
+        f = (Feature) it.next();
+        store.delete(f);
+        store.finishEditing();
+
+        assertEquals(2, store.getFeatureCount());
+        store.dispose();
+    }
+
+    public void testUpdateFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        List<Geometry> geoms = new ArrayList<>();
+        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
+
+        store.edit();
+        FeatureSet set = store.getFeatureSet();
+        for (Feature feature : set) {
+            EditableFeature ef = feature.getEditable();
+            ef.set(LABEL, "Bye");
+            set.update(ef);
+        }
+        store.finishEditing();
+
+        for (Feature feature : store.getFeatureSet()) {
+            assertEquals("Bye", feature.get(LABEL));
+        }
+        store.dispose();
+    }
+
+    public void testAddFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        FeatureStore store = createStoreWithoutGeomFieldFilled();
+        int n = 0;
+        for (Feature feature : store.getFeatureSet()) {
+            assertEquals(++n, feature.get(ID));
+        }
+
+        store.edit();
+        EditableFeature feature = store.createNewFeature();
+        feature.set(ID, 4);
+        store.insert(feature);
+        store.finishEditing();
+        assertEquals(4, store.getFeatureCount());
+        
+        store.dispose();
+    }
+
+    public void testRemoveFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        FeatureStore store = createStoreWithoutGeomFieldFilled();
+
+        Feature f;
+        
+        store.edit();
+        FeatureSet featureSet = store.getFeatureSet();
+        DisposableIterator it = featureSet.fastIterator();
+        it.next();
+        f = (Feature) it.next();
+        store.delete(f);
+        store.finishEditing();
+
+        assertEquals(2, store.getFeatureCount());
+        store.dispose();
+    }
+
+    public void testUpdateFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
+        FeatureStore store = createStoreWithoutGeomFieldFilled();
+
+        store.edit();
+        FeatureSet set = store.getFeatureSet();
+        for (Feature feature : set) {
+            EditableFeature ef = feature.getEditable();
+            ef.set(LABEL, "Bye");
+            set.update(ef);
+        }
+        store.finishEditing();
+
+        for (Feature feature : store.getFeatureSet()) {
+            assertEquals("Bye", feature.get(LABEL));
+        }
+        store.dispose();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,2 @@
+org.gvsig.fmap.dal.impl.DALDefaultImplLibrary
+org.gvsig.fmap.dal.raster.impl.RasterLibrary
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultDALExpressionBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultDALExpressionBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultDALExpressionBuilder.java	(revision 46118)
@@ -0,0 +1,222 @@
+package org.gvsig.expressionevaluator.impl;
+
+import java.util.UUID;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionUtils;
+import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_STORE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_GEOMETRY;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_ISSELECTED_CURRENT_ROW;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultDALExpressionBuilder implements DALExpressionBuilder {
+
+  private class DefaultSelectBuilder implements SelectBuilder {
+    
+    private Value columns;
+    private String tableName;
+    private Value where;
+    private Long limit;
+    private final ExpressionBuilder.Function order;
+    private final ExpressionBuilder.Function order_mode;
+    
+    public DefaultSelectBuilder() {
+      this.columns = expression().tuple(); // ALL === empty tuple
+      this.where = null;
+      this.order = expression().tuple();
+      this.order_mode = expression().tuple();
+      this.limit = null;
+    }
+
+    @Override
+    public SelectBuilder column(String name) {
+      ((ExpressionBuilder.Function)columns).parameter(expression().column(name));
+      return this;
+    }
+
+    @Override
+    public SelectBuilder column_all() {
+      this.columns = expression().tuple(); // ALL === empty tuple
+      return this;
+    }
+
+    @Override
+    public SelectBuilder from(String tableName) {
+      this.tableName = tableName;
+      return this;
+    }
+
+    @Override
+    public SelectBuilder where(ExpressionBuilder.Value where) {
+      this.where = where;
+      return this;
+    }
+
+    @Override
+    public SelectBuilder order(String columnName, boolean asc) {
+      this.order.parameter(expression().variable(columnName));
+      this.order_mode.parameter(expression().constant(asc));
+      return this;
+    }
+
+    @Override
+    public SelectBuilder limit(long limit) {
+      this.limit = limit;
+      return this;
+    }
+
+    @Override
+    public ExpressionBuilder.Value toValue() {
+      ExpressionBuilder.Function select = expression().function(FUNCTION_SELECT);
+      
+      select.parameter(columns);
+      select.parameter(expression().variable(tableName));
+      select.parameter(where);
+      select.parameter(order);
+      select.parameter(order_mode);
+      select.parameter(expression().constant(limit));
+      
+      return select;
+    }
+
+    @Override
+    public String toString() {
+      return this.toString(formatter());
+    }
+    
+    @Override
+    public String toString(Formatter<Value> formatter) {
+      return this.toValue().toString(formatter);
+    }
+    
+  }
+  
+  
+  private class DefaultSelectCountBuilder implements SelectCountBuilder {
+    
+    private String tableName;
+    private Value where;
+    
+    public DefaultSelectCountBuilder() {
+    }
+
+    @Override
+    public SelectCountBuilder table(String tableName) {
+      this.tableName = tableName;
+      return this;
+    }
+
+    @Override
+    public SelectCountBuilder where(ExpressionBuilder.Value where) {
+      this.where = where;
+      return this;
+    }
+
+    @Override
+    public ExpressionBuilder.Value toValue() {
+      ExpressionBuilder.Function select = expression().function(FUNCTION_SELECT_COUNT);
+      
+      select.parameter(expression().variable(tableName));
+      if( where != null ) {
+        select.parameter(where);
+      }
+      return select;
+    }
+
+    @Override
+    public String toString() {
+      return this.toValue().toString();
+    }
+    
+  }
+
+  private GeometryExpressionBuilder expressionBuilder;
+  
+  @Override
+  public GeometryExpressionBuilder expression() {
+    if( this.expressionBuilder == null ) {
+      this.expressionBuilder = GeometryExpressionUtils.createExpressionBuilder();
+    }
+    return this.expressionBuilder;
+  }
+  
+  @Override
+  public Formatter<Value> formatter() {
+    return this.formatter(null);
+  }
+  
+  @Override
+  public Formatter<Value> formatter(Formatter<Value> formatter) {
+    return new DALFormatter(formatter);
+  }
+  
+  @Override
+  public SelectBuilder select() {
+    return new DefaultSelectBuilder();
+  }
+
+  @Override
+  public SelectCountBuilder select_count() {
+    return new DefaultSelectCountBuilder();
+  }
+
+  @Override
+  public ExpressionBuilder.Function exists(Value list) {
+    return exists(list, null);
+  }
+
+  @Override
+  public ExpressionBuilder.Function exists(Value list, String exists_id) {
+      if( exists_id==null ) {
+        exists_id = "EXISTS"+UUID.randomUUID().toString().replaceAll("-", "");
+      }
+      ExpressionBuilder.Function exists = expression().function(
+              FUNCTION_EXISTS,
+              list, 
+              expression().constant(exists_id)
+      );
+      return exists;
+  }
+
+  @Override
+  public ExpressionBuilder.Function foreing_value(String attrlocal, String attrforeing) {
+    ExpressionBuilder.Function foreing_value = expression().function(
+          FUNCTION_FOREING_VALUE,
+          expression().constant(attrlocal+"."+attrforeing)
+    );
+    return foreing_value;
+  }
+  
+  @Override
+  public ExpressionBuilder.Function current_row() {
+    return expression().function(FUNCTION_CURRENT_ROW);
+  }
+  
+  @Override
+  public ExpressionBuilder.Function current_table() {
+    return expression().function(FUNCTION_CURRENT_STORE);
+  }
+  
+  @Override
+  public ExpressionBuilder.Function isselected_current_row() {
+    return expression().function(FUNCTION_ISSELECTED_CURRENT_ROW);
+  }
+  
+//  @Override
+//  public ExpressionBuilder.Function geometry() {
+//      return this.expression().function(FUNCTION_GEOMETRY);
+//  }
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTableFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTableFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTableFactory.java	(revision 46118)
@@ -0,0 +1,57 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.symboltable;
+
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTableFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DALSymbolTableFactory extends AbstractSymbolTableFactory {
+
+    private SymbolTable symbolTable;
+    
+    public DALSymbolTableFactory() {
+        super(DALFunctions.SYMBOLTABLE_NAME, true);
+    }
+    
+    @Override
+    public SymbolTable create(Object... args) {
+        if( this.symbolTable==null ) {
+            this.symbolTable = new DALSymbolTable();
+        }
+        return this.symbolTable;
+    }
+    
+    public static final void selfRegister() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        
+        manager.registerSymbolTable(new DALSymbolTableFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/FeatureSymbolTableImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/FeatureSymbolTableImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/FeatureSymbolTableImpl.java	(revision 46118)
@@ -0,0 +1,186 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.symboltable;
+
+import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FeatureSymbolTableImpl extends AbstractSymbolTable implements FeatureSymbolTable {
+  private static final String DAL_SYMBOL_TABLE_FEATURE = "DALSymbolTableFeature";
+
+  private final Function current_row;
+  private Feature feature;
+  private FeatureType type;
+  private String storeName;
+  private final TableAttributeHandler storeAttributeHandler;
+
+  @SuppressWarnings("OverridableMethodCallInConstructor")
+  public FeatureSymbolTableImpl() {
+    this(DAL_SYMBOL_TABLE_FEATURE);
+  }
+  
+  public FeatureSymbolTableImpl(String name) {
+    super(name);
+    this.current_row = new AbstractFunction(
+            DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_CURRENT_ROW,
+            Range.is(0),
+            "Return the current row when used in a table filter.\n"
+            + "Return null if used outer a table filter.",
+            FUNCTION_CURRENT_ROW + "()",
+            null,
+            "Feature"
+    ) {
+      @Override
+      public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        return feature;
+      }
+    };
+    this.storeAttributeHandler = new TableAttributeHandler() {
+      @Override
+      public Object get(String name) {
+        if( feature==null ) {
+            return null;
+        }
+        try {
+          return feature.get(name);
+        } catch (Exception ex) {
+          return feature.getExtraValue(name);
+        }
+      }
+
+      @Override
+      public String getName() {
+        return storeName;
+      }
+    };
+  }
+
+  @Override
+  public FeatureSymbolTableImpl clone() throws CloneNotSupportedException {
+    FeatureSymbolTableImpl other = (FeatureSymbolTableImpl) super.clone();
+    return other;
+  }
+
+  @Override
+  public Function function(String name) {
+    if (StringUtils.equalsIgnoreCase(name, FUNCTION_CURRENT_ROW)) {
+      return this.current_row;
+    }
+    return super.function(name);
+  }
+
+  @Override
+  public boolean exists(String name) {
+    if (feature == null) {
+      return false;
+    }
+    if (this.feature.hasValue(name)) {
+        return true;
+    }
+    if (StringUtils.equalsIgnoreCase(name, this.storeName) ||
+        StringUtils.equalsIgnoreCase(name, SYMBOL_CURRENT_TABLE) ||
+        StringUtils.equalsIgnoreCase(name, SYMBOL_CURRENT_ROW) ) {
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public Object value(String name) {
+      if (feature == null) {
+          return null;
+      }
+      try {
+          return this.feature.get(name);
+      } catch (Exception ex) {
+          //DO NOTHING
+      }
+      if (StringUtils.equalsIgnoreCase(name, SYMBOL_CURRENT_ROW)) {
+          return this.feature;
+      }
+      if (StringUtils.equalsIgnoreCase(name, this.storeName)
+              || StringUtils.equalsIgnoreCase(name, SYMBOL_CURRENT_TABLE)) {
+          return this.storeAttributeHandler;
+      }
+      return null;
+  }
+
+  @Override
+  public boolean isSQLCompatible(String name) {
+    if (this.type == null) {
+      return super.isSQLCompatible(name);
+    }
+    FeatureAttributeDescriptor attrdesc = this.type.getAttributeDescriptor(name);
+    if (attrdesc == null) {
+      return true;
+    }
+    if (attrdesc.isComputed()) {
+      return false;
+    }
+    return true;
+  }
+
+  @Override
+  public void setFeature(Feature feature) {
+    this.feature = feature;
+    if (this.type == null && this.feature!=null ) {
+      this.type = feature.getType();
+      FeatureStore store = feature.getStore();
+      if (store != null) {
+        this.storeName = store.getName();
+      }
+    }
+  }
+
+  @Override
+  public MutableSymbolTable createParent() {
+    ExpressionEvaluatorManager expManager = ExpressionEvaluatorLocator.getManager();
+
+    MutableSymbolTable symbolTable = expManager.createSymbolTable();
+    symbolTable.addSymbolTable(this);
+    return symbolTable;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/DALSymbolTable.java	(revision 46118)
@@ -0,0 +1,79 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.symboltable;
+
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.CreateInMemoryTableFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.CreateTableFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.CreateTableStructureFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.CurrentRowFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.CurrentStoreFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.ExistsFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.ExistsTableFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.ForeingValueFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.GeometryFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.InsertIntoTableFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.IsSelectedCurrentRowFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.RowTagFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.SelectCountFromSelectionFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.SelectCountFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.SelectFromSelectionFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.SelectFunction;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.SetRowTagFunction;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DALSymbolTable 
+        extends AbstractSymbolTable
+    {   
+
+    public DALSymbolTable() {
+        super(DALFunctions.SYMBOLTABLE_NAME);
+        this.initFunctions();
+    }
+    
+    private void initFunctions() {
+        this.addFunction(new ExistsFunction());
+        this.addFunction(new ExistsTableFunction());
+        this.addFunction(new SelectFunction());
+        this.addFunction(new SelectCountFunction());
+        this.addFunction(new CurrentRowFunction());
+        this.addFunction(new CurrentStoreFunction());
+        this.addFunction(new ForeingValueFunction());
+        this.addFunction(new IsSelectedCurrentRowFunction());
+        this.addFunction(new ForeingValueFunction());
+        this.addFunction(new GeometryFunction());
+        this.addFunction(new CreateInMemoryTableFunction());
+        this.addFunction(new InsertIntoTableFunction());
+        this.addFunction(new RowTagFunction());
+        this.addFunction(new SetRowTagFunction());
+        this.addFunction(new CreateTableFunction());
+        this.addFunction(new CreateTableStructureFunction());
+        this.addFunction(new SelectFromSelectionFunction());
+        this.addFunction(new SelectCountFromSelectionFunction());
+    }     
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/UpdateFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/UpdateFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/UpdateFunction.java	(revision 46118)
@@ -0,0 +1,215 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.Optimizer;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.expressionevaluator.CodeBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_UPDATE;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class UpdateFunction
+        extends AbstractFunction
+        implements Optimizer.FunctionOptimizer {
+
+    public UpdateFunction() {
+        super(DALFunctions.GROUP_DATA_ACCESS,
+                FUNCTION_UPDATE,
+                Range.is(6),
+                "bla bla bla",
+                "UPDATE {{tablename}} SET column1 = exp1, column2 = exp2, ... WHERE expression;"
+        );
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean allowConstantFolding() {
+        return false;
+    }
+
+    @Override
+    public boolean useArgumentsInsteadObjects() {
+        return true;
+    }
+
+    @Override
+    public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    private static final int TABLE = 0;
+    private static final int WHERE = 1;
+
+    @Override
+    public Object call(Interpreter interpreter, Codes args) throws Exception {
+        // UPDATE( store, where, column1, column2, column3, exp1, exp2, exp3)
+        // indices 0      1      2        3        4        5     6     7
+        // num_columns = (args.size()-2)/2 --> (8-2)/2 --> 3
+        // first_column = 2
+        // first_exp = num_columns +2 --> 5
+        
+        SymbolTable symbolTable = interpreter.getSymbolTable();
+        
+        int num_columns = (args.size() - 2) / 2;
+        int first_column = 2;
+        int first_exp = num_columns + 2;
+
+        Code.Identifier storeName = (Code.Identifier) args.get(TABLE);
+        Code where = args.get(WHERE);
+        if (where.code() == Code.CONSTANT) {
+            if (((Code.Constant) where).value() == null) {
+                where = null;
+            }
+        }
+        Map<String, Code> values = new HashMap<>();
+        for (int i = 0; i < num_columns; i++) {
+            Code.Identifier column = (Code.Identifier) args.get(first_column + i);
+            Code exp = args.get(first_exp + i);
+            values.put(column.name(), exp);
+        }
+
+        try {
+            DataStore store = this.getStore(storeName.name());
+            if (store == null) {
+                throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + FUNCTION_SELECT + "'.");
+            }
+            if (!(store instanceof FeatureStore)) {
+                throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + FUNCTION_SELECT + "', a FeatureStore is required.");
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+            FeatureSet features;
+            if (where == null) {
+                features = featureStore.getFeatureSet();
+            } else {
+                where = this.replaceLocalReferences(symbolTable, where);
+                FeatureQuery query = featureStore.createFeatureQuery(where.toString(), (String)null, true);
+                query.retrievesAllAttributes();
+                features = featureStore.getFeatureSet(query);
+            }
+            if (features == null) {
+                return 0;
+            }
+            long count = 0;
+            featureStore.edit();
+            for (Feature feature : features) {
+                EditableFeature ef = feature.getEditable();
+                for (String column : values.keySet()) {
+                    Code exp = values.get(column);
+                    exp = this.replaceLocalReferences(symbolTable, exp);
+                    Object value = interpreter.run(exp);
+                    ef.set(column, value);
+                    
+                    // TODO: Tener en cuenta aqui llamar a algo que no dispare el concurrent modificacion exception.
+                    featureStore.update(ef); 
+                }
+                count++;
+            }
+            featureStore.finishEditing();
+            return count;
+        } catch (ExpressionRuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Problems calling '" + FUNCTION_SELECT + "' function", ex);
+        }
+    }
+
+    protected DataStore getStore(String storeName) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStore store = dataManager.getStoresRepository().getStore(storeName);
+        return store;
+    }
+
+    @Override
+    public Code optimize(Optimizer optimizer, Callable caller) {
+        return caller; // Don't optimize SELECT
+    }
+
+    private Code replaceLocalReferences(SymbolTable symbolTable, Code where) {
+        try {
+            List<Pair<Code, Code>> replaces = new ArrayList<>();
+            CodeBuilder codeBuilder = ExpressionUtils.createCodeBuilder();
+            Code where2 = where.clone();
+            where2.accept((Object o) -> {
+                if (o == null) {
+                    return;
+                }
+                Code code = (Code) o;
+                if( code.code()==Code.IDENTIFIER ) {
+                    String id = ((Code.Identifier)code).name();
+                    if( id.startsWith("@") ) {
+                        replaces.add(new ImmutablePair(
+                                code,
+                                codeBuilder.constant(symbolTable.value(id.substring(1)))
+                        ));
+                    }
+                }
+            });
+
+            if (replaces.isEmpty()) {
+                return where;
+            }
+            for (Pair<Code, Code> replace : replaces) {
+                if (replace != null) {
+                    where2.replace(replace.getLeft(), replace.getRight());
+                }
+            }
+            return where2;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Can't resolve local variables.", ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFromSelectionFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFromSelectionFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFromSelectionFunction.java	(revision 46118)
@@ -0,0 +1,134 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.function.Predicate;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT_FROM_SELECTION;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.util.ContainerUtils;
+import org.gvsig.tools.util.FilteredIterator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectCountFromSelectionFunction extends AbstractSelectFunction {
+
+    public SelectCountFromSelectionFunction() {
+        super(DALFunctions.GROUP_DATA_ACCESS,
+                FUNCTION_SELECT_COUNT_FROM_SELECTION,
+                Range.is(3),
+                "Returns the number of features of the table by applying the filter indicated.\n"
+                + "The syntax is:\n\n"
+                + "SELECT COUNT(*) FROM SELECTION [IF NOT EMPTY] OF table WHERE boolean_expression;\n\n"
+                + "Indicate a filter expression with WHERE is optional.\n"
+                + "The SELECT statement must always end with a semicolon.",
+                "SELECT COUNT(*) FROM {{table}} WHERE filter ;",
+                new String[]{
+                    "table - Name of the table",
+                    "filter - boolean expression with the filter to apply",},
+                "Long",
+                false
+        );
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean allowConstantFolding() {
+        return false;
+    }
+
+    @Override
+    public boolean useArgumentsInsteadObjects() {
+        return true;
+    }
+
+    @Override
+    public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    private static final int TABLE = 0;
+    private static final int WHERE = 1;
+    private static final int SELECCTION_IF_NOT_EMPTY = 2;
+
+    @Override
+    public Object call(Interpreter interpreter, Codes args) throws Exception {
+
+        String storeName = this.getTableName(args, TABLE);
+        Code where = this.getWhereCode(args, WHERE);
+        Object selection_if_not_empty = getObject(interpreter, args, SELECCTION_IF_NOT_EMPTY);
+        
+        FeatureStore featureStore;
+        try {
+            featureStore = this.getFeatureStore(storeName);
+            if (featureStore == null) {
+                throw new ExpressionRuntimeException("Cant locate the feature store '" + storeName + "' in function '" + this.name() + "'.");
+            }
+            Iterable features = featureStore.getFeatureSelection();
+            if( ((FeatureSet)features).isEmpty() ) {
+                if( selection_if_not_empty != null ) {
+                    features = featureStore.getFeatureSet();
+                    // En este caso habria que optimizar el where, pero de 
+                    // momento asi va, aunque lento.
+                }                
+            }
+            if (where != null) {
+                final Iterable baseSelection = features;
+                final DefaultFeatureExpressionEvaluator evaluator = new DefaultFeatureExpressionEvaluator(where.toString());
+                evaluator.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
+                final Predicate filter = (Predicate) (Object t) -> {
+                    try {
+                        return (boolean) evaluator.evaluate((EvaluatorData) t);
+                    } catch (EvaluatorException ex1) {
+                        throw new ExpressionRuntimeException("Can't evaluate expression for row.", ex1);
+                    }
+                };
+                features = (Iterable) () -> new FilteredIterator(baseSelection.iterator(), filter);
+            }
+            return ContainerUtils.size64(features);
+
+        } catch (ExpressionRuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Problems calling '" + this.name() + "' function", ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ForeingValueFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ForeingValueFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ForeingValueFunction.java	(revision 46118)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.tools.util.UnmodifiableBasicList;
+import org.gvsig.tools.util.UnmodifiableBasicListAdapter;
+import org.gvsig.tools.util.UnmodifiableBasicListArrayAdapter;
+
+public class ForeingValueFunction extends AbstractFeatureFunction {
+
+  public ForeingValueFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS, 
+            FUNCTION_FOREING_VALUE, 
+            Range.is(1), 
+            "Return the value of a field throw a relation from other tables.", 
+            "FOREING VALUE FROM {{foreing_key_field.field_name}}", 
+            new String[]{
+              "foreing_key_field - Name of the field in the current table that contains the foreign key of the table that we want to access.",
+              "field_name - Name of the field of the related table that we want to access."
+            }, 
+            "OBJECT"
+    );
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    UnmodifiableBasicList<String> fieldNames;
+    switch( args.length) {
+      case 1:
+        Object fields_o = getObject(args, 0);
+        if( fields_o == null ) {
+          throw new ExpressionRuntimeException("Problems calling '" + DataManager.FUNCTION_FOREING_VALUE + "' function, type of parameter 'null' not supported, use string or list.");
+        }
+        if (fields_o instanceof String[]) {
+          fieldNames = new UnmodifiableBasicListArrayAdapter<>((String[]) fields_o);
+        } else if (fields_o instanceof List) {
+          fieldNames = new UnmodifiableBasicListAdapter<>((List<String>) fields_o);
+        } else if (fields_o instanceof String) {
+          fieldNames = new UnmodifiableBasicListAdapter<>(Arrays.asList(((String) fields_o).split("[.]")));
+        } else if (fields_o instanceof UnmodifiableBasicList) {
+          fieldNames = (UnmodifiableBasicList<String>) fields_o;
+        } else {
+          throw new ExpressionRuntimeException("Problems calling '" + DataManager.FUNCTION_FOREING_VALUE + "' function, type of parameter '" + fields_o.getClass().getSimpleName() + "' not supported, use string or list.");
+        }
+        break;
+      case 2:
+        fieldNames = new UnmodifiableBasicListArrayAdapter<>(
+                new String[] {
+                  getStr(args, 0),
+                  getStr(args, 1)
+                }
+        );
+        break;
+      default:
+          throw new ExpressionRuntimeException("Problems calling '" + DataManager.FUNCTION_FOREING_VALUE + "' function, type of parameter  not supported, use string or list.");
+    }
+    Feature feature = this.current_row(interpreter);
+    Feature currentFeature = feature;
+    try {
+      String fieldName;
+      Object value;
+      value = feature.getExtraValue(StringUtils.join(fieldNames, "."));
+      if (value != null) {
+        return value;
+      }
+      for (int i = 0; i < fieldNames.size() - 1; i++) {
+        fieldName = fieldNames.get(i);
+        value = currentFeature.get(fieldName);
+        FeatureAttributeDescriptor attrdesc = currentFeature.getType().getAttributeDescriptor(fieldName);
+        if (attrdesc.isForeingKey()) {
+            ForeingKey foreingKey = attrdesc.getForeingKey();
+            // ContextForeingKey context = foreingKey.createContext();
+            currentFeature = foreingKey.getFeature(null, value);
+            // DisposeUtils.disposeQuietly(context);
+            if (currentFeature == null) {
+              return null;
+            }
+        }
+      }
+      fieldName = fieldNames.get(fieldNames.size() - 1);
+      value = currentFeature.get(fieldName);
+      return value;
+    } catch (ExpressionRuntimeException ex) {
+      throw ex;
+    } catch (Exception ex) {
+      throw new ExpressionRuntimeException("Problems calling '" + DataManager.FUNCTION_FOREING_VALUE + "' function", ex);
+    }
+  }
+  
+
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsTableFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsTableFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsTableFunction.java	(revision 46118)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS_TABLE;
+import org.gvsig.fmap.dal.DataStoreParameters;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ExistsTableFunction extends AbstractFunction {
+
+  public ExistsTableFunction() {
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_EXISTS_TABLE,
+            Range.is(1),
+            "Check if the indicated table exists in the application.\n" +
+              "To do this, you it consult the project tables, the layers " +
+              "loaded in the project views, the temporary tables and the  " +
+              "tables of the workspaces to which you are connected.",
+            FUNCTION_EXISTS_TABLE+"({{table_name}})",
+            new String[]{
+              "table_name - The name of the table to check if exists in the application."
+            },
+            "Boolean",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    DataManager dataManager = DALLocator.getDataManager();  
+    DataStoreParameters p = dataManager.getStoresRepository().get(getStr(args,0));
+    return p!=null;
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFunction.java	(revision 46118)
@@ -0,0 +1,126 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+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.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectCountFunction extends AbstractSelectFunction {
+
+    public SelectCountFunction() {
+        super(DALFunctions.GROUP_DATA_ACCESS,
+                FUNCTION_SELECT_COUNT,
+                Range.between(1, 2),
+                "Returns the number of features of the table by applying the filter indicated.\n"
+                + "The syntax is:\n\n"
+                + "SELECT COUNT(*) FROM table WHERE boolean_expression;\n\n"
+                + "Indicate a filter expression with WHERE is optional.\n"
+                + "The SELECT statement must always end with a semicolon.",
+                "SELECT COUNT(*) FROM {{table}} WHERE filter ;",
+                new String[]{
+                    "table - Name of the table",
+                    "filter - boolean expression with the filter to apply",},
+                "Long",
+                false
+        );
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean allowConstantFolding() {
+        return false;
+    }
+
+    @Override
+    public boolean useArgumentsInsteadObjects() {
+        return true;
+    }
+
+    @Override
+    public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    private static final int TABLE = 0;
+    private static final int WHERE = 1;
+
+    @Override
+    public Object call(Interpreter interpreter, Codes args) throws Exception {
+
+        String storeName = this.getTableName(args, TABLE);
+        Code where = this.getWhereCode(args, WHERE);
+
+        FeatureStore featureStore = null;
+        FeatureSet set = null;
+        try {
+            featureStore = this.getFeatureStore(storeName);
+            if (featureStore == null) {
+                throw new ExpressionRuntimeException("Cant locate the feature store '" + storeName + "' in function '" + this.name() + "'.");
+            }
+            if (where == null) {
+                set = featureStore.getFeatureSet();
+            } else {
+                FeatureQuery query = featureStore.createFeatureQuery();
+                Code where2 = removeOuterTablesReferences(interpreter, where);
+                ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
+                filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
+                query.addFilter(filter);
+                query.retrievesAllAttributes();
+                set = featureStore.getFeatureSet(query);
+            }
+            return set.getSize();
+        } catch (ExpressionRuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Problems calling '" + this.name() + "' function", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(set);
+            DisposeUtils.disposeQuietly(featureStore);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateInMemoryTableFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateInMemoryTableFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateInMemoryTableFunction.java	(revision 46118)
@@ -0,0 +1,170 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.fmap.dal.AbstractStoresRepository;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_IN_MEMORY_TABLE;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CreateInMemoryTableFunction extends AbstractFunction {
+
+  public CreateInMemoryTableFunction() {
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_CREATE_IN_MEMORY_TABLE,
+            Range.is(2),
+            "Create a table in memory with the same structure as the indicated table. Return a reference to the new table.",
+            "CREATE IN MEMORY TABLE {{new_table_name}} FROM source_table_name",
+            new String[]{
+              "new_table_name - Name of the new table to create.",
+              "source_table_name - Name of the table to copy their structure."
+            },
+            "Table",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    DataManager dataManager = DALLocator.getDataManager();  
+    StoresRepository storesRepository = dataManager.getStoresRepository();
+    MemoryStoresRepository repo = (MemoryStoresRepository) storesRepository.getSubrepository("Temporary");
+    if( repo == null ) {
+      repo = new MemoryStoresRepository("Temporary");
+      storesRepository.addRepository(repo);
+    }
+    String targetName = getStr(args,0);
+    String sourceName = getStr(args,1);
+    FeatureStore source = (FeatureStore) storesRepository.getStore(sourceName);
+    if( source == null ) {
+      throw new ExpressionRuntimeException("Can't locate source table '"+sourceName+"'.");    
+    }
+    EditableFeatureType featureType = source.getDefaultFeatureType().getEditable();
+    
+    FeatureStore target = dataManager.createMemoryStore(null);
+    target.edit();
+    target.update(featureType);
+    target.finishEditing();
+    repo.add(targetName, target);
+    return target;
+  }
+  
+  private class MemoryStoresRepository extends AbstractStoresRepository {
+    private final Map<String,FeatureStore> repository;
+
+    public MemoryStoresRepository(String name) {
+      super(name);
+      this.repository = new HashMap<>();
+    }
+
+    public void add(String name, FeatureStore store) {
+      this.repository.put(name, store);
+    }
+    
+    @Override
+    protected DataStoreParameters getMyParameters(String name) {
+      FeatureStore store = this.repository.get(name);
+      return store.getParameters();
+    }
+
+    @Override
+    protected boolean isEmptyMyRepository() {
+      return this.repository.isEmpty();
+    }
+
+    @Override
+    protected int getMySize() {
+      return this.repository.size();
+    }
+
+    @Override
+    protected UnmodifiableBasicSet<String> getMyKeySet() {
+        Set<String> keyset = this.repository.keySet();
+        if( keyset == null || keyset.isEmpty() ) {
+            return UnmodifiableBasicSet.EMPTY_UNMODIFIABLEBASICSET;
+        }
+        return new UnmodifiableBasicSetAdapter<>(keyset);
+    }
+
+    @Override
+    public DataStore getStore(String name) {
+      FeatureStore store = this.repository.get(name);
+      DisposeUtils.bind(store);
+      return store;
+    }
+
+    @Override
+    public void add(String name, DataStoreParameters parameters) {
+
+    }
+
+    @Override
+    public boolean contains(DataStoreParameters parameters) {
+      return false;
+    }
+
+    @Override
+    public boolean containsKey(String key) {
+      return this.repository.containsKey(key);
+    }
+
+    @Override
+    public Iterator<DataStoreParameters> iterator() {
+      return Collections.EMPTY_LIST.iterator();
+    }
+
+    @Override
+    public void remove(String name) {
+      this.repository.remove(name);
+    }
+
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/GeometryFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/GeometryFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/GeometryFunction.java	(revision 46118)
@@ -0,0 +1,69 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_GEOMETRY;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class GeometryFunction extends AbstractFeatureFunction {
+
+  public GeometryFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_GEOMETRY,
+            Range.is(0),
+            "Returns the value of the field that stores the default geometry " +
+              "of the current row or feature.\n" +
+            "Return null if used outer a table filter.",
+            FUNCTION_GEOMETRY + "()",
+            null,
+            "Geometry",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    Feature feature = this.current_row(interpreter);
+    if( feature == null ) {
+      return null;
+    }
+    Geometry geom = feature.getDefaultGeometry();
+    return geom;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableStructureFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableStructureFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableStructureFunction.java	(revision 46118)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE_STRUCTURE;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CreateTableStructureFunction extends AbstractFeatureFunction {
+
+  public CreateTableStructureFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS, 
+            FUNCTION_CREATE_TABLE_STRUCTURE, 
+            Range.is(1), 
+            "Create the structure defining a table and returns.\n" ,
+            "CREATE TABLE STRUCTURE{{table_structure}}", 
+            null, 
+            "FeatureType",
+            false
+    );
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+      FeatureType featureType = this.getFeatureType(args, 0);
+      return featureType;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentStoreFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentStoreFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentStoreFunction.java	(revision 46118)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_STORE;
+import org.gvsig.fmap.dal.feature.Feature;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CurrentStoreFunction extends AbstractFeatureFunction {
+
+  public CurrentStoreFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS, 
+            FUNCTION_CURRENT_STORE, 
+            Range.is(0), 
+            "Return the current store when used in a table filter.\n" 
+                    + "Return null if used outer a table filter.", 
+            FUNCTION_CURRENT_STORE+"()", 
+            null, 
+            "FeatureStore",
+            false
+    );
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    Feature feature = this.current_row(interpreter);
+    if (feature == null) {
+      return null;
+    }
+    return feature.getStore();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractSelectFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractSelectFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractSelectFunction.java	(revision 46118)
@@ -0,0 +1,179 @@
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.expressionevaluator.CodeBuilder;
+import org.gvsig.expressionevaluator.Codes;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TUPLE;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import static org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable.SYMBOL_CURRENT_TABLE;
+import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractSelectFunction extends AbstractFunction {
+
+    protected AbstractSelectFunction(String group, String name, Range argc, String description, String template, String[] descriptionArgs, String returnType, boolean sqlCompatible) {
+        super(group, name, argc, description, template, descriptionArgs, returnType, sqlCompatible);
+    }
+
+    protected AbstractSelectFunction(String group, String name, Range argc, String description, String template, String[] descriptionArgs, String returnType) {
+        super(group, name, argc, description, template, descriptionArgs, returnType);
+    }
+
+    protected String getTableName(Codes args, int argn) {
+        Code storeName_code = (Code) args.get(argn);
+        if (storeName_code instanceof Code.Identifier) {
+            return ((Code.Identifier) storeName_code).name();
+        } else if (storeName_code instanceof Code.Constant) {
+            Code.Constant storeName_const = (Code.Constant) storeName_code;
+            if (storeName_const.value() instanceof CharSequence) {
+                return storeName_const.value().toString();
+            }
+        }
+        throw new ExpressionRuntimeException("Invalid table name (" + Objects.toString(storeName_code) + ") in function '" + this.name() + "'.");
+    }
+
+    protected Code getWhereCode(Codes args, int argn) {
+        Code where = args.get(argn);
+        if (where.code() == Code.CONSTANT) {
+            if (((Code.Constant) where).value() == null) {
+                where = null;
+            }
+        }
+        return where;
+    }
+
+    protected Callable getTupleOrNull(Codes args, int argn) {
+        Code code = args.get(argn);
+        if (code.code() == Code.CONSTANT) {
+            if (((Code.Constant) code).value() != null) {
+                throw new ExpressionRuntimeException("Tupple or null expected in argument " + argn + " of function '" + this.name() + "'.");
+            }
+            return null;
+        }
+        if (code.code() != Code.CALLABLE) {
+            throw new ExpressionRuntimeException("Tupple or null expected in argument " + argn + " of function '" + this.name() + "'.");
+        }
+        Callable caller = (Callable) code;
+        if (!StringUtils.equalsIgnoreCase(FUNCTION_TUPLE, caller.name())) {
+            throw new ExpressionRuntimeException("Tupple or null expected in argument " + argn + " of function '" + this.name() + "'.");
+        }
+        return caller;
+    }
+
+    protected Code removeOuterTablesReferences(Interpreter interpreter, Code where) {
+        try {
+            SymbolTable symbolTable = interpreter.getSymbolTable();
+            TableAttributeHandler table = (TableAttributeHandler) symbolTable.value(SYMBOL_CURRENT_TABLE);
+            List<Pair<Code, Code>> replaces = new ArrayList<>();
+            CodeBuilder codeBuilder = ExpressionUtils.createCodeBuilder();
+            final Set<Code> replacesToASkip = new HashSet<>();
+            Code where2 = where.clone();
+            where2.accept((Object o) -> {
+                if (o == null) {
+                    return;
+                }
+                Code code = (Code) o;
+                switch (code.code()) {
+                    case Code.CALLABLE:
+                        Code.Callable caller = (Code.Callable) code;
+                        if (StringUtils.equalsIgnoreCase(caller.name(), FUNCTION_GETATTR)) {
+                            Codes args = caller.parameters();
+                            Code arg0 = args.get(0);
+                            Code arg1 = args.get(1);
+                            replacesToASkip.add(arg1);
+                            if (arg0 instanceof Code.Identifier && arg1 instanceof Code.Constant) {
+                                Object tt = symbolTable.value(((Code.Identifier) arg0).name());
+                                if (tt instanceof TableAttributeHandler
+                                        && StringUtils.equalsIgnoreCase(((TableAttributeHandler) tt).getName(), table.getName())) {
+                                    String columnName = Objects.toString(((Code.Constant) arg1).value(), null);
+                                    if (columnName != null) {
+                                        Object value = table.get(columnName);
+                                        replaces.add(
+                                                new ImmutablePair<>(
+                                                        caller,
+                                                        codeBuilder.constant(value)
+                                                )
+                                        );
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                }
+            });
+            where2.accept((Object o) -> {
+                if (o == null) {
+                    return;
+                }
+                Code code = (Code) o;
+                if (replacesToASkip.contains(code)) {
+                    return;
+                }
+                switch (code.code()) {
+                    case Code.IDENTIFIER:
+                        Code.Identifier id = (Code.Identifier) code;
+                        if (symbolTable.exists(id.name())) {
+                            Object value = symbolTable.value(id.name());
+                            replaces.add(
+                                    new ImmutablePair<>(
+                                            id,
+                                            codeBuilder.constant(value)
+                                    )
+                            );
+                        }
+                        break;
+                }
+            });
+            if (replaces.isEmpty()) {
+                return where;
+            }
+            for (Pair<Code, Code> replace : replaces) {
+                if (replace != null) {
+                    where2.replace(replace.getLeft(), replace.getRight());
+                }
+            }
+            return where2;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Can't remove references to outer tables.", ex);
+        }
+    }
+
+    protected DataStore getStore(String storeName) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStore store = dataManager.getStoresRepository().getStore(storeName);
+        return store;
+    }
+
+    protected FeatureStore getFeatureStore(String storeName) {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStore store = dataManager.getStoresRepository().getStore(storeName);
+        if (store instanceof FeatureStore) {
+            return (FeatureStore) store;
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/RowTagFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/RowTagFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/RowTagFunction.java	(revision 46118)
@@ -0,0 +1,104 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.Map;
+import java.util.Objects;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.util.GetItemByKey;
+import org.gvsig.tools.util.GetKeys;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RowTagFunction extends AbstractFeatureFunction {
+
+  public RowTagFunction() {
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            DataManager.FUNCTION_ROW_TAG,
+            Range.between(1,2),
+            "Retrieves a value associated with a tag from the current line.\n" +
+              "Return null if used outer a table filter or if the row don't " +
+              "have a tag with the value indicated.",
+            DataManager.FUNCTION_ROW_TAG+"({{name}})",
+            null,
+            "Object",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public boolean useArgumentsInsteadObjects() {
+    return true;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    return null;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Codes args) throws Exception {
+    Feature f = this.current_row(interpreter);
+    if( f==null ) {
+      return null;
+    }
+    String name = Objects.toString(getObject(interpreter, args, 0),null);
+    if( name == null ) {
+      throw new ExpressionRuntimeException("The first argument of '"+DataManager.FUNCTION_SET_ROW_TAG+"' can't be null.");    
+    }
+    if( args.size()==2 ) {
+      if( !f.hasExtraValue(name) ) {
+        Object map = Objects.toString(getObject(interpreter, args, 1),null);
+        if( map instanceof Map) {
+          for (Map.Entry<Object, Object> entry : ((Map<Object,Object>)map).entrySet()) {
+            String key = Objects.toString(entry.getKey(),null);
+            Object val = entry.getValue();
+            if( key!=null ) {
+              f.setExtraValue(key, val);
+            }
+          }
+        } else if( map instanceof GetItemByKey && map instanceof GetKeys ) {
+          for (String key : ((GetKeys<String>)map).getKeys() ) {
+            Object val = ((GetItemByKey<String,Object>)map).get(key);
+            f.setExtraValue(key, val);
+          }
+        }
+      }
+    }
+   return f.getExtraValue(name);
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/InsertIntoTableFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/InsertIntoTableFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/InsertIntoTableFunction.java	(revision 46118)
@@ -0,0 +1,279 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.CodeBuilder;
+import org.gvsig.expressionevaluator.Codes;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TUPLE;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.Optimizer;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+import static org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable.SYMBOL_CURRENT_TABLE;
+import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler;
+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.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class InsertIntoTableFunction 
+        extends AbstractFunction 
+        implements Optimizer.FunctionOptimizer
+  {
+
+  public InsertIntoTableFunction() {
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            DataManager.FUNCTION_INSERT_INTO_TABLE,
+            Range.is(7),
+            "Inserts in the indicated table the records obtained from the specified SELECT statement.\n" +
+              "Return the number of inserted records.\n" +
+              "This statement must always end with a semicolon.\n" +
+              "See the SELECT statement for more information on this.",
+            "INSERT INTO {{table_name}} SELECT * FROM table WHERE boolean_expression ORDER BY order_column LIMIT limit;",
+            new String[]{
+              "table_name - Name of the table in which to insert the records.",
+              "column_names/asterisk - Names of the columns table to retrieve.",
+              "table_name - Name of the table",
+              "filter - boolean expression to apply as filter",
+              "order_column - the order used to retrieve the features. It is a list of column names separated by a comma. The column name can optionally be followed by ASC or DESC to indicate whether the order should be ascending or descending.",
+              "limit - Maximum number of features to return"
+            },
+            "Number",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+
+  @Override
+  public boolean useArgumentsInsteadObjects() {
+    return true;
+  }
+  
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  private static final int COLUMNS = 1;
+  private static final int TABLE = 2;
+  private static final int WHERE = 3;
+  private static final int ORDER = 4;
+  private static final int ORDER_MODE = 5;
+  private static final int LIMIT = 6;
+  
+  
+  private Code.Callable getTupleOrNull(Codes args, int argn) {
+    Code code = args.get(argn);
+    if( code.code()==Code.CONSTANT ) {
+      if( ((Code.Constant)code).value()!=null ) {
+        throw new ExpressionRuntimeException("Tupple or null expected in argument "+argn+ " of function '" + FUNCTION_SELECT + "'.");
+      }
+      return null;
+    }
+    if( code.code()!=Code.CALLABLE ) {
+      throw new ExpressionRuntimeException("Tupple or null expected in argument "+argn+ " of function '" + FUNCTION_SELECT + "'.");
+    }
+    Code.Callable caller = (Code.Callable) code;
+    if( !StringUtils.equalsIgnoreCase(FUNCTION_TUPLE, caller.name()) ) {
+      throw new ExpressionRuntimeException("Tupple or null expected in argument "+argn+ " of function '" + FUNCTION_SELECT + "'.");
+    }
+    return caller;
+  }
+  
+  @Override
+  @SuppressWarnings("UseSpecificCatch")
+  public Object call(Interpreter interpreter, Codes args) throws Exception {
+    FeatureStore targetStore = null;
+    FeatureStore sourceStore = null;
+    try {
+      String targetTableName = Objects.toString(getObject(interpreter, args, 0),null);
+      if( targetTableName == null ) {
+        throw new ExpressionRuntimeException("Target table name can't be null.");    
+      }
+      DataManager dataManager = DALLocator.getDataManager();  
+      targetStore = (FeatureStore) dataManager.getStoresRepository().getStore(targetTableName);
+      if( targetStore==null ) {
+        throw new ExpressionRuntimeException("Can't locate target table '"+targetTableName+"'.");    
+      }
+
+
+      Code.Identifier storeName =  (Code.Identifier) args.get(TABLE);
+      Code columns = getTupleOrNull(args, COLUMNS);
+      Code where = args.get(WHERE);
+      Number limit = (Number) getObject(interpreter, args, LIMIT);
+      Code.Callable order = getTupleOrNull(args, ORDER);
+      Code.Callable order_mode = getTupleOrNull(args, ORDER_MODE);
+
+      FeatureQueryOrder queryOrder = null;
+      if( order!=null || order_mode!=null ) {
+        for( int n=0 ; n<order.parameters().size(); n++) {
+          String member = (String) interpreter.run(order.parameters().get(n));
+          Boolean mode = (Boolean) interpreter.run(order_mode.parameters().get(n));
+          if( queryOrder == null ) {
+            queryOrder = new DefaultFeatureQueryOrder();
+          }
+          queryOrder.add(member, mode);
+        }
+      }
+
+      // FIXME: add columns to query.addAttributeName() 
+      DataStore store = this.getStore(storeName.name());
+      if (store == null ) {
+        throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + FUNCTION_SELECT + "'.");
+      }
+      if (!(store instanceof FeatureStore)) {
+        throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + FUNCTION_SELECT + "', a FeatureStore is required.");
+      }
+      sourceStore = (FeatureStore) store;
+      FeatureSet features;
+      if (where == null && queryOrder == null && limit==null ) {
+        features = sourceStore.getFeatureSet();
+      } else {
+        FeatureQuery query = sourceStore.createFeatureQuery();
+        if (where != null) {
+          removeOuterTablesReferences(interpreter, where);
+          ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where.toString());
+          filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
+          query.addFilter(filter);
+        }
+        if (queryOrder != null) {
+          query.getOrder().copyFrom(queryOrder);
+        }
+        if( limit!=null ) {
+          query.setLimit(limit.longValue());
+        }
+        query.retrievesAllAttributes();
+        features = sourceStore.getFeatureSet(query);
+      }
+      
+      long count = 0;
+      targetStore.edit(FeatureStore.MODE_APPEND);
+      for (Feature feature : features) {
+        EditableFeature f = targetStore.createNewFeature();
+        f.copyFrom(feature);
+        targetStore.insert(f);
+        count++;
+      }
+      targetStore.finishEditing();
+      
+      return count;
+    } catch (ExpressionRuntimeException ex) {
+      throw ex;
+    } catch (Exception ex) {
+      if( targetStore!=null && targetStore.isAppending() ) {
+        targetStore.cancelEditing();
+      }
+      DisposeUtils.disposeQuietly(targetStore);
+      DisposeUtils.disposeQuietly(sourceStore);
+      throw new ExpressionRuntimeException("Problems calling '" + FUNCTION_SELECT + "' function", ex);
+    }
+  }
+
+  protected DataStore getStore(String storeName) {
+    DataManager dataManager = DALLocator.getDataManager();
+    DataStore store = dataManager.getStoresRepository().getStore(storeName);
+    return store;
+  }
+
+  private void removeOuterTablesReferences(Interpreter interpreter, Code where) {
+    try {
+      SymbolTable symbolTable = interpreter.getSymbolTable();
+      TableAttributeHandler table = (TableAttributeHandler) symbolTable.value(SYMBOL_CURRENT_TABLE);
+      List<Pair<Code,Code>>replaces = new ArrayList<>();
+      CodeBuilder codeBuilder = ExpressionUtils.createCodeBuilder();
+      where.accept((Object o) -> {
+        Code code = (Code) o;
+        if( code!=null && code.code() == Code.CALLABLE ) {
+          Code.Callable caller = (Code.Callable) code;
+          if( StringUtils.equalsIgnoreCase(caller.name(),FUNCTION_GETATTR) ) {
+            Codes args = caller.parameters();
+            Code arg0 = args.get(0);
+            Code arg1 = args.get(1);
+            if( arg0 instanceof Code.Identifier && arg1 instanceof Code.Identifier ) {
+              Object tt = symbolTable.value(((Code.Identifier)arg0).name());
+              if( tt instanceof TableAttributeHandler && 
+                  StringUtils.equalsIgnoreCase(((TableAttributeHandler)tt).getName(), table.getName()) ) {
+                String columnName = Objects.toString(((Code.Identifier)arg1).name(), null);
+                if( columnName!=null ) {
+                  Object value = table.get(columnName);
+                  replaces.add(
+                          new ImmutablePair<>(
+                                  caller,
+                                  codeBuilder.constant(value)
+                          )
+                  );
+                }
+              }
+            }
+          }
+        }
+      });
+      for (Pair<Code, Code> replace : replaces) {
+        if( replace!=null ) {
+          where.replace(replace.getLeft(), replace.getRight());
+        }
+      }
+    } catch (BaseException ex) {
+      throw new ExpressionRuntimeException("Can't remove references to outer tables.", ex);
+    }
+                
+  }
+
+  @Override
+  public Code optimize(Optimizer optimizer, Code.Callable caller) {
+    return caller; // Don't optimize SELECT
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFromSelectionFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFromSelectionFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFromSelectionFunction.java	(revision 46118)
@@ -0,0 +1,155 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.function.Predicate;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.Optimizer;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.expressionevaluator.Code.Callable;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_FROM_SELECTION;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.util.FilteredIterator;
+import org.gvsig.tools.util.LimitIterator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectFromSelectionFunction
+        extends AbstractSelectFunction
+        implements Optimizer.FunctionOptimizer {
+
+    public SelectFromSelectionFunction() {
+        super(DALFunctions.GROUP_DATA_ACCESS,
+                FUNCTION_SELECT_FROM_SELECTION,
+                Range.is(5),
+                "Returns a list of features of the table by applying the filter, order and limit indicated.\n"
+                + "The syntax is:\n\n"
+                + "SELECT * FROM SELECTION [IF NOT EMPTY] OF table_name WHERE boolean_expression ;\n\n"
+                + "Indicate a filter expression with WHERE.\n"
+                + "You can use an asterisk or enter the column names you want to retrieve separated by commas.\n"
+                + "The SELECT statement must always end with a semicolon.",
+                "SELECT * FROM SELECTION OF table_name WHERE boolean_expression ;",
+                new String[]{
+                    "column_names/asterisk - Names of the columns table to retrieve.",
+                    "table_name - Name of the table",
+                    "filter - Optional, boolean expression to apply as filter",
+                },
+                "Iterable",
+                false
+        );
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean allowConstantFolding() {
+        return false;
+    }
+
+    @Override
+    public boolean useArgumentsInsteadObjects() {
+        return true;
+    }
+
+    @Override
+    public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    private static final int COLUMNS = 0;
+    private static final int TABLE = 1;
+    private static final int WHERE = 2;
+    private static final int LIMIT = 3;
+    private static final int SELECCTION_IF_NOT_EMPTY = 4;
+
+    @Override
+    public Object call(Interpreter interpreter, Codes args) throws Exception {
+
+        Code columns = getTupleOrNull(args, COLUMNS);
+        String storeName = this.getTableName(args, TABLE);
+        Code where = this.getWhereCode(args, WHERE);
+        Number limit = (Number) getObject(interpreter, args, LIMIT);
+        Object selection_if_not_empty = getObject(interpreter, args, SELECCTION_IF_NOT_EMPTY);
+        
+        
+        FeatureStore featureStore;
+        try {
+            featureStore = this.getFeatureStore(storeName);
+            if (featureStore == null) {
+                throw new ExpressionRuntimeException("Cant locate the feature store '" + storeName + "' in function '" + this.name() + "'.");
+            }
+            Iterable features = featureStore.getFeatureSelection();
+            if( ((FeatureSet)features).isEmpty() ) {
+                if( selection_if_not_empty != null ) {
+                    features = featureStore.getFeatureSet();
+                    // En este caso habria que optimizar el where, pero de 
+                    // momento asi va, aunque lento.
+                }                
+            }
+            if (where != null) {
+                final Iterable baseSelection = features;
+                final DefaultFeatureExpressionEvaluator evaluator = new DefaultFeatureExpressionEvaluator(where.toString());
+                evaluator.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
+                final Predicate filter = (Predicate) (Object t) -> {
+                    try {
+                        return (boolean) evaluator.evaluate((EvaluatorData) t);
+                    } catch (EvaluatorException ex1) {
+                        throw new ExpressionRuntimeException("Can't evaluate expression for row.", ex1);
+                    }
+                };
+                features = (Iterable) () -> new FilteredIterator(baseSelection.iterator(), filter);
+            }
+            if( limit!=null ) {
+                final Iterable baseSelection = features;
+                features = (Iterable) () -> new LimitIterator(baseSelection.iterator(), limit.longValue());
+            }
+            return features;
+
+        } catch (ExpressionRuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Problems calling '" + this.name() + "' function", ex);
+        }
+    }
+
+    @Override
+    public Code optimize(Optimizer optimizer, Callable caller) {
+        return caller; // Don't optimize SELECT
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentRowFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentRowFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CurrentRowFunction.java	(revision 46118)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CurrentRowFunction extends AbstractFeatureFunction {
+
+  public CurrentRowFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_CURRENT_ROW,
+            Range.is(0),
+            "Return the current row when used in a table filter.\n"
+            + "Return null if used outer a table filter.",
+            FUNCTION_CURRENT_ROW + "()",
+            null,
+            "Feature",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    return null;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/CreateTableFunction.java	(revision 46118)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import javax.json.JsonObject;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CreateTableFunction extends AbstractFeatureFunction {
+
+  public CreateTableFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS, 
+            FUNCTION_CREATE_TABLE, 
+            Range.is(2), 
+            "Create a new table with the structure indicated as \"table_structure\" at the location indicated as \"location_parameters\".", 
+            "CREATE TABLE {{table_structure}} IN location_parameters", 
+            null, 
+            "NULL",
+            false
+    );
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+      DataManager dataManager = DALLocator.getDataManager();
+
+      FeatureType featureType = this.getFeatureType(args, 0);
+      NewFeatureStoreParameters target_parameters = this.getNewFeatureStoreParameters(args,1);
+      target_parameters.setDefaultFeatureType(featureType);
+      dataManager.newStore(
+              target_parameters.getProviderName(), 
+              target_parameters, 
+              true
+      );
+      return true;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/IsSelectedCurrentRowFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/IsSelectedCurrentRowFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/IsSelectedCurrentRowFunction.java	(revision 46118)
@@ -0,0 +1,65 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_ISSELECTED_CURRENT_ROW;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class IsSelectedCurrentRowFunction extends AbstractFeatureFunction {
+  
+  public IsSelectedCurrentRowFunction() {
+    super(
+            DALFunctions.GROUP_DATA_ACCESS, 
+            FUNCTION_ISSELECTED_CURRENT_ROW, 
+            Range.is(0), 
+            "Return if the current feature is selected in the table when used in a filter.\n" 
+                    + "Return false if used outer a filter.", 
+            FUNCTION_ISSELECTED_CURRENT_ROW+"()", 
+            null, 
+            "Boolean",
+            false
+    );
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    Feature feature = this.current_row(interpreter);
+    if (feature == null) {
+      return false;
+    }
+    FeatureStore store = feature.getStore();
+    FeatureSelection selection = store.getFeatureSelection();
+    return selection.isSelected(feature);
+  }
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/ExistsFunction.java	(revision 46118)
@@ -0,0 +1,118 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.List;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import org.gvsig.tools.util.UnmodifiableBasicCollection;
+import org.gvsig.tools.util.UnmodifiableBasicCollection64;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ExistsFunction extends AbstractFeatureFunction {
+
+  public static final String NAME = "EXISTS";
+
+  public ExistsFunction() {
+    //
+    // https://www.postgresql.org/docs/current/functions-subquery.html
+    //
+    // Nota:
+    // En H2 no existe la funcion EXISTS, pero muy probablemente se pueda
+    // trasladar a:
+    //   NVL2(COALESCE(lista-subselect),FALSE,TRUE)
+    //
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            FUNCTION_EXISTS,
+            Range.between(1, 2),
+            "Receive a list as an argument. Returns true if the list has some value and false if the list is empty.",
+            FUNCTION_EXISTS + "({{list}})",
+            new String[]{
+              "list - a list of values or null"
+            },
+            "Boolean",
+            true
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public boolean useArgumentsInsteadObjects() {
+    return true;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    throw new UnsupportedOperationException("Not supported yet.");
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Codes args) throws Exception {
+    if (args.size() == 2) {
+      Object id = this.getObject(interpreter, args, 1);
+      if (id instanceof CharSequence) {
+        if (interpreter.getSymbolTable().exists(id.toString())) {
+          Object value = interpreter.getSymbolTable().value(id.toString());
+          if (value == null) {
+            return false;
+          }
+          if (value instanceof Boolean) {
+            return value;
+          }
+        }
+      }
+    }
+
+    Object list = this.getObject(interpreter, args, 0);
+    if (list == null) {
+      return false;
+    }
+    boolean isEmpty = true;
+    if (list instanceof Object[]) {
+      isEmpty = (((Object[]) list).length==0);
+    } else if (list instanceof List) {
+      isEmpty = ((List) list).isEmpty();
+    } else if (list instanceof UnmodifiableBasicCollection) {
+      isEmpty = ((UnmodifiableBasicCollection) list).isEmpty();
+    } else if (list instanceof UnmodifiableBasicCollection64) {
+      isEmpty = ((UnmodifiableBasicCollection64) list).isEmpty();
+    } else {
+      throw new ExpressionRuntimeException("Invalid argument. List or null expected.");
+    }
+//    System.out.println("EXISTS: "+ interpreter.getSymbolTable().value("NAME")+", "+isEmpty);
+    return !isEmpty;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractFeatureFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractFeatureFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/AbstractFeatureFunction.java	(revision 46118)
@@ -0,0 +1,92 @@
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import javax.json.JsonObject;
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.I18N;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.expressionevaluator.spi.JsonUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
+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.FeatureType;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractFeatureFunction extends AbstractFunction {
+
+  protected AbstractFeatureFunction(String group, String name, Range argc, String description, String template, String[] descriptionArgs, String returnType, boolean sqlCompatible) {
+    super(group, name, argc, description, template, descriptionArgs, returnType, sqlCompatible);
+  }
+  
+  protected AbstractFeatureFunction(String group, String name, Range argc, String description, String template, String[] descriptionArgs, String returnType) {
+    super(group, name, argc, description, template, descriptionArgs, returnType);
+  }
+
+  public Feature current_row(Interpreter interpreter) {
+    try {
+      Feature f = (Feature) interpreter.call(FUNCTION_CURRENT_ROW);
+      return f;
+    } catch (Exception ex) {
+      return null;
+    }
+  }
+  
+  protected NewFeatureStoreParameters getNewFeatureStoreParameters(Object[] args, int n) {      
+      Object v = getObject(args, n);
+      if( v instanceof NewFeatureStoreParameters ) {
+          return (NewFeatureStoreParameters) v;
+      }
+      NewFeatureStoreParameters parameters;
+      JsonObject jsonObj = getJsonObject(args, n);
+      try {
+        String providerName = jsonObj.getString(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+
+        DataManager dataManager = DALLocator.getDataManager();
+        parameters = (NewFeatureStoreParameters) dataManager.createNewStoreParameters(providerName);
+        for (String paramName : jsonObj.keySet()) {
+            if( StringUtils.equalsIgnoreCase(paramName, DataStoreProviderServices.PROVIDER_PARAMTER_NAME)) {
+                continue;
+            }
+            parameters.setDynValue(paramName, JsonUtils.getitem(jsonObj, paramName));
+        }
+      } catch (Exception ex) {
+        String type = v.getClass().getCanonicalName();
+        throw new IllegalArgumentException(
+                I18N.The_type_of_the_argument_XargnX_for_the_XIdentifierX_function_is_incorrect(name(), n) + " " +
+                I18N.Expected_XexpectedX_and_found_XfoundX("NewFeatureStoreParameters",type)
+        );
+      }
+      return parameters;
+  }
+
+  protected FeatureType getFeatureType(Object[] args, int n) {      
+      Object v = getObject(args, n);
+      if( v instanceof FeatureType ) {
+          return (FeatureType) v;
+      }
+      EditableFeatureType featureType;
+      JsonObject jsonObj = getJsonObject(args, n);
+      try {
+        DataManager dataManager = DALLocator.getDataManager();
+        featureType = dataManager.createFeatureType(jsonObj);
+      } catch (Exception ex) {
+        String type = v.getClass().getCanonicalName();
+        throw new IllegalArgumentException(
+                I18N.The_type_of_the_argument_XargnX_for_the_XIdentifierX_function_is_incorrect(name(), n) + " " +
+                I18N.Expected_XexpectedX_and_found_XfoundX("NewFeatureStoreParameters",type)
+        );
+      }
+      return featureType;      
+  }
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java	(revision 46118)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import java.util.List;
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.Optimizer;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+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.FeatureStore;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectFunction
+        extends AbstractSelectFunction
+        implements Optimizer.FunctionOptimizer {
+
+    public SelectFunction() {
+        super(DALFunctions.GROUP_DATA_ACCESS,
+                FUNCTION_SELECT,
+                Range.is(6),
+                "Returns a list of features of the table by applying the filter, order and limit indicated.\n"
+                + "The syntax is:\n\n"
+                + "SELECT * FROM table WHERE boolean_expression ORDER BY order_column LIMIT limit;\n\n"
+                + "Indicate a filter expression with WHERE, an order or LIMIT is optional.\n"
+                + "You can use an asterisk or enter the column names you want to retrieve separated by commas.\n"
+                + "The SELECT statement must always end with a semicolon.",
+                "SELECT * FROM table WHERE boolean_expression ORDER BY order_column LIMIT limit;",
+                new String[]{
+                    "column_names/asterisk - Names of the columns table to retrieve.",
+                    "table_name - Name of the table",
+                    "filter - boolean expression to apply as filter",
+                    "order_column - the order used to retrieve the features. It is a list of column names separated by a comma. The column name can optionally be followed by ASC or DESC to indicate whether the order should be ascending or descending.",
+                    "limit - Maximum number of features to return"
+                },
+                "List",
+                true
+        );
+    }
+
+    @Override
+    public boolean isHidden() {
+        return false;
+    }
+
+    @Override
+    public boolean allowConstantFolding() {
+        return false;
+    }
+
+    @Override
+    public boolean useArgumentsInsteadObjects() {
+        return true;
+    }
+
+    @Override
+    public Object call(Interpreter interpreter, Object[] args) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    private static final int COLUMNS = 0;
+    private static final int TABLE = 1;
+    private static final int WHERE = 2;
+    private static final int ORDER = 3;
+    private static final int ORDER_MODE = 4;
+    private static final int LIMIT = 5;
+
+    @Override
+    public Object call(Interpreter interpreter, Codes args) throws Exception {
+
+        String storeName = this.getTableName(args, TABLE);
+        Code columns = getTupleOrNull(args, COLUMNS);
+        Code where = this.getWhereCode(args, WHERE);
+        Number limit = (Number) getObject(interpreter, args, LIMIT);
+
+        Callable order = getTupleOrNull(args, ORDER);
+        Callable order_mode = getTupleOrNull(args, ORDER_MODE);
+        FeatureQueryOrder queryOrder = null;
+        if (order != null || order_mode != null) {
+            for (int n = 0; n < order.parameters().size(); n++) {
+                String member = (String) interpreter.run(order.parameters().get(n));
+                Boolean mode = (Boolean) interpreter.run(order_mode.parameters().get(n));
+                if (queryOrder == null) {
+                    queryOrder = new DefaultFeatureQueryOrder();
+                }
+                queryOrder.add(member, mode);
+            }
+        }
+        FeatureStore featureStore;
+        try {
+            featureStore = this.getFeatureStore(storeName);
+            if (featureStore == null) {
+                throw new ExpressionRuntimeException("Cant locate the feature store '" + storeName + "' in function '" + this.name() + "'.");
+            }
+            List<Feature> features;
+            FeatureQuery query = featureStore.createFeatureQuery();
+            if (where != null) {
+                Code where2 = removeOuterTablesReferences(interpreter, where);
+                ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
+                filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
+                query.addFilter(filter);
+            }
+            if (queryOrder != null) {
+                query.getOrder().copyFrom(queryOrder);
+            }
+            if (limit != null) {
+                query.setLimit(limit.longValue());
+            }
+
+            // FIXME: add columns to query.addAttributeName() 
+            query.retrievesAllAttributes();
+            features = featureStore.getFeatures(query);
+            return features;
+
+        } catch (ExpressionRuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ExpressionRuntimeException("Problems calling '" + this.name() + "' function", ex);
+        }
+    }
+
+    @Override
+    public Code optimize(Optimizer optimizer, Callable caller) {
+        return caller; // Don't optimize SELECT
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SetRowTagFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SetRowTagFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SetRowTagFunction.java	(revision 46118)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.function.dataaccess;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.Feature;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SetRowTagFunction extends AbstractFeatureFunction {
+
+  public SetRowTagFunction() {
+    super(  DALFunctions.GROUP_DATA_ACCESS,
+            DataManager.FUNCTION_SET_ROW_TAG,
+            Range.is(1),
+            "Assign a value associated with a label of the current row. " + 
+              "This value is not persistent. The function return the " +
+              "value assigned to the tag.\n" +
+              "If the function is used outer a table filter it will have no any effect.",
+            DataManager.FUNCTION_SET_ROW_TAG+"({{name}}, value)",
+            null,
+            "Object",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public boolean useArgumentsInsteadObjects() {
+    return false;
+  }
+  
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+    Feature f = this.current_row(interpreter);
+    if( f!=null ) {
+      String name = getStr(args,0);
+      f.setExtraValue(name, args[0]);
+    }
+    return args[0];
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Exists.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Exists.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Exists.java	(revision 46118)
@@ -0,0 +1,36 @@
+package org.gvsig.expressionevaluator.impl.expressionbuilder.formatters;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Exists implements Formatter<Value> {
+    
+    private final Formatter<Value> formatter;
+    
+    public Exists(Formatter<Value> formatter) {
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(FUNCTION_EXISTS, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        return "EXISTS("+exp.toString(formatter)+")";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Select.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Select.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/Select.java	(revision 46118)
@@ -0,0 +1,98 @@
+package org.gvsig.expressionevaluator.impl.expressionbuilder.formatters;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TUPLE;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class Select implements Formatter<Value> {
+
+  private final Formatter<Value> formatter;
+
+  public Select(Formatter<Value> formatter) {
+    this.formatter = formatter;
+  }
+
+  @Override
+  public boolean canApply(ExpressionBuilder.Value value) {
+    if (value instanceof ExpressionBuilder.Function) {
+      return StringUtils.equalsIgnoreCase(FUNCTION_SELECT, ((Function) value).name());
+    }
+    return false;
+  }
+
+  private static final int COLUMNS = 0;
+  private static final int TABLE = 1;
+  private static final int WHERE = 2;
+  private static final int ORDER = 3;
+  private static final int ORDER_MODE = 4;
+  private static final int LIMIT = 5;
+
+  @Override
+  public String format(Value function0) {
+    Function function = (Function) function0;
+    String tableName = (String) function.parameters().get(TABLE).toString(formatter);
+    Value where = function.parameters().get(WHERE);
+    Value order = function.parameters().get(ORDER);
+    Value limit = function.parameters().get(LIMIT);
+    Value order_mode = function.parameters().get(ORDER_MODE);
+
+    StringBuilder builder = new StringBuilder();
+    builder.append("(SELECT ");
+
+    try {
+      Function columns = (Function) function.parameters().get(COLUMNS);
+      if (!StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function) columns).name(), FUNCTION_TUPLE)) {
+        throw new IllegalArgumentException();
+      }
+      if( columns.parameters().isEmpty() ) {
+            builder.append("* ");
+      } else {
+        boolean needcomma = false;
+        for (Value parameter : columns.parameters()) {
+          if(needcomma) {
+            builder.append(", ");
+          } else {
+            needcomma = true;
+          }
+          builder.append(parameter.toString(formatter));
+        }
+      }
+    } catch (Exception ex) {
+      throw new IllegalArgumentException("Invalid columns, need a tuple function as columns.");
+    }
+
+    builder.append(" FROM ");
+    builder.append(tableName);
+    if (where != null) {
+      builder.append(" WHERE ");
+      builder.append(where.toString(formatter));
+    }
+//        for( int n=0 ; function.containsParameter("ORDER", n); n++) {
+//          if( n>0 ) {
+//            builder.append(", ");
+//          }
+//          builder.append(function.getParameter("ORDER",n).toString(formatter));
+//          if( StringUtils.equalsIgnoreCase(function.getParameter("ORDER_MODE",n).toString(),"true") ) {
+//            builder.append(" ASC ");
+//          } else {
+//            builder.append(" DESC ");
+//          }
+//        }
+    if (limit != null) {
+      builder.append(" LIMIT ");
+      builder.append(limit.toString(formatter));
+    }
+    builder.append(")");
+    return builder.toString();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/DALFormatter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/DALFormatter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/expressionbuilder/formatters/DALFormatter.java	(revision 46118)
@@ -0,0 +1,58 @@
+package org.gvsig.expressionevaluator.impl.expressionbuilder.formatters;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.spi.formatter.value.BaseFormatter;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DALFormatter implements Formatter<Value> {
+
+    private final Formatter<ExpressionBuilder.Value>[] formatters;
+
+    public DALFormatter() {
+      this(null);
+    }
+    
+    public DALFormatter(Formatter<Value> formatter) {
+        if( formatter==null ) {
+          formatter = this;
+        }
+        this.formatters = new Formatter[]{
+            // new Exists(formatter),
+            new Select(formatter),
+            new BaseFormatter(formatter)
+        };
+    }
+
+    @Override
+    public boolean canApply(Value value) {
+        for (Formatter<Value> formatter : formatters) {
+            if (formatter.canApply(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value) {
+        for (Formatter<Value> formatter : formatters) {
+            if (formatter.canApply(value)) {
+                return formatter.format(value);
+            }
+        }
+        return value.toString(this);
+    }
+    
+    public static void selfRegister() {
+      ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getExpressionEvaluatorManager();
+      manager.registerExpressionBuilderFormatter(new DALFormatter());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultFeatureRuleExpression.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultFeatureRuleExpression.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultFeatureRuleExpression.java	(revision 46118)
@@ -0,0 +1,167 @@
+package org.gvsig.expressionevaluator.impl;
+
+import javax.json.JsonObject;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.AbstractFeatureRule;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.FeatureRuleExpression;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.exception.ValidateFeaturesException;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+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 gvSIG team
+ */
+public class DefaultFeatureRuleExpression
+        extends AbstractFeatureRule
+        implements FeatureRuleExpression {
+
+    private static final String FEATURERULEEXPRESSION_PERSISTENCE_DEFINITION_NAME = "FeatureRuleExpression";
+
+    private Expression expression;
+    private FeatureSymbolTable symbolTable;
+
+    public DefaultFeatureRuleExpression() {
+        super(null, null, false, false);
+    }
+
+    public DefaultFeatureRuleExpression(String name, String description, boolean checkAtUpdate,
+            boolean checkAtFinishEdition, Expression expression) {
+        super(name, description, checkAtUpdate, checkAtFinishEdition);
+        this.expression = expression;
+        this.symbolTable = new FeatureSymbolTableImpl();
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public void validate(EditableFeature feature, FeatureStore featureStore) throws DataException {
+        this.symbolTable.setFeature(feature);
+        Object value = this.expression.execute(symbolTable);
+        boolean ok = false;
+        if (value != null) {
+            if (value instanceof Boolean) {
+                ok = (Boolean) value;
+            } else {
+                ok = DataTypeUtils.toBoolean(value, false);
+            }
+        }
+        if (ok) {
+            return;
+        }
+        throw new ValidateFeaturesException(featureStore.getName(), null);
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(FeatureRuleExpression.class);
+        registerPersistenceDefinition();
+
+    }
+
+    private static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+        if (manager.getDefinition(FEATURERULEEXPRESSION_PERSISTENCE_DEFINITION_NAME)
+                == null) {
+            DynStruct definition = manager.addDefinition(DefaultFeatureRuleExpression.class,
+                    FEATURERULEEXPRESSION_PERSISTENCE_DEFINITION_NAME,
+                    FEATURERULEEXPRESSION_PERSISTENCE_DEFINITION_NAME
+                    + " persistent definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldString("name");
+            definition.addDynFieldString("description");
+            definition.addDynFieldBoolean("checkAtFinishEdition");
+            definition.addDynFieldBoolean("checkAtUpdate");
+            definition.addDynFieldString("expression");
+        }
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.name = state.getString("name");
+        this.description = state.getString("description");
+        this.checkAtFinishEdition = state.getBoolean("checkAtFinishEdition");
+        this.checkAtUpdate = state.getBoolean("checkAtUpdate");
+        this.expression = (Expression) state.get("expression");
+        this.symbolTable = new FeatureSymbolTableImpl();
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("name", this.name);
+        state.set("description", this.description);
+        state.set("checkAtFinishEdition", this.checkAtFinishEdition);
+        state.set("checkAtUpdate", this.checkAtUpdate);
+        state.set("expression", this.expression);
+    }
+
+    @Override
+    public void setCheckAtUpdate(boolean checkAtUpdate) {
+        this.checkAtUpdate = checkAtUpdate;
+    }
+
+    @Override
+    public void setCheckAtFinishEditing(boolean checkAtFinishEditing) {
+        this.checkAtFinishEdition = checkAtFinishEditing;
+    }
+
+    @Override
+    public Expression getExpression() {
+        return this.expression;
+    }
+
+    @Override
+    public void setExpression(Expression expression) {
+        this.expression = expression;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        JsonObjectBuilder builder = this.toJsonBuilder();
+        return builder.build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("name", this.name);
+        builder.add("description", this.description);
+        builder.add("checkAtFinishEdition", this.checkAtFinishEdition);
+        builder.add("checkAtUpdate", this.checkAtUpdate);
+        builder.add("expression", this.expression.getPhrase());
+        return builder;
+    }
+
+    @Override
+    public void fromJson(JsonObject json) {
+        this.name = json.getString("name");
+        this.description = json.getString("description");
+        this.checkAtFinishEdition = json.getBoolean("checkAtFinishEdition", false);
+        this.checkAtUpdate = json.getBoolean("checkAtUpdate", false);
+        this.expression = ExpressionUtils.createExpression(json.getString("expression", null));
+        this.symbolTable = new FeatureSymbolTableImpl();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DALFunctions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DALFunctions.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/DALFunctions.java	(revision 46118)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl;
+
+import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
+import org.gvsig.expressionevaluator.impl.grammars.DataAccessGrammarFactory;
+import org.gvsig.expressionevaluator.impl.symboltable.DALSymbolTableFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface DALFunctions {
+
+  public static final String SYMBOLTABLE_NAME = "DataAccess";
+  public static final String GRAMMAR_NAME = "DataAccess";
+
+  public static final String GROUP_DATA_ACCESS = "Data access";
+
+  public static void register() {
+    DataAccessGrammarFactory.selfRegister();
+    DALSymbolTableFactory.selfRegister();
+    DALFormatter.selfRegister();
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/DataAccessGrammarFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/DataAccessGrammarFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/DataAccessGrammarFactory.java	(revision 46118)
@@ -0,0 +1,670 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.expressionevaluator.impl.grammars;
+
+import java.util.UUID;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.CodeBuilder;
+import org.gvsig.expressionevaluator.Codes;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.Grammar;
+import org.gvsig.expressionevaluator.Statement;
+import org.gvsig.expressionevaluator.Statement.ArgsBuilder;
+import org.gvsig.expressionevaluator.Statement.StatementContext;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseCodes;
+import org.gvsig.expressionevaluator.impl.DefaultStatement;
+import org.gvsig.expressionevaluator.impl.DefaultStatement.ArgsBuilderFromNames;
+import org.gvsig.expressionevaluator.impl.function.dataaccess.ExistsFunction;
+import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE_STRUCTURE;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT_FROM_SELECTION;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_FROM_SELECTION;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DataAccessGrammarFactory extends AbstractGrammarFactory {
+
+    private Grammar grammar;
+
+    private static class ExistsStatementBuilder extends DefaultStatement.StatementBuilderBase {
+
+        private final String listID;
+        private final String existsID;
+
+        public ExistsStatementBuilder(String listID, String existsID) {
+            super(ExistsFunction.NAME, new ArgsBuilderFromNames(listID, existsID));
+            this.listID = listID;
+            this.existsID = existsID;
+        }
+
+        @Override
+        public Code build(StatementContext context) {
+
+            CodeBuilder codeBuilder = context.getCodeBuilder();
+            Callable code = (Callable) super.build(context);
+            BaseCodes args = (BaseCodes) code.parameters();
+            if (args.size() < 2) {
+                String exists_id = "EXISTS" + UUID.randomUUID().toString().replaceAll("-", "");
+                args.add(codeBuilder.constant(exists_id));
+            } else if (args.get(1) == null) {
+                String exists_id = "EXISTS" + UUID.randomUUID().toString().replaceAll("-", "");
+                args.set(1, codeBuilder.constant(exists_id));
+            }
+            code = codeBuilder.function(ExistsFunction.NAME, args);
+            return code;
+        }
+
+    }
+
+    private static class SelectArgsBuilder implements ArgsBuilder {
+
+        public SelectArgsBuilder() {
+        }
+
+        @Override
+        public String toString() {
+            return "select_args()";
+        }
+
+        @Override
+        public Codes build(StatementContext context) {
+            context.trace(this.toString() + ".build");
+
+            CodeBuilder codeBuilder = context.getCodeBuilder();
+            BaseCodes args = (BaseCodes) codeBuilder.args();
+            return build(context, args);
+        }
+
+        public Codes build(StatementContext context, BaseCodes args) {
+            int n;
+            BaseCodes argsX;
+
+            CodeBuilder codeBuilder = context.getCodeBuilder();
+
+            Code columns = context.getCode("COLUMNS");
+            args.add(columns);
+
+            Code table = context.getCode("TABLE");
+            args.add(table);
+
+            Code where = context.getCode("WHERE");
+            if (where == null) {
+                args.add(codeBuilder.constant(null));
+            } else {
+                args.add(where);
+            }
+
+            n = 1;
+            argsX = (BaseCodes) codeBuilder.args();
+            while (true) {
+                String argNameX = "ORDER" + String.valueOf(n);
+                Code code = context.getCode(argNameX);
+                if (code == null) {
+                    break;
+                }
+                argsX.add(code);
+                n++;
+            }
+            args.add(codeBuilder.tuple(argsX));
+
+            n = 1;
+            argsX = (BaseCodes) codeBuilder.args();
+            while (true) {
+                String argNameX = "ORDER_MODE" + String.valueOf(n);
+                Code code = context.getCode(argNameX);
+                if (code == null) {
+                    break;
+                }
+                argsX.add(code);
+                n++;
+            }
+            args.add(codeBuilder.tuple(argsX));
+
+            Code limit = context.getCode("LIMIT");
+            if (limit == null) {
+                args.add(codeBuilder.constant(null));
+            } else {
+                args.add(limit);
+            }
+            return args;
+
+        }
+
+    }
+
+    private static class InsertIntoArgsBuilder
+            extends SelectArgsBuilder
+            implements ArgsBuilder {
+
+        public InsertIntoArgsBuilder() {
+        }
+
+        @Override
+        public String toString() {
+            return "insert_into_args()";
+        }
+
+        @Override
+        public Codes build(StatementContext context) {
+            context.trace(this.toString() + ".build");
+
+            CodeBuilder codeBuilder = context.getCodeBuilder();
+            BaseCodes args = (BaseCodes) codeBuilder.args();
+
+            Code table = context.getCode("TARGETTABLE");
+            args.add(codeBuilder.identifier((String) ((Code.Constant) table).value()));
+
+            return build(context, args);
+        }
+
+    }
+
+    private static class SelectCountArgsBuilder implements ArgsBuilder {
+
+        public SelectCountArgsBuilder() {
+        }
+
+        @Override
+        public String toString() {
+            return "select_count_args()";
+        }
+
+        @Override
+        public Codes build(StatementContext context) {
+            context.trace(this.toString() + ".build");
+            CodeBuilder codeBuilder = context.getCodeBuilder();
+            BaseCodes args = (BaseCodes) codeBuilder.args();
+
+            Code table = context.getCode("table");
+            Code where = context.getCode("where");
+
+            args.add(table);
+
+            if (where == null) {
+                args.add(codeBuilder.constant(null));
+            } else {
+                args.add(where);
+            }
+            return args;
+        }
+
+    }
+
+    public DataAccessGrammarFactory() {
+        super(DALFunctions.GRAMMAR_NAME, true);
+    }
+
+    @Override
+    public Grammar create(Object... parameters) {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        if (this.grammar == null) {
+            Grammar theGrammar = manager.createGrammar(this.getName());
+
+            theGrammar.addStatement(createCreateInMemoryTableStatement(theGrammar));
+            theGrammar.addStatement(createCreateTableStatement(theGrammar));
+            theGrammar.addStatement(createCreateTableStructureStatement(theGrammar));
+            theGrammar.addStatement(createExistsStatement(theGrammar));
+            theGrammar.addStatement(createForeingValueStatement(theGrammar));
+            theGrammar.addStatement(createInsertIntoTableSelectStatement(theGrammar));
+            theGrammar.addStatement(createSelectCountStatement(theGrammar));
+            theGrammar.addStatement(createSelectStatement(theGrammar));
+//            theGrammar.addStatement(createUpdateStatement(theGrammar));
+            theGrammar.addStatement(createSelectCountFromSelectionStatement(theGrammar));
+            theGrammar.addStatement(createSelectFromSelectionStatement(theGrammar));
+
+            this.grammar = theGrammar;
+        }
+
+        return grammar;
+    }
+
+    private Statement createExistsStatement(Grammar theGrammar) {
+//    
+//      EXISTS( SELECT...)
+//
+        Statement stmt;
+
+        theGrammar.addReservedWord("EXISTS");
+
+        stmt = theGrammar.createStatement("EXISTS");
+        stmt.addRule(stmt.require_any_token("EXISTS"));
+        stmt.addRule(stmt.require_any_token("("));
+        stmt.addRule(stmt.require_expression().capture_as("LIST"));
+        stmt.addRule(stmt.optional_any_token(",")
+                .addRuleOnTrue(stmt.require_expression().capture_as("ID"))
+        );
+        stmt.addRule(stmt.require_any_token(")"));
+        stmt.builder(new ExistsStatementBuilder("LIST", "ID"));
+
+        return stmt;
+    }
+
+    private Statement createForeingValueStatement(Grammar theGrammar) {
+        Statement stmt;
+//      
+//      FOREING VALUE FROM table_name.column_name  
+//        
+        theGrammar.addReservedWord("FROM");
+
+        stmt = theGrammar.createStatement("FOREING_VALUE");
+        stmt.addRule(stmt.require_any_token("FOREING"));
+        stmt.addRule(stmt.require_any_token("VALUE"));
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_identifiers(".").capture_as("IDENTIFIERS"));
+        stmt.code(
+                FUNCTION_FOREING_VALUE,
+                stmt.args_names("IDENTIFIERS")
+        );
+
+        return stmt;
+    }
+
+    private Statement createCreateInMemoryTableStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      CREATE IN MEMORY TABLE target_table_name FROM source_table_name
+//        
+        theGrammar.addReservedWord("FROM");
+
+        stmt = theGrammar.createStatement("CREATE_IN_MEMORY_TABLE");
+        stmt.addRule(stmt.require_any_token("CREATE"));
+        stmt.addRule(stmt.require_any_token("IN"));
+        stmt.addRule(stmt.require_any_token("MEMORY"));
+        stmt.addRule(stmt.require_any_token("TABLE"));
+        stmt.addRule(stmt.require_identifier().capture_as("NEWTABLE"));
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_identifier().capture_as("SOURCETABLE"));
+        stmt.code(
+                FUNCTION_FOREING_VALUE,
+                stmt.args_names("NEWTABLE", "SOURCETABLE")
+        );
+
+        return stmt;
+    }
+
+    private Statement createSelectStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      SELECT * | (column1, column2,...) 
+//          FROM table_name
+//          WHERE expression
+//          ORDER BY expression1 ASC|DESC, expression2 ASC|DESC ...
+//          LIMIT expression
+//        
+        theGrammar.addReservedWord("SELECT");
+        theGrammar.addReservedWord("FROM");
+        theGrammar.addReservedWord("WHERE");
+        theGrammar.addReservedWord("ORDER");
+        theGrammar.addReservedWord("BY");
+        theGrammar.addReservedWord("DESC");
+        theGrammar.addReservedWord("ASC");
+        theGrammar.addReservedWord("LIMIT");
+
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        CodeBuilder codeBuilder = manager.createCodeBuilder();
+
+        stmt = theGrammar.createStatement("SELECT");
+        stmt.addRule(stmt.require_any_token("SELECT"));
+        stmt.addRule(stmt.optional_any_token("*")
+                .addRuleOnTrue(stmt.set_expression("COLUMNS", codeBuilder.tuple()))
+                .addRuleOnFalse(stmt.require_identifiers(",").capture_as("COLUMNS"))
+        );
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
+        stmt.addRule(stmt.optional_any_token("WHERE")
+                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
+        );
+
+        stmt.addRule(stmt.optional_any_token("ORDER")
+                .addRuleOnTrue(stmt.require_any_token("BY"))
+                .addRuleOnTrue(stmt.repeat()
+                        .addRule(stmt.require_expression().capture_as("ORDER#"))
+                        .addRule(stmt.switch_token()
+                                .addCase("ASC", stmt.set_expression("ORDER_MODE#", true))
+                                .addCase("DESC", stmt.set_expression("ORDER_MODE#", false))
+                                .addDefault(stmt.set_expression("ORDER_MODE#", true))
+                        )
+                        .addRule(stmt.optional_any_token(",")
+                                .addRuleOnFalse(stmt.break_loop())
+                        )
+                )
+        );
+        stmt.addRule(stmt.optional_any_token("LIMIT")
+                .addRuleOnTrue(stmt.require_expression().capture_as("LIMIT"))
+        );
+        stmt.addRule(stmt.optional_any_token(";"));
+        stmt.code(
+                FUNCTION_SELECT,
+                new SelectArgsBuilder()
+        );
+
+        return stmt;
+    }
+
+    private Statement createSelectFromSelectionStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      SELECT * | (column1, column2,...) 
+//          FROM SELECTION OF table_name
+//          WHERE expression
+//        
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        CodeBuilder codeBuilder = manager.createCodeBuilder();
+
+        stmt = theGrammar.createStatement("SELECTFROMSELECTION");
+        stmt.addRule(stmt.require_any_token("SELECT"));
+        stmt.addRule(stmt.optional_any_token("*")
+                .addRuleOnTrue(stmt.set_expression("COLUMNS", codeBuilder.tuple()))
+                .addRuleOnFalse(stmt.require_identifiers(",").capture_as("COLUMNS"))
+        );
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_any_token("SELECTION"));
+        stmt.addRule(stmt.optional_any_token("IF")
+                .addRuleOnTrue(stmt.require_tokens("NOT", "EMPTY").capture_as("IF_NOT_EMPTY"))
+        );
+        stmt.addRule(stmt.optional_any_token("OF"));
+        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
+        stmt.addRule(stmt.optional_any_token("WHERE")
+                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
+        );
+        stmt.addRule(stmt.optional_any_token("LIMIT")
+                .addRuleOnTrue(stmt.require_expression().capture_as("LIMIT"))
+        );
+        stmt.addRule(stmt.optional_any_token(";"));
+        stmt.code(
+                FUNCTION_SELECT_FROM_SELECTION,
+                stmt.args_names("COLUMNS", "TABLE", "WHERE", "LIMIT","IF_NOT_EMPTY")
+        );
+
+        return stmt;
+    }
+
+    private Statement createInsertIntoTableSelectStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      INSERT INTO target_table_name 
+//          SELECT
+//              FROM table_name
+//              WHERE expression
+//              ORDER BY expression1 ASC|DESC, expression2 ASC|DESC ...
+//              LIMIT expression
+//        
+//        
+        theGrammar.addReservedWord("INSERT");
+        theGrammar.addReservedWord("INTO");
+        theGrammar.addReservedWord("SELECT");
+        theGrammar.addReservedWord("FROM");
+        theGrammar.addReservedWord("WHERE");
+        theGrammar.addReservedWord("ORDER");
+        theGrammar.addReservedWord("BY");
+        theGrammar.addReservedWord("LIMIT");
+
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        CodeBuilder codeBuilder = manager.createCodeBuilder();
+
+        stmt = theGrammar.createStatement("INSERT_INTO_SELECT");
+        stmt.addRule(stmt.require_any_token("INSERT"));
+        stmt.addRule(stmt.require_any_token("INTO"));
+        stmt.addRule(stmt.require_identifier().capture_as("TARGETTABLE"));
+        stmt.addRule(stmt.require_any_token("SELECT"));
+        stmt.addRule(stmt.optional_any_token("*")
+                .addRuleOnTrue(stmt.set_expression("COLUMNS", codeBuilder.tuple()))
+                .addRuleOnFalse(stmt.require_identifiers(",").capture_as("COLUMNS"))
+        );
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_identifier().capture_as("TABLE"));
+        stmt.addRule(stmt.optional_any_token("WHERE")
+                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
+        );
+
+        stmt.addRule(stmt.optional_any_token("ORDER")
+                .addRuleOnTrue(stmt.require_any_token("BY"))
+                .addRuleOnTrue(stmt.repeat()
+                        .addRule(stmt.require_expression().capture_as("ORDER#"))
+                        .addRule(stmt.switch_token()
+                                .addCase("ASC", stmt.set_expression("ORDER_MODE#", true))
+                                .addCase("DESC", stmt.set_expression("ORDER_MODE#", false))
+                                .addDefault(stmt.set_expression("ORDER_MODE#", true))
+                        )
+                        .addRule(stmt.optional_any_token(",")
+                                .addRuleOnFalse(stmt.break_loop())
+                        )
+                )
+        );
+        stmt.addRule(stmt.optional_any_token("LIMIT")
+                .addRuleOnTrue(stmt.require_expression().capture_as("LIMIT"))
+        );
+        stmt.addRule(stmt.optional_any_token(";"));
+        stmt.code(
+                DataManager.FUNCTION_INSERT_INTO_TABLE,
+                new InsertIntoArgsBuilder()
+        );
+
+        return stmt;
+    }
+
+    private Statement createSelectCountStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      SELECT COUNT(*) FROM table_name WHERE expression
+//        
+        theGrammar.addReservedWord("SELECT");
+        theGrammar.addReservedWord("FROM");
+        theGrammar.addReservedWord("WHERE");
+
+        stmt = theGrammar.createStatement("SELECT_COUNT");
+        stmt.addRule(stmt.require_any_token("SELECT"));
+        stmt.addRule(stmt.require_any_token("COUNT"));
+        stmt.addRule(stmt.require_any_token("("));
+        stmt.addRule(stmt.require_any_token("*"));
+        stmt.addRule(stmt.require_any_token(")"));
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
+        stmt.addRule(stmt.optional_any_token("WHERE")
+                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
+        );
+        stmt.addRule(stmt.require_any_token(";"));
+        stmt.code(
+                FUNCTION_SELECT_COUNT,
+                new SelectCountArgsBuilder()
+        );
+        return stmt;
+    }
+
+    private Statement createSelectCountFromSelectionStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      SELECT COUNT(*) FROM SELECTION IF NOT IS EMPTY OF table_name WHERE expression
+//        
+        stmt = theGrammar.createStatement("SELECT_COUNT_FROM_SELECTION");
+        stmt.addRule(stmt.require_any_token("SELECT"));
+        stmt.addRule(stmt.require_any_token("COUNT"));
+        stmt.addRule(stmt.require_any_token("("));
+        stmt.addRule(stmt.require_any_token("*"));
+        stmt.addRule(stmt.require_any_token(")"));
+        stmt.addRule(stmt.require_any_token("FROM"));
+        stmt.addRule(stmt.require_any_token("SELECTION"));
+        stmt.addRule(stmt.optional_any_token("IF")
+                .addRuleOnTrue(stmt.require_tokens("NOT", "EMPTY").capture_as("IF_NOT_EMPTY"))
+        );
+        stmt.addRule(stmt.require_any_token("OF"));
+        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
+        stmt.addRule(stmt.optional_any_token("WHERE")
+                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
+        );
+        stmt.addRule(stmt.require_any_token(";"));
+        stmt.code(
+                FUNCTION_SELECT_COUNT_FROM_SELECTION,
+                stmt.args_names("TABLE", "WHERE", "IF_NOT_EMPTY")
+        );
+        return stmt;
+    }
+
+    private Statement createCreateTableStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      CREATE TABLE 
+//              ...json_definition...
+//          IN
+//             ...target_table_parameters_as_json
+//        
+        theGrammar.addReservedWord("CREATE");
+
+        stmt = theGrammar.createStatement("CREATE_TABLE");
+        stmt.addRule(stmt.require_any_token("CREATE"));
+        stmt.addRule(stmt.require_any_token("TABLE"));
+        stmt.addRule(stmt.require_expression().capture_as("STRUCTURE"));
+        stmt.addRule(stmt.require_any_token("IN"));
+        stmt.addRule(stmt.require_expression().capture_as("LOCATION"));
+        stmt.code(
+                FUNCTION_CREATE_TABLE,
+                stmt.args_names("STRUCTURE", "LOCATION")
+        );
+        return stmt;
+    }
+
+    private Statement createCreateTableStructureStatement(Grammar theGrammar) {
+        Statement stmt;
+//
+//      CREATE TABLE STRUCTURE
+//              ...json_definition...
+//        
+
+        theGrammar.addReservedWord("CREATE");
+
+        stmt = theGrammar.createStatement("CREATE_TABLE_STRUCTURE");
+        stmt.addRule(stmt.require_any_token("CREATE"));
+        stmt.addRule(stmt.require_any_token("TABLE"));
+        stmt.addRule(stmt.require_any_token("STRUCTURE"));
+        stmt.addRule(stmt.require_expression().capture_as("STRUCTURE"));
+        stmt.code(
+                FUNCTION_CREATE_TABLE_STRUCTURE,
+                stmt.args_names("STRUCTURE")
+        );
+
+        return stmt;
+    }
+
+    private Statement createInsertIntoTableStatement(Grammar theGrammar) {
+        // TODO: terminar de implementar
+        Statement stmt;
+//
+//      INSERT INTO table_name 
+//              ( column_name1, column_name2,... )
+//          VALUES
+//              ( expression1, expression2, ...) | expression_list
+//
+        theGrammar.addReservedWord("INSERT");
+        theGrammar.addReservedWord("INTO");
+//        theGrammar.addReservedWord("VALUES");
+
+        stmt = theGrammar.createStatement("INSERT_INTO");
+        stmt.addRule(stmt.require_any_token("INSERT"));
+        stmt.addRule(stmt.require_any_token("INTO"));
+        stmt.addRule(stmt.require_identifier().capture_as("TARGETTABLE"));
+        stmt.addRule(stmt.require_any_token("("));
+        stmt.addRule(stmt.require_identifiers(",").capture_as("COLUMNS"));
+        stmt.addRule(stmt.require_any_token(")"));
+        stmt.addRule(stmt.require_any_token("VALUES"));
+        stmt.addRule(stmt.optional_any_token("(")
+                .addRuleOnTrue(stmt.require_expressions(",").capture_as("VALUES"))
+                .addRuleOnTrue(stmt.require_any_token(")"))
+                .addRuleOnFalse(stmt.require_expression().capture_as("VALUES"))
+        );
+        stmt.addRule(stmt.optional_any_token(";"));
+//        stmt.code(
+//                DataManager.FUNCTION_INSERT_INTO,
+//                stmt.args_names("TARGETTABLE","COLUMNS", "VALUES")
+//        );
+
+        return stmt;
+    }
+
+    private Statement createUpdateStatement(Grammar theGrammar) {
+        Statement stmt;
+//        
+//      UPDATE table_name
+//        SET column1 = expression1, column2 = expression2, ...
+//        WHERE condition; 
+//
+        theGrammar.addReservedWord("UPDATE");
+        theGrammar.addReservedWord("WHERE");
+
+        stmt = theGrammar.createStatement("UPDATE");
+        stmt.addRule(stmt.require_any_token("UPDATE"));
+        stmt.addRule(stmt.require_identifier().capture_as("TABLE"));
+        stmt.addRule(stmt.require_any_token("SET"));
+        stmt.addRule(stmt.repeat_until_any_tokens("WHERE")
+                .addRule(stmt.require_identifier().capture_as("#COLUMNS"))
+                .addRule(stmt.require_any_token("="))
+                .addRule(stmt.require_expression().capture_as("#VALUES"))
+        );
+        stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
+        stmt.addRule(stmt.optional_any_token(";"));
+        stmt.code(
+                DataManager.FUNCTION_UPDATE,
+                stmt.args_names("TABLE","CONDITION","#COLUMNS", "#VALUES")
+        );
+
+        return stmt;
+    }
+
+    private Statement createDeleteFromTableStatement(Grammar theGrammar) {
+        // TODO: terminar de implementar
+        Statement stmt;
+//
+//      DELETE FROM table_name WHERE condition;
+//
+        theGrammar.addReservedWord("DELETE");
+        theGrammar.addReservedWord("WHERE");
+
+        stmt = theGrammar.createStatement("DELETE");
+        stmt.addRule(stmt.require_any_token("DELETE"));
+        stmt.addRule(stmt.require_identifier().capture_as("TABLE"));
+        stmt.addRule(stmt.require_any_token("WHERE"));
+        stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
+        stmt.addRule(stmt.optional_any_token(";"));
+//        stmt.code(
+//                DataManager.FUNCTION_DELETE,
+//                stmt.args_names("TABLE","CONDITION")
+//        );
+
+        return stmt;
+    }
+    
+    public static final void selfRegister() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        manager.registerGrammar(new DataAccessGrammarFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesFactory.java	(revision 46118)
@@ -0,0 +1,49 @@
+package org.gvsig.fmap.dal.complements.relatedfeatures;
+
+import org.gvsig.fmap.dal.complements.RelatedFeatures;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.complement.AbstractComplementFactory;
+import org.gvsig.tools.complement.Complement;
+import org.gvsig.tools.complement.ComplementsManager;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.Tagged;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RelatedFeaturesFactory extends AbstractComplementFactory<Tagged>{
+
+    public RelatedFeaturesFactory() {
+        super(RelatedFeatures.COMPLEMENT_MANE);
+    }
+    
+    @Override
+    public Complement<Tagged> createComplement(Tagged object) {
+        return new RelatedFeaturesImpl(this, object);
+    }
+    
+    
+    public static void selfRegister() {
+        ComplementsManager complementsManager = ToolsLocator.getComplementsManager();
+        complementsManager.registerComplement(new RelatedFeaturesFactory());
+        
+        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+        dynObjectManager.registerTag(
+                RelatedFeatures.DAL_RELATED_COLUMNS, 
+                "Part of a table of related features definition, stores the name of the fields to be shown in the table separated by two points."
+        );
+        dynObjectManager.registerTag(
+                RelatedFeatures.DAL_RELATED_TABLE, 
+                "Part of a table of related features definition, store the table name of features."
+        );
+        dynObjectManager.registerTag(
+                RelatedFeatures.DAL_RELATED_UNIQUE_FIELD_NAME, 
+                "Part of a table of related features definition, store the name of the field that is a unique key in the features table."
+        );
+//        dynObjectManager.registerTag(
+//                RelatedFeatures.DAL_RELATED_FOREING_KEY_NAME, 
+//                "Part of a table of related features definition, store the name of the field that is the foreing key in the features table."
+//        );
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesImpl.java	(revision 46118)
@@ -0,0 +1,312 @@
+package org.gvsig.fmap.dal.complements.relatedfeatures;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.complements.RelatedFeatures;
+import org.gvsig.fmap.dal.complements.Search;
+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.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.complement.AbstractComplement;
+import org.gvsig.tools.complement.ComplementFactory;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.Tagged;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class RelatedFeaturesImpl
+        extends AbstractComplement<Tagged>
+        implements RelatedFeatures {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(RelatedFeaturesImpl.class);
+
+    private class DefaultContextRelatedFeatures implements ContextRelatedFeatures {
+
+        private FeatureStore featureStore = null;
+        private StoresRepository storesRepository = null;
+        private int refs;
+
+        public DefaultContextRelatedFeatures() {
+            this.refs = 1;
+        }
+
+        public void addRef() {
+            this.refs++;
+        }
+
+        public void release() {
+            this.refs--;
+        }
+
+        @Override
+        public void dispose() {
+            DisposeUtils.disposeQuietly(featureStore);
+            this.featureStore = null;
+            this.storesRepository = null;
+        }
+
+        @Override
+        public ContextRelatedFeatures setStoresRepository(StoresRepository repository) {
+            this.storesRepository = repository;
+            return this;
+        }
+
+        @Override
+        public StoresRepository getStoresRepository() {
+            if (this.storesRepository == null) {
+                FeatureStore store = null;
+                if (getObject() instanceof FeatureAttributeDescriptor) {
+                    store = ((FeatureAttributeDescriptor) getObject()).getStore();
+                } else if (getObject() instanceof FeatureType) {
+                    store = ((FeatureType) getObject()).getStore();
+                }
+                if (store == null) {
+                    this.storesRepository = DALLocator.getDataManager().getStoresRepository();
+                } else {
+                    this.storesRepository = store.getStoresRepository();
+                }
+            }
+            return this.storesRepository;
+        }
+
+        @Override
+        public FeatureStore getFeatureStore() {
+            if (this.featureStore == null) {
+                if ( getObject() instanceof FeatureAttributeDescriptor) {
+                    FeatureStore store = ((FeatureAttributeDescriptor) getObject()).getStore();
+                    if( store != null ) {
+                        StoresRepository repository = store.getStoresRepository();
+                        if( repository.containsKey(getTableName()) ) {
+                            this.featureStore = (FeatureStore) repository.getStore(getTableName());
+                            if( this.featureStore!=null) {
+                                return this.featureStore;
+                            }
+                        }
+                    }
+                } 
+                StoresRepository repository = this.getStoresRepository();
+                this.featureStore = (FeatureStore) repository.getStore(getTableName());
+                if (this.featureStore == null) {
+                    LOGGER.warn("Can't locate store '" + getTableName() + "'.");
+                    return null;
+                }
+            }
+            return this.featureStore;
+        }
+
+        @Override
+        public FeatureType getFeatureType() {
+            try {
+                FeatureStore store = this.getFeatureStore();
+                return store.getDefaultFeatureType();
+            } catch (Exception ex) {
+                return null;
+            }
+        }
+
+    }
+
+    public RelatedFeaturesImpl(ComplementFactory<Tagged> factory, Tagged object) {
+        super(factory, object);
+    }
+
+    @Override
+    public boolean isRelatedFeatures() {
+        return isRelatedFeatures(null);
+    }
+
+    @Override
+    public boolean isRelatedFeatures(ContextRelatedFeatures context) {
+        context = createLocalContextIfNull(context);
+        try {
+            String tableName = this.getTableName();
+            if (StringUtils.isBlank(tableName)
+                    || StringUtils.isBlank(this.getUniqueKeyName())) {
+                return false;
+            }
+            
+            Tagged attribute = this.getObject();
+            if (!(attribute instanceof FeatureAttributeDescriptor)) {
+                return true;
+            }
+            FeatureStore store = ((FeatureAttributeDescriptor) attribute).getStore();
+            if (store == null) {
+                return true;
+            }
+            StoresRepository repository = store.getStoresRepository();
+            return repository.containsKey(tableName);
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public String getUniqueKeyName() {
+        Tagged attribute = this.getObject();
+        String codeName = attribute.getTags().getString(DAL_RELATED_UNIQUE_FIELD_NAME, null);
+        return codeName;
+    }
+
+//    @Override
+//    public String getForeingKeyName() {
+//        Tagged attribute = this.getObject();
+//        String codeName = attribute.getTags().getString(DAL_RELATED_FOREING_KEY_NAME, null);
+//        return codeName;
+//    }
+
+    @Override
+    public String getTableName() {
+        Tagged attribute = this.getObject();
+        String tableName = attribute.getTags().getString(DAL_RELATED_TABLE, null);
+        return tableName;
+    }
+    
+    @Override
+    public ContextRelatedFeatures createContext() {
+        return new DefaultContextRelatedFeatures();
+    }
+
+    private void disposeIfLocalContext(ContextRelatedFeatures context) {
+        DefaultContextRelatedFeatures c = (DefaultContextRelatedFeatures) context;
+        c.release();
+        if (c.refs == 0) {
+            context.dispose();
+        }
+    }
+
+    private ContextRelatedFeatures createLocalContextIfNull(ContextRelatedFeatures context) {
+        if (context == null) {
+            return new DefaultContextRelatedFeatures();
+        }
+        DefaultContextRelatedFeatures c = (DefaultContextRelatedFeatures) context;
+        c.addRef();
+        return c;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore(ContextRelatedFeatures context) {
+        context = createLocalContextIfNull(context);
+        try {
+            return context.getFeatureStore();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+    
+//    @Override
+//    public Object getForeingKey(ContextRelatedFeatures context, Feature feature) {
+////        context = createLocalContextIfNull(context);
+//        try {
+//            return feature.get(getForeingKeyName());
+//        } finally {
+////            disposeIfLocalContext(context);
+//        }
+//    }
+
+    @Override
+    public Object getUniqueKey(ContextRelatedFeatures context, Feature feature) {
+//        context = createLocalContextIfNull(context);
+        try {
+            return feature.get(getUniqueKeyName());
+        } finally {
+//            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public FeatureQuery getForeingKeyQuery(ContextRelatedFeatures context, Object codeValue) {
+        if( !(this.getObject() instanceof FeatureAttributeDescriptor) ) {
+            return null;
+        }
+        String me = ((FeatureAttributeDescriptor)this.getObject()).getStore().getName();
+        FeatureType ftype = context.getFeatureType();
+        for (FeatureAttributeDescriptor attr : ftype) {
+            if( attr.isForeingKey() ) {
+                ForeingKey fkey = attr.getForeingKey();
+                if( StringUtils.equals(fkey.getTableName(), me) ) {
+                    return this.getQuery(context, fkey.getCodeName(), codeValue);
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public FeatureQuery getUniqueKeyQuery(ContextRelatedFeatures context, Object codeValue) {
+        return this.getQuery(context, this.getUniqueKeyName(), codeValue);
+    }
+
+    public FeatureQuery getQuery(ContextRelatedFeatures context, String fieldName, Object codeValue) {
+        context = createLocalContextIfNull(context);
+        try {
+            FeatureStore store = context.getFeatureStore();
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            FeatureQuery query = store.createFeatureQuery();
+            query.setFilter(builder.eq(
+                    builder.variable(fieldName),
+                    builder.constant(codeValue)
+            ).toString()
+            );
+            query.retrievesAllAttributes();
+            return query;
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public List<String> getColumns(ContextRelatedFeatures context) {
+        context = createLocalContextIfNull(context);
+        try {
+            Tagged attribute = this.getObject();
+            List<String> columnNames;
+            String columns = attribute.getTags().getString(DAL_RELATED_COLUMNS, null);
+            if (StringUtils.isBlank(columns)) {
+                FeatureType featureType = context.getFeatureType();
+                if (featureType == null) {
+                    return null;
+                }
+                Search search = (Search) ToolsLocator.getComplementsManager().get(
+                        Search.COMPLEMENT_MANE, featureType
+                );
+                columnNames = search.getResultColumnNames();
+            } else {
+                columnNames = Arrays.asList(split(columns, ":/;,|-"));
+            }
+            return columnNames;
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    private String[] split(String value, String separators) {
+        int firstSeparatorPosition = 1000000;
+        Character sep = null;
+        for (char ch : separators.toCharArray()) {
+            int pos = value.indexOf(ch);
+            if (pos > 0 && pos < firstSeparatorPosition) {
+                sep = ch;
+                firstSeparatorPosition = pos;
+            }
+        }
+        if (sep == null) {
+            return new String[]{value};
+        }
+        return value.split("[" + sep + "]");
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchFactory.java	(revision 46118)
@@ -0,0 +1,44 @@
+package org.gvsig.fmap.dal.complements.search;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.complements.Search;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.complement.AbstractComplementFactory;
+import org.gvsig.tools.complement.Complement;
+import org.gvsig.tools.complement.ComplementsManager;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.Tagged;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SearchFactory extends AbstractComplementFactory<FeatureType>{
+
+    public SearchFactory() {
+        super(Search.COMPLEMENT_MANE);
+    }
+    
+    @Override
+    public Complement<FeatureType> createComplement(FeatureType object) {
+        return new SearchImpl(this, object);
+    }
+    
+    public static void selfRegister() {
+        ComplementsManager complementsManager = ToolsLocator.getComplementsManager();
+        complementsManager.registerComplement(new SearchFactory());
+        
+        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+        dynObjectManager.registerTag(
+                Search.DAL_SEARCH_ATTRIBUTE_PRIORITY,
+                "Priority of the field when displaying it in the searchs field lists."
+        ).setType(DataTypes.INT);
+        dynObjectManager.registerTag(
+                DataManager.DAL_PREFERRED_COLUMNS,
+                "Columns to be used when the data is shown in tabular form."
+        );
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/search/SearchImpl.java	(revision 46118)
@@ -0,0 +1,201 @@
+package org.gvsig.fmap.dal.complements.search;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.function.Predicate;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.complements.Search;
+import static org.gvsig.fmap.dal.complements.Search.DAL_SEARCH_ATTRIBUTE_PRIORITY;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.complement.AbstractComplement;
+import org.gvsig.tools.complement.ComplementFactory;
+import org.gvsig.tools.util.ChainedIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SearchImpl
+        extends AbstractComplement<FeatureType>
+        implements Search {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(SearchImpl.class);
+
+    public SearchImpl(ComplementFactory<FeatureType> factory, FeatureType object) {
+        super(factory, object);
+    }
+
+    @Override
+    public List<String> getResultColumnNames() {
+        FeatureType featureType = this.getObject();
+        List<String> columnNames;
+        String columns = featureType.getTags().getString(DataManager.DAL_PREFERRED_COLUMNS, null);
+        if( StringUtils.isBlank(columns) ) {
+            List<FeatureAttributeDescriptor> attributes = featureType.getFilteredAttributes(
+                    FeatureType.BASIC_TYPES_FILTER,
+                    12
+            );
+            attributes.sort(Search.STR_INT_LONG_LABEL_ORDER);
+            columnNames = new ArrayList<>();
+            for (FeatureAttributeDescriptor attr : attributes) {
+                columnNames.add(attr.getName());
+            }
+        } else {
+            columnNames = Arrays.asList(split(columns, ":/;,|-"));
+        }
+        return columnNames;
+    }
+
+    private String[] split(String value, String separators) {
+        int firstSeparatorPosition = 1000000;
+        Character sep = null;
+        for (char ch : separators.toCharArray()) {
+            int pos = value.indexOf(ch);
+            if( pos>0 && pos<firstSeparatorPosition ) {
+                sep = ch;
+                firstSeparatorPosition = pos;
+            }
+        }
+        if( sep == null ) {
+            return new String[] { value };
+        }
+        return value.split("["+sep+"]");
+    }
+
+    private static class AnOrderedAttribute implements OrderedAttribute {
+        private final FeatureAttributeDescriptor descriptor;
+        private final int type;
+        
+        public AnOrderedAttribute(FeatureAttributeDescriptor descriptor, int type) {
+            this.descriptor = descriptor;
+            this.type = type;
+        }
+
+        @Override
+        public FeatureAttributeDescriptor getDescriptor() {
+            return descriptor;
+        }
+
+        @Override
+        public int getType() {
+            return type;
+        }
+        
+    }
+    
+    @Override
+    public List<OrderedAttribute> getOrderedAttributes(
+            Predicate<FeatureAttributeDescriptor> filter, 
+            final Comparator<FeatureAttributeDescriptor> comparator,
+            int max
+        ) {
+        FeatureType tthis = this.getObject();
+
+        List<OrderedAttribute> mostUsed = new ArrayList<>();
+        List<OrderedAttribute> favorites = new ArrayList<>();
+        List<OrderedAttribute> normal = new ArrayList<>();
+
+        for (FeatureAttributeDescriptor attribute : tthis.getRecentUseds()) {
+            mostUsed.add(new AnOrderedAttribute(attribute, OrderedAttribute.TYPE_RECENT));
+        }
+        for (FeatureAttributeDescriptor attribute : this.getFavorites()) {
+            if (contains(mostUsed, attribute.getName())) {
+                continue;
+            }
+            if (filter.test(attribute)) {
+                favorites.add(new AnOrderedAttribute(attribute, OrderedAttribute.TYPE_FAVORITE));
+            }
+        }
+        for (FeatureAttributeDescriptor attribute : tthis.getAllAttributeDescriptors()) {
+            if (contains(mostUsed, attribute.getName())) {
+                continue;
+            }
+            if (contains(favorites, attribute.getName())) {
+                continue;
+            }
+            if (filter.test(attribute)) {
+                normal.add(new AnOrderedAttribute(attribute, OrderedAttribute.TYPE_REGURAL));
+            }
+        }
+        
+        Comparator<OrderedAttribute> comparatorAdapter = new Comparator<OrderedAttribute>() {
+            @Override
+            public int compare(OrderedAttribute o1, OrderedAttribute o2) {
+                return comparator.compare(o1.getDescriptor(), o2.getDescriptor());
+            }
+        };
+        mostUsed.sort(comparatorAdapter);
+        favorites.sort(comparatorAdapter);
+        normal.sort(comparatorAdapter);
+
+        if (max < 0) {
+            max = Integer.MAX_VALUE;
+        }
+        Iterator<OrderedAttribute> it = new ChainedIterator<>(
+                mostUsed.iterator(),
+                favorites.iterator(),
+                normal.iterator()
+        );
+        List<OrderedAttribute> r = new ArrayList<>();
+        int n = 0;
+        while (n < max && it.hasNext()) {
+            r.add(it.next());
+            n++;
+        }
+        return r;
+    }
+
+    private static boolean contains(List<OrderedAttribute> attributes, String name) {
+        if (StringUtils.isBlank(name)) {
+            return false;
+        }
+        for (OrderedAttribute attribute : attributes) {
+            if (StringUtils.equalsIgnoreCase(name, attribute.getDescriptor().getName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public int getPriority(FeatureAttributeDescriptor attribute) {
+        if( attribute==null || attribute.getTags()==null ) {
+            return 0;
+        }
+        int p = attribute.getTags().getInt(DAL_SEARCH_ATTRIBUTE_PRIORITY, 0);
+        return p;
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> getFavorites() {
+        FeatureType featureType= this.getObject();
+        List<FeatureAttributeDescriptor> attrs = new ArrayList<>();
+        for (FeatureAttributeDescriptor attribute : featureType) {
+            if( this.getPriority(attribute)>0 ) {
+                attrs.add(attribute);
+            }
+        }
+        if( attrs.isEmpty() ) {
+            return Collections.EMPTY_LIST;
+        }
+        attrs.sort(new Comparator<FeatureAttributeDescriptor>() {
+            @Override
+            public int compare(FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) {
+                return Integer.compare(getPriority(o1), getPriority(o2));
+            }
+        });
+        return attrs;
+    }
+
+    
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.resource.impl;
+
+import java.io.File;
+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.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.MultiResource;
+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.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+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<String,Resource> 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<Resource> 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 {
+                ResourceParameters parameters;
+                if (args == null) {
+                    parameters = (ResourceParameters) ToolsLocator.getExtensionPointManager()
+                        .get(DATA_MANAGER_RESOURCE_PARAMS).create(type);
+                } else {
+                    parameters = (ResourceParameters) ToolsLocator.getExtensionPointManager()
+                        .get(DATA_MANAGER_RESOURCE_PARAMS).create(type, args);
+                }
+                if (parameters == null){
+                    throw new ResourceNotRegisteredException(type);
+                }
+//                if( !type.equalsIgnoreCase(parameters.getTypeName()) ) {
+//                    getLogger().info("Change default provider name of resource from {} to {}.", 
+//                            parameters.getTypeName(), type
+//                    );
+//                    parameters.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, type);
+//                }
+                return parameters;
+            } catch (Exception 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 {
+                    String name = params.getResurceID();
+		    Resource res = (Resource)(this.resources.get(name));
+		    if( res!=null ) {
+		        return (AbstractResource)res;
+		    }
+                    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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/EditingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/EditingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/EditingManager.java	(revision 46118)
@@ -0,0 +1,84 @@
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.Iterator;
+import java.util.List;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+
+
+public interface EditingManager {
+    /*
+    Este interface, con el tiempo deberia ir al SPI.
+    
+    Tendria que sustituir a:
+    - FeatureManager
+    - FeatureTypeManager
+    - SpatialManager
+    como mecanismos para guardar los datos mientras se esta en edicion.
+    
+    Habria que eliminar estos managers del DefaultFeatureStore y sustituirlos
+    por este.
+    
+    En una primera implementacion, se mantendrian estos managers como parte interna
+    de la implementacion del MemoryEditingManager.
+    
+    */
+ 
+    public void dispose();
+    
+    public void delete(Feature feature);
+
+//    public void delete(FeatureReference featureReference);
+    
+    public void add(EditableFeature newFeature);
+    
+    public int update(EditableFeature newFeature, Feature oldFeature);
+        
+    public int update(FeatureType type, FeatureType oldType);
+    
+    public void restore(FeatureReference featureReference);
+
+    public void restore(FeatureReference featureReference, int code);
+    
+    public void restore(String featureTypeId);
+
+    public void restore(String featureTypeId, int code);
+    
+    public boolean isDeleted(Feature feature);
+
+    public boolean isDeleted(FeatureReference featureReference);    
+    
+    public boolean isDeleted(FeatureType type);
+    
+    public boolean isDeleted(String featureTypeId);
+    
+    public boolean isSelectionCompromised();
+    
+    public Iterator<FeatureReference> getDeletedFeatures();
+    public Iterator<FeatureProvider> getInsertedFeatures();
+    public Iterator<FeatureProvider> getUpdatedFeatures();
+    
+    public List<FeatureTypeChanged> getFeatureTypesChanged() throws DataException;
+    
+    public FeatureType getFeatureType(String id) throws DataException ;
+    
+    public Feature getFeature(FeatureReference reference, FeatureStore store, FeatureType type) throws DataException;
+
+
+    /*
+it = featureTypeManager.newsIterator();
+
+position =  expansionManager.update(type, oldType);
+
+expansionManager.restore(oldType.getId(),position);
+
+    spatialManager.cancelModifies();
+*/
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQueryOrder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQueryOrder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQueryOrder.java	(revision 46118)
@@ -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.fmap.dal.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.tools.ToolsLocator;
+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.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.LoggerFactory;
+
+public class DefaultFeatureQueryOrder implements FeatureQueryOrder {
+
+    public static class FeatureQueryOrderMemberImpl implements FeatureQueryOrderMember {
+
+        String attributeName = null;
+        Evaluator evaluator = null;
+//        Expression expression = null;
+        boolean ascending;
+
+        private final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(FeatureQueryOrderMember.class);
+
+        public FeatureQueryOrderMemberImpl() {
+
+        }
+        
+        FeatureQueryOrderMemberImpl(String attributeName, boolean ascending) {
+            this.attributeName = attributeName;
+            this.ascending = ascending;
+        }
+
+        FeatureQueryOrderMemberImpl(Evaluator evaluator, boolean ascending) {
+            this.evaluator = evaluator;
+            LOGGER.warn("Creating evaluator that will not be able to persist");
+            this.ascending = ascending;
+        }
+
+        @Override
+        public String toString() {
+            if (this.evaluator != null) {
+                return this.evaluator.getSQL() + " " + (this.ascending ? "ASC" : "DESC");
+            }
+            return (this.ascending ? "+" : "-") + this.attributeName;
+        }
+
+        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;
+        }
+
+        @Override
+        public void loadFromState(PersistentState state)
+                throws PersistenceException {
+            this.attributeName = state.getString("attributeName");
+            this.ascending = state.getBoolean("ascending");
+            this.evaluator = (Evaluator) state.get("evaluator");
+        }
+
+        @Override
+        public void saveToState(PersistentState state)
+                throws PersistenceException {
+            state.set("attributeName", this.attributeName);
+            state.set("ascending", this.ascending);
+            if(evaluator instanceof ExpressionEvaluator){
+                state.set("evaluator", evaluator);
+            } else {
+                state.setNull("evaluator");
+            }
+        }
+
+        @Override
+        public FeatureQueryOrderMember clone() throws CloneNotSupportedException {
+            // Nothing more to clone
+            return (FeatureQueryOrderMember) super.clone();
+        }
+
+        public void setAscending(boolean ascending) {
+            this.ascending = ascending;
+        }
+
+    }
+
+    private List<FeatureQueryOrderMember> members = new ArrayList();
+    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureQueryOrder.class);
+
+    public DefaultFeatureQueryOrder() {
+    }
+
+    public void copyFrom(FeatureQueryOrder other) {
+        List<FeatureQueryOrderMember> theMembers = new ArrayList<>();
+        for (FeatureQueryOrderMember member : other) {
+            FeatureQueryOrderMember m;
+            try {
+                m = member.clone();
+            } catch (CloneNotSupportedException ex) {
+                throw new RuntimeException("Can't copy member (" + member.toString() + ").", ex);
+            }
+            theMembers.add(m);
+        }
+        this.members = theMembers;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        boolean needComma = false;
+        for (FeatureQueryOrderMember member : members) {
+            if (member != null && !StringUtils.isBlank(member.getAttributeName())) {
+                if (needComma) {
+                    builder.append(",");
+                }
+                builder.append(member.toString());
+                needComma = true;
+            }
+        }
+        String s = builder.toString();
+        if (StringUtils.isBlank(s)) {
+            return null;
+        }
+        return s;
+    }
+
+    public Object add(String order) {
+        if (StringUtils.isEmpty(order)) {
+            return null;
+        }
+        Object r = null;
+        String[] attributes = StringUtils.split(order, ',');
+        for (String attribute : attributes) {
+            boolean ascending = true;
+            if (attribute.startsWith("+")) {
+                ascending = true;
+                attribute = attribute.substring(1);
+            } else if (attribute.startsWith("-")) {
+                ascending = false;
+                attribute = attribute.substring(1);
+            }
+            attribute = attribute.trim();
+            r = this.add(attribute, ascending);
+        }
+        return r;
+    }
+
+    public Object add(String attributeName, boolean ascending) {
+        FeatureQueryOrderMember member = new FeatureQueryOrderMemberImpl(
+                attributeName, ascending);
+        if (members.add(member)) {
+            return member;
+        }
+        return null;
+    }
+
+    public Object add(Expression expr, boolean ascending) {
+        
+        Evaluator evaluator = new DefaultFeatureExpressionEvaluator(expr);
+        FeatureQueryOrderMember member = new FeatureQueryOrderMemberImpl(
+                evaluator,
+                ascending);
+        if (members.add(member)) {
+            return member;
+        }
+        return null;
+        
+    }
+    
+    public Iterable<FeatureQueryOrderMember> members() {
+        //    Me hubiese gustado que FeatureQueryOrder fuese Iterable, pero no se deja por 
+        //    que FeatureQueryOrderMember es una clase interna y no esta definida en el 
+        //    momento de poner el :
+        //            implements Iterable<FeatureQueryOrderMember>
+        //    Y si saco a una clase independiente FeatureQueryOrderMember se pierde 
+        //    compatibilidad binaria con quien la esta usando.
+        //    Para rodearlo, he creado el metodo members.
+        return new Iterable<FeatureQueryOrderMember>() {
+
+            @Override
+            public Iterator<FeatureQueryOrderMember> iterator() {
+                return DefaultFeatureQueryOrder.this.iterator();
+            }
+        };
+    }
+
+    public Iterator<FeatureQueryOrderMember> iterator() {
+        if (members == null) {
+            return new Iterator<FeatureQueryOrderMember>() {
+                @Override
+                public boolean hasNext() {
+                    return false;
+                }
+
+                @Override
+                public FeatureQueryOrderMember next() {
+                    throw new NoSuchElementException();
+                }
+
+                @Override
+                public void remove() {
+                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+                }
+            };
+        }
+        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 int getIndex(String attributeName) {
+        int n = 0;
+        for (FeatureQueryOrderMember member : members) {
+            if (member != null && StringUtils.equalsIgnoreCase(attributeName, member.getAttributeName())) {
+                return n;
+            }
+            n++;
+        }
+        return -1;
+    }
+
+    public void movePrevious(String name) {
+        int n = this.getIndex(name);
+        if (n < 1) {
+            return;
+        }
+        Collections.swap(members, n, n - 1);
+    }
+
+    public void moveNext(String name) {
+        int n = this.getIndex(name);
+        if (n >= this.members.size() - 1) {
+            return;
+        }
+        Collections.swap(members, n, n + 1);
+    }
+
+    public boolean isEmpty() {
+        return this.members == null || this.members.isEmpty();
+    }
+
+    public FeatureQueryOrderMember get(String attributeName) {
+        for (FeatureQueryOrderMember member : members) {
+            if (member != null && StringUtils.equalsIgnoreCase(attributeName, member.getAttributeName())) {
+                return member;
+            }
+        }
+        return null;
+    }
+
+    public boolean contains(String attributeName) {
+        for (FeatureQueryOrderMember member : members) {
+            if (member != null && StringUtils.equalsIgnoreCase(attributeName, member.getAttributeName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public Comparator<Feature> getFeatureComparator() {
+        return new DefaultFeatureComparator(this);
+    }
+
+    @Override
+    public DefaultFeatureQueryOrder clone() throws CloneNotSupportedException {
+        DefaultFeatureQueryOrder clone = (DefaultFeatureQueryOrder) super.clone();
+
+        if (members != null) {
+            clone.members = new ArrayList(members.size());
+            for (int i = 0; i < members.size(); i++) {
+                clone.members.add((members.get(i)).clone());
+            }
+        }
+
+        return clone;
+    }
+
+    public DefaultFeatureQueryOrder getCopy() {
+        DefaultFeatureQueryOrder aCopy = new DefaultFeatureQueryOrder();
+        Iterator iter = this.members.iterator();
+        FeatureQueryOrderMember member;
+        while (iter.hasNext()) {
+            member = (FeatureQueryOrderMember) iter.next();
+            if (member.hasEvaluator()) {
+//                aCopy.add(member.getEvaluator(), member.getAscending());
+                LOGGER.warn("Evaluator is not being added to the filter in a class copy");
+            } else {
+                aCopy.add(member.getAttributeName(), member.getAscending());
+            }
+        }
+        return aCopy;
+    }
+
+    /**
+     * Register the class on PersistenceManager
+     *
+     */
+    public static void registerPersistent() {
+        DynStruct definitionMember
+                = ToolsLocator.getPersistenceManager()
+                        .addDefinition(FeatureQueryOrderMemberImpl.class,
+                                "FeatureQueryOrderMember",
+                                "FeatureQueryOrderMember Persistent definition",
+                                null,
+                                null);
+
+        definitionMember.addDynFieldString("attributeName").setClassOfValue(String.class).setMandatory(false);
+        definitionMember.addDynFieldObject("evaluator").setClassOfValue(ExpressionEvaluator.class).setMandatory(false);
+        definitionMember.addDynFieldBoolean("ascending").setMandatory(false);
+
+        DynStruct definition
+                = ToolsLocator.getPersistenceManager()
+                        .addDefinition(DefaultFeatureQueryOrder.class,
+                                "FeatureQueryOrder",
+                                "FeatureQueryOrder Persistent definition",
+                                null,
+                                null);
+
+        definition.addDynFieldList("members").setClassOfItems(FeatureQueryOrderMemberImpl.class);
+
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        List<FeatureQueryOrderMember> stateMembers = (List) state.get("members");
+        this.members = new ArrayList<>();
+        for (FeatureQueryOrderMember stateMember : stateMembers) {
+            this.members.add(stateMember);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("members", members);
+
+    }
+
+    private class DefaultFeatureComparator implements Comparator<Feature> {
+
+        private final DefaultFeatureQueryOrder order;
+
+        public DefaultFeatureComparator(DefaultFeatureQueryOrder 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;
+            }
+
+        }
+
+        @Override
+        public int compare(Feature f0, Feature f1) {
+            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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQueryOrder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,615 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.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.FeatureType;
+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.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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 gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureReferenceSelection extends AbstractDisposable
+        implements FeatureReferenceSelection {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureReferenceSelection.class);
+
+    public static final String DYNCLASS_PERSISTENT_NAME = "DefaultFeatureReferenceSelection";
+
+    private Boolean available = null;
+
+    protected SelectionData selectionData = null;
+
+    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);
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * 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();
+    }
+
+    @Override
+    public boolean select(FeatureReference reference) {
+        return select(reference, true);
+    }
+
+    /**
+     * @param reference
+     * @param undoable if the action must be undoable
+     * @return
+     * @see #select(FeatureReference)
+     */
+    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;
+        if (this.getData().isReversed()) {
+            change = this.getData().remove(reference);
+        } else {
+            change = this.getData().add(reference);
+        }
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+        return change;
+    }
+
+    @Override
+    public boolean deselect(FeatureReference reference) {
+        return deselect(reference, true);
+    }
+
+    /**
+     * @param reference
+     * @param undoable if the action must be undoable
+     * @return
+     * @see #deselect(FeatureReference)
+     */
+    public boolean deselect(FeatureReference reference, boolean undoable) {
+        if (!isSelected(reference)) {
+            return false;
+        }
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().deselect(this, reference);
+        }
+        boolean change;
+        if (this.getData().isReversed()) {
+            change = this.getData().add(reference);
+        } else {
+            change = this.getData().remove(reference);
+        }
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+        return change;
+    }
+
+    @Override
+    public void selectAll() throws DataException {
+        selectAll(true);
+    }
+
+    /**
+     * @see #selectAll()
+     * @param undoable if the action must be undoable
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     */
+    public void selectAll(boolean undoable) throws DataException {
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().startComplex("_selectionSelectAll");
+            getCommands().selectAll(this);
+        }
+        if (!this.getData().isReversed()) {
+            this.getData().setReversed(true);
+        }
+        clearFeatureReferences();
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().endComplex();
+        }
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    @Override
+    public void deselectAll() throws DataException {
+        deselectAll(false);
+    }
+
+    /**
+     * @param undoable if the action must be undoable
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     * @see #deselectAll()
+     */
+    public void deselectAll(boolean undoable) throws DataException {
+        if (this.selectionData == null) {
+            return;
+        }
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().startComplex("_selectionDeselectAll");
+            getCommands().deselectAll(this);
+        }
+        if (this.getData().isReversed()) {
+            this.getData().setReversed(false);
+        }
+        clearFeatureReferences();
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().endComplex();
+        }
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    @Override
+    public boolean isSelected(FeatureReference reference) {
+        if (this.selectionData == null) {
+            return false;
+        }
+        if (this.getData().isReversed()) {
+            return !this.getData().contains(reference);
+        } else {
+            return this.getData().contains(reference);
+        }
+    }
+
+    @Override
+    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);
+        }
+        this.getData().setReversed(!this.getData().isReversed());
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    public boolean isEmpty() {
+        if (this.selectionData == null) {
+            return true;
+        }
+        return this.getSelectedCount() == 0;
+    }
+
+    @Override
+    public long getSelectedCount() {
+        if (this.selectionData == null) {
+            return 0;
+        }
+        if (this.getData().isReversed()) {
+            return this.getData().getTotalSize() - this.getData().getSize()
+                    + helper.getFeatureStoreDeltaSize();
+        } else {
+            return this.getData().getSize();
+        }
+    }
+
+    @Override
+    public Iterator referenceIterator() {
+        return Collections.unmodifiableSet(this.getData().getSelected())
+                .iterator();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        delegateObservable.deleteObservers();
+        deselectAll(false);
+    }
+
+    @Override
+    public boolean isFromStore(DataStore store) {
+        return featureStore.equals(store);
+    }
+
+    @Override
+    public void accept(Visitor visitor) throws BaseException {
+        if (this.selectionData == null) {
+            return;
+        }
+        for (Iterator iter = this.getData().getSelected().iterator(); iter.hasNext();) {
+            visitor.visit(iter.next());
+        }
+    }
+
+    @Override
+    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())) {
+                this.getData().remove(storeNotif.getFeature().getReference());
+            }
+        }
+    }
+
+    public SelectionData getData() {
+        if (selectionData == null) {
+            selectionData = new SelectionData();
+            try {
+                selectionData.setTotalSize(featureStore.getFeatureCount());
+            } catch (DataException ex) {
+                throw new RuntimeException("Can't initialize SelectionData, don't get the feature count.", ex);
+            }
+        }
+        return selectionData;
+    }
+
+    public void setData(SelectionData selectionData) {
+        this.selectionData = selectionData;
+        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+    }
+
+    @Override
+    public String toString() {
+        return getClass().getName() + ": " + getSelectedCount()
+                + " features selected, reversed = "
+                + this.getData().isReversed() + ", featureIds contained: "
+                + this.getData().getSelected();
+    }
+
+    protected boolean isReversed() {
+        if (this.selectionData == null) {
+            return false;
+        }
+        return this.getData().isReversed();
+    }
+
+    /**
+     * Removes all the stored FeatureRefence objects.
+     */
+    protected void clearFeatureReferences() {
+        if (this.selectionData == null) {
+            return;
+        }
+        this.getData().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();
+        }
+
+        @Override
+        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;
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("store", featureStore);
+        state.set("reversed", this.getData().isReversed());
+        state.set("totalSize", this.getData().getTotalSize());
+        state.set("selected", this.getData().getSelected().iterator());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        SelectionData data = new SelectionData(); // Do not use this.getData()
+        featureStore = (FeatureStore) state.get("store");
+        helper = new DefaultFeatureSelectionHelper((DefaultFeatureStore) featureStore);
+        data.setReversed(state.getBoolean("reversed"));
+        data.setTotalSize(state.getLong("totalSize"));
+        Iterator it = state.getIterator("selected");
+        while (it.hasNext()) {
+            FeatureReference ref = (FeatureReference) it.next();
+            data.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(FeatureReference.class).setMandatory(true);
+
+    }
+
+    @Override
+    public void addObserver(Observer observer) {
+        delegateObservable.addObserver(observer);
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        delegateObservable.beginComplexNotification();
+    }
+
+    @Override
+    public void deleteObserver(Observer observer) {
+        delegateObservable.deleteObserver(observer);
+    }
+
+    @Override
+    public void deleteObservers() {
+        delegateObservable.deleteObservers();
+    }
+
+    @Override
+    public void disableNotifications() {
+        delegateObservable.disableNotifications();
+    }
+
+    @Override
+    public void enableNotifications() {
+        delegateObservable.enableNotifications();
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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) this.getData().clone();
+        // featureStore and helper are already swallow cloned by our parent
+        return clone;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        if (this.available == null) {
+            try {
+                FeatureType type = this.featureStore.getDefaultFeatureType();
+                this.available = type.supportReferences();
+            } catch (DataException ex) {
+                this.available = false;
+            }
+        }
+        return this.available;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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 FastEditedFilteredIterator extends FastEditedIterator {
+
+	public FastEditedFilteredIterator(DefaultFeatureSet featureSet, long index, long elements)
+			throws DataException {
+		super(featureSet, index, elements);
+	}
+
+
+        @Override
+	public boolean match(DefaultFeature feature) throws DataException {
+		try {
+			return ((boolean) this.filter.evaluate(feature));
+		} catch (EvaluatorException e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.impl.featureset;
+
+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.feature.impl.DefaultEditableFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+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 {
+
+    private DefaultFeature myFeature;
+
+    public FastEditedIterator(DefaultFeatureSet featureSet, long index, long elements)
+        throws DataException {
+        super(featureSet, index, elements);
+    }
+
+    @Override
+    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
+        if(myFeature == null){
+            myFeature = new DefaultFeature(fset.store);
+        }
+
+        DefaultFeature f = this.featureManager.get(data);
+//        DefaultFeature f = null;
+//        try {
+//            FeatureReference ref = new DefaultFeatureReference(fset.store, data);
+//            f = (DefaultFeature) featureManager.get(ref, fset.store); 
+//        } 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();
+    }
+
+    @Override
+    public void remove() {
+        super.remove();
+        myFeature = new DefaultFeature(fset.store);
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        myFeature = null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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, long elements)
+			throws DataException {
+		super(featureSet);
+		initializeFeature();
+                
+                if(featureSet.provider.canFilter() && featureSet.provider.canIterateFromIndex()){
+                    this.iterator = featureSet.provider.iterator(index, elements);
+                } else {
+                    this.iterator = featureSet.provider.iterator();
+                    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.344/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.344/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.344/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.344/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 46118)
@@ -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.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, long elements)
+			throws DataException {
+		super(fset, index, elements);
+	}
+
+        @Override
+	public boolean match(DefaultFeature feature) throws DataException {
+		try {
+			return ((boolean) this.filter.evaluate(feature));
+		} catch (EvaluatorException e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.feature.impl.featureset;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+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.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.util.ChainedIterator;
+
+/**
+ * Iterator for stores in edition mode.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ * @deprecated use the {@link FastEditedIterator} instead
+ */
+public class EditedIterator extends FilteredIterator {
+
+    private DefaultFeatureStore store;
+    protected FeatureManager featureManager;
+    private Set<FeatureReference> visitedReferences;
+    
+    public EditedIterator(DefaultFeatureSet featureSet) {
+        super(featureSet);
+        this.store = featureSet.store;
+        this.featureManager = this.store.getFeatureManager();
+        this.visitedReferences = new HashSet<>();
+    }
+
+    public EditedIterator(DefaultFeatureSet featureSet, long index, long elements)
+        throws DataException {
+        this(featureSet);
+
+        Iterator<EditableFeature> insertedFeatures = this.featureManager.getInsertedFeatures();//Don't use getInserteds because referenceFeature will be missed
+        Iterator<EditableFeature> updatedFeatures = this.featureManager.getUpdatedFeatures();
+        final Iterator<FeatureProvider> providerIterator;
+        FeatureSetProvider provider = featureSet.provider;
+        boolean canDelegateInProvider = provider.canFilter() && provider.canIterateFromIndex() && !featureManager.hasDeleteds();
+        if (canDelegateInProvider) {
+            providerIterator = provider.iterator(index, elements);
+        } else {
+            providerIterator = provider.iterator();
+        }
+
+
+        Iterator<FeatureProvider> wrappedProviderIterator = new Iterator<FeatureProvider>() {
+            @Override
+            public boolean hasNext() {
+                return providerIterator.hasNext();
+            }
+
+            @Override
+            public FeatureProvider next() {
+                FeatureProvider data = providerIterator.next();
+                FeatureReference ref = FeatureReferenceFactory.createFromFeatureProvider(store, data);
+                DefaultFeature modified;
+                try {
+                    modified = featureManager.get(ref, store);
+                } catch (DataException ex) {
+                    return data;
+                }
+                if (modified != null) {
+                    visitedReferences.add(ref);
+                    return modified.getData();
+                }
+                return data;
+            }
+
+            @Override
+            public void remove() {
+                EditedIterator.super.remove();
+            }
+        };
+        this.iterator = new ChainedIterator(wrappedProviderIterator, insertedFeatures, updatedFeatures);
+        if (!canDelegateInProvider) {
+            if (index > 0) {
+                skypto(index);
+            }
+        }
+    }
+    
+    @Override
+    public void remove() {
+        this.iterator.remove();
+    }
+
+    @Override
+    public boolean hasNext() {
+        if (store.isEditing()) {
+            return super.hasNext();
+        } else {
+            throw new ConcurrentDataModificationException(store.getFullName());
+        }
+    }
+
+    @Override
+    public Object next() {
+        if (store.isEditing()) {
+            return super.next();
+        } else {
+            throw new ConcurrentDataModificationException(store.getFullName());
+        }
+    }
+
+    @Override
+    protected ChainedIterator getIterator() {
+        return (ChainedIterator) this.iterator;
+    }
+    
+    @Override
+    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
+
+        DefaultFeature f = this.featureManager.get(data);
+//        DefaultFeature f = null;
+//        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());
+        }     
+    }
+    
+    @Override
+    protected boolean skipFeature(FeatureProvider data) {
+        try {
+            switch (getIterator().getCurrent()) {
+                case 0:
+                    if (this.featureManager.isDeleted(data)) {
+                        return true;
+                    }
+                    break;
+                case 2:
+                    FeatureReference ref = FeatureReferenceFactory.createFromFeatureProvider(store, data);
+                    if (visitedReferences.contains(ref)){
+                        return true;
+                    }
+                    break;
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't check if must skip feature.", ex);
+        }
+        return false;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        this.featureManager = null;
+        this.store = null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.exception.BaseException;
+
+@SuppressWarnings("UseSpecificCatch")
+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, long elements)
+			throws DataException {
+		this(featureSet);
+                if(featureSet.provider.canFilter() && featureSet.provider.canIterateFromIndex()){
+                    this.iterator = featureSet.provider.iterator(index, elements);
+                } else {
+                    this.iterator = featureSet.provider.iterator();
+                    if (index > 0) {
+                            this.skypto(index);
+                    }
+                }
+	}
+
+        @Override
+        @SuppressWarnings("empty-statement")
+	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()) {
+			;
+		}
+	}
+
+        @Override
+	protected void doNext() throws DataException {
+		nextChecked = true;
+		DefaultFeature feature;
+		FeatureProvider data;
+		Object obj;
+		while (this.getIterator().hasNext()) {
+			obj =this.getIterator().next();
+                        if(obj == null){
+                            continue;
+                        }
+			if (obj instanceof FeatureProvider){
+				data = (FeatureProvider)obj;
+				if (skipFeature(data)) {
+					continue;
+				}
+				feature = this.createFeature(data);
+			} else {
+				feature = (DefaultFeature)obj;
+				if (skipFeature(feature.getData())) {
+					continue;
+				}
+			}
+			if (this.match(feature)) {
+				this.current = feature;
+				return;
+			}
+		}
+		this.current = null;
+	}
+
+        @Override
+	protected Iterator getIterator() {
+		return this.iterator;
+	}
+
+        @Override
+	public boolean hasNext() {
+                if( fset == null ) {
+                    return false;
+                }
+		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;
+			}
+                        Object x = this.filter.evaluate(feature);
+                        if( x == null ) {
+                            return false;
+                        } else if( x instanceof Boolean ) {
+                            return ((Boolean) x);
+                        } else {
+                            return true;
+                        }
+		} catch (Exception e) {
+			throw new DataEvaluatorException(e);
+		}
+	}
+
+        @Override
+	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;
+	}
+
+        @Override
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		current = null;
+		filter = null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/AbstractFeatureSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/AbstractFeatureSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/AbstractFeatureSet.java	(revision 46118)
@@ -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.impl.featureset;
+
+import java.util.Iterator;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+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.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.dynobjectutils.DynObjectSetFeatureSetFacade;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.gvsig.tools.visitor.impl.AbstractIndexedVisitable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public abstract class AbstractFeatureSet 
+    extends AbstractIndexedVisitable 
+    implements FeatureSet {
+
+    private static class DisposableFeatureSetIterableImpl implements DisposableFeatureSetIterable {
+
+        private final FeatureSet fset;
+        private final DisposableIterator it;
+
+        public DisposableFeatureSetIterableImpl(FeatureSet fset, DisposableIterator it) {
+            this.fset = fset;
+            // No se debe de hacer el bind. DisposeUtils.bind(fset);
+            this.it = it;
+        }
+        
+        @Override
+        public boolean hasNext() {
+            return this.it.hasNext();
+        }
+
+        @Override
+        public Feature next() {
+            return (Feature) this.it.next();
+        }
+
+        @Override
+        public Iterator<Feature> iterator() {
+            return this.it;
+        }
+
+        @Override
+        public void dispose() {
+            DisposeUtils.disposeQuietly(this.it);
+            DisposeUtils.disposeQuietly(this.fset);
+        }
+
+        @Override
+        public boolean isEmpty() {
+            return this.fset.isEmpty();
+        }
+
+        @Override
+        public long size64() {
+            return this.fset.size64();
+        }
+
+        @Override
+        public FeatureSet getFeatureSet() {
+            return this.fset;
+        }
+        
+        
+    } 
+    
+    protected static final Logger LOG = LoggerFactory.getLogger(AbstractFeatureSet.class);
+
+    public abstract FeatureStore getFeatureStore();
+    
+    @Override
+    public final void accept(Visitor visitor, long firstValueIndex, long elements) throws BaseException {
+        try {
+            doAccept(visitor, firstValueIndex, elements);
+        } 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);
+        }
+    }
+    
+    @Override
+    protected void doAccept(Visitor visitor, long firstValueIndex)
+        throws VisitCanceledException, BaseException {
+        doAccept(visitor, firstValueIndex, 0);
+    }
+
+    protected void doAccept(Visitor visitor, long firstValueIndex, long elements)
+        throws VisitCanceledException, BaseException {
+        DisposableIterator iterator = fastIterator(firstValueIndex, elements);
+
+        try {
+            while (iterator.hasNext()) {
+                Feature feature = (Feature) iterator.next();
+                visitor.visit(feature);
+            }
+        } finally {
+            iterator.dispose();
+        }
+    }
+      
+    @Override
+    public Feature first() {
+        DisposableIterator it = null;
+        try {
+            it = this.iterator();
+            if( it == null ) {
+                return null;
+            }
+            if( it.hasNext() ) {
+                Feature f = (Feature) it.next();
+                return f;
+            }
+            return null;
+        } finally {
+            DisposeUtils.disposeQuietly(it);
+        }
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.size64() == 0;
+    }
+
+    @Override
+    public DisposableIterator fastIterator() throws DataException {
+        return this.fastIterator(0);
+    }   
+
+    @Override
+    public DisposableIterator iterator() {
+        try {
+            return this.fastIterator(0);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't obtain iterator.",ex);
+        }
+    }
+
+    @Override
+    public DisposableFeatureSetIterable iterable() {
+        return iterable(true);
+    }
+    
+    @Override
+    public DisposableFeatureSetIterable iterable(boolean disposeFeatureSet) {
+        if (!disposeFeatureSet) {
+            DisposeUtils.bind(this);
+        }
+        return new DisposableFeatureSetIterableImpl(this, this.iterator());
+    }
+    @Override
+    public DynObjectSet getDynObjectSet() {
+        return this.getDynObjectSet(true);
+    }
+
+    @Override
+    public DynObjectSet getDynObjectSet(boolean fast) {
+        return new DynObjectSetFeatureSetFacade(this, this.getFeatureStore(), fast);
+    }
+
+    @Override
+    public boolean isFromStore(DataStore store) {
+        return this.getFeatureStore().equals(store);
+    }    
+
+    @Override
+    public long size64() {
+        try {
+            return this.getSize();
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't get size",ex);
+        }
+    }
+
+    @Override
+    public int size() {
+        try {
+            long sz = this.getSize();
+            if( sz > Integer.MAX_VALUE ) {
+                return Integer.MAX_VALUE;
+            }
+            return (int) sz;
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't get size",ex);
+        }
+    }
+
+    @Override
+    public JsonArray toJson() {
+        JsonArrayBuilder builder = this.toJsonBuilder();
+        return builder.build();
+    }
+
+    @Override
+    public JsonArrayBuilder toJsonBuilder() {
+        // TODO: estaria bien hacer una implementacion alternativa que devolviese
+        // un JsonArray basado en el FeatureSet/FeaturePagingHelper, asi no 
+        // tendria que construirse en memoria el JSON entero.
+        try {
+            JsonArrayBuilder builder = Json.createArrayBuilder();
+            this.accept(new Visitor() {
+                @Override
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    DefaultFeature f = (DefaultFeature) obj;
+                    JsonObject fjson = f.toJson();
+                    builder.add(fjson);
+                }
+            });
+            return builder;        
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't create JSON array.",ex);
+        }
+    }
+    
+    @Deprecated
+    public JsonArray toJSON() {
+        return this.toJson();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,724 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.exception.DataException;
+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.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.impl.DefaultFeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+
+public class DefaultFeatureSet extends AbstractFeatureSet implements
+    FeatureSet, Observer {
+
+    protected static final int NO_CHECKED = -1;
+    protected static final int DEFAULT = 0;
+    protected static final int FILTERED = 1;
+    protected static final int ORDERED = 2;
+    protected static final int ORDERED_FILTERED = 3;
+    protected static final int EDITED = 4;
+    protected static final int EDITED_FILTERED = 5;
+    protected static final int ORDERD_EDITED = 6;
+    protected static final int ORDERED_EDITED_FILTER = 7;
+
+    protected Throwable sourceStoreModifiedCause;
+    protected boolean sourceStoreModified;
+    protected boolean ownFeaturesModified;
+    protected DefaultFeatureStore store;
+    protected List featureTypes;
+    protected FeatureQuery query;
+    protected FeatureSetProvider provider;
+    protected long size;
+    protected int iteratorMode;
+    protected List orderedData;
+    protected Feature featureToIgnoreNotification;
+    protected DefaultFeatureStoreTransforms transform;
+    protected FeatureQuery queryForProvider;
+    protected FeatureType defaultFeatureType;
+    protected FeatureType defatulFeatureTypeForProvider;
+    protected boolean ignoreChanges;
+    private boolean disposed = false;
+
+    public DefaultFeatureSet(DefaultFeatureStore store, FeatureQuery query)
+        throws DataException {
+        DisposeUtils.bind(this);
+        this.featureToIgnoreNotification = null;
+        this.iteratorMode = NO_CHECKED;
+        this.sourceStoreModified = false;
+        this.ownFeaturesModified = false;
+        this.size = -1;
+        this.orderedData = null;
+        this.store = store;
+        DisposeUtils.bind(this.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.defaultFeatureType = this.store.getDefaultFeatureType();
+            this.featureTypes.addAll(this.store.getFeatureTypes());
+        } else {
+            this.defaultFeatureType = this.store.getFeatureType(this.query);
+            List<EditableFeatureAttributeDescriptor> cols = this.query.getExtraColumn().getColumns();
+            if (this.query!=null && cols!=null && !cols.isEmpty()) {
+                DefaultFeatureType featureTypeExtraCols = (DefaultFeatureType) this.defaultFeatureType.getCopy();
+                featureTypeExtraCols.setExtraColumn(this.query.getExtraColumn());
+                this.defaultFeatureType = featureTypeExtraCols;
+            }
+            this.featureTypes.add(this.defaultFeatureType);
+        }
+        if (this.transform != null && !this.transform.isEmpty()) {
+            this.fixQueryForProvider(this.queryForProvider, this.transform);
+        } else {
+            this.defatulFeatureTypeForProvider = this.defaultFeatureType;
+        }
+
+        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.clearAttributeNames();
+        FeatureType ftype =
+            transformsToUse.getSourceFeatureTypeFrom(this.defaultFeatureType);
+        theQueryForProvider.setFeatureTypeId(ftype.getId());
+        this.defatulFeatureTypeForProvider = ftype;
+        
+        if (transformsToUse.isTransformsOriginalValues()) {
+            theQueryForProvider.clearFilter();
+            FeatureQueryOrder fqo = theQueryForProvider.getOrder();
+            if (fqo != null) {
+                fqo.clear();
+            }
+            return;
+
+        }
+
+        // Filter
+        Evaluator filter = theQueryForProvider.getFilter();
+        if (filter != null) {
+            boolean canUseFilter;
+            if (filter.getFieldsInfo() == null) {
+                canUseFilter = false;
+            } else {
+                canUseFilter = areEvaluatorFieldsInAttributes(filter, ftype);
+            }
+
+            if (!canUseFilter) {
+                theQueryForProvider.clearFilter();
+            }
+
+        }
+
+        // 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 (String fieldName : fieldNames) {
+                if (fType.get(fieldName) == null) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public FeatureType getDefaultFeatureType() {
+        return this.defaultFeatureType;
+    }
+
+    @Override
+    public List getFeatureTypes() {
+        return Collections.unmodifiableList(this.featureTypes);
+    }
+
+    @Override
+    public long getSize() throws DataException {
+        this.checkSourceStoreModified();
+        if (size < 0) {
+            size = calculateSize();
+        }
+        return size;
+    }
+
+    private long calculateSize() throws DataException {
+        long limit = this.query.getLimit();
+        long mySize = 0;
+        
+        int mode = this.getIteratorMode();
+        DisposableIterator iter = null;
+        switch (mode) {
+        case DEFAULT:
+        case ORDERED:
+            if (this.provider.isEmpty()) {
+                return 0;
+            }
+            mySize = provider.getSize();
+            return (limit>0 && mySize>limit)? limit:mySize;
+
+        case FILTERED:
+        case ORDERED_FILTERED:
+            try {
+                iter = this.fastIterator();
+                while ((limit>0 && (mySize<limit)) || limit==0 ) {
+                    iter.next();
+                    mySize++;
+                }
+            } catch (NoSuchElementException e) {
+
+            } finally {
+                DisposeUtils.disposeQuietly(iter);
+            }
+            return (limit>0 && mySize>limit)? limit:mySize;
+
+        case EDITED:
+        case ORDERD_EDITED:
+            mySize = provider.getSize()
+                + store.getFeatureManager().getDeltaSize();
+            return (limit>0 && mySize>limit)? limit:mySize;
+
+        case EDITED_FILTERED:
+        case ORDERED_EDITED_FILTER:
+            try {
+                iter = this.fastIterator();
+                while ((limit>0 && (mySize<limit)) || limit==0 ) {
+                    iter.next();
+                    mySize++;
+                }
+            } catch (NoSuchElementException e) {
+
+            } finally {
+                DisposeUtils.disposeQuietly(iter);
+            }
+            return (limit>0 && mySize>limit)? limit:mySize;
+            
+        default:
+            throw new IllegalArgumentException();
+        }
+    }
+    
+    @Override
+    public synchronized final void dispose() {
+        // Check if we have already been disposed, and don't do it again
+        if (!disposed) {
+            if (DisposeUtils.release(this)) {
+                try {
+                    doDispose();
+                } catch (Exception ex) {
+                    LOG.error("Error performing dispose", ex);
+                } finally {
+                    disposed = true;
+                }
+            }
+        }
+    }
+
+    public void doDispose() {
+        if( this.store!=null ) {
+            this.store.deleteObserver(this);
+            DisposeUtils.dispose(this.store);
+            this.store = null;
+        }
+        if( this.provider!=null ) {
+            this.provider.dispose();
+            this.provider = null;
+        }
+        if (orderedData != null) {
+            orderedData.clear();
+            this.orderedData = null;
+        }
+        this.featureToIgnoreNotification = null;
+        this.transform = null;
+        this.query = null;
+        this.queryForProvider = null;
+        this.featureTypes = null;
+        this.defaultFeatureType = null;
+        this.defatulFeatureTypeForProvider = null;
+    }
+
+    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;
+            sourceStoreModifiedCause = new Throwable();
+            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.TRANSFORM_CHANGE)) {
+            sourceStoreModified = true;
+            sourceStoreModifiedCause = new Throwable();
+            return;
+        }
+        if (type.equalsIgnoreCase(FeatureStoreNotification.RESOURCE_CHANGED)) {
+            if(!this.ignoreChanges) {
+                sourceStoreModified = true;
+                sourceStoreModifiedCause = new Throwable();
+                return;
+            }
+        }
+        if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_CANCELEDITING)) {
+            if (ownFeaturesModified) {
+                sourceStoreModified = true;
+                sourceStoreModifiedCause = new Throwable();
+                return;
+            }
+        }
+    }
+  
+    protected void checkSourceStoreModified() {
+        if (sourceStoreModified) {
+            ConcurrentDataModificationException ex = new ConcurrentDataModificationException(
+                    store == null ? "": store.getName()
+            );
+            ex.initCause(sourceStoreModifiedCause);
+            throw ex;
+        }
+    }
+
+    @Override
+    public DisposableIterator fastIterator(long index) throws DataException {
+        return fastIterator(index, 0);
+    }
+    
+    @Override
+    public DisposableIterator fastIterator(long index, long elements) throws DataException {
+        if (index < 0) {
+            throw new IndexOutOfBoundsException("The index (" + index
+                + ") is less than 0");
+        }
+        DisposableIterator it;
+        int mode = this.getIteratorMode();
+
+        switch (mode) {
+        case DEFAULT:
+            it = new FastDefaultIterator(this, index, elements);
+            break;
+
+        case FILTERED:
+            it = new FastFilteredIterator(this, index, elements);
+            break;
+
+        case ORDERED:
+            if(this.provider.canOrder() && this.provider.canIterateFromIndex()){
+                it = new FastDefaultIterator(this, index, elements);
+            } else {
+                if (this.orderedData != null) {
+                    it = new FastOrderedIterator(this, index);
+                } else {
+                    it = new FastOrderedIterator(this, new FastDefaultIterator(this, 0, -1), index);
+                }
+            }
+            break;
+            
+        case ORDERED_FILTERED:
+            if(this.provider.canOrder() && this.provider.canFilter() && this.provider.canIterateFromIndex()){
+                it = new FastFilteredIterator(this, index, elements);
+            } else {
+                if (this.orderedData != null) {
+                    it = new FastOrderedIterator(this, index);
+                } else {
+                    it = new FastOrderedIterator(this, new FastFilteredIterator(
+                        this, 0, -1), index);
+                }
+            }
+
+            break;
+
+        case EDITED:
+            it = new FastEditedIterator(this, index, elements);
+            break;
+
+        case EDITED_FILTERED:
+            it = new FastEditedFilteredIterator(this, index, elements);
+            break;
+
+        case ORDERD_EDITED:
+            if(this.provider.canOrder() && this.provider.canIterateFromIndex() && !this.store.getFeatureManager().hasDeleteds()){
+                it = new FastEditedIterator(this, index, elements);
+            } else {
+                if (this.orderedData != null) {
+                    it = new FastOrderedIterator(this, index);
+                } else {
+                    it = new FastOrderedIterator(this, new FastEditedIterator(
+                        this, 0, -1), index);
+                }
+            }
+            break;
+
+        case ORDERED_EDITED_FILTER:
+            if(this.provider.canOrder() && this.provider.canFilter() && this.provider.canIterateFromIndex() && !this.store.getFeatureManager().hasDeleteds()){
+                it = new FastEditedFilteredIterator(this, index, elements);
+            } else {
+                if (this.orderedData != null) {
+                    it = new FastOrderedIterator(this, index);
+                } else {
+                    it = new FastOrderedIterator(this,
+                        new FastEditedFilteredIterator(this, 0, -1), index);
+                }
+            }
+            break;
+            
+        default:
+            throw new IllegalArgumentException();
+        }
+        if( this.query!=null && this.query.getLimit()>0 ) {
+            it = new LimitIterator(it,this.query.getLimit());
+        }
+        return it;
+    }
+
+    private class LimitIterator implements DisposableIterator {
+
+        private final DisposableIterator it;
+        private final long limit;
+        private int count;
+
+        private LimitIterator(DisposableIterator it, long limit) {
+            this.it = it;
+            this.limit = limit;
+            this.count = 0;
+        }
+
+        @Override
+        public void dispose() {
+            this.it.dispose();
+        }
+
+        @Override
+        public boolean hasNext() {
+            if( this.count>=this.limit ) {
+                return false;
+            }
+            return this.it.hasNext();
+        }
+
+        @Override
+        public Object next() {
+            if( this.count>=this.limit ) {
+                return null;
+            }
+            this.count++;
+            return this.it.next();
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+        
+    }
+
+    @Override
+    public DisposableIterator iterator(long index) throws DataException {
+        return iterator(index,0);
+    }
+    
+    @Override
+    public DisposableIterator iterator(long index, long elements) throws DataException {        
+        if (index < 0) {
+            throw new IndexOutOfBoundsException("The index (" + index
+                + ") is less than 0");
+        }
+        DisposableIterator it;
+        int mode = this.getIteratorMode();
+
+        switch (mode) {
+        case DEFAULT:
+            it = new DefaultIterator(this, index, elements);
+            break;
+
+        case FILTERED:
+            it = new FilteredIterator(this, index, elements);
+            break;
+
+        case ORDERED:
+            if(this.provider.canOrder() && this.provider.canIterateFromIndex()){
+                it = new DefaultIterator(this, index, elements);
+            } else {
+                if (orderedData != null) {
+                    it = new OrderedIterator(this, index);
+
+                } else {
+                    it = new OrderedIterator(this, new DefaultIterator(this, 0, elements),index);
+                }
+            }
+            break;
+
+        case ORDERED_FILTERED:
+            if(this.provider.canOrder() && this.provider.canFilter() && this.provider.canIterateFromIndex()){
+                it = new FilteredIterator(this, index, elements);
+            } else {
+                if (orderedData != null) {
+                    it = new OrderedIterator(this, index);
+                } else {
+                    it = new OrderedIterator(this, new FilteredIterator(this, 0, -1),index);
+                }
+            }
+            break;
+
+        case EDITED:
+            it = new EditedIterator(this, index, elements);
+            break;
+
+        case EDITED_FILTERED:
+            it = new EditedFilteredIterator(this, index, elements);
+            break;
+
+        case ORDERD_EDITED:
+            if(this.provider.canOrder() && this.provider.canIterateFromIndex() && !this.store.getFeatureManager().hasDeleteds()){
+                it = new EditedIterator(this, index, elements);
+            } else {
+                if (orderedData != null) {
+                    it = new OrderedIterator(this, index);
+                } else {
+                    it = new OrderedIterator(this,
+                        new EditedIterator(this, 0, -1), index);
+                }
+            }
+            break;
+
+        case ORDERED_EDITED_FILTER:
+            if(this.provider.canOrder() && this.providerCanFilter() && this.provider.canIterateFromIndex() && !this.store.getFeatureManager().hasDeleteds()){
+                it = new EditedFilteredIterator(this, index, elements);
+            } else {
+                if (orderedData != null) {
+                    it = new OrderedIterator(this, index);
+                } else {
+                    it = new OrderedIterator(this,
+                        new EditedFilteredIterator(this, 0, -1), index);
+                }
+            }
+            break;
+
+        default:
+            throw new IllegalArgumentException();
+        }
+
+        if( this.query!=null && this.query.getLimit()>0 ) {
+            it = new LimitIterator(it,this.query.getLimit());
+        }
+        return it;
+    }
+
+    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.getFeatureTypeManager().hasChanges() || 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;
+                } else {
+                    return ORDERED;
+                }
+            } else {
+                if (useMyFilter) {
+                    return FILTERED;
+                } else {
+                    return DEFAULT;
+                }
+            }
+        }
+
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public void update(EditableFeature feature) throws DataException {
+        this.featureToIgnoreNotification = feature;
+        this.store.update(feature);
+        this.featureToIgnoreNotification = null;
+        this.ownFeaturesModified = true;
+    }
+    
+    @Override
+    public void commitChanges() throws DataException {
+        this.ignoreChanges = true;
+        this.store.commitChanges();
+        this.ignoreChanges = false;
+        
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return store;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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, long elements)
+			throws DataException {
+		super(featureSet);
+		this.initializeFeature();
+		if (index > 0 || elements>0 ) {
+			if (featureSet.provider.canIterateFromIndex()) {
+				try {
+					this.iterator = featureSet.provider.fastIterator(index,elements);
+				} 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.feature.impl.featureset;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import org.gvsig.fmap.dal.exception.DataException;
+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.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+class DefaultIterator extends AbstractDisposable implements DisposableIterator {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultIterator.class);
+	protected Iterator<FeatureProvider> iterator;
+	protected DefaultFeatureSet fset;
+	protected Feature lastFeature = null;
+
+	public DefaultIterator(DefaultFeatureSet featureSet) {
+		this.fset = featureSet;
+                DisposeUtils.bind(this.fset);
+	}
+
+	public DefaultIterator(DefaultFeatureSet featureSet, long index, long elements)
+			throws DataException {
+		this.fset = featureSet;
+                DisposeUtils.bind(this.fset);
+		if (index > 0) {
+			if (featureSet.provider.canIterateFromIndex()) {
+				try {
+					this.iterator = featureSet.provider.iterator(index, elements);
+				} 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()) {
+			;
+		}
+	}
+
+        @Override
+        public boolean hasNext() {
+            if (this.fset == null) {
+                return false;
+            }
+            fset.checkSourceStoreModified();
+            if (this.getIterator().hasNext()) {
+                return true;
+            }
+            try {
+                this.dispose();
+            } catch (Exception ex) {
+                throw new RuntimeException("Can't dispose iterator.",ex);
+            }
+            return false;
+        }
+
+        @Override
+	public Object next() {
+                if( fset == null ) {
+			throw new NoSuchElementException();
+                }
+		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 skipFeature(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;
+                DisposeUtils.disposeQuietly(this.fset);
+		this.fset = null;
+		this.lastFeature = null;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset
___________________________________________________________________
Added: svn:ignore
   + .DefaultFeatureSet.java.kate-swp


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.
+ */
+
+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);
+        
+        this.indexProvider.setFeatureIndexProviderServices(this);
+    }
+
+    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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeToStoreProviderAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeToStoreProviderAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureTypeToStoreProviderAdapter.java	(revision 46118)
@@ -0,0 +1,425 @@
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.util.AbstractList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DALLocator;
+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.OpenException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+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.DataStoreInitializer2;
+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.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.timesupport.Time;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FeatureTypeToStoreProviderAdapter extends AbstractMemoryStoreProvider {
+
+    private static final String NAME = "FeatureType";
+
+    private static final int ATTR_NAME = 0;
+    private static final int ATTR_TYPE = 1;
+    private static final int ATTR_TYPENAME = 2;
+    private static final int ATTR_SIZE = 3;
+    private static final int ATTR_PRECISION = 4;
+    private static final int ATTR_LABEL = 5;
+    private static final int ATTR_SHORTLABEL = 6;
+    private static final int ATTR_DESCRIPTION = 7;
+    private static final int ATTR_PROFILE = 8;
+    private static final int ATTR_GROUP = 9;
+    private static final int ATTR_ORDER = 10;
+    private static final int ATTR_ISPK = 11;
+    private static final int ATTR_ISFK = 12;
+    private static final int ATTR_ISCLOSEDLIST = 13;
+    private static final int ATTR_ISREADONLY = 14;
+    private static final int ATTR_ISCOMPUTED = 15;
+    private static final int ATTR_ISCAUTOMATIC = 16;
+    private static final int ATTR_ISHIDDEN = 17;
+    private static final int ATTR_ALLOWNULLS = 18;
+    private static final int ATTR_EXPRESSION = 19;
+    private static final int ATTR_FKTABLE = 20;
+    private static final int ATTR_FKCODE = 21;
+    private static final int ATTR_FKLABEL = 22;
+    private static final int ATTR_SCALE = 23;
+
+    private static Map<String,Integer> attrName2Index;
+    private static FeatureType featureTypeOfFeatureType;
+    
+    
+    private static class Features
+            extends AbstractList<FeatureProvider>
+            implements List<FeatureProvider>
+        {
+
+        private static class MyFeatureProvider implements FeatureProvider {
+
+            private FeatureAttributeDescriptor descriptor;
+            
+            public MyFeatureProvider(FeatureAttributeDescriptor descriptor) {
+                this.descriptor = descriptor;
+            }
+            
+            @Override
+            public boolean isReadOnly(int i) {
+                return true;
+            }
+
+            @Override
+            public void set(int i, Object value) {
+            }
+
+            @Override
+            public Object get(int i) {
+                switch(i) {
+                    case ATTR_NAME:
+                        return this.descriptor.getName();
+                    case ATTR_SIZE:
+                        return this.descriptor.getSize();
+                    case ATTR_TYPE:
+                        return this.descriptor.getType();
+                    case ATTR_TYPENAME:
+                        return this.descriptor.getDataTypeName();
+                    case ATTR_PRECISION:
+                        return this.descriptor.getPrecision();
+                    case ATTR_SCALE:
+                        return this.descriptor.getScale();
+                    case ATTR_SHORTLABEL:
+                        return this.descriptor.getShortLabel();
+                    case ATTR_LABEL:
+                        return this.descriptor.getLabel();
+                    case ATTR_DESCRIPTION:
+                        return this.descriptor.getDescription();
+                    case ATTR_PROFILE:
+                        return this.descriptor.getDataProfileName();
+                    case ATTR_GROUP:
+                        return this.descriptor.getGroup();
+                    case ATTR_ORDER:
+                        return this.descriptor.getOder();
+                    case ATTR_ISPK:
+                        return this.descriptor.isPrimaryKey();
+                    case ATTR_ISFK:
+                        return this.descriptor.isForeingKey();
+                    case ATTR_ISCLOSEDLIST:
+                        if( this.descriptor.isForeingKey() ) {
+                            return this.descriptor.getForeingKey().isClosedList();
+                        }
+                        return false;
+                    case ATTR_ISREADONLY:
+                        return this.descriptor.isReadOnly();
+                    case ATTR_ISCOMPUTED:
+                        return this.descriptor.isComputed();
+                    case ATTR_ISCAUTOMATIC:
+                        return this.descriptor.isAutomatic();
+                    case ATTR_ISHIDDEN:
+                        return this.descriptor.isHidden();
+                    case ATTR_ALLOWNULLS:
+                        return this.descriptor.allowNull();
+                    case ATTR_EXPRESSION: {
+                        FeatureAttributeEmulator x = this.descriptor.getFeatureAttributeEmulator();
+                        if( x instanceof FeatureAttributeEmulatorExpression ) {
+                            Expression exp = ((FeatureAttributeEmulatorExpression) x).getExpression();
+                            if( exp != null ) {
+                                return exp.getPhrase();
+                            }
+                        }
+                        return null;
+                    }
+                    case ATTR_FKTABLE:
+                        if( this.descriptor.isForeingKey() ) {
+                            return this.descriptor.getForeingKey().getTableName();
+                        }
+                        return null;
+                    case ATTR_FKCODE:
+                        if( this.descriptor.isForeingKey() ) {
+                            return this.descriptor.getForeingKey().getCodeName();
+                        }
+                        return null;
+                    case ATTR_FKLABEL:
+                        if( this.descriptor.isForeingKey() ) {
+                            return this.descriptor.getForeingKey().getLabelFormula();
+                        }
+                        return null;
+
+
+                    default:
+                        return null;
+                }
+            }
+
+            @Override
+            public void set(String name, Object value) {
+            }
+
+            @Override
+            public Object get(String name) {
+                int n = attrName2Index.get(name);
+                return this.get(n);
+            }
+
+            @Override
+            public void setOID(Object oid) {
+            }
+
+            @Override
+            public Object getOID() {
+                return (long) this.descriptor.getIndex();
+            }
+
+            @Override
+            public FeatureType getType() {
+                return featureTypeOfFeatureType;
+            }
+
+            @Override
+            public FeatureProvider getCopy() {
+                return this;
+            }
+
+            @Override
+            public Envelope getDefaultEnvelope() {
+                return null;
+            }
+
+            @Override
+            public Geometry getDefaultGeometry() {
+                return null;
+            }
+
+            @Override
+            public Time getDefaultTime() {
+                return null;
+            }
+
+            @Override
+            public void setDefaultEnvelope(Envelope extent) {
+            }
+
+            @Override
+            public void setDefaultGeometry(Geometry geom) {
+            }
+
+            @Override
+            public void setDefaultTime(Time time) {
+            }
+
+            @Override
+            public boolean isNull(int i) {
+                return false;
+            }
+
+            @Override
+            public boolean isNull(String name) {
+                return false;
+            }
+
+            @Override
+            public boolean isNew() {
+                return false;
+            }
+
+            @Override
+            public void setNew(boolean isNew) {
+            }
+
+            @Override
+            public void setExtraValue(int index, Object value) {
+            }
+
+            @Override
+            public Object getExtraValue(int index) {
+                return null;
+            }
+
+            @Override
+            public Object getExtraValue(String name) {
+                return null;
+            }
+
+            @Override
+            public void setExtraValueNames(String[] extraValueNames) {
+            }
+
+            @Override
+            public boolean hasExtraValue(String name) {
+              return false;
+            }
+            
+            
+        }
+        
+        private final FeatureType featureType;
+        
+        public Features(FeatureType featureType) {
+            this.featureType = featureType;
+        }
+        
+        @Override
+        public FeatureProvider get(int index) {
+            return new MyFeatureProvider(this.featureType.get(index));
+        }
+
+        @Override
+        public int size() {
+            return this.featureType.size();
+        }
+        
+    }
+    
+    private final FeatureType featureType;
+    private final ResourceProvider resource;
+    private final Double sourceID;
+    
+    private FeatureTypeToStoreProviderAdapter(
+            DataStoreParameters parameters,
+            DataStoreProviderServices storeServices,
+            FeatureType featureType
+        ) throws InitializeException {
+        super(parameters, storeServices);
+        this.featureType = featureType;
+        this.data = new Features(featureType);
+        this.sourceID = Math.random();
+        this.resource = createResource(
+                MemoryResource.NAME,
+                new Object[] { NAME }
+        );
+
+        if( featureTypeOfFeatureType==null ) {
+            this.initFeatureType();
+        }
+        
+        this.getStoreServices().setFeatureTypes(
+                Collections.singletonList(featureTypeOfFeatureType), 
+                featureTypeOfFeatureType
+        );
+    }
+
+    public static FeatureStore createFeatureStore(FeatureType featureType) {
+        try {
+            DataStoreParameters parameters = FeatureTypeToStoreProviderAdapter.getParameters(featureType);
+            DefaultFeatureStore store = new DefaultFeatureStore();
+            DataStoreProvider provider = new FeatureTypeToStoreProviderAdapter(
+                    parameters,
+                    store,
+                    featureType
+            );
+            store.intialize(DALLocator.getDataManager(), parameters);
+            ((DataStoreInitializer2)store).setProvider(provider);
+            return store;
+        } catch (Exception ex) {
+            return null;
+        }
+        
+    }
+    
+    private void initFeatureType() {
+        if( featureTypeOfFeatureType!=null ) {
+            return;
+        }
+        EditableFeatureType ft = this.getStoreServices().createFeatureType(
+                getName()
+        );
+        ft.setHasOID(true);
+        
+        ft.add("name", DataTypes.STRING, 100);
+        ft.add("type", DataTypes.INT, 0);
+        ft.add("typeName", DataTypes.STRING, 100);
+        ft.add("size", DataTypes.INT, 0);
+        ft.add("precision", DataTypes.INT, 0);
+        ft.add("label", DataTypes.STRING, 100);
+        ft.add("shortlabel", DataTypes.STRING, 100);
+        ft.add("description", DataTypes.STRING, 1024);
+        ft.add("profile", DataTypes.STRING, 100);
+        ft.add("group", DataTypes.STRING, 100);
+        ft.add("order", DataTypes.INT, 0);
+        ft.add("isPk", DataTypes.BOOLEAN, 0);
+        ft.add("isFk", DataTypes.BOOLEAN, 0);
+        ft.add("isClosedList", DataTypes.BOOLEAN, 0);
+        ft.add("isReadOnly", DataTypes.BOOLEAN, 0);
+        ft.add("isComputed", DataTypes.BOOLEAN, 0);
+        ft.add("isAutomatic", DataTypes.BOOLEAN, 0);
+        ft.add("isHidden", DataTypes.BOOLEAN, 0);
+        ft.add("allowNulls", DataTypes.BOOLEAN, 0);
+        ft.add("expression", DataTypes.STRING, 1024);
+        ft.add("fkTable", DataTypes.STRING, 100);
+        ft.add("fkCode", DataTypes.STRING, 100);
+        ft.add("fkLabel", DataTypes.STRING, 1024);
+        
+        featureTypeOfFeatureType = ft;
+        attrName2Index = new HashMap<>();
+        for (FeatureAttributeDescriptor attr : ft) {
+            attrName2Index.put(attr.getName(), attr.getIndex());
+        }
+    }
+    
+    private static MemoryStoreParameters getParameters(FeatureType featureType) {
+        MemoryStoreParameters params = new MemoryStoreParameters(NAME);
+        params.setDynValue(MemoryStoreParameters.ORDER_PARAMETER_NAME, "name");
+        return params;
+    }
+    
+    @Override
+    public void open() throws OpenException {
+    }
+
+    @Override
+    public FeatureProvider createFeatureProvider(FeatureType featureType)throws DataException  {
+            return null;
+    }
+    
+    @Override
+    public ResourceProvider getResource() {
+        return this.resource;
+    }
+
+    @Override
+    public final Object getSourceId() {
+        return this.sourceID;
+    }
+
+    @Override
+    public final String getProviderName() {
+        return NAME;
+    }
+
+    @Override
+    public final String getName() {
+        return this.featureType.getStore().getName() + "!" + this.featureType.getId();
+    }
+
+    @Override
+    public final String getFullName() {
+        return this.featureType.getStore().getFullName()+ "!" + this.featureType.getId();
+    }
+
+    @Override
+    public Object createNewOID() {
+        return null;
+    }
+
+    @Override
+    public int getOIDType() {
+        return DataTypes.LONG;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceFactory.java	(revision 46118)
@@ -0,0 +1,97 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import java.util.Base64;
+import javax.json.JsonObject;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceCounter.COUNTER_TYPE;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceOID.OID_TYPE;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferencePK.PK_TYPE;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceUID.UID_TYPE;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.json.Json;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class FeatureReferenceFactory {
+    
+    private FeatureReferenceFactory() {
+        
+    }
+    
+    public static FeatureReference createFromFeature(Feature feature){
+        FeatureProvider fdata = ((DefaultFeature) feature).getData();
+        FeatureStore store = feature.getStore();
+        return createFromFeatureProvider(store, fdata);
+    }
+    
+    public static FeatureReference createFromOID(FeatureStore store, Object oid){
+        if(FeatureReferenceCounter.canUse(oid)){
+            FeatureReference ref = new FeatureReferenceCounter(store, oid);
+            return ref;
+        }
+        FeatureReference ref = new FeatureReferenceOID(store, oid);
+        return ref;
+    }
+    
+    public static FeatureReference createFromCode(FeatureStore store, String code){
+        String json = new String(Base64.getDecoder().decode(code.getBytes()));
+
+        JsonObject x = Json.createObject(json);
+        final String type = x.getString("type",null);
+        switch (type){
+            case OID_TYPE:
+                return new FeatureReferenceOID(store, x);
+            case COUNTER_TYPE:
+                return new FeatureReferenceCounter(store, x);
+            case UID_TYPE:
+                return new FeatureReferenceUID(store, x);
+            case PK_TYPE:
+                return new FeatureReferencePK(store, x);
+            default:
+                throw new IllegalArgumentException("Unsupported feature reference type"+type);
+        }
+            
+    }
+    
+    public static FeatureReference createReferencePKFromFeature(Feature feature){
+        // If store from feature does not support pk's throws IllegalArgumentException
+        FeatureProvider fdata = ((DefaultFeature) feature).getData();
+        FeatureStore store = feature.getStore();
+        return new FeatureReferencePK(store, fdata);
+    }
+
+    
+    public static FeatureReference createFromFeatureProvider(FeatureStore store, FeatureProvider fdata) {
+        FeatureReference ref = null;
+        boolean isNewFeature = fdata.isNew();
+
+        if(isNewFeature){
+            ref = new FeatureReferenceCounter(store);            
+        } else if (fdata.getType().hasOID()) {
+            if (fdata.getOID() != null) {
+                ref = new FeatureReferenceOID(store, fdata.getOID());
+            } else {
+                throw new RuntimeException("Missing OID");
+            }
+        } else {
+            ref = new FeatureReferencePK(store, fdata);
+        }
+        return ref;
+    }
+    
+    public static void registerPersistent() {
+        FeatureReferencePersistenceFactory.selfRegister();
+    }
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePK.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePK.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePK.java	(revision 46118)
@@ -0,0 +1,238 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import java.lang.ref.WeakReference;
+import java.util.Base64;
+import java.util.List;
+import java.util.Objects;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.ArrayUtils;
+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.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class FeatureReferencePK implements FeatureReferenceProviderServices, Persistent {
+
+    public static final String PK_TYPE = "pk";
+    
+    private Object[] pk;
+    private String[] pkNames;
+    private WeakReference storeRef;
+    private String featureTypeId;
+    private Integer myHashCode;
+
+    /*friend*/
+    FeatureReferencePK(FeatureStore store, FeatureProvider data) {
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+        this.doCalculatePK(data);
+    }
+
+    FeatureReferencePK(FeatureStore store, JsonObject code) {
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+        this.pk = Json.toArray(code, "values", new Object[code.getInt("size")]);
+        this.pkNames = (String[]) Json.toArray(code, "names", new String[code.getInt("size")]);
+    }
+
+    public FeatureReferencePK() {
+        //For persistence use only
+    }
+
+    public void calculatePK(FeatureProvider fdata) {
+        doCalculatePK(fdata);
+    }
+
+    private void doCalculatePK(FeatureProvider fdata) {
+        FeatureAttributeDescriptor[] pkattrs = fdata.getType().getPrimaryKey();
+        if (ArrayUtils.isEmpty(pkattrs)) {
+            throw new IllegalArgumentException("Feature don't has primary key");
+        }
+        this.pk = new Object[pkattrs.length];
+        this.pkNames = new String[pkattrs.length];
+        int n = 0;
+        for (FeatureAttributeDescriptor pkattr : pkattrs) {
+            this.pk[n] = fdata.get(pkattr.getIndex());
+            this.pkNames[n] = pkattr.getName();
+            n++;
+        }
+    }
+
+    @Override
+    public Object getOID() {
+        return null;
+    }
+
+    @Override
+    public String[] getKeyNames() {
+        return this.pkNames;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    @Override
+    public Feature getFeature() throws DataException {
+	return this.getStore().getFeatureByReference(this);
+    }
+
+    @Override
+    public Feature getFeatureQuietly() {
+        try {
+            return this.getFeature();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public Feature getFeature(FeatureType featureType) throws DataException {
+        return this.getStore().getFeatureByReference(this, featureType);
+    }
+    
+    private DefaultFeatureStore getStore() {
+        return (DefaultFeatureStore) this.storeRef.get();
+    }
+
+    @Override
+    public boolean isNewFeature() {
+        return false;
+    }
+
+    @Override
+    public String getCode() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("type", PK_TYPE);
+        if (this.pk == null) {
+            builder.add("size", -1);
+            builder.addNull("names");
+            builder.addNull("values");
+        } else {
+            builder.add("size", pkNames.length);
+            builder.add("names", this.pkNames);
+            builder.add("values", this.pk);
+        }
+
+        String s = builder.toString();
+        String r = Base64.getEncoder().encodeToString(s.getBytes());
+        return r;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("type", PK_TYPE);
+        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);
+        }
+        state.set("isNewFeature", isNewFeature());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.storeRef = new WeakReference(state.get("store"));
+        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;
+        }
+        
+    }
+
+        @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof FeatureReferencePK)) {
+            return false;
+        }
+        FeatureReferencePK other = (FeatureReferencePK) 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 && !myHashCode.equals(other.myHashCode)) {
+            return false;
+        }
+
+        if (this.pk == other.pk) {
+            return true;
+        }
+        if (this.pk == null || 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;
+
+    }
+
+    @Override
+    public int hashCode() {
+        if (myHashCode == null) {
+            StringBuilder buff = new StringBuilder();
+
+            for (int i = 0; i < this.pk.length; i++) {
+                buff.append(Objects.hashCode(this.pk[i]));
+                buff.append("##");
+            }
+            myHashCode = buff.toString().hashCode();
+        }
+        return myHashCode;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceOID.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceOID.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceOID.java	(revision 46118)
@@ -0,0 +1,165 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import java.lang.ref.WeakReference;
+import java.util.Base64;
+import java.util.Objects;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.math.NumberUtils;
+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.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author fdiaz
+ */
+
+public class FeatureReferenceOID implements FeatureReferenceProviderServices, Persistent {
+
+    public static final String OID_TYPE = "oid";
+
+    private Object oid;
+    private WeakReference storeRef;
+    private String featureTypeId;
+
+    /*friend*/
+    FeatureReferenceOID(FeatureStore store, Object oid) {
+        this.oid = oid;
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+    }
+
+    /*friend*/
+    FeatureReferenceOID(FeatureStore store, JsonObject code) {
+        this(store, Json.toObject(code, "oid"));
+    }
+
+    public FeatureReferenceOID() {
+        //For persistence use only
+    }
+
+    @Override
+    public Object getOID() {
+        return  this.oid;
+    }
+
+    @Override
+    public String[] getKeyNames() {
+        return null;
+    }
+
+    @Override
+    public Object getKeyValue(String name) {
+        return null;
+    }
+
+    @Override
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    @Override
+    public Feature getFeature() throws DataException {
+	return this.getStore().getFeatureByReference(this);
+    }
+
+    @Override
+    public Feature getFeatureQuietly() {
+        try {
+            return this.getFeature();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public Feature getFeature(FeatureType featureType) throws DataException {
+        return this.getStore().getFeatureByReference(this, featureType);
+    }
+    
+    private DefaultFeatureStore getStore() {
+        return (DefaultFeatureStore) this.storeRef.get();
+    }
+
+    @Override
+    public boolean isNewFeature() {
+        return false;
+    }
+
+    @Override
+    public String getCode() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("type", OID_TYPE);
+        builder.add("oid", this.oid);
+        String s = builder.toString();
+        String r = Base64.getEncoder().encodeToString(s.getBytes());
+        return r;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("type", OID_TYPE);
+        state.set("oid", oid);
+        state.set("store", (Persistent) storeRef.get());
+        state.set("featureTypeId", featureTypeId);
+        state.set("isNewFeature", isNewFeature());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.oid = state.get("oid");
+        this.storeRef = new WeakReference(state.get("store"));
+        this.featureTypeId = state.getString("featureTypeId");
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof FeatureReferenceOID)) {
+            return false;
+        }
+        FeatureReferenceOID other = (FeatureReferenceOID) 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 (this.oid == other.oid){
+            return true;
+        }
+        if (this.oid != null) {
+            if(this.oid instanceof Number && other.oid instanceof Number){
+                return ((Number)this.oid).longValue() == ((Number)other.oid).longValue();
+            }
+            return this.oid.equals(other.oid);
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        if (this.oid != null) {
+            return this.oid.hashCode();
+        }
+        return -1;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePersistenceFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePersistenceFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferencePersistenceFactory.java	(revision 46118)
@@ -0,0 +1,118 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceCounter.COUNTER_TYPE;
+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.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferencePK.PK_TYPE;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceOID.OID_TYPE;
+import static org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceUID.UID_TYPE;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class FeatureReferencePersistenceFactory extends AbstractSinglePersistenceFactory {
+
+    private static final String DYNCLASS_NAME = "Reference";
+    private static final String DYNCLASS_DESCRIPTION = "DefaultFeatureReference Persistent definition";
+
+    public FeatureReferencePersistenceFactory() {
+        super(FeatureReference.class, DYNCLASS_NAME, DYNCLASS_DESCRIPTION, null, null);
+        DynStruct definition = this.getDefinition();
+
+        definition.addDynFieldObject("oid")
+                .setClassOfValue(Object.class)
+                .setMandatory(false)
+                .setPersistent(true);
+
+        definition.addDynFieldString("type")
+                .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);
+
+    }
+
+    @Override
+    public Object createFromState(PersistentState state) throws PersistenceException {
+        final String type = state.getString("type");
+        Persistent ref;
+        switch (type){
+            case OID_TYPE:
+                ref = new FeatureReferenceOID();
+                break;
+            case COUNTER_TYPE:
+                ref = new FeatureReferenceCounter();
+                break;
+            case UID_TYPE:
+                ref = new FeatureReferenceUID();
+                break;
+            case PK_TYPE:
+                ref = new FeatureReferencePK();
+                break;
+            default: //For compatibility with old persistence
+                Object pk = state.get("pk");
+                if(pk == null){
+                    ref = new FeatureReferenceOID();
+                } else {
+                    ref = new FeatureReferencePK();
+                }
+        }
+        ref.loadFromState(state);
+        return ref;
+    }
+
+    @Override
+    public void saveToState(PersistentState state, Object obj) throws PersistenceException {
+        ((Persistent) obj).saveToState(state);
+    }
+
+    public static void selfRegister() {
+        PersistenceManager persistenceManager
+                = ToolsLocator.getPersistenceManager();
+        persistenceManager.registerFactory(new FeatureReferencePersistenceFactory());
+    }
+
+    @Override
+    public Class getManagedClass(Object object) {
+        return super.getManagedClass(object); //To change body of generated methods, choose Tools | Templates.
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceCounter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceCounter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceCounter.java	(revision 46118)
@@ -0,0 +1,180 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import java.lang.ref.WeakReference;
+import java.util.Base64;
+import javax.json.JsonObject;
+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.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author fdiaz
+ */
+
+public class FeatureReferenceCounter implements FeatureReferenceProviderServices, Persistent {
+
+    public static final String COUNTER_TYPE = "counter";
+    
+    private static long counter = -1;
+
+    private long oid;
+    private WeakReference storeRef;
+    private String featureTypeId;
+
+    /*friend*/
+    FeatureReferenceCounter(FeatureStore store) {
+        this.oid = counter--;
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+    }
+
+    FeatureReferenceCounter(FeatureStore store, Object oid) {
+        if(!(oid instanceof Number)){
+            throw new IllegalArgumentException("oid must be a number");
+        }
+        if(((Number) oid).longValue() >=  0){
+            throw new IllegalArgumentException("oid must be less than zero  ("+oid+").");
+        }
+
+        this.oid = ((Number) oid).longValue();
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+    }
+
+    /*friend*/
+    FeatureReferenceCounter(FeatureStore store, JsonObject code) {
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+        this.oid = (Long)Json.toObject(code, "oid");
+    }
+
+    public FeatureReferenceCounter() {
+        //For persistence use only
+    }
+
+    @Override
+    public Object getOID() {
+        return  this.oid;
+    }
+
+    @Override
+    public String[] getKeyNames() {
+        return null;
+    }
+
+    @Override
+    public Object getKeyValue(String name) {
+        return null;
+    }
+
+    @Override
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    @Override
+    public Feature getFeature() throws DataException {
+	return this.getStore().getFeatureByReference(this);
+    }
+
+    @Override
+    public Feature getFeatureQuietly() {
+        try {
+            return this.getFeature();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public Feature getFeature(FeatureType featureType) throws DataException {
+        return this.getStore().getFeatureByReference(this, featureType);
+    }
+    
+    private DefaultFeatureStore getStore() {
+        return (DefaultFeatureStore) this.storeRef.get();
+    }
+
+    @Override
+    public boolean isNewFeature() {
+        return true;
+    }
+
+    @Override
+    public String getCode() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("type", COUNTER_TYPE);
+        builder.add("oid", this.oid);
+        String s = builder.toString();
+        String r = Base64.getEncoder().encodeToString(s.getBytes());
+        return r;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("type", COUNTER_TYPE);
+        state.set("oid", oid);
+        state.set("store", (Persistent) storeRef.get());
+        state.set("featureTypeId", featureTypeId);
+        state.set("isNewFeature", isNewFeature());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.oid = state.getLong("oid");
+        this.storeRef = new WeakReference(state.get("store"));
+        this.featureTypeId = state.getString("featureTypeId");
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof FeatureReferenceCounter)) {
+            return false;
+        }
+        FeatureReferenceCounter other = (FeatureReferenceCounter) 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 (this.oid == other.oid){
+            return true;
+        }
+        return this.oid == other.oid;
+    }
+
+    @Override
+    public int hashCode() {
+        return Long.hashCode(this.oid);
+    }
+    
+    public static boolean canUse(Object oid){
+        if(oid instanceof Number){
+            if(((Number) oid).longValue() <  0){
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceUID.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceUID.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/FeatureReferenceUID.java	(revision 46118)
@@ -0,0 +1,169 @@
+/*
+ * 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.feature.impl.featurereference;
+
+import java.lang.ref.WeakReference;
+import java.util.Base64;
+import java.util.UUID;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+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.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class FeatureReferenceUID implements FeatureReferenceProviderServices, Persistent {
+    
+    public static final String UID_TYPE = "uid";
+    
+
+    private String uid;
+    private WeakReference storeRef;
+    private String featureTypeId;
+
+
+    /*friend*/
+    FeatureReferenceUID(FeatureStore store) {
+        this(store, (String)null);
+    }
+
+    /*friend*/
+    FeatureReferenceUID(FeatureStore store, JsonObject code) {
+        this(store, code.getString(UID_TYPE, null));
+    }
+
+    private FeatureReferenceUID(FeatureStore store, String uid) {
+    	this.storeRef = new WeakReference(store);
+        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
+        if(StringUtils.isBlank(uid)){
+            this.uid = this.generateUUID();
+        } else {
+            this.uid = uid;
+        }
+    }
+
+    public FeatureReferenceUID() {
+        //For persistence use only
+    }
+    
+    private String generateUUID() {
+        UUID x = UUID.randomUUID();
+        String s = x.toString().replace("-", "");
+        return s;
+    }
+
+    @Override
+    public Object getOID() {
+        return null;
+    }
+
+    @Override
+    public String[] getKeyNames() {
+        return null;
+    }
+
+    @Override
+    public Object getKeyValue(String name) {
+        return null;
+    }
+
+    @Override
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    @Override
+    public Feature getFeature() throws DataException {
+	return this.getStore().getFeatureByReference(this);
+    }
+
+    @Override
+    public Feature getFeatureQuietly() {
+        try {
+            return this.getFeature();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public Feature getFeature(FeatureType featureType) throws DataException {
+        return this.getStore().getFeatureByReference(this, featureType);
+    }
+    
+    private DefaultFeatureStore getStore() {
+        return (DefaultFeatureStore) this.storeRef.get();
+    }
+
+    @Override
+    public boolean isNewFeature() {
+        return true;
+    }
+
+    @Override
+    public String getCode() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("type", UID_TYPE);
+        builder.add("uid", this.uid);
+        String s = builder.toString();
+        String r = Base64.getEncoder().encodeToString(s.getBytes());
+        return r;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("type", UID_TYPE);
+        state.set("uid", uid);
+        state.set("store", (Persistent) storeRef.get());
+        state.set("featureTypeId", featureTypeId);
+        state.set("isNewFeature", isNewFeature());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.uid =  state.getString("uuid");
+        this.storeRef = new WeakReference(state.get("store"));
+        this.featureTypeId = state.getString("featureTypeId");
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof FeatureReferenceUID)) {
+            return false;
+        }
+        FeatureReferenceUID other = (FeatureReferenceUID) 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;
+        }
+        return StringUtils.equals(this.uid,other.uid);
+    }
+
+    @Override
+    public int hashCode() {
+        if (this.uid != null) {
+            return this.uid.hashCode();
+        }
+        return -1;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/DefaultFeatureReference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/DefaultFeatureReference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featurereference/DefaultFeatureReference.java	(revision 46118)
@@ -0,0 +1,459 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.featurereference;
+
+import java.lang.ref.WeakReference;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.lang3.ArrayUtils;
+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.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+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;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+@SuppressWarnings("UseSpecificCatch")
+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;
+	 
+        
+        private static final int OID_INDEX = 0;
+        private static final int MYHASHCODE_INDEX = 1;
+        private static final int ISNEWFEATURE_INDEX = 2;
+        private static final int FEATURETYPEID_INDEX = 3;
+        private static final int PKNAMES_SIZE_INDEX = 4;
+        private static final int PKNAMES_INDEX = 5;
+        private static final int PK_INDEX = 6;
+        
+	/**
+     * 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);
+	}
+
+	public DefaultFeatureReference(FeatureStore store, String code) {
+            this.storeRef = new WeakReference(store);
+            
+            String json = new String(Base64.getDecoder().decode(code.getBytes()));
+            
+            JSONArray x = new JSONArray(json);
+            this.oid = x.get(OID_INDEX);
+            if( x.get(MYHASHCODE_INDEX)==JSONObject.NULL ) {
+                this.myHashCode = null;
+            } else {
+                this.myHashCode = x.getInt(MYHASHCODE_INDEX);
+            }
+            this.isNewFeature = x.getBoolean(ISNEWFEATURE_INDEX);
+            this.featureTypeId = x.getString(FEATURETYPEID_INDEX);
+            int pkNames_size = x.getInt(PKNAMES_SIZE_INDEX);
+            if( pkNames_size<0 ) {
+                this.pk = null;
+                this.pkNames = null;
+            } else {
+                this.pk = new Object[pkNames_size];
+                this.pkNames = new String[pkNames_size];
+                JSONArray xx = x.getJSONArray(PKNAMES_INDEX);
+                for( int i=0; i<xx.length(); i++ ) {
+                    this.pkNames[i] = xx.getString(i);
+                }
+                xx = x.getJSONArray(PKNAMES_INDEX);
+                for( int i=0; i<xx.length(); i++ ) {
+                    this.pk[i] = xx.get(i);
+                }
+            }
+            
+//            JSONObject x = new JSONObject(json);
+//            this.oid = x.get("oid");
+//            this.myHashCode = x.getInt("myHashCode");
+//            this.isNewFeature = x.getBoolean("isNewFeature");
+//            this.featureTypeId = x.getString("featureTypeId");
+//            int pkNames_size = x.getInt("pkNames_size");
+//            if( pkNames_size<0 ) {
+//                this.pk = null;
+//                this.pkNames = null;
+//            } else {
+//                this.pk = new Object[pkNames_size];
+//                this.pkNames = new String[pkNames_size];
+//                JSONArray xx = x.getJSONArray("pkNames");
+//                for( int i=0; i<xx.length(); i++ ) {
+//                    this.pkNames[i] = xx.getString(i);
+//                }
+//                xx = x.getJSONArray("pk");
+//                for( int i=0; i<xx.length(); i++ ) {
+//                    this.pk[i] = xx.get(i);
+//                }
+//            }
+        }
+        
+        private DefaultFeatureStore getStore() {
+		return (DefaultFeatureStore) this.storeRef.get();
+	}
+
+	public void calculatePK(FeatureProvider fdata) { // Usado en los test de BBDD
+            FeatureAttributeDescriptor[] pkattrs = fdata.getType().getPrimaryKey();
+            if( ArrayUtils.isEmpty(pkattrs) ) {
+                this.pk = null;
+                this.pkNames = null;
+                return ;
+            }
+            this.pk = new Object[pkattrs.length];
+            this.pkNames = new String[pkattrs.length];
+            int n = 0;
+            for (FeatureAttributeDescriptor pkattr : pkattrs) {
+//                if( pkattr.isAutomatic() ) {
+//                    this.pk = null;
+//                    this.pkNames = null;
+//                    return ;
+//                }
+                this.pk[n] = fdata.get(pkattr.getIndex());
+                this.pkNames[n] = pkattr.getName();
+                n++;
+            }
+    }
+
+    @Override
+    public Feature getFeature() throws DataException {
+	return this.getStore().getFeatureByReference(this);
+    }
+
+    @Override
+    public Feature getFeatureQuietly() {
+        try {
+            return this.getFeature();
+        } catch(Exception ex) {
+            return null;
+        }
+    }
+
+    @Override
+	public Feature getFeature(FeatureType featureType) throws DataException {
+		return this.getStore().getFeatureByReference(this, featureType);
+	}
+
+    @Override
+	public Object getOID() {
+		return this.oid;
+	}
+
+    @Override
+	public boolean isNewFeature() {
+		return this.isNewFeature;
+	}
+
+
+    @Override
+	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;
+	}
+
+    @Override
+	public int hashCode() {
+		if (this.oid != null) {
+			return this.oid.hashCode();
+		}
+		if (myHashCode == null) {
+			StringBuilder buff = new StringBuilder();
+
+			for (int i = 0; i < this.pk.length; i++) {
+				buff.append(Objects.hashCode(this.pk[i]));
+				buff.append("##");
+			}
+			myHashCode = buff.toString().hashCode();
+		}
+		return myHashCode;
+	}
+
+    @Override
+	public String[] getKeyNames() {
+		return pkNames;
+	}
+
+    @Override
+	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;
+	}
+
+    @Override
+	public String getFeatureTypeId() {
+		return featureTypeId;
+	}
+
+	// *** Persistence ***
+
+    @Override
+	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;
+		}
+	}
+
+    @Override
+	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);
+		}
+
+	}
+        
+        @Override
+        public String getCode() {
+//            JSONObject x = new JSONObject();
+////            x.put("store", (Persistent) storeRef.get());
+//            x.put("oid", oid);
+//            x.put("myHashCode", myHashCode);
+//            x.put("isNewFeature", isNewFeature);
+//            x.put("featureTypeId", featureTypeId);
+//            if( this.pk == null ) {
+//                x.put("pkNames_size", -1);
+//                x.put("pkNames", JSONObject.NULL);
+//                x.put("pk", JSONObject.NULL);
+//            } else {
+//                x.put("pkNames_size", pkNames.length);
+//                x.put("pkNames", new JSONArray(this.pkNames));
+//                x.put("pk", new JSONArray(this.pk));
+//            }
+//
+            Object[] data = new Object[7];
+            data[OID_INDEX] = this.oid;
+            data[MYHASHCODE_INDEX] = this.myHashCode;
+            data[ISNEWFEATURE_INDEX] = this.isNewFeature;
+            data[FEATURETYPEID_INDEX] = this.featureTypeId;
+            if( this.pk == null ) {
+                data[PKNAMES_SIZE_INDEX] = -1;
+                data[PKNAMES_INDEX] = JSONObject.NULL;
+                data[PK_INDEX] = JSONObject.NULL;
+            } else {
+                data[PKNAMES_SIZE_INDEX] = pkNames.length;
+                data[PKNAMES_INDEX] = new JSONArray(this.pkNames);
+                data[PK_INDEX] = new JSONArray(this.pk);            
+            }            
+            String s = new JSONArray(data).toString();
+            String r = Base64.getEncoder().encodeToString(s.getBytes());
+            
+            return r;
+        }
+
+	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);
+
+	}
+
+    @Override
+	public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("FeatureReference: oid = ");
+        builder.append(oid);
+        if( myHashCode!=null ) {
+            builder.append(", myHashCode = ");
+            builder.append(myHashCode);
+        } 
+        if( pk!=null ) {
+            builder.append(", pks = ");
+            builder.append(Arrays.asList(pk));
+        }
+        if( pkNames!=null ) {
+            builder.append(", pkNames = ");
+            builder.append(Arrays.asList(pkNames));
+        }
+        if( isNewFeature ) {
+            builder.append(", isNew = ");
+            builder.append(isNewFeature);
+        }
+        if( featureTypeId!=null ) {
+            builder.append(", featureTypeId = ");
+            builder.append(featureTypeId);
+        }
+        return builder.toString();
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,470 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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 javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataTypeUtils;
+
+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.FeatureStore;
+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.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.evaluator.Evaluator;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultEditableFeatureType extends DefaultFeatureType implements
+        EditableFeatureType {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -713976880396024389L;
+
+    private boolean hasStrongChanges;
+    private DefaultFeatureType source;
+
+    public DefaultEditableFeatureType(FeatureStore store) {
+        super(store);
+        this.hasStrongChanges = false;
+        this.source = null;
+    }
+
+    public DefaultEditableFeatureType(FeatureStore store, String id) {
+        super(store, id);
+        this.hasStrongChanges = false;
+        this.source = null;
+    }
+
+    protected DefaultEditableFeatureType(DefaultEditableFeatureType other) {
+        super(other);
+        this.hasStrongChanges = other.hasStrongChanges;
+        this.source = (DefaultFeatureType) other.getSource();
+    }
+
+    protected DefaultEditableFeatureType(DefaultFeatureType other) {
+        super(other);
+        this.source = other;
+        this.fixAll();
+    }
+
+    @Override
+    protected DefaultFeatureAttributeDescriptor getCopyAttributeDescriptor(DefaultFeatureAttributeDescriptor src) {
+        DefaultFeatureAttributeDescriptor copy = new DefaultEditableFeatureAttributeDescriptor(src);
+        copy.setFeatureType(this);
+        return copy;
+    }
+
+    public boolean hasStrongChanges() {
+        if (hasStrongChanges) {
+            return true;
+        }
+        Iterator iter = this.iterator();
+        DefaultEditableFeatureAttributeDescriptor attr;
+        while (iter.hasNext()) {
+            attr = (DefaultEditableFeatureAttributeDescriptor) iter.next();
+            if (attr.isComputed()) {
+                continue;
+            }
+            if (attr.hasStrongChanges()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public FeatureType getCopy() {
+        DefaultEditableFeatureType copy = new DefaultEditableFeatureType(this);
+        copy.fixAll();
+        return copy;
+    }
+
+    @Override
+    public EditableFeatureType getEditable() {
+        return (EditableFeatureType) this.getCopy();
+    }
+
+    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;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor addLike(
+            FeatureAttributeDescriptor other) {
+        DefaultEditableFeatureAttributeDescriptor editableAttr;
+        editableAttr = new DefaultEditableFeatureAttributeDescriptor(
+                (DefaultFeatureAttributeDescriptor) other);
+        super.add(editableAttr);
+        if (!editableAttr.isComputed()) {
+            this.hasStrongChanges = true;
+        }
+        this.fixAll();
+        return editableAttr;
+    }
+
+    @Override
+    public FeatureType getSource() {
+        return source;
+    }
+
+    @Override
+    public FeatureType getNotEditableCopy() {
+        this.fixAll();
+        DefaultFeatureType copy = new DefaultFeatureType(this, false);
+        Iterator iter = this.iterator();
+        DefaultFeatureAttributeDescriptor attr;
+        while (iter.hasNext()) {
+            attr = (DefaultFeatureAttributeDescriptor) iter.next();
+            DefaultFeatureAttributeDescriptor newattr = new DefaultFeatureAttributeDescriptor(attr);
+            newattr.setFeatureType(copy);
+            copy.add(newattr);
+        }
+        return copy;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, int type) {
+        return this.add(name, type, true);
+    }
+
+    @Override
+    public void removeAll() {
+        while (!super.isEmpty()) {
+            super.remove(0);
+        }
+        this.fixAll();
+    }
+
+    @Override
+    public void addAll(FeatureType attributes) {
+        super.addAll(attributes);
+        this.fixAll();
+    }
+
+    private EditableFeatureAttributeDescriptor add(String name, int type, boolean strongChanges) {
+        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.", name)
+                );
+            }
+
+        }
+        DefaultEditableFeatureAttributeDescriptor attr = DefaultDataManager.createEditableFeatureAttributeDescriptor(this, name, type, strongChanges);
+        attr.setIndex(this.size());
+
+        this.hasStrongChanges = this.hasStrongChanges || strongChanges;
+        super.add(attr);
+        this.pk = null;
+        return attr;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, int type, int size) {
+        return this.add(name, type, true).setSize(size);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, int type,
+            Evaluator evaluator) {
+        if (evaluator == null) {
+            throw new IllegalArgumentException();
+        }
+        return this.add(name, type, false).setEvaluator(evaluator);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, int type,
+            FeatureAttributeEmulator emulator) {
+        if (emulator == null) {
+            throw new IllegalArgumentException();
+        }
+        return this.add(name, type, false).setFeatureAttributeEmulator(emulator);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, String type) {
+        return this.add(name, ToolsLocator.getDataTypesManager().getType(type));
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, String type, int size) {
+        return this.add(name, ToolsLocator.getDataTypesManager().getType(type), size);
+    }
+
+    public Object removeAttributeDescriptor(String name) {
+//    Hemos metido los metodos removeAttributeDescriptor ya que existe
+//    un problema desde python al llamar a los metodos remove. En lugar de llamar
+//    a estos metodos remove, llama a los de la superclase ArrayList.
+        return this.remove(name);
+    }
+
+    public boolean removeAttributeDescriptor(EditableFeatureAttributeDescriptor attribute) {
+        return this.remove(attribute);
+    }
+
+    @Override
+    public FeatureAttributeDescriptor remove(int index) {
+        FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.get(index);
+        if (!attr.isComputed()) {
+            hasStrongChanges = true;
+        }
+        if (index == this.getDefaultGeometryAttributeIndex()) {
+            this.defaultGeometryAttributeIndex = -1;
+            this.defaultGeometryAttributeName = null;
+        } else if (index == this.getDefaultTimeAttributeIndex()) {
+            this.defaultTimeAttributeIndex = -1;
+            this.defaultTimeAttributeName = null;
+        }
+        super.remove(attr);
+        this.pk = null;
+        this.fixAll();
+        return attr;
+    }
+
+    @Override
+    public Object remove(String name) {
+        FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.get(name);
+        if (attr == null) {
+            return null;
+        }
+        this.remove(attr.getIndex());
+        return attr;
+    }
+
+    @Override
+    public boolean remove(EditableFeatureAttributeDescriptor attribute) {
+        this.remove(attribute.getIndex());
+        return true;
+    }
+
+    @Override
+    protected void fixAll() {
+        super.fixAll();
+        for (FeatureAttributeDescriptor attr : this) {
+            if (attr instanceof DefaultEditableFeatureAttributeDescriptor) {
+                DefaultEditableFeatureAttributeDescriptor attr2 = (DefaultEditableFeatureAttributeDescriptor) attr;
+                if (attr2.hasStrongChanges()) {
+                    this.hasStrongChanges = true;
+                    break;
+                }
+            }
+        }
+    }
+
+    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;
+        }
+    }
+
+    @Override
+    public void setDefaultGeometryType(int type, int subType) {
+        EditableFeatureAttributeDescriptor descr = (EditableFeatureAttributeDescriptor) this.getDefaultGeometryAttribute();
+        if (descr == null) {
+            throw new IllegalStateException("Default geometry attribute not set.");
+        }
+        descr.setGeometryType(type, subType);
+    }
+
+    @Override
+    public void setDefaultGeometryAttributeName(String name) {
+        if (name == null || name.length() == 0) {
+            this.defaultGeometryAttributeName = null;
+            this.defaultGeometryAttributeIndex = -1;
+            return;
+        }
+        FeatureAttributeDescriptor attr = this.getAttributeDescriptor(name);
+        if (attr == null) {
+            throw new IllegalArgumentException("Attribute '" + name + "' not found.");
+        }
+        this.defaultGeometryAttributeName = name;
+        this.defaultGeometryAttributeIndex = attr.getIndex();
+    }
+
+    @Override
+    public int getDefaultGeometryAttributeIndex() {
+        this.fixAll();
+        return this.defaultGeometryAttributeIndex;
+    }
+
+    @Override
+    public String getDefaultGeometryAttributeName() {
+        this.fixAll();
+        return this.defaultGeometryAttributeName;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getDefaultGeometryAttribute() {
+        this.fixAll();
+        return super.getDefaultGeometryAttribute();
+    }
+
+    @Override
+    public int getDefaultTimeAttributeIndex() {
+        this.fixAll();
+        return this.defaultTimeAttributeIndex;
+    }
+
+    @Override
+    public String getDefaultTimeAttributeName() {
+        this.fixAll();
+        return this.defaultTimeAttributeName;
+    }
+
+    @Override
+    public void setHasOID(boolean hasOID) {
+        this.hasOID = hasOID;
+    }
+
+    @Override
+    protected Iterator getIterator(Iterator iter) {
+        return new EditableDelegatedIterator(iter, this);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(String name) {
+        return (EditableFeatureAttributeDescriptor) this.getAttributeDescriptor(name);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor getEditableAttributeDescriptor(int index) {
+        return (EditableFeatureAttributeDescriptor) this.getAttributeDescriptor(index);
+    }
+
+    @Override
+    public void setCheckFeaturesAtFinishEditing(boolean check) {
+        this.checkFeaturesAtFinishEditing = check;
+    }
+
+    @Override
+    public void setCheckFeaturesAtInsert(boolean check) {
+        this.checkFeaturesAtInsert = check;
+    }
+
+    protected class EditableDelegatedIterator extends DelegatedIterator {
+
+        private final DefaultEditableFeatureType fType;
+
+        public EditableDelegatedIterator(Iterator iter, DefaultEditableFeatureType fType) {
+            super(iter);
+            this.fType = fType;
+        }
+
+        @Override
+        public void remove() {
+            this.iterator.remove();
+            this.fType.fixAll();
+        }
+
+    }
+
+    protected void setAllowAutomaticValues(boolean value) {
+        this.allowAtomaticValues = value;
+    }
+
+    @Override
+    public void copyFrom(FeatureType other) {
+        super.copyFrom(other);
+        if (other instanceof EditableFeatureType) {
+            DefaultEditableFeatureType other2 = (DefaultEditableFeatureType) other;
+            this.hasStrongChanges = other2.hasStrongChanges();
+            this.source = (DefaultFeatureType) other2.getSource();
+        } else {
+            this.hasStrongChanges = false;
+            this.source = (DefaultFeatureType) other;
+        }
+    }
+
+    public void copyFrom(JsonObject json) {
+        // TODO: falta por implementar copyFrom(json)
+    }
+    
+    @Override
+    public void set(String name, String value) {
+        if (StringUtils.isBlank(name)) {
+            throw new IllegalArgumentException("Name can't be empty");
+        }
+        switch (name.trim().toLowerCase()) {
+            case "checkfeaturesatfinishediting":
+                this.setCheckFeaturesAtFinishEditing(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "checkfeaturesatinsert":
+                this.setCheckFeaturesAtInsert(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "defaultgeometryattributename":
+            case "defaultgeometryname":
+            case "defaultgeometry":
+                this.setDefaultGeometryAttributeName(DataTypeUtils.toString(value, null));
+                break;
+            default:
+                throw new IllegalArgumentException("Name attribute '" + name + "' not valid.");
+        }
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureStoreFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureStoreFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/FeatureStoreFactory.java	(revision 46118)
@@ -0,0 +1,56 @@
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.impl.AbstractDataStoreFactory;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer2;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class FeatureStoreFactory extends AbstractDataStoreFactory {
+
+    public static final String NAME = "FeatureStore";
+    
+    public FeatureStoreFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    @Override
+    public DataStore create(DynObject parameters, Services services) {
+        try {
+            DataStoreInitializer2 store = new DefaultFeatureStore();
+            store.intialize(
+                    (DefaultDataManager)services,
+                    (DataStoreParameters)parameters
+            );
+            return store;
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public void setProvider(DataStore store, DataStoreProvider provider) {
+        ((DataStoreInitializer2)store).setProvider(provider);
+    }
+    
+    @Override
+    public boolean canUse(DataParameters parameters) {
+        boolean use = parameters instanceof OpenFeatureStoreParameters;
+        return use;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,1418 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.zip.CRC32;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import org.cresques.cts.IProjection;
+
+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.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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+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.DynStruct_v2;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
+import org.gvsig.tools.dynobject.impl.DefaultTags;
+import org.gvsig.tools.i18n.I18nManager;
+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.fmap.dal.feature.FeatureExtraColumns;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.json.SupportToJson;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureType
+        extends ArrayList<FeatureAttributeDescriptor>
+        implements
+            FeatureType,
+            Persistent,
+            DynClass,
+            DynStruct_v2,
+            org.gvsig.tools.lang.Cloneable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7988721447349282215L;
+
+    public static final RecentUsedsAttributesImpl RECENTS_USEDS = new RecentUsedsAttributesImpl();
+
+    private DefaultFeatureRules rules;
+    protected boolean hasEvaluators;
+    protected boolean hasEmulators;
+    protected String defaultGeometryAttributeName;
+    protected String defaultTimeAttributeName;
+    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;
+    private WeakReference storeRef;
+    private boolean requiredFields;
+
+    private String description;
+    private String label;
+    private Tags tags;
+    private FeatureExtraColumns extraColumns;
+    protected boolean checkFeaturesAtFinishEditing;
+    protected boolean checkFeaturesAtInsert;
+
+    public DefaultFeatureType() {
+        // Usado en la persistencia.
+        this.internalID = Integer.toHexString((int) (Math.random() * 100000)).toUpperCase();
+        this.id = id = "default";
+        this.rules = new DefaultFeatureRules();
+        this.hasEvaluators = false;
+        this.hasEmulators = false;
+        this.defaultGeometryAttributeName = null;
+        this.defaultTimeAttributeName = null;
+        this.defaultGeometryAttributeIndex = -1;
+        this.defaultTimeAttributeIndex = -1;
+        this.allowAtomaticValues = false;
+        this.tags = new DefaultTags();
+        this.extraColumns = new DefaultFeatureExtraColumns();
+        this.checkFeaturesAtFinishEditing = false;
+        this.checkFeaturesAtInsert = true;
+    }
+
+    protected DefaultFeatureType(FeatureStore store, String id) {
+        this();
+        if (StringUtils.isEmpty(id)) {
+            id = "default";
+        }
+        this.id = id;
+        setStore(store);
+    }
+
+    protected DefaultFeatureType(FeatureStore store) {
+        this(store, (String) null);
+    }
+
+    protected DefaultFeatureType(DefaultFeatureType other) {
+        this(other.getStore(), (String) null);
+        copyFrom(other, true);
+    }
+
+    protected DefaultFeatureType(DefaultFeatureType other,
+            boolean copyAttributes) {
+        this(other.getStore(), (String) null);
+        this.copyFrom(other, copyAttributes);
+    }
+
+    @Override
+    public void copyFrom(FeatureType other) {
+        String internalIDSaved = this.internalID;
+        String idSaved = this.id;
+        copyFrom((DefaultFeatureType) other, true);
+        this.id = idSaved;
+        this.internalID = internalIDSaved;
+    }
+
+    @Override
+    public boolean isCheckFeaturesAtFinishEditing() {
+        return this.checkFeaturesAtFinishEditing;
+    }
+
+    @Override
+    public boolean isCheckFeaturesAtInsert() {
+        return this.checkFeaturesAtInsert;
+    }
+
+
+    protected void addAll(FeatureType attributes) {
+        for (FeatureAttributeDescriptor attribute : attributes) {
+            DefaultFeatureAttributeDescriptor copy = this.getCopyAttributeDescriptor((DefaultFeatureAttributeDescriptor) attribute);
+            super.add(copy);
+        }
+        DefaultFeatureType ft = (DefaultFeatureType) attributes; 
+        this.pk = null;
+        this.defaultGeometryAttributeName = ft.defaultGeometryAttributeName;
+        this.defaultTimeAttributeName = ft.defaultTimeAttributeName;
+        this.defaultGeometryAttributeIndex = ft.defaultGeometryAttributeIndex;
+        this.defaultTimeAttributeIndex = ft.defaultTimeAttributeIndex;
+    }
+    
+    protected void copyFrom(DefaultFeatureType other, boolean copyAttributes) {
+        this.id = other.getId();
+        if (copyAttributes) {
+            this.addAll((FeatureType)other);
+        }
+        this.defaultGeometryAttributeName = other.defaultGeometryAttributeName;
+        this.defaultTimeAttributeName = other.defaultTimeAttributeName;
+        this.defaultGeometryAttributeIndex = other.defaultGeometryAttributeIndex;
+        this.defaultTimeAttributeIndex = other.defaultTimeAttributeIndex;
+
+        this.hasEvaluators = other.hasEvaluators;
+        this.hasEmulators = other.hasEmulators;
+        this.rules = (DefaultFeatureRules) other.rules.getCopy();
+        this.hasOID = other.hasOID;
+        this.id = other.id; // XXX ???? copiar o no esto????
+        this.internalID = other.internalID;
+        this.label = other.label;
+        this.description = other.description;
+        this.extraColumns = other.extraColumns.getCopy();
+        try {
+            this.tags = (Tags) other.tags.clone();
+        } catch (CloneNotSupportedException ex) {
+            
+        }
+        this.checkFeaturesAtFinishEditing = other.checkFeaturesAtFinishEditing;
+        this.checkFeaturesAtInsert = other.checkFeaturesAtInsert;
+    }
+    
+    protected DefaultFeatureAttributeDescriptor getCopyAttributeDescriptor(DefaultFeatureAttributeDescriptor src) {
+        DefaultFeatureAttributeDescriptor copy = new DefaultFeatureAttributeDescriptor(src);
+        copy.setFeatureType(this);
+        return copy;
+    }
+
+    @Override
+    public String getId() {
+        return this.id;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+	
+    @Override
+    public FeatureAttributeDescriptor getAttributeDescriptorFromAll(String name) {
+       FeatureAttributeDescriptor attrdesc = this.getAttributeDescriptor(name);
+		if (attrdesc == null && this.getExtraColumns().get(name) != null) {
+			attrdesc = this.getExtraColumns().get(name);
+		}
+		return attrdesc;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getAttributeDescriptor(int index) {
+        return (FeatureAttributeDescriptor) super.get(index);
+    }
+
+    @Override
+    public String getAttributeName(int index) {
+      try {
+        return super.get(index).getName();
+      } catch(Exception ex) {
+        return null;
+      }
+    }
+
+    @Override
+    public FeatureType getCopy() {
+        return new DefaultFeatureType(this);
+    }
+
+    @Override
+    public Object clone() {
+        return this.getCopy();
+    }
+
+    @Override
+    public int getDefaultGeometryAttributeIndex() {
+        return this.defaultGeometryAttributeIndex;
+    }
+
+    @Override
+    public String getDefaultGeometryAttributeName() {
+        return this.defaultGeometryAttributeName;
+    }
+
+    @Override
+    public int getDefaultTimeAttributeIndex() {
+        return this.defaultTimeAttributeIndex;
+    }
+
+    @Override
+    public String getDefaultTimeAttributeName() {
+        return this.defaultTimeAttributeName;
+    }
+
+    @Override
+    public EditableFeatureType getEditable() {
+        return new DefaultEditableFeatureType(this);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public FeatureRules getRules() {
+        return this.rules;
+    }
+
+    @Override
+    public boolean hasEvaluators() {
+        return this.hasEvaluators;
+    }
+
+    public boolean hasEmulators() {
+        return this.hasEmulators;
+    }
+
+    public boolean hasRequiredFields() {
+        return this.requiredFields;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public IProjection getDefaultSRS() {
+        if (this.getDefaultGeometryAttributeIndex() < 0) {
+            return null;
+        }
+        return this.getAttributeDescriptor(
+                this.getDefaultGeometryAttributeIndex()).getSRS();
+    }
+
+    public void validateFeature(EditableFeature feature, int check) throws DataException {
+        DefaultFeatureRules theRules = (DefaultFeatureRules) this.getRules();
+        theRules.validate(feature, check);
+    }
+
+    public void validateFeature(Feature feature, int check) throws DataException {
+        DefaultFeatureRules theRules = (DefaultFeatureRules) this.getRules();
+        theRules.validate(feature, check);
+    }
+
+    public FeatureType getSubtype() throws DataException {
+        return new SubtypeFeatureType(this, null, null, true);
+    }
+
+    public FeatureType getSubtype(String[] names) throws DataException {
+        return this.getSubtype(names, null, true);
+    }
+
+    public FeatureType getSubtype(String[] names, String[] constantsNames) throws DataException {
+        return this.getSubtype(names, constantsNames, true);
+    }
+
+    public FeatureType getSubtype(String[] names, String[] constantsNames, boolean includePk) throws DataException {
+        if (ArrayUtils.isEmpty(names) && ArrayUtils.isEmpty(constantsNames)) {
+            return (FeatureType) this.clone();
+        }
+        return new SubtypeFeatureType(this, names, constantsNames,includePk);
+    }
+
+    public boolean isSubtypeOf(FeatureType featureType) {
+        return false;
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> toList() {
+        return Collections.unmodifiableList(this);
+    }
+
+    @Override
+    public Tags getTags() {
+        return this.tags;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+
+    @Override
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    @Override
+    public DynField addDynField(String name, int type) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public FeatureExtraColumns getExtraColumns() {
+        return extraColumns;
+    }
+    
+    public void setExtraColumn(FeatureExtraColumns extraColumn) { //List<FeatureAttributeDescriptor> descriptors) {
+          this.extraColumns = extraColumn;
+    }
+
+    @Override
+    public Iterable<FeatureAttributeDescriptor> getAllAttributeDescriptors() {
+        Set<FeatureAttributeDescriptor> all = new HashSet<FeatureAttributeDescriptor>();
+        for (FeatureAttributeDescriptor attributeDescriptor : this.getAttributeDescriptors()) {
+            all.add(attributeDescriptor);
+        }
+        for (FeatureAttributeDescriptor extraColumn : this.getExtraColumns().getColumns()) {
+            all.add(extraColumn);
+        }
+        return all;
+    }
+
+    class SubtypeFeatureType extends DefaultFeatureType {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 6913732960073922540L;
+        WeakReference parent;
+
+        SubtypeFeatureType(DefaultFeatureType parent, String[] names, String[] constantsNames, boolean includePk)
+                throws DataException {
+            super(parent, false);
+            DefaultFeatureAttributeDescriptor attrcopy;
+            Set<String> attrnames = new LinkedHashSet<>();
+            Set<String> requiredAttrnames = new HashSet<>();
+
+            if (ArrayUtils.isEmpty(names)) {
+                for (FeatureAttributeDescriptor attrdesc : parent) {
+                    attrnames.add(attrdesc.getName().toLowerCase());
+                }
+            } else { 
+                for (String name : names) {
+                  name = name.toLowerCase();
+                  attrnames.add(name);
+                  requiredAttrnames.add(name);
+                }
+            }
+            // Add required fields for emulated fields
+            if (parent.hasEmulators) {
+                // Ojo, este bucle falla cuando hay un campo calculado que depende
+                // de otro campo calculado.
+                for (FeatureAttributeDescriptor attrdesc : parent) {
+                    FeatureAttributeEmulator emulator = attrdesc.getFeatureAttributeEmulator();
+                    if (emulator != null && attrnames.contains(attrdesc.getName().toLowerCase())) {
+                        String theNames[] = emulator.getRequiredFieldNames();
+                        if (names != null) {
+                            for (String name : theNames) {
+                                name = name.toLowerCase();
+                                attrnames.add(name);
+                                requiredAttrnames.add(name);
+                            }
+                        }
+                    }
+                }
+            }
+            // Add missing pk fiels
+            if (includePk && !parent.hasOID()) {
+                for (FeatureAttributeDescriptor attrdesc : parent) {
+                    if (attrdesc.isPrimaryKey()) {
+                        String name = attrdesc.getName().toLowerCase();
+                        attrnames.add(name);
+                        requiredAttrnames.add(name);
+                    }
+                }
+            }
+
+            // Copy attributes
+            int i = 0;
+            for (String name : attrnames) {
+                DefaultFeatureAttributeDescriptor attr = (DefaultFeatureAttributeDescriptor) parent.get(name);
+                if (attr == null) {
+                    throw new SubtypeFeatureTypeNameException(name, parent.getId());
+                }
+                attrcopy = new DefaultFeatureAttributeDescriptor(attr);
+                this.add(attrcopy);
+                attrcopy.index = i++;
+            }
+
+            // Set the constants attributes.
+            if (!ArrayUtils.isEmpty(constantsNames)) {
+                for (String name : constantsNames) {
+                    if (!requiredAttrnames.contains(name.toLowerCase())) {
+                        DefaultFeatureAttributeDescriptor attr = (DefaultFeatureAttributeDescriptor) this.get(name);
+                        attr.setConstantValue(true);
+                    }
+                }
+            }
+
+            this.defaultGeometryAttributeIndex = this.getIndex(this.defaultGeometryAttributeName);
+            if (this.defaultGeometryAttributeIndex < 0) {
+                this.defaultGeometryAttributeName = null;
+            }
+            this.defaultTimeAttributeIndex = this.getIndex(this.defaultTimeAttributeName);
+            if (this.defaultTimeAttributeIndex < 0) {
+                this.defaultTimeAttributeName = null;
+            }
+            this.parent = new WeakReference(parent);
+        }
+
+        public FeatureType getSubtype(String[] names, boolean includePk) throws DataException {
+            return new SubtypeFeatureType((DefaultFeatureType) this.parent
+                    .get(), names, null, includePk);
+        }
+
+        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)' not found in type (%(type)).";
+        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;
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public Iterator<FeatureAttributeDescriptor> 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;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return iterator.hasNext();
+        }
+
+        @Override
+        public Object next() {
+            return iterator.next();
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    @Override
+    public boolean allowAutomaticValues() {
+        return this.allowAtomaticValues;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor[] getAttributeDescriptors() {
+        return (FeatureAttributeDescriptor[]) super
+                .toArray(new FeatureAttributeDescriptor[super.size()]);
+    }
+
+    @Override
+    public boolean hasPrimaryKey() {
+        if( pk!=null ) {
+            return pk.length>0;
+        }
+        for (FeatureAttributeDescriptor attr : this) {
+            if( attr.isPrimaryKey() ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean supportReferences() {
+        return this.hasOID() || this.hasPrimaryKey();
+    }
+    
+    @Override
+    public FeatureAttributeDescriptor[] getPrimaryKey() {
+        if (pk == null) {
+            List pks = new ArrayList();
+            Iterator iter = super.iterator();
+            FeatureAttributeDescriptor attr;
+            while (iter.hasNext()) {
+                attr = (FeatureAttributeDescriptor) iter.next();
+                if (attr.isPrimaryKey()) {
+                    pks.add(attr);
+                }
+            }
+            if (pks.isEmpty()) {
+                pk = new FeatureAttributeDescriptor[0];
+            } else {
+                pk = (FeatureAttributeDescriptor[]) pks.toArray(new FeatureAttributeDescriptor[pks.size()]);
+            }
+        }
+        return pk;
+    }
+
+    public FeatureAttributeDescriptor getDefaultGeometryAttribute() {
+        if (this.defaultGeometryAttributeIndex < 0) {
+            return null;
+        }
+        return (FeatureAttributeDescriptor) super
+                .get(this.defaultGeometryAttributeIndex);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DefaultFeatureType)) {
+            return false;
+        }
+        DefaultFeatureType other = (DefaultFeatureType) o;
+        if (!this.id.equals(other.id)) {
+            return false;
+        }
+        if (this.size() != other.size()) {
+            return false;
+        }
+        FeatureAttributeDescriptor attr, attrOther;
+        Iterator iter, iterOther;
+        iter = this.iterator();
+        iterOther = other.iterator();
+        while (iter.hasNext()) {
+            attr = (FeatureAttributeDescriptor) iter.next();
+            attrOther = (FeatureAttributeDescriptor) iterOther.next();
+            if (!attr.equals(attrOther)) {
+                return false;
+            }
+        }
+
+        if (!StringUtils.equals(defaultGeometryAttributeName, other.defaultGeometryAttributeName)) {
+            return false;
+        }
+        if (!StringUtils.equals(defaultTimeAttributeName, other.defaultTimeAttributeName)) {
+            return false;
+        }
+        return true;
+
+    }
+
+    /**
+     * Start of DynClass interface implementation READONLY
+     */
+    @Override
+    public DynField addDynField(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField getDeclaredDynField(String name) {
+        return (DynField) getAttributeDescriptor(name);
+    }
+
+    @Override
+    public DynField[] getDeclaredDynFields() {
+        return (DynField[]) getAttributeDescriptors();
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public DynField getDynField(String name) {
+        return (DynField) getAttributeDescriptor(name);
+    }
+
+    @Override
+    public DynField[] getDynFields() {
+        return (DynField[]) getAttributeDescriptors();
+    }
+
+    @Override
+    public String getName() {
+        return this.id + "_" + internalID;
+    }
+
+    @Override
+    public void removeDynField(String name) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public void addDynMethod(DynMethod dynMethod) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    public void extend(DynClass dynClass) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public void extend(String dynClassName) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public void extend(String namespace, String dynClassName) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public DynMethod getDeclaredDynMethod(String name)
+            throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod[] getDeclaredDynMethods() throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod getDynMethod(String name) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod getDynMethod(int code) throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynMethod[] getDynMethods() throws DynMethodException {
+        return null;
+    }
+
+    @Override
+    public DynClass[] getSuperDynClasses() {
+        return null;
+    }
+
+    @Override
+    public boolean isInstance(DynObject dynObject) {
+        if (dynObject.getDynClass().getName() == getName()) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public DynObject newInstance() {
+
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void removeDynMethod(String name) {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public DynField addDynFieldChoice(String name, int type,
+            Object defaultValue, DynObjectValueItem[] values,
+            boolean mandatory, boolean persistent) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldRange(String name, int type,
+            Object defaultValue, Object min, Object max, boolean mandatory,
+            boolean persistent) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldSingle(String name, int type,
+            Object defaultValue, boolean mandatory, boolean persistent) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public DynField addDynFieldLong(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldChoice(String name, int type,
+            Object defaultValue, DynObjectValueItem[] values) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldRange(String name, int type,
+            Object defaultValue, Object min, Object max) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldSingle(String name, int type, Object defaultValue) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldString(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldInt(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldDouble(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldFloat(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    public DynField addDynFieldBoolean(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldList(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldMap(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldObject(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldSet(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldArray(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldDate(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void extend(DynStruct struct) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getFullName() {
+        // TODO: usar el DynClassName
+        return this.id;
+    }
+
+    @Override
+    public String getNamespace() {
+        return "DALFeature";
+    }
+
+    @Override
+    public DynStruct[] getSuperDynStructs() {
+        return null;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public void setNamespace(String namespace) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldFile(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldFolder(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldURL(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField addDynFieldURI(String name) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isExtendable(DynStruct dynStruct) {
+        return false;
+    }
+
+    public void extend(DynStruct[] structs) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void remove(DynStruct superDynStruct) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeAll(DynStruct[] superDynStruct) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getDefaultTimeAttribute() {
+        if (this.defaultTimeAttributeIndex < 0) {
+            return null;
+        }
+        return (FeatureAttributeDescriptor) super
+                .get(this.defaultTimeAttributeIndex);
+    }
+
+    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.");
+        }
+        if (attr.getIndex() < 0) {
+            fixAll();
+        }
+        this.defaultTimeAttributeIndex = attr.getIndex();
+    }
+
+    protected void fixAll() {
+        int i = 0;
+        Iterator iter = super.iterator();
+        DefaultFeatureAttributeDescriptor attr;
+
+        while (iter.hasNext()) {
+            attr = (DefaultFeatureAttributeDescriptor) iter.next();
+            if (attr.getOder() < 1) {
+                attr.setOrder(i * 10);
+            }
+            attr.setIndex(i++);
+            attr.fixAll();
+            if (attr.getEvaluator() != null) {
+                this.hasEvaluators = true;
+            }
+            if (attr.getFeatureAttributeEmulator() != null) {
+                this.hasEmulators = true;
+                String[] x = attr.getFeatureAttributeEmulator().getRequiredFieldNames();
+                if (!ArrayUtils.isEmpty(x)) {
+                    this.requiredFields = true;
+                }
+            }
+            switch (attr.getType()) {
+                case DataTypes.GEOMETRY:
+                    if (this.defaultGeometryAttributeName == null
+                        || !StringUtils.equals(this.defaultGeometryAttributeName, attr.getName())) {
+                        this.defaultGeometryAttributeName = attr.getName();
+                    }
+                    break;
+                case DataTypes.INSTANT:
+                case DataTypes.INTERVAL:
+                case DataTypes.DATE:
+                    if (this.defaultTimeAttributeName == null && attr.isTime()) {
+                        this.defaultTimeAttributeName = attr.getName();
+                    }
+                    break;
+            }
+        }
+        if (this.defaultGeometryAttributeName != null) {
+            this.defaultGeometryAttributeIndex = this.getIndex(this.defaultGeometryAttributeName);
+        }
+        if (this.defaultTimeAttributeName != null) {
+            this.defaultTimeAttributeIndex = this.getIndex(this.defaultTimeAttributeName);
+        }
+        this.internalID = Long.toHexString(this.getCRC());
+
+    }
+
+    protected 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();
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        if (this.storeRef == null) {
+            return null;
+        }
+        return (FeatureStore) this.storeRef.get();
+    }
+
+    public void setStore(FeatureStore store) {
+        if (store == null) {
+            this.storeRef = null;
+        } else {
+            this.storeRef = new WeakReference(store);
+        }
+    }
+
+    @Override
+    public List<FeatureAttributeDescriptor> getFilteredAttributes(
+            Predicate<FeatureAttributeDescriptor> filter,
+            int max
+    ) {
+        List<FeatureAttributeDescriptor> attrs = new ArrayList<>();
+        for (FeatureAttributeDescriptor attribute : this) {
+            if (filter.test(attribute)) {
+                attrs.add(attribute);
+            }
+            if( max>0 && attrs.size()>= max) {
+                break;
+            }
+        }
+        return attrs;
+    }
+    
+    @Override
+    public List<FeatureAttributeDescriptor> getRecentUseds() {
+        return RECENTS_USEDS.getAttributes(this);
+    }
+    
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+
+        hasEvaluators = state.getBoolean("hasEvaluators");
+        hasEmulators = state.getBoolean("hasEmulators");
+        defaultGeometryAttributeName = state.getString("defaultGeometryAttributeName");
+        defaultTimeAttributeName = state.getString("defaultTimeAttributeName");
+        defaultGeometryAttributeIndex = state.getInt("defaultGeometryAttributeIndex");
+        defaultTimeAttributeIndex = state.getInt("defaultTimeAttributeIndex");
+        id = state.getString("id");
+        hasOID = state.getBoolean("hasOID");
+        allowAtomaticValues = state.getBoolean("allowAtomaticValues");
+
+        requiredFields = state.getBoolean("requiredFields");
+        internalID = state.getString("internalID");
+        tags = (Tags) state.get("tags");
+        if( tags == null ) {
+            this.tags = new DefaultTags();
+        }
+        this.checkFeaturesAtFinishEditing = state.getBoolean("checkFeaturesAtFinishEditing");
+        this.checkFeaturesAtInsert = state.getBoolean("checkFeaturesAtInsert");
+        
+        List<FeatureAttributeDescriptor> elements = state.getList("elements");
+        for (FeatureAttributeDescriptor element : elements) {
+            ((DefaultFeatureAttributeDescriptor) element).setFeatureType(this);
+            super.add(element);
+        }
+        this.pk = null;
+        
+        this.rules = new DefaultFeatureRules();
+        List stateRules = state.getList("rules");
+        if(stateRules != null) {
+            this.rules.addAll(state.getList("rules"));
+        }
+        this.fixAll();
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+
+//        FIXME: rules
+        state.set("hasEvaluators", hasEvaluators);
+        state.set("hasEmulators", hasEmulators);
+        state.set("defaultGeometryAttributeName", defaultGeometryAttributeName);
+        state.set("defaultTimeAttributeName", defaultTimeAttributeName);
+        state.set("defaultGeometryAttributeIndex", defaultGeometryAttributeIndex);
+        state.set("defaultTimeAttributeIndex", defaultTimeAttributeIndex);
+        state.set("id", id);
+        state.set("hasOID", hasOID);
+        state.set("allowAtomaticValues", allowAtomaticValues);
+
+        state.set("requiredFields", requiredFields);
+        state.set("internalID", internalID);
+
+        List<FeatureAttributeDescriptor> elements = new ArrayList<>();
+        elements.addAll(this);
+        state.set("elements", elements);
+        state.set("tags", tags);
+        state.set("checkFeaturesAtFinishEditing",this.checkFeaturesAtFinishEditing);
+        state.set("checkFeaturesAtInsert",this.checkFeaturesAtInsert);
+        state.set("rules", this.rules.iterator());
+    }
+
+    private static final String FEATTYPE_PERSISTENCE_DEFINITION_NAME = "FeatureType";
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+        if (manager.getDefinition(FEATTYPE_PERSISTENCE_DEFINITION_NAME)
+                == null) {
+            DynStruct definition = manager.addDefinition(DefaultFeatureType.class,
+                    FEATTYPE_PERSISTENCE_DEFINITION_NAME,
+                    FEATTYPE_PERSISTENCE_DEFINITION_NAME
+                    + " persistent definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldBoolean("hasEvaluators");
+            definition.addDynFieldBoolean("hasEmulators");
+            definition.addDynFieldString("defaultGeometryAttributeName");
+            definition.addDynFieldString("defaultTimeAttributeName");
+            definition.addDynFieldInt("defaultGeometryAttributeIndex");
+            definition.addDynFieldInt("defaultTimeAttributeIndex");
+            definition.addDynFieldString("id");
+            definition.addDynFieldBoolean("hasOID");
+            definition.addDynFieldBoolean("allowAtomaticValues");
+
+            definition.addDynFieldBoolean("requiredFields");
+            definition.addDynFieldString("internalID");
+
+            definition.addDynFieldList("elements")
+                    .setClassOfItems(FeatureAttributeDescriptor.class);
+
+            definition.addDynFieldObject("tags").setClassOfValue(Tags.class);
+            definition.addDynFieldBoolean("checkFeaturesAtFinishEditing")
+                    .setMandatory(false)
+                    .setDefaultFieldValue(false);
+            definition.addDynFieldBoolean("checkFeaturesAtInsert")
+                    .setMandatory(false)
+                    .setDefaultFieldValue(true);
+            definition.addDynFieldList("rules")
+                    .setClassOfItems(FeatureRules.class);
+        }
+    }
+
+    @Override
+    public FeatureStore getAsFeatureStore() {
+        FeatureStore store = FeatureTypeToStoreProviderAdapter.createFeatureStore(this);
+        return store;
+    }
+    
+                
+    @Override
+    public String getNewFieldName() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String prefix = i18n.getTranslation("_Field");
+        String fieldName;
+        for (int i = 1; i < 1000; i++) {
+            fieldName = prefix+i;
+            if( this.get(fieldName)==null ) {
+                return fieldName;
+            }
+        }
+        fieldName = prefix + (new Date()).getTime();
+        return fieldName;
+    }
+    
+    @Override
+   public FeatureType getOriginalFeatureType()  {
+        DefaultFeatureStore store = (DefaultFeatureStore) this.getStore();
+        if (store==null) {
+            return null;
+        }
+        return store.getOriginalFeatureType(this);
+    }
+    @Override
+    public boolean hasOnlyMetadataChanges(FeatureType old) {
+        if( old == null ) {
+            throw new NullPointerException();
+        }
+        // Si hay campos nuevos -> false
+        for (FeatureAttributeDescriptor attr : this) {
+            if(!attr.isComputed() && old.getAttributeDescriptor(attr.getName())==null) {
+                return false;
+            }
+        }
+        
+        // Si se ha eliminado algun campo -> false
+        for (FeatureAttributeDescriptor attr : old) {
+            if(!attr.isComputed() && this.getAttributeDescriptor(attr.getName())==null ) {
+                return false;
+            }
+        }
+        
+        // No hay campos nuevos ni se ha eliminado ninguno, asi que comparamos
+        // los campos uno a uno.
+        for (FeatureAttributeDescriptor attr : this) {
+            FeatureAttributeDescriptor attrold = old.getAttributeDescriptor(attr.getName());
+            if(!attr.isComputed() && !attr.hasOnlyMetadataChanges(attrold) ) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    public void writeAsDALFile(File file) {
+      try {
+        DALFile dalFile = DALFile.getDALFile();
+        dalFile.setFeatureType(this);
+        if( !dalFile.isEmpty() ) {
+          dalFile.write(file);
+        }
+      } catch (Exception ex) {
+        throw new RuntimeException("Can't write as DAL file ("+Objects.toString(file)+").", ex);
+      }
+    }
+    
+    @Override
+    public JsonObject toJson() {
+        return this.toJsonBuilder().build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.add("id",id);
+        builder.add("internalID",internalID);
+        builder.add("label",label);
+        builder.add("description",description);
+        builder.add("allowAtomaticValues",allowAtomaticValues);
+        builder.add("hasOID",hasOID);
+        builder.add("defaultGeometryAttributeName",defaultGeometryAttributeName);
+        builder.add("defaultTimeAttributeName",defaultTimeAttributeName);        
+        builder.add("checkFeaturesAtFinishEditing",checkFeaturesAtFinishEditing);        
+        builder.add("checkFeaturesAtInsert",checkFeaturesAtInsert);        
+        builder.add("tags", tags);
+        builder.add("extraColumns", this.extraColumns);
+        builder.add("descriptors", this.iterator());
+        
+        return builder;        
+    }
+
+    public void fromJson(JsonObject json) {
+        this.clear();
+        this.id = json.getString("id", null);
+        this.internalID = json.getString("internalID", null);
+        this.label = json.getString("label", null);
+        this.description = json.getString("description",null);
+        this.allowAtomaticValues = json.getBoolean("allowAtomaticValues",false);
+        this.checkFeaturesAtFinishEditing = json.getBoolean("checkFeaturesAtFinishEditing",false);
+        this.checkFeaturesAtInsert = json.getBoolean("checkFeaturesAtInsert",true);
+        this.hasOID = json.getBoolean("hasOID", false);
+        this.defaultGeometryAttributeName = json.getString("defaultGeometryAttributeName", null);
+        this.defaultTimeAttributeName = json.getString("defaultTimeAttributeName",null);
+        this.tags = (Tags) Json.toObject(json, "tags");
+        this.extraColumns = (FeatureExtraColumns) Json.toObject(json, "extraColumns");
+        if( json.containsKey("descriptors") ) {
+            for (JsonValue jsonValue : json.getJsonArray("descriptors")) {
+                DefaultEditableFeatureAttributeDescriptor attr = new DefaultEditableFeatureAttributeDescriptor(this, false);
+                attr.fromJson((JsonObject) jsonValue);
+                this.add(attr);
+            }
+        }
+    }
+    
+    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
+        
+        public TheJsonSerializer() {            
+        }
+
+        @Override
+        public Class getObjectClass() {
+            return DefaultFeatureType.class;
+        }
+
+        @Override
+        public Object toObject(JsonObject json) {
+            DefaultFeatureType o = new DefaultFeatureType();
+            o.fromJson(json);
+            return o;
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder(Object value) {
+            return ((SupportToJson)value).toJsonBuilder();
+        }
+        
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(new TheJsonSerializer());
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryExpansionAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryExpansionAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryExpansionAdapter.java	(revision 46118)
@@ -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.dal.feature.impl.editing.memory;
+
+import org.gvsig.fmap.dal.feature.impl.editing.memory.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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryExpansionAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/ExpansionAdapter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/ExpansionAdapter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/ExpansionAdapter.java	(revision 46118)
@@ -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.editing.memory;
+
+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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/ExpansionAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureManager.java	(revision 46118)
@@ -0,0 +1,504 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.editing.memory;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+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.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureRules;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+
+@SuppressWarnings("UseSpecificCatch")
+public class FeatureManager {
+
+    private int deltaSize;
+    private final ExpansionAdapter expansionAdapter;
+    private final Collection<FeatureReference> deleted;
+    private final Map<FeatureReference, Integer> added;
+    private final Map<FeatureReference, Integer> addedAndDeleted;
+    private final Map<FeatureReference, Integer> modifiedFromOriginal;
+    private final Map<FeatureReference, Integer> original;
+    private final FeatureStore store;
+
+    public FeatureManager(FeatureStore store) {
+        deltaSize = 0;
+        expansionAdapter = new MemoryExpansionAdapter();
+        deleted = new LinkedHashSet<>();
+        added = new LinkedHashMap<>();
+        addedAndDeleted = new LinkedHashMap<>();
+        modifiedFromOriginal = new HashMap<>();
+        original = new HashMap<>();
+        this.store = store;
+    }
+
+    /**
+     * 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(Feature feature) {
+        FeatureReference id = feature.getReference();
+        if(!original.containsKey(id)){
+            int n = expansionAdapter.addObject(feature);
+            original.put(id, n);
+        }
+        deleted.add(id);
+        Integer num = added.remove(id);
+        Feature previousFeature = null;
+        if (num == null || num == -1) {
+            num = modifiedFromOriginal.remove(id);
+            if (num != null) {
+                previousFeature = (Feature) expansionAdapter.getObject(num);
+            }
+            // if num is null here, method returns null
+        } else {
+            previousFeature = (Feature) expansionAdapter.getObject(num);
+            addedAndDeleted.put(id, num);
+        }
+        deltaSize--;
+        return previousFeature;
+    }
+
+    public void add(EditableFeature feature) {
+        FeatureReference id = feature.getReference();
+        if(!original.containsKey(id)){
+            original.put(id, null);
+        }
+
+        int pos = expansionAdapter.addObject(feature);
+        added.put(feature.getReference(), pos);
+        deleted.remove(feature.getReference());
+        deltaSize++;
+    }
+
+    public Feature deleteLastFeature() {
+        expansionAdapter.deleteLastObject();
+        Feature feature = (Feature) expansionAdapter.getObject(expansionAdapter.getSize() - 1);
+        added.remove(feature.getReference());
+        modifiedFromOriginal.remove(feature.getReference());
+        deltaSize--;
+        return feature;
+    }
+    
+    public DefaultFeature get(FeatureProvider data){
+        FeatureReference ref = FeatureReferenceFactory.createFromFeatureProvider(store, data);
+        try {
+            return get(ref, store);
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+
+    /**
+     * 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 DefaultFeature 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 DefaultFeature 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.
+        //
+        boolean isNewFeature = false;
+        Integer intNum = (added.get(id));
+        if (intNum == null) {
+            intNum = (modifiedFromOriginal.get(id));
+            if (intNum == null) {
+                //If the feature has been added and deleted
+                intNum = addedAndDeleted.get(id);
+                if (intNum == null) {
+                    return null;
+                }
+            }
+        } else {
+            isNewFeature = true;
+        }
+        int num = intNum;
+        if (num == -1) {
+            return null;
+        }
+        Feature feature = (Feature) expansionAdapter.getObject(num);
+        if (featureType == null) {
+            featureType = store.getDefaultFeatureType();
+        }
+        DefaultFeature feat = new DefaultFeature(featureType, feature);
+        feat.getData().setNew(isNewFeature);
+        return feat;
+    }
+
+    public int update(EditableFeature feature, Feature oldFeature) {
+        FeatureReference id = feature.getReference();
+        if(!original.containsKey(id)){
+            int n = expansionAdapter.addObject(oldFeature);
+            original.put(id, n);
+        }
+        int oldNum = -1;
+        int num = expansionAdapter.addObject(feature);
+        if (added.containsKey(id)) {
+            oldNum = (added.get(id));
+            added.put(id, num);
+        } else {
+            if (modifiedFromOriginal.get(id) != null) {
+                oldNum = (modifiedFromOriginal.get(id));
+            }
+            modifiedFromOriginal.put(id, num);
+        }
+        return oldNum;
+    }
+
+    public void restore(FeatureReference id) {
+        deleted.remove(id);
+        deltaSize++;
+    }
+
+    public void restore(FeatureReference id, int num) {
+        if (added.containsKey(id)) {
+            added.put(id, num);
+        } else {
+            modifiedFromOriginal.put(id, num);
+        }
+    }
+
+    public boolean isDeleted(Feature feature) {
+        return deleted.contains(feature.getReference());
+    }
+
+    public boolean isDeleted(FeatureProvider data) {
+        FeatureReference ref = FeatureReferenceFactory.createFromFeatureProvider(store, data);
+        return deleted.contains(ref);
+    }
+
+    public boolean isDeleted(FeatureReference featureID) {
+        return deleted.contains(featureID);
+    }
+
+    public void clear() {
+        added.clear();
+        modifiedFromOriginal.clear();
+        expansionAdapter.close();
+        deleted.clear();
+        addedAndDeleted.clear();
+        deltaSize = 0;
+    }
+
+    public boolean hasChanges() {
+        return added.size() > 0 || modifiedFromOriginal.size() > 0 || deleted.size() > 0;
+    }
+
+    public boolean hasDeleteds() {
+        return deleted.size() > 0;
+    }
+
+    public long getPendingChangesCount() {
+        long count = 0;
+        if( this.added!=null ) {
+            count += this.added.size();
+        }
+        if( this.deleted!=null ) {
+            count += this.deleted.size();
+        }
+        if( this.modifiedFromOriginal!=null ) {
+            count += this.modifiedFromOriginal.size();
+        }
+        return count;
+    }
+
+    public Iterator<FeatureReference> getDeleted() {
+        return new DeletedsFeatureReferencesIterator();
+
+    }
+
+    private class DeletedsFeatureReferencesIterator implements Iterator<FeatureReference> {
+
+        private Boolean hasnext = null;
+        private final Iterator iter;
+        private FeatureReference reference;
+
+        public DeletedsFeatureReferencesIterator() {
+            iter = deleted.iterator();
+        }
+
+        @Override
+        public boolean hasNext() {
+            if (hasnext != null) {
+                return hasnext;
+            }
+            hasnext = false;
+            while (iter.hasNext()) {
+                reference = (FeatureReference) iter.next();
+                if (!reference.isNewFeature()) {
+                  hasnext = true;
+                  break;
+                }
+            }
+            return hasnext;
+        }
+
+        @Override
+        public FeatureReference next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            hasnext = null;
+            return reference;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    public Iterator<FeatureProvider> getInserted() {
+        Iterator<EditableFeature> it = new InsertedFeaturesIterator();
+        return new Iterator<FeatureProvider>() {
+          @Override
+          public boolean hasNext() {
+            return it.hasNext();
+          }
+
+          @Override
+          public FeatureProvider next() {
+            return ((DefaultFeature)it.next()).getData();
+          }
+        };
+    }
+
+    public Iterator<EditableFeature> getInsertedFeatures() {
+        return new InsertedFeaturesIterator();
+    }
+
+    private class InsertedFeaturesIterator implements Iterator<EditableFeature> {
+
+        private final Iterator addedIter;
+        private EditableFeature feature;
+        private Boolean hasnext = null;
+
+        public InsertedFeaturesIterator() {
+            addedIter = added.values().iterator();
+        }
+
+        @Override
+        public boolean hasNext() {
+            if (hasnext != null) {
+                return hasnext;
+            }
+            hasnext = false;
+            int pos;
+            while (addedIter.hasNext()) {
+                pos = ((Integer) addedIter.next());
+                feature = (EditableFeature) expansionAdapter.getObject(pos);
+                if (!deleted.contains(feature.getReference())) {
+                    hasnext = true;
+                    break;
+                }
+            }
+            return hasnext;
+        }
+
+        @Override
+        public EditableFeature next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            hasnext = null;
+            return feature;
+        }
+
+        @Override
+        public void remove() {
+            addedIter.remove();
+        }
+
+    }
+    
+    public List<FeatureReference> getAddedAndUpdatedFeatures() {
+        List<FeatureReference> references = new ArrayList<>();
+        references.addAll(this.modifiedFromOriginal.keySet());
+        references.addAll(this.added.keySet());
+        return references;
+    }
+
+    public List<FeatureReference> getAddedAndUpdatedFeaturesNotValidated(DefaultFeatureRules rules, int checks) {
+        List<FeatureReference> references = new ArrayList<>();
+        for (FeatureReference ref : this.modifiedFromOriginal.keySet()) {
+            Integer index = this.modifiedFromOriginal.get(ref);
+            if( index!=null ) {
+                EditableFeature feature = (EditableFeature) this.expansionAdapter.getObject(index);
+                try {
+                    rules.validate(feature, checks);
+                } catch (DataException ex) {
+                    references.add(ref);
+                }
+            }
+        }
+        for (FeatureReference ref : this.added.keySet()) {
+            Integer index = this.added.get(ref);
+            if( index!=null ) {
+                EditableFeature feature = (EditableFeature) this.expansionAdapter.getObject(index);
+                try {
+                    rules.validate(feature, checks);
+                } catch (Exception ex) {
+                    references.add(ref);
+                }
+            }
+        }
+        return references;
+    }
+
+    public Iterator<EditableFeature> getUpdatedFeatures() {
+        return new UpdatedFeaturesIterator();
+    }
+
+    public Iterator<FeatureProvider> getUpdated() {
+        Iterator<EditableFeature> it = new UpdatedFeaturesIterator();
+        return new Iterator<FeatureProvider>() {
+          @Override
+          public boolean hasNext() {
+            return it.hasNext();
+          }
+
+          @Override
+          public FeatureProvider next() {
+            return ((DefaultFeature)it.next()).getData();
+          }
+        };
+    }
+
+    private class UpdatedFeaturesIterator implements Iterator<EditableFeature> {
+
+        private Boolean hasnext = null;
+        private final Iterator iter;
+        private EditableFeature feature;
+        private int pos;
+
+        public UpdatedFeaturesIterator() {
+            iter = expansionAdapter.iterator();
+            pos = -1;
+        }
+
+        @Override
+        public boolean hasNext() {
+            if (hasnext != null) {
+                return hasnext;
+            }
+            hasnext = false;
+            while (iter.hasNext()) {
+                pos++;
+                Feature f = (Feature) iter.next();
+                if ( f != null &&
+                     !deleted.contains(f.getReference()) &&
+                     modifiedFromOriginal.containsValue(pos)) {
+                    hasnext = true;
+                    feature = (EditableFeature) f;
+                    break;
+                }
+            }
+            return hasnext;
+        }
+
+        @Override
+        public EditableFeature next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            hasnext = null;
+            return feature;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+
+        }
+    }
+
+    public boolean hasNews() {
+        return !added.isEmpty();
+    }
+
+    public long getDeltaSize() {
+        return deltaSize;
+    }
+
+    /**
+     * Indicates if any operation has comprimised the selected features.
+     *
+     * @return
+     */
+    public boolean isSelectionCompromised() {
+        //Only deleted features can change order, as added features are added at the end.
+        return !deleted.isEmpty() || !added.isEmpty();
+    }
+    
+    public Feature getOriginal(FeatureReference id){
+        Integer n = original.get(id);
+        if(n == null){
+            return null;
+        }
+        return (Feature) this.expansionAdapter.getObject(n);
+    }
+    
+    public boolean isFeatureModified(FeatureReference id) {
+        return original.containsKey(id);
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryEditingManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryEditingManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/MemoryEditingManager.java	(revision 46118)
@@ -0,0 +1,146 @@
+
+package org.gvsig.fmap.dal.feature.impl.editing.memory;
+
+import java.util.Iterator;
+import java.util.List;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.EditingManager;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+public class MemoryEditingManager implements EditingManager {
+
+    private final FeatureTypeManager featureTypeManager;
+    private final FeatureManager featureManager;
+    private final SpatialManager spatialManager;
+    
+    public MemoryEditingManager(DefaultFeatureStore store, Envelope envelope) throws DataException {
+        this.featureManager = new FeatureManager(store);
+        this.featureTypeManager = new FeatureTypeManager(store);
+        this.spatialManager = new SpatialManager(store, envelope);
+    }
+    
+    @Override
+    public void dispose() {
+        this.featureTypeManager.dispose();
+        this.spatialManager.clear();
+        this.featureManager.clear();
+    }
+
+    @Override
+    public void delete(Feature feature) {
+        this.featureManager.delete(feature);
+        this.spatialManager.deleteFeature(feature);
+    }
+
+//    @Override
+//    public void delete(FeatureReference featureReference) {
+//        // ????????
+//        this.featureManager.delete(featureReference);
+//        
+//    }
+
+    @Override
+    public void add(EditableFeature newFeature) {
+        this.featureManager.add(newFeature);
+        this.spatialManager.insertFeature(newFeature);
+    }
+
+    @Override
+    public int update(EditableFeature newFeature, Feature oldFeature) {
+        int code = featureManager.update(newFeature, oldFeature);
+        spatialManager.updateFeature(newFeature, oldFeature);
+        return code;
+    }    
+    
+    @Override
+    public int update(FeatureType newFeatureType, FeatureType oldFeatureType) {
+        int code = featureTypeManager.update(oldFeatureType, oldFeatureType);
+        return code;
+    }
+
+
+    @Override
+    public boolean isSelectionCompromised() {
+        return this.featureManager.isSelectionCompromised();
+    }
+
+    @Override
+    public Iterator<FeatureReference> getDeletedFeatures() {
+        return this.featureManager.getDeleted();
+    }
+
+    @Override
+    public Iterator<FeatureProvider> getInsertedFeatures() {
+        return this.featureManager.getInserted();
+    }
+
+    @Override
+    public Iterator<FeatureProvider> getUpdatedFeatures() {
+        return this.featureManager.getUpdated();
+    }
+
+    @Override
+    public List<FeatureTypeChanged> getFeatureTypesChanged() throws DataException {
+        return this.featureTypeManager.getFeatureTypesChanged();
+    }
+
+    @Override
+    public FeatureType getFeatureType(String id) throws DataException {
+        return this.featureTypeManager.getType(id);
+    }
+
+    @Override
+    public Feature getFeature(FeatureReference reference, FeatureStore store, FeatureType type) throws DataException {
+        return this.featureManager.get(reference, store, type);
+    }
+
+    @Override
+    public void restore(FeatureReference featureReference) {
+        this.featureManager.restore(featureReference);
+    }
+
+    @Override
+    public void restore(FeatureReference featureReference, int code) {
+        this.featureManager.restore(featureReference, code);
+    }
+
+    @Override
+    public void restore(String featureTypeId) {
+        this.featureTypeManager.restore(featureTypeId);
+    }
+
+    @Override
+    public void restore(String featureTypeId, int code) {
+        this.featureTypeManager.restore(featureTypeId, code);
+    }
+
+    @Override
+    public boolean isDeleted(Feature feature) {
+        return this.featureManager.isDeleted(feature);
+    }
+
+    @Override
+    public boolean isDeleted(FeatureReference featureReference) {
+        return this.featureManager.isDeleted(featureReference);
+    }
+
+    @Override
+    public boolean isDeleted(FeatureType type) {
+        return this.featureTypeManager.isDeleted(type);
+    }
+
+    @Override
+    public boolean isDeleted(String featureTypeId) {
+        return this.featureTypeManager.isDeleted(featureTypeId);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java	(revision 46118)
@@ -0,0 +1,460 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.editing.memory;
+
+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 java.util.Map;
+
+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.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStoreTransforms;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+public class FeatureTypeManager {
+
+    private final ExpansionAdapter expansionAdapter;
+    private final Map<String,Integer> added = new HashMap();
+    private final Map<String,Integer> modifiedFromOriginal = new HashMap();
+    private final List<String> deleted = new ArrayList();
+    
+    private final FeatureTypeManagerFeatureStoreTransforms transforms;
+    private final FeatureStore store;
+
+    private int deltaSize = 0;
+    private boolean first = true;
+    private FeatureType originalType = null;
+
+    public FeatureTypeManager(FeatureStore store) {
+        this.expansionAdapter = new MemoryExpansionAdapter();
+        this.store = store;
+        this.transforms = new FeatureTypeManagerFeatureStoreTransforms();
+        this.transforms.setFeatureStore(store);
+    }
+
+    public void dispose() {
+        this.expansionAdapter.close();
+        this.deleted.clear();
+        this.transforms.clear();
+        this.added.clear();
+        this.modifiedFromOriginal.clear();
+    }
+
+    public FeatureType getType(String id) throws DataException {
+        Integer num = added.get(id);
+        if (num == null) {
+            num = modifiedFromOriginal.get(id);
+            if (num == null) {
+                return null;
+            }
+        }
+        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 = added.get(id);
+            added.put(id, num);
+        } else {
+            if (modifiedFromOriginal.get(id) != null) {
+                oldNum = modifiedFromOriginal.get(id);
+            }
+            modifiedFromOriginal.put(id, 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 final FeatureType ftSource;
+
+        private EditableFeatureType ftTarget_editable;
+        private final 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;
+            if (ftTarget_editable != null) {
+                iter = ftTarget_editable.iterator();
+            } else {
+                iter = ftTarget_non_editable.iterator();
+            }
+
+            FeatureAttributeDescriptor tAttr, sAttr;
+            EditableFeatureAttributeDescriptor ead;
+            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());
+            }
+        }
+
+        @Override
+        public void setUp() throws Exception {
+            
+        }
+
+        @Override
+        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;
+            while (iter.hasNext()) {
+                tAttr = (FeatureAttributeDescriptor) iter.next();
+                if (tAttr.isComputed()) {
+                    continue;
+                }
+                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 ) {
+                    try {
+                        // Intentamos asignarle el valor, y por si falla
+                        // la conversion de tipos en caso de que sea necesaria,
+                        // atrapamos errores para asignarle el valor por defecto.
+                        target.set(t_name, source.get(s_name));
+                    } catch(Throwable th) {
+                        target.set(t_name, tAttr.getDefaultValue());
+                    }
+                } else {
+                    target.set(t_name, tAttr.getDefaultValue());
+                }
+            }
+        }
+
+        @Override
+        public FeatureType getDefaultFeatureType() throws DataException {
+            return this.ftTarget_non_editable;
+        }
+
+        @Override
+        public FeatureStore getFeatureStore() {
+            return (FeatureStore) this.wkRefStore.get();
+        }
+
+        @Override
+        public List getFeatureTypes() throws DataException {
+            if (this.ftypes == null) {
+                this.ftypes = Arrays
+                        .asList(new FeatureType[]{this.ftTarget_non_editable});
+            }
+            return this.ftypes;
+        }
+
+        @Override
+        public FeatureType getSourceFeatureTypeFrom(
+                FeatureType targetFeatureType) {
+            EditableFeatureType orgType = ftSource.getEditable();
+            Iterator iter = orgType.iterator();
+            FeatureAttributeDescriptor attr;
+            EditableFeatureAttributeDescriptor efad;
+
+            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();
+        }
+
+        @Override
+        public void setFeatureStore(FeatureStore featureStore) {
+            this.wkRefStore = new WeakReference(featureStore);
+        }
+
+        @Override
+        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, num);
+        } else {
+            modifiedFromOriginal.put(id, 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();
+        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() {
+
+        }
+
+        @Override
+        protected void checkEditingMode() {
+        }
+
+        @Override
+        protected void notifyChangeToStore() {
+        }
+
+        public PersistentState getState() throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        public void loadState(PersistentState state)
+                throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void loadFromState(PersistentState state) throws PersistenceException {
+            // FIXME
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        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 final FeatureType source;
+        private final FeatureType target;
+
+        public FeatureTypesChangedItem(FeatureType source, FeatureType target) {
+            this.source = source;
+            this.target = target;
+        }
+
+        @Override
+        public FeatureType getSource() {
+            return source;
+        }
+
+        @Override
+        public FeatureType getTarget() {
+            return target;
+        }
+
+    }
+
+    public List<FeatureTypeChanged> 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;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/SpatialManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/SpatialManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/SpatialManager.java	(revision 46118)
@@ -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.fmap.dal.feature.impl.editing.memory;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.logging.Level;
+import org.gvsig.fmap.dal.exception.CloneException;
+import org.gvsig.fmap.dal.exception.CreateException;
+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.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureIndexes;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+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 DefaultFeatureStore featureStore;
+    private FeatureIndex featureIndex = null;
+    private Envelope originalEnvelope = null;
+    private Envelope fullEnvelope = null;
+    private ArrayList feaOperation=new ArrayList();
+    private boolean noSpatialData = false;
+
+    public SpatialManager(DefaultFeatureStore 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.getDefaultGeometryAttribute();
+        this.originalEnvelope = originalEnvelope;
+        if ((originalEnvelope != null) && (!originalEnvelope.isEmpty())) {
+            this.fullEnvelope = originalEnvelope.getGeometry().getEnvelope();
+        } else {
+            try {
+                this.fullEnvelope = GeometryLocator.getGeometryManager()
+                        .createEnvelope(attr.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 (oldFeature != null) {
+                if (featureIndex != null) {
+                    featureIndex.delete(oldFeature);
+                }
+                final FeatureReference reference = oldFeature.getReference();
+                feaOperation.add(new FeatureOperation(reference, FeatureOperation.DELETE));
+            }
+            if (featureIndex != null) {
+                featureIndex.insert(feature);
+            }
+            feaOperation.add(
+                    new FeatureOperation(
+                            feature.getReference(),
+                            FeatureOperation.INSERT
+                    )
+            );
+        } catch (DataException e) {
+            throw new RuntimeException("Exception updating feature: "
+                    + feature, e);
+        }
+        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;
+    }
+
+    /**
+     * 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(this.isFullExtentDirty) {
+            FeatureAttributeDescriptor attr = featureStore.getDefaultFeatureType().getDefaultGeometryAttribute();
+
+            Envelope envelope = getProviderEnvelope();
+            if (envelope == null) {
+                try {
+                    envelope = GeometryLocator.getGeometryManager().createEnvelope(
+                            this.featureStore.getDefaultFeatureType().getDefaultGeometryAttribute().getGeomType().getSubType());
+                } catch (CreateEnvelopeException ex) {
+                    throw new CreateException("envelope", ex);
+                }
+            } else {
+                try {
+                    envelope = (Envelope) envelope.clone();
+                } catch (Exception ex) {
+                    throw new CloneException(ex);
+                }
+            }
+
+            FeatureManager featManager = featureStore.getFeatureManager();
+
+            // Si en edicion se provoca un disminucion en el envelope. no hacemos nada 
+            // para premiar la velocidad de pintado. Ya se resolvera al finalizar edicion.
+
+            Iterator<EditableFeature> inserted = featManager.getInsertedFeatures();
+            if(inserted != null){
+                while (inserted.hasNext()) {
+                    EditableFeature next = inserted.next();
+                    envelope.add(next.getDefaultEnvelope());
+                }
+            }
+
+            Iterator<EditableFeature> updated = featManager.getUpdatedFeatures();
+            if(updated != null){
+                while (updated.hasNext()) {
+                    EditableFeature next = updated.next();
+                    envelope.add(next.getDefaultEnvelope());
+                }
+            }
+            this.fullEnvelope = envelope;
+            this.isFullExtentDirty = false;
+        }
+        return this.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;
+        }
+    }
+    
+    private Envelope getProviderEnvelope() throws DataException {
+        FeatureStoreProvider provider = this.featureStore.getProvider();
+        Envelope envelope = provider.getEnvelope();
+        return envelope;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/SpatialManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.feature.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.impl.DefaultFeatureRuleExpression;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_BASIC;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_REQUIREDS;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_RULES_AT_EDITING;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_RULES_AT_FINISH;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureRule;
+import org.gvsig.fmap.dal.feature.FeatureRules;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultFeatureRules extends ArrayList<FeatureRule> implements FeatureRules {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureRules.class);
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -8084546505498274121L;
+
+    @Override
+    public boolean add(FeatureRule rule) {
+        return super.add(rule);
+    }
+
+    @Override
+    public boolean add(String name, String description, boolean checkAtUpdate, boolean checkAtFinishEdition, Expression expression) {
+        FeatureRule rule = new DefaultFeatureRuleExpression(name, description, checkAtUpdate, checkAtFinishEdition, expression);
+        return this.add(rule);
+    }
+
+    @Override
+    public FeatureRule getRule(int index) {
+        return (FeatureRule) super.get(index);
+    }
+
+    @Override
+    public boolean remove(FeatureRule rule) {
+        return super.remove(rule);
+    }
+
+    @Override
+    public FeatureRules getCopy() {
+        DefaultFeatureRules copy = new DefaultFeatureRules();
+        copy.addAll(this);
+        return copy;
+    }
+
+    public void validate(Feature feature, int mode) throws DataException {
+        if (feature == null) {
+            return;
+        }
+        if (feature instanceof EditableFeature) {
+            this.validate((EditableFeature) feature, mode);
+            return;
+        }
+        this.validate(feature.getEditable(), mode);
+    }
+
+    public void validate(EditableFeature feature, int check) throws DataException {
+        if (feature == null) {
+            return;
+        }
+        if ((check & CHECK_REQUIREDS) == CHECK_REQUIREDS) {
+            checkRequireds(feature);
+        }
+        if ((check & CHECK_BASIC) == CHECK_BASIC) {
+            checkBasics(feature);
+        }
+        if ((check & CHECK_RULES_AT_FINISH) == CHECK_RULES_AT_FINISH) {
+            FeatureStore store = ((DefaultFeature) feature).getStore();
+            for (FeatureRule rule : this) {
+                if (rule.checkAtFinishEditing()) {
+                    rule.validate(feature, store);
+                }
+            }
+        }
+        if ((check & CHECK_RULES_AT_EDITING) == CHECK_RULES_AT_EDITING) {
+            FeatureStore store = ((DefaultFeature) feature).getStore();
+            for (FeatureRule rule : this) {
+                if (rule.checkAtUpdate()) {
+                    rule.validate(feature, store);
+                }
+            }
+        }
+    }
+
+    private void checkRequireds(Feature feature) {
+        for (FeatureAttributeDescriptor attr : feature.getType()) {
+            if (attr.isAutomatic()) {
+                continue;
+            }
+            if (attr.isPrimaryKey() || !attr.allowNull()) {
+                if (feature.get(attr.getIndex()) == null) {
+                    String featstr = "unknown";
+                    String storename = "unknown";
+                    try {
+                        featstr = feature.toJsonBuilder().toString();
+                    } catch (Throwable th) {
+                        LOGGER.debug("Can't convert feature to string", th);
+                    }
+                    try {
+                        storename = feature.getStore().getName();
+                    } catch (Throwable th) {
+                        LOGGER.debug("Can't convert feature to string", th);
+                    }
+                    throw new IllegalStateException(
+                            String.format(
+                                    "The field '%s' in store '%s' can't have null values (%s).",
+                                    attr.getName(),
+                                    storename,
+                                    featstr
+                            )
+                    );
+                }
+            }
+        }
+    }
+
+    private void checkBasics(Feature feature) {
+        for (FeatureAttributeDescriptor attr : feature.getType()) {
+            try {
+                attr.validate(feature.get(attr.getName()));
+            } catch (DynFieldValidateException ex) {
+                String featstr = "unknown";
+                try {
+                    featstr = feature.toJsonBuilder().toString();
+                } catch (Throwable th) {
+                    LOGGER.debug("Can't convert feature to string", th);
+                }
+                String storename = "unknown";
+                try {
+                    storename = feature.getStore().getName();
+                } catch (Throwable th) {
+                    LOGGER.debug("Can't convert feature to string", th);
+                }
+                throw new IllegalStateException(
+                        String.format(
+                                "The field '%s' in store '%s' can't have a invalid value. %s. (%s).",
+                                attr.getName(),
+                                storename,
+                                ex.getMessage(),
+                                featstr
+                        )
+                );
+            }
+        }
+    }
+
+    public static void selfRegister() {
+
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("rules", this.iterator());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.clear();
+        Iterator<FeatureRule> it = state.getIterator("rules");
+        while (it.hasNext()) {
+            FeatureRule rule = it.next();
+            this.add(rule);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureSelection.java	(revision 46118)
@@ -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.fmap.dal.feature.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+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.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.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.featureset.AbstractFeatureSet;
+import org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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 LargeFeatureSelection extends AbstractFeatureSet
+        implements FeatureSelection {
+    
+    
+    private static final String DYNCLASS_PERSISTENT_NAME = "LargeFeatureSelection";
+
+    public class RemoveFromFeatureSelectionException extends DataRuntimeException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 2636692469445838928L;
+        private final static String MESSAGE_FORMAT = "Can't remove feature from reversed selection.";
+        private final static String MESSAGE_KEY = "_RemoveFromFeatureSelectionException";
+
+        public RemoveFromFeatureSelectionException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+            //setValue("store", store);
+        }
+    }
+
+    /**
+     * 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;
+        private Feature currentFeature = null;
+
+        public FeatureIteratorFacade(java.util.Iterator iter,
+                FeatureStore featureStore) {
+            this.refIterator = iter;
+            this.featureStore = featureStore;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return refIterator.hasNext();
+        }
+
+        @Override
+        public Object next() {
+            FeatureReference ref = nextFeatureReference();
+            try {
+                currentFeature = featureStore.getFeatureByReference(ref);
+                return currentFeature;
+            } 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();
+        }
+
+        @Override
+        public void remove() {
+            try {
+                featureStore.delete(currentFeature);
+                refIterator.remove();
+            } catch (DataException e) {
+                throw new RemoveFromFeatureSelectionException(e);
+            }
+        }
+
+        public class RemoveFromFeatureSelectionException extends DataRuntimeException {
+
+            /**
+             *
+             */
+            private static final long serialVersionUID = 2636692469445838928L;
+            private final static String MESSAGE_FORMAT = "Can't remove feature from selection.";
+            private final static String MESSAGE_KEY = "_RemoveFromFeatureSelectionException";
+
+            public RemoveFromFeatureSelectionException(Throwable cause) {
+                super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+                //setValue("store", store);
+            }
+        }
+
+        @Override
+        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 Feature currentFeature = 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 = new IgnoreInsertAndUpdateFeatureSet(
+//                        (DefaultFeatureStore) featureStore, 
+//                        new DefaultFeatureQuery(featureStore.getDefaultFeatureType())
+//                );
+//                iterator = featureSet.fastIterator();
+//            } catch (DataException ex) {
+//                throw new ReversedSelectionIteratorException(ex);
+//            }
+//
+//            // Filter the features not selected and position in the next
+//            // selected feature
+//            positionInNextElement();
+//        }
+//
+//        @Override
+//        public boolean hasNext() {
+//            return nextFeature != null;
+//        }
+//
+//        @Override
+//        public Object next() {
+//            featureIterators.remove(currentFeature);
+//            currentFeature = nextFeature.getCopy();
+//            featureIterators.put(currentFeature, this);
+//            positionInNextElement();
+//            return currentFeature;
+//        }
+//
+//        @Override
+//        public void remove() {
+//            try {
+//                featureSet.delete(currentFeature);
+//            } catch (DataException e) {
+//                throw new RemoveFromFeatureSelectionException(e);
+//
+//            }
+//        }
+//
+//        private void positionInNextElement() {
+//            nextFeature = null;
+//            while (iterator.hasNext()) {
+//                nextFeature = (Feature) iterator.next();
+//                if (selectionData.contains(nextFeature.getReference())) {
+//                    nextFeature = null;
+//                } else {
+//                    break;
+//                }
+//            }
+//        }
+//
+//        @Override
+//        public void dispose() {
+//            this.featureSet.dispose();
+//            this.iterator.dispose();
+//            this.selectionData = null;
+//            this.nextFeature = null;
+//        }
+//    }
+
+//    private Map featureTypeCounts = new HashMap(1);
+    private final Map<Feature, Iterator> featureIterators = new HashMap<>();
+    private final LargeFeatureReferenceSelection featureReferenceSelection;
+
+    /**
+     * 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 LargeFeatureSelection(DefaultFeatureStore featureStore)
+            throws DataException {
+        this.featureReferenceSelection = new LargeFeatureReferenceSelection(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 LargeFeatureSelection(FeatureStore featureStore,
+            FeatureSelectionHelper helper) throws DataException {
+        this.featureReferenceSelection = new LargeFeatureReferenceSelection(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 LargeFeatureSelection() {
+        this.featureReferenceSelection = new LargeFeatureReferenceSelection();
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.featureReferenceSelection.getFeatureStore();
+    }
+
+    private void notifyObservers(String notificationType) {
+        this.featureReferenceSelection.notifyObservers(notificationType);
+    }
+
+    @Override
+    public void enableNotifications() {
+        this.featureReferenceSelection.enableNotifications();
+    }
+
+    @Override
+    public void disableNotifications() {
+        this.featureReferenceSelection.disableNotifications();
+    }
+
+//    public boolean isReversed() {
+//        return this.featureReferenceSelection.isReversed();
+//    }
+
+    @Override
+    public long getSelectedCount() {
+        return this.featureReferenceSelection.getSelectedCount();
+    }
+
+    @Override
+    public boolean select(FeatureReference reference) {
+        return this.featureReferenceSelection.select(reference);
+    }
+
+    @Override
+    public boolean deselect(FeatureReference reference) {
+        return this.featureReferenceSelection.deselect(reference);
+    }
+
+    @Override
+    public Iterator referenceIterator() {
+        return this.featureReferenceSelection.referenceIterator();
+    }
+
+    @Override
+    public void selectAll() throws DataException {
+        this.featureReferenceSelection.selectAll();
+    }
+
+    @Override
+    public void deselectAll() throws DataException {
+        this.featureReferenceSelection.deselectAll();
+    }
+    
+    @Override
+    public boolean isSelected(FeatureReference reference) {
+        return this.featureReferenceSelection.isSelected(reference);
+    }
+
+    @Override
+    public void reverse() {
+        this.featureReferenceSelection.reverse();
+    }
+
+    @Override
+    public void dispose() {
+        this.featureReferenceSelection.dispose();
+    }
+
+    @Override
+    public void update(Observable o, Object o1) {
+        this.featureReferenceSelection.update(o, o1);
+    }
+
+    @Override
+    public void addObserver(Observer obsrvr) {
+        this.featureReferenceSelection.addObserver(obsrvr);
+    }
+
+    @Override
+    public void deleteObserver(Observer obsrvr) {
+        this.featureReferenceSelection.deleteObserver(obsrvr);
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.featureReferenceSelection.deleteObservers();
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        this.featureReferenceSelection.beginComplexNotification();
+    }
+
+    @Override
+    public void endComplexNotification() {
+        this.featureReferenceSelection.endComplexNotification();
+    }
+
+    @Override
+    public void saveToState(PersistentState ps) throws PersistenceException {
+        this.featureReferenceSelection.saveToState(ps);
+    }
+
+    @Override
+    public boolean select(Feature feature) {
+        return this.featureReferenceSelection.select(feature.getReference());
+    }
+
+    @Override
+    public boolean select(FeatureSet features) throws DataException {
+        boolean change = false;
+        boolean inComplex = false;
+        disableNotifications();
+        DisposableIterator iter = null;
+        try {
+            for (iter = features.fastIterator(); iter.hasNext();) {
+                change |= this.featureReferenceSelection.select(((Feature) iter.next()).getReference());
+            }
+        } finally {
+            DisposeUtils.disposeQuietly(iter);
+        }
+        enableNotifications();
+        return change;
+    }
+
+    @Override
+    public boolean deselect(Feature feature) {
+        return this.featureReferenceSelection.deselect(feature.getReference()); //, true);
+    }
+
+    @Override
+    public boolean deselect(FeatureSet features) throws DataException {
+        boolean change = false;
+        disableNotifications();
+        DisposableIterator iter = null;
+        try {
+            for (iter = features.fastIterator(); iter.hasNext();) {
+                change |= deselect((Feature) iter.next());
+            }
+        } finally {
+            DisposeUtils.disposeQuietly(iter);
+        }
+        enableNotifications();
+        return change;
+    }
+
+    @Override
+    public boolean isSelected(Feature feature) {
+        if (feature == null) {
+            return false;
+        }
+        if( this.featureReferenceSelection.isEmpty() ) {
+            return false;
+        }
+        return this.featureReferenceSelection.isSelected(feature.getReference());
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public List getFeatureTypes() {
+        return this.featureReferenceSelection.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 > 0) {
+//                types.add(type);
+//            }
+//        }
+//
+//        return types;
+    }
+
+    @Override
+    public long getSize() throws DataException {
+        return getSelectedCount();
+    }
+
+    /**
+     * Returns the list of selected values, or the deselected ones if the
+     * selection has been reversed.
+     *
+     * WARN: not very good performance implementation.
+     */
+    @Override
+	public DisposableIterator iterator(long index) {
+		return iterator(index, 0, false);
+	}
+
+    @Override
+        public DisposableIterator iterator(long index, long elements) {
+		return iterator(index, elements, false);
+        }
+
+    /**
+     * Returns the list of selected values, or the deselected ones if the
+     * selection has been reversed.
+     *
+     * WARN: not really a fast implementation.
+     */
+    @Override
+	public DisposableIterator fastIterator(long index) {
+            return fastIterator(index, 0);
+	}
+
+    @Override
+    public DisposableIterator fastIterator(long index, long elements) {
+        return iterator(index, elements, true);
+    }
+
+
+    protected void clearFeatureReferences() {
+        this.featureReferenceSelection.clearFeatureReferences();
+//        featureTypeCounts.clear();
+    }
+
+    /**
+     * Creates an iterator for the Selection.
+     */
+    private DisposableIterator iterator(long index, long elements, boolean fastIterator) {
+        Iterator iter = this.featureReferenceSelection.referenceIterator();
+            for (long l = 0; l < index && iter.hasNext(); l++) {
+                iter.next();
+            }
+            return new FeatureIteratorFacade(iter, getFeatureStore());
+//        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 = getData().getSelected().iterator();
+//            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 = count - 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 = count + 1;
+//        }
+//        featureTypeCounts.put(featureType, count);
+//        return count;
+//    }
+
+    @Override
+    public void delete(Feature feature) throws DataException {
+        Iterator it = this.featureIterators.get(feature);
+        if (it != null) {
+            it.remove();
+            return;
+        }
+        feature.getStore().delete(feature);
+    }
+
+    @Override
+    public void insert(EditableFeature feature) throws DataException {
+        feature.getStore().insert(feature);
+    }
+
+    @Override
+    public void update(EditableFeature feature) throws DataException {
+        feature.getStore().update(feature);
+    }
+    
+    
+    @Override
+    public void commitChanges() throws DataException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @seeorg.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection#
+     * loadFromState(org.gvsig.tools.persistence.PersistentState)
+     */
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.featureReferenceSelection.loadFromState(state);
+    }
+
+    protected void doDispose() throws BaseException {
+        this.featureReferenceSelection.doDispose();
+//        featureTypeCounts.clear();
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.addDefinition(LargeFeatureSelection.class, DYNCLASS_PERSISTENT_NAME,
+                "LargeFeatureSelection Persistent definition", null, null);
+
+        definition.extend(manager.getDefinition(LargeFeatureReferenceSelection.DYNCLASS_PERSISTENT_NAME));
+//        definition.addDynFieldMap("featureTypeCounts")
+//                .setClassOfItems(Long.class).setMandatory(false);
+
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        LargeFeatureSelection clone = (LargeFeatureSelection) super.clone();
+//        clone.featureTypeCounts = new HashMap(featureTypeCounts);
+        return clone;
+    }
+
+    @Override
+    protected void doAccept(Visitor visitor, long firstValueIndex, long elements) throws BaseException {
+        if( this.featureReferenceSelection.isEmpty() ) {
+            return;
+        }
+        DisposableIterator iterator = fastIterator(firstValueIndex, elements);
+        if (iterator != null) {
+            try {
+                while (iterator.hasNext()) {
+                    Feature feature = (Feature) iterator.next();
+                    visitor.visit(feature);
+                }
+            } finally {
+                iterator.dispose();
+            }
+        }
+    }
+
+    private static class IgnoreInsertAndUpdateFeatureSet extends DefaultFeatureSet {
+
+        public IgnoreInsertAndUpdateFeatureSet(DefaultFeatureStore store, FeatureQuery query) throws DataException {
+            super(store, query);
+        }
+
+        @Override
+        public void update(Observable obsevable, Object notification) {
+            String type = ((FeatureStoreNotification) notification).getType();
+            if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_INSERT)
+                    || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_UPDATE)) {
+                return;
+            }
+            super.update(obsevable, notification);
+        }
+
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return this.featureReferenceSelection.isAvailable();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureSelection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,759 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.text.DateFormat;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Objects;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypeUtils;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableForeingKey;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeIntegrityException;
+import org.gvsig.fmap.dal.feature.exception.AttributeFeatureTypeSizeException;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class DefaultEditableFeatureAttributeDescriptor extends
+        DefaultFeatureAttributeDescriptor implements
+        EditableFeatureAttributeDescriptor {
+
+    private static Logger logger = LoggerFactory.getLogger(
+            DefaultEditableFeatureAttributeDescriptor.class);
+
+    private final 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(FeatureType type, boolean strongChanges) {
+        super(type);
+        this.source = null;
+        hasStrongChanges = strongChanges;
+    }
+
+    public DefaultFeatureAttributeDescriptor getSource() {
+        return this.source;
+    }
+
+    public void fixAll() {
+        super.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) {
+        updateStrongChanges(this.allowNull, allowNull);
+        this.allowNull = allowNull;
+        return this;
+    }
+
+    @Override
+    public EditableForeingKey getForeingKey() {
+        if (this.foreingKey == null) {
+            this.foreingKey = new DefaultForeingKey();
+            this.foreingKey.setDescriptor(this);
+        }
+        return this.foreingKey;
+    }
+
+    public EditableFeatureAttributeDescriptor setDataType(DataType dataType) {
+        updateStrongChanges(this.dataType, dataType);
+        this.dataType = dataType;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDataType(int type) {
+        updateStrongChanges(this.dataType, type);
+        this.dataType = ToolsLocator.getDataTypesManager().get(type);
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDefaultValue(
+            Object defaultValue) {
+        updateStrongChanges(this.defaultValue, defaultValue);
+        this.defaultValue = defaultValue;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setAvoidCachingAvailableValues(boolean avoidCachingAvailableValues) {
+        this.avoidCachingAvailableValues = avoidCachingAvailableValues;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setEvaluator(Evaluator evaluator) {
+        updateStrongChanges(this.evaluator, evaluator);
+        this.evaluator = evaluator;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(FeatureAttributeEmulator featureAttributeEmulator) {
+        this.featureAttributeEmulator = featureAttributeEmulator;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(Expression expression) {
+        if (ExpressionUtils.isPhraseEmpty(expression)) {
+            this.setFeatureAttributeEmulator((FeatureAttributeEmulator) null);
+            return this;
+        }
+        FeatureAttributeEmulatorExpression emulator = DALLocator.getDataManager().createFeatureAttributeEmulatorExpression(
+                this.getFeatureType(),
+                expression
+        );
+        return this.setFeatureAttributeEmulator(emulator);
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setFeatureAttributeEmulator(String expression) {
+        if (StringUtils.isBlank(expression)) {
+            this.setFeatureAttributeEmulator((FeatureAttributeEmulator) null);
+            return this;
+        }
+        return this.setFeatureAttributeEmulator(ExpressionUtils.createExpression(expression));
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setGeometryType(int type) {
+        this.geometryType = type;
+        if (this.geometrySubType == Geometry.SUBTYPES.UNKNOWN) {
+            this.geometrySubType = Geometry.SUBTYPES.GEOM2D;
+        }
+        this.geomType = null;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setGeometrySubType(int subType) {
+        this.geometrySubType = subType;
+        this.geomType = null;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setGeometryType(
+            GeometryType geometryType) {
+        updateStrongChanges(this.geomType, geometryType);
+        this.geomType = geometryType;
+        this.geometryType = this.geomType.getType();
+        this.geometrySubType = this.geomType.getSubType();
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setGeometryType(String geometryType) {
+        if (StringUtils.isBlank(geometryType)) {
+            throw new IllegalArgumentException("Invalid geometry type (null)");
+        }
+        String separators = ":/-!;#@";
+        Character sep = null;
+        for (char ch : separators.toCharArray()) {
+            if (geometryType.indexOf(ch) >= 0) {
+                sep = ch;
+                break;
+            }
+        }
+        if (sep == null) {
+            throw new IllegalArgumentException("Invalid geometry type (" + geometryType + ") can't find separator, format can be GEOMETRYTYPE[" + separators + "]GEOMETRYSUBTYPE");
+        }
+        String[] xx = geometryType.split("[" + sep + "]");
+        int theGeomType = GeometryUtils.getGeometryType(xx[0]);
+        int theGeomSubtype = GeometryUtils.getGeometrySubtype(xx[1]);
+        this.setGeometryType(theGeomType, theGeomSubtype);
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setGeometryType(int type, int subType) {
+        this.geometryType = type;
+        this.geometrySubType = subType;
+        this.geomType = null;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setIsPrimaryKey(
+            boolean isPrimaryKey) {
+        updateStrongChanges(this.primaryKey, isPrimaryKey);
+        this.primaryKey = isPrimaryKey;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setIsReadOnly(boolean isReadOnly) {
+        updateStrongChanges(this.readOnly, isReadOnly);
+        this.readOnly = isReadOnly;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setMaximumOccurrences(
+            int maximumOccurrences) {
+        updateStrongChanges(this.maximumOccurrences, maximumOccurrences);
+        this.maximumOccurrences = maximumOccurrences;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setMinimumOccurrences(
+            int minimumOccurrences) {
+        updateStrongChanges(this.minimumOccurrences, minimumOccurrences);
+        this.minimumOccurrences = minimumOccurrences;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setName(String name) {
+        if (StringUtils.equals(this.name, name)) {
+            return this;
+        }
+        if (originalName == null) {
+            originalName = this.name;
+            if (!isComputed()) {
+                hasStrongChanges = true;
+            }
+        }
+        super.setName(name);
+        if (!isComputed()) {
+            hasStrongChanges = true;
+        }
+        return this;
+    }
+
+    public String getOriginalName() {
+        return originalName;
+    }
+
+    public EditableFeatureAttributeDescriptor setObjectClass(Class theClass) {
+        updateStrongChanges(this.objectClass, theClass);
+        this.objectClass = theClass;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setPrecision(int precision) {
+        updateStrongChanges(this.precision, precision);
+        this.precision = precision;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setScale(int scale) {
+        updateStrongChanges(this.scale, scale);
+        this.scale = scale;
+        this.coerceContext = null;
+        this.mathContext = null;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setSRS(IProjection SRS) {
+        updateStrongChanges(this.SRS, SRS);
+        this.SRS = SRS;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setSRS(String SRS) {
+        if (StringUtils.isBlank(SRS)) {
+            this.setSRS((IProjection) null);
+            return this;
+        }
+        SRS = SRS.replace('@', ':');
+        IProjection proj = CRSFactory.getCRS(SRS);
+        this.setSRS(proj);
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setInterval(Interval interval) {
+        updateStrongChanges(this.getInterval(), interval);
+        super.setInterval(interval);
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setSize(int size) {
+        updateStrongChanges(this.size, size);
+        this.size = size;
+        return this;
+    }
+
+    public boolean hasStrongChanges() {
+        return hasStrongChanges;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setAdditionalInfo(
+            String infoName, Object value) {
+        return this.setAdditionalInfo(infoName, Objects.toString(value, ""));
+    }
+
+    public EditableFeatureAttributeDescriptor setAdditionalInfo(
+            String infoName, String value) {
+        if (this.additionalInfo == null) {
+            this.additionalInfo = new HashMap();
+        }
+        this.additionalInfo.put(infoName, value);
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsAutomatic(boolean isAutomatic) {
+        this.isAutomatic = isAutomatic;
+//        if (isAutomatic) {
+//            this.setReadOnly(true);
+//        }
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsTime(boolean isTime) {
+        updateStrongChanges(this.isTime, isTime);
+        this.isTime = isTime;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setDateFormat(DateFormat dateFormat) {
+        this.dateFormat = dateFormat;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsIndexed(boolean isIndexed) {
+        updateStrongChanges(this.indexed, isIndexed);
+        this.indexed = isIndexed;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setAllowIndexDuplicateds(boolean allowDuplicateds) {
+        updateStrongChanges(this.allowIndexDuplicateds, allowDuplicateds);
+        this.allowIndexDuplicateds = allowDuplicateds;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setIsIndexAscending(boolean ascending) {
+        updateStrongChanges(this.isIndexAscending, ascending);
+        this.isIndexAscending = ascending;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setDataProfileName(String dataProfile) {
+        super.setDataProfileName(dataProfile);
+        return this;
+    }
+
+    private void updateStrongChanges(int previous, int newvalue) {
+        if (isComputed()) {
+            return;
+        }
+        if (previous == newvalue) {
+            return;
+        }
+        this.hasStrongChanges = true;
+    }
+
+    private void updateStrongChanges(DataType previous, int newvalue) {
+        if (isComputed()) {
+            return;
+        }
+        if (previous != null) {
+            if (previous.getType() == newvalue) {
+                return;
+            }
+        }
+        this.hasStrongChanges = true;
+    }
+
+    private void updateStrongChanges(boolean previous, boolean newvalue) {
+        if (isComputed()) {
+            return;
+        }
+        if (previous == newvalue) {
+            return;
+        }
+        this.hasStrongChanges = true;
+    }
+
+    private void updateStrongChanges(Object previous, Object newvalue) {
+        if (isComputed()) {
+            return;
+        }
+        if (Objects.equals(newvalue, previous)) {
+            return;
+        }
+        this.hasStrongChanges = true;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setLocale(Locale locale) {
+        if (locale == null) {
+            this.locale = Locale.ENGLISH;
+        } else {
+            this.locale = locale;
+        }
+        this.coerceContext = null;
+        this.mathContext = null;
+        return this;
+    }
+
+    public EditableFeatureAttributeDescriptor setLocale(String locale) {
+        Locale l;
+        try {
+            String s = DataTypeUtils.toString(locale, null);
+            if (StringUtils.isBlank(s)) {
+                return this.setLocale((Locale) null);
+            }
+            l = new Locale(s);
+            return this.setLocale(l);
+        } catch (Exception ex) {
+            return this.setLocale((Locale) null);
+        }
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setRoundMode(int roundMode) {
+        switch (roundMode) {
+            case BigDecimal.ROUND_UP:
+            case BigDecimal.ROUND_DOWN:
+            case BigDecimal.ROUND_CEILING:
+            case BigDecimal.ROUND_FLOOR:
+            case BigDecimal.ROUND_HALF_UP:
+            case BigDecimal.ROUND_HALF_DOWN:
+            case BigDecimal.ROUND_HALF_EVEN:
+            case BigDecimal.ROUND_UNNECESSARY:
+                this.roundMode = roundMode;
+                this.coerceContext = null;
+                this.mathContext = null;
+                break;
+            default:
+                throw new IllegalArgumentException("round mode '" + roundMode + "' not valid.");
+        }
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor set(String name, Object value) {
+        if (StringUtils.isBlank(name)) {
+            throw new IllegalArgumentException("Name can't be empty");
+        }
+        String ss;
+        switch (name.trim().toLowerCase()) {
+            case "isavoidcachingavailablevalues":
+            case "avoidcachingavailablevalues":
+            case "nocachingavailablevalues":
+                this.setAvoidCachingAvailableValues(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "availablevalues":
+                this.setAvailableValuesExpression(DataTypeUtils.toString(value, null));
+                break;
+            case "isreadonly":
+            case "readonly":
+                this.setIsReadOnly(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "mandatory":
+                this.setMandatory(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "hidden":
+                this.setHidden(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "allownull":
+                this.setAllowNull(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "indexed":
+            case "isindexed":
+                this.setIsIndexed(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "pk":
+            case "ispk":
+            case "primarykey":
+            case "isprimarykey":
+                this.setIsPrimaryKey(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "allowindexduplicateds":
+                this.setAllowIndexDuplicateds(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "isautomatic":
+            case "automatic":
+                this.setIsAutomatic(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "time":
+            case "istime":
+                this.setIsTime(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "profile":
+                this.setDataProfileName(DataTypeUtils.toString(value, null));
+                break;
+            case "group":
+                this.setGroup(DataTypeUtils.toString(value, null));
+                break;
+            case "description":
+                this.setDescription(DataTypeUtils.toString(value, null));
+                break;
+            case "label":
+                this.setLabel(DataTypeUtils.toString(value, null));
+                break;
+            case "shortlabel":
+                this.setShortLabel(DataTypeUtils.toString(value, null));
+                break;
+            case "expression":
+                this.setFeatureAttributeEmulator(DataTypeUtils.toString(value, null));
+                break;
+            case "size":
+                this.setSize(DataTypeUtils.toInteger(value, 50));
+                break;
+            case "precision":
+                this.setPrecision(DataTypeUtils.toInteger(value, 10));
+                break;
+            case "scale":
+                this.setScale(DataTypeUtils.toInteger(value, 10));
+                break;
+            case "roundmode":
+                this.setRoundMode(DataTypeUtils.toInteger(value, BigDecimal.ROUND_UNNECESSARY));
+                break;
+            case "locale":
+                this.setLocale(DataTypeUtils.toString(value, null));
+                break;
+            case "order":
+                this.setOrder(DataTypeUtils.toInteger(value, 0));
+                break;
+            case "fk":
+            case "foreingkey":
+                this.getForeingKey().setForeingKey(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "fk_code":
+            case "foreingkey_code":
+            case "foreingkey.code":
+                this.getForeingKey().setCodeName(DataTypeUtils.toString(value, ""));
+                break;
+            case "fk_label":
+            case "foreingkey_label":
+            case "foreingkey.label":
+                this.getForeingKey().setLabelFormula(DataTypeUtils.toString(value, ""));
+                break;
+            case "fk_closed":
+            case "fk_closedlist":
+            case "fk.closedlist":
+            case "foreingkey_closedlist":
+            case "foreingkey.closedlist":
+                this.getForeingKey().setClosedList(DataTypeUtils.toBoolean(value, false));
+                break;
+            case "fk_table":
+            case "foreingkey_table":
+            case "foreingkey.table":
+                this.getForeingKey().setTableName(DataTypeUtils.toString(value, null));
+                break;
+            case "interval":
+                this.setInterval(DataTypeUtils.toInterval(value, null));
+                break;
+            case "geomtype":
+            case "geometrytype":
+                this.setGeometryType(DataTypeUtils.toString(value, null));
+                break;
+            case "srs":
+                this.setSRS(DataTypeUtils.toString(value, null));
+                break;
+            case "relation":
+                this.setRelationType(toRelation(value));
+                break;
+            case "name":
+                this.setName(DataTypeUtils.toString(value, null));
+                break;
+            case "type":
+            case "datatype":
+                ss = DataTypeUtils.toString(value, null);
+                if (!StringUtils.isBlank(ss)) {
+                    this.setDataType(ToolsLocator.getDataTypesManager().getType(ss));
+                }
+                break;
+            case "defaultvalue":
+                this.setDefaultValue(value);
+                break;
+            case "availablevaluesfilter":
+                this.setAvailableValuesFilter(DataTypeUtils.toString(value, null));
+                break;
+            default:
+                throw new IllegalArgumentException("Name attribute '" + name + "' not valid.");
+        }
+        return this;
+    }
+
+    private int toRelation(Object value) {
+        if (value == null) {
+            return DynField.RELATION_TYPE_NONE;
+        }
+        Integer x = (Integer) DataTypeUtils.coerce(DataTypes.INT, value, null);
+        if (x != null) {
+            return x;
+        }
+        try {
+            String s = value.toString().toUpperCase();
+            switch (s) {
+                case "NONE":
+                default:
+                    return DynField.RELATION_TYPE_NONE;
+                case "IDENTITY":
+                    return DynField.RELATION_TYPE_IDENTITY;
+                case "COLLABORATION":
+                    return DynField.RELATION_TYPE_COLLABORATION;
+                case "COMPOSITION":
+                    return DynField.RELATION_TYPE_COMPOSITION;
+                case "AGGREGATE":
+                    return DynField.RELATION_TYPE_AGGREGATE;
+            }
+        } catch (Exception ex) {
+            return DynField.RELATION_TYPE_NONE;
+        }
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setDisplaySize(int size) {
+        this.displaySize = size;
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setAvailableValuesFilter(Expression filter) {
+        super.setAvailableValuesFilter(filter);
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setAvailableValuesFilter(String filter) {
+        super.setAvailableValuesFilter(filter);
+        return this;
+    }
+
+    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
+
+        public TheJsonSerializer() {
+        }
+
+        @Override
+        public Class getObjectClass() {
+            return DefaultEditableFeatureAttributeDescriptor.class;
+        }
+
+        @Override
+        public Object toObject(JsonObject json) {
+            DefaultFeatureAttributeDescriptor o = new DefaultFeatureAttributeDescriptor();
+            o.fromJson(json);
+            return o;
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder(Object value) {
+            return ((SupportToJson) value).toJsonBuilder();
+        }
+
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setForeingkey(
+            boolean isForeingkey,
+            boolean isClosedList,
+            String tableName,
+            String codeName,
+            String labelFormula
+    ) {
+        if (isForeingkey) {
+            EditableForeingKey fk = this.getForeingKey();
+            fk.setForeingKey(isForeingkey);
+            fk.setClosedList(isClosedList);
+            fk.setTableName(tableName);
+            fk.setCodeName(codeName);
+            fk.setLabelFormula(labelFormula);
+        } else {
+            this.foreingKey = null;
+        }
+        return this;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setTag(String name, Object value) {
+        this.getTags().set(name, value);
+        return this;
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(new TheJsonSerializer());
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor setDefaultFormat(String format) {
+        this.defaultFormat = format;
+        return this;
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,3808 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.Objects;
+import java.util.Set;
+import java.util.UUID;
+import javax.json.JsonObject;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.GeometryExpressionUtils;
+import org.gvsig.fmap.dal.BaseStoresRepository;
+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.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTransaction;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.SupportTransactions;
+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.DataRuntimeException;
+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.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.Feature;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_BASIC;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_REQUIREDS;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_RULES_AT_EDITING;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_RULES_AT_FINISH;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+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.FeatureSet.DisposableFeatureSetIterable;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStoreTimeSupport;
+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.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.exception.AlreadyEditingException;
+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.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.dynobjectutils.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureTypeManager;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.SpatialManager;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet;
+import org.gvsig.fmap.dal.feature.impl.undo.DefaultFeatureCommandsStack;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+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.AbstractDataStore;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer2;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.SpatialIndex;
+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.DisposeUtils;
+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.DynObject_v2;
+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.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+import org.gvsig.tools.undo.command.Command;
+import org.gvsig.tools.util.ChainedIterator;
+import org.gvsig.tools.util.GetItemWithSizeIsEmptyAndIterator64;
+import org.gvsig.tools.util.HasAFile;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureStore extends AbstractDataStore implements
+        DataStoreInitializer2, FeatureStoreProviderServices, FeatureStore,
+        SupportTransactions, Observer {
+
+    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;
+
+    /*
+    TODO: Sustituir estos tres manager por un EditingManager
+     */
+    private FeatureTypeManager featureTypeManager;
+    private FeatureManager featureManager;
+    private SpatialManager spatialManager;
+
+    private FeatureType defaultFeatureType = null;
+    private List<FeatureType> 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;
+
+    /*friend*/ DelegatedDynObject metadata;
+
+    private Set metadataChildren;
+
+    private Long featureCount = null;
+
+    private long temporalOid = 0;
+
+    private FeatureCacheProvider cache;
+
+    private final StateInformation state;
+
+    private FeatureStoreTimeSupport timeSupport;
+
+    private PropertiesSupportHelper propertiesSupportHelper;
+    private DataTransaction transaction;
+
+    private String editingSessionCode;
+
+    private class StateInformation extends HashMap<Object, Object> {
+
+        private static final long serialVersionUID = 4109026189635185666L;
+
+        private boolean broken;
+        private Throwable breakingsCause;
+
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public StateInformation() {
+            this.clear();
+        }
+
+        @Override
+        public void clear() {
+            this.broken = false;
+            this.breakingsCause = null;
+            super.clear();
+        }
+
+        public boolean isBroken() {
+            return this.broken;
+        }
+
+        public void broken() {
+            this.broken = true;
+        }
+
+        public Throwable getBreakingsCause() {
+            return this.breakingsCause;
+        }
+
+        public void setBreakingsCause(Throwable cause) {
+            if (this.breakingsCause == null) {
+                this.breakingsCause = cause;
+            }
+            this.broken = true;
+        }
+    }
+
+    /*
+     * 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() {
+        this.state = new StateInformation();
+    }
+
+    @Override
+    protected DataManager getDataManager() {
+        return this.dataManager;
+    }
+
+    @Override
+    public void intialize(DataManager dataManager,
+            DataStoreParameters parameters) throws InitializeException {
+
+        DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
+
+        this.metadata = (DelegatedDynObject) dynManager.createDynObject(
+                FeatureStore.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);
+        }
+
+    }
+
+    @Override
+    public void setProvider(org.gvsig.fmap.dal.DataStoreProvider provider) {
+        this.provider = (FeatureStoreProvider) provider;
+        this.delegate((DynObject) provider);
+        this.metadataChildren = new HashSet();
+        this.metadataChildren.add(provider);
+        if (!this.ignoreDALResource) {
+            loadDALFile();
+
+            // Habria que crear un metodo en el proveedor para que de prioidad
+            // a los parametros frente a lo que se a leido en el fichero dal
+            // DataStoreProvider arreglalo segun los parametros del usuario
+            // fixFeatureTypeFromParameters
+            this.provider.fixFeatureTypeFromParameters();
+            try {
+                if (defaultFeatureType != null) {
+                    FeatureAttributeDescriptor attrGeom = defaultFeatureType.getDefaultGeometryAttribute();
+                    if (attrGeom != null) {
+                        DefaultFeatureAttributeDescriptor gattr = (DefaultFeatureAttributeDescriptor) attrGeom;
+                        IProjection srs = (IProjection) this.getDynValue(METADATA_CRS);
+                        if (srs != null && srs != gattr.getSRS()) {
+                            gattr.setSRSForced(srs);
+                        }
+                    }
+                }
+            } catch (Throwable th) {
+                LOGGER.warn("Can't patch DAL file", th);
+            }
+        }
+    }
+
+    @Override
+    public DataStoreParameters getParameters() {
+        if (this.parameters == null) {
+            LOGGER.warn("Store parametes are null");
+        }
+        return parameters;
+    }
+
+    @Override
+    public int getMode() {
+        return this.mode;
+    }
+
+    @Override
+    public DataManager getManager() {
+        return this.dataManager;
+    }
+
+    @Override
+    public UnmodifiableBasicMap<String, DataStore> getChildren() {
+        UnmodifiableBasicMap<String, DataStore> children = this.provider.getChildren();
+        if (children == null) {
+            return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+        }
+        return children;
+    }
+
+    @Override
+    public FeatureStoreProvider getProvider() {
+        return this.provider;
+    }
+
+    public FeatureManager getFeatureManager() {
+        return this.featureManager;
+    }
+
+    @Override
+    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) {
+                LOGGER.warn("Opening a store in editing/append mode (" + this.getFullName() + ").", ex);
+            }
+        }
+        if (this.notifyChange(DataStoreNotification.BEFORE_OPEN).isCanceled()) {
+            return;
+        }
+        this.provider.open();
+        this.notifyChange(DataStoreNotification.AFTER_OPEN);
+    }
+
+    @Override
+    public void refresh() throws OpenException, InitializeException {
+        if (this.mode != MODE_QUERY) {
+            throw new IllegalStateException();
+        }
+        if (this.notifyChange(FeatureStoreNotification.BEFORE_REFRESH).isCanceled()) {
+            return;
+        }
+        if (state.isBroken()) {
+            this.load(state);
+        } else {
+            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) {
+                LOGGER.warn("Clossing a store in editing/append mode (" + this.getFullName() + ").", ex);
+            }
+        }
+        if (this.notifyChange(DataStoreNotification.BEFORE_CLOSE).isCanceled()) {
+            return;
+        }
+        this.featureCount = null;
+        this.provider.close();
+        this.notifyChange(DataStoreNotification.AFTER_CLOSE);
+    }
+
+    @Override
+    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) {
+                LOGGER.warn("Dispossing a store in editing/append mode (" + this.getFullName() + ").", ex);
+            }
+        }
+        if (this.notifyChange(DataStoreNotification.BEFORE_DISPOSE).isCanceled()) {
+            return;
+        }
+        this.disposeIndexes();
+        if (this.provider != null) {
+            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;
+        }
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public boolean canWriteGeometry(int geometryType) throws DataException {
+        return this.provider.canWriteGeometry(geometryType, 0);
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException,
+            ValidateDataParametersException {
+        if (this.state.isBroken()) {
+            try {
+                return this.provider.getExplorer();
+            } catch (Throwable th) {
+                return null;
+            }
+        } else {
+            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();
+     * }
+     */
+    @Override
+    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);
+        }
+        Envelope envelope = this.provider.getEnvelope();
+        if (envelope != null) {
+            return envelope;
+        }
+        FeatureAttributeDescriptor attrdesc = this.getDefaultFeatureType().getDefaultGeometryAttribute();
+        if (attrdesc == null || !attrdesc.isComputed()) {
+            return null;
+        }
+        final int index = attrdesc.getIndex();
+        final MutableObject<Envelope> envelopeValue = new MutableObject<>();
+        try {
+            this.accept((Object obj) -> {
+                Feature f = (Feature) obj;
+                Geometry g = (Geometry) f.get(index);
+                if (g == null) {
+                    return;
+                }
+                if (envelopeValue.getValue() == null) {
+                    envelopeValue.setValue(g.getEnvelope());
+                } else {
+                    envelopeValue.getValue().add(g);
+                }
+            });
+        } catch (Throwable th) {
+            LOGGER.warn("Can't calculate envelope", th);
+            return null;
+        }
+        return envelopeValue.getValue();
+    }
+
+    /**
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     * @deprecated use getDefaultFeatureType().getDefaultSRS()
+     */
+    @Override
+    public IProjection getSRSDefaultGeometry() throws DataException {
+        return this.getDefaultFeatureType().getDefaultSRS();
+    }
+
+    @Override
+    public FeatureSelection createDefaultFeatureSelection()
+            throws DataException {
+        return new DefaultFeatureSelection(this);
+    }
+
+    @Override
+    public FeatureProvider createDefaultFeatureProvider(FeatureType type)
+            throws DataException {
+        if (type.hasOID()) {
+            return new DefaultFeatureProvider(type,
+                    this.provider.createNewOID());
+        }
+        return new DefaultFeatureProvider(type);
+    }
+
+    @Override
+    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());
+
+    }
+
+    @Override
+    public void loadFromState(final PersistentState persistentState)
+            throws PersistenceException {
+        if (this.provider != null) {
+            throw new PersistenceStoreAlreadyLoadedException(this.getName());
+        }
+        if (this.getManager() == null) {
+            this.dataManager = (DefaultDataManager) DALLocator.getDataManager();
+        }
+        state.clear();
+        try {
+            state.put("parameters", persistentState.get("parameters"));
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+        try {
+            state.put("selection", persistentState.get("selection"));
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+        try {
+            state.put("transforms", persistentState.get("transforms"));
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+        try {
+            state.put("evaluatedAttributes", persistentState.get("evaluatedAttributes"));
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+        try {
+            state.put("defaultFeatureTypeId", persistentState.getString("defaultFeatureTypeId"));
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+        load(state);
+        ((DefaultDataManager) this.getDataManager()).addObservers(this);
+    }
+
+    private void load(StateInformation state) {
+        this.featureTypes = new ArrayList();
+        this.defaultFeatureType = null;
+        this.featureCount = null;
+
+        DataStoreParameters params = (DataStoreParameters) state.get("parameters");
+        try {
+            intialize(dataManager, params);
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+
+        try {
+            DataStoreProvider prov = dataManager.createProvider(
+                    getStoreProviderServices(),
+                    params
+            );
+            setProvider(prov);
+        } catch (Throwable th) {
+            LOGGER.warn("Can't load store from state.", th);
+            state.setBreakingsCause(th);
+        }
+        try {
+            selection = (FeatureSelection) state.get("selection");
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+
+        try {
+            this.transforms = (DefaultFeatureStoreTransforms) state.get("transforms");
+            this.transforms.setFeatureStore(this);
+            for (FeatureStoreTransform transform : this.transforms) {
+                try {
+                    transform.setUp();
+                } catch (Throwable th) {
+                    state.setBreakingsCause(th);
+                }
+            }
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+
+        try {
+            Map evaluatedAttributes = (Map) state.get("evaluatedAttributes");
+            if ((evaluatedAttributes != null) && !evaluatedAttributes.isEmpty()) {
+                Iterator iterEntries = evaluatedAttributes.entrySet().iterator();
+                while (iterEntries.hasNext()) {
+                    Entry entry = (Entry) iterEntries.next();
+                    List 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 (type == null) {
+                        throw new PersistenceCantFindFeatureTypeException(
+                                getName(), (String) entry.getKey());
+                    }
+                    DefaultEditableFeatureType eType = (DefaultEditableFeatureType) type.getEditable();
+                    Iterator<FeatureAttributeDescriptor> iterAttr = attrs.iterator();
+                    while (iterAttr.hasNext()) {
+                        FeatureAttributeDescriptor attr = iterAttr.next();
+                        eType.addLike(attr);
+                    }
+                    featureTypes.set(fTypePos, eType.getNotEditableCopy());
+
+                }
+
+            }
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+
+        try {
+            String defaultFeatureTypeId = (String) state.get("defaultFeatureTypeId");
+            FeatureType ftype;
+
+            if (defaultFeatureType == null
+                    || defaultFeatureType.getId() == null
+                    || !defaultFeatureType.getId().equals(defaultFeatureTypeId)) {
+
+                ftype = getFeatureType(defaultFeatureTypeId);
+                if (ftype == null) {
+                    /*
+                             * Un error en el m�todo de PostgreSQL getName(), hace que
+                             * el nombre del featureType sea valor retornado por el getProviderName()
+                             * De momento se pone este parche para apa�arlo y poder mantener compatibilidad
+                             * con proyectos antiguos (2.1 y 2.2)
+                     */
+                    ftype = getFeatureType(getName());
+                    if (ftype == null) {
+                        throw new RuntimeException("Can't locate feature type");
+                    }
+                }
+                defaultFeatureType = ftype;
+            }
+        } catch (Throwable th) {
+            state.setBreakingsCause(th);
+        }
+
+        LOGGER.debug("load() broken:{}, {}, {}.",
+                new Object[]{state.isBroken(), this.getProviderName(), params}
+        );
+    }
+
+    public DataStoreProviderServices getStoreProviderServices() {
+        return this;
+    }
+
+    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(FeatureStore.METADATA_DEFINITION_NAME) == null) {
+            DynStruct metadataDefinition
+                    = manager.addDefinition(FeatureStore.METADATA_DEFINITION_NAME, null);
+            metadataDefinition.extend(manager
+                    .getDefinition(DataStore.METADATA_DEFINITION_NAME));
+        }
+    }
+
+    //
+    // ====================================================================
+    // Gestion de la seleccion
+    //
+    @Override
+    public void setSelection(DataSet selection) throws DataException {
+        this.setSelection((FeatureSet) selection);
+    }
+
+    @Override
+    public DataSet createSelection() throws DataException {
+        return createFeatureSelection();
+    }
+
+    @Override
+    public DataSet getSelection() throws DataException {
+        return this.getFeatureSelection();
+    }
+
+    @Override
+    public void setSelection(FeatureSet selection) throws DataException {
+        setSelection(selection, true);
+    }
+
+    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);
+    }
+
+    @Override
+    public FeatureSelection createFeatureSelection() throws DataException {
+        long maxSize = dataManager.getMaxSizeForSmallFeatureSelection();
+        if (this.provider.getFeatureCount() > maxSize) {
+            return createLargeFeatureSelection();
+        }
+        return this.provider.createFeatureSelection();
+    }
+
+    @Override
+    public FeatureSelection createLargeFeatureSelection() throws DataException {
+        return new LargeFeatureSelection(this);
+
+    }
+
+    @Override
+    public FeatureSelection createMemoryFeatureSelection() throws DataException {
+        return this.provider.createFeatureSelection();
+    }
+
+    @Override
+    public FeatureSelection getFeatureSelection() throws DataException {
+        if (selection == null) {
+            this.selection = createFeatureSelection();
+            this.selection.addObserver(this);
+        }
+        return selection;
+    }
+
+    //
+    // ====================================================================
+    // Gestion de notificaciones
+    //
+    @Override
+    public FeatureStoreNotification notifyChange(FeatureStoreNotification storeNotification) {
+        if (delegateObservable != null) {
+            try {
+                delegateObservable.notifyObservers(storeNotification);
+            } catch (Throwable ex) {
+                LOGGER.warn("Problems notifying changes in the store '" + this.getName() + " (" + storeNotification.getType() + ").", ex);
+            }
+        }
+        return storeNotification;
+    }
+
+    @Override
+    public FeatureStoreNotification notifyChange(String notification) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification));
+    }
+
+    public FeatureStoreNotification notifyChange(String notification, String editingSessionCode) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification, editingSessionCode));
+    }
+
+    public FeatureStoreNotification notifyChange(String notification, String editingSessionCode, int editMode) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification, editingSessionCode, editMode));
+    }
+
+    public FeatureStoreNotification notifyChange(String notification,
+            String editingSessionCode,
+            Iterator<FeatureReference> deleteds,
+            Iterator<EditableFeature> inserteds,
+            Iterator<EditableFeature> updateds,
+            Iterator<FeatureTypeChanged> featureTypesChanged,
+            boolean isSelectionCompromised) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification, editingSessionCode,
+                deleteds, inserteds, updateds, featureTypesChanged, isSelectionCompromised));
+    }
+
+    @Override
+    public FeatureStoreNotification notifyChange(String notification, FeatureProvider data) {
+        Feature f = null;
+        if (data != null) {
+            try {
+                f = createFeature(data);
+            } catch (Throwable ex) {
+                LOGGER.warn("Problems creating a feature to notifying changes in the store '" + this.getName() + " (" + notification + ").", ex);
+            }
+        }
+        return notifyChange(notification, f);
+    }
+
+    public FeatureStoreNotification notifyChange(String notification, Feature feature) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification,
+                feature));
+    }
+
+    public FeatureStoreNotification notifyChange(String notification, Command command) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification,
+                command));
+    }
+
+    public FeatureStoreNotification notifyChange(String notification, EditableFeatureType type) {
+        return notifyChange(new DefaultFeatureStoreNotification(this, notification,
+                type));
+    }
+
+    @Override
+    public FeatureStoreNotification notifyChange(String notification, Resource resource) {
+        return notifyChange(new DefaultFeatureStoreNotification(this,
+                DataStoreNotification.RESOURCE_CHANGED));
+    }
+
+    //
+    // ====================================================================
+    // Gestion de bloqueos
+    //
+    @Override
+    public boolean isLocksSupported() {
+        return this.provider.isLocksSupported();
+    }
+
+    @Override
+    public FeatureLocks getLocks() throws DataException {
+        if (!this.provider.isLocksSupported()) {
+            LOGGER.warn("Locks not supported");
+            return null;
+        }
+        if (locks == null) {
+            this.locks = this.provider.createFeatureLocks();
+        }
+        return locks;
+    }
+
+    //
+    // ====================================================================
+    // Interface Observable
+    //
+    @Override
+    public void disableNotifications() {
+        this.delegateObservable.disableNotifications();
+
+    }
+
+    @Override
+    public void enableNotifications() {
+        this.delegateObservable.enableNotifications();
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        this.delegateObservable.beginComplexNotification();
+
+    }
+
+    @Override
+    public void endComplexNotification() {
+        this.delegateObservable.endComplexNotification();
+
+    }
+
+    @Override
+    public void addObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.addObserver(observer);
+        }
+    }
+
+    @Override
+    public void deleteObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.deleteObserver(observer);
+        }
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.delegateObservable.deleteObservers();
+
+    }
+
+    //
+    // ====================================================================
+    // Interface Observer
+    //
+    // Usado para observar:
+    // - su seleccion
+    // - sus bloqueos
+    // - sus recursos
+    //
+    @Override
+    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) {
+
+            }
+        } else if (observable instanceof FeatureReferenceSelection) {
+            if (notification instanceof String) {
+                this.notifyChange((String) notification);
+            }
+        }
+    }
+
+    //
+    // ====================================================================
+    // 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) {
+            try {
+                commands.clear();
+            } catch (Exception ex) {
+                LOGGER.trace("Can't clear commands", ex);
+            }
+            commands = null;
+        }
+
+        if (featureTypeManager != null) {
+            DisposeUtils.disposeQuietly(featureTypeManager);
+            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;
+
+        this.editingSessionCode = null;
+    }
+
+    @Override
+    synchronized public void edit() throws DataException {
+        edit(MODE_FULLEDIT);
+    }
+
+    @Override
+    synchronized public void edit(int mode) throws DataException {
+        LOGGER.debug("Starting editing in mode: {}", mode);
+        String newSessionCode = this.createUniqueID();
+        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());
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_STARTEDITING,
+                            newSessionCode, mode).isCanceled()) {
+                        return;
+                    }
+                    this.editingSessionCode = newSessionCode;
+                    invalidateIndexes();
+                    featureManager = new FeatureManager(this);
+                    featureTypeManager = new FeatureTypeManager(this);
+                    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, newSessionCode, this.mode);
+                    break;
+
+                case MODE_APPEND:
+                    if (!this.transforms.isEmpty()) {
+                        throw new IllegalStateException(this.getName());
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_STARTEDITING,
+                            newSessionCode, mode).isCanceled()) {
+                        return;
+                    }
+                    this.editingSessionCode = newSessionCode;
+                    invalidateIndexes();
+                    this.provider.beginAppend();
+                    this.mode = MODE_APPEND;
+                    hasInserts = false;
+                    notifyChange(FeatureStoreNotification.AFTER_STARTEDITING,
+                            newSessionCode, this.mode);
+                    break;
+                case MODE_PASS_THROUGH:
+                    if (!this.provider.supportsPassThroughMode()) {
+                        throw new IllegalStateException(this.getName());
+                    }
+                    if (!this.transforms.isEmpty()) {
+                        throw new IllegalStateException(this.getName());
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_STARTEDITING,
+                            newSessionCode, mode).isCanceled()) {
+                        return;
+                    }
+                    this.editingSessionCode = newSessionCode;
+                    invalidateIndexes();
+                    this.mode = MODE_PASS_THROUGH;
+                    hasInserts = false;
+                    notifyChange(FeatureStoreNotification.AFTER_STARTEDITING,
+                            newSessionCode, this.mode);
+                    break;
+
+            }
+        } catch (Exception e) {
+            try {
+                if (this.mode != MODE_QUERY) {
+                    exitEditingMode();
+                }
+                notifyChange(FeatureStoreNotification.FAILED_STARTEDITING,
+                        newSessionCode, mode);
+            } catch (Throwable th) {
+                LOGGER.warn("Can't cleanup after error in start editing.", th);
+            }
+            throw new StoreEditException(e, this.getName());
+        }
+    }
+
+    private void invalidateIndexes() {
+        setIndexesValidStatus(false);
+    }
+
+    private void setIndexesValidStatus(boolean valid) {
+        FeatureIndexes theIndexes = getIndexes();
+        LOGGER.debug("Setting the store indexes to valid status {}: {}", (valid
+                ? Boolean.TRUE : Boolean.FALSE), theIndexes);
+        for (Iterator iterator = theIndexes.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 theIndexes = getIndexes();
+        LOGGER.debug("Refilling indexes: {}", theIndexes);
+        for (Iterator iterator = theIndexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices
+                        = (FeatureIndexProviderServices) index;
+                indexServices.fill(true, null);
+            }
+        }
+    }
+
+    private void waitForIndexes() {
+        FeatureIndexes theIndexes = getIndexes();
+        LOGGER.debug("Waiting for indexes to finish filling: {}", theIndexes);
+        for (Iterator iterator = theIndexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices
+                        = (FeatureIndexProviderServices) index;
+                indexServices.waitForIndex();
+            }
+        }
+    }
+
+    private void disposeIndexes() {
+        FeatureIndexes theIndexes = getIndexes();
+        LOGGER.debug("Disposing indexes: {}", theIndexes);
+        if (theIndexes == null) {
+            return;
+        }
+        for (Iterator iterator = theIndexes.iterator(); iterator.hasNext();) {
+            FeatureIndex index = (FeatureIndex) iterator.next();
+            if (index instanceof FeatureIndexProviderServices) {
+                FeatureIndexProviderServices indexServices
+                        = (FeatureIndexProviderServices) index;
+                indexServices.dispose();
+            }
+        }
+    }
+
+    @Override
+    public boolean isEditing() {
+        return mode == MODE_FULLEDIT;
+    }
+
+    @Override
+    public boolean isAppending() {
+        return mode == MODE_APPEND;
+    }
+
+    @Override
+    synchronized public void update(EditableFeatureType type)
+            throws DataException {
+        try {
+            if (type == null) {
+                throw new NullFeatureTypeException(getName());
+            }
+
+            switch (this.mode) {
+                case MODE_QUERY:
+                    if (type.hasOnlyMetadataChanges(this.defaultFeatureType)) {
+                        if (notifyChange(FeatureStoreNotification.BEFORE_UPDATE_TYPE, type).isCanceled()) {
+                            return;
+                        }
+                        FeatureType theType = type.getNotEditableCopy();
+                        if (defaultFeatureType.getId().equals(theType.getId())) {
+                            defaultFeatureType = theType;
+                        }
+                        List newtypes = new ArrayList();
+                        for (FeatureType featureType : this.featureTypes) {
+                            if (featureType.getId().equals(theType.getId())) {
+                                newtypes.add(theType);
+                            } else {
+                                newtypes.add(featureType);
+                            }
+                        }
+                        this.featureTypes = newtypes;
+                        saveDALFile();
+                        notifyChange(FeatureStoreNotification.AFTER_UPDATE_TYPE, type);
+                    }
+
+                    break;
+                case MODE_FULLEDIT:
+                    if (notifyChange(FeatureStoreNotification.BEFORE_UPDATE_TYPE, type).isCanceled()) {
+                        return;
+                    }
+                    newVersionOfUpdate();
+
+                    FeatureType oldt = type.getSource().getCopy();
+                    FeatureType newt = type.getCopy();
+                    commands.update(newt, oldt);
+                    hasStrongChanges = ((DefaultEditableFeatureType) type).hasStrongChanges();
+                    notifyChange(FeatureStoreNotification.AFTER_UPDATE_TYPE, type);
+                    break;
+                case MODE_APPEND:
+                case MODE_PASS_THROUGH:
+                    throw new NeedEditingModeException(this.getName());
+
+            }
+        } catch (Exception e) {
+            throw new StoreUpdateFeatureTypeException(e, this.getName());
+        }
+    }
+
+    @Override
+    public void delete(Feature feature) throws DataException {
+        switch (this.mode) {
+            case MODE_PASS_THROUGH:
+                checkIsOwnFeature(feature);
+                if (notifyChange(FeatureStoreNotification.BEFORE_DELETE, feature).isCanceled()) {
+                    return;
+                }
+                this.provider.passThroughDelete((FeatureReferenceProviderServices) feature.getReference());
+                notifyChange(FeatureStoreNotification.AFTER_DELETE, feature);
+                break;
+            default:
+                this.commands.delete(feature);
+                break;
+
+        }
+    }
+
+    @Override
+    public void delete(String filter) {
+        if (StringUtils.isBlank(filter)) {
+            return;
+        }
+        this.delete(ExpressionUtils.createExpression(filter));
+    }
+
+    @Override
+    public void delete(Expression filter) {
+        // TODO: Optimizar pasandolo directamente al proveedor si no estamos en edicion y lo soporta.
+        if (filter == null) {
+            return;
+        }
+        boolean pendingFinishEditing = false;
+        DisposableFeatureSetIterable features = null;
+        try {
+            switch (this.mode) {
+                case MODE_QUERY:
+                    pendingFinishEditing = true;
+                    this.edit();
+                    break;
+                case MODE_APPEND:
+                    throw new IllegalStateException("Delete not allowed in append mode.");
+                case MODE_FULLEDIT:
+                    break;
+                case MODE_PASS_THROUGH:
+//                    this.provider.passThroughDelete(filter);
+//                    return;
+                    break;
+                default:
+                    throw new IllegalStateException("Mode " + this.mode + " not supported.");
+            }
+
+            FeatureSet fset = this.getFeatureSet(filter);
+            features = fset.iterable();
+            for (Feature f : features) {
+                fset.delete(f);
+            }
+        } catch (DataException ex) {
+            throw new DataRuntimeException(ex.getFormatString(), ex.getMessageKey(), ex.getCode()) {
+            };
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't delete features (" + filter.getPhrase() + ").", ex);
+        } finally {
+            if (pendingFinishEditing) {
+                this.finishEditingQuietly();
+            }
+            DisposeUtils.disposeQuietly(features);
+        }
+    }
+
+    synchronized public void doDelete(Feature feature) throws DataException {
+        if (feature == null) {
+            throw new IllegalArgumentException("feature argument can't be null.");
+        }
+        try {
+            checkInEditingMode();
+            checkIsOwnFeature(feature);
+            if (feature instanceof EditableFeature && !((EditableFeature)feature).isUpdatable()) {
+                //La feature no est� persistida en disco
+                throw new StoreDeleteEditableFeatureException(getName());
+            }
+            if (notifyChange(FeatureStoreNotification.BEFORE_DELETE, feature).isCanceled()) {
+                return;
+            }
+
+            //Update the featureManager and the spatialManager
+            featureManager.delete(feature);
+            spatialManager.deleteFeature(feature);
+
+            newVersionOfUpdate();
+            hasStrongChanges = true;
+            notifyChange(FeatureStoreNotification.AFTER_DELETE, feature);
+        } catch (Exception e) {
+            throw new StoreDeleteFeatureException(e, this.getName());
+        }
+    }
+
+    @Override
+    public synchronized void insert(FeatureSet set) throws DataException {
+        switch (mode) {
+            case MODE_QUERY:
+                throw new NeedEditingModeException(this.getName());
+
+            case MODE_APPEND:
+            case MODE_FULLEDIT:
+            case MODE_PASS_THROUGH:
+            try {
+                set.accept((Object obj) -> {
+                    EditableFeature ef = createNewFeature((Feature) obj);
+                    insert(ef);
+                });
+            } catch (BaseException ex) {
+                throw new StoreInsertFeatureException(ex, this.getName());
+            }
+            break;
+        }
+    }
+
+    private static EditableFeature lastChangedFeature = null;
+
+    @Override
+    public synchronized void insert(EditableFeature feature)
+            throws DataException {
+        LOGGER.debug("In editing mode {}, insert feature: {}", mode, feature);
+        try {
+            switch (mode) {
+                case MODE_QUERY:
+                    throw new NeedEditingModeException(this.getName());
+
+                case MODE_APPEND:
+                    checkIsOwnFeature(feature);
+                    if (feature.isUpdatable()) {
+                        throw new NoNewFeatureInsertException(this.getName());
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_INSERT, feature).isCanceled()) {
+                        return;
+                    }
+                    this.featureCount = null;
+                    feature.validate(CHECK_RULES_AT_EDITING);
+                    provider.append(((DefaultEditableFeature) feature).getData());
+                    hasStrongChanges = true;
+                    hasInserts = true;
+                    notifyChange(FeatureStoreNotification.AFTER_INSERT, feature);
+                    break;
+
+                case MODE_FULLEDIT:
+                    if (feature.isUpdatable()) {
+                        throw new NoNewFeatureInsertException(this.getName());
+                    }
+                    feature.validate(CHECK_RULES_AT_EDITING);
+                    commands.insert(feature);
+                    break;
+
+                case MODE_PASS_THROUGH:
+                    checkIsOwnFeature(feature);
+                    if (feature.isUpdatable()) {
+                        throw new NoNewFeatureInsertException(this.getName());
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_INSERT, feature).isCanceled()) {
+                        return;
+                    }
+                    feature.validate(CHECK_RULES_AT_EDITING);
+                    this.provider.passThroughInsert(((DefaultEditableFeature) feature).getData());
+                    notifyChange(FeatureStoreNotification.AFTER_INSERT, feature);
+                    break;
+            }
+        } catch (Exception e) {
+            throw new StoreInsertFeatureException(e, this.getName());
+        }
+    }
+
+    synchronized public void doInsert(EditableFeature feature)
+            throws DataException {
+        checkIsOwnFeature(feature);
+
+        waitForIndexes();
+
+        if (notifyChange(FeatureStoreNotification.BEFORE_INSERT, feature).isCanceled()) {
+            return;
+        }
+        newVersionOfUpdate();
+        if ((lastChangedFeature == null)
+                || (lastChangedFeature.getSource() != feature.getSource())) {
+            lastChangedFeature = feature;
+            feature.validate(CHECK_RULES_AT_EDITING);
+            lastChangedFeature = null;
+        }
+        //Update the featureManager and the spatialManager
+        ((DefaultFeature) feature).setInserted(true);
+        DefaultFeature newFeature = (DefaultFeature) feature.getNotEditableCopy();
+
+        featureManager.add(feature);
+        spatialManager.insertFeature(newFeature);
+
+        hasStrongChanges = true;
+        hasInserts = true;
+        notifyChange(FeatureStoreNotification.AFTER_INSERT, feature);
+    }
+
+    @Override
+    public void update(EditableFeature feature)
+            throws DataException {
+        switch (this.mode) {
+            case MODE_PASS_THROUGH:
+                checkIsOwnFeature(feature);
+                if (!feature.isUpdatable()) {
+                    throw new NoNewFeatureInsertException(this.getName());
+                }
+                if (notifyChange(FeatureStoreNotification.BEFORE_UPDATE, feature).isCanceled()) {
+                    return;
+                }
+                feature.validate(CHECK_RULES_AT_EDITING);
+                this.provider.passThroughUpdate(((DefaultEditableFeature) feature).getData());
+                notifyChange(FeatureStoreNotification.AFTER_UPDATE, feature);
+                break;
+            case MODE_FULLEDIT:
+                if (feature.isUpdatable()) {
+                    commands.update(feature, feature.getSource());
+                    return;
+                }
+                // FIXME: Deberiamos lanzar aqui un error en lugar de hacer el insert.
+                //        O lanzar un mensaje al log?
+                insert(feature);
+                break;
+            default:
+                throw new NeedEditingModeException(this.getName());
+        }
+    }
+
+    @Override
+    public void update(Object... parameters) throws DataException {
+        if (parameters.length == 1) {
+            Object param0 = parameters[0];
+            if (param0 instanceof EditableFeature) {
+                this.update((EditableFeature) param0);
+            } else if (param0 instanceof EditableFeatureType) {
+                this.update((EditableFeatureType) param0);
+            } else {
+                throw new IllegalArgumentException("Type of first parameter isn't supported");
+            }
+            return;
+        }
+
+        Expression filter = null;
+        long end = parameters.length;
+        if (parameters.length % 2 == 1) { //IMPAR
+            Object param = parameters[parameters.length - 1];
+            if (param != null) {
+                if (param instanceof Expression) {
+                    filter = (Expression) param;
+                } else {
+                    filter = ExpressionUtils.createExpression(param.toString());
+                }
+            }
+        } else {
+            end = parameters.length - 1;
+        }
+
+        switch (this.mode) {
+            case MODE_PASS_THROUGH:
+                this.provider.passThroughUpdate(
+                        //                    this.getName(), 
+                        parameters,
+                        filter);
+                break;
+            case MODE_FULLEDIT:
+                FeatureSet set = this.getFeatureSet(filter);
+                DisposableIterator it = set.fastIterator();
+                while (it.hasNext()) {
+                    Feature feature = (Feature) it.next();
+                    EditableFeature ef = feature.getEditable();
+                    for (int i = 0; i < end; i += 2) {
+                        String name = (String) parameters[i];
+                        Object value = parameters[i + 1];
+                        ef.set(name, value);
+                    }
+                    set.update(ef);
+                }
+                DisposeUtils.disposeQuietly(it);
+                DisposeUtils.disposeQuietly(set);
+                break;
+            default:
+                throw new NeedEditingModeException(this.getName());
+        }
+    }
+
+    synchronized public void doUpdate(EditableFeature feature, Feature oldFeature)
+            throws DataException {
+        try {
+            checkInEditingMode();
+            checkIsOwnFeature(feature);
+            if (notifyChange(FeatureStoreNotification.BEFORE_UPDATE, feature).isCanceled()) {
+                return;
+            }
+            newVersionOfUpdate();
+            if ((lastChangedFeature == null)
+                    || (lastChangedFeature.getSource() != feature.getSource())) {
+                lastChangedFeature = feature;
+                feature.validate(CHECK_RULES_AT_EDITING);
+                lastChangedFeature = null;
+            }
+
+            //Update the featureManager and the spatialManager
+            Feature newf = feature.getNotEditableCopy();
+            featureManager.update(feature, oldFeature);
+            spatialManager.updateFeature(newf, oldFeature);
+
+            hasStrongChanges = true;
+            notifyChange(FeatureStoreNotification.AFTER_UPDATE, feature);
+        } catch (Exception e) {
+            throw new StoreUpdateFeatureException(e, this.getName());
+        }
+    }
+
+    @Override
+    synchronized public void redo() throws RedoException {
+        Command redo = commands.getNextRedoCommand();
+        try {
+            checkInEditingMode();
+        } catch (NeedEditingModeException ex) {
+            throw new RedoException(redo, ex);
+        }
+        if (notifyChange(FeatureStoreNotification.BEFORE_REDO, redo).isCanceled()) {
+            return;
+        }
+        newVersionOfUpdate();
+        commands.redo();
+        hasStrongChanges = true;
+        notifyChange(FeatureStoreNotification.AFTER_REDO, redo);
+    }
+
+    @Override
+    synchronized public void undo() throws UndoException {
+        Command undo = commands.getNextUndoCommand();
+        try {
+            checkInEditingMode();
+        } catch (NeedEditingModeException ex) {
+            throw new UndoException(undo, ex);
+        }
+        if (notifyChange(FeatureStoreNotification.BEFORE_UNDO, undo).isCanceled()) {
+            return;
+        }
+        newVersionOfUpdate();
+        commands.undo();
+        hasStrongChanges = true;
+        notifyChange(FeatureStoreNotification.AFTER_UNDO, undo);
+    }
+
+    @Override
+    public List getRedoInfos() {
+        if (isEditing() && (commands != null)) {
+            return commands.getRedoInfos();
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public List getUndoInfos() {
+        if (isEditing() && (commands != null)) {
+            return commands.getUndoInfos();
+        } else {
+            return null;
+        }
+    }
+
+    public synchronized FeatureCommandsStack getCommandsStack()
+            throws DataException {
+        checkInEditingMode();
+        return commands;
+    }
+
+    @Override
+    public boolean cancelEditingQuietly() {
+        try {
+            this.cancelEditing();
+            return true;
+        } catch (Exception ex) {
+            LOGGER.debug("Can't cancel editing", ex);
+            return false;
+        }
+    }
+
+    @Override
+    synchronized public void cancelEditing() throws DataException {
+        if (spatialManager != null) {
+            spatialManager.cancelModifies();
+        }
+        try {
+            switch (mode) {
+                case MODE_QUERY:
+                    throw new NeedEditingModeException(this.getName());
+
+                case MODE_APPEND:
+                    if (notifyChange(FeatureStoreNotification.BEFORE_CANCELEDITING).isCanceled()) {
+                        return;
+                    }
+                    provider.abortAppend();
+                    exitEditingMode();
+                    ((FeatureSelection) this.getSelection()).deselectAll();
+                    updateIndexes();
+                    notifyChange(FeatureStoreNotification.AFTER_CANCELEDITING);
+                    break;
+
+                case MODE_FULLEDIT:
+                    boolean clearSelection = this.hasStrongChanges;
+                    if (this.selection instanceof FeatureReferenceSelection) {
+                        clearSelection = this.hasInserts;
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_CANCELEDITING).isCanceled()) {
+                        return;
+                    }
+                    exitEditingMode();
+                    if (clearSelection) {
+                        ((FeatureSelection) this.getSelection()).deselectAll();
+                    }
+                    updateIndexes();
+                    notifyChange(FeatureStoreNotification.AFTER_CANCELEDITING);
+                    break;
+
+                case MODE_PASS_THROUGH:
+                    if (notifyChange(FeatureStoreNotification.BEFORE_CANCELEDITING).isCanceled()) {
+                        return;
+                    }
+                    exitEditingMode();
+                    ((FeatureSelection) this.getSelection()).deselectAll();
+                    updateIndexes();
+                    notifyChange(FeatureStoreNotification.AFTER_CANCELEDITING);
+                    break;
+            }
+        } catch (Exception e) {
+            throw new StoreCancelEditingException(e, this.getName());
+        }
+    }
+
+    @Override
+    public boolean finishEditingQuietly() {
+        try {
+            this.finishEditing();
+            return true;
+        } catch (Exception ex) {
+            LOGGER.debug("Can't finish editing", ex);
+            return false;
+        }
+    }
+
+    @Override
+    synchronized public void finishEditing() throws DataException {
+        LOGGER.debug("finish editing of mode: {}", mode);
+        try {
+
+            /*
+             * Selection needs to be cleared when editing stops
+             * to prevent conflicts with selection remaining from
+             * editing mode.
+             */
+//            ((FeatureSelection) this.getSelection()).deselectAll();
+            Map<String, List<FeatureAttributeDescriptor>> computedFields = this.getComputedFields();
+            switch (mode) {
+                case MODE_QUERY:
+                    throw new NeedEditingModeException(this.getName());
+
+                case MODE_APPEND:
+                    if (selection != null) {
+                        selection = null;
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING, this.editingSessionCode).isCanceled()) {
+                        return;
+                    }
+                    saveDALFile();
+                    provider.endAppend();
+                    exitEditingMode();
+                    this.updateComputedFields(computedFields);
+                    loadDALFile();
+                    updateIndexes();
+                    notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING, this.editingSessionCode);
+                    break;
+
+                case MODE_FULLEDIT:
+                    if (featureManager.hasChanges() || featureTypeManager.hasChanges()) {
+                        if (hasStrongChanges && !this.allowWrite()) {
+                            throw new WriteNotAllowedException(getName());
+                        }
+                        if (notifyChange(FeatureStoreNotification.PREPARING_FINISHEDITING,
+                                this.editingSessionCode).isCanceled()) {
+                            return;
+                        }
+                        if (hasStrongChanges) {
+                            validateFeaturesAtFinishEditing();
+                        }
+                        if (notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING,
+                                this.editingSessionCode,
+                                featureManager.getDeleted(),
+                                featureManager.getInsertedFeatures(),
+                                featureManager.getUpdatedFeatures(),
+                                featureTypeManager.getFeatureTypesChanged().iterator(),
+                                featureManager.isSelectionCompromised()).isCanceled()) {
+                            return;
+                        }
+                        saveDALFile();
+                        if (featureManager.isSelectionCompromised() && selection != null) {
+                            selection = null;
+                        }
+                        if (hasStrongChanges) {
+                            /*
+                         * 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(),
+                                    removeCalculatedAttributes(featureTypeManager.getFeatureTypesChanged()).iterator());
+
+                        }
+                        this.updateComputedFields(computedFields);
+                        exitEditingMode();
+                        loadDALFile();
+                        updateIndexes();
+                        notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING, this.editingSessionCode);
+                    } else {
+                        exitEditingMode();
+                    }
+                    break;
+                case MODE_PASS_THROUGH:
+                    if (selection != null) {
+                        selection = null;
+                    }
+                    if (notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING, this.editingSessionCode).isCanceled()) {
+                        return;
+                    }
+                    exitEditingMode();
+                    updateIndexes();
+                    notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING, this.editingSessionCode);
+                    break;
+            }
+        } catch (ValidateFeaturesException | WriteNotAllowedException ex) {
+            // Don't notify failed.
+            throw ex;
+        } catch (PerformEditingException pee) {
+            notifyChange(FeatureStoreNotification.FAILED_FINISHEDITING, this.editingSessionCode);
+            throw new WriteException(provider.getSourceId().toString(), pee);
+        } catch (Exception e) {
+            notifyChange(FeatureStoreNotification.FAILED_FINISHEDITING, this.editingSessionCode);
+            throw new FinishEditingException(e);
+        }
+    }
+
+    @Override
+    public String getEditingSession() {
+        return this.editingSessionCode;
+    }
+
+    private Map<String, List<FeatureAttributeDescriptor>> getComputedFields() throws DataException {
+        Map<String, List<FeatureAttributeDescriptor>> r = new HashMap<>();
+
+        List<FeatureType> theTypes = new ArrayList<>();
+        theTypes.addAll(this.getFeatureTypes());
+        theTypes.add(this.getDefaultFeatureType());
+        for (int n = 0; n < theTypes.size(); n++) {
+            FeatureType type = theTypes.get(n);
+            for (FeatureAttributeDescriptor attrdesc : type) {
+                FeatureAttributeEmulator emulator = attrdesc.getFeatureAttributeEmulator();
+                if (emulator != null) {
+                    List<FeatureAttributeDescriptor> l = r.get(type.getId());
+                    if (l == null) {
+                        l = new ArrayList<>();
+                        r.put(type.getId(), l);
+                    }
+                    l.add(attrdesc);
+                }
+            }
+        }
+        return r;
+    }
+
+    private void updateComputedFields(Map<String, List<FeatureAttributeDescriptor>> computedFields) throws DataException {
+
+        List<FeatureType> theTypes = new ArrayList<>();
+        theTypes.addAll(this.getFeatureTypes());
+        theTypes.add(this.getDefaultFeatureType());
+        for (int n = 0; n < theTypes.size(); n++) {
+            DefaultFeatureType type = (DefaultFeatureType) theTypes.get(n);
+            List<FeatureAttributeDescriptor> x = computedFields.get(type.getId());
+            if (x != null && !x.isEmpty()) {
+                for (FeatureAttributeDescriptor attrdesc : x) {
+                    if (type.get(attrdesc.getName()) == null) {
+                        type.add(attrdesc);
+                    }
+                }
+            }
+        }
+
+    }
+
+    private List<FeatureTypeChanged> removeCalculatedAttributes(List<FeatureTypeChanged> ftypes) {
+        // FIXME: Falta por implementar
+//        for (FeatureStoreProvider.FeatureTypeChanged ftype : ftypes) {
+//            EditableFeatureType target = (EditableFeatureType) ftype.getTarget();
+//            for (FeatureAttributeDescriptor attributeDescriptor : ftype.getSource().getAttributeDescriptors()) {
+//                if (attributeDescriptor.isComputed()) {
+//                    target.remove(attributeDescriptor.getName());
+//                }
+//            }
+//        }
+        return ftypes;
+    }
+
+    private void saveDALFile() {
+        if( this.ignoreDALResource ) {
+            return;
+        }
+        org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource resource = null;
+        try {
+            ResourcesStorage theResourcesStorage = this.getResourcesStorage();
+            if (theResourcesStorage == null || theResourcesStorage.isReadOnly()) {
+                return;
+            }
+            resource = theResourcesStorage.getResource("dal");
+            if (resource == null || resource.isReadOnly()) {
+                return;
+            }
+            DALFile dalFile = DALFile.getDALFile();
+            dalFile.setStore(this);
+            if (!dalFile.isEmpty()) {
+                dalFile.write(resource);
+            }
+        } catch (Throwable ex) {
+            LOGGER.warn("Can't save DAL resource", ex);
+        } finally {
+            IOUtils.closeQuietly(resource);
+        }
+    }
+
+    private void loadDALFile() {
+        if( this.ignoreDALResource ) {
+            return;
+        }
+        org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource resource = null;
+        ResourcesStorage theResourcesStorage = null;
+        try {
+            theResourcesStorage = this.getResourcesStorage();
+            if (theResourcesStorage == null) {
+                return;
+            }
+            resource = theResourcesStorage.getResource("dal");
+            if (resource == null || !resource.exists()) {
+                return;
+            }
+            DALFile dalFile = DALFile.getDALFile(resource);
+            if (!dalFile.isEmpty()) {
+                dalFile.updateStore(this);
+            }
+        } catch (Throwable ex) {
+            if (resource == null || theResourcesStorage == null) {
+                if (theResourcesStorage == null) {
+                    LOGGER.warn("Can't load DAL resource (resname=null, resurl=null, storage=null)", ex);
+                } else {
+                    LOGGER.warn("Can't load DAL resource (resname=null, resurl=null, storage=" + theResourcesStorage.getClass().getName() + ").", ex);
+                }
+            } else {
+                LOGGER.warn("Can't load DAL resource (resname=" + resource.getName() + ", resurl=" + Objects.toString(resource.getURL()) + ", storage=" + theResourcesStorage.getClass().getName() + ").", ex);
+            }
+        } finally {
+            IOUtils.closeQuietly(resource);
+        }
+    }
+
+    /**
+     * 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
+     */
+    @Override
+    synchronized public void commitChanges() throws DataException {
+        LOGGER.debug("commitChanges of mode: {}", 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());
+                    }
+                    // FIXME: OOhh!!!! no se disparan eventos, VCSGis no se entera de estos cambios.
+                    if (hasStrongChanges) {
+                        validateFeaturesAtFinishEditing();
+                        provider.performChanges(featureManager.getDeleted(),
+                                featureManager.getInserted(),
+                                featureManager.getUpdated(),
+                                removeCalculatedAttributes(featureTypeManager.getFeatureTypesChanged()).iterator());
+                    }
+                    invalidateIndexes();
+                    featureManager = new FeatureManager(this);
+                    featureTypeManager = new FeatureTypeManager(this);
+                    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);
+        }
+    }
+
+    @Override
+    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;
+        }
+    }
+
+    @Override
+    public void beginEditingGroup(String description)
+            throws NeedEditingModeException {
+        checkInEditingMode();
+        commands.startComplex(description);
+    }
+
+    @Override
+    public void endEditingGroup() throws NeedEditingModeException {
+        checkInEditingMode();
+        commands.endComplex();
+    }
+
+    @Override
+    public boolean isAppendModeSupported() {
+        return this.provider.supportsAppendMode();
+    }
+
+    @Override
+    public void export(DataServerExplorer explorer, String provider,
+            NewFeatureStoreParameters params, String name) 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();
+
+            DataStoreParameters openParams = explorer.get(name); //OpenFeatureStoreParameters) manager.createStoreParameters(explorer.getProviderName());
+//            ToolsLocator.getDynObjectManager().copy(params, openParams);
+
+            target = (FeatureStore) manager.openStore(provider, openParams);
+            FeatureType targetType = target.getDefaultFeatureType();
+
+            target.edit(MODE_APPEND);
+            FeatureAttributeDescriptor[] pkattrs = type.getPrimaryKey();
+            if (featureSelection.getSize() > 0) {
+                features = this.getFeatureSelection();
+            } else {
+                if ((pkattrs != null) && (pkattrs.length > 0)) {
+                    FeatureQuery query = createFeatureQuery();
+                    for (FeatureAttributeDescriptor pkattr : pkattrs) {
+                        query.getOrder().add(pkattr.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);
+        }
+    }
+
+    @Override
+    public void copyTo(final FeatureStore target) {
+        boolean finishEditingAtEnd = false;
+        try {
+            if (!target.isEditing() && !target.isAppending()) {
+                finishEditingAtEnd = true;
+                target.edit(MODE_APPEND);
+            }
+            this.accept((Object obj) -> {
+                Feature f_src = (Feature) obj;
+                EditableFeature f_dst = target.createNewFeature(f_src);
+                target.insert(f_dst);
+            });
+            if (finishEditingAtEnd) {
+                target.finishEditing();
+            }
+
+        } catch (Exception ex) {
+            try {
+                if (finishEditingAtEnd) {
+                    target.cancelEditing();
+                }
+            } catch (Exception ex1) {
+            }
+            throw new RuntimeException("Can't copy store.", ex);
+        }
+
+    }
+
+    //
+    // ====================================================================
+    // Obtencion de datos
+    // getDataCollection, getFeatureCollection
+    //
+    @Override
+    public DataSet getDataSet() throws DataException {
+        checkNotInAppendMode();
+        FeatureQuery query
+                = new DefaultFeatureQuery(this.getDefaultFeatureType());
+        return new DefaultFeatureSet(this, query);
+    }
+
+    @Override
+    public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+        checkNotInAppendMode();
+        return new DefaultFeatureSet(this, (FeatureQuery) dataQuery);
+    }
+
+    @Override
+    public void getDataSet(Observer observer) throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet(null, observer);
+    }
+
+    @Override
+    public void getDataSet(DataQuery dataQuery, Observer observer)
+            throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet((FeatureQuery) dataQuery, observer);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet() throws DataException {
+        return this.getFeatureSet((FeatureQuery) null);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(FeatureQuery featureQuery)
+            throws DataException {
+        checkNotInAppendMode();
+        if (featureQuery == null) {
+            featureQuery = new DefaultFeatureQuery(this.getDefaultFeatureType());
+        }
+        return new DefaultFeatureSet(this, featureQuery);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter) throws DataException {
+        return this.getFeatureSet(filter, null, true);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter, String sortBy) throws DataException {
+        return this.getFeatureSet(filter, sortBy, true);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter) throws DataException {
+        return this.getFeatureSet(filter, null, true);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter, String sortBy) throws DataException {
+        return this.getFeatureSet(filter, sortBy, true);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(Expression filter, String sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatureSet(query);
+    }
+
+    @Override
+    public FeatureSet getFeatureSet(String filter, String sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatureSet(query);
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter) {
+        return this.getFeatures(filter, null, true);
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter, String sortBy) {
+        return this.getFeatures(filter, sortBy, true);
+    }
+
+    @Override
+    public List<Feature> getFeatures(String filter, String sortBy, boolean asc) {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatures(query, 0);
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter) {
+        return this.getFeatures(filter, null, true);
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter, String sortBy) {
+        return this.getFeatures(filter, sortBy, true);
+    }
+
+    @Override
+    public List<Feature> getFeatures(Expression filter, String sortBy, boolean asc) {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatures(query, 0);
+    }
+
+    @Override
+    public List<Feature> getFeatures(FeatureQuery query) {
+        return this.getFeatures(query, 0);
+    }
+
+    @Override
+    public List<Feature> getFeatures(FeatureQuery query, int pageSize) {
+        try {
+            if (pageSize <= 0) {
+                pageSize = 100;
+            }
+            FeaturePagingHelper pager = this.dataManager.createFeaturePagingHelper(this, query, pageSize);
+            return pager.asList();
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't create the list of features.", ex);
+        }
+    }
+	
+    @Override
+    public List<Feature> getFeatures() {
+        return this.getFeatures(null, 0);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64() {
+        return this.getFeatures64(null, 0);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter) {
+        return this.getFeatures64(filter, null, true);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(String filter, String sortBy, boolean asc) {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return this.getFeatures64(query, 0);
+    }
+
+    @Override
+    public GetItemWithSizeIsEmptyAndIterator64<Feature> getFeatures64(FeatureQuery query, int pageSize) {
+        try {
+            if (pageSize <= 0) {
+                pageSize = 100;
+            }
+            FeaturePagingHelper pager = this.dataManager.createFeaturePagingHelper(this, query, pageSize);
+            return pager;
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't create the list of features.", ex);
+        }
+    }
+
+    @Override
+    public Feature first() throws DataException {
+        return this.findFirst((FeatureQuery) null);
+    }
+
+    @Override
+    public Feature findFirst(String filter) throws DataException {
+        return this.findFirst(filter, (String) null, true);
+    }
+
+    @Override
+    public Feature findFirst(String filter, String sortBy) throws DataException {
+        return this.findFirst(filter, sortBy, true);
+    }
+
+    @Override
+    public Feature findFirst(String filter, String sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return findFirst(query);
+    }
+
+    @Override
+    public Feature findFirst(String filter, Expression sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return findFirst(query);
+    }
+
+    @Override
+    public Feature findFirst(Expression filter) throws DataException {
+        return this.findFirst(filter, (String) null, true);
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, String sortBy) throws DataException {
+        return this.findFirst(filter, sortBy, true);
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, String sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return findFirst(query);
+    }
+
+    @Override
+    public Feature findFirst(Expression filter, Expression sortBy, boolean asc) throws DataException {
+        FeatureQuery query = this.createFeatureQuery(filter, sortBy, asc);
+        return findFirst(query);
+    }
+
+    @Override
+    public Feature findFirst(FeatureQuery query) throws DataException {
+        if (query == null) {
+            query = this.createFeatureQuery();
+        } else {
+            query = query.getCopy();
+        }
+        query.setLimit(1);
+        final MutableObject<Feature> feature = new MutableObject<>();
+        try {
+            this.accept((Object obj) -> {
+                feature.setValue((Feature) obj);
+                throw new VisitCanceledException();
+            }, query);
+        } catch (VisitCanceledException ex) {
+
+        } catch (DataException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new RuntimeException("", ex);
+        }
+        return feature.getValue();
+    }
+
+    @Override
+    public void accept(Visitor visitor) throws BaseException {
+        this.accept(visitor, null);
+    }
+
+    @Override
+    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()
+                || fType.hasRequiredFields()) {
+            if (featureQuery.hasGroupByColumns()) {
+                return fType.getSubtype(featureQuery.getAttributeNames(), featureQuery.getConstantsAttributeNames(), false);
+            } else {
+                return fType.getSubtype(featureQuery.getAttributeNames(), featureQuery.getConstantsAttributeNames());
+            }
+        }
+        return fType;
+    }
+
+    @Override
+    public void getFeatureSet(Observer observer) throws DataException {
+        checkNotInAppendMode();
+        this.getFeatureSet(null, observer);
+    }
+
+    @Override
+    public void getFeatureSet(FeatureQuery query, Observer observer)
+            throws DataException {
+        class LoadInBackGround implements Runnable {
+
+            private final FeatureStore store;
+            private final FeatureQuery query;
+            private final 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);
+            }
+
+            @Override
+            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();
+    }
+
+    @Override
+    public Feature getFeatureByReference(FeatureReference reference)
+            throws DataException {
+        checkNotInAppendMode();
+        FeatureReferenceProviderServices ref = (FeatureReferenceProviderServices) reference;
+        FeatureType featureType;
+        if (ref.getFeatureTypeId() == null) {
+            featureType = this.getDefaultFeatureType();
+        } else {
+            featureType = this.getFeatureType(ref.getFeatureTypeId());
+        }
+        return this.getFeatureByReference(reference, featureType);
+    }
+
+    @Override
+    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;
+    }
+
+    private void validateFeaturesAtFinishEditing() throws ValidateFeaturesException {
+        try {
+            checkInEditingMode();
+            FeatureType type = this.getDefaultFeatureTypeQuietly();
+            DefaultFeatureRules rules = (DefaultFeatureRules) this.getDefaultFeatureType().getRules();
+
+            int checks = type.isCheckFeaturesAtFinishEditing() ? CHECK_REQUIREDS : 0;
+            checks = rules.isEmpty() ? checks : checks | CHECK_RULES_AT_FINISH;
+            if (checks == 0) {
+                return;
+            }
+
+            Iterator<EditableFeature> features = new ChainedIterator<>(
+                    featureManager.getInsertedFeatures(),
+                    featureManager.getUpdatedFeatures()
+            );
+            while (features.hasNext()) {
+                EditableFeature feature = features.next();
+                rules.validate(feature, checks);
+            }
+        } catch (Exception ex) {
+            throw new ValidateFeaturesException(this.getName(), ex);
+        }
+    }
+
+    @Override
+    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());
+        }
+    }
+
+    @Override
+    public FeatureType getDefaultFeatureTypeQuietly() {
+        try {
+            return this.getDefaultFeatureType();
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    private FeatureType avoidEditable(FeatureType ft) {
+        if (ft instanceof EditableFeatureType) {
+            return ((EditableFeatureType) ft).getNotEditableCopy();
+        } else {
+            return ft;
+        }
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public List getFeatureTypes() throws DataException {
+        try {
+            List types;
+            if (isEditing()) {
+                types = new ArrayList();
+                for (FeatureType type : featureTypes) {
+                    FeatureType typeaux = featureTypeManager.getType(type.getId());
+                    if (typeaux != null) {
+                        types.add(typeaux);
+                    } else {
+                        types.add(type);
+                    }
+                }
+                Iterator 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);
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    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;
+
+    }
+
+    @Override
+    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());
+        }
+    }
+
+    @Override
+    public EditableFeature createNewFeature(boolean defaultValues)
+            throws DataException {
+        return this.createNewFeature(this.getDefaultFeatureType(),
+                defaultValues);
+    }
+
+    @Override
+    public EditableFeature createNewFeature() throws DataException {
+        return this.createNewFeature(this.getDefaultFeatureType(), true);
+    }
+
+    @Override
+    public EditableFeature createNewFeature(Feature defaultValues) throws DataException {
+        FeatureType ft = this.getDefaultFeatureType();
+        EditableFeature f = this.createNewFeature(ft, false);
+        f.copyFrom(defaultValues);
+        return f;
+    }
+
+    @Override
+    public EditableFeature createNewFeature(JsonObject defaultValues) throws DataException {
+        FeatureType ft = this.getDefaultFeatureType();
+        EditableFeature f = this.createNewFeature(ft, false);
+        f.copyFrom(defaultValues);
+        return f;
+    }
+
+    @Override
+    public EditableFeatureType createFeatureType() {
+        EditableFeatureType ftype = new DefaultEditableFeatureType(this);
+        return ftype;
+    }
+
+    @Override
+    public EditableFeatureType createFeatureType(String id) {
+        DefaultEditableFeatureType ftype = new DefaultEditableFeatureType(this, id);
+        return ftype;
+    }
+
+    //
+    // ====================================================================
+    // Index related methods
+    //
+    @Override
+    public FeatureIndexes getIndexes() {
+        return this.indexes;
+    }
+
+    @Override
+    public FeatureIndex createIndex(FeatureType featureType,
+            String attributeName, String indexName) throws DataException {
+        return createIndex(null, featureType, attributeName, indexName);
+    }
+
+    @Override
+    public FeatureIndex createIndex(String indexTypeName,
+            FeatureType featureType, String attributeName, String indexName)
+            throws DataException {
+
+        return createIndex(indexTypeName, featureType, attributeName,
+                indexName, false, null);
+    }
+
+    @Override
+    public FeatureIndex createIndex(FeatureType featureType,
+            String attributeName, String indexName, Observer observer)
+            throws DataException {
+        return createIndex(null, featureType, attributeName, indexName,
+                observer);
+    }
+
+    @Override
+    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;
+        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
+    //
+    @Override
+    public FeatureStoreTransforms getTransforms() {
+        return this.transforms;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery() {
+        return new DefaultFeatureQuery(this.getName());
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter, String sortBy, boolean asc) {
+        FeatureQuery query = null;
+        if (filter != null) {
+            query = this.createFeatureQuery();
+            query.setFilter(filter);
+        }
+        if (!StringUtils.isBlank(sortBy)) {
+            if (query == null) {
+                query = this.createFeatureQuery();
+            }
+            if (StringUtils.containsAny(sortBy, "(", ")")) {
+                throw new IllegalArgumentException("Incorrect sortBy expression");
+            }
+            String[] attrnames;
+            if (sortBy.contains(",")) {
+                attrnames = StringUtils.split(sortBy, ",");
+            } else {
+                attrnames = new String[]{sortBy};
+            }
+            for (String attrname : attrnames) {
+                attrname = attrname.trim();
+                if (attrname.startsWith("-")) {
+                    query.getOrder().add(attrname.substring(1).trim(), false);
+                } else if (attrname.endsWith("-")) {
+                    query.getOrder().add(attrname.substring(0, sortBy.length() - 1).trim(), false);
+                } else if (attrname.startsWith("+")) {
+                    query.getOrder().add(attrname.substring(1).trim(), true);
+                } else if (attrname.endsWith("-")) {
+                    query.getOrder().add(attrname.substring(0, sortBy.length() - 1).trim(), true);
+                } else {
+                    query.getOrder().add(attrname, asc);
+                }
+            }
+        }
+        if (query != null) {
+            query.retrievesAllAttributes();
+        }
+        return query;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter) {
+        return this.createFeatureQuery(
+                ExpressionUtils.createExpression(filter),
+                (String) null,
+                true
+        );
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter) {
+        return this.createFeatureQuery(
+                filter,
+                (String) null,
+                true
+        );
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter, String sortBy, boolean asc) {
+        if (StringUtils.isBlank(filter)) {
+            return this.createFeatureQuery(
+                    (Expression) null,
+                    sortBy,
+                    asc
+            );
+        } else {
+            return this.createFeatureQuery(
+                    ExpressionUtils.createExpression(filter),
+                    sortBy,
+                    asc
+            );
+        }
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(Expression filter, Expression sortBy, boolean asc) {
+        FeatureQuery query = null;
+        if (filter != null) {
+            query = this.createFeatureQuery();
+            query.setFilter(filter);
+        }
+        if (sortBy != null) {
+            if (query == null) {
+                query = this.createFeatureQuery();
+            }
+            query.getOrder().add(sortBy, asc);
+        }
+
+        if (query != null) {
+            query.retrievesAllAttributes();
+        }
+        return query;
+    }
+
+    @Override
+    public FeatureQuery createFeatureQuery(String filter, Expression sortBy, boolean asc) {
+        if (StringUtils.isBlank(filter)) {
+            return this.createFeatureQuery(
+                    (Expression) null,
+                    sortBy,
+                    asc
+            );
+        } else {
+            return this.createFeatureQuery(
+                    ExpressionUtils.createExpression(filter),
+                    sortBy,
+                    asc
+            );
+        }
+    }
+
+    @Override
+    public DataQuery createQuery() {
+        return createFeatureQuery();
+    }
+
+    //
+    // ====================================================================
+    // UndoRedo related methods
+    //
+    @Override
+    public boolean canRedo() {
+        return commands.canRedo();
+    }
+
+    @Override
+    public boolean canUndo() {
+        return commands.canUndo();
+    }
+
+    @Override
+    public void redo(int num) throws RedoException {
+        for (int i = 0; i < num; i++) {
+            redo();
+        }
+    }
+
+    @Override
+    public void undo(int num) throws UndoException {
+        for (int i = 0; i < num; i++) {
+            undo();
+        }
+    }
+
+    //
+    // ====================================================================
+    // Metadata related methods
+    //
+    @Override
+    public Object getMetadataID() {
+        return this.provider.getSourceId();
+    }
+
+    @Override
+    public void delegate(DynObject dynObject) {
+        this.metadata.delegate(dynObject);
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        return this.metadata.getDynClass();
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        try {
+            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);
+        } catch (Exception ex) {
+            LOGGER.debug("Can't retrieve the value of '" + name + "' in store '" + this.getName() + "'.", ex);
+            return null;
+        }
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        if (this.transforms.hasDynValue(name)) {
+            return true;
+        }
+        return this.metadata.hasDynValue(name);
+    }
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        return ((DynObject_v2) this.metadata).hasDynMethod(name);
+    }
+
+    @Override
+    public void implement(DynClass dynClass) {
+        this.metadata.implement(dynClass);
+    }
+
+    @Override
+    public Object invokeDynMethod(String name, Object[] args)
+            throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, name, args);
+    }
+
+    @Override
+    public Object invokeDynMethod(int code, Object[] args)
+            throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, code, args);
+    }
+
+    @Override
+    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()
+     */
+    @Override
+    public Set getMetadataChildren() {
+        return this.metadataChildren;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.gvsig.metadata.Metadata#getMetadataName()
+     */
+    @Override
+    public String getMetadataName() {
+        return this.provider.getProviderName();
+    }
+
+    public FeatureTypeManager getFeatureTypeManager() {
+        return this.featureTypeManager;
+    }
+
+    @Override
+    public long getFeatureCount() throws DataException {
+        if (featureCount == null) {
+            featureCount = this.provider.getFeatureCount();
+        }
+        if (this.isEditing()) {
+            if (this.isAppending()) {
+                try {
+                    throw new IllegalStateException();
+                } catch (IllegalStateException e) {
+                    LOGGER.info("Call DefaultFeatureStore.getFeatureCount editing in mode APPEND", e);
+                }
+                return -1;
+            } else {
+                return featureCount
+                        + this.featureManager.getDeltaSize();
+            }
+        }
+        return featureCount;
+    }
+
+    private Long getTemporalOID() {
+        return this.temporalOid++;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public FeatureProvider getFeatureProviderFromFeature(Feature feature) {
+        return ((DefaultFeature) feature).getData();
+    }
+
+    @Override
+    public DataStore getStore() {
+        return this;
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public FeatureCache getCache() {
+        return cache;
+    }
+
+    @Override
+    public void clear() {
+        if (metadata != null) {
+            metadata.clear();
+        }
+    }
+
+    @Override
+    public String getName() {
+        if (this.provider != null) {
+            return this.provider.getName();
+        }
+        if (this.parameters instanceof HasAFile) {
+            return FilenameUtils.getName(((HasAFile) this.parameters).getFile().getName());
+        }
+        return "unknow";
+    }
+
+    @Override
+    public String getFullName() {
+        try {
+            if (this.provider != null) {
+                return this.provider.getFullName();
+            }
+            if (this.parameters instanceof HasAFile) {
+                return (((HasAFile) this.parameters).getFile().getAbsolutePath());
+            }
+            return null;
+        } catch (Throwable th) {
+            return null;
+        }
+    }
+
+    @Override
+    public String getProviderName() {
+        if (this.provider != null) {
+            return this.provider.getProviderName();
+        }
+        if (this.parameters != null) {
+            return this.parameters.getDataStoreName();
+        }
+        return null;
+
+    }
+
+    @Override
+    public boolean isKnownEnvelope() {
+        return this.provider.isKnownEnvelope();
+    }
+
+    @Override
+    public boolean hasRetrievedFeaturesLimit() {
+        return this.provider.hasRetrievedFeaturesLimit();
+    }
+
+    @Override
+    public int getRetrievedFeaturesLimit() {
+        return this.provider.getRetrievedFeaturesLimit();
+    }
+
+    @Override
+    public Interval getInterval() {
+        if (this.timeSupport != null) {
+            return this.timeSupport.getInterval();
+        }
+        try {
+            FeatureType type = this.getDefaultFeatureType();
+            FeatureAttributeDescriptor attr = type.getDefaultTimeAttribute();
+            if (attr != null) {
+                Interval interval = attr.getInterval();
+                if (interval != null) {
+                    return interval;
+                }
+            }
+        } catch (DataException ex) {
+        }
+        return this.provider.getInterval();
+    }
+
+    @Override
+    public Collection getTimes() {
+        if (this.timeSupport != null) {
+            return this.timeSupport.getTimes();
+        }
+        return this.provider.getTimes();
+    }
+
+    @Override
+    public Collection getTimes(Interval interval) {
+        if (this.timeSupport != null) {
+            return this.timeSupport.getTimes(interval);
+        }
+        return this.provider.getTimes(interval);
+    }
+
+    public void setTimeSupport(FeatureStoreTimeSupport timeSupport) {
+        if (this.isEditing()) {
+            throw new RuntimeException("Can't add time support over attribute '" + timeSupport.getAttributeName() + "' while store is editing.");
+        }
+        if (!this.transforms.isEmpty()) {
+            throw new RuntimeException("Can't add time support over attribute '" + timeSupport.getAttributeName() + "' if has transforms.");
+        }
+        FeatureType ft = this.defaultFeatureType;
+        FeatureAttributeDescriptor attr = ft.getAttributeDescriptor(timeSupport.getRequiredFieldNames()[0]);
+        if (attr == null) {
+            throw new RuntimeException("Can't add time support over attribute '" + timeSupport.getAttributeName() + "', this attribute don't exists.");
+        }
+        EditableFeatureType eft = ft.getEditable();
+        attr = eft.getAttributeDescriptor(timeSupport.getAttributeName());
+        if (attr != null) {
+            if (!(attr.getFeatureAttributeEmulator() instanceof FeatureStoreTimeSupport)) {
+                throw new RuntimeException("Can't add time support, attribute '" + timeSupport.getAttributeName() + "'already exists.");
+            }
+            eft.remove(attr.getName());
+        }
+        EditableFeatureAttributeDescriptor attrTime = eft.add(
+                timeSupport.getAttributeName(),
+                timeSupport.getDataType()
+        );
+        attrTime.setIsTime(true);
+        attrTime.setFeatureAttributeEmulator(timeSupport);
+        eft.setDefaultTimeAttributeName(timeSupport.getAttributeName());
+        this.defaultFeatureType = eft.getNotEditableCopy();
+
+        this.timeSupport = timeSupport;
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    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;
+
+    }
+
+    @Override
+    public Feature getFeature(DynObject dynobject) {
+        if (dynobject instanceof DynObjectFeatureFacade) {
+            Feature f = ((DynObjectFeatureFacade) dynobject).getFeature();
+            return f;
+        }
+        return null;
+    }
+
+    @Override
+    public Iterator iterator() {
+        FeatureSet fset = null;
+        try {
+            fset = this.getFeatureSet();
+            return fset.fastIterator();
+        } catch (DataException ex) {
+            throw new RuntimeException(ex);
+        } finally {
+            DisposeUtils.disposeQuietly(fset);
+        }
+    }
+
+    @Override
+    public long size64() {
+        FeatureSet fset = null;
+        try {
+            fset = this.getFeatureSet();
+            return fset.getSize();
+        } catch (DataException ex) {
+            throw new RuntimeException(ex);
+        } finally {
+            DisposeUtils.disposeQuietly(fset);
+        }
+    }
+
+    @Override
+    public ExpressionBuilder createExpressionBuilder() {
+        ExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+        return builder;
+    }
+
+    @Override
+    public ExpressionBuilder createExpression() {
+        return createExpressionBuilder();
+    }
+
+    public FeatureSet features() throws DataException {
+        // This is to avoid jython to create a property with this name
+        // to access method getFeatures.
+        return this.getFeatureSet();
+    }
+
+    @Override
+    public DataStoreProviderFactory getProviderFactory() {
+        DataStoreProviderFactory factory = dataManager.getStoreProviderFactory(parameters.getDataStoreName());
+        return factory;
+    }
+
+    @Override
+    public void useCache(String providerName, DynObject parameters) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isBroken() {
+        return this.state.isBroken();
+    }
+
+    @Override
+    public Throwable getBreakingsCause() {
+        return this.state.getBreakingsCause();
+    }
+
+    @Override
+    public SpatialIndex wrapSpatialIndex(SpatialIndex index) {
+        FeatureStoreProviderFactory factory = (FeatureStoreProviderFactory) this.getProviderFactory();
+        if (!factory.supportNumericOID()) {
+            return null;
+        }
+        SpatialIndex wrappedIndex = new WrappedSpatialIndex(index, this);
+        return wrappedIndex;
+    }
+
+    @Override
+    public FeatureReference getFeatureReference(String code) {
+        FeatureReference featureReference = FeatureReferenceFactory.createFromCode(this, code);
+        return featureReference;
+    }
+
+    @Override
+    public long getPendingChangesCount() {
+        if (this.featureManager == null) {
+            return 0;
+        }
+        return this.featureManager.getPendingChangesCount();
+    }
+
+    private ResourcesStorage resourcesStorage;
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        if (this.resourcesStorage != null) {
+            return this.resourcesStorage;
+        }
+        ResourcesStorage theResourcesStorage;
+        try {
+            theResourcesStorage = this.provider.getResourcesStorage();
+            if (theResourcesStorage != null) {
+                this.resourcesStorage = theResourcesStorage;
+                return theResourcesStorage;
+            }
+        } catch (Throwable th) {
+
+        }
+        try {
+            DataServerExplorer explorer = this.getExplorer();
+            if (explorer == null) {
+                return null;
+            }
+            theResourcesStorage = explorer.getResourcesStorage(this);
+            explorer.dispose();
+            this.resourcesStorage = theResourcesStorage;
+            return theResourcesStorage;
+        } catch (Exception ex) {
+            LOGGER.trace("Can't create resources storage", ex);
+            return null;
+        }
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        final StoresRepository mainRepository = this.dataManager.getStoresRepository();
+        StoresRepository localRepository = this.provider.getStoresRepository();
+        if (localRepository == null) {
+            return mainRepository;
+        }
+        StoresRepository repository = new BaseStoresRepository(this.getName());
+        repository.addRepository(localRepository);
+        repository.addRepository(mainRepository);
+        return repository;
+    }
+
+    @Override
+    public Feature getSampleFeature() {
+        Feature sampleFeature;
+        try {
+            FeatureSelection theSelection = this.getFeatureSelection();
+            if (theSelection != null && !theSelection.isEmpty()) {
+                sampleFeature = theSelection.first();
+            } else {
+                sampleFeature = this.first();
+            }
+            if (sampleFeature == null) {
+                sampleFeature = this.createNewFeature();
+            }
+        } catch (DataException ex) {
+            return null;
+        }
+        return sampleFeature;
+    }
+
+    @Override
+    public boolean supportReferences() {
+        try {
+            return this.getDefaultFeatureType().supportReferences();
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    @Override
+    public boolean isTemporary() {
+        if (this.provider == null) {
+            return true;
+        }
+        return this.provider.isTemporary();
+    }
+
+    public FeatureType getOriginalFeatureType(FeatureType featureType) {
+        // FIXME this don't work for Store.fType.size() > 1
+        FeatureTypeManager manager = this.featureTypeManager;
+        if (manager == null) {
+            return null;
+        }
+        FeatureType originalFeatureType = manager.getOriginalFeatureType();
+        if (originalFeatureType == null) {
+            return null;
+        }
+        return originalFeatureType.getCopy();
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        if (this.propertiesSupportHelper == null) {
+            return null;
+        }
+        return this.propertiesSupportHelper.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        if (this.propertiesSupportHelper == null) {
+            this.propertiesSupportHelper = new PropertiesSupportHelper();
+        }
+        this.propertiesSupportHelper.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        if (this.propertiesSupportHelper == null) {
+            return Collections.EMPTY_MAP;
+        }
+        return this.propertiesSupportHelper.getProperties();
+    }
+
+    @Override
+    public Feature getOriginalFeature(FeatureReference id) {
+        if (this.featureManager == null) {
+            return null;
+        }
+        return featureManager.getOriginal(id);
+    }
+
+    @Override
+    public Feature getOriginalFeature(Feature feature) {
+        if (feature == null) {
+            return null;
+        }
+        return getOriginalFeature(feature.getReference());
+    }
+
+    @Override
+    public boolean isFeatureModified(FeatureReference id) {
+        if (this.featureManager == null) {
+            return false;
+        }
+        return featureManager.isFeatureModified(id);
+    }
+
+    @Override
+    public boolean isFeatureModified(Feature feature) {
+        if (feature == null) {
+            return false;
+        }
+        return isFeatureModified(feature.getReference());
+    }
+
+    @Override
+    public void setTransaction(DataTransaction transaction) {
+        this.transaction = transaction;
+        if (transaction instanceof DataTransactionServices) {
+            this.provider.setTransaction((DataTransactionServices) transaction);
+        }
+    }
+
+    @Override
+    public DataTransaction getTransaction() {
+        return transaction;
+    }
+
+    @Override
+    public String toString() {
+        try {
+            return String.format("%s %x %s", this.getClass().getSimpleName(), this.hashCode(), this.getFullName());
+        } catch (Exception e) {
+            return super.toString();
+        }
+    }
+
+    public String createUniqueID() {
+        UUID x = UUID.randomUUID();
+        String s = x.toString();
+        return s;
+    }
+
+    @Override
+    public List<FeatureReference> getEditedFeatures() {
+        if( this.featureManager == null ) {
+            return Collections.EMPTY_LIST;
+        }
+        List<FeatureReference> references = this.featureManager.getAddedAndUpdatedFeatures();
+        if( references==null ) {
+            return Collections.EMPTY_LIST;
+        }
+        return references;
+    }
+    
+    public List<FeatureReference> getEditedFeaturesNotValidated() {
+
+        try {
+            if (this.featureManager == null) {
+                return Collections.EMPTY_LIST;
+            }
+            
+            FeatureType type = this.getDefaultFeatureTypeQuietly();
+            DefaultFeatureRules rules = (DefaultFeatureRules) this.getDefaultFeatureType().getRules();
+            
+//            int checks = type.isCheckFeaturesAtFinishEditing() ? CHECK_REQUIREDS | CHECK_BASIC : 0;
+            int checks = CHECK_REQUIREDS | CHECK_BASIC;
+            if(type.isCheckFeaturesAtFinishEditing()){
+                checks = rules.isEmpty() ? checks : checks | CHECK_RULES_AT_FINISH;
+            }
+            if (checks == 0) {
+                return Collections.EMPTY_LIST;
+            }
+            List<FeatureReference> references = this.featureManager
+                    .getAddedAndUpdatedFeaturesNotValidated(rules, checks);
+            if (references == null) {
+                return Collections.EMPTY_LIST;
+            }
+            return references;
+        } catch (DataException ex) {
+            return null;
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,30 @@
+package org.gvsig.fmap.dal.feature.impl.indexes.geometry;
+
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public class GeometryIndexProviderFactory 
+        extends AbstractDataFactory
+        implements DataFactory 
+    {
+
+    private static final String NAME = "GeometryIndex";
+    
+    public GeometryIndexProviderFactory() {
+        super(NAME, "");
+    }
+
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new GeometryIndexProvider();
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProvider.java	(revision 46118)
@@ -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.impl.indexes.geometry;
+
+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.primitive.Envelope;
+import java.util.Iterator;
+import org.apache.commons.collections4.IteratorUtils;
+import org.gvsig.fmap.geom.SpatialIndex;
+
+public class GeometryIndexProvider extends AbstractFeatureIndexProvider {
+	
+	private SpatialIndex index = null;
+		
+	public GeometryIndexProvider() {
+		
+	}
+	
+    @Override
+    public void initialize() {
+    }
+    
+    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;
+    }
+        
+    @Override
+    public void insert(Object value, FeatureReferenceProviderServices fref) {
+        this.index.insert(getEnvelope(value), fref);
+    }
+
+    @Override
+    public void delete(Object value, FeatureReferenceProviderServices fref) {
+        this.index.remove(getEnvelope(value), fref);
+    }
+
+    @Override
+    public List match(Object value) throws FeatureIndexException {
+        return this.index.queryAsList(getEnvelope(value));
+    }
+
+    @Override
+    public List nearest(int count, Object value) {
+        if( !this.index.getFactory().isNearestQuerySupported() ) {
+            throw new UnsupportedOperationException();
+        }
+        if (value == null) {
+            throw new IllegalArgumentException("value is null");
+        }
+
+        Iterator x = this.index.queryNearest(getEnvelope(value), count);
+        return IteratorUtils.toList(x);
+    }
+
+    @Override
+    public boolean isMatchSupported() {
+        return true;
+    }
+
+    @Override
+    public boolean isNearestSupported() {
+        return this.index.getFactory().isNearestQuerySupported();
+    }
+
+    @Override
+    public boolean isNearestToleranceSupported() {
+        return false;
+    }
+
+    @Override
+    public boolean isRangeSupported() {
+        return false;
+    }
+
+    @Override
+    public List nearest(int count, Object value, Object tolerance)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public List range(Object value1, Object value2)
+        throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void clear() throws DataException {
+        this.index.removeAll();
+    }
+ }

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/geometry/GeometryIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ListOfLong.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ListOfLong.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ListOfLong.java	(revision 46118)
@@ -0,0 +1,23 @@
+/*
+ * 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.feature.impl.indexes.memorybasictypes;
+
+import java.util.List;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface ListOfLong extends List<Long>{
+    
+    public long getLong(int index);
+    
+    public boolean removeLong(long o);
+    
+    public boolean add(long e);
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBasicTypesIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBasicTypesIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBasicTypesIndexProvider.java	(revision 46118)
@@ -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.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import java.util.List;
+import java.util.TreeMap;
+
+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.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+
+public class MemoryBasicTypesIndexProvider<T> extends AbstractFeatureIndexProvider {
+
+    private TreeMap<T,ListOfLong> index = null;
+    private final Class<T> classt;
+    private final Coercion coercion;
+
+    public MemoryBasicTypesIndexProvider(Class<T> classt) {
+        this.classt = classt;
+        this.coercion = ToolsLocator.getDataTypesManager().getDataType(classt).getCoercion();
+    }
+
+    @Override
+    public void initialize() {
+        try {
+            this.index = new TreeMap<>();
+        } catch (Exception e) {
+            throw new RuntimeException();
+        }
+    }
+
+    @Override
+    public void delete(Object key_o, FeatureReferenceProviderServices fref) {
+        T key_s = (T) key_o;
+        long oid = (Long) fref.getOID();
+        ListOfLong items = this.index.get(key_s);
+        if( items == null ) {
+            return;
+        }
+        items.remove(oid);
+        if( items.isEmpty() ) {
+            this.index.remove(key_s);
+        }
+    }
+
+    @Override
+    public void insert(Object key_o, FeatureReferenceProviderServices fref) {
+        if (key_o == null) {
+            return;
+        }
+        T key_s = (T) key_o;
+        long oid = (Long) fref.getOID();
+        ListOfLong items = this.index.get(key_s);
+        if( items == null ) {
+            items = new ArrayListOfLong();
+            this.index.put(key_s, items);
+        }
+        items.add(oid);
+    }
+
+    @Override
+    public List match(Object key_o) throws FeatureIndexException {
+        T key_s;
+        try {
+            key_s = (T) this.coercion.coerce(key_o);
+        } catch (CoercionException ex) {
+            return null;
+        }
+        if( !this.index.containsKey(key_s) ) {
+            return null;
+        }
+        ListOfLong items = this.index.get(key_s);
+        if( items == null ) {
+            return null;
+        }
+        return items;
+    }
+
+    public List match(Object min, Object max) {
+        throw new UnsupportedOperationException(
+                "Can't perform this kind of search.");
+    }
+
+    @Override
+    public List nearest(int count, Object value) throws FeatureIndexException {
+        throw new UnsupportedOperationException(
+                "Can't perform this kind of search.");
+    }
+
+    @Override
+    public boolean isMatchSupported() {
+        return true;
+    }
+
+    @Override
+    public boolean isNearestSupported() {
+        return false;
+    }
+
+    @Override
+    public boolean isNearestToleranceSupported() {
+        return false;
+    }
+
+    @Override
+    public boolean isRangeSupported() {
+        return false;
+    }
+
+    @Override
+    public List nearest(int count, Object value, Object tolerance)
+            throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public List range(Object value1, Object value2)
+            throws FeatureIndexException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void clear() throws DataException {
+        this.index.clear();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryLongIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryLongIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryLongIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryLongIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryLongIndexProvider";
+
+    public MemoryLongIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<Long>(Long.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryLongIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.LONG, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBigDecimalIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBigDecimalIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryBigDecimalIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,46 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import java.math.BigDecimal;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryBigDecimalIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryBigDecimalIndexProvider";
+
+    public MemoryBigDecimalIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<>(BigDecimal.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryBigDecimalIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.DECIMAL, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryFloatIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryFloatIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryFloatIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryFloatIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryStringIndexProvider";
+
+    public MemoryFloatIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<String>(String.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryFloatIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.STRING, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryStringIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryStringIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryStringIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryStringIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryStringIndexProvider";
+
+    public MemoryStringIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<String>(String.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryStringIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.STRING, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryDoubleIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryDoubleIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryDoubleIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryDoubleIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryDoubleIndexProvider";
+
+    public MemoryDoubleIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<Double>(Double.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryDoubleIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.DOUBLE, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryIntIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryIntIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/MemoryIntIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,45 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemoryIntIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+    public static final String NAME = "MemoryIntIndexProvider";
+
+    public MemoryIntIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemoryBasicTypesIndexProvider<Integer>(Integer.class);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemoryIntIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.INT, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ArrayListOfLong.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ArrayListOfLong.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memorybasictypes/ArrayListOfLong.java	(revision 46118)
@@ -0,0 +1,1205 @@
+package org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes;
+
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.Objects;
+import java.util.RandomAccess;
+import java.util.Spliterator;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+import java.util.function.UnaryOperator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ArrayListOfLong extends AbstractList<Long>
+        implements ListOfLong, RandomAccess, Cloneable {
+    
+    private static final long serialVersionUID = 8683452581122892189L;
+
+    /**
+     * Default initial capacity.
+     */
+    private static final int DEFAULT_CAPACITY = 10;
+
+    /**
+     * Shared empty array instance used for empty instances.
+     */
+    private static final long[] EMPTY_ELEMENTDATA = {};
+
+    /**
+     * Shared empty array instance used for default sized empty instances. We
+     * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
+     * first element is added.
+     */
+    private static final long[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
+
+    /**
+     * The array buffer into which the elements of the ArrayList are stored.
+     * The capacity of the ArrayList is the length of this array buffer. Any
+     * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
+     * will be expanded to DEFAULT_CAPACITY when the first element is added.
+     */
+    transient long[] elementData; // non-private to simplify nested class access
+
+    /**
+     * The size of the ArrayList (the number of elements it contains).
+     *
+     * @serial
+     */
+    private int size;
+
+    /**
+     * Constructs an empty list with the specified initial capacity.
+     *
+     * @param  initialCapacity  the initial capacity of the list
+     * @throws IllegalArgumentException if the specified initial capacity
+     *         is negative
+     */
+    public ArrayListOfLong(int initialCapacity) {
+        if (initialCapacity > 0) {
+            this.elementData = new long[initialCapacity];
+        } else if (initialCapacity == 0) {
+            this.elementData = EMPTY_ELEMENTDATA;
+        } else {
+            throw new IllegalArgumentException("Illegal Capacity: "+
+                                               initialCapacity);
+        }
+    }
+
+    /**
+     * Constructs an empty list with an initial capacity of ten.
+     */
+    public ArrayListOfLong() {
+        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
+    }
+
+    /**
+     * Constructs a list containing the elements of the specified
+     * collection, in the order they are returned by the collection's
+     * iterator.
+     *
+     * @param c the collection whose elements are to be placed into this list
+     * @throws NullPointerException if the specified collection is null
+     */
+    public ArrayListOfLong(Collection<? extends Long> c) {
+        if ((size = c.size()) != 0) {
+            this.grow(c.size());
+            int i=0;
+            for (Long e : c) {
+                this.elementData[i++] = e;
+            }
+        } else {
+            // replace with empty array.
+            this.elementData = EMPTY_ELEMENTDATA;
+        }
+    }
+
+    /**
+     * Trims the capacity of this <tt>ArrayList</tt> instance to be the
+     * list's current size.  An application can use this operation to minimize
+     * the storage of an <tt>ArrayList</tt> instance.
+     */
+    public void trimToSize() {
+        modCount++;
+        if (size < elementData.length) {
+            elementData = (size == 0)
+              ? EMPTY_ELEMENTDATA
+              : Arrays.copyOf(elementData, size);
+        }
+    }
+
+    /**
+     * Increases the capacity of this <tt>ArrayList</tt> instance, if
+     * necessary, to ensure that it can hold at least the number of elements
+     * specified by the minimum capacity argument.
+     *
+     * @param   minCapacity   the desired minimum capacity
+     */
+    public void ensureCapacity(int minCapacity) {
+        int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
+            // any size if not default element table
+            ? 0
+            // larger than default for default empty table. It's already
+            // supposed to be at default size.
+            : DEFAULT_CAPACITY;
+
+        if (minCapacity > minExpand) {
+            ensureExplicitCapacity(minCapacity);
+        }
+    }
+
+    private static int calculateCapacity(long[] elementData, int minCapacity) {
+        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
+            return Math.max(DEFAULT_CAPACITY, minCapacity);
+        }
+        return minCapacity;
+    }
+
+    private void ensureCapacityInternal(int minCapacity) {
+        ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
+    }
+
+    private void ensureExplicitCapacity(int minCapacity) {
+        modCount++;
+
+        // overflow-conscious code
+        if (minCapacity - elementData.length > 0)
+            grow(minCapacity);
+    }
+
+    /**
+     * The maximum size of array to allocate.
+     * Some VMs reserve some header words in an array.
+     * Attempts to allocate larger arrays may result in
+     * OutOfMemoryError: Requested array size exceeds VM limit
+     */
+    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
+
+    /**
+     * Increases the capacity to ensure that it can hold at least the
+     * number of elements specified by the minimum capacity argument.
+     *
+     * @param minCapacity the desired minimum capacity
+     */
+    private void grow(int minCapacity) {
+        // overflow-conscious code
+        int oldCapacity = elementData.length;
+        int newCapacity = oldCapacity + (oldCapacity >> 1);
+        if (newCapacity - minCapacity < 0)
+            newCapacity = minCapacity;
+        if (newCapacity - MAX_ARRAY_SIZE > 0)
+            newCapacity = hugeCapacity(minCapacity);
+        // minCapacity is usually close to size, so this is a win:
+        elementData = Arrays.copyOf(elementData, newCapacity);
+    }
+
+    private static int hugeCapacity(int minCapacity) {
+        if (minCapacity < 0) // overflow
+            throw new OutOfMemoryError();
+        return (minCapacity > MAX_ARRAY_SIZE) ?
+            Integer.MAX_VALUE :
+            MAX_ARRAY_SIZE;
+    }
+
+    /**
+     * Returns the number of elements in this list.
+     *
+     * @return the number of elements in this list
+     */
+    public int size() {
+        return size;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains no elements.
+     *
+     * @return <tt>true</tt> if this list contains no elements
+     */
+    public boolean isEmpty() {
+        return size == 0;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains the specified element.
+     * More formally, returns <tt>true</tt> if and only if this list contains
+     * at least one element <tt>e</tt> such that
+     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+     *
+     * @param o element whose presence in this list is to be tested
+     * @return <tt>true</tt> if this list contains the specified element
+     */
+    public boolean contains(Object o) {
+        return indexOf(o) >= 0;
+    }
+
+    /**
+     * Returns the index of the first occurrence of the specified element
+     * in this list, or -1 if this list does not contain the element.
+     * More formally, returns the lowest index <tt>i</tt> such that
+     * <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+     * or -1 if there is no such index.
+     */
+    public int indexOf(Object o) {
+        if (o == null) {
+            return -1;
+        } else {
+            for (int i = 0; i < size; i++)
+                if (o.equals(elementData[i]))
+                    return i;
+        }
+        return -1;
+    }
+
+    /**
+     * Returns the index of the last occurrence of the specified element
+     * in this list, or -1 if this list does not contain the element.
+     * More formally, returns the highest index <tt>i</tt> such that
+     * <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
+     * or -1 if there is no such index.
+     */
+    public int lastIndexOf(Object o) {
+        if (o == null) {
+            return -1;
+        } else {
+            for (int i = size-1; i >= 0; i--)
+                if (o.equals(elementData[i]))
+                    return i;
+        }
+        return -1;
+    }
+
+    /**
+     * Returns a shallow copy of this <tt>ArrayList</tt> instance.  (The
+     * elements themselves are not copied.)
+     *
+     * @return a clone of this <tt>ArrayList</tt> instance
+     */
+    public Object clone() {
+        try {
+            ArrayListOfLong v = (ArrayListOfLong) super.clone();
+            v.elementData = Arrays.copyOf(elementData, size);
+            v.modCount = 0;
+            return v;
+        } catch (CloneNotSupportedException e) {
+            // this shouldn't happen, since we are Cloneable
+            throw new InternalError(e);
+        }
+    }
+
+    @Override
+    public Long[] toArray() {
+        return toArray((Long[])null);
+    }
+
+    public Long[] toArray(Long[] a) {
+        if (a==null || a.length < size) {
+            a = new Long[size];
+        }
+        for (int i = 0; i < size; i++) {
+            a[i] = this.elementData[i];            
+        }
+        return a;
+    }
+
+    // Positional Access Operations
+
+    @SuppressWarnings("unchecked")
+    long elementData(int index) {
+        return elementData[index];
+    }
+
+    public Long get(int index) {
+        return this.getLong(index);
+    }
+    
+    public long getLong(int index) {
+        rangeCheck(index);
+
+        return elementData(index);
+    }
+
+    /**
+     * Replaces the element at the specified position in this list with
+     * the specified element.
+     *
+     * @param index index of the element to replace
+     * @param element element to be stored at the specified position
+     * @return the element previously at the specified position
+     * @throws IndexOutOfBoundsException {@inheritDoc}
+     */
+    public Long set(int index, Long element) {
+        rangeCheck(index);
+
+        Long oldValue = elementData(index);
+        elementData[index] = element;
+        return oldValue;
+    }
+
+    public boolean add(Long e) {
+        return this.add((long)e);
+    }
+    
+    public boolean add(long e) {
+        ensureCapacityInternal(size + 1);  // Increments modCount!!
+        elementData[size++] = e;
+        return true;
+    }
+
+    public void add(int index, Long element) {
+        this.add(index, (long)element);
+    }
+    
+    public void add(int index, long element) {
+        rangeCheckForAdd(index);
+
+        ensureCapacityInternal(size + 1);  // Increments modCount!!
+        System.arraycopy(elementData, index, elementData, index + 1,
+                         size - index);
+        elementData[index] = element;
+        size++;
+    }
+
+    public Long remove(int index) {
+        rangeCheck(index);
+
+        modCount++;
+        Long oldValue = elementData(index);
+
+        int numMoved = size - index - 1;
+        if (numMoved > 0)
+            System.arraycopy(elementData, index+1, elementData, index,
+                             numMoved);
+        return oldValue;
+    }
+
+    public boolean remove(Object o) {
+        if (o == null) {
+            return true;
+        }
+        return this.removeLong((long)o);
+    }
+    
+    public boolean removeLong(long o) {
+        for (int index = 0; index < size; index++)
+            if (o == elementData[index]) {
+                this.remove(index);
+                return true;
+            }
+        return false;
+    }
+
+    /*
+     * Private remove method that skips bounds checking and does not
+     * return the value removed.
+     */
+    private void fastRemove(int index) {
+        modCount++;
+        int numMoved = size - index - 1;
+        if (numMoved > 0)
+            System.arraycopy(elementData, index+1, elementData, index,
+                             numMoved);
+    }
+
+    /**
+     * Removes all of the elements from this list.  The list will
+     * be empty after this call returns.
+     */
+    public void clear() {
+        modCount++;
+        size = 0;
+    }
+
+    /**
+     * Appends all of the elements in the specified collection to the end of
+     * this list, in the order that they are returned by the
+     * specified collection's Iterator.  The behavior of this operation is
+     * undefined if the specified collection is modified while the operation
+     * is in progress.  (This implies that the behavior of this call is
+     * undefined if the specified collection is this list, and this
+     * list is nonempty.)
+     *
+     * @param c collection containing elements to be added to this list
+     * @return <tt>true</tt> if this list changed as a result of the call
+     * @throws NullPointerException if the specified collection is null
+     */
+    public boolean addAll(Collection<? extends Long> c) {
+        Object[] a = c.toArray();
+        int numNew = a.length;
+        ensureCapacityInternal(size + numNew);  // Increments modCount
+        System.arraycopy(a, 0, elementData, size, numNew);
+        size += numNew;
+        return numNew != 0;
+    }
+
+    /**
+     * Inserts all of the elements in the specified collection into this
+     * list, starting at the specified position.  Shifts the element
+     * currently at that position (if any) and any subsequent elements to
+     * the right (increases their indices).  The new elements will appear
+     * in the list in the order that they are returned by the
+     * specified collection's iterator.
+     *
+     * @param index index at which to insert the first element from the
+     *              specified collection
+     * @param c collection containing elements to be added to this list
+     * @return <tt>true</tt> if this list changed as a result of the call
+     * @throws IndexOutOfBoundsException {@inheritDoc}
+     * @throws NullPointerException if the specified collection is null
+     */
+    public boolean addAll(int index, Collection<? extends Long> c) {
+        rangeCheckForAdd(index);
+
+        Object[] a = c.toArray();
+        int numNew = a.length;
+        ensureCapacityInternal(size + numNew);  // Increments modCount
+
+        int numMoved = size - index;
+        if (numMoved > 0)
+            System.arraycopy(elementData, index, elementData, index + numNew,
+                             numMoved);
+
+        System.arraycopy(a, 0, elementData, index, numNew);
+        size += numNew;
+        return numNew != 0;
+    }
+
+    /**
+     * Removes from this list all of the elements whose index is between
+     * {@code fromIndex}, inclusive, and {@code toIndex}, exclusive.
+     * Shifts any succeeding elements to the left (reduces their index).
+     * This call shortens the list by {@code (toIndex - fromIndex)} elements.
+     * (If {@code toIndex==fromIndex}, this operation has no effect.)
+     *
+     * @throws IndexOutOfBoundsException if {@code fromIndex} or
+     *         {@code toIndex} is out of range
+     *         ({@code fromIndex < 0 ||
+     *          fromIndex >= size() ||
+     *          toIndex > size() ||
+     *          toIndex < fromIndex})
+     */
+    protected void removeRange(int fromIndex, int toIndex) {
+        modCount++;
+        int numMoved = size - toIndex;
+        System.arraycopy(elementData, toIndex, elementData, fromIndex,
+                         numMoved);
+        int newSize = size - (toIndex-fromIndex);
+        size = newSize;
+    }
+
+    /**
+     * Checks if the given index is in range.  If not, throws an appropriate
+     * runtime exception.  This method does *not* check if the index is
+     * negative: It is always used immediately prior to an array access,
+     * which throws an ArrayIndexOutOfBoundsException if index is negative.
+     */
+    private void rangeCheck(int index) {
+        if (index >= size)
+            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
+    }
+
+    /**
+     * A version of rangeCheck used by add and addAll.
+     */
+    private void rangeCheckForAdd(int index) {
+        if (index > size || index < 0)
+            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
+    }
+
+    /**
+     * Constructs an IndexOutOfBoundsException detail message.
+     * Of the many possible refactorings of the error handling code,
+     * this "outlining" performs best with both server and client VMs.
+     */
+    private String outOfBoundsMsg(int index) {
+        return "Index: "+index+", Size: "+size;
+    }
+
+    /**
+     * Removes from this list all of its elements that are contained in the
+     * specified collection.
+     *
+     * @param c collection containing elements to be removed from this list
+     * @return {@code true} if this list changed as a result of the call
+     * @throws ClassCastException if the class of an element of this list
+     *         is incompatible with the specified collection
+     * (<a href="Collection.html#optional-restrictions">optional</a>)
+     * @throws NullPointerException if this list contains a null element and the
+     *         specified collection does not permit null elements
+     * (<a href="Collection.html#optional-restrictions">optional</a>),
+     *         or if the specified collection is null
+     * @see Collection#contains(Object)
+     */
+    public boolean removeAll(Collection<?> c) {
+        Objects.requireNonNull(c);
+        return batchRemove(c, false);
+    }
+
+    /**
+     * Retains only the elements in this list that are contained in the
+     * specified collection.  In other words, removes from this list all
+     * of its elements that are not contained in the specified collection.
+     *
+     * @param c collection containing elements to be retained in this list
+     * @return {@code true} if this list changed as a result of the call
+     * @throws ClassCastException if the class of an element of this list
+     *         is incompatible with the specified collection
+     * (<a href="Collection.html#optional-restrictions">optional</a>)
+     * @throws NullPointerException if this list contains a null element and the
+     *         specified collection does not permit null elements
+     * (<a href="Collection.html#optional-restrictions">optional</a>),
+     *         or if the specified collection is null
+     * @see Collection#contains(Object)
+     */
+    public boolean retainAll(Collection<?> c) {
+        Objects.requireNonNull(c);
+        return batchRemove(c, true);
+    }
+
+    private boolean batchRemove(Collection<?> c, boolean complement) {
+        final long[] elementData = this.elementData;
+        int r = 0, w = 0;
+        boolean modified = false;
+        try {
+            for (; r < size; r++)
+                if (c.contains(elementData[r]) == complement)
+                    elementData[w++] = elementData[r];
+        } finally {
+            // Preserve behavioral compatibility with AbstractCollection,
+            // even if c.contains() throws.
+            if (r != size) {
+                System.arraycopy(elementData, r,
+                                 elementData, w,
+                                 size - r);
+                w += size - r;
+            }
+            if (w != size) {
+                modCount += size - w;
+                size = w;
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
+    /**
+     * Returns a list iterator over the elements in this list (in proper
+     * sequence), starting at the specified position in the list.
+     * The specified index indicates the first element that would be
+     * returned by an initial call to {@link ListIterator#next next}.
+     * An initial call to {@link ListIterator#previous previous} would
+     * return the element with the specified index minus one.
+     *
+     * <p>The returned list iterator is <a href="#fail-fast"><i>fail-fast</i></a>.
+     *
+     * @throws IndexOutOfBoundsException {@inheritDoc}
+     */
+    public ListIterator<Long> listIterator(int index) {
+        if (index < 0 || index > size)
+            throw new IndexOutOfBoundsException("Index: "+index);
+        return new ListItr(index);
+    }
+
+    /**
+     * Returns a list iterator over the elements in this list (in proper
+     * sequence).
+     *
+     * <p>The returned list iterator is <a href="#fail-fast"><i>fail-fast</i></a>.
+     *
+     * @see #listIterator(int)
+     */
+    public ListIterator<Long> listIterator() {
+        return new ListItr(0);
+    }
+
+    /**
+     * Returns an iterator over the elements in this list in proper sequence.
+     *
+     * <p>The returned iterator is <a href="#fail-fast"><i>fail-fast</i></a>.
+     *
+     * @return an iterator over the elements in this list in proper sequence
+     */
+    public Iterator<Long> iterator() {
+        return new Itr();
+    }
+
+    /**
+     * An optimized version of AbstractList.Itr
+     */
+    private class Itr implements Iterator<Long> {
+        int cursor;       // index of next element to return
+        int lastRet = -1; // index of last element returned; -1 if no such
+        int expectedModCount = modCount;
+
+        Itr() {}
+
+        public boolean hasNext() {
+            return cursor != size;
+        }
+
+        @SuppressWarnings("unchecked")
+        public Long next() {
+            checkForComodification();
+            int i = cursor;
+            if (i >= size)
+                throw new NoSuchElementException();
+            long[] elementData = ArrayListOfLong.this.elementData;
+            if (i >= elementData.length)
+                throw new ConcurrentModificationException();
+            cursor = i + 1;
+            return (Long) elementData[lastRet = i];
+        }
+
+        public void remove() {
+            if (lastRet < 0)
+                throw new IllegalStateException();
+            checkForComodification();
+
+            try {
+                ArrayListOfLong.this.remove(lastRet);
+                cursor = lastRet;
+                lastRet = -1;
+                expectedModCount = modCount;
+            } catch (IndexOutOfBoundsException ex) {
+                throw new ConcurrentModificationException();
+            }
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public void forEachRemaining(Consumer<? super Long> consumer) {
+            Objects.requireNonNull(consumer);
+            final int size = ArrayListOfLong.this.size;
+            int i = cursor;
+            if (i >= size) {
+                return;
+            }
+            final long[] elementData = ArrayListOfLong.this.elementData;
+            if (i >= elementData.length) {
+                throw new ConcurrentModificationException();
+            }
+            while (i != size && modCount == expectedModCount) {
+                consumer.accept((Long) elementData[i++]);
+            }
+            // update once at end of iteration to reduce heap write traffic
+            cursor = i;
+            lastRet = i - 1;
+            checkForComodification();
+        }
+
+        final void checkForComodification() {
+            if (modCount != expectedModCount)
+                throw new ConcurrentModificationException();
+        }
+    }
+
+    /**
+     * An optimized version of AbstractList.ListItr
+     */
+    private class ListItr extends Itr implements ListIterator<Long> {
+        ListItr(int index) {
+            super();
+            cursor = index;
+        }
+
+        public boolean hasPrevious() {
+            return cursor != 0;
+        }
+
+        public int nextIndex() {
+            return cursor;
+        }
+
+        public int previousIndex() {
+            return cursor - 1;
+        }
+
+        @SuppressWarnings("unchecked")
+        public Long previous() {
+            checkForComodification();
+            int i = cursor - 1;
+            if (i < 0)
+                throw new NoSuchElementException();
+            long[] elementData = ArrayListOfLong.this.elementData;
+            if (i >= elementData.length)
+                throw new ConcurrentModificationException();
+            cursor = i;
+            return (Long) elementData[lastRet = i];
+        }
+
+        public void set(Long e) {
+            if (lastRet < 0)
+                throw new IllegalStateException();
+            checkForComodification();
+
+            try {
+                ArrayListOfLong.this.set(lastRet, e);
+            } catch (IndexOutOfBoundsException ex) {
+                throw new ConcurrentModificationException();
+            }
+        }
+
+        public void add(Long e) {
+            checkForComodification();
+
+            try {
+                int i = cursor;
+                ArrayListOfLong.this.add(i, e);
+                cursor = i + 1;
+                lastRet = -1;
+                expectedModCount = modCount;
+            } catch (IndexOutOfBoundsException ex) {
+                throw new ConcurrentModificationException();
+            }
+        }
+    }
+
+    /**
+     * Returns a view of the portion of this list between the specified
+     * {@code fromIndex}, inclusive, and {@code toIndex}, exclusive.  (If
+     * {@code fromIndex} and {@code toIndex} are equal, the returned list is
+     * empty.)  The returned list is backed by this list, so non-structural
+     * changes in the returned list are reflected in this list, and vice-versa.
+     * The returned list supports all of the optional list operations.
+     *
+     * <p>This method eliminates the need for explicit range operations (of
+     * the sort that commonly exist for arrays).  Any operation that expects
+     * a list can be used as a range operation by passing a subList view
+     * instead of a whole list.  For example, the following idiom
+     * removes a range of elements from a list:
+     * <pre>
+     *      list.subList(from, to).clear();
+     * </pre>
+     * Similar idioms may be constructed for {@link #indexOf(Object)} and
+     * {@link #lastIndexOf(Object)}, and all of the algorithms in the
+     * {@link Collections} class can be applied to a subList.
+     *
+     * <p>The semantics of the list returned by this method become undefined if
+     * the backing list (i.e., this list) is <i>structurally modified</i> in
+     * any way other than via the returned list.  (Structural modifications are
+     * those that change the size of this list, or otherwise perturb it in such
+     * a fashion that iterations in progress may yield incorrect results.)
+     *
+     * @throws IndexOutOfBoundsException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */
+    public List<Long> subList(int fromIndex, int toIndex) {
+        subListRangeCheck(fromIndex, toIndex, size);
+        return new SubList(this, 0, fromIndex, toIndex);
+    }
+
+    static void subListRangeCheck(int fromIndex, int toIndex, int size) {
+        if (fromIndex < 0)
+            throw new IndexOutOfBoundsException("fromIndex = " + fromIndex);
+        if (toIndex > size)
+            throw new IndexOutOfBoundsException("toIndex = " + toIndex);
+        if (fromIndex > toIndex)
+            throw new IllegalArgumentException("fromIndex(" + fromIndex +
+                                               ") > toIndex(" + toIndex + ")");
+    }
+
+    private class SubList extends ArrayListOfLong implements RandomAccess {
+        private final ArrayListOfLong parent;
+        private final int parentOffset;
+        private final int offset;
+        int size;
+
+        SubList(ArrayListOfLong parent,
+                int offset, int fromIndex, int toIndex) {
+            this.parent = parent;
+            this.parentOffset = fromIndex;
+            this.offset = offset + fromIndex;
+            this.size = toIndex - fromIndex;
+            this.modCount = ArrayListOfLong.this.modCount;
+        }
+
+        public Long set(int index, Long e) {
+            rangeCheck(index);
+            checkForComodification();
+            Long oldValue = ArrayListOfLong.this.elementData(offset + index);
+            ArrayListOfLong.this.elementData[offset + index] = e;
+            return oldValue;
+        }
+
+        public Long get(int index) {
+            rangeCheck(index);
+            checkForComodification();
+            return ArrayListOfLong.this.elementData(offset + index);
+        }
+
+        public int size() {
+            checkForComodification();
+            return this.size;
+        }
+
+        public void add(int index, Long e) {
+            rangeCheckForAdd(index);
+            checkForComodification();
+            parent.add(parentOffset + index, e);
+            this.modCount = parent.modCount;
+            this.size++;
+        }
+
+        public Long remove(int index) {
+            rangeCheck(index);
+            checkForComodification();
+            Long result = parent.remove(parentOffset + index);
+            this.modCount = parent.modCount;
+            this.size--;
+            return result;
+        }
+
+        protected void removeRange(int fromIndex, int toIndex) {
+            checkForComodification();
+            parent.removeRange(parentOffset + fromIndex,
+                               parentOffset + toIndex);
+            this.modCount = parent.modCount;
+            this.size -= toIndex - fromIndex;
+        }
+
+        public boolean addAll(Collection<? extends Long> c) {
+            return addAll(this.size, c);
+        }
+
+        public boolean addAll(int index, Collection<? extends Long> c) {
+            rangeCheckForAdd(index);
+            int cSize = c.size();
+            if (cSize==0)
+                return false;
+
+            checkForComodification();
+            parent.addAll(parentOffset + index, c);
+            this.modCount = parent.modCount;
+            this.size += cSize;
+            return true;
+        }
+
+        public Iterator<Long> iterator() {
+            return listIterator();
+        }
+
+        public ListIterator<Long> listIterator(final int index) {
+            checkForComodification();
+            rangeCheckForAdd(index);
+            final int offset = this.offset;
+
+            return new ListIterator<Long>() {
+                int cursor = index;
+                int lastRet = -1;
+                int expectedModCount = ArrayListOfLong.this.modCount;
+
+                public boolean hasNext() {
+                    return cursor != SubList.this.size;
+                }
+
+                @SuppressWarnings("unchecked")
+                public Long next() {
+                    checkForComodification();
+                    int i = cursor;
+                    if (i >= SubList.this.size)
+                        throw new NoSuchElementException();
+                    long[] elementData = ArrayListOfLong.this.elementData;
+                    if (offset + i >= elementData.length)
+                        throw new ConcurrentModificationException();
+                    cursor = i + 1;
+                    return (Long) elementData[offset + (lastRet = i)];
+                }
+
+                public boolean hasPrevious() {
+                    return cursor != 0;
+                }
+
+                @SuppressWarnings("unchecked")
+                public Long previous() {
+                    checkForComodification();
+                    int i = cursor - 1;
+                    if (i < 0)
+                        throw new NoSuchElementException();
+                    long[] elementData = ArrayListOfLong.this.elementData;
+                    if (offset + i >= elementData.length)
+                        throw new ConcurrentModificationException();
+                    cursor = i;
+                    return (Long) elementData[offset + (lastRet = i)];
+                }
+
+                @SuppressWarnings("unchecked")
+                public void forEachRemaining(Consumer<? super Long> consumer) {
+                    Objects.requireNonNull(consumer);
+                    final int size = SubList.this.size;
+                    int i = cursor;
+                    if (i >= size) {
+                        return;
+                    }
+                    final long[] elementData = ArrayListOfLong.this.elementData;
+                    if (offset + i >= elementData.length) {
+                        throw new ConcurrentModificationException();
+                    }
+                    while (i != size && modCount == expectedModCount) {
+                        consumer.accept((Long) elementData[offset + (i++)]);
+                    }
+                    // update once at end of iteration to reduce heap write traffic
+                    lastRet = cursor = i;
+                    checkForComodification();
+                }
+
+                public int nextIndex() {
+                    return cursor;
+                }
+
+                public int previousIndex() {
+                    return cursor - 1;
+                }
+
+                public void remove() {
+                    if (lastRet < 0)
+                        throw new IllegalStateException();
+                    checkForComodification();
+
+                    try {
+                        SubList.this.remove(lastRet);
+                        cursor = lastRet;
+                        lastRet = -1;
+                        expectedModCount = ArrayListOfLong.this.modCount;
+                    } catch (IndexOutOfBoundsException ex) {
+                        throw new ConcurrentModificationException();
+                    }
+                }
+
+                public void set(Long e) {
+                    if (lastRet < 0)
+                        throw new IllegalStateException();
+                    checkForComodification();
+
+                    try {
+                        ArrayListOfLong.this.set(offset + lastRet, e);
+                    } catch (IndexOutOfBoundsException ex) {
+                        throw new ConcurrentModificationException();
+                    }
+                }
+
+                public void add(Long e) {
+                    checkForComodification();
+
+                    try {
+                        int i = cursor;
+                        SubList.this.add(i, e);
+                        cursor = i + 1;
+                        lastRet = -1;
+                        expectedModCount = ArrayListOfLong.this.modCount;
+                    } catch (IndexOutOfBoundsException ex) {
+                        throw new ConcurrentModificationException();
+                    }
+                }
+
+                final void checkForComodification() {
+                    if (expectedModCount != ArrayListOfLong.this.modCount)
+                        throw new ConcurrentModificationException();
+                }
+            };
+        }
+
+        public List<Long> subList(int fromIndex, int toIndex) {
+            subListRangeCheck(fromIndex, toIndex, size);
+            return new SubList(this, offset, fromIndex, toIndex);
+        }
+
+        private void rangeCheck(int index) {
+            if (index < 0 || index >= this.size)
+                throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
+        }
+
+        private void rangeCheckForAdd(int index) {
+            if (index < 0 || index > this.size)
+                throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
+        }
+
+        private String outOfBoundsMsg(int index) {
+            return "Index: "+index+", Size: "+this.size;
+        }
+
+        private void checkForComodification() {
+            if (ArrayListOfLong.this.modCount != this.modCount)
+                throw new ConcurrentModificationException();
+        }
+
+        public Spliterator<Long> spliterator() {
+            checkForComodification();
+            return new ArrayListSpliterator(ArrayListOfLong.this, offset,
+                                               offset + this.size, this.modCount);
+        }
+    }
+
+    @Override
+    public void forEach(Consumer<? super Long> action) {
+        Objects.requireNonNull(action);
+        final int expectedModCount = modCount;
+        @SuppressWarnings("unchecked")
+        final long[] elementData = this.elementData;
+        final int size = this.size;
+        for (int i=0; modCount == expectedModCount && i < size; i++) {
+            action.accept(elementData[i]);
+        }
+        if (modCount != expectedModCount) {
+            throw new ConcurrentModificationException();
+        }
+    }
+
+    /**
+     * Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
+     * and <em>fail-fast</em> {@link Spliterator} over the elements in this
+     * list.
+     *
+     * <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
+     * {@link Spliterator#SUBSIZED}, and {@link Spliterator#ORDERED}.
+     * Overriding implementations should document the reporting of additional
+     * characteristic values.
+     *
+     * @return a {@code Spliterator} over the elements in this list
+     * @since 1.8
+     */
+    @Override
+    public Spliterator<Long> spliterator() {
+        return new ArrayListSpliterator(this, 0, -1, 0);
+    }
+
+    static final class ArrayListSpliterator implements Spliterator<Long> {
+        private final ArrayListOfLong list;
+        private int index; // current index, modified on advance/split
+        private int fence; // -1 until used; then one past last index
+        private int expectedModCount; // initialized when fence set
+
+        /** Create new spliterator covering the given  range */
+        ArrayListSpliterator(ArrayListOfLong list, int origin, int fence,
+                             int expectedModCount) {
+            this.list = list; // OK if null unless traversed
+            this.index = origin;
+            this.fence = fence;
+            this.expectedModCount = expectedModCount;
+        }
+
+        private int getFence() { // initialize fence to size on first use
+            int hi; // (a specialized variant appears in method forEach)
+            ArrayListOfLong lst;
+            if ((hi = fence) < 0) {
+                if ((lst = list) == null)
+                    hi = fence = 0;
+                else {
+                    expectedModCount = lst.modCount;
+                    hi = fence = lst.size;
+                }
+            }
+            return hi;
+        }
+
+        public ArrayListSpliterator trySplit() {
+            int hi = getFence(), lo = index, mid = (lo + hi) >>> 1;
+            return (lo >= mid) ? null : // divide range in half unless too small
+                new ArrayListSpliterator(list, lo, index = mid,
+                                            expectedModCount);
+        }
+
+        public boolean tryAdvance(Consumer<? super Long> action) {
+            if (action == null)
+                throw new NullPointerException();
+            int hi = getFence(), i = index;
+            if (i < hi) {
+                index = i + 1;
+                Long e = list.elementData[i];
+                action.accept(e);
+                if (list.modCount != expectedModCount)
+                    throw new ConcurrentModificationException();
+                return true;
+            }
+            return false;
+        }
+
+        public void forEachRemaining(Consumer<? super Long> action) {
+            int i, hi, mc; // hoist accesses and checks from loop
+            ArrayListOfLong lst; long[] a;
+            if (action == null)
+                throw new NullPointerException();
+            if ((lst = list) != null && (a = lst.elementData) != null) {
+                if ((hi = fence) < 0) {
+                    mc = lst.modCount;
+                    hi = lst.size;
+                }
+                else
+                    mc = expectedModCount;
+                if ((i = index) >= 0 && (index = hi) <= a.length) {
+                    for (; i < hi; ++i) {
+                        action.accept(a[i]);
+                    }
+                    if (lst.modCount == mc)
+                        return;
+                }
+            }
+            throw new ConcurrentModificationException();
+        }
+
+        public long estimateSize() {
+            return (long) (getFence() - index);
+        }
+
+        public int characteristics() {
+            return Spliterator.ORDERED | Spliterator.SIZED | Spliterator.SUBSIZED;
+        }
+    }
+
+    @Override
+    public boolean removeIf(Predicate<? super Long> filter) {
+        Objects.requireNonNull(filter);
+        // figure out which elements are to be removed
+        // any exception thrown from the filter predicate at this stage
+        // will leave the collection unmodified
+        int removeCount = 0;
+        final BitSet removeSet = new BitSet(size);
+        final int expectedModCount = modCount;
+        final int size = this.size;
+        for (int i=0; modCount == expectedModCount && i < size; i++) {
+            @SuppressWarnings("unchecked")
+            final Long element = (Long) elementData[i];
+            if (filter.test(element)) {
+                removeSet.set(i);
+                removeCount++;
+            }
+        }
+        if (modCount != expectedModCount) {
+            throw new ConcurrentModificationException();
+        }
+
+        // shift surviving elements left over the spaces left by removed elements
+        final boolean anyToRemove = removeCount > 0;
+        if (anyToRemove) {
+            final int newSize = size - removeCount;
+            for (int i=0, j=0; (i < size) && (j < newSize); i++, j++) {
+                i = removeSet.nextClearBit(i);
+                elementData[j] = elementData[i];
+            }
+            this.size = newSize;
+            if (modCount != expectedModCount) {
+                throw new ConcurrentModificationException();
+            }
+            modCount++;
+        }
+
+        return anyToRemove;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void replaceAll(UnaryOperator<Long> operator) {
+        Objects.requireNonNull(operator);
+        final int expectedModCount = modCount;
+        final int size = this.size;
+        for (int i=0; modCount == expectedModCount && i < size; i++) {
+            elementData[i] = operator.apply((Long) elementData[i]);
+        }
+        if (modCount != expectedModCount) {
+            throw new ConcurrentModificationException();
+        }
+        modCount++;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void sort(Comparator<? super Long> c) {
+        final int expectedModCount = modCount;
+        Arrays.sort(elementData);
+//        Arrays.sort(elementData, 0, size, c);
+        if (modCount != expectedModCount) {
+            throw new ConcurrentModificationException();
+        }
+        modCount++;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProvider.java	(revision 46118)
@@ -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.dal.feature.impl.indexes.memoryspatial;
+
+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 {
+
+	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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/memoryspatial/MemorySpatialIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,49 @@
+
+package org.gvsig.fmap.dal.feature.impl.indexes.memoryspatial;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.impl.indexes.jsir.JSIRSpatialIndexProvider;
+import org.gvsig.fmap.dal.feature.impl.indexes.jsir.JSIRSpatialIndexProviderFactory;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+
+public class MemorySpatialIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+
+    public static final String NAME = "MemorySpatialIndexProvider";
+	
+    public MemorySpatialIndexProviderFactory() {
+        super(NAME, "");
+    }
+    
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new MemorySpatialIndexProvider();
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new MemorySpatialIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.GEOMETRY, 
+                    NAME
+            );
+        }        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProvider.java	(revision 46118)
@@ -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.dal.feature.impl.indexes.jsir;
+
+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 {
+
+	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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/indexes/jsir/JSIRSpatialIndexProviderFactory.java	(revision 46118)
@@ -0,0 +1,44 @@
+package org.gvsig.fmap.dal.feature.impl.indexes.jsir;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public class JSIRSpatialIndexProviderFactory 
+    extends AbstractDataFactory
+    implements DataFactory 
+    {
+
+    public static final String NAME = "JSIRSpatialIndexProvider";
+	
+    public JSIRSpatialIndexProviderFactory() {
+        super(NAME, "");
+    }
+
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services services) {
+        return new JSIRSpatialIndexProvider();
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    public static void selfRegister() {
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+
+        if( !dataManager.getFeatureIndexRegister().exits(NAME) ) {
+            dataManager.getFeatureIndexRegister().register(new JSIRSpatialIndexProviderFactory());
+            dataManager.setDefaultFeatureIndexProviderName(
+                    DataTypes.GEOMETRY, 
+                    NAME
+            );
+        }        
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectFeatureFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectFeatureFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectFeatureFacade.java	(revision 46118)
@@ -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.dynobjectutils;
+
+import java.util.Map;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynField_v2;
+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, FacadeOfAFeature {
+
+    private static FeatureTypeDefinitionsManager featureTypeDefinitionsManager = null;
+
+    private Feature feature;
+    private DynClass dynClass;
+    private EditableFeature editable;
+
+    private final Object lock = new Object();
+
+    /**
+     * Empty constructor.
+     */
+    public DynObjectFeatureFacade() {
+        this(null);
+    }
+    /**
+     * Creates a facade over a {@link Feature}.
+     *
+     * @param feature
+     */
+    public DynObjectFeatureFacade(Feature feature) {
+        if( featureTypeDefinitionsManager==null ) {
+            featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
+        }
+        this.feature = feature;
+        this.editable = null;
+        this.dynClass = null;
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        if( this.dynClass == null ) {
+            Feature feature = this.getFeature();
+            FeatureType featureType = feature.getType();
+            FeatureStore store = feature.getStore();
+            this.dynClass = featureTypeDefinitionsManager.get(store,featureType);
+        }
+        return this.dynClass;
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        try {
+            Object value = this.getFeature().get(name);
+            return value;
+        } catch(IllegalArgumentException ex) {
+            DynClass dynClass = this.getDynClass();
+            DynField field = dynClass.getDynField(name);
+            if( field instanceof DynField_v2 && ((DynField_v2)field).isCalculated() ) {
+                return  ((DynField_v2)field).getCalculatedValue(this);
+            }
+            throw ex;
+        }
+    }
+
+    @Override
+    public void setDynValue(String name, Object value)
+            throws DynFieldNotFoundException {
+        synchronized (lock) {
+            if (editable == null) {
+                editable = feature.getEditable();
+            }
+        }
+        editable.set(name, value);
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        DynClass dynClass = this.getDynClass();
+        DynField field = dynClass.getDynField(name);
+        return field!=null;
+    }
+
+    @Override
+    public Object invokeDynMethod(String name, Object[] args)
+            throws DynMethodException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Object invokeDynMethod(int code, Object[] args)
+            throws DynMethodException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void implement(DynClass dynClass) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void delegate(DynObject dynObject) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void clear() {
+        // Nothing to do
+    }
+
+    @Override
+    public Feature getFeature() {
+        return editable == null ? feature : editable;
+    }
+
+    public void setFeature(Feature feature) {
+        synchronized (lock) {
+            this.feature = feature;
+            this.editable = null;
+        }
+    }
+
+    @Override
+    public EditableFeature getEditableFeature() {
+        return editable;
+    }
+
+    @Override
+    public String toString() {
+        if (editable != null) {
+            return editable.toString();
+        }
+        return this.feature.toString();
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DynObjectFeatureFacade other = (DynObjectFeatureFacade) super.clone();
+        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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectFeatureFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectIteratorFeatureIteratorFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectIteratorFeatureIteratorFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectIteratorFeatureIteratorFacade.java	(revision 46118)
@@ -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.dynobjectutils;
+
+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.setFeature(feature.getCopy());
+        return featureFacade;
+    }
+
+    public void remove() {
+        featureIterator.remove();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectIteratorFeatureIteratorFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/ComputeAvailableValuesFromTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/ComputeAvailableValuesFromTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/ComputeAvailableValuesFromTable.java	(revision 46118)
@@ -0,0 +1,73 @@
+package org.gvsig.fmap.dal.feature.impl.dynobjectutils;
+
+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.FacadeOfAFeature;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
+
+public class ComputeAvailableValuesFromTable extends AbstractDynMethod {
+
+    public ComputeAvailableValuesFromTable(String methodName, String description) {
+        super(methodName,description);
+    }
+
+    @Override
+    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
+        if (!(self instanceof FacadeOfAFeature)) {
+            return null;
+        }
+
+        DynField_v2 field = (DynField_v2) args[0];
+        String attrValueName = (String) field.getTags().get("attrValueName");
+        String attrLabelName = (String) field.getTags().get("attrLabelName");
+        String storeName = (String) field.getTags().get("storeName");
+
+        Feature feature = ((FacadeOfAFeature) self).getFeature();
+        return this.getAvailableValues(feature, storeName, attrLabelName, attrValueName);
+    }
+
+    private DynObjectValueItem[] getAvailableValues(Feature feature, String storeName, String attrLabelName, String attrValueName) throws ComputeAvailableValuesFromTableException {
+        try {
+            DataManager manager = DALLocator.getDataManager();
+
+            FeatureStore mystore = feature.getStore();
+            DataStoreParameters storeParmeters = mystore.getExplorer().get(storeName);
+            FeatureStore store = (FeatureStore) manager.openStore(mystore.getProviderName(), storeParmeters);
+            FeatureSet set = store.getFeatureSet();
+            DynObjectValueItem[] values = new DynObjectValueItem[(int)(set.getSize())];
+            int n = 0;
+            DisposableIterator it = set.fastIterator();
+            while( it.hasNext() ) {
+                Feature f = (Feature) it.next();
+                values[n++] =  new DynObjectValueItem(f.getString(attrValueName), f.getString(attrLabelName));
+            }
+            return values;
+        } catch (Exception ex) {
+            throw new ComputeAvailableValuesFromTableException(storeName, ex);
+        }
+    }
+
+    private static class ComputeAvailableValuesFromTableException extends DynMethodException {
+
+        private final static String MESSAGE_FORMAT = "Can't retrieve available values from %(storename)s.";
+        private final static String MESSAGE_KEY = "_ComputeAvailableValuesFromTableException";
+        private static final long serialVersionUID = -3248317756866564508L;
+
+        public ComputeAvailableValuesFromTableException(String storename, Throwable cause) {
+            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+            setValue("storename", storename);
+            this.initCause(cause);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectSetFeatureSetFacade.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectSetFeatureSetFacade.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectSetFeatureSetFacade.java	(revision 46118)
@@ -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.dynobjectutils;
+
+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(null);
+
+    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.setFeature(((Feature) obj).getCopy());
+                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.setFeature(((Feature) obj).getCopy());
+                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.getEditableFeature());
+    }
+
+    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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DynObjectSetFeatureSetFacade.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DumbFeatureTypeDefinitionsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DumbFeatureTypeDefinitionsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/DumbFeatureTypeDefinitionsManager.java	(revision 46118)
@@ -0,0 +1,37 @@
+package org.gvsig.fmap.dal.feature.impl.dynobjectutils;
+
+import java.io.File;
+import org.gvsig.fmap.dal.feature.AbstractFeatureTypeDefinitionsManager;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public class DumbFeatureTypeDefinitionsManager extends AbstractFeatureTypeDefinitionsManager implements FeatureTypeDefinitionsManager {
+
+    @Override
+    public DynClass get(FeatureStore store, FeatureType featureType) {
+        return featureType;
+    }
+
+    @Override
+    public boolean contains(FeatureStore store, FeatureType featureType) {
+        return false;
+    }
+
+    @Override
+    public void add(FeatureStore store, FeatureType featureType, DynClass dynClass) {
+        // Do nothing
+    }
+
+    @Override
+    public void remove(FeatureStore store, FeatureType featureType) {
+        // Do nothing
+    }
+
+    @Override
+    public void addModel(File model) {
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeatures.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeatures.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeatures.java	(revision 46118)
@@ -0,0 +1,97 @@
+package org.gvsig.fmap.dal.feature.impl.dynobjectutils.relations;
+
+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.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
+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.dataTypes.CoercionException;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
+
+public class DALLink_getRelatedFeatures extends AbstractDynMethod {
+
+    private static final String DAL_code = "DAL.code";
+    private static final String DAL_foreingTable = "DAL.foreingTable";
+    private static final String DAL_foreingCode = "DAL.foreingCode";
+    private static final String DAL_pageSize = "DAL.pageSize";
+
+
+    public DALLink_getRelatedFeatures() {
+        super("DAL.getRelatedFeatures","Retrieve a list with al elements related to this object.");
+    }
+
+    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
+        if (!(self instanceof FacadeOfAFeature)) {
+            return null;
+        }
+
+        DynField_v2 field = (DynField_v2) args[0];
+        String foreignCodeName = (String) field.getTags().get(DAL_foreingCode);
+        String foreignTableName = (String) field.getTags().get(DAL_foreingTable);
+        String codeName = (String) field.getTags().get(DAL_code);
+        int pageSize;
+        try {
+            pageSize = field.getTags().getInt(DAL_pageSize);
+        } catch (CoercionException ex) {
+            pageSize = 100;
+        }
+        if (pageSize < 100) {
+            pageSize = 100;
+        }
+
+        Feature feature = ((FacadeOfAFeature) self).getFeature();
+        FeaturePagingHelper featurePager = getRelatedFeatures(feature, codeName, foreignTableName, foreignCodeName, pageSize);
+
+        return featurePager.asListOfDynObjects();
+    }
+
+    private FeaturePagingHelper getRelatedFeatures(Feature feature, String codeName, String foreignTableName, String foreignCodeName, int pageSize) throws ComputeRelatedFeaturesException {
+        Object fkValue = "<unknow>";
+        try {
+            FeatureStore store = feature.getStore();
+
+            DataManager manager = DALLocator.getDataManager();
+            FeatureAttributeDescriptor attrdesc = feature.getType().getAttributeDescriptor(codeName);
+
+            DataStoreParameters foreignStoreParmeters = store.getExplorer().get(foreignTableName);
+            FeatureStore foreignStore = (FeatureStore) manager.openStore(store.getProviderName(), foreignStoreParmeters);
+            FeatureQuery query = foreignStore.createFeatureQuery();
+            fkValue = feature.get(codeName);
+            if (attrdesc.getDataType().isNumeric()) {
+                fkValue = fkValue.toString();
+            } else {
+                fkValue = "'" + fkValue.toString().replace("'", "''") + "'";
+            }
+            String where = foreignCodeName + " = " + fkValue;
+            query.addFilter(manager.createExpresion(where));
+            FeaturePagingHelper featurePager = manager.createFeaturePagingHelper(foreignStore, query, pageSize);
+            return featurePager;
+        } catch (Exception ex) {
+            throw new ComputeRelatedFeaturesException(foreignTableName, foreignCodeName, fkValue.toString(), ex);
+        }
+    }
+
+    private static class ComputeRelatedFeaturesException extends DynMethodException {
+
+        private final static String MESSAGE_FORMAT = "Can't retrieve relation items from %(storename)s for attribute %(attrname)s with value %(attrvalue)s.";
+        private final static String MESSAGE_KEY = "_OneToManyMethodException";
+        private static final long serialVersionUID = -3248317756866564508L;
+
+        public ComputeRelatedFeaturesException(String storename, String attrname, String attrvalue, Throwable cause) {
+            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+            setValue("storename", storename);
+            setValue("attrname", attrname);
+            setValue("attrvalue", attrvalue);
+            this.initCause(cause);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeature.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeature.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/dynobjectutils/relations/DALLink_getRelatedFeature.java	(revision 46118)
@@ -0,0 +1,98 @@
+package org.gvsig.fmap.dal.feature.impl.dynobjectutils.relations;
+
+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.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+
+public class DALLink_getRelatedFeature extends AbstractDynMethod {
+    private static final String DAL_code = "DAL.code";
+    private static final String DAL_foreingTable = "DAL.foreingTable";
+    private static final String DAL_foreingCode = "DAL.foreingCode";
+ 
+
+    public DALLink_getRelatedFeature() {
+        super("DAL.getRelatedFeature","Retrieve the element of the other side of the relation.");
+    }
+
+    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
+        if (!(self instanceof FacadeOfAFeature)) {
+            return null;
+        }
+
+        DynField_v2 field = (DynField_v2) args[0];
+        String codeName = (String) field.getTags().get(DAL_code);
+        String foreignTableName = (String) field.getTags().get(DAL_foreingTable);
+        String foreignCodeName = (String) field.getTags().get(DAL_foreingCode);
+
+        Feature feature = ((FacadeOfAFeature) self).getFeature();
+        return getRelatedFeature(feature, codeName, foreignTableName, foreignCodeName);
+    }
+
+    private DynObject getRelatedFeature(Feature feature, String attrName, String otherStoreName, String otherAttrName) throws ComputeRelatedFeatureException {
+        Object fkValue = "<unknow>";
+        FeatureSet set = null;
+        DisposableIterator it = null;
+        try {
+            FeatureStore store = feature.getStore();
+
+            DataManager manager = DALLocator.getDataManager();
+            FeatureAttributeDescriptor attrdesc = feature.getType().getAttributeDescriptor(attrName);
+
+            DataStoreParameters foreignStoreParmeters = store.getExplorer().get(otherStoreName);
+            FeatureStore foreignStore = (FeatureStore) manager.openStore(store.getProviderName(), foreignStoreParmeters);
+            FeatureQuery query = foreignStore.createFeatureQuery();
+            fkValue = feature.get(attrName);
+            if (attrdesc.getDataType().isNumeric()) {
+                fkValue = fkValue.toString();
+            } else {
+                fkValue = "'" + fkValue.toString().replace("'", "''") + "'";
+            }
+            String where = otherAttrName + " = " + fkValue;
+            query.addFilter(manager.createExpresion(where));
+            set = foreignStore.getFeatureSet(query);
+            if( set.getSize()!= 1 ) {
+                throw new ComputeRelatedFeatureException(otherStoreName, otherAttrName, fkValue.toString());
+            }
+            it = set.fastIterator();
+            Feature otherFeature = (Feature) it.next();
+            return otherFeature.getAsDynObject();
+        } catch (Exception ex) {
+            throw new ComputeRelatedFeatureException(otherStoreName, otherAttrName, fkValue.toString(), ex);
+        } finally {
+            DisposeUtils.disposeQuietly(it);
+            DisposeUtils.disposeQuietly(set);
+        }
+    }
+
+    private static class ComputeRelatedFeatureException extends DynMethodException {
+
+        private final static String MESSAGE_FORMAT = "Can't retrieve relation items from %(storename)s for attribute %(attrname)s with value %(attrvalue)s.";
+        private final static String MESSAGE_KEY = "_OneToManyMethodException";
+        private static final long serialVersionUID = -3248317756866564508L;
+
+        public ComputeRelatedFeatureException(String storename, String attrname, String attrvalue) {
+            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+            setValue("storename", storename);
+            setValue("attrname", attrname);
+            setValue("attrvalue", attrvalue);
+        }
+
+        public ComputeRelatedFeatureException(String storename, String attrname, String attrvalue, Throwable cause) {
+            this(storename,attrname, attrvalue);
+            this.initCause(cause);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,2378 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.function.Supplier;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.DataProfile;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.feature.ForeingKey.ContextForeingKey;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryCoercionContext;
+import org.gvsig.fmap.geom.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.timesupport.RelativeInterval;
+import org.gvsig.timesupport.TimeSupportLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataType.NumberPrecisionAndScale;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dynobject.AbstractDynMethod;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynField_LabelAttribute;
+import org.gvsig.tools.dynobject.DynField_v2;
+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.Tags;
+import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException;
+import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.impl.DefaultTags;
+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.i18n.I18nManager;
+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.GetItemWithSize;
+import org.gvsig.tools.util.LabeledValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureAttributeDescriptor implements
+        FeatureAttributeDescriptor, Persistent, DynField_v2, DynField_LabelAttribute {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureAttributeDescriptor.class);
+
+    protected boolean allowNull;
+    protected DataType dataType;
+    protected String dataProfile;
+    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 int scale;
+    protected int roundMode;
+    protected Evaluator evaluator;
+    protected boolean primaryKey;
+    protected boolean readOnly;
+    protected IProjection SRS;
+    protected GeometryType geomType;
+    protected int geometryType;
+    protected int geometrySubType;
+    protected Map<String, String> additionalInfo;
+    protected boolean isAutomatic;
+    protected boolean isTime = false;
+    protected Interval interval;
+    protected FeatureAttributeGetter featureAttributeGetter = null;
+    protected FeatureAttributeEmulator featureAttributeEmulator = null;
+    protected boolean indexed = false;
+    protected boolean isIndexAscending = true;
+    protected boolean allowIndexDuplicateds = true;
+
+    protected DynObjectValueItem[] availableValues;
+    protected DynObjectValueItem[] availableValuesCache; // No persistente
+    protected Expression availableValuesExpression;
+    protected boolean avoidCachingAvailableValues;
+    private Map<Object, String> labelOfValueMap; // No persistente
+    protected String description;
+    protected Object minValue;
+    protected Object maxValue;
+    protected String label;
+    protected String shortLabel;
+    protected int order;
+    protected boolean hidden;
+    protected String groupName;
+    protected Tags tags = new DefaultTags();
+    private DynMethod availableValuesMethod;
+    private DynMethod calculateMethod;
+    private WeakReference typeRef;
+    protected DefaultForeingKey foreingKey = null;
+
+    protected CoercionContext coerceContext = null; // not persistent
+    protected MathContext mathContext = null; // not persistent
+
+    private int relationType = RELATION_TYPE_NONE;
+    protected Locale locale;
+    protected int displaySize;
+    
+    protected String defaultFormat;
+
+    public DefaultFeatureAttributeDescriptor() {
+        // Usada en la persistencia
+        this.precision = DataType.PRECISION_NONE;
+        this.scale = DataType.SCALE_NONE;
+        this.roundMode = BigDecimal.ROUND_HALF_UP;
+    }
+
+    protected DefaultFeatureAttributeDescriptor(FeatureType type) {
+        this();
+//        LOGGER.info(String.format("Created FeatureAttributeDescriptor [%08x].", this.hashCode()));
+        setFeatureType(type);
+        this.allowNull = true;
+        this.dataType = null;
+        this.dateFormat = null;
+        this.defaultValue = null;
+        this.defaultFormat = null;
+        this.index = -1;
+        this.maximumOccurrences = 0;
+        this.minimumOccurrences = 0;
+        this.size = 0;
+        this.name = null;
+        this.objectClass = null;
+        this.precision = DataType.PRECISION_NONE;
+        this.scale = DataType.SCALE_NONE;
+        this.roundMode = BigDecimal.ROUND_HALF_UP;
+        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;
+        this.hidden = false;
+        this.relationType = RELATION_TYPE_NONE;
+        this.locale = null;
+        this.displaySize = 0;
+        this.avoidCachingAvailableValues = false;
+    }
+
+    protected DefaultFeatureAttributeDescriptor(
+            DefaultFeatureAttributeDescriptor other
+    ) {
+        this();
+        copyFrom(other);
+//        LOGGER.info(String.format("Created FeatureAttributeDescriptor [%08x] [%s] (copy).", this.hashCode(), this.name));
+    }
+
+    @Override
+    public void copyFrom(DynField other1) {
+        if (!(other1 instanceof DefaultFeatureAttributeDescriptor)) {
+            throw new IllegalArgumentException("Can't copy from a non DefaultFeatureAttributeDescriptor");
+        }
+        DefaultFeatureAttributeDescriptor other = (DefaultFeatureAttributeDescriptor) other1;
+        this.typeRef = other.typeRef;
+        this.allowNull = other.allowNull;
+        this.dataType = other.dataType;
+        this.dateFormat = other.dateFormat;
+        this.defaultValue = other.defaultValue;
+        this.defaultFormat = other.defaultFormat;
+        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.scale = other.scale;
+        this.roundMode = other.roundMode;
+        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) {
+            this.additionalInfo = new HashMap();
+            for (Entry<String, String> entry : other.additionalInfo.entrySet()) {
+                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;
+        this.hidden = other.hidden;
+        this.dataProfile = other.dataProfile;
+
+        this.availableValues = other.availableValues;
+        this.availableValuesExpression = other.availableValuesExpression;
+        this.description = other.description;
+        this.minValue = other.minValue;
+        this.maxValue = other.maxValue;
+        this.label = other.label;
+        this.order = other.order;
+        this.groupName = other.groupName;
+        if (other.tags == null) {
+            this.tags = null;
+        } else {
+            try {
+                this.tags = (Tags) other.tags.clone();
+            } catch (Exception ex) {
+            }
+        }
+        this.foreingKey = null;
+        if (other.foreingKey != null) {
+            try {
+                this.foreingKey = (DefaultForeingKey) other.foreingKey.clone();
+            } catch (CloneNotSupportedException ex) {
+            }
+        }
+        if (this.foreingKey != null) {
+            this.foreingKey.setDescriptor(this);
+        }
+
+        // TODO: � Habria que clonarlos ?
+        this.availableValuesMethod = other.availableValuesMethod;
+        this.calculateMethod = other.calculateMethod;
+        this.relationType = other.relationType;
+        this.locale = other.locale;
+        this.displaySize = other.displaySize;
+        this.avoidCachingAvailableValues = other.avoidCachingAvailableValues;
+    }
+
+    public void setFeatureType(FeatureType type) {
+        // Usada en la persistencia
+        if (type == null) {
+            this.typeRef = null;
+        } else {
+            this.typeRef = new WeakReference(type);
+//            LOGGER.info(String.format("FeatureAttributeDescriptor[%08x] set FeatureType [%08x], ref [%08x].", this.hashCode(), type.hashCode(), typeRef.hashCode()));
+        }
+    }
+
+    @Override
+    public String getDataTypeName() {
+        if (this.getDataType() == null) {
+            return "(unknow)";
+        }
+        return this.getDataType().getName();
+    }
+
+    @Override
+    public DefaultFeatureAttributeDescriptor getCopy() {
+        return new DefaultFeatureAttributeDescriptor(this);
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultFeatureAttributeDescriptor(this);
+    }
+
+    @Override
+    public boolean allowNull() {
+        return allowNull;
+    }
+
+    @Override
+    public Locale getLocale() {
+        // FIXME: Debe devolver el locale que toca ENGLISH o default, 
+        // pero no asignarlo a "locale", manteniendo el null en la variable.
+        // Ojo que tambien habria que tocar el setLocale.
+        if (this.locale == null) {
+            if (this.dataType.isNumeric()) {
+                this.locale = Locale.ENGLISH; //return
+            } else {
+                this.locale = Locale.getDefault();
+            }
+        }
+        return this.locale;
+    }
+
+    @Override
+    public DataType getDataType() {
+        if (featureAttributeGetter != null) {
+            return featureAttributeGetter.getDataType();
+        }
+        return this.dataType;
+    }
+
+    public FeatureAttributeDescriptor setDataType(int type) {
+        this.dataType = ToolsLocator.getDataTypesManager().get(type);
+        return this;
+    }
+
+    @Override
+    public DateFormat getDateFormat() {
+        return this.dateFormat;
+    }
+
+    @Override
+    public Object getDefaultValue() {
+        return this.defaultValue;
+    }
+
+    @Override
+    @Deprecated
+    public Object getDefaultValueCoerced() {
+        return getCoercedDefaultValue();
+    }
+
+    @Override
+    public Object getCoercedDefaultValue() {
+        try {
+            Object value = this.defaultValue;
+            if (value == null) {
+                return null;
+            }
+            if (ExpressionUtils.isDynamicText(value.toString())) {
+                value = ExpressionUtils.evaluateDynamicText(value.toString());
+            }
+            return this.getDataType().coerce(value);
+        } catch (CoercionException ex) {
+            return null;
+        }
+    }
+
+    @Override
+    public Supplier getDefaultValueSupplier() {
+        return (Supplier) this::getDefaultValueCoerced;
+    }
+
+    @Override
+    public DynField setDefaultValueSupplier(Supplier supplier) {
+        //Do nothing
+        return this;
+    }
+
+    @Override
+    public Evaluator getEvaluator() {
+        return this.evaluator;
+    }
+
+    @Override
+    public int getGeometryType() {
+        if (this.dataType.getType() != DataTypes.GEOMETRY) {
+            return Geometry.TYPES.UNKNOWN;
+        }
+        return this.geometryType;
+    }
+
+    @Override
+    public int getGeometrySubType() {
+        if (this.dataType.getType() != DataTypes.GEOMETRY) {
+            return Geometry.SUBTYPES.UNKNOWN;
+        }
+        return this.geometrySubType;
+    }
+
+    @Override
+    public GeometryType getGeomType() {
+        if (this.dataType.getType() != DataTypes.GEOMETRY) {
+            return null;
+        }
+        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;
+    }
+
+    @Override
+    public int getIndex() {
+        return this.index;
+    }
+
+    protected FeatureAttributeDescriptor setIndex(int index) {
+        this.index = index;
+        return this;
+    }
+
+    @Override
+    public int getMaximumOccurrences() {
+        return this.maximumOccurrences;
+    }
+
+    @Override
+    public int getMinimumOccurrences() {
+        return this.minimumOccurrences;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    public FeatureAttributeDescriptor setName(String name) {
+//        LOGGER.info(String.format("FeatureAttributeDescriptor[%08x] set name [%s].", this.hashCode(), name));
+        this.name = name;
+        return this;
+    }
+
+    @Override
+    public Class getObjectClass() {
+        if (getDataType().getType() == DataTypes.OBJECT) {
+            return objectClass;
+        }
+        return getDataType().getDefaultClass();
+    }
+
+    @Override
+    public int getPrecision() {
+        return this.precision;
+    }
+
+    @Override
+    public int getScale() {
+        return this.scale;
+    }
+
+    @Override
+    public Coercion getCoercion() {
+        return this.getDataType().getCoercion();
+    }
+
+    @Override
+    public MathContext getMathContext() {
+        if (this.mathContext == null) {
+            if (this.getDataType().isNumeric()) {
+                this.mathContext = new MathContext(
+                        this.getPrecision(),
+                        RoundingMode.valueOf(this.getRoundMode())
+                );
+            } else {
+                this.mathContext = MathContext.UNLIMITED;
+            }
+        }
+        return this.mathContext;
+    }
+
+    @Override
+    public CoercionContext getCoercionContext() {
+        if (this.coerceContext == null) {
+            if (this.getDataType().isNumeric()) {
+                this.coerceContext = DataTypeUtils.coerceContextDecimal(
+                        this.getLocale(),
+                        this.getPrecision(),
+                        this.getScale(),
+                        this.getRoundMode()
+                );
+            } else if (this.getType() == DataTypes.GEOMETRY) {
+                GeometryCoercionContext context = GeometryLocator.getGeometryManager().createGeometryCoercionContext();
+                context.setGeometryType(this.getGeomType());
+                context.setMode(GeometryCoercionContext.MODE_ONERROR_DONTCONVERT);
+                this.coerceContext = context;
+            } else if (this.getType() == DataTypes.TIMESTAMP) {
+//                if(this.locale != null){
+                    this.coerceContext = DataTypeUtils.coerceContextLocale(
+                            this.locale
+                    );
+//                }
+            } else {
+                this.coerceContext = DataTypeUtils.coerceContextLocale(
+                        this.getLocale()
+                );
+            }
+        }
+        return this.coerceContext;
+    }
+
+    @Override
+    public int getRoundMode() {
+        return this.roundMode;
+    }
+
+    @Override
+    public IProjection getSRS() {
+        return this.SRS;
+    }
+
+    @Override
+    public Interval getInterval() {
+        return this.interval;
+    }
+
+    public IProjection getSRS(WeakReference storeRef) {
+        if (this.SRS == null) {
+            FeatureStore store = (FeatureStore) storeRef.get();
+            this.SRS = (IProjection) store.getDynValue(DataStore.METADATA_CRS);
+        }
+        return this.SRS;
+    }
+
+    @Override
+    public int getSize() {
+        return this.size;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return this.primaryKey;
+    }
+
+    @Override
+    public boolean isReadOnly() {
+        if (this.readOnly) {
+            return true;
+        }
+        return this.isComputed();
+    }
+
+    @Override
+    public String getAdditionalInfo(String infoName) {
+        if (this.additionalInfo == null) {
+            return null;
+        }
+        return this.additionalInfo.get(infoName);
+    }
+
+    @Override
+    public boolean isAutomatic() {
+        return this.isAutomatic;
+    }
+
+    @Override
+    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 (!Objects.equals(this.name, other.name)) {
+            return false;
+        }
+
+        if (this.getDataType() != other.getDataType()) {
+            return false;
+        }
+
+        if (this.size != other.size) {
+            return false;
+        }
+
+        if (!Objects.equals(this.defaultValue, other.defaultValue)) {
+            return false;
+        }
+        if (!Objects.equals(this.defaultFormat, other.defaultFormat)) {
+            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 (!Objects.equals(this.evaluator, other.evaluator)) {
+            return false;
+        }
+
+        if (!Objects.equals(this.featureAttributeEmulator, other.featureAttributeEmulator)) {
+            return false;
+        }
+
+        if (!Objects.equals(this.SRS, other.SRS)) {
+            return false;
+        }
+
+        if (!Objects.equals(this.dateFormat, other.dateFormat)) {
+            return false;
+        }
+
+        if (!Objects.equals(this.objectClass, other.objectClass)) {
+            return false;
+        }
+
+        if (!Objects.equals(this.dataProfile, other.dataProfile)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        allowNull = state.getBoolean("allowNull");
+        dataType = ToolsLocator.getDataTypesManager().get(state.getInt("dataType"));
+        dataProfile = state.getString("dataProfile");
+
+//        FIXME: dateFormat;
+        try {
+            defaultValue = dataType.coerce(state.get("defaultValue"));
+        } catch (CoercionException ex) {
+        }
+
+        index = state.getInt("index");
+        maximumOccurrences = state.getInt("maximumOccurrences");
+        minimumOccurrences = state.getInt("minimumOccurrences");
+        size = state.getInt("size");
+        name = state.getString("name");
+        try {
+            String objectClassName = state.getString("objectClass");
+            if (!StringUtils.isBlank(objectClassName)) {
+                objectClass = Class.forName(objectClassName);
+            }
+        } catch (Throwable e) {
+            LOGGER.warn("Can't restore the objectClass of the FeatureAttributreDescriptor", e);
+        }
+        precision = state.getInt("precision");
+        scale = state.getInt("scale");
+        roundMode = state.getInt("roundMode");
+        String locale_s = state.getString("locale");
+        locale = (StringUtils.isBlank(locale_s) || "null".equalsIgnoreCase(locale_s)) ? null : Locale.forLanguageTag(locale_s);
+        evaluator = (Evaluator) state.get("evaluator");
+        primaryKey = state.getBoolean("primaryKey");
+        readOnly = state.getBoolean("readOnly");
+        SRS = (IProjection) state.get("SRS");
+        geometryType = state.getInt("geometryType");
+        geometrySubType = state.getInt("geometrySubType");
+        if (geometryType != Geometry.TYPES.UNKNOWN
+                && geometrySubType != Geometry.SUBTYPES.UNKNOWN) {
+            geomType = GeometryUtils.getGeometryType(
+                    geometryType,
+                    geometrySubType
+            );
+        }
+//        additionalInfo = (Map) state.get("aditionalInfo");
+        isAutomatic = state.getBoolean("isAutomatic");
+        isTime = state.getBoolean("isTime");
+        if (state.hasValue("intervalStart")) {
+            long intervalStart = state.getLong("interval_start");
+            long intervalEnd = state.getLong("interval_end");
+            interval = TimeSupportLocator.getManager().createRelativeInterval(intervalStart, intervalEnd);
+        } else {
+            interval = null;
+        }
+        featureAttributeEmulator = (FeatureAttributeEmulator) state.get("featureAttributeEmulator");
+        indexed = state.getBoolean("indexed");
+        isIndexAscending = state.getBoolean("isIndexAscending");
+        allowIndexDuplicateds = state.getBoolean("allowIndexDuplicateds");
+
+        Map<String, Object> values = state.getMap("availableValues");
+        if (values == null || values.isEmpty()) {
+            this.availableValues = null;
+        } else {
+            this.availableValues = new DynObjectValueItem[values.size()];
+            int n = 0;
+            Coercion coercion = this.getCoercion();
+            for (Entry<String, Object> entry : values.entrySet()) {
+                Object value;
+                try {
+                    value = coercion.coerce(entry.getValue());
+                } catch (CoercionException ex) {
+                    value = entry.getValue();
+                }
+                this.availableValues[n++] = new DynObjectValueItem(value, entry.getKey());
+            }
+        }
+
+        description = state.getString("description");
+        minValue = state.get("minValue");
+        maxValue = state.get("maxValue");
+        label = state.getString("label");
+        order = state.getInt("order");
+        hidden = state.getBoolean("hidden");
+        groupName = state.getString("groupName");
+        relationType = state.getInt("relationType", RELATION_TYPE_NONE);
+
+        foreingKey = (DefaultForeingKey) state.get("foreingKey");
+        if (foreingKey != null) {
+            this.foreingKey.setDescriptor(this);
+        }
+        tags = (Tags) state.get("tags");
+        if (tags == null) {
+            this.tags = new DefaultTags();
+        }
+        displaySize = state.getInt("displaySize", 0);
+        availableValuesExpression = (Expression) state.get("availableValuesExpression");
+        avoidCachingAvailableValues = state.getBoolean("avoidCachingAvailableValues", false);
+        availableValuesCache = null;
+        defaultFormat = state.getString("defaultFormat");
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        Coercion toString = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.STRING);
+
+        state.set("allowNull", allowNull);
+        state.set("dataType", dataType.getType());
+        state.set("dataProfile", dataProfile);
+
+//        FIXME: dateFormat;
+        state.set("defaultValue", Objects.toString(defaultValue, null));
+
+        state.set("index", index);
+        state.set("maximumOccurrences", maximumOccurrences);
+        state.set("minimumOccurrences", minimumOccurrences);
+        state.set("size", size);
+        state.set("name", name);
+        state.set("objectClass", objectClass == null ? null : objectClass.getName());
+        state.set("precision", precision);
+        state.set("scale", scale);
+        state.set("roundMode", roundMode);
+        if (this.locale == null) {
+            state.setNull("locale");
+        } else {
+            state.set("locale", this.locale.toLanguageTag()); //toString.coerce(this.locale));
+        }
+        state.set("evaluator", evaluator);
+
+        state.set("primaryKey", primaryKey);
+        state.set("readOnly", readOnly);
+        state.set("SRS", SRS);
+        GeometryType theGeomType = this.getGeomType();
+        if (theGeomType == null) {
+            state.set("geometryType", Geometry.TYPES.UNKNOWN);
+            state.set("geometrySubType", Geometry.SUBTYPES.UNKNOWN);
+        } else {
+            state.set("geometryType", theGeomType.getType());
+            state.set("geometrySubType", theGeomType.getSubType());
+        }
+
+//      FIXME: additionalInfo
+        state.set("isAutomatic", isAutomatic);
+        state.set("isTime", isTime);
+        if (this.interval == null) {
+            state.setNull("interval_start");
+            state.setNull("interval_end");
+        } else {
+            state.set("interval_start", ((RelativeInterval) interval).getStart().toMillis());
+            state.set("interval_end", ((RelativeInterval) interval).getEnd().toMillis());
+        }
+        state.set("SRS", SRS);
+
+//      FIXME: featureAttributeGetter
+        if (featureAttributeEmulator instanceof Persistent) {
+            state.set("featureAttributeEmulator", featureAttributeEmulator);
+        } else {
+            state.setNull("featureAttributeEmulator");
+        }
+
+        state.set("indexed", indexed);
+        state.set("isIndexAscending", isIndexAscending);
+        state.set("allowIndexDuplicateds", allowIndexDuplicateds);
+
+        if (this.availableValues == null) {
+            state.setNull("availableValues");
+        } else {
+            Map<String, Object> values = new LinkedHashMap<>();
+            for (DynObjectValueItem value : availableValues) {
+                if( value!=null ) {
+                    values.put(value.getLabel(), value.getValue());
+                }
+            }
+            state.set("availableValues", values);
+        }
+        state.set("description", description);
+        state.set("minValue", minValue);
+        state.set("maxValue", maxValue);
+        state.set("label", label);
+        state.set("order", order);
+        state.set("hidden", hidden);
+        state.set("groupName", groupName);
+        state.set("relationType", relationType);
+
+        state.set("foreingKey", this.foreingKey);
+        state.set("tags", this.tags);
+
+        state.set("displaySize", displaySize);
+        state.set("availableValuesExpression", availableValuesExpression);
+        state.set("avoidCachingAvailableValues", avoidCachingAvailableValues);
+        state.set("defaultFormat", defaultFormat);
+    }
+
+    private static final String FEATATTRDESC_PERSISTENCE_DEFINITION_NAME = "FeatureAttributeDescriptor";
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+        if (manager.getDefinition(FEATATTRDESC_PERSISTENCE_DEFINITION_NAME)
+                == null) {
+            DynStruct definition = manager.addDefinition(DefaultFeatureAttributeDescriptor.class,
+                    FEATATTRDESC_PERSISTENCE_DEFINITION_NAME,
+                    FEATATTRDESC_PERSISTENCE_DEFINITION_NAME
+                    + " persistent definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldBoolean("allowNull");
+            definition.addDynFieldInt("dataType");
+            definition.addDynFieldString("dataProfile");
+//            definition.addDynFieldString("dateFormat");
+            definition.addDynFieldString("defaultValue");
+            definition.addDynFieldInt("index");
+            definition.addDynFieldInt("maximumOccurrences");
+            definition.addDynFieldInt("minimumOccurrences");
+            definition.addDynFieldInt("size");
+            definition.addDynFieldString("name");
+            definition.addDynFieldString("objectClass");
+            definition.addDynFieldInt("precision");
+            definition.addDynFieldInt("scale").setMandatory(false).setDefaultDynValue(DataType.SCALE_NONE);
+            definition.addDynFieldInt("roundMode").setMandatory(false).setDefaultDynValue(BigDecimal.ROUND_HALF_UP);
+            definition.addDynFieldString("locale").setMandatory(false).setDefaultDynValue("null");
+            definition.addDynFieldObject("evaluator").setClassOfValue(Evaluator.class);
+            definition.addDynFieldBoolean("primaryKey");
+            definition.addDynFieldBoolean("readOnly");
+            definition.addDynFieldObject("SRS")
+                    .setClassOfValue(IProjection.class);
+            definition.addDynFieldInt("geometryType");
+            definition.addDynFieldInt("geometrySubType");
+//            definition.addDynFieldMap("additionalInfo");
+            definition.addDynFieldBoolean("isAutomatic");
+            definition.addDynFieldBoolean("isTime");
+            definition.addDynFieldLong("interval_start");
+            definition.addDynFieldLong("interval_end");
+            definition.addDynFieldObject("featureAttributeEmulator")
+                    .setClassOfValue(FeatureAttributeEmulator.class);
+            definition.addDynFieldBoolean("indexed");
+            definition.addDynFieldBoolean("isIndexAscending");
+            definition.addDynFieldBoolean("allowIndexDuplicateds");
+            definition.addDynFieldMap("availableValues")
+                    .setClassOfItems(Object.class);
+            definition.addDynFieldString("description");
+            definition.addDynFieldObject("minValue");
+            definition.addDynFieldObject("maxValue");
+            definition.addDynFieldString("label");
+            definition.addDynFieldInt("order");
+            definition.addDynFieldBoolean("hidden");
+            definition.addDynFieldBoolean("avoidCachingAvailableValues");
+            definition.addDynFieldString("groupName");
+            definition.addDynFieldInt("relationType");
+
+            definition.addDynFieldObject("foreingKey")
+                    .setClassOfValue(DefaultForeingKey.class);
+
+            definition.addDynFieldObject("tags")
+                    .setClassOfValue(Tags.class);
+
+            definition.addDynFieldInt("displaySize").setMandatory(false);
+            definition.addDynFieldObject("availableValuesExpression")
+                    .setClassOfValue(Expression.class)
+                    .setMandatory(false);
+            definition.addDynFieldString("defaultFormat").setMandatory(false);
+        }
+    }
+
+    /*
+     * Start of DynField interface Implementation
+     *
+     */
+    @Override
+    public Tags getTags() {
+        return tags;
+    }
+
+    private Expression availableValuesFilter;
+
+    @Override
+    public Expression getAvailableValuesFilter() {
+        return this.availableValuesFilter;
+    }
+
+    public FeatureAttributeDescriptor setAvailableValuesFilter(Expression filter) {
+        this.availableValuesFilter = filter;
+        return this;
+    }
+
+    public FeatureAttributeDescriptor setAvailableValuesFilter(String filter) {
+        this.availableValuesFilter = ExpressionUtils.createExpression(filter);
+        return this;
+    }
+
+    @Override
+    public boolean hasConstantAvailableValues() {
+        return this.availableValues != null;
+    }
+
+    @Override
+    public boolean isAvoidCachingAvailableValues() {
+        return this.avoidCachingAvailableValues;
+    }
+
+    public boolean hasAvailableValues() {
+        return getAvailableValues() != null;
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues(DynObject context) {
+        if (this.availableValuesMethod != null) {
+            DynObjectValueItem[] values;
+            try {
+                values = (DynObjectValueItem[]) this.availableValuesMethod.invoke(context, new Object[]{this});
+            } catch (DynMethodException ex) {
+                return this.getAvailableValues();
+            }
+            if (values != null) {
+                return values;
+            }
+        }
+        Expression filter = this.availableValuesFilter;
+        if (!ExpressionUtils.isEmpty(filter)) {
+            if (this.isForeingKey() && this.foreingKey.isClosedList()) {
+                ContextForeingKey foreingkeyContext = this.foreingKey.createContext();
+                foreingkeyContext.setContextValues(context);
+                DynObjectValueItem[] values = this.foreingKey.getAvailableValues(foreingkeyContext);
+                return values;
+            }
+            MutableSymbolTable contextSymbolTable = ExpressionUtils.createSymbolTable("feature", context);
+            MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
+            symbolTable.addSymbolTable(contextSymbolTable);
+
+            DynObjectValueItem[] allValues = this.getAvailableValues();
+            List<DynObjectValueItem> filteredValues = new ArrayList<>();
+            for (DynObjectValueItem value : allValues) {
+                symbolTable.setVar("$value", value.getValue());
+                symbolTable.setVar("$label", value.getLabel());
+                Object include = filter.execute(symbolTable);
+                if (DataTypeUtils.isFalse(include, false)) {
+                    continue;
+                }
+                filteredValues.add(value);
+            }
+            DynObjectValueItem[] values = filteredValues.toArray(
+                    new DynObjectValueItem[filteredValues.size()]
+            );
+            return values;
+        }
+        return this.getAvailableValues();
+    }
+
+    @Override
+    public boolean isAvailableValuesCalculated() {
+        if (this.availableValuesMethod != null) {
+            return true;
+        }
+        if (!ExpressionUtils.isEmpty(this.availableValuesFilter)) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues() {
+        DynObjectValueItem[] values = this.availableValues;
+
+        if (values != null) {
+            return values;
+        }
+        values = this.availableValuesCache;
+        if (values != null) {
+            return values;
+        }
+        if (this.isForeingKey() && this.foreingKey.isClosedList()) {
+            values = this.foreingKey.getAvailableValues(null);
+
+        } else if (this.availableValuesExpression != null) {
+            values = this.getAvailableValuesFromExpression();
+        }
+        if (!this.avoidCachingAvailableValues) {
+            this.availableValuesCache = values;
+        }
+        return values;
+    }
+
+    private DynObjectValueItem[] getAvailableValuesFrom(GetItemWithSize values) {
+        if (values.size() == 0) {
+            return null;
+        }
+        DynObjectValueItem[] r = null;
+        Object firstelement = values.get(0);
+        if (firstelement instanceof LabeledValue) {
+            r = new DynObjectValueItem[values.size()];
+            for (int i = 0; i < values.size(); i++) {
+                LabeledValue v = (LabeledValue) values.get(i);
+                r[i] = new DynObjectValueItem(
+                        v.getValue(),
+                        Objects.toString(v.getLabel(), Objects.toString(v.getValue(), String.valueOf(i)))
+                );
+            }
+        } else if (firstelement instanceof Pair) {
+            r = new DynObjectValueItem[values.size()];
+            for (int i = 0; i < values.size(); i++) {
+                Pair v = (Pair) values.get(i);
+                r[i] = new DynObjectValueItem(
+                        v.getValue(),
+                        Objects.toString(v.getKey(), Objects.toString(v.getValue(), String.valueOf(i)))
+                );
+            }
+        } else if (firstelement instanceof JsonObject) {
+            JsonObject v = (JsonObject) firstelement;
+            String labelname = null;
+            for (String theName : new String[]{
+                "name", "label", "key", "description"
+            }) {
+                if (v.containsKey(theName)) {
+                    labelname = theName;
+                    break;
+                }
+                if (v.containsKey(theName.toUpperCase())) {
+                    labelname = theName.toLowerCase();
+                    break;
+                }
+            }
+            String valuename = null;
+            if (v.containsKey("value")) {
+                valuename = "value";
+            }
+            r = new DynObjectValueItem[values.size()];
+            for (int i = 0; i < values.size(); i++) {
+                v = (JsonObject) values.get(i);
+                String theLabel;
+                Object theValue;
+                if (labelname == null) {
+                    theLabel = v.toString();
+                } else {
+                    theLabel = v.getString(labelname);
+                }
+                if (valuename == null) {
+                    theValue = v.getString(valuename);
+                } else {
+                    theValue = v;
+                }
+                r[i] = new DynObjectValueItem(theValue, theLabel);
+            }
+        } else if (firstelement instanceof Map) {
+            Map<String, Object> v = (Map<String, Object>) firstelement;
+            String labelname = null;
+            for (String theName : new String[]{
+                "name", "label", "key", "description"
+            }) {
+                if (v.containsKey(theName)) {
+                    labelname = theName;
+                    break;
+                }
+                if (v.containsKey(theName.toUpperCase())) {
+                    labelname = theName.toLowerCase();
+                    break;
+                }
+            }
+            String valuename = null;
+            if (v.containsKey("value")) {
+                valuename = "value";
+            }
+            r = new DynObjectValueItem[values.size()];
+            for (int i = 0; i < values.size(); i++) {
+                v = (Map<String, Object>) values.get(i);
+                String theLabel;
+                Object theValue;
+                if (labelname == null) {
+                    theLabel = v.toString();
+                } else {
+                    theLabel = (String) v.get(labelname);
+                }
+                if (valuename == null) {
+                    theValue = v;
+                } else {
+                    theValue = v.get(valuename);
+                }
+                r[i] = new DynObjectValueItem(theValue, theLabel);
+            }
+        } else if (firstelement instanceof Feature) {
+            Feature v = (Feature) firstelement;
+            FeatureType featureType = v.getType();
+            String valuename = null;
+            FeatureAttributeDescriptor[] pks = featureType.getPrimaryKey();
+            if (pks != null && pks.length == 1) {
+                valuename = pks[0].getName();
+            }
+            String labelname = null;
+            for (String theName : new String[]{
+                "name", "label", "key", "description"
+            }) {
+                if (featureType.get(theName) != null) {
+                    labelname = theName;
+                    break;
+                }
+            }
+            r = new DynObjectValueItem[values.size()];
+            for (int i = 0; i < values.size(); i++) {
+                v = (Feature) values.get(i);
+                String theLabel;
+                Object theValue;
+                if (labelname == null) {
+                    theLabel = v.toString();
+                } else {
+                    theLabel = v.getString(labelname);
+                }
+                if (valuename == null) {
+                    theValue = v.getReference().getCode();
+                } else {
+                    theValue = v.get(valuename);
+                }
+                r[i] = new DynObjectValueItem(theValue, theLabel);
+            }
+        }
+        return r;
+    }
+
+    private DynObjectValueItem[] getAvailableValuesFromExpression() {
+        if (this.availableValuesExpression == null || this.availableValuesExpression.isEmpty()) {
+            return null;
+        }
+        try {
+            Object value = this.availableValuesExpression.execute(null);
+            if (value instanceof DynObjectValueItem[]) {
+                return (DynObjectValueItem[]) value;
+            }
+            if (value instanceof List) {
+                return this.getAvailableValuesFrom(new GetItemWithSize() {
+                    @Override
+                    public Object get(int i) {
+                        return ((List) value).get(i);
+                    }
+
+                    @Override
+                    public int size() {
+                        return ((List) value).size();
+                    }
+                });
+            }
+        } catch (Throwable th) {
+            LOGGER.warn("Can't get available values from expression", th);
+        }
+        return null;
+    }
+
+    @Override
+    public Expression getAvailableValuesExpression() {
+        return this.availableValuesExpression;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(String expression) {
+        if (StringUtils.isBlank(expression)) {
+            this.availableValuesExpression = null;
+            return this;
+        }
+        this.availableValuesExpression = ExpressionUtils.createExpression(expression);
+        return this;
+    }
+
+    @Override
+    public FeatureAttributeDescriptor setAvailableValuesExpression(Expression expression) {
+        this.availableValuesExpression = expression;
+        return this;
+    }
+
+    @Override
+    public String getLabelOfValue(Object value) {
+        if (this.labelOfValueMap != null) {
+            String theLabel = this.labelOfValueMap.get(value);
+            if (theLabel == null) {
+                theLabel = Objects.toString(value, "");
+            }
+            return theLabel;
+        }
+        DynObjectValueItem[] values = this.getAvailableValues();
+        if (values == null) {
+            return Objects.toString(value, "");
+        }
+        Map<Object, String> map = new LinkedHashMap<>();
+        for (DynObjectValueItem theValue : values) {
+            map.put(theValue.getValue(), theValue.getLabel());
+        }
+        this.labelOfValueMap = map;
+        String theLabel = this.labelOfValueMap.get(value);
+        if (theLabel == null) {
+            theLabel = Objects.toString(value, "");
+        }
+        return theLabel;
+    }
+
+    @Override
+    public String getDescription() {
+        if (this.description == null) {
+            return getName();
+        }
+        return this.description;
+    }
+
+    @Override
+    public Object getMaxValue() {
+        return this.maxValue;
+    }
+
+    @Override
+    public Object getMinValue() {
+        return this.minValue;
+    }
+
+    @Override
+    public int getTheTypeOfAvailableValues() {
+        return 1;
+    }
+
+    @Override
+    public int getType() {
+        if (featureAttributeGetter != null) {
+            return featureAttributeGetter.getDataType().getType();
+        }
+        return getDataType().getType();
+    }
+
+    @Override
+    public boolean isMandatory() {
+        return !allowNull() || isPrimaryKey();
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return false;
+    }
+
+    @Override
+    public DynField setAvailableValues(DynObjectValueItem[] values) {
+        if (ArrayUtils.isEmpty(values)) {
+            this.availableValues = null;
+        } else {
+            Coercion coercion = this.getCoercion();
+            this.availableValues = new DynObjectValueItem[values.length];
+            for (int i = 0; i < values.length; i++) {
+                DynObjectValueItem element = values[i];
+                Object value;
+                try {
+                    value = coercion.coerce(element.getValue());
+                } catch (CoercionException ex) {
+                    value = element.getValue();
+                }
+                this.availableValues[i] = new DynObjectValueItem(value, element.getLabel());
+            }
+        }
+        return this;
+    }
+
+    @Override
+    public DynField setDescription(String description) {
+        this.description = description;
+        return this;
+    }
+
+    @Override
+    public DynField setMandatory(boolean mandatory) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setMaxValue(Object maxValue) {
+        try {
+            this.maxValue = this.coerce(maxValue);
+        } catch (CoercionException e) {
+            throw new IllegalArgumentException(e);
+        }
+        return this;
+    }
+
+    @Override
+    public DynField setMinValue(Object minValue) {
+        try {
+            this.maxValue = this.coerce(minValue);
+        } catch (CoercionException e) {
+            throw new IllegalArgumentException(e);
+        }
+        return this;
+    }
+
+    @Override
+    public DynField setPersistent(boolean persistent) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setTheTypeOfAvailableValues(int type) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setType(int type) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @Deprecated
+    public DynField setDefaultDynValue(Object defaultValue) {
+        return this.setDefaultFieldValue(defaultValue);
+    }
+
+    @Override
+    public DynField setDefaultFieldValue(Object defaultValue) {
+        this.defaultValue = defaultValue;
+        return this;
+    }
+
+    @Override
+    public Class getClassOfValue() {
+        return null;
+    }
+
+    @Override
+    public DynField getElementsType() {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfValue(Class theClass)
+            throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setElementsType(DynStruct type)
+            throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setElementsType(int type)
+            throws DynFieldIsNotAContainerException {
+        throw new UnsupportedOperationException();
+    }
+
+    public FeatureAttributeDescriptor setDataProfileName(String dataProfile) {
+        this.dataProfile = dataProfile;
+        return this;
+    }
+
+    @Override
+    public String getDataProfileName() {
+        return dataProfile;
+    }
+
+    @Override
+    public DataProfile getDataProfile() {
+        if (StringUtils.isBlank(dataProfile)) {
+            return null;
+        }
+        DataProfile profile = DALLocator.getDataManager().getDataProfile(dataProfile);
+        return profile;
+    }
+
+    @Override
+    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
+         */
+    }
+
+    @Override
+    public String getSubtype() {
+        if (featureAttributeGetter != null) {
+            return featureAttributeGetter.getDataType().getSubtype();
+        }
+        return this.dataType.getSubtype();
+    }
+
+    @Override
+    public Object coerce(Object value) throws CoercionException {
+        if (value == null) {
+            return value; // O debe devolver this.defaultValue
+        }
+        try {
+            return this.getDataType().coerce(value, this.getCoercionContext());
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public DynField setAvailableValues(List values) {
+        if (values == null || values.isEmpty()) {
+            this.availableValues = null;
+        } else {
+            this.availableValues = (DynObjectValueItem[]) values.toArray(
+                    new DynObjectValueItem[values.size()]
+            );
+        }
+        return this;
+    }
+
+    @Override
+    public String getGroup() {
+        return this.groupName;
+    }
+
+    @Override
+    public int getOder() {
+        return this.order;
+    }
+
+    @Override
+    public String getLabel() {
+        if (this.label == null) {
+            return this.getName();
+        }
+        return this.label;
+    }
+
+    @Override
+    public String getLocalizedLabel() {
+        if (StringUtils.isBlank(this.label)) {
+            return this.getName();
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        return i18n.getTranslation(this.label);
+    }
+
+    @Override
+    public DynField setLabel(String label) {
+        this.label = label;
+        return this;
+    }
+
+    @Override
+    public DynField setShortLabel(String shortLabel) {
+        this.shortLabel = shortLabel;
+        return this;
+    }
+
+    @Override
+    public String getShortLabel() {
+        return StringUtils.isBlank(shortLabel) ? getLabel() : shortLabel;
+    }
+
+    @Override
+    public String getLocalizedShortLabel() {
+        if (StringUtils.isBlank(shortLabel)) {
+            return this.getLocalizedLabel();
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        return i18n.getTranslation(shortLabel);
+    }
+
+    @Override
+    public DynField setGroup(String groupName) {
+        this.groupName = groupName;
+        return this;
+    }
+
+    @Override
+    public DynField setOrder(int order) {
+        this.order = order;
+        return this;
+    }
+
+    @Override
+    public DynField setHidden(boolean hidden) {
+        this.hidden = hidden;
+        return this;
+    }
+
+    @Override
+    public boolean isHidden() {
+        return this.hidden;
+    }
+
+    @Override
+    public DynField setReadOnly(boolean readOnly) {
+        this.readOnly = readOnly;
+        return this;
+    }
+
+    @Override
+    public boolean isContainer() {
+        return false;
+    }
+
+    @Override
+    public Class getClassOfItems() {
+        return null;
+    }
+
+    @Override
+    public DynField setClassOfItems(Class theClass) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setType(DataType type) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DynField setSubtype(String subtype) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isTime() {
+        return isTime;
+    }
+
+    @Override
+    public FeatureAttributeGetter getFeatureAttributeGetter() {
+        return featureAttributeGetter;
+    }
+
+    @Override
+    public void setFeatureAttributeGetter(
+            FeatureAttributeGetter featureAttributeTransform) {
+        this.featureAttributeGetter = featureAttributeTransform;
+    }
+
+    @Override
+    public FeatureAttributeEmulator getFeatureAttributeEmulator() {
+        return this.featureAttributeEmulator;
+    }
+
+    public FeatureAttributeDescriptor setFeatureAttributeEmulator(FeatureAttributeEmulator featureAttributeEmulator) {
+        this.featureAttributeEmulator = featureAttributeEmulator;
+        return this;
+    }
+
+    @Override
+    public boolean isIndexed() {
+        return this.indexed;
+    }
+
+    @Override
+    public boolean isForeingKey() {
+        return this.foreingKey != null && this.foreingKey.isForeingKey();
+    }
+
+    @Override
+    public ForeingKey getForeingKey() {
+        return this.foreingKey;
+    }
+
+    @Override
+    public boolean allowIndexDuplicateds() {
+        return this.allowIndexDuplicateds;
+    }
+
+    @Override
+    public boolean isIndexAscending() {
+        return this.isIndexAscending;
+    }
+
+    @Override
+    public DynField setClassOfValue(DynStruct dynStrct) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setClassOfValue(String theClassNameOfValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public String getClassNameOfValue() {
+        return null;
+    }
+
+    @Override
+    public DynStruct getDynClassOfValue() {
+        return null;
+    }
+
+    @Override
+    public DynField setTypeOfItems(int type) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public int getTypeOfItems() {
+        return DataTypes.INVALID;
+    }
+
+    @Override
+    public DynField setClassOfItems(DynStruct dynStrct) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public DynField setClassOfItems(String theClassNameOfValue) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public String getClassNameOfItems() {
+        return null;
+    }
+
+    @Override
+    public DynStruct getDynClassOfItems() {
+        return null;
+    }
+
+    @Override
+    public DynField setRelationType(int relationType) {
+        this.relationType = relationType;
+        return this;
+    }
+
+    @Override
+    public int getRelationType() {
+        return this.relationType;
+    }
+
+    @Override
+    public DynField setAvailableValues(DynMethod availableValuesMethod) {
+        this.availableValuesMethod = availableValuesMethod;
+        return this;
+    }
+
+    @Override
+    public DynMethod getAvailableValuesMethod() {
+        if (this.availableValuesMethod != null) {
+            return this.availableValuesMethod;
+        }
+        if (this.availableValuesFilter == null && !this.isForeingKey()) {
+            return null;
+        }
+        DynMethod method = new AbstractDynMethod("getAvailableValuesOf" + this.getName()) {
+            @Override
+            public Object invoke(DynObject context, Object[] args) throws DynMethodException {
+                return getAvailableValues(context);
+            }
+        };
+        return method;
+    }
+
+    @Override
+    public DynMethod getCalculateMethod() {
+        return this.calculateMethod;
+    }
+
+    @Override
+    public DynField setCalculateMethod(DynMethod method) {
+        this.calculateMethod = method;
+        return this;
+    }
+
+    @Override
+    public boolean isCalculated() {
+        return this.calculateMethod != null;
+    }
+
+    @Override
+    public Object getCalculatedValue(DynObject self) {
+        try {
+            return this.calculateMethod.invoke(self, new Object[]{this});
+        } catch (DynMethodException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public DynField setValidateElements(boolean validate) {
+        return this;
+    }
+
+    @Override
+    public boolean getValidateElements() {
+        return false;
+    }
+
+    @Override
+    public boolean hasLabel() {
+        return StringUtils.isNotBlank(this.label);
+    }
+
+    @Override
+    public boolean hasShortLabel() {
+        return StringUtils.isNotBlank(this.shortLabel);
+    }
+
+    @Override
+    public boolean hasDescription() {
+        return StringUtils.isNotBlank(this.description);
+    }
+
+    @Override
+    public FeatureAttributeDescriptor getValue() {
+        return this;
+    }
+
+    @Override
+    public int getDisplaySize() {
+        return this.displaySize;
+    }
+
+    @Override
+    public boolean isInAvailableValues(Object valueToCheck) {
+        if (this.getAvailableValues() != null) {
+            for (DynObjectValueItem availableValue : this.getAvailableValues()) {
+                if (Objects.equals(valueToCheck, availableValue.getValue())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private class ConstantValueEvaluator extends AbstractEvaluator {
+
+        @Override
+        public Object evaluate(EvaluatorData data) throws EvaluatorException {
+            return defaultValue;
+        }
+
+        @Override
+        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;
+        }
+    }
+
+    @Override
+    public boolean isComputed() {
+        return featureAttributeEmulator != null || evaluator != null || isCalculated();
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        FeatureType ftype = this.getFeatureType();
+        if (ftype == null) {
+            return null;
+        }
+        return ftype.getStore();
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+        if (this.typeRef == null) {
+            return null;
+        }
+        FeatureType ftype = (FeatureType) this.typeRef.get();
+//        LOGGER.info(String.format("FeatureAttributeDescriptor[%08x] get FeatureType [%08x], ref [%08x].", this.hashCode(), ftype.hashCode(), typeRef.hashCode()));
+        return ftype;
+    }
+
+    public FeatureAttributeDescriptor setInterval(Interval interval) {
+        this.interval = interval;
+        return this;
+    }
+
+    public void fixAll() {
+        if (!this.getDataType().supportSize()) {
+            this.size = 0;
+        }
+        NumberPrecisionAndScale ps = this.getDataType().fixPrecisionAndScale(this.precision, this.scale);
+        this.precision = ps.getPrecision();
+        this.scale = ps.getScale();
+
+        switch (this.getType()) {
+            case DataTypes.INSTANT:
+            case DataTypes.INTERVAL:
+            case DataTypes.DATE:
+            case DataTypes.TIME:
+            case DataTypes.TIMESTAMP:
+                if (this.getInterval() != null) {
+                    this.isTime = true;
+                }
+                break;
+        }
+    }
+
+    @Override
+    public String[] getRequiredFieldNames() {
+        FeatureAttributeEmulator emulator = this.getFeatureAttributeEmulator();
+        if (emulator == null) {
+            return null;
+        }
+        return emulator.getRequiredFieldNames();
+    }
+
+    @Override
+    public void recentUsed() {
+        DefaultFeatureType.RECENTS_USEDS.add(this);
+    }
+
+    @Override
+    public boolean hasOnlyMetadataChanges(FeatureAttributeDescriptor other) {
+        if (other == null) {
+            throw new NullPointerException();
+        }
+        DefaultFeatureAttributeDescriptor old = (DefaultFeatureAttributeDescriptor) other;
+        if (!StringUtils.equalsIgnoreCase(old.name, this.name)) {
+            return false;
+        }
+        if (old.isComputed() && old.isComputed() == this.isComputed()) {
+            return true;
+        }
+        if (this.dataType != old.dataType) {
+            return false;
+        }
+        if (this.size != old.size) {
+            return false;
+        }
+        if (this.precision != old.precision) {
+            return false;
+        }
+//        if( this.primaryKey != old.primaryKey ) {
+//            return false;
+//        }
+        if (this.geomType != old.geomType) {
+            return false;
+        }
+        if (this.SRS != old.SRS) {
+            return false;
+        }
+        if (this.isAutomatic != old.isAutomatic) {
+            return false;
+        }
+        return true;
+    }
+
+    private class PropertiesBuilder {
+
+        private String name;
+        private DataType type;
+        private Map<String, String> sets;
+        private String sep;
+
+        public PropertiesBuilder() {
+            this.sets = new LinkedHashMap<>();
+        }
+
+        public void separator(String sep) {
+            this.sep = sep;
+        }
+
+        public void name(String name) {
+            this.name = name;
+        }
+
+        public void type(DataType type) {
+            this.type = type;
+        }
+
+        public void set(String name, ForeingKey fk) {
+            if (fk == null) {
+                return;
+            }
+            if (!fk.isForeingKey()) {
+                return;
+            }
+            this.set(name, fk.isForeingKey());
+            this.set(name + "_code", fk.getCodeName());
+            this.set(name + "_label", fk.getLabelFormula());
+            this.set(name + "_closedlist", fk.isClosedList());
+            this.set(name + "_table", fk.getTableName());
+        }
+
+        public void set(String name, FeatureAttributeEmulator value) {
+            if (value == null) {
+                return;
+            }
+            if (value instanceof FeatureAttributeEmulatorExpression) {
+                this.set(name, ((FeatureAttributeEmulatorExpression) value).getExpression().getPhrase());
+            }
+        }
+
+        public void set(String name, IProjection value) {
+            if (value == null) {
+                return;
+            }
+            this.set(name, value.getAbrev());
+        }
+
+        public void set(String name, GeometryType value) {
+            if (value == null) {
+                return;
+            }
+            this.set(name, value.getFullName().replace(":", "@"));
+        }
+
+        public void set(String name, Object value) {
+            if (value == null) {
+                return;
+            }
+            String s = Objects.toString(value, "");
+            if (StringUtils.isBlank(s)) {
+                return;
+            }
+            this.sets.put(name, s);
+        }
+
+        public void set(String name, Object value, Object skipValue) {
+            if (value == null || value == skipValue) {
+                return;
+            }
+            String s = Objects.toString(value, "");
+            if (StringUtils.isBlank(s)) {
+                return;
+            }
+            this.sets.put(name, s);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append(this.name);
+            builder.append(sep);
+            builder.append(this.type.getName());
+            for (String key : this.sets.keySet()) {
+                builder.append(sep);
+                builder.append("set");
+                builder.append(sep);
+                builder.append(key);
+                builder.append("=");
+                builder.append(this.sets.get(key));
+            }
+            return builder.toString();
+        }
+    }
+
+    private String getAll() {
+        PropertiesBuilder builder = new PropertiesBuilder();
+        builder.separator("/");
+        builder.name(this.name);
+        builder.type(this.dataType);
+        builder.set("size", this.size, 0);
+        switch (this.getType()) {
+            case DataTypes.BYTE:
+            case DataTypes.INTEGER:
+            case DataTypes.LONG:
+                break;
+            case DataTypes.FLOAT:
+            case DataTypes.DOUBLE:
+                if(this.locale != null){
+                    builder.set("locale", this.getLocale());
+                }
+                break;
+            case DataTypes.DECIMAL:
+                builder.set("precision", this.precision);
+                builder.set("scale", this.scale);
+                builder.set("roundMode", this.getRoundMode());
+                if(this.locale != null){
+                    builder.set("locale", this.getLocale());
+                }
+                break;
+            case DataTypes.DATE:
+            case DataTypes.TIME:
+            case DataTypes.TIMESTAMP:
+                if(this.locale != null){
+                    builder.set("locale", this.getLocale());
+                }
+                break;
+            case DataTypes.GEOMETRY:
+                IProjection proj = this.getSRS();
+                if (proj != null) {
+                    builder.set("srs", proj.getAbrev().replace(":", "@"));
+                }
+                GeometryType theGeomType = this.getGeomType();
+                if (theGeomType != null) {
+                    String geomTypeName = GeometryUtils.getGeometryTypeName(this.getGeomType().getType());
+                    String geomSubtypeName = GeometryUtils.getGeometrySubtypeName(this.getGeomType().getSubType());
+                    builder.set("geomtype", geomTypeName + "@" + geomSubtypeName);
+                }
+                break;
+        }
+        builder.set("hidden", this.isHidden(), false);
+        builder.set("readOnly", this.isReadOnly(), false);
+        builder.set("allowNull", this.allowNull(), true);
+        builder.set("pk", this.isPrimaryKey(), false);
+        builder.set("automatic", this.isAutomatic(), false);
+        builder.set("isTime", this.isTime(), false);
+        builder.set("profile", this.getDataProfileName());
+        builder.set("group", this.getGroup());
+        builder.set("description", this.description);
+        builder.set("label", this.label);
+        builder.set("shortLabel", this.shortLabel);
+        builder.set("order", this.getOder());
+        if (this.getFeatureAttributeEmulator() instanceof FeatureAttributeEmulatorExpression) {
+            Expression exp = ((FeatureAttributeEmulatorExpression) this.getFeatureAttributeEmulator()).getExpression();
+            if (exp != null) {
+                builder.set("expression", exp.getPhrase());
+            }
+        }
+        builder.set("isAvoidCachingAvailableValues", this.isAvoidCachingAvailableValues(), false);
+        if (this.isForeingKey()) {
+            builder.set("fk", this.isForeingKey());
+            builder.set("fk_table", this.getForeingKey().getTableName());
+            builder.set("fk_code", this.getForeingKey().getCodeName());
+            builder.set("fk_label", this.getForeingKey().getLabelFormula());
+            builder.set("fk.closedlist", this.getForeingKey().isClosedList());
+        }
+        return builder.toString();
+    }
+
+    @Override
+    public Object get(String name) {
+        if (StringUtils.isBlank(name)) {
+            throw new IllegalArgumentException("Name can't be empty");
+        }
+        switch (name.trim().toLowerCase()) {
+            case "all":
+                return this.getAll();
+            case "isreadonly":
+            case "readonly":
+                return this.isReadOnly();
+            case "hidden":
+                return this.isHidden();
+            case "allownull":
+                return this.allowNull();
+            case "pk":
+            case "ispk":
+            case "primarykey":
+            case "isprimarykey":
+                return this.isPrimaryKey();
+            case "isautomatic":
+            case "automatic":
+                return this.isAutomatic();
+            case "time":
+            case "istime":
+                return this.isTime();
+            case "profile":
+                return this.getDataProfile();
+            case "group":
+                return this.getGroup();
+            case "description":
+                return this.getDescription();
+            case "label":
+                return this.getLabel();
+            case "shortlabel":
+                return this.getShortLabel();
+            case "isavoidcachingavailablevalues":
+            case "avoidcachingavailablevalues":
+            case "nocachingavailablevalues":
+                return this.isAvoidCachingAvailableValues();
+            case "expression":
+                return this.getFeatureAttributeEmulator();
+            case "size":
+                return this.getSize();
+            case "precision":
+                return this.getPrecision();
+            case "scale":
+                return this.getScale();
+            case "roundmode":
+                return this.getRoundMode();
+            case "locale":
+                return this.getLocale();
+            case "order":
+                return this.getOder();
+            case "isfk":
+            case "isforeingkey":
+                return this.isForeingKey();
+            case "fk":
+            case "foreingkey":
+                return this.getForeingKey();
+            case "fk_code":
+            case "foreingkey_code":
+            case "foreingkey.code":
+                return this.getForeingKey().getCodeName();
+            case "fk_label":
+            case "foreingkey_label":
+            case "foreingkey.label":
+                return this.getForeingKey().getLabelFormula();
+            case "fk.closedlist":
+            case "foreingkey_closedlist":
+            case "foreingkey.closedlist":
+                return this.getForeingKey().isClosedList();
+            case "fk_table":
+            case "foreingkey_table":
+            case "foreingkey.table":
+                return this.getForeingKey().getTableName();
+            case "interval":
+                return this.getInterval();
+            case "geomtype":
+            case "geometrytype":
+                return this.getGeomType();
+            case "srs":
+                return this.getSRS();
+            default:
+                throw new IllegalArgumentException("Name attribute '" + name + "' not valid.");
+        }
+    }
+
+    public void setSRSForced(IProjection SRS) {
+        this.SRS = SRS;
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return this.toJsonBuilder().build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.add("name", this.name);
+        builder.add("description", this.description);
+        builder.add("label", this.label);
+        builder.add("shortLabel", this.shortLabel);
+        builder.add("order", this.order);
+        builder.add("groupName", this.groupName);
+        builder.add("dataType", this.dataType);
+        builder.add("size", this.size);
+        builder.add("precision", this.precision);
+        builder.add("scale", this.scale);
+        builder.add("roundMode", this.roundMode);
+
+        builder.add("allowNull", this.allowNull);
+        builder.add("primaryKey", this.primaryKey);
+        builder.add("readOnly", this.readOnly);
+        builder.add("isAutomatic", this.isAutomatic);
+        builder.add("isTime", this.isTime);
+        builder.add("indexed", this.indexed);
+        builder.add("isIndexAscending", this.isIndexAscending);
+        builder.add("allowIndexDuplicateds", this.allowIndexDuplicateds);
+        builder.add("hidden", this.hidden);
+        builder.add("avoidCachingAvailableValues", this.avoidCachingAvailableValues);
+
+        builder.add("geometryType", this.getGeomType());
+        builder.add("srs", this.getSRS());
+
+        builder.add("relationType", this.relationType);
+        builder.add("displaySize", this.displaySize);
+        if(this.locale == null){ //!this.hasLocale()
+            builder.addNull("locale");
+        } else {
+            builder.add("locale", this.getLocale());
+        }
+        builder.add("expression", this.getFeatureAttributeEmulator());
+        if (this.isForeingKey()) {
+            builder.add("fk", this.isForeingKey());
+            builder.add("fk_table", this.getForeingKey().getTableName());
+            builder.add("fk_code", this.getForeingKey().getCodeName());
+            builder.add("fk_label", this.getForeingKey().getLabelFormula());
+            builder.add("fk_closedlist", this.getForeingKey().isClosedList());
+        }
+        builder.add("availableValuesExpression", this.availableValuesExpression);
+        builder.add("defaultValue", Objects.toString(this.defaultValue, null));
+        builder.add("dataProfile", this.getDataProfileName());
+        builder.add("tags", tags);
+        builder.add("availableValues", availableValues);
+        builder.add("additionalInfo", this.additionalInfo);
+        builder.add("defaultFormat", this.defaultFormat);
+        return builder;
+    }
+
+    public void fromJson(JsonObject json) {
+        this.name = json.getString("name");
+        this.description = json.getString("description");
+        this.label = json.getString("label");
+        this.shortLabel = json.getString("shortLabel");
+        this.order = json.getInt("order");
+        this.groupName = json.getString("groupName");
+        this.precision = json.getInt("precision");
+        this.size = json.getInt("size");
+        this.scale = json.getInt("scale");
+        this.roundMode = json.getInt("roundMode");
+
+        this.allowNull = json.getBoolean("allowNull");
+        this.primaryKey = json.getBoolean("primaryKey");
+        this.readOnly = json.getBoolean("readOnly");
+        this.isAutomatic = json.getBoolean("isAutomatic");
+        this.isTime = json.getBoolean("isTime");
+        this.indexed = json.getBoolean("indexed");
+        this.isIndexAscending = json.getBoolean("isIndexAscending");
+        this.allowIndexDuplicateds = json.getBoolean("allowIndexDuplicateds");
+        this.hidden = json.getBoolean("hidden");
+        this.avoidCachingAvailableValues = json.getBoolean("avoidCachingAvailableValues");
+
+        this.relationType = json.getInt("relationType");
+        this.displaySize = json.getInt("displaySize");
+
+        this.dataType = (DataType) Json.toObject(json, "dataType");
+        this.geomType = (GeometryType) Json.toObject(json, "geometryType");
+        this.SRS = (IProjection) Json.toObject(json, "srs");
+        this.locale = (Locale) Json.toObject(json, "locale");
+        this.featureAttributeEmulator = (FeatureAttributeEmulator) Json.toObject(json, "expression");
+
+        this.tags = (Tags) Json.toObject(json, "tags");
+        this.additionalInfo = Json.toMap(json, "additionalInfo");
+        this.availableValues = (DynObjectValueItem[]) Json.toArray(json, "availableValues", new DynObjectValueItem[0]);
+        this.dataProfile = json.getString("dataProfile", null);
+        try {
+            this.defaultValue = json.getString("defaultValue", null);
+            if(!(this.defaultValue instanceof String && ExpressionUtils.isDynamicText((String) this.defaultValue))){
+                this.defaultValue = this.coerce(this.defaultValue);
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't retrive default value for attribute '" + this.name + "'.", ex);
+        }
+        this.availableValuesExpression = (Expression) Json.toObject(json, "availableValuesExpression");
+        if (json.getBoolean("fk", false)) {
+            this.foreingKey = new DefaultForeingKey();
+            this.foreingKey.setForeingKey(true);
+            this.foreingKey.setTableName(json.getString("fk_table", null));
+            this.foreingKey.setCodeName(json.getString("fk_code", null));
+            this.foreingKey.setLabelFormula(json.getString("fk_label", null));
+            this.foreingKey.setClosedList(json.getBoolean("fk_closedlist", false));
+        } else {
+            this.foreingKey = null;
+        }
+        this.description = json.getString("defaultFormat",null);
+    }
+
+    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
+
+        public TheJsonSerializer() {
+        }
+
+        @Override
+        public Class getObjectClass() {
+            return DefaultFeatureAttributeDescriptor.class;
+        }
+
+        @Override
+        public Object toObject(JsonObject json) {
+            DefaultFeatureAttributeDescriptor o = new DefaultFeatureAttributeDescriptor();
+            o.fromJson(json);
+            return o;
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder(Object value) {
+            return ((SupportToJson) value).toJsonBuilder();
+        }
+
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(new TheJsonSerializer());
+    }
+
+    @Override
+    public String getDefaultFormat() {
+        return this.defaultFormat;
+    }
+
+    @Override
+    public String format(Object value) {
+        try {
+            if( StringUtils.isBlank(this.defaultFormat)) {
+                if( this.locale==null ) { // !this.hasLocale()
+                    return DataTypeUtils.toString(Locale.getDefault(), value, Objects.toString(value, ""));
+                } else {
+                    return DataTypeUtils.toString(this.locale, value, Objects.toString(value, ""));
+                }
+            }
+            return String.format(this.defaultFormat, value);
+        } catch(Exception ex) {
+            return Objects.toString(value, "");
+        }
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.feature.impl;
+
+import java.util.Iterator;
+import org.gvsig.fmap.dal.DataSet;
+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.FeatureIndex;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+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.FeatureType.FeatureTypeChanged;
+import org.gvsig.tools.observer.BaseNotification;
+import org.gvsig.tools.undo.command.Command;
+
+@SuppressWarnings("OverridableMethodCallInConstructor")
+public class DefaultFeatureStoreNotification
+        extends BaseNotification
+        implements FeatureStoreNotification {
+
+  private static final int VALUE_SOURCE = 0;
+  private static final int VALUE_FEATURE = 1;
+  private static final int VALUE_COLLECTION_RESULT = 2;
+  private static final int VALUE_LOAD_COLLECTION_SUCCESSFULLY = 3;
+  private static final int VALUE_EXCEPTION_LOADING = 4;
+  private static final int VALUE_COMMAND = 5;
+  private static final int VALUE_FEATURE_INDEX = 6;
+  private static final int VALUE_FEATURETYPE = 7;
+  private static final int VALUE_CHANGEDS_FEATURETYPES = 8;
+  private static final int VALUE_UPDATEDS_FEATURES = 9;
+  private static final int VALUE_INSERTEDS_FEATURES = 10;
+  private static final int VALUE_DELETEDS_FEATURES = 11;
+  private static final int VALUE_IS_SELECTION_COMPROMISED = 12;
+  private static final int VALUE_EDITING_SESSION = 13;
+  private static final int VALUE_EDIT_MODE = 14;
+
+  private static final int VALUES_COUNT = 15;
+
+  public DefaultFeatureStoreNotification(String type) {
+    super(type, VALUES_COUNT);
+    this.setValue(VALUE_LOAD_COLLECTION_SUCCESSFULLY, false);
+    this.setValue(VALUE_IS_SELECTION_COMPROMISED, false);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type) {
+    this(type);
+    this.setValue(VALUE_SOURCE, source);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, String editingSession) {
+    this(type);
+    this.setValue(VALUE_SOURCE, source);
+    this.setValue(VALUE_EDITING_SESSION, editingSession);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, String editingSession, int editMode) {
+    this(type);
+    this.setValue(VALUE_SOURCE, source);
+    this.setValue(VALUE_EDITING_SESSION, editingSession);
+    this.setValue(VALUE_EDIT_MODE, editMode);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, Feature feature) {
+    this(source, type);
+    this.setValue(VALUE_FEATURE, feature);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, Command command) {
+    this(source, type);
+    this.setValue(VALUE_SOURCE, source);
+    this.setValue(VALUE_COMMAND, command);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, Exception exception) {
+    this(source, type);
+    this.setValue(VALUE_LOAD_COLLECTION_SUCCESSFULLY, false);
+    this.setValue(VALUE_EXCEPTION_LOADING, exception);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, DataSet collection) {
+    this(source, type);
+    this.setValue(VALUE_LOAD_COLLECTION_SUCCESSFULLY, true);
+    this.setValue(VALUE_COLLECTION_RESULT, collection);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type,
+          EditableFeatureType featureType) {
+    this(source, type);
+    this.setValue(VALUE_FEATURETYPE, featureType);
+  }
+
+  public DefaultFeatureStoreNotification(DataStore source, String type, FeatureIndex index) {
+    this(source, type);
+    this.setValue(VALUE_FEATURE_INDEX, index);
+  }
+
+  DefaultFeatureStoreNotification(DataStore source, String type, 
+      String editingSession,
+      Iterator<FeatureReference> deleteds, 
+      Iterator<EditableFeature> inserteds, 
+      Iterator<EditableFeature> updateds, 
+      Iterator<FeatureType.FeatureTypeChanged> featureTypesChanged, 
+      boolean isSelectionCompromised
+    ) {
+    this(source, type);
+    this.setValue(VALUE_DELETEDS_FEATURES, deleteds);
+    this.setValue(VALUE_INSERTEDS_FEATURES, inserteds);
+    this.setValue(VALUE_UPDATEDS_FEATURES, updateds);
+    this.setValue(VALUE_CHANGEDS_FEATURETYPES, featureTypesChanged);
+    this.setValue(VALUE_IS_SELECTION_COMPROMISED, isSelectionCompromised);
+    this.setValue(VALUE_EDITING_SESSION, editingSession);
+  }
+
+  @Override
+  public Feature getFeature() {
+    return (Feature) this.getValue(VALUE_FEATURE);
+  }
+
+  @Override
+  public String getEditingSession() {
+    return (String) this.getValue(VALUE_EDITING_SESSION);
+  }
+
+  @Override
+  public int getEditMode() {
+      try {
+        return (int) this.getValue(VALUE_EDIT_MODE);
+      } catch(Exception ex) {
+          return FeatureStore.MODE_UNKNOWN;
+      }
+  }
+
+  @Override
+  public EditableFeatureType getFeatureType() {
+    return (EditableFeatureType) this.getValue(VALUE_FEATURETYPE);
+  }
+
+  @Override
+  public DataSet getCollectionResult() {
+    return (DataSet) this.getValue(VALUE_COLLECTION_RESULT);
+  }
+
+  @Override
+  public Exception getExceptionLoading() {
+    return (Exception) this.getValue(VALUE_EXCEPTION_LOADING);
+  }
+
+  @Override
+  public boolean loadSucefully() {
+    return (boolean) this.getValue(VALUE_LOAD_COLLECTION_SUCCESSFULLY);
+  }
+
+  @Override
+  public Command getCommand() {
+    return (Command) this.getValue(VALUE_COMMAND);
+  }
+
+  @Override
+  public DataStore getSource() {
+    return (DataStore) this.getValue(VALUE_SOURCE);
+  }
+
+  public FeatureIndex getIndex() {
+    return (FeatureIndex) this.getValue(VALUE_FEATURE_INDEX);
+  }
+  
+  @Override
+  public boolean isSelectionCompromised() {
+    return (boolean) this.getValue(VALUE_IS_SELECTION_COMPROMISED);
+  }
+
+  @Override
+  public Iterator<FeatureReference> getDeletedsFeatures() {
+    return (Iterator<FeatureReference>) this.getValue(VALUE_DELETEDS_FEATURES);
+  }
+  
+  @Override
+  public Iterator<Feature> getInsertedsFeatures() {
+    return (Iterator<Feature>) this.getValue(VALUE_INSERTEDS_FEATURES);
+  }
+  
+  @Override
+  public Iterator<Feature> getUpdatedsFeatures() {
+    return (Iterator<Feature>) this.getValue(VALUE_UPDATEDS_FEATURES);
+  }
+  
+  @Override
+  public Iterator<FeatureTypeChanged> getChangedsFeatureTypes() {
+    return (Iterator<FeatureTypeChanged>) this.getValue(VALUE_CHANGEDS_FEATURETYPES);
+  }
+  
+  
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.dal.feature.impl.undo;
+
+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.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureTypeManager;
+import org.gvsig.fmap.dal.feature.impl.editing.memory.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();
+    }
+
+    @Override
+    public void insert(EditableFeature feature) throws DataException {
+        FeatureInsertCommand command = new FeatureInsertCommand(featureStore,
+                feature, "_featureInsert");
+        add(command);
+        command.execute();
+    }
+
+    @Override
+    public void update(EditableFeature 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.editing.memory.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.344/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.344/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.344/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.344/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 46118)
@@ -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.editing.memory.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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FeatureUpdateCommand extends AbstractFeatureCommand {
+
+    private final Feature oldFeature;
+
+    public FeatureUpdateCommand(DefaultFeatureStore featureStore,
+            EditableFeature feature, Feature oldFeature, String description) {
+        super(featureStore, feature, description);
+        this.oldFeature = oldFeature;
+    }
+
+    @Override
+    public EditableFeature getFeature() {
+        return (EditableFeature) this.feature;
+    }
+
+    @Override
+    public void undo() throws UndoException {
+        try {
+            featureStore.doUpdate(oldFeature.getEditable(),
+                    getFeature().getNotEditableCopy());
+        } catch (DataException e) {
+            throw new UndoException(this, e);
+        }
+    }
+
+    @Override
+    public int getType() {
+        return UPDATE;
+    }
+
+    @Override
+    public void execute() throws DataException {
+        featureStore.doUpdate(getFeature(), oldFeature);
+    }
+
+    public Feature getOldFeature() {
+        return oldFeature;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.impl.DefaultFeatureStore;
+import org.gvsig.tools.undo.UndoException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class FeatureInsertCommand extends AbstractFeatureCommand {
+
+    public FeatureInsertCommand(DefaultFeatureStore featureStore,        
+        EditableFeature feature, String description) {
+        super(featureStore, feature, description);
+    }
+
+    @Override
+    public EditableFeature getFeature() {
+        return (EditableFeature) this.feature;
+    }
+    
+    @Override
+    public void undo() throws UndoException {
+       try {
+           featureStore.doDelete(getFeature().getNotEditableCopy());
+       } catch (DataException e) {
+           throw new UndoException(this, e);
+       }
+    }
+
+    @Override
+    public int getType() {
+        return INSERT;
+    }
+
+    @Override
+    public void execute() throws DataException {
+        featureStore.doInsert(getFeature());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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(EditableFeature feature) throws DataException;
+
+    public void update(EditableFeature 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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,930 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.logging.Level;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.expressionevaluator.ExpressionEvaluator;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+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.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+
+/**
+ * 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 {
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureQuery.class);
+
+    public static final String SCALE_PARAM_NAME = "Scale";
+
+    private Map<String,Object> queryParameters = new HashMap();
+
+    private String featureTypeId = null;
+
+    private List<String> attributeNames = new ArrayList();
+
+    private List<String> constantsAttributeNames = new ArrayList();
+
+    private Evaluator filter;
+
+    private FeatureQueryOrder order = new DefaultFeatureQueryOrder();
+
+    private long limit;
+
+    private long pageSize;
+
+    private List<String> groupByColumns;
+    
+    private Map<String,String> aggregateFunctions;
+    
+    private FeatureExtraColumns extraColumn = new DefaultFeatureExtraColumns();
+    
+    private MutableSymbolTable symbolTable;
+	private String storeName;
+    
+    /**
+     * Creates a FeatureQuery which will load all available Features of a type.
+     *
+     */
+    public DefaultFeatureQuery() {
+		super();
+	}
+	
+    public DefaultFeatureQuery(String storeName) {
+        this();
+		this.storeName = storeName;
+		
+    }
+
+    /**
+     * 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
+     */
+    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 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
+     */
+    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 scale
+     *            to view the Features.
+     */
+    public DefaultFeatureQuery(String[] attributeNames, Evaluator filter,
+        double scale) {
+        setAttributeNames(attributeNames);
+        this.filter = filter;
+        this.setScale(scale);
+    }
+
+    @Override
+    public double getScale() {
+        Double scale = (Double) this.getQueryParameter(SCALE_PARAM_NAME);
+        if (scale == null) {
+            return 0;
+        }
+        return scale;
+    }
+
+    @Override
+    public void setScale(double scale) {
+        this.setQueryParameter(SCALE_PARAM_NAME, scale);
+    }
+
+    @Override
+    public Object getQueryParameter(String name) {
+        return queryParameters.get(name);
+    }
+
+    @Override
+    public void setQueryParameter(String name, Object value) {
+        queryParameters.put(name, value);
+    }
+
+    @Override
+    public void setFeatureType(FeatureType featureType) {
+        this.featureTypeId = featureType.getId();
+    }
+
+    @Override
+    public String[] getAttributeNames() {
+        if (this.hasExtraColumnDeclaredAsGroupByField()) {
+            this.retrievesAllAttributes();
+        }
+        return (String[])attributeNames.toArray(new String[attributeNames.size()]);
+    }
+    
+    private boolean hasExtraColumnDeclaredAsGroupByField() {
+        // indica si un campo de agrupaciones es una columna calculada
+        if (this.hasGroupByColumns()) {
+            for (String groupByColumn : groupByColumns) {
+                if (this.extraColumn.get(groupByColumn)!=null) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void setAttributeNames(String[] attributeNames) {
+        this.attributeNames.clear();
+        if (attributeNames != null){
+            for (int i=0 ; i<attributeNames.length ; i++){
+                this.attributeNames.add(attributeNames[i]);
+            }
+        }
+    }
+
+    @Override
+    public void retrievesAllAttributes() {
+        this.attributeNames.clear();
+    } 
+    
+    @Override
+    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);
+    }
+
+    @Override
+    public void addEssentialAttributeNames(FeatureStore store) {
+        FeatureType storeType;
+        try {
+            storeType = store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't access to the default feature type of tghe store", ex);
+        }
+        FeatureAttributeDescriptor[] pks = storeType.getPrimaryKey();
+        if( storeType.hasOID() || ArrayUtils.isEmpty(pks) ) {
+            FeatureAttributeDescriptor attrInt = null;
+            FeatureAttributeDescriptor attrStr = null;
+            FeatureAttributeDescriptor attrNotGeom = null;
+            for (FeatureAttributeDescriptor attr : storeType) {
+                if( attrInt == null && (attr.getType()==DataTypes.INT || attr.getType()==DataTypes.LONG) ) {
+                    attrInt = attr;
+                } else if( attrStr == null && attr.getType()==DataTypes.STRING ) {
+                    attrStr = attr;
+                } else if( attrNotGeom == null && attr.getType()!=DataTypes.GEOMETRY ) {
+                    attrNotGeom = attr;
+                }
+            }
+            if( attrInt != null ) {
+                this.addAttributeName(attrInt.getName());
+            } else if( attrStr != null ) {
+                this.addAttributeName(attrStr.getName());
+            } else if( attrNotGeom != null ) {
+                this.addAttributeName(attrNotGeom.getName());
+            } else {
+                this.addAttributeName(storeType.getAttributeDescriptor(0).getName());
+            }
+        } else {
+            for(FeatureAttributeDescriptor attr : pks ) {
+                this.addAttributeName(attr.getName());
+            }
+        }
+    }
+    
+    @Override
+    public void addPrimaryKeyAttributeNames(FeatureStore store) {
+        FeatureType storeType;
+        try {
+            storeType = store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't access to the default feature type of tghe store", ex);
+        }
+        for(FeatureAttributeDescriptor attr : storeType.getPrimaryKey() ) {
+            this.addAttributeName(attr.getName());
+        }
+    }
+
+    @Override
+    public boolean hasAttributeNames() {
+        if (hasExtraColumnDeclaredAsGroupByField()) {
+            return true;
+        }
+        return !this.attributeNames.isEmpty();
+    }
+
+    @Override
+    public void clearAttributeNames() {
+        this.attributeNames = new ArrayList();
+    }
+
+    @Override
+    public Evaluator getFilter() {
+      if( this.filter instanceof ExpressionEvaluator ) {
+        ExpressionEvaluator ee = (ExpressionEvaluator) this.filter;
+        ee.addSymbolTable(symbolTable);
+      }
+      return filter;
+    }
+
+    @Override
+    public Expression getExpressionFilter() {
+      if( this.filter instanceof ExpressionEvaluator ) {
+        ExpressionEvaluator ee = (ExpressionEvaluator) this.filter;
+        ee.addSymbolTable(symbolTable);
+        return ee.toExpression();
+      }
+      return null;
+    }
+
+    @Override
+    public void setFilter(Expression filter) {
+        if( filter == null ) {
+            this.clearFilter();
+            return;
+        }
+        Evaluator x = new DefaultFeatureExpressionEvaluator(storeName, filter);
+        this.setFilter(x);
+    }
+
+   @Override
+    public void setFilter(String filter) {
+        if( StringUtils.isEmpty(filter) ) {
+            this.clearFilter();
+            return;
+        }
+        try {
+            this.setFilter(ExpressionUtils.createExpression(filter));
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't create filter from '"+filter+"'",ex);
+        }
+    }
+
+    @Override
+    public void setFilter(Evaluator filter) {
+        if( filter == null ) {
+            this.clearFilter();
+            return;
+        }        
+        this.filter = filter;
+        addFilterAttributes(filter);
+    }
+
+    @Override
+    public void addFilter(String filter) {
+        if( StringUtils.isEmpty(filter) ) {
+            return;
+        }
+        this.addFilter(ExpressionUtils.createExpression(filter));
+    }
+
+    @Override
+    public void addFilter(Expression filter) {
+        Evaluator x = new DefaultFeatureExpressionEvaluator(filter);
+        this.addFilter(x);
+    }
+
+    @Override
+    public void addFilter(Evaluator evaluator) {
+        if (evaluator == null) {
+            return;
+        }
+        if (this.filter == null) {
+            this.filter = evaluator;
+        } else {
+            if (this.filter instanceof AndEvaluator) {
+                ((AndEvaluator) this.filter).addEvaluator(evaluator);
+            } else {
+                this.filter = new AndEvaluator(this.filter);
+                ((AndEvaluator) this.filter).addEvaluator(evaluator);
+            }
+        }
+        addFilterAttributes(evaluator);
+    }
+
+    @Override
+    public void clearFilter() {
+      this.filter = null;
+    }
+
+    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]);
+            }
+        }
+    }
+
+    @Override
+    public FeatureQueryOrder getOrder() {
+        return order;
+    }
+
+    @Override
+    public void setOrder(FeatureQueryOrder order) {
+        if(order == null){
+            this.order = new DefaultFeatureQueryOrder();
+        } else {
+            this.order = order;
+        }
+    }
+
+    @Override
+    public boolean hasFilter() {
+        return this.filter != null;
+    }
+
+    @Override
+    public boolean hasOrder() {
+        return this.order != null && this.order.size() > 0;
+    }
+
+    @Override
+    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();
+        }
+        
+        clone.extraColumn = extraColumn.getCopy();
+        
+        if( this.filter instanceof ExpressionEvaluator ) {
+            Expression exp = ((ExpressionEvaluator)this.filter).toExpression();
+            clone.filter =  new DefaultFeatureExpressionEvaluator(exp);
+        }
+        
+        if (groupByColumns!=null) {
+            clone.groupByColumns = new ArrayList<String>();
+            for (String value : groupByColumns) {
+                clone.groupByColumns.add(value);
+            }
+        } else {
+            clone.groupByColumns = null;
+        }
+                
+                
+        if (aggregateFunctions!=null) {
+            clone.aggregateFunctions = new HashMap<String, String>();
+            for (String key : aggregateFunctions.keySet()) {
+                clone.aggregateFunctions.put(key, aggregateFunctions.get(key));
+            }
+        } else {
+            clone.aggregateFunctions = null;
+        }
+        if( this.symbolTable!=null ) {
+            clone.symbolTable = this.symbolTable.clone();
+        }
+        
+        return clone;
+    }
+
+    @Override
+    public FeatureQuery getCopy() {
+        try {
+            return (FeatureQuery) clone();
+        } catch (CloneNotSupportedException e) {
+            LOGGER.debug("Can't clone feature query",e);
+            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;
+    }
+
+    @Override
+    public String getFeatureTypeId() {
+        return featureTypeId;
+    }
+
+    @Override
+    public void setFeatureTypeId(String featureTypeId) {
+        this.featureTypeId = featureTypeId;
+    }
+
+    @Override
+    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);
+        
+        ArrayList<Expression> filterList = new ArrayList<>();
+        if (this.filter instanceof DefaultFeatureExpressionEvaluator) {
+            DefaultFeatureExpressionEvaluator filterExpression = (DefaultFeatureExpressionEvaluator) this.filter;
+           filterList.add(filterExpression.toExpression());
+        } else if (this.filter instanceof AndEvaluator) {
+            AndEvaluator filterAnd = (AndEvaluator) this.filter;
+            List<Evaluator> evaluators = filterAnd.getEvaluators();
+            for (Evaluator evaluator : evaluators) {
+                if (evaluator instanceof DefaultFeatureExpressionEvaluator) {
+                    DefaultFeatureExpressionEvaluator expressionEvaluator = (DefaultFeatureExpressionEvaluator) evaluator;
+                    filterList.add(expressionEvaluator.toExpression());
+                } else {
+                    filterList.clear();
+                    LOGGER.warn(StringUtils.join("Filters in this FeatureQuery will not persist:", this.toString()));
+                    break;
+                }
+            }
+        } else {
+            filterList.clear();
+            LOGGER.warn(StringUtils.join("Filters in this FeatureQuery will not persist:", this.toString()));
+        }
+        
+        state.set("filter", filterList);
+        state.set("limit", this.limit);
+        state.set("pageSize", this.pageSize);
+        
+        state.set("order", this.order);
+        state.set("groupByColumns", this.groupByColumns);
+        state.set("aggregateFunctions", this.aggregateFunctions);
+        state.set("extraColumn", this.extraColumn);
+		state.set("storeName", this.storeName);
+        
+
+    }
+    
+
+    @Override
+    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");
+        List<Expression> filterList = state.getList("filter");
+        String stateFilter = "";
+        DataManager dataManager = DALLocator.getDataManager();
+        if (filterList.size() == 0) {
+            this.filter = null;
+        } else if (filterList.size() == 1) {
+            Expression expression = filterList.get(0);
+            Evaluator evaluator;
+            try {
+                evaluator = dataManager.createFilter(expression);
+            } catch (InitializeException ex) {
+                LOGGER.warn("Can't create evaluator", ex);
+                evaluator = null;
+            }
+            this.filter = evaluator;
+        } else {
+            AndEvaluator andEvaluator = null;
+            for (Expression expression : filterList) {
+                Evaluator evaluator;
+                try {
+                    evaluator = dataManager.createFilter(expression);
+
+                    if (andEvaluator == null) {
+                        andEvaluator = new AndEvaluator(evaluator);
+                    } else {
+                        andEvaluator.addEvaluator(evaluator);
+                    }
+                } catch (InitializeException ex) {
+                    LOGGER.warn("Can't create AndEvaluator", ex);//TODO evaluator a null
+                    break;
+                }
+                this.filter = evaluator;
+
+            }
+        }
+        this.limit = state.getLong("limit");
+        this.pageSize = state.getLong("pageSize");
+		this.storeName = state.getString("storeName");
+        
+        
+        this.order = (FeatureQueryOrder) state.get("order");
+        List asListGroupByColumns = (List) state.getList("groupByColumns");
+        if (asListGroupByColumns!=null) {
+            this.groupByColumns = new ArrayList<>(asListGroupByColumns);
+        } else {
+            this.groupByColumns = null;
+        }
+        Map asMapAggregateFunctions = (Map) state.getMap("aggregateFunctions");
+        if (asMapAggregateFunctions!=null) {
+            this.aggregateFunctions = new HashMap<>(asMapAggregateFunctions);
+        } else {
+            this.aggregateFunctions = null;
+        }
+        this.extraColumn = (FeatureExtraColumns) state.get("extraColumn");
+
+    
+    }
+
+    /**
+     * 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.addDynFieldList("filter")
+                .setClassOfItems(Expression.class)
+                .setMandatory(false);
+
+        definition.addDynFieldObject("order")
+                .setClassOfValue(FeatureQueryOrder.class)
+                .setMandatory(false);
+
+        definition.addDynFieldLong("limit").setMandatory(false);
+
+        definition.addDynFieldLong("pageSize").setMandatory(false);
+        
+       
+        definition.addDynFieldList("groupByColumns")
+                .setClassOfItems(String.class);
+
+        definition.addDynFieldMap("aggregateFunctions")
+                .setClassOfItems(String.class)
+                .setClassOfValue(String.class);
+    
+        definition.addDynFieldObject("extraColumn")
+                .setClassOfValue(DefaultFeatureExtraColumns.class);
+                        
+		definition.addDynFieldString("storeName").setMandatory(false);
+
+    }
+
+    @Override
+    public long getLimit() {
+        return limit;
+    }
+
+    @Override
+    public long getPageSize() {
+        return pageSize;
+    }
+
+    @Override
+    public void setLimit(long limit) {
+        this.limit = limit;
+    }
+
+    @Override
+    public void setPageSize(long pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    @Override
+    public String[] getConstantsAttributeNames() {
+        return (String[])constantsAttributeNames.toArray(new String[constantsAttributeNames.size()]);
+    }
+
+    @Override
+    public void setConstantsAttributeNames(String[] constantsAttributeNames) {
+        this.constantsAttributeNames.clear();
+        if (constantsAttributeNames != null){
+            for (int i=0 ; i<constantsAttributeNames.length ; i++){
+                this.constantsAttributeNames.add(constantsAttributeNames[i]);
+            }
+        }
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public boolean hasConstantsAttributeNames() {
+        return !this.constantsAttributeNames.isEmpty();
+    }
+
+    @Override
+    public void clearConstantsAttributeNames() {
+        this.constantsAttributeNames = new ArrayList();
+    }
+
+  @Override
+  public boolean isAGroupByColumn(String name) {
+    for (String columnName : groupByColumns) {
+      if( StringUtils.equalsIgnoreCase(name, columnName) ) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public List<String> getGroupByColumns() {
+    if( this.groupByColumns == null ) {
+      this.groupByColumns = new ArrayList<>();
+    }
+    return this.groupByColumns;
+  }
+
+  @Override
+  public void addAggregate(String funcName, String columnName) {
+        Map<String, String> aggregateds = this.getAggregateFunctions();
+        aggregateds.put(columnName, funcName);
+  }
+
+  @Override
+  public Map<String, String> getAggregateFunctions() {
+    if( this.aggregateFunctions == null ) {
+      this.aggregateFunctions = new HashMap<>();
+    }
+    return this.aggregateFunctions;
+  }
+
+  @Override
+  public String getAggregate(String name) {    
+      String fn = this.getAggregateFunctions().get(name);
+      if( StringUtils.isAlphanumeric(fn) ) {
+        return fn + "(\""+ name + "\")";
+      }
+      return fn;
+  }
+  
+  @Override
+  public String getAggregate(String tableName, String name) {    
+      String fn = this.getAggregateFunctions().get(name);
+      if (!tableName.startsWith("\"")) {
+         tableName = "\""+tableName+"\"";
+      }
+      if( StringUtils.isAlphanumeric(fn) ) {
+        return fn + "("+tableName+".\""+ name + "\")";
+      }
+      return fn;
+  }
+  
+  @Override
+  public boolean hasAggregateFunctions() {
+    return this.aggregateFunctions != null && !this.aggregateFunctions.isEmpty();
+  }
+
+  @Override
+  public boolean hasGroupByColumns() {
+    return this.groupByColumns != null && !this.groupByColumns.isEmpty();
+  }
+
+  @Override
+  public void copyFrom(FeatureQuery query) {
+    DefaultFeatureQuery other = (DefaultFeatureQuery) query;
+    this.queryParameters = new HashMap();
+    this.queryParameters.putAll(other.queryParameters);
+    
+    this.featureTypeId = other.featureTypeId;
+
+    this.attributeNames.clear();
+    this.attributeNames.addAll(other.attributeNames);
+
+    this.constantsAttributeNames.clear();
+    this.constantsAttributeNames.addAll(other.constantsAttributeNames);
+
+    this.filter = other.filter;
+
+    this.order.copyFrom(other.order);
+
+    this.limit = other.limit;
+
+    this.pageSize = other.pageSize;
+
+    if( this.groupByColumns!=null && other.groupByColumns!=null ) {
+      this.groupByColumns.clear();
+      this.groupByColumns.addAll(other.groupByColumns);
+    } else if( other.groupByColumns!=null ) {
+      this.groupByColumns = new ArrayList<>();
+      this.groupByColumns.addAll(other.groupByColumns);
+    } else if( this.groupByColumns!=null ) {
+      this.groupByColumns = null;
+    }
+    
+    if( this.aggregateFunctions!=null && other.aggregateFunctions!=null ) {
+      this.aggregateFunctions.clear();
+      this.aggregateFunctions.putAll(other.aggregateFunctions);
+    } else if( other.aggregateFunctions!=null ) {
+      this.aggregateFunctions = new HashMap<>(other.aggregateFunctions);
+    } else if( this.aggregateFunctions!=null ) {
+      this.aggregateFunctions=null;
+    }
+    this.extraColumn.copyFrom(other.extraColumn);
+    if( other.symbolTable!=null ) {
+        try {
+            this.symbolTable = other.symbolTable.clone();
+        } catch (CloneNotSupportedException ex) {
+            LOGGER.debug("Can't clone symbol table",ex);
+        }
+    }
+	this.storeName = other.storeName;
+  }
+
+    @Override
+    public FeatureExtraColumns getExtraColumn() {
+        return this.extraColumn;
+    }
+
+    @Override
+    public MutableSymbolTable getSymbolTable() {
+        return symbolTable;
+    }
+
+    @Override
+    public void setSymbolTable(MutableSymbolTable symbolTable) {
+        this.symbolTable = symbolTable;
+    }
+
+    @Override
+    public void setVar(String name, Object value) {
+        if( this.symbolTable==null ) {
+            this.symbolTable = ExpressionUtils.createSymbolTable();
+        }
+        this.symbolTable.setVar(name, value);
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,596 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
+import java.util.Date;
+import java.util.Set;
+import java.util.function.Predicate;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+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.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.timesupport.Instant;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultEditableFeature extends DefaultFeature implements
+        EditableFeature {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultEditableFeature.class);
+
+    private DefaultFeature source;
+//    private boolean inserted;
+    private boolean modified;
+
+    protected DefaultEditableFeature(DefaultFeature feature) {
+        super(feature);
+        this.source = feature;
+//        this.inserted = this.source!=null;
+        this.modified = false;
+    }
+
+    protected DefaultEditableFeature(DefaultEditableFeature feature) {
+        super(feature);
+        this.source = (DefaultFeature) feature.getSource();
+//        this.inserted = this.source!=null;
+        this.modified = feature.modified;
+    }
+
+    public DefaultEditableFeature(DefaultFeatureStore store, FeatureProvider data) {
+        // Se trata de un editable feature sobre una ya existente
+        super(store, data);
+        this.source = null;
+//        this.inserted = this.source!=null;
+        this.modified = false;
+    }
+
+    @Override
+    public Feature getSource() {
+        return this.source;
+    }
+
+    @Override
+    public boolean isUpdatable() {
+        return super.isInserted();
+    }
+    
+    @Override
+    public void setUpdatable(boolean updatable) {
+        super.setInserted(updatable);
+    }
+    
+    @Override
+    public EditableFeature getEditable() {
+        return this;
+    }
+
+    @Override
+    public Feature getCopy() {
+        return new DefaultEditableFeature(this);
+    }
+
+    @Override
+    public Feature getNotEditableCopy() {
+        return new DefaultFeature(this);
+    }
+
+    @Override
+    public void setDefaultGeometry(Geometry geometry) {
+        FeatureAttributeDescriptor attribute = this.getType()
+                .getAttributeDescriptor(
+                        this.getType().getDefaultGeometryAttributeIndex());
+        modified = true;
+        this.set(attribute, geometry);
+    }
+
+    public void __setitem__(String name, Object value) {
+        this.set(name, value);
+    }
+    
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void set(int index, Object value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setArray(int index, Object[] value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+    
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, Boolean.valueOf(value));
+    }
+
+    @Override
+    public void setBoolean(int index, boolean value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setByte(int index, byte value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setDate(int index, Date value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setDouble(int index, double value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setDecimal(String name, BigDecimal value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(name);
+        if ( attribute == null ) {
+            throw new IllegalArgumentException("Attribute '" + name + "' does not exits in the feature.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setDecimal(int index, BigDecimal value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setFeature(int index, Feature value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setFloat(int index, float value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setGeometry(int index, Geometry value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setInt(int index, int value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setLong(int index, long value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setString(int index, String value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void copyFrom(JsonObject values) {
+        this.copyFrom(values, null);    
+    }
+
+//    private boolean notCopyAttribute(FeatureAttributeDescriptor attr,Predicate<FeatureAttributeDescriptor> filter) {
+//        // helper function to use in copyFrom
+//        if (attr==null  ) {
+//            return true;
+//        }
+//        if (attr.isAutomatic()  || attr.isComputed() ) {
+//            return true;
+//        }
+//        if( this.isInserted() &&  attr.isReadOnly()) {
+//            return true;
+//        }
+//        if( filter!=null && !filter.test(attr) ) {
+//            return true;
+//        }
+//        return false;
+//    }
+    
+    @Override
+    public void copyFrom(JsonObject values, Predicate<FeatureAttributeDescriptor> filter) {
+      // iterate over the attributes and copy one by one
+      if( values == null ) {
+          throw new IllegalArgumentException("'values' argument can't be null");
+      }
+      boolean geometryCopied = false;
+        for (FeatureAttributeDescriptor attr : this.getType()) {
+            if( !canSetValue(attr, filter) ) {
+                continue;
+            }
+            String attrname = attr.getName();
+            if( !values.containsKey(attrname) ) {
+                continue;
+            }           
+            Object value;
+            JsonValue jsonValue = values.get(attrname);
+            try {
+                switch( jsonValue.getValueType() ) {
+                    case STRING:
+                        String s = ((JsonString)jsonValue).getString();
+                        switch(attr.getType()) {
+                            case DataTypes.GEOMETRY:
+                                value = GeometryUtils.createFrom(s);
+                                geometryCopied = true;
+                                break;
+                            case DataTypes.TIMESTAMP:
+                                try {
+                                    TemporalAccessor x = DateTimeFormatter.ISO_DATE_TIME.parse(s);
+                                    LocalDateTime date = LocalDateTime.from(x);
+                                    value = java.sql.Timestamp.valueOf(date);
+                                } catch(Exception ex) {
+                                    value = s;
+                                }
+                                break;
+                            case DataTypes.DATE:
+                                try {
+                                    TemporalAccessor x = DateTimeFormatter.ISO_DATE.parse(s);
+                                    LocalDate date = LocalDate.from(x);
+                                    value = java.sql.Date.valueOf(date);
+                                } catch(Exception ex) {
+                                    value = s;
+                                }
+                                break;
+                            case DataTypes.TIME:
+                                try {
+                                    TemporalAccessor x = DateTimeFormatter.ISO_TIME.parse(s);
+                                    LocalTime date = LocalTime.from(x);
+                                    value = java.sql.Time.valueOf(date);
+                                } catch(Exception ex) {
+                                    value = s;
+                                }
+                                break;
+                            case DataTypes.STRING:
+                            default:
+                                value = s;
+                                break;
+                        }
+                        break;
+                    case NUMBER:
+                        JsonNumber n =  (JsonNumber) jsonValue;
+                        switch(attr.getType()) {
+                            case DataTypes.DECIMAL:
+                                value = n.bigDecimalValue();
+                                break;
+                            case DataTypes.BYTE:
+                                value = n.bigDecimalValue();
+                                break;
+                            case DataTypes.FLOAT:
+                            case DataTypes.DOUBLE:
+                                value = n.doubleValue();
+                                break;
+                            case DataTypes.INT:
+                                value = n.intValue();
+                                break;
+                            case DataTypes.LONG:
+                                value = n.longValue();
+                                break;
+                            default:
+                                value = n.toString();
+                                break;
+                        }
+                        break;
+                    case TRUE:
+                        value = true;
+                        break;
+                    case FALSE:
+                        value = false;
+                        break;
+                    case NULL:
+                        value = null;
+                        break;
+                    default:
+                        value = values.getString(attrname);
+                        break;
+                }
+            } catch(Exception ex) {
+                continue;
+            }
+            if (value == null && !attr.allowNull()) {
+                continue;
+            }
+            try {
+                set(attr.getIndex(), value);
+            } catch(Throwable th) {
+                // Ignore
+            }
+        }
+        FeatureAttributeDescriptor attr = this.getType().getDefaultGeometryAttribute();
+        if (attr!=null && !geometryCopied) {
+            if( filter==null || filter.test(attr) ) {
+                GeometryType geomType = this.getType().getDefaultGeometryAttribute().getGeomType();
+                Set<String> keys = values.keySet();
+                for (String key : keys) {
+                    try {
+                        String wkt = values.getString(key);
+                        Geometry geometry = GeometryUtils.createFrom(wkt);
+                        if (GeometryUtils.isSubtype(geomType.getType(), geometry.getType()) || GeometryUtils.canAggregate(geomType.getType(), geometry.getType())) {
+                            this.setDefaultGeometry(geometry);
+                            break;
+                        }
+                    } catch (Throwable tr) {
+                        LOG.trace("Can't get geometry from field {}.", new Object[]{key});
+                    };
+                }
+            }
+        }
+    }
+    
+    @Override
+    public void copyFrom(Feature source) {
+        this.copyFrom(source, null);
+    }
+    
+    @Override
+    public void copyFrom(Feature source, Predicate<FeatureAttributeDescriptor> filter) {
+      // iterate over the attributes and copy one by one
+        if( source == null ) {
+            throw new IllegalArgumentException("'source' argument can't be null");
+        }
+        FeatureType sourceType = source.getType();
+        for (FeatureAttributeDescriptor attr : this.getType()) {
+            if( !canSetValue(attr, filter) ) {
+                continue;
+            }
+            String attrname = attr.getName();
+            if( sourceType.getAttributeDescriptorFromAll(attrname)==null ) {
+              continue;
+            }
+            Object value = source.get(attrname);
+            if (value == null && !attr.allowNull()) {
+                continue;
+            }
+            try {
+                set(attr.getIndex(), value);
+            } catch(Throwable th) {
+                LOG.trace("The exception thrown is: ", th);
+            }
+        }
+        
+    }
+    
+
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setInstant(int index, Instant value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    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.");
+        }
+        modified = true;
+        this.set(attribute, value);
+    }
+
+    @Override
+    public void setInterval(int index, Interval value) {
+        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
+        modified = true;
+        this.set(attribute, value);
+    }
+    
+    @Override
+    public Object getExtraValue(String name) {
+        Object value;
+        FeatureExtraColumns columns = this.getType().getExtraColumns();
+        int index = columns.getIndexOf(name);
+        if (index >= 0) {
+            EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
+            value = attrdesc.getFeatureAttributeEmulator().get(this);
+            return value;
+        }
+        value = this.data.getExtraValue(name);
+        return value;
+    }
+
+    @Override
+    public void validate(int check) throws DataException {
+        ((DefaultFeatureType) this.data.getType()).validateFeature(this, check);
+    }
+    
+    public boolean isModified() {
+        return modified;
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureReferenceSelection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureReferenceSelection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/LargeFeatureReferenceSelection.java	(revision 46118)
@@ -0,0 +1,380 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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 java.util.List;
+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.Feature;
+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.FeatureType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.observer.impl.DelegateWeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Size64;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class LargeFeatureReferenceSelection extends AbstractDisposable
+        implements FeatureReferenceSelection {
+
+        public static final String DYNCLASS_PERSISTENT_NAME = "LargeFeatureReferenceSelection";
+
+    private Set<String> selection;
+    private DefaultFeatureStore featureStore;
+    private Boolean available = null;
+    private DelegateWeakReferencingObservable delegateObservable
+            = new DelegateWeakReferencingObservable(this);
+    
+    public LargeFeatureReferenceSelection(DefaultFeatureStore featureStore) {
+        super();
+        this.featureStore = featureStore;
+        DisposeUtils.bind(this.featureStore);
+        this.selection = featureStore.getManager().createLargeSet();
+
+    }
+
+    LargeFeatureReferenceSelection(FeatureStore featureStore, FeatureSelectionHelper helper) {
+        super();
+        this.featureStore = (DefaultFeatureStore) featureStore;
+        DisposeUtils.bind(this.featureStore);
+        this.selection = this.featureStore.getManager().createLargeSet();
+    }
+    
+    /**
+     * 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.
+     */
+    LargeFeatureReferenceSelection() {
+        super();
+    }
+
+    public FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+    
+    @Override
+    public boolean select(FeatureReference reference) {
+        return this.selection.add(reference.getCode());
+    }
+
+    @Override
+    public boolean deselect(FeatureReference reference) {
+        boolean change;
+        change = this.selection.contains(reference.getCode());
+        this.selection.remove(reference.getCode());
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+        return change;
+    }
+    
+    @Override
+    public void selectAll() throws DataException {
+        try {
+            this.featureStore.accept((Object obj) -> {
+                selection.add(((Feature) obj).getReference().getCode());
+            });
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't select all", ex);
+        }
+    }
+
+    @Override
+    public void deselectAll() throws DataException {
+        this.selection.clear();
+    }
+
+    @Override
+    public boolean isSelected(FeatureReference reference) {
+        return this.selection.contains(reference.getCode());
+    }
+
+    @Override
+    public void reverse() {
+        try {
+            this.featureStore.accept((Object obj) -> {
+                String key = ((Feature) obj).getReference().getCode();
+                if(selection.contains(key)) {
+                    selection.remove(key);
+                } else {
+                    selection.add(key);
+                }                
+            });
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't reverse selection", ex);
+        }
+    }
+    
+    public boolean isEmpty() {
+        if (this.selection == null) {
+            return true;
+        }
+        return this.getSelectedCount() == 0;
+    }
+
+    @Override
+    public long getSelectedCount() {
+        try {
+            return ((Size64)selection).size64();
+        } catch(Exception ex) {
+            return selection.size();
+        }
+    }
+
+    @Override
+    public Iterator referenceIterator() {
+        
+        Iterator<String> it = selection.iterator();
+                
+        Iterator<FeatureReference> itFeatureReferences = new Iterator<FeatureReference>() {
+            @Override
+            public boolean hasNext() {
+                return it.hasNext();
+            }
+
+            @Override
+            public FeatureReference next() {
+                String code = it.next();
+                FeatureReference fref = featureStore.getFeatureReference(code);
+                return fref;
+            }
+        };
+        return itFeatureReferences;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        if (this.available == null) {
+            this.available = false;
+            if(this.featureStore != null){
+                try {
+                    FeatureType type = this.featureStore.getDefaultFeatureType();
+                    this.available = type.supportReferences();
+                } catch (DataException ex) {
+                    this.available = false;
+                }
+            }
+        }
+        return this.available;
+    }
+
+    @Override
+    public boolean isFromStore(DataStore store) {
+        return featureStore.equals(store);
+    }
+
+    @Override
+    public void accept(Visitor visitor) throws BaseException {
+        for (String string : selection) {
+            FeatureReference fref = featureStore.getFeatureReference(string);
+            visitor.visit(fref);
+        }
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        delegateObservable.deleteObservers();
+        deselectAll();
+        DisposeUtils.dispose(this.featureStore);
+        DisposeUtils.dispose(this.selection);
+        this.delegateObservable = null;
+        this.featureStore = null;
+        this.selection = null;
+    }
+
+    @Override
+    public void addObserver(Observer observer) {
+        delegateObservable.addObserver(observer);
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        delegateObservable.beginComplexNotification();
+    }
+
+    @Override
+    public void deleteObserver(Observer observer) {
+        delegateObservable.deleteObserver(observer);
+    }
+
+    @Override
+    public void deleteObservers() {
+        delegateObservable.deleteObservers();
+    }
+
+    @Override
+    public void disableNotifications() {
+        delegateObservable.disableNotifications();
+    }
+
+    @Override
+    public void enableNotifications() {
+        delegateObservable.enableNotifications();
+    }
+
+    @Override
+    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);
+        }
+    }
+    
+//    @Override
+//    public Object clone() throws CloneNotSupportedException {
+//        LargeFeatureReferenceSelection clone = (LargeFeatureReferenceSelection) super.clone();
+//        // Original observers aren't cloned
+//        clone.delegateObservable = new DelegateWeakReferencingObservable(clone);
+//        // Clone internal data
+//        clone.selection = new LargeMapImpl<>();
+//        for (Map.Entry<String, Boolean> entry : selection.entrySet()) {
+//            String key = entry.getKey();
+//            Boolean val = entry.getValue();
+//            clone.selection.put(key, val);
+//        }
+//        return clone;
+//    }
+
+
+    @Override
+    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())) {
+                this.deselect(storeNotif.getFeature().getReference());
+            }
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("store", featureStore);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        featureStore = (DefaultFeatureStore) state.get("store");
+        if(selection != null) {
+            this.selection.clear();
+        } else {
+            this.selection = this.featureStore.getManager().createLargeSet();
+        }
+        Iterator it = state.getIterator("selected");
+        while (it!=null && it.hasNext()) {
+            FeatureReference ref = (FeatureReference) it.next();
+            this.select(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);
+    }
+    
+    protected void clearFeatureReferences() {
+        if (this.selection == null) {
+            return;
+        }
+        this.selection.clear();
+    }
+    
+    public List<FeatureType> getFeatureTypes() {
+        try {
+            return featureStore.getFeatureTypes();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+        public static void registerPersistent() {
+        DynStruct definition = ToolsLocator.getPersistenceManager().addDefinition(
+                DefaultFeatureReferenceSelection.class,
+                DYNCLASS_PERSISTENT_NAME,
+                "LargeFeatureReferenceSelection Persistent definition",
+                null,
+                null
+        );
+
+        definition.addDynFieldObject("store").setClassOfValue(FeatureStore.class).setMandatory(true);
+//        definition.addDynFieldLong("totalSize").setMandatory(true);
+        definition.addDynFieldList("selected").setClassOfItems(FeatureReference.class).setMandatory(false);
+
+    }
+
+
+
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.EditableFeatureAttributeDescriptor;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+
+public class DefaultFeatureStoreTransforms
+    implements FeatureStoreTransforms,
+    Persistent {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureStoreTransforms.class);
+    
+    private DefaultFeatureStore store;
+    private List<FeatureStoreTransform> transforms;
+    private Boolean isTramsformValues;
+    private TransformTemporalList lastTransformStack;
+
+    public DefaultFeatureStoreTransforms() {
+        this.store = null;
+        this.transforms = new ArrayList();
+        this.isTramsformValues = 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);
+    }
+
+    @Override
+    public FeatureStoreTransform add(FeatureStoreTransform transform)
+        throws DataException {
+        checkEditingMode();
+        try {
+            transform.setUp();
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't set up transformation.", ex);
+        }
+        if( transform.getDefaultFeatureType() != null ) {
+            if( !transform.getFeatureTypes().contains(transform.getDefaultFeatureType()) ) {
+                throw new IllegalArgumentException(); // FIXME: Add specific type
+            }
+            this.transforms.add(transform);
+            transform.setFeatureStore(store);
+            transform.setSourceMetadata(this.store.metadata);
+            this.notifyChangeToStore();
+            if( this.isTramsformValues == null || (!this.isTramsformValues) ) {
+                if( transform.isTransformsOriginalValues() ) {
+                    this.isTramsformValues = true;
+                }
+
+            }
+        }
+
+        return transform;
+    }
+
+    @Override
+    public void clear() {
+        checkEditingMode();
+        this.transforms.clear();
+        this.notifyChangeToStore();
+        this.isTramsformValues = Boolean.FALSE;
+    }
+
+    @Override
+    public FeatureStoreTransform getTransform(int index) {
+        return (FeatureStoreTransform) this.transforms.get(index);
+    }
+
+    @Override
+    public Iterator<FeatureStoreTransform> iterator() {
+        return Collections.unmodifiableList(transforms).iterator();
+    }
+
+    @Override
+    public Object remove(int index) {
+        checkEditingMode();
+        Object trans = this.transforms.remove(index);
+        this.notifyChangeToStore();
+        this.isTramsformValues = null;
+        return trans;
+    }
+
+    @Override
+    public boolean remove(FeatureStoreTransform transform) {
+        checkEditingMode();
+        boolean removed = this.transforms.remove(transform);
+        if( removed ) {
+            this.notifyChangeToStore();
+
+        }
+        this.isTramsformValues = null;
+        return removed;
+
+    }
+
+    @Override
+    public int size() {
+        return this.transforms.size();
+    }
+
+    @Override
+    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;
+
+        @Override
+        public boolean add(Object arg0) {
+            if( this.isEmpty() ) {
+                targetFType = ((TransformTemporalListElement) arg0).targetFeatureType;
+            }
+            return super.add(arg0);
+        }
+
+    }
+
+    private 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;
+        DefaultEditableFeature 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.setNew(true);
+            targetData.setOID(source.getData().getOID());
+            target = new DefaultEditableFeature(this.store, targetData);
+            item.transform.applyTransform(source, target);
+            targetData.setNew(source.getData().isNew());
+            target.setInserted(source.isInserted());
+            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 = transforms.get(i);
+            tmpFType = transform.getSourceFeatureTypeFrom(tmpFType);
+        }
+        // se mantienen
+        List<EditableFeatureAttributeDescriptor> extraCols = targetFeatureType.getExtraColumns().getColumns();
+        if (extraCols!=null & !extraCols.isEmpty()) {
+            FeatureExtraColumns tmpExtraCols = tmpFType.getExtraColumns();
+            tmpExtraCols.merge(targetFeatureType.getExtraColumns());
+            ((DefaultFeatureType) tmpFType).setExtraColumn(tmpExtraCols);
+        } 
+        return tmpFType;
+    }
+
+    public FeatureType getDefaultFeatureType() throws DataException {
+        if( this.transforms.isEmpty() ) {
+            return null;
+        }
+        FeatureStoreTransform transform = this.transforms.get(this.transforms.size() - 1);
+        return transform.getDefaultFeatureType();
+    }
+
+    public List<FeatureType> getFeatureTypes() throws DataException {
+        if( this.transforms.isEmpty() ) {
+            return null;
+        }
+        FeatureStoreTransform transform = 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();
+        }
+        this.store = (DefaultFeatureStore) featureStore;
+        for( FeatureStoreTransform transform : this ) {
+            transform.setFeatureStore(featureStore);
+        }
+    }
+    
+    public void setStoreForClone(FeatureStore featureStore) {
+        this.store = (DefaultFeatureStore) featureStore;
+    }
+
+    @Override
+    public boolean isTransformsOriginalValues() {
+        if( this.isTramsformValues == null ) {
+            this.isTramsformValues = false;
+            for( FeatureStoreTransform transform : this ) {
+                if( transform.isTransformsOriginalValues() ) {
+                    this.isTramsformValues = true;
+                    break;
+                }
+            }
+        }
+        return this.isTramsformValues;
+    }
+
+    public FeatureType getFeatureType(String featureTypeId)
+        throws DataException {
+        if( this.transforms.isEmpty() ) {
+            return null;
+        }
+        if( featureTypeId == null ) {
+            return this.getDefaultFeatureType();
+        }
+        for( FeatureType fType : (List<FeatureType>) this.getFeatureTypes() ) {
+            
+        } 
+        Iterator iter = this.getFeatureTypes().iterator();
+        FeatureType fType;
+        while( iter.hasNext() ) {
+            fType = (FeatureType) iter.next();
+            if( fType.getId().equals(featureTypeId) ) {
+                return fType;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        // state.set("store", store);
+        state.set("isTramsformValues", this.isTramsformValues);
+        state.set("transforms", this.transforms);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        this.isTramsformValues = (Boolean) state.get("isTramsformValues");
+        this.transforms = new ArrayList();
+        List<FeatureStoreTransform> x = (List<FeatureStoreTransform>) state.get("transforms");
+        this.transforms.addAll(x);
+        // 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(false);
+
+    }
+
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if( !this.transforms.isEmpty() ) {
+            for (int i = this.transforms.size() - 1; i >= 0; i--) {
+                FeatureStoreTransform transform = transforms.get(i);
+                if( transform!=null && transform.hasDynValue(name) ) {
+                    Object value;
+                    try {
+                        value = transform.getDynValue(name);
+                        if( value!=null ) {
+                            return value;
+                        }
+                    } catch(Exception ex) {
+                        LOGGER.warn("Cant retrieve value of '"+name+ "' in transform '"+transform.getName()+"'.", ex);
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    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() ) {
+            for (int i = this.transforms.size() - 1; i >= 0; i--) {
+                FeatureStoreTransform transform = transforms.get(i);                
+                if( transform.hasDynValue(name) ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultFeatureStoreTransforms cloned = (DefaultFeatureStoreTransforms) super.clone();
+        cloned.transforms = new ArrayList();
+        for( FeatureStoreTransform transform : transforms ) {
+            cloned.transforms.add((FeatureStoreTransform) transform.clone());
+        }
+        cloned.lastTransformStack = null;
+        return cloned;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,225 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.impl.featureset.AbstractFeatureSet;
+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;
+
+public class IndexFeatureSet 
+    extends AbstractFeatureSet
+    implements FeatureSet, FeatureSetProvider, Iterable<Feature> {
+
+	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 = FeatureReferenceFactory.createFromOID(
+                                        store.getFeatureStore(), oid);
+			try {
+				return store.getFeatureStore().getFeatureByReference(ref);
+			} catch (DataException e) {
+				throw new ReadRuntimeException(store.getName(),oid, 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 {
+				FeatureReference ref = FeatureReferenceFactory.createFromOID(
+                                        store.getFeatureStore(), oid);
+				FeatureProvider data = storeProvider
+						.getFeatureProviderByReference((FeatureReferenceProviderServices) ref);
+
+				feature.setData(data);
+
+				return feature;
+			} catch (DataException e) {
+				throw new ReadRuntimeException(store.getName(),oid, 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 {
+        return fastIterator(index, 0);
+    }
+
+    public DisposableIterator fastIterator(long index, long elements) throws DataException {
+        if (store.getFeatureStore().isEditing()) {
+            return this.iterator(index, elements);
+        }
+        return new FastIndexIterator(this.featureReferences.iterator(index));
+    }
+
+
+	public long getSize() throws DataException {
+		return featureReferences.getSize();
+	}
+
+	public boolean isEmpty() {
+		return featureReferences.isEmpty();
+	}
+
+	public DisposableIterator iterator(long index) throws DataException {
+		return new IndexIterator(this.featureReferences.iterator(index));
+	}
+
+	public DisposableIterator iterator(long index, long elements) throws DataException {
+		return new IndexIterator(this.featureReferences.iterator(index));
+	}
+
+	public void delete(Feature feature) throws DataException {
+		index.delete(feature);
+		store.getFeatureStore().delete(feature);
+	}
+
+        @Override
+        public void commitChanges() throws DataException {
+            store.getFeatureStore().commitChanges();
+        }
+
+	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() {
+
+	}
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.store.getFeatureStore();
+    }
+
+        
+        
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DALFile.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DALFile.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DALFile.java	(revision 46118)
@@ -0,0 +1,182 @@
+
+package org.gvsig.fmap.dal.feature.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+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;
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class DALFile implements Persistent {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DALFile.class);
+    
+    private static final String DALFILE_PERSISTENCE_DEFINITION_NAME = "DALResources";
+    
+    public static DALFile getDALFile() {
+        DALFile f = new DALFile();
+        return f;
+    }
+
+    public static DALFile getDALFile(org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource resource) {
+        DALFile df = new DALFile();
+        df.read(resource);
+        return df;
+    }
+    
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition(DALFILE_PERSISTENCE_DEFINITION_NAME) == null) {
+            DynStruct definition = manager.addDefinition(
+                DALFile.class,
+                DALFILE_PERSISTENCE_DEFINITION_NAME, 
+                DALFILE_PERSISTENCE_DEFINITION_NAME + " Persistent definition", 
+                null, 
+                null
+            );
+            definition.addDynFieldString("defaultFeatureType");
+            definition.addDynFieldList("featureTypes")
+                .setClassOfItems(FeatureType.class)
+                .setPersistent(true);
+        }
+    }
+
+    
+    private final List<FeatureType> featureTypes;
+    private String defaultFeatureTypeId;
+    
+    public DALFile() {
+        this.featureTypes = new ArrayList<>();
+    }
+
+    public boolean isEmpty() {
+        if( CollectionUtils.isEmpty(this.featureTypes) ) {
+            return true;
+        }
+        return false;
+    }
+    
+    public void write(org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource resource) {
+        try {
+            OutputStream out = resource.asOutputStream();
+            this.write(out);
+            // Don't close the output stream
+        } catch(Throwable ex) {
+            throw new RuntimeException("Can't write DAL resource.",ex);
+        }
+    }
+
+    public void write(File outfile) {
+        OutputStream out = null;
+        try {
+            out = new FileOutputStream(outfile);
+            this.write(out);
+        } catch(Throwable ex) {
+            throw new RuntimeException("Can't write DAL file.",ex);
+        } finally {
+          IOUtils.closeQuietly(out);
+        }
+    }
+
+    public void write(OutputStream out) {
+        try {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            PersistentState state = manager.getState(this);
+            manager.saveState(state, out);
+        } catch(Throwable ex) {
+            throw new RuntimeException("Can't write DAL resource.",ex);
+        }
+    }
+
+    public void read(org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource resource) {
+        if( resource==null ) {
+            throw new IllegalArgumentException("Resource null is not a valid resource");
+        }
+        try {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            InputStream in = resource.asInputStream();
+            if( in == null ) {
+                throw new RuntimeException("Can't read DAL resource, input stream is null (resname="+resource.getName()+", resurl="+Objects.toString(resource.getURL())+", restype="+resource.getClass().getName()+").");
+            }
+            DALFile x = (DALFile) manager.getObject(in);
+            this.featureTypes.clear();
+            this.featureTypes.addAll(x.featureTypes);
+        } catch(Throwable ex) {
+            throw new RuntimeException("Can't read DAL resource (resname="+resource.getName()+", resurl="+Objects.toString(resource.getURL())+", restype="+resource.getClass().getName()+").",ex);
+        }
+    }
+    
+    public void setFeatureType(FeatureType featureType) throws DataException {
+        this.featureTypes.clear();
+        this.featureTypes.add(featureType.getCopy());
+        this.defaultFeatureTypeId = featureType.getId();
+    }
+
+    public void setStore(DefaultFeatureStore store) throws DataException {
+        this.featureTypes.clear();
+        
+        List<FeatureType> theTypes = store.getFeatureTypes();
+        for (FeatureType theType : theTypes) {
+            this.featureTypes.add(theType.getCopy());
+        }
+        this.defaultFeatureTypeId = store.getDefaultFeatureType().getId();
+    }
+
+    public void updateStore(DefaultFeatureStore store) throws DataException {
+        List<FeatureType> theTypes = new ArrayList<>();
+        FeatureType defaultFeatureType = null;
+        for (FeatureType type : this.featureTypes) {
+            ((DefaultFeatureType)type).setStore(store);
+            theTypes.add(type);
+            if( StringUtils.equals(defaultFeatureTypeId, type.getId()) ) {
+                defaultFeatureType = type;
+            }
+        }
+        if( theTypes.isEmpty() ) {
+            return;
+        }
+        if( defaultFeatureType==null ) {
+            defaultFeatureType = theTypes.get(0);
+        }
+        store.setFeatureTypes(theTypes, defaultFeatureType);
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("defaultFeatureType", defaultFeatureTypeId);
+        state.set("featureTypes", featureTypes);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        try {
+            defaultFeatureTypeId = state.getString("defaultFeatureType");
+            List<FeatureType> theTypes = state.getList("featureTypes");
+            featureTypes.clear();
+            for (FeatureType theType : theTypes) {
+                this.featureTypes.add(theType);
+            }
+        } catch(Throwable th) {
+            LOGGER.warn("Can't load DAL resource.", th);
+            throw new PersistenceException(th);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,1577 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Predicate;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.dal.DALLocator;
+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.DataProfile;
+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.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+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.dynobjectutils.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+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;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeature implements Feature, EvaluatorData, Cloneable {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeature.class);
+
+    private static DataTypesManager dataTypesManager = null;
+    protected FeatureProvider data;
+    protected FeatureReference reference;
+    private WeakReference storeRef;
+
+    private boolean inserted = false;
+    private Object[] extraValuesData;
+    private Map<String, Object> extraValues; // not persistent
+
+    /*
+	 * 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.extraValuesData = null;
+        this.storeRef = new WeakReference(store);
+        this.reference = null;
+        this.inserted = !data.isNew();
+    }
+
+    DefaultFeature(DefaultFeature feature) {
+        this.data = feature.data.getCopy();
+        this.extraValuesData = ArrayUtils.clone(feature.extraValuesData);
+        this.storeRef = feature.storeRef;
+        this.reference = feature.reference;
+        this.inserted = feature.isInserted();
+    }
+
+    public DefaultFeature(FeatureType targetType, Feature sourceFeature) {
+        DefaultFeature defaultFeature = (DefaultFeature) sourceFeature;
+        this.data = new DefaultFeatureProvider(targetType, (DefaultFeatureProvider) defaultFeature.getData());
+        this.extraValuesData = null;
+        this.storeRef = defaultFeature.storeRef;
+        this.reference = defaultFeature.reference;
+        this.inserted = defaultFeature.isInserted();
+
+        FeatureType sourceType = sourceFeature.getType();
+
+        for (FeatureAttributeDescriptor targetAttrDescriptor : targetType) {
+            if (targetAttrDescriptor.isComputed()) {
+                continue;
+            }
+            int sourceIndex = sourceType.getIndex(targetAttrDescriptor.getName());
+            if (sourceIndex < 0) {
+                continue;
+            }
+            Object value = sourceFeature.get(sourceIndex);
+            if (value == null && !targetAttrDescriptor.allowNull()) {
+                continue;
+            }
+            this.setforced(targetAttrDescriptor.getIndex(), targetAttrDescriptor, value);
+        }
+    }
+
+    public void setData(FeatureProvider data) {
+        this.data = data;
+        this.extraValuesData = null;
+        this.reference = null;
+        this.inserted = true;
+    }
+
+    public FeatureProvider getData() {
+        return this.data;
+    }
+
+    protected DataTypesManager getDataTypesManager() {
+        if (dataTypesManager == null) {
+            dataTypesManager = ToolsLocator.getDataTypesManager();
+        }
+        return dataTypesManager;
+    }
+
+    public boolean canSetValue(String name) {
+        return this.canSetValue(this.getType().getAttributeDescriptor(name), null);
+    }
+
+    public boolean canSetValue(FeatureAttributeDescriptor attr,Predicate<FeatureAttributeDescriptor> filter) {
+        // helper function to use in copyFrom
+        if (attr==null  ) {
+            return false;
+        }
+        if (attr.isAutomatic()  || attr.isComputed() ) {
+            return false;
+        }
+        if( this.isInserted() &&  attr.isReadOnly()) {
+            return false;
+        }
+        if( filter!=null && !filter.test(attr) ) {
+            return false;
+        }
+        return true;
+    }
+
+    protected void set(FeatureAttributeDescriptor attribute, Object value) {
+        int i = attribute.getIndex();
+
+        if( this.isInserted() ) {
+            if (attribute.isReadOnly()) {
+                throw new SetReadOnlyAttributeException(attribute.getName(), this.getType());
+            }
+        } else {
+            if (attribute.isComputed()) {
+                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);
+        }
+        this.setforced(i, attribute, value);
+    }
+
+    private void setforced(int i, FeatureAttributeDescriptor attribute, Object value) {
+
+        Class objectClass = attribute.getObjectClass();
+        if (objectClass != null) {
+            if (objectClass.isInstance(value)) {
+                if (attribute.getType() == DataTypes.DECIMAL) {
+                    BigDecimal d = (BigDecimal) value;
+                    if (d.scale() == attribute.getScale() && d.precision() <= attribute.getPrecision()) {
+                        this.data.set(i, value);
+                        return;
+                    }
+                } else if (attribute.getType() == DataTypes.GEOMETRY) {
+                    if (!attribute.getGeomType().equals(((Geometry) value).getGeometryType())) {
+                        try {
+                            Coercion coercer = attribute.getDataType().getCoercion();
+                            value = coercer.coerce(value, attribute.getCoercionContext());
+                        } catch (CoercionException e) {
+                            throw new IllegalArgumentException("Can't convert to "
+                                    + attribute.getDataType().getName()
+                                    + " from '"
+                                    + value == null ? "NULL" : value.getClass().getName()
+                                            + "' with value '"
+                                            + Objects.toString(value)
+                                            + "' and context '"
+                                            + attribute.getCoercionContext()
+                                            + "'.");
+                        }
+                    } 
+                    this.data.set(i, value);
+                    return;
+                } else {
+                    this.data.set(i, value);
+                    return;
+                }
+            }
+            DataProfile dataProfile = attribute.getDataProfile();
+            if (dataProfile != null) {
+                try {
+                    value = dataProfile.coerce(
+                            attribute.getDataType(),
+                            value,
+                            attribute.getTags()
+                    );
+                } catch (CoercionException e) {
+
+                }
+            }
+            try {
+                Coercion coercer = attribute.getDataType().getCoercion();
+                if (attribute.getType() == DataTypes.STRING && value instanceof Boolean) {
+                    value = coercer.coerce(value, attribute.getCoercionContext());
+                    value = StringUtils.left((String) value, attribute.getSize());
+                } else {
+                    value = coercer.coerce(value, attribute.getCoercionContext());
+                }
+            } catch (CoercionException e) {
+                throw new IllegalArgumentException("Can't convert to "
+                        + attribute.getDataType().getName()
+                        + " from '"
+                        + value == null ? "NULL" : value.getClass().getName()
+                                + "' with value '"
+                                + Objects.toString(value)
+                                + "' and context '"
+                                + attribute.getCoercionContext()
+                                + "'.");
+            }
+        }
+        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() + "'.");
+        }
+    }
+
+    public void initializeValues() {
+        FeatureType type = this.getType();
+        for (FeatureAttributeDescriptor attribute : type) {
+            if (attribute.isAutomatic() || attribute.isReadOnly()
+                    || attribute.isComputed()) {
+                continue;
+            }
+            if (attribute.getDefaultValue() == null && !attribute.allowNull()) {
+                continue;
+            }
+            Object value = attribute.getDefaultValue();
+            if (value instanceof CharSequence) {
+                String s = ((CharSequence) value).toString();
+                if (ExpressionUtils.isDynamicText(s)) {
+                    try {
+                        value = ExpressionUtils.evaluateDynamicText(s);
+                    } catch (Throwable th) {
+                        value = null;
+                    }
+                }
+            }
+            this.set(attribute, value);
+        }
+    }
+
+    public void clear() {
+        initializeValues();
+    }
+
+    public void initializeValues(Feature feature) {
+        FeatureType myType = this.getType();
+        FeatureType type = feature.getType();
+        extraValuesData = null;
+        for (FeatureAttributeDescriptor attribute : type) {
+            FeatureAttributeDescriptor myAttribute = myType.getAttributeDescriptor(attribute.getName());
+            if (myAttribute != null) {
+                this.set(myAttribute, feature.get(attribute.getIndex()));
+            }
+        }
+    }
+
+    @Override
+    public FeatureStore getStore() {
+        return (FeatureStore) this.storeRef.get();
+    }
+
+    @Override
+    public FeatureType getType() {
+        return this.data.getType();
+    }
+
+    @Override
+    public EditableFeature getEditable() {
+        return new DefaultEditableFeature(this);
+    }
+
+    @Override
+    public Feature getCopy() {
+        return new DefaultFeature(this);
+    }
+
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultFeature(this);
+    }
+
+    @Override
+    public FeatureReference getReference() {
+        if (this.reference == null) {
+            if (!isInserted()) {
+                return null;
+            }
+            reference = FeatureReferenceFactory.createFromFeature(this);
+        }
+        return this.reference;
+    }
+
+    @Override
+    public Object getOrDefault(String name, Object defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        return this.get(index);
+    }
+    
+    @Override
+    public Object getOrDefault(String name, int type, Object defaultValue) {
+        DataType dataType = ToolsLocator.getDataTypesManager().get(type);
+        return getOrDefault(name, dataType, defaultValue);
+    }
+    
+    @Override
+    public Object getOrDefault(String name, DataType type, Object defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            Object value = this.get(index);
+            if(value == null){
+                return defaultValue;
+            }
+            return type.coerce(value);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public String getStringOrDefault(String name, String defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return (String) this.get(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public boolean getBooleanOrDefault(String name, boolean defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getBoolean(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public int getIntOrDefault(String name, int defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getInt(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public long getLongOrDefault(String name, long defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getLong(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public float getFloatOrDefault(String name, float defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getFloat(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public double getDoubleOrDefault(String name, double defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getDouble(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public BigDecimal getDecimalOrDefault(String name, BigDecimal defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getDecimal(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public Date getDateOrDefault(String name, Date defaultValue) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            return defaultValue;
+        }
+        try {
+            return this.getDate(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public Object getOrDefault(int index, Object defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.get(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public String getStringOrDefault(int index, String defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getString(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public boolean getBooleanOrDefault(int index, boolean defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getBoolean(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public int getIntOrDefault(int index, int defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getInt(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public long getLongOrDefault(int index, long defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getLong(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public float getFloatOrDefault(int index, float defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getFloat(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public double getDoubleOrDefault(int index, double defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getDouble(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public BigDecimal getDecimalOrDefault(int index, BigDecimal defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getDecimal(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public Date getDateOrDefault(int index, Date defaultValue) {
+        if (index < 0 || index >= this.data.getType().size()) {
+            return defaultValue;
+        }
+        try {
+            return this.getDate(index);
+        } catch (Throwable th) {
+            return defaultValue;
+        }
+    }
+
+    @Override
+    public void validate(int check) throws DataException {
+        ((DefaultFeatureType) this.data.getType()).validateFeature(this, check);
+    }
+
+    class UnableToGetReferenceException extends BaseRuntimeException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 1812805035204824163L;
+
+        /**
+         * @param exception
+         */
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public UnableToGetReferenceException(BaseException exception) {
+            super("Unable to get reference", "_UnableToGetReferenceException",
+                    serialVersionUID);
+            this.initCause(exception);
+
+        }
+
+    }
+
+    @Override
+    public List getSRSs() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Envelope getDefaultEnvelope() {
+        Envelope envelope = this.data.getDefaultEnvelope();
+        if (envelope == null) {
+            int i = this.data.getType().getDefaultGeometryAttributeIndex();
+            if (i < 0) {
+                return null;
+            }
+            Geometry geom = this.getDefaultGeometry();
+            if (geom != null) {
+                envelope = geom.getEnvelope();
+            }
+        }
+        return envelope;
+    }
+
+    @Override
+    public Geometry getDefaultGeometry() {
+        Geometry geom = this.data.getDefaultGeometry();
+        if (geom == null) {
+            int i = this.data.getType().getDefaultGeometryAttributeIndex();
+            if (i < 0) {
+                return null;
+            }
+            Object x = this.get(i);
+            if (x instanceof Geometry) {
+                geom = (Geometry) x;
+            } else {
+                geom = this.getGeometry(i);
+            }
+        }
+        if (geom != null) {
+            if (geom.getProjection() == null) {
+                FeatureType type = this.getType();
+                DefaultFeatureAttributeDescriptor attrdesc = (DefaultFeatureAttributeDescriptor) type.get(type.getDefaultGeometryAttributeIndex());
+                IProjection proj = attrdesc.getSRS(this.storeRef);
+                geom.setProjection(proj);
+            }
+        }
+        return geom;
+    }
+
+//    @Override
+//    public Time getDefaultTime() {
+//    	Time time = this.data.getDefaultTime();
+//        if( time == null ) {
+//            int i = this.data.getType().getDefaultTimeAttributeIndex();
+//            Object x = this.get(i);
+//            if( x instanceof Time ) {
+//                time = (Time) x;
+//            } else {
+//                time = this.getTime(i);
+//            }
+//        }
+//        return time;
+//    }
+//
+    @Override
+    public IProjection getDefaultSRS() {
+        IProjection srs = this.data.getType().getDefaultSRS();
+        if (srs == null) {
+            FeatureType type = this.getType();
+            DefaultFeatureAttributeDescriptor attrdesc = (DefaultFeatureAttributeDescriptor) type.get(type.getDefaultGeometryAttributeIndex());
+            srs = attrdesc.getSRS(this.storeRef);
+        }
+        return srs;
+    }
+
+    @Override
+    public List getGeometries() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Object getFromProfile(int index) {
+        FeatureAttributeDescriptor descriptor = this.data.getType().getAttributeDescriptor(index);
+        Object value = this.get(index);
+        String profileName = descriptor.getDataProfileName();
+        if (StringUtils.isBlank(profileName)) {
+            return value;
+        }
+        DataProfile profile = DALLocator.getDataManager().getDataProfile(profileName);
+        if (profile == null) {
+            return value;
+        }
+        return profile.createData(value, descriptor.getTags());
+    }
+
+    @Override
+    public Object getFromProfile(String name) {
+        FeatureAttributeDescriptor descriptor = this.data.getType().getAttributeDescriptor(name);
+        return this.getFromProfile(descriptor.getIndex());
+    }
+
+    @Override
+    public Object get(String name) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            // buscamos en los extra cols
+            if (hasExtraColumnValue(name)) {
+                return getExtraColumnValue(name);
+            }
+            if (hasExtraValue(name)) {
+                return getExtraValue(name);
+            }
+            // y si esta ahi return
+            throw new IllegalArgumentException("Attribute name '" + name + "' not found in the feature.");
+        }
+        return this.get(index);
+    }
+
+    @Override
+    public boolean isNull(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 this.data.get(index) == null;
+        }
+        Evaluator eval = attribute.getEvaluator();
+        if (eval == null) {
+            return this.data.get(index) == null;
+        }
+        Object value = this.data.get(index);
+        if (value != null) {
+            return true;
+        }
+        try {
+            value = eval.evaluate(this);
+        } catch (EvaluatorException e) {
+            throw new DataEvaluatorRuntimeException(e);
+        }
+        this.data.set(index, value);
+        return value == null;
+    }
+
+    @Override
+    public boolean isNull(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.isNull(index);
+    }
+
+    public boolean has_key(String key) {
+        Object x = this.getType().get(key);
+        return x != null;
+    }
+
+    public List<String> keys() {
+        List<String> ks = new ArrayList<>();
+        for (FeatureAttributeDescriptor attr : this.getType()) {
+            ks.add(attr.getName());
+        }
+        return ks;
+    }
+
+    public Iterator<String> iterkeys() {
+        final Iterator it = this.getType().iterator();
+        return new Iterator<String>() {
+            @Override
+            public boolean hasNext() {
+                return it.hasNext();
+            }
+
+            @Override
+            public String next() {
+                return ((FeatureAttributeDescriptor) it.next()).getName();
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+            }
+        };
+    }
+
+    public Iterator iteritems() {
+        final Iterator it = this.getType().iterator();
+        return new Iterator<Map.Entry>() {
+            @Override
+            public boolean hasNext() {
+                return it.hasNext();
+            }
+
+            @Override
+            public Map.Entry next() {
+                final String name = ((FeatureAttributeDescriptor) it.next()).getName();
+                return new Map.Entry<String, Object>() {
+                    @Override
+                    public String getKey() {
+                        return name;
+                    }
+
+                    @Override
+                    public Object getValue() {
+                        return get(name);
+                    }
+
+                    @Override
+                    public Object setValue(Object value) {
+                        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+                    }
+
+                };
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+            }
+        };
+    }
+
+    @Override
+    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() + ".");
+        }
+        Object value = this.data.get(index);
+        FeatureAttributeDescriptor attribute = type.getAttributeDescriptor(index);
+        if (type.hasEvaluators()) {
+            Evaluator eval = attribute.getEvaluator();
+            if (eval != null) {
+                if (value == null) { // Ya hemos calculado el campo ?
+                    // FIXME: para comprobar si esta calculado usar un array especifico.
+                    try {
+                        value = eval.evaluate(this);
+                    } catch (EvaluatorException e) {
+                        throw new DataEvaluatorRuntimeException(e);
+                    }
+                    this.data.set(index, value);
+                }
+            }
+        }
+        value = get(attribute, value);
+        return value;
+    }
+
+    private Object get(FeatureAttributeDescriptor featureAttributeDescriptor, Object value) {
+        FeatureAttributeEmulator emulator = featureAttributeDescriptor.getFeatureAttributeEmulator();
+        if (emulator != null) {
+//            int index = featureAttributeDescriptor.getIndex();
+//            value = this.data.get(index);
+//            if( value==null ) {
+            value = this.getExtraValue(featureAttributeDescriptor.getName());
+            if (value==null) {
+                value = emulator.get(this);
+            }
+//                this.data.set(index,value);
+//            }
+        } else {
+            FeatureAttributeGetter getter = featureAttributeDescriptor.getFeatureAttributeGetter();
+            if (getter != null) {
+                value = getter.getter(value);
+            }
+        }
+        value = coerce(featureAttributeDescriptor, value);
+        return value;
+    }
+    
+    private Object coerce(FeatureAttributeDescriptor attr, Object value) {
+        DataType dataType = attr.getDataType();
+        Class<? extends DataType> theClass = dataType.getDefaultClass();
+        if (theClass != null && !theClass.isInstance(value)) {
+            try {
+                value = this.getDataTypesManager().coerce(dataType.getType(), value);
+            } catch (CoercionException e) {
+                throw new IllegalArgumentException(
+                        "Can't convert to " + theClass.getSimpleName()
+                        + " from '" + value.getClass().getSimpleName()
+                        + "' with value '" + value.toString() + "'.");
+            }
+        }
+        if (attr.getType() == DataTypes.GEOMETRY) {
+            if (value != null) {
+                Geometry geom = (Geometry) value;
+                if (geom.getProjection() == null) {
+                    IProjection proj = ((DefaultFeatureAttributeDescriptor) attr).getSRS(this.storeRef);
+                    geom.setProjection(proj);
+                }
+            }
+        }
+        return value;
+    }
+
+    @Override
+    public byte[] getByteArray(String name) {
+        return this.getByteArray(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public byte[] getByteArray(int index) {
+        return (byte[]) this.get(index);
+    }
+
+    @Override
+    public Object[] getArray(String name) {
+        return this.getArray(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public Object[] getArray(int index) {
+        return (Object[]) this.get(index);
+    }
+
+    @Override
+    public boolean getBoolean(String name) {
+        return this.getBoolean(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public boolean getBoolean(int index) {
+        Boolean value = ((Boolean) this.get(index, Boolean.class, DataTypes.BOOLEAN));
+        if (value == null) {
+            return false;
+        }
+        return value;
+    }
+
+    @Override
+    public byte getByte(String name) {
+        return this.getByte(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public byte getByte(int index) {
+        Byte value = ((Byte) this.get(index, Byte.class, DataTypes.BYTE));
+        if (value == null) {
+            return 0;
+        }
+        return value;
+    }
+
+    @Override
+    public java.sql.Date getDate(String name) {
+        return this.getDate(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public java.sql.Date getDate(int index) {
+        java.sql.Date value = ((java.sql.Date) this.get(index, java.sql.Date.class, DataTypes.DATE));
+        return value;
+    }
+
+    @Override
+    public java.sql.Time getTime(String name) {
+        return this.getTime(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public java.sql.Time getTime(int index) {
+        java.sql.Time value = ((java.sql.Time) this.get(index, java.sql.Time.class, DataTypes.TIME));
+        return value;
+    }
+
+    @Override
+    public java.sql.Timestamp getTimestamp(String name) {
+        return this.getTimestamp(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public java.sql.Timestamp getTimestamp(int index) {
+        java.sql.Timestamp value = ((java.sql.Timestamp) this.get(index, java.sql.Timestamp.class, DataTypes.TIMESTAMP));
+        return value;
+    }
+
+    @Override
+    public double getDouble(String name) {
+        return this.getDouble(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public double getDouble(int index) {
+
+        Double value = ((Double) this.get(index, Double.class, DataTypes.DOUBLE));
+        if (value == null) {
+            return 0;
+        }
+        return value;
+    }
+
+    @Override
+    public BigDecimal getDecimal(String name) {
+        return this.getDecimal(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public BigDecimal getDecimal(int index) {
+        BigDecimal value = ((BigDecimal) this.get(index, BigDecimal.class, DataTypes.DECIMAL));
+        return value;
+    }
+
+    @Override
+    public Feature getFeature(String name) {
+        return this.getFeature(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public Feature getFeature(int index) {
+        return (Feature) this.get(index);
+    }
+
+    @Override
+    public float getFloat(String name) {
+        return this.getFloat(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public float getFloat(int index) {
+        Float value = ((Float) this.get(index, Float.class, DataTypes.FLOAT));
+        if (value == null) {
+            return 0;
+        }
+        return value;
+    }
+
+    @Override
+    public Geometry getGeometry(String name) {
+        return this.getGeometry(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public Geometry getGeometry(int index) {
+        return (Geometry) this.get(index, Geometry.class, DataTypes.GEOMETRY);
+    }
+
+    @Override
+    public int getInt(String name) {
+        return this.getInt(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public int getInt(int index) {
+        Integer value = ((Integer) this.get(index, Integer.class, DataTypes.INT));
+        if (value == null) {
+            return 0;
+        }
+        return value;
+    }
+
+    @Override
+    public long getLong(String name) {
+        return this.getLong(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public long getLong(int index) {
+        Long value = ((Long) this.get(index, Long.class, DataTypes.LONG));
+        if (value == null) {
+            return 0;
+        }
+        return value;
+    }
+
+    @Override
+    public String getString(String name) {
+        return this.getString(this.data.getType().getIndex(name));
+    }
+
+    @Override
+    public String getString(int index) {
+        return (String) this.get(index, String.class, DataTypes.STRING);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public Iterator getDataNames() {
+        class DataNamesIterator implements Iterator {
+
+            Iterator attributeIteraror;
+
+            DataNamesIterator(DefaultFeature feature) {
+                this.attributeIteraror = feature.getType().iterator();
+            }
+
+            @Override
+            public boolean hasNext() {
+                return this.attributeIteraror.hasNext();
+            }
+
+            @Override
+            public Object next() {
+                return ((FeatureAttributeDescriptor) this.attributeIteraror
+                        .next()).getName();
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+
+        }
+        return new DataNamesIterator(this);
+    }
+
+    @Override
+    public Object getDataValue(String name) {
+        name = name.toLowerCase();
+        try {
+            return get(name);
+        } catch (IllegalArgumentException ex) {
+            if ("defaultgeometry".equalsIgnoreCase(name)) {
+                return this.getDefaultGeometry();
+            }
+            throw ex;
+        }
+    }
+
+    @Override
+    public Iterator getDataValues() {
+        class DataValuesIterator implements Iterator {
+
+            DefaultFeature feature;
+            int current = 0;
+
+            DataValuesIterator(DefaultFeature feature) {
+                this.feature = feature;
+            }
+
+            @Override
+            public boolean hasNext() {
+                return current < feature.getType().size() - 1;
+            }
+
+            @Override
+            public Object next() {
+                return feature.get(current++);
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+
+        }
+        return new DataValuesIterator(this);
+    }
+
+    @Override
+    public boolean hasContextValue(String name) {
+        name = name.toLowerCase();
+        if (name.equals("store")) {
+            return true;
+        }
+
+        if (name.equals("featuretype")) {
+            return true;
+        }
+
+        return name.equals("feature");
+    }
+
+    @Override
+    public boolean hasDataValue(String name) {
+        return this.hasValue(name);
+    }
+
+//    @Override
+//    public Time getTime(int index) {
+//        return ((Time) this.get(index,Time.class,DataTypes.INSTANT));
+//    }
+//
+//    @Override
+//    public Time getTime(String name) {
+//        return this.getInstant(this.data.getType().getIndex(name));
+//    }
+//
+//    @Override
+//    public Instant getInstant(int index) {
+//        return ((Instant) this.get(index,Instant.class,DataTypes.INSTANT));
+//    }
+//
+//    @Override
+//    public Instant getInstant(String name) {
+//        return this.getInstant(this.data.getType().getIndex(name));
+//    }
+//
+//    @Override
+//    public Interval getInterval(int index) {
+//        return ((Interval) this.get(index,Interval.class,DataTypes.INTERVAL));
+//    }
+//
+//    @Override
+//    public Interval getInterval(String name) {
+//        return this.getInterval(this.data.getType().getIndex(name));
+//    }
+//
+    @Override
+    public DynObject getAsDynObject() {
+        DynObjectFeatureFacade facade = new DynObjectFeatureFacade(this);
+        return facade;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        FeatureAttributeDescriptor[] attributeDescriptors
+                = getType().getAttributeDescriptors();
+        for (int i = 0; i < attributeDescriptors.length; i++) {
+            String name = attributeDescriptors[i].getName();
+            Object value = get(name);
+            builder.append(value);
+            if (i < attributeDescriptors.length - 1) {
+                builder.append(", ");
+            }
+        }
+        return builder.toString();
+    }
+
+    /**
+     * It is a new feature that has already been inserted into the store but has not yet been saved to disk
+     * 
+     * @return the inserted
+     */
+    public boolean isInserted() {
+        return inserted;
+    }
+
+    /**
+     * If true, marks the feature as already inserted in the vault but has not yet been saved to disk
+     * 
+     * @param inserted the inserted to set
+     */
+    public void setInserted(boolean inserted) {
+        this.inserted = inserted;
+//        this.data.setNew(!inserted);
+    }
+
+    @Override
+    public EvaluatorData getEvaluatorData() {
+        return this;
+    }
+
+    @Override
+    public int size() {
+        return this.data.getType().size();
+    }
+
+    public boolean isEmpty() {
+        return false;
+    }
+
+    public Iterator<String> iterator() {
+        final Iterator<FeatureAttributeDescriptor> x = this.data.getType().iterator();
+        return new Iterator<String>() {
+            @Override
+            public boolean hasNext() {
+                return x.hasNext();
+            }
+
+            @Override
+            public String next() {
+                return x.next().getName();
+            }
+        };
+    }
+
+    public boolean containsKey(String key) {
+        return this.data.getType().get(key) != null;
+    }
+
+    @Override
+    public String getLabelOfValue(String name) {
+        FeatureAttributeDescriptor attrdesc = this.data.getType().getAttributeDescriptor(name);
+        Object value;
+        if (attrdesc == null) { // extra column
+            FeatureExtraColumns extraColumns = this.data.getType().getExtraColumns();
+            if (extraColumns==null) {
+                return name;
+            }
+            attrdesc = extraColumns.get(name);
+            if(attrdesc==null) {
+                return name;
+            }
+           value = this.get(name);
+        } else {
+           value = this.get(attrdesc.getIndex());
+        }
+        String label = attrdesc.getLabelOfValue(value);
+        return label;
+    }
+
+    @Override
+    public void setExtraValue(String name, Object value) {
+        if (this.extraValues == null) {
+            this.extraValues = new HashMap<>();
+        }
+        this.extraValues.put(name, value);
+    }
+
+    public Object getExtraColumnValue(String name) {
+        Object value;
+        FeatureExtraColumns columns = this.getType().getExtraColumns();
+        int index = columns.getIndexOf(name);
+        if (this.extraValues != null) {
+            if (this.extraValues.containsKey(name)) {
+                value = this.extraValues.get(name);
+                if (index >= 0){
+                    EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
+                    value = coerce(attrdesc, value);
+                }
+                return value;
+            }
+        }
+        if (index < 0) {
+            throw new RuntimeException("Not extra column value found");
+        }
+        if (extraValuesData == null) {
+            extraValuesData = new Object[columns.size()];
+        }
+        EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
+        value = extraValuesData[index];
+        if (value != null) {
+            return value;
+        }
+        value = this.getExtraValue(name);
+        if (value == null && !this.hasExtraValue(name) && attrdesc.getFeatureAttributeEmulator() != null) {
+            value = attrdesc.getFeatureAttributeEmulator().get(this);
+            value = coerce(attrdesc, value);
+            extraValuesData[index] = value;
+        } else {
+            value = coerce(attrdesc, value);
+            extraValuesData[index] = value;
+        }
+        
+        return value;
+    }
+
+    @Override
+    public Object getExtraValue(String name) {
+        Object value = this.data.getExtraValue(name);
+        return value;
+    }
+
+    @Override
+    public boolean hasExtraValue(String name) {
+        return this.data.hasExtraValue(name);
+    }
+
+    private boolean hasExtraColumnValue(String name) {
+        if (this.extraValues != null) {
+            if (this.extraValues.containsKey(name)) {
+                return true;
+            }
+        }
+        FeatureExtraColumns columns = this.getType().getExtraColumns();
+        int index = columns.getIndexOf(name);
+        if (index >= 0) {
+            return true;
+        }
+        return false;
+    }
+
+    private EditableFeatureAttributeDescriptor getExtraColumn(String name) {
+        FeatureExtraColumns columns = this.getType().getExtraColumns();
+        return columns.get(name);
+    }
+
+    @Override
+    public boolean hasValue(String name) {
+        name = name.toLowerCase();
+        return this.data.getType().getIndex(name) >= 0
+                || hasExtraValue(name)
+                || hasExtraColumnValue(name);
+    }
+
+    @Override
+    public Object getExtraValue(int index) {
+        return this.data.getExtraValue(index);
+    }
+
+    @Override
+    public JsonObject toJson() {
+        JsonObjectBuilder builder = this.toJsonBuilder();
+        return builder.build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        Date date;
+        Geometry geom;
+        FeatureType ft = this.getType();
+        for (FeatureAttributeDescriptor desc : ft) {
+            if (desc.isComputed()) {
+                continue;
+            }
+            if(this.isNull(desc.getName())){
+                builder.addNull(desc.getName());
+                continue;
+            }
+            switch (desc.getType()) {
+                case DataTypes.GEOMETRY:
+                    geom = this.getGeometry(desc.getIndex());
+                    if (geom != null) {
+                        builder.add(desc.getName(), geom.convertToHexWKBQuietly());
+                    }
+                    break;
+                case DataTypes.BOOLEAN:
+                    builder.add(desc.getName(), this.getBoolean(desc.getIndex()));
+                    break;
+                case DataTypes.BYTE:
+                    builder.add(desc.getName(), this.getByte(desc.getIndex()));
+                    break;
+                case DataTypes.INT:
+                    builder.add(desc.getName(), this.getInt(desc.getIndex()));
+                    break;
+                case DataTypes.LONG:
+                    builder.add(desc.getName(), this.getLong(desc.getIndex()));
+                    break;
+                case DataTypes.DOUBLE:
+                    builder.add(desc.getName(), this.getDouble(desc.getIndex()));
+                    break;
+                case DataTypes.FLOAT:
+                    builder.add(desc.getName(), this.getFloat(desc.getIndex()));
+                    break;
+                case DataTypes.DATE:
+                    // Format date as ISO 8601
+                    date = this.getDate(desc.getIndex());
+                    if (date == null) {
+                        builder.addNull(desc.getName());
+                    } else {
+                        LocalDateTime localDateTime = LocalDateTime.ofInstant(new Date(date.getTime()).toInstant(), ZoneId.systemDefault());
+                        String value = DateTimeFormatter.ISO_DATE.format(localDateTime);
+                        builder.add(desc.getName(), value);
+                    }
+                    break;
+                case DataTypes.TIMESTAMP:
+                    // Format date as ISO 8601
+                    date = this.getTimestamp(desc.getIndex());
+                    if (date == null) {
+                        builder.addNull(desc.getName());
+                    } else {
+                        LocalDateTime localDateTime = LocalDateTime.ofInstant(new Date(date.getTime()).toInstant(), ZoneId.systemDefault());
+                        String value = DateTimeFormatter.ISO_DATE_TIME.format(localDateTime);
+                        builder.add(desc.getName(), value);
+                    }
+                    break;
+                case DataTypes.TIME:
+                    // Format date as ISO 8601
+                    date = this.getTime(desc.getIndex());
+                    if (date == null) {
+                        builder.addNull(desc.getName());
+                    } else {
+                        LocalDateTime localDateTime = LocalDateTime.ofInstant(new Date(date.getTime()).toInstant(), ZoneId.systemDefault());
+                        String value = DateTimeFormatter.ISO_TIME.format(localDateTime);
+                        builder.add(desc.getName(), value);
+                    }
+                    break;
+                default:
+                    builder.add(desc.getName(), this.getStringOrDefault(desc.getIndex(), ""));
+            }
+        }
+        return builder;
+    }
+
+    @Override
+    public List<String> getKeys() {
+        List<String> l = new ArrayList<>();
+        for (FeatureAttributeDescriptor descriptor : this.getType()) {
+            l.add(descriptor.getName());
+        }
+        return l;
+    }
+
+    @Override
+    public String format(String name) {
+        int index = this.data.getType().getIndex(name);
+        if (index < 0) {
+            // buscamos en los extra cols
+            FeatureAttributeDescriptor attribute = this.getExtraColumn(name);
+            if( attribute!=null ) {
+                Object value = getExtraColumnValue(name);
+                return attribute.format(value);
+            }
+            throw new IllegalArgumentException("Attribute name '" + name + "' not found in the feature.");
+        }
+        return this.format(index);
+    }
+
+    @Override
+    public String format(int index) {
+        Object value = this.get(index);
+        FeatureType type = this.data.getType();
+        FeatureAttributeDescriptor attribute = type.getAttributeDescriptor(index);
+        return attribute.format(value);
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureExtraColumns.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureExtraColumns.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureExtraColumns.java	(revision 46118)
@@ -0,0 +1,233 @@
+/*
+ * 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.feature.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.json.SupportToJson;
+
+/**
+ *
+ * @author osc
+ */
+public class DefaultFeatureExtraColumns implements FeatureExtraColumns {
+
+    private List<EditableFeatureAttributeDescriptor> extraColumns;
+    
+    public DefaultFeatureExtraColumns() {
+        this.extraColumns = new ArrayList();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return this.extraColumns.isEmpty();
+    }
+    
+    @Override
+    public EditableFeatureAttributeDescriptor get(String columnName) {
+        for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) {
+            if (StringUtils.equals(extraColumn.getName(), columnName)) {
+                return extraColumn;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor add(String name, int type) {
+        //TODO que no hayan dos columnas iguales
+//        exi.addExtraColumn()
+        EditableFeatureAttributeDescriptor newAttr = DefaultDataManager.createEditableFeatureAttributeDescriptor(
+                null,
+                name, 
+                type
+        );
+        extraColumns.add(newAttr);
+        return newAttr;
+    }
+
+    @Override
+    public List<EditableFeatureAttributeDescriptor> getColumns() {
+        return this.extraColumns;
+    }
+
+    @Override
+    public void merge(FeatureExtraColumns other) {
+        this.extraColumns.addAll(other.getColumns());
+    }
+
+    @Override
+    public int getIndexOf(String name) {
+        for (int i = 0; i < extraColumns.size(); i++) {
+            EditableFeatureAttributeDescriptor extraColumn = extraColumns.get(i);
+            if (StringUtils.equalsIgnoreCase(extraColumn.getName(), name)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor get(int index) {
+        return extraColumns.get(index);
+    }
+
+    @Override
+    public int size() {
+        return extraColumns.size();
+    }
+
+    @Override
+    public void copyFrom(FeatureExtraColumns extraColumn) {
+        this.extraColumns.clear();
+        for (EditableFeatureAttributeDescriptor col : extraColumn.getColumns()) {
+            //TODO revisar si getCopy o no
+            this.extraColumns.add(col);
+        }
+    }
+
+    @Override
+    public void clear() {
+        this.extraColumns.clear();
+    }
+    
+    @Override
+    public FeatureExtraColumns getCopy() {
+        DefaultFeatureExtraColumns other = new DefaultFeatureExtraColumns();
+        ArrayList otherCols = new ArrayList();
+        for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) {
+            EditableFeatureAttributeDescriptor newAttr = DefaultDataManager.createEditableFeatureAttributeDescriptor(
+                    null,
+                    extraColumn.getName(),
+                    extraColumn.getType()
+            );
+            newAttr.copyFrom(extraColumn);
+            otherCols.add(newAttr);
+        }
+        other.extraColumns = otherCols;
+        return other;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        
+//        ArrayList<DefaultFeatureAttributeDescriptor> extraListCols = new ArrayList<>();
+//        for (EditableFeatureAttributeDescriptor extraColumn : extraColumns) {
+//            DefaultEditableFeatureAttributeDescriptor mycol = (DefaultEditableFeatureAttributeDescriptor) extraColumn;
+//            DefaultFeatureAttributeDescriptor fad = new DefaultFeatureAttributeDescriptor();
+//            fad.copyFrom(mycol);
+//            extraListCols.add(fad);
+//        }
+         state.set("extraColumns", extraColumns);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        List<DefaultFeatureAttributeDescriptor> extraColumnsDescriptors = (List) state.getList("extraColumns");
+        ArrayList<EditableFeatureAttributeDescriptor> cols = new ArrayList<EditableFeatureAttributeDescriptor>();
+        for (DefaultFeatureAttributeDescriptor extraColumnsDescriptor : extraColumnsDescriptors) {
+            DefaultEditableFeatureAttributeDescriptor myEditableDescriptor = new DefaultEditableFeatureAttributeDescriptor(extraColumnsDescriptor);
+            cols.add(myEditableDescriptor);
+        }
+        this.extraColumns = cols;
+    }
+
+    public static void registerPersistent() {
+        DynStruct definition =
+            ToolsLocator.getPersistenceManager()
+            .addDefinition(DefaultFeatureExtraColumns.class,
+                "DefaultFeatureExtraColumn",
+                "DefaultFeatureExtraColumn Persistent definition",
+                null,
+                null);
+
+        definition.addDynFieldArray("extraColumns")
+                .setClassOfItems(FeatureAttributeDescriptor.class)
+                .setMandatory(false);
+
+    }
+
+    @Override
+    public void remove(String attribute) {
+        for (EditableFeatureAttributeDescriptor extraColumn : extraColumns) {
+            if (extraColumn.getName().equalsIgnoreCase(attribute)) {
+                this.extraColumns.remove(extraColumn);
+                break;
+            }
+        }
+    }
+
+    @Override
+    public void fromJson(JsonObject json) {
+        this.clear();
+        if( json.containsKey("extraColumns") ) {
+            for (JsonValue jsonValue : json.getJsonArray("extraColumns")) {
+                JsonObject value = (JsonObject) jsonValue;
+                EditableFeatureAttributeDescriptor newAttr = new DefaultEditableFeatureAttributeDescriptor(null, false);
+                newAttr.fromJson(value);
+                this.extraColumns.add(newAttr);
+            }
+        }
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return this.toJsonBuilder().build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.add("extraColumns", Json.createArrayBuilder().addAll(this.extraColumns));
+        return builder;
+    }
+    
+    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
+        
+        public TheJsonSerializer() {            
+        }
+
+        @Override
+        public Class getObjectClass() {
+            return DefaultFeatureExtraColumns.class;
+        }
+
+        @Override
+        public Object toObject(JsonObject json) {
+            DefaultFeatureExtraColumns o = new DefaultFeatureExtraColumns();
+            o.fromJson(json);
+            return o;
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder(Object value) {
+            return ((SupportToJson)value).toJsonBuilder();
+        }
+        
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(new TheJsonSerializer());
+    }
+
+            
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,791 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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 java.util.Map.Entry;
+
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.DataRuntimeException;
+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.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.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.ReversedSelectionIteratorException;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection.SelectionData;
+import org.gvsig.fmap.dal.feature.impl.featureset.AbstractFeatureSet;
+import org.gvsig.fmap.dal.feature.impl.featureset.DefaultFeatureSet;
+import org.gvsig.fmap.dal.feature.impl.undo.FeatureCommandsStack;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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 AbstractFeatureSet
+        implements FeatureSelection {
+
+    public class RemoveFromFeatureSelectionException extends DataRuntimeException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 2636692469445838928L;
+        private final static String MESSAGE_FORMAT = "Can't remove feature from reversed selection.";
+        private final static String MESSAGE_KEY = "_RemoveFromFeatureSelectionException";
+
+        public RemoveFromFeatureSelectionException(Throwable cause) {
+            super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+            //setValue("store", store);
+        }
+    }
+
+    /**
+     * 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;
+        private Feature currentFeature = null;
+
+        public FeatureIteratorFacade(java.util.Iterator iter,
+                FeatureStore featureStore) {
+            this.refIterator = iter;
+            this.featureStore = featureStore;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return refIterator.hasNext();
+        }
+
+        @Override
+        public Object next() {
+            FeatureReference ref = nextFeatureReference();
+            try {
+                currentFeature = featureStore.getFeatureByReference(ref);
+                return currentFeature;
+            } 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();
+        }
+
+        @Override
+        public void remove() {
+            try {
+                featureStore.delete(currentFeature);
+                refIterator.remove();
+            } catch (DataException e) {
+                throw new RemoveFromFeatureSelectionException(e);
+            }
+        }
+
+        public class RemoveFromFeatureSelectionException extends DataRuntimeException {
+
+            /**
+             *
+             */
+            private static final long serialVersionUID = 2636692469445838928L;
+            private final static String MESSAGE_FORMAT = "Can't remove feature from selection.";
+            private final static String MESSAGE_KEY = "_RemoveFromFeatureSelectionException";
+
+            public RemoveFromFeatureSelectionException(Throwable cause) {
+                super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+                //setValue("store", store);
+            }
+        }
+
+        @Override
+        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 Feature currentFeature = 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 = new IgnoreInsertAndUpdateFeatureSet(
+                        (DefaultFeatureStore) featureStore, 
+                        new DefaultFeatureQuery(featureStore.getDefaultFeatureType())
+                );
+                iterator = featureSet.fastIterator();
+            } catch (DataException ex) {
+                throw new ReversedSelectionIteratorException(ex);
+            }
+
+            // Filter the features not selected and position in the next
+            // selected feature
+            positionInNextElement();
+        }
+
+        @Override
+        public boolean hasNext() {
+            return nextFeature != null;
+        }
+
+        @Override
+        public Object next() {
+            featureIterators.remove(currentFeature);
+            currentFeature = nextFeature.getCopy();
+            featureIterators.put(currentFeature, this);
+            positionInNextElement();
+            return currentFeature;
+        }
+
+        @Override
+        public void remove() {
+            try {
+                featureSet.delete(currentFeature);
+            } catch (DataException e) {
+                throw new RemoveFromFeatureSelectionException(e);
+
+            }
+        }
+
+        private void positionInNextElement() {
+            nextFeature = null;
+            while (iterator.hasNext()) {
+                nextFeature = (Feature) iterator.next();
+                if (selectionData.contains(nextFeature.getReference())) {
+                    nextFeature = null;
+                } else {
+                    break;
+                }
+            }
+        }
+
+        @Override
+        public void dispose() {
+            this.featureSet.dispose();
+            this.iterator.dispose();
+            this.selectionData = null;
+            this.nextFeature = null;
+        }
+    }
+
+    private Map featureTypeCounts = new HashMap(1);
+    private final Map<Feature, Iterator> featureIterators = new HashMap<>();
+    private final DefaultFeatureReferenceSelection featureReferenceSelection;
+
+    /**
+     * 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 {
+        this.featureReferenceSelection = new DefaultFeatureReferenceSelection(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 {
+        this.featureReferenceSelection = new DefaultFeatureReferenceSelection(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() {
+        this.featureReferenceSelection = new DefaultFeatureReferenceSelection();
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return this.featureReferenceSelection.getFeatureStore();
+    }
+
+    private void notifyObservers(String notificationType) {
+        this.featureReferenceSelection.notifyObservers(notificationType);
+    }
+
+    public FeatureCommandsStack getCommands() {
+        return this.featureReferenceSelection.getCommands();
+    }
+
+    @Override
+    public void enableNotifications() {
+        this.featureReferenceSelection.enableNotifications();
+    }
+
+    @Override
+    public void disableNotifications() {
+        this.featureReferenceSelection.disableNotifications();
+    }
+
+    public boolean isReversed() {
+        return this.featureReferenceSelection.isReversed();
+    }
+
+    @Override
+    public long getSelectedCount() {
+        return this.featureReferenceSelection.getSelectedCount();
+    }
+
+    public DefaultFeatureReferenceSelection.SelectionData getData() {
+        return this.featureReferenceSelection.getData();
+    }
+
+    @Override
+    public boolean select(FeatureReference reference) {
+        return this.featureReferenceSelection.select(reference);
+    }
+
+    public boolean select(FeatureReference reference, boolean undoable) {
+        return this.featureReferenceSelection.select(reference, undoable);
+    }
+
+    @Override
+    public boolean deselect(FeatureReference reference) {
+        return this.featureReferenceSelection.deselect(reference);
+    }
+
+    public boolean deselect(FeatureReference reference, boolean undoable) {
+        return this.featureReferenceSelection.deselect(reference, undoable);
+    }
+
+    @Override
+    public Iterator referenceIterator() {
+        return this.featureReferenceSelection.referenceIterator();
+    }
+
+    @Override
+    public void selectAll() throws DataException {
+        this.featureReferenceSelection.selectAll();
+    }
+
+    @Override
+    public void deselectAll() throws DataException {
+        this.featureReferenceSelection.deselectAll();
+    }
+    
+    public void deselectAll(boolean undoable) throws DataException {
+        this.featureReferenceSelection.deselectAll(undoable);
+    }
+    
+    @Override
+    public boolean isSelected(FeatureReference reference) {
+        return this.featureReferenceSelection.isSelected(reference);
+    }
+
+    @Override
+    public void reverse() {
+        this.featureReferenceSelection.reverse();
+    }
+
+    @Override
+    public void dispose() {
+        this.featureReferenceSelection.dispose();
+    }
+
+    @Override
+    public void update(Observable o, Object o1) {
+        this.featureReferenceSelection.update(o, o1);
+    }
+
+    @Override
+    public void addObserver(Observer obsrvr) {
+        this.featureReferenceSelection.addObserver(obsrvr);
+    }
+
+    @Override
+    public void deleteObserver(Observer obsrvr) {
+        this.featureReferenceSelection.deleteObserver(obsrvr);
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.featureReferenceSelection.deleteObservers();
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        this.featureReferenceSelection.beginComplexNotification();
+    }
+
+    @Override
+    public void endComplexNotification() {
+        this.featureReferenceSelection.endComplexNotification();
+    }
+
+    @Override
+    public void saveToState(PersistentState ps) throws PersistenceException {
+        this.featureReferenceSelection.saveToState(ps);
+    }
+
+    @Override
+    public boolean select(Feature feature) {
+        return select(feature, true);
+    }
+
+    /**
+     * @param feature
+     * @return
+     * @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);
+    }
+
+    @Override
+    public boolean select(FeatureSet features) throws DataException {
+        return select(features, true);
+    }
+
+    /**
+     * @param features
+     * @return
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     * @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 && this.featureReferenceSelection.getFeatureStore().isEditing()
+                && !this.featureReferenceSelection.getCommands().inComplex()) {
+
+            this.featureReferenceSelection.getCommands().startComplex("_selectionSelectFeatureSet");
+            inComplex = this.featureReferenceSelection.getCommands().inComplex();
+        }
+
+        disableNotifications();
+        DisposableIterator iter = null;
+        try {
+            for (iter = features.fastIterator(); iter.hasNext();) {
+                change |= select((Feature) iter.next(), undoable);
+            }
+        } finally {
+            DisposeUtils.disposeQuietly(iter);
+        }
+        enableNotifications();
+        if (undoable && getFeatureStore().isEditing() && inComplex) {
+            getCommands().endComplex();
+        }
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+        return change;
+    }
+
+    @Override
+    public boolean deselect(Feature feature) {
+        return deselect(feature, true);
+    }
+
+    /**
+     * @param feature
+     * @return
+     * @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);
+    }
+
+    @Override
+    public boolean deselect(FeatureSet features) throws DataException {
+        return deselect(features, true);
+    }
+
+    /**
+     * @param features
+     * @return
+     * @throws org.gvsig.fmap.dal.exception.DataException
+     * @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 {
+            DisposeUtils.disposeQuietly(iter);
+        }
+        enableNotifications();
+        if (undoable && getFeatureStore().isEditing()) {
+            getCommands().endComplex();
+        }
+        if (change) {
+            notifyObservers(DataStoreNotification.SELECTION_CHANGE);
+        }
+        return change;
+    }
+
+    @Override
+    public boolean isSelected(Feature feature) {
+        if (feature == null) {
+            return false;
+        }
+        if( this.featureReferenceSelection.isEmpty() ) {
+            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 (getData().isReversed()) {
+            return getData().getSize() == 0
+                    || !getData().contains(feature.getReference());
+        } else {
+            return getData().getSize() > 0
+                    && getData().contains(feature.getReference());
+        }
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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 > 0) {
+                types.add(type);
+            }
+        }
+
+        return types;
+    }
+
+    @Override
+    public long getSize() throws DataException {
+        return getSelectedCount();
+    }
+
+    /**
+     * Returns the list of selected values, or the deselected ones if the
+     * selection has been reversed.
+     *
+     * WARN: not very good performance implementation.
+     */
+    @Override
+	public DisposableIterator iterator(long index) {
+		return iterator(index, 0, false);
+	}
+
+    @Override
+        public DisposableIterator iterator(long index, long elements) {
+		return iterator(index, elements, false);
+        }
+
+    /**
+     * Returns the list of selected values, or the deselected ones if the
+     * selection has been reversed.
+     *
+     * WARN: not really a fast implementation.
+     */
+    @Override
+	public DisposableIterator fastIterator(long index) {
+            return fastIterator(index, 0);
+	}
+
+    @Override
+    public DisposableIterator fastIterator(long index, long elements) {
+        return iterator(index, elements, true);
+    }
+
+
+    protected void clearFeatureReferences() {
+        this.featureReferenceSelection.clearFeatureReferences();
+        featureTypeCounts.clear();
+    }
+
+    /**
+     * Creates an iterator for the Selection.
+     */
+    private DisposableIterator iterator(long index, long elements, 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 = getData().getSelected().iterator();
+            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 = count - 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 = count + 1;
+        }
+        featureTypeCounts.put(featureType, count);
+        return count;
+    }
+
+    @Override
+    public void delete(Feature feature) throws DataException {
+        Iterator it = this.featureIterators.get(feature);
+        if (it != null) {
+            it.remove();
+            return;
+        }
+        feature.getStore().delete(feature);
+    }
+
+    @Override
+    public void insert(EditableFeature feature) throws DataException {
+        feature.getStore().insert(feature);
+    }
+
+    @Override
+    public void update(EditableFeature feature) throws DataException {
+        feature.getStore().update(feature);
+    }
+    
+    
+    @Override
+    public void commitChanges() throws DataException {
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @seeorg.gvsig.fmap.dal.feature.impl.DefaultFeatureReferenceSelection#
+     * loadFromState(org.gvsig.tools.persistence.PersistentState)
+     */
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.featureReferenceSelection.loadFromState(state);
+    }
+
+    protected void doDispose() throws BaseException {
+        this.featureReferenceSelection.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);
+
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultFeatureSelection clone = (DefaultFeatureSelection) super.clone();
+        clone.featureTypeCounts = new HashMap(featureTypeCounts);
+        return clone;
+    }
+
+    @Override
+    protected void doAccept(Visitor visitor, long firstValueIndex, long elements) throws BaseException {
+        if( this.featureReferenceSelection.isEmpty() ) {
+            return;
+        }
+        DisposableIterator iterator = fastIterator(firstValueIndex, elements);
+        if (iterator != null) {
+            try {
+                while (iterator.hasNext()) {
+                    Feature feature = (Feature) iterator.next();
+                    visitor.visit(feature);
+                }
+            } finally {
+                iterator.dispose();
+            }
+        }
+    }
+
+    private static class IgnoreInsertAndUpdateFeatureSet extends DefaultFeatureSet {
+
+        public IgnoreInsertAndUpdateFeatureSet(DefaultFeatureStore store, FeatureQuery query) throws DataException {
+            super(store, query);
+        }
+
+        public void update(Observable obsevable, Object notification) {
+            String type = ((FeatureStoreNotification) notification).getType();
+            if (type.equalsIgnoreCase(FeatureStoreNotification.AFTER_INSERT)
+                    || type.equalsIgnoreCase(FeatureStoreNotification.AFTER_UPDATE)) {
+                return;
+            }
+            super.update(obsevable, notification);
+        }
+
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return this.featureReferenceSelection.isAvailable();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultForeingKey.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultForeingKey.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultForeingKey.java	(revision 46118)
@@ -0,0 +1,586 @@
+package org.gvsig.fmap.dal.feature.impl;
+
+import org.gvsig.fmap.dal.feature.EditableForeingKey;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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 static org.gvsig.fmap.dal.feature.ForeingKey.MAX_AVAILABLE_VALUES;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+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 jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultForeingKey implements Persistent, ForeingKey, EditableForeingKey, org.gvsig.tools.lang.Cloneable {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultForeingKey.class);
+
+    private class DefaultContextForeingKey implements ContextForeingKey {
+
+        private FeatureStore featureStore = null;
+        private StoresRepository storesRepository = null;
+        private Expression labelExpression;
+        private SymbolTable symbolTable;
+        private FeatureSymbolTable featureSymbolTable;
+        private DynObject contextValues;
+        private int refs;
+
+        public DefaultContextForeingKey(StoresRepository storesRepository) {
+            this.refs = 1;
+            this.storesRepository = storesRepository;
+        }
+
+        public void addRef() {
+            this.refs++;
+        }
+
+        public void relese() {
+            this.refs--;
+        }
+
+        @Override
+        public void dispose() {
+            DisposeUtils.disposeQuietly(featureStore);
+            DisposeUtils.disposeQuietly(contextValues);
+            this.featureStore = null;
+            this.storesRepository = null;
+            this.labelExpression = null;
+            this.symbolTable = null;
+            this.featureSymbolTable = null;
+        }
+
+        @Override
+        public StoresRepository getStoresRepository() {
+            if (this.storesRepository == null) {
+                this.storesRepository = DALLocator.getDataManager().getStoresRepository();
+            }
+            return this.storesRepository;
+        }
+
+        @Override
+        public FeatureStore getFeatureStore() {
+            if (this.featureStore == null) {
+                StoresRepository repository = this.getStoresRepository();
+                this.featureStore = (FeatureStore) repository.getStore(tableName);
+                if (this.featureStore == null) {
+                    LOGGER.warn("Can't locate store '" + tableName + "' to get available values.");
+                    return null;
+                }
+            }
+            return this.featureStore;
+        }
+
+        @Override
+        public Expression getLabelExpression() {
+            if (this.labelExpression == null) {
+                if (StringUtils.isBlank(labelFormula)) {
+                    return null;
+                }
+                this.labelExpression = ExpressionUtils.createExpression(labelFormula);
+            }
+            return this.labelExpression;
+        }
+
+        @Override
+        public FeatureSymbolTable getFeatureSymbolTable() {
+            if (this.featureSymbolTable == null) {
+                DataManager dataManager = DALLocator.getDataManager();
+                this.featureSymbolTable = dataManager.createFeatureSymbolTable();
+                this.symbolTable = this.featureSymbolTable.createParent();
+            }
+            return this.featureSymbolTable;
+        }
+
+        @Override
+        public SymbolTable getSymbolTable() {
+            if (this.symbolTable == null) {
+                DataManager dataManager = DALLocator.getDataManager();
+                this.featureSymbolTable = dataManager.createFeatureSymbolTable();
+                this.symbolTable = this.featureSymbolTable.createParent();
+            }
+            return this.symbolTable;
+        }
+
+        @Override
+        public DynObject getContextValues() {
+            return this.contextValues;
+    }
+
+        @Override
+        public void setContextValues(DynObject values) {
+            this.contextValues = values;
+        }
+    }
+
+    private boolean foreingKey;
+    private boolean closedList;
+    private String labelFormula;
+    private String tableName;
+    private String codeName;
+    private DynObjectValueItem[] availableValues;
+    private boolean loadAvailableValues;
+    private boolean ensureReferentialIntegrity;
+    private StoresRepository storesRepository = null;
+    private FeatureAttributeDescriptor descriptor;
+
+    public DefaultForeingKey() {
+        this.foreingKey = false;
+        this.closedList = false;
+        this.tableName = null;
+        this.codeName = null;
+        this.labelFormula = null;
+        this.ensureReferentialIntegrity = false;
+        this.loadAvailableValues = true;
+    }
+
+    public void setDescriptor(FeatureAttributeDescriptor descriptor) {
+        this.descriptor = descriptor;
+    }
+    
+    private StoresRepository getStoresRepository() {
+        if( this.descriptor == null ) {
+            this.storesRepository = DALLocator.getDataManager().getStoresRepository();
+        } else {
+            FeatureStore store = descriptor.getStore();
+            if( store==null ) {
+                this.storesRepository = DALLocator.getDataManager().getStoresRepository();
+            } else {
+                this.storesRepository = store.getStoresRepository();
+            }
+        }
+        return this.storesRepository;
+    }
+    
+    @Override
+    public void unbind() {
+        this.getStoresRepository(); // Force get stores repository
+        this.descriptor = null;
+    }
+
+    @Override
+    public boolean isClosedList() {
+        return this.closedList;
+    }
+
+    @Override
+    public void setClosedList(boolean selectable) {
+        this.closedList = selectable;
+    }
+
+    @Override
+    public boolean isForeingKey() {
+        return this.foreingKey;
+    }
+
+    @Override
+    public void setForeingKey(boolean foreingKey) {
+        this.foreingKey = foreingKey;
+    }
+
+    @Override
+    public String getLabelFormula() {
+        return this.labelFormula;
+    }
+
+    @Override
+    public void setLabelFormula(String labelFormula) {
+        this.labelFormula = labelFormula;
+        // Force reload available values with new formula
+        this.availableValues = null;
+        this.loadAvailableValues = true;
+    }
+
+    @Override
+    public String getCodeName() {
+        return this.codeName;
+    }
+
+    @Override
+    public void setCodeName(String codeName) {
+        this.codeName = codeName;
+    }
+
+    @Override
+    public String getTableName() {
+        return this.tableName;
+    }
+
+    @Override
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        if (!this.foreingKey
+                && !this.closedList
+                && StringUtils.isBlank(this.tableName)
+                && StringUtils.isBlank(this.codeName)
+                && StringUtils.isBlank(this.labelFormula)) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void clean() {
+        this.foreingKey = false;
+        this.closedList = false;
+        this.tableName = null;
+        this.codeName = null;
+        this.labelFormula = null;
+        this.ensureReferentialIntegrity = false;
+    }
+
+    private void disposeIfLocalContext(ContextForeingKey context) {
+        DefaultContextForeingKey c = (DefaultContextForeingKey) context;
+        c.relese();
+        if (c.refs == 0) {
+            context.dispose();
+        }
+    }
+
+    private ContextForeingKey createLocalContextIfNull(ContextForeingKey context) {
+        if (context == null) {
+            return createContext();
+        }
+        DefaultContextForeingKey c = (DefaultContextForeingKey) context;
+        c.addRef();
+        return c;
+    }
+
+    @Override
+    public ContextForeingKey createContext() {
+        return new DefaultContextForeingKey(this.getStoresRepository());
+    }
+
+    @Override
+    public StoresRepository getStoresRepository(ContextForeingKey context) {
+        context = createLocalContextIfNull(context);
+        try {
+            return context.getStoresRepository();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public FeatureStore getFeatureStore(ContextForeingKey context) {
+        context = createLocalContextIfNull(context);
+        try {
+            return context.getFeatureStore();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public FeatureType getFeatureType(ContextForeingKey context) {
+        context = createLocalContextIfNull(context);
+        FeatureStore store = context.getFeatureStore();
+        if (store == null) {
+            return null;
+        }
+        try {
+            return store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            return null;
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public List<Feature> getFeatures(ContextForeingKey context) {
+        context = createLocalContextIfNull(context);
+        FeatureStore store = context.getFeatureStore();
+        if (store == null) {
+            return null;
+        }
+        try {
+            return store.getFeatures();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public Object getCode(ContextForeingKey context, Feature feature) {
+//        context = createLocalContextIfNull(context);
+        try {
+            return feature.get(codeName);
+        } finally {
+//            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public FeatureQuery getQuery(ContextForeingKey context, Object codeValue) {
+        context = createLocalContextIfNull(context);
+        try {
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            FeatureStore store = context.getFeatureStore();
+            FeatureQuery query = store.createFeatureQuery();
+            query.setFilter(builder.eq(
+                    builder.variable(codeName),
+                    builder.constant(codeValue)
+            ).toString()
+            );
+            query.retrievesAllAttributes();
+            return query;
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public Feature getFeature(ContextForeingKey context, Object codeValue) {
+        context = createLocalContextIfNull(context);
+        try {
+            FeatureStore store = context.getFeatureStore();
+            if (store == null) {
+                return null;
+            }
+            FeatureQuery query = this.getQuery(context, codeValue);
+            Feature feature = store.findFirst(query);
+            return feature;
+        } catch (DataException ex) {
+            return null;
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public String getLabel(ContextForeingKey context, Object codeValue) {
+        context = createLocalContextIfNull(context);
+        try {
+            Feature feature = this.getFeature(context, codeValue);
+            if (feature == null) {
+                return null;
+            }
+            return getLabel(context, feature);
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public Expression getLabelExpression(ContextForeingKey context) {
+        context = createLocalContextIfNull(context);
+        try {
+            return context.getLabelExpression();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public String getLabel(ContextForeingKey context, Feature feature) {
+        if (feature == null) {
+            return null;
+        }
+        context = createLocalContextIfNull(context);
+        try {
+            Expression labelExpression = context.getLabelExpression();
+            if (labelExpression == null) {
+                return feature.toString();
+            }
+            context.getFeatureSymbolTable().setFeature(feature);
+            Object x = labelExpression.execute(context.getSymbolTable());
+            if (x == null) {
+                return null;
+            }
+            return x.toString();
+        } finally {
+            disposeIfLocalContext(context);
+        }
+    }
+
+    @Override
+    public DynObjectValueItem[] getAvailableValues(ContextForeingKey context) {
+        if (!this.isClosedList()) {
+            return null;
+        }
+        if (this.availableValues == null && this.loadAvailableValues) {
+
+            FeatureStore foreingStore = null;
+            FeatureSet.DisposableFeatureSetIterable set = null;
+
+            try {
+
+                StoresRepository theStoresRepository = this.getStoresRepository(context);
+
+                foreingStore = (FeatureStore) theStoresRepository.getStore(
+                        this.getTableName()
+                );
+                Expression labelExpression = this.getLabelExpression(null);
+                String theCodeName =  this.getCodeName();
+                FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
+                MutableSymbolTable symbolTable = featureSymbolTable.createParent();
+
+                int count = (int) foreingStore.getFeatureCount();
+                DynObjectValueItem[] values = new DynObjectValueItem[Math.min(count, MAX_AVAILABLE_VALUES)];
+                int n = 0;
+                for (Feature feature : set = foreingStore.getFeatureSet().iterable()) {
+                    Object code = feature.get(theCodeName);
+                    Object value;
+                    if (labelExpression == null) {
+                        value = code;
+                    } else {
+                        featureSymbolTable.setFeature(feature);
+                        try {
+                            value = labelExpression.execute(symbolTable);
+                        } catch (Exception ex) {
+                            LOGGER.warn("Can't get label from table: "+this.tableName+" with expression: "+labelExpression.getPhrase(), ex);
+                            values = null;
+                            break;
+                        }
+                    }
+                    values[n++] = new DynObjectValueItem(code, Objects.toString(value, Objects.toString(code, "##ERROR##")));
+                    if (n >= MAX_AVAILABLE_VALUES) {
+                        break;
+                    }
+                }
+                this.availableValues = values;
+
+            } catch (Exception ex) {
+                LOGGER.warn("Can't get available values for field '" + this.getStoreName() + "." + this.getCodeName() + "' from table '" + this.getTableName() + "'.", ex);
+            } finally {
+                this.loadAvailableValues = false;
+                DisposeUtils.disposeQuietly(set);
+                DisposeUtils.disposeQuietly(foreingStore);                
+            }
+        }
+        return this.availableValues;
+    }
+    
+    private String getStoreName() {
+        if (this.descriptor==null) {
+            return "Unknown";
+        }
+        return this.descriptor.getStore().getName();
+    }
+
+    @Override
+    public String getLabelForValue(Object value) {
+        DynObjectValueItem[] values = this.getAvailableValues(null);
+        if (values != null) {
+            for (DynObjectValueItem value1 : values) {
+                if (Objects.equals(value, value1.getValue())) {
+                    return value1.getLabel();
+                }
+            }
+        }
+        return Objects.toString(value, "##ERROR##");
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        foreingKey = state.getBoolean("foreingKey");
+        closedList = state.getBoolean("selectable");
+        labelFormula = state.getString("labelFormula");
+        codeName = state.getString("codeName");
+        tableName = state.getString("tableName");
+        ensureReferentialIntegrity = state.getBoolean("ensureReferentialIntegrity");
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("foreingKey", foreingKey);
+        state.set("selectable", closedList);
+        state.set("labelFormula", labelFormula);
+        state.set("codeName", codeName);
+        state.set("tableName", tableName);
+        state.set("ensureReferentialIntegrity", ensureReferentialIntegrity);
+    }
+
+    private static final String FOREINGKEY_PERSISTENCE_DEFINITION_NAME = "ForeingKey";
+
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+        if (manager.getDefinition(FOREINGKEY_PERSISTENCE_DEFINITION_NAME)
+                == null) {
+            DynStruct definition = manager.addDefinition(DefaultForeingKey.class,
+                    FOREINGKEY_PERSISTENCE_DEFINITION_NAME,
+                    FOREINGKEY_PERSISTENCE_DEFINITION_NAME
+                    + " persistent definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldBoolean("foreingKey");
+            definition.addDynFieldBoolean("selectable");
+            definition.addDynFieldString("LabelFormula");
+            definition.addDynFieldString("codeName");
+            definition.addDynFieldString("tableName");
+            definition.addDynFieldBoolean("ensureReferentialIntegrity");
+        }
+    }
+
+    @Override
+    public ForeingKey clone() throws CloneNotSupportedException {
+        DefaultForeingKey other = (DefaultForeingKey) super.clone();
+        return other;
+    }
+
+    @Override
+    public boolean getEnsureReferentialIntegrity() {
+        return this.ensureReferentialIntegrity;
+    }
+
+    @Override
+    public void setEnsureReferentialIntegrity(boolean ensureReferentialIntegrity) {
+        this.ensureReferentialIntegrity = ensureReferentialIntegrity;
+    }
+
+    @Override
+    public boolean isInAvailableValues(Object valueToCheck) {
+        if (this.hasAvailableValues() && availableValues.length > 0) {
+            for (DynObjectValueItem availableValue : availableValues) {
+                if (Objects.equals(valueToCheck, availableValue.getValue())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAvailableValues() {
+        if (this.availableValues == null) {
+            this.getAvailableValues(null);
+        }
+        return this.availableValues != null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/WrappedSpatialIndex.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/WrappedSpatialIndex.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/WrappedSpatialIndex.java	(revision 46118)
@@ -0,0 +1,258 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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 java.util.List;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.SpatialIndex;
+import org.gvsig.fmap.geom.SpatialIndexFactory;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.Manager;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class WrappedSpatialIndex implements SpatialIndex {
+
+    private final SpatialIndex index;
+    private final FeatureStore store;
+
+    protected class Oid2FeatureReferenceVisitor implements Visitor {
+
+        private final Visitor wrapedVisitor;
+
+        public Oid2FeatureReferenceVisitor(Visitor wrapedVisitor) {
+            this.wrapedVisitor = wrapedVisitor;
+        }
+
+        @Override
+        public void visit(Object oid) throws VisitCanceledException, BaseException {
+            FeatureReference ref = FeatureReferenceFactory.createFromOID(store, oid);
+            wrapedVisitor.visit(ref);
+        }
+
+    }
+
+    protected class Oid2FeatureReferenceIterator implements Iterator<FeatureReference> {
+
+        private final Iterator wrapedIterator;
+
+        public Oid2FeatureReferenceIterator(Iterator wrapedIterator) {
+            this.wrapedIterator = wrapedIterator;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return this.wrapedIterator.hasNext();
+        }
+
+        @Override
+        public FeatureReference next() {
+            Object oid = this.wrapedIterator.next();
+            FeatureReference ref = FeatureReferenceFactory.createFromOID(
+                                        store, oid);
+            return ref;
+        }
+
+        @Override
+        public void remove() {
+            this.wrapedIterator.remove();
+        }
+    }
+
+    public WrappedSpatialIndex(SpatialIndex index, FeatureStore store) {
+        this.index = index;
+        this.store = store;
+    }
+
+    @Override
+    public SpatialIndexFactory getFactory() {
+        return this.index.getFactory();
+    }
+
+    @Override
+    public void open() {
+        this.index.open();
+    }
+
+    @Override
+    public void close() {
+        this.index.close();
+    }
+
+    @Override
+    public void query(Envelope envelope, Visitor visitor) {
+        this.index.query(envelope, new Oid2FeatureReferenceVisitor(visitor));
+    }
+
+    @Override
+    public void query(Geometry geom, Visitor visitor) {
+        this.index.query(geom, new Oid2FeatureReferenceVisitor(visitor));
+    }
+
+    @Override
+    public Iterator<FeatureReference> query(Envelope envelope, long limit) {
+        return new Oid2FeatureReferenceIterator(this.index.query(envelope, limit));
+    }
+
+    @Override
+    public Iterator<FeatureReference> query(Envelope envelope) {
+        return new Oid2FeatureReferenceIterator(this.index.query(envelope));
+    }
+
+    @Override
+    public Iterator<FeatureReference> query(Geometry geom, long limit) {
+        return new Oid2FeatureReferenceIterator(this.index.query(geom, limit));
+    }
+
+    @Override
+    public Iterator<FeatureReference> query(Geometry geom) {
+        return new Oid2FeatureReferenceIterator(this.index.query(geom));
+    }
+
+    @Override
+    public Iterator<FeatureReference> queryNearest(Envelope envelope, long limit) {
+        return new Oid2FeatureReferenceIterator(this.index.queryNearest(envelope, limit));
+    }
+
+    @Override
+    public Iterator <FeatureReference>queryNearest(Envelope envelope) {
+        return new Oid2FeatureReferenceIterator(this.index.queryNearest(envelope));
+    }
+
+    @Override
+    public Iterator<FeatureReference> queryNearest(Geometry geom, long limit) {
+        return new Oid2FeatureReferenceIterator(this.index.queryNearest(geom, limit));
+    }
+
+    @Override
+    public Iterator<FeatureReference> queryNearest(Geometry geom) {
+        return new Oid2FeatureReferenceIterator(this.index.queryNearest(geom));
+    }
+
+    @Override
+    public Iterator<FeatureReference> queryAll() {
+        return new Oid2FeatureReferenceIterator(this.index.queryAll());
+    }
+
+    @Override
+    public List<FeatureReference> queryAsList(Envelope envelope) {
+        return asList( this.query(envelope));
+    }
+
+    @Override
+    public List<FeatureReference> queryAsList(Geometry geom) {
+        return asList( this.query(geom));
+    }
+
+    @Override
+    public List<FeatureReference> queryAllAsList() {
+        return asList( this.queryAll());
+    }
+
+    @Override
+    public void insert(Envelope envelope, Object data) {
+        this.index.insert(envelope, getOID(data));
+    }
+
+    @Override
+    public void insert(Geometry geom, Object data) {
+        this.index.insert(geom, getOID(data));
+    }
+
+    @Override
+    public void insert(Geometry geom) {
+        this.index.insert(geom);
+    }
+
+    @Override
+    public boolean remove(Envelope envelope, Object data) {
+        return this.index.remove(envelope, getOID(data));
+    }
+
+    @Override
+    public boolean remove(Geometry geom, Object data) {
+        return this.index.remove(geom, getOID(data));
+    }
+
+    @Override
+    public boolean remove(Geometry geom) {
+        return this.index.remove(geom);
+    }
+
+    @Override
+    public void removeAll() {
+        this.index.removeAll();
+    }
+
+    @Override
+    public long size() {
+        return this.index.size();
+    }
+
+    @Override
+    public void flush() {
+        this.index.flush();
+    }
+
+    @Override
+    public Manager getManager() {
+        return this.index.getManager();
+    }
+
+    protected Object getOID(Object obj) {
+        if( obj == null ) {
+            return null;
+        }
+        if( obj instanceof FeatureReferenceProviderServices ) {
+            return ((FeatureReferenceProviderServices)obj).getOID();
+        }
+        if( obj instanceof Feature ) {
+            FeatureReference f = ((Feature)obj).getReference();
+            return ((FeatureReferenceProviderServices)f).getOID();
+        }
+        if( obj instanceof Number ) {
+            return obj;
+        }
+        throw new IllegalArgumentException("Can't get OID from object of type '"+obj.getClass().getName()+"'.");
+    }
+
+    protected List<FeatureReference> asList(Iterator it) {
+        List l = new ArrayList();
+        while (it.hasNext()) {
+            l.add(it.next());
+        }
+        return l;
+    }
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/RecentUsedsAttributesImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/RecentUsedsAttributesImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/RecentUsedsAttributesImpl.java	(revision 46118)
@@ -0,0 +1,71 @@
+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.List;
+import java.util.Map;
+import org.apache.commons.collections4.queue.CircularFifoQueue;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RecentUsedsAttributesImpl {
+
+    private final Map<String,CircularFifoQueue<String>> recentsForStore;
+    
+    public RecentUsedsAttributesImpl() {
+        this.recentsForStore = new HashMap<>();
+    }
+    
+    public Collection<String> getNames(FeatureType featureType) {
+        FeatureStore store = featureType.getStore();
+        if( store == null ) {
+            return Collections.EMPTY_LIST;
+        }
+        CircularFifoQueue<String> recents = this.recentsForStore.get(store.getFullName());
+        if( recents==null ) {
+            return Collections.EMPTY_LIST;
+        }
+        return recents;
+    }
+    
+    public List<FeatureAttributeDescriptor> getAttributes(FeatureType featureType) {
+        List<FeatureAttributeDescriptor> r = new ArrayList<>();
+        for (String name : this.getNames(featureType)) {
+            FeatureAttributeDescriptor attrRecendUsed = featureType.getAttributeDescriptor(name);
+            if (attrRecendUsed != null) {
+                r.add(attrRecendUsed);
+            }
+        }
+        return r;
+    }
+
+    public void add(FeatureAttributeDescriptor attribute) {
+        this.add(attribute.getFeatureType(), attribute.getName());
+    }
+    
+    public void add(FeatureType featureType, FeatureAttributeDescriptor attribute) {
+        this.add(featureType, attribute.getName());
+    }
+    
+    public void add(FeatureType featureType, String name) {
+        String storeFullName = featureType.getStore().getFullName();
+        CircularFifoQueue<String> recents = this.recentsForStore.get(storeFullName);
+        if( recents==null ) {
+            recents = new CircularFifoQueue(this.getMaxSize());
+            this.recentsForStore.put(storeFullName, recents);
+        }
+        recents.remove(name);
+        recents.add(name);
+    }
+
+    public int getMaxSize() {
+        return 6;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl
___________________________________________________________________
Added: svn:ignore
   + .DefaultFeatureQuery.java.kate-swp
.directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1037 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.logging.Level;
+import org.apache.commons.lang3.mutable.MutableBoolean;
+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.dynobjectutils.DynObjectFeatureFacade;
+import org.gvsig.fmap.dal.feature.paging.FacadeOfAFeaturePagingHelper;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.util.UnmodifiableBasicList;
+import org.gvsig.tools.util.UnmodifiableBasicList64;
+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
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FeaturePagingHelperImpl extends DefaultDynObjectPagingHelper
+        implements FeaturePagingHelper {
+
+    private static final Logger LOG = LoggerFactory.getLogger(FeaturePagingHelperImpl.class);
+
+    private static class Page {
+
+        private Feature[] features;
+        private final long number;
+        private final int size;
+        private long lastaccess;
+
+        public Page(long number, int size) {
+            this.size = size;
+            this.number = number;
+            this.features = new Feature[size];
+            this.lastaccess = 0;
+        }
+
+        public void setFeature(int i, Feature copy) {
+            this.features[i] = copy;
+        }
+
+        public Feature[] getFeatures() {
+            this.lastaccess = (new Date()).getTime();
+            return this.features;
+        }
+
+        public long getPageNumber() {
+            return this.number;
+        }
+
+        public long getLastAccess() {
+            return this.lastaccess;
+        }
+
+        public int size() {
+            return this.size;
+        }
+
+        public void dispose() {
+            for (int i = 0; i < features.length; i++) {
+                features[i] = null;
+            }
+            this.features = null;
+            this.lastaccess = 0;
+        }
+    }
+
+    private static class PageCache {
+
+        private final int maxpages;
+        private List<Page> pages;
+
+        public PageCache(int maxpages) {
+            this.maxpages = maxpages;
+            this.pages = new ArrayList<>();
+        }
+
+        public void clear() {
+            pages.forEach((page) -> {
+                page.dispose();
+            });
+            this.pages = new ArrayList<>();
+        }
+
+        public Page get(long pageNumber) {
+            for (Page page : pages) {
+                if (page.getPageNumber() == pageNumber) {
+                    return page;
+                }
+            }
+            return null;
+        }
+
+        public void add(Page page) {
+            if (this.pages.size() < this.maxpages) {
+                this.pages.add(page);
+                return;
+            }
+            int toDrop = 0;
+            for (int i = 0; i < this.pages.size(); i++) {
+                if (this.pages.get(i).getLastAccess() < this.pages.get(toDrop).getLastAccess()) {
+                    toDrop = i;
+                }
+            }
+            this.pages.set(toDrop, page);
+        }
+    }
+
+    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 Feature[] features = null;
+    private PageCache cachedPages = null;
+
+    private boolean initialization_completed = false;
+
+    private FeatureSelection selection = null;
+
+    /**
+     * 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
+     * @param featureQuery
+     * @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 featureStore
+     * @param featureQuery
+     * @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();
+        this.cachedPages = new PageCache(3);
+        FeatureQuery theQuery = featureQuery;
+        if (featureQuery == null) {
+            theQuery = featureStore.createFeatureQuery();
+            theQuery.setFeatureType(featureStore.getDefaultFeatureType());
+        }
+
+        this.featureStore = featureStore;
+        DisposeUtils.bind(this.featureStore);
+        
+        this.query = theQuery;
+        this.query.setPageSize(pageSize);
+
+        setDefaultCalculator(() -> {
+            FeatureSet featureSet = getFeatureSet(false);
+            try {
+                return featureSet.getSize();
+            } catch (BaseException e) {
+                LOG.warn("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 {}",
+                    getCalculator().getNumPages(), pageSize
+            );
+        }
+        this.initialization_completed = true;
+    }
+
+    /**
+     * @return the selectionUp status
+     */
+    @Override
+    public boolean isSelectionUp() {
+        return selectionUp;
+    }
+
+    @Override
+    public FeatureSelection getSelection() {
+        if (selection == null) {
+            try {
+                return getFeatureStore().getFeatureSelection();
+            } catch (Exception e) {
+                LOG.warn("Error getting the selection", e);
+            }
+        }
+        return selection;
+    }
+
+    @Override
+    public void setSelection(FeatureSelection selection) {
+        this.selection = selection;
+    }
+
+    @Override
+    public void setSelectionUp(boolean selectionUp) {
+        this.selectionUp = selectionUp;
+        try {
+            this.cachedPages.clear();
+            FeatureSelection currentSelection = getSelection();
+            if (selectionUp && !currentSelection.isEmpty()) {
+//                initialSelection =(FeatureSelection) currentSelection.clone();
+                setCalculator(new OneSubsetOneSetPagingCalculator(
+                        new FeatureSetSizeableDelegate(currentSelection),
+                        new FeatureSetSizeableDelegate(getFeatureSet(false)),
+                        getMaxPageSize()));
+            } else {
+                setDefaultCalculator(new FeatureSetSizeableDelegate(
+                        getFeatureSet(false)), getMaxPageSize()
+                );
+            }
+        } catch (BaseException e) {
+            LOG.warn("Error setting the selection up setting to: " + selectionUp, e);
+        }
+    }
+
+    @Override
+    public synchronized Feature getFeatureAt(long index) throws BaseException {
+        // Check if we have currently loaded the viewed page data,
+        // or we need to load a new one
+        int maxPageSize = getMaxPageSize();
+        long currentPage = getCurrentPage();
+        long currentPage2 = currentPage;
+
+        long pageForIndex = (long) Math.floor(index / maxPageSize);
+
+        if (pageForIndex != currentPage) {
+            setCurrentPage(pageForIndex);
+            currentPage2 = getCurrentPage();
+        }
+
+        long positionForIndex = index - (currentPage2 * maxPageSize);
+
+        if (positionForIndex >= getCurrentPageFeatures().length) {
+            throw new FeatureIndexException(
+                    new IndexOutOfBoundsException("positionForIndex too big: "
+                            + positionForIndex));
+        } else {
+            Feature feature = getCurrentPageFeatures()[(int) positionForIndex];
+            return feature;
+        }
+
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public FeatureSet getFeatureSet() {
+        return this.getFeatureSet(false);
+    }
+
+    /**
+     * 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();
+                    featSet = null;
+                } 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;
+    }
+
+    @Override
+    public DynObjectSet getDynObjectSet() {
+        return getFeatureSet(false).getDynObjectSet();
+    }
+
+    @Override
+    public void reloadCurrentPage() throws BaseException {
+        boolean sel_up = this.isSelectionUp();
+        try {
+            setSelectionUp(false);
+            if (getCalculator().getCurrentPage() > -1) {
+                this.cachedPages.clear();
+                loadCurrentPageData();
+            }
+        } finally {
+            if (sel_up) {
+                setSelectionUp(true);
+            }
+        }
+    }
+
+    @Override
+    public void reload() throws BaseException {
+
+        this.cachedPages.clear();
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        setDefaultCalculator(() -> {
+            FeatureSet featureSet = getFeatureSet(false);
+            try {
+                return featureSet.getSize();
+            } catch (BaseException e) {
+                LOG.warn("Error getting the size of the FeatureSet: "+ featureSet, e);
+                return 0l;
+            }
+        }, getCalculator().getMaxPageSize());
+//        reloadCurrentPage();
+    }
+
+    @Override
+    public FeatureStore getFeatureStore() {
+        return featureStore;
+    }
+
+    @Override
+    public FeatureQuery getFeatureQuery() {
+        return query;
+    }
+
+    /**
+     * Loads all the Features of the current page.
+     *
+     * @throws org.gvsig.tools.exception.BaseException
+     */
+    @Override
+    protected synchronized void loadCurrentPageData() throws BaseException {
+        if (!initialization_completed) {
+            return;
+        }
+        final int currentPageSize = getCalculator().getCurrentPageSize();
+        final long currentPage = getCalculator().getCurrentPage();
+        Page page = this.cachedPages.get(currentPage);
+        if (page == null) {
+            page = new Page(currentPage, currentPageSize);
+
+            long t1 = 0;
+            if (LOG.isTraceEnabled()) {
+                t1 = System.currentTimeMillis();
+            }
+
+            if (selectionUp) {
+                loadCurrentPageDataWithSelectionUp(page);
+            } else {
+                loadCurrentPageDataNoSelection(page);
+            }
+
+            if (LOG.isTraceEnabled()) {
+                long t2 = System.currentTimeMillis();
+                LOG.trace("Time to load {} features: {} ms", currentPageSize, t2 - t1);
+            }
+            this.cachedPages.add(page);
+        }
+        this.features = page.getFeatures();
+    }
+
+    private void loadCurrentPageDataWithSelectionUp(final Page page)
+            throws BaseException {
+        FeatureSelection theSelection = getSelection();
+        if (theSelection == null) {
+            loadCurrentPageDataNoSelection(page);
+        } else {
+            FeatureSet set = getFeatureSet(false);
+            try {
+                OneSubsetOneSetPagingCalculator twoSetsCalculator = null;
+                if (getCalculator() instanceof OneSubsetOneSetPagingCalculator) {
+                    twoSetsCalculator = (OneSubsetOneSetPagingCalculator) getCalculator();
+                } else {
+                    twoSetsCalculator = new OneSubsetOneSetPagingCalculator(
+                                    new FeatureSetSizeableDelegate(theSelection),
+                                    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(page, 0, theSelection,
+                            twoSetsCalculator.getFirstSetInitialIndex(),
+                            twoSetsCalculator.getFirstSetHowMany(), null
+                    );
+                }
+                // Next, load values from the FeatureSet if the current page has values
+                // from it
+                if (twoSetsCalculator.hasCurrentPageAnyValuesInSecondSet()) {
+                    loadDataFromFeatureSet(
+                            page,
+                            // The cast will work as that size will be <= maxpagesize,
+                            // which is an int
+                            (int) twoSetsCalculator.getFirstSetHowMany(), set,
+                            twoSetsCalculator.getSecondSetInitialIndex(),
+                            twoSetsCalculator.getSecondSetHowMany(), theSelection
+                    );
+                }
+            } finally {
+                // This is the feature set we dont want to lose it
+                // set.dispose();
+            }
+        }
+    }
+
+    private void loadCurrentPageDataNoSelection(final Page page)
+            throws BaseException {
+
+        long firstPosition = getCalculator().getInitialIndex();
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Loading {} Features starting at position {}",
+                    getCalculator().getCurrentPageSize(), firstPosition
+            );
+        }
+
+        FeatureSet featureSet = getFeatureSet(false);
+        try {
+            loadDataFromFeatureSet(page, 0, featureSet, firstPosition,
+                    getCalculator().getCurrentPageSize(), null);
+        } catch (Exception ex) {
+            throw ex;
+        } finally {
+            // This is the feature set we dont want to lose it
+            // featureSet.dispose();
+        }
+    }
+
+    private void loadDataFromFeatureSet(final Page page,
+            final int valuesPosition, FeatureSet set, long initialIndex,
+            final long howMany, final FeatureSelection selectedFeaturesToSkip)
+            throws DataException {
+
+        try {
+            final MutableBoolean errorReported = new MutableBoolean(false);
+            set.accept(new Visitor() {
+                private int i = valuesPosition;
+
+                @Override
+                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 {
+                            page.setFeature(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.
+                            if (!errorReported.booleanValue()) {
+                                // Solo sacamos un error por pagina de datos.
+                                LOG.warn("Problemas recuperando feature.", ex);
+                                errorReported.setTrue();
+                            }
+                        }
+                    }
+                }
+            }, initialIndex, howMany);
+        } catch (VisitCanceledException ex) {
+            // Do nothing
+        } catch (Exception e) {
+            if (e instanceof DataException) {
+                throw ((DataException) e);
+            } else {
+                LOG.warn("Error loading the data starting at position {}", initialIndex, e);
+            }
+        }
+    }
+
+    @Override
+    public void delete(Feature feature) throws BaseException {
+        featureStore.delete(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    @Override
+    public void insert(EditableFeature feature) throws BaseException {
+        featureStore.insert(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        try {
+            return getFeatureSet(false).isEmpty();
+        } catch (ConcurrentDataModificationException ex) {
+            LOG.warn("ConcurrentDataModification error asking about the emptiness of the list. Retrying reloading data.");
+            try {
+                reload();
+            } catch (BaseException e) {
+                LOG.warn("Error reloading data.", e);
+                throw new RuntimeException(e);
+            }
+            try {
+                return getFeatureSet(false).isEmpty();
+            } catch (RuntimeException e) {
+                throw  e;
+            } catch (Exception e) {
+                LOG.warn("Error asking about the emptiness of the list after reloading data.", e);
+                throw new RuntimeException(e);
+            }
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public void update(EditableFeature feature) throws BaseException {
+        featureStore.update(feature);
+        /*
+         * Force re-creation of feature set
+         */
+        this.getFeatureSet(true);
+
+        reloadCurrentPage();
+    }
+
+    @Override
+    public FeatureType getFeatureType() {
+
+        FeatureType ft = null;
+
+        try {
+            ft = featureStore.getDefaultFeatureType();
+        } catch (DataException e) {
+            LOG.warn("Error while getting feature type: "+ e.getMessage(), e);
+        }
+        return ft;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        if (featSet != null) {
+            try {
+                featSet.dispose();
+            } catch (Exception ex) {
+                LOG.info("Error while disposing featset.", ex);
+            }
+        }
+    }
+
+    @Override
+    public DynObject[] getCurrentPageDynObjects() {
+        Feature[] theFeatures = getCurrentPageFeatures();
+        DynObject[] dynobjects = new DynObject[theFeatures.length];
+        for (int i = 0; i < dynobjects.length; i++) {
+            dynobjects[i] = new DynObjectFeatureFacade(theFeatures[i]);
+        }
+        return dynobjects;
+    }
+
+    @Override
+    public DynObject getDynObjectAt(long index) throws BaseException {
+        return new DynObjectFeatureFacade(getFeatureAt(index));
+    }
+
+    @Override
+    public List asList() {
+        return new FeaturePagingHelperList();
+    }
+
+    @Override
+    public List asListOfDynObjects() {
+        return new DynObjectPagingHelperList();
+    }
+
+    private class FeaturePagingHelperList extends PagingHelperList {
+
+        @Override
+        public Object get(int i) {
+            return this.get64(i);
+        }
+
+        @Override
+        public Object get64(long i) {
+            try {
+                return getFeatureAt(i);
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn("ConcurrentDataModification error getting feature " + i + " of the list. Retrying reloading data.");
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    return getFeatureAt(i);
+                } catch (Exception e) {
+                    LOG.warn("Error getting feature " + i + " of the list after reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+            } catch (BaseException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        @Override
+        public Object set(int i, Object e) {
+            return super.set(i, e);
+        }
+
+        @Override
+        public Object remove(int i) {
+            return super.remove(i);
+        }
+
+        @Override
+        public boolean add(Object e) {
+            return super.add(e);
+        }
+    }
+
+    private class DynObjectPagingHelperList extends PagingHelperList {
+
+        @Override
+        public Object get(int i) {
+            return this.get64(i);
+        }
+
+        @Override
+        public Object get64(long position) {
+            try {
+                return getDynObjectAt(position);
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn("ConcurrentDataModification error getting element " + position + " of the list. Retrying reloading data.");
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    return getDynObjectAt(position);
+                } catch (Exception e) {
+                    LOG.warn("Error getting element " + position + " of the list after reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+            } catch (BaseException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+    }
+
+    private abstract class PagingHelperList implements List, FacadeOfAFeaturePagingHelper, UnmodifiableBasicList, UnmodifiableBasicList64, Disposable {
+
+        @Override
+        public void dispose() {
+            FeaturePagingHelperImpl.this.dispose();
+        }
+
+        @Override
+        public FeaturePagingHelper getFeaturePagingHelper() {
+            return FeaturePagingHelperImpl.this;
+        }
+
+        @Override
+        public String toString() {
+            return String.format("..(%d %ss)...", this.size(), featureStore.getName());
+        }
+
+        @Override
+        public long size64() {
+            FeatureSet fset = null;
+            try {
+                fset = getFeatureSet(false);
+                return fset.getSize();
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn("ConcurrentDataModification error asking the size of the list. Retrying reloading data.");
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    fset = getFeatureSet(false);
+                    return fset.getSize();
+                } catch (DataException e) {
+                    LOG.warn("Error asking the size of the list after reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+            } catch (DataException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        @Override
+        public int size() {
+            long sz = this.size64();
+            if (sz > Integer.MAX_VALUE) {
+                sz = Integer.MAX_VALUE;
+            }
+            return (int) sz;
+        }
+
+        @Override
+        public boolean isEmpty() {
+            try {
+                return getFeatureSet(false).isEmpty();
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn("ConcurrentDataModification error asking about the emptiness of the list. Retrying reloading data.");
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    return getFeatureSet(false).isEmpty();
+                } catch (RuntimeException e) {
+                    throw  e;
+                } catch (Exception e) {
+                    LOG.warn("Error asking about the emptiness of the list after reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+            } catch (RuntimeException ex) {
+                throw  ex;
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        @Override
+        public Iterator iterator() {
+            try {
+                return getFeatureSet(false).fastIterator();
+            } catch (ConcurrentDataModificationException ex) {
+                LOG.warn("ConcurrentDataModification error getting iterator of the list. Retrying reloading data.");
+                try {
+                    reload();
+                } catch (BaseException e) {
+                    LOG.warn("Error reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+                try {
+                    return getFeatureSet(false).fastIterator();
+                } catch (DataException e) {
+                    LOG.warn("Error getting iterator of the list after reloading data.", e);
+                    throw new RuntimeException(e);
+                }
+            } catch (DataException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        @Override
+        public boolean contains(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public Object[] toArray() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public Object[] toArray(Object[] ts) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean add(Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean containsAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean addAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean addAll(int i, Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean removeAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public boolean retainAll(Collection clctn) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public void clear() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public Object set(int i, Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public void add(int i, Object e) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public Object remove(int i) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public int indexOf(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public int lastIndexOf(Object o) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public ListIterator listIterator() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public ListIterator listIterator(int i) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public List subList(int i, int i1) {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+
+        @Override
+        public List toList() {
+            return this;
+        }
+
+    }
+
+    @Override
+    public long size64() {
+        try {
+            return this.getTotalSize();
+        } catch (ConcurrentDataModificationException ex) {
+            LOG.warn("ConcurrentDataModification error getting size of the list. Retrying reloading data.");
+            try {
+                reload();
+            } catch (BaseException e) {
+                LOG.warn("Error reloading data.", e);
+                throw new RuntimeException(e);
+            }
+            try {
+                return this.getTotalSize();
+            } catch (Exception e) {
+                LOG.warn("Error getting size of the list after reloading data.", e);
+                throw new RuntimeException(e);
+            }
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public Feature get64(long position) {
+        try {
+            return getFeatureAt(position);
+        } catch (ConcurrentDataModificationException ex) {
+            LOG.warn("ConcurrentDataModification error getting element " + position + " of the list. Retrying reloading data.");
+            try {
+                reload();
+            } catch (BaseException e) {
+                LOG.warn("Error reloading data.", e);
+                throw new RuntimeException(e);
+            }
+            try {
+                return getFeatureAt(position);
+            } catch (Exception e) {
+                LOG.warn("Error getting element " + position + " of the list after reloading data.", e);
+                throw new RuntimeException(e);
+            }
+        } catch (BaseException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public Iterator<Feature> iterator() {
+        try {
+            return getFeatureSet(false).fastIterator();
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderFactory.java	(revision 46118)
@@ -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.memory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class MemoryStoreProviderFactory 
+    extends AbstractFeatureStoreProviderFactory 
+    {
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryStoreProviderFactory.class);
+
+    protected MemoryStoreProviderFactory() {
+        super(
+                MemoryStoreProvider.NAME, 
+                MemoryStoreProvider.DESCRIPTION
+        );
+    }
+
+    @Override
+    public DataStoreProvider createProvider(DataParameters parameters,
+            DataStoreProviderServices providerServices)
+            throws InitializeException {
+        return new MemoryStoreProvider((MemoryStoreParameters) parameters, providerServices);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new MemoryStoreParameters();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/store/memory/MemoryStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.store.memory;
+
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+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
+OpenFeatureStoreParameters{
+	  
+	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";
+	public static final String ISTEMPORARY_NAME = "isTemporary";
+	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);
+				parametersDefinition.addDynFieldBoolean(ISTEMPORARY_NAME).
+                                        setDefaultFieldValue(false);
+				
+	    	}
+	    }
+
+        @Override
+        public String getProviderName() {
+		return MemoryStoreProvider.NAME;
+        }
+
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.registerStoreProviderFactory(new MemoryStoreProviderFactory());
+		}
+
+		if( exs.size()>0 ) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+}
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.store.memory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+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.EditableFeatureType;
+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.DefaultFeatureProvider;
+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 = Math.random();
+        data = new ArrayList();
+        oids = new HashMap();
+        initialize();
+        memoryResource =
+            createResource(MemoryResource.NAME,
+                new Object[] { memoryStoreParameters.getName() });
+    }
+
+    @Override
+    public boolean isTemporary() {
+        try {
+            return (boolean) this.getParameters().getDynValue(MemoryStoreParameters.ISTEMPORARY_NAME);
+        } catch(Throwable th) {
+            return false;
+        }
+    }
+
+    
+    @Override
+    public FeatureProvider createFeatureProvider(FeatureType featureType)throws DataException  {
+            this.open();
+            return new MemoryFeatureProvider(featureType, this.createNewOID());
+    }
+
+    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() {
+        EditableFeatureType editableFeatureType = getStoreServices().createFeatureType(getName());
+        editableFeatureType.setHasOID(true);
+        FeatureType featureType = editableFeatureType.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 HashMap((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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterSet.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterSet.java	(revision 46118)
@@ -0,0 +1,461 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.awt.image.BufferedImage;
+import java.util.Iterator;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterSet;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.exceptions.RasterSetInitializeException;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+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.Point;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Band.BandByte;
+import org.gvsig.raster.lib.buffer.api.Band.BandDouble;
+import org.gvsig.raster.lib.buffer.api.Band.BandFloat;
+import org.gvsig.raster.lib.buffer.api.Band.BandInt;
+import org.gvsig.raster.lib.buffer.api.Band.BandShort;
+import org.gvsig.raster.lib.buffer.api.BandInfo;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableManager;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.task.SimpleTaskStatus;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.gvsig.tools.visitor.impl.AbstractIndexedVisitable;
+
+/**
+ * Implements RasterSet
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class DefaultRasterSet extends AbstractIndexedVisitable implements RasterSet, Observer {
+
+    protected static final Logger logger = LoggerFactory.getLogger(DefaultRasterSet.class);
+
+    private DefaultRasterStore store;
+    protected RasterQuery query;
+    protected Buffer buffer;
+
+    // to make it disposable
+    private final Object lock = new Object();
+    private boolean disposed = false;
+
+    /**
+     * Creates a RasterSet with the raster filtered by the query
+     *
+     * @param store
+     * @param query
+     * @throws DataException
+     */
+    public DefaultRasterSet(RasterStore store, RasterQuery query) throws DataException {
+        if (ToolsLocator.getDisposableManager() != null) {
+            ToolsLocator.getDisposableManager().bind(this);
+        } else {
+            logger.warn("Can't retrieve the disposable manager,");
+        }
+
+        DisposableManager disposableManager = ToolsLocator.getDisposableManager();
+        disposableManager.bind(store);
+        this.store = (DefaultRasterStore) store;
+        this.query = query;
+        RasterStoreProvider provider = this.store.getProvider();
+
+        try {
+            buffer = provider.createBuffer(query);
+            // Filter buffer by raster query
+            if (buffer!=null && query != null) {
+                if (query.getClip() != null) {
+                    Buffer clip = buffer.clip(query.getClip());
+                    DisposeUtils.dispose(buffer);
+                    buffer = clip;
+                }
+            }
+        } catch (BufferException e) {
+            throw new RasterSetInitializeException(e);
+        }
+
+        this.store.addObserver(this);
+    }
+
+    @Override
+    public int getBandCount() {
+        if (this.buffer != null) {
+            return this.buffer.getBandCount();
+        }
+        return 0;
+    }
+
+    @Override
+    public Band[] getBands() {
+        if (this.buffer != null) {
+            return this.buffer.getBands();
+        }
+        return null;
+    }
+
+    @Override
+    public int getColumns() {
+        if (this.buffer != null) {
+            return this.buffer.getColumns();
+        }
+        return 0;
+    }
+
+    @Override
+    public int getRows() {
+        if (this.buffer != null) {
+            return this.buffer.getRows();
+        }
+        return 0;
+    }
+
+    @Override
+    public boolean areAllBandsOfTheSameType() {
+        if (this.buffer != null) {
+            return this.buffer.areAllBandsOfTheSameType();
+        }
+        return true;
+    }
+
+    @Override
+    public Envelope getEnvelope() throws LocatorException, CreateEnvelopeException {
+        if (this.buffer != null) {
+            return this.buffer.getEnvelope();
+        }
+        return GeometryLocator.getGeometryManager().createEnvelope(SUBTYPES.GEOM2D);
+    }
+
+    @Override
+    public IProjection getProjection() {
+        if (this.buffer != null) {
+            return this.buffer.getProjection();
+        }
+        return null; // /OJO
+    }
+
+    @Override
+    public boolean isInside(int cellX, int cellY) {
+        if (this.buffer != null) {
+            return this.buffer.isInside(cellX, cellY);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isInside(Point point) {
+        if (this.buffer != null) {
+            return this.buffer.isInside(point);
+        }
+        return false;
+    }
+
+    @Override
+    public void addBand(Band band) {
+        if (this.buffer != null) {
+            this.buffer.addBand(band);
+        }
+    }
+
+    @Override
+    public void setBand(int pos, Band band) throws BandException {
+        if (this.buffer != null) {
+            this.buffer.setBand(pos, band);
+        }
+    }
+
+    @Override
+    public void removeBand(int pos) {
+        if (this.buffer != null) {
+            this.buffer.removeBand(pos);
+        }
+    }
+
+    @Override
+    public Band getBand(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBand(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public BandByte getBandByte(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBandByte(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public BandShort getBandShort(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBandShort(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public BandInt getBandInt(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBandInt(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public BandFloat getBandFloat(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBandFloat(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public BandDouble getBandDouble(int pos) {
+        if (this.buffer != null) {
+            return this.buffer.getBandDouble(pos);
+        }
+        return null;
+    }
+
+    @Override
+    public void switchBands(int[] positions) {
+        if (this.buffer != null) {
+            this.buffer.switchBands(positions);
+        }
+    }
+
+    @Override
+    public void switchBands(int pos1, int pos2) {
+        if (this.buffer != null) {
+            this.buffer.switchBands(pos1, pos2);
+        }
+    }
+
+    @Override
+    public Buffer createInterpolated(int rows, int columns, int interpolationMode, SimpleTaskStatus status)
+        throws LocatorException, BufferException {
+        if (this.buffer != null) {
+            return this.buffer.createInterpolated(rows, columns, interpolationMode, status);
+        }
+        return null;
+    }
+
+    @Override
+    public Buffer convert(ICoordTrans ct, SimpleTaskStatus status) throws BufferException {
+        if (this.buffer != null) {
+            return this.buffer.convert(ct, status);
+        }
+        return null;
+    }
+
+    @Override
+    public int[] getBandTypes() {
+        if (this.buffer != null) {
+            return this.buffer.getBandTypes();
+        }
+        return null;
+    }
+
+    @Override
+    public NoData[] getBandNoData() {
+        if (this.buffer != null) {
+            return this.buffer.getBandNoData();
+        }
+        return null;
+
+    }
+
+    @Override
+    public Buffer clip(Envelope envelope) throws BufferException {
+        if (this.buffer != null) {
+            return this.buffer.clip(envelope);
+        }
+        return null;
+    }
+
+    @Override
+    public double getPixelSizeX() {
+        if (this.buffer != null) {
+            return this.buffer.getPixelSizeX();
+        }
+        return Double.NaN;
+    }
+
+    @Override
+    public double getPixelSizeY() {
+        if (this.buffer != null) {
+            return this.buffer.getPixelSizeY();
+        }
+        return Double.NaN;
+    }
+
+    @Override
+    public Statistics getStatistics(SimpleTaskStatus status) {
+        if (this.buffer != null) {
+            return this.buffer.getStatistics(status);
+        }
+        return null;
+    }
+
+    @Override
+    public void addObserver(Observer o) {
+        if (this.buffer != null) {
+            this.buffer.addObserver(o);
+        }
+    }
+
+    @Override
+    public void deleteObserver(Observer o) {
+        if (this.buffer != null) {
+            this.buffer.deleteObserver(o);
+        }
+    }
+
+    @Override
+    public void deleteObservers() {
+        if (this.buffer != null) {
+            this.buffer.deleteObservers();
+        }
+    }
+
+    @Override
+    public Iterator<Band> iterator() {
+        if (this.buffer != null) {
+            return this.buffer.iterator();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean isFromStore(DataStore store) {
+        return this.store.equals(store);
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        // Do nothing
+    }
+
+    @Override
+    protected void doAccept(Visitor visitor, long firstValueIndex) throws VisitCanceledException, BaseException {
+        if (this.buffer != null) {
+
+            DefaultRasterKernel kernel = new DefaultRasterKernel(this.buffer);
+            for (int row = 0; row < this.buffer.getRows(); row++) {
+                for (int column = 0; column < this.buffer.getColumns(); column++) {
+                    kernel.set(row, column);
+                    visitor.visit(kernel);
+                }
+            }
+        }
+    }
+
+    @Override
+    public final void dispose() {
+        synchronized (lock) {
+            // Check if we have already been disposed, and don't do it again
+            if (!disposed) {
+                if (ToolsLocator.getDisposableManager().release(this)) {
+                    try {
+                        doDispose();
+                    } catch (BaseException ex) {
+                        logger.error("Error performing dispose", ex);
+                    }
+                    disposed = true;
+                }
+            }
+        }
+    }
+
+    /**
+     * Internal implementation for the {@link #dispose()} method.
+     *
+     * @throws org.gvsig.tools.exception.BaseException
+     * @see #dispose()
+     */
+    public void doDispose() throws BaseException {
+        DisposeUtils.dispose(store);
+        store = null;
+        DisposeUtils.dispose(buffer);
+        buffer = null;
+        query = null;
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        super.finalize();
+    }
+
+    @Override
+    public BufferedImage getBufferedImage() {
+        if (this.buffer != null) {
+            return buffer.getBufferedImage();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return buffer==null;
+    }
+
+    @Override
+    public BufferDimensions getDimensions() {
+        return buffer.getDimensions();
+    }
+
+    @Override
+    public BandInfo[] getBandsInfo() {
+        if (this.buffer != null) {
+            return this.buffer.getBandsInfo();
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/exceptions/AddingBandsException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/exceptions/AddingBandsException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/exceptions/AddingBandsException.java	(revision 46118)
@@ -0,0 +1,35 @@
+package org.gvsig.fmap.dal.raster.impl.exceptions;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.dal.exception.DataException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class AddingBandsException extends DataException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -3839070588098037446L;
+
+    private final static String MESSAGE_FORMAT = "Exception adding bands from '%(sourceStore)' to '%(targetStore)': '%(because)'";
+    private final static String MESSAGE_KEY = "_ServerExplorerAddException";
+
+    /**
+     * @param sourceStore
+     * @param targetStore
+     * @param because
+     * @param cause
+     */
+    public AddingBandsException(String sourceStore, String targetStore, String because, Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+        setValue("sourceStore", sourceStore);
+        setValue("targetStore", targetStore);
+        setValue("because", StringUtils.uncapitalize(because));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStore.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStore.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStore.java	(revision 46118)
@@ -0,0 +1,1058 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.BaseStoresRepository;
+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.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.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.exception.CloneException;
+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.exception.PersistenceStoreAlreadyLoadedException;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.raster.RasterStoreProviderFactory;
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.fmap.dal.raster.RasterCache;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterSet;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.RasterStoreNotification;
+import org.gvsig.fmap.dal.raster.exceptions.RasterQueryCloneException;
+import org.gvsig.fmap.dal.raster.impl.exceptions.AddingBandsException;
+import org.gvsig.fmap.dal.raster.spi.RasterCacheStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProviderServices;
+import org.gvsig.fmap.dal.resource.Resource;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer2;
+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.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.timesupport.Interval;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.DynObject_v2;
+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.locator.LocatorException;
+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.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.UnmodifiableBasicMap;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * Implements RasterStore
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultRasterStore extends AbstractDisposable implements DataStoreInitializer2,
+    RasterStoreProviderServices, RasterStore, Observer {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultRasterStore.class);
+
+    private static final String PERSISTENCE_DEFINITION_NAME = "RasterStore";
+    private static final String METADATA_DEFINITION_NAME = "RasterStore";
+
+    private DataStoreParameters parameters = null;
+    private RasterStoreProvider provider = null;
+    private DelegatedDynObject metadata;
+    private DefaultDataManager dataManager = null;
+    private List<BandsFromStore> additionalBands = null;
+
+    private DelegateWeakReferencingObservable delegateObservable = new DelegateWeakReferencingObservable(this);
+
+    /**
+     * Registers persistence
+     */
+    public static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition(PERSISTENCE_DEFINITION_NAME) == null) {
+            DynStruct definition =
+                manager.addDefinition(DefaultRasterStore.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);
+        }
+    }
+
+    /**
+     * Registers metadata
+     *
+     * @throws MetadataException
+     */
+    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));
+        }
+    }
+
+    /**
+     * @return dataManager
+     */
+    @Override
+    public DataManager getManager() {
+        return this.dataManager;
+    }
+
+    @Override
+    public String getName() {
+        return this.provider.getName();
+    }
+
+    @Override
+    public String getFullName() {
+        return this.provider.getFullName();
+    }
+
+    @Override
+    public DataStoreParameters getParameters() {
+        return parameters;
+    }
+
+    @Override
+    public String getProviderName() {
+        return this.provider.getProviderName();
+    }
+
+    @Override
+    public void refresh() throws DataException {
+        this.notifyChange(RasterStoreNotification.BEFORE_REFRESH);
+        this.provider.refresh();
+        this.notifyChange(RasterStoreNotification.AFTER_REFRESH);
+    }
+
+    @Override
+    public DataSet getDataSet() throws DataException {
+        return this.getRasterSet();
+    }
+
+    @Override
+    public DataSet getDataSet(DataQuery dataQuery) throws DataException {
+        return this.getRasterSet((RasterQuery) dataQuery);
+    }
+
+    @Override
+    public void getDataSet(Observer observer) throws DataException {
+        this.getRasterSet(null, observer);
+    }
+
+    @Override
+    public void getDataSet(DataQuery dataQuery, Observer observer) throws DataException {
+        this.getRasterSet((RasterQuery) dataQuery, observer);
+    }
+
+    @Override
+    public RasterSet getRasterSet(RasterQuery rasterQuery) throws DataException {
+
+        try {
+            if (rasterQuery != null) {
+                List<BandQuery> queryBands = rasterQuery.getBands();
+                if (!queryBands.isEmpty()) {
+                    RasterQuery mainRasterQuery = (RasterQuery) rasterQuery.clone();
+                    mainRasterQuery.clearBands();
+                    Map<RasterStore, RasterQuery> rasterQueries = new HashMap<>();
+
+                    for (BandQuery bandQuery : queryBands) {
+                        int band = bandQuery.getBand();
+                        if(band<getProvider().getBands()){
+                            mainRasterQuery.addBand(bandQuery);
+                        } else {
+                            int bandCounter = getProvider().getBands();
+                            boolean bandFound = false;
+                            if(additionalBands!=null){
+                                for (BandsFromStore bandsFromStore : additionalBands) {
+                                    RasterStore store = bandsFromStore.getStore();
+
+                                    if (band < bandCounter + bandsFromStore.size()) {
+                                        BandQuery storeBandQuery =
+                                            store.createBandQuery(bandsFromStore.get(band - bandCounter));
+                                        if (rasterQueries.containsKey(store)) {
+                                            rasterQueries.get(store).addBand(storeBandQuery);
+                                        } else {
+                                            RasterQuery storeRasterQuery = (RasterQuery) rasterQuery.clone();
+                                            storeRasterQuery.clearBands();
+                                            storeRasterQuery.addBand(storeBandQuery);
+                                            rasterQueries.put(store, storeRasterQuery);
+                                            bandFound = true;
+                                        }
+                                    }
+                                    bandCounter += bandsFromStore.size();
+                                    if (bandFound) {
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    RasterSet mainRasterSet = new DefaultRasterSet(this, mainRasterQuery);
+                    for (Entry<RasterStore, RasterQuery> entry : rasterQueries.entrySet()) {
+                        RasterStore store = entry.getKey();
+                        RasterQuery query = entry.getValue();
+                        RasterSet subRasterSet = store.getRasterSet(query);
+                        for (Band band : subRasterSet) {
+                            mainRasterSet.addBand(band);
+                        }
+                    }
+                    return mainRasterSet;
+                }
+            }
+            RasterSet mainRasterSet = new DefaultRasterSet(this, rasterQuery);
+            if (additionalBands != null) {
+                for (BandsFromStore bandsFromStore : additionalBands) {
+                    RasterStore store = bandsFromStore.getStore();
+                    RasterQuery subRasterQuery = store.createRasterQuery();
+                    if( rasterQuery!=null ) {
+                      subRasterQuery.setClip(rasterQuery.getClip());
+                      subRasterQuery.setScale(rasterQuery.getScale());
+                    }
+                    subRasterQuery.setPixelSize(mainRasterSet.getDimensions().getPixelSizeX());
+                    for (int i = 0; i < bandsFromStore.size(); i++) {
+                        BandQuery bandQuery = store.createBandQuery(bandsFromStore.get(i));
+                        subRasterQuery.addBand(bandQuery);
+                    }
+                    DefaultRasterSet subRasterSet = new DefaultRasterSet(store, subRasterQuery);
+                    if(subRasterSet.getColumns()!=mainRasterSet.getColumns() || subRasterSet.getRows()!=mainRasterSet.getRows()){
+                        Buffer subBuffer = subRasterSet.createInterpolated(mainRasterSet.getRows(), mainRasterSet.getColumns(), Buffer.INTERPOLATION_NearestNeighbour, null);
+                        for (Band band : subBuffer) {
+                            mainRasterSet.addBand(band);
+                        }
+                    } else {
+                        for (Band band : subRasterSet) {
+                            mainRasterSet.addBand(band);
+                        }
+                    }
+                    DisposeUtils.disposeQuietly(subRasterSet);
+                }
+            }
+            return mainRasterSet;
+        } catch (Exception e) {
+            throw new RasterQueryCloneException(e);
+        }
+    }
+
+    @Override
+    public RasterSet getRasterSet() throws DataException {
+        return getRasterSet(createRasterQuery());
+    }
+
+    /**
+     * Adds an observer to the DataSet
+     *
+     * @param observer
+     * @throws DataException
+     */
+    @Override
+    public void getRasterSet(Observer observer) throws DataException {
+        RasterSet set = this.getRasterSet();
+        set.addObserver(observer);
+    }
+
+    /**
+     * Adds an observer to the queried DataSet
+     *
+     * @param rasterQuery
+     * @param observer
+     * @throws DataException
+     */
+    @Override
+    public void getRasterSet(RasterQuery rasterQuery, Observer observer) throws DataException {
+        RasterSet set = this.getRasterSet(rasterQuery);
+        set.addObserver(observer);
+    }
+
+    @Override
+    public void accept(Visitor visitor) throws BaseException {
+        RasterSet set = getRasterSet();
+        try {
+            set.accept(visitor);
+        } finally {
+            set.dispose();
+        }
+    }
+
+    @Override
+    public void accept(Visitor visitor, DataQuery dataQuery) throws BaseException {
+        RasterSet set = getRasterSet((RasterQuery) dataQuery);
+        try {
+            set.accept(visitor);
+        } finally {
+            set.dispose();
+        }
+
+    }
+
+    @Override
+    public DataSet getSelection() throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void setSelection(DataSet selection) throws DataException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public DataSet createSelection() throws DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public UnmodifiableBasicMap<String,DataStore> getChildren() {
+        UnmodifiableBasicMap<String, DataStore> children = this.provider.getChildren();
+        if( children == null ) {
+            return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
+        }
+        return children;
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws DataException, ValidateDataParametersException {
+        return this.provider.getExplorer();
+    }
+
+    @Override
+    public DataQuery createQuery() {
+        return createRasterQuery();
+    }
+
+    @Override
+    public Interval getInterval() {
+        return this.provider.getInterval();
+    }
+
+    @Override
+    public Collection<?> getTimes() {
+        return this.provider.getTimes();
+    }
+
+    @Override
+    public Collection<?> getTimes(Interval interval) {
+        return this.provider.getTimes(interval);
+    }
+
+    @Override
+    public void disableNotifications() {
+        this.delegateObservable.disableNotifications();
+    }
+
+    @Override
+    public void enableNotifications() {
+        this.delegateObservable.enableNotifications();
+
+    }
+
+    @Override
+    public void beginComplexNotification() {
+        this.delegateObservable.beginComplexNotification();
+
+    }
+
+    @Override
+    public void endComplexNotification() {
+        this.delegateObservable.endComplexNotification();
+    }
+
+    @Override
+    public void addObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.addObserver(observer);
+        }
+    }
+
+    @Override
+    public void deleteObserver(Observer observer) {
+        if (delegateObservable != null) {
+            this.delegateObservable.deleteObserver(observer);
+        }
+
+    }
+
+    @Override
+    public void deleteObservers() {
+        this.delegateObservable.deleteObservers();
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+
+        state.set("dataStoreName", this.getName());
+        state.set("parameters", this.parameters);
+    }
+
+    @Override
+    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.intialize(this.dataManager, params);
+            this.setProvider(this.provider);
+
+        } catch (Exception e) {
+            throw new PersistenceException(e);
+        }
+
+    }
+
+    //
+    // ====================================================================
+    // Metadata related methods
+    //
+
+    @Override
+    public Set<?> getMetadataChildren() throws MetadataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Object getMetadataID() throws MetadataException {
+        return this.provider.getSourceId();
+    }
+
+    @Override
+    public String getMetadataName() throws MetadataException {
+        return this.provider.getProviderName();
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        return this.metadata.getDynClass();
+    }
+
+    @Override
+    public void implement(DynClass dynClass) {
+        this.metadata.implement(dynClass);
+    }
+
+    @Override
+    public void delegate(DynObject dynObject) {
+        this.metadata.delegate(dynObject);
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        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();
+        }
+        return this.metadata.getDynValue(name);
+    }
+
+    @Override
+    public void setDynValue(String name, Object value) throws DynFieldNotFoundException {
+
+        this.metadata.setDynValue(name, value);
+
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        return this.metadata.hasDynValue(name);
+    }
+
+    @Override
+    public Object invokeDynMethod(String name, Object[] args) throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, name, args);
+    }
+
+    @Override
+    public Object invokeDynMethod(int code, Object[] args) throws DynMethodException {
+        return this.metadata.invokeDynMethod(this, code, args);
+    }
+
+    @Override
+    public void clear() {
+        if (metadata != null) {
+            metadata.clear();
+        }
+    }
+
+    @Override
+    public RasterQuery createRasterQuery() {
+        return new DefaultRasterQuery();
+    }
+
+    @Override
+    public DataStore getStore() {
+        return this;
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        if (observable instanceof DataSet) {
+            this.notifyChange(RasterStoreNotification.DATASET_CHANGED);
+
+        } else {
+            if (observable instanceof RasterStoreProvider) {
+                if (observable == this.provider) {
+                    this.notifyChange(RasterStoreNotification.STORE_PROVIDER_CHANGED);
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+
+        LOGGER.debug("Dispose DefaultRasterStore '"+this.getFullName()+"'");
+
+        this.notifyChange(DataStoreNotification.BEFORE_DISPOSE);
+        DisposeUtils.dispose(this.provider);
+        this.provider = null;
+        this.parameters = null;
+        if(additionalBands!=null){
+          for (BandsFromStore bandsFromStore : additionalBands) {
+            DisposeUtils.dispose(bandsFromStore);
+          }
+            this.additionalBands = null;
+        }
+
+        this.notifyChange(DataStoreNotification.AFTER_DISPOSE);
+        if (delegateObservable != null) {
+            this.delegateObservable.deleteObservers();
+            this.delegateObservable = null;
+        }
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DataStoreParameters dsp = getParameters();
+
+        DefaultRasterStore cloned_store = null;
+
+        try {
+            cloned_store = (DefaultRasterStore) DALLocator.getDataManager().openStore(this.getProviderName(), dsp);
+            cloned_store.additionalBands = new ArrayList<>(additionalBands);
+        } catch (Exception e) {
+            throw new CloneException(e);
+        }
+        return cloned_store;
+
+    }
+
+    /**
+     * Notifies change
+     *
+     * @param notification
+     */
+    public void notifyChange(String notification) {
+        if (delegateObservable != null) {
+            notifyChange(new DefaultRasterStoreNotification(this, notification));
+        }
+
+    }
+
+    @Override
+    public void notifyChange(String notification, ResourceProvider data) {
+        notifyChange(new DefaultRasterStoreNotification(this, DataStoreNotification.RESOURCE_CHANGED));
+    }
+
+    /**
+     * Notifies change
+     *
+     * @param storeNotification
+     */
+    public void notifyChange(DefaultRasterStoreNotification storeNotification) {
+        try {
+            delegateObservable.notifyObservers(storeNotification);
+        } catch (Exception e) {
+            LOGGER.warn("Problems notifying changes in store '"+getName()+"'.", e);
+        }
+    }
+
+    /**
+     * Gets this provider
+     *
+     * @return RasterStoreProvider
+     */
+    @Override
+    public RasterStoreProvider getProvider() {
+        return this.provider;
+    }
+
+    @Override
+    public Envelope getEnvelope() throws DataException, LocatorException, CreateEnvelopeException {
+        return getDimensions().getEnvelope();
+    }
+
+    @Override
+    public List<BandDescriptor> getBandDescriptors() {
+        List<BandDescriptor> bands = new ArrayList<>();
+        for( int i=0; i<this.getBands(); i++ ) {
+            bands.add(this.getBandDescriptor(i));
+        }
+        return bands;
+    }
+
+    @Override
+    public BandDescriptor getBandDescriptor(int band) {
+        int bandsCounter = this.provider.getBands();
+        if(band<bandsCounter){
+            return this.provider.getBandDescriptor(band);
+        }
+
+        if(additionalBands!=null){
+            for (BandsFromStore bandsFromStore : additionalBands) {
+                if((band-bandsCounter)<bandsFromStore.bands.size()){
+                    return bandsFromStore.getBandDescriptor(band-bandsCounter);
+                }
+                bandsCounter+=bandsFromStore.size();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public BandQuery createBandQuery(int band) {
+        return new DefaultBandQuery(band, getBandDescriptor(band));
+    }
+
+    @Override
+    public int getBands() {
+        int bands = this.provider.getBands();
+        if(additionalBands!=null){
+            for (BandsFromStore bandsFromStore : additionalBands) {
+                bands+=bandsFromStore.size();
+            }
+        }
+        return bands;
+    }
+
+    @Override
+    public BandDescriptor createBandDescriptor(int band, List<BandAttributeDescriptor> attributes) {
+        return new DefaultBandDescriptor(this, band, attributes);
+    }
+
+    @Override
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name, String description,
+        List<Object> values, String units) {
+        return new DefaultBandAttributeDescriptor(band, name, description, values, units);
+    }
+
+    @Override
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name, Object value, String description,
+        List<Object> values, String units) {
+        return new DefaultBandAttributeDescriptor(band, name, value, description, values, units);
+    }
+
+    @Override
+    public BandAttributeDescriptor createBandAttributeDescriptor(int band, String name, String description,
+        List<Object> values) {
+        return new DefaultBandAttributeDescriptor(band, name, description, values);
+    }
+
+    @Override
+    public void notifyChange(String notification, Resource resource) {
+        notifyChange(new DefaultRasterStoreNotification(this, DataStoreNotification.RESOURCE_CHANGED));
+    }
+
+    @Override
+    public RasterStore getRasterStore() {
+        return this;
+    }
+
+    @Override
+    public void useCache(String providerName, DynObject parameters) throws DataException {
+
+        if (providerName == 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);
+        }
+
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        RasterStoreProviderFactory providerFactory =
+            (RasterStoreProviderFactory) manager.getStoreProviderFactory(providerName);
+
+        if (providerFactory == null) {
+            throw new ProviderNotRegisteredException(providerName);
+        }
+
+        RasterCacheStoreProvider cache =
+            (RasterCacheStoreProvider) providerFactory.createProvider((DataParameters) parameters, this);
+
+        RasterQuery rasterQuery = this.createRasterQuery();
+        cache.apply(provider,
+            (IProjection) this.getParameters().getDynValue(DataStore.METADATA_CRS), rasterQuery);
+        this.provider = cache;
+    }
+
+    @Override
+    public RasterCache getCache() {
+        if(this.provider instanceof RasterCache){
+            return (RasterCache) this.provider;
+        }
+        return null;
+    }
+
+    @Override
+    public void intialize(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;
+
+    }
+
+    @Override
+    public void setProvider(org.gvsig.fmap.dal.DataStoreProvider provider) {
+        if(this.provider != null){
+            throw new IllegalStateException("Provider already set.");
+        }
+        this.provider = (RasterStoreProvider) provider;
+        // FIXME: habr�a que hacer un bind del provider y a�adir un dispose en el openStore del DataManager
+//        DisposeUtils.bind(this.provider);
+        this.delegate(this.provider);
+    }
+
+    @Override
+    public void addBand(RasterStore store, int band) throws DataException {
+        if(store.equals(this)){
+            LOGGER.warn("Can't add bands that belong to this same store.");
+            throw new IllegalArgumentException("Can't add bands that belong to this same store.");
+        }
+
+        try {
+            if(!store.getEnvelope().equals(this.getEnvelope())){
+                LOGGER.warn("The envelopes are differents.");
+                throw new AddingBandsException(store.getName(), this.getName(), "The envelopes are differents.", null);
+            }
+        } catch (LocatorException | DataException | CreateEnvelopeException e) {
+            LOGGER.warn("Can't compare the envelopes.",e);
+            throw new AddingBandsException(store.getName(), this.getName(), "Can't compare the envelopes.", e);
+        }
+
+        if(!store.getParameters().getDynValue(METADATA_CRS).equals(this.getParameters().getDynValue(METADATA_CRS))){
+            throw new AddingBandsException(store.getName(), this.getName(), "The projections are differents.", null);
+        }
+
+        if(additionalBands==null){
+            this.additionalBands = new ArrayList<>();
+        }
+
+        boolean found = false;
+      for (BandsFromStore bandsFromStore : additionalBands) {
+        if(bandsFromStore.getStore().equals(store)){
+          found = true;
+          if(bandsFromStore.contains(band)){
+            LOGGER.warn("The band '"+band+"' of the store '"+store.getName()+"' is already added to the additional bands.");
+          } else {
+            bandsFromStore.add(band);
+          }
+          break;
+        }
+      }
+        if(!found){
+            BandsFromStore bandsFromStore = new BandsFromStore(store);
+            bandsFromStore.add(band);
+            this.additionalBands.add(bandsFromStore);
+        }
+    }
+
+    @Override
+    public void addBands(RasterStore store, List<Integer> bands) throws DataException {
+        if(store.equals(this)){
+            LOGGER.warn("Can't add bands that belong to this same store.");
+            throw new IllegalArgumentException("Can't add bands that belong to this same store.");
+        }
+
+        try {
+            if(!store.getEnvelope().equals(this.getEnvelope())){
+                LOGGER.warn("The envelopes are differents.");
+                throw new AddingBandsException(store.getName(), this.getName(), "The envelopes are differents.", null);
+            }
+        } catch (LocatorException | DataException | CreateEnvelopeException e) {
+            LOGGER.warn("Can't compare the envelopes.",e);
+            throw new AddingBandsException(store.getName(), this.getName(), "Can't compare the envelopes.", e);
+        }
+
+        if(!store.getParameters().getDynValue(METADATA_CRS).equals(this.getParameters().getDynValue(METADATA_CRS))){
+            throw new AddingBandsException(store.getName(), this.getName(), "The projections are differents.", null);
+        }
+
+        if(additionalBands==null){
+            this.additionalBands = new ArrayList<>();
+        }
+
+        boolean found = false;
+        for (BandsFromStore bandsFromStore : additionalBands) {
+            if(bandsFromStore.getStore().equals(store)){
+                found = true;
+              for (Integer band : bands) {
+                bandsFromStore.add(band);
+              }
+            }
+        }
+        if(!found){
+            BandsFromStore bandsFromStore = new BandsFromStore(store, bands);
+            this.additionalBands.add(bandsFromStore);
+        }
+    }
+
+    @Override
+    public void clearAdditionalBands() {
+        if (this.additionalBands != null) {
+            for (BandsFromStore bandsFromStore : additionalBands) {
+                DisposeUtils.dispose(bandsFromStore);
+            }
+        }
+        this.additionalBands = null;
+    }
+
+    @Override
+    public void removeBand(int band) {
+        if(band<getProvider().getBands()){
+            throw new IllegalArgumentException("Can't remove bands of main store.");
+        }
+        int bandCounter = getProvider().getBands();
+        int storeCounter = 0;
+        while(bandCounter < band){
+            BandsFromStore additionalStore = this.additionalBands.get(storeCounter);
+            if( (band-bandCounter) < additionalStore.size()){
+                additionalStore.remove(band-bandCounter);
+                if(additionalStore.size()==0){
+                    DisposeUtils.disposeQuietly(additionalStore);
+                    this.additionalBands.remove(additionalStore);
+                }
+                return;
+            }
+            bandCounter += additionalStore.size();
+        }
+    }
+
+    private static class BandsFromStore extends AbstractDisposable{
+        RasterStore store;
+        List<Integer> bands;
+
+        public BandsFromStore(RasterStore store){
+            this.store = store;
+            ToolsLocator.getDisposableManager().bind(store);
+            this.bands = new ArrayList<>();
+        }
+
+        public BandsFromStore(RasterStore store, List<Integer> bands){
+            this.store = store;
+            ToolsLocator.getDisposableManager().bind(store);
+            this.bands = bands;
+        }
+
+        /**
+         * Add the band to the list
+         *
+         * @param band
+         */
+        public void add(int band){
+            if(bands.contains(band)){
+                throw new IllegalArgumentException("The band "+band+" is already added.");
+            }
+            this.bands.add(band);
+        }
+
+        /**
+         * Remove the band from the list
+         * @param band
+         */
+        public void remove(int band){
+            if(!bands.contains(band)){
+                throw new IllegalArgumentException("The band "+band+" isn't previously added.");
+            }
+            this.bands.remove(band);
+        }
+
+        public boolean contains(int band){
+            return (bands.contains(band));
+        }
+
+        /**
+         * Return the band from the store in the index position
+         *
+         * @param index
+         * @return
+         */
+        public int get(int index){
+            return this.bands.get(index);
+        }
+
+        public RasterStore getStore() {
+            return store;
+        }
+
+        public int size() {
+            return bands.size();
+        }
+
+        /**
+         * Return the BandDescriptor of the band in the index position.
+         * @param index
+         * @return
+         */
+        public BandDescriptor getBandDescriptor(int index) {
+            return store.getBandDescriptor(bands.get(index));
+        }
+
+        @Override
+        protected void doDispose() throws BaseException {
+            DisposeUtils.disposeQuietly(store);
+
+        }
+
+    }
+
+    @Override
+    public boolean isOwnBand(int band) {
+        if(band < this.getProvider().getBands()){
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public DataStoreProviderFactory getProviderFactory() {
+        DataStoreProviderFactory factory = dataManager.getStoreProviderFactory(parameters.getDataStoreName());
+        return factory;
+    }
+
+    @Override
+    public BufferDimensions getDimensions() throws InitializeException {
+        return this.getProvider().getDimensions();
+    }
+
+    @Override
+    public boolean isTiled() {
+        return this.provider.isTiled();
+    }
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        return ((DynObject_v2)this.metadata).hasDynMethod(name);
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        final StoresRepository mainRepository = this.dataManager.getStoresRepository();
+        StoresRepository localRepository = this.provider.getStoresRepository();
+        if( localRepository==null ) {
+            return mainRepository;
+        }
+        StoresRepository repository = new BaseStoresRepository(this.getName());
+        repository.addRepository(localRepository);
+        repository.addRepository(mainRepository);
+        return repository;
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        ResourcesStorage resourcesStorage;
+        try {
+            resourcesStorage = this.provider.getResourcesStorage();
+            if( resourcesStorage!=null ) {
+                return resourcesStorage;
+            }
+        } catch(Throwable th) {
+            
+        }
+        try {
+            DataServerExplorer explorer = this.getExplorer();
+            if( explorer==null ) {
+                return null;
+            }
+            return this.getExplorer().getResourcesStorage(this);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't create resources storage",ex);
+            return null;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.raster.impl;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.tools.observer.BaseNotification;
+import org.gvsig.tools.undo.command.Command;
+
+public class DefaultCoverageStoreNotification 
+        extends BaseNotification
+        implements DataStoreNotification 
+  {
+
+	public DefaultCoverageStoreNotification(
+			DefaultCoverageStore defaultCoverageStore, String notification) {
+    super(notification, 2);
+    this.setValue(0, defaultCoverageStore);
+	}
+
+	public DefaultCoverageStoreNotification(
+			DefaultCoverageStore defaultCoverageStore, String notification,
+			Command command) {
+    this(defaultCoverageStore, notification);
+    this.setValue(1, command);
+	}
+
+  @Override
+	public DataStore getSource() {
+		return (DataStore) this.getValue(0);
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreOldFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreOldFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreOldFactory.java	(revision 46118)
@@ -0,0 +1,67 @@
+package org.gvsig.fmap.dal.raster.impl;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreFactory;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.impl.AbstractDataStoreFactory;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public class RasterStoreOldFactory extends AbstractDataStoreFactory {
+    private final DataStoreFactory oldfactory;
+
+    public static final String NAME = "RasterStore";
+    
+    public RasterStoreOldFactory(String name, Class storeFactoryClass) {
+        super(name,"");
+        try {
+            this.oldfactory = (DataStoreFactory) storeFactoryClass.newInstance();
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't create factory (for old rasters)", ex);
+        }
+    }
+    
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    @Override
+    public DataStore create(DynObject parameters, Services services) {
+        try {
+            DataStoreParameters params = (DataStoreParameters) parameters;
+            DataManager dataManager = (DataManager) services;
+            this.oldfactory.setParameters(params);
+            DataStoreInitializer store = (DataStoreInitializer) oldfactory.createStore();
+            store.intializePhase1(dataManager, params);
+            return (DataStore) store;
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public boolean canUse(DataParameters parameters) {
+        if( ! (parameters instanceof DataStoreParameters) ) {
+            return false;
+        }
+        
+        boolean use = ((DataStoreParameters)parameters).getDataStoreName().equalsIgnoreCase(this.getName());
+        return use;
+    }
+    
+    @Override
+    public void setProvider(DataStore store, DataStoreProvider provider) {
+        try {
+            ((DataStoreInitializer)store).intializePhase2((org.gvsig.fmap.dal.spi.DataStoreProvider) provider);
+        } catch (InitializeException ex) {
+            throw new RuntimeException("Can't set the provider of the store.", ex);
+        }
+    }
+               
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterLibrary.java	(revision 46118)
@@ -0,0 +1,83 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.ToolsLibrary;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.persistence.xml.XMLPersistenceLibrary;
+
+/**
+ * Raster Library to register components
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+@Deprecated
+public class RasterLibrary extends AbstractLibrary {
+
+  public RasterLibrary() {
+
+  }
+
+  @Override
+  public void doRegistration() {
+    registerAsServiceOf(DALLibrary.class);
+    require(XMLPersistenceLibrary.class);
+    require(ToolsLibrary.class);
+  }
+
+  @Override
+  protected void doInitialize() throws LibraryException {
+
+    //Register persistence definition
+    DefaultRasterQuery.registerPersistenceDefinition();
+    DefaultBandQuery.registerPersistenceDefinition();
+    DefaultBandDescriptor.registerPersitenceDefinition();
+    DefaultBandAttributeDescriptor.registerPersitenceDefinition();
+  }
+
+  @Override
+  protected void doPostInitialize() throws LibraryException {
+    List<MetadataException> exs = new ArrayList<>();
+    DefaultRasterStore.registerPersistenceDefinition();
+    try {
+      DefaultRasterStore.registerMetadataDefinition();
+    } catch (MetadataException e) {
+      exs.add(e);
+    }
+    DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+    manager.registerDefaultRasterStore(DefaultRasterStore.class);
+
+    if (exs.size() > 0) {
+      throw new LibraryException(this.getClass(), exs);
+    }
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/RasterStoreFactory.java	(revision 46118)
@@ -0,0 +1,53 @@
+package org.gvsig.fmap.dal.raster.impl;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.impl.AbstractDataStoreFactory;
+import org.gvsig.fmap.dal.impl.DefaultDataManager;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.spi.DataStoreInitializer2;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+
+public class RasterStoreFactory extends AbstractDataStoreFactory {
+    private final Class theStoreClass;
+
+    public static final String NAME = "RasterStore";
+    
+    public RasterStoreFactory(Class theStoreClass) {
+        super(NAME,"");
+        this.theStoreClass = theStoreClass;
+    }
+    
+    @Override
+    public DynObject createParameters() {
+        return null;
+    }
+
+    @Override
+    public DataStore create(DynObject parameters, Services services) {
+        try {
+            DataStoreInitializer2 store = (DataStoreInitializer2) this.theStoreClass.newInstance();
+            store.intialize(
+                    (DefaultDataManager)services,
+                    (DataStoreParameters)parameters
+            );
+            return store;
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public boolean canUse(DataParameters parameters) {
+        return parameters instanceof OpenRasterStoreParameters;
+    }
+
+    @Override
+    public void setProvider(DataStore store, DataStoreProvider provider) {
+        ((DataStoreInitializer2)store).setProvider(provider);
+    }
+        
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterKernel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterKernel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterKernel.java	(revision 46118)
@@ -0,0 +1,100 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.raster.RasterKernel;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+
+/**
+ * Implements RasterKernel
+ * @author dmartinezizquierdo
+ *
+ */
+public class DefaultRasterKernel implements RasterKernel{
+
+    Buffer buffer;
+    int row;
+    int column;
+
+    /**
+     * Creates the raster kernel with the raster buffer
+     * @param buffer
+     */
+    public DefaultRasterKernel(Buffer buffer){
+        this.buffer=buffer;
+    }
+
+    /**
+     * Row and Column from the raster
+     * @param row
+     * @param column
+     */
+    public void set(int row,int column){
+        this.row=row;
+        this.column=column;
+    }
+
+    @Override
+    public int getBandCount() {
+        return buffer.getBandCount();
+    }
+
+    @Override
+    public int getRow() {
+        return row;
+    }
+
+    @Override
+    public int getColumn() {
+        return column;
+    }
+
+    @Override
+    public Object[] getValue() {
+        Object[] value=new Object[getBandCount()];
+        for (int i=0; i<getBandCount(); i++){
+            value[i]=buffer.getBand(i).get(row, column);
+        }
+        return value;
+    }
+
+    @Override
+    public Object[][][] getValues() {
+        int maxRows=buffer.getRows();
+        int maxColumns=buffer.getColumns();
+        Object[][][] value=new Object[3][3][getBandCount()];
+        for (int i=-1; i<2;i++){
+            for (int j=-1; j<2;j++){
+                for (int b=0; b<getBandCount(); b++){
+                    Object obj = null;
+                    if ( row+i>=0 && row+i<=maxRows && column+j>=0 && column+j<=maxColumns){
+                        obj = buffer.getBand(b).get(row+i, column+j);
+                    }
+                    value[1+i][1+j][b]=obj;
+                }
+            }
+        }
+        return value;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandDescriptor.java	(revision 46118)
@@ -0,0 +1,228 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.spi.BandDescriptorServices;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProviderServices;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+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;
+
+/**
+ * Default implementation of {@link BandDescriptor}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultBandDescriptor extends AbstractDisposable implements BandDescriptorServices  {
+
+    private static final String PERSISTENCE_NAME = "BandDescriptor";
+    private static final String PERSISTENCE_DESCRIPTION = "";
+
+    private static final String BAND_FIELD_NAME = "band";
+    private static final String BAND_ATTRIBUTE_DESCRIPTORS_FIELD_NAME = "bandAttributeDescriptors";
+
+    private List<BandAttributeDescriptor> bandAttributeDescriptors;
+    private int band;
+    private RasterStore store;
+    private NoData noData;
+    private int dataType;
+    private String name;
+    private String description;
+
+    /**
+     *
+     * @param band
+     * @param attributeDescriptors
+     */
+    public DefaultBandDescriptor(RasterStore store, int band, List<BandAttributeDescriptor> attributeDescriptors) {
+        this.band = band;
+        this.bandAttributeDescriptors = attributeDescriptors;
+        this.noData = null;
+        this.store = store;
+        // No debemos incrementar las referencias al store para evitar referencias circulares
+        // no tiene sentido forzar que no se pueda hacer un dispose del store aqu�.
+//        ToolsLocator.getDisposableManager().bind(store);
+        this.name = String.valueOf(this.band);
+        this.description = "";
+    }
+
+    @Override
+    public int getBand() {
+        return this.band;
+    }
+
+    @Override
+    public BandAttributeDescriptor get(int index) {
+        if (index >= 0 && index < bandAttributeDescriptors.size()) {
+            return bandAttributeDescriptors.get(index);
+        }
+        return null;
+    }
+
+    @Override
+    public BandAttributeDescriptor get(String name) {
+        for (BandAttributeDescriptor bandAttributeDescriptor : bandAttributeDescriptors) {
+            if (bandAttributeDescriptor.getName().equals(name)) {
+                return bandAttributeDescriptor;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public int size() {
+        return bandAttributeDescriptors.size();
+    }
+
+    @Override
+    public Iterator<BandAttributeDescriptor> iterator() {
+        return bandAttributeDescriptors.iterator();
+    }
+
+    public static void registerPersitenceDefinition() {
+
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+
+        if (definition == null) {
+            definition =
+                persistenceManager.addDefinition(BandDescriptor.class, PERSISTENCE_NAME,
+                    PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldInt(BAND_FIELD_NAME);
+            definition.addDynFieldList(BAND_ATTRIBUTE_DESCRIPTORS_FIELD_NAME).setClassOfItems(
+                BandAttributeDescriptor.class);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(BAND_FIELD_NAME, this.getBand());
+        state.set(BAND_ATTRIBUTE_DESCRIPTORS_FIELD_NAME, this.bandAttributeDescriptors);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.band = state.getInt(BAND_FIELD_NAME);
+        this.bandAttributeDescriptors =
+            new ArrayList<BandAttributeDescriptor>(
+                state.getList(BAND_ATTRIBUTE_DESCRIPTORS_FIELD_NAME));
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+
+        DefaultBandDescriptor newBandDescriptor = (DefaultBandDescriptor) super.clone();
+
+        newBandDescriptor.bandAttributeDescriptors =
+            new ArrayList<BandAttributeDescriptor>();
+
+        for (BandAttributeDescriptor bandAttributeDescriptor : this.bandAttributeDescriptors) {
+            newBandDescriptor.bandAttributeDescriptors.add((BandAttributeDescriptor) bandAttributeDescriptor.clone());
+        }
+
+        return newBandDescriptor;
+    }
+
+    @Override
+    public RasterStore getStore() {
+        return this.store;
+    }
+
+    @Override
+    public NoData getNoData() {
+        return this.noData;
+    }
+
+    @Override
+    public void setNoData(NoData noData) {
+        this.noData = noData;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        // �Si no tiene sentido hacer un bind en el constructor, lo tiene hacer un dispose aqu�?
+        // Ver comentario en el constructor
+//        DisposeUtils.disposeQuietly(this.store);
+        this.store = null;
+        this.bandAttributeDescriptors = null;
+        this.noData = null;
+    }
+
+    @Override
+    public BandAttributeDescriptor add(BandAttributeDescriptor bandAttributeDescriptor) {
+        this.bandAttributeDescriptors.add(bandAttributeDescriptor);
+        return bandAttributeDescriptor;
+    }
+
+    @Override
+    public BandAttributeDescriptor add(String name, Object value) {
+        BandAttributeDescriptor x = ((RasterStoreProviderServices)this.store).createBandAttributeDescriptor(band, name, value, null, null, null);
+        return x;
+    }
+
+    @Override
+    public int getDataType() {
+        return this.dataType;
+    }
+
+    @Override
+    public void setDataType(int dataType) {
+        this.dataType = dataType;
+
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStoreNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStoreNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterStoreNotification.java	(revision 46118)
@@ -0,0 +1,53 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.raster.RasterStoreNotification;
+import org.gvsig.tools.observer.BaseNotification;
+
+/**
+ * Implements RasterNofication
+ * @author dmartinezizquierdo
+ *
+ */
+public class DefaultRasterStoreNotification 
+        extends BaseNotification
+        implements RasterStoreNotification 
+  {
+
+    /**
+     * @param source
+     * @param type
+     */
+    public DefaultRasterStoreNotification(DataStore source, String type) {
+        super(type, 1);
+        this.setValue(0, source);
+    }
+
+    @Override
+    public DataStore getSource() {
+        return (DataStore) this.getValue(0);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterQuery.java	(revision 46118)
@@ -0,0 +1,188 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.geom.primitive.Envelope;
+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;
+
+/**
+ * Implements RasterQuery
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class DefaultRasterQuery implements RasterQuery {
+
+    private static final String PERSISTENCE_NAME = "RasterQuery";
+    private static final String PERSISTENCE_DESCRIPTION = "";
+
+    private static final String SCALE_FIELD_NAME = "scale";
+    private static final String PARAMETERS_FIELD_NAME = "queryParameters";
+    private static final String BAND_QUERIES_FIELD_NAME = "bandQueries";
+    private static final String CLIP_FIELD_NAME = "clip";
+    private static final String PIXEL_SIZE_NAME = "pixelSize";
+
+    private double scale;
+    private Map<String, Object> queryParameters;
+    private List<BandQuery> bandQueries;
+    private Envelope clip;
+    private double pixelSize;
+
+    /**
+     * @param store
+     *
+     */
+    public DefaultRasterQuery() {
+        this.queryParameters = new HashMap<String, Object>();
+        this.bandQueries = new ArrayList<BandQuery>();
+    }
+
+    @Override
+    public List<BandQuery> getBands() {
+        return Collections.unmodifiableList(this.bandQueries);
+    }
+
+    @Override
+    public void addBand(BandQuery query) {
+        this.bandQueries.add(query);
+    }
+
+    @Override
+    public void clearBands() {
+        this.bandQueries.clear();
+    }
+
+    @Override
+    public void setScale(double scale) {
+        this.scale = scale;
+
+    }
+
+    @Override
+    public double getScale() {
+        return scale;
+    }
+
+    @Override
+    public Object getQueryParameter(String name) {
+        return queryParameters.get(name);
+    }
+
+    @Override
+    public void setQueryParameter(String name, Object value) {
+        queryParameters.put(name, value);
+    }
+
+    @Override
+    public Envelope getClip() {
+        return clip;
+    }
+
+    @Override
+    public RasterQuery setClip(Envelope clip) {
+        this.clip = clip;
+        return this;
+    }
+
+    @Override
+    public double getPixelSize() {
+        return pixelSize;
+    }
+
+    @Override
+    public RasterQuery setPixelSize(double pixelSize) {
+        this.pixelSize = pixelSize;
+        return this;
+    }
+
+    public static void registerPersistenceDefinition() {
+
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+        if (definition == null) {
+
+            definition =
+                persistenceManager.addDefinition(RasterQuery.class, PERSISTENCE_NAME,
+                    PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldDouble(SCALE_FIELD_NAME);
+            definition.addDynFieldMap(PARAMETERS_FIELD_NAME);
+            definition.addDynFieldList(BAND_QUERIES_FIELD_NAME).setClassOfItems(BandQuery.class);
+            definition.addDynFieldObject(CLIP_FIELD_NAME).setClassOfValue(Envelope.class);
+            definition.addDynFieldDouble(PIXEL_SIZE_NAME);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("scale", this.scale);
+        state.set("queryParameters", this.queryParameters);
+        state.set("bands", this.bandQueries);
+        state.set("clip", this.clip);
+        state.set("pixelSize", this.pixelSize);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.queryParameters =
+            new HashMap<String, Object>((Map<String, Object>) state.get("queryParameters"));
+        this.scale = state.getDouble("scale");
+        this.bandQueries = new ArrayList<BandQuery>((List<BandQuery>) state.get("bands"));
+        this.clip = (Envelope) state.get("clip");
+        this.pixelSize = state.getDouble("pixelSize");
+
+    }
+
+    @Override
+    public RasterQuery clone() throws CloneNotSupportedException {
+        RasterQuery rq = new DefaultRasterQuery();
+
+        for (BandQuery bandQuery : this.getBands()) {
+            rq.addBand((BandQuery) bandQuery.clone());
+        }
+        if(this.getClip()!=null){
+            rq.setClip((Envelope) this.getClip().clone());
+        }
+        Set<Entry<String, Object>> entries = queryParameters.entrySet();
+        for (Entry<String, Object> entry : entries) {
+            rq.setQueryParameter(entry.getKey(), entry.getValue());
+        }
+        rq.setScale(scale);
+        rq.setPixelSize(pixelSize);
+
+        return rq;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandAttributeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandAttributeDescriptor.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandAttributeDescriptor.java	(revision 46118)
@@ -0,0 +1,187 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+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.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+
+/**
+ * Default implementation of {@link BandAttributeDescriptor}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultBandAttributeDescriptor implements BandAttributeDescriptor {
+
+    private static final String PERSISTENCE_NAME = "BandAttributeDescriptor";
+    private static final String PERSISTENCE_DESCRIPTION = "";
+
+    private static final String BAND_FIELD_NAME = "band";
+    private static final String NAME_FIELD_NAME = "name";
+    private static final String DESCRIPTION_FIELD_NAME = "description";
+    private static final String VALUES_FIELD_NAME = "values";
+    private static final String UNITS_FIELD_NAME = "units";
+
+    private int band;
+    private String name;
+    private String description;
+    private List<Object> values;
+    private String units;
+    private Object value;
+
+    /**
+     *
+     * @param band
+     * @param name
+     * @param description
+     * @param values
+     */
+    public DefaultBandAttributeDescriptor(int band, String name, String description,
+        List<Object> values) {
+        super();
+        this.band = band;
+        this.name = name;
+        this.values = values;
+        this.description = description;
+        this.units = "";
+        this.value = null;
+    }
+
+    /**
+    *
+    * @param band
+    * @param name
+    * @param description
+    * @param values
+     * @param units
+    */
+   public DefaultBandAttributeDescriptor(int band, String name, String description,
+       List<Object> values, String units) {
+       this(band, name, description, values);
+       this.units = units;
+   }
+
+   /**
+   *
+   * @param band
+   * @param name
+   * @param description
+   * @param values
+    * @param units
+   */
+  public DefaultBandAttributeDescriptor(int band, String name, Object value, String description,
+      List<Object> values, String units) {
+      this(band, name, description, values, units);
+      this.value = value;
+  }
+
+    @Override
+    public int getBand() {
+        return this.band;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public List<Object> getAvailableValues() {
+        return Collections.unmodifiableList(this.values);
+    }
+
+    public static void registerPersitenceDefinition() {
+
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+        if (definition == null) {
+
+            definition =
+                persistenceManager.addDefinition(BandAttributeDescriptor.class, PERSISTENCE_NAME,
+                    PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldInt(BAND_FIELD_NAME);
+            definition.addDynFieldString(NAME_FIELD_NAME);
+            definition.addDynFieldString(DESCRIPTION_FIELD_NAME);
+            definition.addDynFieldList(VALUES_FIELD_NAME).setClassOfItems(Object.class);
+            definition.addDynFieldString(UNITS_FIELD_NAME);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(BAND_FIELD_NAME, this.getBand());
+        state.set(NAME_FIELD_NAME, this.getName());
+        state.set(DESCRIPTION_FIELD_NAME, this.getDescription());
+        state.set(VALUES_FIELD_NAME, this.getAvailableValues());
+        state.set(UNITS_FIELD_NAME, this.getUnits());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.band = state.getInt(BAND_FIELD_NAME);
+        this.name = state.getString(NAME_FIELD_NAME);
+        this.description = state.getString(DESCRIPTION_FIELD_NAME);
+        this.values = new ArrayList<Object>(state.getList(VALUES_FIELD_NAME));
+        this.units = state.getString(UNITS_FIELD_NAME);
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultBandAttributeDescriptor newDescriptor = (DefaultBandAttributeDescriptor) this.clone();
+        newDescriptor.values = new ArrayList<Object>();
+        for (Object object : values) {
+            if( object instanceof Cloneable){
+                newDescriptor.values.add(((Cloneable) object).clone());
+            } else {
+                newDescriptor.values.add(object);
+            }
+        }
+        return newDescriptor;
+    }
+
+    @Override
+    public String getUnits() {
+        return this.units;
+    }
+
+    @Override
+    public Object getValue() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.raster.impl;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.gvsig.fmap.dal.DataCache;
+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.DataStoreProviderFactory;
+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.AbstractDataStore;
+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.tools.ToolsLocator;
+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.DynObject_v2;
+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.util.UnmodifiableBasicMap;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * @author jmvivo
+ *
+ */
+public class DefaultCoverageStore extends AbstractDataStore implements
+		CoverageStore, CoverageStoreProviderServices, DataStoreInitializer {
+
+	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() {
+
+	}
+
+        @Override
+        protected DataManager getDataManager() {
+            return this.dataManager;
+        }
+        
+        /*
+	 * (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((DynObject) 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#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);
+	}
+
+    @Override
+    public boolean hasDynMethod(String name) {
+        return ((DynObject_v2)this.metadata).hasDynMethod(name);
+    }
+
+	public void implement(DynClass dynClass) {
+		this.metadata.implement(dynClass);
+	}
+
+	public Object invokeDynMethod(String name, Object[] args)
+			throws DynMethodException {
+		return this.metadata.invokeDynMethod(this, name, args);
+	}
+
+	public Object invokeDynMethod(int code, Object[] args)
+			throws DynMethodException {
+		return this.metadata.invokeDynMethod(this, code, args);
+	}
+
+	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;
+    }
+
+    @Override
+    public void useCache(String providerName, DynObject parameters) throws DataException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public DataStoreProviderFactory getProviderFactory() {
+        DataStoreProviderFactory factory = dataManager.getStoreProviderFactory(parameters.getDataStoreName());
+        return factory;
+    }
+
+    @Override
+    public DataCache getCache() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandQuery.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandQuery.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultBandQuery.java	(revision 46118)
@@ -0,0 +1,131 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.HashMap;
+import java.util.Map;
+
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.BandQuery;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+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;
+
+/**
+ * Default implementation of {@link BandQuery}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultBandQuery implements BandQuery {
+
+    private static final String PERSISTENCE_NAME = "BandQuery";
+    private static final String PERSISTENCE_DESCRIPTION = "";
+
+    private static final String BAND_FIELD_NAME = "band";
+    private static final String BAND_DESCRIPTOR_FIELD_NAME = "bandDescriptor";
+    private static final String VALUES_FIELD_NAME = "values";
+
+    private int band;
+    private BandDescriptor bandDescriptor;
+    private Map<String, Object> values;
+
+    /**
+     * Empty constructor
+     */
+    public DefaultBandQuery() {
+
+    }
+
+    /**
+     * Default constructor
+     *
+     * @param band
+     *            Band of this BandQuery
+     * @param bandDescriptor
+     *            Descriptor of band
+     */
+    public DefaultBandQuery(int band, BandDescriptor bandDescriptor) {
+        super();
+        this.band = band;
+        this.bandDescriptor = bandDescriptor;
+        this.values = new HashMap<String, Object>();
+    }
+
+    @Override
+    public int getBand() {
+        return this.band;
+    }
+
+    @Override
+    public BandDescriptor getDescriptor() {
+        return this.bandDescriptor;
+    }
+
+    @Override
+    public void setValue(String name, Object value) {
+        // TODO Validate name and value
+        this.values.put(name, value);
+    }
+
+    @Override
+    public Object getValue(String name) {
+        return this.values.get(name);
+    }
+
+    public static void registerPersistenceDefinition(){
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+        if(definition == null){
+
+            definition = persistenceManager.addDefinition(BandQuery.class, PERSISTENCE_NAME,
+                PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldInt(BAND_FIELD_NAME);
+            definition.addDynFieldObject(BAND_DESCRIPTOR_FIELD_NAME).setClassOfValue(BandDescriptor.class);
+            definition.addDynFieldMap(VALUES_FIELD_NAME);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(BAND_FIELD_NAME, this.getBand());
+        state.set(BAND_DESCRIPTOR_FIELD_NAME, this.getDescriptor());
+        state.set(VALUES_FIELD_NAME, this.values);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.band = state.getInt(BAND_FIELD_NAME);
+        this.bandDescriptor = (BandDescriptor) state.get(BAND_DESCRIPTOR_FIELD_NAME);
+        this.values = new HashMap<String, Object>(state.getMap(VALUES_FIELD_NAME));
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return new DefaultBandQuery(this.band, (BandDescriptor) this.getDescriptor().clone());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToCoverageProviderFactoryWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToCoverageProviderFactoryWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToCoverageProviderFactoryWrapper.java	(revision 46118)
@@ -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.fmap.dal.impl;
+
+import org.gvsig.fmap.dal.ExternalStoreProviderFactory;
+import java.lang.reflect.Constructor;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.service.spi.Services;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DataStoreProviderToCoverageProviderFactoryWrapper extends
+        AbstractDataStoreProviderFactory implements ExternalStoreProviderFactory {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataStoreProviderToCoverageProviderFactoryWrapper.class);
+
+    private Class providerClass = null;
+    private Class parametersClass = null;
+
+    public DataStoreProviderToCoverageProviderFactoryWrapper(String name, String description,
+            Class provider, Class parametersClass) {
+        super(name, description);
+        this.providerClass = provider;
+        this.parametersClass = parametersClass;
+        LOGGER.warn("Creating wrapper for old style CoverageProvider (" + providerClass.getName() + ").");
+    }
+
+    @Override
+    public DataFactoryUnit create(DynObject parameters, Services providerServices) {
+        try {
+            return this.createProvider(
+                    (DataParameters) parameters,
+                    (DataStoreProviderServices) providerServices
+            );
+        } catch (InitializeException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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 (Constructor constr : constrs) {
+            Class[] paramTypes = constr.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 constr;
+                }
+            }
+        }
+        StringBuilder strb = new StringBuilder();
+        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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToCoverageProviderFactoryWrapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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(null);
+	}
+
+	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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/RegisterImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/RegisterImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/RegisterImpl.java	(revision 46118)
@@ -0,0 +1,126 @@
+package org.gvsig.fmap.dal.impl;
+
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataFactoryUnit;
+import org.gvsig.fmap.dal.Register;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.service.spi.Services;
+
+public class RegisterImpl implements Register {
+
+    private class FactoriesIterator implements Iterator<DataFactory> {
+
+        private final Iterator<ExtensionPoint.Extension> factories;
+                
+        public FactoriesIterator(Iterator<ExtensionPoint.Extension> factories) {
+            this.factories = factories;
+        }
+        
+        @Override
+        public boolean hasNext() {
+            return this.factories.hasNext();
+        }
+
+        @Override
+        public DataFactory next() {
+            try {
+                ExtensionPoint.Extension x = this.factories.next();
+                return (DataFactory) x.create();
+            } catch (Exception ex) {
+                throw new RuntimeException("Can't retrive next factory.", ex);
+            }
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        }
+        
+    }
+    
+    private final String name;
+    private final String description;
+
+    public RegisterImpl(
+            String name,
+            String description
+        ) {
+        this.name = name;
+        this.description = description;
+        ToolsLocator.getExtensionPointManager().add(
+            this.name, 
+            this.description
+        );
+    }
+    
+    private ExtensionPoint getFactories() {
+        ExtensionPoint factories = ToolsLocator.getExtensionPointManager().get(
+            this.name
+        );
+        return factories;
+    }
+    
+    @Override
+    public void register(DataFactory factory) {
+        ExtensionPoint factories = this.getFactories();
+        factories.append(
+                factory.getName(), 
+                factory.getDescription(), 
+                factory
+        );        
+    }
+    
+    @Override
+    public DataFactory getFactory(String name) {
+        try {
+        ExtensionPoint factories = this.getFactories();
+            DataFactory factory = (DataFactory) factories.create(name);
+            return factory;
+        } catch (Exception ex) {
+            return null;
+        }        
+    }
+      
+    @Override
+    public DataFactoryUnit create(
+            String name, 
+            DataParameters parameters,
+            Services services
+        ) throws ProviderNotRegisteredException, InitializeException {
+        DataFactory factory = this.getFactory(name);
+        if( factory == null ) {
+            throw new ProviderNotRegisteredException(name);
+        }
+        DataFactoryUnit unit = factory.create(
+                parameters, services
+        );
+        return unit;
+    }
+    
+    @Override
+    public boolean exits(String name) {
+        ExtensionPoint factories = this.getFactories();
+        return factories.has(name);
+    }
+    
+    @Override
+    public List<String> getFactoryNames() {
+        ExtensionPoint factories = this.getFactories();
+        List<String> names = factories.getNames();
+        return names;
+    }
+
+    @Override
+    public Iterator<DataFactory> iterator() {
+        ExtensionPoint factories = this.getFactories();
+        return new FactoriesIterator(factories.iterator());
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataServerExplorerToDataExplorerFactoryWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataServerExplorerToDataExplorerFactoryWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataServerExplorerToDataExplorerFactoryWrapper.java	(revision 46118)
@@ -0,0 +1,60 @@
+package org.gvsig.fmap.dal.impl;
+
+import org.apache.commons.lang3.reflect.ConstructorUtils;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorerFactory;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DataServerExplorerToDataExplorerFactoryWrapper extends AbstractDataServerExplorerFactory {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataServerExplorerToDataExplorerFactoryWrapper.class);
+
+    private final Class explorerClass;
+    private final Class parametersClass;
+
+    public DataServerExplorerToDataExplorerFactoryWrapper(
+            String name,
+            String description,
+            Class explorerClass,
+            Class parametersClass
+    ) {
+        super(name, description);
+        this.explorerClass = explorerClass;
+        this.parametersClass = parametersClass;
+        LOGGER.warn("Creating wrapper for old style DataServerExplorer (" + explorerClass.getName() + ").");
+
+    }
+
+    @Override
+    public DataServerExplorer create(DataServerExplorerParameters parameters, DataServerExplorerProviderServices providerServices) throws InitializeException {
+        try {
+            DataServerExplorer explorer = (DataServerExplorer) ConstructorUtils.invokeConstructor(
+                    explorerClass, parameters, providerServices
+            );
+            return explorer;
+        } catch (Exception ex) {
+            throw new InitializeException(ex);
+        }
+    }
+
+    @Override
+    public DynObject createParameters() {
+        try {
+            return (DynObject) parametersClass.newInstance();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public boolean isStoreSupported(String name) {
+        return false;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,1503 @@
+package org.gvsig.fmap.dal.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+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.Objects;
+import java.util.Set;
+import java.util.UUID;
+import java.util.function.Predicate;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.impl.DefaultDALExpressionBuilder;
+import org.gvsig.expressionevaluator.impl.DefaultFeatureRuleExpression;
+import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl;
+import org.gvsig.fmap.dal.BaseStoresRepository;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataFactory;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerFactory;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreFactory_v2_4;
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTransaction;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager.DatabaseWorkspaceListener;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.OpenErrorHandler;
+import org.gvsig.fmap.dal.Register;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.exception.CreateFileStoreException;
+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.ValidateDataParametersException;
+import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.DataProfile;
+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.FeatureRuleExpression;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureSet.DisposableFeatureSetIterable;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import static org.gvsig.fmap.dal.feature.ForeingKey.MAX_AVAILABLE_VALUES;
+import org.gvsig.fmap.dal.feature.exception.UnsupportedDataTypeException;
+import org.gvsig.fmap.dal.feature.impl.DALFile;
+import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureAttributeDescriptor;
+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.impl.FeatureStoreFactory;
+import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
+import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
+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.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory;
+import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
+import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerPoolImpl;
+import org.gvsig.fmap.dal.spi.DataStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import static org.gvsig.fmap.dal.spi.DataStoreProviderServices.PROVIDER_PARAMTER_NAME;
+import org.gvsig.fmap.dal.store.memory.MemoryStoreParameters;
+import org.gvsig.fmap.dal.store.memory.MemoryStoreProvider;
+import org.gvsig.json.Json;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.DynStruct_v2;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.script.Script;
+import org.gvsig.tools.script.ScriptManager;
+import org.gvsig.tools.service.spi.Services;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.util.Factory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultDataManager
+        implements DataManager, DataManagerProviderServices, Services {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDataManager.class);
+    
+    final static private String DATA_MANAGER_CACHE = "Data.manager.caches";
+    final static private String DATA_MANAGER_CACHE_DESCRIPTION =
+        "DAL cache providers";
+
+    public static final String FILESYSTEM_EXPLORER_NAME = "FilesystemExplorer";
+    
+    public static final long DEFAULT_MAX_SIZE_FOR_SMALL_FEATURE_SELECTION = 2000000000;
+
+    private class Registers {
+
+        private final Register store;
+        private final Register storeProvider;
+        private final Register serverExplorer;
+        private final Register featureIndexProvider;
+
+        public Registers() {
+            this.store = new RegisterImpl(
+                    "Data.manager.stores.factory",
+                    "DAL store factories"
+            );
+            this.storeProvider = new RegisterImpl(
+                    "Data.manager.providers.factory",
+                    "DAL store provider factories"
+            );
+            this.serverExplorer = new RegisterImpl(
+                    "Data.manager.servereexplorer.factory",
+                    "DAL server explorer factories"
+            );
+            this.featureIndexProvider = new RegisterImpl(
+                    "Data.manager.feature.index.factory",
+                    "DAL feature index factories"
+            );
+
+            this.store.register(new FeatureStoreFactory());
+        }
+    }
+    private static final String TAG_DAL_OPENSTORE = "dal.openstore.";
+
+    private final Registers registers;
+
+    private final Map<Integer, String> defaultDataIndexProviders;
+
+    private OpenErrorHandler openErrorHandler = null;
+
+    private DataServerExplorerPool dataServerExplorerPool = null;
+
+    private List<DataType> dataTypes = null;
+
+    private ClassLoader resourcesLoader = null;
+
+    private List<DataProfile> dataProfiles;
+    
+    private final Map<String, DatabaseWorkspaceManager> databaseWorkspaces = new HashMap<>();
+ 
+    private final Map<String,DatabaseWorkspaceListener> addDatabaseWorkspaceListeners = new HashMap<>();
+
+    private final Set<Observer>storeObservers = new HashSet<>();
+    
+    private long maxSizeForSmallFeatureSelection;
+
+    private Factory largeMapFactory;
+    private Factory largeSetFactory;
+    
+    public DefaultDataManager() {
+        this.registers = new Registers();
+        this.defaultDataIndexProviders = new HashMap<>();
+        this.maxSizeForSmallFeatureSelection = DEFAULT_MAX_SIZE_FOR_SMALL_FEATURE_SELECTION;
+        this.largeMapFactory = new Factory() {
+            @Override
+            public String getName() {
+                return "HashMapFactory";
+            }
+
+            @Override
+            public Object create(Object... parameters) {
+                return new HashMap();
+            }
+        };
+        this.largeSetFactory = new Factory() {
+            @Override
+            public String getName() {
+                return "HashSetFactory";
+            }
+
+            @Override
+            public Object create(Object... parameters) {
+                return new HashSet();
+            }
+        };
+    }
+
+    @Override
+    public Register getStoreRegister() {
+        return this.registers.store;
+    }
+
+    @Override
+    public Register getStoreProviderRegister() {
+        return this.registers.storeProvider;
+    }
+
+    @Override
+    public Register getServerExplorerRegister() {
+        return this.registers.serverExplorer;
+    }
+
+    @Override
+    public Register getFeatureIndexRegister() {
+        return this.registers.featureIndexProvider;
+    }
+
+    private String getStoreName(DataStoreParameters parameters) {
+        for (DataFactory factory : this.getStoreRegister()) {
+            DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) factory;
+            if (storeFactory.canUse(parameters)) {
+                return storeFactory.getName();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @deprecated
+     */
+    @Override
+    public void registerDefaultRasterStore(Class rasterStoreClass) {
+        // Metodo usado por el raster nuevo para regstrar su factoria de store
+        this.getStoreRegister().register(new RasterStoreFactory(rasterStoreClass));
+    }
+
+    
+    private boolean oldRasterRegistered = false;
+    /**
+     * @deprecated
+     */
+    @Override
+    public void registerStoreFactory(String name, Class storeFactoryClass) {
+        // Metodo usado por el raster viejo para registrar las factorias de sus stores
+        this.getStoreRegister().register(new RasterStoreOldFactory(name, storeFactoryClass));
+        this.oldRasterRegistered = true;
+    }
+
+    @Override
+    public boolean isTheOldRasterRegistered() {
+      return this.oldRasterRegistered;
+    }
+    
+    /**
+     * @param name
+     * @param storeProviderClass
+     * @param parametersClass
+     * @deprecated use registerStoreProviderFactory
+     */
+    @Override
+    public void registerStoreProvider(String name, Class storeProviderClass,
+            Class parametersClass) {
+        if (name == null || storeProviderClass == null || parametersClass == null) {
+            throw new IllegalArgumentException("Any parameters can be null");
+        }
+
+        if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) {
+            throw new IllegalArgumentException(parametersClass.getName()
+                    + " must implement org.gvsig.fmap.dal.DataStoreParameters");
+        }
+
+        if (CoverageStoreProvider.class.isAssignableFrom(storeProviderClass)) {
+            // Envuelve al proveedor en una factoria por defecto.
+            this.registerStoreProviderFactory(new DataStoreProviderToCoverageProviderFactoryWrapper(
+                    name, "", storeProviderClass, 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());
+
+    }
+
+    @Override
+    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");
+        }
+
+        // Envuelve al proveedor en una factoria por defecto.
+        this.registerServerExplorerFactory(
+                new DataServerExplorerToDataExplorerFactoryWrapper(
+                        name, "", explorerClass, parametersClass
+                )
+        );
+
+    }
+
+    @Override
+    public void registerStoreFactory(DataStoreFactory_v2_4 factory) {
+        this.getStoreRegister().register(factory);
+    }
+
+    @Override
+    public void registerStoreProviderFactory(DataStoreProviderFactory factory) {
+        this.getStoreProviderRegister().register(factory);
+    }
+
+    @Override
+    public void registerServerExplorerFactory(DataServerExplorerFactory factory) {
+        this.getServerExplorerRegister().register(factory);
+    }
+
+    @Override
+    public DataStoreParameters createStoreParameters(byte[] data) {
+        DataStoreParameters parameters = (DataStoreParameters) AbstractDataParameters.fromByteArray(data);
+        return parameters;
+    }
+
+    public DataStoreParameters createStoreParameters(String providerName) throws InitializeException, ProviderNotRegisteredException {
+      // Cuando desde python se llama a createStoreParameters con solo un argumento 
+      // acaba entrando por aqui en lugar de por
+      //   createStoreParameters(String providerName, Object... arguments)
+      return this.createStoreParameters(providerName, (Object[]) null);
+    }
+
+    @Override
+    public DataStoreParameters createStoreParameters(String providerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException {
+        if( providerName == null ) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        if( arguments!=null && arguments.length>0 ) {
+          if( arguments.length == 1 ) { 
+              // Desde jython entra por este metodo en lugar de los especificos
+              // de DataStoreParameters o DynObject
+              if( arguments[0] instanceof DataStoreParameters ) {
+                  return this.createStoreParameters(providerName, (DataStoreParameters)(arguments[0]));
+              } else if( arguments[0] instanceof DynObject ) {
+                  return this.createStoreParameters(providerName, (DynObject)(arguments[0]));
+              }
+          }
+          if( (arguments.length % 2)!= 0 ) {
+              throw new IllegalArgumentException("The number of arguments must be even.");
+          }
+        }
+        if( providerName == null ) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
+        if( providerFactory == null ) {
+            String msg = "Can't locate provider factory for '"+providerName+"'.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataStoreParameters parameters = (DataStoreParameters) providerFactory.createParameters();
+        if( arguments!=null && arguments.length>0 ) {
+          for( int i=0; i<arguments.length; i+=2 ) {
+              String name = (String) arguments[i];
+              if( name.endsWith("=") ) {
+                  name = name.substring(0, name.length()-1);
+              }
+              Object value = arguments[i+1];
+              parameters.setDynValue(name, value);
+          }
+        }
+        return parameters;
+    }
+
+    @Override
+    public NewDataStoreParameters createNewStoreParameters(String providerName) throws InitializeException, ProviderNotRegisteredException {
+        String explorerName = this.getServerExplorerFromStore(providerName);
+        return createNewStoreParameters(explorerName, providerName);
+    }
+
+    @Override
+    public NewDataStoreParameters createNewStoreParameters(String explorerName, String providerName) throws InitializeException, ProviderNotRegisteredException {
+        try {
+            DataServerExplorer explorer = this.openServerExplorer(explorerName, (DataServerExplorerParameters)null);
+            return explorer.getAddParameters(providerName);
+        } catch (Exception ex) {
+            throw new InitializeException(ex);
+        }
+    }
+
+    @Override
+    public DataServerExplorerParameters createServerExplorerParameters(String explorerName) throws InitializeException, ProviderNotRegisteredException {
+        if( explorerName == null ) {
+            String msg = "Explorer name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        JsonObject parameters_json = null;
+        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
+        if( explorerFactory == null ) {           
+            parameters_json = Json.createObject(explorerName);
+            if( parameters_json==null || 
+                    !parameters_json.containsKey(PROVIDER_PARAMTER_NAME) ) {
+                String msg = "Can't locate server explorer factory for '"+explorerName+"'.";
+                LOGGER.warn(msg);
+                throw new IllegalArgumentException(msg);
+            }
+            explorerName = parameters_json.getString(PROVIDER_PARAMTER_NAME);
+            explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
+            if( explorerFactory == null ) {           
+                String msg = "Can't locate server explorer factory for '"+explorerName+"'.";
+                LOGGER.warn(msg);
+                throw new IllegalArgumentException(msg);
+            }
+        }
+        DataServerExplorerParameters params = (DataServerExplorerParameters) explorerFactory.createParameters();
+        if( parameters_json!=null ) {
+            Json.addAll(params, parameters_json);
+        }
+        return params;
+    }
+
+    @Override
+    public DataStoreParameters createMemoryStoreParameters(String autoOrderAttributeName) throws InitializeException {
+        try {
+            DataStoreParameters parameters = createStoreParameters(MemoryStoreProvider.NAME);
+            if (autoOrderAttributeName != null) {
+                parameters.setDynValue(
+                        MemoryStoreParameters.ORDER_PARAMETER_NAME,
+                        autoOrderAttributeName);
+            }
+            return parameters;
+        } catch (Exception ex) {
+            throw new InitializeException(ex);
+        }
+    }
+
+    @Override
+    public DataServerExplorer openServerExplorer(String explorerName, DataServerExplorerParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        if( explorerName == null ) {
+            String msg = "Explorer name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
+        if( explorerFactory == null ) {
+            String msg = "Can't locate server explorer factory for '"+explorerName+"'.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        if (parameters == null) {
+            parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
+        }
+        DataServerExplorer explorer = (DataServerExplorer) explorerFactory.create(
+                parameters,
+                new DefaultDataServerExplorerProviderServices()
+        );
+        return explorer;
+    }
+
+    @Override
+    public DataServerExplorer openServerExplorer(String explorerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        if( arguments.length==1 && arguments[0] instanceof DataServerExplorerParameters ) {
+            // Esto hace falta ya que desde scripting si se invoca a openServerExplorer con solo 
+            // un parametro de tipo DataServerExplorerParameters llama ha este metodo en lugar de
+            // llamar al que toca.
+            return openServerExplorer(explorerName, (DataServerExplorerParameters)(arguments[0]));
+        }
+        if( explorerName == null ) {
+            String msg = "Explorer name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        if( (arguments.length % 2)!= 0 ) {
+            throw new ValidateDataParametersException();
+        }
+        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
+        DataServerExplorerParameters parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
+        for( int i=0; i<arguments.length; i+=2 ) {
+            String name = (String) arguments[i];
+            if( name.endsWith("=") ) {
+                name = name.substring(0, name.length()-1);
+            }
+            Object value = arguments[i+1];
+            parameters.setDynValue(name, value);
+        }
+        return this.openServerExplorer(explorerName, parameters);
+
+    }
+
+    /**
+     * @param parameters
+     * @return
+     * @throws org.gvsig.fmap.dal.exception.InitializeException
+     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
+     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
+     * @deprecated see openServerExplorer
+     */
+    @Override
+    public DataServerExplorer createServerExplorer(
+            DataServerExplorerParameters parameters) throws InitializeException,
+            ProviderNotRegisteredException, ValidateDataParametersException {
+        return openServerExplorer(parameters.getExplorerName(), parameters);
+    }
+
+    /**
+     * @deprecated use openStore
+     * @param parameters
+     * @return
+     * @throws InitializeException
+     * @throws ProviderNotRegisteredException
+     * @throws ValidateDataParametersException
+     */
+    @Override
+    public DataStore createStore(DataStoreParameters parameters)
+        throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException {
+        return openStore(parameters.getDataStoreName(), parameters);
+    }
+
+    @Override
+    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        return this.openStore(providerName, parameters, false);
+    }
+
+    @Override
+    public DataStore openStore(String providerName, DataStoreParameters parameters, boolean ignoreDALResource) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        if (providerName == null) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
+            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
+        }
+
+        parameters.validate();
+
+        String storeName = this.getStoreName(parameters);
+        if( StringUtils.isEmpty(storeName) ) {
+            String msg = "Can't locate the store name from the parameters. parameters=" + parameters.toString();
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+
+        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
+        if( storeFactory == null ) {
+            String msg = "Can't locate store factory for '"+storeName+"'.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
+        if( providerFactory == null ) {
+            String msg = "Can't locate provider factory for '"+providerName+"'.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+
+        DataStore store = (DataStore) storeFactory.create(parameters, this);
+        if( store instanceof DefaultFeatureStore ) {
+            ((DefaultFeatureStore)store).setIgnoreDALResource(ignoreDALResource);
+        }
+        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
+
+        if( provider == null ) {
+            String msg = "Can't create provider for '"+providerName+"'.";
+            LOGGER.trace(msg);
+            throw new IllegalArgumentException(msg);
+        }
+
+        storeFactory.setProvider(store, provider);
+  
+        addObservers(store);
+        if( store instanceof FeatureStoreProviderServices ) {
+          ((FeatureStoreProviderServices) store).notifyChange(DataStoreNotification.AFTER_OPEN);
+        }
+        return store;
+    }
+    
+    public void addObservers(DataStore store){
+        for (Observer storeObserver : storeObservers) {
+          if( storeObserver!=null) {
+            store.addObserver(storeObserver);
+          }
+        }
+    }
+
+    @Override
+    public DataStore openStore(DataStoreParameters parameters, DataStoreProvider provider) {
+        String storeName = this.getStoreName(parameters);
+        if( StringUtils.isEmpty(storeName) ) {
+            String msg = "Can't locate the store name from the parameters. parameters=" + parameters.toString();
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+
+        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
+        if( storeFactory == null ) {
+            String msg = "Can't locate store factory for '"+storeName+"'.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataStore store = (DataStore) storeFactory.create(parameters, this);
+        storeFactory.setProvider(store, provider);
+        for (Observer storeObserver : storeObservers) {
+          if( storeObserver!=null) {
+            store.addObserver(storeObserver);
+          }
+        }
+        if( store instanceof FeatureStoreProviderServices ) {
+          ((FeatureStoreProviderServices) store).notifyChange(DataStoreNotification.AFTER_OPEN);
+        }
+        return store;
+    }
+    
+    @Override
+    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        DataStoreParameters params = toDataStoreParameters(provider, parameters);
+        DataStore store = openStore(params.getDataStoreName(), params);
+        return store;
+    }
+
+    @Override
+    public DataStore openStore(String providerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        if( arguments.length == 1 ) { 
+            // Desde jython entra por este metodo en lugar de los especificos
+            // de DataStoreParameters o DynObject
+            if( arguments[0] instanceof DataStoreParameters ) {
+                return this.openStore(providerName, (DataStoreParameters)(arguments[0]));
+            } else if( arguments[0] instanceof DynObject ) {
+                return this.openStore(providerName, (DynObject)(arguments[0]));
+            }
+        }
+        if( arguments.length == 2 &&  arguments[0] instanceof DataStoreParameters && arguments[1] instanceof Boolean) { 
+            return this.openStore(providerName, (DataStoreParameters)(arguments[0]), (boolean)(arguments[1]));
+        }
+        if( (arguments.length % 2)!= 0 ) {
+            throw new ValidateDataParametersException();
+        }
+        if( providerName == null ) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
+        DataStoreParameters parameters = (DataStoreParameters) providerFactory.createParameters();
+        for( int i=0; i<arguments.length; i+=2 ) {
+            String name = (String) arguments[i];
+            if( name.endsWith("=") ) {
+                name = name.substring(0, name.length()-1);
+            }
+            Object value = arguments[i+1];
+            parameters.setDynValue(name, value);
+        }
+        return this.openStore(providerName, parameters);
+    }
+
+    @Override
+    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
+        try {
+            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
+            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
+            return (FeatureStore) store;
+        } catch (Exception ex) {
+            throw new InitializeException(ex);
+        }
+    }
+
+    @Override
+    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
+        if( providerName == null ) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
+        return (DataStoreProviderFactory) providerFactory;
+    }
+
+    @Override
+    public List<String> getStoreProviders() {
+        return this.getStoreProviderRegister().getFactoryNames();
+    }
+
+    @Override
+    public List<String> getStoreProviders(String explorerName) {
+        if( explorerName == null ) {
+            String msg = "Explorer name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        try {
+            DataServerExplorer explorer = openServerExplorer(explorerName, (DataServerExplorerParameters)null);
+            List names = explorer.getDataStoreProviderNames();
+            return names;
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
+        }
+    }
+
+    @Override
+    public List<String> getExplorerProviders() {
+        List<String> names = this.getServerExplorerRegister().getFactoryNames();
+        return names;
+    }
+
+    @Override
+    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
+
+        String providerName = parameters.getDataStoreName();
+        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
+        if (providerFactory == null) {
+            throw new ProviderNotRegisteredException(providerName);
+        }
+        while (true) {
+            try {
+                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
+                        parameters, providerServices
+                );
+                return provider;
+            } catch (Exception e) {
+                if (openErrorHandler == null) {
+                    throw new InitializeException(providerName, e);
+                }
+                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
+                if (!retry) {
+                    throw new InitializeException(providerName, e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public List<String> getFeatureIndexProviders() {
+        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
+        return names;
+    }
+
+    @Override
+    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
+        this.defaultDataIndexProviders.put(dataType, name);
+    }
+
+    @Override
+    public String getDefaultFeatureIndexProviderName(int dataType) {
+        return this.defaultDataIndexProviders.get(dataType);
+    }
+
+    @Override
+    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);
+        }
+        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
+        if (indexfactory == null) {
+            throw new InitializeException(
+                    "There not any index provider registered with name '" + name + "'.", null);
+
+        }
+        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
+
+        FeatureIndexProviderServices services = new DefaultFeatureIndex(
+                (FeatureStoreProviderServices) store,
+                type,
+                provider,
+                attr.getName(),
+                indexName
+        );
+        services.initialize();
+        return services;
+
+    }
+
+    @Override
+    public String getTemporaryDirectory() {
+        FoldersManager manager = ToolsLocator.getFoldersManager();
+        File folder = manager.getUniqueTemporaryFile("_daltmp_");
+        return folder.getAbsolutePath();
+    }
+
+    @Override
+    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
+        if (!(struct instanceof DynStruct_v2)) {
+            throw new IllegalArgumentException("A DynStruct_v2 is required.");
+        }
+        Tags tags = ((DynStruct_v2) struct).getTags();
+        return this.createStoreParameters(tags);
+    }
+
+    @Override
+    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException {
+        String providerName = (String) tags.get(TAG_DAL_OPENSTORE + "provider");
+        if (providerName == null) {
+            throw new IllegalArgumentException("Tag DAL.OpenStore.provider is missing in struct.");
+        }
+        int prefixlen = TAG_DAL_OPENSTORE.length();
+        DataStoreParameters parameters = this.createStoreParameters(providerName);
+        for (String key : tags) {
+            if (key.startsWith(TAG_DAL_OPENSTORE)) {
+                parameters.setDynValue(key.substring(prefixlen), tags.get(key));
+            }
+        }
+        return parameters;
+    }
+
+    @Override
+    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        DataStoreParameters paramters = this.createStoreParameters(struct);
+        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
+        return store;
+    }
+
+    @Override
+    public void newStore(String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        String explorerName = this.getServerExplorerFromStore(providerName);
+        newStore(explorerName, providerName, parameters, overwrite);
+    }
+    
+    @Override
+    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
+        if( explorerName == null ) {
+            String msg = "Explorer name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        if( providerName == null ) {
+            String msg = "Provider name can't be null.";
+            LOGGER.warn(msg);
+            throw new IllegalArgumentException(msg);
+        }
+
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
+            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
+        }
+        parameters.validate();
+        try {
+            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
+            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
+            server.add(providerName, parameters, overwrite);
+        } catch (Exception e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    @Override
+    @Deprecated
+    public Evaluator createExpresion(String expression) throws InitializeException {
+        Expression exp = ExpressionEvaluatorLocator.getManager().createExpression();
+        exp.setPhrase(expression);
+        return this.createExpresion(exp);
+    }
+
+    @Override
+    @Deprecated
+    public Evaluator createExpresion(Expression expression) throws InitializeException {
+        DefaultFeatureExpressionEvaluator exp = new DefaultFeatureExpressionEvaluator(expression);
+        return exp;        
+    }
+
+
+    @Override
+    public Evaluator createFilter(String expression) throws InitializeException {
+        Expression exp = ExpressionEvaluatorLocator.getManager().createExpression();
+        exp.setPhrase(expression);
+        return this.createFilter(exp);
+    }
+
+    @Override
+    public Evaluator createFilter(Expression expression) throws InitializeException {
+        DefaultFeatureExpressionEvaluator exp = new DefaultFeatureExpressionEvaluator(expression);
+        return exp;        
+    }
+
+    @Override
+    public FeaturePagingHelper createFeaturePagingHelper(
+            FeatureStore featureStore, int pageSize) throws BaseException {
+        return new FeaturePagingHelperImpl(featureStore, pageSize);
+    }
+
+    @Override
+    public FeaturePagingHelper createFeaturePagingHelper(
+            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
+            throws BaseException {
+        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
+    }
+
+    @Override
+    public void setOpenErrorHandler(OpenErrorHandler handler) {
+        openErrorHandler = handler;
+    }
+
+    @Override
+    public OpenErrorHandler getOpenErrorHandler() {
+        return this.openErrorHandler;
+    }
+
+    @Override
+    public EditableFeatureType createFeatureType() {
+        return new DefaultEditableFeatureType(null);
+    }
+
+    @Override
+    public EditableFeatureType createFeatureType(JsonObject json) {
+        EditableFeatureType featureType = this.createFeatureType();
+        featureType.fromJson(json);
+        return featureType;
+    }
+
+    @Override
+    public DataServerExplorerPool getDataServerExplorerPool() {
+        if (this.dataServerExplorerPool == null) {
+            this.dataServerExplorerPool = new DataServerExplorerPoolImpl();
+        }
+        return this.dataServerExplorerPool;
+    }
+
+    @Override
+    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
+        this.dataServerExplorerPool = pool;
+    }
+
+    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
+        if (params instanceof DataStoreParameters) {
+            return (DataStoreParameters) params;
+        }
+        String providerName;
+        try {
+            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+        } catch (Exception ex) {
+            providerName = provider;
+        }
+        DataStoreParameters parameters = this.createStoreParameters(providerName);
+        ToolsLocator.getDynObjectManager().copy(params, parameters);
+        return parameters;
+    }
+
+    @Override
+    public List<DataType> 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;
+    }
+
+    @Override
+    public void setResourcesLoader(ClassLoader loader) {
+        this.resourcesLoader = loader;
+    }
+
+    @Override
+    public void setResourcesLoader(File folder) {
+        if (folder == null) {
+            this.resourcesLoader = null;
+            return;
+        }
+        try {
+            URL[] urls = new URL[]{folder.toURI().toURL()};
+            this.resourcesLoader = new URLClassLoader(urls);
+        } catch (Exception ex) {
+            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
+        }
+    }
+
+    @Override
+    public URL getResource(Object reourceLoader, String name) {
+        URL x;
+        if (this.resourcesLoader != null) {
+            x = this.resourcesLoader.getResource(name);
+            if (x != null) {
+                return x;
+            }
+        }
+        x = reourceLoader.getClass().getResource(name);
+        return x;
+    }
+
+    @Override
+    public InputStream getResourceAsStream(Object reourceLoader, String name) {
+        InputStream x;
+        if (this.resourcesLoader != null) {
+            x = this.resourcesLoader.getResourceAsStream(name);
+            if (x != null) {
+                return x;
+            }
+        }
+        x = reourceLoader.getClass().getResourceAsStream(name);
+        return x;
+    }
+
+    @Override
+    public ExpressionBuilder createExpressionBuilder() {
+        return ExpressionEvaluatorLocator.getManager().createExpressionBuilder();
+    }
+
+    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 (Exception e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    @Override
+    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();
+        }
+    }
+
+    @Override
+    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 (Exception e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    @Override
+    public void createFileStore(String providerName, NewDataStoreParameters params, boolean overwrite) throws DataException {
+        DataManagerProviderServices dataManager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters eparams = null;
+        DataServerExplorer serverExplorer;
+        try {
+            serverExplorer = dataManager.openServerExplorer(FILESYSTEM_EXPLORER_NAME, eparams);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            throw new OpenException(FILESYSTEM_EXPLORER_NAME, e);
+        }
+
+        try {
+            serverExplorer.add(providerName, params, overwrite);
+        } catch (DataException e) {
+            throw new CreateFileStoreException(e, providerName);
+        }
+    }
+
+    @Override
+    public FeatureSymbolTable createFeatureSymbolTable() {
+        FeatureSymbolTable symbolTable = new FeatureSymbolTableImpl();
+        return symbolTable;
+    }
+
+    @Override
+    public FeatureSymbolTable createFeatureSymbolTable(String name) {
+        FeatureSymbolTable symbolTable = new FeatureSymbolTableImpl(name);
+        return symbolTable;
+    }
+
+    @Override
+    public FeatureAttributeEmulatorExpression createFeatureAttributeEmulatorExpression(FeatureType type, Expression expression) {
+        FeatureAttributeEmulatorExpression emulator = new DefaultFeatureAttributeEmulatorExpression(type, expression);
+        return emulator;
+    }
+
+    @Override
+    public void registerDataProfile(DataProfile profile) {
+        if( profile==null ) {
+            return;
+        }
+        if( this.dataProfiles==null ) {
+            this.dataProfiles = new ArrayList<>();
+            this.dataProfiles.add(profile);
+            return;
+        }
+        for (DataProfile theProfile : this.dataProfiles) {
+            if( theProfile.getID().equalsIgnoreCase(profile.getID()) ) {
+                return;
+            }
+        }
+        this.dataProfiles.add(profile);
+    }
+
+    @Override
+    public List<DataProfile> getDataProfiles() {
+        if( this.dataProfiles==null ) {
+            return null;
+        }
+        return Collections.unmodifiableList(this.dataProfiles);
+    }
+
+    @Override
+    public DataProfile getDataProfile(String name) {
+        if( StringUtils.isBlank(name) ) {
+            return null;
+        }
+        for (DataProfile theProfile : this.dataProfiles) {
+            if( name.equalsIgnoreCase(theProfile.getName()) ) {
+                return theProfile;
+            }
+        }
+        return null;
+    }
+
+    private StoresRepository storesRepository;
+    
+    @Override
+    public StoresRepository getStoresRepository() {
+        if( this.storesRepository==null ) {
+            this.storesRepository = new BaseStoresRepository("DAL");
+        }
+        return this.storesRepository;
+    }
+    
+    @Override
+    public DatabaseWorkspaceManager createDatabaseWorkspaceManager(DataServerExplorerParameters connection) {
+        DatabaseWorkspaceManager workspace = new DefaultDatabaseWorkspaceManager(connection);
+        return workspace;
+    }
+
+    @Override
+    public void removeDatabaseWorkspace(DatabaseWorkspaceManager databaseWorkspace) {
+        this.databaseWorkspaces.remove(databaseWorkspace.getId(),databaseWorkspace);
+        StoresRepository repo = databaseWorkspace.getStoresRepository();
+        this.getStoresRepository().removeRepository(repo.getID());
+        for (DatabaseWorkspaceListener listener : this.addDatabaseWorkspaceListeners.values()) {
+            if( listener!=null ) {
+                try {
+                    listener.onRemoveDatabaseWorkspace(databaseWorkspace);
+                } catch(Throwable th) {
+                    LOGGER.warn("Problems calling databaseworkspace listener '"+listener.getName()+"'.",th);
+                }
+            }
+        }
+        try {
+            ResourcesStorage resources = databaseWorkspace.getResourcesStorage();
+            ScriptManager scriptManager = ToolsLocator.getScriptManager();
+            Script script = scriptManager.loadScript(resources, "OnDisconnectToWorkspace.script");
+            if( script != null ) {
+                script.invokeFunction("main", new Object[] {databaseWorkspace});
+            }
+        } catch(Throwable th) {
+            LOGGER.warn("Problems executing 'OnDisconnectToWorkspace.script' from workspace '"+databaseWorkspace.getId()+"'.",th);
+        }
+    }
+    
+    @Override
+    public void addDatabaseWorkspace(DatabaseWorkspaceManager databaseWorkspace) {
+        this.databaseWorkspaces.put(databaseWorkspace.getId(),databaseWorkspace);
+        StoresRepository repo = databaseWorkspace.getStoresRepository();
+        this.getStoresRepository().addRepository(repo);
+
+        for (DatabaseWorkspaceListener listener : this.addDatabaseWorkspaceListeners.values()) {
+            if( listener!=null ) {
+                try {
+                    listener.onAddDatabaseWorkspace(databaseWorkspace);
+                } catch(Throwable th) {
+                    LOGGER.warn("Problems calling databaseworkspace listener '"+listener.getName()+"'.",th);
+                }
+            }
+        }
+        try {
+            ResourcesStorage resources = databaseWorkspace.getResourcesStorage();
+            ScriptManager scriptManager = ToolsLocator.getScriptManager();
+            Script script = scriptManager.loadScript(resources, "OnConnectToWorkspace.script");
+            if( script != null ) {
+                script.invokeFunction("main", new Object[] {databaseWorkspace});
+            }
+        } catch(Throwable th) {
+            LOGGER.warn("Problems executing 'OnConnectToWorkspace.script' from workspace '"+databaseWorkspace.getId()+"'.",th);
+        }
+    }
+    
+    @Override
+    public void addDatabaseWorkspaceListener(DatabaseWorkspaceListener listener) {
+        this.addDatabaseWorkspaceListeners.put(listener.getName(), listener);
+    }
+
+    @Override
+    public DatabaseWorkspaceManager getDatabaseWorkspace(String name) {
+        if( StringUtils.isBlank(name) ) {
+          return null;
+        }
+        return this.databaseWorkspaces.get(name);
+    }
+    
+    @Override
+    public DatabaseWorkspaceManager getDatabaseWorkspace(DataStoreParameters params) {
+        for (DatabaseWorkspaceManager databaseWorkspace : this.databaseWorkspaces.values()) {
+            if( databaseWorkspace.getStoresRepository().contains(params) ) {
+                return databaseWorkspace;
+            }
+        }
+        return null;
+    }
+    
+    @Override
+    public void writeDALResource(ResourcesStorage resources, DataStore store) {
+        ResourcesStorage.Resource resource = null;
+        try {
+            if( resources == null || resources.isReadOnly() ) {
+                return;
+            }
+            resource = resources.getResource("dal");
+            if( resource == null || resource.isReadOnly() ) {
+                return;
+            }
+            DALFile dalFile = DALFile.getDALFile();
+            dalFile.setStore((DefaultFeatureStore) store);
+            if( !dalFile.isEmpty() ) {
+                dalFile.write(resource);
+            }
+        } catch (Throwable ex) {
+            LOGGER.warn("Can't save DAL resource", ex);
+        } finally {
+            IOUtils.closeQuietly(resource);
+        }
+    
+        
+    }
+
+    @Override
+    public void writeDALResource(ResourcesStorage resources, FeatureType featureType) {
+        ResourcesStorage.Resource resource = null;
+        try {
+            if( resources == null || resources.isReadOnly() ) {
+                return;
+            }
+            resource = resources.getResource("dal");
+            if( resource == null || resource.isReadOnly() ) {
+                return;
+            }
+            DALFile dalFile = DALFile.getDALFile();
+            dalFile.setFeatureType(featureType);
+            if( !dalFile.isEmpty() ) {
+                dalFile.write(resource);
+            }
+        } catch (Throwable ex) {
+            LOGGER.warn("Can't save DAL resource", ex);
+        } finally {
+            IOUtils.closeQuietly(resource);
+        }
+    }
+
+    @Override
+    public void clearAvailableValuesCache() {
+      //TODO
+    }
+     
+    @Override
+    public String createUniqueID() {
+        UUID x = UUID.randomUUID();
+        String s = x.toString();
+        return s;
+    }
+
+    @Override
+    public EditableFeatureAttributeDescriptor createFeatureAttributeDescriptor(String name, int type) {
+        return createEditableFeatureAttributeDescriptor(null, name,type, false);
+    }
+    
+    public static DefaultEditableFeatureAttributeDescriptor createEditableFeatureAttributeDescriptor(FeatureType ftype, String name, int type) {
+        return createEditableFeatureAttributeDescriptor(ftype, name,type, false);
+    }
+    
+    public static DefaultEditableFeatureAttributeDescriptor createEditableFeatureAttributeDescriptor(FeatureType ftype, String name, int type, boolean strongChanges) {
+        switch (type) {
+            case DataTypes.DOUBLE:
+            case DataTypes.FLOAT:
+            case DataTypes.DECIMAL:
+            case DataTypes.BOOLEAN:
+            case DataTypes.BYTE:
+            case DataTypes.BYTEARRAY:
+            case DataTypes.CHAR:
+            case DataTypes.DATE:
+            case DataTypes.GEOMETRY:
+            case DataTypes.INT:
+            case DataTypes.LONG:
+            case DataTypes.OBJECT:
+            case DataTypes.LIST: // Solo para campos calculados ???
+            case DataTypes.STRING:
+            case DataTypes.TIME:
+            case DataTypes.TIMESTAMP:
+            case DataTypes.URI:
+            case DataTypes.URL:
+            case DataTypes.FILE:
+                break;
+
+            default:
+                throw new UnsupportedDataTypeException(name, type);
+        }
+        DefaultEditableFeatureAttributeDescriptor edi = new DefaultEditableFeatureAttributeDescriptor(ftype, strongChanges);
+        edi.setName(name);
+        edi.setDataType(type);
+        if (edi.getDataType().supportSize()) {
+            edi.setSize(edi.getDataType().getDefaultSize());
+        }   
+        return edi;
+    }
+
+  @Override
+  public DALExpressionBuilder createDALExpressionBuilder() {
+    return new DefaultDALExpressionBuilder();
+  }
+
+  @Override
+  public void addStoreObserver(Observer observer) {
+    this.storeObservers.add(observer);
+  }
+
+  @Override
+  public void removeStoreObserver(Observer observer) {
+    this.storeObservers.remove(observer);
+  }
+
+    @Override
+    public String getServerExplorerFromStore(String name) {
+        Register r = this.getServerExplorerRegister();
+        for (DataFactory factory0 : r) {
+            DataServerExplorerFactory factory = (DataServerExplorerFactory) factory0;
+            if( factory.isStoreSupported(name) ) {
+                return factory.getName();
+            }
+        }
+        return null;
+    }
+    
+    @Override
+    public void setMaxSizeForSmallFeatureSelection(long size){
+        this.maxSizeForSmallFeatureSelection = size;
+    }
+
+    @Override
+    public long getMaxSizeForSmallFeatureSelection() {
+        return this.maxSizeForSmallFeatureSelection;
+    }
+
+    @Override
+    public void registerLargeMap(Factory factory) {
+        this.largeMapFactory = factory;
+    }
+    
+    @Override
+    public void registerLargeSet(Factory factory) {
+        this.largeSetFactory = factory;
+    }
+    
+    @Override
+    public Map createLargeMap() {
+        return (Map) this.largeMapFactory.create();
+    }
+
+    @Override
+    public Set createLargeSet() {
+        return (Set) this.largeSetFactory.create();
+    }
+
+    @Override
+    public DataTransaction createTransaction() {
+        DefaultTransaction transaction = new DefaultTransaction();
+        return transaction;
+    }
+    
+    @Override
+    public void putFeaturesInClipboard(FeatureSet set)  {
+        if( set==null ) {
+            return;
+        }
+        String s = set.toJson().toString();
+        ToolsSwingLocator.getToolsSwingManager().putInClipboard(s);
+    }
+    
+    @Override
+    public List<EditableFeature> getFeaturesFromClipboard(FeatureStore store, Predicate<FeatureAttributeDescriptor> attrFilter) throws DataException {
+        if( store==null ) {
+            return Collections.EMPTY_LIST;
+        }
+        String clipboard = ToolsSwingLocator.getToolsSwingManager().getFromClipboard();
+        if( StringUtils.isBlank(clipboard) ) {
+            return Collections.EMPTY_LIST;
+        }
+        JsonArray array = Json.createArray(clipboard);
+        if (array == null) {
+            return Collections.EMPTY_LIST;
+        }
+        List<EditableFeature> features = new ArrayList<>();
+        for (JsonValue jsonValue : array) {
+            EditableFeature f = store.createNewFeature();
+            f.copyFrom((JsonObject) jsonValue, attrFilter);
+            features.add(f);
+        }
+        return features;
+    }
+
+    @Override
+    public FeatureRuleExpression createFeatureRuleExpression() {
+        FeatureRuleExpression rule = new DefaultFeatureRuleExpression();
+        return rule;
+}
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultTransaction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultTransaction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultTransaction.java	(revision 46118)
@@ -0,0 +1,236 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.SupportTransactions;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import static org.gvsig.fmap.dal.feature.FeatureStore.MODE_QUERY;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultTransaction implements DataTransactionServices {
+
+    private final String code;
+    private final Set<DataServerExplorer> explorers;
+    private final Map<String,ConnectionService> connections;
+    private Set<DataStore> stores;
+    private boolean inProgress;
+    private List<Disposable> disposables;
+
+    public DefaultTransaction() {
+        this.code = UUID.randomUUID().toString().replace("-", "");
+        this.stores = new HashSet<>();
+        this.explorers = new HashSet<>();
+        this.disposables = new ArrayList<>();
+        this.inProgress = false;
+        this.connections = new HashMap<>();
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    @Override
+    public void begin() throws DataException {
+        if( this.inProgress ) {
+            throw new IllegalStateException("Transaction already started.");
+        }
+        this.inProgress = true;
+    }
+
+    @Override
+    public void commit() throws DataException {
+        if( !this.isInProgress() ) {
+            return;
+        }
+        for (DataStore store : stores) {
+            if( store instanceof FeatureStore ) {
+                FeatureStore fstore = (FeatureStore) store;
+                if( fstore.getMode() != MODE_QUERY) {
+                    fstore.finishEditing();
+                }
+            }
+        }
+        this.inProgress = false;
+    }
+
+    @Override
+    public void rollback() throws DataException {
+        if( !this.isInProgress() ) {
+            return;
+        }
+        for (DataStore store : stores) {
+            if( store instanceof FeatureStore ) {
+                FeatureStore fstore = (FeatureStore) store;
+                if( fstore.getMode() != MODE_QUERY) {
+                    fstore.cancelEditing();
+                }
+            }
+        }
+        this.inProgress = false;
+    }
+
+    @Override
+    public void rollbackQuietly() {
+        try {
+            this.rollback();
+        } catch(Exception ex) {
+            // Do nothing
+        }
+    }
+
+    @Override
+    public void add(DataStore store) {
+        add(store, true);
+    }
+
+    @Override
+    public void add(DataStore store, boolean local) {
+        if(this.stores.contains(store)){
+            return;
+        }
+        if( store instanceof SupportTransactions ) {
+            ((SupportTransactions) store).setTransaction(this);
+        }
+        if(!local){
+            DisposeUtils.bind(store);
+        }
+        this.stores.add(store);
+    }
+
+    @Override
+    public void add(DataServerExplorer explorer) {
+        add(explorer, true);
+    }
+
+    @Override
+    public void add(DataServerExplorer explorer, boolean local) {
+        if(this.explorers.contains(explorer)){
+            return;
+        }
+        if( explorer instanceof SupportTransactions ) {
+            ((SupportTransactions) explorer).setTransaction(this);
+        }
+        if(!local){
+            DisposeUtils.bind(explorer);
+        }
+        this.explorers.add(explorer);
+    }
+
+    @Override
+    public void add(Disposable resource) throws DataException {
+        this.disposables.add(resource);
+    }
+
+    @Override
+    public void remove(DataStore store) {
+        if( this.inProgress ) {
+            throw new IllegalStateException("Can't remove store from a in progress transaction.");
+        }
+        if( store instanceof SupportTransactions ) {
+            ((SupportTransactions) store).setTransaction(null);
+        }
+        this.stores.remove(store);
+        DisposeUtils.dispose(store);
+    }
+
+    @Override
+    public boolean isInProgress() {
+        return inProgress;
+    }
+
+    @Override
+    public void dispose() {
+        if( this.inProgress ) {
+            this.rollbackQuietly();
+        }
+        for (DataStore store : stores) {
+            if( store instanceof SupportTransactions ) {
+                ((SupportTransactions) store).setTransaction(null);
+            }
+            DisposeUtils.disposeQuietly(store);
+            
+        }
+        for (DataServerExplorer explorer : explorers) {
+            if( explorer instanceof SupportTransactions ) {
+                ((SupportTransactions) explorer).setTransaction(null);
+            }
+            DisposeUtils.disposeQuietly(explorer);
+            
+        }
+        for (Disposable resource : disposables) {
+            if( resource instanceof SupportTransactions ) {
+                ((SupportTransactions) resource).setTransaction(null);
+            }
+            DisposeUtils.disposeQuietly(resource);
+            
+        }
+        this.disposables = null;
+        this.stores = null;
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.dispose();
+    }
+
+    @Override
+    public void addConnection(ConnectionService connection) {
+        if( this.connections.containsKey(connection.getId()) ) {
+            return;
+        }
+        this.connections.put(connection.getId(), connection);
+    }
+
+    @Override
+    public ConnectionService getConnection(String id) {
+        return this.connections.get(id);
+    }
+
+    @Override
+    public void removeConnection(String id) {
+        this.connections.remove(id);
+    }
+
+    @Override
+    public boolean existsConnection(String id) {
+        return this.connections.containsKey(id);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/dataprofile/DataProfileText.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/dataprofile/DataProfileText.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/dataprofile/DataProfileText.java	(revision 46118)
@@ -0,0 +1,47 @@
+package org.gvsig.fmap.dal.impl.dataprofile;
+
+import java.util.Objects;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.feature.AbstractDataProfile;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dynobject.Tags;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DataProfileText extends AbstractDataProfile {
+    
+    public DataProfileText() {
+        super("Text", "Text", String.class);
+    }
+
+    @Override
+    public Object createData(Object data, Tags tags) {
+        return Objects.toString(data, null);
+    }
+
+    @Override
+    public Object coerce(DataType dataType, Object data, Tags tags) throws CoercionException {
+        String s = Objects.toString(data, null);
+        if( s == null ) {
+            return null;
+        }    
+        try {
+            data = dataType.coerce(s);
+            return data;
+        } catch(Exception ex) {
+            throw new CoercionException("Can't convert String to "+dataType.getName(), ex);            
+        }
+    }
+    
+    public static void selfRegister() {
+        DataManager dataManager = DALLocator.getDataManager();
+        
+        dataManager.registerDataProfile(new DataProfileText());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLibrary;
+import org.gvsig.expressionevaluator.impl.DALFunctions;
+import org.gvsig.expressionevaluator.impl.DefaultFeatureRuleExpression;
+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.DALFile;
+import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureExtraColumns;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQuery;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder;
+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.DefaultFeatureType;
+import org.gvsig.fmap.dal.feature.impl.DefaultForeingKey;
+import org.gvsig.fmap.dal.feature.impl.LargeFeatureReferenceSelection;
+import org.gvsig.fmap.dal.feature.impl.LargeFeatureSelection;
+import org.gvsig.fmap.dal.feature.impl.dynobjectutils.ComputeAvailableValuesFromTable;
+import org.gvsig.fmap.dal.feature.impl.dynobjectutils.DumbFeatureTypeDefinitionsManager;
+import org.gvsig.fmap.dal.feature.impl.dynobjectutils.relations.DALLink_getRelatedFeature;
+import org.gvsig.fmap.dal.feature.impl.dynobjectutils.relations.DALLink_getRelatedFeatures;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.jsir.JSIRSpatialIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryBigDecimalIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryDoubleIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryFloatIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryIntIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryLongIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memorybasictypes.MemoryStringIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.impl.indexes.memoryspatial.MemorySpatialIndexProviderFactory;
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResource;
+import org.gvsig.fmap.dal.feature.spi.memory.MemoryResourceParameters;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
+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.DataServerExplorerPoolEntryImpl;
+import org.gvsig.fmap.dal.spi.DataServerExplorerPoolImpl;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.i18n.Messages;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.srs.SRSJsonSerializer;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynObjectValueItem;
+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 {
+
+    @Override
+    public void doRegistration() {
+        registerAsImplementationOf(DALLibrary.class);
+        require(ExpressionEvaluatorLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        DALLocator.registerDefaultDataManager(DefaultDataManager.class);
+        DALLocator.registerResourceManager(DefaultResourceManager.class);
+        DALLocator.registerDefaultFeatureTypeDefinitionsManager(DumbFeatureTypeDefinitionsManager.class);
+    }
+
+    @Override
+    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();
+        DefaultFeatureQueryOrder.registerPersistent();
+        FeatureReferenceFactory.registerPersistent();
+        DefaultFeatureStoreTransforms.registerPersistent();
+        AbstractFeatureStoreTransform.registerPersistent();
+        DefaultFeatureReferenceSelection.registerPersistent();
+        DefaultFeatureSelection.registerPersistent();
+        LargeFeatureReferenceSelection.registerPersistent();
+        LargeFeatureSelection.registerPersistent();
+        DefaultForeingKey.registerPersistenceDefinition();
+        DefaultFeatureExtraColumns.registerPersistent();
+        DefaultFeatureExpressionEvaluator.registerPersistence();
+
+        DefaultFeatureStore.registerPersistenceDefinition();
+        DataServerExplorerPoolImpl.registerPersistenceDefinition();
+        DataServerExplorerPoolEntryImpl.registerPersistenceDefinition();
+        
+        DALFile.registerPersistenceDefinition();
+        DefaultFeatureAttributeEmulatorExpression.selfRegister();
+        DefaultFeatureType.selfRegister();
+        DefaultFeatureExtraColumns.selfRegister();
+        DefaultFeatureAttributeDescriptor.selfRegister();
+        DefaultEditableFeatureAttributeDescriptor.selfRegister();
+        SRSJsonSerializer.selfRegister();
+
+        org.gvsig.fmap.dal.impl.dataprofile.DataProfileText.selfRegister();
+        
+        org.gvsig.fmap.dal.complements.relatedfeatures.RelatedFeaturesFactory.selfRegister();
+        org.gvsig.fmap.dal.complements.search.SearchFactory.selfRegister();
+        
+        try {
+            DefaultFeatureStore.registerMetadataDefinition();
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+
+        // DefaultFeatureAttributeDescriptor.registerPersistent();
+
+        //Register the FeatureAttributeTransform
+        DefaultDataManager dataManager = (DefaultDataManager) DALLocator.getDataManager();
+        if (dataManager == null) {
+            throw new ReferenceNotRegisteredException(
+                    DALLocator.DATA_MANAGER_NAME, DALLocator.getInstance());
+        }
+        
+        MemorySpatialIndexProviderFactory.selfRegister();
+        JSIRSpatialIndexProviderFactory.selfRegister();
+        MemoryStringIndexProviderFactory.selfRegister();
+        MemoryIntIndexProviderFactory.selfRegister();
+        MemoryLongIndexProviderFactory.selfRegister();
+        MemoryFloatIndexProviderFactory.selfRegister();
+        MemoryDoubleIndexProviderFactory.selfRegister();
+        MemoryBigDecimalIndexProviderFactory.selfRegister();
+
+        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);
+        }
+
+        DynObjectManager dynObjectmanager = ToolsLocator.getDynObjectManager();
+        dynObjectmanager.registerDynMethod(new DALLink_getRelatedFeatures());
+        dynObjectmanager.registerDynMethod(new DALLink_getRelatedFeature());
+        dynObjectmanager.registerDynMethod(new ComputeAvailableValuesFromTable("getAvailableValuesFromTable", "Retrieve available values from the elements of a table."));
+
+        registerTags();
+        DefaultFeatureAttributeDescriptor.registerPersistenceDefinition();
+        DefaultFeatureType.registerPersistenceDefinition();
+
+        DALFunctions.register();
+
+        DefaultFeatureRuleExpression.selfRegister();
+        
+        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));
+        }
+    }
+
+    private void registerTags() {
+        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+        dynObjectManager.registerTag(
+                DataManager.DAL_USE_LABELS,
+                "Indicates the preference when using labels over names."
+        ).setAvailableValues(
+                new DynObjectValueItem[] {
+                    new DynObjectValueItem(0, "Use names"),
+                    new DynObjectValueItem(1, "Use labels"),
+                    new DynObjectValueItem(2, "Use labels and names"),
+                }
+        ).setType(DataTypes.INT);
+        
+        
+    }
+}       

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java	(revision 46118)
@@ -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.impl;
+
+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.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DataStoreProviderToFeatureStoreProviderFactoryWrapper
+        extends AbstractFeatureStoreProviderFactory {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataStoreProviderToFeatureStoreProviderFactoryWrapper.class);
+
+    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;
+        LOGGER.warn("Creating wrapper for old style FeatureStoreProvider (" + providerClass.getName() + ").");
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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 (Constructor constr : constrs) {
+            Class[] paramTypes = constr.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 constr;
+                }
+            }
+        }
+        StringBuilder strb = new StringBuilder();
+        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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DataStoreProviderToFeatureStoreProviderFactoryWrapper.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/AbstractDataStoreFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/AbstractDataStoreFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/AbstractDataStoreFactory.java	(revision 46118)
@@ -0,0 +1,28 @@
+
+package org.gvsig.fmap.dal.impl;
+
+import org.gvsig.fmap.dal.DataStoreFactory_v2_4;
+import org.gvsig.fmap.dal.spi.AbstractDataFactory;
+
+
+public abstract class AbstractDataStoreFactory  
+    extends AbstractDataFactory
+    implements DataStoreFactory_v2_4
+    {
+            
+    protected AbstractDataStoreFactory(
+            String name,
+            String description
+        ) {
+        super(name, description);
+    }
+    
+    protected AbstractDataStoreFactory(
+            String name,
+            String description,
+            boolean hidden
+        ) {
+        super(name, description, hidden);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureAttributeEmulatorExpression.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureAttributeEmulatorExpression.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureAttributeEmulatorExpression.java	(revision 46118)
@@ -0,0 +1,297 @@
+package org.gvsig.fmap.dal.impl.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Code.Identifier;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.FeatureType;
+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.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.json.SupportToJson;
+import org.gvsig.tools.logger.FilteredLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author osc
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureAttributeEmulatorExpression implements FeatureAttributeEmulatorExpression {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureAttributeEmulatorExpression.class);
+    
+    private static final String EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME = "EmulatedFieldExpression";
+
+    private String[] requiredFields = null;
+    private Expression expression = null;
+    private SymbolTable symbolTable = null;
+    private FeatureSymbolTable featureSymbolTable = null;
+    
+    private boolean valid;
+    private String errorMessage;
+    
+    private boolean enableExceptions;
+    private List<String> undefinedSymbols;
+    
+    private FilteredLogger logger;
+    
+    public DefaultFeatureAttributeEmulatorExpression() {
+    }
+
+    public DefaultFeatureAttributeEmulatorExpression(FeatureType featureType, Expression expression) {
+        this.expression = expression;
+        this.checkVars(featureType);
+        this.enableExceptions = false;
+    }
+
+    private FilteredLogger getLogger() {
+        if( this.logger == null ) {
+            this.logger = new FilteredLogger(LOGGER, "FeatureAttributeEmulatorExpression", 10);
+        }
+        return this.logger;
+    }
+    
+    private void checkVars(final FeatureType featureType) {
+        this.valid = true;
+        final List<String> theUsedFields = new ArrayList<>();
+        this.undefinedSymbols = new ArrayList<>();
+        
+        try {
+            Code code = this.expression.getCode();
+            code.accept(new Visitor() {
+                @Override
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    Code code = (Code) obj;
+                    if (code instanceof Identifier) {
+                        String name = ((Identifier) code).name();
+                        if (featureType.get(name) == null) {
+                            undefinedSymbols.add(name);
+                        } else {
+                            theUsedFields.add(name);
+                        }
+                    }
+                }
+            });
+        } catch (Exception ex) {
+            valid = false;
+            this.errorMessage = ex.getMessage();
+        }
+        this.requiredFields = theUsedFields.toArray(new String[theUsedFields.size()]);
+    }
+
+    @Override
+    public List<String> getUndefinedSymbols() {
+      return undefinedSymbols;
+    }
+
+    @Override
+    public boolean isEnableExceptions() {
+        return enableExceptions;
+    }
+
+    @Override
+    public void setEnableExceptions(boolean enableExceptions) {
+        this.enableExceptions = enableExceptions;
+    }
+
+    @Override
+    public SymbolTable getSymbolTable() {
+        if (this.symbolTable == null || this.featureSymbolTable==null ) {
+            ExpressionEvaluatorManager expressionManager = ExpressionEvaluatorLocator.getManager();
+            this.featureSymbolTable = new FeatureSymbolTableImpl();
+            this.symbolTable = expressionManager.createSymbolTable();
+            this.symbolTable.addSymbolTable(this.featureSymbolTable);
+        }
+        return this.symbolTable;
+    }
+
+    private FeatureSymbolTable getFeatureSymbolTable() {
+        if (this.featureSymbolTable == null) {
+            this.getSymbolTable();
+        }
+        return this.featureSymbolTable;
+    }
+
+    @Override
+    public boolean isValid() {
+        return this.valid;
+    }
+
+    @Override
+    public Object get(Feature feature) {
+        this.getFeatureSymbolTable().setFeature(feature);
+        try {
+            Object result = this.expression.execute(this.getSymbolTable());
+            return result;
+        } catch(Exception ex) {
+            if( this.enableExceptions ) {
+                throw ex;
+            }
+            String phrase = "unknon";
+            String featureref ="unknon";
+            try {
+                phrase = this.expression.getPhrase();
+            } catch(Throwable th) {
+                
+            }
+            try {
+                featureref = feature.getReference().toString();
+            } catch(Throwable th) {
+                
+            }
+            this.getLogger().warn("Problems evaluating expression '"+phrase+"' with feature '"+featureref+"'.", ex);
+            return null;
+        }
+    }
+
+    @Override
+    public void set(EditableFeature feature, Object value) {
+        // Do nothing
+    }
+
+    @Override
+    public boolean allowSetting() {
+        return false;
+    }
+
+    @Override
+    public String[] getRequiredFieldNames() {
+        return this.requiredFields;
+    }
+
+    @Override
+    public Expression getExpression() {
+        return this.expression;
+    }
+
+    @Override
+    public String getErrorMessage() {
+        return this.errorMessage;
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("fields", this.requiredFields);
+        state.set("expression", this.expression);
+        state.set("valid", this.valid);
+
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.valid = state.getBoolean("valid");
+        this.expression = (Expression) state.get("expression");
+        this.requiredFields = state.getStringArray("fields");
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("{ (").append(StringUtils.right(super.toString(),9)).append(")\n");
+        builder.append("isValid: ").append(this.isValid()).append(",\n");
+        builder.append("requiredFields: ").append(StringUtils.join(this.requiredFields)).append(",\n");
+        builder.append("errorMessage: \"").append(this.errorMessage).append("\",\n");
+        builder.append("expression: ").append(this.expression).append("\n");
+        builder.append("}");
+        return builder.toString();
+    }
+    
+    private static void registerPersistenceDefinition() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+
+        if (manager.getDefinition(EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME)
+                == null) {
+            DynStruct definition = manager.addDefinition(DefaultFeatureAttributeEmulatorExpression.class,
+                    EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME,
+                    EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME
+                    + " persistent definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldObject("expression")
+                    .setMandatory(true)
+                    .setPersistent(true)
+                    .setClassOfValue(Expression.class);
+            definition.addDynFieldArray("fields")
+                    .setClassOfItems(String.class)
+                    .setMandatory(true)
+                    .setPersistent(true);
+            definition.addDynFieldBoolean("valid")
+                    .setMandatory(true)
+                    .setPersistent(true);
+        }
+    }
+
+    @Override
+    public JsonObject toJson() {
+        return this.toJsonBuilder().build();
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder() {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(this);
+        builder.add("expression",this.expression);
+        builder.add("fields", this.requiredFields);
+        builder.add("valid", this.valid);
+        return builder;
+    }
+
+    @Override
+    public void fromJson(JsonObject json) {
+        this.expression = (Expression) Json.toObject(json, "expression");
+        this.requiredFields = (String[]) Json.toArray(json, "fields", new String[0]);
+        this.valid = json.getBoolean("valid", true);
+    }
+    
+    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
+        
+        public TheJsonSerializer() {
+            
+        }
+
+        @Override
+        public Class getObjectClass() {
+            return DefaultFeatureAttributeEmulatorExpression.class;
+        }
+
+        @Override
+        public Object toObject(JsonObject json) {
+            DefaultFeatureAttributeEmulatorExpression o = new DefaultFeatureAttributeEmulatorExpression();
+            o.fromJson(json);
+            return o;
+        }
+
+        @Override
+        public JsonObjectBuilder toJsonBuilder(Object value) {
+            return ((SupportToJson)value).toJsonBuilder();
+        }
+        
+    }
+
+    public static void selfRegister() {
+        registerPersistenceDefinition();
+        Json.registerSerializer(new TheJsonSerializer());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultEvaluatorFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultEvaluatorFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultEvaluatorFactory.java	(revision 46118)
@@ -0,0 +1,23 @@
+package org.gvsig.fmap.dal.impl.expressionevaluator;
+
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultEvaluatorFactory implements EvaluatorFactory {
+
+    @Override
+    public Evaluator createEvaluator(String phrase) {
+        Evaluator e = new DefaultFeatureExpressionEvaluator(phrase);
+        return e;
+    }
+
+    @Override
+    public String getName() {
+        return "DAL expression evaluator";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureExpressionEvaluator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureExpressionEvaluator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureExpressionEvaluator.java	(revision 46118)
@@ -0,0 +1,269 @@
+package org.gvsig.fmap.dal.impl.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Code.Callable;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl;
+import org.gvsig.expressionevaluator.ExpressionEvaluator;
+import org.gvsig.expressionevaluator.impl.DefaultExpression;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+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.EvaluatorFieldsInfo;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.lang.Cloneable;
+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;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureExpressionEvaluator
+        extends AbstractEvaluator
+        implements ExpressionEvaluator, Cloneable {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureExpressionEvaluator.class);
+    private String storeName;
+
+    private static class DescriptionAdapter implements Description {
+
+        Function function;
+
+        public DescriptionAdapter(Function function) {
+            this.function = function;
+        }
+
+        @Override
+        public String getName() {
+            return this.function.name();
+        }
+
+        @Override
+        public String getDescription() {
+            return this.function.description();
+        }
+
+        @Override
+        public String getTemplate() {
+            return this.function.template();
+        }
+
+        @Override
+        public int getDataTypeCategories() {
+            switch (this.function.group()) {
+                case Function.GROUP_STRING:
+                    return Description.DATATYPE_CATEGORY_STRING;
+                case Function.GROUP_BOOLEAN:
+                    return Description.DATATYPE_CATEGORY_BOOLEAN;
+                case Function.GROUP_DATETIME:
+                    return Description.DATATYPE_CATEGORY_DATETIME;
+                case Function.GROUP_NUMERIC:
+                    return Description.DATATYPE_CATEGORY_NUMBER;
+                case Function.GROUP_OGC:
+                    return Description.DATATYPE_CATEGORY_ALL;
+                default:
+                    return Description.DATATYPE_CATEGORY_ALL;
+            }
+        }
+
+    }
+
+    private FeatureSymbolTable featureSymbolTable;
+    private SymbolTable symbolTable;
+    private Expression expression;
+    private Description[] availableOperators;
+    private Description[] availableFunctions;
+
+    public DefaultFeatureExpressionEvaluator() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        this.symbolTable = manager.createSymbolTable();
+        this.featureSymbolTable = new FeatureSymbolTableImpl();
+        this.symbolTable.addSymbolTable(this.featureSymbolTable);
+        this.availableOperators = null;
+        this.availableFunctions = null;
+    }
+
+    public DefaultFeatureExpressionEvaluator(String source) {
+        this(null, source);
+    }
+
+    public DefaultFeatureExpressionEvaluator(String storeName, String source) {
+        this();
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        this.expression = manager.createExpression();
+        this.expression.setPhrase(source);
+        this.storeName = storeName;
+    }
+
+    public DefaultFeatureExpressionEvaluator(Expression expression) {
+        this(null, expression);
+    }
+
+    public DefaultFeatureExpressionEvaluator(String storeName, Expression expression) {
+        this();
+        this.expression = expression;
+        this.storeName = storeName;
+
+    }
+
+    @Override
+    public String getName() {
+        return "Genereric expression";
+    }
+
+    @Override
+    public String getDescription() {
+        return this.expression.getPhrase();
+    }
+
+    @Override
+    public String getSQL() {
+        return this.expression.getPhrase();
+    }
+
+    @Override
+    public Expression toExpression() {
+        return expression;
+    }
+
+    @Override
+    public SymbolTable toSymbolTable() {
+        return this.symbolTable;
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        this.featureSymbolTable.setFeature((Feature) data);
+        Object v = this.expression.execute(this.symbolTable);
+        return v;
+    }
+
+    @Override
+    public EvaluatorFieldsInfo getFieldsInfo() {
+        final Set<String> names = new HashSet<>();
+        try {
+            this.expression.getCode().accept((Object code) -> {
+                if (code instanceof Code.Identifier) {
+                    Code.Identifier identifier = (Code.Identifier) code;
+                    if (!StringUtils.equalsIgnoreCase(storeName, identifier.name())) {
+                        names.add(identifier.name());
+                    }
+                } else if (code instanceof Code.Callable) {
+                    Callable callable = (Callable) code;
+                    if (callable.name().equals(ExpressionBuilder.FUNCTION_GETATTR)) {
+                        Code p0 = callable.parameters().get(0);
+                        if (!(p0 instanceof Code.Identifier)) {
+                            return;
+                        }
+                        if (!StringUtils.equalsIgnoreCase(storeName, ((Code.Identifier) p0).name())) {
+                            return;
+                        }
+                        Code p1 = callable.parameters().get(1);
+                        if (!(p1 instanceof Code.Constant)) {
+                            return;
+                        }
+                        String s = Objects.toString(((Code.Constant) p1).value(), null);
+                        if (s != null) {
+                            names.add(s);
+                        }
+                    }
+                }
+            });
+            EvaluatorFieldsInfo info = new EvaluatorFieldsInfo();
+            for (String name : names) {
+                info.addFieldValue(name);
+            }
+            return info;
+        } catch (BaseException ex) {
+            throw new RuntimeException("Can't calculate fields information.", ex);
+        }
+    }
+
+    @Override
+    public Description[] getAvailableOperators() {
+        if (availableOperators == null) {
+            List<Description> l = new ArrayList<>();
+            for (Function function : toSymbolTable()) {
+                if (function.isOperator()) {
+                    l.add(new DescriptionAdapter(function));
+                }
+            }
+            this.availableOperators = l.toArray(new Description[l.size()]);
+        }
+        return availableOperators;
+    }
+
+    @Override
+    public Description[] getAvailableFunctions() {
+        if (availableFunctions == null) {
+            List<Description> l = new ArrayList<>();
+            for (Function function : toSymbolTable()) {
+                if (!function.isOperator()) {
+                    l.add(new DescriptionAdapter(function));
+                }
+            }
+            this.availableFunctions = l.toArray(new Description[l.size()]);
+        }
+        return availableFunctions;
+    }
+
+    @Override
+    public Evaluator clone() throws CloneNotSupportedException {
+        DefaultFeatureExpressionEvaluator other = (DefaultFeatureExpressionEvaluator) super.clone();
+        other.expression = this.expression.clone();
+        other.availableFunctions = null;
+        other.availableOperators = null;
+
+        if (this.featureSymbolTable != null) {
+            other.featureSymbolTable = this.featureSymbolTable.clone();
+        }
+        if (this.symbolTable != null) {
+            other.symbolTable = this.symbolTable.clone();
+        }
+        return other;
+    }
+
+    @Override
+    public void saveToState(PersistentState ps) throws PersistenceException {
+        ps.set("expression", expression);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.expression = (Expression) state.get("expression");
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        if (manager.getDefinition("DefaultFeatureExpressionEvaluator") == null) {
+            DynStruct definition = manager.addDefinition(DefaultFeatureExpressionEvaluator.class,
+                    "DefaultFeatureExpressionEvaluator", "DefaultFeatureExpressionEvaluator persistence definition", null, null);
+            definition.addDynFieldObject("expression").setClassOfValue(DefaultExpression.class).setMandatory(false);
+        }
+    }
+
+    @Override
+    public void addSymbolTable(SymbolTable symbolTable) {
+        if (symbolTable != null) {
+            this.symbolTable.addSymbolTable(symbolTable);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java	(revision 46118)
@@ -0,0 +1,181 @@
+package org.gvsig.fmap.dal.impl;
+
+import java.io.File;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.dal.AbstractStoresRepository;
+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 static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_FLAGS;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.util.Bitmask;
+import org.gvsig.tools.util.HasAFile;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DatabaseWorkspaceStoresRepository 
+        extends AbstractStoresRepository
+        implements StoresRepository 
+    {
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
+
+    private final DatabaseWorkspaceManager workspace;
+    private Map<String,DataStoreParameters> repository;
+    
+    public static final int FLAG_CHANGE_PORT_HOST = 1;
+
+    public DatabaseWorkspaceStoresRepository(String name, String label, DatabaseWorkspaceManager workspace) {
+        super(name, label);
+        this.workspace = workspace;
+        this.repository = null;
+    }
+
+    private void evaluateExpressionsInFiles(DataStoreParameters parameters) {
+        DynClass dynClass = parameters.getDynClass();
+        if( dynClass == null ) {
+            return;
+        }
+        File theBaseFolder = this.workspace.getBaseFolder();
+        if( theBaseFolder==null ) {
+            return;
+        }
+        for (DynField dynField : dynClass.getDynFields()) {
+            switch(dynField.getType()) {
+                case DataTypes.FILE:
+                case DataTypes.FOLDER:
+                    File f = (File) parameters.getDynValue(dynField.getName());
+                    if( ExpressionUtils.isDynamicFilename(f) ) {
+                        parameters.setDynValue(dynField.getName(), ExpressionUtils.evaluateFilename(this.workspace, f));
+                    }
+                    break;
+            }
+        }
+        try {
+            if (parameters instanceof HasAFile) {
+                HasAFile params = (HasAFile) parameters;
+                params.setFile(ExpressionUtils.evaluateFilename(params.getFile()));
+            }
+            parameters.validate();
+        } catch (ValidateDataParametersException ex) {
+            LOGGER.warn("Not been able to validate parameters", ex);
+        }
+    }
+
+    private void load() {
+        FeatureStore store = null;
+        try {
+            this.repository = new HashMap<>();
+            final DataManager dataManager = DALLocator.getDataManager();
+            store = this.workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY);
+            DataStoreParameters storeParameters = store.getParameters();
+            store.accept(new Visitor() {
+                @Override
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    Feature f = (Feature) obj;
+                    String name = f.getString(FIELD_REPOSITORY_NAME);
+                    byte[] data = f.getByteArray(FIELD_REPOSITORY_PARAMETERS);
+                    // Compatibilidad con antiguos repositorios sin falgs
+                    int flags = 0;
+                    if (f.getType().getAttributeDescriptor(FIELD_REPOSITORY_FLAGS)!=null) {
+                        flags = f.getInt(FIELD_REPOSITORY_FLAGS);
+                    }
+                    DataStoreParameters params = dataManager.createStoreParameters(data);
+                    if( params==null ) {
+                        LOGGER.warn("Can't restore parameters from repository entry '"+name+"'.");
+                        return;
+                    }
+                    processParameters(params, storeParameters, Bitmask.createBitmask(flags));
+                    evaluateExpressionsInFiles(params);
+                    repository.put(name, params);
+                }
+            });
+        } catch (Exception ex) {
+            LOGGER.warn("Can't load repository information", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+    
+    private void processParameters(DataStoreParameters params, DataStoreParameters storeParameters, Bitmask mask) {
+        if (mask.isEmpty()) {
+            return;
+        }
+        if (mask.isSetBit(FLAG_CHANGE_PORT_HOST)) {
+            try {
+                Object host = storeParameters.getDynValue("host");
+                Object port = storeParameters.getDynValue("port");
+                params.setDynValue("host", host);
+                params.setDynValue("port", port);
+            } catch (Exception ex) {
+                throw new RuntimeException("Unable to set host and port from actual connection", ex);
+            }
+        }
+    }
+
+    @Override
+    protected DataStoreParameters getMyParameters(String name) {
+        if( this.repository==null ) {
+            this.load();
+        }
+        DataStoreParameters params = this.repository.get(name);
+        if (params!=null) {
+            return params;
+        }
+        for (String key : this.repository.keySet()) {
+            if (StringUtils.equalsIgnoreCase(key, name)) {
+                return this.repository.get(key);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected boolean isEmptyMyRepository() {
+        if( this.repository==null ) {
+            this.load();
+        }
+        return this.repository.isEmpty();
+    }
+
+    @Override
+    protected int getMySize() {
+        if( this.repository==null ) {
+            this.load();
+        }
+        return this.repository.size();
+    }
+
+    @Override
+    protected UnmodifiableBasicSet<String> getMyKeySet() {
+        if( this.repository==null ) {
+            this.load();
+        }
+        return new UnmodifiableBasicSetAdapter<>(this.repository.keySet());
+    }
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java	(revision 46118)
@@ -0,0 +1,814 @@
+package org.gvsig.fmap.dal.impl;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import org.apache.commons.collections4.map.LRUMap;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.impl.DefaultExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
+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.DataTypes;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_CONFIGURATION_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_CONFIGURATION_VALUE;
+import org.gvsig.fmap.dal.StoresRepository;
+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 static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_FLAGS;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_RESOURCE;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_CONFIGURATION;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_CONFIGURATION_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_REPOSITORY;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_REPOSITORY_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.resourcesstorage.FilesResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.CachedValue;
+import org.gvsig.tools.util.FileTools;
+import org.gvsig.tools.util.HasAFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultDatabaseWorkspaceManager 
+        extends AbstractSymbolTable
+        implements DatabaseWorkspaceManager
+    {
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
+
+    private static final String CONFIG_NAME_BASEFOLDER = "BASEFOLDER";
+    private static final String CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH = "ALTERNATIVE_RESOURCES_PATH";
+    
+    private class CachedConfigValue extends CachedValue<String> {
+
+        private final String name;
+      
+        public CachedConfigValue(String name, String value) {
+          this.setValue(value);
+          this.name = name;
+        }
+      
+        public CachedConfigValue(String name, String value, long expireTime) {
+          this.name = name;
+          this.setValue(value);
+          this.setExpireTime(expireTime);
+        }
+      
+        @Override
+        protected void reload() {
+            String s = DefaultDatabaseWorkspaceManager.this.getConfigValue(name);
+            if( StringUtils.isBlank(s) ) {
+                this.setValue(null);
+            } else {
+                this.setValue(s);
+            }
+        }
+    }
+    
+    private final DataServerExplorerParameters serverParameters;
+    private Boolean existsConfiguration = null;
+    private StoresRepository storesRepository;
+    private Mutable<File> alternativeResourcesFolder = null;
+    private CachedValue<File> baseFolder;
+    private Map<String,CachedConfigValue> cachedConfigValues;
+    
+    public DefaultDatabaseWorkspaceManager(DataServerExplorerParameters serverParameters) {
+        this.serverParameters = serverParameters;
+        this.baseFolder = new CachedValue() {
+          @Override
+          protected void reload() {
+            String s = DefaultDatabaseWorkspaceManager.this.getConfigValue(CONFIG_NAME_BASEFOLDER);
+            if( StringUtils.isBlank(s) ) {
+                this.setValue(null);
+            } else {
+                this.setValue(new File(s));
+            }
+          }
+          
+        };
+        this.baseFolder.setExpireTime(20000); // 20seg
+        this.cachedConfigValues = new LRUMap<>(20, 20);
+        ExpressionEvaluatorLocator.getExpressionEvaluatorManager().populateSymbolTable(this);
+        
+    }
+
+    @Override
+    public String toString() {
+        return this.getLabel();
+    }
+    
+    @Override
+    public String getId() {
+        String id = this.get(CONFIG_NAME_STORESREPOSITORYID);
+        return id;
+    }
+    
+    @Override
+    public String getLabel() {
+        String label = this.get(CONFIG_NAME_STORESREPOSITORYLABEL);
+        return label;
+    }
+
+    @Override
+    public DatabaseWorkspaceManager getValue() {
+        return this;
+    }
+    
+    @Override
+    public boolean existsTable(int tableid) {
+        switch(tableid) {
+            case TABLE_RESOURCES:
+                return this.existsTable(TABLE_RESOURCES_NAME);
+            case TABLE_REPOSITORY:
+                return this.existsTable(TABLE_REPOSITORY_NAME);
+            case TABLE_CONFIGURATION:
+                return this.existsTable(TABLE_CONFIGURATION_NAME);
+            default:
+                throw new IllegalArgumentException("Invalid table identitier "+tableid);
+        }
+    }
+    
+    @Override
+    public void createTable(int tableid) {
+        switch(tableid) {
+            case TABLE_RESOURCES:
+                createTableResources();
+                break;
+            case TABLE_REPOSITORY:
+                createTableRepository();
+                break;
+            case TABLE_CONFIGURATION:
+                createTableConfiguration();
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid table identitier "+tableid);
+        }
+    }
+    
+    @Override
+    public void dropTable(int tableid) {
+        switch(tableid) {
+            case TABLE_RESOURCES:
+                this.dropTable(TABLE_RESOURCES_NAME);
+                break;
+            case TABLE_REPOSITORY:
+                this.dropTable(TABLE_REPOSITORY_NAME);
+                break;
+            case TABLE_CONFIGURATION:
+                this.dropTable(TABLE_CONFIGURATION_NAME);
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid table identitier "+tableid);
+        }
+    }
+    
+    @Override
+    public FeatureStore getTable(int tableid) {
+        switch(tableid) {
+            case TABLE_RESOURCES:
+                return this.getTable(TABLE_RESOURCES_NAME);
+            case TABLE_REPOSITORY:
+                return this.getTable(TABLE_REPOSITORY_NAME);
+            case TABLE_CONFIGURATION:
+                return this.getTable(TABLE_CONFIGURATION_NAME);
+            default:
+                throw new IllegalArgumentException("Invalid table identitier "+tableid);
+        }
+    }
+    
+    @Override
+    public DataServerExplorer getServerExplorer() {
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            DataServerExplorer server = dataManager.openServerExplorer(
+                    this.serverParameters.getProviderName(),
+                    this.serverParameters
+            );
+            return server;
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't get server explorer for workspace '"+Objects.toString(this.serverParameters)+"'", ex);
+        }
+    }
+    
+    private boolean existsTable(String tableName) {
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            for (DataStoreParameters params : server.list()) {
+                String theTableName = (String) params.getDynValue("Table");
+                if( StringUtils.equals(theTableName, tableName) ) {
+                    return true;
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't check if the table '"+tableName+"' exists.",ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+        return false;
+    }
+
+    private FeatureStore getTable(String tableName) {
+        DataServerExplorer server = null;
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            server = this.getServerExplorer();
+            DataStoreParameters params = server.get(tableName);
+            if( params!=null ) {
+                FeatureStore store = (FeatureStore) dataManager.openStore(
+                        params.getProviderName(), 
+                        params,
+                        true
+                );
+                return store;
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't open table '"+tableName+"'.",ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+        return null;
+    }
+
+    private void dropTable(String tableName) {
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            DataStoreParameters params = server.get(tableName);
+            if( params!=null ) {
+                server.remove(params);
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't drop table '"+tableName+"'.",ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+    }
+    
+    public void createTableResources(String tableName) throws RuntimeException {
+        // H2Spatial crea esta table a mano. 
+        // Si tocamos algo aqu� hay que modificar 
+        // la creacion de esta tabla en el helper de H2
+
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            NewFeatureStoreParameters params = (NewFeatureStoreParameters) server.getAddParameters(tableName);
+            EditableFeatureType ft = params.getDefaultFeatureType();
+            ft.add(FIELD_RESOURCES_NAME, DataTypes.STRING, 150)
+                    .setAllowNull(false)
+                    .setIsPrimaryKey(true);
+            ft.add(FIELD_RESOURCES_RESOURCE, DataTypes.BYTEARRAY)
+                    .setAllowNull(true);
+            server.add(tableName, params, false);
+        } catch (Exception ex) {
+            LOGGER.debug("Can't create resources table '"+tableName+"'.",ex);
+            throw new RuntimeException("Can't create resources table '"+tableName+"'.", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+    }
+
+    private void createTableResources() {    
+        createTableResources(TABLE_RESOURCES_NAME);
+    }
+    
+    public void createTableRepository(String tableName) throws RuntimeException {
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            NewFeatureStoreParameters params = (NewFeatureStoreParameters) server.getAddParameters(tableName);
+            EditableFeatureType ft = params.getDefaultFeatureType();
+            ft.add(FIELD_REPOSITORY_NAME, DataTypes.STRING, 150)
+                    .setAllowNull(false)
+                    .setIsPrimaryKey(true);
+            ft.add(FIELD_REPOSITORY_PARAMETERS, DataTypes.BYTEARRAY)
+                    .setAllowNull(true);
+            ft.add(FIELD_REPOSITORY_FLAGS, DataTypes.INT)
+                    .setAllowNull(false)
+                    .setDefaultValue(0);
+            server.add(tableName, params, false);
+        } catch (Exception ex) {
+            LOGGER.debug("Can't create repository table '"+tableName+"'.",ex);
+            throw new RuntimeException("Can't create repository table '"+tableName+"'.", ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+    }
+
+    private void createTableRepository() {
+        createTableRepository(TABLE_REPOSITORY_NAME);
+    }
+    
+    private void createTableConfiguration() {
+        // H2Spatial crea esta table a mano. 
+        // Si tocamos algo aqu� hay que modificar 
+        // la creacion de esta tabla en el helper de H2
+        String tableName = TABLE_CONFIGURATION_NAME;
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            NewFeatureStoreParameters params = (NewFeatureStoreParameters) server.getAddParameters(tableName);
+            EditableFeatureType ft = params.getDefaultFeatureType();
+            ft.add(FIELD_CONFIGURATION_NAME, DataTypes.STRING, 200)
+                    .setAllowNull(false)
+                    .setIsPrimaryKey(true);
+            ft.add(FIELD_CONFIGURATION_VALUE, DataTypes.STRING, 10240)
+                    .setAllowNull(true);
+            server.add(tableName, params, false);
+            this.existsConfiguration = null;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't create table '"+tableName+"'.",ex);
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+    }
+    
+    private boolean existsConfiguration() {
+        if( this.existsConfiguration==null ) {
+            this.existsConfiguration = this.existsTable(TABLE_CONFIGURATION_NAME);
+        }
+        return this.existsConfiguration;
+    }
+
+    @Override
+    public String get(String name) {
+        try {
+            if( !this.existsConfiguration() ) {
+                return null;
+            }
+            if( StringUtils.equalsIgnoreCase(name, CONFIG_NAME_BASEFOLDER) ) {
+              return this.baseFolder.get().toString();
+            }
+            CachedConfigValue cachedValue = this.cachedConfigValues.get(name);
+            if( cachedValue != null ) {
+              return cachedValue.get();
+            }
+            String value = this.getConfigValue(name);
+            this.cachedConfigValues.put(name, new CachedConfigValue(name, value, 15000));
+            return value;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration value '"+name+"'", ex);
+            return null;
+        }
+    }
+    
+    private String getConfigValue(String name) {
+        FeatureStore store = null;
+        try {
+            if( !this.existsConfiguration() ) {
+                return null;
+            }
+            store = this.getTable(TABLE_CONFIGURATION);
+            if( store == null ) {
+                return null;
+            }
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            String filter = builder.eq(
+                    builder.column(FIELD_CONFIGURATION_NAME),
+                    builder.constant(name)
+            ).toString();
+            Feature feature = store.findFirst(filter);
+            if( feature == null ) {
+                return null;
+            }
+            String value = feature.getString(FIELD_CONFIGURATION_VALUE);
+            value = ExpressionUtils.evaluateDynamicText(this, value);
+            return value;
+            
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration value '"+name+"'", ex);
+            return null;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public boolean set(String name, String value) {
+        FeatureStore store = null;
+        try {
+            if( !this.existsConfiguration() ) {
+                return false;
+            }
+            store = this.getTable(TABLE_CONFIGURATION);
+            if( store == null ) {
+                return false;
+            }
+            store.edit();
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            String filter = builder.eq(
+                    builder.column(FIELD_CONFIGURATION_NAME),
+                    builder.constant(name)
+            ).toString();
+            Feature feature = store.findFirst(filter);
+            EditableFeature efeature;
+            if (feature == null) {
+                efeature = store.createNewFeature();
+                efeature.set(FIELD_CONFIGURATION_NAME, name);
+                efeature.set(FIELD_CONFIGURATION_VALUE, value);
+                store.insert(efeature);
+            } else {
+                efeature = feature.getEditable();
+                efeature.set(FIELD_CONFIGURATION_VALUE, value);
+                store.update(efeature);
+            }
+            store.finishEditing();
+            if( this.cachedConfigValues.containsKey(name) ) {
+              this.cachedConfigValues.get(name).set(value);
+            }
+            return true;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't write configuration value '"+name+"'", ex);
+            return false;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public StoresRepository getStoresRepository() {
+        if( this.storesRepository==null ) {
+            String id = this.get(CONFIG_NAME_STORESREPOSITORYID);
+            String label = this.get(CONFIG_NAME_STORESREPOSITORYLABEL);
+            this.storesRepository = new DatabaseWorkspaceStoresRepository(
+                    id,
+                    label,
+                    this
+            );
+        }
+        return this.storesRepository;
+    }
+    
+    public boolean contains(DataStoreParameters parameters) {
+        boolean c = this.getStoresRepository().contains(parameters);
+        return c;
+    }
+
+    @Override
+    public boolean canAnonymousUserWriteInTheTables() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public File getBaseFolder() {
+        return this.baseFolder.get();
+    }
+    
+    @Override
+    public void setBaseFolder(File baseFolder) {
+        this.baseFolder.set(baseFolder);
+        this.set(CONFIG_NAME_BASEFOLDER, baseFolder.toString());
+    }
+
+    private File getWorkspaceFile() {
+        if( this.serverParameters instanceof HasAFile ) {
+            return ((HasAFile)this.serverParameters).getFile();
+        }
+        return null;
+    }
+    
+    private DataStoreParameters replaceInFilesToUseBaseFolder(DataStoreParameters parameters) {
+        DynClass dynClass = parameters.getDynClass();
+        if( dynClass == null ) {
+            return parameters;
+        }
+        File theBaseFolder = this.getBaseFolder();
+        File wsfile = getWorkspaceFile();
+        if( theBaseFolder==null && wsfile==null ) {
+            return parameters;
+        }
+        DataStoreParameters replaced = parameters;
+        for (DynField dynField : dynClass.getDynFields()) {
+            switch(dynField.getType()) {
+                case DataTypes.FILE:
+                case DataTypes.FOLDER:
+                    File f = (File) parameters.getDynValue(dynField.getName());
+                    File newf = null;
+                    if( f!=null ) {
+                        if( wsfile!=null ) {
+                            if( wsfile.equals(f) ) {
+                                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                                newf = ExpressionUtils.createDynamicFile(
+                                    builder.ifnull(
+                                        builder.variable("WORKSPACEFILE"), 
+                                        builder.constant(f.toString()), 
+                                        builder.variable("WORKSPACEFILE")
+                                    )
+                                );
+                            }
+                        }
+                        if( newf==null ) {
+                            File frel = FileTools.relativizeFile(theBaseFolder, f);
+                            if( frel!=f ) {
+                                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                                newf = ExpressionUtils.createDynamicFile(
+                                    builder.concat(
+                                            builder.variable(CONFIG_NAME_BASEFOLDER), 
+                                            builder.constant("/"), 
+                                            builder.variable(frel.getPath())
+                                    )
+                                );
+                            }
+                        }
+                        if( newf!=null ) {
+                            if( replaced == parameters ) {
+                                replaced = (DataStoreParameters) replaced.getCopy();
+                            }
+                            replaced.setDynValue(dynField.getName(), newf);
+                        }
+                    }
+                    break;
+            }
+        }
+        return replaced;
+    }
+    
+    @Override
+    public boolean writeStoresRepositoryEntry(String name, DataStoreParameters parameters) {
+        FeatureStore store = null;
+        try {
+            parameters = this.replaceInFilesToUseBaseFolder(parameters);
+            byte[] data = parameters.toByteArray();
+            if( data == null ) {
+                throw new RuntimeException("Can't convert parameters to byte array.");
+            }
+            store = this.getTable(TABLE_REPOSITORY);
+            store.edit();
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            String filter = builder.eq(
+                    builder.column(FIELD_REPOSITORY_NAME),
+                    builder.constant(name)
+            ).toString();
+            Feature feature = store.findFirst(filter);
+            EditableFeature efeature;
+            if (feature == null) {
+                efeature = store.createNewFeature();
+                efeature.set(FIELD_REPOSITORY_NAME, name);
+                efeature.set(FIELD_REPOSITORY_PARAMETERS, data);
+                // algun set sobre los flags?
+                efeature.set(FIELD_REPOSITORY_FLAGS, 0);
+                store.insert(efeature);
+            } else {
+                efeature = feature.getEditable();
+                efeature.set(FIELD_REPOSITORY_PARAMETERS, data);
+                store.update(efeature);
+            }
+            store.finishEditing();
+            return true;
+            
+        } catch (Exception ex) {
+            LOGGER.warn("Can't save entry '"+name+"' in repository information", ex);
+            return false;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public boolean isValid() {
+      try {
+        String id = this.get(CONFIG_NAME_STORESREPOSITORYID);
+        if( StringUtils.isBlank(id) ) {
+            return false;
+        }
+        return true;
+      } catch(Exception ex) {
+        return false;
+      }
+    }
+
+    @Override
+    public boolean isValidStoresRepository() {
+        if( !this.isValid() ) {
+            return false;
+        }
+        if( !this.existsTable(TABLE_REPOSITORY_NAME) ) {
+            return false;
+        }
+        return true;
+        
+    }
+    
+    @Override
+    public ResourcesStorage getAlternativeResourcesStorage(String tableName) {
+        if( this.alternativeResourcesFolder==null ) {
+            this.alternativeResourcesFolder = new MutableObject<>(null);
+            String resourcesPath = this.get(CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH);
+            if( !StringUtils.isBlank(resourcesPath) ) {
+                try {
+                    resourcesPath = (String) ExpressionUtils.evaluate(resourcesPath);
+                } catch(Throwable th) {
+                    // Do nothing
+                }
+                File f = new File(resourcesPath);
+                if( f.exists() ) {
+                    this.alternativeResourcesFolder.setValue(f);
+                }
+            }
+        }
+        File folder = this.alternativeResourcesFolder.getValue();
+        if( folder==null ) {
+            return null;
+        }
+        String resourcesRoot = folder.getAbsolutePath().replace("\\","/") + "/" + tableName;
+        ResourcesStorage resources = new FilesResourcesStorage(resourcesRoot);
+        return resources;
+    }
+
+    @Override
+    public void drop() {
+        if( !this.existsTable(TABLE_RESOURCES) ) {
+            this.dropTable(TABLE_RESOURCES);
+        }
+        if( !this.existsTable(TABLE_CONFIGURATION) ) {
+            this.dropTable(TABLE_CONFIGURATION);
+        }
+        if( !this.existsTable(TABLE_REPOSITORY) ) {
+            this.dropTable(TABLE_REPOSITORY);
+        }
+    }
+    
+   
+    @Override
+    public void create(String id, String description) {
+        if( !this.existsTable(TABLE_RESOURCES) ) {
+            this.createTable(TABLE_RESOURCES);
+        }
+        if( !this.existsTable(TABLE_CONFIGURATION) ) {
+            this.createTable(TABLE_CONFIGURATION);
+        }
+        if( !this.existsTable(TABLE_REPOSITORY) ) {
+            this.createTable(TABLE_REPOSITORY);
+        }
+        this.set(CONFIG_NAME_STORESREPOSITORYID,id);
+        this.set(CONFIG_NAME_STORESREPOSITORYLABEL,description);
+        this.set(CONFIG_CAN_ANONYMOUS_USER_WRITE_IN_THE_TABLES,"true");
+        this.set(CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH,"");
+        File theBaseFolder = this.getBaseFolder();
+        if( this.serverParameters instanceof HasAFile && theBaseFolder==null ) {
+            File f = ((HasAFile)this.serverParameters).getFile();
+            if( f != null ) {
+                theBaseFolder = f.getParentFile();
+                this.setBaseFolder(theBaseFolder);
+            } else {
+                this.set(CONFIG_NAME_BASEFOLDER,"");
+            }
+        } else {
+            this.set(CONFIG_NAME_BASEFOLDER,"");
+        }
+    }
+
+    @Override
+    public boolean exists(String name) {
+        FeatureStore store = null;
+        try {
+            if( StringUtils.equalsIgnoreCase(name, "WORKSPACEFILE") ) {
+                File wsfile = getWorkspaceFile();
+                if( wsfile!=null ) {
+                    return true;
+                }
+            }
+            if (this.existsConfiguration()) {
+              if( StringUtils.equalsIgnoreCase(name, CONFIG_NAME_BASEFOLDER) ) {
+                return true;
+              }
+              if( this.cachedConfigValues.containsKey(name) ) {
+                return true;
+              }
+              store = this.getTable(TABLE_CONFIGURATION);
+              if (store != null) {
+                  ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                  String filter = builder.eq(
+                          builder.column(FIELD_CONFIGURATION_NAME),
+                          builder.constant(name)
+                  ).toString();
+                  Feature feature = store.findFirst(filter);
+                  if (feature != null) {
+                      String value = feature.getString(FIELD_CONFIGURATION_VALUE);
+                      value = ExpressionUtils.evaluateDynamicText(this, value);
+                      this.cachedConfigValues.put(name, new CachedConfigValue(name, value, 15000));
+                      return true;
+                  }
+                }
+            }
+            return super.exists(name);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration value '" + name + "'", ex);
+            return false;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public Object value(String name) {
+        if( StringUtils.equalsIgnoreCase(name, "WORKSPACEFILE") ) {
+            File wsfile = getWorkspaceFile();
+            if( wsfile!=null ) {
+                return wsfile.toString();
+            }
+        }
+        String v = this.get(name);
+        if( v!=null ) {
+            return v;
+        }
+        return super.value(name);
+    }
+
+    @Override
+    public Collection<String> localvariables() {
+        FeatureStore store = null;
+        try {
+            final List<String> theVars = new ArrayList<>();
+            if (this.existsConfiguration()) {
+                store = this.getTable(TABLE_CONFIGURATION);
+                if (store != null) {
+                    store.accept((Object obj) -> {
+                      Feature feature = (Feature) obj;
+                      theVars.add(feature.getString(FIELD_CONFIGURATION_NAME));
+                    });
+                }
+            }
+            return theVars;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration variables", ex);
+            return Collections.EMPTY_LIST;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        DataServerExplorer server = null;
+        try {
+            server = this.getServerExplorer();
+            ResourcesStorage resourcesStorage = server.getResourcesStorage();
+            return resourcesStorage;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get resorces storage.",ex);
+            return null;
+        } finally {
+            DisposeUtils.disposeQuietly(server);
+        }
+    }
+    
+    public void fix() {
+      if( !(this.serverParameters instanceof HasAFile) ) {
+        return;
+      }
+      HasAFile f = (HasAFile) this.serverParameters;
+      if( f.getFile()==null ) {
+        return;
+      }
+      if( !this.isValid() ) {
+        return;
+      }
+      this.set(CONFIG_NAME_BASEFOLDER, f.getFile().getParent());
+    }
+
+    @Override
+    public void connect() {
+      DataManager manager = DALLocator.getDataManager();
+      this.fix();
+      manager.addDatabaseWorkspace(this);
+    }
+    
+    @Override
+    public void disconnect() {
+      DataManager manager = DALLocator.getDataManager();
+      manager.removeDatabaseWorkspace(this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/srs/SRSJsonSerializer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/srs/SRSJsonSerializer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/srs/SRSJsonSerializer.java	(revision 46118)
@@ -0,0 +1,78 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.srs;
+
+import javax.json.JsonObject;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonManager;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.util.IsApplicable;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class SRSJsonSerializer implements JsonManager.JsonSerializer, IsApplicable {
+
+    @Override
+    public Class getObjectClass() {
+        return IProjection.class;
+    }
+
+    @Override
+    public Object toObject(JsonObject json) {
+        IProjection proj = CRSFactory.getCRS(json.getString("fullcode"));
+        return proj;
+    }
+
+    @Override
+    public JsonObjectBuilder toJsonBuilder(Object value) {
+        IProjection proj = (IProjection) value;
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add_class(IProjection.class);
+        builder.add("abrev", proj.getAbrev());
+        builder.add("fullcode", proj.getFullCode());
+        return builder;
+    }
+
+    @Override
+    public boolean isApplicable(Object... args) {
+        if( args[0] instanceof IProjection) {
+            return true;
+        }
+        if( !(args[0] instanceof JsonObject) ) {
+            return false;
+        }
+        JsonObject json = (JsonObject) args[0];
+        String className = json.getString(JsonManager.ATTRIBUTE_NAME_CLASS, null);
+        return StringUtils.equalsIgnoreCase(className, IProjection.class.getName());
+    }
+
+    public static void selfRegister() {
+        Json.registerSerializer(new SRSJsonSerializer());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/pom.xml	(revision 46118)
@@ -0,0 +1,197 @@
+<?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.344</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.tools.lib</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.apache.commons</groupId>
+            <artifactId>commons-collections4</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>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+            <scope>test</scope>
+        </dependency>    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.se</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+            <scope>test</scope>
+        </dependency>      
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.lib.proj4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.geometry.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.glassfish</groupId>
+            <artifactId>javax.json</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.lib.impl</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.util.api</artifactId>
+            <scope>compile</scope>
+        </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>
+                       <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!-- Skip test execution ? -->
+                    <skipTests>false</skipTests>
+                    <!-- Ignore test execution failure ? -->
+                    <testFailureIgnore>false</testFailureIgnore>
+                    <excludes> 
+            <exclude>**/SQLBuilderTest.java</exclude>
+          </excludes>
+                </configuration>
+            </plugin>
+        
+            <!-- Skip test compilation ? -->
+            <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>false</skip>
+                        </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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/pom.xml	(revision 46118)
@@ -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.fmap.dal.tilecache</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>pom</packaging>    
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.344</version>
+    </parent>  
+
+    <modules>
+        <module>org.gvsig.fmap.dal.tilecache.raster</module>
+    </modules>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.raster.tilecache.provider.TileCacheLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheMetadata.xml	(revision 46118)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!--
+Definitions of metadata fields of a Tile Cache file.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="TileCache" namespace="Metadata">
+      <extends>
+      	<class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a Tile Cache store</description>
+      <fields>
+      </fields>
+    </class>
+
+        <class name="MemoryTileCache" namespace="Metadata">
+      <extends>
+        <class namespace="Metadata" name="SpatialProvider"/>
+      </extends>
+      <description>Metadata of a Memory Tile Cache store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheParameters.xml	(revision 46118)
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="TileCacheStoreProviderParameters">
+       <extends>
+      	<class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a tile cache file</description>
+      <fields>
+        <field name="rootFolder" type="folder" mandatory="true" group="Basic">
+          <description>Path to the default folder where gvSig stores the cache.</description>
+        </field>
+        <field name="folder" type="folder" mandatory="false" group="Basic">
+          <description>Path to an alternative folder where to save the cache. If this path is assigned, the rootFolder field will be ignored.</description>
+        </field>
+        <field name="wldParams" type="object" mandatory="false" group="Basic" classOfValue="java.util.List">
+          <description>Info given by a wld file with geolocation</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="MemoryTileCacheStoreProviderParameters">
+       <extends>
+        <class namespace="dal" name="ProviderParameters"/>
+      </extends>
+      <description>Store the parameters need to open a memory tile cache</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileStructImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileStructImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileStructImage.java	(revision 46118)
@@ -0,0 +1,90 @@
+package org.gvsig.raster.tilecache.provider;
+
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface TileStructImage {
+
+    /**
+     * @param pixelSize
+     * @return The appropiate zoom level for the pizelSize
+     */
+    public abstract int getZoomLvlForPixelSize(double pixelSize);
+
+    /**
+     * Get band from the required tile.
+     * Return null on fails.
+     *
+     * @param bandNumber
+     * @param zoomLevel
+     * @param structRow
+     * @param structCol
+     * @return Band
+     */
+    public abstract Band fetchTile(int bandNumber, int zoomLevel, int structRow, int structCol);
+
+    /**
+     * @return the band number
+     */
+    public abstract int getBandNumber();
+
+    /**
+     * @return the data types
+     */
+    public abstract int[] getDataTypes();
+
+    /**
+     * @param zoomLevel
+     * @return rows per zoom level
+     */
+    public abstract int getRows(int zoomLevel);
+
+    /**
+     * @param zoomLevel
+     * @return columns per zoom level
+     */
+    public abstract int getColumns(int zoomLevel);
+
+    /**
+     * @return envelope per zoom level
+     */
+    public abstract Envelope getEnvelope();
+
+    /**
+     * @return the rows number per tile
+     */
+    public abstract int getRowsPerTile();
+
+    /**
+     * @return the columns number per tile
+     */
+    public abstract int getColumnsPerTile();
+
+    /**
+     * @return the provider name
+     */
+    public abstract String getProviderName();
+
+    /**
+     * @return the color interpretation
+     */
+    public abstract Object getColorInterpretation();
+
+    /**
+     * @return the color table
+     */
+    public abstract Object getColorTable();
+
+    /**
+     * @return the legend
+     */
+    public abstract Object getLegend();
+
+    public abstract TileStruct getTileStruct();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderParameters.java	(revision 46118)
@@ -0,0 +1,121 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * Parameters to create a TileCache Provider
+ * @author dmartinezizquierdo
+ *
+ */
+public class MemoryTileCacheStoreProviderParameters extends AbstractDataParameters implements
+OpenRasterStoreParameters{
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryTileCacheStoreProviderParameters.class);
+
+    public static final String PARAMETERS_DEFINITION_NAME = "MemoryTileCacheStoreProviderParameters";
+    public static final String CRS_PARAMTER_NAME = "crs";
+
+
+    private DelegatedDynObject parameters;
+
+    /**
+     * Constructor
+     */
+    public MemoryTileCacheStoreProviderParameters() {
+        this(PARAMETERS_DEFINITION_NAME);
+    }
+
+    protected MemoryTileCacheStoreProviderParameters(String parametersDefinitionName) {
+        this(parametersDefinitionName, TileCacheStoreProvider.NAME);
+    }
+
+
+    /**
+     * Constructor
+     * @param parametersDefinitionName
+     * @param name
+     */
+    public MemoryTileCacheStoreProviderParameters(String parametersDefinitionName, String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    @Override
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    @Override
+    public boolean isValid() {
+        return (this.getCRS() != null);
+    }
+
+    @Override
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+
+    /**
+     * Sets CRS
+     * @param crsCode
+     */
+    public void setCRS(String crsCode) {
+        IProjection crs=CRSFactory.getCRS(crsCode);
+        setDynValue(CRS_PARAMTER_NAME, crs);
+    }
+
+    /**
+     * Sets CRS
+     * @param crs
+     */
+    public void setCRS(IProjection crs) {
+        setDynValue(CRS_PARAMTER_NAME, crs);
+    }
+
+
+    /**
+     * Gets CRS
+     * @return IProjection
+     */
+    public IProjection getCRS() {
+        return (IProjection) getDynValue(CRS_PARAMTER_NAME);
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheLibrary.java	(revision 46118)
@@ -0,0 +1,120 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+
+package org.gvsig.raster.tilecache.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DALFileLibrary;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+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;
+
+/**
+ * Jimi Library to register provider commponents
+ * @author dmartinezizquierdo
+ *
+ */
+public class TileCacheLibrary extends AbstractLibrary {
+
+    public static int                 DEFAULT_LEVELS       = 25;
+    public static int                 DEFAULT_TILEWIDTH    = 256;
+    public static int                 DEFAULT_TILEHEIGHT   = 256;
+
+
+    @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(
+				TileCacheStoreProviderParameters.PARAMETERS_DEFINITION_NAME,
+				TileCacheStoreProviderParameters.class, "TileCacheParameters.xml");
+		try {
+			FileHelper.registerMetadataDefinition(
+					TileCacheStoreProvider.METADATA_DEFINITION_NAME,
+					TileCacheStoreProvider.class, "TileCacheMetadata.xml");
+		} catch (MetadataException e) {
+			exs.add(e);
+		}
+
+        FileHelper.registerParametersDefinition(MemoryTileCacheStoreProviderParameters.PARAMETERS_DEFINITION_NAME,
+            MemoryTileCacheStoreProviderParameters.class, "TileCacheParameters.xml");
+        try {
+            FileHelper.registerMetadataDefinition(MemoryTileCacheStoreProvider.METADATA_DEFINITION_NAME,
+                MemoryTileCacheStoreProvider.class, "TileCacheMetadata.xml");
+        } catch (MetadataException e) {
+            exs.add(e);
+        }
+
+		DataManagerProviderServices dataman = DALSPILocator.getDataManagerProviderServices();
+
+
+		try {
+            if (!dataman.getStoreProviders()
+                .contains(TileCacheStoreProvider.NAME)) {
+                dataman.registerStoreProviderFactory(
+                    new TileCacheStoreProviderFactory(
+                        TileCacheStoreProvider.NAME,
+                        TileCacheStoreProvider.DESCRIPTION));
+            }
+            if (!dataman.getStoreProviders()
+                .contains(MemoryTileCacheStoreProvider.NAME)) {
+                dataman.registerStoreProviderFactory(
+                    new MemoryTileCacheStoreProviderFactory(
+                        MemoryTileCacheStoreProvider.NAME,
+                        MemoryTileCacheStoreProvider.DESCRIPTION));
+            }
+		} catch (RuntimeException e) {
+			exs.add(e);
+		}
+
+//		try {
+//			DALFileLocator.getFilesystemServerExplorerManager()
+//					.registerProvider(TileCacheStoreProvider.NAME,
+//					    TileCacheStoreProvider.DESCRIPTION,
+//							TileCacheFileSystemServerProvider.class);
+//		} catch (RuntimeException e) {
+//			exs.add(e);
+//		}
+
+		if (exs.size() > 0) {
+			throw new LibraryException(this.getClass(), exs);
+		}
+	}
+}
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheFileSystemServerProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheFileSystemServerProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheFileSystemServerProvider.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.io.File;
+
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.RemoveException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
+
+
+public class TileCacheFileSystemServerProvider extends AbstractFilesystemServerExplorerProvider {
+
+    public TileCacheFileSystemServerProvider() {
+        super(TileCacheStoreProvider.NAME, TileCacheStoreProvider.DESCRIPTION);
+    }
+    
+    public int getMode() {
+        return DataServerExplorer.MODE_RASTER;
+    }
+
+    @Override
+    public void remove(DataStoreParameters parameters) throws RemoveException {
+        //FIXME
+//        TileCacheStoreProviderParameters params = (TileCacheStoreProviderParameters) parameters;
+//        File file = params.getFile();
+//        if (!file.exists()) {
+//            throw new RemoveException(this.getDataStoreProviderName(),
+//                    new FileNotFoundException(params.getFile()));
+//        }
+//        if (!file.delete()) {
+//            throw new RemoveException(this.getDataStoreProviderName(),
+//                    new IOException("Error deleting file: "+file.getName()));
+//        }
+
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        return false;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/FileTileCacheStructImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/FileTileCacheStructImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/FileTileCacheStructImage.java	(revision 46118)
@@ -0,0 +1,606 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.gvsig.fmap.dal.DALFileLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ServerExplorerAddException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.raster.NewRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterSet;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+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.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.spi.DefaultTileStruct;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+
+/**
+ * Represents a tiled image
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class FileTileCacheStructImage extends AbstractTileCacheStructImage {
+
+    private static final Logger logger = LoggerFactory.getLogger(FileTileCacheStructImage.class);
+    private static final int MAX_RECENT_ACCEDED_TILES_NUMBER = 50;
+
+    private FilesystemServerExplorerProviderFactory factory;
+    private String extension;
+    private File tilesFolder;
+
+    private IProjection crs;
+
+    /**
+     * @param folder
+     * @param crs
+     * @param innerProvider
+     * @param query
+     */
+    public FileTileCacheStructImage(File folder, IProjection crs, RasterStoreProvider innerProvider, RasterQuery query) {
+        super(innerProvider, query);
+        this.crs = crs;
+        GeometryManager geoManager = GeometryLocator.getGeometryManager();
+        getTileStruct();
+
+        // FIXME
+        File tilePropertiesFile = new File(folder, "tileCacheStruct.xml");
+        if (!tilePropertiesFile.exists()) {
+            createTileCacheStructXMLFile(folder);
+        }
+
+        TreeMap<Integer, Double> pixelSizePerZoomLevel = new TreeMap<Integer, Double>();
+        recentAccededTiles = new HashMap<String, Tile>();
+
+        tilesFolder = new File(folder, "V" + File.separatorChar + "Z" + File.separatorChar + "T");
+        if (!tilesFolder.exists()) {
+            tilesFolder.mkdirs();
+        }
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder;
+        try {
+            dBuilder = dbFactory.newDocumentBuilder();
+            Document doc = dBuilder.parse(tilePropertiesFile);
+
+            doc.getDocumentElement().normalize();
+
+            NodeList nList = doc.getElementsByTagName("TileCacheStruct");
+            for (int temp = 0; temp < nList.getLength(); temp++) {
+
+                Node nNode = nList.item(temp);
+
+                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+                    Element eElement = (Element) nNode;
+
+                    NamedNodeMap tileSizeAttributes = eElement.getElementsByTagName("tileSize").item(0).getAttributes();
+                    tileStruct.setRowsPerTile(Integer.valueOf(tileSizeAttributes.getNamedItem("rows").getNodeValue()));
+                    tileStruct.setColumnsPerTile(Integer.valueOf(tileSizeAttributes.getNamedItem("columns").getNodeValue()));
+
+                    NodeList elementsByTagName = eElement.getElementsByTagName("format");
+                    tileStruct.setProviderName(elementsByTagName.item(0).getTextContent());
+
+                    NodeList structExtentList = eElement.getElementsByTagName("structExtent");
+                    if (structExtentList.getLength() > 0) {
+                        Element structExtentNode = (Element) structExtentList.item(0);
+                        if (structExtentNode != null) {
+                            Double minX =
+                                Double.valueOf(structExtentNode.getElementsByTagName("minX").item(0).getTextContent());
+                            Double minY =
+                                Double.valueOf(structExtentNode.getElementsByTagName("minY").item(0).getTextContent());
+                            Double maxX =
+                                Double.valueOf(structExtentNode.getElementsByTagName("maxX").item(0).getTextContent());
+                            Double maxY =
+                                Double.valueOf(structExtentNode.getElementsByTagName("maxY").item(0).getTextContent());
+                            tileStruct.setEnvelope(geoManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D));                        }
+                    }
+
+                    FilesystemServerExplorerManager explorerManager =
+                        DALFileLocator.getFilesystemServerExplorerManager();
+                    @SuppressWarnings("unchecked")
+                    Iterator<Extension> it = explorerManager.getRegisteredProviders();
+                    while (it.hasNext()) {
+
+                        Extension ext = it.next();
+                        FilesystemServerExplorerProviderFactory providerFactory;
+                        try {
+                            providerFactory = (FilesystemServerExplorerProviderFactory) ext.create();
+                            if (providerFactory.getName().equalsIgnoreCase(tileStruct.getProviderName())) {
+                                this.factory = providerFactory;
+                                break;
+                            }
+                        } catch (Exception e) {
+                            throw new RuntimeException(e);// FIXME !!!
+                        }
+                    }
+
+                    NodeList levelsTag = eElement.getElementsByTagName("levels");
+                    Element levels = (Element) levelsTag.item(0);
+                    NodeList levelList = levels.getElementsByTagName("level");
+                    for (int i = 0; i < levelList.getLength(); i++) {
+                        Element level = (Element) levelList.item(i);
+
+                        NamedNodeMap levelAttributes = level.getAttributes();
+                        int zoomLevel = Integer.valueOf(levelAttributes.getNamedItem("index").getNodeValue());
+                        double pixelSize = Double.valueOf(levelAttributes.getNamedItem("pixelSize").getNodeValue());
+
+                        pixelSizePerZoomLevel.put(zoomLevel, pixelSize);
+
+                    }
+                    this.tileStruct.setPixelSizePerZoomLevel(pixelSizePerZoomLevel);
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException();
+        }
+    }
+
+    @Override
+    public Band fetchTile(int bandNumber, int zoomLevel, int structRow, int structCol) {
+
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+
+        String keyTile = composeKeyForRecentTiles(zoomLevel, structRow, structCol);
+        Tile tile = recentAccededTiles.get(keyTile);
+
+        if (tile != null) {
+            // Devolver la banda del buffer del tile
+            return tile.getBuffer().getBand(bandNumber);
+        } else {
+            // Cargar un tile nuevo
+            Buffer rasterSet = null;
+            RasterStore tileStore = null;
+            RasterSet tileStoreRasterSet = null;
+            Band band = null;
+            try {
+                tileStore = createTileStore(zoomLevel, structRow, structCol);
+                tileStoreRasterSet = tileStore.getRasterSet();
+                rasterSet = bufferManager.createBuffer(tileStoreRasterSet, false);
+
+                if (recentAccededTiles.size() >= MAX_RECENT_ACCEDED_TILES_NUMBER) {
+                    removeOlderTile();
+                }
+                recentAccededTiles.put(keyTile, new Tile(rasterSet, keyTile));
+
+                band = rasterSet.getBand(bandNumber);
+//                ToolsLocator.getDisposableManager().bind(band);
+                return band;
+            } catch (DataException | BufferException | ValidateDataParametersException | CreateEnvelopeException | CloneNotSupportedException e) {
+                logger.warn("Can't fetch tile: zoomLevel = " + zoomLevel + ", tileRow = " + structRow
+                    + ", tileColumn = " + structCol + ", band = " + bandNumber + ".", e);
+                return null;
+            } finally {
+                DisposeUtils.dispose(tileStore);
+                tileStore = null;
+                DisposeUtils.dispose(tileStoreRasterSet);
+                tileStoreRasterSet = null;
+                DisposeUtils.dispose(rasterSet);
+                rasterSet = null;
+            }
+        }
+    }
+
+    private RasterStore createTileStore(int zoomLevel, int structRow, int structCol) throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
+
+        File tileFile = null;
+        File zoomFolder = new File(tilesFolder, String.valueOf(zoomLevel));
+        if (!zoomFolder.exists()) {
+            zoomFolder.mkdirs();
+        }
+        File firstColumnFolder = new File(zoomFolder, String.valueOf(structCol));
+        if (!firstColumnFolder.exists()) {
+            tileFile = requestTileFile(zoomLevel, structRow, structCol);
+            this.extension = FilenameUtils.getExtension(tileFile.getAbsolutePath());
+        }
+        String rowBaseName = String.valueOf(structRow);
+        if (this.extension == null) {
+            File[] providerAcceptedFiles = firstColumnFolder.listFiles(factory);
+            for (int i = 0; i < providerAcceptedFiles.length; i++) {
+                File providerAcceptedFile = providerAcceptedFiles[i];
+                if (FilenameUtils.getBaseName(providerAcceptedFile.getAbsolutePath()).equalsIgnoreCase(rowBaseName)) {
+                    tileFile = providerAcceptedFile;
+                }
+            }
+            if (tileFile == null || !tileFile.exists()) {
+                tileFile = requestTileFile(zoomLevel, structRow, structCol);
+            }
+            this.extension = FilenameUtils.getExtension(tileFile.getAbsolutePath());
+        } else {
+            if (tileFile == null) {
+                tileFile =
+                    new File(firstColumnFolder.getAbsolutePath() + File.separatorChar + rowBaseName + "."
+                        + this.extension);
+            }
+        }
+        if (!tileFile.exists()) {
+            tileFile = requestTileFile(zoomLevel, structRow, structCol);
+        }
+        RasterStore tileStore = null;
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory(this.tileStruct.getProviderName());
+
+        DynObject params = providerFactory.createParameters();
+        if (params.getDynClass().getDynField("file") != null) {
+            params.setDynValue("file", tileFile);
+        }
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", this.crs);
+        }
+
+        tileStore = (RasterStore) manager.openStore(this.tileStruct.getProviderName(), params);
+        return tileStore;
+    }
+
+    private File requestTileFile(int zoomLevel, int structRow, int structCol) throws CreateEnvelopeException,
+        CloneNotSupportedException, BufferException, ValidateDataParametersException, DataException {
+
+        RasterQuery rasterQuery = (RasterQuery) this.query.clone();
+
+        Double pixelSize = this.tileStruct.getPixelSizePerZoomLevel().get(zoomLevel);
+        rasterQuery.setPixelSize(pixelSize);
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        Envelope structExtent = this.tileStruct.getEnvelope();
+        int rowsPerTile = this.tileStruct.getRowsPerTile();
+        int columnsPerTile = this.tileStruct.getColumnsPerTile();
+        double minX = structExtent.getMinimum(DIMENSIONS.X) + structCol * (pixelSize * columnsPerTile);
+        double minY = structExtent.getMaximum(DIMENSIONS.Y) - ((structRow + 1) * (pixelSize * rowsPerTile));
+        double maxX = minX + pixelSize * columnsPerTile;
+        double maxY = minY + pixelSize * rowsPerTile;
+        Envelope envelope = geomManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D);
+        rasterQuery.setClip(envelope);
+
+        Buffer buffer = null;
+        Buffer clippedBuffer = null;
+        Buffer interpolatedBuffer = null;
+        File destFile = null;
+        DataServerExplorer serverExplorer = null;
+        try {
+            buffer = innerProvider.createBuffer(rasterQuery);
+            clippedBuffer = buffer.clip(envelope);
+            interpolatedBuffer =
+                clippedBuffer.createInterpolated(
+                    (int) (Math.round(clippedBuffer.getDimensions().getPixelSizeY() * clippedBuffer.getRows() / pixelSize)),
+                    (int) (Math.round(clippedBuffer.getDimensions().getPixelSizeX() * clippedBuffer.getColumns() / pixelSize)),
+                    Buffer.INTERPOLATION_Bilinear, null);
+
+            String providerName = "GTiff";
+            String extension = "tif";
+
+            DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+            DataServerExplorerParameters eparams;
+            eparams = manager.createServerExplorerParameters("FilesystemExplorer");
+
+            destFile = FileUtils.getFile(tilesFolder,Integer.toString(zoomLevel),Integer.toString(structCol),Integer.toString(structRow)+"."+extension);
+
+            File parent = destFile.getParentFile();
+            if (!parent.exists()) {
+                parent.mkdirs();
+            }
+            eparams.setDynValue("initialpath", destFile);
+//            DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
+            serverExplorer = manager.openServerExplorer(eparams.getExplorerName(), eparams);
+
+            NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
+            params.setDynValue("file", destFile);
+
+            params.setDynValue("compress", "NONE");
+            params.setDynValue("tfw", false);
+
+            // FIXME: Ver de coger estos dos valores del inner provider para que
+            // los tiles sean homog�neos con el raster original
+            int bands = innerProvider.getBands();
+            switch (bands) {
+            case 3:
+                params.setDynValue("photometric", "RGB");
+                break;
+            case 4:
+                params.setDynValue("photometric", "RGB");
+                params.setDynValue("alpha", "NON-PREMULTIPLIED");
+                break;
+            default:
+                params.setDynValue("photometric", "MINISBLACK");
+                break;
+            }
+
+            params.setBuffer(interpolatedBuffer);
+            serverExplorer.add(providerName, params, true);
+        } finally {
+            DisposeUtils.dispose(buffer);
+            DisposeUtils.dispose(clippedBuffer);
+            DisposeUtils.dispose(interpolatedBuffer);
+            DisposeUtils.dispose(serverExplorer);
+        }
+
+        return destFile;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        factory = null;
+        crs = null;
+        tilesFolder = null;
+        extension = null;
+    }
+
+    private void createTileCacheStructXMLFile(File folder) {
+
+        TileStruct tileStructProvider = null;
+        try {
+            if (innerProvider != null) {
+                tileStructProvider = innerProvider.getTileStruct();
+                DisposeUtils.bind((Disposable) tileStructProvider);
+            }
+
+            int tileSizeX = TileCacheLibrary.DEFAULT_TILEWIDTH;
+            if (tileStructProvider != null && tileStructProvider.getColumnsPerTile() != 0) {
+                tileSizeX = tileStructProvider.getColumnsPerTile();
+            }
+
+            int tileSizeY = TileCacheLibrary.DEFAULT_TILEHEIGHT;
+            if (tileStructProvider != null && tileStructProvider.getRowsPerTile() != 0) {
+                tileSizeY = tileStructProvider.getRowsPerTile();
+            }
+
+            File file = new File(folder, "tileCacheStruct.xml");
+
+            if (!file.exists()) {
+                Buffer auxBuffer = null;
+                try {
+                    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+                    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+
+                    // root elements
+                    Document doc = (Document) docBuilder.newDocument();
+                    Element rootElement = doc.createElement("TileCacheStruct");
+                    doc.appendChild(rootElement);
+
+                    // tileSize
+                    Element tileSize = doc.createElement("tileSize");
+                    rootElement.appendChild(tileSize);
+
+                    // tileSize Rows
+                    Attr rows = doc.createAttribute("rows");
+                    rows.setValue(String.valueOf(tileSizeY));
+                    tileSize.setAttributeNode(rows);
+
+                    // tileSize Columns
+                    Attr columns = doc.createAttribute("columns");
+                    columns.setValue(String.valueOf(tileSizeX));
+                    tileSize.setAttributeNode(columns);
+
+                    // format
+                    Element format = doc.createElement("format");
+                    if (tileStructProvider == null || StringUtils.isEmpty(tileStructProvider.getProviderName())) {
+                        format.setTextContent("GTiff");
+                    }
+                    rootElement.appendChild(format);
+
+                    // structExtent
+                    Element structExtent = doc.createElement("structExtent");
+                    rootElement.appendChild(structExtent);
+
+                    Envelope envelope = (Envelope) innerProvider.getDynValue(DataStore.METADATA_ENVELOPE);
+
+                    // structExtent minX
+                    Element minX = doc.createElement("minX");
+                    minX.setTextContent(String.valueOf(envelope.getMinimum(DIMENSIONS.X)));
+                    structExtent.appendChild(minX);
+
+                    // structExtent minY
+                    Element minY = doc.createElement("minY");
+                    minY.setTextContent(String.valueOf(envelope.getMinimum(DIMENSIONS.Y)));
+                    structExtent.appendChild(minY);
+
+                    // structExtent maxX
+                    Element maxX = doc.createElement("maxX");
+                    maxX.setTextContent(String.valueOf(envelope.getMaximum(DIMENSIONS.X)));
+                    structExtent.appendChild(maxX);
+
+                    // structExtent maxY
+                    Element maxY = doc.createElement("maxY");
+                    maxY.setTextContent(String.valueOf(envelope.getMaximum(DIMENSIONS.Y)));
+                    structExtent.appendChild(maxY);
+
+                    Element levels = doc.createElement("levels");
+                    rootElement.appendChild(levels);
+
+                    List<Double> pixelSizes = new ArrayList<Double>();
+                    Map<Integer, Double> zoomLevels = new HashMap<Integer, Double>();
+
+                    if (tileStructProvider == null || tileStructProvider.getPixelSizePerZoomLevel() == null) {
+                        // FIXME: �alguna otra forma de obtener el pixelSize del
+                        // store completo?
+                        auxBuffer = innerProvider.createBuffer(null);
+                        int completeRows = auxBuffer.getRows();
+                        int completeColumns = auxBuffer.getColumns();
+                        double completePixelSizeX = auxBuffer.getDimensions().getPixelSizeX();
+                        double completePixelSizeY = auxBuffer.getDimensions().getPixelSizeY();
+
+                        int maximumLength = completeColumns;
+                        int tileMaximumLength = tileSizeX;
+                        double maximumPixelSize = completePixelSizeX;
+
+                        if (completeRows * tileSizeY > completeColumns * tileSizeX) {
+                            maximumLength = completeRows;
+                            tileMaximumLength = tileSizeY;
+                            maximumPixelSize = completePixelSizeY;
+                        }
+
+                        double pixelSize = maximumPixelSize;
+                        while (maximumLength * maximumPixelSize / pixelSize > tileMaximumLength) {
+                            pixelSizes.add(pixelSize);
+                            pixelSize = pixelSize * 2;
+                        }
+                        pixelSizes.add(pixelSize);
+                        int i = 0;
+                        for (int zoomLevel = pixelSizes.size() - 1; zoomLevel >= 0; zoomLevel--) {
+                            zoomLevels.put(i, pixelSizes.get(zoomLevel));
+                            appendZoomLevel(doc, levels, i, pixelSizes.get(zoomLevel));
+                            i++;
+                        }
+                    } else {
+                        zoomLevels = tileStructProvider.getPixelSizePerZoomLevel();
+                    }
+
+                    for (Entry<Integer, Double> entry : zoomLevels.entrySet()) {
+                        appendZoomLevel(doc, levels, entry.getKey(), entry.getValue());
+                    }
+
+                    // write the content into xml file
+
+                    DOMSource source = new DOMSource(doc);
+                    File parent = file.getParentFile();
+                    if (!parent.exists()) {
+                        parent.mkdirs();
+                    }
+                    file.createNewFile();
+                    StreamResult result = new StreamResult(file.toURI().getPath());
+
+                    TransformerFactory transformerFactory = TransformerFactory.newInstance();
+                    Transformer transformer = transformerFactory.newTransformer();
+                    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+                    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+                    transformer.transform(source, result);
+
+                } catch (ParserConfigurationException | TransformerException | IOException | BufferException e) {
+                    logger.warn("Can't create tileCacheStruct.xml file", e);
+                } finally {
+                    DisposeUtils.dispose(auxBuffer);
+                    auxBuffer = null;
+                }
+            }
+        } finally {
+            DisposeUtils.disposeQuietly((Disposable) tileStructProvider);
+            tileStructProvider = null;
+
+        }
+    }
+
+    /**
+     * @param doc
+     * @param rootElement
+     * @param levels
+     * @param zoomLevel
+     * @param pixelSize
+     */
+    private void appendZoomLevel(Document doc, Element levels, int zoomLevel, double pixelSize) {
+        Element level = doc.createElement("level");
+        levels.appendChild(level);
+
+        // level zoomLevel
+        Attr index = doc.createAttribute("index");
+        index.setValue(String.valueOf(zoomLevel));
+        level.setAttributeNode(index);
+
+        // level pixelSize
+        Attr pxSize = doc.createAttribute("pixelSize");
+        pxSize.setValue(String.valueOf(pixelSize));
+        level.setAttributeNode(pxSize);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tilecache.provider.ITileStructImage#getTileStruct()
+     */
+    @Override
+    public TileStruct getTileStruct() {
+        if(this.tileStruct==null){
+            this.tileStruct = new DefaultTileStruct();
+        }
+        return this.tileStruct;
+    }
+
+    public void forgetCache() {
+        super.forgetCache();
+        if(tilesFolder.exists() && tilesFolder.isDirectory()){
+            File[] files = tilesFolder.listFiles();
+            for(int i=0; i<files.length; i++){
+                try {
+                    FileUtils.forceDelete(files[i]);
+                } catch (IOException e) {
+                    logger.warn("Can't delete the file "+files[i].getAbsolutePath(), e);
+                }
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProvider.java	(revision 46118)
@@ -0,0 +1,219 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.io.File;
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.apache.commons.io.FileUtils;
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStoreNotification;
+import org.gvsig.fmap.dal.DataStoreParameters;
+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.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProviderServices;
+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.spi.DataStoreProviderServices;
+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.DynObjectEncoder;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ * Provider for Tile Cache
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class TileCacheStoreProvider extends AbstractTileCacheStoreProvider implements //RasterCacheStoreProvider,
+    ResourceConsumer {
+
+    private static final Logger logger = LoggerFactory.getLogger(TileCacheStoreProvider.class);
+
+    public static String NAME = "TileCache";
+    public static String DESCRIPTION = "Tile cache provider";
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private ResourceProvider resource;
+    private final SimpleTaskStatus taskStatus;
+
+    protected static void registerMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
+            manager.addDefinition(METADATA_DEFINITION_NAME,
+                TileCacheStoreProviderParameters.class.getResourceAsStream("TileCacheMetadata.xml"),
+                TileCacheStoreProviderParameters.class.getClassLoader());
+        }
+    }
+
+    /**
+     * @param params
+     * @param storeServices
+     * @throws InitializeException
+     */
+    public TileCacheStoreProvider(TileCacheStoreProviderParameters params, DataStoreProviderServices storeServices)
+        throws InitializeException {
+        super(params, storeServices, FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME));
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("TileCache");
+        this.init(params, storeServices);
+    }
+
+    protected TileCacheStoreProvider(TileCacheStoreProviderParameters params, DataStoreProviderServices storeServices,
+        DynObject metadata) throws InitializeException {
+        super(params, storeServices, metadata);
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("TileCache");
+        this.init(params, storeServices);
+    }
+
+    protected void init(TileCacheStoreProviderParameters params,
+        DataStoreProviderServices storeServices) throws InitializeException {
+        bandsNumber = ((RasterStoreProviderServices)storeServices).getProvider().getBands();
+
+        if (params == null) {
+            throw new InitializeException(
+                new NullPointerException("params is null"));
+        }
+
+    }
+
+    public TileCacheStoreProviderParameters getParameters() {
+        return (TileCacheStoreProviderParameters) super.getParameters();
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return this.resource;
+    }
+
+    @Override
+    public Object getSourceId() {
+        File folder = this.getParameters().getFolder();
+        if(folder == null){
+            folder = this.getParameters().getRootFolder();
+        }
+        return folder;
+    }
+
+    @Override
+    public String getProviderName() {
+        return NAME;
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(DataStoreNotification.RESOURCE_CHANGED, resource);
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        resource.removeConsumer(this);
+    }
+
+    @Override
+    public void apply(RasterStoreProvider provider, IProjection crs, RasterQuery query) throws DataException {
+        super.apply(provider, crs, query);
+
+        DataStoreParameters params = getParameters();
+        File folder = (File) params.getDynValue(TileCacheStoreProviderParameters.TILECACHE_FOLDER_PARAMTER_NAME);
+        if(folder == null){
+            folder = (File) params.getDynValue(TileCacheStoreProviderParameters.TILECACHE_ROOTFOLDER_PARAMTER_NAME);
+            DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+            DynObjectEncoder encoder = dynObjectManager.createSimpleDynObjectEncoder();
+
+            MessageDigest md = null;
+            String hex = "";
+            try {
+                md = java.security.MessageDigest.getInstance("MD5");
+                md.update(encoder.encode(provider.getParameters()).getBytes());
+                hex = convertToHex(md.digest());
+            } catch (NoSuchAlgorithmException e) {
+                logger.warn("Can't get a MD5 instance.", e);
+            }
+
+            folder = new File(folder.getAbsolutePath() + File.separator + hex+"-"+getName());
+            try {
+                FileUtils.write(new File(folder,"parameters.txt"), encoder.encode(provider.getParameters()));
+            } catch (IOException e) {
+                logger.warn("Can't create parameters file of store '"+getName()+"' for the cache.",e);
+            }
+
+        }
+
+        resource = this.createResource(
+            FileResource.NAME,
+            new Object[] { folder.getAbsolutePath() }
+        );
+        resource.addConsumer(this);
+
+        setTileStructImage(new FileTileCacheStructImage(folder, crs, provider, query));
+    }
+
+    /**
+     * Converts an array of bytes to hexadecimal string
+     *
+     * @param data
+     * @return
+     */
+    private String convertToHex(byte[] data) {
+        StringBuffer buf = new StringBuffer();
+        for (int i = 0; i < data.length; i++) {
+            int halfbyte = (data[i] >>> 4) & 0x0F;
+            int two_halfs = 0;
+            do {
+                if ((0 <= halfbyte) && (halfbyte <= 9))
+                    buf.append((char) ('0' + halfbyte));
+                else
+                    buf.append((char) ('a' + (halfbyte - 10)));
+                halfbyte = data[i] & 0x0F;
+            } while (two_halfs++ < 1);
+        }
+        return buf.toString();
+    }
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStructImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStructImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStructImage.java	(revision 46118)
@@ -0,0 +1,37 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface TileCacheStructImage extends TileStructImage {
+
+    /**
+     * Clear previous cache.
+     */
+    public void forgetCache();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,65 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Factory for TileCache provider
+ * @author dmartinezizquierdo
+ *
+ */
+public class MemoryTileCacheStoreProviderFactory extends AbstractRasterStoreProviderFactory {
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryTileCacheStoreProviderFactory.class);
+
+    protected MemoryTileCacheStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    @Override
+    public DataStoreProvider createProvider(DataParameters parameters,
+        DataStoreProviderServices providerServices) throws InitializeException {
+        return (DataStoreProvider) new MemoryTileCacheStoreProvider((MemoryTileCacheStoreProviderParameters)parameters,providerServices);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new MemoryTileCacheStoreProviderParameters();
+    }
+
+    @Override
+    public boolean isHidden() {
+      return DALLocator.getDataManager().isTheOldRasterRegistered();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStoreProvider.java	(revision 46118)
@@ -0,0 +1,254 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+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.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataStore;
+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.RasterQuery;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.RasterCacheStoreProvider;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.BandPageManager;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.PageManager;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractTileCacheStoreProvider extends AbstractRasterStoreProvider implements
+    RasterCacheStoreProvider {
+
+    private TileCacheStructImage tileStructImage = null;
+
+    protected Envelope envelope = null;
+
+    protected Map<Integer, List<PageManager>> pageManagersPerZoomLevel = null;
+
+    protected RasterStoreProvider innerProvider;
+    protected int bandsNumber;
+
+    /**
+     * @param params
+     * @param storeServices
+     * @param metadata
+     */
+    public AbstractTileCacheStoreProvider(DataStoreParameters params, DataStoreProviderServices storeServices,
+        DynObject metadata) {
+        super(params, storeServices, metadata);
+    }
+
+    @Override
+    public Buffer createBuffer(RasterQuery rasterQuery) throws BufferException {
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        int[] bandDataTypes;
+        List<PageManager> pageManagers = new ArrayList<PageManager>();
+        NoData[] bandNoData;
+        // FIXME: Ver qu� deber�amos hacer aqu� con la rasterQuery
+        // if (rasterQuery != null) {
+        // List<BandQuery> bands;
+        // bands = rasterQuery.getBands();
+        // }
+
+        bandDataTypes = new int[bandsNumber];
+        bandNoData = new NoData[bandsNumber];
+
+        double pixelSize = rasterQuery.getPixelSize();
+        int zoomLevel = 0;
+        if (pixelSize != 0.0) {
+            zoomLevel = tileStructImage.getZoomLvlForPixelSize(pixelSize);
+        }
+        List<PageManager> pageManagersInZoom;
+        pageManagersInZoom = getPageManagersInZoom(zoomLevel);
+        for (int i = 0; i < tileStructImage.getBandNumber(); i++) {
+            bandDataTypes[i] = this.getBandDescriptor(i).getDataType();
+            bandNoData[i] = this.getNoData(rasterQuery, i);
+            pageManagers.add(pageManagersInZoom.get(i));
+        }
+
+        envelope = tileStructImage.getEnvelope();
+        Buffer buffer =
+            bufferManager.createBuffer(tileStructImage.getRows(zoomLevel), tileStructImage.getColumns(zoomLevel),
+                bandDataTypes, bandNoData, (IProjection) innerProvider.getDynValue(DataStore.METADATA_CRS), envelope,
+                pageManagers);
+
+        return buffer;
+    }
+
+    // @Override
+    // public BandInfo getBandInfo(int band) {
+    // return innerProvider.getBandInfo(band);
+    // }
+
+    @Override
+    public int getBands() {
+        return bandsNumber;
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException, ValidateDataParametersException {
+        return null;
+    }
+
+    @Override
+    public void open() throws OpenException {
+        if (this.tileStructImage != null) {
+            return;
+        }
+    }
+
+    protected List<PageManager> getPageManagersInZoom(int zoomLevel) {
+        List<PageManager> pageManagersInZoom = this.pageManagersPerZoomLevel.get(zoomLevel);
+        if (pageManagersInZoom == null) {
+            pageManagersInZoom = new ArrayList<PageManager>();
+            for (int i = 0; i < tileStructImage.getBandNumber(); i++) {
+                pageManagersInZoom.add(new TileCacheBandPageManager(tileStructImage, zoomLevel, i));
+            }
+            this.pageManagersPerZoomLevel.put(zoomLevel, pageManagersInZoom);
+        }
+        return pageManagersInZoom;
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        if (DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name)) {
+            return this.envelope;
+        }
+        if (DataStore.METADATA_CRS.equalsIgnoreCase(name)) {
+            return this.innerProvider.getDynValue(name);
+        }
+        return super.getDynValue(name);
+    }
+
+    @Override
+    public TileStruct getTileStruct() {
+        return innerProvider.getTileStruct();
+    }
+
+    protected void setTileStructImage(TileCacheStructImage tileStructImage) {
+        this.tileStructImage = tileStructImage;
+        for (int i = 0; i < this.tileStructImage.getBandNumber(); i++) {
+            this.getBandDescriptor(i).setDataType(this.tileStructImage.getDataTypes()[i]);
+        }
+    }
+
+    /**
+     * @return TileStructImage
+     */
+    public TileStructImage getTileStructImage() {
+        return tileStructImage;
+    }
+
+    @Override
+    public void deleteAll() {
+        tileStructImage.forgetCache();
+    }
+
+    @Override
+    public void close() throws CloseException {
+        this.tileStructImage = null;
+    }
+
+    @Override
+    public String getName() {
+        return this.innerProvider.getName();
+    }
+
+    @Override
+    public String getFullName() {
+        return this.innerProvider.getFullName();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        if (this.tileStructImage != null) {
+            DisposeUtils.dispose((AbstractDisposable) tileStructImage);
+            this.tileStructImage = null;
+        }
+
+        Set<Entry<Integer, List<PageManager>>> entrySet = pageManagersPerZoomLevel.entrySet();
+        for (Iterator<Entry<Integer, List<PageManager>>> iterator = entrySet.iterator(); iterator.hasNext();) {
+            Entry<Integer, List<PageManager>> entry = (Entry<Integer, List<PageManager>>) iterator.next();
+            List<PageManager> pageManagers = entry.getValue();
+            for (Iterator<PageManager> iterator2 = pageManagers.iterator(); iterator2.hasNext();) {
+                PageManager pageManager = (PageManager) iterator2.next();
+                DisposeUtils.dispose(pageManager);
+                iterator2.remove();
+            }
+            iterator.remove();
+        }
+    }
+
+    @Override
+    public void apply(RasterStoreProvider provider, IProjection crs, RasterQuery query) throws DataException {
+        this.innerProvider = provider;
+        pageManagersPerZoomLevel = new HashMap<Integer, List<PageManager>>();
+    }
+
+    @Override
+    public RasterStoreProvider getInnerProvider() {
+        return innerProvider;
+    }
+
+    @Override
+    public BufferDimensions getDimensions() throws InitializeException {
+        return innerProvider.getDimensions();
+    }
+
+    @Override
+    public boolean isTiled() {
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStructImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStructImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/AbstractTileCacheStructImage.java	(revision 46118)
@@ -0,0 +1,288 @@
+package org.gvsig.raster.tilecache.provider;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractTileCacheStructImage extends AbstractDisposable implements TileCacheStructImage {
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractTileCacheStructImage.class);
+
+    protected RasterStoreProvider innerProvider;
+    protected RasterQuery query;
+    protected TileStruct tileStruct;
+
+    protected Object colorInterpretation;
+    protected Object legend;
+    protected Object colorTable;
+
+    protected Map<String, Tile> recentAccededTiles;
+
+    protected Integer bandNumber = null;
+
+    protected int[] dataTypes;
+
+    /**
+     * @param innerProvider
+     * @param query
+     */
+    public AbstractTileCacheStructImage(RasterStoreProvider innerProvider, RasterQuery query) {
+        super();
+        this.innerProvider = innerProvider;
+        this.query = query;
+    }
+
+    /**
+     * @param pixelSize
+     * @return The appropriate zoom level for the pizelSize
+     */
+    @Override
+    public int getZoomLvlForPixelSize(double pixelSize) {
+        //FIXME: Elegir el c�digo id�neo
+        // Este trozo de c�digo selecciona un zoom superior con lo que,
+        // al hacer la interpolaci�n se generar�n p�xeles m�s grandes
+        // (y l�neas m�s gruesas)
+//        int zoom = 0;
+//        Map<Integer, Double> pixelSizePerZoomLevel = tileStruct.getPixelSizePerZoomLevel();
+//
+//        SortedSet<Integer> keySet = new TreeSet<>(Collections.reverseOrder());
+//        keySet.addAll(pixelSizePerZoomLevel.keySet());
+//        Iterator<Integer> iterator = keySet.iterator();
+//        while(iterator.hasNext()){
+//            zoom = iterator.next();
+//            double levelPixelSize = pixelSizePerZoomLevel.get(zoom);
+//            if (pixelSize <= levelPixelSize) {
+//                return zoom;
+//            }
+//        }
+//
+//        return zoom;
+
+        // Este trozo de c�digo selecciona un zoom inferior con lo que,
+        // al hacer la interpolaci�n se perder�n p�xeles
+        // repercutiendo en la legibilidad de las leyendas si no se usa una adecuada interpolaci�n
+        // (y las l�neas se podr�n ver entrecortadas)
+        int zoom = 0;
+        Map<Integer, Double> pixelSizePerZoomLevel = getTileStruct().getPixelSizePerZoomLevel();
+        for (int i : pixelSizePerZoomLevel.keySet()) {
+            zoom = i;
+            double levelPixelSize = pixelSizePerZoomLevel.get(zoom);
+            if (pixelSize >= levelPixelSize) {
+                return zoom;
+            }
+        }
+        return zoom;
+    }
+
+    /**
+     * @throws CloneNotSupportedException
+     * @throws ValidateDataParametersException
+     * @throws DynMethodException
+     * @throws DataException
+     * @throws BufferException
+     * @throws CreateEnvelopeException
+     *
+     */
+    protected void fillStoreInfo() {
+        this.bandNumber = this.innerProvider.getBands();
+        this.dataTypes = new int[this.bandNumber];
+        for (int i = 0; i < this.bandNumber; i++) {
+            dataTypes[i] = this.innerProvider.getBandDescriptor(i).getDataType();
+        }
+        try {
+            this.colorInterpretation =
+                this.innerProvider.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORINTERPRETATION_NAME, null);
+            this.colorTable = this.innerProvider.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORTABLE_NAME, null);
+            this.legend = this.innerProvider.invokeDynMethod(RasterStore.DYNMETHOD_GETLEGEND_NAME, null);
+        } catch (DynMethodException e) {
+            logger.warn("Can't fill legend info from store.");
+        }
+    }
+
+    @Override
+    public int getBandNumber() {
+        if (this.bandNumber == null) {
+            fillStoreInfo();
+        }
+        return this.bandNumber;
+    }
+
+    @Override
+    public int[] getDataTypes() {
+        if (this.dataTypes == null) {
+            fillStoreInfo();
+        }
+        return this.dataTypes;
+    }
+
+    @Override
+    public int getRows(int zoomLevel) {
+        return (int) (Math.round(getEnvelope().getLength(DIMENSIONS.Y) / this.tileStruct.getPixelSizePerZoomLevel().get(zoomLevel)));
+    }
+
+    @Override
+    public int getColumns(int zoomLevel) {
+        return (int) (Math.round(this.getEnvelope().getLength(DIMENSIONS.X) / this.tileStruct.getPixelSizePerZoomLevel().get(zoomLevel)));
+    }
+
+    @Override
+    public Envelope getEnvelope() {
+        return this.tileStruct.getEnvelope();
+    }
+
+    @Override
+    public int getRowsPerTile() {
+        return this.tileStruct.getRowsPerTile();
+    }
+
+    @Override
+    public int getColumnsPerTile() {
+        return this.tileStruct.getColumnsPerTile();
+    }
+
+    @Override
+    public String getProviderName() {
+        return this.tileStruct.getProviderName();
+    }
+
+    protected String composeKeyForRecentTiles(int zoomLevel, int structRow, int structCol) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(zoomLevel);
+        builder.append(":");
+        builder.append(structCol);
+        builder.append(":");
+        builder.append(structRow);
+        return builder.toString();
+    }
+
+    protected void removeOlderTile() {
+        Tile olderTile = null;
+        for (Iterator<Tile> iterator = recentAccededTiles.values().iterator(); iterator.hasNext();) {
+            Tile tile = (Tile) iterator.next();
+            if (olderTile == null || tile.getLastAccess() < olderTile.getLastAccess()) {
+                olderTile = tile;
+            }
+        }
+        if (olderTile != null) {
+            recentAccededTiles.remove(olderTile.getKey());
+            DisposeUtils.dispose(olderTile);
+        }
+    }
+
+    @Override
+    public Object getColorInterpretation() {
+        if (this.colorInterpretation == null) {
+            fillStoreInfo();
+        }
+        return this.colorInterpretation;
+    }
+
+    @Override
+    public Object getColorTable() {
+        if (this.colorTable == null) {
+            fillStoreInfo();
+        }
+        return this.colorTable;
+    }
+
+    @Override
+    public Object getLegend() {
+        if (this.legend == null) {
+            fillStoreInfo();
+        }
+        return this.legend;
+    }
+
+    /**
+     *
+     */
+    @Override
+    public void forgetCache(){
+        this.recentAccededTiles.clear();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        if (recentAccededTiles != null) {
+            Set<Entry<String, Tile>> entrySet = recentAccededTiles.entrySet();
+            for (Iterator<Entry<String, Tile>> iterator = entrySet.iterator(); iterator.hasNext();) {
+                Entry<String, Tile> entry = (Entry<String, Tile>) iterator.next();
+                DisposeUtils.dispose(entry.getValue());
+            }
+            recentAccededTiles.clear();
+        }
+        DisposeUtils.dispose(innerProvider);
+        innerProvider = null;
+        DisposeUtils.dispose((Disposable) tileStruct);
+        tileStruct = null;
+
+        query = null;
+        colorInterpretation = null;
+        legend = null;
+        colorTable = null;
+    }
+
+
+    protected class Tile extends AbstractDisposable {
+
+        org.gvsig.raster.lib.buffer.api.Buffer buffer;
+        long lastAccess;
+        String key;
+
+        public Tile(org.gvsig.raster.lib.buffer.api.Buffer buffer, String key) {
+            ToolsLocator.getDisposableManager().bind(buffer);
+            this.buffer = buffer;
+            this.key = key;
+            lastAccess = System.currentTimeMillis();
+        }
+
+        public String getKey() {
+            return key;
+        }
+
+        public org.gvsig.raster.lib.buffer.api.Buffer getBuffer() {
+            lastAccess = System.currentTimeMillis();
+            return buffer;
+        }
+
+        public long getLastAccess() {
+            return lastAccess;
+        }
+
+        @Override
+        protected void finalize() throws Throwable {
+            super.finalize();
+        }
+
+        @Override
+        public void doDispose() throws BaseException {
+            DisposeUtils.dispose(buffer);
+            buffer = null;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderParameters.java	(revision 46118)
@@ -0,0 +1,143 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.io.File;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.FileHelper;
+import org.gvsig.fmap.dal.raster.OpenRasterStoreParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+
+/**
+ * Parameters to create a TileCache Provider
+ * @author dmartinezizquierdo
+ *
+ */
+public class TileCacheStoreProviderParameters extends AbstractDataParameters implements
+OpenRasterStoreParameters{
+
+    private static final Logger logger = LoggerFactory.getLogger(TileCacheStoreProviderParameters.class);
+
+    public static final String PARAMETERS_DEFINITION_NAME = "TileCacheStoreProviderParameters";
+    public static final String TILECACHE_ROOTFOLDER_PARAMTER_NAME = "rootFolder";
+    public static final String TILECACHE_FOLDER_PARAMTER_NAME = "folder";
+    public static final String CRS_PARAMTER_NAME = "crs";
+    public static final String WLD_PARAMS_NAME= "wldParams";
+
+
+    private DelegatedDynObject parameters;
+
+    /**
+     * Constructor
+     */
+    public TileCacheStoreProviderParameters() {
+        this(PARAMETERS_DEFINITION_NAME);
+    }
+
+    protected TileCacheStoreProviderParameters(String parametersDefinitionName) {
+        this(parametersDefinitionName, TileCacheStoreProvider.NAME);
+    }
+
+
+    /**
+     * Constructor
+     * @param parametersDefinitionName
+     * @param name
+     */
+    public TileCacheStoreProviderParameters(String parametersDefinitionName, String name) {
+        super();
+        this.parameters = (DelegatedDynObject) FileHelper.newParameters(parametersDefinitionName);
+        this.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, name);
+    }
+
+    @Override
+    public String getDataStoreName() {
+        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
+    }
+
+    @Override
+    public boolean isValid() {
+        return (this.getRootFolder() != null);
+    }
+
+    @Override
+    public String getDescription() {
+        return this.getDynClass().getDescription();
+    }
+
+    /**
+     * @return the root folder
+     */
+    public File getRootFolder() {
+        return (File) this.getDynValue(TILECACHE_ROOTFOLDER_PARAMTER_NAME);
+    }
+
+    /**
+     * @param rootFolder
+     */
+    public void setRootFolder(File rootFolder) {
+        this.setDynValue(TILECACHE_ROOTFOLDER_PARAMTER_NAME, rootFolder);
+    }
+
+    /**
+     * @return the alternative folder
+     */
+    public File getFolder() {
+        return (File) this.getDynValue(TILECACHE_FOLDER_PARAMTER_NAME);
+    }
+
+    /**
+     * @param folder
+     */
+    public void setFolder(File folder) {
+        this.setDynValue(TILECACHE_FOLDER_PARAMTER_NAME, folder);
+    }
+
+    /**
+     * Gets the 6 params of a WLD file as Strings.
+     * @return Returns WLD parameters
+     */
+    public List<String> getWldParams(){
+        return (List<String>) getDynValue(WLD_PARAMS_NAME);
+    }
+
+    /**
+     * Sets the params of a wld file
+     * @param wldParams
+     */
+    public void setWldParams(List<String> wldParams){
+        setDynValue(WLD_PARAMS_NAME,wldParams);
+    }
+
+    @Override
+    protected DelegatedDynObject getDelegatedDynObject() {
+        return parameters;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileStructImage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileStructImage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileStructImage.java	(revision 46118)
@@ -0,0 +1,185 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+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.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Represents a tiled image
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class MemoryTileStructImage extends AbstractTileCacheStructImage {
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryTileStructImage.class);
+    private static final int MAX_RECENT_ACCEDED_TILES_NUMBER = 50;
+
+
+
+    /**
+     * @param innerProvider
+     * @param query
+     */
+    public MemoryTileStructImage(RasterStoreProvider innerProvider, RasterQuery query) {
+        super(innerProvider, query);
+
+        tileStruct = getTileStruct();
+
+        recentAccededTiles = new HashMap<String, Tile>();
+
+    }
+
+
+
+    /**
+     * @param buffer
+     * @param bandNumber
+     * @param zoomLevel
+     * @param tileRow
+     * @param tileCol
+     * @return Band
+     * @throws CreateEnvelopeException
+     * @throws CloneNotSupportedException
+     * @throws ValidateDataParametersException
+     */
+    @Override
+    public Band fetchTile(int bandNumber, int zoomLevel, int structRow, int structCol) {
+
+        String keyTile = composeKeyForRecentTiles(zoomLevel, structRow, structCol);
+        Tile tile = recentAccededTiles.get(keyTile);
+
+        if (tile != null) {
+            // Devolver la banda del buffer del tile
+            return tile.getBuffer().getBand(bandNumber);
+        } else {
+            // Cargar un tile nuevo
+            Buffer buffer = null;
+            try {
+                buffer = requestTile(zoomLevel, structRow, structCol);
+                ToolsLocator.getDisposableManager().bind(buffer);
+
+                if (recentAccededTiles.size() >= MAX_RECENT_ACCEDED_TILES_NUMBER) {
+                    removeOlderTile();
+                }
+                recentAccededTiles.put(keyTile, new Tile(buffer, keyTile));
+
+                Band band = buffer.getBand(bandNumber);
+//                ToolsLocator.getDisposableManager().bind(band);
+                return band;
+            } catch (DataException | BufferException | ValidateDataParametersException | CreateEnvelopeException | CloneNotSupportedException e) {
+                logger.warn("Can't fetch tile: zoomLevel = " + zoomLevel + ", tileRow = " + structRow
+                    + ", tileColumn = " + structCol + ", band = " + bandNumber + ".", e);
+                return null;
+            } finally {
+                DisposeUtils.dispose(buffer);
+                buffer = null;
+            }
+        }
+    }
+
+    private Buffer requestTile(int zoomLevel, int structRow, int structCol) throws CreateEnvelopeException,
+        CloneNotSupportedException, BufferException, ValidateDataParametersException, DataException {
+
+        RasterQuery rasterQuery = (RasterQuery) this.query.clone();
+
+        Double pixelSize = this.tileStruct.getPixelSizePerZoomLevel().get(zoomLevel);
+        rasterQuery.setPixelSize(pixelSize);
+
+        GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+        Envelope structExtent = this.tileStruct.getEnvelope();
+        int rowsPerTile = this.tileStruct.getRowsPerTile();
+        int columnsPerTile = this.tileStruct.getColumnsPerTile();
+        double minX = structExtent.getMinimum(DIMENSIONS.X) + structCol * (pixelSize * columnsPerTile);
+        double minY = structExtent.getMaximum(DIMENSIONS.Y) - ((structRow + 1) * (pixelSize * rowsPerTile));
+        double maxX = minX + pixelSize * columnsPerTile;
+        double maxY = minY + pixelSize * rowsPerTile;
+        Envelope envelope = geomManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D);
+
+        Buffer buffer = null;
+        Buffer clippedBuffer = null;
+        Buffer interpolatedBuffer = null;
+
+        try {
+            buffer = innerProvider.createBuffer(rasterQuery);
+            clippedBuffer = buffer.clip(envelope);
+            interpolatedBuffer =
+                clippedBuffer.createInterpolated(
+                    (int) (Math.round(clippedBuffer.getDimensions().getPixelSizeY() * clippedBuffer.getRows() / pixelSize)),
+                    (int) (Math.round(clippedBuffer.getDimensions().getPixelSizeX() * clippedBuffer.getColumns() / pixelSize)),
+                    Buffer.INTERPOLATION_Bilinear, null);
+
+            return interpolatedBuffer;
+
+        } finally {
+            DisposeUtils.dispose(buffer);
+            DisposeUtils.dispose(clippedBuffer);
+//            DisposeUtils.dispose(interpolatedBuffer);
+        }
+
+    }
+
+//    @Override
+//    protected void doDispose() throws BaseException {
+//        super.doDispose();
+//    }
+
+    @Override
+    public TileStruct getTileStruct() {
+        if(this.tileStruct==null){
+            if (innerProvider != null) {
+                this.tileStruct = innerProvider.getTileStruct();
+            } else {
+                throw new UnsupportedOperationException("Can't be applied the memory tile cache to the provider "+innerProvider.getFullName());
+            }
+        }
+        return this.tileStruct;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheBandPageManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheBandPageManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheBandPageManager.java	(revision 46118)
@@ -0,0 +1,82 @@
+package org.gvsig.raster.tilecache.provider;
+
+import java.io.IOException;
+import java.nio.Buffer;
+
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BandInfo;
+import org.gvsig.raster.lib.buffer.api.BandTileManager;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * Band Page Managaer for a Memory Image
+ * @author dmartinezizquierdo
+ *
+ */
+public class TileCacheBandPageManager extends AbstractDisposable implements BandTileManager{
+
+    private TileStructImage tileStructImage;
+    private int bandNumber;
+    private int zoomLevel;
+
+    /**
+     * @param tileStructImage
+     * @param zoomLevel
+     * @param band
+     */
+    public TileCacheBandPageManager(TileStructImage tileStructImage, int zoomLevel, int band){
+        this.tileStructImage=tileStructImage;
+        this.bandNumber=band;
+        this.zoomLevel=zoomLevel;
+    }
+
+    @Override
+    public boolean isSupportedSave() {
+        return false;
+    }
+
+    @Override
+    public Band load(int row, int col, int dataType) throws IOException {
+
+        int tileRow = (int) row / getRowsPerTile();
+        int tileCol = (int) col / getColumnsPerTile();
+
+        return tileStructImage.fetchTile(bandNumber, this.zoomLevel, tileRow, tileCol);
+    }
+
+    @Override
+    public BandInfo getBandInfo() {
+        //FIXME
+        return null;
+    }
+
+    @Override
+    public void save(Buffer buffer, int row, int rows, int col, int cols,
+        int dataType) throws IOException {
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public int getRowsPerTile() {
+        return tileStructImage.getRowsPerTile();
+    }
+
+    @Override
+    public int getColumnsPerTile() {
+        return tileStructImage.getColumnsPerTile();
+    }
+
+    @Override
+    public TileStruct getTileStruct() {
+        return tileStructImage.getTileStruct();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        this.tileStructImage = null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/TileCacheStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,65 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStoreProvider;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Factory for TileCache provider
+ * @author dmartinezizquierdo
+ *
+ */
+public class TileCacheStoreProviderFactory extends AbstractRasterStoreProviderFactory {
+
+    private static final Logger logger = LoggerFactory.getLogger(TileCacheStoreProviderFactory.class);
+
+    protected TileCacheStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+
+    @Override
+    public DataStoreProvider createProvider(DataParameters parameters,
+        DataStoreProviderServices providerServices) throws InitializeException {
+        return (DataStoreProvider) new TileCacheStoreProvider((TileCacheStoreProviderParameters)parameters,providerServices);
+    }
+
+    @Override
+    public DynObject createParameters() {
+        return new TileCacheStoreProviderParameters();
+    }
+    
+  @Override
+  public boolean isHidden() {
+    return DALLocator.getDataManager().isTheOldRasterRegistered();
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/src/main/java/org/gvsig/raster/tilecache/provider/MemoryTileCacheStoreProvider.java	(revision 46118)
@@ -0,0 +1,152 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.tilecache.provider;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DataStoreNotification;
+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.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.metadata.MetadataManager;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.raster.lib.buffer.api.TileStruct;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ * Provider for Tile Cache
+ *
+ * @author dmartinezizquierdo
+ *
+ */
+public class MemoryTileCacheStoreProvider extends AbstractTileCacheStoreProvider implements //RasterCacheStoreProvider,
+    ResourceConsumer {
+
+    private static final Logger logger = LoggerFactory.getLogger(MemoryTileCacheStoreProvider.class);
+
+    public static String NAME = "MemoryTileCache";
+    public static String DESCRIPTION = "Memory Tile cache provider";
+    public static final String METADATA_DEFINITION_NAME = NAME;
+
+    private final SimpleTaskStatus taskStatus;
+
+    protected static void registerMetadataDefinition() throws MetadataException {
+        MetadataManager manager = MetadataLocator.getMetadataManager();
+        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
+            manager.addDefinition(METADATA_DEFINITION_NAME,
+                MemoryTileCacheStoreProviderParameters.class.getResourceAsStream("TileCacheMetadata.xml"),
+                MemoryTileCacheStoreProviderParameters.class.getClassLoader());
+        }
+    }
+
+    /**
+     * @param params
+     * @param storeServices
+     * @throws InitializeException
+     */
+    public MemoryTileCacheStoreProvider(MemoryTileCacheStoreProviderParameters params, DataStoreProviderServices storeServices)
+        throws InitializeException {
+        super(params, storeServices, FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME));
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("MemoryTileCache");
+        this.init(params, storeServices);
+    }
+
+    protected MemoryTileCacheStoreProvider(MemoryTileCacheStoreProviderParameters params, DataStoreProviderServices storeServices,
+        DynObject metadata) throws InitializeException {
+        super(params, storeServices, metadata);
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+        this.taskStatus = manager.createDefaultSimpleTaskStatus("MemoryTileCache");
+        this.init(params, storeServices);
+    }
+
+    protected void init(MemoryTileCacheStoreProviderParameters params,
+        DataStoreProviderServices storeServices) throws InitializeException {
+        bandsNumber = ((RasterStore)storeServices).getBands();
+
+        if (params == null) {
+            throw new InitializeException(
+                new NullPointerException("params is null"));
+        }
+    }
+
+    @Override
+    public MemoryTileCacheStoreProviderParameters getParameters() {
+        return (MemoryTileCacheStoreProviderParameters) super.getParameters();
+    }
+
+    @Override
+    public ResourceProvider getResource() {
+        return null;
+    }
+
+    @Override
+    public Object getSourceId() {
+        return this.innerProvider.getSourceId()+"_MemoryTileCache";
+    }
+
+    @Override
+    public String getProviderName() {
+        return NAME;
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        return true;
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(DataStoreNotification.RESOURCE_CHANGED, resource);
+    }
+
+    @Override
+    public void apply(RasterStoreProvider provider, IProjection crs, RasterQuery query) throws DataException {
+        super.apply(provider, crs, query);
+
+        setTileStructImage(new MemoryTileStructImage(provider, query));
+    }
+
+    @Override
+    public RasterStoreProvider getInnerProvider() {
+        return innerProvider;
+    }
+
+    @Override
+    public TileStruct getTileStruct() {
+        return innerProvider.getTileStruct();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster/pom.xml	(revision 46118)
@@ -0,0 +1,51 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.tilecache</artifactId>
+      <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.fmap.dal.tilecache.raster</artifactId>
+    <name>${project.artifactId}</name>
+    <description>Provider for tiled cache</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</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>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.tilecache/org.gvsig.fmap.dal.tilecache.raster
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.lib/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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.344/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.344/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 46118)
@@ -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
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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" order="10">
+          <description></description>
+        </field>
+        <field name="dbuser" type="string" mandatory="false" group="Basic" order="20">
+          <description></description>
+        </field>
+        <field name="password" type="string" subtype="Password" mandatory="false" group="Basic" order="30">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,117 @@
+<?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" order="40">
+                    <description>Name of the table or view to access</description>
+                </field>
+                <field name="DefaultGeometryField" type="string" mandatory="false" group="Basic" order="50">
+                    <description>Default geometry field</description>
+                </field>
+
+                <field name="GeometryType" type="integer" mandatory="false" defaultValue="-1" group="Basic" order="60">
+                  <description>Geometry type</description>
+                  <availableValues>
+                      <value label="(Select an item)">-1</value>
+                      <value label="GEOMETRY">0</value>
+                      <value label="POINT">1</value>
+                      <value label="MULTIPOINT">7</value>
+                      <value label="CIRCLE">11</value>
+                      <value label="ARC">12</value>
+                      <value label="ELLIPSE">13</value>
+                      <value label="SPLINE">14</value>
+                      <value label="ELLIPTICARC">15</value>
+                      <value label="LINE">18</value>
+                      <value label="POLYGON">19</value>
+                      <value label="MULTILINE">21</value>
+                      <value label="MULTIPOLYGON">22</value>
+                      <value label="CIRCUMFERENCE">23</value>
+                      <value label="PERIELLIPSE">24</value>
+                      <value label="FILLEDSPLINE">25</value>
+                  </availableValues>
+                </field>
+
+                <field name="GeometrySubtype" type="integer" mandatory="false" defaultValue="4" group="Basic" order="70">
+                  <description>Geometry subtype</description>
+                  <availableValues>
+                      <value label="(Select an item)">4</value>
+                      <value label="GEOM2D">0</value>
+                      <value label="GEOM3D">1</value>
+                      <value label="GEOM2DM">2</value>
+                      <value label="GEOM3DM">3</value>
+                  </availableValues>
+                </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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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
+			);
+		}
+	}
+
+        public static void registerParametersDefinition(String name, Class theClass, InputStream resource) {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		if (manager.getDefinition(name) == null) {
+			if( resource==null ) {
+				throw new IllegalArgumentException("resource null not allowed.");
+			}
+                        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, 
+					resource,
+					theClass.getClassLoader()
+			);
+		}
+	}
+	@SuppressWarnings("unchecked")
+	public static void registerMetadataDefinition(String name, Class theClass, InputStream resource) throws MetadataException {
+		MetadataManager manager = MetadataLocator.getMetadataManager();
+		if( manager.getDefinition(name)==null ) {
+			manager.addDefinition(
+					name, 
+					resource,
+					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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,644 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.feature.Feature;
+import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
+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.Geometry;
+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
+		OpenFeatureStoreParameters, 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";
+
+        /**
+	 * Parameter name for <code>GeometryType</code><br>
+	 * 
+	 * @see #setGeometryType(int)
+	 * @see #getGeometryType()
+	 */
+	public static final String GEOMETRYTYPE_PARAMTER_NAME = "GeometryType";
+	/**
+	 * Parameter name for <code>GeometrySubtype</code><br>
+	 * 
+	 * @see #setGeometrySubtype(int)
+	 * @see #getGeometrySubtype()
+	 */
+	public static final String GEOMETRYSUBTYPE_PARAMTER_NAME = "GeometrySubtype";
+
+	/**
+	 * 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);
+	}
+
+        public int getGeometryType() {
+            Integer geomType = (Integer) this.getDynValue(GEOMETRYTYPE_PARAMTER_NAME);
+            return geomType == null ? Geometry.TYPES.UNKNOWN:geomType;
+	}
+
+	public void setGeometryType(int geometryType) {
+		this.setDynValue(GEOMETRYTYPE_PARAMTER_NAME, geometryType);
+	}
+
+        public int getGeometrySubtype() {
+            Integer geomSubtype = (Integer) this.getDynValue(GEOMETRYSUBTYPE_PARAMTER_NAME);
+            return geomSubtype == null ? Geometry.SUBTYPES.UNKNOWN:geomSubtype;
+	}
+
+	public void setGeometrySubtype(int geometrySubtype) {
+		this.setDynValue(GEOMETRYSUBTYPE_PARAMTER_NAME, geometrySubtype);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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);
+    }
+
+    @Override
+    public EditableFeatureType getDefaultFeatureType() {
+        return (EditableFeatureType) this.getDynValue(FEATURETYPE_PARAMTER_NAME);
+    }
+
+    @Override
+    public void setDefaultFeatureType(FeatureType featureType) {
+        if( !(featureType instanceof EditableFeatureType) ) {            
+            this.setDynValue(FEATURETYPE_PARAMTER_NAME, featureType.getEditable());
+        } else {
+            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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.db;
+
+import org.gvsig.fmap.dal.DataParameters;
+
+/**
+ * Interface for describe parameters of a Data Base
+ *
+ *
+ * @author jmvivo
+ *
+ */
+public interface DBParameters extends DataParameters {
+
+	/**
+	 * 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.serverexplorer.db.spi;
+
+import java.util.List;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataServerExplorer.MODE_ALL;
+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.InitializeException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorer;
+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 AbstractDataServerExplorer
+        implements DBServerExplorer, DataServerExplorerProvider {
+
+    protected AbstractDBServerExplorer(DataServerExplorerParameters parameters,
+            DataServerExplorerProviderServices services) {
+        super(parameters, services);
+    }
+
+    /**
+     * Return the name of {@link DataStoreProvider} returned by this
+     * ServerExplorer
+     *
+     * @return
+     */
+    public abstract String getStoreName();
+
+    @Override
+    public boolean canAdd(String storeName) throws DataException {
+        return getStoreName().equals(storeName);
+    }
+
+    @Override
+    public NewDataStoreParameters getAddParameters(String storeName)
+            throws DataException {
+        if (!getStoreName().equals(storeName)) {
+            // FIXME exception
+            throw new IllegalArgumentException();
+        }
+        
+        return getAddParameters();
+    }
+
+    @Override
+    public List list() throws DataException {
+        return this.list(MODE_ALL);
+    }
+
+    @Override
+    public DataStore open(DataStoreParameters dsp) throws DataException {
+        DataManager dataMan = DALLocator.getDataManager();
+        try {
+            DataStore store = dataMan.openStore(dsp.getProviderName(), dsp);
+            return store;
+        } catch (ValidateDataParametersException e) {
+            throw new InitializeException(e);
+        }
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml	(revision 46118)
@@ -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.fmap.dal.db</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <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>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal</artifactId>
+      <version>2.0.344</version>
+  </parent>  
+
+  <modules>
+    <module>org.gvsig.fmap.dal.db.lib</module>
+    <module>org.gvsig.fmap.dal.db.jdbc</module>
+    <module>org.gvsig.fmap.dal.db.mdb</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestPerformChangesUpdateStructure.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestPerformChangesUpdateStructure.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestPerformChangesUpdateStructure.java	(revision 46118)
@@ -0,0 +1,290 @@
+package org.gvsig.fmap.dal.store.jdbc2.operations.sql;
+
+import java.util.Collections;
+import java.util.List;
+import junit.framework.TestCase;
+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.store.jdbc2.AbstractTestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils.Expecteds;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractTestPerformChangesUpdateStructure extends TestCase {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestPerformChangesUpdateStructure.class);
+
+    protected AbstractTestUtils utils;
+
+    public AbstractTestPerformChangesUpdateStructure(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public AbstractTestUtils utils() {
+        if (this.utils == null) {
+            this.utils = this.createUtils();
+        }
+        return this.utils;
+    }
+
+    protected abstract AbstractTestUtils createUtils();
+
+    protected void testPerformChangesAddPk() throws Exception {
+        JDBCHelper helper = utils().createJDBCHelper();
+        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+        OperationsFactory operations = helper.getOperations();
+
+        Expecteds expecteds = utils().getExpecteds("performChangesUpdateStructure.txt");
+
+        FeatureStore sourceStore = utils().openSourceStore1();
+
+        TableReference table = operations.createTableReference(
+                "dbtest",
+                sqlbuilder.default_schema(),
+                "test",
+                null
+        );
+        FeatureType featureType = sourceStore.getDefaultFeatureType();
+
+        FeatureType.FeatureTypeChanged featureTypeChanged = new FeatureType.FeatureTypeChanged() {
+            @Override
+            public FeatureType getSource() {
+                EditableFeatureType ft = featureType.getCopy().getEditable();
+                ft.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+                return ft;
+            }
+
+            @Override
+            public FeatureType getTarget() {
+                return featureType;
+            }
+        };
+        List<FeatureType.FeatureTypeChanged> featureTypesChangeds = Collections.singletonList(featureTypeChanged);
+
+        PerformChangesOperation performChanges = operations.createPerformChanges(
+                table,
+                sourceStore.getDefaultFeatureType(),
+                null,
+                null,
+                null,
+                featureTypesChangeds.iterator()
+        );
+        List<String> updateTableSQLs = performChanges.getUpdateTableSQLs();
+        
+        for (int i = 0; i < expecteds.size("PerformChangesAddPk"); i++) {
+            System.out.println("###### EXP[" + i + "]:" + expecteds.get("PerformChangesAddPk",i) + "###");
+        }
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            System.out.println("###### SQL[" + i + "]:" + updateTableSQLs.get(i) + "###");
+        }
+
+        assertEquals("num sqls", expecteds.size("PerformChangesAddPk"), updateTableSQLs.size());
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            assertEquals("Check "+i, expecteds.get("PerformChangesAddPk",i), updateTableSQLs.get(i));
+        }
+    }
+
+    protected void testChangePk1() throws Exception {
+        JDBCHelper helper = utils().createJDBCHelper();
+        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+        OperationsFactory operations = helper.getOperations();
+
+        Expecteds expecteds = utils().getExpecteds("performChangesUpdateStructure.txt");
+
+        FeatureStore sourceStore = utils().openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv");
+
+        TableReference table = operations.createTableReference(
+                "dbtest",
+                sqlbuilder.default_schema(),
+                "test",
+                null
+        );
+        EditableFeatureType sourceFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        EditableFeatureType targetFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        
+        sourceFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+        sourceFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(false);
+
+        targetFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(true);
+        targetFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(false);
+
+        FeatureType.FeatureTypeChanged featureTypeChanged = new FeatureType.FeatureTypeChanged() {
+            @Override
+            public FeatureType getSource() {
+                return sourceFeatureType;
+            }
+
+            @Override
+            public FeatureType getTarget() {
+                return targetFeatureType;
+            }
+        };
+        List<FeatureType.FeatureTypeChanged> featureTypesChangeds = Collections.singletonList(featureTypeChanged);
+
+        PerformChangesOperation performChanges = operations.createPerformChanges(
+                table,
+                sourceStore.getDefaultFeatureType(),
+                null,
+                null,
+                null,
+                featureTypesChangeds.iterator()
+        );
+        List<String> updateTableSQLs = performChanges.getUpdateTableSQLs();
+        
+        for (int i = 0; i < expecteds.size("changePk1"); i++) {
+            System.out.println("###### EXP[" + i + "]:" + expecteds.get("changePk1",i) + "###");
+        }
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            System.out.println("###### SQL[" + i + "]:" + updateTableSQLs.get(i) + "###");
+        }
+
+        assertEquals("num sqls", expecteds.size("changePk1"), updateTableSQLs.size());
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            assertEquals("Check "+i, expecteds.get("changePk1",i), updateTableSQLs.get(i));
+        }
+    }
+
+    protected void testChangePk2() throws Exception {
+        JDBCHelper helper = utils().createJDBCHelper();
+        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+        OperationsFactory operations = helper.getOperations();
+
+        Expecteds expecteds = utils().getExpecteds("performChangesUpdateStructure.txt");
+
+        FeatureStore sourceStore = utils().openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv");
+
+        TableReference table = operations.createTableReference(
+                "dbtest",
+                sqlbuilder.default_schema(),
+                "test",
+                null
+        );
+        EditableFeatureType sourceFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        EditableFeatureType targetFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        
+        sourceFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(true);
+        sourceFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(false);
+
+        targetFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+        targetFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(true);
+
+        FeatureType.FeatureTypeChanged featureTypeChanged = new FeatureType.FeatureTypeChanged() {
+            @Override
+            public FeatureType getSource() {
+                return sourceFeatureType;
+            }
+
+            @Override
+            public FeatureType getTarget() {
+                return targetFeatureType;
+            }
+        };
+        List<FeatureType.FeatureTypeChanged> featureTypesChangeds = Collections.singletonList(featureTypeChanged);
+
+        PerformChangesOperation performChanges = operations.createPerformChanges(
+                table,
+                sourceStore.getDefaultFeatureType(),
+                null,
+                null,
+                null,
+                featureTypesChangeds.iterator()
+        );
+        List<String> updateTableSQLs = performChanges.getUpdateTableSQLs();
+        
+        for (int i = 0; i < expecteds.size("changePk2"); i++) {
+            System.out.println("###### EXP[" + i + "]:" + expecteds.get("changePk2",i) + "###");
+        }
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            System.out.println("###### SQL[" + i + "]:" + updateTableSQLs.get(i) + "###");
+        }
+
+        assertEquals("num sqls", expecteds.size("changePk2"), updateTableSQLs.size());
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            assertEquals("Check "+i, expecteds.get("changePk2",i), updateTableSQLs.get(i));
+        }
+    }
+
+    protected void testChangePk3() throws Exception {
+        JDBCHelper helper = utils().createJDBCHelper();
+        JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+        OperationsFactory operations = helper.getOperations();
+
+        Expecteds expecteds = utils().getExpecteds("performChangesUpdateStructure.txt");
+
+        FeatureStore sourceStore = utils().openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv");
+
+        TableReference table = operations.createTableReference(
+                "dbtest",
+                sqlbuilder.default_schema(),
+                "test",
+                null
+        );
+        EditableFeatureType sourceFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        EditableFeatureType targetFeatureType = sourceStore.getDefaultFeatureType().getCopy().getEditable();
+        
+        sourceFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(true);
+        sourceFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(false);
+
+        targetFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+        targetFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(false);
+        
+        targetFeatureType.getEditableAttributeDescriptor("ID").setIsIndexed(true);
+        targetFeatureType.getEditableAttributeDescriptor("NAME").setIsIndexed(true);
+
+        FeatureType.FeatureTypeChanged featureTypeChanged = new FeatureType.FeatureTypeChanged() {
+            @Override
+            public FeatureType getSource() {
+                return sourceFeatureType;
+            }
+
+            @Override
+            public FeatureType getTarget() {
+                return targetFeatureType;
+            }
+        };
+        List<FeatureType.FeatureTypeChanged> featureTypesChangeds = Collections.singletonList(featureTypeChanged);
+
+        PerformChangesOperation performChanges = operations.createPerformChanges(
+                table,
+                sourceStore.getDefaultFeatureType(),
+                null,
+                null,
+                null,
+                featureTypesChangeds.iterator()
+        );
+        List<String> updateTableSQLs = performChanges.getUpdateTableSQLs();
+        
+        System.out.println("###### testChangePk3");
+        for (int i = 0; i < expecteds.size("changePk3"); i++) {
+            System.out.println("###### EXP[" + i + "]:" + expecteds.get("changePk3",i) + "###");
+        }
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            System.out.println("###### SQL[" + i + "]:" + updateTableSQLs.get(i) + "###");
+        }
+
+        assertEquals("num sqls", expecteds.size("changePk3"), updateTableSQLs.size());
+        for (int i = 0; i < updateTableSQLs.size(); i++) {
+            assertEquals("Check "+i, expecteds.get("changePk3",i), updateTableSQLs.get(i));
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestCount.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestCount.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/sql/AbstractTestCount.java	(revision 46118)
@@ -0,0 +1,126 @@
+package org.gvsig.fmap.dal.store.jdbc2.operations.sql;
+
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+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.store.jdbc2.AbstractTestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils.Expecteds;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractTestCount extends TestCase {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestCount.class);
+
+    protected AbstractTestUtils utils;
+
+    public AbstractTestCount(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public AbstractTestUtils utils() {
+        if (this.utils == null) {
+            this.utils = this.createUtils();
+        }
+        return this.utils;
+    }
+
+    protected abstract AbstractTestUtils createUtils();
+
+    protected void testCount() throws Exception {
+        try {
+            JDBCHelper helper = utils().createJDBCHelper();
+            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+            OperationsFactory operations = helper.getOperations();
+
+            Expecteds expectedSQLs = utils().getExpecteds("count.txt");
+
+            FeatureStore sourceStore = utils().openSourceStore1();
+
+            TableReference table = operations.createTableReference(
+                    "dbtest",
+                    sqlbuilder.default_schema(),
+                    "test",
+                    null
+            );
+            FeatureType featureType = sourceStore.getDefaultFeatureType();
+            CountOperation count = operations.createCount(
+                    featureType,
+                    table,
+                    null,
+                    null
+            );
+
+            String sql = count.getSQL();
+            System.out.println("###### SQL:" + sql+"###");
+            System.out.println("###### EXP:" + expectedSQLs.get("count")+"###");
+
+            assertEquals("Count SQL", expectedSQLs.get("count"), sql);
+        } catch (Throwable th) {
+            LOGGER.warn("", th);
+            throw th;
+        }
+    }
+
+    protected void testSimpleGroup() throws Exception {
+        try {
+            JDBCHelper helper = utils().createJDBCHelper();
+            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+            OperationsFactory operations = helper.getOperations();
+
+            Expecteds expectedSQLs = utils().getExpecteds("count.txt");
+
+            FeatureStore sourceStore = utils().openSourceStore1();
+
+            TableReference table = operations.createTableReference(
+                    "dbtest",
+                    sqlbuilder.default_schema(),
+                    "test",
+                    null
+            );
+            FeatureType featureType = sourceStore.getDefaultFeatureType();
+            FeatureQuery query = sourceStore.createFeatureQuery();
+            query.getGroupByColumns().add("Long");
+            query.getAggregateFunctions().put("ID", "MIN");
+            query.getAggregateFunctions().put("Byte", "MAX");
+            query.getAggregateFunctions().put("Double", "SUM");
+            query.getOrder().add("Long");
+            CountOperation count = operations.createCount(
+                    featureType,
+                    table,
+                    null,
+                    query
+            );
+            String sql = count.getSQL();
+            System.out.println("###### SQL:" + sql+"###");
+            System.out.println("###### EXP:" + expectedSQLs.get("SimpleGroup")+"###");
+
+            assertEquals("Count with group SQL", expectedSQLs.get("SimpleGroup"), sql);
+        } catch (Throwable th) {
+            LOGGER.warn("", th);
+            throw th;
+        }
+    }
+
+    // TODO: a�adir un test con where, group y order.
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/usecases/arena2/AbstractTestMultipleExpansionOfCalculatedField.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/usecases/arena2/AbstractTestMultipleExpansionOfCalculatedField.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/operations/usecases/arena2/AbstractTestMultipleExpansionOfCalculatedField.java	(revision 46118)
@@ -0,0 +1,119 @@
+package org.gvsig.fmap.dal.store.jdbc2.operations.usecases.arena2;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.store.jdbc2.AbstractTestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractTestMultipleExpansionOfCalculatedField extends TestCase {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestMultipleExpansionOfCalculatedField.class);
+
+    public AbstractTestMultipleExpansionOfCalculatedField(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    
+    protected AbstractTestUtils utils;
+
+    public AbstractTestUtils utils() {
+        if (this.utils == null) {
+            this.utils = this.createUtils();
+        }
+        return this.utils;
+    }
+
+    protected abstract AbstractTestUtils createUtils();
+    
+    protected List<String> getExpectedSQLs(String name) throws Exception {
+        return utils().getExpectedSQLs(name);
+    }
+
+    public void testMultipleExpansionOfCalculatedField() throws Exception {
+        try {
+            JDBCHelper helper = utils().createJDBCHelper();
+            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+            OperationsFactory operations = helper.getOperations();
+
+            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testMultipleExpansionOfCalculatedField.sql");
+
+            FeatureStore arena2_conductores = utils().openCSVStore("operations/usecases/arena2/ARENA2_CONDUCTORES.csv");
+            FeatureStore arena2_accidentes = utils().openCSVStore("operations/usecases/arena2/ARENA2_ACCIDENTES.csv");
+            FeatureStore arena2_vehiculos = utils().openCSVStore("operations/usecases/arena2/ARENA2_VEHICULOS.csv");
+
+            TableReference table = operations.createTableReference(
+                    "dbtest",
+                    sqlbuilder.default_schema(),
+                    "ARENA2_CONDUCTORES",
+                    null
+            );
+            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
+            EditableFeatureType eFeatureType = featureType.getEditable();
+            FeatureQuery query = arena2_conductores.createFeatureQuery();
+            addExtraColumn(eFeatureType, query, "AccKm0", DataTypes.DOUBLE, "FOREING_VALUE('ID_ACCIDENTE.KM')");
+            addExtraColumn(eFeatureType, query, "AccKm1", DataTypes.DOUBLE, "AccKm0 * 100");
+            addExtraColumn(eFeatureType, query, "AccKm2", DataTypes.DOUBLE, "AccKm0 * 222");
+            
+            CountOperation count = operations.createCount(eFeatureType, table, null, query);
+            String sqlcount = count.getSQL();
+            System.out.println("###### SQL:" + sqlcount);
+            System.out.println("###### EXP:" + expectedSQLs.get(1));
+            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
+
+            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+                    table,
+                    null,
+                    null,
+                    query,
+                    eFeatureType,
+                    eFeatureType,
+                    15,
+                    0,
+                    0
+            );
+            String sql = resultSetForSetProvider.getSQL();
+            System.out.println("###### SQL:" + sql);
+            System.out.println("###### EXP:" + expectedSQLs.get(0));
+
+            assertEquals("Select SQL", expectedSQLs.get(0), sql);
+            
+            
+        } catch (Throwable th) {
+            th.printStackTrace();
+            throw th;
+        }
+    }
+    
+    private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
+        EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
+        extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestUtils.java	(revision 46118)
@@ -0,0 +1,480 @@
+package org.gvsig.fmap.dal.store.jdbc2;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import static org.gvsig.fmap.dal.DataStore.H2SPATIAL_PROVIDER_NAME;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+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.FeatureStore;
+import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.HasAFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractTestUtils {
+
+    public static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestUtils.class);
+
+    protected static int dbcounter = 1;
+
+    protected Properties properties = null;
+
+    public AbstractTestUtils() {
+
+    }
+
+    public File getTargetFolder() throws Exception {
+        URL url = this.getClass().getResource("/");
+        if (url == null) {
+            url = AbstractTestUtils.class.getResource("/");
+        }
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+
+    public File getResource(String name) throws Exception {
+        File x = new File(getTargetFolder(), name);
+        return x;
+    }
+
+    public File getResourceAsFile(String pathname) throws Exception {
+        URL url = this.getClass().getResource(pathname);
+        if (url == null) {
+            url = AbstractTestUtils.class.getResource(pathname);
+        }
+        if( StringUtils.equalsIgnoreCase(url.getProtocol(),"file") ) {
+            File x = new File(url.toURI());
+            return x;
+        }
+        File tmp = new File( this.getTargetFolder(), FilenameUtils.getName(pathname));
+        IOUtils.copy(url, tmp);
+        return tmp;
+    }
+
+    public File getFile(File name) throws Exception {
+        File f = this.getResource(String.format(
+                "%s-%d-%03d",
+                name.getPath(),
+                System.currentTimeMillis(),
+                dbcounter++
+        )
+        );
+        FileUtils.forceMkdir(f.getParentFile());
+        return f;
+    }
+
+    public File getFolder(File name) throws Exception {
+        File f = this.getResource(String.format(
+                "%s-%d-%03d",
+                name.getPath(),
+                System.currentTimeMillis(),
+                dbcounter++
+        )
+        );
+        FileUtils.forceMkdir(f);
+        return f;
+    }
+
+    public JDBCServerExplorerParameters getH2SpatialServerExplorerParameters(String dbname) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        JDBCServerExplorerParameters conn = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters(H2SPATIAL_PROVIDER_NAME);
+
+        File dbfile = this.getResource(String.format(
+                "test-dbs/%s-%d-%03d",
+                dbname,
+                System.currentTimeMillis(),
+                dbcounter++
+        )
+        );
+//        System.out.println("#### dbfile: " + dbfile.getAbsolutePath());
+        FileUtils.forceMkdir(dbfile.getParentFile());
+        ((HasAFile) conn).setFile(dbfile);
+        return conn;
+    }
+
+    public FeatureProvider getFeatureProvider(Feature feature) {
+        return ((DefaultFeature) feature).getData();
+    }
+
+    public Expecteds getExpecteds(String name) throws Exception {
+        Expecteds x = new Expecteds();
+        x.normaliceSpaces = false;
+        x.removeNL = true;
+        x.stripStart = true;
+        File f = getResourceAsFile(getExpectedsPath() + "/" + name);
+        x.parse(f);
+        return x;
+    }
+
+    public static class Expecteds {
+
+        private Map<String, List<String>> expecteds = new HashMap<>();
+
+        public boolean normaliceSpaces = false;
+        public boolean stripStart = false;
+        public boolean removeNL = false;
+
+        public String startLineComment = "-- ";
+        
+        private static class CommandLine {
+
+            private final String[] cmd;
+
+            private CommandLine(String line, String prefix) {
+                line = StringUtils.substring(line, prefix.length());
+                line = StringUtils.normalizeSpace(line);
+                this.cmd = StringUtils.split(line);
+            }
+
+            public boolean isTrue(int argn, boolean defaultValue) {
+                if (argn >= this.cmd.length) {
+                    return defaultValue;
+                }
+                return BooleanUtils.toBoolean(this.cmd[argn]);
+            }
+            
+            public String get(int argn) {
+                return this.cmd[argn];
+            }
+            
+            public int size() {
+                return this.cmd.length;
+            }
+        }
+
+        public Expecteds() throws Exception {
+            
+        }
+        
+        public void parse(File f) throws Exception {
+            final int SEARCHING_ITEM = 0;
+            final int READING_ITEM = 1;
+            boolean localNormaliceSpaces = false;
+            boolean localStripStart = false;
+            boolean localRemoveNL = false;
+            String name = f.getName();
+
+            List<String> lines = FileUtils.readLines(f);
+
+            StringBuilder sb = null;
+            String currentItem = null;
+            int lineno = 1;
+            int state = SEARCHING_ITEM;
+            for (String line : lines) {
+                line = line + "\n";
+                switch (state) {
+                    case SEARCHING_ITEM:
+                        if (line.toLowerCase().startsWith(startLineComment + "normalize-spaces")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            normaliceSpaces = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "strip-start")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            stripStart = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "remove-nl")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            removeNL = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "begin ")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            currentItem = cmd.get(1);
+                            sb = new StringBuilder();
+                            state = READING_ITEM;
+                            localNormaliceSpaces = normaliceSpaces;
+                            localStripStart = stripStart;
+                            localRemoveNL = removeNL;
+                        } else if (line.toLowerCase().startsWith(startLineComment + "rem ")) {
+                            // do nothing skip comment
+                        } else if (!StringUtils.isBlank(line)) {
+                            throw new IllegalStateException("Syntax error at '" + name + "', line " + lineno + ".");
+                        }
+                        break;
+                    case READING_ITEM:
+                        if (line.toLowerCase().startsWith(startLineComment + "normalize-spaces")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            localNormaliceSpaces = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "strip-start")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            localStripStart = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "remove-nl")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            localRemoveNL = cmd.isTrue(1, true);
+                        } else if (line.toLowerCase().startsWith(startLineComment + "end ")) {
+                            CommandLine cmd = new CommandLine(line, startLineComment);
+                            if (!StringUtils.equals(currentItem, cmd.get(1)) )  {
+                                throw new IllegalStateException("Syntax error at '" + name + "', line " + lineno + ", expected '" + startLineComment + "end " + currentItem + "', and found " + line + ".");
+                            }
+                            String s = sb.toString();
+                            if (s.endsWith("\n")) {
+                                s = s.substring(0, s.length() - 1);
+                            }
+                            if (localNormaliceSpaces) {
+                                s = StringUtils.normalizeSpace(s);
+                            }
+                            
+                            List<String> value = expecteds.get(currentItem);
+                            if( value == null ) {
+                                value = new ArrayList<>();
+                                expecteds.put(currentItem, value);
+                            }
+                            value.add(s);
+                            state = SEARCHING_ITEM;
+
+                        } else if (line.toLowerCase().startsWith(startLineComment + "rem ")) {
+                            // do nothing skip comment
+                        } else {
+                            if (localStripStart) {
+                                line = StringUtils.stripStart(line, null);
+                            }
+                            if (localRemoveNL) {
+                                line = StringUtils.remove(line, "\n");
+                                line = StringUtils.remove(line, "\r");
+                            }
+                            sb.append(line);
+                        }
+                        break;
+                }
+                lineno++;
+            }
+            if (state != SEARCHING_ITEM) {
+                throw new IllegalStateException("Syntax error at '" + name + "', expected '" + startLineComment + "end " + currentItem + "' and found EOF .");
+            }
+        }
+
+        public String get(String name) {
+            List<String> value = this.expecteds.get(name);
+            if( CollectionUtils.isEmpty(value) ) {
+                return null;
+            }
+            return value.get(0);
+        }
+
+        public String get(String name, int index) {
+            List<String> value = this.expecteds.get(name);
+            if( CollectionUtils.isEmpty(value) ) {
+                return null;
+            }
+            return value.get(index);
+        }
+        
+        public int size(String name) {
+            List<String> value = this.expecteds.get(name);
+            if( CollectionUtils.isEmpty(value) ) {
+                return 0;
+            }
+            return value.size();
+        }
+    }
+
+    public void removeResource(JDBCServerExplorer explorer, String storeName, String resourceName) throws Exception {
+        JDBCStoreParameters storeParams = explorer.get(storeName);
+        ResourcesStorage resourcesStorage = explorer.getResourcesStorage(storeParams);
+        if( resourcesStorage.allowRemove() ) {
+            resourcesStorage.remove(resourceName);
+        }
+    }
+
+    public void info_h2sql(String label, File file) {
+        System.out.println("");
+        System.out.println("#h2console "+label+": "+file.getName());
+        System.out.println("cd '"+file.getParent()+"'; h2sql -d '"+file.getName()+"' -user SA");
+        System.out.println("jdbc:h2:"+file.getAbsolutePath()+";MODE=PostgreSQL;SCHEMA=PUBLIC;ALLOW_LITERALS=ALL");
+        System.out.println("jdbc:h2:tcp://127.0.1.1:9123/"+file.getAbsolutePath()+";MODE=PostgreSQL;SCHEMA=PUBLIC;ALLOW_LITERALS=ALL");
+        System.out.println("");
+    }
+    
+    public void info_jdbc(String label, JDBCServerExplorerParameters parameters) {
+        if( StringUtils.equalsIgnoreCase(parameters.getProviderName(), FeatureStore.H2SPATIAL_PROVIDER_NAME) ) {
+            info_h2sql(label, ((HasAFile)parameters).getFile());
+            return;
+        }
+        System.out.println("");
+        System.out.println("# Connection "+label);
+        System.out.println(parameters.getUrl());
+        System.out.println("");
+    }
+    
+    public void info_jdbc(String label, JDBCServerExplorer explorer) {
+        info_jdbc(label, explorer.getParameters());
+    }
+    
+    public void info_jdbc(JDBCServerExplorer explorer) {
+        JDBCServerExplorerParameters params = explorer.getParameters();
+        info_jdbc(params.getDBName(), params);
+    }
+    
+    protected boolean getPropertyBoolean(String name) {
+        Properties props = this.getProperties();
+        return BooleanUtils.toBoolean(props.getProperty(name));
+    }
+    
+    protected int getPropertyInt(String name, int defaultValue) {
+        Properties props = this.getProperties();
+        return NumberUtils.toInt(props.getProperty(name), defaultValue);
+    }
+    
+    protected String getProperty(String name) {
+        Properties props = this.getProperties();
+        return props.getProperty(name);
+    }
+    
+    protected Properties getProperties() {
+        if( this.properties == null ) {
+            try {
+                Properties props = new Properties();
+                this.properties = props;
+            } catch(Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+        return this.properties;
+    }
+
+    public boolean isTheDatabaseAvailable() {
+        return true;
+    }
+
+    public FeatureStore openCSVStore(String pathname) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResourceAsFile(pathname);
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",f,
+                "automaticTypesDetection=", false,
+                "locale=","en"
+        );
+        return store;
+    }
+    
+    public FeatureStore openSourceStore1() throws Exception {
+        return this.openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/testCreateSource1.csv");
+    }
+
+    public FeatureStore openSourceStore2() throws Exception {
+        return this.openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/testCreateSource2.csv");
+    }
+
+    public FeatureStore openStore(JDBCServerExplorer explorer, String name) throws Exception {
+        JDBCStoreParameters params = explorer.get(name);
+        
+        DataManager dataManager = DALLocator.getDataManager();
+        FeatureStore store;
+        try {
+            store = (FeatureStore) dataManager.openStore(
+                    getProviderName(), 
+                    params
+            );
+        } catch(ValidateDataParametersException ex) {
+            LOGGER.warn(ex.getLocalizedMessageStack());
+            throw ex;
+        }
+        return store;
+    }
+
+    public void create_table_from(JDBCServerExplorer targetExplorer, String targetName, FeatureStore sourceStore) throws Exception {
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) targetExplorer.getAddParameters(
+                targetName
+        );
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.addAll(sourceStore.getDefaultFeatureType());
+        targetExplorer.add(getProviderName(), params, true);
+    }
+    
+    public void insert_into_from(JDBCServerExplorer targetExplorer, String targetName, FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openStore(targetExplorer, targetName);
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+    
+    public JDBCServerExplorer openServerExplorer(String dbname) throws Exception {        
+        DataManager dataManager = DALLocator.getDataManager();
+        JDBCServerExplorerParameters params = this.getServerExplorerParameters(dbname);
+        JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                this.getProviderName(), 
+                params
+        );
+        return explorer;
+    }
+
+    public void drop_tables(JDBCServerExplorer explorer, String...tables) throws Exception {
+        for (String table : tables) {
+            String sql = "DROP TABLE IF EXISTS \""+table+"\"";
+            explorer.execute(sql);
+            removeResource(explorer, table, "dal");
+        }
+    }
+    
+    public void initWorkspace(String name) throws Exception {
+        JDBCServerExplorer explorer = this.openServerExplorer(name);
+        DataManager manager = DALLocator.getDataManager();
+        DatabaseWorkspaceManager ws = manager.createDatabaseWorkspaceManager(explorer.getParameters());
+        ws.connect();
+        if (!ws.existsTable(DatabaseWorkspaceManager.TABLE_CONFIGURATION)) {
+            ws.createTable(DatabaseWorkspaceManager.TABLE_CONFIGURATION);
+        }
+        if (!ws.existsTable(DatabaseWorkspaceManager.TABLE_RESOURCES)) {
+            ws.createTable(DatabaseWorkspaceManager.TABLE_RESOURCES);
+        }
+    }
+    
+    public List<String> getExpectedSQLs(String name) throws Exception {
+        File f = getResourceAsFile(getExpectedsPath() + "/" + name);
+        List<String> SQLs = new ArrayList<>();
+        List<String> lines = FileUtils.readLines(f);
+        StringBuilder sb = new StringBuilder();
+        for (String line : lines) {
+            line = StringUtils.stripStart(line, null);
+            if (line.startsWith("--")) {
+                continue;
+            }
+            if (line.endsWith(";")) {
+                sb.append(line.substring(0, line.length() - 1));
+                SQLs.add(sb.toString());
+                sb.setLength(0);
+            } else {
+                sb.append(line);
+            }
+        }
+        return SQLs;
+    }
+
+    
+//    public abstract String getExpectedResourcesPrefix(); // Ex. "h2spatial"
+
+    public abstract String getExpectedsPath();
+    
+    public abstract JDBCHelper createJDBCHelper() throws Exception;
+
+    public abstract String getProviderName();
+    
+    public abstract JDBCServerExplorerParameters getServerExplorerParameters(String dbname) throws Exception;
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/SQLBuilderTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/SQLBuilderTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/SQLBuilderTest.java	(revision 46118)
@@ -0,0 +1,618 @@
+package org.gvsig.fmap.dal.store.jdbc2;
+
+import java.util.ArrayList;
+import java.util.List;
+import junit.framework.TestCase;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.ListUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.Privilege;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.EditableForeingKey;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
+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.primitive.Polygon;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class SQLBuilderTest extends TestCase {
+    
+    public SQLBuilderTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private SQLBuilder createSQLBuilder() {
+        return new SQLBuilderBase();
+    }
+    
+ 
+    public void testCalulateEnvelope() throws Exception {
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+        
+        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
+        limit.addVertex(0, 0);
+        limit.addVertex(0, 100);
+        limit.addVertex(100, 100);
+        limit.addVertex(100, 0);
+        limit.addVertex(0, 0);
+        
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(
+            expbuilder.as_geometry(
+              expbuilder.ST_ExtentAggregate(
+                expbuilder.column("the_geom")
+              )
+            )
+        ).as("envelope");
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.ST_Intersects(
+                expbuilder.ST_Envelope(
+                    expbuilder.column("the_geom")
+                ),
+                expbuilder.geometry(limit, proj)
+            )
+        );
+        sqlbuilder.select().where().and(
+                expbuilder.custom("x = 27")
+        );
+        
+        System.out.println("# Test:: testCalulateEnvelope");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "SELECT ST_AsBinary(ST_ExtentAggregate(\"the_geom\")) AS \"envelope\" FROM \"master\".\"dbo\".\"test1\" WHERE (ST_Intersects((ST_Envelope(\"the_geom\")), (ST_GeomFromWKB((DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000','hex')), (4326)))) AND x = 27)",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[the_geom]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testCount() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(sqlbuilder.count().all());
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().from().subquery(null);
+        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
+
+        System.out.println("# Test:: testCount");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+
+        //# Test:: testCount
+        //# SQL:: SELECT COUNT(*) FROM "master"."dbo"."test1" WHERE pp = 200
+        //# Variables:: []
+        //# Parametros:: []
+
+        assertEquals(
+                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testCreateTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.create_table().add_column(
+                "name",
+                DataTypes.STRING,
+                45,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+        sqlbuilder.create_table().add_column(
+                "id",
+                DataTypes.INT,
+                0,
+                0,
+                0,
+                true,
+                false,
+                false,
+                true,
+                0
+        );
+        sqlbuilder.create_table().add_column(
+                "geom",
+                DataTypes.GEOMETRY,
+                0,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+
+        
+        // CREATE TABLE "master"."dbo"."test1" ("name" VARCHAR(45) DEFAULT NULL NULL, "id" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, "geom" TEXT DEFAULT NULL NULL )
+        System.out.println("# Test:: testCreateTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\" SERIAL DEFAULT '0' NOT NULL PRIMARY KEY, \"geom\" TEXT DEFAULT NULL NULL )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testDropTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
+
+        // DROP TABLE "master"."dbo"."test1"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'
+        
+        System.out.println("# Test:: testDropTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "DROP TABLE \"master\".\"dbo\".\"test1\"; DELETE FROM GEOMETRY_COLUMNS WHERE f_table_schema = 'dbo' AND f_table_name = 'test1'",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureProviderByReference() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        String value = "yoyo";
+        sqlbuilder.select().column().name("name");
+        sqlbuilder.select().column().name("id");
+        sqlbuilder.select().column().name("geom").as_geometry();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.eq(
+                expbuilder.column("name"),
+                expbuilder.parameter(value).as_constant()
+            )
+        );
+        sqlbuilder.select().limit(1);
+
+        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
+
+        System.out.println("# Test:: testFetchFeatureProviderByReference");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "['yoyo']",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureType() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().all();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().limit(1);
+
+        System.out.println("# Test:: testFetchFeatureType");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        
+        //# Test:: testFetchFeatureType
+        //# SQL:: SELECT * FROM [master].[dbo].[test1] LIMMIT 1
+        //# Variables:: []
+        //# Parametros:: []        
+        
+        assertEquals(
+                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+        
+    public void testPerformDeletes() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id1"),
+                expbuilder.parameter("id1").as_variable()
+            )
+        );
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id2"),
+                expbuilder.parameter("id2").as_variable()
+            )
+        );
+
+//        # Test:: testPerformDeletes
+//        # SQL:: DELETE FROM "master"."dbo"."test1" WHERE (( ("id1") = (?) ) AND ( ("id2") = (?) ))
+//        # Variables:: [id1, id2]
+//        # Parametros:: ["id1", "id2"]
+
+        System.out.println("# Test:: testPerformDeletes");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE (( (\"id1\") = (?) ) AND ( (\"id2\") = (?) ))",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[id1, id2]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id1\", \"id2\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts1() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(proj));
+        
+        System.out.println("# Test:: testPerformInserts1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts2() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_variable().srs(proj));
+        
+        System.out.println("# Test:: testPerformInserts2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformUpdates1() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.update().where().and(
+            expbuilder.eq(
+                expbuilder.column("id"), 
+                expbuilder.parameter("id").as_variable()
+            )
+        );
+        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.update().column().name("geom").with_value(
+                expbuilder.parameter("geom").as_variable().srs(proj) 
+        );
+
+        System.out.println("# Test:: testPerformUpdates");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (4326)) WHERE ( (\"id\") = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"name\", \"geom\", \"id\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformUpdates2() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.update().where().and(
+            expbuilder.eq(
+                expbuilder.column("id"), 
+                expbuilder.parameter("id").as_variable()
+            )
+        );
+        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.update().column().name("geom").with_value(
+                expbuilder.parameter("geom").as_variable()
+                        .srs(expbuilder.parameter().value(proj)) 
+        );
+
+        System.out.println("# Test:: testPerformUpdates");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (?)) WHERE ( (\"id\") = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"name\", \"geom\", 4326, \"id\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant1() throws Exception {
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").select().insert().update();
+        sqlbuilder.grant().role("gis").all();
+                
+        
+        System.out.println("# Test:: testGrant1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant2() throws Exception {
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
+                .privilege(Privilege.INSERT)
+                .privilege(Privilege.UPDATE);
+        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
+                
+        
+        System.out.println("# Test:: testGrant2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testForeingValue() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        JDBCHelper helper = createJDBCHelper();
+        
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        EditableFeatureAttributeDescriptor attr;
+        EditableForeingKey foreingKey;
+        EditableFeatureType ft = dataManager.createFeatureType();
+        ft.add("ID", DataTypes.INT);
+        ft.add("NAME", DataTypes.STRING, 80);
+        attr = ft.add("TYPE", DataTypes.INT);
+        foreingKey = attr.getForeingKey();
+        foreingKey.setForeingKey(true);
+        foreingKey.setClosedList(true);
+        foreingKey.setCodeName("ID");
+        foreingKey.setTableName("TYPES");
+        attr = ft.add("PHONE_TYPE", DataTypes.INT);
+        foreingKey = attr.getForeingKey();
+        foreingKey.setForeingKey(true);
+        foreingKey.setClosedList(true);
+        foreingKey.setCodeName("ID");
+        foreingKey.setTableName("PHONE_TYPES");
+        
+        
+        sqlbuilder.select().column().name("ID");
+        sqlbuilder.select().column().name("NAME");
+        sqlbuilder.select().column().name("DESCRIPTION");
+        sqlbuilder.select().column().name("TYPE");
+        sqlbuilder.select().from().table().schema("dbo").name("test1");
+        sqlbuilder.select().where().set( 
+            expbuilder.and(
+                expbuilder.like(
+                    expbuilder.function(
+                        "FOREING_VALUE",
+                        expbuilder.constant("TYPE.DESCRIPTION")
+                    ),
+                    expbuilder.constant("A%")
+                ),
+                expbuilder.eq(
+                    expbuilder.function(
+                        "FOREING_VALUE",
+                        expbuilder.constant("PHONE_TYPE.DESCRIPTION")
+                    ),
+                    expbuilder.constant("mobile")
+                )
+            )
+        );
+        System.out.println("# Test:: testForeingValue");
+        System.out.println("# SQL1:: " + sqlbuilder.toString());        
+
+        List<String> attrNames = new ArrayList<>();
+        helper.processSpecialFunctions(sqlbuilder, ft, attrNames);
+        
+        System.out.println("# SQL2:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        System.out.println("# attrNames:: " + StringUtils.join(attrNames,","));
+
+        //# Test:: testForeingValue
+        //# SQL1:: SELECT "ID", "NAME", "DESCRIPTION", "TYPE" FROM "dbo"."test1" WHERE (( (FOREING_VALUE('TYPE.DESCRIPTION')) LIKE ('A%') ) AND ( (FOREING_VALUE('PHONE_TYPE.DESCRIPTION')) = ('mobile') ))
+        //# SQL2:: SELECT "ID", "NAME", "dbo"."test1"."DESCRIPTION", "dbo"."test1"."TYPE", "dbo"."TYPES"."DESCRIPTION", "dbo"."PHONE_TYPES"."DESCRIPTION" FROM "dbo"."test1" LEFT JOIN "dbo"."TYPES" ON ( ("dbo"."test1"."TYPE") = ("dbo"."TYPES"."ID") ) LEFT JOIN "dbo"."PHONE_TYPES" ON ( ("dbo"."test1"."PHONE_TYPE") = ("dbo"."PHONE_TYPES"."ID") ) WHERE (( ("dbo"."TYPES"."DESCRIPTION") LIKE ('A%') ) AND ( ("dbo"."PHONE_TYPES"."DESCRIPTION") = ('mobile') ))
+        //# Variables:: [DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]
+        //# Parametros:: []
+        //# attrNames:: [TYPE.DESCRIPTION, PHONE_TYPE.DESCRIPTION]
+
+        assertEquals(
+                "SELECT \"dbo\".\"test1\".\"ID\", \"dbo\".\"test1\".\"NAME\", \"dbo\".\"test1\".\"DESCRIPTION\", \"dbo\".\"test1\".\"TYPE\", \"dbo\".\"TYPES\".\"DESCRIPTION\", \"dbo\".\"PHONE_TYPES\".\"DESCRIPTION\" FROM \"dbo\".\"test1\" LEFT JOIN \"dbo\".\"TYPES\" ON ( (\"dbo\".\"test1\".\"TYPE\") = (\"dbo\".\"TYPES\".\"ID\") ) LEFT JOIN \"dbo\".\"PHONE_TYPES\" ON ( (\"dbo\".\"test1\".\"PHONE_TYPE\") = (\"dbo\".\"PHONE_TYPES\".\"ID\") ) WHERE (( (\"dbo\".\"TYPES\".\"DESCRIPTION\") LIKE ('A%') ) AND ( (\"dbo\".\"PHONE_TYPES\".\"DESCRIPTION\") = ('mobile') ))",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[DESCRIPTION, DESCRIPTION, DESCRIPTION, ID, NAME, TYPE]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+        assertEquals(
+                "TYPE.DESCRIPTION,PHONE_TYPE.DESCRIPTION",
+                StringUtils.join(attrNames,",")
+        );
+    }
+    
+    private JDBCHelper createJDBCHelper(){
+        
+        JDBCStoreParameters params = new JDBCStoreParameters();
+        JDBCHelperBase helper = new JDBCHelperBase(params);
+        return helper;
+        
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestComputedAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestComputedAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestComputedAttributes.java	(revision 46118)
@@ -0,0 +1,212 @@
+package org.gvsig.fmap.dal.store.jdbc2;
+
+import java.util.ArrayList;
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.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.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractTestComputedAttributes extends TestCase {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestComputedAttributes.class);
+
+    protected AbstractTestUtils utils;
+
+    public AbstractTestComputedAttributes(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public AbstractTestUtils utils() {
+        if (this.utils == null) {
+            this.utils = this.createUtils();
+        }
+        return this.utils;
+    }
+
+    protected abstract AbstractTestUtils createUtils();
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    protected void testComputed1() throws Exception {
+        try {
+            if (!utils().isTheDatabaseAvailable()) {
+                return;
+            }
+            FeatureStore sourceStore = utils().openSourceStore2();
+            JDBCServerExplorer explorer = utils().openServerExplorer("testCreate");
+            utils().initWorkspace("testCreate");
+            
+            utils().info_jdbc(explorer);
+
+            utils().drop_tables(explorer, "testCreateTarget2");
+            utils().create_table_from(explorer, "testCreateTarget2", sourceStore);
+            utils().insert_into_from(explorer, "testCreateTarget2", sourceStore, FeatureStore.MODE_APPEND);
+
+            FeatureStore dbstore = utils().openStore(explorer, "testCreateTarget2");
+            dbstore.edit();
+            FeatureType featureType = dbstore.getDefaultFeatureType();
+            EditableFeatureType eFeatureType = featureType.getEditable();
+            eFeatureType.add("Compu1",
+                    DataTypes.INTEGER,
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("ID*2")
+                    ));
+            eFeatureType.add("Compu2",
+                    DataTypes.INTEGER,
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("Poblacion+10000+Compu1")
+                    ));
+            dbstore.update(eFeatureType);
+            dbstore.finishEditing();
+            List<Feature> features = dbstore.getFeatures();
+            for (int i = 0; i < features.size(); i++) {
+                Feature feature = features.get(i);
+                assertEquals("Compu1 " + i, feature.getInt("ID") * 2, feature.getInt("Compu1"));
+                if (feature.get("Poblacion") == null) {
+                    assertEquals("Compu2 " + i, null, feature.get("Compu2"));
+                } else {
+                    assertEquals("Compu2 " + i, feature.getInt("Poblacion") + 10000 + feature.getInt("Compu1"), feature.getInt("Compu2"));
+                }
+            }
+            DisposeUtils.dispose(dbstore);
+        } catch (Throwable th) {
+            LOGGER.warn("", th);
+            throw th;
+        }
+    }
+
+    @SuppressWarnings("UnusedAssignment")
+    protected void testComputed2() throws Exception {
+        try {
+            if (!utils().isTheDatabaseAvailable()) {
+                return;
+            }
+            String testTableName = "testComputedAttributes2";
+            JDBCServerExplorer explorer = utils().openServerExplorer("computedAttr");
+
+            utils().info_jdbc(explorer);
+            utils().drop_tables(explorer, testTableName);
+
+            FeatureStore sourceStore = utils().openSourceStore2();
+
+            utils().create_table_from(explorer, testTableName, sourceStore);
+            utils().insert_into_from(explorer, testTableName, sourceStore, FeatureStore.MODE_APPEND);
+
+            FeatureStore dbstore = utils().openStore(explorer, testTableName);
+
+            dbstore.edit();
+            FeatureType featureType = dbstore.getDefaultFeatureType();
+            EditableFeatureType eFeatureType = featureType.getEditable();
+            FeatureQuery query = sourceStore.createFeatureQuery();
+            eFeatureType.add("CompuID",
+                    DataTypes.INTEGER,
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("MOD(ID,10)")
+                    ));
+            eFeatureType.add("CompuPob",
+                    DataTypes.INTEGER,
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("Poblacion+1")
+                    ));
+            eFeatureType.add("CompuProv",
+                    DataTypes.STRING,
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("UPPER(Provincia)")
+                    ));
+            EditableFeatureAttributeDescriptor extraColumn1
+                    = query.getExtraColumn().add("ExtraID900", DataTypes.INTEGER);
+            EditableFeatureAttributeDescriptor extraColumn2
+                    = query.getExtraColumn().add("ExtraPobDen", DataTypes.INTEGER);
+            EditableFeatureAttributeDescriptor extraColumn3
+                    = query.getExtraColumn().add("ExtraAno", DataTypes.INTEGER);
+
+            extraColumn1.setFeatureAttributeEmulator(
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("CompuID+900")));
+            extraColumn2.setFeatureAttributeEmulator(
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("CompuPob+Densidad")));
+            extraColumn3.setFeatureAttributeEmulator(
+                    new DefaultFeatureAttributeEmulatorExpression(
+                            eFeatureType,
+                            ExpressionUtils.createExpression("EXTRACT(YEAR FROM Fecha)")));
+
+            query.getGroupByColumns().add("Comunidad");
+            query.getGroupByColumns().add("CompuProv");
+            query.getGroupByColumns().add("ExtraAno");
+            query.getAggregateFunctions().put("ID", "MIN");
+            query.getAggregateFunctions().put("Poblacion", "MIN");
+            query.getAggregateFunctions().put("CompuID", "MIN");
+            query.getAggregateFunctions().put("CompuPob", "SUM");
+            query.getAggregateFunctions().put("ExtraID900", "SUM");
+            query.getAggregateFunctions().put("ExtraPobDen", "SUM");
+            dbstore.update(eFeatureType);
+            dbstore.finishEditing();
+
+            List<Feature> features0 = dbstore.getFeatures(query);
+            ArrayList<Feature> features = new ArrayList<>();
+
+            System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
+            for (int i = 0; i < features0.size(); i++) {
+                Feature feature = features0.get(i);
+                features.add(feature.getCopy());
+                System.out.print(feature.toString());
+                System.out.print("," + feature.get("ExtraID900"));
+                System.out.print("," + feature.get("ExtraPobDen"));
+                System.out.println("," + feature.get("ExtraAno"));
+            }
+            System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
+
+            features0 = null;
+            String[] header = new String[]{"ID", "Comunidad", "Provincia", "Ciudad", "Poblacion", "Densidad", "Fecha", "CompuID", "CompuPob", "CompuProv", "ExtraID900", "ExtraPobDen", "ExtraAno"};
+            ArrayList<Object[]> values = new ArrayList<>();
+            values.add(new Object[]{5, "GVA", null, null, 200, null, null, 5, 201, "ALICANTE", 905, 206, 2019});
+            values.add(new Object[]{6, "GVA", null, null, 20, null, null, 6, 422, "ALICANTE", 1813, 1135, 2020});
+            values.add(new Object[]{8, "GVA", null, null, 100, null, null, 8, 702, "CASTELLON", 1817, 719, 2019});
+            values.add(new Object[]{1, "GVA", null, null, 500, null, null, 1, 1502, "VALENCIA", 1803, 1505, 2019});
+            values.add(new Object[]{3, "GVA", null, null, 50, null, null, 3, 352, "VALENCIA", 1807, 359, 2020});
+            values.add(new Object[]{0, null, null, null, null, null, null, 0, null, "", 900, null, null});
+            for (int i = 0; i < features.size(); i++) {
+                for (int j = 0; j < header.length; j++) {
+                    assertEquals("feature[" + i + "][" + header[j] + "]:", values.get(i)[j], features.get(i).get(header[j]));
+                }
+            }
+
+            DisposeUtils.dispose(dbstore);
+        } catch (Throwable th) {
+            LOGGER.warn("", th);
+            throw th;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestExport2db.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestExport2db.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/AbstractTestExport2db.java	(revision 46118)
@@ -0,0 +1,151 @@
+package org.gvsig.fmap.dal.store.jdbc2;
+
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractTestExport2db extends TestCase {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestExport2db.class);
+
+    protected AbstractTestUtils utils;
+
+    public AbstractTestExport2db(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public AbstractTestUtils utils() {
+        if (this.utils == null) {
+            this.utils = this.createUtils();
+        }
+        return this.utils;
+    }
+
+    protected abstract AbstractTestUtils createUtils();
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    protected void testExport1() throws Exception {
+        try {
+            if (!utils().isTheDatabaseAvailable()) {
+                return;
+            }
+            FeatureStore sourceStore = utils().openCSVStore("/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv");
+            JDBCServerExplorer explorer = utils().openServerExplorer("testExport1");
+
+            utils().info_jdbc(explorer);
+
+            // Importamos el CSV en la bbdd
+            utils().drop_tables(explorer, "continentes", DatabaseWorkspaceManager.TABLE_RESOURCES_NAME);
+            utils().create_table_from(explorer, "continentes", sourceStore);
+            utils().insert_into_from(explorer, "continentes", sourceStore, FeatureStore.MODE_APPEND);
+
+            // Le ponemos como Pk el campo ID
+            FeatureStore dbstore = utils().openStore(explorer, "continentes");
+            dbstore.edit();
+            FeatureType featureType = dbstore.getDefaultFeatureType();
+            EditableFeatureType eFeatureType = featureType.getEditable();
+            eFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(true);
+            dbstore.update(eFeatureType);
+            dbstore.finishEditing();
+            DisposeUtils.dispose(dbstore);
+
+            // Comprobamos los campos que tiene la tabla de la bbdd.
+            utils().removeResource(explorer, "continentes", "dal");
+
+            dbstore = utils().openStore(explorer, "continentes");
+            featureType = dbstore.getDefaultFeatureType();
+            assertEquals("Fields count", 2, featureType.size());
+
+            assertEquals("Field(0).name", "ID", featureType.getAttributeDescriptor(0).getName());
+            assertEquals("Field(1).name", "NAME", featureType.getAttributeDescriptor(1).getName());
+
+            assertEquals("Field(ID).isPrimaryKey", true, featureType.getAttributeDescriptor(0).isPrimaryKey());
+            assertEquals("Field(NAME).isPrimaryKey", false, featureType.getAttributeDescriptor(1).isPrimaryKey());
+            assertEquals("Field(ID).isIndexed", true, featureType.getAttributeDescriptor(0).isIndexed());
+            assertEquals("Field(NAME).isIndexed", false, featureType.getAttributeDescriptor(1).isIndexed());
+
+            // Le ponemos como Pk el campo NAME y lo quitamos del ID
+            dbstore = utils().openStore(explorer, "continentes");
+            dbstore.edit();
+            featureType = dbstore.getDefaultFeatureType();
+            eFeatureType = featureType.getEditable();
+            eFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+            eFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(true);
+            dbstore.update(eFeatureType);
+            dbstore.finishEditing();
+            DisposeUtils.dispose(dbstore);
+
+            // Comprobamos los campos que tiene la tabla de la bbdd.
+            utils().removeResource(explorer, "continentes", "dal");
+
+            dbstore = utils().openStore(explorer, "continentes");
+            featureType = dbstore.getDefaultFeatureType();
+            assertEquals("Fields count", 2, featureType.size());
+
+            assertEquals("Field(0).name", "ID", featureType.getAttributeDescriptor(0).getName());
+            assertEquals("Field(1).name", "NAME", featureType.getAttributeDescriptor(1).getName());
+
+            assertEquals("Field(ID).isPrimaryKey", false, featureType.getAttributeDescriptor(0).isPrimaryKey());
+            assertEquals("Field(NAME).isPrimaryKey", true, featureType.getAttributeDescriptor(1).isPrimaryKey());
+            assertEquals("Field(ID).isIndexed", false, featureType.getAttributeDescriptor(0).isIndexed());
+            assertEquals("Field(NAME).isIndexed", true, featureType.getAttributeDescriptor(1).isIndexed());
+
+            DisposeUtils.dispose(dbstore);
+
+            // Le ponemos como Pk el campo NAME y lo quitamos del ID
+            dbstore = utils().openStore(explorer, "continentes");
+            dbstore.edit();
+            featureType = dbstore.getDefaultFeatureType();
+            eFeatureType = featureType.getEditable();
+            eFeatureType.getEditableAttributeDescriptor("ID").setIsPrimaryKey(false);
+            eFeatureType.getEditableAttributeDescriptor("NAME").setIsPrimaryKey(true);
+
+            eFeatureType.getEditableAttributeDescriptor("ID").setIsIndexed(true);
+            eFeatureType.getEditableAttributeDescriptor("NAME").setIsIndexed(true);
+            dbstore.update(eFeatureType);
+            dbstore.finishEditing();
+            DisposeUtils.dispose(dbstore);
+
+            // Comprobamos los campos que tiene la tabla de la bbdd.
+            utils().removeResource(explorer, "continentes", "dal");
+
+            dbstore = utils().openStore(explorer, "continentes");
+            featureType = dbstore.getDefaultFeatureType();
+            assertEquals("Fields count", 2, featureType.size());
+
+            assertEquals("Field(0).name", "ID", featureType.getAttributeDescriptor(0).getName());
+            assertEquals("Field(1).name", "NAME", featureType.getAttributeDescriptor(1).getName());
+
+            assertEquals("Field(ID).isPrimaryKey", false, featureType.getAttributeDescriptor(0).isPrimaryKey());
+            assertEquals("Field(NAME).isPrimaryKey", true, featureType.getAttributeDescriptor(1).isPrimaryKey());
+            assertEquals("Field(ID).isIndexed", true, featureType.getAttributeDescriptor(0).isIndexed());
+            assertEquals("Field(NAME).isIndexed", true, featureType.getAttributeDescriptor(1).isIndexed());
+
+
+            DisposeUtils.dispose(dbstore);
+        } catch (Throwable th) {
+            LOGGER.warn("", th);
+            throw th;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource1.csv	(revision 46118)
@@ -0,0 +1,20 @@
+ID/Integer/set/pk=true;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Decimal/Decimal/set/precision=6/set/scale=3;Geometry/Geometry/set/geomtype=Point:2D/set/srs=EPSG:4326
+0;  ; ;    ;              ;        ;      ; ;      ; ;           ; ;      ;T;       ;
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-3.8945156972987958 42.01053743584765)
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-2.1079618220646115 41.983079082675474)
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (-2.57249737803327 41.35372113353277)
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (-4.061822048036304 41.35877680235475)
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (-3.974317066986988 40.78701209315094)
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (-2.510509736717547 40.69847453392384)
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;456.123;POINT (-0.5317736981843011 40.66396082637622)
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;456.123;POINT (-0.3626917259170671 41.13652386601604)
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;456.123;POINT (-1.2461823078608523 41.84950010180092)
+10;;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-1.2145405488596532 41.22158511004416)
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-0.7699089544899235 41.630581204431756)
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (0.4821915816701051 41.75970939133133)
+13;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (0.7912661147227479 41.919324620992036)
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (1.052534629531243 41.493736996249545)
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (0.8097002367335026 41.0899480235613)
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;456.123;POINT (-0.4883960310112362 41.17597288081971)
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;456.123;POINT (-0.6439030698437881 40.89530766155764)
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T; ;POINT (-1.3061826868199504 40.72372835570524)
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource2.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource2.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/testCreateSource2.csv	(revision 46118)
@@ -0,0 +1,11 @@
+ID/Integer/set/pk=true;Comunidad/String/set/size=10;Provincia/String/set/size=10;Ciudad/String/set/size=10;Poblacion/Integer;Densidad/Double;Fecha/TimeStamp
+0;;;;;;
+1;GVA;Valencia;Cullera;1000;1.01;20191229121314
+2;GVA;Valencia;Pinedo;500;2.02;20191229121314
+3;GVA;Valencia;Gandia;300;3.03;20201229121314
+4;GVA;Valencia;Sueca;50;4.04;20201229121314
+5;GVA;Alicante;Calpe;200;5.05;20191229121314
+6;GVA;Alicante;Cullera;400;6.06;20201229121314
+7;GVA;Alicante;Oliva;20;7,07;20201229121314
+8;GVA;Castellon;Nules;100;8.08;20191229121314
+9;GVA;Castellon;Oropesa;600;9.09;20191229121314
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_ACCIDENTES.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_ACCIDENTES.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_ACCIDENTES.csv	(revision 46118)
@@ -0,0 +1,2 @@
+"LID_ACCIDENTE/String/set/size=20/set/hidden=true/set/pk=true/set/description=LID_ACCIDENTE/set/label=_Id_accidente/set/order=0";"COD_INFORME/String/set/size=20/set/description=COD_INFORME/set/label=_Codigo_informe/set/order=10/set/fk=true/set/fk_table=ARENA2_INFORMES/set/fk_code=COD_INFORME/set/fk_label=FORMAT('%s',COD_INFORME)/set/fk.closedlist=false";"ID_ACCIDENTE/String/set/size=20/set/description=ID_ACCIDENTE/set/label=_Codigo_accidente/set/order=20";"FECHA_ACCIDENTE/Date/set/locale=es/set/description=FECHA_ACCIDENTE/set/label=_Fecha_accidente/set/order=50";"HORA_ACCIDENTE/Time/set/locale=es/set/description=HORA_ACCIDENTE/set/label=_Hora_accidente/set/order=60";"COD_PROVINCIA/String/set/size=45/set/description=COD_PROVINCIA/set/label=_Provincia/set/order=70";"COD_MUNICIPIO/String/set/size=100/set/description=COD_MUNICIPIO/set/label=_Municipio/set/order=80";"COD_POBLACION/String/set/size=100/set/description=COD_POBLACION/set/label=_Poblacion/set/order=90";"ZONA/Integer/set/description=ZONA/set/label=_Zona/set/order=100/set/fk=true/set/fk_table=ARENA2_DIC_ZONA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"TIPO_VIA/Integer/set/description=TIPO_VIA/set/label=_Tipo_de_via/set/order=110/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CARRETERA/String/set/size=50/set/description=CARRETERA/set/label=_Carretera/set/order=120";"KM/Double/set/locale=en/set/description=KM/set/label=_Punto_kilometrico/set/order=130";"TITULARIDAD_VIA/Integer/set/description=TITULARIDAD_VIA/set/label=_Titularidad_de_la_via/set/order=140/set/fk=true/set/fk_table=ARENA2_DIC_TITULARIDAD_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"SENTIDO/Integer/set/description=SENTIDO/set/label=_Sentido/set/order=150/set/fk=true/set/fk_table=ARENA2_DIC_SENTIDO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CALLE_CODIGO/String/set/size=15/set/description=CALLE_CODIGO/set/label=_Codigo_calle/set/order=160";"CALLE_NOMBRE/String/set/size=150/set/description=CALLE_NOMBRE/set/label=_Calle/set/order=170";"CALLE_NUMERO/String/set/size=10/set/description=CALLE_NUMERO/set/label=_Numero_de_calle/set/order=180";"MAPAY/Double/set/locale=en/set/description=MAPAY/set/label=MAPAY/set/order=190";"MAPAX/Double/set/locale=en/set/description=MAPAX/set/label=MAPAX/set/order=200";"MAPA/Geometry/set/srs=EPSG@25830/set/geomtype=Point@2D/set/hidden=true/set/description=MAPA/set/label=MAPA/set/order=210";"NUDO/Integer/set/description=NUDO/set/label=_Nudo/set/order=220/set/fk=true/set/fk_table=ARENA2_DIC_NUDO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"NUDO_INFO/Integer/set/description=NUDO_INFO/set/label=_Informacion_nudo/set/order=230/set/fk=true/set/fk_table=ARENA2_DIC_NUDO_INFORMACION/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CRUCE_CALLE/String/set/size=150/set/description=CRUCE_CALLE/set/label=_Cruce/set/order=240";"CRUCE_INE_CALLE/String/set/size=10/set/description=CRUCE_INE_CALLE/set/label=_Cruce_INE/set/order=250";"TOTAL_VICTIMAS/Integer/set/description=TOTAL_VICTIMAS/set/label=_Total_victimas/set/order=260";"TOTAL_MUERTOS/Integer/set/description=TOTAL_MUERTOS/set/label=_Total_muertos/set/order=270";"TOTAL_GRAVES/Integer/set/description=TOTAL_GRAVES/set/label=_Total_graves/set/order=280";"TOTAL_LEVES/Integer/set/description=TOTAL_LEVES/set/label=_Total_Leves/set/order=290";"TOTAL_ILESOS/Integer/set/description=TOTAL_ILESOS/set/label=_Total_ilesos/set/order=300";"TOTAL_VEHICULOS/Integer/set/description=TOTAL_VEHICULOS/set/label=_Total_vehiculos_implicados/set/order=310";"TOTAL_CONDUCTORES/Integer/set/description=TOTAL_CONDUCTORES/set/label=_Total_conductores_implicados/set/order=320";"TOTAL_PASAJEROS/Integer/set/description=TOTAL_PASAJEROS/set/label=_Total_pasajeros_implicados/set/order=330";"TOTAL_PEATONES/Integer/set/description=TOTAL_PEATONES/set/label=_Total_peatones_implicados/set/order=340";"NUM_TURISMOS/Integer/set/description=NUM_TURISMOS/set/label=_Num_turismos_implicados/set/order=350";"NUM_FURGONETAS/Integer/set/description=NUM_FURGONETAS/set/label=_Num_furgonetas_implicadas/set/order=360";"NUM_CAMIONES/Integer/set/description=NUM_CAMIONES/set/label=_Num_camiones_implicados/set/order=370";"NUM_AUTOBUSES/Integer/set/description=NUM_AUTOBUSES/set/label=_Num_autobuses_implicados/set/order=380";"NUM_CICLOMOTORES/Integer/set/description=NUM_CICLOMOTORES/set/label=_Num_ciclomotores_implicados/set/order=390";"NUM_MOTOCICLETAS/Integer/set/description=NUM_MOTOCICLETAS/set/label=_Num_motocicletas_implicadas/set/order=400";"NUM_BICICLETAS/Integer/set/description=NUM_BICICLETAS/set/label=_Num_bicicletas_implicadas/set/order=410";"NUM_OTROS_VEHI/Integer/set/description=NUM_OTROS_VEHI/set/label=_Num_otros_vehiculos_implicados/set/order=420";"TIPO_ACC_SALIDA/Integer/set/description=TIPO_ACC_SALIDA/set/label=_Tipo_accidente_Salida/set/order=430/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_ACCIDENTE_SALIDA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"TIPO_ACC_COLISION/Integer/set/description=TIPO_ACC_COLISION/set/label=_Tipo_accidente_Colision/set/order=440/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_ACCIDENTE_COLISION/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"TIPO_ACC_ANIMAL/Integer/set/description=TIPO_ACC_ANIMAL/set/label=_Especie_del_animal/set/order=450/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_ACCIDENTE_ANIMAL/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"SENTIDO_CONTRARIO/Boolean/set/description=SENTIDO_CONTRARIO/set/label=_Circular_sentido_contrario/set/order=460";"CONDICION_NIVEL_CIRCULA/Integer/set/description=CONDICION_NIVEL_CIRCULA/set/label=_Nivel_circulacion/set/order=470/set/fk=true/set/fk_table=ARENA2_DIC_NIVEL_CIRCULACION/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_NIVEL_CIRC/Boolean/set/description=INFLU_NIVEL_CIRC/set/label=_Influye_nivel_circulacion/set/order=480";"CONDICION_FIRME/Integer/set/description=CONDICION_FIRME/set/label=_Condicion_del_firme/set/order=490/set/fk=true/set/fk_table=ARENA2_DIC_CONDICION_FIRME/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_SUP_FIRME/Boolean/set/description=INFLU_SUP_FIRME/set/label=_Influye_firme/set/order=500";"CONDICION_ILUMINACION/Integer/set/description=CONDICION_ILUMINACION/set/label=_Iluminacion/set/order=510/set/fk=true/set/fk_table=ARENA2_DIC_ILUMINACION/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_ILUMINACION/Boolean/set/description=INFLU_ILUMINACION/set/label=_Influye_iluminacion/set/order=520";"CONDICION_METEO/Integer/set/description=CONDICION_METEO/set/label=_Meteorologia/set/order=530/set/fk=true/set/fk_table=ARENA2_DIC_METEO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_METEO/Boolean/set/description=INFLU_METEO/set/label=_Influye_meteorologia/set/order=540";"CONDICION_NIEBLA/Integer/set/description=CONDICION_NIEBLA/set/label=_Niebla/set/order=550/set/fk=true/set/fk_table=ARENA2_DIC_NIEBLA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CONDICION_VIENTO/Integer/set/description=CONDICION_VIENTO/set/label=_Viento_fuerte/set/order=560/set/fk=true/set/fk_table=ARENA2_DIC_VIENTO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"VISIB_RESTRINGIDA_POR/Integer/set/description=VISIB_RESTRINGIDA_POR/set/label=_Visibilidad/set/order=570/set/fk=true/set/fk_table=ARENA2_DIC_VISIBILIDAD_RESTRINGIDA_POR/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_VISIBILIDAD/Boolean/set/description=INFLU_VISIBILIDAD/set/label=_Influye visibilidad/set/order=580";"CARACT_FUNCIONAL_VIA/Integer/set/description=CARACT_FUNCIONAL_VIA/set/label=_Caracteristicas_funcionales_de_la_via/set/order=590/set/fk=true/set/fk_table=ARENA2_DIC_CARACT_FUNCIONAL_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"VEL_GENERICA_SENYALIZADA/Integer/set/description=VEL_GENERICA_SENYALIZADA/set/label=_Velocidad_generica/set/order=600/set/fk=true/set/fk_table=ARENA2_DIC_VEL_GENERICA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"VELOCIDAD/Double/set/locale=en/set/description=VELOCIDAD/set/label=_Velocidad/set/order=610";"SENTIDOS_VIA/Integer/set/description=SENTIDOS_VIA/set/label=_Sentidos_via/set/order=620/set/fk=true/set/fk_table=ARENA2_DIC_SENTIDOS_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"NUMERO_CALZADAS/Integer/set/description=NUMERO_CALZADAS/set/label=_Numero_de_calzadas/set/order=630/set/fk=true/set/fk_table=ARENA2_DIC_NUMERO_CALZADAS/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CARRILES_APTOS_CIRC_ASC/Integer/set/description=CARRILES_APTOS_CIRC_ASC/set/label=_Carriles_aptos_circular_ascendente/set/order=640";"CARRILES_APTOS_CIRC_DESC/Integer/set/description=CARRILES_APTOS_CIRC_DESC/set/label=_Carriles_aptos_circular_descenente/set/order=650";"ANCHURA_CARRIL/Integer/set/description=ANCHURA_CARRIL/set/label=_Anchura_de_carril/set/order=660/set/fk=true/set/fk_table=ARENA2_DIC_ANCHURA_CARRIL/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"ARCEN/Integer/set/description=ARCEN/set/label=_Arcen/set/order=670/set/fk=true/set/fk_table=ARENA2_DIC_ANCHURA_ARCEN/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"ACERA/Integer/set/description=ACERA/set/label=_Acera/set/order=680/set/fk=true/set/fk_table=ARENA2_DIC_ACERA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_ACERA/Boolean/set/description=INFLU_ACERA/set/label=_Influye_la_acera/set/order=690";"ANCHURA_ACERA/Integer/set/description=ANCHURA_ACERA/set/label=_Anchua_acera/set/order=700";"TRAZADO_PLANTA/Integer/set/description=TRAZADO_PLANTA/set/label=_Trazado_planta/set/order=710/set/fk=true/set/fk_table=ARENA2_DIC_TRAZADO_PLANTA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"TRAZADO_ALZADO/Integer/set/description=TRAZADO_ALZADO/set/label=_Trazado_alzado/set/order=720/set/fk=true/set/fk_table=ARENA2_DIC_TRAZADO_ALZADO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"MARCAS_VIALES/Integer/set/description=MARCAS_VIALES/set/label=_Marcas_viales/set/order=730/set/fk=true/set/fk_table=ARENA2_DIC_MARCAS_VIALES/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"DESCRIPCION/String/set/size=5120/set/profile=Text/set/description=DESCRIPCION/set/label=DESCRIPCION/set/order=740";"OBSERVACIONES/String/set/size=5120/set/profile=Text/set/description=OBSERVACIONES/set/label=OBSERVACIONES/set/order=750";"INFLU_PRIORIDAD/Boolean/set/group=_Regulacion_prioridad/set/description=INFLU_PRIORIDAD/set/label=_Influye_la_regulacion_de_prioridad /set/order=760";"PRIORI_NORMA/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_NORMA/set/label=_RP_Norma_generica/set/order=770";"PRIORI_AGENTE/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_AGENTE/set/label=_RP_Agente/set/order=780";"PRIORI_SEMAFORO/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_SEMAFORO/set/label=_RP_Semaforo/set/order=790";"PRIORI_VERT_STOP/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_VERT_STOP/set/label=_RP_Senal_de_stop_vertical/set/order=800";"PRIORI_VERT_CEDA/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_VERT_CEDA/set/label=_RP_Senal_ceda_el_paso_vertical/set/order=810";"PRIORI_HORIZ_STOP/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_HORIZ_STOP/set/label=_RP_Senal_de_stop_horizontal/set/order=820";"PRIORI_HORIZ_CEDA/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_HORIZ_CEDA/set/label=_RP_Senal_ceda_el_paso_horizontal/set/order=830";"PRIORI_MARCAS/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_MARCAS/set/label=_RP_Solo_marcas_viales/set/order=840";"PRIORI_PEA_NO_ELEV/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_PEA_NO_ELEV/set/label=_RP_Paso_peatones_no_elevado/set/order=850";"PRIORI_PEA_ELEV/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_PEA_ELEV/set/label=_RP_Paso_peatones_elevado/set/order=860";"PRIORI_MARCA_CICLOS/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_MARCA_CICLOS/set/label=_RP_Paso_ciclistas/set/order=870";"PRIORI_CIRCUNSTANCIAL/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_CIRCUNSTANCIAL/set/label=_RP_Senalizacion_circunstancial/set/order=880";"PRIORI_OTRA/Boolean/set/group=_Regulacion_prioridad/set/description=PRIORI_OTRA/set/label=_RP_Otra_senal/set/order=890";"EB_PANELES_DIRECCIONALES/Boolean/set/description=EB_PANELES_DIRECCIONALES/set/label=_EB_Panels_direccionales/set/order=900";"EB_HITOS_ARISTA/Boolean/set/description=EB_HITOS_ARISTA/set/label=_EB_Hitos_arista/set/order=910";"EB_CAPTAFAROS/Boolean/set/description=EB_CAPTAFAROS/set/label=_EB_Captafaros/set/order=920";"SEPARA_LINEA_LONG_SEPARACION/Boolean/set/description=SEPARA_LINEA_LONG_SEPARACION/set/label=_ES_Solo_linea_longitudinal/set/order=930";"SEPARA_CEBREADO/Boolean/set/description=SEPARA_CEBREADO/set/label=_ES_Cebreado/set/order=940";"SEPARA_MEDIANA/Boolean/set/description=SEPARA_MEDIANA/set/label=_ES_Mediana/set/order=950";"SEPARA_BARRERA_SEGURIDAD/Boolean/set/description=SEPARA_BARRERA_SEGURIDAD/set/label=_ES_Barrera_de_seguridad/set/order=960";"SEPARA_ZONA_PEATONAL/Boolean/set/description=SEPARA_ZONA_PEATONAL/set/label=_ES_Zona_peatonal/set/order=970";"SEPARA_OTRA_SEPARACION/Boolean/set/description=SEPARA_OTRA_SEPARACION/set/label=_ES_Otras/set/order=980";"SEPARA_NINGUNA_SEPARACION/Boolean/set/description=SEPARA_NINGUNA_SEPARACION/set/label=_ES_Ninguno/set/order=990";"BARRERA_SEG_LAT_ASC/Integer/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_LAT_ASC/set/label=_BS_Lateral_ascendente/set/order=1000/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_BARRERA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"BARRERA_SEG_LAT_ASC_MOTO/Boolean/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_LAT_ASC_MOTO/set/label=_BS_Lateral_asc_proteccion_mototista/set/order=1010";"BARRERA_SEG_LAT_DESC/Integer/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_LAT_DESC/set/label=_BS_Lateral_descendente/set/order=1020/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_BARRERA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"BARRERA_SEG_LAT_DESC_MOTO/Boolean/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_LAT_DESC_MOTO/set/label=_BS_Lateral_desc_proteccion_mototista/set/order=1030";"BARRERA_SEG_MEDIANA_ASC/Integer/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_MEDIANA_ASC/set/label=_BS_en_mediana_ascendente/set/order=1040/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_BARRERA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"BARRERA_SEG_MEDIANA_ASC_MOTO/Boolean/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_MEDIANA_ASC_MOTO/set/label=_BS_en_mediana_asc_proteccion_motorista/set/order=1050";"BARRERA_SEG_MEDIANA_DESC/Integer/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_MEDIANA_DESC/set/label=_BS_en_mediana_descendente/set/order=1060/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_BARRERA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"BARRERA_SEG_MEDIANA_DESC_MOTO/Boolean/set/group=_Barrera_seguridad/set/description=BARRERA_SEG_MEDIANA_DESC_MOTO/set/label=_BS_en_mediana_desc_proteccion_motorista/set/order=1070";"TRAMO_PUENTE/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_PUENTE/set/label=_ET_puente_o_paso_superior/set/order=1080";"TRAMO_TUNEL/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_TUNEL/set/label=_ET_tunel/set/order=1090";"TRAMO_PASO/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_PASO/set/label=_ET_paso_inferior/set/order=1100";"TRAMO_ESTRECHA/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_ESTRECHA/set/label=_ET_Estrechamiento/set/order=1110";"TRAMO_RESALTOS/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_RESALTOS/set/label=_ET_resaltos_reductores_velocidad/set/order=1120";"TRAMO_BADEN/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_BADEN/set/label=_ET_Baden/set/order=1130";"TRAMO_APARTADERO/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_APARTADERO/set/label=_ET_apartadero/set/order=1140";"TRAMO_NINGUNA/Boolean/set/group=_Elementos_tramo/set/description=TRAMO_NINGUNA/set/label=_ET_ninguno/set/order=1150";"INFLU_MARGEN/Boolean/set/group=_Caracteristicas_margen/set/description=INFLU_MARGEN/set/label=_Influye_caracteristicas_margen/set/order=1160";"MARGEN_DESPEJADO/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_DESPEJADO/set/label=_CM_Despejado/set/order=1170";"MARGEN_ARBOLES/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_ARBOLES/set/label=_CM_Arboles/set/order=1180";"MARGEN_OTROS_NATURALES/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_OTROS_NATURALES/set/label=_CM_Otros_elementos_naturales/set/order=1190";"MARGEN_EDIFICIOS/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_EDIFICIOS/set/label=_CM_Edificions/set/order=1200";"MARGEN_POSTES/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_POSTES/set/label=_CM_Postes/set/order=1210";"MARGEN_PUBLICIDAD/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_PUBLICIDAD/set/label=_CM_Carteles_publicidad/set/order=1220";"MARGEN_OTROS_ARTIFICIALES/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_OTROS_ARTIFICIALES/set/label=_CM_Otros_elementos_artificiales/set/order=1230";"MARGEN_OTROS_OBSTACULOS/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_OTROS_OBSTACULOS/set/label=_CM_Otros_obstaculos/set/order=1240";"MARGEN_DESC/Boolean/set/group=_Caracteristicas_margen/set/description=MARGEN_DESC/set/label=_CM_Se_desconoce/set/order=1250";"INFLU_CIRCUNS_ESP/Boolean/set/group=_Circunstancias_especiales_via/set/description=INFLU_CIRCUNS_ESP/set/label=_Influye_circustancias_especiales_via/set/order=1260";"CIRCUNS_ESP_NINGUNA/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_NINGUNA/set/label=_CE_Ninguna/set/order=1270";"CIRCUNS_ESP_CONOS/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_CONOS/set/label=_CE_Conos_u_otras_balizas_moviles/set/order=1280";"CIRCUNS_ESP_ZANJA/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_ZANJA/set/label=_CE_Zanja_o_surco/set/order=1290";"CIRCUNS_ESP_TAPA/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_TAPA/set/label=_CE_Tapa_registro_defectuosa/set/order=1300";"CIRCUNS_ESP_OBRAS/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_OBRAS/set/label=_CE_Obras/set/order=1310";"CIRCUNS_ESP_OBSTACULO/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_OBSTACULO/set/label=_CE_Obstaculo_en_calzada/set/order=1320";"CIRCUNS_ESP_DESPREND/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_DESPREND/set/label=_CE_Desprendimientos/set/order=1330";"CIRCUNS_ESP_ESCALON/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_ESCALON/set/label=_CE_Escalon/set/order=1340";"CIRCUNS_ESP_FBACHES/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_FBACHES/set/label=_CE_Firme_con_baches/set/order=1350";"CIRCUNS_ESP_FDETERIORADO/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_FDETERIORADO/set/label=_CE_Firme_deteriorado/set/order=1360";"CIRCUNS_ESP_OTRAS/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_OTRAS/set/label=_CE_Otras/set/order=1370";"CIRCUNS_ESP_DESC/Boolean/set/group=_Circunstancias_especiales_via/set/description=CIRCUNS_ESP_DESC/set/label=_CE_Se_desconoce/set/order=1380";"INFLU_DELIM_CALZADA/Boolean/set/group=_Delimitacion_calzada/set/description=INFLU_DELIM_CALZADA/set/label=_Influye_delimitacion_calzada/set/order=1390";"DELIM_CALZADA_BORDILLO/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_BORDILLO/set/label=_DC_Bordillo/set/order=1400";"DELIM_CALZADA_VALLAS/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_VALLAS/set/label=_DC_Bolardos_o_vayas_seguridad/set/order=1410";"DELIM_CALZADA_SETOS/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_SETOS/set/label=_DC_Setos/set/order=1420";"DELIM_CALZADA_MARCAS/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_MARCAS/set/label=_DC_Marcas_viales/set/order=1430";"DELIM_CALZADA_BARRERA/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_BARRERA/set/label=_DC_Barrera_de_seguridad/set/order=1440";"DELIM_CALZADA_ISLETA/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_ISLETA/set/label=_DC_Isleta_o_refugio/set/order=1450";"DELIM_CALZADA_PEATONAL/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_PEATONAL/set/label=_DC_Zona_peatonal_o_ajardinada/set/order=1460";"DELIM_CALZADA_OTRA/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_OTRA/set/label=_DC_Otras/set/order=1470";"DELIM_CALZADA_SIN_DELIM/Boolean/set/group=_Delimitacion_calzada/set/description=DELIM_CALZADA_SIN_DELIM/set/label=_DC_Sin_delimitar/set/order=1480";"FC_CON_DISTRAIDA/Boolean/set/group=_Factores_concurrentes/set/description=FC_CON_DISTRAIDA/set/label=_FC_Conduccion_distraida/set/order=1490";"FC_VEL_INADECUADA/Boolean/set/group=_Factores_concurrentes/set/description=FC_VEL_INADECUADA/set/label=_FC_Velocidad_inadecuada/set/order=1500";"FC_PRIORIDAD/Boolean/set/group=_Factores_concurrentes/set/description=FC_PRIORIDAD/set/label=_FC_No_respetar_prioridad/set/order=1510";"FC_SEGURIDAD/Boolean/set/group=_Factores_concurrentes/set/description=FC_SEGURIDAD/set/label=_FC_No_mantener_intervalo_seguridad/set/order=1520";"FC_ADELANTAMIENTO/Boolean/set/group=_Factores_concurrentes/set/description=FC_ADELANTAMIENTO/set/label=_FC_Adelantamiento_antireglamentario/set/order=1530";"FC_GIRO/Boolean/set/group=_Factores_concurrentes/set/description=FC_GIRO/set/label=_FC_Giro_incorrecto/set/order=1540";"FC_CON_NEGLIGENTE/Boolean/set/group=_Factores_concurrentes/set/description=FC_CON_NEGLIGENTE/set/label=_FC_Conduccion_negligente/set/order=1550";"FC_CON_TEMERARIA/Boolean/set/group=_Factores_concurrentes/set/description=FC_CON_TEMERARIA/set/label=_FC_Conduccion_temeraria/set/order=1560";"FC_IRRUPCION_ANIMAL/Boolean/set/group=_Factores_concurrentes/set/description=FC_IRRUPCION_ANIMAL/set/label=_FC_Irrupcion_animal_en_calzada/set/order=1570";"FC_IRRUPCION_PEATON/Boolean/set/group=_Factores_concurrentes/set/description=FC_IRRUPCION_PEATON/set/label=_FC_Irrupcion_peaton_en_calzada/set/order=1580";"FC_ALCOHOL/Boolean/set/group=_Factores_concurrentes/set/description=FC_ALCOHOL/set/label=_FC_Alcohol/set/order=1590";"FC_DROGAS/Boolean/set/group=_Factores_concurrentes/set/description=FC_DROGAS/set/label=_FC_Drogas/set/order=1600";"FC_ESTADO_VIA/Boolean/set/group=_Factores_concurrentes/set/description=FC_ESTADO_VIA/set/label=_FC_Estado_de_la_via/set/order=1610";"FC_METEORO/Boolean/set/group=_Factores_concurrentes/set/description=FC_METEORO/set/label=_FC_Meteorologia_adversa/set/order=1620";"FC_CANSANCIO/Boolean/set/group=_Factores_concurrentes/set/description=FC_CANSANCIO/set/label=_FC_Cansancio_o_sueno/set/order=1630";"FC_INEXPERIENCIA/Boolean/set/group=_Factores_concurrentes/set/description=FC_INEXPERIENCIA/set/label=_FC_Inexperiencia/set/order=1640";"FC_AVERIA/Boolean/set/group=_Factores_concurrentes/set/description=FC_AVERIA/set/label=_FC_Averia_mecanica/set/order=1650";"FC_OBRAS/Boolean/set/group=_Factores_concurrentes/set/description=FC_OBRAS/set/label=_FC_Tramo_en_obras/set/order=1660";"FC_MAL_ESTADO_VEHI/Boolean/set/group=_Factores_concurrentes/set/description=FC_MAL_ESTADO_VEHI/set/label=_FC_Mal_estado_del_vehiculo/set/order=1670";"FC_ENFERMEDAD/Boolean/set/group=_Factores_concurrentes/set/description=FC_ENFERMEDAD/set/label=_FC_Enfermedad/set/order=1680";"FC_SENYALIZACION/Boolean/set/group=_Factores_concurrentes/set/description=FC_SENYALIZACION/set/label=_FC_Estado_de_la_senalizacion/set/order=1690";"FC_OBSTACULO/Boolean/set/group=_Factores_concurrentes/set/description=FC_OBSTACULO/set/label=_FC_Obstaculo_en_calzada/set/order=1700";"FC_OTRO_FACTOR/Boolean/set/group=_Factores_concurrentes/set/description=FC_OTRO_FACTOR/set/label=_FC_Otro_factor/set/order=1710";"QUINCENA/String/set/size=8/set/group=_Importacion/set/description=QUINCENA/set/label=_Quincena/set/order=1720";"COD_AFORO/String/set/size=40/set/description=COD_AFORO/set/label=_Codigo_aforo/set/order=10/set/fk=true/set/fk_table=AFOROS_MEDIDAS/set/fk_code=COD_AFORO/set/fk_label=FORMAT('%s',COD_AFORO)/set/fk.closedlist=false";"COD_ESTACION_AFORO/String/set/size=40/set/description=COD_ESTACION_AFORO/set/label=_Cod_Estacion_Aforo/set/order=1770";"TIPO_VIA_DGT/Integer/set/description=TIPO_VIA_DGT/set/label=_Tipo_de_via_original_DGT/set/order=100/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CARRETERA_DGT/String/set/size=50/set/description=CARRETERA_DGT/set/label=_Carretera_original_DGT/set/order=120";"KM_DGT/Double/set/locale=en/set/description=KM_DGT/set/label=_Punto_kilometrico_DGT/set/order=130";"TITULARIDAD_VIA_DGT/Integer/set/description=TITULARIDAD_VIA_DGT/set/label=_Titularidad_de_la_via_original_DGT/set/order=150/set/fk=true/set/fk_table=ARENA2_DIC_TITULARIDAD_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"ACTUALIZADO/Boolean/set/group=_Importacion/set/description=ACTUALIZADO/set/label=_Dato_actualizado/set/order=1810";"EXTRA/String/set/size=10000/set/description=Extra/set/label=_Extra/set/order=2000";"TOTAL_VICTIMAS_DGT/Integer/set/description=TOTAL_VICTIMAS_DGT/set/label=_Total_victimas_DGT/set/order=270";"TOTAL_MUERTOS_DGT/Integer/set/description=TOTAL_MUERTOS_DGT/set/label=_Total_muertos_DGT/set/order=280";"TOTAL_GRAVES_DGT/Integer/set/description=TOTAL_GRAVES_DGT/set/label=_Total_graves_DGT/set/order=290";"TOTAL_LEVES_DGT/Integer/set/description=TOTAL_LEVES_DGT/set/label=_Total_Leves_DGT/set/order=300";"TOTAL_ILESOS_DGT/Integer/set/description=TOTAL_ILESOS_DGT/set/label=_Total_ilesos_DGT/set/order=310";"TOTAL_VEHICULOS_DGT/Integer/set/description=TOTAL_VEHICULOS_DGT/set/label=_Total_vehiculos_implicados_DGT/set/order=320";"TOTAL_CONDUCTORES_DGT/Integer/set/description=TOTAL_CONDUCTORES_DGT/set/label=_Total_conductores_implicados_DGT/set/order=330";"TOTAL_PASAJEROS_DGT/Integer/set/description=TOTAL_PASAJEROS_DGT/set/label=_Total_pasajeros_implicados_DGT/set/order=340";"TOTAL_PEATONES_DGT/Integer/set/description=TOTAL_PEATONES_DGT/set/label=_Total_peatones_implicados_DGT/set/order=350";"NUM_TURISMOS_DGT/Integer/set/description=NUM_TURISMOS_DGT/set/label=_Num_turismos_implicados_DGT/set/order=360";"NUM_FURGONETAS_DGT/Integer/set/description=NUM_FURGONETAS_DGT/set/label=_Num_furgonetas_implicadas_DGT/set/order=370";"NUM_CAMIONES_DGT/Integer/set/description=NUM_CAMIONES_DGT/set/label=_Num_camiones_implicados_DGT/set/order=380";"NUM_AUTOBUSES_DGT/Integer/set/description=NUM_AUTOBUSES_DGT/set/label=_Num_autobuses_implicados_DGT/set/order=390";"NUM_CICLOMOTORES_DGT/Integer/set/description=NUM_CICLOMOTORES_DGT/set/label=_Num_ciclomotores_implicados_DGT/set/order=400";"NUM_MOTOCICLETAS_DGT/Integer/set/description=NUM_MOTOCICLETAS_DGT/set/label=_Num_motocicletas_implicadas_DGT/set/order=410";"NUM_BICICLETAS_DGT/Integer/set/description=NUM_BICICLETAS_DGT/set/label=_Num_bicicletas_implicadas_DGT/set/order=420";"NUM_OTROS_VEHI_DGT/Integer/set/description=NUM_OTROS_VEHI_DGT/set/label=_Num_otros_vehiculos_implicados_DGT/set/order=430";"INE_PROVINCIA/Integer/set/description=INE_PROVINCIA/set/label=_INE_Provincia/set/order=140/set/fk=true/set/fk_table=ARENA2_DIC_INE_PROVINCIA/set/fk_code=PROV_INE/set/fk_label=FORMAT('%02d - %s',PROV_INE,PROVINCIA)/set/fk.closedlist=true";"INE_MUNICIPIO/Integer/set/description=INE_MUNICIPIO/set/label=_INE_Municipio/set/order=140/set/fk=true/set/fk_table=ARENA2_DIC_INE_MUNICIPIO/set/fk_code=MUN_INE/set/fk_label=FORMAT('%02d - %s',MUN_INE,MUNICIPIO)/set/fk.closedlist=true";"ID_TRAMO/Integer/set/description=ID_TRAMO/set/label=_ID_Tramo/set/order=140";"OPERACION/String/set/size=30/set/description=OPERACION/set/label=_Operacion/set/order=40";"ESTADO_ACCIDENTE/Integer/set/description=ESTADO_ACCIDENTE/set/label=_Estado_accidente/set/order=30/set/fk=true/set/fk_table=ARENA2_DIC_ESTADO_ACCIDENTE/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true"
+"2005030000782";"2075";"2005030000782";"17/08/2005";"23:30:00";"ALICANTE";"Orihuela";"ORIHUELA";"1";"3";"A-7";"743.1";"1";"2";;;;;;;"2";;;;"3";"0";"0";"3";"3";"3";"3";"3";"0";"2";"0";"1";"0";"0";"0";"0";"0";;"6";"0";"false";"1";;"1";;"6";;"1";;;;"1";;;;;;;"2";"2";"2";"3";"1";;;"1";;"3";"EL VEHÍCULO VOLVO PIERDE RUEDA POSTERIOR DERECHA POR FALLO MECÁNICO, IMPACTANDO ESTA CONTRA TURISMO FORD Y A CONTINUACIÓN INTERCEPTANDO TRAYECTORIA DEL TURISMO CITROEN Y PROVOCANDO LA SALIDA DE VÍA Y CHOQUE CONTRA BARRERA DE ESTE ÚLTIMO";;;"true";"false";"false";"false";"false";"false";"false";"false";"false";"false";;;"false";"false";"true";"true";"true";;"false";;;;;;;;;;;;;;;;"false";;"false";;"true";;"true";"true";"false";"false";;;;;;;"true";;;;"false";;;"false";"false";"false";"false";"false";;"false";;;"true";"true";"false";;"true";;;;"false";"false";"false";"false";"false";"false";;"false";"false";"false";;;;;"true";;;;;;;;;;"3";"A-7";"743.1";"1";"false";;;;;;;;;;;;;;;;;;;"3";"3099";"0";;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_VEHICULOS.dal
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_VEHICULOS.dal
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_ACCIDENTES.dal
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_ACCIDENTES.dal
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_CONDUCTORES.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_CONDUCTORES.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_CONDUCTORES.csv	(revision 46118)
@@ -0,0 +1,2 @@
+"LID_CONDUCTOR/String/set/size=30/set/hidden=true/set/pk=true/set/description=LID_CONDUCTOR/set/label=_Id_conduct/set/order=0";"ID_ACCIDENTE/String/set/size=20/set/description=ID_ACCIDENTE/set/label=_Accidente/set/order=10/set/fk=true/set/fk_table=ARENA2_ACCIDENTES/set/fk_code=ID_ACCIDENTE/set/fk_label=FORMAT('%s',ID_ACCIDENTE)/set/fk.closedlist=false";"LID_VEHICULO/String/set/size=20/set/description=LID_VEHICULO/set/label=_Vehiculo/set/order=20/set/fk=true/set/fk_table=ARENA2_VEHICULOS/set/fk_code=LID_VEHICULO/set/fk_label=FORMAT('%s/%s %s %s %s %s',ID_ACCIDENTE,ID_VEHICULO,TIPO_VEHICULO,NACIONALIDAD,MARCA_NOMBRE,MODELO)/set/fk.closedlist=false";"ID_VEHICULO/String/set/size=5/set/hidden=true/set/description=ID_VEHICULO/set/label=_Id_vehiculo/set/order=30";"POSIBLE_RESPONSABLE/Boolean/set/description=POSIBLE_RESPONSABLE/set/label=_Posible_responsable/set/order=40";"FECHA_NACIMIENTO/Date/set/locale=es/set/description=FECHA_NACIMIENTO/set/label=_Fecha_nacimiento/set/order=50";"SEXO/Integer/set/description=SEXO/set/label=_Sexo/set/order=60/set/fk=true/set/fk_table=ARENA2_DIC_SEXO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"NACIONALIDAD/String/set/size=100/set/description=NACIONALIDAD/set/label=_Nacionalidad/set/order=70";"PAIS_RESIDENCIA/String/set/size=100/set/description=PAIS_RESIDENCIA/set/label=_Pais_de_residencia/set/order=80";"PROVINCIA_RESIDENCIA/String/set/size=100/set/description=PROVINCIA_RESIDENCIA/set/label=_Provincia_de_residencia/set/order=90";"MUNICIPIO_RESIDENCIA/String/set/size=100/set/description=MUNICIPIO_RESIDENCIA/set/label=_Municipio_de_residencia/set/order=100";"ASISTENCIA_SANITARIA/Integer/set/description=ASISTENCIA_SANITARIA/set/label=_Asistencia_sanitaria/set/order=110/set/fk=true/set/fk_table=ARENA2_DIC_ASISTENCIA_SANITARIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_FACT_ATENCION/Boolean/set/description=INFLU_FACT_ATENCION/set/label=_Influyen_factores_atencion/set/order=120";"FACTORES_ATENCION/Integer/set/description=FACTORES_ATENCION/set/label=_Factores_afectan_atencion/set/order=130/set/fk=true/set/fk_table=ARENA2_DIC_FACTORES_ATENCION_COND/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_PRES_ERROR/Boolean/set/description=INFLU_PRES_ERROR/set/label=_Influyen_presuntos_errores/set/order=140";"PRESUNTOS_ERRORES/Integer/set/description=PRESUNTOS_ERRORES/set/label=_Presuntos_errores/set/order=150/set/fk=true/set/fk_table=ARENA2_DIC_ERRORES_COND/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CARACT_PERMISO/Integer/set/description=CARACT_PERMISO/set/label=_Caracteristicas_del_permiso/set/order=160/set/fk=true/set/fk_table=ARENA2_DIC_CARACTERISTICAS_PERMISO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"CLASE_PERMISO/Integer/set/description=CLASE_PERMISO/set/label=_Clase_del_permiso/set/order=170/set/fk=true/set/fk_table=ARENA2_DIC_CLASE_PERMISO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"FECHA_PERMISO/Date/set/locale=es/set/description=FECHA_PERMISO/set/label=_Fecha_permiso/set/order=180";"MOTIVO_DESPLAZAMIENTO/Integer/set/description=MOTIVO_DESPLAZAMIENTO/set/label=_Motivo_desplazamiento/set/order=190/set/fk=true/set/fk_table=ARENA2_DIC_MOTIVO_DESPLAZA_COND/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"DESPLAZAMIENTO_PREVISTO/Integer/set/description=DESPLAZAMIENTO_PREVISTO/set/label=_Desplazamiento_previsto/set/order=200/set/fk=true/set/fk_table=ARENA2_DIC_DESPLAZAMIENTO_PREVISTO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"ACC_SEG_CINTURON/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_CINTURON/set/label=_Cinturon/set/order=210";"ACC_SEG_CASCO/Integer/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_CASCO/set/label=_Casco/set/order=220/set/fk=true/set/fk_table=ARENA2_DIC_ACC_SEG_CASCO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"ACC_SEG_BRAZOS/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_BRAZOS/set/label=_Brazos/set/order=230";"ACC_SEG_ESPALDA/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_ESPALDA/set/label=_Espalda/set/order=240";"ACC_SEG_TORSO/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_TORSO/set/label=_Torso/set/order=250";"ACC_SEG_MANOS/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_MANOS/set/label=_Manos/set/order=260";"ACC_SEG_PIERNAS/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_PIERNAS/set/label=_Piernas/set/order=270";"ACC_SEG_PIES/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_PIES/set/label=_Pies/set/order=280";"ACC_SEG_PRENDA_REF/Boolean/set/group=_Accesorios_de_seguridad/set/description=ACC_SEG_PRENDA_REF/set/label=_Prenda_reflectante/set/order=290";"INFLU_ALCOHOL/Boolean/set/group=_Pruebas/set/description=INFLU_ALCOHOL/set/label=_Influye_el_alcohol/set/order=300";"PRUEBA_ALCOHOLEMIA/Integer/set/group=_Pruebas/set/description=PRUEBA_ALCOHOLEMIA/set/label=_Prueba_en_aire/set/order=310/set/fk=true/set/fk_table=ARENA2_DIC_PRUEBA_ALCOHOLEMIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"TASA_ALCOHOLEMIA1/Integer/set/group=_Pruebas/set/description=TASA_ALCOHOLEMIA1/set/label=_Tasa_1_en_aire_mg_l/set/order=320";"TASA_ALCOHOLEMIA2/Integer/set/group=_Pruebas/set/description=TASA_ALCOHOLEMIA2/set/label=_Tasa_2_en_aire_mg_l/set/order=330";"PRUEBA_ALC_SANGRE/Boolean/set/group=_Pruebas/set/description=PRUEBA_ALC_SANGRE/set/label=_Prueba_en_sangre/set/order=340";"SIGNOS_INFLU_ALCOHOL/Boolean/set/group=_Pruebas/set/description=SIGNOS_INFLU_ALCOHOL/set/label=_Signos_de_influencia_del_alcohol/set/order=350";"INFLU_DROGAS/Boolean/set/group=_Pruebas/set/description=INFLU_DROGAS/set/label=_Influyen_las_drogas/set/order=360";"PRUEBA_DROGAS/Integer/set/group=_Pruebas/set/description=PRUEBA_DROGAS/set/label=_Prueba_de_drogas/set/order=370/set/fk=true/set/fk_table=ARENA2_DIC_PRUEBA_DROGAS/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"AMP/Boolean/set/group=_Pruebas/set/description=AMP/set/label=_Positivo_anfetaminas/set/order=380";"CONFIRMADO_AMP/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_AMP/set/label=_Confirmado_anfetaminas/set/order=390";"BDZ/Boolean/set/group=_Pruebas/set/description=BDZ/set/label=_Positivo_benzodiacepinas/set/order=400";"CONFIRMADO_BDZ/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_BDZ/set/label=_Confirmado_benzodiacepinas/set/order=410";"COC/Boolean/set/group=_Pruebas/set/description=COC/set/label=_Positivo_cocaina/set/order=420";"CONFIRMADO_COC/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_COC/set/label=_Confirmado_cocaina/set/order=430";"THC/Boolean/set/group=_Pruebas/set/description=THC/set/label=_Positivo_cannabis_y_derivados/set/order=440";"CONFIRMADO_THC/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_THC/set/label=_Confirmado_cannabis_y_derivados/set/order=450";"METH/Boolean/set/group=_Pruebas/set/description=METH/set/label=_Positivo_metanfetaminas/set/order=460";"CONFIRMADO_METH/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_METH/set/label=_Confirmado_metanfetaminas/set/order=470";"OPI/Boolean/set/group=_Pruebas/set/description=OPI/set/label=_Positivo_opiaceos/set/order=480";"CONFIRMADO_OPI/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_OPI/set/label=_Confirmado_opiaceos/set/order=490";"OTRAS/Boolean/set/group=_Pruebas/set/description=OTRAS/set/label=_Positivo_benzodiacepinas/set/order=500";"CONFIRMADO_OTRAS/Boolean/set/group=_Pruebas/set/description=CONFIRMADO_OTRAS/set/label=_Confirmado_otra_sustancias/set/order=510";"SIGNOS_INFLU_DROGAS/Boolean/set/group=_Pruebas/set/description=SIGNOS_INFLU_DROGAS/set/label=_Signos_de_influencia_de_drogas/set/order=520";"INFLU_PRES_INFRAC_COND/Boolean/set/group=_Presuntas_infracciones/set/description=INFLU_PRES_INFRAC_COND/set/label=_Influyen_las_infracciones_del_conductor/set/order=530";"PRES_INFRAC_COND/Integer/set/group=_Presuntas_infracciones/set/description=PRES_INFRAC_COND/set/label=_Presuntas_infracciones_del_conductor/set/order=540/set/fk=true/set/fk_table=ARENA2_DIC_INFRACCIONES_CODUCTOR/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"PRES_INFRAC_SIN_LUCES/Boolean/set/group=_Presuntas_infracciones/set/description=PRES_INFRAC_SIN_LUCES/set/label=_Sin_luces_de_emergencia/set/order=550";"PRES_INFRAC_SIN_TRIANGULO/Boolean/set/group=_Presuntas_infracciones/set/description=PRES_INFRAC_SIN_TRIANGULO/set/label=_Sin_triangulo_de_presenalizacion/set/order=560";"INFLU_PRES_INFRAC_VEL/Boolean/set/group=_Presuntas_infracciones/set/description=INFLU_PRES_INFRAC_VEL/set/label=_Influye_infraccion_velocidad/set/order=570";"PRES_INFRAC_VEL_COND/Integer/set/group=_Presuntas_infracciones/set/description=PRES_INFRAC_VEL_COND/set/label=_Presuntas_infracciones_de_velocidad/set/order=580/set/fk=true/set/fk_table=ARENA2_DIC_INFRACCIONES_VELOCIDAD/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"INFLU_OTRA_INFRAC/Boolean/set/group=_Presuntas_infracciones/set/description=INFLU_OTRA_INFRAC/set/label=_Influye_otra_infraccion/set/order=590";"OTRA_INFRAC_COND/Integer/set/group=_Presuntas_infracciones/set/description=OTRA_INFRAC_COND/set/label=_Otra_infraccion/set/order=600/set/fk=true/set/fk_table=ARENA2_DIC_INFRACCIONES_OTRAS/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"EXTRA/String/set/size=10000/set/description=Extra/set/label=_Extra/set/order=2000"
+"2005030000782/2";"2005030000782";"2005030000782/2";"2";"false";;"1";"ESPAÑA";"ESPAÑA";"MADRID";;"8";"false";"14";;;;"3";"01/04/1973";"17";"3";"true";"0";;;;;;;;"false";;"0";;;"false";"false";;;;;;;;;;;;;;;;"false";"false";"1";;;"false";"1";"false";"1";
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_CONDUCTORES.dal
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_CONDUCTORES.dal
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_VEHICULOS.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_VEHICULOS.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/operations/usecases/arena2/ARENA2_VEHICULOS.csv	(revision 46118)
@@ -0,0 +1,4 @@
+"LID_VEHICULO/String/set/size=30/set/hidden=true/set/pk=true/set/description=LID_VEHICULO/set/label=_ID_vehiculo/set/order=0";"ID_ACCIDENTE/String/set/size=20/set/description=ID_ACCIDENTE/set/label=_Accidente/set/order=10/set/fk=true/set/fk_table=ARENA2_ACCIDENTES/set/fk_code=ID_ACCIDENTE/set/fk_label=FORMAT('%s',ID_ACCIDENTE)/set/fk.closedlist=false";"ID_VEHICULO/Integer/set/description=ID_VEHICULO/set/label=_Cod_vehiculo/set/order=20";"SIN_CONDUCTOR/Boolean/set/description=SIN_CONDUCTOR/set/label=_Sin_conductor/set/order=30";"LID_CONDUCTOR/String/set/size=20/set/description=LID_CONDUCTOR/set/label=_Conductor/set/order=40/set/fk=true/set/fk_table=ARENA2_CONDUCTORES/set/fk_code=LID_CONDUCTOR/set/fk_label=FORMAT('%02d %s %s %s',TOINTEGER(ID_VEHICULO), TOSTR(FECHA_NACIMIENTO), NACIONALIDAD, MUNICIPIO_RESIDENCIA)/set/fk.closedlist=false";"FECHA_MATRICULACION/Date/set/locale=es/set/description=FECHA_MATRICULACION/set/label=_Fecha_matriculacion/set/order=50";"NACIONALIDAD/String/set/size=100/set/description=NACIONALIDAD/set/label=_Nacionalidad/set/order=60";"TIPO_VEHICULO/Integer/set/description=TIPO_VEHICULO/set/label=_Tipo_vehiculo/set/order=70/set/fk=true/set/fk_table=ARENA2_DIC_TIPO_VEHICULO/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"MMA/Integer/set/description=MMA/set/label=_MMA/set/order=80/set/fk=true/set/fk_table=ARENA2_DIC_MMA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"MARCA_NOMBRE/String/set/size=100/set/description=MARCA_NOMBRE/set/label=_Marca/set/order=90";"MODELO/String/set/size=100/set/description=MODELO/set/label=_Modelo/set/order=100";"ITV/Integer/set/description=ITV/set/label=_ITV/set/order=110/set/fk=true/set/fk_table=ARENA2_DIC_ITV/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"SEGURO/Integer/set/description=SEGURO/set/label=_Seguro/set/order=120/set/fk=true/set/fk_table=ARENA2_DIC_GENERICO2/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"NUM_OCUPANTES/Integer/set/description=NUM_OCUPANTES/set/label=_Numero_de_ocupantes/set/order=130";"VEHICULO_ADAPTADO/Boolean/set/description=VEHICULO_ADAPTADO/set/label=_Vehiculo_adaptado/set/order=140";"TRANSPORTE_ESPECIAL/Boolean/set/description=TRANSPORTE_ESPECIAL/set/label=_Transporte_especial/set/order=150";"FUGADO/Boolean/set/description=FUGADO/set/label=_Fugado/set/order=160";"INCENDIADO/Boolean/set/description=INCENDIADO/set/label=_Incendiado/set/order=170";"MP/Boolean/set/description=MP/set/label=_Mercancias_peligrosas/set/order=180";"MP_NUMERO_ONU/Integer/set/description=MP_NUMERO_ONU/set/label=_MP_Numero_ONU/set/order=190/set/fk=true/set/fk_table=ARENA2_DIC_ONU/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',CODIGO,DESCRIPCION)/set/fk.closedlist=true";"DANYOS/Integer/set/description=DANYOS/set/label=_Danyos/set/order=200/set/fk=true/set/fk_table=ARENA2_DIC_DANYOS/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"REMOLQUE/Boolean/set/description=REMOLQUE/set/label=_Remolque/set/order=210";"SEMIREMOLQUE/Boolean/set/description=SEMIREMOLQUE/set/label=_Semiremolque/set/order=220";"CARAVANA/Boolean/set/description=CARAVANA/set/label=_Carabana/set/order=230";"REMOLQUE_OTROS/Boolean/set/description=REMOLQUE_OTROS/set/label=_Otros_remolques/set/order=240";"POS_VIA/Integer/set/description=POS_VIA/set/label=_Posicion_en_la_via/set/order=250/set/fk=true/set/fk_table=ARENA2_DIC_POSICION_VIA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"APROXIMACION_NUDO/Integer/set/description=APROXIMACION_NUDO/set/label=_Aproximacion_a_nudo/set/order=260/set/fk=true/set/fk_table=ARENA2_DIC_NUDO_APROX/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"SENTIDO_CIRCULACION/Integer/set/description=SENTIDO_CIRCULACION/set/label=_Sentido_de_la_circulacion/set/order=270/set/fk=true/set/fk_table=ARENA2_DIC_SENTIDO_CIRCULA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"LUGAR_CIRCULABA/Integer/set/description=LUGAR_CIRCULABA/set/label=_Lugar_por_el_que_circulaba/set/order=280/set/fk=true/set/fk_table=ARENA2_DIC_LUGAR_CIRCULA/set/fk_code=ID/set/fk_label=FORMAT('%02d - %s',ID,DESCRIPCION)/set/fk.closedlist=true";"FACT_LUGAR_CIRCULA/Boolean/set/description=FACT_LUGAR_CIRCULA/set/label=_Influye_el_lugar_por_el_que_circulaba/set/order=290";"TACOGRAFO_DISCO/Boolean/set/group=_Tacografo/set/description=TACOGRAFO_DISCO/set/label=_Disco_tacografo/set/order=300";"TACOGRAFO_LECTURA/Boolean/set/group=_Tacografo/set/description=TACOGRAFO_LECTURA/set/label=_Lectura_tacografo/set/order=310";"DESCANSO_DIARIO/Boolean/set/group=_Tacografo/set/description=DESCANSO_DIARIO/set/label=_Respetado_el_descanso_diario/set/order=320";"HORAS_COND_CONTINU_SUP/Boolean/set/group=_Tacografo/set/description=HORAS_COND_CONTINU_SUP/set/label=_Superadas_horas_conduccion_continuada/set/order=330";"HORAS_COND_DIARIA_SUP/Boolean/set/group=_Tacografo/set/description=HORAS_COND_DIARIA_SUP/set/label=_Superadas_horas_de_conduccion_diaria/set/order=340";"HORAS_COND_CONTINUADAS_H/Integer/set/group=_Tacografo/set/description=HORAS_COND_CONTINUADAS_H/set/label=_Conduccion_continuada_horas/set/order=350";"HORAS_COND_CONTINUADAS_MIN/Integer/set/group=_Tacografo/set/description=HORAS_COND_CONTINUADAS_MIN/set/label=_Conduccion_continuada_min/set/order=360";"FACT_ANOMALIAS_PREVIAS/Boolean/set/group=_Anomalias_previas/set/description=FACT_ANOMALIAS_PREVIAS/set/label=_Influyen_las_anomalias_previas/set/order=370";"ANOMALIAS_NINGUNA/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_NINGUNA/set/label=_AP_Aparentemente_ninguna/set/order=380";"ANOMALIAS_NEUMATICOS/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_NEUMATICOS/set/label=_AP_Neumaticos_desgastados_o_defectuosos/set/order=390";"ANOMALIAS_REVENTON/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_REVENTON/set/label=_AP_Reventon/set/order=400";"ANOMALIAS_DIRECCION/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_DIRECCION/set/label=_AP_Direccion/set/order=410";"ANOMALIAS_FRENOS/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_FRENOS/set/label=_AP_Frenos/set/order=420";"ANOMALIAS_OTRAS/Boolean/set/group=_Anomalias_previas/set/description=ANOMALIAS_OTRAS/set/label=_AP_Otras/set/order=430";"ANOMALIAS_OTRA/String/set/size=50/set/group=_Anomalias_previas/set/description=ANOMALIAS_OTRA/set/label=_AP_Otra/set/order=440";"AIRBAG_COND/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_COND/set/label=_AB_Frontal_del_conductor/set/order=450";"AIRBAG_PAS_DEL/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_PAS_DEL/set/label=_AB_Frontal_pasajero_delantero/set/order=460";"AIRBAG_ROD_IZDA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_ROD_IZDA/set/label=_AB_Frontal_Rodilla_izquierdo/set/order=470";"AIRBAG_ROD_DCHA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_ROD_DCHA/set/label=_AB_Rodilla_derecho/set/order=480";"AIRBAG_LAT_DEL_IZDA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_LAT_DEL_IZDA/set/label=_AB_Lateral_delantero_izquierdo/set/order=490";"AIRBAG_LAT_DEL_DCHA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_LAT_DEL_DCHA/set/label=_AB_Lateral_delantero_derecho/set/order=500";"AIRBAG_CORT_DEL_IZDA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_CORT_DEL_IZDA/set/label=_AB_Cortina_delantero_izquierdo/set/order=510";"AIRBAG_CORT_DEL_DCHA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_CORT_DEL_DCHA/set/label=_AB_Cortina_delantero_derecho/set/order=520";"AIRBAG_LAT_TRAS_IZDA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_LAT_TRAS_IZDA/set/label=_AB_Lateral_trasero_izquierdo/set/order=530";"AIRBAG_LAT_TRAS_DCHA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_LAT_TRAS_DCHA/set/label=_AB_Lateral_trasero_derecho/set/order=540";"AIRBAG_CORT_TRAS_IZDA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_CORT_TRAS_IZDA/set/label=_AB_Cortina_trasero_izquierdo/set/order=550";"AIRBAG_CORT_TRAS_DCHA/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_CORT_TRAS_DCHA/set/label=_AB_Cortina_trasero_derecho/set/order=560";"AIRBAG_OTROS/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_OTROS/set/label=_AB_Otros/set/order=570";"AIRBAG_DESCONOCIDO/Boolean/set/group=_Airbag_disparado/set/description=AIRBAG_DESCONOCIDO/set/label=_AB_Se_desconoce/set/order=580";"EXTRA/String/set/size=10000/set/description=Extra/set/label=_Extra/set/order=2000";;;;;;;;
+"2005030000782/1";"2005030000782";"1";"false";"2005030000782/1";;"ESPAÑA";"21";"1";"VOLVO";"FH16 4X2T 520";"1";"1";"1";;;;"false";"false";;;"false";"true";;;;;"2";;;;"true";"true";"true";"true";;;"false";"true";"false";"false";"false";"false";"false";;"false";;;;"false";;;;;;;;;;;;;;;;;;
+"2005030000782/2";"2005030000782";"2";"false";"2005030000782/2";;"ESPAÑA";"1";;"FORD";"MONDEO";"1";"1";"1";;;;"false";"false";;;"false";"false";;;;;"2";;;;;;;;;;"false";"true";"false";"false";"false";"false";"false";;"false";;;;"false";;;;;;;;;;;;;;;;;;
+"2005030000782/3";"2005030000782";"3";"false";"2005030000782/3";;"ESPAÑA";"1";;"CITROEN";"XSARA PICASSO 18";"1";"1";"4";;;;"false";"false";;;"false";"false";;;;;"2";;;;;;;;;;"false";"true";"false";"false";"false";"false";"false";;"false";;;;"false";;;;;;;;;;;;;;;;;;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/resources/org/gvsig/fmap/dal/store/jdbc2/continentes_nogeom.csv	(revision 46118)
@@ -0,0 +1,9 @@
+"ID/Integer/set/order=0";"NAME/String/set/size=50/set/order=10"
+"1";"Africa"
+"2";"Antarctica"
+"3";"Asia"
+"4";"Australia"
+"5";"Europe"
+"7";"Oceania"
+"8";"South America"
+"9";"North America"
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,125 @@
+<?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>
+        <field label="Batch size" name="batchSize" type="Integer" mandatory="false" defaultValue="500" group="Advanced">
+          <description>Batch size used for bulk inserts</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.344/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.344/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/jdbc2/JDBC2Metadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBC2Metadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBC2Metadata.xml	(revision 46118)
@@ -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="JDBC2" namespace="Metadata">
+      <extends>
+      	<class name="SpatialProvider" namespace="Metadata"/>
+      </extends>
+      <description>Metadata of a JDBC2 store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBC2Parameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBC2Parameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBC2Parameters.xml	(revision 46118)
@@ -0,0 +1,128 @@
+<?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="JDBC2ResourceParameters">
+      <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>
+        <field label="Batch size" name="batchSize" type="Integer" mandatory="false" defaultValue="500" group="Advanced">
+          <description>Batch size used for bulk inserts</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="JDBC2StoreParameters">
+      <extends>
+        <class>JDBC2ResourceParameters</class>
+        <class>DBStoreParameters</class>
+      </extends>
+      <tags>
+          <value name="defaultGroup" value="Basic"/>
+      </tags>
+      <fields>
+        <field name="precalculateEnvelope" type="boolean" mandatory="false" group="Advanced" defaultValue="false" >
+          <description>If set to true calculate the envelope when open the store in a background thread</description>
+        </field>
+      </fields>
+    </class>
+
+    <class name="JDBC2NewStoreParameters">
+      <description></description>
+      <extends>
+        <class>JDBC2ResourceParameters</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="JDBC2ServerExplorerParameters">
+      <extends>
+        <class>JDBC2ResourceParameters</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>  
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,2 @@
+org.gvsig.fmap.dal.store.jdbc.JDBCLibrary
+org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCUtils.java	(revision 46118)
@@ -0,0 +1,293 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCUtils {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(JDBCUtils.class);
+    
+    private JDBCUtils() {
+
+    }
+
+    private static String getSQLInfo(PreparedStatement st, String sql) {
+        try {
+            return sql+" [[ "+Objects.toString(st)+" ]]";
+        } catch(Throwable th) {
+            return sql;
+        }
+    }
+
+    public static String getConnId(Statement st) {
+        if( st==null ) {
+            return "null";
+        }
+        try {
+            return getHexId(st.getConnection());
+        } catch (SQLException ex) {
+            return "null";
+        }
+    }
+
+    public static String getConnId(ResultSet resulSet) {
+        if( resulSet==null ) {
+            return "null";
+        }
+        try {
+            return getConnId(resulSet.getStatement());
+        } catch (SQLException ex) {
+            return "null";
+        }
+    }
+
+    public static String getConnId(Connection conn) {
+        return getHexId(conn);
+    }
+    
+    public static String getHexId(Object obj) {
+        if( obj==null ) {
+            return "null";
+        }
+        return Integer.toHexString(obj.hashCode()).toUpperCase();
+    }
+    
+    public static ResultSet executeQuery(Statement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] executeQuery(st) SQL= " + sql);
+        }
+        try {
+            @SuppressWarnings("null")
+            ResultSet rs = st.executeQuery(sql);
+            return rs;
+        } catch(Exception ex) {
+            LOGGER.debug("execute SQL: " + sql, ex);
+            throw ex;
+        }
+    }
+
+    @SuppressWarnings("null")
+    public static void execute(Statement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] execute(st) SQL: " + sql);
+        }
+        try {
+            st.execute(sql);
+        } catch(Exception ex) {
+            LOGGER.debug("execute SQL: " + sql, ex);
+            throw ex;
+        }
+    }
+
+    public static void execute(Connection connection, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(connection)+"] execute(conn) SQL: " + sql);
+        }
+        try {
+            @SuppressWarnings("null")
+            Statement st = connection.createStatement();
+            st.execute(sql);
+        } catch(Exception ex) {
+            LOGGER.debug("execute SQL: " + sql, ex);
+            throw ex;
+        }
+    }
+
+    public static void execute(Connection connection, List<String> sqls) throws SQLException {
+        Statement st = null;
+        String sql = null;
+        try {
+            st = connection.createStatement();
+            Iterator<String> it = sqls.iterator();
+            while( it.hasNext() ) {
+                sql = it.next();
+                if( LOGGER.isDebugEnabled() ) {
+                    LOGGER.debug("["+getConnId(connection)+"] execute(conn) SQLs: " + sql);
+                }
+                st.execute(sql);
+            }
+        } catch (SQLException ex) {
+            LOGGER.debug("execute SQL: " + sql, ex);
+            throw ex;
+        } finally {
+            JDBCUtils.closeQuietly(st);
+        }       
+    }
+
+    public static ResultSet executeQuery(PreparedStatement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] executeQuery(pst) SQL= "+ getSQLInfo(st,sql));
+        }
+        try {
+            @SuppressWarnings("null")
+            ResultSet rs = st.executeQuery();
+            return rs;
+        } catch(Exception ex) {
+            LOGGER.debug("execute query SQL: " + getSQLInfo(st,sql), ex);
+            throw ex;
+        }
+    }
+
+    @SuppressWarnings("null")
+    public static void execute(PreparedStatement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] execute(pst) SQL= "+ getSQLInfo(st,sql));
+        }
+        try {
+            st.execute();
+        } catch(Exception ex) {
+            LOGGER.debug("execute SQL: " + getSQLInfo(st,sql), ex);
+            throw ex;
+        }
+    }
+
+    public static int executeUpdate(PreparedStatement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] executeUpdate(pst) SQL= "+ getSQLInfo(st,sql));
+        }
+        try {
+            return st.executeUpdate();
+        } catch(Exception ex) {
+            LOGGER.debug("execute update SQL: " + getSQLInfo(st,sql), ex);
+            throw ex;
+        }
+    }
+
+    public static int executeUpdate(Statement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] executeUpdate(st) SQL= "+ sql);
+        }
+        try {
+            return st.executeUpdate(sql);
+        } catch(Exception ex) {
+            LOGGER.debug("execute update SQL: " + sql, ex);
+            throw ex;
+        }
+    }
+
+    public static int[] executeBatch(PreparedStatement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] executeBatch(pst) SQL= "+ getSQLInfo(st,sql));
+        }
+        try {
+            return st.executeBatch();
+        } catch(Exception ex) {
+            LOGGER.debug("execute batch SQL: " + getSQLInfo(st,sql), ex);
+            throw ex;
+        }
+    }
+
+    public static void addBatch(PreparedStatement st, String sql) throws SQLException {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] addBatch(pst) SQL= "+ getSQLInfo(st,sql));
+        }
+        try {
+            st.addBatch();
+        } catch(Exception ex) {
+            LOGGER.debug("add batch SQL: " + getSQLInfo(st,sql), ex);
+            throw ex;
+        }
+    }
+
+    public static void closeQuietly(Statement st) {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(st)+"] Close statement");
+        }
+        if (st == null) {
+            return;
+        }
+        try {
+            st.close();
+        } catch (Exception e) {
+            LOGGER.debug("Problems closing " + st.getClass().getSimpleName() + " '" + st.toString() + "'.", e);
+        }
+    }
+
+    public static void closeQuietly(ResultSet resulSet) {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(resulSet)+"] Close ResultSet");
+        }
+        if (resulSet == null) {
+            return;
+        }
+        try {
+            resulSet.close();
+        } catch (Exception e) {
+            LOGGER.debug("Problems closing " + resulSet.getClass().getSimpleName() + " '" + resulSet.toString() + "'.", e);
+        }
+    }
+
+    public static void closeQuietly(Connection conn) {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(conn)+"] Close conn ("+Objects.toString(conn)+")");
+        }
+        if (conn == null) {
+            return;
+        }
+        try {
+            conn.close();
+        } catch (Exception e) {
+            LOGGER.debug("Problems closing " + conn.getClass().getSimpleName() + " '" + conn.toString() + "'.", e);
+        }
+    }
+    
+    public static void close(Connection conn) {
+        if( LOGGER.isDebugEnabled() ) {
+            LOGGER.debug("["+getConnId(conn)+"] Close conn ("+Objects.toString(conn)+")");
+        }
+        if (conn == null) {
+            return;
+        }
+        try {
+            conn.close();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    public static void closeQuietly(AutoCloseable obj) {
+        if (obj == null) {
+            return;
+        }
+        try {
+            if( LOGGER.isDebugEnabled() ) {
+                LOGGER.debug("Closing " + obj.getClass().getSimpleName() + " "+ obj.hashCode() + " ("+obj.toString()+")");
+            }
+            obj.close();
+        } catch (Exception e) {
+            LOGGER.debug("Problems closing " + obj.getClass().getSimpleName() + " '" + obj.toString() + "'.", e);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCLibrary.java	(revision 46118)
@@ -0,0 +1,124 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+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.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.db.DBStoreLibrary;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResourceParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.impl.expressionevaluator.JDBCSymbolTableFactory;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+/**
+ * Initialize JDBC Provider Library
+ *
+ */
+public class JDBCLibrary extends AbstractLibrary {
+
+    public static final String NAME = "JDBC2";
+
+    @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;
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+                .getDataManager();
+
+        DBHelper.registerParametersDefinition(
+                NAME + "StoreParameters",
+                JDBCStoreParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "NewStoreParameters",
+                JDBCNewStoreParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "ServerExplorerParameters",
+                JDBCServerExplorerParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "ResourceParameters",
+                JDBCResourceParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+
+        try {
+            DBHelper.registerMetadataDefinition(
+                    NAME,
+                    JDBCStoreProvider.class,
+                    dataman.getResourceAsStream(this, NAME + "Metadata.xml")
+            );
+        } catch (MetadataException e) {
+            ex = new LibraryException(this.getClass(), e);
+        }
+
+//        ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator
+//                .getResourceManager();
+//
+//        if (!resman.getResourceProviders().contains(NAME)) {
+//            resman.register(
+//                    JDBCResource.NAME, 
+//                    JDBCResource.DESCRIPTION,
+//                    JDBCResource.class,
+//                    JDBCResourceParameters.class
+//            );
+//        }
+
+//        if (!dataman.getStoreProviderRegister().exits(NAME)) {
+//            dataman.registerStoreProviderFactory(new JDBCStoreProviderFactory());
+//        }
+//
+//        if (!dataman.getServerExplorerRegister().exits(NAME)) {
+//            dataman.registerServerExplorerFactory(new JDBCServerExplorerFactory());
+//        }
+
+        JDBCSymbolTableFactory.selfRegister();
+
+        if (ex != null) {
+            throw ex;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCServerExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCServerExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCServerExplorer.java	(revision 46118)
@@ -0,0 +1,117 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import java.util.List;
+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.RemoveException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+
+
+public interface JDBCServerExplorer extends ResourceConsumer, org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer  {
+    
+    public static int SHOW_TABLES_AND_VIEWS = 0;
+    public static int SHOW_TABLES = 1;
+    public static int SHOW_VIEWS = 2;
+
+    @Override
+    public JDBCServerExplorerParameters getParameters();
+
+    @Override
+    public String getProviderName();
+
+    @Override
+    public String getStoreName();
+
+    @Override
+    public boolean canAdd();
+
+    @Override
+    public boolean add(
+            String providerName, 
+            NewDataStoreParameters theParams, 
+            boolean overwrite
+    ) throws DataException;
+
+    @Override
+    public List<DataStoreParameters> list(int mode) throws DataException;
+
+    @Override
+    public DataStore open(DataStoreParameters params) throws DataException;
+
+    @Override
+    public void remove(DataStoreParameters theParams) throws RemoveException;
+
+    @Override
+    public void updateTableStatistics(String database, String schema, String table) throws JDBCExecuteSQLException;
+   
+    @Override
+    public JDBCNewStoreParameters getAddParameters() throws DataException;
+
+    @Override
+    public JDBCStoreParameters getOpenParameters() throws DataException;
+
+    @Override
+    public JDBCStoreParameters get(String name) throws DataException;
+
+    @Override
+    public List getDataStoreProviderNames();
+
+    @Override
+    public FeatureType getFeatureType(DataStoreParameters theParams) throws DataException;
+
+    public void setCustomResources(String tableName, String resourcesTableName);
+    
+    public void setCustomResources(String tableName, String resourcesTableName, boolean readonly);
+    
+    /**
+     * 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}
+     *
+     * @param tablesOrViews , filter store between tables and views: {@link #SHOW_TABLES_AND_VIEWS},
+     *            {@link #SHOW_TABLES}, {@link #SHOW_VIEWS}
+     *
+     * @return list of DataStoreParameters
+     *
+     * @throws DataException
+     */
+    public List<DataStoreParameters> list(int mode, int tablesOrViews) throws DataException;
+    
+    /**
+     * Check if the explorer defined by this parameters reference to a database.
+     * @return true if database exists, false if not.
+     */
+    public boolean exists();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCStoreProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCStoreProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCStoreProvider.java	(revision 46118)
@@ -0,0 +1,52 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider_v2;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+
+public interface JDBCStoreProvider extends FeatureStoreProvider_v2 {
+    
+    public interface CalculatedValue<T> {
+        public void calculate();
+        public void reset();
+        public T get();
+    } 
+
+    public CalculatedValue<Long> getCountValue();
+    
+    public CalculatedValue<Envelope> getEnvelopeValue();
+    
+    public CalculatedValue<Boolean> getAllowWriteValue();
+
+    @Override
+    public JDBCStoreParameters getParameters();
+    
+    public JDBCHelper getHelper();
+    
+    @Override
+    public String getSourceId();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/OperationsFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/OperationsFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/OperationsFactory.java	(revision 46118)
@@ -0,0 +1,198 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.AppendOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CanCreateTablesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CanModifyTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CreateTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.DeletePassThroughOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.DropTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ExecuteOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureProviderByReferenceOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ListTablesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.TableIsEmptyOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdatePassThroughOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdateTableStatisticsOperation;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public interface OperationsFactory {
+
+    public interface TableReference {
+        public String getDatabase();
+        public String getSchema();
+        public String getTable();
+        public String getSubquery();
+        public boolean hasDatabase();
+        public boolean hasSchema();
+        public boolean hasTable();
+        public boolean hasSubquery();
+    }
+    
+    public TableReference createTableReference(
+            String database,
+            String schema,
+            String table,
+            String subquery            
+    );
+    
+    public TableReference createTableReference(JDBCStoreParameters params);
+    public TableReference createTableReference(JDBCNewStoreParameters params);
+    
+    public FetchFeatureTypeOperation createFetchFeatureType(
+            EditableFeatureType type,
+            TableReference table,
+            List<String> primaryKeys,
+            String defaultGeometryField,
+            IProjection crs
+    );
+    
+    public FetchFeatureTypeOperation createFetchFeatureType(
+            EditableFeatureType type,
+            TableReference table,
+            List<String> primaryKeys,
+            String defaultGeometryField,
+            IProjection crs,
+            int geometryType,
+            int geometrySubtype
+            
+    );
+    
+    public FetchFeatureProviderByReferenceOperation createFetchFeatureProviderByReference(
+            FeatureReferenceProviderServices reference,
+            FeatureType featureType,
+            TableReference table
+    );
+
+    public CalculateEnvelopeOfColumnOperation createCalculateEnvelopeOfColumn(
+            FeatureType featureType,
+            TableReference table,
+            String columnName,
+            String baseFilter,
+            Envelope workingArea,
+            IProjection crs
+    );
+
+    public PerformChangesOperation createPerformChanges(
+            TableReference table,
+            FeatureType type,
+            Iterator deleteds,
+            Iterator inserteds,
+            Iterator updateds,
+            Iterator featureTypesChanged
+    );
+
+    public AppendOperation createAppend(
+            TableReference table,
+            FeatureType type
+    );
+
+    public CountOperation createCount(
+            FeatureType featureType,
+            TableReference table,
+            String baseFilter,
+            FeatureQuery query
+    );
+
+    public TableIsEmptyOperation createTableIsEmpty(
+            FeatureType featureType,
+            TableReference table,
+            String baseFilter,
+            FeatureQuery query
+    );
+
+    public ResultSetForSetProviderOperation createResultSetForSetProvider(
+            TableReference table,
+            String baseFilter,
+            String baseOrder,
+            FeatureQuery query,
+            FeatureType storeType,
+            FeatureType setType,
+            long limit,
+            long offset,
+            int fetchSize
+    );
+
+    public ListTablesOperation createListTables(
+            int mode,
+            JDBCServerExplorerParameters baseParameters,
+            boolean informationTables,
+            int tablesOrViews
+    );
+
+    public DropTableOperation createDropTable(
+            TableReference table
+    );
+
+    public CreateTableOperation createTable(
+            TableReference table,
+            FeatureType type,
+            List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges,
+            List<String> additionalSQLs
+    ) throws DataException;
+
+    public CanCreateTablesOperation createCanCreateTables();
+    
+    public UpdateTableStatisticsOperation createUpdateTableStatistics(
+            TableReference table
+    );
+
+    public CanModifyTableOperation createCanModifyTableOperation(
+            TableReference table
+    );
+    
+    public ExecuteOperation createExecute(String sql);
+    
+    public UpdatePassThroughOperation createUpdatePassThroughOperation(
+            TableReference table,
+            Object[] parameters, 
+            Expression filter
+    );
+
+    public DeletePassThroughOperation createDeletePassThroughOperation(
+            TableReference table,
+            Expression filter
+    );
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCResourcesStorage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCResourcesStorage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCResourcesStorage.java	(revision 46118)
@@ -0,0 +1,526 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+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 java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.NullOutputStream;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_RESOURCE;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
+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.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.resourcesstorage.AbstractResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.CachedValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCResourcesStorage extends AbstractResourcesStorage {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(JDBCResourcesStorage.class);
+
+    private static class ExistsResourcesCache extends CachedValue<Map<String,Boolean>> {
+        @Override
+        protected void reload() {
+            this.setValue(new HashMap<>());
+        }        
+    }
+    
+    private static class DataBaseResource implements Resource {
+
+        private class ResourceInputStream extends InputStream {
+
+            @Override
+            public int read() throws IOException {
+                return in.read();
+            }
+
+            @Override
+            public void close() throws IOException {
+                DataBaseResource.this.close();
+            }
+        }
+
+        private class ResourceOutputStream extends OutputStream {
+
+            @Override
+            public void write(int b) throws IOException {
+                out.write(b);
+            }
+
+            @Override
+            public void flush() throws IOException {
+                out.flush();
+            }
+
+            @Override
+            public void close() throws IOException {
+                DataBaseResource.this.close();
+            }
+        }
+
+        private final String name;
+        private final JDBCResourcesStorage storage;
+
+        private InputStream in;
+        private OutputStream out;
+
+        public DataBaseResource(JDBCResourcesStorage storage, String name) {
+            this.storage = storage;                    
+            this.name = name;
+        }
+
+        @Override
+        public String getName() {
+          return name;
+        }
+        
+        private JDBCStoreParameters getStoreParameters() {
+            return this.storage.resourcesStoreParameters;
+        }
+        
+        private String getTableName() {
+            return this.storage.tableName;
+        }
+        
+        private Map<String,Boolean> getExistsResourcesCache() {
+            return  this.storage.existsResourcesCache.get();
+        }
+        
+        @Override
+        public boolean isReadOnly() {
+            return this.storage.readonly;
+        }
+        @Override
+        public URL getURL() {
+            try {
+                String url = this.getStoreParameters().getUrl();
+                return new URL(url + "&tableName=" + this.getTableName() + "&resourceName=" + this.name);
+            } catch (Throwable ex) {
+                return null;
+            }
+        }
+
+        @Override
+        public boolean exists() {
+            FeatureStore store = null;
+            try {
+                FoldersManager fm = ToolsLocator.getFoldersManager();
+                Pair<String, String> key = this.getCacheID();
+                String key_s = key.getLeft() + "/"+ key.getRight();
+                Map<String, Boolean> erc = this.getExistsResourcesCache();
+                if( erc.containsKey(key_s) ) {
+                    return this.getExistsResourcesCache().get(key_s);
+                }
+                File f = fm.getTemporaryFile("resources-storage","jdbc", key.getLeft(), key.getRight());
+                if( f.exists() ) {
+                  return true;
+                }
+                DataManager dataManager = DALLocator.getDataManager();
+                store = (FeatureStore) dataManager.openStore(
+                        this.getStoreParameters().getDataStoreName(),
+                        this.getStoreParameters()
+                );
+                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                String filter = builder.eq(
+                        builder.column(FIELD_RESOURCES_NAME),
+                        builder.constant(this.getTableName()+"."+this.name)
+                ).toString();
+                Feature feature = store.findFirst(filter);
+                boolean exists = feature!=null;
+                this.getExistsResourcesCache().put(key_s, exists);
+                return exists;
+            } catch (Throwable ex) {
+                LOGGER.warn("Can't access to the resoure '" + this.getURL() + "'.", ex);
+            } finally {
+                DisposeUtils.disposeQuietly(store);
+            }
+            return false;
+        }
+
+        public boolean remove() {
+            FeatureStore store = null;
+            try {
+                FoldersManager fm = ToolsLocator.getFoldersManager();
+                Pair<String, String> key = this.getCacheID();
+                File f = fm.getTemporaryFile("resources-storage","jdbc", key.getLeft(), key.getRight());
+                if( f.exists() ) {
+                  f.delete();
+                }
+                DataManager dataManager = DALLocator.getDataManager();
+                store = (FeatureStore) dataManager.openStore(
+                        this.getStoreParameters().getDataStoreName(),
+                        this.getStoreParameters()
+                );
+                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                String filter = builder.eq(
+                        builder.column(FIELD_RESOURCES_NAME),
+                        builder.constant(this.getTableName()+"."+this.name)
+                ).toString();
+                Feature feature = store.findFirst(filter);
+                if(feature != null){
+                    store.edit();
+                    store.delete(feature);
+                    store.finishEditing();
+                    return true;
+                }
+                return false;
+            } catch (Throwable ex) {
+                FeatureStore.cancelEditingQuietly(store);
+                LOGGER.warn("Can't access to the resoure '" + this.getURL() + "'.", ex);
+            } finally {
+                DisposeUtils.disposeQuietly(store);
+            }
+            return false;
+        }
+
+        private Pair<String,String> getCacheID() {
+          byte[] data = this.getStoreParameters().toByteArray();
+          ImmutablePair<String, String> r = new ImmutablePair<>(
+                  DigestUtils.md5Hex(data), 
+                  this.getTableName()+"."+this.name
+          );
+          return r;
+        }
+        
+        private boolean removeCache() {
+          FoldersManager fm = ToolsLocator.getFoldersManager();
+          Pair<String, String> key = this.getCacheID();
+          File f = fm.getTemporaryFile("resources-storage","jdbc", key.getLeft(), key.getRight());
+          if( f.exists() ) {
+              try {
+                  FileUtils.forceDelete(f);
+              } catch (IOException ex) {
+                  return false;
+              }
+          }
+          return true;
+        }
+        
+        private InputStream getInputStreamFromCache() {
+          FoldersManager fm = ToolsLocator.getFoldersManager();
+          Pair<String, String> key = this.getCacheID();
+          File f = fm.getTemporaryFile("resources-storage","jdbc", key.getLeft(), key.getRight());
+          if( !f.exists() ) {
+            InputStream is = null;
+            FileOutputStream os = null;
+            File f2 = null;
+            try {
+              is = this.getInputStream();
+              if (is==null) {
+                  return null;
+              }
+              FileUtils.forceMkdir(f.getParentFile());
+              os = new FileOutputStream(f);
+              IOUtils.copy(is, os);             
+              IOUtils.closeQuietly(os);
+
+              f2 = fm.getTemporaryFile("resources-storage","jdbc", key.getLeft(), "parameters");              
+              byte[] data = this.getStoreParameters().toByteArray();
+              os = new FileOutputStream(f2);
+              IOUtils.write(data, os);
+            } catch (IOException ex) {
+              FileUtils.deleteQuietly(f);
+              FileUtils.deleteQuietly(f2);
+              return null;
+            } finally {
+              IOUtils.closeQuietly(is);
+              IOUtils.closeQuietly(os);
+            }
+          }
+          InputStream is = null;
+          try {
+            is = new FileInputStream(f);
+          } catch (FileNotFoundException ex) {
+          }
+          return is;
+        }
+        
+        private InputStream getInputStream() throws IOException {
+            FeatureStore store = null;
+            try {
+                DataManager dataManager = DALLocator.getDataManager();
+                store = (FeatureStore) dataManager.openStore(
+                        this.getStoreParameters().getDataStoreName(),
+                        this.getStoreParameters()
+                );
+                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                String filter = builder.eq(
+                        builder.column(FIELD_RESOURCES_NAME),
+                        builder.constant(this.getTableName()+"."+this.name)
+                ).toString();
+                Feature feature = store.findFirst(filter);
+                if (feature == null) {
+                    return null;
+                }
+                byte[] resource = feature.getByteArray(FIELD_RESOURCES_RESOURCE);
+                InputStream is = new ByteArrayInputStream(resource);
+                return is;
+            } catch (Throwable ex) {
+                LOGGER.warn("Can't access to the resoure '" + this.getURL() + "'.", ex);
+            } finally {
+                DisposeUtils.disposeQuietly(store);
+            }
+            return null;
+        }
+
+        @Override
+        public InputStream asInputStream() throws IOException {
+            if (this.in != null || this.out != null) {
+                throw new IllegalStateException("Resource is already open (" + this.getURL() + ")");
+            }
+            InputStream is = this.getInputStreamFromCache();
+            if( is==null ) {
+                is = this.getInputStream();
+                if ( is==null) {
+                    return null;
+                }
+            }
+            this.in = is;
+            return new ResourceInputStream();
+        }
+
+        @Override
+        public OutputStream asOutputStream() throws IOException {
+            if (this.in != null || this.out != null) {
+                throw new IllegalStateException("Resource is already open (" + this.getURL() + ").");
+            }
+            if( this.isReadOnly()) {
+                this.out = NullOutputStream.NULL_OUTPUT_STREAM;
+            } else {
+                this.out = new ByteArrayOutputStream();
+            }
+            return new ResourceOutputStream();
+        }
+
+        @Override
+        public void close() {
+            if (this.in != null) {
+                IOUtils.closeQuietly(this.in);
+                this.in = null;
+            }
+            if (!this.isReadOnly()&& this.out != null) {
+                FeatureStore store = null;
+                try {
+                    DataManager dataManager = DALLocator.getDataManager();
+                    store = (FeatureStore) dataManager.openStore(
+                            this.getStoreParameters().getDataStoreName(),
+                            this.getStoreParameters()
+                    );
+                    store.edit();
+                    ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                    String filter = builder.eq(
+                            builder.column(FIELD_RESOURCES_NAME),
+                            builder.constant(this.getTableName()+"."+this.name)
+                    ).toString();
+                    Feature feature = store.findFirst(filter);
+                    EditableFeature efeature;
+                    if (feature == null) {
+                        efeature = store.createNewFeature();
+                        efeature.set(FIELD_RESOURCES_NAME, this.getTableName()+"."+this.name);
+                        efeature.set(FIELD_RESOURCES_RESOURCE, ((ByteArrayOutputStream)this.out).toByteArray());
+                        store.insert(efeature);
+                    } else {
+                        efeature = feature.getEditable();
+                        efeature.set(FIELD_RESOURCES_RESOURCE, ((ByteArrayOutputStream)this.out).toByteArray());
+                        store.update(efeature);
+                    }
+                    store.finishEditing();
+                    removeCache();
+                } catch (Throwable ex) {
+                    FeatureStore.cancelEditingQuietly(store);
+                    LOGGER.warn("Can't write the resoure '" + this.getURL() + "'.", ex);
+                } finally {
+                    DisposeUtils.disposeQuietly(store);
+                }
+            }
+        }
+    }
+
+    private final ResourcesStorage alternativeStorge;
+    private final JDBCStoreParameters resourcesStoreParameters;
+    private final String tableName;
+    private final boolean readonly;
+    private final ExistsResourcesCache existsResourcesCache;
+
+    public JDBCResourcesStorage(
+                ResourcesStorage alternativeStorge, 
+                JDBCStoreParameters resourcesStoreParameters, 
+                String tableName
+        ) {
+        this(alternativeStorge, resourcesStoreParameters, tableName, false);
+    }
+
+    public JDBCResourcesStorage(
+                ResourcesStorage alternativeStorge, 
+                JDBCStoreParameters resourcesStoreParameters, 
+                String tableName,
+                boolean readonly
+        ) {
+        this.readonly = readonly;
+        this.alternativeStorge = alternativeStorge;
+        if( StringUtils.equals(TABLE_RESOURCES_NAME, tableName) ) {
+            // No podemos buscar recursos de la tabla de recursos, ya que si no
+            // al abrise la tabla de recursos entraria en bucle.
+            this.resourcesStoreParameters = null;
+        } else {
+            this.resourcesStoreParameters = resourcesStoreParameters;
+        }
+        this.tableName = tableName;
+        this.existsResourcesCache = new ExistsResourcesCache();
+        this.existsResourcesCache.setExpireTime(60000); // 1 min
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return this.resourcesStoreParameters == null;
+    }
+
+    @Override
+    public Resource getResource(String name) {
+        if( this.alternativeStorge!=null ) {
+            Resource r = this.alternativeStorge.getResource(name);
+            if( r.exists() ) {
+                return r;
+            }
+        }
+        if (this.resourcesStoreParameters == null) {
+            return null;
+        }
+        return new DataBaseResource(this,name);
+    }
+
+    @Override
+    public List<Resource> getResources(String name) {
+        if (this.resourcesStoreParameters == null) {
+            return null;
+        }
+        if( this.alternativeStorge!=null ) {
+            List<Resource> r = this.alternativeStorge.getResources(name);
+            if( r!=null && !r.isEmpty() ) {
+                return r;
+            }
+        }
+        FeatureStore store = null;
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            store = (FeatureStore) dataManager.openStore(
+                    this.resourcesStoreParameters.getDataStoreName(),
+                    this.resourcesStoreParameters
+            );
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            List<ResourcesStorage.Resource> ress = new ArrayList<>();
+            int n = 0;
+            while (true) {
+                String multiresourceName;
+                if (n == 0) {
+                    multiresourceName = name;
+                } else {
+                    multiresourceName = String.valueOf(n) + "." + name ;
+                }
+                String filter = builder.eq(
+                        builder.column(FIELD_RESOURCES_NAME),
+                        builder.constant(this.tableName+"."+multiresourceName)
+                ).toString();
+                Feature feature = store.findFirst(filter);
+                if( feature==null ) {
+                    break;
+                }
+                ress.add(new DataBaseResource(this,multiresourceName));
+                n++;
+            }
+            if (ress.isEmpty()) {
+                return null;
+            }
+            return ress;
+        } catch (Throwable ex) {
+            LOGGER.warn("Can't get resources for '" + this.resourcesStoreParameters.getUrl()+"&resourceName="+name + "'.", ex);
+            return null;
+            
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+
+    }
+
+    @Override
+    public boolean remove(String resourceName) {
+        if( this.alternativeStorge!=null ) {
+            try {
+                this.alternativeStorge.remove(resourceName);
+            } catch (Exception e) {
+                //Do nothing
+            }
+        }
+        if (this.resourcesStoreParameters == null) {
+            return false;
+        }
+        DataBaseResource resource = new DataBaseResource(this,resourceName);
+        
+        return resource.remove();
+    }
+    
+    void clearCache() throws IOException {
+        byte[] data = this.resourcesStoreParameters.toByteArray();
+
+        FoldersManager fm = ToolsLocator.getFoldersManager();
+        File f = fm.getTemporaryFile("resources-storage", "jdbc", DigestUtils.md5Hex(data));
+        FileUtils.deleteDirectory(f);
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCSQLBuilderBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCSQLBuilderBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCSQLBuilderBase.java	(revision 46118)
@@ -0,0 +1,506 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.primitive.Primitive;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.dispose.Disposable;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCSQLBuilderBase extends SQLBuilderBase {
+
+    public static final String PROP_FEATURE_TYPE = "FeatureType";
+    public static final String PROP_TABLE = "Table";
+    public static final String PROP_SYMBOLTABLE = "SymbolTable";
+    public static final String PROP_JDBCHELPER = "JDBCHelper";
+    public static final String PROP_QUERY = "Query";
+    
+    private GeometryManager geometryManager = null;
+    protected final JDBCHelper helper;
+    
+    public JDBCSQLBuilderBase(JDBCHelper helper) {
+        super();
+        this.helper = helper;
+    }
+    
+    public JDBCHelper getHelper() {
+        return helper;
+    }
+    
+    protected GeometryManager getGeometryManager() {
+        if (this.geometryManager == null) {
+            this.geometryManager = GeometryLocator.getGeometryManager();
+        }
+        return this.geometryManager;
+    }
+    
+    @Override
+    public Object srs_id(IProjection projection) {
+        Connection conn = null;
+        try {
+            conn = this.helper.getConnection();
+            SRSSolver solver = this.helper.getSRSSolver();
+            Object srscode = solver.getDatabaseCode(conn, projection);
+//            logger.debug("database code srs {}, type {}, srssolver {}.", 
+//                new Object[] { 
+//                    srscode, 
+//                    srscode==null? "null":srscode.getClass().getSimpleName(), 
+//                    solver
+//                }
+//            );
+            return srscode;
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't locate database code for SRS '"+projection.getAbrev()+"'.");
+        } finally {
+            this.helper.closeConnectionQuietly(conn);
+        }
+    }
+    
+    public void setParameters(PreparedStatement st) {
+        try {
+            int columnIndex = 1;
+            for (Parameter parameter : this.parameters()) {
+                st.setObject(columnIndex++, parameter.value());
+            }
+        } catch (Exception ex) {
+            String p = "unknow";
+            try {
+                p =  this.parameters().toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't set parameters to prepared statement from parameters (" + p + ")", ex);
+        }
+    }
+
+    public List<Object> getParameters(FeatureProvider feature) {
+        return getParameters(feature, null);
+    }
+    public List<Object> getParameters(FeatureProvider feature, List<Integer> types) {
+        try {
+            DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
+            FeatureType type = feature.getType();
+            List<Object> values = new ArrayList<>();
+            Object value;
+            for (Parameter parameter : this.parameters()) {
+                if (parameter.is_constant()) {
+                    value = parameter.value();
+                    values.add(value);
+                    if(types != null) {
+                        if (value == null) {
+                            types.add(org.gvsig.fmap.dal.DataTypes.OBJECT);
+                        } else {
+                            DataType dataType = dataTypesManager.getDataType(value.getClass());
+                            types.add(dataType.getType());
+                        }
+                    }
+                    
+                } else {
+                    String name = parameter.name();
+                    value = feature.get(name);
+                    FeatureAttributeDescriptor attrDesc = type.getAttributeDescriptor(name);
+                    switch( attrDesc.getType() ) {
+                    case org.gvsig.fmap.dal.DataTypes.DATE:
+                        if( value == null ) {
+                            values.add(null);
+                        } else {
+                            values.add(new java.sql.Date(((Date)value).getTime()));
+                        }
+                        if (types != null) {
+                            types.add(org.gvsig.fmap.dal.DataTypes.DATE);
+                        }
+                        
+                        break;
+                    case org.gvsig.fmap.dal.DataTypes.GEOMETRY:
+                        Geometry geom = this.forceGeometryType(
+                            attrDesc.getGeomType(),
+                            (Geometry)value
+                        );
+                        values.add(geom);
+                        if (types != null) {
+                            types.add(org.gvsig.fmap.dal.DataTypes.GEOMETRY);
+                        }
+                        break;
+                    default:
+                        values.add(value);
+                        if (types != null) {
+                            types.add(attrDesc.getDataType().getType());
+                        }
+
+                        break;
+                    }
+                }
+            }
+            return  values;
+        } catch (Exception ex) {
+            String f = "unknow";
+            try {
+                f = feature.toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't get parameters to prepared statement from the feature (" + f + ")", ex);
+        }
+    }
+
+    public Disposable setParameters(PreparedStatement st, FeatureProvider feature) {
+        try {
+            List<Integer> types = new ArrayList<>();
+            
+            List<Object> values = this.getParameters(feature, types);
+            return this.setStatementParameters(st, values, types, this.geometry_support_type());
+        } catch (Exception ex) {
+            String f = "unknow";
+            try {
+                f = feature.toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't set parameters to prepared statement from the feature (" + f + ")", ex);
+        }
+    }
+    
+    protected Geometry forceGeometryType(GeometryType geomtype, Geometry geom) throws CreateGeometryException {
+        if( geom == null ) {
+            return null;
+        }
+        switch( geomtype.getType() ) {
+        case Geometry.TYPES.MULTIPOLYGON:
+            if( geom.getType()==Geometry.TYPES.POLYGON ) {
+                MultiPolygon x = getGeometryManager().createMultiPolygon(geomtype.getSubType());
+                x.addPrimitive((Primitive) geom);
+                geom = x;
+            }
+            break;
+        case Geometry.TYPES.MULTILINE:
+            if( geom.getType()==Geometry.TYPES.LINE ) {
+                MultiLine x = getGeometryManager().createMultiLine(geomtype.getSubType());
+                x.addPrimitive((Primitive) geom);
+                geom = x;
+            }
+            break;
+        case Geometry.TYPES.MULTIPOINT:
+            if( geom.getType()==Geometry.TYPES.POINT ) {
+                MultiLine x = getGeometryManager().createMultiLine(geomtype.getSubType());
+                x.addPrimitive((Primitive) geom);
+                geom = x;
+            }
+            break;
+        case Geometry.TYPES.POLYGON:
+            if( geom.getType()==Geometry.TYPES.MULTIPOLYGON ) {
+                MultiPolygon x = (MultiPolygon) geom;
+                if( x.getPrimitivesNumber()==1 ) {
+                    geom = x.getPrimitiveAt(0);
+                }
+            }
+            break;
+        case Geometry.TYPES.LINE:
+            if( geom.getType()==Geometry.TYPES.MULTILINE ) {
+                MultiLine x = (MultiLine) geom;
+                if( x.getPrimitivesNumber()==1 ) {
+                    geom = x.getPrimitiveAt(0);
+                }
+            }
+            break;
+        case Geometry.TYPES.POINT:
+            if( geom.getType()==Geometry.TYPES.MULTIPOINT ) {
+                MultiPoint x = (MultiPoint) geom;
+                if( x.getPrimitivesNumber()==1 ) {
+                    geom = x.getPrimitiveAt(0);
+                }
+            }
+        }
+        return geom;
+    }
+    
+    public Disposable setParameters(PreparedStatement st, FeatureReference reference) {
+        try {
+            
+            List<Object> values = new ArrayList<>();
+            for (Parameter parameter : this.parameters()) {
+                if (parameter.is_constant()) {
+                    values.add(parameter.value());
+                } else {
+                    String name = parameter.name();
+                    values.add(((FeatureReferenceProviderServices)reference).getKeyValue(name));
+                }
+            }
+            return this.setStatementParameters(st, values, null, this.geometry_support_type());
+        } catch (Exception ex) {
+            String f = "unknow";
+            try {
+                f = reference.toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't set parameters to prepared statement from the feature (" + f + ")", ex);
+        }
+    }
+
+    public Disposable setStatementParameters(
+        PreparedStatement st, 
+        List values,
+        GeometrySupportType geometrySupportType) throws SQLException {
+        
+        return setStatementParameters(st, values, null, geometrySupportType);
+    }
+    
+    public Disposable setStatementParameters(
+        PreparedStatement st, 
+        List values,
+        List<Integer> types, //Can be null
+        GeometrySupportType geometrySupportType) throws SQLException {
+        
+        if (values == null) {
+            return new Disposable() {
+                @Override
+                public void dispose() {
+                }
+            };
+        }
+        if( LOGGER.isDebugEnabled() ) {
+            StringBuilder debug = new StringBuilder();
+            debug.append("[");
+            debug.append(JDBCUtils.getConnId(st));
+            debug.append("] st.set(");
+            try {
+                byte[] bytes;
+                int columnIndex = 1;
+                for (Object value : values) {
+                    if (value instanceof Geometry) {
+                        switch(geometrySupportType) {
+                            case WKT:
+                                value = ((Geometry) value).convertToWKT();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(value));
+                                debug.append(", ");
+                                break;
+                            case NATIVE:
+                            case WKB: 
+                                bytes = ((Geometry) value).convertToWKB();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(bytes));
+                                debug.append(", ");
+                                break;
+                            case EWKB:
+                                bytes = ((Geometry) value).convertToEWKB();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(bytes));
+                                debug.append(", ");
+                                break;
+                        }
+                    } else {
+                        debug.append("/*");
+                        debug.append(columnIndex);
+                        debug.append("*/ ");
+                        if( value instanceof String ) {
+                            debug.append(as_string(value));
+                        } else if( value instanceof Boolean ) {
+                            debug.append( ((Boolean)value)? constant_true:constant_false );
+                        } else {
+                            debug.append(value);
+                        }
+                        debug.append(", ");
+                    }
+                    columnIndex++;
+                }
+                debug.append(")");
+                LOGGER.debug(debug.toString());
+            } catch(Exception ex) {
+            }        
+        }
+        byte[] bytes;
+        int columnIndex = 1;
+        try {
+            for (Object value : values) {
+                if (value instanceof Geometry) {
+                    switch(geometrySupportType) {
+                        case WKT:
+                            value = ((Geometry) value).convertToWKT();
+                            st.setObject(columnIndex, value);
+                            break;
+                        case NATIVE:
+                        case WKB: 
+                            bytes = ((Geometry) value).convertToWKB();
+                            st.setBytes(columnIndex, bytes);
+                            break;
+                        case EWKB:
+                            bytes = ((Geometry) value).convertToEWKB();
+                            st.setBytes(columnIndex, bytes);
+                            break;
+                    }
+                } else {
+                    if(types == null){
+                        st.setObject(columnIndex, value);
+                    } else {
+                        setStatementValue(st, columnIndex, types.get(columnIndex-1), value);
+                    }
+                        
+                }
+                columnIndex++;
+            }
+            return new Disposable() {
+                @Override
+                public void dispose() {
+                }
+            };
+        } catch(Exception ex) {
+            throw new SQLException("Can't set values for the prepared statement.", ex);
+        }        
+    }
+
+    protected void setStatementValue(PreparedStatement st, int columnIndex, int type, Object value) throws SQLException {
+        switch (type){
+            case DataTypes.BOOLEAN:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.BIT);
+                } else {
+                    st.setBoolean(columnIndex, (boolean) value);
+                }
+                break;
+            case DataTypes.INTEGER:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.INTEGER);
+                } else {
+                    st.setInt(columnIndex, (int) value);
+                }
+                break;
+            case DataTypes.BYTE:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.TINYINT);
+                } else {
+                    st.setByte(columnIndex, (byte) value);
+                }
+                break;
+            case DataTypes.LONG:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.BIGINT);
+                } else {
+                    st.setLong(columnIndex, (long) value);
+                }
+                break;
+            case DataTypes.FLOAT:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.REAL);
+                } else {
+                    st.setFloat(columnIndex, (float) value);
+                }
+                break;
+            case DataTypes.DOUBLE:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.DOUBLE);
+                } else {
+                    st.setDouble(columnIndex, (double) value);
+                }
+                break;
+            case DataTypes.DECIMAL:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.DECIMAL);
+                } else {
+                    st.setBigDecimal(columnIndex, (BigDecimal) value);
+                }
+                break;
+            case DataTypes.URL:
+            case DataTypes.URI:
+            case DataTypes.FILE:
+                value = Objects.toString(value, null);
+            case DataTypes.STRING:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.VARCHAR);
+                } else {
+                    st.setString(columnIndex, (String) value);
+                }
+                break;
+            case DataTypes.TIMESTAMP:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.TIMESTAMP);
+                } else {
+                    st.setTimestamp(columnIndex, (Timestamp) value);
+                }
+                break;
+            case DataTypes.TIME:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.TIME);
+                } else {
+                    st.setTime(columnIndex, (Time) value);
+                }
+                break;
+            case DataTypes.DATE:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.DATE);
+                } else {
+                    st.setDate(columnIndex, (java.sql.Date)value);
+                }
+                break;
+            case DataTypes.BYTEARRAY:
+                if(value == null){
+                    st.setNull(columnIndex, java.sql.Types.BINARY);
+                } else {
+                    st.setBytes(columnIndex, (byte[]) value);
+                }
+                break;
+            default:
+                st.setObject(columnIndex, value);
+                LOGGER.debug("Attention, using a statement.setObject");
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCStoreProviderBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCStoreProviderBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCStoreProviderBase.java	(revision 46118)
@@ -0,0 +1,738 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+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.DataTransaction;
+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.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+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.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.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;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler;
+import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCSetProvider;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.AppendOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CanModifyTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.DeletePassThroughOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureProviderByReferenceOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdatePassThroughOperation;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.dynobject.DynField;
+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;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCStoreProviderBase
+        extends AbstractFeatureStoreProvider
+        implements ResourceConsumer, JDBCStoreProvider {
+
+    final static protected Logger LOGGER = LoggerFactory.getLogger(JDBCStoreProviderBase.class);
+
+    public class CountValue implements CalculatedValue<Long> {
+        
+        private Long value = null;
+
+        @Override
+        public void calculate() {
+            try {
+                JDBCStoreParameters params = getParameters();
+                CountOperation count = getOperations().createCount(
+                        getFeatureStore().getDefaultFeatureType(),
+                        getOperations().createTableReference(params),
+                        params.getBaseFilter(),
+                        null
+                );            
+                this.value = (Long) count.perform();
+            } catch (DataException ex) {
+                throw new RuntimeException("Can't calculate count",ex);
+            }
+        }
+        
+        @Override
+        public void reset() {
+            this.value = null;
+        }
+        
+        @Override
+        public Long get() {
+            if( this.value == null ) {
+                this.calculate();
+            }
+            return this.value;
+        }
+    } 
+    
+    public class EnvelopeValue implements CalculatedValue<Envelope> {
+        
+        private Envelope value = null;
+        private boolean needCalculate = true;
+
+        @Override
+        public void calculate() {
+            FeatureStore featureStore;
+            FeatureType featureType;
+            try {
+                featureStore = getFeatureStore();
+                if (featureStore == null) {
+                    return;
+                }
+                featureType = featureStore.getDefaultFeatureType();
+                if (featureType == null) {
+                    return;
+                }
+            } catch (Exception ex) {
+                throw new RuntimeException("Can't calculate envelope.", ex);
+            }
+            try {
+                value = null;
+                String columnName = featureType.getDefaultGeometryAttributeName();
+                if( columnName==null ) {
+                    return;
+                }
+                IProjection crs = getFeatureStore()
+                        .getDefaultFeatureType()
+                        .getDefaultSRS();
+                JDBCStoreParameters params = getParameters();
+                CalculateEnvelopeOfColumnOperation calculateEnvelopeOfColumn = 
+                    getOperations().createCalculateEnvelopeOfColumn(
+                        getFeatureStore().getDefaultFeatureType(),
+                        getOperations().createTableReference(params),
+                        columnName, 
+                        params.getBaseFilter(), 
+                        params.getWorkingArea(), 
+                        crs
+                    );
+                value = (Envelope) calculateEnvelopeOfColumn.perform();
+                
+            } catch(Exception ex) {
+                throw new RuntimeException("Can't calculate envelope.", ex);
+            } finally {
+               needCalculate = false;
+            }
+        }
+        
+        @Override
+        public void reset() {
+            this.value = null;
+            this.needCalculate = true;
+        }
+        
+        @Override
+        public synchronized Envelope get() {
+            if( needCalculate ) {
+                this.calculate();
+            }
+            return this.value;
+        }
+    } 
+        
+    public class AllowWriteValue implements CalculatedValue<Boolean> {
+        
+        private Boolean value = null;
+
+        @Override
+        public void calculate() {
+            try {
+                JDBCStoreParameters params = getParameters();
+                CanModifyTableOperation canModifyTable = 
+                    getOperations().createCanModifyTableOperation(
+                        getOperations().createTableReference(params)
+                    );
+                this.value = (boolean) canModifyTable.perform();
+            } catch(Exception ex) {
+                throw new RuntimeException("Can't determine if allow write.", ex);
+            }
+        }
+        
+        @Override
+        public void reset() {
+            this.value = null;
+        }
+        
+        @Override
+        public Boolean get() {
+            if( this.value == null ) {
+                this.calculate();
+            }
+            return this.value;
+        }
+    } 
+    
+    protected final JDBCHelper helper;
+
+    protected CalculatedValue<Long> count = null;
+    
+    protected CalculatedValue<Envelope> envelope = null;
+
+    protected CalculatedValue<Boolean> allowWrite = null;
+
+    protected AppendOperation appendOperation = null;
+    
+    @SuppressWarnings({"OverridableMethodCallInConstructor", "CallToThreadStartDuringObjectConstruction"})
+    protected JDBCStoreProviderBase(
+            JDBCStoreParameters params,
+            DataStoreProviderServices storeServices,
+            DynObject metadata,
+            JDBCHelper helper
+    ) throws InitializeException {
+        super(params, storeServices, metadata);
+        this.helper = helper;
+        this.initializeFeatureType();
+        try {
+            if( BooleanUtils.isTrue((Boolean) params.getDynValue("precalculateEnvelope"))  ) {
+                FeatureType featureType = this.getStoreServices().getDefaultFeatureType();
+                if( !StringUtils.isEmpty(featureType.getDefaultGeometryAttributeName()) ) {
+                    Thread thread = new Thread(() -> {
+                        LOGGER.trace("Precalculating envelope of '"+getSourceId()+"'.");
+                        getEnvelopeValue().get();
+                    }, "PrecalculateEnvelopeOfDBTable");
+                    thread.start();
+                    Thread.sleep(1);
+                }
+           }
+        } catch(Exception ex) {
+            LOGGER.warn("Probems precalculating the envelope of table '"+this.getSourceId()+"'.", ex);
+        }
+    }
+
+    @Override
+    public JDBCStoreParameters getParameters() {
+        return (JDBCStoreParameters) super.getParameters();
+    }  
+
+    @Override
+    public JDBCHelper getHelper() {
+        return helper;
+    }
+    
+    public OperationsFactory getOperations() {
+        return this.getHelper().getOperations();
+    }
+    
+    @Override
+    public String getProviderName() {
+        return this.getHelper().getProviderName();
+    }
+    
+    @Override
+    public int getOIDType() {
+        return DataTypes.UNKNOWN;
+    }
+
+    @Override
+    public Object createNewOID() {
+        return null;
+    }
+    
+    @Override
+    public boolean allowAutomaticValues() {
+        return this.getHelper().allowAutomaticValues();
+    }
+
+    @Override
+    public boolean allowWrite() {
+        return this.getAllowWriteValue().get();
+    }
+    
+    @Override
+    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);
+    }
+
+    @Override
+    public CalculatedValue<Long> getCountValue() {
+        if( this.count == null ) {
+            this.count = new CountValue();
+        }
+        return this.count;
+    }
+
+    @Override
+    public CalculatedValue<Envelope> getEnvelopeValue() {
+        if( this.envelope == null ) {
+            this.envelope = new EnvelopeValue();
+        }
+        return this.envelope;
+    }
+    
+    @Override
+    public CalculatedValue<Boolean> getAllowWriteValue() {
+        if( this.allowWrite == null ) {
+            this.allowWrite = new AllowWriteValue();
+        }
+        return this.allowWrite;
+    }
+    
+    @Override
+    public long getFeatureCount() throws DataException {
+        return this.getCountValue().get();
+    }
+    
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        ResulSetControler resulSetControler = this.getHelper().getResulSetControler();
+        resulSetControler.pack();
+        return resulSetControler.getOpenCount() == 0;
+    }
+
+    @Override
+    public void close() throws CloseException {
+        JDBCUtils.closeQuietly(this.getHelper());
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        this.getStoreServices().notifyChange(
+                DataStoreNotification.RESOURCE_CHANGED,
+                resource
+        );
+    }
+
+    @Override
+    public DataServerExplorer getExplorer() throws ReadException {
+        DataManager manager = DALLocator.getDataManager();
+        JDBCServerExplorerParameters exParams;
+        JDBCStoreParameters params = getParameters();
+        try {
+            exParams = this.getHelper().createServerExplorerParameters();
+            DynField[] fields = exParams.getDynClass().getDynFields();
+            for (DynField field : fields) {
+                try {
+                    exParams.setDynValue(field.getName(), params.getDynValue(field.getName()));
+                } catch(Exception ex) {
+                    // Ignore
+                }
+            }
+            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(exParams.getExplorerName(), exParams);
+        } catch (Exception e) {
+            throw new ReadException(this.getProviderName(), e);
+        }
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        this.close();
+        this.getHelper().dispose();
+        super.doDispose();
+    }
+
+    @Override
+    public String getSourceId() {
+        try {
+            return this.getHelper().getSourceId(this.getParameters());
+        } catch(Exception ex) {
+            return "unknow";
+        }
+    }
+
+    @Override
+    public String getName() {
+        return this.getParameters().getTable();
+    }
+
+    @Override
+    public String getFullName() {
+        return this.getHelper().getSourceId(this.getParameters());
+    }
+
+    private static class DummyResource extends AbstractResource {
+
+        private final String name;
+
+        DummyResource(String name) throws InitializeException {
+            super((ResourceParameters)null);
+            this.name = name;
+        }
+        
+        @Override
+        public String getName() throws AccessResourceException {
+            return MessageFormat.format("DummyResource({0})",
+				new Object[] { this.name });
+        }
+
+        @Override
+        public Object get() throws AccessResourceException {
+            return null;
+        }
+
+        @Override
+        public boolean isThis(ResourceParameters parameters) throws ResourceException {
+            return true;
+        }
+        
+    }
+    
+    @Override
+    public ResourceProvider getResource() {
+        ResourceProvider r = getHelper().getResource();
+        if( r == null ) {
+            try {
+                r = new DummyResource(this.getName());
+            } catch (InitializeException ex) {
+                LOGGER.warn("Can't create DummyResource",ex);
+                // Do nothing
+            }
+        }
+        return r;
+    }
+
+    @Override
+    public void open() throws OpenException {
+
+    }
+
+    @Override
+    public FeatureSetProvider createSet(
+            FeatureQuery query,
+            FeatureType featureType
+        ) throws DataException {
+        
+        FeatureSetProvider set = new JDBCSetProvider(
+                this,
+                this.getHelper(), 
+                query, 
+                featureType
+        );
+        
+        return set;
+    }
+
+    protected void initializeFeatureType() {
+        EditableFeatureType type = this.getStoreServices().createFeatureType(getName());
+        JDBCStoreParameters params = this.getParameters();
+        List<String> primaryKeys = null;
+        if( params.getPkFields() != null ) {
+            primaryKeys = Arrays.asList(params.getPkFields());
+        }
+        FetchFeatureTypeOperation fetchFeatureType = 
+             this.getOperations().createFetchFeatureType(
+                type,
+                this.getOperations().createTableReference(params),
+                primaryKeys,
+                params.getDefaultGeometryField(),
+                params.getCRS(),
+                params.getGeometryType(),
+                params.getGeometrySubtype()
+            );
+        fetchFeatureType.perform();
+
+        if (!StringUtils.isBlank(params.getDefaultGeometryField())) {
+            if (!params.getDefaultGeometryField().equalsIgnoreCase(type.getDefaultGeometryAttributeName())) {
+                if (type.getAttributeDescriptor(params.getDefaultGeometryField()) != null) {
+                    type.setDefaultGeometryAttributeName(params.getDefaultGeometryField());
+                } else {
+                    type.setDefaultGeometryAttributeName(null);
+                }
+                if (type.getDefaultGeometryAttribute() != null) {
+                    EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) type.getDefaultGeometryAttribute();
+                    attr.setGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
+                }
+            } else {
+                type.setDefaultGeometryAttributeName(null);
+            }
+        }
+        
+        FeatureType defaultType = type.getNotEditableCopy();
+        this.getHelper().setProviderFeatureType(defaultType);
+        List<FeatureType> types = Collections.singletonList(defaultType);
+        this.getStoreServices().setFeatureTypes(types, defaultType);
+    }
+
+    @Override
+    protected FeatureProvider internalGetFeatureProviderByReference(
+            FeatureReferenceProviderServices reference, 
+            FeatureType featureType
+        ) throws DataException {
+        JDBCStoreParameters params = this.getParameters();
+        FetchFeatureProviderByReferenceOperation fetchFeatureProviderByReference = 
+            this.getOperations().createFetchFeatureProviderByReference(
+                reference, 
+                featureType, 
+                this.getOperations().createTableReference(params)
+            );
+        FeatureProvider feature = (FeatureProvider) fetchFeatureProviderByReference.perform();
+        return feature;
+    }
+    
+    @Override
+    public Envelope getEnvelope() throws DataException {
+        return this.getEnvelopeValue().get();
+    }
+
+    @Override
+    public void performChanges(Iterator deleteds, Iterator inserteds,
+                    Iterator updateds, Iterator featureTypesChanged)
+                    throws DataException {
+
+        FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+        JDBCStoreParameters params = this.getParameters();
+        PerformChangesOperation performChanges = this.getOperations().createPerformChanges(
+                this.getOperations().createTableReference(params),
+                type, 
+                deleteds, 
+                inserteds, 
+                updateds, 
+                featureTypesChanged
+        );
+        performChanges.perform();
+        if( performChanges.isTypeChanged() ) {
+            // Get rules before initializing feature type
+            FeatureRules saved_rules = getFeatureStore().getDefaultFeatureType().getRules();
+
+             // This initialization loses the feature type rules
+            this.initializeFeatureType();
+
+            // Get new feature type, clear rules and add the ones saved previously
+            FeatureType featureType = getFeatureStore().getDefaultFeatureType();
+            FeatureRules rules = featureType.getRules();
+            rules.clear();
+            for (FeatureRule rule : saved_rules) {
+                rules.add(rule);
+            }
+        }
+        this.getCountValue().reset();
+        this.getEnvelopeValue().reset();
+    }    
+    
+    @Override
+    public boolean supportsAppendMode() {
+        return true;
+    }
+
+    protected AppendOperation createAppendOperation() throws DataException {
+        FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+        JDBCStoreParameters params = this.getParameters();
+        AppendOperation theAppendOperation = this.getOperations().createAppend(
+                this.getOperations().createTableReference(params),
+                type 
+        );
+        return theAppendOperation;
+    }
+    
+    @Override
+    public void endAppend() throws DataException {
+        this.appendOperation.end();
+    }
+
+    @Override
+    public void abortAppend() throws DataException {
+        this.appendOperation.abort();
+    }
+    
+    @Override
+    public void beginAppend() throws DataException {
+        if( this.appendOperation == null ) {
+            this.appendOperation = createAppendOperation();
+        }
+        this.appendOperation.begin();
+    }
+
+    @Override
+    public void append(final FeatureProvider featureProvider) throws DataException {
+        this.appendOperation.append(featureProvider);
+    }    
+    
+    @Override
+    public boolean canWriteGeometry(int geometryType, int geometrySubtype)
+            throws DataException {
+        return this.getHelper().canWriteGeometry(geometryType,geometrySubtype);
+    }
+
+    @Override
+    public boolean supportsPassThroughMode() {
+        return true;
+    }
+
+    @Override
+    public void passThroughInsert(FeatureProvider featureProvider) throws DataException {
+        FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+        JDBCStoreParameters params = this.getParameters();
+        PerformChangesOperation performChanges = this.getOperations().createPerformChanges(
+                this.getOperations().createTableReference(params),
+                type, 
+                Collections.emptyIterator(), 
+                Collections.singletonList(featureProvider).iterator(),
+                Collections.emptyIterator(), 
+                Collections.emptyIterator()
+        );
+        performChanges.perform();
+    }
+
+    @Override
+    public void passThroughUpdate(FeatureProvider featureProvider) throws DataException {
+        FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+        JDBCStoreParameters params = this.getParameters();
+        PerformChangesOperation performChanges = this.getOperations().createPerformChanges(
+                this.getOperations().createTableReference(params),
+                type, 
+                Collections.emptyIterator(), 
+                Collections.emptyIterator(), 
+                Collections.singletonList(featureProvider).iterator(),
+                Collections.emptyIterator()
+        );
+        performChanges.perform();
+    }
+    
+    @Override
+    public void passThroughUpdate(Object[] parameters, Expression filter){
+        JDBCStoreParameters params = this.getParameters();
+        UpdatePassThroughOperation operation = this.getOperations().createUpdatePassThroughOperation(
+                this.getOperations().createTableReference(params),
+                parameters,
+                filter
+        );
+        operation.perform();
+    }
+
+    @Override
+    public void passThroughDelete(FeatureReferenceProviderServices featureReference) throws DataException {
+        FeatureType type = this.getFeatureStore().getDefaultFeatureType();
+        JDBCStoreParameters params = this.getParameters();
+        PerformChangesOperation performChanges = this.getOperations().createPerformChanges(
+                this.getOperations().createTableReference(params),
+                type, 
+                Collections.singletonList(featureReference).iterator(),
+                Collections.emptyIterator(), 
+                Collections.emptyIterator(), 
+                Collections.emptyIterator()
+        );
+        performChanges.perform();
+    }
+    
+    public void passThroughDelete(Expression expression) throws DataException {
+        JDBCStoreParameters params = this.getParameters();
+        DeletePassThroughOperation operation = this.getOperations().createDeletePassThroughOperation(
+                this.getOperations().createTableReference(params),
+                expression
+        );
+        operation.perform();
+    }
+
+    @Override
+    public void setTransaction(DataTransactionServices transaction) {
+        this.helper.setTransaction(transaction);
+    }
+    
+    @Override
+    public String toString() {
+        try {
+            return String.format("%s %x %s", this.getClass().getSimpleName(), this.hashCode(), this.helper.toString());
+        } catch (Exception e) {
+            return super.toString();
+        }
+    }
+
+    @Override
+    public void refresh() throws OpenException {
+//        // Force to recalculare count, envelope and allowWrite
+//        this.count = null;
+//        this.envelope = null;
+//        this.allowWrite = null;
+//        
+//        if( this.helper.getResulSetControler().getOpenCount()>0 ) {
+//            // Has ResultSetEntry open. Oh!!!!
+//            this.helper.getResulSetControler().closeAll();
+//        }
+//        if( this.appendOperation!=null ) {
+//            // Has and append operation in progress, Oh!!
+//            this.appendOperation.abort();
+//            this.appendOperation = null;
+//        }
+        super.refresh(); 
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnection.java	(revision 46118)
@@ -0,0 +1,326 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FakeConnection implements Connection {
+    
+    public FakeConnection() {
+        
+    }
+
+    @Override
+    public Statement createStatement() throws SQLException {
+        return new FakeStatement(this);
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public CallableStatement prepareCall(String sql) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public String nativeSQL(String sql) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setAutoCommit(boolean autoCommit) throws SQLException {
+        
+    }
+
+    @Override
+    public boolean getAutoCommit() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void commit() throws SQLException {
+        
+    }
+
+    @Override
+    public void rollback() throws SQLException {
+        
+    }
+
+    @Override
+    public void close() throws SQLException {
+        
+    }
+
+    @Override
+    public boolean isClosed() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public DatabaseMetaData getMetaData() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setReadOnly(boolean readOnly) throws SQLException {
+        
+    }
+
+    @Override
+    public boolean isReadOnly() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void setCatalog(String catalog) throws SQLException {
+        
+    }
+
+    @Override
+    public String getCatalog() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setTransactionIsolation(int level) throws SQLException {
+        
+    }
+
+    @Override
+    public int getTransactionIsolation() throws SQLException {
+        return Connection.TRANSACTION_SERIALIZABLE;
+    }
+
+    @Override
+    public SQLWarning getWarnings() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void clearWarnings() throws SQLException {
+        
+    }
+
+    @Override
+    public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
+        return new FakeStatement(this);
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Map<String, Class<?>> getTypeMap() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
+        
+    }
+
+    @Override
+    public void setHoldability(int holdability) throws SQLException {
+        
+    }
+
+    @Override
+    public int getHoldability() throws SQLException {
+        return ResultSet.CLOSE_CURSORS_AT_COMMIT;
+    }
+
+    @Override
+    public Savepoint setSavepoint() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Savepoint setSavepoint(String name) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void rollback(Savepoint savepoint) throws SQLException {
+        
+    }
+
+    @Override
+    public void releaseSavepoint(Savepoint savepoint) throws SQLException {
+        
+    }
+
+    @Override
+    public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+        return new FakeStatement(this);
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
+        return new FakePreparedStatement(this);
+    }
+
+    @Override
+    public Clob createClob() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Blob createBlob() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public NClob createNClob() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public SQLXML createSQLXML() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public boolean isValid(int timeout) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void setClientInfo(String name, String value) throws SQLClientInfoException {
+        
+    }
+
+    @Override
+    public void setClientInfo(Properties properties) throws SQLClientInfoException {
+        
+    }
+
+    @Override
+    public String getClientInfo(String name) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Properties getClientInfo() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setSchema(String schema) throws SQLException {
+        
+    }
+
+    @Override
+    public String getSchema() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void abort(Executor executor) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {
+        
+    }
+
+    @Override
+    public int getNetworkTimeout() throws SQLException {
+        return 0;
+    }
+
+    @Override
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Identifier.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Identifier.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Identifier.java	(revision 46118)
@@ -0,0 +1,68 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.expressionbuilder.formatters;
+
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.SQLBuilder;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$IDENTIFIER;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class $Identifier implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public $Identifier(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) { 
+            return StringUtils.equalsIgnoreCase(FUNCTION_$IDENTIFIER, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value) {
+        SymbolTable symbolTable = (SymbolTable) value.getProperty(PROP_SYMBOLTABLE);
+        Value p1 = ((ExpressionBuilder.Function)value).parameters().get(0);
+        Object x = ExpressionUtils.evaluate(symbolTable, p1.toString());
+        return this.sqlbuilder.expression().variable(Objects.toString(x, "")).toString(this.formatter);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Constant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Constant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/$Constant.java	(revision 46118)
@@ -0,0 +1,106 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.expressionbuilder.formatters;
+
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.SQLBuilder;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$CONSTANT;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.geom.Geometry;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class $Constant implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public $Constant(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) { 
+            return StringUtils.equalsIgnoreCase(FUNCTION_$CONSTANT, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value) {
+        return resolve(this.sqlbuilder, this.formatter, value);
+    }
+    
+    public static boolean isConstant(Value value) {
+        if( value instanceof ExpressionBuilder.Constant) {
+            return true;
+        } 
+        return value instanceof ExpressionBuilder.Function && 
+               StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function)value).name(),FUNCTION_$CONSTANT);
+    }
+    
+    
+    public static String resolve(SQLBuilder sqlbuilder, Formatter<Value> formatter, Value value) {
+		GeometryExpressionBuilder builder = sqlbuilder.expression();
+        if( value instanceof ExpressionBuilder.Constant) {
+            Object x = ((ExpressionBuilder.Constant)value).value();
+            return builder.constant(x).toString(formatter);
+        } else if( value instanceof ExpressionBuilder.Function && 
+                StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function)value).name(),FUNCTION_$CONSTANT) ) {
+            SymbolTable symbolTable = (SymbolTable) value.getProperty(PROP_SYMBOLTABLE);
+            Object x = ExpressionUtils.evaluate(symbolTable, value.toString());
+			
+			if( x instanceof Geometry && builder instanceof GeometryExpressionBuilder) {
+				GeometryExpressionBuilder gbuilder = (GeometryExpressionBuilder) builder;
+				Geometry geom = (Geometry) x;
+				String hexwkb = geom.convertToHexWKBQuietly();
+				
+				Function v = gbuilder.ST_GeomFromWKB(
+					gbuilder.decode(
+						gbuilder.constant(hexwkb),
+						gbuilder.constant("hex")
+					),
+					gbuilder.constant(
+						sqlbuilder.srs_id(geom.getProjection())
+					)
+				);
+				return v.toString(formatter);
+			}
+            return builder.constant(x).toString(formatter);
+        } 
+        throw new RuntimeException("Expected constant value or $$CONSTANT function ("+Objects.toString(value)+").");
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToDouble.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToDouble.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToDouble.java	(revision 46118)
@@ -0,0 +1,50 @@
+package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ToDouble implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public ToDouble(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if (value instanceof ExpressionBuilder.Function) {
+                return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_TODOUBLE, ((Function) value).name());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+            List<Value> parameters = ((Function) function).parameters();
+            String p1 = parameters.get(0).toString(formatter);
+            
+            String r = MessageFormat.format(
+                    "CAST ( {0} AS DECIMAL )",
+                    p1
+            );
+            // En oracle el format seria algo como esto:
+            //(case when lower({0}) = 't' then 1 when lower({0}) = 'f' then 0 else cast({0} as decimal) end)
+            return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Exists.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Exists.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Exists.java	(revision 46118)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.expressionbuilder.formatters;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Exists implements Formatter<Value> {
+    
+    private final Formatter<Value> formatter;
+    
+    public Exists(Formatter<Value> formatter) {
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(FUNCTION_EXISTS, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        return "EXISTS("+exp.toString(formatter)+")";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToInteger.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToInteger.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToInteger.java	(revision 46118)
@@ -0,0 +1,50 @@
+package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ToInteger implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public ToInteger(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if (value instanceof ExpressionBuilder.Function) {
+                return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_TOINTEGER, ((Function) value).name());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+            List<Value> parameters = ((Function) function).parameters();
+            String p1 = parameters.get(0).toString(formatter);
+            
+            String r = MessageFormat.format(
+                    "CAST ( {0} AS INTEGER )",
+                    p1
+            );
+            // En oracle el format seria algo como esto:
+            //(case when lower({0}) = 't' then 1 when lower({0}) = 'f' then 0 else cast({0} as int) end)
+            return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToLong.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToLong.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ToLong.java	(revision 46118)
@@ -0,0 +1,50 @@
+package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ToLong implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public ToLong(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if (value instanceof ExpressionBuilder.Function) {
+                return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_TOLONG, ((Function) value).name());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+            List<Value> parameters = ((Function) function).parameters();
+            String p1 = parameters.get(0).toString(formatter);
+            
+            String r = MessageFormat.format(
+                    "CAST ( {0} AS BIGINT )",
+                    p1
+            );
+            // En oracle el format seria algo como esto:
+            //(case when lower({0}) = 't' then 1 when lower({0}) = 'f' then 0 else cast({0} as number) end)
+            return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ComputedAttribute.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ComputedAttribute.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/ComputedAttribute.java	(revision 46118)
@@ -0,0 +1,123 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.expressionbuilder.formatters;
+
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_JDBCHELPER;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_QUERY;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ComputedAttribute implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public ComputedAttribute(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Variable) { 
+            FeatureType featureType = (FeatureType) value.getProperty(PROP_FEATURE_TYPE);
+            if( featureType==null ) {
+                return false;
+            }
+            JDBCHelper jdbcHelper = (JDBCHelper) value.getProperty(PROP_JDBCHELPER);
+            if( jdbcHelper==null ) {
+                return false;
+            }
+            ExpressionBuilder.Variable variable = (ExpressionBuilder.Variable) value;
+			FeatureAttributeDescriptor attr = featureType.getAttributeDescriptor(variable.name());
+			if (attr == null) {
+				FeatureQuery query = (FeatureQuery) value.getProperty(PROP_QUERY);
+				if (query == null) {
+					return false;
+				}
+				FeatureExtraColumns extraColumn = query.getExtraColumn();
+				if (extraColumn == null) {
+					return false;
+				}
+				attr = extraColumn.get(variable.name());
+				if (attr == null ) {
+					return false;
+				}
+			}
+
+            if (!attr.isComputed()) {
+                return false;
+            }
+            
+            FeatureAttributeEmulator emulator = attr.getFeatureAttributeEmulator();
+            if( !(emulator instanceof FeatureAttributeEmulatorExpression) ) {
+                return false;
+            }
+            Expression expr = ((FeatureAttributeEmulatorExpression)emulator).getExpression();
+            return jdbcHelper.supportExpression(featureType, expr.getPhrase());
+        }
+        return false;
+    }
+	
+	@Override
+    public String format(Value value) {
+        Value valueExpr = this.expandedValue(value);
+        return "("+ this.formatter.format(valueExpr)+")";
+	}
+
+    
+    public Value expandedValue(Value value) {
+        FeatureType featureType = (FeatureType) value.getProperty(PROP_FEATURE_TYPE);
+        ExpressionBuilder.Variable variable = (ExpressionBuilder.Variable) value;
+        FeatureAttributeDescriptor attr = featureType.getAttributeDescriptor(variable.name());
+        if (attr == null) {
+            FeatureQuery query = (FeatureQuery) value.getProperty(PROP_QUERY);
+            attr = query.getExtraColumn().get(variable.name());
+        }
+        FeatureAttributeEmulator emulator = attr.getFeatureAttributeEmulator();
+        Expression expr = ((FeatureAttributeEmulatorExpression)emulator).getExpression();
+        Code code = expr.getCode();
+        GeometryExpressionBuilder builder = this.sqlbuilder.expression();
+        Value valueExpr = code.toValue(builder);
+        return valueExpr;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Iff.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Iff.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/expressionbuilder/formatters/Iff.java	(revision 46118)
@@ -0,0 +1,53 @@
+package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_IIF;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Iff implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public Iff(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if (value instanceof ExpressionBuilder.Function) {
+                return StringUtils.equalsIgnoreCase(FUNCTION_IIF, ((Function) value).name());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+            List<Value> parameters = ((Function) function).parameters();
+            String p1 = parameters.get(0).toString(formatter);
+            String p2 = parameters.get(1).toString(formatter);
+            String p3 = parameters.get(2).toString(formatter);
+            
+            String r = MessageFormat.format(
+                    "CASEWHEN ( {0} , {1} , {2} )",
+                    p1,
+                    p3,
+                    p2
+            );
+            return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeStatement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeStatement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeStatement.java	(revision 46118)
@@ -0,0 +1,264 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FakeStatement implements Statement {
+
+    private final Connection connection;
+
+    public FakeStatement(Connection connection) {
+        this.connection = connection;
+    }
+    
+    @Override
+    public ResultSet executeQuery(String sql) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public int executeUpdate(String sql) throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void close() throws SQLException {
+        
+    }
+
+    @Override
+    public int getMaxFieldSize() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void setMaxFieldSize(int max) throws SQLException {
+        
+    }
+
+    @Override
+    public int getMaxRows() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void setMaxRows(int max) throws SQLException {
+        
+    }
+
+    @Override
+    public void setEscapeProcessing(boolean enable) throws SQLException {
+        
+    }
+
+    @Override
+    public int getQueryTimeout() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void setQueryTimeout(int seconds) throws SQLException {
+        
+    }
+
+    @Override
+    public void cancel() throws SQLException {
+        
+    }
+
+    @Override
+    public SQLWarning getWarnings() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void clearWarnings() throws SQLException {
+        
+    }
+
+    @Override
+    public void setCursorName(String name) throws SQLException {
+        
+    }
+
+    @Override
+    public boolean execute(String sql) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public ResultSet getResultSet() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public int getUpdateCount() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public boolean getMoreResults() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void setFetchDirection(int direction) throws SQLException {
+        
+    }
+
+    @Override
+    public int getFetchDirection() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void setFetchSize(int rows) throws SQLException {
+        
+    }
+
+    @Override
+    public int getFetchSize() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public int getResultSetConcurrency() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public int getResultSetType() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public void addBatch(String sql) throws SQLException {
+        
+    }
+
+    @Override
+    public void clearBatch() throws SQLException {
+        
+    }
+
+    @Override
+    public int[] executeBatch() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public Connection getConnection() throws SQLException {
+        return this.connection;
+    }
+
+    @Override
+    public boolean getMoreResults(int current) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public ResultSet getGeneratedKeys() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public int executeUpdate(String sql, String[] columnNames) throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public boolean execute(String sql, int[] columnIndexes) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public boolean execute(String sql, String[] columnNames) throws SQLException {
+        return false;
+    }
+
+    @Override
+    public int getResultSetHoldability() throws SQLException {
+        return -1;
+    }
+
+    @Override
+    public boolean isClosed() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void setPoolable(boolean poolable) throws SQLException {
+        
+    }
+
+    @Override
+    public boolean isPoolable() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public void closeOnCompletion() throws SQLException {
+        
+    }
+
+    @Override
+    public boolean isCloseOnCompletion() throws SQLException {
+        return false;
+    }
+
+    @Override
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+        return null;
+    }
+
+    @Override
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCHelperBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCHelperBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCHelperBase.java	(revision 46118)
@@ -0,0 +1,984 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.io.File;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.MutableBoolean;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.expressionevaluator.SymbolTable;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.ForeingKey;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCLibrary;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCResource;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCCantFetchValueException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.fmap.dal.store.jdbc2.impl.ResulSetControlerBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.OperationsFactoryBase;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.tools.dispose.impl.AbstractDisposable;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.exception.NotYetImplemented;
+import org.gvsig.tools.visitor.FilteredVisitable;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$CONSTANT;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$IDENTIFIER;
+import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters.ComputedAttribute;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCHelperBase extends AbstractDisposable implements ResourceConsumer, JDBCHelper {
+
+  private static final boolean ALLOW_AUTOMATIC_VALUES = true;
+  private static final String QUOTE_FOR_USE_IN_IDENTIFIERS = "\"";
+  private static final String QUOTE_FOR_USE_IN_STRINGS = "'";
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(JDBCHelperBase.class);
+
+  private ResulSetControler resulSetControler = null;
+
+  // Quien ha creado este helper.
+  // Se le reenviaran las notificaciones del recurso asociado al helper.
+  private ResourceConsumer helperClient = null;
+
+  private GeometryManager geometryManager = null;
+
+  private JDBCConnectionParameters connectionParameters;
+
+  private JDBCStoreProvider store;
+
+  protected OperationsFactory operationsFactory = null;
+
+  protected SRSSolver srssolver;
+  
+  protected FeatureType providerFeatureType = null;
+  
+  protected DataTransactionServices transaction;
+
+  public JDBCHelperBase(JDBCConnectionParameters connectionParameters) {
+        if (connectionParameters == null) {
+            throw new IllegalArgumentException("Connection parameters can't be null.");
+        }
+        this.connectionParameters = connectionParameters;
+
+        // If a particular treatment is required to convert SRS to the 
+        // BBDD format, overwrite JDBCSRSsBase and use it instead of JDBCSRSsDumb.
+        this.srssolver = new SRSSolverDumb(this);
+    }
+
+  protected void initialize(
+          ResourceConsumer helperClient,
+          JDBCConnectionParameters connectionParameters,
+          JDBCStoreProvider store
+  ) {
+    this.store = store;
+    this.helperClient = helperClient;
+    this.connectionParameters = connectionParameters;
+    initializeResource(connectionParameters);
+  }
+
+  protected String getResourceType() {
+    return JDBCResource.NAME;
+  }
+
+  @Override
+  public String getProviderName() {
+    return JDBCLibrary.NAME;
+  }
+
+  @Override
+  public GeometrySupportType getGeometrySupportType() {
+    // El proveedor generico de JDBC guadara las geoemtrias como WKT
+    return GeometrySupportType.WKT;
+  }
+  
+    /**
+     * @return the providerFeatureType
+     */
+  @Override
+    public FeatureType getProviderFeatureType() {
+        return providerFeatureType;
+    }
+
+    /**
+     * @param providerFeatureType the providerFeatureType to set
+     */
+  @Override
+    public void setProviderFeatureType(FeatureType providerFeatureType) {
+        this.providerFeatureType = providerFeatureType;
+    }
+
+
+  @Override
+  public boolean hasSpatialFunctions() {
+    // Por defecto el proveedor generico de JDBC asume que la BBDD no 
+    // tiene soporte para funciones espaciales.
+    return false;
+  }
+
+  @Override
+  public boolean allowNestedOperations() {
+    return false;
+  }
+
+  @Override
+  public boolean canWriteGeometry(int geometryType, int geometrySubtype) {
+    // Como va a guardar las geometrias en WKT, puede escribirlas todas.
+    return true;
+  }
+
+  @Override
+  public JDBCSQLBuilderBase createSQLBuilder() {
+    return new JDBCSQLBuilderBase(this);
+  }
+
+  @Override
+  public String getQuoteForIdentifiers() {
+    return QUOTE_FOR_USE_IN_IDENTIFIERS;
+  }
+
+  @Override
+  public boolean allowAutomaticValues() {
+    return ALLOW_AUTOMATIC_VALUES;
+  }
+
+  @Override
+  public boolean supportOffsetInSelect() {
+    // Asumimos que la BBDD soporta OFFSET
+    return true;
+  }
+
+  @Override
+  public String getQuoteForStrings() {
+    return QUOTE_FOR_USE_IN_STRINGS;
+  }
+
+  protected boolean supportCaller(Code.Callable caller) {
+    if (StringUtils.equalsIgnoreCase(caller.name(), "FOREING_VALUE")) {
+      return true;
+    }
+    Function function = caller.function();
+    if (function == null) {
+      return false;
+    }
+    if (!function.isSQLCompatible()) {
+      return false;
+    }
+    if (!this.hasSpatialFunctions()) {
+      if (StringUtils.equalsIgnoreCase(function.group(), Function.GROUP_OGC)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @Override
+  @SuppressWarnings("Convert2Lambda")
+  public boolean supportFilter(final FeatureType type, Evaluator filter) {
+    if (filter == null) {
+      // No hay que filtrar nada, asi que se p�ede.
+      return true;
+    }
+    String sql = filter.getSQL();
+    if (StringUtils.isEmpty(sql)) {
+      // Hay un filtro, pero la SQL es null, con lo que no podemos
+      // filtrar por el.
+      return false;
+    }
+    return this.supportExpression(type, sql);
+  }
+  
+    @Override
+    @SuppressWarnings("Convert2Lambda")
+    public boolean supportExpression(final FeatureType type, String sql) {
+        // La expression no es valida si:
+        // - Hay una subquery especificada en los parametros 
+        // - Si la sql es null.
+        // - Si se esta usando alguna funcion no-sql en el getSQL
+        // - Si se esta invocando a metodos de un objeto
+        // - Si se estan usando funciones OGC y no soportamos funciones espaciales
+        // - Si se esta usando algun campo calculado en la expresion de filtro.
+        // 
+        // Un proveedor especifico podria sobreescribir el metodo,
+        // para hilar mas fino al comprobar si soporta el filtro o no.
+        //
+
+        if (StringUtils.isEmpty(sql)) {
+            return false;
+        }
+
+        if (this.useSubquery()) {
+            // Se esta usando una subquery en los parametros de acceso a la
+            // BBDD, asi que no podemos filtrar.
+            return false;
+        }
+
+        // Ahora vamos a comprobar que las funciones que se usan son 
+        // compatibles sql, y que no se usan funciones OGC si el 
+        // proveedor dice que no soporta funciones espaciales.
+        // Tambien comprobaremos que el filtro no usa ningun campo calculado.
+        final MutableBoolean isCompatible = new MutableBoolean(true);
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        Code code = manager.compile(sql);
+        SymbolTable symbolTable = manager.createSymbolTable();
+        code.link(symbolTable);
+        try {
+            code.accept(new Visitor() {
+                @Override
+                public void visit(Object code_obj) throws VisitCanceledException, BaseException {
+                    Code code1 = (Code) code_obj;
+                    switch (code1.code()) {
+                        case Code.CALLABLE:
+                            Code.Callable caller = (Code.Callable) code1;
+                            if (!supportCaller(caller)) {
+                                isCompatible.setValue(false);
+                                throw new VisitCanceledException();
+                            }
+                            break;
+                        case Code.METHOD:
+                            isCompatible.setValue(false);
+                            throw new VisitCanceledException();
+                        case Code.IDENTIFIER:
+                            Code.Identifier identifier = (Code.Identifier) code1;
+                            if (type != null) {
+                                FeatureAttributeDescriptor attrdesc = type.getAttributeDescriptor(identifier.name());
+                                if (attrdesc != null) {
+                                    if (attrdesc.isComputed()) {
+                                        FeatureAttributeEmulator emulator = attrdesc.getFeatureAttributeEmulator();
+                                        if (!(emulator instanceof FeatureAttributeEmulatorExpression)) {
+                                            isCompatible.setValue(false);
+                                            throw new VisitCanceledException();
+                                        }
+                                        Expression expr = ((FeatureAttributeEmulatorExpression) emulator).getExpression();
+                                        if (!supportExpression(type, expr.getPhrase())) {
+                                            isCompatible.setValue(false);
+                                            throw new VisitCanceledException();
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                    }
+                } 
+            }, new Predicate<FilteredVisitable>() {
+                @Override
+                public boolean test(FilteredVisitable code0) {
+                    if (code0 instanceof Code.Callable) {
+                        String name = ((Code.Callable) code0).name();
+                        return StringUtils.equalsIgnoreCase(name, FUNCTION_$CONSTANT)
+                                || StringUtils.equalsIgnoreCase(name, FUNCTION_$IDENTIFIER);
+                    }
+                    return false;
+                }
+            });
+
+        } catch (VisitCanceledException ex) {
+            // Do nothing
+        } catch (Exception ex) {
+            LOGGER.warn("Can't calculate if is SQL compatible.", ex);
+        }
+
+        return isCompatible.booleanValue();
+    }
+
+  @Override
+  public boolean supportOrder(FeatureType type, FeatureQueryOrder order) {
+    if (this.useSubquery()) {
+      return false;
+    }
+    if (order == null) {
+      return true;
+    }
+    for (FeatureQueryOrder.FeatureQueryOrderMember member : order.members()) {
+      if (member.hasEvaluator()) {
+        if (!this.supportFilter(type, member.getEvaluator())) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public OperationsFactory getOperations() {
+    if (this.operationsFactory == null && !isClosed()) {
+      this.operationsFactory = new OperationsFactoryBase(this);
+    }
+    return operationsFactory;
+  }
+
+  protected void initializeResource(JDBCConnectionParameters params) {
+//        Object[] resourceParams = new Object[]{
+//            params.getUrl(),
+//            params.getHost(),
+//            params.getPort(),
+//            params.getDBName(),
+//            params.getUser(),
+//            params.getPassword(),
+//            params.getJDBCDriverClassName()
+//        };
+//
+//        try {
+//            ResourceManagerProviderServices manager
+//                    = (ResourceManagerProviderServices) DALLocator.getResourceManager();
+//            JDBCResource resource = (JDBCResource) manager.createAddResource(
+//                    this.getResourceType(),
+//                    resourceParams
+//            );
+//            this.resource = resource;
+//            this.resource.addConsumer(this);
+//        } catch (InitializeException ex) {
+//            logger.trace("Can't initialize resource (" + ArrayUtils.toString(resourceParams) + ").", ex);
+//            throw new RuntimeException("Can't initialize resource (" + ArrayUtils.toString(resourceParams) + ").", ex);
+//        }
+
+  }
+
+  @Override
+  public String getSourceId() {
+    return this.store.getSourceId();
+  }
+
+  @Override
+  public JDBCResource getResource() {
+    return null;
+//        return this.resource;
+  }
+
+  @Override
+  public Connection getConnection() throws AccessResourceException {
+    throw new NotYetImplemented();
+  }
+
+  @Override
+  public Connection getConnectionWritable() throws AccessResourceException {
+    return this.getConnection();
+  }
+
+  @Override
+  public String getConnectionURL() {
+    return null;
+  }
+
+  @Override
+  public JDBCConnectionParameters getConnectionParameters() {
+    return connectionParameters;
+  }
+
+  @Override
+  public void closeConnection(Connection connection) {
+      JDBCUtils.close(connection);
+  }
+
+  @Override
+  public void closeConnectionQuietly(Connection connection) {
+      JDBCUtils.closeQuietly(connection);
+  }
+
+  @Override
+  protected void doDispose() throws BaseException {
+    JDBCUtils.closeQuietly(this);
+  }
+
+  @Override
+  public void close() throws Exception {
+    JDBCUtils.closeQuietly(this.resulSetControler);
+    this.resulSetControler = null;
+    this.operationsFactory = null;
+    this.srssolver = null;
+    this.connectionParameters = null;
+    this.helperClient = null;
+    this.geometryManager = null;
+    this.providerFeatureType = null;
+    this.store = null;
+  }
+  
+  public boolean isClosed() {
+      return this.srssolver == null;
+  }
+
+  @Override
+  public boolean closeResourceRequested(ResourceProvider resource) {
+    return this.helperClient.closeResourceRequested(resource);
+  }
+
+  @Override
+  public void resourceChanged(ResourceProvider resource) {
+    this.helperClient.resourceChanged(resource);
+  }
+
+  @Override
+  public GeometryManager getGeometryManager() {
+    if (this.geometryManager == null) {
+      this.geometryManager = GeometryLocator.getGeometryManager();
+    }
+    return this.geometryManager;
+  }
+
+  @Override
+  public ResulSetControler getResulSetControler() {
+    if (this.resulSetControler == null) {
+      this.resulSetControler = new ResulSetControlerBase(this);
+    }
+    return this.resulSetControler;
+  }
+
+  @Override
+  public void fetchFeature(FeatureProvider feature, ResultSetEntry rs) throws DataException {
+    fetchFeature(feature, rs.get(), rs.getColumns(), rs.getExtraValueNames());
+  }
+
+  @Override
+  public void fetchFeature(FeatureProvider feature, ResultSet rs, FeatureAttributeDescriptor[] columns, String[] extraValueNames) throws DataException {
+    Object value;
+    try {
+      int rsIndex = 1;
+      for (FeatureAttributeDescriptor column : columns) {
+        switch (column.getType()) {
+          case DataTypes.GEOMETRY:
+            value = this.getGeometryFromColumn(rs, rsIndex++);
+            break;
+          default:
+            value = rs.getObject(rsIndex++);
+            if (value instanceof Blob) {
+              Blob blob = (Blob) value;
+              value = blob.getBytes(1, (int) blob.length());
+              blob.free();
+            } else if(value instanceof Clob) {
+              Clob clob = (Clob) value;
+              value = new String(IOUtils.toCharArray(clob.getCharacterStream()));
+              clob.free();
+          }
+        }
+        feature.set(column.getIndex(), value);
+      }
+      if (ArrayUtils.isNotEmpty(extraValueNames)) {
+        feature.setExtraValueNames(extraValueNames);
+        for (int index = 0; index < extraValueNames.length; index++) {
+          value = rs.getObject(rsIndex++);
+          if (value instanceof Blob) {
+            Blob blob = (Blob) value;
+            value = blob.getBytes(0, (int) blob.length());
+            blob.free();
+          }
+          feature.setExtraValue(index, value);
+        }
+      }
+    } catch (Exception ex) {
+      throw new JDBCCantFetchValueException(ex);
+    }
+  }
+
+  @Override
+  public Geometry getGeometryFromColumn(ResultSetEntry rs, int index) throws DataException {
+    return getGeometryFromColumn(rs.get(), index);
+  }
+
+  @Override
+  public Geometry getGeometryFromColumn(ResultSet rs, int index) throws DataException {
+    try {
+      Object value;
+      switch (this.getGeometrySupportType()) {
+        case NATIVE:
+        case WKB:
+          value = rs.getBytes(index);
+          if (value == null) {
+            return null;
+          }
+          return this.getGeometryManager().createFrom((byte[]) value);
+
+        case EWKB:
+          value = rs.getBytes(index);
+          if (value == null) {
+            return null;
+          }
+          return this.getGeometryManager().createFrom((byte[]) value);
+        case WKT:
+        default:
+          value = rs.getString(index);
+          if (value == null) {
+            return null;
+          }
+          return this.getGeometryManager().createFrom((String) value);
+
+      }
+    } catch (Exception ex) {
+      throw new JDBCCantFetchValueException(ex);
+    }
+  }
+
+  @Override
+  public FeatureProvider createFeature(FeatureType featureType) throws DataException {
+    return this.store.getStoreServices().createDefaultFeatureProvider(featureType);
+  }
+
+  @Override
+  public boolean useSubquery() {
+    if (this.store == null) {
+      return false;
+    }
+    return !StringUtils.isEmpty(this.store.getParameters().getSQL());
+  }
+
+  @Override
+  public SRSSolver getSRSSolver() {
+    return this.srssolver;
+  }
+
+  @Override
+  public JDBCStoreProvider createProvider(
+          JDBCStoreParameters parameters,
+          DataStoreProviderServices providerServices
+  ) throws InitializeException {
+
+    JDBCStoreProviderBase theStore = new JDBCStoreProviderBase(
+            parameters,
+            providerServices,
+            DBHelper.newMetadataContainer(JDBCLibrary.NAME),
+            this
+    );
+    this.initialize(theStore, parameters, theStore);
+    return theStore;
+  }
+
+  @Override
+  public JDBCServerExplorer createServerExplorer(
+          JDBCServerExplorerParameters parameters,
+          DataServerExplorerProviderServices providerServices
+  ) throws InitializeException {
+
+    JDBCServerExplorer explorer = new JDBCServerExplorerBase(
+            parameters,
+            providerServices,
+            this
+    );
+    this.initialize(explorer, parameters, null);
+    return explorer;
+  }
+
+  @Override
+  public JDBCNewStoreParameters createNewStoreParameters() {
+    return new JDBCNewStoreParameters();
+  }
+
+  @Override
+  public JDBCStoreParameters createOpenStoreParameters() {
+    return new JDBCStoreParameters();
+  }
+  
+  @Override
+  public JDBCStoreParameters createOpenStoreParameters(JDBCServerExplorerParameters parameters) {
+    JDBCStoreParameters params = this.createOpenStoreParameters();
+    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());
+    if( parameters instanceof FilesystemStoreParameters ) {
+        File f = ((FilesystemStoreParameters) parameters).getFile();
+        ((FilesystemStoreParameters) params).setFile(f);
+    }
+    return params;
+  }
+  
+
+  @Override
+  public JDBCServerExplorerParameters createServerExplorerParameters() {
+    return new JDBCServerExplorerParameters();
+  }
+
+  @Override
+  public String getSourceId(JDBCStoreParameters parameters) {
+    return parameters.getHost() + ":"
+            + parameters.getDBName() + ":"
+            + parameters.getSchema() + ":"
+            + parameters.tableID();
+  }
+
+  @Override
+  public boolean isThreadSafe() {
+    return true;
+  }
+
+  /** 
+   * This method has been overriden in Oracle provider
+   * 
+   * @param sqlbuilder
+   * @param type
+   * @param extra_column_names 
+   */
+  @Override
+  public void processSpecialFunctions(
+          SQLBuilder sqlbuilder,
+          FeatureType type,
+          List<String> extra_column_names) {
+    replaceForeingValueFunction(sqlbuilder, type, extra_column_names);
+    replaceExistsFunction(sqlbuilder, type, extra_column_names);
+  }
+
+  @SuppressWarnings("Convert2Lambda")
+  private void replaceExistsFunction(
+          SQLBuilder sqlbuilder,
+          FeatureType type,
+          final List<String> extra_column_names) {
+    
+    //  Si lse encuentra una construccion del tipo:
+    //    SELECT ... FROM ... WHERE ... EXISTS(list, 'EXISTS_ID') ...
+    //  se traslada a:
+    //    SELECT ... EXISTS(list) AS EXISTS_ID FROM ... WHERE ... EXISTS(list) ...
+    //  Y se a�ade el valor ESISTS_ID a las columnas extra a recuperar de la consulta.
+    //          
+    
+    final SQLBuilder.SelectBuilder select = sqlbuilder.select();
+    final ExpressionBuilder where = select.where();
+    if (where == null || where.isEmpty() || select.has_group_by() ) {
+      return;
+    }
+    final List<ExpressionBuilder.Value[]> value_replacements = new ArrayList<>();
+    where.accept(new ExpressionBuilder.Visitor() {
+      @Override
+      public void visit(ExpressionBuilder.Visitable value) {
+        if (!(value instanceof ExpressionBuilder.Function)) {
+          return;
+        }
+        ExpressionBuilder.Function function = (ExpressionBuilder.Function) value;
+        if (!StringUtils.equalsIgnoreCase(function.name(), FUNCTION_EXISTS)) {
+          return;
+        }
+        if (function.parameters().size() != 2) {
+          return;
+        }
+        ExpressionBuilder.Value arg0 = function.parameters().get(0);
+        ExpressionBuilder.Value arg1 = function.parameters().get(1);
+        if (arg1 == null) {
+          return;
+        }
+        String columnName = (String) ((ExpressionBuilder.Constant) arg1).value();
+        SQLBuilder.SelectColumnBuilder column = select.column();
+        column.value(
+                sqlbuilder.expression().function(FUNCTION_EXISTS, arg0)
+        );
+        column.as(columnName);
+
+        if( extra_column_names!=null ) {
+          extra_column_names.add(columnName);
+        }
+      }
+    }, null);
+    if (value_replacements.isEmpty()) {
+      return;
+    }
+    // Realizamos los reemplazos calculados previamente (value_replacements).
+    for (ExpressionBuilder.Value[] replaceValue : value_replacements) {
+      ExpressionBuilder.Value target = replaceValue[0];
+      ExpressionBuilder.Value replacement = replaceValue[1];
+      sqlbuilder.select().replace(target, replacement);
+    }
+  }
+
+  @SuppressWarnings("Convert2Lambda")
+  protected void replaceForeingValueFunction(
+          SQLBuilder sqlbuilder,
+          FeatureType type,
+          List<String> extra_column_names) {
+    try {
+      // See test SQLBuilderTest->testForeingValue()
+      final ExpressionBuilder where = sqlbuilder.select().where();
+//      if (where == null || where.isEmpty()) {
+//        return;
+//      }
+      final SQLBuilder.TableNameBuilder table = sqlbuilder.select().from().table();
+      final ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+      final List<String> foreing_value_args;
+      if (extra_column_names == null || sqlbuilder.select().has_group_by()) {
+        foreing_value_args = new ArrayList<>();
+      } else {
+        foreing_value_args = extra_column_names;
+      }
+      final List<ExpressionBuilder.Value[]> value_replacements = new ArrayList<>();
+
+      // Buscamos las llamadas a la funcion "foreing_value" y nos quedamos
+      // el argumento de esta asi como por que tendriamos que sustituirla 
+      // una vez hechos los left joins que toquen.
+      sqlbuilder.select().accept(new ExpressionBuilder.Visitor() {
+        @Override
+        public void visit(ExpressionBuilder.Visitable value) {
+          // Requiere que sea la funcion "FOREING_VALUE con un solo 
+          // argumento que sea una constante de tipo string.
+          if (!(value instanceof ExpressionBuilder.Function)) {
+            return;
+          }
+          ExpressionBuilder.Function function = (ExpressionBuilder.Function) value;
+          if (!StringUtils.equalsIgnoreCase(function.name(), FUNCTION_FOREING_VALUE)) {
+            return;
+          }
+          if (function.parameters().size() != 1) {
+            return;
+          }
+          ExpressionBuilder.Value arg = function.parameters().get(0);
+          if (!(arg instanceof ExpressionBuilder.Constant)) {
+            return;
+          }
+          Object arg_value = ((ExpressionBuilder.Constant) arg).value();
+          if (!(arg_value instanceof CharSequence)) {
+            return;
+          }
+          String foreing_value_arg = arg_value.toString();
+          String[] foreingNameParts = StringUtils.split(foreing_value_arg, "[.]");
+          if (foreingNameParts.length != 2) {
+            // De momento solo tratamos joins entre dos tablas.
+            return;
+          }
+          String columnNameLocal = foreingNameParts[0];
+          String columnNameForeing = foreingNameParts[1];
+          FeatureAttributeDescriptor attr = type.getAttributeDescriptor(columnNameLocal);
+          if (attr==null) {
+              throw new RuntimeException("Cannot find in feature type attribute:"+columnNameLocal);
+          }
+          if (!attr.isForeingKey()) {
+            // Uhm... si el argumento no referencia a un campo que es
+            // clave ajena no lo procesamos. 
+            // � Deberiamos lanzar un error ?
+            return;
+          }
+          // Nos guardaremos por que hay que reemplazar la funcion 
+          // FOREING_VALUE, y su argumento para mas tarde.
+          ForeingKey foreingKey = attr.getForeingKey();
+          SQLBuilder.TableNameBuilder foreingTable = sqlbuilder.createTableNameBuilder()
+                  .database(table.getDatabase())
+                  .schema(table.getSchema())
+                  .name(foreingKey.getTableName());
+          // Reemplzaremos la funcion FOREING_VALUE, por el acceso al campo
+          // que toca de la tabla a la que referencia la clave ajena.
+          ExpressionBuilder.Variable function_replacement = sqlbuilder.column(foreingTable, columnNameForeing);
+          value_replacements.add(
+                  new ExpressionBuilder.Value[]{
+                    function,
+                    function_replacement
+                  }
+          );
+          if (!foreing_value_args.contains(foreing_value_arg)) {
+            foreing_value_args.add(foreing_value_arg);
+          }
+        }
+      }, null);
+      
+      // Si no habia ningun llamada a la funcion FOREING_VALUE, no hay que
+      // hacer nada.
+      if (foreing_value_args.isEmpty()) {
+        return;
+      }
+
+      // Calculamos que referencias de columnas hemos de cambiar para 
+      // que no aparezcan ambiguedades al hacer el join (nombres de
+      // columna de una y otra tabla que coincidan).
+      // Para las columnas que puedan dar conflicto se prepara un reemplazo 
+      // de estas que tenga el nombre de tabla.
+      for (ExpressionBuilder.Variable variable : sqlbuilder.variables()) {
+        if (variable == null || variable instanceof SQLBuilderBase.ColumnBase) {
+          continue;
+        }
+        for (String foreingName : foreing_value_args) {
+          String[] foreingNameParts = foreingName.split("[.]");
+          if (foreingNameParts.length != 2) {
+            continue;
+          }
+          String columnNameLocal = foreingNameParts[0];
+          String columnNameForeing = foreingNameParts[1];
+          if (StringUtils.equalsIgnoreCase(variable.name(), columnNameForeing)
+                  || StringUtils.equalsIgnoreCase(variable.name(), columnNameLocal)) {
+            ExpressionBuilder.Variable variable_replacement = sqlbuilder.column(
+                    table,
+                    variable.name()
+            );
+            value_replacements.add(
+                    new ExpressionBuilder.Value[]{
+                      variable,
+                      variable_replacement
+                    }
+            );
+          }
+        }
+      }
+
+      // Realizamos los reemplazos calculados previamente (value_replacements).
+      for (ExpressionBuilder.Value[] replaceValue : value_replacements) {
+        ExpressionBuilder.Value target = replaceValue[0];
+        ExpressionBuilder.Value replacement = replaceValue[1];
+        sqlbuilder.select().replace(target, replacement);
+      }
+
+        // A�adimos a la SQL los "LEFT JOIN" que toca para poder acceder
+        // a los valores referenciados por la funcion FOREING_VALUE.
+        // Ademas a�adimos los valores referenciados por la funcion FOREING_VALUE
+        // como columnas de la SQL para poder acceder a ellos si fuese necesario.
+        HashSet usedLeftJoins = new HashSet();
+      for (String foreingName : foreing_value_args) {
+        String[] foreingNameParts = foreingName.split("[.]");
+        if (foreingNameParts.length != 2) {
+          continue;
+        }
+        String columnNameLocal = foreingNameParts[0];
+        String columnNameForeing = foreingNameParts[1];
+        FeatureAttributeDescriptor attr = type.getAttributeDescriptor(columnNameLocal);
+        if (attr.isForeingKey()) {
+          ForeingKey foreingKey = attr.getForeingKey();
+          SQLBuilder.TableNameBuilder foreingTable = sqlbuilder.createTableNameBuilder()
+                  .database(table.getDatabase())
+                  .schema(table.getSchema())
+                  .name(foreingKey.getTableName());
+          SQLBuilder.TableNameBuilder mainTable = sqlbuilder.createTableNameBuilder()
+                  .database(table.getDatabase())
+                  .schema(table.getSchema())
+                  .name(table.getName());
+          
+          if (!usedLeftJoins.contains(foreingTable.getName())) {
+            sqlbuilder.select().from()
+                    .left_join(
+                            foreingTable,
+                            expbuilder.eq(
+                                    sqlbuilder.column(mainTable, columnNameLocal),
+                                    sqlbuilder.column(foreingTable, foreingKey.getCodeName())
+                            )
+                    );
+            usedLeftJoins.add(foreingTable.getName());
+          }
+          if (!sqlbuilder.select().has_group_by()) {
+                sqlbuilder.select().column().name(foreingTable, columnNameForeing);
+          }
+        }
+      }
+      
+        for (SQLBuilder.SelectColumnBuilder column : sqlbuilder.select().getColumns()) {
+            if(column.getTable()==null && column.getName()!=null) {
+                column.name(table, column.getName());
+            }
+        }
+
+    } catch (Throwable th) {
+      LOGGER.warn("Can't replace FOREING_VALUE function.", th);
+      throw th;
+    } finally {
+      LOGGER.trace("Exit from replaceForeingValueFunction.");
+    }
+  }
+
+    @Override
+    public void setTransaction(DataTransactionServices transaction) {
+        this.transaction = transaction;
+    }
+    
+    @Override
+    public String toString() {
+        try {
+            return String.format("%s %x %s", this.getClass().getSimpleName(), this.hashCode(), this.connectionParameters.getUrl());
+        } catch (Exception e) {
+            return super.toString();
+        }
+    }
+
+    public String getConnectionProviderStatus() {
+        return "";
+    }
+	
+	public void expandCalculedColumns(JDBCSQLBuilderBase sqlbuilder) {
+		ComputedAttribute computedAttributeFormater = new ComputedAttribute(sqlbuilder, sqlbuilder.formatter());
+		List<Pair<ExpressionBuilder.Value, ExpressionBuilder.Value>> variablesToReplace = new ArrayList<>();
+		sqlbuilder.accept(new ExpressionBuilder.Visitor() {
+			@Override
+			public void visit(ExpressionBuilder.Visitable value) {
+				if (computedAttributeFormater.canApply((ExpressionBuilder.Value) value)) {
+					ExpressionBuilder.Variable variable = (ExpressionBuilder.Variable) value;
+					ExpressionBuilder.Value replace = computedAttributeFormater.expandedValue(variable);
+					variablesToReplace.add(Pair.of(variable, replace));
+				}
+			}
+		}, null);
+		for (Pair<ExpressionBuilder.Value, ExpressionBuilder.Value> entry : variablesToReplace) {
+			ExpressionBuilder.Value variable = entry.getKey();
+			ExpressionBuilder.Value replace = entry.getValue();
+			sqlbuilder.select().replace(variable, replace);
+		}
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverBase.java	(revision 46118)
@@ -0,0 +1,174 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SRSSolverBase implements SRSSolver {
+    /*
+        Esta clase asume que los SRS de la BBDD son Integer.
+        En caso de que para un gestor de BBDD no lo sea deberia usarse una
+        implemetacion alternativa y no esta.
+    */
+    protected static final Logger logger = LoggerFactory.getLogger(SRSSolverBase.class);
+    
+    protected Map<Integer,String> database2applicationAbbrev;
+    protected Map<String,Integer> applicationAbbrev2database;
+    protected JDBCHelper helper;
+    
+    public SRSSolverBase(JDBCHelper helper) {
+        this.helper = helper;
+        this.applicationAbbrev2database = new HashMap<>();
+        this.database2applicationAbbrev = new HashMap<>();
+    }
+    
+    @Override
+    public void add(Object databaseCode, String applicationAbbrev) {
+        this.applicationAbbrev2database.put(applicationAbbrev, (Integer) databaseCode);
+        this.database2applicationAbbrev.put((Integer) databaseCode, applicationAbbrev);
+    }
+    
+    @Override
+    public Integer getDatabaseCode(Connection connection, String applicationAbbrev) {
+        if( this.hasApplicationAbbrev(connection, applicationAbbrev) ) {
+            return this.applicationAbbrev2database.get(applicationAbbrev);
+        }
+        Integer databaseCode = (Integer) this.searchDatabaseCode(connection, applicationAbbrev);
+//        if( databaseCode==null ) {
+//            logger.debug("database code srs null."); 
+//            return null;
+//        }
+//        logger.debug("database code srs {}, type {}.", 
+//            new Object[] { 
+//                databaseCode, 
+//                databaseCode.getClass().getSimpleName()
+//            }
+//        );
+        this.add(databaseCode, applicationAbbrev);
+        return databaseCode;
+    }
+    
+    @Override
+    public String getApplicationAbbrev(Connection connection, Object databaseCode) {
+        if( this.hasDatabaseCode(connection, databaseCode) ) {
+            return this.database2applicationAbbrev.get((Integer)databaseCode);
+        }
+        String applicationAbbrev = this.searchApplicationAbbrev(connection, (Integer) databaseCode);
+        if( StringUtils.isEmpty(applicationAbbrev) ) {
+            return null;
+        }
+        this.add(databaseCode, applicationAbbrev);
+        return applicationAbbrev;
+    }
+    
+    @Override
+    public boolean hasDatabaseCode(Connection connection, Object databaseCode) {
+        return this.database2applicationAbbrev.containsKey((Integer)databaseCode);
+    }
+    
+    @Override
+    public boolean hasApplicationAbbrev(Connection connection, String applicationAbbrev) {
+        return this.applicationAbbrev2database.containsKey(applicationAbbrev);
+    }
+
+    protected Object searchDatabaseCode(Connection connection, String applicationAbbrev) {
+        // Initialize sql only for debugging purposes
+        String sql = "select srid, auth_name, auth_srid from spatial_ref_sys where auth_name/auth_srid is '"+applicationAbbrev+"'.";
+        try {
+            String[] s = applicationAbbrev.split(":");
+            sql = "select srid, auth_name, auth_srid from spatial_ref_sys where upper(auth_name) = upper('" + s[0] +"') and auth_srid = "+s[1]+" ";
+            Statement st = connection.createStatement();
+            ResultSet rs = JDBCUtils.executeQuery(st, sql);
+            if ( rs.next() ) {
+                Integer srid = rs.getInt("srid");
+                return srid;
+            }            
+            return null;
+        } catch (Throwable ex) {
+            logger.warn("Can't retrieve SRS code from spatial_ref_sys ("+sql+").", ex);
+            throw new RuntimeException("Can't retrieve SRS code from spatial_ref_sys ("+sql+").",ex);
+        }
+    }
+
+    protected String searchApplicationAbbrev(Connection connection, Integer databaseCode) {
+        String sql = "select srid, auth_name, auth_srid from spatial_ref_sys where srid = " + databaseCode;
+        try {
+            Statement st = connection.createStatement();
+            ResultSet rs = JDBCUtils.executeQuery(st, sql);
+            if ( rs.next() ) {
+                int auth_code = rs.getInt("auth_srid");
+                String auth_name = rs.getString("auth_name");
+                return auth_name + ":" + auth_code;
+            }            
+            return null;
+        } catch (Throwable ex) {
+            logger.warn("Can't retrieve SRS from spatial_ref_sys ("+sql+").", ex);
+            throw new RuntimeException("Can't retrieve SRS from spatial_ref_sys ("+sql+").",ex);
+        }
+    }
+
+    @Override
+    public IProjection getProjection(Connection connection, Object databaseCode) {
+        if( databaseCode == null ) {
+            return null;
+        }
+        String s = databaseCode.toString().trim();
+        if( s.equals("0") ) {
+            return null;
+        }
+        String abbrev = this.getApplicationAbbrev(connection, databaseCode);
+        if( StringUtils.isEmpty(abbrev) ) {
+            return null;
+        }
+        IProjection proj = CRSFactory.getCRS(abbrev);
+        return proj;
+    }
+
+    @Override
+    public Integer getDatabaseCode(Connection connection, IProjection projection) {
+        if( projection==null ) {
+            return 0;
+        }
+        Object srscode = this.getDatabaseCode(connection, projection.getAbrev());
+//        logger.debug("database code srs {}, type {}.", 
+//            new Object[] { 
+//                srscode, 
+//                srscode==null? "null":srscode.getClass().getSimpleName(), 
+//            }
+//        );        
+        return (Integer) srscode;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/DataTransactionConnection.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/DataTransactionConnection.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/DataTransactionConnection.java	(revision 46118)
@@ -0,0 +1,82 @@
+/*
+ * gvSIG. Desktop Geographic Information System.
+ * 
+ * Copyright (C) 2007-2020 gvSIG Association.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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 <https://www.gnu.org/licenses/>. 
+ * 
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class DataTransactionConnection implements DataTransactionServices.ConnectionService<Connection> {
+
+    private final String id;
+    private final Connection connection;
+    
+    public DataTransactionConnection(String id, Connection connection) {
+        this.id = id;
+        this.connection = connection;
+    }
+    
+    @Override
+    public String getId() {
+        return this.id;
+    }
+
+    @Override
+    public void begin() throws DataException {
+        try {
+            this.connection.setAutoCommit(false);
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        }
+    }
+
+    @Override
+    public void commit() throws DataException {
+        try {
+            this.connection.commit();
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        }
+    }
+
+    @Override
+    public void rollback() throws DataException {
+        try {
+            this.connection.rollback();
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        }
+    }
+
+    @Override
+    public Connection get() {
+        return this.connection;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionProvider.java	(revision 46118)
@@ -0,0 +1,66 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FakeConnectionProvider implements ConnectionProvider {
+
+    private final Connection connection;
+    
+    public FakeConnectionProvider() {
+        this.connection = new FakeConnection();
+    }
+    
+    public FakeConnectionProvider(JDBCConnectionParameters parameters) {
+        this();
+    }
+
+    @Override
+    public String getStatus() {
+        return "Fake connection provider";
+    }
+    
+    @Override
+    public Connection getConnection() throws SQLException {
+        return this.connection;
+    }
+
+    @Override
+    public void registerDriver() throws SQLException {
+
+    }
+
+    @Override
+    public void dispose() {
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolver.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolver.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolver.java	(revision 46118)
@@ -0,0 +1,44 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import org.cresques.cts.IProjection;
+
+public interface SRSSolver {
+
+    void add(Object databaseCode, String applicationAbbrev);
+
+    String getApplicationAbbrev(Connection connection, Object databaseCode);
+
+    Object getDatabaseCode(Connection connection, String applicationAbbrev);
+
+    boolean hasApplicationAbbrev(Connection connection, String applicationAbbrev);
+
+    boolean hasDatabaseCode(Connection connection, Object databaseCode);
+
+    public IProjection getProjection(Connection connection, Object databaseCode);
+    
+    public Object getDatabaseCode(Connection connection, IProjection projection);
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ResultSetForSetProviderOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ResultSetForSetProviderOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ResultSetForSetProviderOperation.java	(revision 46118)
@@ -0,0 +1,479 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LET;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.SQLBuilder.SelectBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureExtraColumns;
+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.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_JDBCHELPER;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_QUERY;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters.ComputedAttribute;
+import org.gvsig.fmap.geom.DataTypes;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.lang.CloneableUtils;
+import org.gvsig.tools.util.ContainerUtils;
+
+public class ResultSetForSetProviderOperation extends AbstractConnectionOperation {
+
+    private final TableReference table;
+    private final String baseFilter;
+    private final String baseOrder;
+    private final FeatureType storeType;
+    private final FeatureType setType;
+    private final FeatureQuery query;
+    private final long limit;
+    private final long offset;
+    private final int fetchSize;
+
+    public ResultSetForSetProviderOperation(
+            JDBCHelper helper,
+            TableReference table,
+            String baseFilter,
+            String baseOrder,
+            FeatureQuery query,
+            FeatureType storeType,
+            FeatureType setType,
+            long limit,
+            long offset,
+            int fetchSize
+    ) {
+        super(helper);
+        this.table = table;
+        this.baseFilter = baseFilter;
+        this.baseOrder = baseOrder;
+        this.storeType = storeType;
+        this.setType = setType;
+        this.query = query;
+        this.limit = limit;
+        this.offset = offset;
+        this.fetchSize = fetchSize;
+    }
+
+    @Override
+    protected Object perform_operation() throws Exception {
+        ResultSetEntry rs = createResultSet();
+        return rs;
+    }
+
+    @Override
+    public Object perform(Connection conn) throws DataException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public String getSQL() {
+        List<FeatureAttributeDescriptor> columns = new ArrayList<>();
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        String sql = this.getSQL(sqlbuilder, columns, null);
+        return sql;
+    }
+
+    public String getSQL(
+            JDBCSQLBuilderBase sqlbuilder,
+            List<FeatureAttributeDescriptor> columns,
+            List<String> extraColumnNames
+    ) {
+        double tolerance = -1; //query.getScale(); 
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        SelectBuilder select = sqlbuilder.select();
+
+        Map<String, EditableFeatureAttributeDescriptor> allExtraColumns = new HashMap<>();
+        for (EditableFeatureAttributeDescriptor column : this.setType.getExtraColumns().getColumns()) {
+            allExtraColumns.put(column.getName(), column);
+        }
+        if(query != null){
+            for (EditableFeatureAttributeDescriptor column : this.query.getExtraColumn().getColumns()) {
+                allExtraColumns.put(column.getName(), column);
+            }
+        }
+
+        List<String> primaryKeys = new ArrayList<>();
+        for (FeatureAttributeDescriptor attr : storeType.getPrimaryKey()) {
+            primaryKeys.add(attr.getName());
+        }
+        List<String> forcedColumns = new ArrayList<>(primaryKeys);
+
+        String[] constantsAttributeNames = null;
+        if (query != null && query.hasConstantsAttributeNames()) {
+            constantsAttributeNames = query.getConstantsAttributeNames();
+        }
+        ArrayList<ExpressionBuilder.Value> valuesToRemoveFeatureType = new ArrayList<>();
+        for (FeatureAttributeDescriptor attr : setType) {
+            if (attr.isComputed()) {
+//              if(StringUtils.isNotBlank(System.getenv("ENABLE_COMPUTED_SQL_ATTR"))) { 
+                if (attr.getRelationType() == DynField.RELATION_TYPE_NONE) {
+                    FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator();
+                    if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
+                        FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator;
+                        Expression exp = x.getExpression();
+
+                        if (query != null && query.hasGroupByColumns()) {
+                            String aggregate = query.getAggregate(this.table.getTable(), attr.getName());
+                            if (this.query.isAGroupByColumn(attr.getName())) {
+                                if (!select.has_column(attr.getName())) {
+                                    select.column().value(exp.getCode().toValue()).as(attr.getName());
+                                }
+                                if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) {
+                                    extraColumnNames.add(attr.getName());
+                                }
+                            } else if (aggregate == null) {
+                                select.column().value(expbuilder.constant(null)).as(attr.getName());
+                            } else {
+                                String fn = this.query.getAggregateFunctions().get(attr.getName());
+                                ExpressionBuilder.Function aggregateExp = expbuilder.function(fn, exp.getCode().toValue());
+                                if (!select.has_column(attr.getName())) {
+                                    select.column().value(aggregateExp).as(attr.getName());
+                                }
+                                if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) {
+                                    extraColumnNames.add(attr.getName());
+                                }
+                            }
+                        } else {
+                            if (exp != null && !exp.isEmpty() && this.helper.supportExpression(setType, exp.getPhrase())) {
+                                Code code = exp.getCode();
+                                select.column()
+                                        .value(code.toValue(expbuilder))
+                                        .as(attr.getName());
+                                if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) {
+                                    extraColumnNames.add(attr.getName());
+                                }
+                            }
+
+                        }
+                    }
+                }
+//              }
+                continue;
+            }
+            if (ArrayUtils.contains(constantsAttributeNames, attr.getName())) {
+                continue;
+            }
+            if (attr.isPrimaryKey()) {
+                forcedColumns.remove(attr.getName());
+            }
+            if (query != null && query.hasGroupByColumns()) {
+                String aggregate = query.getAggregate(this.table.getTable(), attr.getName());
+                if (this.query.isAGroupByColumn(attr.getName())) {
+                    select.column().name(attr.getName());
+                } else if (aggregate == null) {
+                    select.column().value(expbuilder.constant(null)).as(attr.getName());
+                } else {
+                    select.column()
+                            .value(ExpressionUtils.compile(aggregate).toValue(expbuilder))
+                            .as(attr.getName());
+                }
+            } else {
+                if (attr.getType() == DataTypes.GEOMETRY) {
+                    select.column().name(attr.getName()).as_geometry();
+                    //                if( tolerance<=0 || !sqlbuilder.getConfig().has_functionality(Config.ST_Simplify)) {
+                    //                    select.column().name(attr.getName()).as_geometry();
+                    //                } else {
+                    //                    select.column().value(
+                    //                        sqlbuilder.ST_Simplify( 
+                    //                            sqlbuilder.column(attr.getName()),
+                    //                            sqlbuilder.constant(tolerance)
+                    //                        )
+                    //                    ).as_geometry();
+                    //                }
+                } else {
+                    select.column().name(attr.getName());
+                }
+            }
+            columns.add(attr);
+        }
+
+        if (query != null && query.hasGroupByColumns()) {
+            for (Map.Entry<String, String> entry : query.getAggregateFunctions().entrySet()) {
+                Expression exp;
+                FeatureAttributeDescriptor attr = allExtraColumns.get(entry.getKey());
+
+                if (attr == null) {
+                    attr = this.setType.getAttributeDescriptorFromAll(entry.getKey());
+
+                    if (attr == null) {
+                        exp = ExpressionUtils.createExpression(entry.getKey());
+                        Code code = exp.getCode();
+                        if (!(code instanceof Code.Callable)) {
+                            throw new RuntimeException("Not able to use aggregate function with this expression(1): " + entry.getKey());
+                        }
+                        Code.Callable callable = (Code.Callable) code;
+                        if (!callable.name().equalsIgnoreCase(FUNCTION_LET)) {
+                            throw new RuntimeException("Not able to use aggregate function with this expression(2): " + entry.getKey());
+                        }
+                        String name = ((Code.Identifier) callable.parameters().get(0)).name();
+                        ExpressionBuilder.Value aggregate = callable.parameters().get(1).toValue();
+
+                        ExpressionBuilder.Function aggregateExp = expbuilder.function(entry.getValue(), aggregate);
+
+                        select.remove_column(name);
+                        select.column().value(aggregateExp).as(name);
+                    }
+                } else {
+                    exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression();
+                    ExpressionBuilder.Function aggregateExp = expbuilder.function(entry.getValue(), exp.getCode().toValue());
+                    if (!select.has_column(attr.getName())) {
+                        select.column().value(aggregateExp).as(attr.getName());
+                    }
+                    if (extraColumnNames != null && !extraColumnNames.contains(attr.getName())) {
+                        extraColumnNames.add(attr.getName());
+                    }
+                }
+            }
+            for (String attrName : query.getGroupByColumns()) {
+                if (allExtraColumns.get(attrName) != null) { //from setType and query
+                    EditableFeatureAttributeDescriptor attr = allExtraColumns.get(attrName);
+                    ExpressionBuilder.Variable col = expbuilder.column(attrName);
+                    select.group_by(col);
+                    Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression();
+                    if (!select.has_column(attrName)) {
+                        select.column().value(exp.getCode().toValue()).as(attrName);
+                    }
+                    if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
+                        extraColumnNames.add(attrName);
+                    }
+                } else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) {
+                    FeatureAttributeDescriptor attr = setType.getAttributeDescriptor(attrName);
+                    ExpressionBuilder.Variable col = expbuilder.column(attrName);
+                    select.group_by(col);
+                    Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression();
+                    if (!select.has_column(attrName)) {
+                        select.column().value(exp.getCode().toValue()).as(attrName);
+                    }
+                    if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
+                        extraColumnNames.add(attrName);
+                    }
+                } else if (setType.get(attrName) == null) {
+                    try {
+                        Code code = ExpressionUtils.compile(attrName);
+                        select.group_by(code.toValue());
+                    } catch (Exception ex) {
+                        throw new RuntimeException("Not able to create column by expression in groupby query", ex);
+                    }
+                } else {
+                    ExpressionBuilder.Function atrcolumn = expbuilder.getattr(this.table.getTable(), attrName);
+                    select.group_by(atrcolumn);
+                }
+            }
+        } else {
+            for (String attrName : forcedColumns) {
+                select.column().name(attrName);
+                columns.add(setType.getAttributeDescriptor(attrName));
+            }
+            if (this.query != null) {
+                FeatureExtraColumns extraColumns = this.query.getExtraColumn();
+                if (extraColumns != null && !extraColumns.isEmpty()) {
+                    for (EditableFeatureAttributeDescriptor attr : extraColumns.getColumns()) {
+                        if (!attr.isComputed()) {
+                            continue;
+                        }
+                        FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator();
+                        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
+                            FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator;
+                            Expression exp = x.getExpression();
+                            if (exp != null && !exp.isEmpty() && this.helper.supportExpression(setType, exp.getPhrase())) {
+                                Code code = exp.getCode();
+                                select.column()
+                                        .value(code.toValue(expbuilder))
+                                        .as(attr.getName());
+                                if (extraColumnNames!=null && !extraColumnNames.contains(attr.getName())) {
+                                    extraColumnNames.add(attr.getName());
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        select.from().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        select.from().subquery(this.table.getSubquery());
+
+        Evaluator filter = query == null ? null : query.getFilter();
+        if (filter != null) {
+            String sqlfilter = filter.getSQL();
+            if (!StringUtils.isEmpty(sqlfilter)) {
+                if (this.helper.supportFilter(this.storeType, filter)) {
+                    select.where().set(expbuilder.toValue(sqlfilter));
+                }
+            }
+        }
+        if (!StringUtils.isEmpty(baseFilter)) {
+            select.where().and(expbuilder.toValue(baseFilter));
+        }
+
+        FeatureQueryOrder order = query == null ? null : query.getOrder();
+        if (order != null) {
+            for (FeatureQueryOrderMember member : order.members()) {
+                String attrName = member.getAttributeName();
+                if (member.hasEvaluator()) {
+                    String sqlorder = member.getEvaluator().getSQL();
+                    select.order_by()
+                            .value(expbuilder.toValue(sqlorder))
+                            .ascending(member.getAscending());
+                } else {
+                    if (allExtraColumns.get(attrName) != null) {
+                        Expression exp = ((FeatureAttributeEmulatorExpression) allExtraColumns.get(attrName).getFeatureAttributeEmulator()).getExpression();
+                        if (!select.has_column(attrName)) {
+                            select.column().value(exp.getCode().toValue()).as(attrName);
+                        }
+                        if (extraColumnNames!=null && !extraColumnNames.contains(attrName)) {
+                            extraColumnNames.add(attrName);
+                        }
+                    } else if (setType.get(attrName) != null && setType.getAttributeDescriptor(attrName).isComputed()) {
+                        Expression exp = ((FeatureAttributeEmulatorExpression) setType.getAttributeDescriptor(attrName).getFeatureAttributeEmulator()).getExpression();
+                        if (!select.has_column(attrName)) {
+                            select.column().value(exp.getCode().toValue()).as(attrName);
+                        }
+                        if (extraColumnNames!=null && !extraColumnNames.contains(attrName)) {
+                            extraColumnNames.add(attrName);
+                        }
+                    }
+					ExpressionBuilder.Variable col = expbuilder.column(attrName);
+					
+					// En el groupBy no queremos que se sustituya el nombre del campo calculado
+					// por su expresion. Se encarga el formater y lo evitamos quitandole el ftype
+					// al value.
+					valuesToRemoveFeatureType.add(col);
+					select.order_by().value(col).ascending(member.getAscending());
+//                    select.order_by()
+//                            .column(member.getAttributeName())
+//                            .ascending(member.getAscending());
+                }
+            }
+        }
+
+        if (!StringUtils.isEmpty(baseOrder)) {
+            select.order_by().custom(baseOrder);
+        }
+
+        if (select.has_group_by()) { // && isPaginated()) {
+            // Cuando paginamos debemos ordenar por las columnas del groupby.
+            // Ordenamos siempre para obtener el mismo resultado cuando paginamos
+            // y no paginamos.
+            for (ExpressionBuilder.Value group : select.getGroups()) {
+                if (select.getOrderBy(group) == null) {
+                    ExpressionBuilder.Value v = (ExpressionBuilder.Value) CloneableUtils.cloneQuietly(group);
+                    select.order_by().value(v).ascending();
+                    valuesToRemoveFeatureType.add(v);
+                }
+            }
+        }
+        
+        if (primaryKeys.isEmpty()) {
+            // Muy probablemente si no tiene pk sea una vista, asi que 
+            // pasaremos de ordenar y esperemos que la vista este ya ordenada.
+            select.disable_check_order_and_offset();
+        } else {
+            // Siempre ordenamos por la clave primaria
+            for (String attrName : primaryKeys) {
+                if (select.getOrderBy(attrName) == null) {
+                    select.order_by().column(attrName).ascending();
+                }
+            }
+        }
+
+        if (limit > 0) {
+            select.limit(limit);
+        } else {
+            select.limit(query == null ? null : query.getLimit());
+        }
+        if (offset > 0) {
+            select.offset(offset);
+        }
+        sqlbuilder.setProperties(
+                null,
+                PROP_FEATURE_TYPE, this.storeType,
+                PROP_TABLE, table,
+                PROP_SYMBOLTABLE, this.query==null? null:this.query.getSymbolTable(),
+                PROP_JDBCHELPER, this.helper,
+                PROP_QUERY, this.query
+        );
+        for (ExpressionBuilder.Value value : valuesToRemoveFeatureType) {
+            value.setProperty(PROP_FEATURE_TYPE, null);
+        }
+	this.helper.expandCalculedColumns(sqlbuilder);
+        this.helper.processSpecialFunctions(sqlbuilder, storeType, extraColumnNames);
+        String sql = sqlbuilder.toString();
+        return sql;
+    }
+    
+    private boolean isPaginated() {
+        // No tengo claro que (offset==0 && limit>0) sea lo mas correcto,
+        // Pero cuando se va a paginar y se pide la primera pagina offset es
+        // 0 y limit>0, y si no ordenamos ya esa primera pagina los resultados
+        // que se obtienen no son correctos, ya que la primera pagina se saca
+        // sin ordenar y el resto ordenadas.
+        // Probablemente deberiamos tener alguna otra forma de detectar que
+        // estamos paginanado ya que asi no distinguimo si solo queremos 
+        // obtener los primeros elementos sin importarnos su orden.
+        return (offset > 0 || (offset == 0 && limit > 0));
+    }
+
+    public ResultSetEntry createResultSet() throws DataException {
+        List<FeatureAttributeDescriptor> columns = new ArrayList<>();
+        List<String> extraColumnNames = new ArrayList<>();
+
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        String sql = this.getSQL(sqlbuilder, columns, extraColumnNames);
+
+        ResultSetEntry resultSetEntry = this.helper.getResulSetControler().create(
+                sql, fetchSize,
+                columns.toArray(new FeatureAttributeDescriptor[columns.size()]),
+                extraColumnNames.toArray(new String[extraColumnNames.size()])
+        );
+        return resultSetEntry;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CountOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CountOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CountOperation.java	(revision 46118)
@@ -0,0 +1,286 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.fmap.dal.SQLBuilder.SelectBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_JDBCHELPER;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_QUERY;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class CountOperation extends AbstractConnectionOperation {
+
+    private final TableReference table;
+    private final String baseFilter;
+    private final FeatureQuery query;
+    private final FeatureType featureType;
+
+    public CountOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null, null, null, null);
+    }
+
+    public CountOperation(
+            JDBCHelper helper,
+            FeatureType featureType,
+            TableReference table,
+            String baseFilter,
+            FeatureQuery query
+        ) {
+        super(helper);
+        this.featureType = featureType;
+        this.table = table;
+        this.baseFilter = baseFilter;
+        this.query = query;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return this.count(conn);
+    }
+
+    public String getSQL() {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        SelectBuilder select = sqlbuilder.select();
+        ArrayList<ExpressionBuilder.Value> valuesToRemoveFeatureType = new ArrayList<>();
+
+        if (this.query != null && this.query.hasGroupByColumns()) {
+            JDBCSQLBuilderBase subsqlbuilder = this.createSQLBuilder();
+            SelectBuilder subselect = subsqlbuilder.select();
+            
+            subselect.column().value(subsqlbuilder.count().all());
+            for (FeatureAttributeDescriptor attr : this.featureType) {
+                if (attr.isComputed()) {
+                    if (attr.getRelationType() == DynField.RELATION_TYPE_NONE) {
+                        FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator();
+                        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
+                            FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator;
+                            Expression exp = x.getExpression();
+
+                            if (query != null && query.hasGroupByColumns()) {
+                                String aggregate = query.getAggregate(this.table.getTable(), attr.getName());
+                                if (this.query.isAGroupByColumn(attr.getName())) {
+                                    if (!subselect.has_column(attr.getName())) {
+                                        subselect.column().value(exp.getCode().toValue()).as(attr.getName());
+                                    }
+                             
+                                } else if (aggregate == null) {
+                                    subselect.column().value(expbuilder.constant(null)).as(attr.getName());
+                                } else {
+                                    String fn = this.query.getAggregateFunctions().get(attr.getName());
+                                    ExpressionBuilder.Function aggregateExp = expbuilder.function(fn, exp.getCode().toValue());
+                                    if (!subselect.has_column(attr.getName())) {
+                                        subselect.column().value(aggregateExp).as(attr.getName());
+                                    }
+                                
+                                }
+                            } else {
+                                if (exp != null && !exp.isEmpty() && this.helper.supportExpression(this.featureType, exp.getPhrase())) {
+                                    Code code = exp.getCode();
+                                    subselect.column()
+                                            .value(code.toValue(expbuilder))
+                                            .as(attr.getName());
+                                
+                                }
+
+                            }
+                        }
+                    }
+                }
+            }
+            
+            
+            
+            
+            
+            if (this.query.hasGroupByColumns()) {
+                subselect.from().table()
+                        .database(this.table.getDatabase())
+                        .schema(this.table.getSchema())
+                        .name(this.table.getTable());
+                subselect.from().subquery(this.table.getSubquery());
+                Evaluator filter = query == null ? null : query.getFilter();
+                if (filter != null) {
+                    String sqlfilter = filter.getSQL();
+                    if (!StringUtils.isEmpty(sqlfilter)) {
+                        if (this.helper.supportFilter(this.featureType, filter)) {
+                            subselect.where().set(expbuilder.toValue(sqlfilter));
+                        }
+                    }
+                }
+                if (!StringUtils.isEmpty(baseFilter)) {
+                    subselect.where().and(expbuilder.toValue(baseFilter));
+                }
+
+
+                List<String> groupbyColumns = query == null ? null : query.getGroupByColumns();
+                if (groupbyColumns != null && !groupbyColumns.isEmpty()) {
+                    for (String columnName : groupbyColumns) {
+                        if (this.featureType.getAttributeDescriptor(columnName) != null) {
+                            subselect.group_by(expbuilder.column(columnName));
+                        } else if(this.featureType.getExtraColumns().get(columnName)!=null) {
+                            ExpressionBuilder.Variable col = expbuilder.column(columnName);
+                            subselect.group_by(col);
+                            EditableFeatureAttributeDescriptor attr = this.featureType.getExtraColumns().get(columnName); // TODO no deberia?
+                            Expression exp = ((FeatureAttributeEmulatorExpression) attr.getFeatureAttributeEmulator()).getExpression();
+                            subselect.column().value(exp.getCode().toValue()).as(columnName);
+                        } else {
+                            try {
+                                try {
+                                    Code groupByColumnCode = ExpressionUtils.compile(columnName);
+    //                                if (groupByColumnCode.code() == Code.CALLABLE) {
+    //                                    Code.Callable callable = (Code.Callable) groupByColumnCode;
+    //                                    if (callable.name().equalsIgnoreCase(FUNCTION_LET)) {
+    //                                        Code exp = callable.parameters().get(1);
+    //                                        Code name = callable.parameters().get(0);
+    //                                        subselect.column().value(exp.toValue())
+    //                                                .as((String) ((Code.Constant) name).value());
+    //                                        // nombre que se pone en la parte del groupby debe de ser el nombre de la var del set
+    //                                        groupByColumnCode = exp; 
+    //                                    }
+    //                                }
+                                    subselect.group_by(groupByColumnCode.toValue());
+                                } catch (Exception ex) {
+                                    throw new RuntimeException("Not able to create column by expression in groupby query", ex);
+                                }
+                            } catch (Exception ex) {
+                                throw new RuntimeException("Not able to create column by expression in groupby query", ex);
+                            }
+                        }
+                    }
+                }
+                subsqlbuilder.setProperties(
+                        ExpressionBuilder.Variable.class,
+                        PROP_FEATURE_TYPE, this.featureType,
+                        PROP_TABLE, table,
+                        PROP_SYMBOLTABLE, this.query == null ? null : this.query.getSymbolTable(),
+                        PROP_JDBCHELPER, this.helper,
+                        PROP_QUERY, this.query
+                );
+                for (ExpressionBuilder.Value value : valuesToRemoveFeatureType) {
+                    value.setProperty(PROP_FEATURE_TYPE, null);
+                }
+                this.helper.expandCalculedColumns(subsqlbuilder);
+                this.helper.processSpecialFunctions(subsqlbuilder, featureType, null);
+                String subsql = subselect.toString();
+                select.from().table()
+                        .database(this.table.getDatabase())
+                        .schema(this.table.getSchema())
+                        .name(this.table.getTable());
+                select.from().subquery(subsql);
+            }
+        } else {
+            select.column().value(sqlbuilder.count().all());
+            select.from().table()
+                    .database(this.table.getDatabase())
+                    .schema(this.table.getSchema())
+                    .name(this.table.getTable());
+            select.from().subquery(this.table.getSubquery());
+            if (!StringUtils.isEmpty(baseFilter)) {
+                sqlbuilder.select().where().set(expbuilder.custom(baseFilter));
+            }
+            if (this.query != null) {
+                if (this.query.getFilter() != null && !StringUtils.isBlank(this.query.getFilter().getSQL())) {
+                    // El and() hace un set() si no hay un filtro previo
+                    select.where().and(expbuilder.toValue(this.query.getFilter().getSQL()));
+                }
+            }
+        }
+
+
+        select.remove_all_columns();
+        select.column().value(sqlbuilder.count().all());
+//        sqlbuilder.setProperties(
+//                ExpressionBuilder.Variable.class,
+//                PROP_TABLE, table
+//        );
+        sqlbuilder.setProperties(
+                null,
+                PROP_FEATURE_TYPE, this.featureType,
+                PROP_TABLE, table,
+                PROP_SYMBOLTABLE, this.query==null? null:this.query.getSymbolTable(),
+                PROP_JDBCHELPER, this.helper,
+                PROP_QUERY, this.query
+        );
+	this.helper.expandCalculedColumns(sqlbuilder);
+        this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
+
+        select.remove_all_columns();
+        select.column().value(sqlbuilder.count().all());
+        
+        String sql = select.toString();
+        return sql;
+    }
+
+    public long count(Connection conn) throws DataException {
+
+        String sql = this.getSQL();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            st = conn.createStatement();
+            rs = JDBCUtils.executeQuery(st, sql);
+            if (!rs.next()) {
+                return 0;
+            }
+            return rs.getLong(1);
+
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            JDBCUtils.closeQuietly(rs);
+        }
+    }
+       
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DeletePassThroughOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DeletePassThroughOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DeletePassThroughOperation.java	(revision 46118)
@@ -0,0 +1,97 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.Statement;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+
+public class DeletePassThroughOperation extends AbstractConnectionOperation {
+
+    private final Expression filter;
+    private final TableReference table;
+
+    
+    public DeletePassThroughOperation(
+            JDBCHelper helper,
+            TableReference table,
+            Expression filter
+        ) {
+        super(helper);
+        this.table = table;
+        this.filter = filter;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return execute(this.table, this.filter);
+    }
+
+    public Object execute(
+        TableReference table,
+        Expression filter
+    ) {
+        Statement st = null;
+        String sql = getSQL(table, filter);
+        try {
+            st = this.getConnection().createStatement();
+            JDBCUtils.executeUpdate(st, sql);
+            JDBCUtils.closeQuietly(st);
+            return null;
+        } catch (Exception ex) {
+            JDBCUtils.closeQuietly(st);
+            throw new RuntimeException("Can't execute query ["+sql+"].",ex);
+        }
+    }
+
+    public String getSQL(
+            TableReference table,
+            Expression filter) {
+        
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+
+        sqlbuilder.delete().table()
+            .database(this.table.getDatabase())
+            .schema(this.table.getSchema())
+            .name(this.table.getTable());
+        
+        
+        if(filter != null ){
+            sqlbuilder.delete().where().set(filter.getCode().toValue());
+        }
+        
+        String sql = sqlbuilder.delete().toString();
+        return sql;
+
+        
+        
+        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureProviderByReferenceOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureProviderByReferenceOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureProviderByReferenceOperation.java	(revision 46118)
@@ -0,0 +1,159 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+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.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.fmap.geom.DataTypes;
+
+
+public class FetchFeatureProviderByReferenceOperation extends AbstractConnectionOperation {
+    private final FeatureType featureType;
+    private final FeatureReferenceProviderServices reference;
+    private final TableReference table;
+
+    public FetchFeatureProviderByReferenceOperation(
+            JDBCHelper helper,
+            FeatureReferenceProviderServices reference,
+            FeatureType featureType,
+            TableReference table
+        ) {
+        super(helper);
+        this.reference = reference;
+        this.table = table;
+        this.featureType = featureType;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        FeatureProvider feature = fetchFeatureProviderByReference(conn);
+        return feature;
+    }
+
+    public String getSQL() {
+        List<FeatureAttributeDescriptor> columns = new ArrayList<>();        
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        String sql = this.getSQL(sqlbuilder,columns);
+        return sql;
+    }
+
+    public String getSQL(JDBCSQLBuilderBase sqlbuilder, List<FeatureAttributeDescriptor> columns) {
+        
+        // FeatureAttributeDescriptor[] primaryKey = storeType.getPrimaryKey();
+        String[] primaryKeys = reference.getKeyNames();
+        
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        for (FeatureAttributeDescriptor attr : featureType) {
+            if( attr.isComputed() ) {
+                continue;
+            }
+            if( attr.getType()==DataTypes.GEOMETRY ) {
+                sqlbuilder.select().column().name(attr.getName()).as_geometry();
+                columns.add(attr);
+            } else {
+                sqlbuilder.select().column().name(attr.getName());
+                columns.add(attr);
+            }
+        }
+        sqlbuilder.select().from().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        for (String name : primaryKeys )  {
+            if( !sqlbuilder.select().has_column(name) ) {
+                sqlbuilder.select().column().name(name);
+                columns.add(featureType.getAttributeDescriptor(name));
+            }
+            Object value = reference.getKeyValue(name);
+            if( value == null ) {
+                sqlbuilder.select().where().and(
+                    expbuilder.is_null(expbuilder.column(name))
+                );                
+            } else {
+                sqlbuilder.select().where().and(
+                    expbuilder.eq(
+                        expbuilder.column(name), 
+                        expbuilder.parameter(name).value(value)
+                    )
+                );              
+            }
+        }
+        sqlbuilder.select().limit(1);
+        sqlbuilder.setProperties(
+                ExpressionBuilder.Variable.class, 
+                PROP_FEATURE_TYPE, featureType,
+                PROP_TABLE, table
+        );
+        String sql = sqlbuilder.select().toString();
+        return sql;
+    }
+       
+    public FeatureProvider fetchFeatureProviderByReference(
+            Connection conn
+        ) throws DataException {
+
+        List<FeatureAttributeDescriptor> columns = new ArrayList<>();        
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        String sql = this.getSQL(sqlbuilder,columns);
+        
+        PreparedStatement st = null;
+        ResultSet rs = null;
+        try {
+            st = conn.prepareStatement(sql);
+            sqlbuilder.setParameters(st);
+            rs = JDBCUtils.executeQuery(st, sql);
+            if (!rs.next()) {
+                return null;
+            }
+            FeatureProvider data = this.helper.createFeature(featureType);
+            this.helper.fetchFeature(data, rs, columns.toArray(new FeatureAttributeDescriptor[columns.size()]), null); 
+            return data;
+
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            JDBCUtils.closeQuietly(rs);
+        }        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CalculateEnvelopeOfColumnOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CalculateEnvelopeOfColumnOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CalculateEnvelopeOfColumnOperation.java	(revision 46118)
@@ -0,0 +1,287 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public class CalculateEnvelopeOfColumnOperation extends AbstractConnectionOperation {
+
+    protected final TableReference table;
+    protected final String columnName;
+    protected final String baseFilter;
+    protected final Envelope limit;
+    protected final IProjection crs;
+    protected final FeatureType featureType;
+
+    public CalculateEnvelopeOfColumnOperation(
+            JDBCHelper helper,
+            FeatureType featureType,
+            TableReference table,
+            String columnName,
+            String baseFilter,
+            Envelope limit,
+            IProjection crs
+    ) {
+        super(helper);
+        this.featureType = featureType;
+        this.table = table;
+        this.columnName = columnName;
+        this.baseFilter = baseFilter;
+        this.limit = limit;
+        this.crs = crs;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        Envelope env = calculateEnvelopeOfColumn(conn);
+        return env;
+    }
+
+    public String getSQL() {
+        if (this.helper.hasSpatialFunctions()) {
+            return getSQLWithAggregate();
+        } else {
+            return getSQLWihoutAggregate();
+        }
+    }
+
+    public String getSQLWihoutAggregate() {
+        //Crear un select que devuelve todas las lineas
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().name(columnName).as_geometry();
+        sqlbuilder.select().from().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+
+        sqlbuilder.select().from().subquery(this.table.getSubquery());
+        if (!StringUtils.isEmpty(baseFilter)) {
+            sqlbuilder.select().where().set(expbuilder.custom(baseFilter));
+        }
+        // todo ?
+        sqlbuilder.select().where().and(expbuilder.not_is_null(expbuilder.column(columnName)));
+        String sql = sqlbuilder.select().toString();
+        return sql;
+    }
+
+    public String getSQLWithAggregate() {
+        //
+        // Parece ser que en versiones anteriores a SQL Server 2012 no esta
+        // disponible la funcion ST_ExtentAggregate.
+        // Habria que determinar si es necesario implementar una alternativa
+        // para estos casos.
+        //
+        // https://alastaira.wordpress.com/2011/07/26/determining-the-geographic-extent-of-spatial-features-in-a-sql-server-table/
+        //
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().value(
+                //            expbuilder.ifnull(
+                //                expbuilder.column(columnName), 
+                //                expbuilder.constant(null), 
+                expbuilder.as_geometry(
+                        expbuilder.ST_ExtentAggregate(
+                                expbuilder.column(columnName)
+                        )
+                )
+        //            )
+        );
+//        sqlbuilder.select().group_by(expbuilder.column(columnName));
+        sqlbuilder.select().from().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        sqlbuilder.select().from().subquery(this.table.getSubquery());
+
+        if (StringUtils.isEmpty(baseFilter)) {
+            if (limit != null) {
+                sqlbuilder.select().where().set(
+                        expbuilder.ST_Intersects(
+                                expbuilder.ST_Envelope(
+                                        expbuilder.column(columnName)
+                                ),
+                                expbuilder.ST_Envelope(
+                                        expbuilder.geometry(limit.getGeometry(), crs)
+                                )
+                        )
+                );
+            }
+        } else {
+            sqlbuilder.select().where().set(expbuilder.custom(baseFilter));
+            if (limit != null) {
+                sqlbuilder.select().where().and(
+                        expbuilder.ST_Intersects(
+                                expbuilder.ST_Envelope(
+                                        expbuilder.column(columnName)
+                                ),
+                                expbuilder.ST_Envelope(
+                                        expbuilder.geometry(limit.getGeometry(), crs)
+                                )
+                        )
+                );
+            }
+        }
+        sqlbuilder.select().where().and(
+                expbuilder.not_is_null(expbuilder.column(columnName))
+        );
+        this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
+        sqlbuilder.setProperties(
+                Variable.class,
+                PROP_TABLE, table
+        );
+        String sql = sqlbuilder.select().toString();
+        return sql;
+    }
+
+    public Envelope calculateEnvelopeOfColumn(Connection conn) throws DataException {
+        if (this.helper.hasSpatialFunctions()) {
+            return calculateEnvelopeOfColumnWithAggregate(conn);
+        } else {
+            return calculateEnvelopeOfColumnWithoutAggregate(conn);
+        }
+    }
+
+    protected Envelope calculateEnvelopeOfColumnWithAggregate(Connection conn) throws DataException {
+        String sql = this.getSQL();
+
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            st = conn.createStatement();
+            try {
+                LOGGER.debug("execute query SQL:" + sql);
+                rs = st.executeQuery(sql);
+                // No llamo al de JDBC utils para que no meta el error
+                // en el log.
+                // rs = JDBCUtils.executeQuery(st, sql);
+            } catch (SQLException ex) {
+//                Para calcular el envelope se esta lanzando una consulta como:
+//                   SELECT ST_AsBinary(ST_Extent("geometry")) 
+//                   FROM "gis_osm_roads_free_1" 
+//                   WHERE ( ("geometry") IS NOT NULL )
+//                Que falla cuando no hay registros al recibir un NULL en el 
+//                ST_AsBinary. 
+//                A falta de una forma mejor de detectar eso, si peta en este
+//                punto asumiremos que no hay registros en la consulta y devolveremos
+//                null como envelope.
+//                A�ado un warn al LOGGER para tener constancia de lo que est� pasando.
+                LOGGER.warn("Fail executing sql: "+sql, ex);
+                return null;
+            }
+            if (!rs.next()) {
+                return null;
+            }
+            Geometry geom = this.helper.getGeometryFromColumn(rs, 1);
+            if (geom == null) {
+                return null;
+            }
+            return geom.getEnvelope();
+
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            JDBCUtils.closeQuietly(rs);
+        }
+    }
+
+    protected Envelope calculateEnvelopeOfColumnWithoutAggregate(Connection conn) throws DataException {
+//        crear una sql que devuelva un resultarSet
+//bucle
+//        iif instacia de string: cast string
+//        GeometryLocator.getGeometryManager().createFrom("")
+//        elif instance de bytearray con cast a bytearray:
+//         GeometryLocator.getGeometryManager().createFrom("")    
+//                 else:
+//                 coerceToGeometry
+//                         
+//                         
+//                         Notas: atrapar error, y si se produce error hago un coerceToGeometry       
+        String sql = this.getSQL();
+
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            st = conn.createStatement();
+            try {
+                LOGGER.debug("execute query SQL:" + sql);
+                rs = st.executeQuery(sql);
+                // No llamo al de JDBC utils para que no meta el error
+                // en el log.
+                // rs = JDBCUtils.executeQuery(st, sql);
+            } catch (SQLException ex) {
+//                Para calcular el envelope se esta lanzando una colsulta como:
+//                   SELECT ST_AsBinary(ST_Extent("geometry")) 
+//                   FROM "gis_osm_roads_free_1" 
+//                   WHERE ( ("geometry") IS NOT NULL )
+//                Que falla cuando no hay registros al recibir un NULL en el 
+//                ST_AsBinary. 
+//                A falta de una forma mejor de detectar eso, si peta en este
+//                punto asumiremos que no hay registros en la consulta y devolveremos
+//                null como envelope.
+                return null;
+            }
+            Envelope finalEnvelope = GeometryUtils.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+            while (rs.next()) {
+                String geometryString = rs.getString("geometry");
+                Geometry geometry = GeometryUtils.createFrom(geometryString);
+                finalEnvelope.add(geometry);
+            }
+//            Geometry geom = this.helper.getGeometryFromColumn(rs, 1);
+//            if (geom == null) {
+//                return null;
+//            }
+//            return geom.getEnvelope();
+            return finalEnvelope;
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            JDBCUtils.closeQuietly(rs);
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ConnectionOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ConnectionOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ConnectionOperation.java	(revision 46118)
@@ -0,0 +1,35 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import org.gvsig.fmap.dal.exception.DataException;
+
+
+public interface ConnectionOperation {
+    public Object perform(Connection conn) throws DataException ;
+    public Object perform();
+    public boolean needTransaction();
+    public boolean continueTransactionAllowed();
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/TableIsEmptyOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/TableIsEmptyOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/TableIsEmptyOperation.java	(revision 46118)
@@ -0,0 +1,141 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+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.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_JDBCHELPER;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class TableIsEmptyOperation extends AbstractConnectionOperation {
+
+    private final TableReference table;
+    private final String baseFilter;
+    private final FeatureQuery query;
+    private final FeatureType featureType;
+
+    public TableIsEmptyOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null, null, null, null);
+    }
+
+    public TableIsEmptyOperation(
+            JDBCHelper helper,
+            FeatureType featureType,
+            TableReference table,
+            String baseFilter,
+            FeatureQuery query
+        ) {
+        super(helper);
+        this.featureType = featureType;
+        this.table = table;
+        this.baseFilter = baseFilter;
+        this.query = query;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return this.tableIsEmpty(conn);
+    }
+
+    public String getSQL() {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().all();
+        sqlbuilder.select().from().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        sqlbuilder.select().from().subquery(this.table.getSubquery());
+        if (!StringUtils.isEmpty(baseFilter)) {
+            sqlbuilder.select().where().set( expbuilder.custom(baseFilter) );
+        }
+        
+        Evaluator filter = query == null ? null : query.getFilter();
+        if (filter != null) {
+            String sqlfilter = filter.getSQL();
+            if (!StringUtils.isEmpty(sqlfilter)) {
+                if (this.helper.supportFilter(this.featureType, filter)) {
+                    // El and() hace un set() si no hay un filtro previo
+                    sqlbuilder.select().where().and(expbuilder.toValue(sqlfilter));
+                }
+            }
+        }        
+//        if (!StringUtils.isEmpty(filter)) {
+//            // El and() hace un set() si no hay un filtro previo
+//            sqlbuilder.select().where().and(expbuilder.toValue(filter));
+//        }
+        sqlbuilder.select().limit(1);
+        this.helper.processSpecialFunctions(sqlbuilder, featureType, null);
+//        sqlbuilder.setProperties(
+//                ExpressionBuilder.Variable.class, 
+//                PROP_TABLE, table
+//        );
+        sqlbuilder.setProperties(
+                null,
+                PROP_FEATURE_TYPE, this.featureType,
+                PROP_TABLE, table,
+                PROP_SYMBOLTABLE, this.query==null? null:this.query.getSymbolTable(),
+                PROP_JDBCHELPER, this.helper
+        );
+        String sql = sqlbuilder.select().toString();
+        return sql;
+    }
+    
+    public boolean tableIsEmpty(Connection conn) throws DataException {
+        String sql = this.getSQL();
+
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            st = conn.createStatement();
+            rs = JDBCUtils.executeQuery(st, sql);
+            return !rs.next();
+
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            JDBCUtils.closeQuietly(rs);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ExecuteOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ExecuteOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ExecuteOperation.java	(revision 46118)
@@ -0,0 +1,108 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+
+public class ExecuteOperation extends AbstractConnectionOperation {
+
+    private final String sql;
+    
+    public ExecuteOperation(
+            JDBCHelper helper,
+            String sql
+        ) {
+        super(helper);
+        this.sql = sql;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return execute(sql);
+    }
+
+    public Object execute(String sql) {
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            st = this.getConnection().createStatement();
+            String mode = "select";
+            try {
+                mode = sql.trim().substring(0, sql.trim().indexOf(' ')).toLowerCase();
+            } catch (Exception e) {
+                //Do nothing
+            }
+            
+            switch(mode){
+                case "select":
+                    rs = JDBCUtils.executeQuery(st, sql);
+                    break;
+                case "update":
+                    JDBCUtils.executeUpdate(st, sql);
+                    break;
+                default:
+                    JDBCUtils.execute(st, sql);
+                    break;
+            }
+            if(rs == null) {
+                JDBCUtils.closeQuietly(st);
+                return null;
+            }
+            if(rs.getMetaData().getColumnCount() > 1) {
+                return rs;
+            }
+            if(!rs.next()){
+                rs.close();
+                JDBCUtils.closeQuietly(st);
+                return null;
+            }
+            if(rs.isFirst() && rs.isLast()) {
+                Object res = rs.getObject(1);
+                rs.close();
+                JDBCUtils.closeQuietly(st);
+                return res;
+            }
+            rs.first();
+            return rs;
+        } catch (Exception ex) {
+            JDBCUtils.closeQuietly(rs);
+            JDBCUtils.closeQuietly(st);
+            throw new RuntimeException("Can't execute query ["+sql+"].",ex);
+        }
+    }
+    
+    protected void closeConnection(Object result) throws Exception {
+        if (!(result instanceof ResultSet)) {
+            helper.closeConnection(this.getConnection());
+            conn = null;
+        }
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/PerformChangesOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/PerformChangesOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/PerformChangesOperation.java	(revision 46118)
@@ -0,0 +1,562 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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.FeatureReference;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+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.JDBCUpdateWithoutChangesException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+@SuppressWarnings("UseSpecificCatch")
+public class PerformChangesOperation extends AbstractConnectionWritableOperation {
+
+    protected TableReference table;
+    protected FeatureType featureType;
+    protected FeatureType featureTypeSource;
+    protected FeatureType featureTypeTarget;
+    protected Iterator<FeatureReferenceProviderServices> deleteds;
+    protected Iterator<FeatureProvider> updateds;
+    protected Iterator<FeatureProvider> inserteds;
+
+    protected boolean typeChanged = false;
+    
+    public PerformChangesOperation(JDBCHelper helper) {
+        this(helper, null, null, null, null, null, null);
+    }
+
+    public PerformChangesOperation(JDBCHelper helper,
+            TableReference table,
+            FeatureType featureType,
+            Iterator<FeatureReferenceProviderServices> deleteds,
+            Iterator<FeatureProvider> inserteds,
+            Iterator<FeatureProvider> updateds,
+            Iterator<FeatureTypeChanged> featureTypesChanged) {
+        super(helper);
+        this.deleteds = deleteds;
+        this.inserteds = inserteds;
+        this.updateds = updateds;
+        this.table = table;
+        this.featureType = featureType;
+        if (featureTypesChanged.hasNext()) {
+            FeatureTypeChanged item = featureTypesChanged.next();
+            this.featureTypeSource = item.getSource();
+            this.featureTypeTarget = item.getTarget();
+            typeChanged = true;
+        } else {
+            this.featureTypeSource = null;
+            this.featureTypeTarget = null;
+            typeChanged = false;
+        }
+    }
+
+    public boolean isTypeChanged() {
+        return typeChanged;
+    }
+
+    @Override
+    public Object perform(Connection conn) throws DataException {
+        if (typeChanged) {
+            this.performUpdateTable(conn);
+        }
+        if (inserteds.hasNext()) {
+            performInserts(conn);
+        }
+        if (updateds.hasNext()) {
+            performUpdates(conn);
+        }
+        if (deleteds.hasNext()) {
+            performDeletes(conn);
+        }
+        return true;
+    }
+    
+    public String getDeleteSQL() {
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        return this.getDeleteSQL(sqlbuilder);
+    }
+    
+    public String getDeleteSQL(JDBCSQLBuilderBase sqlbuilder) {
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.delete().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        for (FeatureAttributeDescriptor attr : this.featureType) {
+            if (attr.isPrimaryKey()) {
+                sqlbuilder.delete().where().and(
+                        expbuilder.eq(
+                                expbuilder.column(attr.getName()),
+                                expbuilder.parameter(attr.getName()).as_variable()
+                        )
+                );
+            }
+        }
+        if (!sqlbuilder.delete().has_where() ) {
+            throw new RuntimeException("Operation requires missing pk");
+        }
+        sqlbuilder.setProperties(
+                Variable.class, 
+                PROP_TABLE, table
+        );
+        String sql = sqlbuilder.delete().toString();
+        return sql;
+    }
+
+    public void performDeletes(Connection conn) throws DataException {
+
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        String sql = getDeleteSQL(sqlbuilder);
+
+        PreparedStatement st = null;
+        Disposable paramsDisposer = null;
+        try {
+            st = conn.prepareStatement(sql);
+            while (deleteds.hasNext()) {
+                FeatureReference reference = (FeatureReference) deleteds.next();
+                paramsDisposer = sqlbuilder.setParameters(st, reference);
+                int nAffected = JDBCUtils.executeUpdate(st,sql);
+                if (nAffected == 0) {
+                    throw new JDBCUpdateWithoutChangesException(
+                            sqlbuilder.delete().toString(),
+                            null
+                    );
+                }
+                if (nAffected > 1) {
+                    LOGGER.warn("Remove statement affectst to {} rows ( {} )",
+                            nAffected, sql
+                    );
+                }
+            }
+        } catch (SQLException e) {
+            throw new JDBCSQLException(e);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            DisposeUtils.disposeQuietly(paramsDisposer);
+        }
+    }
+    
+    public String getInsertSQL() {
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        return this.getInsertSQL(sqlbuilder);
+    }
+    
+    public String getInsertSQL(JDBCSQLBuilderBase sqlbuilder) {
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        for (FeatureAttributeDescriptor attr : this.featureType) {
+            if( attr.isAutomatic() || attr.isComputed() ) {
+                continue;
+            }
+            if (attr.getType() == DataTypes.GEOMETRY) {
+                sqlbuilder.insert().column().name(attr.getName()).with_value(
+                    expbuilder.parameter(attr.getName()).as_variable()
+                        .srs(
+                            expbuilder.parameter().value(
+                                attr.getSRS()).as_constant()
+                        )
+                );
+            } else {
+                sqlbuilder.insert().column().name(attr.getName()).with_value(
+                        expbuilder.parameter(attr.getName())
+                );
+            }
+        }
+
+        sqlbuilder.setProperties(
+                Variable.class, 
+                PROP_FEATURE_TYPE, featureType,
+                PROP_TABLE, table
+        );
+        sqlbuilder.setProperties(
+                Parameter.class, 
+                PROP_FEATURE_TYPE, featureType,
+                PROP_TABLE, table
+        );
+        String sql = sqlbuilder.insert().toString();
+        return sql;
+    }
+
+    public void performInserts(Connection conn) throws DataException {
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        String sql = getInsertSQL(sqlbuilder);
+        
+        PreparedStatement st;
+        Disposable paramsDisposer;
+        try {
+            st = conn.prepareStatement(sql);
+            while (inserteds.hasNext()) {
+                FeatureProvider feature = inserteds.next();
+                paramsDisposer = sqlbuilder.setParameters(st, feature);
+                try {
+                    if (JDBCUtils.executeUpdate(st,sql) == 0) {
+                        throw new JDBCExecuteSQLException(
+                                sqlbuilder.insert().toString(),
+                                null
+                        );
+                    }
+                } finally {
+                    DisposeUtils.disposeQuietly(paramsDisposer);
+                }
+            }
+        } catch (JDBCExecuteSQLException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new JDBCExecuteSQLException(sql,ex);
+        }
+    }
+
+    public String getUpdateSQL() {
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        return this.getUpdateSQL(sqlbuilder);
+    }
+    
+    public String getUpdateSQL(JDBCSQLBuilderBase sqlbuilder) {
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        for (FeatureAttributeDescriptor attr : this.featureType) {
+            if (attr.isPrimaryKey()) {
+                sqlbuilder.update().where().and(
+                        expbuilder.eq(
+                                expbuilder.column(attr.getName()),
+                                expbuilder.parameter(attr.getName()).as_variable()
+                        )
+                );
+                continue;
+            } 
+            if ( attr.isAutomatic() || attr.isReadOnly() || attr.isComputed() ) {
+                continue;
+            }
+            if (attr.getType() == DataTypes.GEOMETRY) {
+                if (attr.getSRS()==null) {
+                    throw new RuntimeException("Geometries with null srs are not valid. SRS is required in "+this.table.toString()+"in the field:"+attr.getName());
+                }
+                sqlbuilder.update().column().name(attr.getName()).with_value(
+                    expbuilder.parameter(attr.getName()).as_geometry_variable().srs(
+                        expbuilder.parameter().value(attr.getSRS()).as_constant()
+                    )
+                );
+            } else {
+                sqlbuilder.update().column().name(attr.getName()).with_value(
+                    expbuilder.parameter(attr.getName()).as_variable()
+                );
+            }
+        }
+        if (!sqlbuilder.update().has_where() ) {
+            throw new RuntimeException("Operation requires missing pk");
+        }
+        sqlbuilder.setProperties(
+                Variable.class, 
+                PROP_FEATURE_TYPE, this.featureType,
+                PROP_TABLE, table
+        );
+        sqlbuilder.setProperties(
+                Parameter.class, 
+                PROP_FEATURE_TYPE, featureType,
+                PROP_TABLE, table
+        );
+        
+        String sql = sqlbuilder.update().toString();
+        return sql;
+    }
+    
+    public void performUpdates(Connection conn) throws DataException {
+
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        String sql = getUpdateSQL(sqlbuilder);
+        
+        PreparedStatement st = null;
+        Disposable paramsDisposer = null;
+        try {
+            st = conn.prepareStatement(sql);
+            while (updateds.hasNext()) {
+                FeatureProvider featureProvider = (FeatureProvider) updateds.next();
+                paramsDisposer = sqlbuilder.setParameters(st, featureProvider);
+                if (JDBCUtils.executeUpdate(st,sql) == 0) {
+                    throw new JDBCUpdateWithoutChangesException(sql,null);
+                }
+            }
+        } catch (SQLException e) {
+            throw new JDBCSQLException(e);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+            DisposeUtils.disposeQuietly(paramsDisposer);
+        }
+    }
+
+    public List<String> getUpdateTableSQLs() {
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+        sqlbuilder.alter_table().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+
+        // Primero comprobamos si hay que eliminar la primary-key o algun indice
+        for (FeatureAttributeDescriptor attrOrgiginal : featureTypeSource) {
+            if( attrOrgiginal.isComputed() ) {
+                continue;
+            }
+            FeatureAttributeDescriptor attrTarget = featureTypeTarget.getAttributeDescriptor(
+                    attrOrgiginal.getName()
+            );
+            if (attrTarget == null) {
+                continue;
+            }
+            if( attrOrgiginal.isPrimaryKey() && !attrTarget.isPrimaryKey() ) {
+                sqlbuilder.alter_table().drop_primary_key(attrTarget.getName());
+            }
+        }
+
+        // Comprobamos si hay que eliminar o modificar alguna columna existente
+        for (FeatureAttributeDescriptor attrOrgiginal : featureTypeSource) {
+            if( attrOrgiginal.isComputed() ) {
+                continue;
+            }
+            FeatureAttributeDescriptor attrTarget = featureTypeTarget.getAttributeDescriptor(
+                    attrOrgiginal.getName()
+            );
+            if (attrTarget == null) {
+                sqlbuilder.alter_table().drop_column(attrOrgiginal.getName());
+            } else if( !this.areEquals(attrOrgiginal, attrTarget) ) {
+                if( attrTarget.getType()==DataTypes.GEOMETRY ) {
+                    sqlbuilder.alter_table().alter_geometry_column(
+                            attrTarget.getName(),
+                            attrTarget.getGeomType().getType(),
+                            attrTarget.getGeomType().getSubType(),
+                            attrTarget.getSRS(),
+                            attrTarget.isIndexed(),
+                            attrTarget.allowNull()
+                    );
+                } else {
+                    Object defaultValue = attrTarget.getDefaultValue();
+                    if( defaultValue instanceof CharSequence ) {
+                        if( ExpressionUtils.isDynamicText(defaultValue.toString())) {
+                            defaultValue = null;
+                        }
+                    }
+                    sqlbuilder.alter_table().alter_column(
+                            attrTarget.getName(),
+                            attrTarget.getType(),
+                            attrTarget.getSize(),
+                            attrTarget.getPrecision(),
+                            attrTarget.getScale(),
+                            attrTarget.isPrimaryKey(),
+                            attrTarget.isIndexed(),
+                            attrTarget.allowNull(),
+                            attrTarget.isAutomatic(),
+                            defaultValue
+                    );
+                }
+            }
+        }
+        
+        // Por ultimi comprobamos si hay que anadir alguna columna nueva.
+        for (FeatureAttributeDescriptor attrTarget : featureTypeTarget) {
+            if( attrTarget.isComputed() ) {
+                continue;
+            }
+            FeatureAttributeDescriptor attrOrgiginal = featureTypeSource.getAttributeDescriptor(
+                    attrTarget.getName()
+            );
+            if (attrOrgiginal == null) {
+                if( attrTarget.getType()==DataTypes.GEOMETRY ) {
+                    sqlbuilder.alter_table().add_geometry_column(
+                            attrTarget.getName(),
+                            attrTarget.getGeomType().getType(),
+                            attrTarget.getGeomType().getSubType(),
+                            attrTarget.getSRS(),
+                            attrTarget.isIndexed(),
+                            attrTarget.allowNull()
+                    );
+                } else {
+                    Object defaultValue = attrTarget.getDefaultValue();
+                    if( defaultValue instanceof CharSequence ) {
+                        if( ExpressionUtils.isDynamicText(defaultValue.toString())) {
+                            defaultValue = null;
+                        }
+                    }
+                    sqlbuilder.alter_table().add_column(
+                            attrTarget.getName(),
+                            attrTarget.getType(),
+                            attrTarget.getSize(),
+                            attrTarget.getPrecision(),
+                            attrTarget.getScale(),
+                            attrTarget.isPrimaryKey(),
+                            attrTarget.isIndexed(),
+                            attrTarget.allowNull(),
+                            attrTarget.isAutomatic(),
+                            defaultValue
+                    );
+                }
+            }
+        }
+        
+        sqlbuilder.setProperties(
+                Variable.class, 
+                PROP_TABLE, table
+        );
+        List<String> sqls = sqlbuilder.alter_table().toStrings();
+        sqls.addAll(buildCreateIndexSQL());
+        return sqls;
+    }
+    
+    protected boolean areEquals(FeatureAttributeDescriptor attr1, FeatureAttributeDescriptor attr2) {
+        // No interesa si son o no iguales en general, solo si son iguales en lo 
+        // que a los atributos usados para crear la columna de la tabla se refiere.
+        if( !StringUtils.equals(attr1.getName(), attr2.getName()) ) {
+            return false;
+        }
+        if( attr1.getType() != attr2.getType() ) {
+            return false;
+        }
+        if( attr1.getPrecision() != attr2.getPrecision() ) {
+            return false;
+        }
+        if( attr1.getScale() != attr2.getScale() ) {
+            return false;
+        }
+        if( attr1.getSize() != attr2.getSize() ) {
+            return false;
+        }
+        if( attr1.isPrimaryKey() != attr2.isPrimaryKey() ) {
+            return false;
+        }        
+//        if( attr1.isIndexed() != attr2.isIndexed() ) {
+//            return false;
+//        }
+        if( attr1.allowNull() != attr2.allowNull() ) {
+            return false;
+        }
+        if( attr1.isAutomatic() != attr2.isAutomatic() ) {
+            return false;
+        }
+        if( attr1.getDefaultValue() != attr2.getDefaultValue() ) {
+            if( attr1.getDefaultValue()==null || attr2.getDefaultValue()==null) {
+                return false;
+            }
+            if( !attr1.getDefaultValue().equals(attr2.getDefaultValue()) ) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    protected List<String> buildCreateIndexSQL() {
+        ArrayList<String> sqls = new ArrayList<>();
+        
+        for (FeatureAttributeDescriptor attrTarget : featureTypeTarget) {
+            boolean createIndex;
+            boolean dropIndex;
+            FeatureAttributeDescriptor attrOriginal = featureTypeSource.getAttributeDescriptor(attrTarget.getName());
+            if( attrOriginal != null ) {
+                 createIndex = (attrTarget.isIndexed() && !attrOriginal.isIndexed());
+                 dropIndex = (!attrTarget.isIndexed() && attrOriginal.isIndexed());
+            } else {
+                createIndex = attrTarget.isIndexed();
+                dropIndex = false;
+            }
+            if( createIndex ) {
+                JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+                if( attrTarget.getType()==DataTypes.GEOMETRY ) {
+                    sqlbuilder.create_index().spatial();
+                }
+                sqlbuilder.create_index().if_not_exist();
+                sqlbuilder.create_index().name(table.getTable(), attrTarget.getName());
+                sqlbuilder.create_index().column(attrTarget.getName());
+                sqlbuilder.create_index().table()
+                    .database(this.table.getDatabase())
+                    .schema(this.table.getSchema())
+                    .name(this.table.getTable());
+                sqlbuilder.setProperties(
+                        Variable.class, 
+                        PROP_TABLE, table
+                );
+                sqls.addAll(sqlbuilder.create_index().toStrings());
+            } else if( dropIndex ) {
+                JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+                sqlbuilder.drop_index().if_not_exist();
+                sqlbuilder.drop_index().name( table.getTable(), attrTarget.getName());
+            }
+        }
+        return sqls;
+    }
+    
+    public void performUpdateTable(Connection conn) throws DataException {
+        
+        List<String> sqls = this.getUpdateTableSQLs();
+
+        if( !CollectionUtils.isEmpty(sqls) ) {
+            Statement st = null;
+            try {
+                st = conn.createStatement();
+                for (String sql : sqls) {
+                    if( !StringUtils.isBlank(sql) ) {
+                        JDBCUtils.execute(st, sql);
+                    }
+                }
+            } catch (SQLException e) {
+                throw new JDBCSQLException(e);
+            } finally {
+                JDBCUtils.closeQuietly(st);
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdateTableStatisticsOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdateTableStatisticsOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdateTableStatisticsOperation.java	(revision 46118)
@@ -0,0 +1,86 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+
+public class UpdateTableStatisticsOperation extends AbstractConnectionWritableOperation {
+
+    protected final TableReference table;
+
+    public UpdateTableStatisticsOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null);
+    }
+
+    public UpdateTableStatisticsOperation(
+            JDBCHelper helper,
+            TableReference table
+        ) {
+        super(helper);
+        this.table = table;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        this.updateTableStatistics(conn);
+        return true;
+    }
+    
+    public List<String> getSQLs() {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        sqlbuilder.update_table_statistics().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+        List<String> sqls;
+        sqls = sqlbuilder.update_table_statistics().toStrings();
+        return sqls;
+    }
+    
+    public void updateTableStatistics(Connection conn) throws DataException {
+      List<String> sqls = this.getSQLs();
+        Statement st = null;
+        try {
+            st = conn.createStatement();
+            for (String sql : sqls) {
+                JDBCUtils.execute(st, sql);
+            }
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ListTablesOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ListTablesOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/ListTablesOperation.java	(revision 46118)
@@ -0,0 +1,139 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_TABLES;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_TABLES_AND_VIEWS;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_VIEWS;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+
+public class ListTablesOperation extends AbstractConnectionOperation {
+    
+    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";
+    
+    private boolean informationTables = false;
+    private final JDBCServerExplorerParameters serverParameters;
+    private final int mode;
+    private final int tablesOrViews;
+    
+    public ListTablesOperation(
+            JDBCHelper helper,
+            int mode,
+            JDBCServerExplorerParameters serverParameters,
+            boolean informationTables,
+            int tablesOrViews
+        ) {
+        super(helper);
+        this.mode = mode;
+        this.informationTables = informationTables;
+        this.serverParameters = serverParameters;
+        this.tablesOrViews = tablesOrViews;
+    }
+
+    public ListTablesOperation(
+            JDBCHelper helper,
+            int mode,
+            JDBCServerExplorerParameters serverParameters,
+            boolean informationTables
+        ) {
+        this(helper, mode, serverParameters, informationTables, SHOW_TABLES_AND_VIEWS);
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        List<JDBCStoreParameters> tables = this.listTables(
+                conn,
+                mode,
+                serverParameters,
+                informationTables,
+                tablesOrViews
+        );
+        return tables;
+    }
+
+    public List<JDBCStoreParameters> listTables(
+            Connection conn,
+            int mode,
+            JDBCServerExplorerParameters serverParameters,
+            boolean informationTables,
+            int tablesOrViews
+    ) {
+        //Si se piden solo vistas y no se soportan debe devolver una lista vac�a
+        ResultSet rs = null;
+        List<JDBCStoreParameters> tables = new ArrayList<>();
+
+        try {
+            String[] tableTypes = null;
+            switch (tablesOrViews) {
+                case SHOW_TABLES:
+                    if (informationTables) {
+                        tableTypes = new String[]{"TABLE",  "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"};
+                    } else {
+                        tableTypes = new String[]{"TABLE"};
+                    }
+                    break;
+                case SHOW_VIEWS:
+                    tableTypes = new String[]{"VIEW"};
+                    break;
+                case SHOW_TABLES_AND_VIEWS:
+                default:
+                    if (!informationTables) {
+                        tableTypes = new String[]{"TABLE", "VIEW"};
+                    }
+                    break;
+            }
+            DatabaseMetaData metadata = conn.getMetaData();
+            
+            rs = metadata.getTables(null, "%", "%", tableTypes);
+            while (rs.next()) {
+                JDBCStoreParameters params = this.helper.createOpenStoreParameters(serverParameters);
+                params.setCatalog(rs.getString(METADATA_COLUMN_TABLE_CATALOG));
+                params.setSchema(rs.getString(METADATA_COLUMN_TABLE_SCHEMA));
+                params.setTable(rs.getString(METADATA_COLUMN_TABLE_NAME));
+                tables.add(params);
+            }
+            return tables;
+            
+        } catch (SQLException ex) {
+            throw new RuntimeException("Can't fetch tables information",ex);
+            
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+        }
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureTypeOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureTypeOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/FetchFeatureTypeOperation.java	(revision 46118)
@@ -0,0 +1,552 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+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.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.type.GeometryType;
+import static org.gvsig.fmap.dal.store.jdbc2.spi.operations.AbstractConnectionOperation.LOGGER;
+import org.gvsig.tools.dataTypes.DataType;
+
+@SuppressWarnings("UseSpecificCatch")
+public class FetchFeatureTypeOperation extends AbstractConnectionOperation {
+
+    protected static class IndexInformation {
+        String column_name;
+        boolean ascending;
+        boolean unique;
+    }
+
+    protected final EditableFeatureType featureType;
+    protected final TableReference table;
+    protected final List<String> primaryKeys;
+    protected final String defaultGeometryColumn;
+    protected final IProjection crs;
+    protected final int geometryType;
+    protected final int geometrySubtype;
+
+    protected Map<String,IndexInformation> indexesInformation;
+
+    public FetchFeatureTypeOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null, null, null, null, null, Geometry.TYPES.UNKNOWN, Geometry.SUBTYPES.UNKNOWN);
+    }
+    
+    public FetchFeatureTypeOperation(
+            JDBCHelper helper,
+            EditableFeatureType featureType,
+            String defaultGeometryColumn,
+            IProjection crs
+        ) {
+        this(helper, featureType, null, null, defaultGeometryColumn, crs, Geometry.TYPES.UNKNOWN, Geometry.SUBTYPES.UNKNOWN);
+    }
+
+    public FetchFeatureTypeOperation(
+            JDBCHelper helper,
+            EditableFeatureType featureType,
+            TableReference table,
+            List<String> primaryKeys,
+            String defaultGeometryColumn,
+            IProjection crs,
+            int geometryType,
+            int geometrySubtype
+        ) {
+        super(helper);
+        this.featureType = featureType;
+        this.table = table;
+        this.primaryKeys = primaryKeys;
+        this.defaultGeometryColumn = defaultGeometryColumn;
+        this.crs = crs;
+        this.geometryType = geometryType;
+        this.geometrySubtype = geometrySubtype;
+    }
+    
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        this.fetch(conn);
+        return true;
+    }
+    
+    protected TableReference getTable() {
+        return this.table;
+    }
+    
+    public void fetch(Connection conn) throws DataException {
+        List<String> pks = this.primaryKeys;
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            if (CollectionUtils.isEmpty(pks)) {
+                if (table.hasSubquery()) {
+                    LOGGER.debug("Searching pk in a table with a subquery ("+table.toString()+".");
+                }
+                pks = this.getPrimaryKeysFromMetadata(conn, null, table.getSchema(), table.getTable());
+                if (CollectionUtils.isEmpty(pks)) {
+                    pks = getPrimaryKeysFromInformationSchema(conn);
+                }
+            }
+            st = conn.createStatement();
+            st.setFetchSize(1);
+            rs = JDBCUtils.executeQuery(st, this.getSQLToRetrieveFirstRowOfTable());
+            ResultSetMetaData rsMetadata = rs.getMetaData();
+
+            fetchFeatureTypeFromMetadata(conn, rsMetadata, pks);
+
+        } catch (SQLException ex) {
+            throw new RuntimeException("Can't fecth feature type.",ex);
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+            JDBCUtils.closeQuietly(st);
+        }
+    }
+    
+    public String getSQLToRetrieveFirstRowOfTable() {
+      JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+      sqlbuilder.select().column().all();
+      sqlbuilder.select().from().table()
+          .database(this.table.getDatabase())
+          .schema(this.table.getSchema())
+          .name(this.table.getTable());
+//      sqlbuilder.select().from().subquery(this.table.getSubquery());
+      sqlbuilder.select().limit(1);
+
+      String sql = sqlbuilder.toString();
+      return sql;
+    }
+    
+    
+    public void fetchFeatureTypeFromMetadata(Connection conn, ResultSetMetaData rsMetadata) throws SQLException {
+        this.fetchFeatureTypeFromMetadata(conn, rsMetadata, new ArrayList<>());
+    }
+
+    protected void fetchFeatureTypeFromMetadata(Connection conn, ResultSetMetaData rsMetadata, List<String> pks) throws SQLException {
+        int i;
+        int geometriesColumns = 0;
+        String lastGeometry = null;
+
+        EditableFeatureAttributeDescriptor attr;
+        boolean firstGeometryAttrFound = false;
+        for (i = 1; i <= rsMetadata.getColumnCount(); i++) {
+            attr = getAttributeFromMetadata(featureType, conn, rsMetadata, i);
+            if ( isInPrimaryKeys(pks,attr) ) {
+                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 || StringUtils.equalsIgnoreCase(lastGeometry, defaultGeometryColumn)) {
+                    firstGeometryAttrFound = true;
+                    featureType.setDefaultGeometryAttributeName(lastGeometry);
+                }
+            }
+
+        }
+        if (StringUtils.isBlank(defaultGeometryColumn)) {
+            if (geometriesColumns == 1) {
+                featureType.setDefaultGeometryAttributeName(lastGeometry);
+            }
+        } else if (!StringUtils.equalsIgnoreCase(defaultGeometryColumn, featureType.getDefaultGeometryAttributeName())) {
+            EditableFeatureAttributeDescriptor geomattr = featureType.getEditableAttributeDescriptor(defaultGeometryColumn);
+            if (geomattr.getDataType().getType() != DataTypes.GEOMETRY) {
+                geomattr.setDataType(DataTypes.GEOMETRY);
+                geomattr.setGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
+            }
+            
+        }
+        
+        if (featureType.getDefaultGeometryAttribute() != null) {
+            EditableFeatureAttributeDescriptor attrGeom = (EditableFeatureAttributeDescriptor) featureType.getDefaultGeometryAttribute();
+            if (crs != null) {
+                attrGeom.setSRS(crs);
+            }
+            if (geometryType != Geometry.TYPES.UNKNOWN && geometrySubtype != Geometry.SUBTYPES.UNKNOWN) {
+                attrGeom.setGeometryType(geometryType, geometrySubtype);
+            } else if (geometryType != Geometry.TYPES.UNKNOWN) {
+                attrGeom.setGeometryType(geometryType, attrGeom.getGeomType().getSubType());
+            } else if (geometrySubtype != Geometry.SUBTYPES.UNKNOWN) {
+                attrGeom.setGeometryType(attrGeom.getGeomType().getType(), geometrySubtype);
+            }
+        }
+    }
+
+    protected boolean isInPrimaryKeys(List<String> pks, EditableFeatureAttributeDescriptor attr) {
+        if( pks == null || attr == null ) {
+            return false;
+        }
+        // En algunos gestores de BBDD, los nombres obtenidos de las pks de los 
+        // metadados no coinciden con los nombres de los campos ya que unos estan
+        // en mayusculas y otros en minusculas, asi que en lugar de usar un "contains"
+        // nos los recorremos y comparamos con IgnoreCase.
+        for (String pk : pks) {
+            if( StringUtils.equalsIgnoreCase(pk, attr.getName()) ) {
+                return true;
+            }
+        }
+        return false;        
+    }
+    
+    protected List<String> getPrimaryKeysFromMetadata(
+            Connection conn,
+            String catalog,
+            String schema,
+            String table) throws SQLException {
+
+        ResultSet rsPrimaryKeys = null;
+        ResultSet rs = null;
+        try {
+            DatabaseMetaData metadata = conn.getMetaData();
+            rs = metadata.getTables(catalog, schema, table, null);
+
+            if (!rs.next()) {
+                // No tables found with default values, ignoring catalog
+                rs.close();
+                catalog = null;
+                schema = null;
+                rs = metadata.getTables(catalog, schema, table, 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, table);
+            List pks = new ArrayList();
+            while (rsPrimaryKeys.next()) {
+                pks.add(rsPrimaryKeys.getString("COLUMN_NAME"));
+            }
+            return pks;
+
+        } catch (SQLException e) {
+            return null;
+
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+            JDBCUtils.closeQuietly(rsPrimaryKeys);
+        }
+
+    }
+
+    protected List<String> getPrimaryKeysFromInformationSchema(Connection conn) throws SQLException {
+
+        String sql = getSQLToRetrievePrimaryKeysFromInformationSchema();
+
+        Statement st = null;
+        ResultSet rs = null;
+        List<String> pks = new ArrayList();
+        try {
+            st = conn.createStatement();
+            rs = JDBCUtils.executeQuery(st, sql);
+            while (rs.next()) {
+                pks.add(rs.getString(1));
+            }
+            if (pks.isEmpty()) {
+                return null;
+            }
+            return pks;
+
+        } catch (Exception ex) {
+            return pks;
+            
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+            JDBCUtils.closeQuietly(st);
+        }
+    }
+
+    public String getSQLToRetrievePrimaryKeysFromInformationSchema() throws SQLException {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().name("COLUMN_NAME");
+        sqlbuilder.select().column().name("CONSTRAINT_TYPE");
+        sqlbuilder.select().from().custom(
+                "INFORMATION_SCHEMA.table_constraints t_cons "
+                + "inner join INFORMATION_SCHEMA.key_column_usage c on "
+                + "c.constraint_catalog = t_cons.constraint_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 "
+        );
+        sqlbuilder.select().where().set(
+                expbuilder.like(
+                        expbuilder.custom("c.TABLE_NAME"), 
+                        expbuilder.constant(table.getTable())
+                )
+        );
+        if( table.hasSchema() ) {
+            sqlbuilder.select().where().and(
+                    expbuilder.like(
+                            expbuilder.custom("c.TABLE_SCHEMA"),
+                            expbuilder.constant(table.getSchema())
+                    )
+            );
+        }
+//        if (catalog != null) {
+//            sqlbuilder.select().where().and(
+//                    expbuilder.like(
+//                            expbuilder.custom("c.CONSTRAINT_CATALOG"),
+//                            expbuilder.constant(catalog)
+//                    )
+//            );
+//        }
+        sqlbuilder.select().where().and(
+                expbuilder.eq(
+                        expbuilder.column("CONSTRAINT_TYPE"),
+                        expbuilder.constant("PRIMARY KEY")
+                )
+        );
+        return sqlbuilder.toString();
+    }
+    
+    
+    protected EditableFeatureAttributeDescriptor getAttributeFromMetadata(
+            EditableFeatureType type,
+            Connection conn,
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) throws SQLException {
+
+        EditableFeatureAttributeDescriptor attr = type.add(
+                rsMetadata.getColumnName(colIndex),
+                this.getDataTypeFromMetadata(rsMetadata, colIndex)
+        );
+        attr.setAllowNull(
+            rsMetadata.isNullable(colIndex) == ResultSetMetaData.columnNullable
+        );
+        attr.setIsAutomatic(rsMetadata.isAutoIncrement(colIndex));
+        attr.setIsReadOnly(rsMetadata.isReadOnly(colIndex));
+        switch(attr.getType()) {
+            case DataTypes.STRING:
+              attr.setSize(rsMetadata.getPrecision(colIndex));
+              attr.setPrecision(DataType.PRECISION_NONE);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.BYTE:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.BYTE_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.INT:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.INT_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.LONG:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.LONG_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.FLOAT:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.FLOAT_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.DOUBLE:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.DOUBLE_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.DECIMAL:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setScale(rsMetadata.getScale(colIndex));
+              attr.setPrecision(rsMetadata.getPrecision(colIndex));
+              break;
+            case DataTypes.OBJECT:
+                attr.setAdditionalInfo(
+                        "SQLType",
+                        String.valueOf(rsMetadata.getColumnType(colIndex))
+                );
+                attr.setAdditionalInfo(
+                        "SQLTypeName",
+                        rsMetadata.getColumnTypeName(colIndex)
+                );
+                break;
+            case DataTypes.GEOMETRY:
+                this.fetchGeometryTypeAndSRS(attr, rsMetadata, colIndex);
+                break;
+        }
+        IndexInformation indexInformation = this.getIndexesInformation(conn).get(attr.getName());
+        if( indexInformation!=null ) {
+            attr.setIsIndexed(true);
+            attr.setIsIndexAscending(indexInformation.ascending);
+//            attr.setIsIndexUnique(indexInformation.unique);
+        }
+        return attr;
+    }
+       
+    protected Map<String,IndexInformation> getIndexesInformation(
+            Connection conn
+        ) throws SQLException {
+        if( this.indexesInformation==null ) {
+            this.indexesInformation = new HashMap<>();
+            DatabaseMetaData metaData = conn.getMetaData();
+            if( metaData!=null ) {
+                ResultSet rsIndexes = metaData.getIndexInfo(null, this.table.getSchema(), this.table.getTable(), false, false);
+                if( rsIndexes!=null ) {
+                    while( rsIndexes.next() ) {
+                        IndexInformation x = new IndexInformation();
+                        x.column_name = rsIndexes.getString("COLUMN_NAME");
+                        String asc_or_desc = rsIndexes.getString("ASC_OR_DESC");
+                        // ASC_OR_DESC String => column sort sequence, 
+                        // "A" => ascending, 
+                        // "D" => descending, 
+                        // may be null if sort sequence is not supported; 
+                        // null when TYPE is tableIndexStatistic
+                        if( StringUtils.isNotBlank(asc_or_desc) ) {
+                            if( asc_or_desc.equalsIgnoreCase("A") ) {
+                                x.ascending = true;
+                            } else {
+                                x.ascending = false;
+                            }
+                        }
+                        x.unique = !rsIndexes.getBoolean("NON_UNIQUE");
+                        // NON_UNIQUE boolean => Can index values be non-unique. 
+                        // false when TYPE is tableIndexStatistic 
+                        this.indexesInformation.put(x.column_name, x);
+                    }
+                }
+            }
+        }
+        return this.indexesInformation;
+    }    
+
+    protected int getDataTypeFromMetadata(
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) throws SQLException {
+
+        switch (rsMetadata.getColumnType(colIndex)) {
+            case java.sql.Types.TINYINT:
+                return DataTypes.BYTE;
+
+            case java.sql.Types.SMALLINT:
+            case java.sql.Types.INTEGER:
+                return DataTypes.INT;
+
+            case java.sql.Types.BIGINT:
+                return DataTypes.LONG;
+
+            case java.sql.Types.REAL:
+            case java.sql.Types.FLOAT:
+                return DataTypes.FLOAT;
+
+            case java.sql.Types.DOUBLE:
+                return DataTypes.DOUBLE;
+
+            case java.sql.Types.NUMERIC:
+            case java.sql.Types.DECIMAL:
+                return DataTypes.DECIMAL;
+
+            case java.sql.Types.CHAR:
+            case java.sql.Types.VARCHAR:
+            case java.sql.Types.LONGVARCHAR:
+            case java.sql.Types.CLOB:
+                return DataTypes.STRING;
+
+            case java.sql.Types.DATE:
+                return DataTypes.DATE;
+
+            case java.sql.Types.TIME:
+                return DataTypes.TIME;
+
+            case java.sql.Types.TIMESTAMP:
+                return DataTypes.TIMESTAMP;
+
+            case java.sql.Types.BOOLEAN:
+            case java.sql.Types.BIT:
+                return DataTypes.BOOLEAN;
+
+            case java.sql.Types.BLOB:
+            case java.sql.Types.BINARY:
+            case java.sql.Types.LONGVARBINARY:
+                return DataTypes.BYTEARRAY;
+
+            default:
+                String typeName = rsMetadata.getColumnTypeName(colIndex);
+                if( "geometry".equalsIgnoreCase(typeName) ) {
+                    return DataTypes.GEOMETRY;
+                }
+                return DataTypes.OBJECT;
+        }
+    }
+
+    /**
+     * Inicializa el tipo, subtipo y SRS del attributo de tipo geometria.
+     * 
+     * @param attr
+     * @param rsMetadata
+     * @param colIndex 
+     */
+    protected void fetchGeometryTypeAndSRS(
+            EditableFeatureAttributeDescriptor attr,
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) {
+        if( attr.getType()!=DataTypes.GEOMETRY ) {
+            return;
+        }
+        try {
+            GeometryType geomType = GeometryLocator.getGeometryManager().getGeometryType(
+                    Geometry.TYPES.GEOMETRY,
+                    Geometry.SUBTYPES.GEOM2D
+            );
+            attr.setGeometryType(geomType);
+            attr.setSRS((IProjection)null);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get default geometry type.",ex);
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AppendOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AppendOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AppendOperation.java	(revision 46118)
@@ -0,0 +1,253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Collections;
+import java.util.List;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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.feature.exception.AlreadyEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.slf4j.LoggerFactory;
+
+
+public class AppendOperation {
+    protected static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(AppendOperation.class);
+    
+    protected Connection connection = null;
+    protected final JDBCHelper helper;
+    protected final TableReference table;
+    protected final FeatureType type;
+    
+    protected JDBCSQLBuilderBase sqlbuilder = null;
+    protected GeometryExpressionBuilder expbuilder;
+
+    protected PreparedStatement preparedStatement;
+    protected String insertSQL;
+    protected int batchCount;
+    private int batchSize; //No es final para facilitar la depuracion
+    private final Disposable[] disposableParameters;
+    
+    public AppendOperation(
+            JDBCHelper helper, 
+            TableReference table, 
+            FeatureType type
+        ) {
+        this.helper = helper;
+        this.table = table;
+        this.type = type;
+        this.batchSize = this.helper.getConnectionParameters().getBatchSize();
+        if( this.batchSize>0 ) {
+            this.disposableParameters = new Disposable[this.batchSize];
+        } else {
+            this.disposableParameters = null;
+        }
+    }
+    
+    public void begin() throws DataException {
+        if (this.sqlbuilder != null) {
+            throw new AlreadyEditingException(this.helper.getSourceId());
+        }
+
+        try {
+            this.connection = this.helper.getConnectionWritable();
+            
+            this.sqlbuilder = this.helper.createSQLBuilder();
+            this.expbuilder = this.sqlbuilder.expression();
+
+            this.sqlbuilder.insert().table()
+                    .database(this.table.getDatabase())
+                    .schema(this.table.getSchema())
+                    .name(this.table.getTable()
+            );
+            for (FeatureAttributeDescriptor attr : type) {
+                if( attr.isAutomatic() || attr.isComputed() ) {
+                    continue;
+                }
+                if (attr.getType() == DataTypes.GEOMETRY) {
+                        this.sqlbuilder.insert().column().name(attr.getName()).with_value( 
+                            expbuilder.parameter(attr.getName()).as_geometry_variable().srs( 
+                                    expbuilder.parameter().value(attr.getSRS()) 
+                            ) 
+                        );
+                    } else {
+                        this.sqlbuilder.insert().column().name(attr.getName()).with_value(
+                        expbuilder.parameter(attr.getName()).as_variable()
+                    );
+                }
+            }
+
+            this.insertSQL = this.sqlbuilder.insert().toString();
+            if( this.connection != null ) { // Not in test mode ???
+              this.preparedStatement = this.connection.prepareStatement(insertSQL);
+              this.connection.setAutoCommit(false);
+              for (String sql : this.getPreviousSQLs()) {
+                JDBCUtils.execute(this.connection, sql);
+              }
+            }
+            
+        } catch (SQLException ex) {
+            throw new JDBCPreparingSQLException(this.sqlbuilder.toString(),ex);
+        }
+
+    }
+    
+    protected void clean() {
+        if( this.batchCount > 0 ) {
+            this.clearBatch();
+        }
+        JDBCUtils.closeQuietly(this.preparedStatement);
+        this.helper.closeConnection(this.connection);
+        this.connection = null;
+        this.preparedStatement = null;
+        this.sqlbuilder = null;
+        this.insertSQL = null;        
+    }
+    
+    public void end() {
+        try {
+            if( this.connection == null ) {
+              return; // In test mode ???
+            }
+            if( this.batchCount > 0 ) {
+                this.executeBatch();
+            }
+            this.connection.commit();
+            for (String sql : this.getPostSQLs()) {
+              JDBCUtils.execute(this.connection, sql);
+            }
+        } catch (SQLException ex) {
+            try {
+                this.connection.rollback();
+            } catch (SQLException ex1) {
+            }
+            throw new RuntimeException("Can't commit transaction", ex);
+        } finally {
+            clean();
+        }
+    }
+    
+    public void abort() {        
+        try {
+            if( this.connection == null ) {
+              return; // In test mode ???
+            }
+            if( this.batchCount > 0 ) {
+                this.clearBatch();
+            }
+            this.connection.rollback();
+            for (String sql : this.getPostSQLs()) {
+              JDBCUtils.execute(this.connection, sql);
+            }
+        } catch (SQLException ex) {
+        } finally {
+          clean();
+        }
+    }
+
+    public String getSQL() { // For test
+      return this.insertSQL;
+    }
+    
+    public List<String> getPreviousSQLs() {
+      return Collections.EMPTY_LIST;
+    }
+    
+    public List<String> getPostSQLs() {
+      return Collections.EMPTY_LIST;
+    }    
+    
+    public List<Object> getSQLParameters(FeatureProvider feature) {
+      return this.sqlbuilder.getParameters(feature);
+    }
+    
+    @SuppressWarnings("UseSpecificCatch")
+    public void append(FeatureProvider feature) throws DataException {
+        try {
+            if( this.batchSize>0 ) {
+                this.addBatch(feature);
+                if( this.batchCount >= this.batchSize ) {
+                    this.executeBatch();
+                }
+            } else {
+                Disposable theParametersDisposable = null;
+                try {
+                    theParametersDisposable = this.sqlbuilder.setParameters(this.preparedStatement, feature);
+                    int n = JDBCUtils.executeUpdate(this.preparedStatement,this.insertSQL);
+                    if( n<1 ) {
+                        throw new RuntimeException("Can't insert feature (n="+n+").");
+                    }
+                } finally {
+                    DisposeUtils.disposeQuietly(theParametersDisposable);
+                }
+            }
+        } catch(Exception ex) {
+            throw new RuntimeException("Can't insert feature.", ex);
+        }
+    }
+    
+    private void addBatch(FeatureProvider feature) throws SQLException {
+        Disposable theParametersDisposable = this.sqlbuilder.setParameters(this.preparedStatement, feature);
+        JDBCUtils.addBatch(this.preparedStatement,this.insertSQL);
+        this.disposableParameters[this.batchCount++] = theParametersDisposable;
+    }
+    
+    private void executeBatch() throws SQLException {
+        int[] status = JDBCUtils.executeBatch(this.preparedStatement,this.insertSQL);
+        this.clearBatch();
+        for (int n : status) {
+            if( n<=Statement.EXECUTE_FAILED ) { //-3
+                throw new RuntimeException("Can't insert feature (n="+n+").");
+            }
+        }
+    }
+
+    private void clearBatch() {
+        try {
+            this.preparedStatement.clearParameters();
+            this.preparedStatement.clearBatch();
+            for (int i = 0; i < this.batchCount && i < this.disposableParameters.length; i++) {
+                DisposeUtils.dispose(this.disposableParameters[i]);
+                this.disposableParameters[i] = null;
+            }
+            this.batchCount = 0;
+        } catch (SQLException ex) {
+            LOGGER.warn("Can't clear batch statement", ex);
+        }
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdatePassThroughOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdatePassThroughOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/UpdatePassThroughOperation.java	(revision 46118)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.Statement;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+
+public class UpdatePassThroughOperation extends AbstractConnectionOperation {
+
+    private final Object[] parameters;
+    private final Expression filter;
+    private final TableReference table;
+
+    
+    public UpdatePassThroughOperation(
+            JDBCHelper helper,
+            TableReference table,
+            Object[] parameters, 
+            Expression filter
+        ) {
+        super(helper);
+        this.table = table;
+        this.parameters = parameters;
+        this.filter = filter;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return execute(this.table, this.parameters, this.filter);
+    }
+
+    public Object execute(
+        TableReference table,
+        Object[] parameters, 
+        Expression filter
+    ) {
+        Statement st = null;
+        String sql = getSQL(table, parameters, filter);
+        try {
+            st = this.getConnection().createStatement();
+            JDBCUtils.executeUpdate(st, sql);
+            JDBCUtils.closeQuietly(st);
+            return null;
+        } catch (Exception ex) {
+            JDBCUtils.closeQuietly(st);
+            throw new RuntimeException("Can't execute query ["+sql+"].",ex);
+        }
+    }
+
+    public String getSQL(
+            TableReference table,
+            Object[] parameters, 
+            Expression filter) {
+        
+        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+
+        sqlbuilder.update().table()
+            .database(this.table.getDatabase())
+            .schema(this.table.getSchema())
+            .name(this.table.getTable());
+        
+        
+        for (int i = 0; i < parameters.length-1; i+=2){
+            String field = (String) parameters[i];
+            sqlbuilder.update().column().name(field).with_value(sqlbuilder.expression().constant(parameters[i+1]));
+        }
+        
+        if(filter != null ){
+            sqlbuilder.update().where().set(filter.getCode().toValue());
+        }
+        
+        String sql = sqlbuilder.update().toString();
+        return sql;
+
+        
+        
+        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CreateTableOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CreateTableOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CreateTableOperation.java	(revision 46118)
@@ -0,0 +1,183 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.SQLBuilder;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.geom.DataTypes;
+
+public class CreateTableOperation extends AbstractConnectionWritableOperation {
+
+    protected final TableReference table;
+    protected FeatureType type;
+    private final List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges;
+    private final List<String> additionalSQLs;
+
+    public CreateTableOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null, null, null, null);
+    }
+    
+    public CreateTableOperation(
+            JDBCHelper helper,
+            TableReference table,
+            FeatureType type,
+            List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges,
+            List<String> additionalSQLs
+        ) {
+        super(helper);
+        this.table = table;
+        this.type = type;
+        this.userAndPrivileges = userAndPrivileges;
+        this.additionalSQLs = additionalSQLs;
+    }
+
+    public FeatureType getType() {
+        return type;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return this.performCreateTable(conn);
+    }
+
+    protected List<String> buildCreateIndexesSQL(
+            TableReference table,
+            FeatureType type
+        ) {
+        ArrayList<String> sqls = new ArrayList<>();
+        
+        for (FeatureAttributeDescriptor attr : type) {
+            if( attr.isIndexed() ) {
+                JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
+                if( attr.getType()==org.gvsig.fmap.dal.DataTypes.GEOMETRY ) {
+                    sqlbuilder.create_index().spatial();
+                }
+                sqlbuilder.create_index().if_not_exist();
+                sqlbuilder.create_index().name("idx_" + table.toString().replace(".", "_") + "_" + attr.getName());
+                sqlbuilder.create_index().column(attr.getName());
+                sqlbuilder.create_index().table()
+                        .database(this.table.getDatabase())
+                        .schema(this.table.getSchema())
+                        .name(this.table.getTable()
+                );
+                if(!attr.allowIndexDuplicateds()){
+                    sqlbuilder.create_index().unique();
+                }
+                sqls.addAll(sqlbuilder.create_index().toStrings());
+            }
+        }
+        return sqls;
+    }
+    
+    public List<String> getSQLs() throws DataException {
+
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        sqlbuilder.create_table().table()
+                .database(table.getDatabase())
+                .schema(table.getSchema())
+                .name(table.getTable());
+        for (FeatureAttributeDescriptor attr : type) {
+            if( attr.isComputed() ) {
+                continue;
+            }
+            if( attr.getType()==DataTypes.GEOMETRY ) {
+                sqlbuilder.create_table().add_geometry_column(
+                        attr.getName(),
+                        attr.getGeomType().getType(),
+                        attr.getGeomType().getSubType(),
+                        attr.getSRS(),
+                        attr.isIndexed(),
+                        attr.allowNull()
+                );
+            } else {
+                Object defaultValue = attr.getDefaultValue();
+                if( defaultValue instanceof CharSequence ) {
+                    if( ExpressionUtils.isDynamicText(defaultValue.toString())) {
+                        defaultValue = null;
+                    }
+                }
+                sqlbuilder.create_table().add_column(
+                        attr.getName(),
+                        attr.getType(),
+                        attr.getSize(),
+                        attr.getPrecision(),
+                        attr.getScale(),
+                        attr.isPrimaryKey(),
+                        attr.isIndexed(),
+                        attr.allowNull(),
+                        attr.isAutomatic(),
+                        defaultValue
+                );
+            }
+        }
+        if( userAndPrivileges!=null ) {
+          for (Pair<String, SQLBuilder.Privilege> roleAndPrivilege : userAndPrivileges) {
+              sqlbuilder.grant().role(roleAndPrivilege.getLeft()).privilege(roleAndPrivilege.getRight());
+          }
+        }
+
+        List<String> sqls;
+        sqls = sqlbuilder.create_table().toStrings();
+        sqls.addAll(buildCreateIndexesSQL(this.table,type));
+        sqls.addAll(sqlbuilder.grant().toStrings());
+        if( additionalSQLs!=null ) {
+          sqls.addAll(additionalSQLs);
+        }
+        
+        return sqls;
+    }
+    
+    public boolean performCreateTable(Connection conn) throws DataException {
+      
+        List<String> sqls = this.getSQLs();
+        Statement st = null;
+        try {
+            st = conn.createStatement();
+            for (String sql : sqls) {
+                JDBCUtils.execute(st, sql);
+            }
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+        }
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DropTableOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DropTableOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/DropTableOperation.java	(revision 46118)
@@ -0,0 +1,85 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+
+public class DropTableOperation extends AbstractConnectionWritableOperation {
+
+    protected final TableReference table;
+
+    public DropTableOperation(
+            JDBCHelper helper
+    ) {
+        this(helper, null);
+    }
+
+    public DropTableOperation(
+            JDBCHelper helper,
+            TableReference table
+    ) {
+        super(helper);
+        this.table = table;
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        this.dropTable(conn);
+        return true;
+    }
+
+    public List<String> getSQLs() {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+        sqlbuilder.drop_table().table()
+                .database(this.table.getDatabase())
+                .schema(this.table.getSchema())
+                .name(this.table.getTable());
+      List<String> sqls = sqlbuilder.drop_table().toStrings();
+      return sqls;      
+    }
+    
+    public void dropTable(Connection conn) throws DataException {
+
+        Statement st = null;
+        try {
+            st = conn.createStatement();
+            for (String sql : this.getSQLs()) {
+                JDBCUtils.execute(st, sql);
+            }
+        } catch (SQLException ex) {
+            throw new JDBCSQLException(ex);
+        } finally {
+            JDBCUtils.closeQuietly(st);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionWritableOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionWritableOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionWritableOperation.java	(revision 46118)
@@ -0,0 +1,45 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+
+
+public abstract class AbstractConnectionWritableOperation extends AbstractConnectionOperation {
+
+    public AbstractConnectionWritableOperation(JDBCHelper helper) {
+        super(helper);
+    }
+    
+    @Override
+    protected Connection getConnection() throws AccessResourceException {
+        if( this.conn == null ) {
+            this.conn = this.helper.getConnectionWritable();
+        }
+        return this.conn;  
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanCreateTablesOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanCreateTablesOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanCreateTablesOperation.java	(revision 46118)
@@ -0,0 +1,56 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCCantFetchMetadata;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+
+
+public class CanCreateTablesOperation extends AbstractConnectionOperation {
+
+    public CanCreateTablesOperation(JDBCHelper helper) {
+        super(helper);
+    }
+
+    @Override
+    public final Object perform(Connection conn) throws DataException {
+        return canCreateTables(conn);
+    }
+    
+    public boolean canCreateTables(
+            Connection conn
+        ) throws JDBCCantFetchMetadata {
+        try {
+            DatabaseMetaData metadata = conn.getMetaData();
+            boolean readonly = metadata.isReadOnly();
+            return !readonly;
+        } catch (SQLException ex) {
+            throw new JDBCCantFetchMetadata(ex);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanModifyTableOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanModifyTableOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/CanModifyTableOperation.java	(revision 46118)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+
+public class CanModifyTableOperation extends AbstractConnectionOperation {
+
+    private final TableReference table;
+
+    public CanModifyTableOperation(
+            JDBCHelper helper
+        ) {
+        this(helper, null);
+    }
+
+    public CanModifyTableOperation(
+            JDBCHelper helper,
+            TableReference table
+        ) {
+        super(helper);
+        this.table = table;
+    }
+
+    @Override
+    public Object perform(Connection conn) throws DataException {
+        return this.canModifyTable(conn,table);
+    }
+
+    public boolean canModifyTable(Connection conn,TableReference table) throws DataException {
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/AbstractConnectionOperation.java	(revision 46118)
@@ -0,0 +1,160 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCTransactionRollbackException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractConnectionOperation implements ConnectionOperation {
+
+    final static protected Logger LOGGER = LoggerFactory.getLogger(AbstractConnectionOperation.class);
+
+    final protected JDBCHelper helper;
+    
+    protected Connection conn = null;
+
+    public AbstractConnectionOperation(JDBCHelper helper) {
+        this.helper = helper;
+    }
+
+    @Override
+    public boolean continueTransactionAllowed() {
+        return false;
+    }
+
+    @Override
+    public boolean needTransaction() {
+        return true;
+    }
+
+    protected JDBCSQLBuilderBase createSQLBuilder() {
+        return this.helper.createSQLBuilder();
+    }
+
+    @Override
+    public Object perform()  {
+        try {
+            if( this.helper.isThreadSafe() ) {
+                return this.perform_operation();
+            } 
+            synchronized(AbstractConnectionOperation.class) {
+                return this.perform_operation();
+            }
+        } catch (RuntimeException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't perform operation '"+this.getClass().getSimpleName()+"'.",ex);
+        }
+    }
+
+    protected Connection getConnection() throws AccessResourceException {
+        if( this.conn == null ) {
+            this.conn = this.helper.getConnection();
+        }
+        return this.conn;
+    }
+    
+    protected Object perform_operation() throws Exception {
+        Object result = null;
+        LOGGER.trace("preparing execution of "+this.getClass().getSimpleName()+".");
+        if( needTransaction() ) {
+            try {
+                if( this.helper.allowNestedOperations() ) {
+                    boolean commitOnFinish = true;
+                    if (!this.getConnection().getAutoCommit()) {
+                        // Casi seguro que es una operacion anidada, asi que no
+                        // terminamos la transaccion.
+                        commitOnFinish = false;
+                    } 
+                    this.getConnection().setAutoCommit(false);
+                    try {
+                        LOGGER.trace("Excuting operation {}.", this.getClass().getSimpleName());
+                        result = perform(this.getConnection());
+                    } catch (Exception ex) {
+                        try {
+                            this.getConnection().rollback();
+                        } catch (Exception e1) {
+                            throw new JDBCTransactionRollbackException(e1, ex);
+                        }
+                        throw new RuntimeException("Can't perform operation '"+this.getClass().getSimpleName()+"'.",ex);
+                    }
+                    if( commitOnFinish ) {
+                        this.getConnection().commit();
+                        this.getConnection().setAutoCommit(true);
+                    }
+                } else {
+                    if (!this.getConnection().getAutoCommit()) {
+                        // Casi seguro que es una transaccion anidada, si no
+                        // esta permitido, petamos.
+                        if (!continueTransactionAllowed()) {
+                            throw new SQLException("nested operations not allowed.");
+                        }
+                    }
+                    this.getConnection().setAutoCommit(false);
+                    try {
+                        LOGGER.trace("Excuting operation {}.", this.getClass().getSimpleName());
+                        result = perform(this.getConnection());
+                    } catch (Exception ex) {
+                        try {
+                            this.getConnection().rollback();
+                        } catch (Exception e1) {
+                            throw new JDBCTransactionRollbackException(e1, ex);
+                        }
+                        throw new RuntimeException("Can't perform operation '"+this.getClass().getSimpleName()+"'.",ex);
+                    }
+                    this.getConnection().commit();
+                }
+            } finally {
+                closeConnection(result);
+            }
+        } else {
+            try {
+                LOGGER.trace("Excuting operation {}.", this.getClass().getSimpleName());
+                result = perform(this.getConnection());
+            } catch (Exception ex) {
+                throw new RuntimeException("Can't perform operation '"+this.getClass().getSimpleName()+"'.",ex);
+            } finally {
+                closeConnection(result);
+            }
+        }
+        return result;
+    }
+    
+    /**
+     * 
+     * @param result the result of the operation recently executed
+     * @throws Exception
+     */
+    protected void closeConnection(Object result) throws Exception {
+        helper.closeConnection(this.getConnection());
+        conn = null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/OperationsFactoryBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/OperationsFactoryBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations/OperationsFactoryBase.java	(revision 46118)
@@ -0,0 +1,339 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi.operations;
+
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public class OperationsFactoryBase implements OperationsFactory {
+
+    public static class DefaultTableReference implements TableReference {
+
+        private final String database;
+        private final String schema;
+        private final String table;
+        private final String subquery;
+
+        public DefaultTableReference(String database, String schema, String table, String subquery) {
+            this.database = StringUtils.defaultIfBlank(database, null);
+            this.schema = StringUtils.defaultIfBlank(schema, null);
+            this.table = StringUtils.defaultIfBlank(table, null);
+            this.subquery = StringUtils.defaultIfBlank(subquery, null);
+        }
+        
+        @Override
+        public String getDatabase() {
+            return this.database;
+        }
+
+        @Override
+        public String getSchema() {
+            return this.schema;
+        }
+
+        @Override
+        public String getTable() {
+            return this.table;
+        }
+
+        @Override
+        public String getSubquery() {
+            return this.subquery;
+        }
+
+        @Override
+        public boolean hasDatabase() {
+            return this.database != null;
+        }
+        
+        @Override
+        public boolean hasSchema() {
+            return this.schema != null;
+        }
+        
+        @Override
+        public boolean hasTable() {
+            return this.table != null;
+        }
+        
+        @Override
+        public boolean hasSubquery() {
+            return this.subquery != null;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            if( this.hasDatabase() ) {
+                builder.append(this.database);
+                builder.append(".");
+            }
+            if( this.hasSchema()) {
+                builder.append(this.schema);
+                builder.append(".");
+            }
+            builder.append(this.table);
+            if( this.hasSubquery() ) {
+                builder.append("[");
+                builder.append(this.subquery);
+                builder.append("]");
+            }
+            return builder.toString();
+        }
+        
+        
+    }
+    
+    protected final JDBCHelper helper;
+
+    public OperationsFactoryBase(JDBCHelper helper) {
+        this.helper = helper;
+    }
+
+    @Override
+    public TableReference createTableReference(JDBCStoreParameters params) {
+        TableReference t = new DefaultTableReference(
+                params.getDBName(),
+                params.getSchema(),
+                params.getTable(),
+                params.getSQL()
+        );
+        return t;
+    }
+
+    @Override
+    public TableReference createTableReference(JDBCNewStoreParameters params) {
+        TableReference t = new DefaultTableReference(
+                params.getDBName(),
+                params.getSchema(),
+                params.getTable(),
+                null
+        );
+        return t;
+    }
+
+    @Override
+    public TableReference createTableReference(String database, String schema, String table, String subquery) {
+        TableReference t = new DefaultTableReference(database, schema, table, subquery);
+        return t;
+    }
+
+    
+    @Override
+    public FetchFeatureTypeOperation createFetchFeatureType(
+            EditableFeatureType type, 
+            TableReference table, 
+            List<String> primaryKeys, 
+            String defaultGeometryField, 
+            IProjection crs
+        ) {
+        return createFetchFeatureType(type, table, primaryKeys, defaultGeometryField, crs, -1, -1);
+    }
+    
+    @Override
+    public FetchFeatureTypeOperation createFetchFeatureType(
+            EditableFeatureType type, 
+            TableReference table, 
+            List<String> primaryKeys, 
+            String defaultGeometryField, 
+            IProjection crs,
+            int geometryType,
+            int geometrySubtype
+        ) {
+        return new FetchFeatureTypeOperation(helper, type, table, 
+                primaryKeys, defaultGeometryField, crs, geometryType, geometrySubtype);
+    }
+    
+    @Override
+    public FetchFeatureProviderByReferenceOperation createFetchFeatureProviderByReference(
+            FeatureReferenceProviderServices reference, 
+            FeatureType featureType, 
+            TableReference table
+        ) {
+        return new FetchFeatureProviderByReferenceOperation(helper, reference, 
+                featureType, table);
+    }
+
+    @Override
+    public CalculateEnvelopeOfColumnOperation createCalculateEnvelopeOfColumn(
+            FeatureType featureType,
+            TableReference table, 
+            String columnName, 
+            String baseFilter, 
+            Envelope workingArea, 
+            IProjection crs
+        ) {
+        return new CalculateEnvelopeOfColumnOperation(helper, 
+                featureType, table, columnName, baseFilter, workingArea, crs);
+    }
+
+    @Override
+    public PerformChangesOperation createPerformChanges(
+            TableReference table, 
+            FeatureType type, 
+            Iterator deleteds, 
+            Iterator inserteds, 
+            Iterator updateds, 
+            Iterator featureTypesChanged
+        ) {
+        return new PerformChangesOperation(helper, table, type, 
+                deleteds, inserteds, updateds, featureTypesChanged);
+    }
+
+    @Override
+    public AppendOperation createAppend(
+            TableReference table, 
+            FeatureType type
+        ) {
+        return new AppendOperation(helper, table, type);
+    }
+
+    @Override
+    public CountOperation createCount(
+            FeatureType featureType,
+            TableReference table, 
+            String baseFilter, 
+            FeatureQuery query
+        ) {
+        return new CountOperation(helper, featureType, table, baseFilter, query);
+    }
+
+    @Override
+    public TableIsEmptyOperation createTableIsEmpty(
+            FeatureType featureType,
+            TableReference table,
+            String baseFilter, 
+            FeatureQuery query
+        ) {
+        return new TableIsEmptyOperation(helper, featureType, table, baseFilter, query);
+    }
+
+    @Override
+    public ResultSetForSetProviderOperation createResultSetForSetProvider(
+            TableReference table, 
+            String baseFilter, 
+            String baseOrder, 
+            FeatureQuery query, 
+            FeatureType storeType, 
+            FeatureType setType, 
+            long limit, 
+            long offset, 
+            int fetchSize
+        ) {
+        return new ResultSetForSetProviderOperation(helper, table, 
+                baseFilter, baseOrder, query, storeType, setType, 
+                limit, offset, fetchSize);
+    }
+
+    @Override
+    public ListTablesOperation createListTables(
+            int mode,
+            JDBCServerExplorerParameters baseParameters, 
+            boolean informationTables,
+            int tablesOrViews
+        ) {
+        return new ListTablesOperation(
+                helper, mode, baseParameters, informationTables, tablesOrViews );
+    }
+    
+    @Override
+    public DropTableOperation createDropTable( 
+            TableReference tableName            
+        ) {
+        return new DropTableOperation(helper, tableName);
+    }
+    
+    @Override
+    public CreateTableOperation createTable(
+            TableReference table, 
+            FeatureType type, 
+            List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges, 
+            List<String> additionalSQLs
+        ) throws DataException {
+        return new CreateTableOperation(
+                helper, table, type, 
+                userAndPrivileges, additionalSQLs
+        );
+    }
+
+    @Override
+    public CanCreateTablesOperation createCanCreateTables() {
+        return new CanCreateTablesOperation(helper);
+    }
+
+    @Override
+    public UpdateTableStatisticsOperation createUpdateTableStatistics(
+            TableReference table
+        ) {
+        return new UpdateTableStatisticsOperation(helper, table);
+    }
+    
+    @Override
+    public CanModifyTableOperation createCanModifyTableOperation(
+            TableReference table
+        ) {
+        return new CanModifyTableOperation(helper, table);
+    }
+    
+    @Override
+    public ExecuteOperation createExecute(String sql) {
+        return new ExecuteOperation(helper, sql);
+    }
+
+    @Override
+    public UpdatePassThroughOperation createUpdatePassThroughOperation(
+        TableReference table,
+        Object[] parameters, 
+        Expression filter
+    ) {
+        return new UpdatePassThroughOperation(helper, table, parameters, filter);
+    }
+
+    @Override
+    public DeletePassThroughOperation createDeletePassThroughOperation(
+            TableReference table, 
+            Expression filter
+    ) {
+        return new DeletePassThroughOperation(helper, table, filter);
+    }
+
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/operations
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCServerExplorerBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCServerExplorerBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/JDBCServerExplorerBase.java	(revision 46118)
@@ -0,0 +1,952 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import org.gvsig.tools.resourcesstorage.CompoundResourcesStorage;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.collections.map.LRUMap;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.DatabaseWorkspaceManager;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_CONFIGURATION_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_CONFIGURATION_VALUE;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_CONFIGURATION_NAME;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.Privilege;
+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.RemoveException;
+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.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.serverexplorer.db.spi.AbstractDBServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CanCreateTablesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CreateTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.DropTableOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ExecuteOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ListTablesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdateTableStatisticsOperation;
+import org.gvsig.json.Json;
+import org.gvsig.json.JsonObjectBuilder;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.resourcesstorage.EmptyResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.CachedValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class JDBCServerExplorerBase extends AbstractDBServerExplorer implements JDBCServerExplorer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(JDBCServerExplorerBase.class);
+    private static final String CONFIG_NAME_CUSTOM_RESOURCES = "CUSTOM_RESOURCES";
+
+    protected JDBCHelper helper = null;
+
+    private Boolean canAdd;
+
+    private static final Map<String, CachedValue<List<JDBCStoreParameters>>> CACHED_TABLES = Collections.synchronizedMap(new LRUMap(10));
+    private static final Map<String, CachedValue<CustomResourcesConfig>> CACHED_CUSTOM_RESOURCES_CONFIG = Collections.synchronizedMap(new LRUMap(10));
+
+    private static class CustomResourcesConfig {
+
+        private static final String CUSTOM_RESOURCES_CACHETIME = "CacheTime";
+        private static final String CUSTOM_RESOURCES_MAPPING = "Mapping";
+        private static final String CUSTOM_RESOURCES_READONLY = "ResourcesReadonly";
+
+
+        private int cacheTime;
+        private Map<String, String> mapping;
+        private Map<String,Boolean> resourcesReadonly;
+        
+        public CustomResourcesConfig(String jsonConfig) {
+            this.cacheTime = 30*60*1000; // 30min
+            this.mapping = new HashMap<>();
+            this.resourcesReadonly = new HashMap<>();
+            
+            if (StringUtils.isNotBlank(jsonConfig)) {
+                try {
+                    JsonObject config = Json.createObject(jsonConfig);
+                    this.cacheTime = config.getInt(CUSTOM_RESOURCES_CACHETIME, this.cacheTime);
+                    if (config.containsKey(CUSTOM_RESOURCES_MAPPING)) {
+                        JsonObject m = config.getJsonObject(CUSTOM_RESOURCES_MAPPING);
+                        for (Map.Entry<String, JsonValue> entry : m.entrySet()) {
+                            String key = entry.getKey();
+                            JsonValue value = entry.getValue();
+                            if (value instanceof JsonString) {
+                                this.mapping.put(key, ((JsonString) value).getString());
+                            }
+                        }
+                    }
+                    if (config.containsKey(CUSTOM_RESOURCES_READONLY)) {
+                        JsonObject resreadonly = config.getJsonObject(CUSTOM_RESOURCES_READONLY);
+                        for (Map.Entry<String, JsonValue> entry : resreadonly.entrySet()) {
+                            String key = entry.getKey();
+                            JsonValue value = entry.getValue();
+                            if (value == JsonValue.TRUE) {
+                                this.resourcesReadonly.put(key, true);
+                            } else if (value == JsonValue.FALSE) {
+                                this.resourcesReadonly.put(key, false);
+                            }
+                        }
+                    }
+                } catch (Exception ex) {
+                    LOG.debug("Can't parse json from "+CONFIG_NAME_CUSTOM_RESOURCES+" variable", ex);
+                    // Do nothing.
+                }
+            }
+        }
+
+        public String toJsonString() {
+            JsonObjectBuilder builder = Json.createObjectBuilder();
+            builder.add(CUSTOM_RESOURCES_CACHETIME, this.cacheTime);
+            JsonObjectBuilder m = Json.createObjectBuilder();
+            for (Map.Entry<String, String> entry : this.mapping.entrySet()) {
+                String key = entry.getKey();
+                String value = entry.getValue();
+                m.add(key, value);
+            }
+            builder.add(CUSTOM_RESOURCES_MAPPING, m);
+            JsonObjectBuilder resreadonly = Json.createObjectBuilder();
+            for (Map.Entry<String, Boolean> entry : this.resourcesReadonly.entrySet()) {
+                String key = entry.getKey();
+                Boolean readonly = entry.getValue();
+                resreadonly.add(key,readonly);
+            }
+            builder.add(CUSTOM_RESOURCES_READONLY, resreadonly);
+            return builder.build().toString();
+        }
+
+        public int getCacheExpireTimeInMillis() {
+            return cacheTime;
+        }
+
+        public String getResourcesTablename(String tablename) {
+            String resourceTablename = mapping.get(tablename);
+//            LOG.info("Resource of table "+tablename+" = "+resourceTablename);
+            return resourceTablename;
+        }
+
+        public void addResourceMapping(String tablename, String resourcesTablename) {
+            this.mapping.put(tablename, resourcesTablename);
+        }
+
+        private boolean isInternalTable(String storeName) {
+            if (DatabaseWorkspaceManager.isInternalTable(storeName)) {
+                return true;
+            }
+            for (String resourcesTablename : this.mapping.values()) {
+                if( StringUtils.equals(storeName, resourcesTablename) ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public void setResourcesReadOnly(String resourcesTableName, boolean readonly) {
+            this.resourcesReadonly.put(resourcesTableName,readonly);
+        }
+        
+        public boolean isResourcesReadOnly(String resourcesTableName) {
+            return this.resourcesReadonly.getOrDefault(resourcesTableName,false);
+        }
+    }
+    
+    private static class CachedCustomResourcesConfig extends CachedValue<CustomResourcesConfig> {
+
+        private final JDBCStoreParameters openParameters;
+
+        private CachedCustomResourcesConfig(JDBCStoreParameters openParameters) {
+            this.openParameters = openParameters;
+            this.setExpireTime(30*60*1000); // 30min
+        }
+
+        @Override
+        protected void reload() {
+            String jsonConfig = getConfigValue(this.openParameters, CONFIG_NAME_CUSTOM_RESOURCES);
+            CustomResourcesConfig config = new CustomResourcesConfig(jsonConfig);        
+            this.setExpireTime(config.getCacheExpireTimeInMillis());
+            this.setValue(config);
+        }
+        
+    }
+
+    private static class CachedTablesValue extends CachedValue<List<JDBCStoreParameters>> {
+
+        private final int mode;
+        private final JDBCServerExplorerParameters serverParameters;
+        private final boolean informationTables;
+        private JDBCHelper helper;
+        private final int tablesOrViews;
+
+        public CachedTablesValue(JDBCHelper helper, int mode, JDBCServerExplorerParameters serverParameters, boolean informationTables, int tablesOrViews) {
+            this.mode = mode;
+            this.serverParameters = serverParameters;
+            this.informationTables = informationTables;
+            this.helper = helper;
+            this.tablesOrViews = tablesOrViews;
+        }
+
+        public CachedTablesValue(JDBCHelper helper, int mode, JDBCServerExplorerParameters serverParameters, boolean informationTables, long expireTime, int tablesOrViews) {
+            this.mode = mode;
+            this.setExpireTime(expireTime);
+            this.serverParameters = serverParameters;
+            this.informationTables = informationTables;
+            this.helper = helper;
+            this.tablesOrViews = tablesOrViews;
+        }
+
+        @Override
+        protected void reload() {
+            List<JDBCStoreParameters> tables = null;
+            if(helper == null){
+                this.setValue(tables);
+                return;
+            }
+            OperationsFactory operations = helper.getOperations();
+            if (operations == null) {
+                this.setValue(null);
+                LOG.debug("Sets tables to null to force reload tables from new ServerExplorar.");
+                return;
+            }
+            try {
+                ListTablesOperation listTables = operations.createListTables(
+                        this.mode, serverParameters, informationTables, tablesOrViews
+                );
+                tables = (List<JDBCStoreParameters>) listTables.perform();
+            } catch (Exception ex) {
+                LOG.debug("Can't reload cached list of tables.", ex);
+            }
+            this.setValue(tables);
+        }
+        
+        public JDBCHelper getHelper(){
+            return this.helper;
+        }
+        
+        public void dispose() {
+            this.helper = null;
+        }
+    }
+
+    public JDBCServerExplorerBase(
+            JDBCServerExplorerParameters parameters,
+            DataServerExplorerProviderServices services,
+            JDBCHelper helper
+    ) throws InitializeException {
+        super(parameters, services);
+        this.helper = helper;
+    }
+
+    @Override
+    public String getProviderName() {
+        return this.getHelper().getProviderName();
+    }
+
+    @Override
+    public String getStoreName() {
+        return this.getHelper().getProviderName();
+    }
+
+    protected DataManagerProviderServices getManager() {
+        return (DataManagerProviderServices) DALLocator.getDataManager();
+    }
+
+    @Override
+    public JDBCServerExplorerParameters getParameters() {
+        return (JDBCServerExplorerParameters) super.getParameters();
+    }
+
+    @Override
+    public boolean closeResourceRequested(ResourceProvider resource) {
+        this.getHelper().getResulSetControler().pack();
+        return true;
+    }
+
+    @Override
+    public void resourceChanged(ResourceProvider resource) {
+        // Nothing to do
+    }
+
+    protected JDBCHelper getHelper() {
+        return helper;
+    }
+
+    protected OperationsFactory getOperations() {
+        return this.getHelper().getOperations();
+    }
+
+    @Override
+    public DataStore open(DataStoreParameters params) throws DataException {
+        checkIsMine(params);
+        DataStore store = super.open(params);
+        return store;
+    }
+
+    @Override
+    public List list(int mode) throws DataException {
+        return list(mode, SHOW_TABLES_AND_VIEWS);
+    }
+
+    @Override
+    public List list(int mode, int tablesOrViews) throws DataException {
+        boolean informationTables = BooleanUtils.isTrue(
+                this.getParameters().getShowInformationDBTables()
+        );
+
+        JDBCServerExplorerParameters serverParams = this.getParameters();
+
+        String key = buildKeyForCachedTables(mode, serverParams, informationTables, tablesOrViews);
+        CachedValue<List<JDBCStoreParameters>> tablesValue = CACHED_TABLES.get(key);
+        List<JDBCStoreParameters> tables = null;
+        if (tablesValue != null) {
+            tables = tablesValue.get();
+        }
+        if (tables != null) {
+            return tables;
+        }
+        tablesValue = new CachedTablesValue(this.helper, mode, serverParams, informationTables, 60000, tablesOrViews); //60"
+        CACHED_TABLES.put(key, tablesValue);
+        tables = tablesValue.get();
+        return tables;
+    }
+
+    public String buildKeyForCachedTables(int mode, JDBCServerExplorerParameters params, boolean informationTables, int tablesOrViews) {
+        JDBCServerExplorerParameters clonedParams = (JDBCServerExplorerParameters) params.getCopy();
+        clonedParams.setSchema(null); //ListTableOperation no usa el schema
+
+        StringBuilder builder = new StringBuilder();
+        builder.append(String.valueOf(mode));
+        builder.append(Hex.encodeHex(clonedParams.toByteArray()));
+        builder.append(String.valueOf(informationTables));
+        builder.append(String.valueOf(tablesOrViews));
+        String key = builder.toString();
+        return key;
+    }
+
+    @Override
+    public void remove(DataStoreParameters theParams) throws RemoveException {
+        JDBCStoreParameters params = (JDBCStoreParameters) theParams;
+        DropTableOperation removeTable = this.getOperations().createDropTable(
+                this.getOperations().createTableReference(params)
+        );
+        if ((Boolean) removeTable.perform()) {
+            this.dropCachedTables();
+        }
+    }
+
+    @Override
+    public JDBCStoreParameters getOpenParameters() throws DataException {
+        JDBCStoreParameters params = this.helper.createOpenStoreParameters(this.getParameters());
+        return params;
+    }
+
+    @Override
+    public NewDataStoreParameters getAddParameters(String storeName)
+            throws DataException {
+        JDBCNewStoreParameters params = this.getAddParameters();
+        params.setTable(storeName);
+        return params;
+    }
+
+    @Override
+    public JDBCNewStoreParameters getAddParameters() throws DataException {
+        JDBCServerExplorerParameters parameters = getParameters();
+        JDBCNewStoreParameters params = this.helper.createNewStoreParameters();
+        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());
+        if (parameters instanceof FilesystemStoreParameters) {
+            File f = ((FilesystemStoreParameters) parameters).getFile();
+            ((FilesystemStoreParameters) params).setFile(f);
+        }
+
+        params.setDefaultFeatureType(this.getServerExplorerProviderServices()
+                .createNewFeatureType());
+
+        return params;
+    }
+
+    protected void checkIsMine(DataStoreParameters dsp) {
+        if (!(dsp instanceof JDBCConnectionParameters)) {
+            throw new IllegalArgumentException(
+                    "not instance of FilesystemStoreParameters");
+        }
+        JDBCServerExplorerParameters parameters = getParameters();
+
+        JDBCConnectionParameters pgp = (JDBCConnectionParameters) dsp;
+        if (!StringUtils.equals(pgp.getHost(), parameters.getHost())) {
+            throw new IllegalArgumentException("wrong explorer: Host (mine: "
+                    + parameters.getHost() + " other:" + pgp.getHost() + ")");
+        }
+        if (!ObjectUtils.equals(pgp.getPort(), parameters.getPort())) {
+            throw new IllegalArgumentException("wrong explorer: Port (mine: "
+                    + parameters.getPort() + " other:" + pgp.getPort() + ")");
+        }
+        if (!StringUtils.equals(pgp.getDBName(), parameters.getDBName())) {
+            throw new IllegalArgumentException("wrong explorer: DBName (mine: "
+                    + parameters.getDBName() + " other:" + pgp.getDBName()
+                    + ")");
+        }
+        if (!StringUtils.isEmpty(parameters.getCatalog())) {
+            if (!StringUtils.equals(pgp.getCatalog(), parameters.getCatalog())) {
+                throw new IllegalArgumentException(
+                        "wrong explorer: Catalog (mine: "
+                        + parameters.getCatalog() + " other:"
+                        + pgp.getCatalog() + ")");
+            }
+        }
+        if (!StringUtils.isEmpty(parameters.getSchema())) {
+            if (!StringUtils.equals(pgp.getSchema(), parameters.getSchema())) {
+                throw new IllegalArgumentException(
+                        "wrong explorer: Schema (mine: "
+                        + parameters.getSchema() + " other:"
+                        + pgp.getSchema() + ")");
+            }
+        }
+    }
+
+    @Override
+    public void open() throws OpenException {
+
+    }
+
+    @Override
+    public void close() throws CloseException {
+
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        synchronized (CACHED_TABLES) {
+            List<String> toRemove = new ArrayList<>();
+            for (Map.Entry<String, CachedValue<List<JDBCStoreParameters>>> entry : CACHED_TABLES.entrySet()) {
+                CachedTablesValue value = (CachedTablesValue) entry.getValue();
+                if (value.getHelper() == this.helper) {
+                    toRemove.add(entry.getKey());
+                    value.dispose();
+                }
+            }
+            for (String key : toRemove) {
+                CACHED_TABLES.remove(key);
+            }
+            helper.dispose();
+            helper = null;
+        }
+    }
+
+    @Override
+    public boolean canAdd() {
+        if (this.canAdd == null) {
+            CanCreateTablesOperation canAdd_ = this.getOperations().createCanCreateTables();
+            this.canAdd = (Boolean) canAdd_.perform();
+        }
+        return this.canAdd;
+    }
+
+    @Override
+    public FeatureType getFeatureType(DataStoreParameters theParams)
+            throws DataException {
+
+        JDBCStoreParameters params = (JDBCStoreParameters) theParams;
+
+        checkIsMine(params);
+
+        EditableFeatureType fetureType
+                = this.getServerExplorerProviderServices().createNewFeatureType();
+
+        List<String> primaryKeys = null;
+        if (params.getPkFields() != null) {
+            primaryKeys = Arrays.asList(params.getPkFields());
+        }
+
+        FetchFeatureTypeOperation fetch = this.getOperations().createFetchFeatureType(
+                fetureType,
+                this.getOperations().createTableReference(params),
+                primaryKeys,
+                params.getDefaultGeometryField(),
+                params.getCRS()
+        );
+        fetch.perform();
+        return fetureType;
+    }
+
+    @Override
+    public boolean add(String providerName, NewDataStoreParameters theParams, boolean overwrite)
+            throws DataException {
+
+        List<Pair<String, Privilege>> userAndPrivileges = new ArrayList<>();
+        JDBCNewStoreParameters params = (JDBCNewStoreParameters) theParams;
+        if (!StringUtils.isEmpty(params.getAllRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getAllRole(), Privilege.ALL)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getDeleteRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getDeleteRole(), Privilege.DELETE)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getInsertRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getInsertRole(), Privilege.INSERT)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getReferenceRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getReferenceRole(), Privilege.REFERENCE)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getSelectRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getSelectRole(), Privilege.SELECT)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getTriggerRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getTriggerRole(), Privilege.TRIGGER)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getTruncateRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getTruncateRole(), Privilege.TRUNCATE)
+            );
+        }
+        if (!StringUtils.isEmpty(params.getUpdateRole())) {
+            userAndPrivileges.add(
+                    new ImmutablePair<>(params.getUpdateRole(), Privilege.UPDATE)
+            );
+        }
+        List<String> additionalSQLs = new ArrayList<>();
+        if (!StringUtils.isEmpty(params.getPostCreatingStatement())) {
+            additionalSQLs.add(params.getPostCreatingStatement());
+        }
+        CreateTableOperation createTable = this.getOperations().createTable(
+                this.getOperations().createTableReference(params),
+                params.getDefaultFeatureType(),
+                userAndPrivileges,
+                additionalSQLs
+        );
+
+        boolean isOk = (boolean) createTable.perform();
+        if (!isOk) {
+            return false;
+        }
+
+        // We collect the featureType of the operation because 
+        // the provider has been able to make changes to it
+        params.setDefaultFeatureType(createTable.getType());
+
+        if (theParams instanceof NewFeatureStoreParameters) {
+            DataManager dataManager = DALLocator.getDataManager();
+            ResourcesStorage resources = this.getResourcesStorage(theParams);
+            dataManager.writeDALResource(resources, ((NewFeatureStoreParameters) theParams).getDefaultFeatureType());
+        }
+        this.dropCachedTables();
+        return true;
+    }
+
+    private void dropCachedTables() {
+        boolean informationTables = BooleanUtils.isTrue(
+                this.getParameters().getShowInformationDBTables()
+        );
+        synchronized(CACHED_TABLES){
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_ALL, this.getParameters(), informationTables, SHOW_TABLES_AND_VIEWS));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_FEATURE, this.getParameters(), informationTables, SHOW_TABLES_AND_VIEWS));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_GEOMETRY, this.getParameters(), informationTables, SHOW_TABLES_AND_VIEWS));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_ALL, this.getParameters(), informationTables, SHOW_TABLES));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_FEATURE, this.getParameters(), informationTables, SHOW_TABLES));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_GEOMETRY, this.getParameters(), informationTables, SHOW_TABLES));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_ALL, this.getParameters(), informationTables, SHOW_VIEWS));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_FEATURE, this.getParameters(), informationTables, SHOW_VIEWS));
+            CACHED_TABLES.remove(buildKeyForCachedTables(MODE_GEOMETRY, this.getParameters(), informationTables, SHOW_VIEWS));
+        }
+    }
+
+    @Override
+    public List getDataStoreProviderNames() {
+        List x = new ArrayList(1);
+        x.add(this.getProviderName());
+        return x;
+    }
+
+    @Override
+    public void updateTableStatistics(String database, String schema, String table) throws JDBCExecuteSQLException {
+        UpdateTableStatisticsOperation updateStatistics = this.getOperations().createUpdateTableStatistics(
+                this.getOperations().createTableReference(database, schema, table, null)
+        );
+        updateStatistics.perform();
+    }
+
+    @Override
+    public Object execute(String sql) {
+        ExecuteOperation execute = this.getOperations().createExecute(sql);
+        return execute.perform();
+    }
+
+    @Override
+    public JDBCStoreParameters get(String name) throws DataException {
+        JDBCStoreParameters params = this.getOpenParameters();
+        params.setTable(name);
+        return params;
+    }
+
+    @Override
+    public SQLBuilder createSQLBuilder() {
+        JDBCSQLBuilderBase builder = this.getHelper().createSQLBuilder();
+        return builder;
+    }
+
+    private CustomResourcesConfig getCustomResourcesConfig() {
+        JDBCServerExplorerParameters serverParams = this.getParameters();
+        String key = buildKeyForCachedTables(MODE_ALL, serverParams, false, SHOW_TABLES_AND_VIEWS); //???
+        CachedValue<CustomResourcesConfig> cachedConfig = CACHED_CUSTOM_RESOURCES_CONFIG.get(key);
+        if (cachedConfig != null) {
+            CustomResourcesConfig config = cachedConfig.get();
+//            LOG.info("Return custom resource from CACHE.");
+            return config;
+        }
+        JDBCStoreParameters params = this.helper.createOpenStoreParameters(this.getParameters());
+        cachedConfig = new CachedCustomResourcesConfig(params);
+        CACHED_CUSTOM_RESOURCES_CONFIG.put(key, cachedConfig);
+        return cachedConfig.get();
+    }
+    
+    private void refreshCustomResourcesConfig() {
+        JDBCServerExplorerParameters serverParams = this.getParameters();
+        String key = buildKeyForCachedTables(MODE_ALL, serverParams, false, SHOW_TABLES_AND_VIEWS); //???
+        CachedValue<CustomResourcesConfig> cachedConfig = CACHED_CUSTOM_RESOURCES_CONFIG.get(key);
+        if (cachedConfig != null) {
+            cachedConfig.expired();
+        }
+    }
+
+    private ResourcesStorage getResourcesStorage(DataStoreParameters parameters, String storeName) {
+        if (DatabaseWorkspaceManager.isInternalTable(storeName)) {
+            EmptyResourcesStorage resourcesStorage = new EmptyResourcesStorage();
+            return resourcesStorage;
+        }
+        String resourcesTablename = null;
+        try { 
+            ResourcesStorage alternateResourcesStorage = null;
+            DataManager dataManager = DALLocator.getDataManager();
+            DatabaseWorkspaceManager workspace = dataManager.getDatabaseWorkspace(parameters);
+            if (workspace != null) {
+                alternateResourcesStorage = workspace.getAlternativeResourcesStorage(storeName);
+            }
+            
+            ResourcesStorage defaultResourcesStorage = null;
+            ResourcesStorage customResourcesStorage = null;            
+            
+            // TODO: Habria que ver de localizar los parametros sin tener que hacer un list.
+            resourcesTablename = TABLE_RESOURCES_NAME;
+            List<JDBCStoreParameters> tables = this.list();
+            for (JDBCStoreParameters params : tables) {
+                String theTableName = params.getTable();
+                if (StringUtils.equals(theTableName, resourcesTablename)) {
+                    defaultResourcesStorage = new JDBCResourcesStorage(
+                            alternateResourcesStorage,
+                            params,
+                            storeName
+                    );
+                    break;
+                }
+            }
+            CustomResourcesConfig config = getCustomResourcesConfig();
+            if( config!=null ) {
+                if( config.isInternalTable(storeName) ) {
+                    defaultResourcesStorage = new EmptyResourcesStorage();
+                } else {
+                    resourcesTablename = config.getResourcesTablename(storeName);
+                    if( StringUtils.isNotBlank(resourcesTablename) ) {
+                        JDBCStoreParameters params = this.getOpenParameters();
+                        params.setTable(resourcesTablename);
+                        customResourcesStorage = new JDBCResourcesStorage(
+                                alternateResourcesStorage,
+                                params,
+                                storeName,
+                                config.isResourcesReadOnly(resourcesTablename)
+                        );
+                    }
+                }
+            }
+            return new CompoundResourcesStorage(defaultResourcesStorage, customResourcesStorage);
+        } catch (Throwable ex) {
+            LOG.warn("Can't retrieve reources storage for table '" + storeName + "' in '" + this.getParameters().getUrl() + " ("+resourcesTablename+").", ex);
+        }
+        EmptyResourcesStorage theResourcesStorage = new EmptyResourcesStorage();
+        return theResourcesStorage;
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage() {
+        JDBCStoreParameters params;
+        try {
+            params = this.getOpenParameters();
+            params.setTable(DatabaseWorkspaceManager.TABLE_RESOURCES_NAME);
+            JDBCResourcesStorage theResourcesStorage = new JDBCResourcesStorage(
+                    null,
+                    params,
+                    "$ServerExplorer"
+            );
+            return theResourcesStorage;
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStoreParameters parameters) {
+        if (parameters == null) {
+            throw new IllegalArgumentException("null is a valid value for parameters.");
+        }
+        String tableName;
+        if (parameters instanceof JDBCNewStoreParameters) {
+            tableName = ((JDBCNewStoreParameters) parameters).getTable();
+        } else if (parameters instanceof JDBCStoreParameters) {
+            tableName = ((JDBCStoreParameters) parameters).getTable();
+        } else {
+            throw new IllegalArgumentException("Required a JDBCStoreParameters or JDBCNewStoreParameters parameters, received " + parameters.getClass().getName() + ".");
+        }
+        return this.getResourcesStorage(parameters, tableName);
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStore dataStore) {
+        return this.getResourcesStorage(
+                (JDBCStoreParameters) dataStore.getParameters(),
+                dataStore.getName()
+        );
+    }
+
+    @Override
+    public boolean exists(DataStoreParameters parameters) throws DataException {
+        JDBCStoreParameters params = (JDBCStoreParameters) parameters;
+        JDBCSQLBuilderBase builder = this.getHelper().createSQLBuilder();
+        SQLBuilder.TableNameBuilder searchTable = builder.createTableNameBuilder()
+                .database(params.getDBName())
+                .schema(params.getSchema())
+                .name(params.getTable());
+        SQLBuilder.TableNameBuilder table = builder.createTableNameBuilder();
+
+        List<JDBCStoreParameters> l = this.list();
+        for (JDBCStoreParameters current : l) {
+            table.database(current.getDBName())
+                    .schema(current.getSchema())
+                    .name(current.getTable());
+            if (table.equals(searchTable)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void setCustomResources(String tableName, String resourcesTableName) {
+        this.setCustomResources(tableName, resourcesTableName, false);
+    }
+    
+    @Override
+    public void setCustomResources(String tableName, String resourcesTableName, boolean readonly) {
+        CustomResourcesConfig config = getCustomResourcesConfig();
+        if( config==null ) {
+            throw new RuntimeException("Can't retrieve alternative resources configuration");
+        }
+        config.addResourceMapping(tableName, resourcesTableName);
+        config.setResourcesReadOnly(resourcesTableName,readonly);
+        JDBCStoreParameters params = this.helper.createOpenStoreParameters(this.getParameters());
+        if(!setConfigValue(params, CONFIG_NAME_CUSTOM_RESOURCES, config.toJsonString())) {
+            throw new RuntimeException("Can't save custom resources configuration");
+        }
+        refreshCustomResourcesConfig();
+        
+        
+        if (StringUtils.isNotBlank(resourcesTableName)) {
+            try {
+                params = this.getOpenParameters();
+                params.setTable(resourcesTableName);
+                JDBCResourcesStorage resourcesStorage = new JDBCResourcesStorage(
+                        null,
+                        params,
+                        tableName,
+                        config.isResourcesReadOnly(resourcesTableName)
+                );
+                resourcesStorage.clearCache();
+            } catch (Exception ex) {
+                LOG.debug("Can't remove local cache for table "+tableName, ex);
+            }
+        }
+
+
+    }
+
+    private static boolean setConfigValue(JDBCStoreParameters params, String name, String value) {
+        FeatureStore store = null;
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            params.setTable(TABLE_CONFIGURATION_NAME);
+            store = (FeatureStore) dataManager.openStore(
+                    params.getProviderName(), 
+                    params
+            );
+        } catch (Exception ex) {
+            LOG.trace("Can't read configuration value '"+name+"'", ex);
+            // Do noting
+//        } finally {
+//            DisposeUtils.disposeQuietly(store);
+        }
+        if( store == null ) {
+            return false;
+        }
+        try {
+            store.edit();
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            String filter = builder.eq(
+                    builder.column(FIELD_CONFIGURATION_NAME),
+                    builder.constant(name)
+            ).toString();
+            Feature feature = store.findFirst(filter);
+            EditableFeature efeature;
+            if (feature == null) {
+                efeature = store.createNewFeature();
+                efeature.set(FIELD_CONFIGURATION_NAME, name);
+                efeature.set(FIELD_CONFIGURATION_VALUE, value);
+                store.insert(efeature);
+            } else {
+                efeature = feature.getEditable();
+                efeature.set(FIELD_CONFIGURATION_VALUE, value);
+                store.update(efeature);
+            }
+            store.finishEditing();
+            return true;
+        } catch (Exception ex) {
+            LOG.debug("Can't write configuration value for '"+name+"'", ex);
+            return false;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+    
+    private static String getConfigValue(JDBCStoreParameters params, String name) {
+        FeatureStore store = null;
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            params.setTable(TABLE_CONFIGURATION_NAME);
+            store = (FeatureStore) dataManager.openStore(
+                    params.getProviderName(), 
+                    params
+            );
+        } catch (Exception ex) {
+            LOG.trace("Can't read configuration value '"+name+"'", ex);
+            // Do noting
+//        } finally {
+//            DisposeUtils.disposeQuietly(store);
+        }
+        if( store == null ) {
+            return null;
+        }
+        try {
+            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+            String filter = builder.eq(
+                    builder.column(FIELD_CONFIGURATION_NAME),
+                    builder.constant(name)
+            ).toString();
+            Feature feature = store.findFirst(filter);
+            if( feature == null ) {
+                return null;
+            }
+            String value = feature.getString(FIELD_CONFIGURATION_VALUE);
+            return value;
+            
+        } catch (Exception ex) {
+            LOG.debug("Can't read configuration value '"+name+"'", ex);
+            return null;
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+    }
+
+    @Override
+    public boolean exists() {
+        try {
+            JDBCServerExplorerParameters serverParameters = this.getParameters();
+            OperationsFactory operations = helper.getOperations();
+            ListTablesOperation listTables = operations.createListTables(
+                    MODE_ALL, serverParameters, false, SHOW_TABLES
+            );
+            List<JDBCStoreParameters> tables = (List<JDBCStoreParameters>) listTables.perform();
+            return true;
+        } catch(Throwable th) {
+            return false;
+        }
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/ConnectionProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/ConnectionProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/ConnectionProvider.java	(revision 46118)
@@ -0,0 +1,42 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.gvsig.tools.dispose.Disposable;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public interface ConnectionProvider extends Disposable {
+
+    public Connection getConnection() throws SQLException;
+
+    public void registerDriver() throws SQLException;
+    
+    public String getStatus();
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakeConnectionParameters.java	(revision 46118)
@@ -0,0 +1,16 @@
+/*
+ * 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.jdbc2.spi;
+
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class FakeConnectionParameters extends JDBCServerExplorerParameters {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverDumb.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverDumb.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/SRSSolverDumb.java	(revision 46118)
@@ -0,0 +1,61 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.sql.Connection;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+
+public class SRSSolverDumb extends SRSSolverBase implements SRSSolver {
+    
+    public SRSSolverDumb(JDBCHelper helper) {
+        super(helper);
+    }
+        
+    @Override
+    protected Object searchDatabaseCode(Connection connection, String applicationAbbrev) {
+        try {
+            String[] s = applicationAbbrev.split(":");
+            String code_s = s[1].trim();
+            try {
+                int code_i = Integer.parseInt(code_s);
+                return code_i;
+            } catch(NumberFormatException e) {
+                
+            }
+            return 0;
+        } catch (Throwable ex) {
+            throw new RuntimeException("Problems searching database code from '"+applicationAbbrev+"'.",ex);
+        }
+    }
+
+    @Override
+    protected String searchApplicationAbbrev(Connection connection, Integer databaseCode) {
+        try {
+            return "EPSG:" + databaseCode;
+        } catch (Throwable ex) {
+            throw new RuntimeException("Problems searching application abbrev from '"+databaseCode+"'.",ex);
+        }
+    }    
+   
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakePreparedStatement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakePreparedStatement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/spi/FakePreparedStatement.java	(revision 46118)
@@ -0,0 +1,336 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.spi;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLXML;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class FakePreparedStatement 
+        extends FakeStatement
+        implements PreparedStatement 
+    {
+
+    public FakePreparedStatement(Connection connection) {
+        super(connection);
+    }
+
+    @Override
+    public ResultSet executeQuery() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public int executeUpdate() throws SQLException {
+        return 0;
+    }
+
+    @Override
+    public void setNull(int parameterIndex, int sqlType) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBoolean(int parameterIndex, boolean x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setByte(int parameterIndex, byte x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setShort(int parameterIndex, short x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setInt(int parameterIndex, int x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setLong(int parameterIndex, long x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setFloat(int parameterIndex, float x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setDouble(int parameterIndex, double x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setString(int parameterIndex, String x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBytes(int parameterIndex, byte[] x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setDate(int parameterIndex, Date x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setTime(int parameterIndex, Time x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException {
+        
+    }
+
+    @Override
+    public void clearParameters() throws SQLException {
+        
+    }
+
+    @Override
+    public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
+        
+    }
+
+    @Override
+    public void setObject(int parameterIndex, Object x) throws SQLException {
+        
+    }
+
+    @Override
+    public boolean execute() throws SQLException {
+        return true;
+    }
+
+    @Override
+    public void addBatch() throws SQLException {
+        
+    }
+
+    @Override
+    public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setRef(int parameterIndex, Ref x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBlob(int parameterIndex, Blob x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setClob(int parameterIndex, Clob x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setArray(int parameterIndex, Array x) throws SQLException {
+        
+    }
+
+    @Override
+    public ResultSetMetaData getMetaData() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException {
+        
+    }
+
+    @Override
+    public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException {
+        
+    }
+
+    @Override
+    public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNull(int parameterIndex, int sqlType, String typeName) throws SQLException {
+        
+    }
+
+    @Override
+    public void setURL(int parameterIndex, URL x) throws SQLException {
+        
+    }
+
+    @Override
+    public ParameterMetaData getParameterMetaData() throws SQLException {
+        return null;
+    }
+
+    @Override
+    public void setRowId(int parameterIndex, RowId x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNString(int parameterIndex, String value) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNClob(int parameterIndex, NClob value) throws SQLException {
+        
+    }
+
+    @Override
+    public void setClob(int parameterIndex, Reader reader, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
+        
+    }
+
+    @Override
+    public void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) throws SQLException {
+        
+    }
+
+    @Override
+    public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException {
+        
+    }
+
+    @Override
+    public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
+        
+    }
+
+    @Override
+    public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
+        
+    }
+
+    @Override
+    public void setClob(int parameterIndex, Reader reader) throws SQLException {
+        
+    }
+
+    @Override
+    public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {
+        
+    }
+
+    @Override
+    public void setNClob(int parameterIndex, Reader reader) throws SQLException {
+        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/ResulSetControler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/ResulSetControler.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/ResulSetControler.java	(revision 46118)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+
+
+public interface ResulSetControler extends AutoCloseable {
+
+    public interface ResultSetEntry extends AutoCloseable {
+        public ResultSet get();
+        public int getID();
+        public boolean isZombie();
+        public String getSQL();
+        public FeatureAttributeDescriptor[] getColumns();
+        public String[] getExtraValueNames();
+        public Object getObject(int columnIndex) throws SQLException;
+        public byte[] getBytes(int columnIndex) throws SQLException;
+        public boolean next() throws SQLException;
+    }
+
+    public void setTimeToZombie(long mlSeconds);
+
+    public long getTimeToZombie();
+
+    public ResultSetEntry create(String sql, int fetchSize, FeatureAttributeDescriptor[] columns, String[] extraValueNames ) throws DataException;
+
+    public ResultSetEntry create(String sql, List<Object> values, int fetchSize, FeatureAttributeDescriptor[] columns, String[] extraValueNames) throws DataException;
+
+    public int getOpenCount();
+    
+    public void closeAll();
+
+    public void pack();    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCServerExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCServerExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCServerExplorerFactory.java	(revision 46118)
@@ -0,0 +1,64 @@
+
+package org.gvsig.fmap.dal.store.jdbc2.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorerFactory;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
+
+
+public class JDBCServerExplorerFactory extends AbstractDataServerExplorerFactory {
+
+    private static final String NAME = JDBCLibrary.NAME;
+
+    public JDBCServerExplorerFactory() {
+        this(
+                NAME,
+                "JDBC generic server (2)"
+        );
+    }
+    
+    protected JDBCServerExplorerFactory(String name, String description) {
+        super(name,description);
+    }
+    
+    protected JDBCServerExplorerFactory(String name, String description, boolean hidden) {
+        super(name,description, hidden);
+    }
+
+    @Override
+    public JDBCServerExplorer create(
+            DataServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+        ) throws InitializeException {
+        JDBCHelper helper = new JDBCHelperBase((JDBCConnectionParameters) parameters);
+        JDBCServerExplorer server = helper.createServerExplorer(
+                (JDBCServerExplorerParameters) parameters, 
+                providerServices
+        );
+        return server;
+    }
+        
+    @Override
+    public JDBCServerExplorerParameters createParameters() {
+        JDBCServerExplorerParameters params = new JDBCServerExplorerParameters(
+                NAME + "ServerExplorerParameters",
+                NAME 
+        );
+        return params;    
+    }
+
+    @Override
+    public boolean isStoreSupported(String name) {
+        return StringUtils.equalsIgnoreCase(name, this.getName());
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCStoreProviderFactory.java	(revision 46118)
@@ -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.fmap.dal.store.jdbc2.impl;
+
+import org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary;
+
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
+
+public class JDBCStoreProviderFactory 
+    extends AbstractFeatureStoreProviderFactory 
+    {
+
+    private static final String NAME = JDBCLibrary.NAME;
+    
+    public static final int CASE_IDENTIFIERS_INDIFERENT = 0;
+    public static final int CASE_IDENTIFIERS_UPPERCASE = 1;
+    public static final int CASE_IDENTIFIERS_LOWERCASE = 2;
+    
+    public JDBCStoreProviderFactory() {
+        this(
+                NAME, 
+                "JDBC generic store (2)"
+        );
+    }
+    
+    @Override
+    public int hasTabularSupport() {
+        return YES;
+    }    
+
+    @Override
+    public int hasSQLSupport() {
+        return YES;
+    }
+    
+    protected JDBCStoreProviderFactory(String name, String description) {
+        super(name, description);
+    }
+    
+    protected JDBCStoreProviderFactory(String name, String description, boolean hidden) {
+        super(name, description, hidden);
+    }
+
+    @Override
+    public JDBCStoreProvider createProvider(
+            DataParameters parameters,
+            DataStoreProviderServices providerServices
+    ) throws InitializeException {
+        JDBCHelper helper = new JDBCHelperBase((JDBCConnectionParameters) parameters);
+        JDBCStoreProvider provider = helper.createProvider(
+                (JDBCStoreParameters) parameters, 
+                providerServices
+        );
+        return provider;
+    }
+    
+    @Override
+    public JDBCStoreParameters createParameters() {
+        JDBCStoreParameters params = new JDBCStoreParameters(
+                NAME + "StoreParameters",
+                NAME 
+        );
+        return params;
+    }
+
+    @Override
+    public int isOptimalRecoverFeaturesByReference() {
+        return NO;
+    }
+
+    public int useLocalIndexesCanImprovePerformance() {
+        return NO;
+    }
+    
+    @Override
+    public boolean allowSpatialIndexSupport() {
+        if (this.hasVectorialSupport() == YES) {
+            return true;
+        }
+        return false;
+    }
+    
+    public int caseIndentifierPreferedMode() {
+        return CASE_IDENTIFIERS_UPPERCASE;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/ExecuteSQLFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/ExecuteSQLFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/ExecuteSQLFunction.java	(revision 46118)
@@ -0,0 +1,98 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.impl.expressionevaluator;
+
+import org.apache.commons.lang3.Range;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import static org.gvsig.fmap.dal.store.jdbc2.impl.expressionevaluator.JDBCSymbolTableFactory.GROUP_JDBC;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ExecuteSQLFunction extends AbstractFunction {
+
+  public static final String FUNCTION_EXECUTESQL = "EXECUTESQL";
+
+  public ExecuteSQLFunction() {
+    super(  GROUP_JDBC,
+            FUNCTION_EXECUTESQL,
+            Range.between(1,2),
+            "Receive a connection and SQL string as argument.",
+            FUNCTION_EXECUTESQL + "({{connection}}, sql)",
+            new String[]{
+              "connection - conextion string (optional)",
+              "sql - sql string"
+            },
+            "Object",
+            false
+    );
+  }
+
+  @Override
+  public boolean allowConstantFolding() {
+    return false;
+  }
+
+  @Override
+  public boolean useArgumentsInsteadObjects() {
+    return false;
+  }
+
+  @Override
+  public Object call(Interpreter interpreter, Object[] args) throws Exception {
+      String connectionName;
+      String sql;
+      JDBCServerExplorer explorer;
+      if (args.length==1) {
+          sql = this.getStr(args, 0);
+          FeatureStore store = (FeatureStore) interpreter.getSymbolTable().function(DataManager.FUNCTION_CURRENT_STORE).call(interpreter,(Object[]) null);
+          explorer = (JDBCServerExplorer) store.getExplorer();
+      } else {
+        connectionName = this.getStr(args, 0);
+        sql = this.getStr(args, 1);
+        if (this.getObject(args, 0) instanceof JDBCServerExplorer) {
+            explorer = (JDBCServerExplorer) this.getObject(args, 0);
+        } else if (this.getObject(args, 0) instanceof FeatureStore) {
+            explorer = (JDBCServerExplorer) ((FeatureStore) this.getObject(args, 0)).getExplorer();
+        } else {
+            DataManager dalManager = DALLocator.getManager();
+            DataServerExplorerPoolEntry poolEntry = dalManager.getDataServerExplorerPool().get(connectionName);
+            DataServerExplorerParameters explorerParameters = poolEntry.getExplorerParameters();
+            explorer = (JDBCServerExplorer) dalManager.openServerExplorer(explorerParameters.getProviderName(), explorerParameters);
+        }
+      }
+      Object result = explorer.execute(sql);
+      return result;
+      
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTableFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTableFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTableFactory.java	(revision 46118)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.impl.expressionevaluator;
+
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTableFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class JDBCSymbolTableFactory extends AbstractSymbolTableFactory {
+
+    private SymbolTable symbolTable;
+    public static final String SYMBOLTABLE_NAME = "JDBC";
+    public static final String GROUP_JDBC = "Data access";
+    
+    public JDBCSymbolTableFactory() {
+        super(SYMBOLTABLE_NAME, true);
+    }
+    
+    @Override
+    public SymbolTable create(Object... args) {
+        if( this.symbolTable==null ) {
+            this.symbolTable = new JDBCSymbolTable();
+        }
+        return this.symbolTable;
+    }
+    
+    public static final void selfRegister() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        
+        manager.registerSymbolTable(new JDBCSymbolTableFactory());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/expressionevaluator/JDBCSymbolTable.java	(revision 46118)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2.impl.expressionevaluator;
+
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
+import static org.gvsig.fmap.dal.store.jdbc2.impl.expressionevaluator.JDBCSymbolTableFactory.SYMBOLTABLE_NAME;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class JDBCSymbolTable 
+        extends AbstractSymbolTable
+    {   
+
+    public JDBCSymbolTable() {
+        super(SYMBOLTABLE_NAME);
+        this.initFunctions();
+    }
+    
+    private void initFunctions() {
+        this.addFunction(new ExecuteSQLFunction());
+        
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCSetProvider.java	(revision 46118)
@@ -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.fmap.dal.store.jdbc2.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
+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.spi.AbstractFeatureSetProvider;
+import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.TableIsEmptyOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JDBCSetProvider extends AbstractFeatureSetProvider {
+
+    final static protected Logger LOGGER = LoggerFactory.getLogger(JDBCSetProvider.class);
+
+    private class EmptyJDBCIterator extends JDBCIterator {
+
+        protected EmptyJDBCIterator(JDBCStoreProvider store) throws DataException {
+            super(store, null, null, null);
+        }
+
+        @Override
+        protected boolean internalHasNext() {
+            return false;
+        }
+
+        @Override
+        protected Object internalNext() {
+            throw new NoSuchElementException();
+        }
+
+        @Override
+        protected void doDispose() throws BaseException {
+            // nothing to do
+        }
+
+    }
+
+    
+    protected Long size = null;
+    protected Boolean isEmpty = null;
+    protected List<ResultSetEntry> resultSets;
+    private int defaultFetchSize = 1000;
+
+    public JDBCSetProvider(
+            AbstractFeatureStoreProvider store,
+            JDBCHelper helper,
+            FeatureQuery query,
+            FeatureType featureType
+    ) throws DataException {
+        super(store, query, featureType);
+        this.resultSets = new ArrayList<>();
+    }
+
+    /**
+     * @return the defaultFetchSize
+     */
+    public int getDefaultFetchSize() {
+        return defaultFetchSize;
+    }
+
+    /**
+     * @param defaultFetchSize the defaultFetchSize to set
+     */
+    public void setDefaultFetchSize(int defaultFetchSize) {
+        this.defaultFetchSize = defaultFetchSize;
+    }
+
+//    @Override
+//    protected JDBCStoreProvider getStore() {
+//        return (JDBCStoreProvider) super.getStore();
+//    }
+
+    protected JDBCStoreProvider getJDBCStore() {
+//        Corregido el problema en AbstractFeatureSetProvider, de que getStore
+//        debe ser un FeatureStoreProvider y no un AbstractFeatureStoreProvider
+//        este metodo debe desaparecer y quedar el getStore de arriba que esta
+//          comentarizado
+        return (JDBCStoreProvider) super.getStore();
+    }    
+    
+    protected JDBCHelper getHelper() {
+        return this.getJDBCStore().getHelper();
+    }
+    
+    protected OperationsFactory getOperations() {
+        return this.getHelper().getOperations();
+    }
+
+    @Override
+    public boolean canIterateFromIndex() {
+        return this.getHelper().supportOffsetInSelect();
+    }
+    
+    @Override
+    public boolean canFilter() {
+        return this.getHelper().supportFilter(this.getFeatureType(), getQuery().getFilter());
+    }
+
+    @Override
+    public boolean canOrder() {
+        return this.getHelper().supportOrder(this.getFeatureType(), getQuery().getOrder());
+    }
+    
+    public ResulSetControler getResulSetControler() {
+        return this.getHelper().getResulSetControler();
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        if( ! CollectionUtils.isEmpty(this.resultSets) ) {
+            for( ResultSetEntry resulset : this.resultSets ) {
+               JDBCUtils.closeQuietly(resulset);
+            }
+        }
+        size = null;
+        isEmpty = null;
+    }
+
+    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);
+    }
+
+    @Override
+    public long getSize() throws DataException {
+        if (size == null) {
+            JDBCStoreParameters params = this.getJDBCStore().getParameters();
+            CountOperation selectCount = this.getOperations().createCount(
+                    this.getFeatureType(),
+                    this.getOperations().createTableReference(params),
+                    params.getBaseFilter(), 
+                    this.getQuery()
+            );
+            size = (Long) selectCount.perform();              
+        }
+        return size;
+    }
+
+    @Override
+    public boolean isEmpty() throws DataException {
+        if (this.isEmpty == null) {
+            if (this.size == null) {
+                JDBCStoreParameters params = this.getJDBCStore().getParameters();
+//                String filtersql = null;
+//                Evaluator filter = this.getQuery().getFilter();
+//                if( filter != null ) {
+//                    filtersql = filter.getSQL();
+//                }
+                TableIsEmptyOperation isEmpty_ = this.getOperations().createTableIsEmpty(
+                        this.getFeatureType(),
+                        this.getOperations().createTableReference(params),
+                        params.getBaseFilter(), 
+                        this.getQuery()
+                );
+                this.isEmpty = (Boolean) isEmpty_.perform();   
+            } else {
+                this.isEmpty = (this.size < 1);
+            }
+        }
+        return isEmpty;
+    }
+
+
+    @Override
+    protected JDBCIterator createFastIterator(long index) throws DataException {
+        return createFastIterator(index, 0);
+    }
+    
+    @Override
+    protected JDBCIterator createFastIterator(long index, long elements) throws DataException {
+        if( BooleanUtils.isTrue(isEmpty) ) {
+            return new EmptyJDBCIterator(this.getJDBCStore());
+        }
+        
+        JDBCStoreParameters params = this.getJDBCStore().getParameters();
+        FeatureType storeType = this.getStore()
+                .getStoreServices()
+		.getProviderFeatureType(this.getFeatureType().getId());
+        ResultSetForSetProviderOperation createResultSet 
+            = getOperations().createResultSetForSetProvider(
+                    this.getOperations().createTableReference(params),
+                    params.getBaseFilter(), 
+                    params.getBaseOrder(), 
+                    this.getQuery(), 
+                    storeType, 
+                    this.getFeatureType(), 
+                    elements, 
+                    index, 
+                    this.getFetchSize()
+            );
+
+        ResultSetEntry resultSetEntry = (ResultSetEntry) createResultSet.perform();
+
+        this.resultSets.add(resultSetEntry);
+        return new JDBCFastIterator(
+                this.getJDBCStore(), 
+                this, 
+                this.getFeatureType(),
+                resultSetEntry
+        );
+    }
+
+    @Override
+    protected JDBCIterator createIterator(long index) throws DataException {
+        return createIterator(index, -1);
+    }
+    
+    @Override
+    protected JDBCIterator createIterator(long index, long elements) throws DataException {
+        if( BooleanUtils.isTrue(isEmpty) ) {
+            return new EmptyJDBCIterator(this.getJDBCStore());
+        }
+        JDBCStoreParameters params = this.getJDBCStore().getParameters();
+        FeatureType storeType = this.getStore()
+                .getStoreServices()
+		.getProviderFeatureType(this.getFeatureType().getId());
+        ResultSetForSetProviderOperation createResultSet 
+            = getOperations().createResultSetForSetProvider(
+                    this.getOperations().createTableReference(params),
+                    params.getBaseFilter(), 
+                    params.getBaseOrder(), 
+                    this.getQuery(), 
+                    storeType, 
+                    this.getFeatureType(), 
+                    elements, 
+                    index, 
+                    this.getDefaultFetchSize()
+            );
+
+        ResultSetEntry resultSetEntry = (ResultSetEntry) createResultSet.perform();
+        this.resultSets.add(resultSetEntry);
+        return new JDBCIterator(
+                this.getJDBCStore(), 
+                this, 
+                this.getFeatureType(),
+                resultSetEntry
+        );
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/ResulSetControlerBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/ResulSetControlerBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/ResulSetControlerBase.java	(revision 46118)
@@ -0,0 +1,284 @@
+package org.gvsig.fmap.dal.store.jdbc2.impl;
+
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecutePreparedSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ResulSetControlerBase implements ResulSetControler {
+
+    final static private Logger LOGGER = LoggerFactory.getLogger(ResulSetControlerBase.class);
+
+    public class ResultSetEntryBase implements ResultSetEntry {
+
+        private ResultSet resultSet = null;
+        private final int id;
+        private long lastUse = 0;
+        private final String sql;
+        private final FeatureAttributeDescriptor[] columns;
+        private final String[] extraValueNames;
+        private Throwable closeCause ;
+        
+        private final String connId;
+        private final String hexId;
+
+        public ResultSetEntryBase(ResultSet resulSet, String sql, FeatureAttributeDescriptor[] columns, String[] extraValueNames) {
+            this.closeCause = null;
+            this.resultSet = resulSet;
+            this.connId = JDBCUtils.getConnId(this.resultSet);
+            this.hexId = JDBCUtils.getHexId(this);
+            this.id = nextid++;
+            this.sql = sql;
+            this.columns = columns;
+            this.extraValueNames = extraValueNames;
+            used();
+            synchronized(resulSets){
+                resulSets.put(this.getID(), this);
+            }
+            if( LOGGER.isDebugEnabled() ) {
+                LOGGER.debug("["+JDBCUtils.getConnId(resulSet)+"] ResultSetEntryBase "+this.hexId+" "+sql);
+            }
+            LOGGER.debug(((JDBCHelperBase)helper).getConnectionProviderStatus());
+        }
+
+        private void used() {
+            lastUse = System.currentTimeMillis();
+        }
+
+        @Override
+        public ResultSet get() {
+            used();
+            return resultSet;
+        }
+
+        @Override
+        public int getID() {
+            return this.id;
+        }
+
+        @Override
+        public boolean isZombie() {
+            if( this.resultSet == null ) {
+                return true;
+            }
+            return System.currentTimeMillis() - lastUse > mlsecondsToZombie;
+        }
+
+        @Override
+        public String getSQL() {
+            return this.sql;
+        }
+
+        @Override
+        public String[] getExtraValueNames() {
+            return this.extraValueNames;
+        }
+        
+        @Override
+        public FeatureAttributeDescriptor[] getColumns() {
+            return this.columns;
+        }
+        
+        @Override
+        public Object getObject(int columnIndex) throws SQLException {
+            used();
+            return this.resultSet.getObject(columnIndex);
+        }
+
+        @Override
+        public byte[] getBytes(int columnIndex) throws SQLException {
+            used();
+            return this.resultSet.getBytes(columnIndex);
+        }
+
+        @Override
+        public boolean next() throws SQLException {
+            if( this.closeCause!=null ) {
+                LOGGER.debug("["+this.connId+"] ResultSetEntryBase already closed "+this.hexId);
+                throw new IllegalStateException("ResultSetEntryBase already closed, connId="+this.connId+", id="+this.hexId+" (sql="+sql+")", closeCause);
+            }
+            return this.resultSet.next();
+        }
+
+        @Override
+        public void close() throws Exception {
+            if( LOGGER.isDebugEnabled() ) {
+                LOGGER.debug("["+this.connId+"] ResultSetEntryBase close "+this.hexId);
+            }
+            if( this.resultSet == null ) {
+                // Already close
+                return;
+            }
+            this.closeCause = new Throwable();
+            
+            Statement st = null;
+            Connection con = null;
+            try {
+                synchronized(resulSets){
+                    resulSets.remove(this.getID());
+                }
+                st = this.resultSet.getStatement();
+                if( st != null ) {
+                    con = st.getConnection();
+                }
+            } catch(Exception ex) {
+                LOGGER.warn("Problems closing ResulSetEntryBase.",ex);
+            }
+            JDBCUtils.closeQuietly(this.resultSet);
+            JDBCUtils.closeQuietly(st);
+            helper.closeConnection(con);
+            this.resultSet = null;
+            LOGGER.debug(
+                    "Close ResulSetEntryBase id {} (total {})",
+                    this.getID(),
+                    getOpenCount()
+            );
+            LOGGER.debug(((JDBCHelperBase)helper).getConnectionProviderStatus());
+            pack();
+        }
+
+    }
+
+    private int nextid = 1;
+
+    private final Map<Integer, ResultSetEntryBase> resulSets;
+
+    private long mlsecondsToZombie = 1000 * 60 * 10; // 10 Min
+
+    private JDBCHelper helper = null;
+
+    public ResulSetControlerBase(JDBCHelper helper) {
+        this.helper = helper;
+        this.resulSets = new HashMap<>();
+        this.nextid = 1;
+    }
+
+    @Override
+    public long getTimeToZombie() {
+        return mlsecondsToZombie;
+    }
+
+    @Override
+    public void setTimeToZombie(long mlSeconds) {
+        mlsecondsToZombie = mlSeconds;
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.closeAll();
+        this.helper = null;
+        this.resulSets.clear();
+        this.nextid = -10;
+    }
+
+    @Override
+    public ResultSetEntryBase create(
+            String sql, 
+            int fetchSize, 
+            FeatureAttributeDescriptor[] columns,
+            String[] extraValueNames) throws DataException {
+        return create(sql, null, fetchSize, columns, extraValueNames);
+    }
+
+    @Override
+    public synchronized ResultSetEntryBase create(
+            String sql, 
+            List<Object> values, 
+            int fetchSize, 
+            FeatureAttributeDescriptor[] columns, 
+            String[] extraValueNames) throws DataException {
+        this.pack();
+        ResultSet rs = null;
+        Connection conn = null;
+        PreparedStatement st = null;
+        Disposable paramsDisposer = null;
+        try {
+            conn = helper.getConnection();
+            conn.setAutoCommit(false);
+            st = conn.prepareStatement(sql);
+
+            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+            paramsDisposer = sqlbuilder.setStatementParameters(st, values, helper.getGeometrySupportType());
+
+            if (fetchSize > 0) {
+                // See parameter "SelectMethod" of SQL Server Connection Properties
+                // https://docs.oracle.com/cd/E13157_01/wlevs/docs30/jdbc_drivers/mssqlserver.html
+                st.setFetchSize(fetchSize);
+            }
+            rs = JDBCUtils.executeQuery(st, sql);
+            if (fetchSize > 0) {
+                rs.setFetchSize(fetchSize);
+            }
+            ResultSetEntryBase rsentry = new ResultSetEntryBase(rs, sql, columns,  extraValueNames);
+            return rsentry;
+
+        } catch (SQLException e) {
+            JDBCUtils.closeQuietly(rs);
+            JDBCUtils.closeQuietly(st);
+            this.helper.closeConnectionQuietly(conn);
+            throw new JDBCExecutePreparedSQLException(sql, values, e);
+        } finally {
+            DisposeUtils.disposeQuietly(paramsDisposer);
+        }
+    }
+    
+    private List<ResultSetEntryBase> getResultSetValues() {
+        synchronized(this.resulSets){
+            List<ResultSetEntryBase> values = new ArrayList<>();
+            values.addAll(this.resulSets.values());
+            return values;
+        }
+    }
+
+    @Override
+    public synchronized void closeAll() {
+
+        List<ResultSetEntryBase> values = getResultSetValues();
+
+        for (ResultSetEntryBase entry : values) {
+            JDBCUtils.closeQuietly(entry);
+        }
+    }
+
+    @Override
+    public synchronized void pack() {
+
+        List<ResultSetEntryBase> values = getResultSetValues();
+
+        int maxID = 0;
+        for (ResultSetEntryBase entry : values) {
+            if (entry.isZombie()) {
+                JDBCUtils.closeQuietly(entry);
+            } else {
+                if (entry.getID() > maxID) {
+                    maxID = entry.getID();
+                }
+            }
+        }
+        this.nextid = maxID + 1;
+    }
+
+    @Override
+    public int getOpenCount() {
+        synchronized(resulSets){
+            return this.resulSets.size();
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCFastIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCFastIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCFastIterator.java	(revision 46118)
@@ -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.jdbc2.impl;
+
+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.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.tools.exception.BaseException;
+
+
+public class JDBCFastIterator extends JDBCIterator {
+
+	protected FeatureProvider featureProvider;
+
+	protected JDBCFastIterator(
+                JDBCStoreProvider store, 
+                JDBCSetProvider set,
+		FeatureType featureType, 
+                ResultSetEntry resultSetEntry 
+            ) throws DataException {
+            super(store, set, featureType, resultSetEntry);
+            this.featureProvider = super.createFeatureProvider();
+	}
+
+        @Override
+	protected FeatureProvider createFeatureProvider() throws DataException {
+		return this.featureProvider;
+	}
+
+	@Override
+	protected void doDispose() throws BaseException {
+		super.doDispose();
+		featureProvider = null;
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCIterator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCIterator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/impl/JDBCIterator.java	(revision 46118)
@@ -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.jdbc2.impl;
+
+import java.sql.SQLException;
+import java.util.NoSuchElementException;
+
+import org.gvsig.fmap.dal.exception.DataException;
+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.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.tools.exception.BaseException;
+
+public class JDBCIterator extends AbstractFeatureProviderIterator {
+
+    protected ResultSetEntry resulsetEntry;
+    protected Boolean hasNext = null;
+    protected FeatureType featureType;
+    protected JDBCSetProvider set;
+
+    protected JDBCIterator(
+            JDBCStoreProvider store, 
+            JDBCSetProvider set,
+            FeatureType featureType,
+            ResultSetEntry resulsetEntry
+        ) throws DataException {
+        super(store);
+        this.resulsetEntry = resulsetEntry;
+        this.featureType = featureType;
+        this.set = set;
+        this.hasNext = null;
+    }
+
+    @Override
+    protected JDBCStoreProvider getFeatureStoreProvider() {
+        return (JDBCStoreProvider) super.getFeatureStoreProvider();
+    }
+
+    @Override
+    public final Object next() {
+        return internalNext();
+    }
+
+    @Override
+    public final boolean hasNext() {
+        return internalHasNext();
+    }
+
+    @Override
+    protected boolean internalHasNext() {
+        if (hasNext == null) {
+            try {
+                if ( resulsetEntry.next() ) {
+                    hasNext = Boolean.TRUE;
+                } else {
+                    hasNext = Boolean.FALSE;
+                    this.close();
+                }
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return hasNext;
+    }
+
+    @Override
+    protected Object internalNext() {
+        if (!hasNext()) {
+            throw new NoSuchElementException();
+        }
+        FeatureProvider data;
+        try {
+            data = getFeatureProvider();
+        } catch (DataException e) {
+            throw new RuntimeException(e);
+        }
+        hasNext = null;
+        return data;
+    }
+
+    @Override
+    public void remove() {
+        throw new UnsupportedOperationException();
+    }
+
+    protected FeatureProvider createFeatureProvider() throws DataException {
+        return getFeatureStoreProvider().createFeatureProvider(featureType);
+    }
+
+    protected FeatureProvider getFeatureProvider() throws DataException {
+        FeatureProvider data = createFeatureProvider();
+        this.getFeatureStoreProvider().getHelper().fetchFeature(data, this.resulsetEntry);
+        return data;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        if (this.resulsetEntry!=null) {
+            this.close();
+        }
+        this.featureType = null;
+    }
+
+    protected void close() {
+        try {
+            this.resulsetEntry.close();
+            this.resulsetEntry = null;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/jdbc2/JDBCHelper.java	(revision 46118)
@@ -0,0 +1,232 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.jdbc2;
+
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.util.List;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.fmap.dal.SQLBuilder;
+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.FeatureQueryOrder;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.spi.DataTransactionServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolver;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public interface JDBCHelper extends AutoCloseable {
+
+    /**
+     * Return the name of the driver.
+     * 
+     * By default rerturn "JDBC".
+     * 
+     * @return 
+     */
+    public String getProviderName();
+    
+    /**
+     * Indica como deben ser guardadas las geometrias en la BBDD. Pueden
+     * guardarse en WKT, WKB o EWKB.
+     *
+     * @return
+     */
+    public GeometrySupportType getGeometrySupportType();
+
+    /**
+     * Devuelve un SQLBuilder adaptado al proveedor. Por ejemplo, uno especifico
+     * para PostgreSQL, MySQL, Oracle, MSSQLServer...
+     *
+     * @return
+     */
+    public JDBCSQLBuilderBase createSQLBuilder();
+
+    /**
+     * Devuelve las comillas que han de usaese para los identificadores.
+     *
+     * @return
+     */
+    public String getQuoteForIdentifiers();
+
+    /**
+     * Devuelve las comillas que han de usaese en las constantes de cadena.
+     *
+     * @return
+     */
+    public String getQuoteForStrings();
+    
+    public FeatureType getProviderFeatureType();
+    
+    /**
+     * @param providerFeatureType the providerFeatureType to set
+     */
+    public void setProviderFeatureType(FeatureType providerFeatureType);
+
+    /**
+     * Indica si la BBDD soporta valores automaticos, tipo serial.
+     *
+     * @return
+     */
+    public boolean allowAutomaticValues();
+
+    /**
+     * Indica si la BBDD soporta el uso de OFFSET en la sentencia select.
+     *
+     * @return
+     */
+    public boolean supportOffsetInSelect();
+
+    /**
+     * Indica si se especifico un subquery al abrir el proveedor.
+     *
+     * @return
+     */
+    public boolean useSubquery();
+
+    /**
+     * Indica si la BBDD tiene soporte espacial.
+     *
+     * @return
+     */
+    public boolean hasSpatialFunctions();
+
+    public boolean supportFilter(FeatureType type, Evaluator evaluator);
+    
+    public boolean supportExpression(final FeatureType type, String sql);
+    
+    public boolean supportOrder(FeatureType type, FeatureQueryOrder order);
+    
+    public boolean allowNestedOperations();
+    /**
+     * Indica si podemos escribir el tipo de geometria indicado.
+     *
+     * @param geometryType
+     * @param geometrySubtype
+     * @return
+     */
+    public boolean canWriteGeometry(
+            int geometryType, 
+            int geometrySubtype
+    );
+
+    public Connection getConnection() throws AccessResourceException;
+
+    public Connection getConnectionWritable() throws AccessResourceException;
+
+    public String getConnectionURL();
+    
+    public JDBCConnectionParameters getConnectionParameters();
+
+    public void closeConnection(Connection connection);
+
+    public void closeConnectionQuietly(Connection connection);
+
+    public GeometryManager getGeometryManager();
+
+    public ResulSetControler getResulSetControler();
+
+    public String getSourceId();
+
+    public ResourceProvider getResource();
+
+    public void dispose();
+
+    public void fetchFeature(
+            FeatureProvider feature, 
+            ResultSet rs,
+            FeatureAttributeDescriptor[] columns,
+            String[] extraValueNames
+    ) throws DataException;
+    
+    public void fetchFeature(
+            FeatureProvider feature, 
+            ResultSetEntry rs
+    ) throws DataException;
+
+    public Geometry getGeometryFromColumn(
+            ResultSet rs, 
+            int index
+    ) throws DataException;
+
+    public Geometry getGeometryFromColumn(
+            ResultSetEntry rs, 
+            int index
+    ) throws DataException;
+
+    public OperationsFactory getOperations();
+
+    public FeatureProvider createFeature(
+            FeatureType featureType
+    ) throws DataException;
+
+    public JDBCStoreProvider createProvider(
+            JDBCStoreParameters parameters,
+            DataStoreProviderServices providerServices
+    ) throws InitializeException;
+
+    public JDBCServerExplorer createServerExplorer(
+            JDBCServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+    ) throws InitializeException;
+
+    public SRSSolver getSRSSolver();
+    
+    public JDBCNewStoreParameters createNewStoreParameters();
+
+    public JDBCStoreParameters createOpenStoreParameters();
+    
+    public JDBCStoreParameters createOpenStoreParameters(JDBCServerExplorerParameters serverParameters);
+    
+    public JDBCServerExplorerParameters createServerExplorerParameters();
+
+    public String getSourceId(JDBCStoreParameters parameters);
+
+    public boolean isThreadSafe();
+    
+    public void processSpecialFunctions(
+            SQLBuilder sqlbuilder, 
+            FeatureType type,
+            List<String> extra_column_names // Output param
+    );
+
+    public void setTransaction(DataTransactionServices transaction);
+    
+    public void expandCalculedColumns(JDBCSQLBuilderBase sqlbuilder);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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 generic store";
+
+	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.trace("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.isTraceEnabled()) {
+				logger.trace(" 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(JDBCServerExplorerBase.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(JDBCServerExplorerBase.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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,17 @@
+
+
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+
+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.344/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.344/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.344/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 46118)
@@ -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.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);
+	}
+
+        @Override
+        public int getBatchSize() {
+            try {
+                return (int) this.getDynValue(BATCH_SIZE_PARAMETER_NAME);
+            } catch(Exception ex) {
+                return DEFAULT_BATCH_SIZE;
+            }
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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, JDBCServerExplorerBase.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);
+	}
+
+        @Override
+        public int getBatchSize() {
+            try {
+                return (int) this.getDynValue(BATCH_SIZE_PARAMETER_NAME);
+            } catch(Exception ex) {
+                return DEFAULT_BATCH_SIZE;
+            }
+        }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.Objects;
+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", Objects.toString(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.setScale(rsMetadata.getScale(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.trace("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.344/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.344/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/JDBCServerExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCServerExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCServerExplorerFactory.java	(revision 46118)
@@ -0,0 +1,40 @@
+package org.gvsig.fmap.dal.store.jdbc;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorerFactory;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+
+public class JDBCServerExplorerFactory extends AbstractDataServerExplorerFactory {
+
+    public JDBCServerExplorerFactory() {
+        super(
+                JDBCServerExplorerBase.NAME,
+                "JDBC generic server"
+        );
+    }
+
+    @Override
+    public JDBCServerExplorerBase create(
+            DataServerExplorerParameters parameters,
+            DataServerExplorerProviderServices providerServices
+    ) throws InitializeException {
+        JDBCServerExplorerBase explorer = new JDBCServerExplorerBase(
+                (JDBCServerExplorerParameters) parameters,
+                providerServices
+        );
+        return explorer;
+    }
+
+    @Override
+    public JDBCServerExplorerParameters createParameters() {
+        return new JDBCServerExplorerParameters();
+    }
+
+    @Override
+    public boolean isStoreSupported(String name) {
+        return StringUtils.equalsIgnoreCase(name, this.getName());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.dal.store.jdbc;
+
+import java.text.MessageFormat;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+
+/**
+ * Parameters class for JDBC generic provider
+ *
+ */
+public class JDBCStoreParameters extends DBStoreParameters
+		implements JDBCConnectionParameters {
+
+	public static final String BATCHSIZE_PARAMTER_NAME = "batchSize";
+    
+//	public static final String PARAMETERS_DEFINITION_NAME = "JDBCStoreParameters";
+
+	public JDBCStoreParameters() {
+		super(
+                        JDBCLibrary.NAME + "StoreParameters",
+                        JDBCLibrary.NAME
+                );
+	}
+
+	protected JDBCStoreParameters(String parametersDefinitionName) {
+		super(
+                        parametersDefinitionName,
+                        JDBCLibrary.NAME
+                );
+	}
+
+	public 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);
+	}
+
+        @Override
+        public int getBatchSize() {
+            try {
+                return (int) this.getDynValue(BATCH_SIZE_PARAMETER_NAME);
+            } catch(Exception ex) {
+                return DEFAULT_BATCH_SIZE;
+            }
+        }
+        
+	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 (  StringUtils.isEmpty(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);
+	}
+
+    @Override
+    public JDBCStoreParameters getCopy() {
+        return (JDBCStoreParameters) super.getCopy();
+    }
+    
+    public void setBatchSize(int batchSize) {
+            this.setDynValue(BATCH_SIZE_PARAMETER_NAME, batchSize);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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/JDBCServerExplorerBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCServerExplorerBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCServerExplorerBase.java	(revision 46118)
@@ -0,0 +1,613 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional 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.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 JDBCServerExplorerBase extends AbstractDBServerExplorer
+        implements JDBCHelperUser, JDBCServerExplorer {
+
+    private static final Logger LOG = LoggerFactory
+            .getLogger(JDBCServerExplorerBase.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 JDBCServerExplorerBase(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);
+    }
+
+    @Override
+    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
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public JDBCNewStoreParameters 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
+
+    }
+
+    @Override
+    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(JDBCSQLException e) {
+            throw e;
+        } 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;
+    }
+
+    @Override
+    public String getProviderName() {
+        return NAME;
+    }
+
+    @Override
+    public String getStoreName() {
+        return JDBCStoreProvider.NAME;
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    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;
+
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public List getDataStoreProviderNames() {
+        List x = new ArrayList(1);
+        x.add(JDBCStoreProvider.NAME);
+        return x;
+    }
+
+    @Override
+    public void updateTableStatistics(String database, String schema, String table) throws JDBCExecuteSQLException {
+    }
+
+    @Override
+    public JDBCStoreParameters get(String name) throws DataException {
+        JDBCStoreParameters params = this.createStoreParams();
+        params.setTable(name);
+        return params;
+    }
+
+    @Override
+    public Object execute(String sql) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/JDBCServerExplorerBase.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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";
+
+	public static final String BATCH_SIZE_PARAMETER_NAME = "batchSize";
+        
+        public static final int DEFAULT_BATCH_SIZE = 500;
+        
+	/**
+	 * 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();
+        
+        public int getBatchSize();
+        
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,51 @@
+package org.gvsig.fmap.dal.store.jdbc;
+
+import java.util.List;
+import org.gvsig.fmap.dal.DataServerExplorer_v2;
+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.RemoveException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
+
+public interface JDBCServerExplorer extends DataServerExplorer_v2 {
+
+    @Override
+    boolean add(String providerName, NewDataStoreParameters ndsp, boolean overwrite) throws DataException;
+
+    @Override
+    boolean canAdd();
+
+    @Override
+    JDBCStoreParameters get(String name) throws DataException;
+
+    JDBCNewStoreParameters getAddParameters() throws DataException;
+
+    @Override
+    List<String> getDataStoreProviderNames();
+
+    FeatureType getFeatureType(DataStoreParameters dsp) throws DataException;
+
+    DataStoreParameters getOpenParameters() throws DataException;
+
+    @Override
+    String getProviderName();
+
+    String getStoreName();
+
+    @Override
+    List<DataStoreParameters> list(int mode) throws DataException;
+
+    DataStore open(DataStoreParameters dsp) throws DataException;
+
+    @Override
+    void remove(DataStoreParameters dsp) throws RemoveException;
+
+    void updateTableStatistics(String database, String schema, String table) throws JDBCExecuteSQLException;
+    
+    public Object execute(String sql);
+  
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.apache.commons.lang3.StringUtils;
+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();
+    }
+
+    /**
+     * Registra/Carga el driver de JDBC.
+     * 
+     * Debe ser sobreescrita en cada proveedor de datos para asegurar que se
+     * tegna acceso al driver.
+     * 
+     * @throws InitializeException 
+     */
+    protected void registerJDBCDriver() throws InitializeException {
+        String className = this.getParameters().getJDBCDriverClassName();
+        if (className == null) {
+            return;
+        }
+        try {
+            Class theClass = Class.forName(className);
+            if (theClass == null) {
+                throw new JDBCDriverClassNotFoundException(this.getName(), className);
+            }
+        } catch (Exception e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    /**
+     * Crea el JDBC DataSource a partir de la informacion de los parametros
+     * del recurso.
+     * 
+     * Debe ser sobreescrita en cada proveedor de datos para asegurar que se
+     * tenga acceso al driver.
+     * 
+     * @return 
+     */
+    protected DataSource createDataSource() {
+        JDBCResourceParameters jdbcParams = 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;
+    }
+
+
+    @Override
+    public JDBCResourceParameters getParameters() {
+        return (JDBCResourceParameters) super.getParameters();
+    }
+
+    @Override
+    public String getName() throws AccessResourceException {
+        JDBCResourceParameters params = this.getParameters();
+        return MessageFormat.format("JDBCResource({0},{1},{2},{3},{4})",
+                new Object[]{
+                    params.getJDBCDriverClassName(),
+                    params.getHost(),
+                    params.getPort(),
+                    params.getUser(),
+                    params.getDBName()
+                }
+        );
+    }
+    
+    public Connection getJDBCConnection() throws AccessResourceException {
+        return (Connection) get();
+    }
+
+    public void closeConnection(Connection connection) {
+        try {
+            logger.trace("before-close connection" + this.getStatusInformation());
+            connection.close();
+            logger.trace("after close connection " + this.getStatusInformation());
+        } catch (Exception ex) {
+            logger.warn("Problems closing connection.", ex);
+        }
+    }
+
+    protected void debugPoolStatus(String src) {
+        if (logger.isTraceEnabled()) {
+            logger.trace(src + "  " + this.getStatusInformation());
+        }
+    }
+
+    public String getStatusInformation() {
+        if (!(dataSource instanceof BasicDataSource)) {
+            return "Connected: " + this.isConnected();
+        }
+        BasicDataSource ds = (BasicDataSource) dataSource;
+        String s = MessageFormat.format("Conneted {0}, actives {1}/{2}, idle {3}/{4}",
+            this.isConnected(),
+            ds.getNumActive(),
+            ds.getMaxActive(),
+            ds.getNumIdle(),
+            ds.getMaxIdle()
+        );
+        return s;
+    }
+
+    @Override
+    protected synchronized Object getTheConnection() throws DataException {
+        try {
+            Object conn = this.dataSource.getConnection();
+            debugPoolStatus("getTheConnection");
+            return conn;
+        } catch (SQLException e) {
+            throw new JDBCSQLException(e);
+        }
+    }
+
+    @Override
+    public boolean isThis(ResourceParameters parameters)
+            throws ResourceException {
+        if (!super.isThis(parameters)) {
+            return false;
+        }
+        JDBCResourceParameters params = (JDBCResourceParameters) parameters;
+        String dbName = params.getDBName();
+        String myDbName = this.getParameters().getDBName();
+        if ( !StringUtils.equals(dbName, myDbName) ) {
+            return false;
+        }
+
+        String driver = params.getJDBCDriverClassName();
+        String myDriver = getParameters().getJDBCDriverClassName();
+        if ( !StringUtils.equals(driver, myDriver) ) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isConnected() {
+        if (dataSource == null) {
+            return false;
+        }
+        if (dataSource instanceof BasicDataSource) {
+            return ((BasicDataSource) dataSource).getNumActive() > 0
+                    || ((BasicDataSource) dataSource).getNumIdle() > 0;
+        }
+        return true;
+    }
+
+    @Override
+    protected void connectToDB() throws DataException {
+        if (this.dataSource != null) {
+            return;
+        }
+        this.dataSource = this.createDataSource();
+    }
+
+    public void beginUse() {
+        this.executeBegins();
+    }
+
+    public void endUse() {
+        this.executeEnds();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.store.jdbc;
+
+import org.apache.commons.lang3.StringUtils;
+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);
+    }
+
+    @Override
+    public int getBatchSize() {
+        try {
+            return (int) this.getDynValue(BATCH_SIZE_PARAMETER_NAME);
+        } catch(Exception ex) {
+            return DEFAULT_BATCH_SIZE;
+        }
+    }
+
+    /**
+     * 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/JDBCCantFetchValueException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCCantFetchValueException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCCantFetchValueException.java	(revision 46118)
@@ -0,0 +1,14 @@
+
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+
+public class JDBCCantFetchValueException extends JDBCException {
+    private static final long serialVersionUID = -8209102236829832400L;
+ 
+    private final static String MESSAGE_FORMAT = "Can't fetch value(s) from resultset.";
+    private final static String MESSAGE_KEY = "_JDBCCantFetchValueException";
+        
+    public JDBCCantFetchValueException(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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(Exception 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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/JDBCCantFetchMetadata.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCCantFetchMetadata.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCCantFetchMetadata.java	(revision 46118)
@@ -0,0 +1,14 @@
+
+package org.gvsig.fmap.dal.store.jdbc.exception;
+
+
+public class JDBCCantFetchMetadata extends JDBCException {
+    private static final long serialVersionUID = -8209102236829832400L;
+ 
+    private final static String MESSAGE_FORMAT = "Can't fetch metadata from the connection.";
+    private final static String MESSAGE_KEY = "_JDBCCantFetchMetadata";
+        
+    public JDBCCantFetchMetadata(Throwable cause) {
+        super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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/JDBCStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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/JDBCStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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/JDBCStoreProviderFactory.java	(revision 46118)
@@ -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.jdbc;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.spi.AbstractFeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.tools.dynobject.DynObject;
+
+public class JDBCStoreProviderFactory 
+    extends AbstractFeatureStoreProviderFactory 
+    {
+
+    private static final Logger logger = LoggerFactory.getLogger(JDBCStoreProviderFactory.class);
+
+    protected JDBCStoreProviderFactory() {
+        super(
+                JDBCStoreProvider.NAME, 
+                JDBCStoreProvider.DESCRIPTION
+        );
+    }
+
+    @Override
+    public JDBCStoreProvider createProvider(DataParameters parameters,
+            DataStoreProviderServices providerServices)
+            throws InitializeException {
+        return new JDBCStoreProvider((JDBCStoreParameters) parameters, providerServices);
+    }
+
+    @Override
+    public JDBCStoreParameters createParameters() {
+        return new JDBCStoreParameters();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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/JDBCStoreProviderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.
+ */
+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.FeatureType.FeatureTypeChanged;
+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.344/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.344/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.344/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.344/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 46118)
@@ -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.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
+ *
+ */
+public class JDBCLibrary extends AbstractLibrary {
+
+    public static final String NAME = "JDBC";
+
+    @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(
+                NAME + "StoreParameters",
+                JDBCStoreParameters.class,
+                NAME + "Parameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "NewStoreParameters",
+                JDBCNewStoreParameters.class,
+                NAME + "Parameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "ServerExplorerParameters",
+                JDBCServerExplorerParameters.class,
+                NAME + "Parameters.xml"
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "ResourceParameters",
+                JDBCResourceParameters.class,
+                NAME + "Parameters.xml"
+        );
+
+        try {
+            DBHelper.registerMetadataDefinition(
+                    NAME,
+                    JDBCStoreProvider.class,
+                    NAME + "Metadata.xml"
+            );
+        } catch (MetadataException e) {
+            ex = new LibraryException(this.getClass(), e);
+        }
+
+        ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator
+                .getResourceManager();
+
+        if (!resman.getResourceProviders().contains(NAME)) {
+            resman.register(
+                    JDBCResource.NAME,
+                    JDBCResource.DESCRIPTION,
+                    JDBCResource.class,
+                    JDBCResourceParameters.class
+            );
+        }
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
+                .getDataManager();
+
+        if (!dataman.getStoreProviders().contains(NAME)) {
+            dataman.registerStoreProviderFactory(new JDBCStoreProviderFactory());
+        }
+
+        if (!dataman.getServerExplorerRegister().exits(JDBCStoreProvider.NAME)) {
+            dataman.registerServerExplorerFactory(new JDBCServerExplorerFactory());
+        }
+
+        if (ex != null) {
+            throw ex;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/pom.xml	(revision 46118)
@@ -0,0 +1,139 @@
+<?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.344</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>
+    <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</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.fmap.dal.impl</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>    
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.expressionevaluator.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>    
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+        <scope>test</scope>
+    </dependency>    
+    <dependency>
+        <groupId>org.gvsig</groupId>
+        <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- Skip test execution ? -->
+          <skipTests>false</skipTests>
+          <!-- Ignore test execution failure ? -->
+          <testFailureIgnore>false</testFailureIgnore>
+        </configuration>
+      </plugin>
+        
+      <!-- Skip test compilation ? -->
+      <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>false</skip>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+        <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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/.directory
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/.directory	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/.directory	(revision 46118)
@@ -0,0 +1,7 @@
+[Dolphin]
+Timestamp=2019,3,14,15,18,44
+Version=4
+ViewMode=1
+
+[Settings]
+HiddenFilesShown=true

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/pom.xml	(revision 46118)
@@ -0,0 +1,172 @@
+<?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.mdb</artifactId>
+    <name>${project.artifactId}</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.fmap.dal.db</artifactId>
+        <version>2.0.344</version>
+    </parent>  
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.ucanaccess</groupId>
+            <artifactId>ucanaccess</artifactId>
+            <version>5.0.0</version>
+            <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.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+            <scope>test</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>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</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.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>org.gvsig</groupId>
+            <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
+            <scope>test</scope>
+        </dependency>    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>    
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.se</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+            <scope>test</scope>
+        </dependency>      
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.util.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!-- Skip test execution ? -->
+                    <skipTests>false</skipTests>
+                    <!-- Ignore test execution failure ? -->
+                    <testFailureIgnore>true</testFailureIgnore>
+                </configuration>
+            </plugin>
+        
+            <!-- Skip test compilation ? -->
+            <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>false</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilderTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilderTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilderTest.java	(revision 46118)
@@ -0,0 +1,568 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import junit.framework.TestCase;
+import org.apache.commons.lang3.ArrayUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.dal.SQLBuilder.Privilege;
+import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.FakeConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.OperationsFactoryBase;
+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.primitive.Polygon;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class MDBSQLBuilderTest extends TestCase {
+    
+    public MDBSQLBuilderTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private SQLBuilder createSQLBuilder() {
+        return new MDBSQLBuilder(new MDBHelper(new FakeConnectionParameters()));
+    }
+    
+    public void testCalulateEnvelopeOfColumn() throws Exception {
+        
+        TableReference table = new OperationsFactoryBase.DefaultTableReference("master","dbo","test1", null);
+        String columnName = "the_geom";
+        
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(
+            expbuilder.as_geometry(
+                expbuilder.ST_ExtentAggregate(
+                        expbuilder.column(columnName)
+                )
+            )
+        );
+        //sqlbuilder.select().group_by(expbuilder.column(columnName));
+        sqlbuilder.select().from().table()
+                .database(table.getDatabase())
+                .schema(table.getSchema())
+                .name(table.getTable());
+        sqlbuilder.select().from().subquery(table.getSubquery());
+
+        sqlbuilder.select().where().and(        
+            expbuilder.not_is_null(expbuilder.column(columnName))
+        );
+        
+        System.out.println("# Test:: testCalulateEnvelopeOfColumn");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "SELECT NVL2(ST_Extent(\"the_geom\"),ST_AsBinary(ST_Extent(\"the_geom\")),NULL) FROM \"dbo\".\"test1\" WHERE ( (\"the_geom\") IS NOT NULL )",
+        assertEquals(
+                "SELECT ST_AsBinary(ST_ExtentAggregate([the_geom])) FROM [test1] WHERE ( ([the_geom]) IS NOT NULL )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[the_geom]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+ 
+    public void testCalulateEnvelope() throws Exception {
+        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+        
+        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
+        limit.addVertex(0, 0);
+        limit.addVertex(0, 100);
+        limit.addVertex(100, 100);
+        limit.addVertex(100, 0);
+        limit.addVertex(0, 0);
+        
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(
+            expbuilder.as_geometry(
+              expbuilder.ST_ExtentAggregate(
+                expbuilder.column("the_geom")
+              )
+            )
+        ).as("envelope");
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.ST_Intersects(
+                expbuilder.ST_Envelope(
+                    expbuilder.column("the_geom")
+                ),
+                expbuilder.geometry(limit, proj)
+            )
+        );
+        sqlbuilder.select().where().and(
+                expbuilder.custom("x = 27")
+        );
+        
+        System.out.println("# Test:: testCalulateEnvelope");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "SELECT NVL2(ST_Extent(\"the_geom\"),ST_AsBinary(ST_Extent(\"the_geom\")),NULL) AS \"envelope\" FROM \"dbo\".\"test1\" WHERE (( ((ST_Envelope(\"the_geom\")) && (ST_GeomFromWKB((x'000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000'), (4326)))) AND ST_Intersects((ST_Envelope(\"the_geom\")),(ST_GeomFromWKB((x'000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000'), (4326))) )) AND x = 27)",
+        assertEquals(
+                "SELECT ST_AsBinary(ST_ExtentAggregate([the_geom])) AS [envelope] FROM [test1] WHERE (ST_Intersects((ST_Envelope([the_geom])), (x'000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000')) AND x = 27)",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[the_geom]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testCount() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.select().column().value(sqlbuilder.count().all());
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().from().subquery(null);
+        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
+
+        System.out.println("# Test:: testCount");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+
+        //# Test:: testCount
+        //# SQL:: SELECT COUNT(*) FROM "test1" WHERE pp = 200
+        //# Variables:: []
+        //# Parametros:: []
+
+//                "SELECT COUNT(*) FROM \"dbo\".\"test1\" WHERE pp = 200",
+        assertEquals(
+                "SELECT COUNT(*) FROM [test1] WHERE pp = 200",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testCreateTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.create_table().add_column(
+                "name",
+                DataTypes.STRING,
+                45,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+        sqlbuilder.create_table().add_column(
+                "id",
+                DataTypes.INT,
+                0,
+                0,
+                0,
+                true,
+                false,
+                false,
+                true,
+                0
+        );
+        sqlbuilder.create_table().add_column(
+                "geom",
+                DataTypes.GEOMETRY,
+                0,
+                0,
+                0,
+                false,
+                false,
+                true,
+                false,
+                null
+        );
+
+        
+        // CREATE TABLE "test1" ("name" VARCHAR(45) DEFAULT NULL, "id" INTEGER PRIMARY KEY AUTO_INCREMENT DEFAULT '0' NOT NULL, "geom" GEOMETRY ); ALTER TABLE "test1" ADD CONSTRAINT IF NOT EXISTS "constraint_test1_geom_dim" CHECK ST_CoordDim("geom") = 2
+        System.out.println("# Test:: testCreateTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "CREATE TABLE \"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL, \"id\" INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, \"geom\" GEOMETRY(1) CHECK NVL2(\"geom\", ST_GeometryTypeCode(\"geom\") = 0 AND ST_CoordDim(\"geom\") = 2, TRUE) )",
+        assertEquals(
+                "CREATE TABLE [test1] ([name] VARCHAR(45) DEFAULT NULL, [id] INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, [geom] CLOB DEFAULT NULL )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testDropTable() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
+
+        // DROP TABLE "test1"
+        
+        System.out.println("# Test:: testDropTable");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "DROP TABLE \"dbo\".\"test1\"",
+        assertEquals(
+                "DROP TABLE [test1]",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureProviderByReference() throws Exception {
+        SQLBuilder sqlbuilder = new SQLBuilderBase();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+        
+        String value = "yoyo";
+        sqlbuilder.select().column().name("name");
+        sqlbuilder.select().column().name("id");
+        sqlbuilder.select().column().name("geom").as_geometry();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().where().set(
+            expbuilder.eq(
+                expbuilder.column("name"),
+                expbuilder.parameter(value).as_constant()
+            )
+        );
+        sqlbuilder.select().limit(1);
+
+        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
+
+        System.out.println("# Test:: testFetchFeatureProviderByReference");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "['yoyo']",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+    
+    public void testFetchFeatureType() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.select().column().all();
+        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.select().limit(1);
+
+        System.out.println("# Test:: testFetchFeatureType");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        
+        //# Test:: testFetchFeatureType
+        //# SQL:: SELECT * FROM "test1" LIMIT 1
+        //# Variables:: []
+        //# Parametros:: []        
+        
+//                "SELECT * FROM \"dbo\".\"test1\" LIMIT 1",
+        assertEquals(
+                "SELECT * FROM [test1] LIMIT 1",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+        
+    public void testPerformDeletes() throws Exception {
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id1"),
+                expbuilder.parameter("id1").as_variable()
+            )
+        );
+        sqlbuilder.delete().where().and(
+            expbuilder.eq( 
+                expbuilder.column("id2"),
+                expbuilder.parameter("id2").as_variable()
+            )
+        );
+
+        // DELETE FROM "test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
+
+        System.out.println("# Test:: testPerformDeletes");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "DELETE FROM \"dbo\".\"test1\" WHERE (( (\"id1\") = (?) ) AND ( (\"id2\") = (?) ))",
+        assertEquals(
+                "DELETE FROM [test1] WHERE (( ([id1]) = (?) ) AND ( ([id2]) = (?) ))",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[id1, id2]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id1\", \"id2\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts1() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
+        
+        System.out.println("# Test:: testPerformInserts1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "INSERT INTO \"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
+        assertEquals(
+                "INSERT INTO [test1] ( [id], [name], [geom] ) VALUES ( ?, ?, ? )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformInserts2() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
+        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
+        
+        System.out.println("# Test:: testPerformInserts2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "INSERT INTO \"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
+        assertEquals(
+                "INSERT INTO [test1] ( [id], [name], [geom] ) VALUES ( ?, ?, ? )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"id\", \"name\", \"geom\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformUpdates1() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.update().where().and(
+            expbuilder.eq(
+                expbuilder.column("id"), 
+                expbuilder.parameter("id").as_variable()
+            )
+        );
+        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.update().column().name("geom").with_value(
+                expbuilder.parameter("geom").as_geometry_variable().srs(proj) 
+        );
+
+        System.out.println("# Test:: testPerformUpdates");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "UPDATE \"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (4326)) WHERE ( (\"id\") = (?) )",
+        assertEquals(
+                "UPDATE [test1] SET [name] = ?, [geom] = ? WHERE ( ([id]) = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"name\", \"geom\", \"id\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testPerformUpdates2() throws Exception {
+        IProjection proj = CRSFactory.getCRS("EPSG:4326");
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.update().where().and(
+            expbuilder.eq(
+                expbuilder.column("id"), 
+                expbuilder.parameter("id").as_variable()
+            )
+        );
+        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
+        sqlbuilder.update().column().name("geom").with_value(
+                expbuilder.parameter("geom").as_geometry_variable()
+                        .srs(expbuilder.parameter().value(proj)) 
+        );
+
+        System.out.println("# Test:: testPerformUpdates");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+//                "UPDATE \"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (?)) WHERE ( (\"id\") = (?) )",
+        assertEquals(
+                "UPDATE [test1] SET [name] = ?, [geom] = ? WHERE ( ([id]) = (?) )",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[geom, id, name]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[\"name\", \"geom\", 4326, \"id\"]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant1() throws Exception {
+
+        SQLBuilder sqlbuilder = createSQLBuilder();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").select().insert().update();
+        sqlbuilder.grant().role("gis").all();
+                
+        
+        System.out.println("# Test:: testGrant1");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+    public void testGrant2() throws Exception {
+
+        SQLBuilder sqlbuilder = new SQLBuilderBase();
+        ExpressionBuilder expbuilder = sqlbuilder.expression();
+
+        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
+        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
+                .privilege(Privilege.INSERT)
+                .privilege(Privilege.UPDATE);
+        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
+                
+        
+        System.out.println("# Test:: testGrant2");
+        System.out.println("# SQL:: " + sqlbuilder.toString());
+        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
+        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
+        assertEquals(
+                "",
+                sqlbuilder.toString()
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.variables_names())
+        );
+        assertEquals(
+                "[]",
+                ArrayUtils.toString(sqlbuilder.parameters_names())
+        );
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/STAsBinaryTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/STAsBinaryTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/STAsBinaryTest.java	(revision 46118)
@@ -0,0 +1,146 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+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.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class STAsBinaryTest extends TestCase {
+
+    private static final String TABLE_EMPTY_WITH_GEOM = "TABLE_EMPTY_WITH_GEOM";
+    private static final String TABLE_WITH_NULL_GEOMS = "TABLE_WITH_NULL_GEOMS";
+    
+    public static final String DBNAME = "STAsBinaryTest";
+    
+    public STAsBinaryTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    private void createTableWithNullGeoms(JDBCServerExplorer explorer, String tableName) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        JDBCNewStoreParameters create_params = explorer.getAddParameters();
+        create_params.setTable(tableName);
+        EditableFeatureType ft = create_params.getDefaultFeatureType();
+        ft.add("ID", DataTypes.INT).setIsPrimaryKey(true);
+        ft.add("ISNULL", DataTypes.BOOLEAN);
+        ft.add("GEOM", DataTypes.GEOMETRY)
+                .setGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D).
+                setSRS("EPSG:4326");
+        explorer.add(TestUtils.PROVIDER_NAME, create_params, false);
+
+        JDBCStoreParameters open_params = explorer.getOpenParameters();
+        open_params.setTable(tableName);
+        FeatureStore store = (FeatureStore) dataManager.openStore(TestUtils.PROVIDER_NAME, open_params);
+        store.edit(FeatureStore.MODE_FULLEDIT);
+        EditableFeature f;
+        int id=1;
+        f = store.createNewFeature();
+        f.set("ID", id++);
+        f.set("ISNULL", false);
+        f.set("GEOM", GeometryUtils.createPoint(10, 10));
+        store.insert(f);
+        f = store.createNewFeature();
+        f.set("ID", id++);
+        f.set("ISNULL", true);
+        f.set("GEOM", null);
+        store.insert(f);
+        f = store.createNewFeature();
+        f.set("ID", id++);
+        f.set("ISNULL", true);
+        f.set("GEOM", null);
+        store.insert(f);
+        f = store.createNewFeature();
+        f.set("ID", id++);
+        f.set("ISNULL", false);
+        f.set("GEOM", GeometryUtils.createPoint(20, 20));
+        store.insert(f);
+        store.finishEditing();
+    }
+    
+    private void createEmptyTable(JDBCServerExplorer explorer, String tableName) throws Exception {
+        JDBCNewStoreParameters params = explorer.getAddParameters();
+        params.setTable(tableName);
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.add("ID", DataTypes.INT).setIsPrimaryKey(true);
+        ft.add("ISNULL", DataTypes.BOOLEAN);
+        ft.add("GEOM", DataTypes.GEOMETRY)
+                .setGeometryType(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D).
+                setSRS("EPSG:4326");
+        explorer.add(TestUtils.PROVIDER_NAME, params, false);
+    }
+    
+    public void testGetEnvelopeOfEmptyTable() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
+        createEmptyTable(explorer, TABLE_EMPTY_WITH_GEOM);
+        
+        JDBCStoreParameters params = explorer.getOpenParameters();
+        params.setTable(TABLE_EMPTY_WITH_GEOM);
+        FeatureStore store = (FeatureStore) dataManager.openStore(TestUtils.PROVIDER_NAME, params);
+        Envelope env = store.getEnvelope();
+        assertNull(env);
+    }
+
+    public void testGetEnvelopeOfTableWithNullGeoms() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
+        createTableWithNullGeoms(explorer, TABLE_WITH_NULL_GEOMS);
+        
+        JDBCStoreParameters params = explorer.getOpenParameters();
+        params.setTable(TABLE_WITH_NULL_GEOMS);
+        FeatureStore store = (FeatureStore) dataManager.openStore(TestUtils.PROVIDER_NAME, params);
+        Envelope env = store.getEnvelope();
+        assertNotNull(env);
+        assertEquals("POLYGON ((10.0 10.0, 10.0 20.0, 20.0 20.0, 20.0 10.0, 10.0 10.0))", env.toString());
+    }
+
+    public void testIterateOverTableWithNullGeoms() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
+        createTableWithNullGeoms(explorer, TABLE_WITH_NULL_GEOMS);
+        
+        JDBCStoreParameters params = explorer.getOpenParameters();
+        params.setTable(TABLE_WITH_NULL_GEOMS);
+        FeatureStore store = (FeatureStore) dataManager.openStore(TestUtils.PROVIDER_NAME, params);
+        FeatureSet set = store.getFeatureSet();
+        int sz = (int) set.getSize();
+//        System.out.println("#### count: "+sz);
+        for (Feature f : set ) {
+//            System.out.println("#### feature: "+f.toString());
+            if( !f.getBoolean("ISNULL") ) {
+                assertNotNull(f.getGeometry("GEOM"));
+            }
+        }
+        assertEquals(4, sz);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestUtils.java	(revision 46118)
@@ -0,0 +1,131 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+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.DataStore;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.spi.FakeConnectionProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestUtils  {
+    
+    public static final Logger LOGGER = LoggerFactory.getLogger(TestUtils.class);
+
+    public static final String PROVIDER_NAME = MDBLibrary.NAME;
+
+    private static int dbcounter = 1;
+    
+    public static MDBConnectionParameters buildDBConnection(String dbname) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        MDBConnectionParameters conn = (MDBConnectionParameters) 
+                dataManager.createServerExplorerParameters(MDBLibrary.NAME);
+
+        File dbfile = TestUtils.getResource(String.format(
+                "test-dbs/%s-%d-%03d",
+                dbname,
+                System.currentTimeMillis(), 
+                dbcounter++
+            )
+        );
+//        System.out.println("#### dbfile: " + dbfile.getAbsolutePath());
+        FileUtils.forceMkdir(dbfile.getParentFile());
+        conn.setFile(dbfile);
+        return conn;
+    }
+    
+    public static JDBCServerExplorer openServerExplorer(String dbname) throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        MDBConnectionParameters conn = buildDBConnection(dbname);
+        JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                PROVIDER_NAME, conn
+        );
+        return explorer;
+    }
+    
+    public static File getTargetFolder() throws Exception {
+        URL url = TestUtils.class.getResource("/");
+        File x = new File(url.toURI());
+        File target = x.getParentFile();
+        return target;
+    }
+    
+    public static File getResource(String name) throws Exception {
+        File x = new File(getTargetFolder(), name);
+        return x;
+    }
+    
+    public static File getResourceAsFile(String pathname) throws Exception {
+        URL url = TestUtils.class.getResource(pathname);
+        File x = new File(url.toURI());
+        return x;
+    }
+
+    public static void removeDALResource(String dbname, String name) throws Exception {
+        MDBConnectionParameters connection = buildDBConnection(dbname);
+        DatabaseWorkspaceManager workspace = DALLocator.getDataManager().createDatabaseWorkspaceManager(
+                (DataServerExplorerParameters) connection
+        );
+//        ResourcesStorage resources = workspace.getResourcesStorage(name);
+//        resources.remove("dal");
+    }
+
+    public static FeatureStore openSourceStore1() throws Exception {
+        DataManager dataManager = DALLocator.getDataManager();
+        File f = getResourceAsFile("/org/gvsig/fmap/dal/store/mdb/testCreateSource1.csv");
+        FeatureStore store = (FeatureStore) dataManager.openStore(
+                DataStore.CSV_PROVIDER_NAME, 
+                "file=",f,
+                "automaticTypesDetection=", false,
+                "locale=","en"
+        );
+        return store;
+    }
+ 
+
+    public static List<String> getSQLs(String name) throws Exception {
+      File f = getResourceAsFile("/org/gvsig/fmap/dal/store/mdb/"+name);
+      List<String> SQLs = new ArrayList<>();
+      List<String> lines = FileUtils.readLines(f);
+      StringBuilder sb = new StringBuilder();
+      for (String line : lines) {
+        line = StringUtils.stripStart(line, null);
+        if( line.startsWith("--") ) {
+          continue;
+        }
+        if( line.endsWith(";") ) {
+          sb.append(line.substring(0, line.length()-1));
+          SQLs.add(sb.toString());
+          sb.setLength(0);
+        } else {
+          sb.append(line);
+        }
+      }
+      return SQLs;
+    }
+    
+    public static FeatureProvider getFeatureProvider(Feature feature) {
+      return ((DefaultFeature)feature).getData();
+    }
+
+    public static JDBCHelper getJDBCHelper() throws Exception {
+        MDBConnectionParameters params = buildDBConnection("fake");
+        MDBHelper helper = new MDBHelper(params, new FakeConnectionProvider());
+        return helper;
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestCreate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestCreate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/TestCreate.java	(revision 46118)
@@ -0,0 +1,479 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.Date;
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+import org.apache.commons.codec.binary.Hex;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+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.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.NewFeatureStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCreate extends TestCase {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestCreate.class);
+
+    public static final String DBNAME = "testCreate";
+
+    public TestCreate(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        new DefaultLibrariesInitializer().fullInitialize();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    // TODO add test methods here. The name must begin with 'test'. For example:
+    // public void testHello() {}
+    protected String getProviderName() {
+        return DataStore.MDB_PROVIDER_NAME;
+    }
+
+    protected String getTargetName() {
+        return "testCreateTarget1";
+    }
+
+    protected FeatureStore openTargetStore1(JDBCServerExplorer explorer) throws Exception {
+        JDBCStoreParameters params = explorer.get(getTargetName());
+
+        DataManager dataManager = DALLocator.getDataManager();
+        FeatureStore store;
+        try {
+            store = (FeatureStore) dataManager.openStore(
+                    getProviderName(),
+                    params
+            );
+        } catch (ValidateDataParametersException ex) {
+            LOGGER.warn(ex.getLocalizedMessageStack());
+            throw ex;
+        }
+        return store;
+    }
+
+    protected void createFrom(JDBCServerExplorer explorer, FeatureStore sourceStore) throws Exception {
+        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
+                getTargetName()
+        );
+        EditableFeatureType ft = params.getDefaultFeatureType();
+        ft.addAll(sourceStore.getDefaultFeatureType());
+        explorer.add(getProviderName(), params, true);
+    }
+
+    protected void checkTypes(JDBCServerExplorer explorer, FeatureType sourceFeatureType) throws Exception {
+//        DataType STRING_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.STRING);
+//        DataType INT_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.INT);
+
+        FeatureStore targetStore = openTargetStore1(explorer);
+        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
+
+        assertEquals("Feature type size", sourceFeatureType.size(), targetFeatureType.size());
+        for (int i = 0; i < sourceFeatureType.size(); i++) {
+            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
+            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
+            switch (sourceAttr.getType()) {
+                case DataTypes.DECIMAL:
+                    if (sourceAttr.getPrecision() == 19 && sourceAttr.getScale() == 0) { // en acces es un decimal, lo tratamos como long
+                        assertEquals(
+                                String.format("Field %s name mismatch", sourceAttr.getName()),
+                                sourceAttr.getName(),
+                                targetAttr.getName()
+                        );
+                        assertEquals(
+                                String.format("Field %s type mismatch", sourceAttr.getName()),
+                                "Long",
+                                targetAttr.getDataTypeName()
+                        );
+                    } else {
+                        assertEquals(
+                                String.format("Field %s name mismatch", sourceAttr.getName()),
+                                sourceAttr.getName(),
+                                targetAttr.getName()
+                        );
+                        assertEquals(
+                                String.format("Field %s type mismatch", sourceAttr.getName()),
+                                sourceAttr.getDataTypeName(),
+                                targetAttr.getDataTypeName()
+                        );
+                        assertEquals(
+                                String.format("Field %s size mismatch", sourceAttr.getName()),
+                                sourceAttr.getSize(),
+                                targetAttr.getSize()
+                        );
+                        assertEquals(
+                                String.format("Field %s precision mismatch", sourceAttr.getName()),
+                                sourceAttr.getPrecision(),
+                                targetAttr.getPrecision()
+                        );
+                        assertEquals(
+                                String.format("Field %s scale mismatch", sourceAttr.getName()),
+                                sourceAttr.getScale(),
+                                targetAttr.getScale()
+                        );
+                    }
+                    break;
+                case DataTypes.DATE:
+                case DataTypes.TIME:
+                case DataTypes.TIMESTAMP:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()),
+                            sourceAttr.getName(),
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()),
+                            "Timestamp",
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()),
+                            0,
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()),
+                            -1,
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()),
+                            -1,
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.FLOAT:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()),
+                            sourceAttr.getName(),
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()),
+                            "Double",
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()),
+                            0,
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()),
+                            16,
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()),
+                            -1,
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.LONG:
+                case DataTypes.DOUBLE:
+                case DataTypes.BYTE:
+                case DataTypes.INT:
+                case DataTypes.BOOLEAN:
+                case DataTypes.STRING:
+//                case DataTypes.DECIMAL:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()),
+                            sourceAttr.getName(),
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()),
+                            sourceAttr.getDataTypeName(),
+                            targetAttr.getDataTypeName()
+                    );
+                    assertEquals(
+                            String.format("Field %s size mismatch", sourceAttr.getName()),
+                            sourceAttr.getSize(),
+                            targetAttr.getSize()
+                    );
+                    assertEquals(
+                            String.format("Field %s precision mismatch", sourceAttr.getName()),
+                            sourceAttr.getPrecision(),
+                            targetAttr.getPrecision()
+                    );
+                    assertEquals(
+                            String.format("Field %s scale mismatch", sourceAttr.getName()),
+                            sourceAttr.getScale(),
+                            targetAttr.getScale()
+                    );
+                    break;
+                case DataTypes.GEOMETRY:
+                    assertEquals(
+                            String.format("Field %s name mismatch", sourceAttr.getName()),
+                            sourceAttr.getName(),
+                            targetAttr.getName()
+                    );
+                    assertEquals(
+                            String.format("Field %s type mismatch", sourceAttr.getName()),
+                            ToolsLocator.getDataTypesManager().get(DataTypes.STRING).getName(),
+                            targetAttr.getDataTypeName()
+                    );
+//                    assertEquals(
+//                            String.format("Field %s geometry type mismatch", sourceAttr.getName()),
+//                            sourceAttr.getGeomType().getName(),
+//                            targetAttr.getGeomType().getName()
+//                    );
+//                    assertEquals(
+//                            String.format("Field %s geometry SRS mismatch", sourceAttr.getName()),
+//                            sourceAttr.getSRS().toString(),
+//                            targetAttr.getSRS().toString()
+//                    );
+//                    assertEquals(
+//                            String.format("Field %s size mismatch", sourceAttr.getName()),
+//                            sourceAttr.getSize(),
+//                            targetAttr.getSize()
+//                    );
+//                    assertEquals(
+//                            String.format("Field %s precision mismatch", sourceAttr.getName()),
+//                            sourceAttr.getPrecision(),
+//                            targetAttr.getPrecision()
+//                    );
+                    break;
+                default:
+                    fail(
+                            String.format("Field %s type %d (%s) not supported.",
+                                    targetAttr.getName(),
+                                    targetAttr.getType(),
+                                    targetAttr.getDataTypeName()
+                            )
+                    );
+            }
+        }
+    }
+
+    protected void copyFrom(JDBCServerExplorer explorer, FeatureStore sourceStore, int mode) throws Exception {
+        FeatureStore targetStore = openTargetStore1(explorer);
+        targetStore.edit(mode);
+        try {
+            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
+                targetStore.insert(targetFeature);
+            }
+        } finally {
+            targetStore.finishEditing();
+        }
+    }
+
+    protected void checkData(JDBCServerExplorer explorer, FeatureStore sourceStore) throws Exception {
+        FeatureStore targetStore = openTargetStore1(explorer);
+
+        List<Feature> sourceFeatures = sourceStore.getFeatures();
+        List<Feature> targetFeatures = targetStore.getFeatures();
+        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
+        for (int i = 0; i < targetFeatures.size(); i++) {
+            Feature sourceFeature = sourceFeatures.get(i);
+            Feature targetFeature = targetFeatures.get(i);
+            for (FeatureAttributeDescriptor sourceAttr : sourceStore.getDefaultFeatureType()) {
+                switch (sourceAttr.getType()) {
+                    case DataTypes.BOOLEAN:
+                        Object expected = sourceFeature.get(sourceAttr.getName());
+                        if (expected == null) {
+                            expected = false; //access never have null values for boolean
+                        }
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                expected,
+                                targetFeature.get(sourceAttr.getName())
+                        );
+                        break;
+
+                    case DataTypes.BYTE:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.getInt(sourceAttr.getName()),
+                                targetFeature.getInt(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.TIMESTAMP:
+                        Date sourceTimestamp = sourceFeature.getDate(sourceAttr.getName());
+                        Date targetTimestamp = targetFeature.getDate(sourceAttr.getName());
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceTimestamp,
+                                targetTimestamp
+                        );
+                        break;
+                    case DataTypes.TIME:
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceFeature.getDate(sourceAttr.getName()),
+                                targetFeature.getDate(sourceAttr.getName())
+                        );
+                        break;
+                    case DataTypes.GEOMETRY:
+                    Geometry sourceGeom = sourceFeature.getDefaultGeometry();
+                        if (sourceGeom != null) {
+                            byte[] wkb = sourceGeom.convertToWKB();
+                            String sourceGeomHex = Hex.encodeHexString(wkb);
+
+                            assertEquals(
+                                    String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                    sourceGeomHex,
+                                    targetFeature.get(sourceAttr.getName())
+                            );
+                        } else {
+                            assertEquals(
+                                    String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                    sourceGeom,
+                                    targetFeature.get(sourceAttr.getName())
+                            );
+                        }
+                        break;
+
+                    case DataTypes.LONG:
+                        Object expectedLong = sourceFeature.get(sourceAttr.getName());
+                        if (expectedLong != null) {
+                            expectedLong = sourceFeature.getLong(sourceAttr.getName());
+                        }
+                        Object targetLong = targetFeature.get(sourceAttr.getName());
+                        if (targetLong!=null) {
+                            targetLong = targetFeature.getLong(sourceAttr.getName());
+                        }
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                expectedLong,
+                                targetLong
+                        );
+                        break;
+
+                    case DataTypes.FLOAT: // Access float
+                        Object expectedFloat = sourceFeature.get(sourceAttr.getName());
+                        if (expectedFloat != null) {
+                            expectedFloat = sourceFeature.get(sourceAttr.getName());
+                        }
+                        Object targetFloat = targetFeature.get(sourceAttr.getName());
+                        if (targetFloat!=null) {
+                            targetFloat = targetFeature.getFloat(sourceAttr.getName());
+                        }
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                expectedFloat,
+                                targetFloat
+                        );
+                        break;
+                    case DataTypes.DECIMAL:
+                        if (sourceAttr.getPrecision() == 19 && sourceAttr.getScale() == 0) { // en acces es un decimal, lo tratamos como long
+                            Object expectedDecimalAsLong = sourceFeature.get(sourceAttr.getName());
+                            if (expectedDecimalAsLong != null) {
+                                expectedDecimalAsLong = sourceFeature.getLong(sourceAttr.getName());
+                            }
+                            Object targetDecimalasLong= targetFeature.get(sourceAttr.getName());
+                            if (targetDecimalasLong!=null) {
+                                targetDecimalasLong = targetFeature.getLong(sourceAttr.getName());
+                            }
+                            assertEquals(
+                                    String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                    expectedDecimalAsLong,
+                                    targetDecimalasLong
+                            );
+                            break;
+                        }
+                    case DataTypes.DOUBLE:
+                    default:
+                        Object sourceValue = sourceFeature.get(sourceAttr.getName());
+                        Object targetValue = targetFeature.get(sourceAttr.getName());
+                        if (sourceValue == null) {
+                            LOGGER.info(String.format("Feature %03d attribute %s is null", i, sourceAttr.getName()));
+                        }
+                        assertEquals(
+                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
+                                sourceValue,
+                                targetValue
+                        );
+                }
+            }
+        }
+    }
+
+    public void testCreatePopulateAndCheckData() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
+
+        createFrom(explorer, sourceStore);
+
+        checkTypes(explorer, sourceStore.getDefaultFeatureType());
+        copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
+        checkData(explorer, sourceStore);
+
+        JDBCStoreParameters params = explorer.get(this.getTargetName());
+        explorer.remove(params);
+
+        createFrom(explorer, sourceStore);
+        copyFrom(explorer, sourceStore, FeatureStore.MODE_FULLEDIT);
+        checkData(explorer, sourceStore);
+
+    }
+
+    public void testFilterByDate() throws Exception {
+        FeatureStore sourceStore = TestUtils.openSourceStore1();
+        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
+
+        createFrom(explorer, sourceStore);
+        copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
+
+        FeatureStore mdbStore = openTargetStore1(explorer);
+        ExpressionBuilder expbuilder = ExpressionUtils.createExpressionBuilder();
+
+        String filter = expbuilder.or(
+                expbuilder.and(
+                        expbuilder.gt(
+                                expbuilder.column("Time"),
+                                expbuilder.time("01:02:03")
+                        ),
+                        expbuilder.lt(
+                                expbuilder.column("Time"),
+                                expbuilder.time(new Date())
+                        )
+                ),
+                expbuilder.and(
+                        expbuilder.gt(
+                                expbuilder.column("Date"),
+                                expbuilder.date("2019-02-17")
+                        ),
+                        expbuilder.lt(
+                                expbuilder.column("Date"),
+                                expbuilder.date(new Date())
+                        )
+                )
+        ).toString();
+        FeatureQuery query = sourceStore.createFeatureQuery();
+        query.addFilter(filter);
+        List<Feature> features = mdbStore.getFeatures(query);
+        int sz = features.size();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestAppend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestAppend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestAppend.java	(revision 46118)
@@ -0,0 +1,110 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.ArrayList;
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.DataTypes;
+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.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.AppendOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestAppend extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestAppend.class);
+
+  public TestAppend(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testAppend() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("append.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    AppendOperation append = operations.createAppend(
+            table,
+            featureType
+    );
+    append.begin();
+    List<String> SQLs = new ArrayList<>();
+    SQLs.addAll(append.getPreviousSQLs());
+    SQLs.add( append.getSQL());
+    SQLs.addAll(append.getPostSQLs());
+    System.out.println("Expected: ");
+    System.out.println(expectedSQLs.size());
+    System.out.println(expectedSQLs);
+    System.out.println("SQL: ");
+    System.out.println(SQLs.size());    
+    System.out.println(SQLs);    
+    assertEquals("Append num SQLs", expectedSQLs.size(), SQLs.size());
+    for (int i = 0; i < expectedSQLs.size(); i++) {
+      assertEquals("Append SQL "+i, expectedSQLs.get(i), SQLs.get(i));
+    }
+    
+    for (Feature sourceFeature : sourceStore.getFeatureSet()) {
+      List<Object> parametersSQL = append.getSQLParameters(TestUtils.getFeatureProvider(sourceFeature));
+      List<Object> expectedParameters = this.getExpectedparameters(sourceFeature);
+      assertEquals("Append num. parameters", parametersSQL.size(), expectedParameters.size());
+      for (int i = 0; i < expectedParameters.size(); i++) {
+        assertEquals("Append parameter "+i, expectedParameters.get(i), parametersSQL.get(i));
+      }
+    }
+    append.end();
+  }
+
+  private List<Object> getExpectedparameters(Feature sourceFeature) {
+    FeatureType ft = sourceFeature.getType();
+    List<Object> values = new ArrayList<>();
+    for (FeatureAttributeDescriptor attr : ft) {
+      Object v = sourceFeature.get(attr.getIndex());
+      if( attr.getType()==DataTypes.BOOLEAN ) {
+          if (v == null) {
+              values.add(false);
+              continue;
+          }
+      }
+      values.add(v);
+      if( attr.getType()==DataTypes.GEOMETRY ) {
+        String srs = attr.getSRS().getAbrev();
+        values.add(Integer.parseInt(srs.split(":")[1]));
+      }
+    }
+    return values;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureType.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureType.java	(revision 46118)
@@ -0,0 +1,81 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.Collections;
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestFetchFeatureType extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestFetchFeatureType.class);
+
+  public TestFetchFeatureType(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testFetchFeatureType() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("fetchFeatureType.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FetchFeatureTypeOperation fetchFeatureType = operations.createFetchFeatureType(
+            featureType.getEditable(),
+            table,
+            Collections.EMPTY_LIST,
+            null, // "Geometry" 
+            featureType.getDefaultSRS()
+    );
+    
+    
+    String retrieveFirstRowOfTableSQL = fetchFeatureType.getSQLToRetrieveFirstRowOfTable();
+    String retrievePrimaryKeysFromInformationSchemaSQL = fetchFeatureType.getSQLToRetrievePrimaryKeysFromInformationSchema();
+    System.out.println("Expected 0: ");
+    System.out.println(expectedSQLs.get(0));
+    System.out.println("SQL 0 : ");
+    System.out.println(retrieveFirstRowOfTableSQL);
+    
+    System.out.println("Expected 1: ");
+    System.out.println(expectedSQLs.toString());
+    System.out.println("SQL 1 : ");
+    System.out.println(retrievePrimaryKeysFromInformationSchemaSQL.toString());
+    
+    assertEquals("FetchFeatureType first row SQL", expectedSQLs.get(0), retrieveFirstRowOfTableSQL);
+    assertEquals("FetchFeatureType get primery keys SQL", expectedSQLs.get(1), retrievePrimaryKeysFromInformationSchemaSQL);
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCount.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCount.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCount.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
+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.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCount extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestCount.class);
+
+  public TestCount(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+  
+  public void testCount() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("count.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    CountOperation count = operations.createCount(
+            featureType,
+            table, 
+            null, 
+            null
+    );
+    
+    String sql = count.getSQL();
+    assertEquals("Count SQL", expectedSQLs.get(0), sql);
+  }
+
+  public void testSimpleGroup() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("count.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    query.getGroupByColumns().add("Long");
+    query.getAggregateFunctions().put("ID", "MIN");
+    query.getAggregateFunctions().put("Byte", "MAX");
+    query.getAggregateFunctions().put("Double", "SUM");
+    query.getOrder().add("Long");
+    CountOperation count = operations.createCount(
+            featureType,
+            table, 
+            null, 
+            query
+    );
+    String sql = count.getSQL();
+    System.out.println("###### SQL:"+sql);
+    System.out.println("###### EXP:"+expectedSQLs.get(1));
+    
+    assertEquals("Count with group SQL", expectedSQLs.get(1), sql);
+  }
+
+  // TODO: a�adir un test con where, group y order.
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestResultSetForSetProvider.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestResultSetForSetProvider.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestResultSetForSetProvider.java	(revision 46118)
@@ -0,0 +1,246 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.DataQuery;
+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.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestResultSetForSetProvider extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestResultSetForSetProvider.class);
+
+  public TestResultSetForSetProvider(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  public void testSimple() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            null,
+            featureType,
+            featureType,
+            0,
+            0, 
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(0), sql);
+  }
+
+  public void testSimpleGroup() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    query.getGroupByColumns().add("Long");
+    query.getAggregateFunctions().put("ID", "MIN");
+    query.getAggregateFunctions().put("Byte", "MAX");
+    query.getAggregateFunctions().put("Double", "SUM");
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            query,
+            featureType,
+            featureType,
+            0,
+            0, 
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    System.out.println("###### SQL:"+sql);
+    System.out.println("###### EXP:"+expectedSQLs.get(1));
+    
+    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(1), sql);
+  }
+
+  public void testSubselect() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    StringBuilder filter = new StringBuilder();
+    filter.append("EXISTS(");
+    filter.append(" SELECT \"ISO_A2\" FROM countries");
+    filter.append("   WHERE ");
+    filter.append("     TEST.STRING = countries.CONTINENT AND ");
+    filter.append("     countries.LASTCENSUS < 0 ");
+    filter.append("   LIMIT 1;, ");
+    filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
+    filter.append(")");
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    query.addFilter(filter.toString());
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            query,
+            featureType,
+            featureType,
+            0,
+            0, 
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    System.out.println("###### SQL:"+sql);
+    System.out.println("###### EXP:"+expectedSQLs.get(2));
+    
+    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(2), sql);
+  }
+
+  public void testGroupAndSubselect() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    StringBuilder filter = new StringBuilder();
+    filter.append("EXISTS(");
+    filter.append(" SELECT \"ISO_A2\" FROM countries");
+    filter.append("   WHERE ");
+    filter.append("     TEST.STRING = countries.CONTINENT AND ");
+    filter.append("     countries.LASTCENSUS < 0 ");
+    filter.append("   LIMIT 1;, ");
+    filter.append(" 'EXISTS62a964cd7bc24f409b97c03b9170408d' ");
+    filter.append(")");
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    query.getGroupByColumns().add("Long");
+    query.getAggregateFunctions().put("ID", "MIN");
+    query.getAggregateFunctions().put("Byte", "MAX");
+    query.getAggregateFunctions().put("Double", "SUM");
+    query.addFilter(filter.toString());
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            query,
+            featureType,
+            featureType,
+            0,
+            0, 
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    System.out.println("###### SQL:"+sql);
+    System.out.println("###### EXP:"+expectedSQLs.get(3));
+    
+    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(3), sql);
+  }
+
+
+
+  public void testConstantColumnPrimaryKey() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("resultSetForSetProvider.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+//    meterle como constantCOlumn ID
+
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    
+    query.setConstantsAttributeNames(new String[]{"ID"});
+    
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            query,
+            featureType,
+            featureType,
+            0,
+            0, 
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    System.out.println("###### SQL:"+sql);
+    System.out.println("###### EXP:"+expectedSQLs.get(4));
+    
+    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(4), sql);
+  }
+
+
+  // TODO: a�adir un test con where, group y order.
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureProviderByReference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureProviderByReference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestFetchFeatureProviderByReference.java	(revision 46118)
@@ -0,0 +1,78 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.Feature;
+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.DefaultFeature;
+import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
+import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureProviderByReferenceOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestFetchFeatureProviderByReference extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestFetchFeatureProviderByReference.class);
+
+  public TestFetchFeatureProviderByReference(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testFetchFeatureProviderByReference() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("fetchFeatureProviderByReference.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    Feature feature = sourceStore.getFeatures().get(1);    
+    FeatureReference reference = FeatureReferenceFactory.createReferencePKFromFeature(feature);
+    
+    
+    FetchFeatureProviderByReferenceOperation fetchFeatureProviderByReference = operations.createFetchFeatureProviderByReference(
+            (FeatureReferenceProviderServices) reference,
+            featureType, 
+            table
+    );
+    
+    String sql = fetchFeatureProviderByReference.getSQL();
+    System.out.println("Expected 1: ");
+    System.out.println(expectedSQLs.get(0));
+    System.out.println("SQL 1 : ");
+    System.out.println(sql);
+    
+    assertEquals("FetchFeatureProviderByReference SQL", expectedSQLs.get(0), sql);
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCalculateEnvelope.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCalculateEnvelope.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCalculateEnvelope.java	(revision 46118)
@@ -0,0 +1,68 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CalculateEnvelopeOfColumnOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCalculateEnvelope extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestCalculateEnvelope.class);
+
+  public TestCalculateEnvelope(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testCalculateEnvelope() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("calculateEnvelope.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    CalculateEnvelopeOfColumnOperation calculateEnvelope = operations.createCalculateEnvelopeOfColumn(
+            featureType,
+            table, 
+            "Geometry",
+            null,
+            null, 
+            featureType.getDefaultSRS()
+    );
+    
+    String sql = calculateEnvelope.getSQL();
+    assertEquals("CalculateEnvelope SQL", expectedSQLs.get(0), sql);
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCreateTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCreateTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestCreateTable.java	(revision 46118)
@@ -0,0 +1,73 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CreateTableOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestCreateTable extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestCreateTable.class);
+
+  public TestCreateTable(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testCreateTable() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("createTable.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    CreateTableOperation createTable = operations.createTable(
+            table,
+            featureType,
+            null,
+            null
+    );
+    List<String> SQLs = createTable.getSQLs();
+    System.out.println("Expected: ");
+    System.out.println(expectedSQLs.size());
+    System.out.println("SQL: ");
+    System.out.println(SQLs.size());
+    assertEquals("CreateTable num. SQLs", expectedSQLs.size(), SQLs.size());
+    for (int i = 0; i < expectedSQLs.size(); i++) {
+      assertEquals("CreateTable SQL "+i, expectedSQLs.get(i), SQLs.get(i));
+    }
+
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDropTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDropTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDropTable.java	(revision 46118)
@@ -0,0 +1,63 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.DropTableOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestDropTable extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestDropTable.class);
+
+  public TestDropTable(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testDropTable() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("dropTable.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    DropTableOperation dropTable = operations.createDropTable(
+            table
+    );
+    List<String> SQLs = dropTable.getSQLs();
+    assertEquals("DropTable num. SQLs", expectedSQLs.size(), SQLs.size());
+    for (int i = 0; i < expectedSQLs.size(); i++) {
+      assertEquals("DropTable SQL "+i, expectedSQLs.get(i), SQLs.get(i));
+    }
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDate.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDate.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestDate.java	(revision 46118)
@@ -0,0 +1,122 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestDate extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestDate.class);
+
+  public TestDate(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  private java.sql.Date date(String x) throws ParseException {
+    Date d;
+    if (x == null) {
+      d = new Date();
+    } else {
+      d = new SimpleDateFormat("yyyy-M-d").parse(x);
+    }
+    return new java.sql.Date(d.getTime());
+  }
+
+  private java.sql.Time time(String x) throws ParseException {
+    Date d = new SimpleDateFormat("H:mm:ss").parse(x);
+    return new java.sql.Time(d.getTime());
+  }
+
+  private java.sql.Timestamp timestamp(String x) throws ParseException {
+    Date d = new SimpleDateFormat("yyyy-M-d H:mm:ss").parse(x);
+    return new java.sql.Timestamp(d.getTime());
+  }
+
+  public void testDate1() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("date.sql");
+
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest",
+            sqlbuilder.default_schema(),
+            "test",
+            null
+    );
+    GeometryExpressionBuilder expbuilder = sqlbuilder.expression();
+    SimpleDateFormat df = new SimpleDateFormat();
+    String filter = expbuilder.or(
+            expbuilder.and(
+                    expbuilder.gt(
+                            expbuilder.column("Time"),
+                            expbuilder.time("01:02:03")
+                    ),
+                    expbuilder.lt(
+                            expbuilder.column("Time"),
+                            expbuilder.time("20:52:55")
+                    )
+            ),
+            expbuilder.and(
+                    expbuilder.gt(
+                            expbuilder.column("Date"),
+                            expbuilder.date("2019-02-17")
+                    ),
+                    expbuilder.lt(
+                            expbuilder.column("Date"),
+                            expbuilder.date("2020-02-23")
+                    )
+            )
+    ).toString();
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    FeatureQuery query = sourceStore.createFeatureQuery();
+    query.addFilter(filter);
+    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
+            table,
+            null,
+            null,
+            query,
+            featureType,
+            featureType,
+            0,
+            0,
+            0
+    );
+    String sql = resultSetForSetProvider.getSQL();
+    System.out.println("###### SQL:" + sql);
+    System.out.println("###### EXP:" + expectedSQLs.get(0));
+
+    assertEquals("Date SQL", expectedSQLs.get(0), sql);
+  }
+
+  // TODO: a�adir un test con where, group y order.
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestTableIsEmpty.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestTableIsEmpty.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestTableIsEmpty.java	(revision 46118)
@@ -0,0 +1,66 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.TableIsEmptyOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestTableIsEmpty extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestTableIsEmpty.class);
+
+  public TestTableIsEmpty(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testTableIsEmpty() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("tableIsEmpty.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    TableIsEmptyOperation tableIsEmpty = operations.createTableIsEmpty(
+            featureType,
+            table,
+            null, 
+            null
+    );
+    
+    String sql = tableIsEmpty.getSQL();
+    assertEquals("TableIsEmpty SQL", expectedSQLs.get(0), sql);
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestPerformChanges.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestPerformChanges.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestPerformChanges.java	(revision 46118)
@@ -0,0 +1,118 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.Collections;
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.DALLocator;
+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;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestPerformChanges extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestPerformChanges.class);
+
+  public TestPerformChanges(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testPerformChanges() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("performChanges.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    
+    
+    FeatureTypeChanged featureTypeChanged = new FeatureTypeChanged() {
+      @Override
+      public FeatureType getSource() {
+        EditableFeatureType ft = DALLocator.getDataManager().createFeatureType();
+        EditableFeatureAttributeDescriptor id = ft.add("ID", DataTypes.INT);
+        id.copyFrom(featureType.getAttributeDescriptor("ID"));
+        return ft;
+      }
+
+      @Override
+      public FeatureType getTarget() {
+        return featureType;
+      }
+    };
+    List<FeatureTypeChanged> featureTypesChangeds = Collections.singletonList(featureTypeChanged);
+    
+    PerformChangesOperation performChanges = operations.createPerformChanges(
+            table, 
+            sourceStore.getDefaultFeatureType(),
+            null, 
+            null, 
+            null, 
+            featureTypesChangeds.iterator()
+    );
+    String insertSQL = performChanges.getInsertSQL();
+    String deleteSQL = performChanges.getDeleteSQL();
+    String updateSQL = performChanges.getUpdateSQL();
+    List<String> updateTableSQLs = performChanges.getUpdateTableSQLs();
+
+    System.out.println("Expected:      "+expectedSQLs.get(0));
+    System.out.println("SQL insertSQL: "+insertSQL);
+    assertEquals("Insert SQL", expectedSQLs.get(0), insertSQL);
+    
+    System.out.println("Expected:      "+expectedSQLs.get(1));
+    System.out.println("SQL deleteSQL: "+deleteSQL);
+    assertEquals("Delete SQL", expectedSQLs.get(1), deleteSQL);
+    
+    System.out.println("Expected:      "+expectedSQLs.get(2));
+    System.out.println("SQL updateSQL: "+updateSQL);
+    assertEquals("Update SQL", expectedSQLs.get(2), updateSQL);
+    
+    System.out.println("Expected:              "+(expectedSQLs.size()-3));
+    System.out.println("SQL update table size: "+updateTableSQLs.size());
+    
+    assertEquals("UpdateTable num. SQLs", expectedSQLs.size()-3, updateTableSQLs.size());
+    for (int i = 0; i < updateTableSQLs.size(); i++) {
+        
+        System.out.println("i Expected:            "+(expectedSQLs.get(i+3)));
+        System.out.println("i SQL updateTableSQLs: " + updateTableSQLs.get(i));
+      assertEquals("UpdateTable SQL "+i, expectedSQLs.get(i+3), updateTableSQLs.get(i));
+    }
+    
+    
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestUpdateTableStatistics.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestUpdateTableStatistics.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/java/org/gvsig/fmap/dal/store/mdb/operations/sql/TestUpdateTableStatistics.java	(revision 46118)
@@ -0,0 +1,66 @@
+package org.gvsig.fmap.dal.store.mdb.operations.sql;
+
+import java.util.List;
+import junit.framework.TestCase;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.mdb.TestUtils;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdateTableStatisticsOperation;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestUpdateTableStatistics extends TestCase {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestUpdateTableStatistics.class);
+
+  public TestUpdateTableStatistics(String testName) {
+    super(testName);
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    new DefaultLibrariesInitializer().fullInitialize();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  // TODO add test methods here. The name must begin with 'test'. For example:
+  // public void testHello() {}
+  
+  public void testUpdateTableStatistics() throws Exception {
+    JDBCHelper helper = TestUtils.getJDBCHelper();
+    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
+    OperationsFactory operations = helper.getOperations();
+
+    List<String> expectedSQLs = TestUtils.getSQLs("updateTableStatistics.sql");
+    
+    FeatureStore sourceStore = TestUtils.openSourceStore1();
+
+    TableReference table = operations.createTableReference(
+            "dbtest", 
+            sqlbuilder.default_schema(), 
+            "test", 
+            null
+    );
+    FeatureType featureType = sourceStore.getDefaultFeatureType();
+    UpdateTableStatisticsOperation updateTableStatistics = operations.createUpdateTableStatistics(
+            table
+    );
+    
+    List<String> SQLs = updateTableStatistics.getSQLs();
+    assertEquals("UpdateTableStatistics num. SQLs", expectedSQLs.size(), SQLs.size());
+    for (int i = 0; i < expectedSQLs.size(); i++) {
+      assertEquals("UpdateTableStatistics SQL "+i, expectedSQLs.get(i), SQLs.get(i));
+    }
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/date.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/date.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/date.sql	(revision 46118)
@@ -0,0 +1,16 @@
+
+-- Date SQL
+
+-- Simple
+SELECT 
+    [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], [Bool2], 
+    [String], [Bool3], [Double], [Bool4], [Float], [Bool5], [Decimal], 
+    [Geometry], [Decimal19_0] 
+  FROM [test] 
+  WHERE ((
+    ([Time] > #01:02:03#) AND 
+    ([Time] < #20:52:55#)
+    ) OR (
+    ([Date] > DATEVALUE('2019-02-17')) AND 
+    ([Date] < DATEVALUE('2020-02-23'))
+  ));
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/testCreateSource1.csv
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/testCreateSource1.csv	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/testCreateSource1.csv	(revision 46118)
@@ -0,0 +1,20 @@
+ID/Integer/set/pk=true;Byte/Byte;Bool1/Boolean;Long/Long;Timestamp/TimeStamp;Date/Date;Time/Time;Bool2/Boolean;String/String/set/size=30;Bool3/Boolean;Double/Double;Bool4/Boolean;Float/Float;Bool5/Boolean;Decimal/Decimal/set/precision=6/set/scale=3;Geometry/Geometry/set/geomtype=Point:2D/set/srs=EPSG:4326;Decimal19_0/Decimal/set/precision=19/set/scale=0
+0;  ; ;    ;              ;        ;      ; ;      ; ;           ; ;      ;T;       ;;
+1;10;T;1000;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-3.8945156972987958 42.01053743584765);12345678901234567
+2;20;T;2000;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-2.1079618220646115 41.983079082675474);12345678901234567
+3;30;T;3000;20191029121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (-2.57249737803327 41.35372113353277);12345678901234567
+4;40;T;4000;20190929121314;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (-4.061822048036304 41.35877680235475);12345678901234567
+5;50;T;5000;20190829121314;20190829;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (-3.974317066986988 40.78701209315094);12345678901234567
+6;60;T;6000;20190729121314;20190729;171314;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (-2.510509736717547 40.69847453392384);12345678901234567
+7;70;T;7000;20190629121314;20190629;181314;T;Yo yo7;F;12105.54321;T;105.21;T;456.123;POINT (-0.5317736981843011 40.66396082637622);12345678901234567
+8;80;T;8000;20190529121314;20190529;191314;T;Yo yo8;F;12106.54321;T;106.21;T;456.123;POINT (-0.3626917259170671 41.13652386601604);12345678901234567
+9;90;T;9000;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T;107.21;T;456.123;POINT (-1.2461823078608523 41.84950010180092);12345678901234567
+10;;T;1001;20191229121314;20191229;121314;T;Yo yo1;F;12345.54321;T;123.21;T;456.123;POINT (-1.2145405488596532 41.22158511004416);12345678901234567
+11;22; ;2002;20191129121314;20191129;131314;T;Yo yo2;F;12100.54321;T;100.21;T;456.123;POINT (-0.7699089544899235 41.630581204431756);12345678901234567
+12;33;T; ;20190929121314;20191029;141314;T;Yo yo3;F;12101.54321;T;101.21;T;456.123;POINT (0.4821915816701051 41.75970939133133);12345678901234567
+13;41;T;4001; ;20190929;151314;T;Yo yo4;F;12102.54321;T;102.21;T;456.123;POINT (0.7912661147227479 41.919324620992036);12345678901234567
+14;52;T;5002;20190829121314; ;161314;T;Yo yo5;F;12103.54321;T;103.21;T;456.123;POINT (1.052534629531243 41.493736996249545);12345678901234567
+15;63;T;6003;20190729121314;20190729; ;T;Yo yo6;F;12104.54321;T;104.21;T;456.123;POINT (0.8097002367335026 41.0899480235613);12345678901234567
+16;74;T;7004;20190629121314;20190629;181314;T; ;F;12105.54321;T;105.21;T;456.123;POINT (-0.4883960310112362 41.17597288081971);12345678901234567
+17;85;T;8005;20190529121314;20190529;191314;T;Yo yo8;F; ;T;106.21;T;456.123;POINT (-0.6439030698437881 40.89530766155764);12345678901234567
+18;96;T;9006;20190429121314;20190429;201314;T;Yo yo9;F;12107.54321;T; ;T; ;POINT (-1.3061826868199504 40.72372835570524);12345678901234567
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/tableIsEmpty.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/tableIsEmpty.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/tableIsEmpty.sql	(revision 46118)
@@ -0,0 +1,3 @@
+
+-- Table is empty
+SELECT * FROM [test] LIMIT 1;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/performChanges.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/performChanges.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/performChanges.sql	(revision 46118)
@@ -0,0 +1,55 @@
+
+-- Insert SQL
+INSERT INTO [test] ( 
+    [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], 
+    [Bool2], [String], [Bool3], [Double], [Bool4], [Float], [Bool5], 
+    [Decimal], [Geometry], [Decimal19_0] 
+  ) 
+  VALUES ( 
+     ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? );
+
+-- Delete SQL
+DELETE FROM [test] WHERE ( ([ID]) = (?) );
+
+-- Update SQL
+UPDATE [test] 
+  SET 
+    [Byte] = ?, 
+    [Bool1] = ?, 
+    [Long] = ?, 
+    [Timestamp] = ?, 
+    [Date] = ?, 
+    [Time] = ?, 
+    [Bool2] = ?, 
+    [String] = ?, 
+    [Bool3] = ?, 
+    [Double] = ?, 
+    [Bool4] = ?, 
+    [Float] = ?, 
+    [Bool5] = ?, 
+    [Decimal] = ?, 
+    [Geometry] = ?, 
+    [Decimal19_0] = ? 
+  WHERE 
+    ( ([ID]) = (?) );
+
+-- Update Table SQL
+ALTER TABLE [test] ADD COLUMN [Byte] TINYINT DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Bool1] BOOLEAN DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Long] DECIMAL(19,0) DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Timestamp] DATETIME DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Date] DATETIME DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Time] DATETIME DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Bool2] BOOLEAN DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [String] VARCHAR(30) DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Bool3] BOOLEAN DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Double] FLOAT DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Bool4] BOOLEAN DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Float] REAL DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Bool5] BOOLEAN DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Decimal] DECIMAL(6,3) DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Geometry] CLOB DEFAULT NULL NULL;
+ALTER TABLE [test] ADD COLUMN [Decimal19_0] DECIMAL(19) DEFAULT NULL NULL;
+
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/updateTableStatistics.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/updateTableStatistics.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/updateTableStatistics.sql	(revision 46118)
@@ -0,0 +1,3 @@
+
+-- UpdateTableStatistics SQL
+ANALYZE SAMPLE_SIZE 0;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/append.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/append.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/append.sql	(revision 46118)
@@ -0,0 +1,9 @@
+
+-- Inser SQL
+INSERT INTO [test] ( 
+    [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], 
+    [Bool2], [String], [Bool3], [Double], [Bool4], [Float], [Bool5], 
+    [Decimal], [Geometry], [Decimal19_0] 
+  ) 
+  VALUES ( 
+     ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? );
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureType.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureType.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureType.sql	(revision 46118)
@@ -0,0 +1,6 @@
+
+-- FetchFeatureType first row SQL
+SELECT * FROM [test] LIMIT 1;
+
+-- FetchFeatureType get primery keys SQL
+ 
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/count.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/count.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/count.sql	(revision 46118)
@@ -0,0 +1,12 @@
+
+-- Count SQL
+SELECT COUNT(*) FROM [test];
+
+-- Count with group SQL
+SELECT COUNT(*) 
+  FROM ( 
+    SELECT COUNT(*) 
+    FROM [test] 
+    GROUP BY [Long] 
+    ORDER BY [Long] ASC
+  ) as _subquery_alias_ ;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/resultSetForSetProvider.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/resultSetForSetProvider.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/resultSetForSetProvider.sql	(revision 46118)
@@ -0,0 +1,59 @@
+
+-- ResultSetForSetProvider SQL
+
+-- Simple
+SELECT 
+    [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], 
+    [Bool2], [String], [Bool3], [Double], [Bool4], [Float], [Bool5], [Decimal], 
+    [Geometry], [Decimal19_0] 
+  FROM [test];
+
+-- Simple Group by
+SELECT 
+    MIN([test].[ID]) AS [ID], MAX([test].[Byte]) AS [Byte], NULL AS [Bool1], [Long], 
+    NULL AS [Timestamp], NULL AS [Date], NULL AS [Time], NULL AS [Bool2], 
+    NULL AS [String], NULL AS [Bool3], SUM([test].[Double]) AS [Double], 
+    NULL AS [Bool4], NULL AS [Float], NULL AS [Bool5], NULL AS [Decimal], 
+    NULL AS [Geometry], NULL AS [Decimal19_0] 
+  FROM [test] 
+  GROUP BY [test].[Long];
+
+-- Subselect
+SELECT 
+    [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], [Bool2], 
+    [String], [Bool3], [Double], [Bool4], [Float], [Bool5], [Decimal], 
+    [Geometry], [Decimal19_0], 
+    NVL2(COALESCE((
+      SELECT [ISO_A2] 
+      FROM [countries] 
+      WHERE (([TEST].[STRING] = [countries].[CONTINENT]) AND 
+        ([countries].[LASTCENSUS] < 0)) LIMIT 1)),TRUE,FALSE) 
+    AS [EXISTS62a964cd7bc24f409b97c03b9170408d] 
+  FROM [test] 
+  WHERE NVL2(COALESCE((
+    SELECT [ISO_A2] 
+    FROM [countries] 
+    WHERE (([TEST].[STRING] = [countries].[CONTINENT]) AND 
+      ([countries].[LASTCENSUS] < 0)) LIMIT 1)),TRUE,FALSE);
+
+-- Group and Subselect
+SELECT 
+    MIN([test].[ID]) AS [ID], MAX([test].[Byte]) AS [Byte], NULL AS [Bool1], [Long], 
+    NULL AS [Timestamp], NULL AS [Date], NULL AS [Time], NULL AS [Bool2], 
+    NULL AS [String], NULL AS [Bool3], SUM([test].[Double]) AS [Double], 
+    NULL AS [Bool4], NULL AS [Float], NULL AS [Bool5], NULL AS [Decimal], 
+    NULL AS [Geometry], NULL AS [Decimal19_0] 
+  FROM [test] 
+  WHERE NVL2(COALESCE((
+    SELECT [ISO_A2] 
+    FROM [countries] 
+    WHERE (([TEST].[STRING] = [countries].[CONTINENT]) AND 
+      ([countries].[LASTCENSUS] < 0)) LIMIT 1)),TRUE,FALSE) 
+  GROUP BY [test].[Long];
+
+-- Simple
+SELECT 
+    [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], 
+    [Bool2], [String], [Bool3], [Double], [Bool4], [Float], [Bool5], [Decimal], 
+    [Geometry], [Decimal19_0], [ID] 
+  FROM [test];
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureProviderByReference.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureProviderByReference.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/fetchFeatureProviderByReference.sql	(revision 46118)
@@ -0,0 +1,8 @@
+
+-- Count SQL
+SELECT 
+  [ID], [Byte], [Bool1], [Long], [Timestamp], [Date], [Time], [Bool2], 
+  [String], [Bool3], [Double], [Bool4], [Float], [Bool5], [Decimal], 
+  [Geometry], [Decimal19_0] 
+  FROM [test] 
+  WHERE ( ([ID]) = (?) ) LIMIT 1;
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/calculateEnvelope.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/calculateEnvelope.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/calculateEnvelope.sql	(revision 46118)
@@ -0,0 +1,6 @@
+
+-- Count SQL
+SELECT 
+  [Geometry] 
+  FROM [test] 
+  WHERE ( ([Geometry]) IS NOT NULL );
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/createTable.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/createTable.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/createTable.sql	(revision 46118)
@@ -0,0 +1,22 @@
+
+-- Se usa en TestCreateTable.
+-- Se corresponde con el fichero CSV "testCreateSource1.csv".
+
+CREATE TABLE [test] (
+  [ID] INTEGER PRIMARY KEY NOT NULL, 
+  [Byte] TINYINT DEFAULT NULL, 
+  [Bool1] BOOLEAN DEFAULT NULL, 
+  [Long] DECIMAL(19,0) DEFAULT NULL, 
+  [Timestamp] DATETIME DEFAULT NULL, 
+  [Date] DATETIME DEFAULT NULL, 
+  [Time] DATETIME DEFAULT NULL, 
+  [Bool2] BOOLEAN DEFAULT NULL, 
+  [String] VARCHAR(30) DEFAULT NULL, 
+  [Bool3] BOOLEAN DEFAULT NULL, 
+  [Double] FLOAT DEFAULT NULL, 
+  [Bool4] BOOLEAN DEFAULT NULL, 
+  [Float] REAL DEFAULT NULL, 
+  [Bool5] BOOLEAN DEFAULT NULL, 
+  [Decimal] DECIMAL(6,3) DEFAULT NULL, 
+  [Geometry] CLOB DEFAULT NULL, 
+  [Decimal19_0] DECIMAL(19) DEFAULT NULL );
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/dropTable.sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/dropTable.sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/org/gvsig/fmap/dal/store/mdb/dropTable.sql	(revision 46118)
@@ -0,0 +1,3 @@
+
+-- Count SQL
+DROP TABLE [test];
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/log4j.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/log4j.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/test/resources/log4j.properties	(revision 46118)
@@ -0,0 +1,41 @@
+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 %r [%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.tools.library=INFO
+log4j.logger.org.gvsig.tools.persistence=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/BBDD
+# Core
+log4j.logger.org.gvsig.fmap.dal.store.jdbc=DEBUG
+log4j.logger.org.gvsig.fmap.dal.store.jdbc2=DEBUG
+log4j.logger.org.gvsig.fmap.dal.feature.spi=INFO
+# Data providers
+log4j.logger.org.gvsig.fmap.dal.store.mdb=DEBUG
+log4j.logger.org.gvsig.postgresql.dal=INFO
+log4j.logger.org.gvsig.mssqlserver.dal=INFO
+log4j.logger.org.gvsig.mysql.dal=INFO
+log4j.logger.org.gvsig.spatialite.dal=INFO
+log4j.logger.org.gvsig.oracle.dal=INFO
+# Exoport providers
+log4j.logger.org.gvsig.exportto.swing.prov.jdbc=INFO
+log4j.logger.org.gvsig.exportto.swing.prov.mdb=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
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBMetadata.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBMetadata.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBMetadata.xml	(revision 46118)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="MDB" namespace="Metadata">
+      <extends>
+      	<class name="JDBC2" namespace="Metadata"/>
+      </extends>
+      <description>Metadata of a MDB store</description>
+      <fields>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/org/gvsig/fmap/dal/store/mdb/MDBParameters.xml	(revision 46118)
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="MDBResourceParameters">
+      <extends>
+        <class>JDBC2ResourceParameters</class>
+      </extends>
+      <description>_MDB_loading_parameters</description>
+      <fields>
+        <field name="JDBCDriverClass" type="string" mandatory="true"
+               defaultValue="net.ucanaccess.jdbc.UcanaccessDriver" group="Advanced">
+          <description>JDBC Driver class</description>
+        </field>
+        <field name="port" type="integer" mandatory="false" defaultValue="9123" group="Connection">
+          <description></description>
+        </field>
+        <field name="database_file" label="Database file" type="file" mandatory="true" defaultValue="" group="Basic">        
+          <description></description>
+        </field>   
+        <field name="UseSSL" type="boolean" mandatory="false"
+               defaultValue="false" group="Basic">
+          <description>Use SSL connetion</description>
+        </field>
+        <field name="dbuser" type="string" mandatory="false" group="Basic" defaultValue="SA" >
+          <description></description>
+        </field>
+        <!--
+        <field name="LOCK_TIMEOUT" type="integer" mandatory="false" group="Advanced" defaultValue="1000" >
+          <description>Sets the lock timeout (in milliseconds) for the current session. The default value for this setting is 1000 (one second).</description>
+        </field>
+        <field name="MULTI_THREADED" type="integer" mandatory="false" group="Advanced" defaultValue="1000" >
+          <description>Enabled (1) or disabled (0) multi-threading inside the database engine. MULTI_THREADED is enabled by default with default MVStore storage engine. MULTI_THREADED is disabled by default when using PageStore storage engine, enabling this with PageStore is experimental only.
+This is a global setting, which means it is not possible to open multiple databases with different modes at the same time in the same virtual machine. This setting is not persistent, however the value is kept until the virtual machine exits or it is changed.
+Admin rights are required to execute this command, as it affects all connections</description>
+        </field>
+        <field name="CHACHE_SIZE" type="integer" mandatory="false" group="Advanced" defaultValue="-1" >
+          <description>Sets the size of the cache in KB (each KB being 1024 bytes) for the current database. The default is 65536 per available GB of RAM, i.e. 64 MB per GB. The value is rounded to the next higher power of two. Depending on the virtual machine, the actual memory required may be higher.
+This setting is persistent and affects all connections as there is only one cache per database. Using a very small value (specially 0) will reduce performance a lot. This setting only affects the database engine (the server in a client/server environment; in embedded mode, the database engine is in the same process as the application). It has no effect for in-memory databases.
+Admin rights are required to execute this command, as it affects all connections. This command commits an open transaction in this connection. This setting is persistent.�
+If -1 use the default value.</description>
+        </field>
+        <field name="LOG" type="integer" mandatory="false" group="Advanced" defaultValue="2" >
+          <availableValues>
+            <value label="0 - Transaction log is disabled completely">0</value>
+            <value label="1 - Transaction log is enabled, but FileDescriptor.sync is disabled">1</value>
+            <value label="2 - Transaction log is enabled, and FileDescriptor.sync is called for each checkpoint">2</value>
+          </availableValues>
+          <description>Sets the transaction log mode. The values 0, 1, and 2 are supported, the default is 2. This setting affects all connections.
+LOG 0 means the transaction log is disabled completely. It is the fastest mode, but also the most dangerous: if the process is killed while the database is open in this mode, the data might be lost. It must only be used if this is not a problem, for example when initially loading a database, or when running tests.
+LOG 1 means the transaction log is enabled, but FileDescriptor.sync is disabled. This setting is about half as fast as with LOG 0. This setting is useful if no protection against power failure is required, but the data must be protected against killing the process.
+LOG 2 (the default) means the transaction log is enabled, and FileDescriptor.sync is called for each checkpoint. This setting is about half as fast as LOG 1. Depending on the file system, this will also protect against power failure in the majority if cases.
+Admin rights are required to execute this command, as it affects all connections</description>
+        <field name="LOCK_MODE" type="integer" mandatory="false" group="Advanced" defaultValue="3" >
+          <availableValues>
+            <value label="0 - READ_UNCOMMITTED, no locking">0</value>
+            <value label="1 - SERIALIZABLE, table level locking">1</value>
+            <value label="2 - Table level locking with garbage collection">2</value>
+            <value label="3 - READ_COMMITTED, table level locking+read locks released immediately">3</value>
+          </availableValues>
+          <description>Sets the lock mode. The values 0, 1, 2, and 3 are supported. The default is 3 (READ_COMMITTED). This setting affects all connections.
+The value 0 means no locking (should only be used for testing; also known as READ_UNCOMMITTED). Please note that using SET LOCK_MODE 0 while at the same time using multiple connections may result in inconsistent transactions.
+The value 1 means table level locking (also known as SERIALIZABLE).
+The value 2 means table level locking with garbage collection (if the application does not close all connections).
+The value 3 means table level locking, but read locks are released immediately (default; also known as READ_COMMITTED).
+</description>
+        </field>
+        -->
+      </fields>
+    </class>
+
+    <class name="MDBStoreParameters">
+      <extends>
+        <class>JDBC2StoreParameters</class>
+        <class>MDBResourceParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+    <class name="MDBNewStoreParameters">
+      <extends>
+        <class>JDBC2NewStoreParameters</class>
+        <class>MDBResourceParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+
+    <class name="MDBServerExplorerParameters">
+      <extends>
+        <class>MDBResourceParameters</class>
+        <class>JDBC2ServerExplorerParameters</class>
+      </extends>
+      <fields/>
+    </class>
+
+
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.dal.store.mdb.MDBLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerParameters.java	(revision 46118)
@@ -0,0 +1,74 @@
+/* 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.mdb;
+
+import java.io.File;
+import java.util.Properties;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+
+public class MDBExplorerParameters extends
+        JDBCServerExplorerParameters 
+    implements
+        MDBConnectionParameters
+    {
+    
+    private final MDBConnectionParametersHelper helper;
+
+    public MDBExplorerParameters() {
+        super(
+                MDBLibrary.NAME + "ServerExplorerParameters",
+                MDBLibrary.NAME
+        );
+        this.helper = new MDBConnectionParametersHelper(this);
+    }
+
+    @Override
+    public String getUrl() {
+        return this.helper.getUrl();
+    }
+    
+    @Override
+    public void validate() throws ValidateDataParametersException {
+        this.helper.validate();
+        super.validate();
+    }
+
+    @Override
+    public Properties getProperties() {
+        return this.helper.getProperties();
+    }
+
+    @Override
+    public File getFile() {
+        return this.helper.getFile();
+    }
+    
+    @Override
+    public void setFile(File database) {
+        this.helper.setFile(database);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBLibrary.java	(revision 46118)
@@ -0,0 +1,99 @@
+/* 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.mdb;
+
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.store.db.DBHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+
+public class MDBLibrary extends AbstractLibrary {
+
+    public static final String NAME = DataStore.MDB_PROVIDER_NAME;
+
+    @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;
+
+        DataManagerProviderServices dataman = 
+                (DataManagerProviderServices) DALLocator.getDataManager();
+
+        try {
+            Class.forName(MDBHelper.MDB_JDBC_DRIVER);
+        } catch(Throwable th) {
+            MDBHelper.LOGGER.warn("Can't load MDB JDBC Driver.",th);
+        }
+        
+        DBHelper.registerParametersDefinition(
+                NAME + "StoreParameters",
+                MDBStoreParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "NewStoreParameters",
+                MDBNewStoreParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        DBHelper.registerParametersDefinition(
+                NAME + "ServerExplorerParameters",
+                MDBExplorerParameters.class,
+                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
+        );
+        try {
+            DBHelper.registerMetadataDefinition(
+                NAME,
+                JDBCStoreProviderBase.class,
+                dataman.getResourceAsStream(this, NAME + "Metadata.xml")
+            );
+        } catch (MetadataException e) {
+            ex = new LibraryException(this.getClass(), e);
+        }
+
+        if (!dataman.getStoreProviderRegister().exits(NAME)) {
+            dataman.registerStoreProviderFactory(new MDBStoreProviderFactory());
+        }
+
+        if (!dataman.getServerExplorerRegister().exits(NAME)) {
+            dataman.registerServerExplorerFactory(new MDBExplorerFactory());
+        }
+        if (ex != null) {
+            throw ex;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBSQLBuilder.java	(revision 46118)
@@ -0,0 +1,830 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.sql.Clob;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.mutable.MutableBoolean;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometryParameter;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter.MDBFormatter;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.exception.CreateGeometryException;
+import org.gvsig.tools.dispose.Disposable;
+import org.hsqldb.jdbc.JDBCClob;
+
+public class MDBSQLBuilder extends JDBCSQLBuilderBase {
+
+    protected Formatter formatter = null;
+    
+    public MDBSQLBuilder(MDBHelper helper) {
+        super(helper);
+        
+        this.defaultSchema = "";
+        this.supportSchemas = false;
+        this.allowAutomaticValues = true;
+        this.geometrySupportType = this.helper.getGeometrySupportType();
+        this.hasSpatialFunctions = this.helper.hasSpatialFunctions();
+
+        this.STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table = null;
+        this.STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_table = null;
+         
+        this.STMT_UPDATE_TABLE_STATISTICS_table = "";
+
+        this.type_boolean = "BOOLEAN";
+        this.type_byte = "TINYINT";
+        this.type_bytearray = "BLOB";
+        this.type_geometry = "CLOB";
+        this.type_char = "CHAR";
+        this.type_date = "DATETIME";
+        this.type_double = "FLOAT"; 
+        this.type_decimal_ps = "DECIMAL({0,Number,##########},{1,Number,##########})";
+        this.type_decimal_p = "DECIMAL({0,Number,##########})";
+        this.type_float = "REAL";
+        this.type_int = "INTEGER";
+        this.type_long = "DECIMAL(19,0)";
+        this.type_string = "VARCHAR";
+        this.type_string_p = "VARCHAR({0,Number,##########})";
+        this.type_time = "DATETIME";
+        this.type_timestamp = "DATETIME";
+        this.type_version = "VARCHAR";
+        this.type_URI = "VARCHAR";
+        this.type_URL = "VARCHAR";
+        this.type_FILE = "VARCHAR";
+        this.type_FOLDER = "VARCHAR";             
+    }
+
+    @Override
+    public Formatter formatter() {
+        if( this.formatter==null ) {
+            this.formatter = new MDBFormatter(this);
+        }
+        return this.formatter;
+    }
+
+    public class MDBTableNameBuilderBase extends TableNameBuilderBase {
+
+        @Override
+        public boolean has_database() {
+            return false;
+        }
+        
+    }
+
+    public class MDBCreateIndexBuilder extends CreateIndexBuilderBase {
+    
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("CREATE ");
+            if( this.isUnique ) {
+                builder.append("UNIQUE ");
+            }
+            if( this.isSpatial ) {
+                builder.append("SPATIAL ");
+            }
+            builder.append("INDEX ");
+            if( this.ifNotExist ) {
+                builder.append("IF NOT EXISTS ");
+            }
+            builder.append(as_identifier(this.indexName));
+            builder.append(" ON ");
+            builder.append(this.table.toString(formatter));
+            builder.append(" ( ");
+            boolean is_first_column = true;
+            for( String column : this.columns) {
+                if( is_first_column ) {
+                    is_first_column = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(as_identifier(column));
+            }
+            builder.append(" )");
+            
+            List<String> sqls = new ArrayList<>();
+            sqls.add(builder.toString());
+            return sqls;
+        }
+
+    }
+        
+    protected class MDBAlterTableBuilderBase extends AlterTableBuilderBase {
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+            List<String> sqls = new ArrayList<>();
+            if( this.isEmpty() ) {
+                return sqls;
+            }
+            for (String column : drops) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" DROP COLUMN IF EXISTS ");
+                builder.append(as_identifier(column)); 
+                sqls.add(builder.toString());
+            }
+            for (ColumnDescriptor column : adds) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" ADD COLUMN ");
+                builder.append(as_identifier(column.getName())); 
+                builder.append(" ");
+                if( column.getType() == DataTypes.INT && column.isAutomatic() ) {
+                    builder.append(" SERIAL");
+                } else {
+                    builder.append(
+                        sqltype(
+                            column.getType(), 
+                            column.getSize(),
+                            column.getPrecision(), 
+                            column.getScale(), 
+                            column.getGeometryType(), 
+                            column.getGeometrySubtype()
+                        )
+                    );
+                }
+                if (column.getDefaultValue() == null) {
+                    if (column.allowNulls()) {
+                        builder.append(" DEFAULT NULL");
+                    }
+                } else {
+                    builder.append(" DEFAULT '");
+                    builder.append(Objects.toString(column.getDefaultValue(),""));
+                    builder.append("'");
+                }
+                if (column.allowNulls()) {
+                    builder.append(" NULL");
+                } else {
+                    builder.append(" NOT NULL");
+                }
+                if (column.isPrimaryKey()) {
+                    builder.append(" PRIMARY KEY");
+                }
+                sqls.add(builder.toString());
+                
+//                if( column.isGeometry() ) {
+//                    String constraint_name = "constraint_" + this.table().getName() + "_" + column.getName()+"_geom";
+//                    String sql;
+//                    if( column.getGeometrySRSId()==null ) {
+//                      sql = MessageFormat.format(
+//                            "ALTER TABLE \"{0}\".\"{1}\" ADD CONSTRAINT IF NOT EXISTS \"{2}\" CHECK NVL2(\"{3}\", ST_GeometryTypeCode(\"{3}\") = {4,number,###} AND ST_CoordDim(\"{3}\") = {5,number,###}, TRUE)",
+//                            this.table().getSchema(),
+//                            this.table().getName(),
+//                            constraint_name,
+//                            column.getName(),
+//                            sqlgeometrytype(column.getGeometryType(),column.getGeometrySubtype()),
+//                            sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype()),
+//                            column.getGeometrySRSId() 
+//                      );
+//                    } else {
+//                      sql = MessageFormat.format(
+//                            "ALTER TABLE \"{0}\".\"{1}\" ADD CONSTRAINT IF NOT EXISTS \"{2}\" CHECK NVL2(\"{3}\", ST_GeometryTypeCode(\"{3}\") = {4,number,###} AND ST_CoordDim(\"{3}\") = {5,number,###} AND ST_SRID(\"{3}\") = {6,number,#####}, TRUE)",
+//                            this.table().getSchema(),
+//                            this.table().getName(),
+//                            constraint_name,
+//                            column.getName(),
+//                            sqlgeometrytype(column.getGeometryType(),column.getGeometrySubtype()),
+//                            sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype()),
+//                            column.getGeometrySRSId() 
+//                      );
+//                    }
+//                    sqls.add(sql);
+//                }
+            }
+            for (ColumnDescriptor column : alters) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" ALTER COLUMN ");
+                builder.append(as_identifier(column.getName())); 
+                builder.append(" ");
+                builder.append(
+                    sqltype(
+                        column.getType(), 
+                        column.getSize(),
+                        column.getPrecision(), 
+                        column.getScale(), 
+                        column.getGeometryType(), 
+                        column.getGeometrySubtype()
+                    )
+                );
+                if (column.getDefaultValue() == null) {
+                    if (column.allowNulls()) {
+                        builder.append(" DEFAULT NULL");
+                    }
+                } else {
+                    builder.append(" DEFAULT '");
+                    builder.append(column.getDefaultValue().toString());
+                    builder.append("'");
+                }
+                if( column.isAutomatic() ) {
+                    builder.append(" AUTO_INCREMENT");
+                }
+                sqls.add(builder.toString());
+//                if( column.isGeometry() ) {
+//                    String sql;
+//                    String constraint_name = "constraint_" + this.table().getName() + "_" + column.getName()+"_dim";
+//                    sql = MessageFormat.format(
+//                        "ALTER TABLE \"{0}\".\"{1}\" ADD CONSTRAINT IF NOT EXISTS \"{2}\" CHECK ST_CoordDim(\"{3}\") = {4}",
+//                        this.table().getSchema(),
+//                        this.table().getName(),
+//                        constraint_name,
+//                        column.getName(),
+//                        sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype())
+//                    );
+//                    sqls.add(sql);
+//                }
+            }
+            for (Pair<String,String> pair : renames) {
+                StringBuilder builder = new StringBuilder();
+                builder.append("ALTER TABLE ");
+                builder.append(this.table.toString(formatter));
+                builder.append(" RENAME COLUMN ");
+                builder.append(as_identifier(pair.getLeft())); 
+                builder.append(" TO ");
+                builder.append(as_identifier(pair.getRight())); 
+                sqls.add(builder.toString());
+            }
+            return sqls;
+        }
+
+    }
+
+    protected class MDBCreateTableBuilder extends CreateTableBuilderBase {
+
+        @Override
+        public List<String> toStrings(Formatter formatter) {
+
+            List<String> sqls = new ArrayList<>();
+            StringBuilder builder = new StringBuilder();
+
+            builder.append("CREATE TABLE ");
+            builder.append(this.table.toString(formatter));
+            builder.append(" (");
+            boolean first = true;
+            for (ColumnDescriptor column : columns) {
+
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append(", ");
+                }
+                builder.append(as_identifier(column.getName()));
+                builder.append(" ");
+                if( column.isGeometry() ) {
+                    builder.append(type_geometry);
+                } else {
+                    builder.append(
+                        sqltype(
+                            column.getType(), 
+                            column.getSize(),
+                            column.getPrecision(), 
+                            column.getScale(), 
+                            column.getGeometryType(), 
+                            column.getGeometrySubtype()
+                        )
+                    );
+                }
+                if (column.isPrimaryKey()) {
+                    builder.append(" PRIMARY KEY");
+                    if( column.isAutomatic() ) {
+                        builder.append(" AUTO_INCREMENT");
+                    }
+                } else {
+                    if( column.isAutomatic() ) {
+                        builder.append(" AUTO_INCREMENT");
+                    }
+                    if (column.getDefaultValue() == null) {
+                        if (column.allowNulls()) {
+                            builder.append(" DEFAULT NULL");
+                        }
+                    } else {
+                        if( column.getType() == DataTypes.DATE ) {
+                            builder.append(" DEFAULT ( TIMESTAMP '");
+                            Date d = (Date) column.getDefaultValue();
+                            builder.append(MessageFormat.format( "{0,date,yyyy-MM-dd HH:mm:ss.S}",d));
+                            builder.append("' )");
+                        } else {
+                            builder.append(" DEFAULT '");
+                            builder.append(Objects.toString(column.getDefaultValue(),""));
+                            builder.append("'");
+                        }
+                    }                    
+                }
+                if (!column.allowNulls()) {
+                    builder.append(" NOT NULL");
+                }
+            }
+            builder.append(" )");
+            sqls.add(builder.toString());
+            return sqls;
+        }
+    }
+    
+    public class MDBInsertColumnBuilderBase extends InsertColumnBuilderBase {
+        @Override
+       public String toString(Formatter<ExpressionBuilder.Value> formatter) {
+            if( formatter!=null && formatter.canApply(this) ) {
+                return formatter.format(this);
+            }
+            return this.value.toString(formatter);
+        }
+    }
+    
+    public class MDBInsertBuilderBase extends InsertBuilderBase {
+        @Override
+        public String toString(Formatter formatter) {
+            return super.toString(formatter);
+        }
+    }
+    
+    public class MDBSelectColumnBuilderBase extends SelectColumnBuilderBase {
+        @Override
+        public String toString(Formatter formatter) {
+            return super.toString(formatter);
+        }
+    }
+        
+    public class MDBSelectBuilderBase extends SelectBuilderBase {
+        
+        @Override
+        public String toString(Formatter formatter) {
+            StringBuilder builder = new StringBuilder();
+            if( !isValid(builder) ) {
+                throw new IllegalStateException(builder.toString());
+            }
+            builder.append("SELECT ");
+            if( this.distinct ) {
+                builder.append("DISTINCT ");
+            }
+            boolean first = true;
+            for (SelectColumnBuilder column : columns) {
+                if (first) {
+                    first = false;
+                } else {
+                    builder.append(", ");
+                }
+                
+                builder.append(column.toString(formatter));
+            }
+
+            if ( this.has_from() ) {
+                builder.append(" FROM ");
+                builder.append(this.from.toString(formatter));
+            }
+            if ( this.has_where() ) {
+                builder.append(" WHERE ");
+                builder.append(this.where.toString(formatter));
+            }
+            if( this.has_group_by() ) {
+                builder.append(" GROUP BY ");
+                builder.append(this.groupColumn.get(0).toString(formatter));
+                for (int i = 1; i < groupColumn.size(); i++) {
+                    builder.append(", ");
+                    builder.append(this.groupColumn.get(i).toString(formatter));
+                }
+            }
+            if( this.has_order_by() ) {
+                builder.append(" ORDER BY ");
+                first = true;
+                for (OrderByBuilder item : this.order_by) {
+                    if (first) {
+                        first = false;
+                    } else {
+                        builder.append(", ");
+                    }
+                    builder.append(item.toString(formatter));                    
+                }   
+            }
+            
+            if ( this.has_limit() && this.has_offset() ) {
+                builder.append(" LIMIT ");
+                builder.append(this.limit);
+                builder.append(" OFFSET ");
+                builder.append(this.offset);
+                
+            } else if ( this.has_limit()) {
+                builder.append(" LIMIT ");
+                builder.append(this.limit);
+
+            } else if ( this.has_offset() ) {
+                builder.append(" LIMIT -1 OFFSET ");
+                builder.append(this.offset);    
+            }
+            return builder.toString();
+
+        }
+    }
+
+    @Override
+    public Object sqlgeometrydimension(int type, int subtype) {
+        //'XY' or 2: 2D points, identified by X and Y coordinates
+        //'XYM': 2D points, identified by X and Y coordinates. Each point stores an M-value (measure) as well
+        //'XYZ' or 3: 3D points, identified by X, Y and Z coordinates
+        //'XYZM' or 4: 3D points, identified by X, Y and Z coordinates. Each point stores an M-value (measure) as well
+        switch(subtype) {
+            case Geometry.SUBTYPES.GEOM2D:
+            default:
+                return "XY";
+            case Geometry.SUBTYPES.GEOM2DM:
+                return "XYM";
+            case Geometry.SUBTYPES.GEOM3D:
+                return "XYZ";
+            case Geometry.SUBTYPES.GEOM3DM:
+                return "XYZM";
+        }
+    }
+
+    @Override
+    public String sqltype(int type, int size, int precision, int scale, int geomtype, int geomSubtype) {
+        if( type!=DataTypes.GEOMETRY ) {
+            return super.sqltype(type, size, precision, scale, geomtype, geomSubtype);
+        }
+        return this.type_geometry;
+    }
+    
+    @Override
+    public Object sqlgeometrytype(int geomtype, int geomsubtype) {
+        //
+        // https://github.com/orbisgis/h2gis/wiki/1.-Spatial-data#geometry-columns-view
+        //
+        switch(geomtype) {
+        case Geometry.TYPES.POINT:
+            return 1; 
+        case Geometry.TYPES.MULTIPOINT:
+            return 4; 
+        case Geometry.TYPES.LINE:
+            return 2; 
+        case Geometry.TYPES.MULTILINE:
+            return 5; 
+        case Geometry.TYPES.POLYGON:
+            return 3; 
+        case Geometry.TYPES.MULTIPOLYGON:
+            return 6;
+        case Geometry.TYPES.GEOMETRY:
+        default:
+            return 0; // "GEOMETRY";
+        }
+    }
+    
+    public Object sqlgeometrynumdimension(int type, int subtype) {
+        int dimensions=2;
+        switch(subtype) {
+        case Geometry.SUBTYPES.GEOM3D:
+            dimensions = 3;
+            break;
+        case Geometry.SUBTYPES.GEOM2D:
+            dimensions = 2;
+            break;
+        case Geometry.SUBTYPES.GEOM2DM:
+            dimensions = 2; // ??????
+            break;
+        case Geometry.SUBTYPES.GEOM3DM:
+            dimensions = 3; // ??????
+            break;
+        }
+        return dimensions;
+    }
+    
+    @Override
+    public MDBHelper getHelper() {
+        return (MDBHelper) this.helper;
+    }
+   
+    @Override
+    public Disposable setParameters(PreparedStatement st, FeatureProvider feature) {
+        try {
+            FeatureType featureType = feature.getType();
+            List<Object> values = new ArrayList<>();
+            List<Parameter> parameters = this.parametersWithoutSRS();
+            for (Parameter parameter : parameters) {
+                if (parameter.is_constant()) {
+                    values.add(parameter.value());
+                } else {
+                    String name = parameter.name();
+                    FeatureAttributeDescriptor descriptor = featureType.getAttributeDescriptor(name);
+                    switch( descriptor.getType() ) {
+                    case DataTypes.DATE:
+                        Date value = (Date)(feature.get(name));
+                        if( value == null ) {
+                            values.add(null);
+                        } else {
+                            values.add(new java.sql.Date(value.getTime()));
+                        }
+                        break;
+                    case DataTypes.GEOMETRY:
+                        Geometry geom = this.forceGeometryType(
+                            descriptor.getGeomType(),
+                            (Geometry)(feature.get(name))
+                        );
+                        values.add(geom);
+                        break;
+                    default:
+                        values.add(feature.get(name));
+                        break;
+                    }
+                }
+            }
+            return this.setStatementParameters(st, values, this.geometry_support_type());
+        } catch (SQLException | CreateGeometryException ex) {
+            String f = "unknow";
+            try {
+                f = feature.toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't set parameters to prepared statement from the feature (" + f + ")", ex);
+        }
+    }
+
+    public List<Parameter> parametersWithoutSRS() {
+        final List<Parameter>  params = new ArrayList<>();
+        MutableBoolean skipNextParameter = new MutableBoolean(false);
+        this.accept((ExpressionBuilder.Visitable value1) -> {
+            if (skipNextParameter.isTrue()) {
+                skipNextParameter.setFalse();
+                return;
+            }
+            if (value1 instanceof GeometryExpressionBuilderHelper.GeometryParameter) {
+                GeometryParameter g = (GeometryParameter) value1;
+                if (g.srs()!= null) {
+                    skipNextParameter.setTrue();
+                }
+                
+            }
+          params.add((Parameter) value1);
+        }, new ExpressionBuilder.ClassVisitorFilter(Parameter.class));
+        return params;
+    }
+//.
+//    public List<Parameter> parametersWithoutSRS() { // aqui hay que eliminar el srs. Visitor de tipo GeometryParameterBase, si ese tiene srs. si lo tiene y es de tipo Parametro debe saltarselo
+//        final List<Parameter> params = new ArrayList<>();
+//        this.accept(new ExpressionBuilder.Visitor() {
+//            @Override
+//            public void visit(ExpressionBuilder.Visitable value) {
+//                params.add((Parameter) value);
+//            }
+//        }, new ExpressionBuilder.ClassVisitorFilter(Parameter.class));
+//        return params;
+//    }
+
+    @Override
+    public InsertColumnBuilderBase createInsertColumnBuilder() {
+        return new MDBInsertColumnBuilderBase();
+    }
+        
+    @Override
+    public InsertBuilderBase createInsertBuilder() {
+        return new MDBInsertBuilderBase();
+    }
+
+    @Override
+    public AlterTableBuilder createAlterTableBuilder() {
+        return new MDBAlterTableBuilderBase();
+    }
+            
+    @Override
+    public TableNameBuilder createTableNameBuilder() {
+        return new MDBTableNameBuilderBase();
+    }
+    
+    @Override
+    protected CreateTableBuilder createCreateTableBuilder() {
+        return new MDBCreateTableBuilder();
+    }
+
+    @Override
+    protected SelectBuilder createSelectBuilder() {
+        return new MDBSelectBuilderBase();
+    }
+
+    @Override
+    protected SelectColumnBuilder createSelectColumnBuilder() {
+        
+        return new MDBSelectColumnBuilderBase(); //super.createSelectColumnBuilder().; // SelectColumnBuilderBase, override el metodo toString
+    }
+    
+    @Override
+    protected CreateIndexBuilder createCreateIndexBuilder() {
+        return new MDBCreateIndexBuilder();
+    }
+    
+    @Override
+    public String as_identifier(String id) {
+        if (id.startsWith("[")) {
+            return id;
+        }
+        return "["+id+"]";
+    }
+    
+    @Override
+    public Disposable setStatementParameters(
+            PreparedStatement st,
+            List values,
+            GeometryExpressionBuilderHelper.GeometrySupportType geometrySupportType) throws SQLException {
+
+        //
+        DisposableClobs disposableClobs = new DisposableClobs();
+        //
+        if (values == null) {
+            return disposableClobs;
+        }
+        if (true || LOGGER.isDebugEnabled()) {
+            StringBuilder debug = new StringBuilder();
+            debug.append("st.set(");
+            try {
+                byte[] bytes;
+                int columnIndex = 1;
+                for (Object value : values) {
+                    if (value instanceof Geometry) {
+                        switch (geometrySupportType) {
+                            case WKT:
+                                value = ((Geometry) value).convertToWKT();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(value));
+                                debug.append(", ");
+                                break;
+                            case NATIVE:
+                            case WKB:
+                                bytes = ((Geometry) value).convertToWKB();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(bytes));
+                                debug.append(", ");
+                                break;
+                            case EWKB:
+                                bytes = ((Geometry) value).convertToEWKB();
+                                debug.append("/*");
+                                debug.append(columnIndex);
+                                debug.append("*/ ");
+                                debug.append(as_string(bytes));
+                                debug.append(", ");
+                                break;
+                        }
+                    } else {
+                        debug.append("/*");
+                        debug.append(columnIndex);
+                        debug.append("*/ ");
+                        if (value instanceof String) {
+                            debug.append(as_string(value));
+                        } else if (value instanceof Boolean) {
+                            debug.append(((Boolean) value) ? constant_true : constant_false);
+                        } else {
+                            debug.append(value);
+                        }
+                        debug.append(", ");
+                    }
+                    columnIndex++;
+                }
+                debug.append(")");
+                LOGGER.debug(debug.toString());
+            } catch (Exception ex) {
+            }
+        }
+        byte[] bytes;
+        char[] hexGeomEwkb;
+        int columnIndex = 1;
+        Object theValue;
+        Clob cl;
+        try {
+            for (Object value : values) {
+                theValue = value;
+
+                if (value instanceof Geometry) {
+                    switch (geometrySupportType) {
+                        case WKT:
+                            value = ((Geometry) value).convertToWKT();
+                            st.setObject(columnIndex, value);
+                            break;
+                        case NATIVE:
+                        case WKB:
+                            bytes = ((Geometry) value).convertToWKB();
+                            cl = disposableClobs.add(bytes);
+                            st.setClob(columnIndex, cl);
+                            break;
+
+                        case EWKB:
+                            bytes = ((Geometry) value).convertToEWKB();
+                            cl = disposableClobs.add(bytes);
+                            st.setClob(columnIndex, cl);
+                            break;
+
+
+                    }
+                } else if (value instanceof Date) {
+                    // Access solo soporta timestamp
+                    value = new Timestamp(((Date) value).getTime());
+                    st.setObject(columnIndex, value);
+                } else {
+                    if (value == null) {
+                        st.setNull(columnIndex, java.sql.Types.BIT);
+                    } else {
+                        st.setObject(columnIndex, value);
+                    }
+                }
+                columnIndex++;
+            }
+            return disposableClobs;
+        } catch (Exception ex) {
+            throw new SQLException("Can't set values for the prepared statement.", ex);
+        }
+    }
+
+    @Override
+    public List<Object> getParameters(FeatureProvider feature) {
+        try {
+            FeatureType type = feature.getType();
+            List<Object> values = new ArrayList<>();
+            Object value;
+            for (Parameter parameter : this.parameters()) {
+                if (parameter.is_constant()) {
+                    value = parameter.value();
+                    values.add(value);
+                } else {
+                    String name = parameter.name();
+                    value = feature.get(name);
+                    FeatureAttributeDescriptor attrDesc = type.getAttributeDescriptor(name);
+                    switch (attrDesc.getType()) {
+                        case org.gvsig.fmap.dal.DataTypes.BOOLEAN:
+                            if (value == null) {
+                                value = false;
+                            }
+                            values.add(value);
+                            break;
+                        case org.gvsig.fmap.dal.DataTypes.DATE:
+                            if (value == null) {
+                                values.add(null);
+                            } else {
+                                values.add(new java.sql.Date(((Date) value).getTime()));
+                            }
+                            break;
+                        case org.gvsig.fmap.dal.DataTypes.GEOMETRY:
+                            Geometry geom = this.forceGeometryType(
+                                    attrDesc.getGeomType(),
+                                    (Geometry) value
+                            );
+                            values.add(geom);
+                            break;
+                        default:
+                            values.add(value);
+                            break;
+                    }
+                }
+            }
+            return values;
+        } catch (Exception ex) {
+            String f = "unknow";
+            try {
+                f = feature.toString();
+            } catch (Exception ex2) {
+                // Do nothing
+            }
+            throw new RuntimeException("Can't get parameters to prepared statement from the feature (" + f + ")", ex);
+        }
+    }
+
+
+        public class DisposableClobs implements Disposable {
+
+        private final List<Clob> clobList = new ArrayList<>();
+
+        public Clob add(byte[] bytes) throws SQLException {
+            char[] hexGeom = Hex.encodeHex(bytes);
+            String strHexGeo = new String(hexGeom);
+            JDBCClob clob = new JDBCClob(strHexGeo);
+            clobList.add(clob);
+            return clob;
+        }
+
+        @Override
+        public void dispose() {
+            clobList.forEach((Clob clob) -> {
+                try {
+                    clob.free();
+                } catch (SQLException ex) {
+                }
+            });
+        }
+
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Exists.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Exists.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Exists.java	(revision 46118)
@@ -0,0 +1,39 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Exists implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public Exists(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(FUNCTION_EXISTS, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        return "NVL2(COALESCE("+exp.toString(formatter)+"),TRUE,FALSE)";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/GeometryParameterMDB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/GeometryParameterMDB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/GeometryParameterMDB.java	(revision 46118)
@@ -0,0 +1,48 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_CONSTANT;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.PARAMETER_TYPE_VARIABLE;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometryParameter;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.EWKB;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKB;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKT;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.PARAMETER_TYPE_GEOMETRY;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class GeometryParameterMDB implements Formatter<Value> {
+
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+
+    public GeometryParameterMDB(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof GeometryParameter) {
+            Object x = ((GeometryParameter) value);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value variable) {
+//        GeometryParameter x = ((GeometryParameter) variable);
+        return "?";
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/DateFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/DateFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/DateFunction.java	(revision 46118)
@@ -0,0 +1,39 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DateFunction implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public DateFunction(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_DATE, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        return "DATEVALUE("+exp.toString(formatter)+")";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Decode.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Decode.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Decode.java	(revision 46118)
@@ -0,0 +1,61 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.util.List;
+import java.util.Objects;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DECODE;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Decode implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public Decode(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            if( StringUtils.equalsIgnoreCase(FUNCTION_DECODE, ((Function) value).name()) ) {
+                List<Value> parameters = ((Function) value).parameters();
+                if( parameters.size()==2) {
+                    Value p1 = parameters.get(0);
+                    Value p2 = parameters.get(1);
+                    if( p1 instanceof ExpressionBuilder.Constant && 
+                        p2 instanceof ExpressionBuilder.Constant &&
+                        ((ExpressionBuilder.Constant)p1).value() instanceof String &&
+                        ((ExpressionBuilder.Constant)p2).value() instanceof String 
+                        ) {
+                        String p2value = ((ExpressionBuilder.Constant)p2).value().toString();
+                        if( StringUtils.equalsIgnoreCase(p2value, "hex") ) {
+                            return true;
+                        }
+                    }
+                    
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+        List<Value> parameters = ((Function) function).parameters();
+        Value p1 = parameters.get(0);
+        String p1value = Objects.toString(((ExpressionBuilder.Constant)p1).value(), "");
+        String r = "0x"+p1value;
+        return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/VariableBaseMDB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/VariableBaseMDB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/VariableBaseMDB.java	(revision 46118)
@@ -0,0 +1,37 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class VariableBaseMDB implements Formatter<Value> {
+
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public VariableBaseMDB(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Variable) {
+            Object x = ((ExpressionBuilder.Variable)value);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value variable) {
+        ExpressionBuilder.Variable x = ((ExpressionBuilder.Variable)variable); 
+        return "["+x.name()+"]";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/SelectColumnBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/SelectColumnBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/SelectColumnBuilder.java	(revision 46118)
@@ -0,0 +1,39 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SelectColumnBuilder implements Formatter<Value> {
+
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+
+    public SelectColumnBuilder(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof SQLBuilder.SelectColumnBuilder) {
+            SQLBuilder.SelectColumnBuilder x = (SQLBuilder.SelectColumnBuilder) value;
+            return x.isGeometry();
+        }
+
+        return false;
+    }
+
+    @Override
+    public String format(Value constant) {
+        SQLBuilder.SelectColumnBuilder x = (SQLBuilder.SelectColumnBuilder) constant;
+        return "[" + x.getName() + "]";
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimeFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimeFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimeFunction.java	(revision 46118)
@@ -0,0 +1,60 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TimeFunction implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public TimeFunction(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_TIME, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        if (exp instanceof ExpressionBuilder.Constant) {
+            ExpressionBuilder.Constant x = (ExpressionBuilder.Constant) exp;
+            Object value = x.value();
+            if (value instanceof String) {
+                String strValue = (String) value;
+                String[] splits = StringUtils.split(strValue, " ");
+                if (splits.length > 0 && splits.length<3) {
+                    try {
+                        Date spm = new SimpleDateFormat("H:m:s").parse(strValue);
+                        return "#"+value+"#";
+                    } catch (ParseException ex) {
+                        
+                    }
+                }
+            }
+        }
+        return "CDATE('1899-12-30 '|| FORMAT(CDATE(" + exp.toString(formatter) + "),'Long Time'))";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNull.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNull.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNull.java	(revision 46118)
@@ -0,0 +1,49 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code.Constant;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+class IsNull implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public IsNull(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if( StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function) value).name()) ) {
+                List<Value> parameters = ((Function) value).parameters();
+                Value p2 = parameters.get(1);
+                if( p2 instanceof Constant && ((Constant)p2).value()==null ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+        List<Value> parameters = ((Function) function).parameters();
+        String p1 = parameters.get(0).toString(formatter);
+        String r = MessageFormat.format("( ({0}) IS NULL )", p1);
+        return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/MDBFormatter.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/MDBFormatter.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/MDBFormatter.java	(revision 46118)
@@ -0,0 +1,60 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class MDBFormatter implements Formatter<Value> {
+
+    private final SQLBuilder builder;
+    private final Formatter<ExpressionBuilder.Value>[] formatters;
+
+    public MDBFormatter(SQLBuilder builder) {
+
+        this.builder = builder;
+        this.formatters = new Formatter[]{
+            new IfNull(this.builder, this),
+            new IsNotNull(this.builder, this),
+            new IsNull(this.builder, this),
+            new Decode(this.builder, this),
+            new ILike(this.builder, this),
+            new Constant(this.builder, this),
+            new Exists(this.builder, this),
+            new Getattr(this.builder, this),
+            new GeometryParameterMDB(this.builder, this),
+            new VariableBaseMDB(this.builder, this),
+            new DateFunction(this.builder, this),
+            new TimeFunction(this.builder, this),
+            new TimestampFunction(this.builder, this),
+            new SelectColumnBuilder(this.builder, this),
+            DALLocator.getDataManager().createDALExpressionBuilder().formatter(this),
+        };
+    }
+
+    @Override
+    public boolean canApply(Value value) {
+        for (Formatter<Value> formatter : formatters) {
+            if (formatter.canApply(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value) {
+        for (Formatter<Value> formatter : formatters) {
+            if (formatter.canApply(value)) {
+                return formatter.format(value);
+            }
+        }
+        return value.toString(this);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNotNull.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNotNull.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IsNotNull.java	(revision 46118)
@@ -0,0 +1,62 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.Code.Constant;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_NOT;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+class IsNotNull implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public IsNotNull(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value_not) {
+        if (value_not instanceof Function) {
+            // NOT( IS( p1, NULL) )
+            if( StringUtils.equalsIgnoreCase(OPERATOR_NOT, ((Function) value_not).name()) ) {
+                List<Value> parameters = ((Function) value_not).parameters();
+                Value value_is = parameters.get(0);
+                if( value_is instanceof Function && StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function)value_is).name()) ) {
+                    List<Value> parameters_is = ((Function) value_is).parameters();
+                    Value is_p2 = parameters_is.get(1);
+                    if( is_p2 instanceof Constant && ((Constant)is_p2).value()==null ) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value_not) {
+        // NOT( IS( p1, NULL) )
+
+        List<Value> parameters = ((Function) value_not).parameters();
+        Value value_is = parameters.get(0);
+        List<Value> parameters_is = ((Function)value_is).parameters();
+        Value is_p1 = parameters_is.get(0);
+        String r = MessageFormat.format(
+                "( ({0}) IS NOT NULL )", 
+                is_p1.toString(formatter)
+        );
+        return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Constant.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Constant.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Constant.java	(revision 46118)
@@ -0,0 +1,66 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.EWKB;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKB;
+import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKT;
+import org.gvsig.fmap.dal.SQLBuilder;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Constant implements Formatter<Value> {
+
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public Constant(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Constant) {
+            Object x = ((ExpressionBuilder.Constant)value).value();
+            if( x instanceof byte[] ) {
+                return true;
+            }
+            if( x instanceof Geometry ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value constant) {
+        Object x = ((ExpressionBuilder.Constant)constant).value();
+        GeometryExpressionBuilder builder = this.sqlbuilder.expression();
+        if( x instanceof byte[] ) {
+            return builder.bytearray_0x((byte[]) x);
+        }
+        if( x instanceof Geometry ) {
+            Geometry geometry = (Geometry) x;
+            switch (builder.geometry_support_type()) {
+                case EWKB:
+                    return builder.bytearray_x(GeometryUtils.toEWKB(geometry));
+                case WKB:
+                    return builder.bytearray_x(GeometryUtils.toWKB(geometry));
+                case WKT:
+                default:
+                    return builder.string(GeometryUtils.toWKT(geometry));
+            }
+            
+        }
+        return null;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IfNull.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IfNull.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/IfNull.java	(revision 46118)
@@ -0,0 +1,52 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_IFNULL;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+class IfNull implements Formatter<Value> {
+
+    private final Formatter<Value> formatter;
+    private final SQLBuilder builder;
+    
+    public IfNull(SQLBuilder builder, Formatter<Value> formatter) {
+        this.builder = builder;
+        this.formatter = formatter;
+    }
+    
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if (value instanceof ExpressionBuilder.Function) {
+                return StringUtils.equalsIgnoreCase(FUNCTION_IFNULL, ((Function) value).name());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function) {
+            List<Value> parameters = ((Function) function).parameters();
+            String p1 = parameters.get(0).toString(formatter);
+            String p2 = parameters.get(1).toString(formatter);
+            String p3 = parameters.get(2).toString(formatter);
+            String r = MessageFormat.format(
+                    "NVL2({0}, {1}, {2})",
+                    p1,
+                    p3,
+                    p2
+            );
+            return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimestampFunction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimestampFunction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/TimestampFunction.java	(revision 46118)
@@ -0,0 +1,39 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class TimestampFunction implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public TimestampFunction(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.Function) {
+            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_TIMESTAMP, ((Function) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Value exp = function.parameters().get(0);
+        return "CDATE("+exp.toString(formatter)+")";
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Getattr.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Getattr.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/Getattr.java	(revision 46118)
@@ -0,0 +1,46 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import org.apache.commons.lang3.StringUtils;
+import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class Getattr implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public Getattr(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(Value value) {
+        if (value instanceof Function) {
+            if( StringUtils.equalsIgnoreCase(FUNCTION_GETATTR, ((Function) value).name()) ) {
+              Value obj = ((Function) value).parameters().get(0);
+              Value attrname = ((Function) value).parameters().get(1);
+              return obj instanceof Variable && attrname instanceof Constant;
+              
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value function0) {
+        Function function = (Function) function0;
+        Variable obj = (Variable) function.parameters().get(0);
+        Constant attrname = (Constant) function.parameters().get(1);
+        return this.sqlbuilder.as_identifier(obj.name())+"."+this.sqlbuilder.as_identifier((String) attrname.value());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/ILike.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/ILike.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/expressionbuilderformatter/ILike.java	(revision 46118)
@@ -0,0 +1,40 @@
+package org.gvsig.fmap.dal.store.mdb.expressionbuilderformatter;
+
+import java.text.MessageFormat;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
+import org.gvsig.expressionevaluator.Formatter;
+import org.gvsig.fmap.dal.SQLBuilder;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ILike implements Formatter<Value> {
+    
+    private final SQLBuilder sqlbuilder;
+    private final Formatter<Value> formatter;
+    
+    public ILike(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
+        this.sqlbuilder = sqlbuilder;
+        this.formatter = formatter;
+    }
+    @Override
+    public boolean canApply(ExpressionBuilder.Value value) {
+        if (value instanceof ExpressionBuilder.BinaryOperator) {
+            return StringUtils.equalsIgnoreCase(ExpressionBuilder.OPERATOR_ILIKE, ((ExpressionBuilder.BinaryOperator) value).name());
+        }
+        return false;
+    }
+
+    @Override
+    public String format(Value value) {
+        ExpressionBuilder.BinaryOperator operator = (ExpressionBuilder.BinaryOperator) value;
+        String p1 = operator.left().toString(formatter);
+        String p2 = operator.right().toString(formatter);
+        String r = MessageFormat.format("(lcase({0}) like lcase({1}))", p1, p2);
+        return r;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorerFactory.java	(revision 46118)
@@ -0,0 +1,43 @@
+
+package org.gvsig.fmap.dal.store.mdb;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCServerExplorerFactory;
+
+
+public class MDBExplorerFactory extends JDBCServerExplorerFactory {
+
+    public MDBExplorerFactory() {
+        super(
+                MDBLibrary.NAME,
+                "MDB"
+        );
+    }
+
+    @Override
+    public JDBCServerExplorer create(
+            DataServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+        ) throws InitializeException {
+        JDBCHelper helper = new MDBHelper((JDBCConnectionParameters) parameters);
+        JDBCServerExplorer server = helper.createServerExplorer(
+                (JDBCServerExplorerParameters) parameters, 
+                providerServices
+        );
+        return server;
+    }
+        
+
+    @Override
+    public JDBCServerExplorerParameters createParameters() {
+        JDBCServerExplorerParameters params = new MDBExplorerParameters();
+        return params;    
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBNewStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBNewStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBNewStoreParameters.java	(revision 46118)
@@ -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.
+ *
+ */
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.io.File;
+import java.util.Properties;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.mdb.MDBConnectionParametersHelper;
+
+public class MDBNewStoreParameters 
+    extends 
+        JDBCNewStoreParameters 
+    implements 
+        MDBConnectionParameters 
+    {
+
+    private final MDBConnectionParametersHelper helper;
+    
+    public MDBNewStoreParameters() {
+        super(
+            MDBLibrary.NAME + "NewStoreParameters", 
+            MDBLibrary.NAME
+        );
+        this.helper = new MDBConnectionParametersHelper(this);
+    }
+
+    @Override
+    public String getUrl() {
+        return this.helper.getUrl();
+    }
+    
+    @Override
+    public void validate() throws ValidateDataParametersException {
+        this.helper.validate();
+    }
+
+    @Override
+    public Properties getProperties() {
+        return this.helper.getProperties();
+    }
+
+    @Override
+    public File getFile() {
+        return this.helper.getFile();
+    }
+    
+    @Override
+    public void setFile(File database) {
+        this.helper.setFile(database);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBHelper.java	(revision 46118)
@@ -0,0 +1,473 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2016 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.mdb;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.text.MessageFormat;
+import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+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.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.store.mdb.operations.MDBOperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCCantFetchValueException;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCDriverClassNotFoundException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
+import org.gvsig.fmap.dal.store.jdbc2.spi.ConnectionProvider;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCServerExplorerBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolverDumb;
+import org.gvsig.fmap.geom.Geometry;
+//import org.h2.tools.Server;
+//import org.h2gis.ext.H2GISExtension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class MDBHelper extends JDBCHelperBase {
+
+    static final Logger LOGGER = LoggerFactory.getLogger(MDBHelper.class);
+
+    public static final String MDB_JDBC_DRIVER = "net.ucanaccess.jdbc.UcanaccessDriver";
+
+    public static String getConnectionURL(MDBConnectionParameters params) {
+        String connectionURL;
+        String dbfilename = params.getFile().getAbsolutePath().replace("\\","/");
+//        if( dbfilename!=null && dbfilename.endsWith(".mdb") ) {
+//            dbfilename = dbfilename.substring(0, dbfilename.length()-3);
+//        }
+        StringBuilder commonParameters = new StringBuilder();
+//        commonParameters.append(";MODE=PostgreSQL");
+//        commonParameters.append(";SCHEMA=PUBLIC");
+        
+//        Integer LOCK_TIMEOUT = (Integer) params.getDynValue("LOCK_TIMEOUT");
+//        if( LOCK_TIMEOUT!=null ) {
+//            commonParameters.append(";LOCK_TIMEOUT=").append(LOCK_TIMEOUT);
+//        }
+//        Integer MULTI_THREADED = (Integer) params.getDynValue("MULTI_THREADED");
+//        if( MULTI_THREADED!=null ) {
+//            commonParameters.append(";MULTI_THREADED=").append(MULTI_THREADED);
+//        }
+//        Integer CHACHE_SIZE = (Integer) params.getDynValue("CHACHE_SIZE");
+//        if( LOCK_TIMEOUT!=null ) {
+//            commonParameters.append(";CHACHE_SIZE=").append(CHACHE_SIZE);
+//        }
+//        Integer LOG = (Integer) params.getDynValue("LOG");
+//        if( LOCK_TIMEOUT!=null ) {
+//            commonParameters.append(";LOG=").append(LOG);
+//        }
+//        Integer LOCK_MODE = (Integer) params.getDynValue("LOCK_MODE");
+//        if( LOCK_TIMEOUT!=null ) {
+//            commonParameters.append(";LOCK_MODE=").append(LOCK_MODE);
+//        }
+        if (!params.getFile().exists()) {
+            commonParameters.append("newdatabaseversion=V2010;");
+        }
+        commonParameters.append("showSchema=true;");
+        
+        // http://ucanaccess.sourceforge.net/site.html#examples
+        connectionURL =  MessageFormat.format(                
+                "jdbc:ucanaccess://{0};"+commonParameters.toString(),
+                dbfilename
+        );
+        
+        LOGGER.debug("connectionURL: {}", connectionURL);
+        return connectionURL;
+    }
+
+    public static class ConnectionProviderImpl implements ConnectionProvider {
+
+        private static boolean needRegisterDriver = true;
+
+        private BasicDataSource dataSource = null;
+
+        private MDBConnectionParameters connectionParameters;
+
+//        private static Server server = null;
+        private static String server = null;
+        private static boolean startServer = true;
+
+        public ConnectionProviderImpl(MDBConnectionParameters connectionParameters) {
+            this.connectionParameters = connectionParameters;
+        }
+        
+        @Override
+        public String getStatus() {
+            StringBuilder builder = new StringBuilder();
+            builder.append("Pool: ");
+            builder.append(JDBCUtils.getHexId(dataSource));
+            builder.append(" Actives: ");
+            builder.append(dataSource.getNumActive());
+            builder.append("/");
+            builder.append(dataSource.getMaxActive());
+            builder.append(" idle: ");
+            builder.append(dataSource.getNumIdle());
+            builder.append("/");
+            builder.append(dataSource.getMinIdle());
+            builder.append(":");
+            builder.append(dataSource.getMaxIdle());
+            return builder.toString();
+        }
+
+        
+        public static void stopServer() {
+          try {
+//            server.shutdown();
+          } catch(Throwable th) {
+            
+          }
+          try {
+//            server.stop();
+          } catch(Throwable th) {
+            
+          }
+//          server = null;
+          startServer = true;
+          LOGGER.info("MDB Server stopped" );
+        }
+        
+        private void startServer() {
+        
+            if( startServer && server == null ) {
+                String port = "9123";
+//                Server theServer;
+                String s = System.getProperty("MDBPort");
+                if( s!=null ) {
+                    try {
+                        int n = Integer.parseInt(s);
+                        port = String.valueOf(n);
+                    } catch(Throwable th) {
+                        // Ignore port number, use default.
+                    }
+                }
+                if( System.getProperty("MDBAllowOthers")!=null ) {
+//                    theServer = Server.createTcpServer("-tcpPort", port, "-tcpAllowOthers", "-ifExists");
+                } else {
+//                    theServer = Server.createTcpServer("-tcpPort", port, "-ifExists");
+                }
+//                theServer.start();
+//                server = theServer;
+                LOGGER.info("MDB Server started" );
+//                LOGGER.info("  port  :"+ server.getPort());
+//                LOGGER.info("  URL  :"+ server.getURL());
+//                LOGGER.info("  status:"+ server.getStatus());
+                // Tanto si consigue lanzar el server como si no, no lo vuelve a intentar
+                startServer = false;
+            }
+
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append(" url=").append(connectionParameters.getUrl());
+            builder.append(" driver name=").append(connectionParameters.getJDBCDriverClassName());
+            builder.append(" user=").append(connectionParameters.getUser());
+            return builder.toString();
+        }
+        
+        public Connection getConnection() throws SQLException {
+            File f = this.connectionParameters.getFile();
+            boolean newdb = f!=null && !f.exists();
+            
+            if (this.dataSource == null) {
+                this.dataSource = this.createDataSource();               
+            }
+            Connection conn = this.dataSource.getConnection();
+////            try {
+//////                conn.createStatement().execute("SELECT TOP 1 SRID FROM SPATIAL_REF_SYS");
+////            } catch(SQLException ex) {
+//////                H2GISExtension.load(conn);
+////            }
+//            try {
+////                conn.createStatement().execute("CREATE SCHEMA IF NOT EXISTS PUBLIC;SET SCHEMA PUBLIC");
+//            } catch(SQLException ex) {
+//                // Ignore this error.
+//            }
+            if (newdb) {
+                //crea tablas
+                //
+            }
+            return conn;
+        }
+
+        private BasicDataSource createDataSource() throws SQLException {
+            if (!this.isRegistered()) {
+                this.registerDriver();
+            }
+            startServer();
+            MDBConnectionParameters params = connectionParameters;
+
+            BasicDataSource ds = new BasicDataSource();
+            ds.setDriverClassName(params.getJDBCDriverClassName());
+            if( !StringUtils.isEmpty(params.getUser()) ) {
+                ds.setUsername(params.getUser());
+            }
+            if( !StringUtils.isEmpty(params.getPassword()) ) {
+                ds.setPassword(params.getPassword());
+            }
+            ds.setUrl(params.getUrl());
+
+            ds.setMaxWait(60L * 1000);
+            return ds;
+        }
+
+        private boolean isRegistered() {
+            return needRegisterDriver;
+        }
+
+        public void registerDriver() throws SQLException {
+            String className = this.connectionParameters.getJDBCDriverClassName();
+            if (className == null) {
+                return;
+            }
+            try {
+                Class theClass = Class.forName(className);
+                if (theClass == null) {
+                    throw new JDBCDriverClassNotFoundException(MDBLibrary.NAME, className);
+                }
+            } catch (Exception e) {
+                throw new SQLException("Can't register JDBC driver '" + className + "'.", e);
+            }
+            needRegisterDriver = false;
+        }
+
+        @Override
+        public void dispose() {
+            if( this.dataSource!=null ) {
+                try {
+                    this.dataSource.close();
+                } catch (SQLException ex) {
+                    LOGGER.warn("Can't close BasicDataSource", ex);
+                }
+                this.dataSource = null;
+            }
+            this.connectionParameters = null;
+        }
+
+    }
+
+    private ConnectionProvider connectionProvider = null;
+    
+        /**
+     * Constructor for use only for testing purposes.
+     * 
+     * @param connectionParameters
+     * @param connectionProvider
+     */
+    public MDBHelper(JDBCConnectionParameters connectionParameters, ConnectionProvider connectionProvider) { 
+        super(connectionParameters);
+        this.srssolver = new SRSSolverDumb(this);
+        this.connectionProvider = connectionProvider;
+    }
+ 
+    public MDBHelper(JDBCConnectionParameters connectionParameters) {
+        super(connectionParameters);
+        this.srssolver = new SRSSolverDumb(this);
+    }
+
+    @Override
+    public synchronized Connection  getConnection() throws AccessResourceException {
+        try {
+            if (this.connectionProvider == null) {
+              MDBConnectionParameters connectionParameters = this.getConnectionParameters();
+              if( connectionParameters==null ) {
+                return null; // Testing mode?
+              }
+              this.connectionProvider = new ConnectionProviderImpl(connectionParameters);
+            }
+            Connection connection = this.connectionProvider.getConnection();
+            if( LOGGER.isDebugEnabled() ) {
+                LOGGER.debug("getConnection: connection = "+connection.hashCode()+ connectionProvider.toString());
+            }
+            return connection;
+        } catch (SQLException ex) {
+            throw new AccessResourceException(MDBLibrary.NAME, ex);
+        }
+    }
+
+    @Override
+    public void closeConnection(Connection connection) {
+      if( connection!=null ) { // In test ???
+        LOGGER.debug("closeConnection: connection = "+connection.hashCode());
+      }
+      super.closeConnection(connection);
+    }
+    
+    @Override
+    public MDBConnectionParameters getConnectionParameters() {
+        return (MDBConnectionParameters) super.getConnectionParameters();
+    }
+    
+    @Override
+    public String getConnectionURL() {
+        return getConnectionURL(this.getConnectionParameters());
+    }
+
+    @Override
+    protected String getResourceType() {
+        return MDBLibrary.NAME;
+    }
+
+    @Override
+    public String getProviderName() {
+        return MDBLibrary.NAME;
+    }
+
+    @Override
+    public JDBCSQLBuilderBase createSQLBuilder() {
+        return new MDBSQLBuilder(this);
+    }
+    
+    @Override
+    public OperationsFactory getOperations() {
+        if (this.operationsFactory == null) {
+            this.operationsFactory = new MDBOperationsFactory(this);
+        }
+        return operationsFactory;
+    }
+
+    @Override
+    public GeometrySupportType getGeometrySupportType() {
+        return GeometrySupportType.WKB;
+    }
+
+    @Override
+    public boolean hasSpatialFunctions() {
+        return false;
+    }
+
+    @Override
+    public boolean canWriteGeometry(int geometryType, int geometrySubtype) {
+        return true;
+    }
+
+    @Override
+    public String getQuoteForIdentifiers() {
+        return "\"";
+    }
+
+    @Override
+    public boolean allowAutomaticValues() {
+        return true;
+    }
+
+    @Override
+    public boolean supportOffsetInSelect() {
+        return true;
+    }
+
+    @Override
+    public String getQuoteForStrings() {
+        return "'";
+    }
+
+    @Override
+    public String getSourceId(JDBCStoreParameters parameters) {
+        return parameters.getDBName() + "." + 
+               parameters.getSchema()+ "." + 
+               parameters.getTable();
+    }
+
+    @Override
+    public JDBCNewStoreParameters createNewStoreParameters() {
+        return new MDBNewStoreParameters();
+    }
+
+    @Override
+    public JDBCStoreParameters createOpenStoreParameters() {
+        return new MDBStoreParameters();
+    }
+
+    @Override
+    public JDBCServerExplorerParameters createServerExplorerParameters() {
+        return new MDBExplorerParameters();
+    }
+
+    @Override
+    public JDBCServerExplorer createServerExplorer(
+            JDBCServerExplorerParameters parameters, 
+            DataServerExplorerProviderServices providerServices
+        ) throws InitializeException {
+        
+        JDBCServerExplorer explorer = new JDBCServerExplorerBase(
+                parameters, 
+                providerServices, 
+                this
+        );
+        this.initialize(explorer, parameters, null);
+        return explorer;
+    }
+    
+    @Override
+  public Geometry getGeometryFromColumn(ResultSet rs, int index) throws DataException {
+    try {
+      Object value;
+      Clob clob;
+      String strGeom;
+      switch (this.getGeometrySupportType()) {
+        case NATIVE:
+        case WKB:
+            clob = rs.getClob(index);
+            if (clob ==null) {
+                return null;
+            }
+            strGeom = new String(IOUtils.toCharArray(clob.getCharacterStream()));
+            clob.free();
+            return this.getGeometryManager().createFrom(strGeom);
+        case EWKB:
+            clob = rs.getClob(index);
+            if (clob ==null) {
+                return null;
+            }
+            strGeom = new String(IOUtils.toCharArray(clob.getCharacterStream()));
+            clob.free();
+            return this.getGeometryManager().createFrom(strGeom);
+        case WKT:
+        default:
+          value = rs.getString(index);
+          if (value == null) {
+            return null;
+          }
+          return this.getGeometryManager().createFrom((String) value);
+
+      }
+    } catch (Exception ex) {
+      throw new JDBCCantFetchValueException(ex);
+    }
+  }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreProviderFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreProviderFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreProviderFactory.java	(revision 46118)
@@ -0,0 +1,103 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Function;
+import org.gvsig.fmap.dal.DataParameters;
+import static org.gvsig.fmap.dal.DataStoreProviderFactory.NO;
+import static org.gvsig.fmap.dal.DataStoreProviderFactory.UNKNOWN;
+import static org.gvsig.fmap.dal.DataStoreProviderFactory.YES;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
+import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCStoreProviderFactory;
+
+public class MDBStoreProviderFactory extends JDBCStoreProviderFactory {
+
+  private static final String NAME = MDBLibrary.NAME;
+  private static final Set<String> ALLOWED_FUNCTIONS = new HashSet<>(
+           Arrays.asList(new String[] {
+             "COUNT",
+             "SUM",
+             "MIN",
+             "MAX"
+           }
+       )
+    );
+  private static final Set<String> DENIED_FUNCTIONS =  Collections.EMPTY_SET;
+  
+  public MDBStoreProviderFactory() {
+    super(
+            NAME,
+            "MDBSpatial store"
+    );
+  }
+
+  @Override
+  public JDBCStoreProvider createProvider(
+          DataParameters parameters,
+          DataStoreProviderServices providerServices
+  ) throws InitializeException {
+    JDBCHelper helper = new MDBHelper((JDBCConnectionParameters) parameters);
+    JDBCStoreProvider provider = helper.createProvider(
+            (JDBCStoreParameters) parameters,
+            providerServices
+    );
+    return provider;
+  }
+
+  @Override
+  public JDBCStoreParameters createParameters() {
+    JDBCStoreParameters params = new MDBStoreParameters();
+    return params;
+  }
+
+  @Override
+  public int hasVectorialSupport() {
+    return NO;
+  }
+
+  @Override
+  public int hasRasterSupport() {
+    return NO;
+  }
+
+  @Override
+  public int hasTabularSupport() {
+    return YES;
+  }
+
+  @Override
+  public int hasSQLSupport() {
+    return YES;
+  }
+
+  @Override
+  public Function<String,Integer> allowFunction() {
+    return (Function<String,Integer>) (String name) -> {
+      if (ALLOWED_FUNCTIONS.contains(name)) {
+        return YES;
+      }
+      if (DENIED_FUNCTIONS.contains(name)) {
+        return NO;
+      }
+      return UNKNOWN;
+    };
+  }
+
+  @Override
+  public int allowGroupBy() {
+    return YES;
+  }
+  
+  @Override
+  public boolean allowSpatialIndexSupport() {
+     return false;
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBExplorer.java	(revision 46118)
@@ -0,0 +1,51 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.fmap.dal.spi.ZipResourcesStorage;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCServerExplorerBase;
+import org.gvsig.tools.resourcesstorage.EmptyResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+//import sun.swing.StringUIClientPropertyKey;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class MDBExplorer extends JDBCServerExplorerBase {
+        
+    public MDBExplorer(JDBCServerExplorerParameters parameters, DataServerExplorerProviderServices services, JDBCHelper helper) throws InitializeException {
+        super(parameters, services, helper);
+    }
+
+    @Override
+    public MDBExplorerParameters getParameters() {
+        return (MDBExplorerParameters) super.getParameters(); 
+    }
+
+    @Override
+    public ResourcesStorage getResourcesStorage(DataStore dataStore) {
+        ResourcesStorage ress = super.getResourcesStorage(dataStore);
+        if( ress instanceof EmptyResourcesStorage ) {
+            String zipPath = this.getParameters().getFile().getAbsolutePath();
+            String zipPathName = FilenameUtils.removeExtension(zipPath);
+            ress = new ZipResourcesStorage(zipPathName, dataStore.getName());
+        }
+        return ress;
+    }
+    
+    @Override
+    public Object execute(String sql) {
+      if( StringUtils.equalsIgnoreCase(sql, "!SHUTDOWN") ) {
+        MDBHelper.ConnectionProviderImpl.stopServer();
+        return null;
+      }
+      return super.execute(sql);
+    }    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBStoreParameters.java	(revision 46118)
@@ -0,0 +1,73 @@
+/* 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.mdb;
+
+import java.io.File;
+import java.util.Properties;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+
+public class MDBStoreParameters extends JDBCStoreParameters implements MDBConnectionParameters {
+
+    private final MDBConnectionParametersHelper helper;
+
+    public MDBStoreParameters() {
+        super(
+                MDBLibrary.NAME + "StoreParameters",
+                MDBLibrary.NAME
+        );
+        this.helper = new MDBConnectionParametersHelper(this);
+    }
+
+    @Override
+    public String getUrl() {
+        return this.helper.getUrl();
+    }
+
+    @Override
+    public void validate() throws ValidateDataParametersException {
+        this.helper.validate();
+        super.validate();
+    }
+
+    @Override
+    public Properties getProperties() {
+        return this.helper.getProperties();
+    }
+
+    @Override
+    public File getFile() {
+        return this.helper.getFile();
+    }
+
+    @Override
+    public void setFile(File database) {
+        try {
+            this.helper.setFile(database);
+            String url = MDBHelper.getConnectionURL((MDBConnectionParameters) this);
+            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME, url);
+        } catch (Exception ex) {
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/CoercionGeometryToString.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/CoercionGeometryToString.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/CoercionGeometryToString.java	(revision 46118)
@@ -0,0 +1,43 @@
+package org.gvsig.fmap.dal.store.mdb.operations;
+
+import org.apache.commons.codec.binary.Hex;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.operation.GeometryOperationException;
+import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+
+/**
+ *
+ * @author omartinez
+ */
+public class CoercionGeometryToString extends AbstractCoercion {
+
+//    private final FieldFormatter formater;
+    
+     public CoercionGeometryToString() {
+//        this.formater = new FieldFormatter();
+    }
+
+    @Override
+    public Object coerce(Object value, CoercionContext context) throws CoercionException {
+        if( value instanceof Geometry ) {
+            Geometry geom = (Geometry) value;
+            byte[] wkb;
+            try {
+                wkb = geom.convertToWKB();
+            } catch (GeometryOperationException ex) {
+                throw new CoercionException("Not able to convert geometry to WKB format");
+            } catch (GeometryOperationNotSupportedException ex) {
+                throw new CoercionException("Not able to convert geometry to WKB format");
+            }
+            String hexString = Hex.encodeHexString(wkb);
+            return hexString;
+        }
+        
+        return null;
+    }
+
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBListTablesOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBListTablesOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBListTablesOperation.java	(revision 46118)
@@ -0,0 +1,58 @@
+package org.gvsig.fmap.dal.store.mdb.operations;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_TABLES_AND_VIEWS;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_VIEWS;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ListTablesOperation;
+
+public class MDBListTablesOperation extends ListTablesOperation {
+
+    public MDBListTablesOperation(JDBCHelper helper, int mode, JDBCServerExplorerParameters serverParameters, boolean informationTables, int tablesOrViews) {
+        super(helper, mode, serverParameters, informationTables, tablesOrViews);
+    }
+
+    
+    @Override
+    public List<JDBCStoreParameters> listTables(
+            Connection conn,
+            int mode,
+            JDBCServerExplorerParameters serverParameters,
+            boolean informationTables,
+            int tablesOrViews
+    ) {
+        if(tablesOrViews == SHOW_VIEWS){
+            return Collections.EMPTY_LIST;
+        }
+        ResultSet rs = null;
+        List<JDBCStoreParameters> tables = new ArrayList<>();
+
+        try {
+            String sql = "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES";
+            rs = conn.createStatement().executeQuery(sql);
+            while (rs.next()) {
+                JDBCStoreParameters params = this.helper.createOpenStoreParameters(serverParameters);
+                params.setCatalog(rs.getString("TABLE_CATALOG"));
+                params.setSchema(rs.getString("TABLE_SCHEMA"));
+                params.setTable(rs.getString("TABLE_NAME"));
+                tables.add(params);
+            }
+            return tables;
+            
+        } catch (SQLException ex) {
+            throw new RuntimeException("Can't fetch tables information",ex);
+            
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+        }
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBAppendOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBAppendOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBAppendOperation.java	(revision 46118)
@@ -0,0 +1,52 @@
+
+package org.gvsig.fmap.dal.store.mdb.operations;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+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.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.AlreadyEditingException;
+import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
+import org.gvsig.fmap.dal.store.jdbc.exception.JDBCPreparingSQLException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.AppendOperation;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class MDBAppendOperation extends AppendOperation {
+
+    public MDBAppendOperation(
+            JDBCHelper helper, 
+            TableReference table, 
+            FeatureType type
+        ) {
+        super(helper, table, type);
+    }
+    
+    @Override
+    public List<String> getPreviousSQLs() {
+      List<String> sqls = new ArrayList<>();
+//      sqls.add("SET LOG 1");
+//      sqls.add("SET LOCK_MODE 1");
+//      sqls.add("SET UNDO_LOG 0");
+      return sqls;
+    }
+    
+    @Override
+    public List<String> getPostSQLs() {
+      List<String> sqls = new ArrayList<>();
+//      sqls.add("SET LOG 2");
+//      sqls.add("SET LOCK_MODE 3");
+//      sqls.add("SET UNDO_LOG 1");
+      return sqls;
+    }
+       
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBFetchFeatureTypeOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBFetchFeatureTypeOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBFetchFeatureTypeOperation.java	(revision 46118)
@@ -0,0 +1,396 @@
+
+package org.gvsig.fmap.dal.store.mdb.operations;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import org.cresques.cts.IProjection;
+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.resource.exception.AccessResourceException;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
+import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
+import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
+import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolver;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+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.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataType;
+
+@SuppressWarnings("UseSpecificCatch")
+public class MDBFetchFeatureTypeOperation extends FetchFeatureTypeOperation {
+
+    private static Map<String,GeometryType>mdbGeometryTypes = null;
+    private Map<String,GeometryColumnInfo> geometry_column;
+    
+    private static class GeometryColumnInfo {
+        
+        public String columnName;
+        public int geometryType;
+        public String geometryTypeName;
+        public int dimensions;
+        public int srid;
+        
+        public GeometryColumnInfo(String columnName, int geometryType, String geometryTypeName, int dimensions, int srid) {
+            this.columnName = columnName;
+            this.geometryType = geometryType;
+            this.geometryTypeName = geometryTypeName;
+            this.dimensions = dimensions;
+            this.srid = srid;
+        }
+    }
+    
+    
+    public MDBFetchFeatureTypeOperation(
+            JDBCHelper helper
+        ) {
+        super(helper);
+    }
+
+    private GeometryType getGT(
+            GeometryManager manager, 
+            int type, 
+            int subtype
+        ) {
+        try {
+            return manager.getGeometryType(type, subtype);
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+    
+    public MDBFetchFeatureTypeOperation(
+            JDBCHelper helper,
+            EditableFeatureType featureType,
+            TableReference table,
+            List<String> primaryKeys,
+            String defaultGeometryColumn,
+            IProjection crs, 
+            int geometryType, 
+            int geometrySubtype
+            
+        ) {
+        super(helper, featureType, table, primaryKeys, defaultGeometryColumn, crs, geometryType, geometrySubtype);
+    }            
+
+    
+    
+    
+    private GeometryColumnInfo getGeometryColumnInfo(String name) {
+        if( geometry_column==null ) {
+            geometry_column = new HashMap<>();
+            try {
+                //
+                // https://github.com/orbisgis/h2gis/wiki/1.-Spatial-data#geometry-columns-view
+                //
+                StringBuilder where = null;
+                if( table.hasDatabase() ) {
+                    if( where == null ) {
+                        where = new StringBuilder();
+                    } else {
+                        where.append(" AND ");
+                    }
+                    where.append("UPPER(F_TABLE_CATALOG) = '");
+                    where.append(table.getDatabase().toUpperCase());
+                    where.append("'");
+                }
+                if( table.hasSchema()) {
+                    if( where == null ) {
+                        where = new StringBuilder();
+                    } else {
+                        where.append(" AND ");
+                    }
+                    where.append("UPPER(F_TABLE_SCHEMA) = '");
+                    where.append(table.getSchema().toUpperCase());
+                    where.append("'");
+                }
+                if( table.hasTable()) {
+                    if( where == null ) {
+                        where = new StringBuilder();
+                    } else {
+                        where.append(" AND ");
+                    }
+                    where.append("UPPER(F_TABLE_NAME) = '");
+                    where.append(table.getTable().toUpperCase());
+                    where.append("'");
+                }            
+                String sql = "SELECT F_GEOMETRY_COLUMN, GEOMETRY_TYPE, COORD_DIMENSION, SRID, TYPE FROM GEOMETRY_COLUMNS WHERE " + where;
+                Statement st = this.getConnection().createStatement();
+                ResultSet rs = JDBCUtils.executeQuery(st,sql);
+                while( rs.next() ) {
+                    geometry_column.put(
+                        rs.getString("F_GEOMETRY_COLUMN"), 
+                        new GeometryColumnInfo(
+                            rs.getString("F_GEOMETRY_COLUMN"), 
+                            rs.getInt("GEOMETRY_TYPE"), 
+                            rs.getString("TYPE"), 
+                            rs.getInt("COORD_DIMENSION"), 
+                            rs.getInt("SRID")
+                        )
+                    );
+                }
+            } catch (SQLException | AccessResourceException ex) {
+                LOGGER.warn("Can't read metadata from table '"+table+"'.",ex);
+            }
+        }
+        return this.geometry_column.get(name);
+    }
+    
+    @Override
+    public void fetch(Connection conn) throws DataException {
+        super.fetch(conn);
+    }
+        
+    @Override
+    protected void fetchGeometryTypeAndSRS(
+            EditableFeatureAttributeDescriptor attr,
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) {
+        try {
+            if( attr.getType()==DataTypes.GEOMETRY ) {
+                GeometryColumnInfo column_info = this.getGeometryColumnInfo(attr.getName());
+                String type = "GEOMETRY";
+                if( column_info!=null ) {
+                    // H2GIS solo soporte 2D y 3D no soporta Ms
+                    if( column_info.dimensions==3 ) {
+                        type = column_info.geometryTypeName+"Z";
+                    } else {
+                        type = column_info.geometryTypeName;
+                    }
+                    SRSSolver solver = this.helper.getSRSSolver();
+                    attr.setSRS(
+                        solver.getProjection(getConnection(), column_info.srid)
+                    );
+                }
+                GeometryType gt = getGeometryTypeFromMDBType(type);
+                if( gt != null ) {
+                    attr.setGeometryType(gt);
+                }
+            }
+        } catch(Exception ex) {
+            throw new RuntimeException("Can't fetch geometry type and SRS.", ex);
+        }
+    }
+
+    private GeometryType getGeometryTypeFromMDBType(String typeName) {
+        if( mdbGeometryTypes==null ) {
+            //
+            // https://github.com/orbisgis/h2gis/wiki/1.-Spatial-data#geometry-columns-view
+            //
+            GeometryManager manager = GeometryLocator.getGeometryManager();
+            mdbGeometryTypes = new HashMap<>();
+            mdbGeometryTypes.put("POINT", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("POINTZ", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM3D));
+            
+            mdbGeometryTypes.put("LINESTRING", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("LINESTRINGZ", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM3D));
+            
+            mdbGeometryTypes.put("POLYGON", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("POLYGONZ", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM3D));
+
+            mdbGeometryTypes.put("MULTIPOINT", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("MULTIPOINTZ", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM3D));
+
+            mdbGeometryTypes.put("MULTILINESTRING", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("MULTILINESTRINGZ", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM3D));
+
+            mdbGeometryTypes.put("MULTIPOLYGON", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("MULTIPOLYGONZ", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM3D));
+
+            mdbGeometryTypes.put("GEOMETRY", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("GEOMETRYZ", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM3D));
+
+            mdbGeometryTypes.put("GEOMCOLLECTION", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM2D));
+            mdbGeometryTypes.put("GEOMCOLLECTIONZ", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM3D));
+        }
+        return mdbGeometryTypes.get(typeName);
+    }
+    
+    @Override
+    protected List<String> getPrimaryKeysFromInformationSchema(Connection conn) throws SQLException {
+
+//        String sql = getSQLToRetrievePrimaryKeysFromInformationSchema(conn.getMetaData());
+        DatabaseMetaData metadata = conn.getMetaData();
+       
+        String tableName = table.getTable();
+        
+        ResultSet rs = metadata.getPrimaryKeys(null, null, tableName);
+        List<String> pks = new ArrayList();
+        
+        try {
+            while (rs.next()) {
+                pks.add(rs.getString(1));
+            }
+            if (pks.isEmpty()) {
+                return null;
+            }
+            return pks;
+
+        } catch (Exception ex) {
+            return pks;
+            
+        } finally {
+            JDBCUtils.closeQuietly(rs);
+        }
+    }
+
+    @Override
+    public String getSQLToRetrievePrimaryKeysFromInformationSchema() throws SQLException {
+        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
+//        ExpressionBuilder expbuilder = sqlbuilder.expression();
+//
+//        sqlbuilder.select().column().name("COLUMN_LIST");
+//        sqlbuilder.select().column().name("CONSTRAINT_TYPE");
+//        sqlbuilder.select().from().table().schema("INFORMATION_SCHEMA").name("CONSTRAINTS");
+//        sqlbuilder.select().where().set(
+//                expbuilder.like(
+//                        expbuilder.column("TABLE_NAME"), 
+//                        expbuilder.constant(table.getTable())
+//                )
+//        );
+//        if( table.hasSchema() ) {
+//            sqlbuilder.select().where().and(
+//                    expbuilder.like(
+//                            expbuilder.column("TABLE_SCHEMA"),
+//                            expbuilder.constant(table.getSchema())
+//                    )
+//            );
+//        }
+////        if (catalog != null) {
+////            sqlbuilder.select().where().and(
+////                    expbuilder.like(
+////                            expbuilder.column("CONSTRAINT_CATALOG"),
+////                            expbuilder.constant(catalog)
+////                    )
+////            );
+////        }
+//        sqlbuilder.select().where().and(
+//                expbuilder.eq(
+//                        expbuilder.column("CONSTRAINT_TYPE"),
+//                        expbuilder.constant("PRIMARY KEY")
+//                )
+//        );
+        return sqlbuilder.toString();
+    }
+    
+    protected EditableFeatureAttributeDescriptor getAttributeFromMetadata(
+            EditableFeatureType type,
+            Connection conn,
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) throws SQLException {
+        int dataType = this.getDataTypeFromMetadata(rsMetadata, colIndex);
+        if (dataType == DataTypes.DECIMAL &&
+                rsMetadata.getPrecision(colIndex)==19 &&
+                rsMetadata.getScale(colIndex)== 0) {
+            dataType = DataTypes.LONG;
+        }
+
+        EditableFeatureAttributeDescriptor attr = type.add(
+                rsMetadata.getColumnName(colIndex),
+                dataType
+        );
+        attr.setAllowNull(
+            rsMetadata.isNullable(colIndex) == ResultSetMetaData.columnNullable
+        );
+        attr.setIsAutomatic(rsMetadata.isAutoIncrement(colIndex));
+        attr.setIsReadOnly(rsMetadata.isReadOnly(colIndex));
+        switch(attr.getType()) {
+            case DataTypes.BOOLEAN:
+              attr.setAllowNull(false);
+              break;
+            case DataTypes.STRING:
+              DataType myDataType = null;
+                try {
+                    myDataType = ToolsLocator.getDataTypesManager().get(DataTypes.STRING).clone();
+                } catch (CloneNotSupportedException ex) {
+                    throw new RuntimeException(ex);
+                }
+              myDataType.addCoercion(new CoercionGeometryToString());
+              attr.setDataType(myDataType);
+              attr.setSize(rsMetadata.getPrecision(colIndex));
+              attr.setPrecision(DataType.PRECISION_NONE);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+
+            case DataTypes.BYTE:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.BYTE_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.INT:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.INT_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.LONG:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.LONG_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.FLOAT:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.FLOAT_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.DOUBLE:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setPrecision(DataType.DOUBLE_DEFAULT_PRECISION);
+              attr.setScale(DataType.SCALE_NONE);
+              break;
+            case DataTypes.DECIMAL:
+              attr.setDisplaySize(rsMetadata.getColumnDisplaySize(colIndex));
+              attr.setScale(rsMetadata.getScale(colIndex));
+              attr.setPrecision(rsMetadata.getPrecision(colIndex));
+              break;
+            case DataTypes.OBJECT:
+                attr.setAdditionalInfo(
+                        "SQLType",
+                        Objects.toString(rsMetadata.getColumnType(colIndex),null)
+                );
+                attr.setAdditionalInfo(
+                        "SQLTypeName",
+                        rsMetadata.getColumnTypeName(colIndex)
+                );
+                break;
+            case DataTypes.GEOMETRY:
+                this.fetchGeometryTypeAndSRS(attr, rsMetadata, colIndex);
+                break;
+        }
+        return attr;
+    }
+    
+    @Override
+       protected int getDataTypeFromMetadata(
+            ResultSetMetaData rsMetadata,
+            int colIndex
+        ) throws SQLException {
+
+        switch (rsMetadata.getColumnType(colIndex)) {
+            case java.sql.Types.CLOB:
+                return DataTypes.STRING;
+            case java.sql.Types.NUMERIC:
+            case java.sql.Types.DECIMAL:
+                if (rsMetadata.getPrecision(colIndex)==19 && rsMetadata.getScale(colIndex)== 0) {
+                   return DataTypes.LONG;
+                }
+                return DataTypes.DECIMAL;
+        }
+        return super.getDataTypeFromMetadata(rsMetadata, colIndex);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBOperationsFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBOperationsFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/operations/MDBOperationsFactory.java	(revision 46118)
@@ -0,0 +1,53 @@
+
+package org.gvsig.fmap.dal.store.mdb.operations;
+
+import java.util.List;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.AppendOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ListTablesOperation;
+import org.gvsig.fmap.dal.store.jdbc2.spi.operations.OperationsFactoryBase;
+
+
+public class MDBOperationsFactory extends OperationsFactoryBase {
+    
+    public MDBOperationsFactory(JDBCHelper helper) {
+        super(helper);
+    }
+
+    @Override
+    public FetchFeatureTypeOperation createFetchFeatureType(EditableFeatureType type, TableReference table, List<String> primaryKeys, String defaultGeometryField, IProjection crs) {
+        return new MDBFetchFeatureTypeOperation(
+                helper, type, table, primaryKeys, 
+                defaultGeometryField, crs, -1, -1
+        );
+    }  
+
+    @Override
+    public FetchFeatureTypeOperation createFetchFeatureType(EditableFeatureType type, TableReference table, List<String> primaryKeys, String defaultGeometryField, IProjection crs, int geometryType, int geometrySubtype) {
+        return new MDBFetchFeatureTypeOperation(
+                helper, type, table, primaryKeys, 
+                defaultGeometryField, crs, geometryType, geometrySubtype
+        );
+    }  
+
+    
+
+    @Override
+    public ListTablesOperation createListTables(int mode, JDBCServerExplorerParameters baseParameters, boolean informationTables, int tablesOrViews) {
+        return new MDBListTablesOperation(helper, mode, baseParameters, informationTables, tablesOrViews);
+    }
+
+    @Override
+    public AppendOperation createAppend(TableReference table, FeatureType type) {
+        return new MDBAppendOperation(helper, table, type);
+    }
+    
+    
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParameters.java	(revision 46118)
@@ -0,0 +1,11 @@
+
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.util.Properties;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+
+public interface MDBConnectionParameters extends JDBCConnectionParameters, FilesystemStoreParameters {
+    
+    public Properties getProperties();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParametersHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParametersHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb/src/main/java/org/gvsig/fmap/dal/store/mdb/MDBConnectionParametersHelper.java	(revision 46118)
@@ -0,0 +1,101 @@
+package org.gvsig.fmap.dal.store.mdb;
+
+import java.io.File;
+import java.util.Properties;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.resource.db.DBParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
+
+public class MDBConnectionParametersHelper {
+
+    private final JDBCConnectionParameters parameters;
+
+    private static final String DATABASE_FILE = "database_file";
+
+    public MDBConnectionParametersHelper(JDBCConnectionParameters parameters) {
+        this.parameters = parameters;
+    }
+
+    public String getUrl() {
+        String url = (String) this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME);
+        if( StringUtils.isEmpty(url) ) {
+            url = MDBHelper.getConnectionURL((MDBConnectionParameters) this.parameters);
+            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME, url);
+        }
+        return url;
+    }
+
+    public void validate() throws ValidateDataParametersException {
+        if( this.getDynValue(JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME) == null ) {
+            this.setDynValue(JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME,
+                MDBHelper.MDB_JDBC_DRIVER
+            );
+        }
+        if( getFile() == null ) {
+            if( this.getDynValue(JDBCConnectionParameters.DBNAME_PARAMTER_NAME) == null ) {
+                throw new ValidateDataParametersException();
+            } else {
+                setFile(new File((String) this.getDynValue(JDBCConnectionParameters.DBNAME_PARAMTER_NAME)));
+            }
+        } else {
+            String dbName = (String) this.getDynValue(JDBCConnectionParameters.DBNAME_PARAMTER_NAME);
+            if( StringUtils.isEmpty(dbName) ) {
+                dbName = getDbNameFromFile(getFile());
+                this.setDynValue(
+                    JDBCConnectionParameters.DBNAME_PARAMTER_NAME,
+                    dbName.toUpperCase()
+                );
+            }
+        }        
+        if( this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME) == null ) {
+            String url = MDBHelper.getConnectionURL((MDBConnectionParameters) this.parameters);
+            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME, url);
+        }
+    }
+
+    private Object getDynValue(String name) {
+        return ((DataParameters) this.parameters).getDynValue(name);
+    }
+
+    private void setDynValue(String name, Object value) {
+        ((DataParameters) this.parameters).setDynValue(name, value);
+    }
+
+    public File getFile() {
+        File f = (File) this.getDynValue(DATABASE_FILE);
+        if( this.getDynValue(DBParameters.DBNAME_PARAMTER_NAME) == null
+            && f != null ) {
+            String dbname = getDbNameFromFile(f);
+            this.setDynValue(DBParameters.DBNAME_PARAMTER_NAME, dbname);
+        }
+        return f;
+    }
+
+    public void setFile(File database) {
+        this.setDynValue(DATABASE_FILE, database);
+        if( this.getDynValue(DBParameters.DBNAME_PARAMTER_NAME) == null
+            && database != null ) {
+            String dbname = getDbNameFromFile(database);
+            this.setDynValue(DBParameters.DBNAME_PARAMTER_NAME, dbname);
+        }
+    }
+
+    public Properties getProperties() {
+        Properties props = new Properties();
+        return props;
+    }
+    
+    private String getDbNameFromFile(File f) {
+        String fname = f.getName();
+        if( fname.toLowerCase().endsWith(".mv.db") ) {
+            fname = fname.substring(0, fname.length()-6);
+        } else {
+            fname = FilenameUtils.getBaseName(fname);
+        }
+        return fname;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.mdb
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db
___________________________________________________________________
Added: svn:ignore
   + .classpath
target/**
.project
.directory
.settings/**
.settings
target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml	(revision 46118)
@@ -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.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.344</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>
+    <module>org.gvsig.fmap.dal.tilecache</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal
___________________________________________________________________
Added: svn:ignore
   + target/**
.classpath
.project
target
.settings/**
nbactions.xml
.settings
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/SECompatLibraryTest.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/StandardStringUtilsTest.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/se/lang/SEMathUtilsTest.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/CompatLibraryTest.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/StringUtilsTestParent.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/java/org/gvsig/compat/lang/MathUtilsTestParent.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.compat.se.SECompatLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.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.HashMap;
+import java.util.Map;
+import org.apache.commons.io.FileUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.compat.se.net.downloader.Downloader;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.folders.FoldersManager;
+
+/**
+ * Clase con m�todos de utilidad en el protocolo WMS
+ *
+ */
+public class SEDownloader implements Downloader {
+
+//    private boolean canceled;
+    private final long latency = 500;
+    private static final 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 final Map<Object,Boolean> canceledGroup = new HashMap();
+    /**
+     * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
+     */
+    private Map<Object,String> cachedURItoFile;
+    private Exception downloadException;
+    
+    public SEDownloader() {
+        super();
+    }
+
+    /**
+     * 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 theurl
+     * @return File containing this URL's content or null if no file was found.
+     */
+    private File getPreviousDownloaded(Object theurl) {
+
+        File f = null;
+        Object thekey;
+        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
+     */
+    @Override
+    public void addDownloadedURL(URL url, String filePath) {
+        if (cachedURItoFile == null) {
+            cachedURItoFile = new HashMap();
+        }
+
+        URI theuri;
+        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 ConnectException
+     * @throws UnknownHostException
+     */
+    @Override
+    public synchronized File downloadFile(URL url, String name, ICancellable cancel) throws IOException, ConnectException, UnknownHostException {
+        File f;
+
+        if ((f = getPreviousDownloadedURL(url)) == null) {
+            f = getUniqueTemporaryFile(name);
+
+            if (cancel == null) {
+                cancel = new ICancellable() {
+                    @Override
+                    public boolean isCanceled() {
+                        return false;
+                    }
+
+                    @Override
+                    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;
+    }
+
+    /**
+     * 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
+     */
+    @Override
+    public synchronized File downloadFile(URL url, String data, String name, ICancellable cancel) throws IOException, ConnectException, UnknownHostException {
+        return downloadFile(url, data, name, cancel, -1);
+    }
+        
+    @Override
+    public synchronized File downloadFile(URL url, String data, String name, ICancellable cancel,int maxbytes) throws IOException, ConnectException, UnknownHostException {
+        File f;
+
+        if ((f = getPreviousDownloadedURL(url, data)) == null) {
+            f = getUniqueTemporaryFile(name);
+
+            if (cancel == null) {
+                cancel = new ICancellable() {
+                    @Override
+                    public boolean isCanceled() {
+                        return false;
+                    }
+
+                    @Override
+                    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
+     */
+    @Override
+    public boolean getCanceled(Object groupId) {
+        Boolean obj = canceledGroup.get(groupId);
+        if (obj != null) {
+            return obj;
+        }
+        return false;
+    }
+
+    /**
+     * Cancel a group of downloads
+     *
+     * @param groupId Group id
+     * @param isCanceled if the group has to be canceled
+     */
+    @Override
+    public void setCanceled(Object groupId, boolean isCanceled) {
+        if (groupId == null) {
+            groupId = SEDownloader.class.getName();
+        }
+        canceledGroup.put(groupId, isCanceled);
+    }
+
+    /**
+     * Remove an URL from the system cache. The file will remain in the file
+     * system for further eventual uses.
+     *
+     * @param url
+     */
+    @Override
+    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 url
+     */
+    @Override
+    public void removeURL(Object url) {
+        if (cachedURItoFile != null && cachedURItoFile.containsKey(url)) {
+            cachedURItoFile.remove(url);
+        }
+    }
+
+    @Override
+    public void setDownloadException(Exception exception) {
+        this.downloadException = exception;
+    }
+
+    @Override
+    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;
+                
+    }
+    
+    /**
+     * Cleans every temporal file previously downloaded.
+     */
+    @Override
+    public void cleanUpTempFiles() {
+        FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+        File folder = foldersManager.getTemporaryFile("downloader");
+        try {
+            FileUtils.cleanDirectory(folder);
+        } catch (IOException ex) {
+            LOG.warn("Can't clean folder '"+folder.getAbsolutePath()+"'.",ex);
+        }
+    }
+
+    private File getUniqueTemporaryFile(String name) {
+        FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+        File folder = foldersManager.getTemporaryFile("downloader");
+        if( !folder.exists() ) {
+            folder.mkdirs();
+        }
+        File f = foldersManager.getUniqueTemporaryFile("downloader",name);
+        return f;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/net/downloader/Downloader.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/print/SePrintAttributes.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/SECompatLibrary.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEMathUtils.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/StandardStringUtils.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/src/main/java/org/gvsig/compat/se/lang/SEGraphUtils.java	(revision 46118)
@@ -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.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.util.prefs.Preferences;
+
+import org.gvsig.compat.lang.GraphicsUtils;
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.compat.se.print.SePrintAttributes;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+
+/**
+ * JSE (Desktop Java) implementation of {@link GraphicsUtils}
+ *
+ * @see GraphicsUtils
+ *
+ */
+public class SEGraphUtils implements GraphicsUtils{
+
+    @Override
+    public BufferedImage copyBufferedImage(BufferedImage img) {
+        BufferedImage newImage =
+            ToolsSwingLocator.getToolsSwingManager()
+                .copyBufferedImage(img);
+        return newImage;
+    }
+
+    public BufferedImage createBufferedImage(int w, int h, int type) {
+        return ToolsSwingLocator.getToolsSwingManager().createBufferedImage(w, h, type);
+	}
+
+	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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.se/pom.xml	(revision 46118)
@@ -0,0 +1,37 @@
+<?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.344</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.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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/StringUtils.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/MathUtils.java	(revision 46118)
@@ -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.compat.lang;
+
+/**
+ * Math Utilities used for Java SE-ME compatibility.
+ * 
+ */
+public interface MathUtils {
+    
+    /**
+     * Compatible implementation of the Math.log10(double) method.
+     * @param   a a value
+     * @return  the base 10 logarithm of  {@code a}.
+     * @see Math#log10(double)
+     */
+    double log10(double a);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/lang/GraphicsUtils.java	(revision 46118)
@@ -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.compat.lang;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/Downloader.java	(revision 46118)
@@ -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
+     * @param cancel
+     * @return
+     * @throws IOException
+     * @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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/net/ICancellable.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLocator.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/CompatLibrary.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/java/org/gvsig/compat/print/PrintAttributes.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.compat.CompatLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat/org.gvsig.compat.api/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.compat
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.persistence;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.DummyFetureStore;
+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 DummyDBFeatureStore extends DummyFetureStore implements FeatureStore {
+
+    private String name = "[empty]";
+
+    public DummyDBFeatureStore() {
+
+    }
+
+    public DummyDBFeatureStore(String id) {
+        name = "[DATABASE FEATURE STORE - " + id + "]";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        name = state.getString("name");
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("name", name);
+    }
+
+    public static void registerPersistent() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.addDefinition(
+                DummyDBFeatureStore.class,
+                "DummyDBFeatureStore",
+                "DummyDBFeatureStore Persistence definition",
+                null,
+                null
+        );
+        definition.addDynFieldString("name");
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.persistence;
+
+import org.gvsig.fmap.dal.feature.FeatureStore;
+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.fmap.dal.feature.DummyFetureStore;
+
+public class DummyFileFeatureStore extends DummyFetureStore implements FeatureStore {
+
+    private String name = "[empty]";
+
+    public DummyFileFeatureStore() {
+
+    }
+
+    public DummyFileFeatureStore(String id) {
+        name = "[FILE FEATURE STORE - " + id + "]";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        name = state.getString("name");
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("name", name);
+    }
+
+    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);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/test/java/org/gvsig/fmap/mapcontext/ExtentHistoryTest.java	(revision 46118)
@@ -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.
+ */
+/*
+ * 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(rectangle2, history.getPrev());
+
+		history = new ExtentHistory(2);
+
+		history.put(rectangle);
+		history.put(rectangle2);
+		history.put(rectangle3);
+
+		assertEquals(rectangle2, 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);
+		assertFalse(history.hasPrevious());
+ 
+		Rectangle2D rectangle2 = new Rectangle2D.Double(2, 2, 3, 3);
+    history.put(rectangle2);
+		assertTrue(history.hasPrevious());
+
+		history.setPreviousExtent();
+		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);
+
+    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.getCurrent());
+
+		history.put(rectangle2);
+		assertEquals(rectangle2, history.getCurrent());
+		assertEquals(rectangle, 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipoint-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipoint-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-line.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-wrong.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-wrong.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-mix.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-mix.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-raster.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-raster.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multiline.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multiline.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipolygon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipolygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-line-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-line-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-polygon-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-polygon-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-point-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-point-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-mix-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-mix-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multiline-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multiline-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipolygon-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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/resources/layertypes/layer-type-multipolygon-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/spi/AbstractColoredOperation.java	(revision 46118)
@@ -0,0 +1,195 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.spi;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.buffer.spi.operations.AbstractOperation;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.operations.ColoredOperation;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractColoredOperation extends AbstractOperation implements ColoredOperation {
+
+    private ColorInterpretation colorInterpretation;
+    private ColorInterpretation outputColorInterpretation;
+
+
+    /**
+     *
+     * @param factory
+     */
+    public AbstractColoredOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    protected ColorInterpretation getInputColorInterpretation() {
+        return this.colorInterpretation;
+    }
+    
+    protected ColorInterpretation getOutputColorInterpretation() {
+        return this.outputColorInterpretation;
+    }
+    
+    protected void setOutputColorInterpretation(ColorInterpretation theColorInterpretation) {
+        this.outputColorInterpretation = theColorInterpretation;
+    }
+    
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        colorInterpretation = (ColorInterpretation) this.getParameters().getDynValue(COLOR_INTERPRETATION_PARAM);
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+    
+    protected boolean isProcessableBand(int band) {
+        // By default all bands are processables.
+        return true;
+    }
+    
+    /**
+     * This is a utility method that return a list of the ColorInterpretation for 
+     * the processable bands of the input buffer.
+     * 
+     * @return List of ColorInterpretation
+     */
+    protected List<String> getProcessableBandColorInterpretations() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<String> colorInterpretations = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                colorInterpretations.add(colorInterpretation.get(band));
+            }
+        }
+        if (colorInterpretation.hasAlphaBand()) {
+            colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+        }
+        return colorInterpretations;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the ColorInterpretation for 
+     * the processable band of the input buffer.
+     * 
+     * @return array of ColorInterpretation
+     */
+    protected String[] getProcessableBandColorInterpretationsAsArray() {
+        List<String> l = this.getProcessableBandColorInterpretations();
+        String[] colorInterpretations = getColorInterpretationsAsArray(l);
+        return colorInterpretations;
+    }
+
+    private String[] getColorInterpretationsAsArray(List<String> theColorInterpretations) {
+        String[] colorInterpretations = theColorInterpretations.toArray(new String[theColorInterpretations.size()]);
+        return colorInterpretations;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the NoData of 
+     * the processable band of the input buffer.
+     * 
+     * @return List of NoDatas
+     */
+    protected List<NoData> getProcessableBandNoDatas() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<NoData> noDatas = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                noDatas.add(this.getInputBuffer().getBandNoData()[band]);
+            }
+        }
+        return noDatas;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the NoData of 
+     * the processable band of the input buffer.
+     * 
+     * @return array of NoDatas
+     */
+    protected NoData[] getProcessableBandNoDatasAsArray() {
+        List<NoData> l = this.getProcessableBandNoDatas();
+        NoData[] noDatas = this.getNoDatasAsArray(l);
+        return noDatas;
+    }
+    
+    protected NoData[] getNoDatasAsArray(List<NoData> theNoDatas) {
+        NoData[] noDatas = theNoDatas.toArray(new NoData[theNoDatas.size()]);
+        return noDatas;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the types of 
+     * the processable band of the input buffer.
+     * 
+     * @return list of types
+     */
+    protected List<Integer> getProcessableBandTypes() {
+        int bands = this.getInputBuffer().getBandCount();
+        List<Integer> types = new ArrayList<>();
+        for (int band = 0; band < bands; band++) {
+            if (this.isProcessableBand(band)) {
+                types.add(this.getInputBuffer().getBandTypes()[band]);
+            }
+        }
+        return types;
+    }
+    
+    /**
+     * This is a utility method that return a copy of the types of 
+     * the processable band of the input buffer.
+     * 
+     * @return Array of types
+     */
+    protected int[] getProcessableBandTypesAsArray() {
+        int[] types = this.getTypesAsArray(this.getProcessableBandTypes());
+        return types;
+    }
+    
+    protected int[] getTypesAsArray(List<Integer> theTypes) {
+        int[] types = new int[theTypes.size()];
+        int n = 0;
+        for (Integer type : theTypes) {
+            types[n++] = type ;
+        }
+        return types;
+    }
+        
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegend.java	(revision 46118)
@@ -0,0 +1,105 @@
+package org.gvsig.raster.lib.legend.api;
+
+import java.awt.Graphics;
+import java.util.List;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterLegend extends Persistent, ILegend, Observer {
+
+    /**
+     * @param graphics
+     * @param buffer
+     * @param viewPort
+     * @param taskStatus
+     */
+    public void draw(Graphics graphics, Buffer buffer, ViewPort viewPort,
+        SimpleTaskStatus taskStatus);
+
+    /**
+     * @return ColorInterpretation
+     */
+    public ColorInterpretation getColorInterpretation();
+
+    /**
+     * @param colorInterpretation
+     */
+    public void setColorInterpretation(ColorInterpretation colorInterpretation);
+
+    /**
+     * @return FilterList
+     */
+    public OperationList getFilters();
+
+    /**
+     * @param filterList
+     */
+    public void setFilters(OperationList filterList);
+
+    /**
+     * @param transparency
+     */
+    public void setTransparency(Transparency transparency);
+
+    /**
+     * @return
+     */
+    public Transparency getTransparency();
+
+    /**
+     * @param transparentNoData
+     */
+    public void setTransparentNoData(boolean transparentNoData);
+
+    /**
+     * @return boolean
+     */
+    public boolean areTransparentNoData();
+
+    /**
+     * Adds a ColorTableOperation
+     *
+     * @param colorInterpretation
+     * @param index
+     */
+    public void addColorTableOperation(ColorInterpretation colorInterpretation, int index);
+
+    /**
+     * Adds a addNewLinearStretchEnhancementOperation if needed
+     *
+     * @param colorInterpretation
+     * @param bands
+     * @param index
+     */
+    public void addLinearStretchEnhancementOperationIfNeeded(ColorInterpretation colorInterpretation, List<BandDescriptor> bands, int index);
+
+    /**
+     * @param colorInterpretation
+     */
+    public void addHSLToRGBOperation(ColorInterpretation colorInterpretation);
+
+    /**
+     * @param colorInterpretation
+     */
+    public void addCMYKToRGBOperation(ColorInterpretation colorInterpretation);
+
+    /**
+     * @param colorInterpretation
+     */
+    public void addYCBCRToRGBOperation(ColorInterpretation colorInterpretation);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/exceptions/ColorTableIOException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/exceptions/ColorTableIOException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/exceptions/ColorTableIOException.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.raster.lib.legend.api.exceptions;
+
+import org.gvsig.tools.exception.BaseException;
+
+/**
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class ColorTableIOException extends BaseException {
+
+    private static final long serialVersionUID = -5115702295937095735L;
+
+    public static final String MESSAGE = "Error reading or writting color table";
+
+    public static final String KEY = "_ColorTableIOException";
+
+    public ColorTableIOException(Throwable ex) {
+        super(MESSAGE, ex, KEY, serialVersionUID);
+    }
+
+    public ColorTableIOException(String message, Throwable ex) {
+        super(message, ex, KEY, serialVersionUID);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLocator.java	(revision 46118)
@@ -0,0 +1,65 @@
+package org.gvsig.raster.lib.legend.api;
+
+import org.gvsig.tools.locator.AbstractLocator;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Raster legend locator to get Raster legend manager singleton instance
+ * 
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class RasterLegendLocator extends AbstractLocator {
+
+    public static final String LOCATOR_NAME = "RasterLegendLocator";
+
+    public static final String RASTER_LEGEND_MANAGER_NAME = "RasterLegendManager";
+
+    public static final String RASTER_LEGEND_MANAGER_DESCRIPTION =
+        "Raster legend manager of gvSIG raster";
+
+    /**
+     * Unique instance.
+     */
+    private static final RasterLegendLocator instance = new RasterLegendLocator();
+
+    /**
+     * Return the singleton instance.
+     *
+     * @return the singleton instance
+     */
+    public static RasterLegendLocator getInstance() {
+        return instance;
+    }
+
+    @Override
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to {@link RasterLegendManager}.
+     *
+     * @return a reference to RasterLegendManager
+     * @throws LocatorException
+     *             if there is no access to the class or the class cannot be
+     *             instantiated
+     * @see Locator#get(String)
+     */
+    public static RasterLegendManager getRasterLegendManager() throws LocatorException {
+        return (RasterLegendManager) getInstance().get(RASTER_LEGEND_MANAGER_NAME);
+    }
+
+    /**
+     * Registers the Class implementing the {@link RasterLegendManager}
+     * interface.
+     *
+     * @param clazz
+     *            implementing the RasterLegendManager interface
+     */
+    public static void registerRasterLegendManager(Class clazz) {
+        getInstance()
+            .register(RASTER_LEGEND_MANAGER_NAME, RASTER_LEGEND_MANAGER_DESCRIPTION, clazz);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/operations/ColoredOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/operations/ColoredOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/operations/ColoredOperation.java	(revision 46118)
@@ -0,0 +1,40 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.api.operations;
+
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColoredOperation extends Operation{
+
+    static public String COLOR_INTERPRETATION_PARAM = "color_interpretation";
+    static public String OUTPUT_COLOR_INTERPRETATION_PARAM = "output_color_interpretation";
+
+    public static String COLOR_TABLE_OPERATION_NAME="ColorTable";
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendLibrary.java	(revision 46118)
@@ -0,0 +1,34 @@
+package org.gvsig.raster.lib.legend.api;
+
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+
+/**
+ * Raster legend library
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+@Deprecated
+public class RasterLegendLibrary extends AbstractLibrary {
+
+    public void doRegistration() {
+        registerAsAPI(RasterLegendLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+        // Do nothing
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        // Validate there is any implementation registered.
+        if (!RasterLegendLocator.getInstance().exists(
+            RasterLegendLocator.RASTER_LEGEND_MANAGER_NAME)) {
+            throw new ReferenceNotRegisteredException(
+                RasterLegendLocator.RASTER_LEGEND_MANAGER_NAME, RasterLegendLocator.getInstance());
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/TransparencyRange.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/TransparencyRange.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/TransparencyRange.java	(revision 46118)
@@ -0,0 +1,93 @@
+package org.gvsig.raster.lib.legend.api;
+
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface TransparencyRange extends Persistent{
+
+    /**
+     * @return Gets alpha of this {@link TransparencyRange}. Default value is
+     *         255 (transparent)
+     */
+    public int getAlpha();
+
+    /**
+     * @return Gets blue range values
+     */
+    public int[] getBlue();
+
+    /**
+     * @return Gets green range values
+     */
+    public int[] getGreen();
+
+    /**
+     * @return Gets red range values
+     */
+    public int[] getRed();
+
+    /**
+     * @return Returns if {@link TransparencyRange} use and logic operation
+     */
+    public boolean isAnd();
+
+    /**
+     * Sets alpha value to this {@link TransparencyRange}
+     *
+     * @param alpha
+     *            Alpha value (0 to 255).
+     */
+    public void setAlpha(int alpha);
+
+    /**
+     * Sets boolean parameter to {@link TransparencyRange} to set if
+     * {@link TransparencyRange} use AND or OR logic operation.
+     *
+     * @param flag
+     *            Flag to set AND or OR operation logic
+     */
+    public void setAnd(boolean flag);
+
+    /**
+     * Sets blue range values to this {@link TransparencyRange}
+     *
+     * @param blue
+     *            Blue range values
+     */
+    public void setBlue(int[] blue);
+
+    /**
+     * Sets blue range values to this {@link TransparencyRange}
+     *
+     * @param green
+     */
+    public void setGreen(int[] green);
+
+    /**
+     * Sets blue range values to this {@link TransparencyRange}
+     *
+     * @param red
+     */
+    public void setRed(int[] red);
+
+    /**
+     * Sets blue range values to this {@link TransparencyRange}
+     *
+     * @param red
+     * @param green
+     * @param blue
+     */
+    public void setRGB(int[] red, int[] green, int[] blue);
+
+    /**
+     * Compare range of colors
+     *
+     * @param otherRange
+     * @return
+     */
+    public boolean isSameRange(TransparencyRange otherRange);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretation.java	(revision 46118)
@@ -0,0 +1,279 @@
+package org.gvsig.raster.lib.legend.api.colorinterpretation;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.lang.Cloneable;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColorInterpretation extends WeakReferencingObservable, Persistent, Cloneable, Observer {
+
+    // Color interpretation identifiers
+    public static final String RED_BAND = "Red";
+    public static final String GREEN_BAND = "Green";
+    public static final String BLUE_BAND = "Blue";
+    public static final String ALPHA_BAND = "Alpha";
+    public static final String GRAY_BAND = "Gray";
+
+    // public static final String RED_GREEN_BAND = "Red_Green"; // YELLOW_BAND?
+    // public static final String RED_BLUE_BAND = "Red_Blue"; // MAGENTA_BAND?
+    // public static final String GREEN_BLUE_BAND = "Green_Blue"; // CYAN_BAND?
+
+    public static final String HUE_BAND = "Hue";
+    public static final String SATURATION_BAND = "Saturation";
+    public static final String LIGHTNESS_BAND = "Lightness";
+
+    public static final String CYAN_BAND = "Cyan";
+    public static final String MAGENTA_BAND = "Magenta";
+    public static final String YELLOW_BAND = "Yellow";
+    public static final String BLACK_BAND = "Black";
+
+    public static final String YCBCR_Y_BAND = "YCbCr_Y";
+    public static final String YCBCR_CB_BAND = "YCbCr_Cb";
+    public static final String YCBCR_CR_BAND = "YCbCr_Cr";
+
+    public static final String PALETTE_BAND = "Palette";
+
+    public static final String UNDEFINED_BAND = "Undefined";
+
+    // Constants to initialize the color interpretation
+    public static final String RGB = "RGB";
+    public static final String BGR = "BGR";
+    public static final String ARGB = "ARGB";
+    public static final String GRAYSCALE = "GRAYSCALE";
+    public static final String PALETTE = "PALETTE";
+    public static final String HSL = "HSL";
+    public static final String CMYK = "CMYK";
+    public static final String YCBCR = "YCBCR";
+
+    /**
+     * Set color interpretation value to band
+     *
+     * @param band
+     *            Band
+     * @param value
+     *            Color interpretation value
+     */
+    public void setColorInterpValue(int band, String value);
+
+    /**
+     * @return Returns the number of assigned color interpretation values
+     */
+    public int length();
+
+    /**
+     * @return Returns true if the color values are
+     *         assigned to any band of the image or the values Gray or Palette
+     *         are
+     *         assigned.
+     */
+    public boolean hasInterpretation();
+
+    /**
+     * @return Returns true if the color interpretation is BGR, that is, the
+     *         three first bands of the image are Blue, Green and Red.
+     *
+     */
+    public boolean isBGR();
+
+    /**
+     * @return Returns true if the color interpretation is RGB, that is, the
+     *         three first bands of the image are Red, Green and Blue.
+     */
+    public boolean isRGB();
+
+    /**
+     * @return Returns true if the color interpretation is ARGB, that is, the
+     *         four first bands of the image are Red, Green, Blue and Alpha.
+     */
+    public boolean isRGBA();
+
+    /**
+     * @return Returns true if the color interpretation has at least one RED
+     *         band, one GREEN band and one BLUE band.
+     */
+    public boolean hasAnyRGBBand();
+
+    /**
+     * @return Returns true if the color interpretation is Gray
+     */
+    public boolean isGray();
+
+    /**
+     * @return Returns true if the color interpretation is HSL
+     */
+    public boolean isHSL();
+
+    /**
+     * @return Returns true if the color interpretation is CMYK
+     */
+    public boolean isCMYK();
+
+    /**
+     * @return Returns true if the color interpretation YCBCR
+     */
+    public boolean isYCBCR();
+
+    /**
+     * @param band
+     * @return Returns true if the selected band has color
+     *         interpretation
+     *         and false otherwise
+     */
+    public boolean isColorInterpretation(int band);
+
+    /**
+     * @param band
+     * @return Returns true if the selected band has gray interpretation and
+     *         false
+     *         otherwise
+     */
+    public boolean isGrayInterpretation(int band);
+
+    /**
+     * @param band
+     * @return Returns true if the selected band has palette interpretation and
+     *         false
+     *         otherwise
+     */
+    public boolean isPaletteInterpretation(int band);
+
+    /**
+     *
+     *
+     * @param band
+     * @return Returns true if the selected band has alpha interpretation and
+     *         false
+     *         otherwise
+     */
+    public boolean isAlphaInterpretation(int band);
+
+    /**
+     * Get color interpretation of band.
+     *
+     * @param i
+     *            Number of band
+     * @return Color interpretation defined of band
+     */
+    public String get(int i);
+
+    /**
+     * Gets the band position defined with color interpretation received as
+     * parameter.
+     *
+     * @param id
+     *            Color interpretation definition
+     * @return Index of band
+     */
+    public int getBand(String id);
+
+    /**
+     * Gets if color interpretation is defined
+     *
+     * @return True if color interpretation is defined, false if it is undefined
+     */
+    public boolean isUndefined();
+
+    /**
+     * Gets color interpretation of all bands
+     *
+     * @return Array with color interpretation
+     */
+    public String[] getValues();
+
+    /**
+     * @return Returns true if one band has the "Alpha" label
+     */
+    public boolean hasAlphaBand();
+
+    /**
+     * @return Returns the number of band with the label "Alpha"
+     */
+    public int getAlphaBand();
+
+    /**
+     * Adds a color interpretation to this color interpretation. The result is
+     * the addition of color interpretations.
+     *
+     * @param ci
+     */
+    public void addColorInterpretation(ColorInterpretation ci);
+
+    /**
+     * Copy from the color interpretation received as parameter
+     *
+     * @param colorInterpretation
+     */
+    public void copyFrom(ColorInterpretation colorInterpretation);
+
+    /**
+     * @return Returns true if the color interpretation has at least one Gray
+     *         band.
+     */
+    boolean hasAnyGrayBand();
+
+    /**
+     * @return Returns true if the color interpretation has at least one Palette
+     *         band.
+     */
+    public boolean hasAnyPaletteBand();
+
+    /**
+     * @return Returns true if the color interpretation has at least one HUE
+     *         band, one SATURATION band or one LIGHTNESS band.
+     */
+    public boolean hasAnyHSLBand();
+
+    /**
+     * @return Returns true if the color interpretation has at least one HUE
+     *         band, one SATURATION band or one LIGHTNESS band.
+     */
+    public boolean hasAnyCMYKBand();
+
+    /**
+     * @return Returns true if the color interpretation has at least one YCBCR-CB
+     *         band, one YCBCR-CR band or one YCBCR-Y band.
+     */
+    public boolean hasAnyYCBCRBand();
+
+    /**
+     * Sets the colorTable.
+     * @param colorTable
+     */
+    public void setPalette(ColorTable colorTable);
+
+    /**
+     * Sets the band which will apply the color table
+     * @param band
+     */
+    public void setPaletteBand(int band);
+
+    /**
+     * If there are not color table, return -1
+     *
+     * @return the band in which will apply  the color table
+     */
+    public int getPaletteBand();
+
+    /**
+     * @return the color table
+     */
+    public ColorTable getPalette();
+
+    /**
+     * @return true if paletteBand and colorTable are not null.
+     */
+    public boolean isPalette();
+
+    /**
+     * @return Returns true if the color interpretation has at least one Color band
+     * (not Gray, Palette nor Alpha)
+     *
+     */
+    public boolean hasAnyColorInterpretationBand();
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretationNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretationNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colorinterpretation/ColorInterpretationNotification.java	(revision 46118)
@@ -0,0 +1,19 @@
+package org.gvsig.raster.lib.legend.api.colorinterpretation;
+
+import org.gvsig.tools.observer.Notification;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColorInterpretationNotification extends Notification {
+
+    public final static String CHANGED_COLOR_INTERPRETATION_VALUE = "changed_color_interpretation_value_notification";
+    public final static String ADDED_COLOR_INTERPRETATION = "added_color_interpretation_notification";
+    public final static String COPIED_FROM_COLOR_INTERPRETATION = "copied_from_color_interpretation_notification";
+    public final static String SETTED_PALETTE = "setted_palette_notification";
+    public final static String SETTED_PALETTE_BAND = "changed_palette_band_notification";
+    public final static String CHANGED_PALETTE = "changed_palette_notification";
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/MakeColorTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/MakeColorTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/MakeColorTable.java	(revision 46118)
@@ -0,0 +1,66 @@
+package org.gvsig.raster.lib.legend.api.colortable;
+
+import java.awt.Color;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface MakeColorTable {
+
+    public static int MODE_INTERVAL_SIZE = 0;
+    public static int MODE_NUMBER_OF_INTERVALS = 1;
+
+    /**
+     * @param name
+     */
+    public void setName(String name);
+
+    /**
+     * @param minimum
+     */
+    public void setMinimum(double minimum);
+
+    /**
+     * @param maximum
+     */
+    public void setMaximum(double maximum);
+
+    /**
+     * @param mode
+     */
+    public void setMode(int mode);
+
+    /**
+     * @param intervalSize
+     */
+    public void setIntervalSize(double intervalSize);
+
+    /**
+     * @param intervals
+     */
+    public void setIntervals(int intervals);
+
+    /**
+     * @param fromColor
+     */
+    public void setFromColor(Color fromColor);
+
+    /**
+     * @param toColor
+     */
+    public void setToColor(Color toColor);
+
+    /**
+     * @param interpolated
+     */
+    public void setInterpolated(boolean interpolated);
+
+    /**
+     * @return
+     */
+    public ColorTable getColorTable();
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTable.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.raster.lib.legend.api.colortable;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.tools.lang.Cloneable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColorTable extends WeakReferencingObservable, Persistent, Cloneable, Observer {
+
+    /**
+     * Compress {@link ColorTable} to reduce number of {@link ColorTableClass}.
+     */
+    public void compressPalette();
+
+    /**
+     * Copies from {@link ColorTable} received as parameter
+     *
+     * @param colorTable
+     *            {@link ColorTable} to be copied
+     */
+    public void copyFrom(ColorTable colorTable);
+
+    /**
+     * @return {@link ColorTableClass} of this {@link ColorTable}
+     */
+    public List<ColorTableClass> getClasses();
+
+    /**
+     * @return Gets the name of this {@link ColorTable}
+     */
+    public String getName();
+
+    /**
+     * @return Return if {@link ColorTable} has alpha
+     */
+    public boolean hasAlpha();
+
+    /**
+     * @return Gets if this {@link ColorTable} is interpolated
+     */
+    public boolean isInterpolated();
+
+    /**
+     * Remove duplicated values of {@link ColorTableClass}
+     */
+    public void removeDuplicatedValues();
+
+    /**
+     * Sets {@link ColorTableClass} of this {@link ColorTable} and recalculates
+     * palette color of this {@link ColorTable}.
+     *
+     * @param colorTableClasses
+     *            New classes of this {@link ColorTable}
+     * @param compress
+     *            True to compress palette color.
+     */
+    public void setClasses(List<ColorTableClass> colorTableClasses, boolean compress);
+
+    /**
+     * Calculates and sets {@link ColorTableClass} of this {@link ColorTable}
+     * take into account min and max value. Palette color is recalculated with
+     * new color table classes.
+     *
+     * @param min
+     *            Minimum value of {@link ColorTableClass}
+     * @param max
+     *            Maximum value of {@link ColorTableClass}
+     * @param compress
+     *            True to compress {@link ColorTable}.
+     */
+    public void setClasses(double min, double max, boolean compress);
+
+    /**
+     * Sets interpolated to this {@link ColorTable}
+     *
+     * @param interpolated
+     */
+    public void setInterpolated(boolean interpolated);
+
+    /**
+     * Sets name of this {@link ColorTable}
+     *
+     * @param name
+     */
+    public void setName(String name);
+
+    /**
+     * Get RGBA values defined by {@link ColorTableClass}
+     *
+     * @param value
+     *            Value to get RGBA
+     * @return Byte array with RGBA values
+     */
+    byte[] getRGBA(Object value);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIOFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIOFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIOFactory.java	(revision 46118)
@@ -0,0 +1,40 @@
+package org.gvsig.raster.lib.legend.api.colortable;
+
+import java.io.File;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColorTableIOFactory {
+
+    /**
+     * @return the name
+     */
+    public String getName();
+
+    /**
+     * Return true if factory can create a {@link ColorTableIO} from file
+     *
+     * @param file
+     * @return True if factory accepts file, otherwise false.
+     */
+    public boolean accept(File file);
+
+    /**
+     * @return ColorTableProvider
+     */
+    public ColorTableIO create();
+
+    /**
+     * @return
+     */
+    public String getDefaultExtension();
+
+    /**
+     * @return
+     */
+    public String getDescription();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClass.java	(revision 46118)
@@ -0,0 +1,70 @@
+package org.gvsig.raster.lib.legend.api.colortable.colortableclass;
+
+import java.awt.Color;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * Class to represent each class of a {@link ColorTable}
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public interface ColorTableClass extends Persistent, Comparable<ColorTableClass>, WeakReferencingObservable {
+
+    /**
+     * @return Gets the color of {@link ColorTableClass}
+     */
+    public Color getColor();
+
+    /**
+     * Sets the color of {@link ColorTableClass}
+     *
+     * @param color
+     *            {@link Color} of class
+     */
+    public void setColor(Color color);
+
+    /**
+     * @return Gets the percent of interpolation with the next
+     *         {@link ColorTableClass}
+     */
+    public double getInterpolated();
+
+    /**
+     * Sets percent of interpolation with the next {@link ColorTableClass}.
+     *
+     * @param interpolated
+     *            Percent value.
+     */
+    public void setInterpolated(double interpolated);
+
+    /**
+     * @return Gets value of {@link ColorTableClass}
+     */
+    public double getValue();
+
+    /**
+     * Sets value of {@link ColorTableClass}
+     *
+     * @param value
+     *            Value of this class.
+     */
+    public void setValue(double value);
+
+    /**
+     * @return Gets name of class
+     */
+    public String getName();
+
+    /**
+     * Sets name of this class
+     *
+     * @param nameClass
+     *            Name of this class
+     */
+    public void setName(String nameClass);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClassNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClassNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/colortableclass/ColorTableClassNotification.java	(revision 46118)
@@ -0,0 +1,11 @@
+package org.gvsig.raster.lib.legend.api.colortable.colortableclass;
+
+
+public interface ColorTableClassNotification {
+
+    public final static String SETTED_COLOR = "setted_color_in_class_notification";
+    public final static String SETTED_INTERPOLATED = "setted_interpolated_in_class_notification";
+    public final static String SETTED_VALUE = "setted_value_in_class_notification";
+    public final static String SETTED_NAME = "setted_name_in_class_notification";
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableNotification.java	(revision 46118)
@@ -0,0 +1,15 @@
+package org.gvsig.raster.lib.legend.api.colortable;
+
+import org.gvsig.tools.observer.Notification;
+
+
+public interface ColorTableNotification extends Notification {
+
+    public final static String COMPRESSED_COLOR_TABLE = "compressed_color_table_notification";
+    public final static String COPIED_FROM_COLOR_TABLE = "copied_from_color_table_notification";
+    public final static String REMOVED_DUPLICATED_VALUES_COLOR_TABLE = "removed_duplicated_values_color_table_notification";
+    public final static String SETTED_CLASS_VALUES_COLOR_TABLE = "setted_class_values_color_table_notification";
+    public final static String CHANGED_INTERPOLATED_COLOR_TABLE = "changed_interpolated_color_table_notification";
+    public final static String RENAMED_COLOR_TABLE = "renamed_color_table_notification";
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIO.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIO.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/colortable/ColorTableIO.java	(revision 46118)
@@ -0,0 +1,59 @@
+package org.gvsig.raster.lib.legend.api.colortable;
+
+import java.io.File;
+
+import org.gvsig.raster.lib.legend.api.exceptions.ColorTableIOException;
+
+/**
+ * Class to read {@link ColorTable} from files and write {@link ColorTable} to
+ * files.
+ * 
+ * @author fdiaz
+ *
+ */
+public interface ColorTableIO {
+
+    /**
+     * @return the name of {@link ColorTableIO}
+     */
+    public String getName();
+
+    /**
+     * @return the description of {@link ColorTableIO}
+     */
+    public String getDescription();
+
+    /**
+     * Reads file to create {@link ColorTable} from it.
+     * 
+     * @param file
+     *            {@link ColorTable} file.
+     * @return ColorTable {@link ColorTable} created from file.
+     * @throws ColorTableIOException 
+     */
+    public ColorTable read(File file) throws ColorTableIOException;
+
+    /**
+     * Reads file to set information to {@link ColorTable} received as
+     * parameter.
+     * 
+     * @param colorTable
+     *            {@link ColorTable} to be filled.
+     * @param file
+     *            File of new {@link ColorTable}.
+     * @throws ColorTableIOException 
+     */
+    public void read(ColorTable colorTable, File file) throws ColorTableIOException;
+
+    /**
+     * Writes {@link ColorTable} to file.
+     * 
+     * @param colorTable
+     *            {@link ColorTable} to be written
+     * @param file
+     *            File of {@link ColorTable}
+     * @throws ColorTableIOException 
+     */
+    public void write(ColorTable colorTable, File file) throws ColorTableIOException;
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/Transparency.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/Transparency.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/Transparency.java	(revision 46118)
@@ -0,0 +1,100 @@
+package org.gvsig.raster.lib.legend.api;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.List;
+
+import org.gvsig.tools.persistence.Persistent;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface Transparency extends Persistent, Cloneable {
+
+    /**
+     * Add {@link PropertyChangeListener} to fire {@link PropertyChangeEvent}
+     * when properties are modified.
+     *
+     * @param listener
+     */
+    public void addPropertyChangeListener(PropertyChangeListener listener);
+
+    /**
+     * Remove {@link PropertyChangeListener} from this {@link Transparency}
+     *
+     * @param listener
+     */
+    public void removePropertyChangeListener(PropertyChangeListener listener);
+
+    /**
+     * @return Returns value of transparency
+     */
+    public int getAlpha();
+
+    /**
+     * @return Returns defined {@link TransparencyRange}
+     */
+    public List<TransparencyRange> getTransparencyRanges();
+
+    /**
+     * Add {@link TransparencyRange} to this {@link Transparency}
+     *
+     * @param range
+     *            {@link TransparencyRange} to be added
+     */
+    public void addTransparencyRange(TransparencyRange range);
+
+    /**
+     * Remove {@link TransparencyRange} from this {@link Transparency}
+     *
+     * @param range
+     *            {@link TransparencyRange} to be removed
+     */
+    public void removeTransparencyRange(TransparencyRange range);
+
+    /**
+     * Gets alpha of RGB. If there are any {@link TransparencyRange} that
+     * defines alpha to this RGB, it will be returned. Otherwise, this method
+     * will return 255.
+     *
+     * @param r
+     *            Red byte
+     * @param g
+     *            Green byte
+     * @param b
+     *            Blue byte
+     * @return Alpha defined to this RGB.
+     */
+    public int getTransparencyRangeAlpha(byte r, byte g, byte b);
+
+    /**
+     * Gets alpha of RGB. If there are any {@link TransparencyRange} that
+     * defines alpha to this RGB, it will be returned. Otherwise, this method
+     * will return 255.
+     *
+     * @param r
+     *            Red value
+     * @param g
+     *            Green value
+     * @param b
+     *            Blue value
+     * @return Alpha defined to this RGB.
+     */
+    public int getTransparencyRangeAlpha(int r, int g, int b);
+
+    /**
+     * Sets transparency value
+     *
+     * @param value
+     *            Value between 0 and 255
+     */
+    public void setValue(int value);
+
+    /**
+     * Set {@link TransparencyRange} of this {@link Transparency}
+     *
+     * @param ranges
+     */
+    public void setTransparencyRanges(List<TransparencyRange> ranges);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/raster/lib/legend/api/RasterLegendManager.java	(revision 46118)
@@ -0,0 +1,228 @@
+package org.gvsig.raster.lib.legend.api;
+
+import java.awt.Color;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+import org.gvsig.raster.lib.legend.api.colortable.MakeColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterLegendManager {
+
+    /**
+     * Creates a raster legend
+     *
+     * @return RasterLegend
+     */
+    public RasterLegend createLegend();
+
+    /**
+     * Creates a raster legend
+     *
+     * @param colorInterpretation
+     *            {@link ColorInterpretation} of this {@link RasterLegend}
+     * @return New {@link RasterLegend}
+     */
+    public RasterLegend createLegend(ColorInterpretation colorInterpretation);
+
+    /**
+     * Creates a raster legend
+     *
+     * @param colorInterpretation
+     *            {@link ColorInterpretation} of this
+     * @param transparency
+     *            {@link Transparency} of this {@link RasterLegend}
+     * @param filters
+     *            A {@link OperationList} to be applied
+     * @return New {@link RasterLegend}
+     */
+    public RasterLegend createLegend(ColorInterpretation colorInterpretation,
+        Transparency transparency, OperationList filters);
+
+    /**
+     * @return New empty instance of {@link ColorTableClass}
+     */
+    public ColorTableClass createColorTableClass();
+
+    /**
+     * Creates new instance with values received as parameters.
+     *
+     * @param className
+     *            Name of class
+     * @param value
+     *            Value of class
+     * @param interpolated
+     *            Interpolated value
+     * @param color
+     *            Color of class
+     * @return New instance of {@link ColorTableClass}.
+     */
+    public ColorTableClass createColorTableClass(String className, double value,
+        double interpolated, Color color);
+
+    /**
+     * Creates a color table
+     *
+     * @return New color table instance
+     */
+    public ColorTable createColorTable();
+
+    /**
+     * Creates a new {@link ColorTable}
+     *
+     * @param name
+     *            Name of {@link ColorTable}
+     * @param colorTableClasses
+     *            {@link ColorTableClass} that defined {@link ColorTable}
+     * @param interpolated
+     *            True to apply interpolation to {@link ColorTable}
+     * @return New color table instance.
+     */
+    public ColorTable createColorTable(String name, List<ColorTableClass> colorTableClasses,
+        boolean interpolated);
+
+    /**
+     * Gets default {@link ColorTableIO} to read and write {@link ColorTable} to
+     * file.
+     *
+     * @return Default {@link ColorTableIO}
+     */
+    public ColorTableIO getColorTableIO();
+
+    /**
+     * @return Gets registered {@link ColorTableIOFactory}.
+     */
+    public List<ColorTableIOFactory> getColorTableIOFactories();
+
+    /**
+     * Gets registered {@link ColorTableIOFactory} with the name
+     *
+     * @param name
+     *            Name of registered {@link ColorTableIOFactory}
+     * @return Register {@link ColorTableIOFactory} with name
+     */
+    public ColorTableIOFactory getColorTableIOFactory(String name);
+
+    /**
+     * Gets {@link ColorTable} inside folder using registered
+     * {@link ColorTableIOFactory}.
+     *
+     * @param folder
+     *            Folder of {@link ColorTable}
+     * @return List of color tables
+     */
+    public List<Pair<File,ColorTable>> getColorTables(File folder);
+
+    /**
+     * Registers {@link ColorTableIOFactory}.
+     *
+     * @param name
+     *            Name of {@link ColorTableIOFactory} to register it.
+     * @param colorTableIOFactory
+     *            {@link ColorTableIOFactory} to create instances of
+     *            {@link ColorTableIO}.
+     */
+    public void registerColorTableIOFactory(String name, ColorTableIOFactory colorTableIOFactory);
+
+    /**
+     * Creates an empty {@link ColorInterpretation}
+     *
+     * @param colorInterpretations
+     *
+     * @return New {@link ColorInterpretation} instance
+     */
+    public ColorInterpretation createColorInterpretation(String[] colorInterpretations);
+
+    public ColorInterpretation createColorInterpretation(List<String> colorInterpretations);
+
+    /**
+     * Creates default color interpretation using {@link ColorInterpretation}
+     * constants.
+     *
+     * @param definedColorInterpretation
+     *            Defined {@link ColorInterpretation}. See constants at
+     *            {@link ColorInterpretation} interface.
+     * @return Default {@link ColorInterpretation}
+     */
+    public ColorInterpretation createColorInterpretation(String definedColorInterpretation);
+
+    public ColorInterpretation createColorInterpretation(BufferedImage image, String prefix);
+    
+    /**
+     * @return Returns an empty {@link Transparency}
+     */
+    public Transparency createTransparency();
+
+    /**
+     * Creates a new {@link Transparency} using transparency value and defined
+     * {@link TransparencyRange}.
+     *
+     * @param transparency
+     *            Value of transparency
+     * @param transparencyRanges
+     *            List with {@link TransparencyRange} that define ranges of
+     *            transparency by RGB values
+     * @return New {@link Transparency} instance
+     */
+    public Transparency createTransparency(int transparency,
+        List<TransparencyRange> transparencyRanges);
+
+    /**
+     * Creates an empty {@link TransparencyRange}
+     * {@link TransparencyRange}.
+     * @return
+     */
+    public TransparencyRange createTransparencyRange();
+
+    /**
+     * Creates a new {@link TransparencyRange} using color ranges
+     *
+     * {@link TransparencyRange}.
+     * @param redRange
+     * @param greenRange
+     * @param blueRange
+     * @param alpha
+     * @param isAnd
+     * @return
+     */
+    public TransparencyRange createTransparencyRange(int[] redRange, int[] greenRange, int[] blueRange, int alpha, boolean isAnd);
+
+    /**
+     * @param minimum
+     * @param maximum
+     * @param intervals
+     * @param fromColor
+     * @param toColor
+     * @return
+     */
+    List<ColorTableClass> createListColorTableClasses(double minimum, double maximum, int intervals, Color fromColor,
+        Color toColor);
+
+    /**
+     * @param minimum
+     * @param maximum
+     * @param intervalSize
+     * @param fromColor
+     * @param toColor
+     * @return
+     */
+    List<ColorTableClass> createListColorTableClasses(double minimum, double maximum, double intervalSize,
+        Color fromColor, Color toColor);
+
+    /**
+     * @return
+     */
+    MakeColorTable createMakeColorTable();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,804 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.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.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.layers.vectorial.VectorLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+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 < all.size(); i++) {
+                    // firstLayer
+                    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
+        for (VectorLayer graphicsLayer : mapContext.getGraphicsLayers()) {
+            if (graphicsLayer != null && 
+                    graphicsLayer.isAvailable() &&
+                    graphicsLayer.isVisible() && 
+                    graphicsLayer.isWithinScale(scale)) {
+                result.add(graphicsLayer);
+            }
+        }
+        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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1088 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+
+import org.cresques.cts.IProjection;
+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.dal.DataStoreProviderFactory;
+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.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.geom.Geometry;
+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.CantRetrieveLayerByStoreException;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.DefaultLayerInformationBuilder;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerInformationBuilder;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+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.raster.lib.legend.api.RasterLegend;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynMethodException;
+import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
+import org.gvsig.tools.folders.FoldersManager;
+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.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation of the {@link MapContextManager}.
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultMapContextManager implements MapContextManager {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(DefaultMapContextManager.class);
+
+    private Class drawerClazz = DefaultMapContextDrawer.class;
+
+    private final Map<String,Class<ILegend>> legends = new HashMap();
+
+    private final Map<String, Class<ILegendReader>> legendReaders = new LinkedHashMap<>();
+
+    private final Map<String, Map<Class<ILegend>,Class<ILegendWriter>>> legendWriters = new LinkedHashMap<>();
+    
+    private final Map<Class<? extends DataStore>,Class<? extends FLayer>> layerClassFromStoreClass = new HashMap<>();
+
+    private final Map<String,String> iconLayers = new HashMap(); //  (Map<String storeProviderName, String iconName>)
+
+    private String defaultVectorLegend;
+
+    private final ObservableHelper observableHelper = new ObservableHelper();
+
+    private File colorTableLibraryFolder = null;
+    private String defaultRasterLegend;
+
+    @Override
+    public MapContext createMapContext() {
+        MapContext mapcontext = new MapContext(new ViewPort());
+        return (MapContext) notifyObservers(CREATE_MAPCONTEXT, mapcontext).getValue();
+    }
+
+    @Override
+    public SymbolManager getSymbolManager() {
+        return MapContextLocator.getSymbolManager();
+    }
+
+    private SymbolPreferences getSymbolPreferences() {
+        return getSymbolManager().getSymbolPreferences();
+    }
+
+    @Override
+    public String getSymbolLibraryPath() {
+        return getSymbolPreferences().getSymbolLibraryPath();
+    }
+
+    @Override
+    public void setSymbolLibraryPath(String symbolLibraryPath) {
+        getSymbolPreferences().setSymbolLibraryPath(symbolLibraryPath);
+    }
+
+    @Override
+    public void resetSymbolLibraryPath() {
+        getSymbolPreferences().resetSymbolLibraryPath();
+    }
+
+    @Override
+    public Color getDefaultSymbolColor() {
+        return getSymbolPreferences().getDefaultSymbolColor();
+    }
+
+    @Override
+    public Color getDefaultSymbolFillColor() {
+        return getSymbolPreferences().getDefaultSymbolFillColor();
+    }
+
+    @Override
+    public Font getDefaultSymbolFont() {
+        return getSymbolPreferences().getDefaultSymbolFont();
+    }
+
+    public String getSymbolFileExtension() {
+        return getSymbolPreferences().getSymbolFileExtension();
+    }
+
+    @Override
+    public boolean isDefaultSymbolFillColorAleatory() {
+        return getSymbolPreferences().isDefaultSymbolFillColorAleatory();
+    }
+
+    @Override
+    public void resetDefaultSymbolColor() {
+        getSymbolPreferences().resetDefaultSymbolColor();
+    }
+
+    @Override
+    public void resetDefaultSymbolFillColor() {
+        getSymbolPreferences().resetDefaultSymbolFillColor();
+    }
+
+    @Override
+    public void resetDefaultSymbolFillColorAleatory() {
+        getSymbolPreferences().resetDefaultSymbolFillColorAleatory();
+    }
+
+    @Override
+    public void resetDefaultSymbolFont() {
+        getSymbolPreferences().resetDefaultSymbolFont();
+    }
+
+    @Override
+    public void setDefaultSymbolColor(Color defaultSymbolColor) {
+        getSymbolPreferences().setDefaultSymbolColor(defaultSymbolColor);
+    }
+
+    @Override
+    public void setDefaultSymbolFillColor(Color defaultSymbolFillColor) {
+        getSymbolPreferences().setDefaultSymbolFillColor(defaultSymbolFillColor);
+    }
+
+    @Override
+    public void setDefaultSymbolFillColorAleatory(
+            boolean defaultSymbolFillColorAleatory) {
+        getSymbolPreferences().setDefaultSymbolFillColorAleatory(
+                defaultSymbolFillColorAleatory);
+    }
+
+    @Override
+    public void setDefaultSymbolFont(Font defaultSymbolFont) {
+        getSymbolPreferences().setDefaultSymbolFont(defaultSymbolFont);
+    }
+
+    public void setSymbolFileExtension(String extension) {
+        getSymbolPreferences().setSymbolFileExtension(extension);
+    }
+
+    @Override
+    public int getDefaultCartographicSupportMeasureUnit() {
+        return getSymbolPreferences().getDefaultCartographicSupportMeasureUnit();
+    }
+
+    @Override
+    public void setDefaultCartographicSupportMeasureUnit(
+            int defaultCartographicSupportMeasureUnit) {
+        getSymbolPreferences().setDefaultCartographicSupportMeasureUnit(
+                defaultCartographicSupportMeasureUnit);
+    }
+
+    @Override
+    public int getDefaultCartographicSupportReferenceSystem() {
+        return getSymbolPreferences().getDefaultCartographicSupportReferenceSystem();
+    }
+
+    @Override
+    public void setDefaultCartographicSupportReferenceSystem(
+            int defaultCartographicSupportReferenceSystem) {
+        getSymbolPreferences().setDefaultCartographicSupportReferenceSystem(
+                defaultCartographicSupportReferenceSystem);
+    }
+
+    @Override
+    public MapContextDrawer createMapContextDrawerInstance(Class drawerClazz)
+            throws MapContextException {
+        return createMapContextDrawerInstance(drawerClazz, "NONE");
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    public void setDefaultMapContextDrawer(Class drawerClazz)
+            throws MapContextException {
+
+        validateMapContextDrawer(drawerClazz);
+        this.drawerClazz = drawerClazz;
+        notifyObservers(SET_MAPCONTEXT_DRAWER, drawerClazz);
+    }
+
+    @Override
+    public void validateMapContextDrawer(Class drawerClazz)
+            throws MapContextException {
+        if (!MapContextDrawer.class.isAssignableFrom(drawerClazz)) {
+            throw new InvalidRegisteredClassException(MapContextDrawer.class,
+                    drawerClazz, "UNKNOWN");
+        }
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public String getDefaultVectorLegend() {
+        return defaultVectorLegend;
+    }
+
+    @Override
+    public void setDefaultVectorLegend(String defaultVectorLegend) {
+        this.defaultVectorLegend = defaultVectorLegend;
+    }
+
+    @Override
+    public String getDefaultRasterLegend() {
+        return defaultRasterLegend;
+    }
+
+    @Override
+    public void setDefaultRasterLegend(String defaultRasterLegend) {
+        this.defaultRasterLegend = defaultRasterLegend;
+    }
+    
+    @Override
+    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);
+    }
+
+    @Override
+    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 | IllegalAccessException e) {
+                throw new RegisteredClassInstantiationException(ILegend.class,
+                        legendClass, legendName, e);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    public RasterLegend createDefaultRasterLegend(List<BandDescriptor> bands)
+            throws MapContextRuntimeException {
+        try {
+            // Create legend
+            RasterLegend legend = (RasterLegend) createLegend(getDefaultRasterLegend());
+            if (legend == null) {
+                return null;
+            }
+            ColorInterpretation colorInterpretation;
+            RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+            switch (bands.size()) {
+                case 3:
+                    colorInterpretation = legendManager.createColorInterpretation(ColorInterpretation.RGB);
+                    break;
+                case 4:
+                    colorInterpretation = legendManager.createColorInterpretation(ColorInterpretation.ARGB);
+                    break;
+                default:
+                    String[] colorBands = new String[bands.size()];
+                    colorBands[0] = ColorInterpretation.GRAY_BAND;
+                    for (int i = 1; i < colorBands.length; i++) {
+                        colorBands[i] = ColorInterpretation.UNDEFINED_BAND;
+                    }   colorInterpretation = legendManager.createColorInterpretation(colorBands);
+                    break;
+            }
+            legend.setColorInterpretation(colorInterpretation);
+            legend.addLinearStretchEnhancementOperationIfNeeded(colorInterpretation, bands, 0);
+            return legend;
+        } catch (Exception e) {
+            throw new MapContextRuntimeException(e);
+        }
+    }
+
+    // =============================================================
+    // Legend reading/writing
+
+    private Map<Class<ILegend>,Class<ILegendWriter>> getLegendWritersForFormat(String format) {
+        synchronized(legendWriters) {
+            return legendWriters.get(format);
+        }
+    }
+
+    private Class<ILegendReader> getLegendReaderForFormat(String format) {
+        synchronized(legendReaders) {
+            return legendReaders.get(format);
+        }
+    }
+
+    @Override
+    public List<String> getLegendReadingFormats() {
+        synchronized(legendReaders) {
+            List<String> resp = new ArrayList();
+            resp.addAll(legendReaders.keySet());
+            return resp;
+        }
+    }
+
+    @Override
+    public List<String> getLegendWritingFormats() {
+        synchronized(legendWriters) {
+            List<String> resp = new ArrayList();
+            resp.addAll(legendWriters.keySet());
+            return resp;
+        }
+    }
+    
+    @Override
+    public void registerLegendReader(String format, Class readerClass)
+            throws MapContextRuntimeException {
+        if (readerClass == null
+                || !ILegendReader.class.isAssignableFrom(readerClass)) {
+            throw new InvalidRegisteredClassException(ILegendReader.class,
+                    readerClass, format);
+        }
+        synchronized (legendReaders) {
+            legendReaders.put(format, readerClass);
+        }
+        notifyObservers(REGISTER_LEGEND_READER, format, readerClass);
+    }
+
+    @Override
+    public void registerLegendWriter(Class legendClass, String format,
+            Class writerClass) throws MapContextRuntimeException {
+        if (writerClass == null || legendClass == null
+                || !ILegendWriter.class.isAssignableFrom(writerClass)
+                || !ILegend.class.isAssignableFrom(legendClass)) {
+
+            throw new InvalidRegisteredClassException(ILegendWriter.class,
+                    writerClass, format.concat("-").concat(
+                            legendClass == null ? "Null" : legendClass.getName()));
+        }
+
+        synchronized (legendWriters) {
+            Map<Class<ILegend>, Class<ILegendWriter>> legendWriterOfFormat = legendWriters.get(format);
+            if (legendWriterOfFormat == null) {
+                legendWriterOfFormat = new LinkedHashMap();
+                legendWriters.put(format, legendWriterOfFormat);
+            }
+            legendWriterOfFormat.put(legendClass, writerClass);
+        }
+        notifyObservers(REGISTER_LEGEND_WRITER, format, writerClass);
+    }
+
+    @Override
+    public ILegendReader createLegendReader(String format)
+            throws MapContextRuntimeException {
+        Class<ILegendReader> legendReaderClazz = getLegendReaderForFormat(format);
+
+        if (legendReaderClazz != null) {
+            try {
+                ILegendReader reader = (ILegendReader) legendReaderClazz.newInstance();
+                return (ILegendReader) notifyObservers(CREATE_LEGEND_READER, reader).getValue();
+            } catch (InstantiationException|IllegalAccessException e) {
+                throw new RegisteredClassInstantiationException(
+                        ILegendReader.class, legendReaderClazz, format, e);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public ILegendWriter createLegendWriter(Class legendClass, String format)
+            throws MapContextRuntimeException {
+
+        if (legendClass == null || format == null) {
+            return null;
+        }
+
+        Map<Class<ILegend>, Class<ILegendWriter>> legendFormatWriters = getLegendWritersForFormat(format);
+
+        if (legendFormatWriters != null) {
+            Class<ILegendWriter> legendWriterClazz = 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|IllegalAccessException e) {
+                    throw new RegisteredClassInstantiationException(
+                            ILegendWriter.class, 
+                            legendWriterClazz,
+                            format.concat("-").concat(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<Class<ILegend>, Class<ILegendWriter>> clsToWtr, Class<ILegend> legclass)
+            throws Exception {
+
+        Iterator kiter = clsToWtr.keySet().iterator();
+        Object oitem;
+        Class<ILegendWriter> citem;
+        while (kiter.hasNext()) {
+            oitem = kiter.next();
+            if (oitem instanceof Class) {
+                citem = (Class) oitem;
+                if (citem.isAssignableFrom(legclass)) {
+                    /*
+                     * Found superclass/superinterface
+                     */
+                    citem = clsToWtr.get(oitem);
+                    return (ILegendWriter) citem.newInstance();
+                }
+            }
+        }
+        /*
+         * No superclass/superinterface found
+         */
+        return null;
+    }
+
+    // =============================================================
+
+    @Override
+    public IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+            throws MapContextRuntimeException {
+        IMultiLayerSymbol symbol = getSymbolManager().createMultiLayerSymbol(shapeType);
+        return (IMultiLayerSymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    public IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+            throws MapContextRuntimeException {
+        IMultiLayerSymbol symbol = getSymbolManager().createMultiLayerSymbol(symbolName);
+        return (IMultiLayerSymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    public ISymbol createSymbol(int shapeType, Color color)
+            throws MapContextRuntimeException {
+        ISymbol symbol = getSymbolManager().createSymbol(shapeType, color);
+        return (ISymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    public ISymbol createSymbol(int shapeType)
+            throws MapContextRuntimeException {
+        ISymbol symbol = getSymbolManager().createSymbol(shapeType);
+        return (ISymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    public ISymbol createSymbol(String symbolName, Color color)
+            throws MapContextRuntimeException {
+        ISymbol symbol = getSymbolManager().createSymbol(symbolName, color);
+        return (ISymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    public ISymbol createSymbol(String symbolName)
+            throws MapContextRuntimeException {
+        ISymbol symbol = getSymbolManager().createSymbol(symbolName);
+        return (ISymbol) notifyObservers(CREATE_SYMBOL, symbol).getValue();
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException {
+        getSymbolManager().registerMultiLayerSymbol(symbolName, symbolClass);
+        notifyObservers(REGISTER_MULTILAYER_SYMBOL, symbolName, symbolClass);
+    }
+
+    @Override
+    public void registerMultiLayerSymbol(String symbolName, int[] shapeTypes,
+            Class symbolClass) throws MapContextRuntimeException {
+        getSymbolManager().registerMultiLayerSymbol(symbolName, shapeTypes,
+                symbolClass);
+        notifyObservers(REGISTER_MULTILAYER_SYMBOL, symbolName, symbolClass, shapeTypes);
+    }
+
+    @Override
+    public void registerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException {
+        getSymbolManager().registerSymbol(symbolName, symbolClass);
+        notifyObservers(REGISTER_SYMBOL, symbolName, symbolClass);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public boolean registerLayer(
+        Class<? extends DataStore> dataStoreClass,
+        Class<? extends FLayer> layerClass) 
+    {
+        this.layerClassFromStoreClass.put(dataStoreClass, layerClass);
+        return true;
+    }    
+    
+    private Class<? extends FLayer> getLayerClassFromDataStoreClass(
+            Class<? extends DataStore> dataStoreClass) {
+        Class<? extends FLayer> layerClass = this.layerClassFromStoreClass.get(dataStoreClass);
+        if( layerClass!=null ) {
+            return layerClass;
+        }
+        for (Map.Entry<Class<? extends DataStore>, Class<? extends FLayer>> entry : layerClassFromStoreClass.entrySet()) {
+            Class<? extends DataStore>  currentDataStoreClass = entry.getKey();
+            layerClass = entry.getValue();
+            if( currentDataStoreClass.isAssignableFrom(dataStoreClass) ) {
+                return layerClass;
+            }
+        }
+        return null;
+    }
+    
+    @Override
+    public FLayer createLayer(String layerName, DataStoreParameters dataParameters)
+            throws LoadLayerException {
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            DataStore dataStore = dataManager.openStore(
+                    dataParameters.getDataStoreName(), 
+                    dataParameters
+            );
+            return this.createLayer(layerName, dataStore, null);
+        } catch (Exception e) {
+            throw new LoadLayerException(layerName, e);
+        }
+    }
+
+    @Override
+    public FLayer createLayer(String layerName, DataStore dataStore)
+            throws LoadLayerException {
+        return this.createLayer(layerName, dataStore, null);
+    }
+
+
+    @Override
+    public FLayer createLayer(String layerName, CreateLayerParameters parameters) throws LoadLayerException {
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            DataStoreParameters dataParameters = parameters.getDataParameters();
+            DataStore dataStore = dataManager.openStore(
+                    dataParameters.getDataStoreName(), 
+                    dataParameters
+            );
+            return this.createLayer(layerName, dataStore, parameters);
+        } catch (Exception e) {
+            throw new LoadLayerException(layerName, e);
+        }
+    }    
+    
+    @Override
+    public FLayer createLayer(String layerName, DataStore dataStore, CreateLayerParameters parameters) throws LoadLayerException {
+        try {
+            boolean useCache = false;
+            ICoordTrans coordTrans = null;
+            IProjection projection = (IProjection) dataStore.getDynValue(FeatureStore.METADATA_CRS);
+            
+            if( parameters!=null ) {
+                if( parameters.getDataParameters()!=dataStore.getParameters() ) {
+                    throw new IllegalArgumentException("The dataStore parameters are not the same of the store pased to create layer.");
+                }
+                useCache = parameters.useCache();
+                
+                coordTrans = parameters.getCoordTrans();
+                // TODO: Aqui comprobacion de que si hay transformacion es adecuada
+                // para la proyeccion del store.
+            }
+            
+            if( useCache ) {
+                DataStoreProviderFactory factory = dataStore.getProviderFactory();
+                if( factory.isTiledSupported() != DataStoreProviderFactory.NO ) {
+                    if( !factory.getClass().getSimpleName().equals("TileProviderFactory")) {
+                        DataManager dataManager = DALLocator.getDataManager();
+                        DynObject tileParameters = dataManager.createStoreParameters("TileCache");
+                        File cacheFolder;
+                        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+                        File applicationHome = folderManager.get("ApplicationHome");
+                        if( applicationHome==null ) {
+                            cacheFolder = folderManager.getTemporaryFile("gvsig_rcache");
+                        } else {
+                            cacheFolder = new File(applicationHome, "gvsig_rcache");
+                        }
+                        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+                            tileParameters.setDynValue("rootFolder", cacheFolder);
+                        }
+                        try {
+                            dataStore.useCache("TileCache", tileParameters);
+                        } catch (DataException e) {
+                            LOGGER.warn("Can't cache the layer.", e);
+                        }
+                    }
+                }
+            }
+            
+            Class<? extends FLayer> layerClass = this.getLayerClassFromDataStoreClass(dataStore.getClass());
+            if (layerClass == null) {
+                throw new CantRetrieveLayerByStoreException(layerName, dataStore.getName());
+            }
+            FLayer layer;
+            try {
+                layer = (FLayer) layerClass.newInstance();
+            } catch (InstantiationException | IllegalAccessException e) {
+                throw new LoadLayerException(layerName, e);
+            }
+
+            layer.setName(layerName);
+            ((SingleLayer) layer).setDataStore(dataStore);
+            if (projection != null) {
+                layer.setProjection(projection);
+                if( coordTrans != null ) {
+                    layer.setCoordTrans(coordTrans);
+                }
+            }
+            layer.load();
+            return (FLayer) notifyObservers(CREATE_LAYER, layer).getValue();
+        } catch (Exception e) {
+            throw new LoadLayerException(layerName, e);
+        }
+    }
+
+    @Override
+    public ILegend getLegend(DataStore dataStore) {
+        ILegend legend = null;
+        ResourcesStorage resourcesStorage = dataStore.getResourcesStorage();
+        if( resourcesStorage!=null ) {
+            Resource resource = resourcesStorage.getResource(SymbolManager.LEGEND_FILE_EXTENSION.substring(1));
+            try {
+                if ((resource != null) && (resource.exists())) {
+                    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+                    InputStream is = resource.asInputStream();
+                    legend = (ILegend) persistenceManager.getObject(is);
+                    is.close();
+                }
+            } catch (Exception e) {
+                LOGGER.warn("Can't loasd legend", e);
+            } finally {
+                IOUtils.closeQuietly(resource);
+            }
+        }
+        //If the legend is null, next option is to check if the store has the getLegend method
+        if (legend == null) {
+            try {
+                legend = (ILegend) dataStore.invokeDynMethod("getLegend", null);
+            } catch (DynMethodNotSupportedException e) {
+                LOGGER.debug("This store {} does not provide a legend.",
+                        dataStore.getName());
+            } catch (DynMethodException e) {
+                LOGGER.warn(
+                        "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) {
+            if( dataStore instanceof FeatureStore ) {
+                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.warn("Error getting the default feature type", e);
+                }
+                
+            } else if( dataStore instanceof RasterStore ) {
+                RasterStore rasterStore = (RasterStore) dataStore;
+                List<BandDescriptor> bands = rasterStore.getBandDescriptors();
+                legend = createDefaultRasterLegend(bands);
+            }
+        }
+
+        if( legend instanceof RasterLegend ) {
+            RasterLegend rasterLegend = (RasterLegend) legend;
+            RasterStore rasterStore = (RasterStore) dataStore;
+            ColorInterpretation colorInterpretation = rasterLegend.getColorInterpretation();
+            if (colorInterpretation.isPalette()) {
+                rasterLegend.addColorTableOperation(colorInterpretation, 0);
+            } else {
+                rasterLegend.addLinearStretchEnhancementOperationIfNeeded(
+                        colorInterpretation, 
+                        rasterStore.getBandDescriptors(), 
+                        0);
+            }
+            if (colorInterpretation.hasAnyHSLBand()) {
+                rasterLegend.addHSLToRGBOperation(colorInterpretation);
+            } else if (colorInterpretation.hasAnyCMYKBand()) {
+                rasterLegend.addCMYKToRGBOperation(colorInterpretation);
+            } else if (colorInterpretation.hasAnyYCBCRBand()) {
+              //TODO: Not implemented yet, meanwhile do nothing
+    //                legend.addYCBCRToRGBOperation(colorInterpretation);
+            }        
+        }
+        return legend;
+    }
+
+    @Override
+    public ILabelingStrategy getLabelingStrategy(DataStore dataStore) {
+        ILabelingStrategy labelingStrategy = null;
+
+        ResourcesStorage resourcesStorage = dataStore.getResourcesStorage();
+        if( resourcesStorage!=null ) {
+            Resource resource = resourcesStorage.getResource(SymbolManager.LABELINGSTRATEGY_FILE_EXTENSION.substring(1));
+            try {
+                if ((resource != null) && (resource.exists())) {
+                    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+                    InputStream is = resource.asInputStream();
+                    labelingStrategy = (ILabelingStrategy) persistenceManager.getObject(is);
+                    is.close();
+                }
+            } catch (Exception e) {
+                LOGGER.warn("Can't load Label strategy", e);
+            } finally {
+                IOUtils.closeQuietly(resource);
+            }
+        }
+
+        //If the legend is null, next option is to check if the store has the getLabeling 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 labeling 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 (Exception ex) {
+            return null;
+        }
+    }
+
+    @Override
+    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);
+    }
+
+	@Override
+    public String getIconLayer(DataStore store) {
+        try {
+            return this.getIconLayer(store.getProviderName());
+        } catch (Throwable th){
+            return "layer-icon";
+        }
+    }
+
+    @Override
+    public String getIconLayer(String providerName) {
+		String name = null;
+		try {
+			name = (String) iconLayers.get(providerName.trim().toLowerCase());
+		} catch(Throwable th) {
+			// Do nothing
+		}
+		if( StringUtils.isEmpty(name) ) {
+			name = "layer-icon";
+		}
+        return name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.fmap.mapcontext.MapContextManager#getDefaultCRS()
+     */
+    @Override
+    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);
+    }
+
+    @Override
+    public void addObserver(Observer o) {
+        this.observableHelper.addObserver(o);
+    }
+
+    @Override
+    public void deleteObserver(Observer o) {
+        this.observableHelper.deleteObserver(o);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public void setColorTableLibraryFolder(File colorTableLibraryFolder) {
+        this.colorTableLibraryFolder = colorTableLibraryFolder;
+    }
+
+    @Override
+    public LayerInformationBuilder createLayerInformationBuilder() {
+        return new DefaultLayerInformationBuilder();
+    }
+
+    @Override
+    public Icon getIcon(int geometryType, boolean withSelection) {
+        try {
+            String name;
+            switch (geometryType) {
+                case Geometry.TYPES.LINE:
+                    name = "layer-type-line";
+                    break;
+                case Geometry.TYPES.POINT:
+                    name = "layer-type-point";
+                    break;
+                case Geometry.TYPES.POLYGON:
+                    name = "layer-type-polygon";
+                    break;
+                case Geometry.TYPES.MULTILINE:
+                    name = "layer-type-multiline";
+                    break;
+                case Geometry.TYPES.MULTIPOINT:
+                    name = "layer-type-multipoint";
+                    break;
+                case Geometry.TYPES.MULTIPOLYGON:
+                    name = "layer-type-multipolygon";
+                    break;
+                case Geometry.TYPES.GEOMETRY:
+                    name = "layer-type-mix";
+                    break;
+                default:
+                    return null;
+            }
+            if (withSelection) {
+                name = name + "-sel";
+            }
+            name = name + ".png";
+            URL url = this.getClass().getResource("/layertypes/" + name);
+            if (url == null) {
+                return null;
+            }
+            Icon icon = new ImageIcon(url);
+            return icon;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContext.java	(revision 46118)
@@ -0,0 +1,1879 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang3.ArrayUtils;
+
+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.DataStore;
+import org.gvsig.fmap.dal.exception.ReadException;
+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.GeometryUtils;
+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.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.BaseLayerCollectionListener;
+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.layers.vectorial.VectorLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.fmap.mapcontext.rendering.strategies.SelectedEnvelopeVisitor;
+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.TimeSupportLocator;
+import org.gvsig.timesupport.TimeSupportManager;
+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>
+ */
+public class MapContext extends AbstractDisposable implements Projected,
+        Persistent, Observer, Iterable<FLayer> {
+
+    public interface MapTimeContext {
+        public Interval getInterval();
+        public List<Instant> getTimes();
+    }    
+
+    /**
+     * @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 GEOM_MANAGER = GeometryLocator.getGeometryManager();
+
+    private static final MapContextManager MAPCONTEXT_MANAGER = MapContextLocator.getMapContextManager();
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(MapContext.class);
+
+    private long scaleToUseWhenEnvelopeCollapse = 10000000;
+
+    /**
+     * <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 theDrawFrameRate number of repaints of this <code>MapControl</code>
+     * instance that timer invokes per second
+     *
+     * @see #applyFrameRate()
+     * @see #getDrawFrameRate()
+     */
+    public static void setDrawFrameRate(int theDrawFrameRate) {
+        drawFrameRate = theDrawFrameRate;
+    }
+
+    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(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));
+        }
+        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(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));
+        }
+        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};
+
+    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.
+     */
+    protected FLayers layers;
+
+    /**
+     * A List of layers with graphical items: geometries and symbols.
+     */
+    private static final String DEFAULT_TRACTLAYER = "Default";
+    private Map<String, VectorLayer> tracLayers;
+
+    /**
+     * 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 List legendListeners;
+
+    /**
+     * 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() {
+        this.legendListeners = new ArrayList();
+        this.tracLayers = new LinkedHashMap<>();
+        this.layerEventListener = new LayerEventListener();
+    }
+
+    /**
+     * <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();
+        this.layers = fLayers;
+        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);
+        }
+    }
+
+    /**
+     * <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);
+    }
+
+    /**
+     * Notifies to all legend listeners registered, that one legend has
+     * changed.
+     * 
+     * This method must be called only if it's wanted to reflect a legend
+     * change.
+     *
+     * @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);
+    }
+
+    /**
+     * <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();
+        this.viewPort.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 event = LayerPositionEvent.createLayerMovedEvent(layer, 0, 0);
+        eventBuffer.layerMoved(event);
+    }
+
+    /**
+     * <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);
+        for (VectorLayer tracLayer : this.tracLayers.values()) {
+            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(GEOM_MANAGER.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 env) {
+        if (env == null || env.isEmpty()) {
+            return;
+        }
+        if( env.isCollapsed(Geometry.SUBTYPES.GEOM2D) ) {
+            // El envelop ha colapsado en X e Y.
+            // Fijamos la escala por defecto para cuando colapsa y centramos
+            // sobre el centro del envelop.
+            
+            this.setScaleView(this.getScaleToUseWhenEnvelopeCollapse());
+            
+            Envelope curenv = viewPort.getEnvelope();
+            double halfWidth = curenv.getLength(Geometry.DIMENSIONS.X) / 2;
+            double halfHeight = curenv.getLength(Geometry.DIMENSIONS.Y) / 2;
+            double centerx = env.getCenter(Geometry.DIMENSIONS.X);
+            double centery = env.getCenter(Geometry.DIMENSIONS.Y);
+
+            Point lowerCorner = GeometryUtils.createPoint(halfWidth + centerx, halfHeight + centery);
+            Point upperCorner = GeometryUtils.createPoint(halfWidth - centerx, halfHeight - centery);
+
+            env.setLowerCorner(lowerCorner);
+            env.setUpperCorner(upperCorner);            
+        }
+        this.viewPort.setEnvelope(env);
+    }
+
+    /**
+     * <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();
+
+        for (VectorLayer tracLayer : this.tracLayers.values()) {
+            if (tracLayer != null) {
+                Envelope graphicsEnvelope = tracLayer.getFullEnvelope();
+                if( graphicsEnvelope==null ) {
+                    continue;
+                }
+                if (envelope == null) {
+                    try {
+                        envelope =  (Envelope) graphicsEnvelope.clone();
+                    } catch (CloneNotSupportedException ex) {
+                    }
+                } 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 extends BaseLayerCollectionListener {
+
+        @Override
+        public void layerAdded(LayerCollectionEvent e) {
+            // Voy a mover todo esto a la vista
+//            // Si aun no tenemos envelope, problablemente sera la primera capa,
+//            // asi que asignamos el envelope de la capa al mapcontext.
+//            if (getViewPort().getEnvelope() == null) {
+//                FLayer lyr = e.getAffectedLayer();
+//                if (lyr.isAvailable()) {
+//                    try {
+//                        getViewPort().setEnvelope(lyr.getFullEnvelope());
+//                    } catch (Exception ex) {
+//                        logger.warn(
+//                                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);
+        }
+
+        @Override
+        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);
+            }
+
+        }
+
+    }
+
+    /**
+     * <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);
+        layers2.addLayerCollectionListener(eventBuffer);
+    }
+
+    public VectorLayer getGraphicsLayer(String name) {
+        return this.tracLayers.get(name);
+    }
+    
+    public Collection<VectorLayer> getGraphicsLayers() {
+        return this.tracLayers.values();
+    }
+    
+    public void setGraphicsLayer(String name, FLyrVect layer) {
+        this.tracLayers.put(name, layer);
+    }
+    
+    public void removeGraphicsLayer(String name) {
+        this.tracLayers.remove(name);
+    }
+    
+    /**
+     * <p>
+     * Returns the internal {@link GraphicLayer GraphicLayer}.</p>
+     *
+     * @return the graphic layer of this map
+     *
+     * @see #setGraphicsLayer(GraphicLayer)
+     */
+    public GraphicLayer getGraphicsLayer() {
+        GraphicLayer tracLayer = (GraphicLayer) this.tracLayers.get(DEFAULT_TRACTLAYER);
+        if (tracLayer == null) {
+            if (getViewPort() != null) {
+                tracLayer
+                        = MapContextLocator.getMapContextManager()
+                        .createGraphicsLayer(
+                                getViewPort().getProjection());
+            } else {
+                tracLayer
+                        = MapContextLocator.getMapContextManager()
+                        .createGraphicsLayer(null);
+            }
+            this.tracLayers.put(DEFAULT_TRACTLAYER, tracLayer);
+        }
+        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) {
+        this.tracLayers.put(DEFAULT_TRACTLAYER, 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 = MAPCONTEXT_MANAGER
+                        .createDefaultMapContextDrawerInstance();
+            } else {
+                this.mapContextDrawer = MAPCONTEXT_MANAGER
+                        .createMapContextDrawerInstance(mapContextDrawerClass);
+            }
+            this.mapContextDrawer.setMapContext(this);
+            this.mapContextDrawer.setViewPort(viewPort);
+        }
+
+        return this.mapContextDrawer;
+    }
+
+    public void setMapContextDrawerClass(Class mapContextDrawerClass)
+            throws MapContextException {
+        MAPCONTEXT_MANAGER.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", (Persistent)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);
+        for (VectorLayer tracLayer : this.tracLayers.values()) {
+            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;
+    }
+
+    public boolean hasActiveLayers() {
+        FLayer[] layers = this.getLayers().getActives();
+        return !ArrayUtils.isEmpty(layers);
+    }
+
+    public boolean hasLayers() {
+        return !this.getLayers().isEmpty();
+    }
+    
+    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;
+    }
+    
+    @Override
+    public Iterator<FLayer> iterator() {
+        return this.layers.iterator();
+    }
+
+    public Iterator deepiterator() {
+        return this.layers.deepiterator();
+    }
+
+    public MapTimeContext getTimeContext() {
+        TimeSupportManager timeSupportManager = TimeSupportLocator.getManager();
+        Interval interval = null;
+        final List<Instant> times = new ArrayList<>();
+        Instant minInstant = null;
+        Instant maxInstant = null;
+
+        //TODO Separate absolute and relative time
+        FLayers layers = this.getLayers();
+        for( Iterator<FLayer> iterator = layers.deepiterator(); iterator.hasNext(); ) {
+            FLayer layer = iterator.next();
+            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 = timeSupportManager.createAbsoluteInterval((AbsoluteInstant) minInstant, (AbsoluteInstant) maxInstant);
+                } catch (AbsoluteIntervalTypeNotRegisteredException e) {
+                    LOGGER.warn("Error creating the time interval", e);
+                }
+            } else {
+                interval = timeSupportManager.createRelativeInterval(((RelativeInstant) minInstant).toMillis(), ((RelativeInstant) maxInstant).toMillis());
+            }
+        }
+        final Interval tmp_interval = interval;
+        return new MapTimeContext() {
+            @Override
+            public Interval getInterval() {
+                return tmp_interval;
+            }
+
+            @Override
+            public List<Instant> getTimes() {
+                return times;
+            }
+        };
+    }
+
+    public long getScaleToUseWhenEnvelopeCollapse() {
+        return this.scaleToUseWhenEnvelopeCollapse;
+    }
+
+    public void setScaleToUseWhenEnvelopeCollapse(long scale) {
+        this.scaleToUseWhenEnvelopeCollapse = scale;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.events;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+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 FMapEventBase {
+	/**
+	 * <p>Events that constitute this one.</p>
+	 */
+	private final List events;
+
+	/**
+	 * <p>Creates a new instance of this kind of event.</p>
+	 *
+	 * @param fmapEvents events that will constitute this one
+	 */
+	public AtomicEvent(List fmapEvents) {
+		this.events = new ArrayList(fmapEvents);
+	}
+
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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 FMapEventBase {
+	/**
+	 * <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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEventBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEventBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/events/FMapEventBase.java	(revision 46118)
@@ -0,0 +1,56 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FMapEventBase implements FMapEvent{
+    /**
+     * Kind of event type.
+     */
+    private int eventType;
+
+    public FMapEventBase() {
+
+    }
+
+    /**
+     * <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;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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 interface FMapEvent {
+
+	/**
+	 * <p>Gets the type of this event.</p>
+	 *
+	 * @return the type of this event
+	 */
+	public int getEventType();
+	/**
+	 * <p>Sets the type of the event.</p>
+	 *
+	 * @param eventType the number that identifies this event's type
+	 */
+	public void setEventType(int eventType);
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.mapcontext.events.listeners;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+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.FMapEvent;
+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;
+
+/**
+ * <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.
+ *
+ * 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>
+ *
+ * @see LegendListener
+ * @see LayerCollectionListener
+ * @see SelectionListener
+ * @see ViewPortListener
+ * @see LegendListener
+ *
+ * @author gvSIG Team
+ */
+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 final List<FMapEvent> events = new ArrayList();
+
+    /**
+     * List with all listeners registered.
+     *
+     * @see #addAtomicEventListener(AtomicEventListener)
+     * @see #removeAtomicEventListener(AtomicEventListener)
+     */
+    private final List<AtomicEventListener> listeners = new ArrayList();
+
+    /**
+     * Allows enable or disable the <i>dispatching mode</i>.
+     *
+     * @see #beginAtomicEvent()
+     * @see #endAtomicEvent()
+     */
+    private boolean dispatching = true;
+
+    /**
+     * Enables buffer in <i>accumulation event</i> mode.
+     *
+     * 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}.
+     *
+     * @see #endAtomicEvent()
+     */
+    public void beginAtomicEvent() {
+        dispatching = false;
+    }
+
+    /**
+     * Disables buffer in <i>accumulation event</i> mode.
+     *
+     * All events accumulated will be notify to their respective listeners, in
+     * the same order as they arrived.
+     *
+     * @see #beginAtomicEvent()
+     */
+    public void endAtomicEvent() {
+        fireAtomicEventListener();
+        events.clear();
+        dispatching = true;
+    }
+
+    @Override
+    public void legendChanged(LegendChangedEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerAdded(LayerCollectionEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerMoved(LayerPositionEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerRemoved(LayerCollectionEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void layerRemoving(LayerCollectionEvent e) throws CancelationException {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void visibilityChanged(LayerCollectionEvent e) throws CancelationException {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void selectionChanged(SelectionEvent e) {
+        events.add(e);
+
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    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 listener, 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.isEmpty()) {
+            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();
+    }
+
+    @Override
+    public void visibilityChanged(LayerEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void activationChanged(LayerEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void nameChanged(LayerEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void backColorChanged(ColorEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void editionChanged(LayerEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+
+    }
+
+    @Override
+    public void projectionChanged(ProjectionEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+
+    @Override
+    public void drawValueChanged(LayerEvent e) {
+        events.add(e);
+        if (dispatching) {
+            fireAtomicEventListener();
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextDrawer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ExtentHistory.java	(revision 46118)
@@ -0,0 +1,460 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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 from the history.
+   * </p>
+   *
+   * @return the last previous extent from the history
+   */
+  public Rectangle2D getPrev() {
+    if (numPrev <= 0) {
+      return null;
+    }
+    Rectangle2D ext = extentsPrev[numPrev - 1];
+
+    return ext;
+  }
+
+  /**
+   * <p>
+   * Returns the last next extent from the history.
+   * </p>
+   *
+   * @return the last next extent from 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 from 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 from 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 extent 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;
+  }
+
+  /**
+   * <p>
+   * Adds the specified extent to the next extent history.
+   * If the array of next extents is complete, loses the
+   * first extent of the array and adds the new one at the end.
+   * </p>
+   *
+   */
+  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 extent 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;
+  }
+
+  /**
+   * <p>
+   * Adds the specified extent to the previous extent history.
+   * If the array of previous extents is complete, loses the
+   * first extent of the array and adds the new one at the end.
+   * </p>
+   *
+   */
+  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;
+    }
+  }
+
+  /**
+   * <p>
+   * Returns the current extent.
+   * </p>
+   *
+   * @return the current extent
+   */
+  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;
+        }
+
+        extentsPrev = new Rectangle2D[NUMREC];
+        clearNumPrev();
+        if (state.hasValue("extents")) {
+            Rectangle2D[] storedExtentPrev = (Rectangle2D[]) state.getArray("extents", Rectangle2D.class);
+            if (storedExtentPrev.length >= NUMREC) {
+                extentsPrev = storedExtentPrev;
+                NUMREC = storedExtentPrev.length;
+            } else {
+                for (int i = 0; i < storedExtentPrev.length; i++) {
+                    extentsPrev[i] = storedExtentPrev[i];
+                }
+            }
+        }
+
+        extentsNext = new Rectangle2D[NUMREC];
+        clearNumNext();
+        if (state.hasValue("extentsNext")) {
+            Rectangle2D[] storedExtentsNext = (Rectangle2D[]) state.getArray("extentsNext", Rectangle2D.class);
+            if (storedExtentsNext.length >= NUMREC) {
+                extentsNext = storedExtentsNext;
+                NUMREC = storedExtentsNext.length;
+            } else {
+                for (int i = 0; i < storedExtentsNext.length; i++) {
+                    extentsNext[i] = storedExtentsNext[i];
+                }
+            }
+        }
+
+        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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.
+ *
+ */
+public interface IVectorLegend extends ILegend, DrawingObservable {
+
+    /**
+     * Obtains the default symbol of the legend.
+     *
+     * @return default symbol.
+     */
+    @Override
+    ISymbol getDefaultSymbol();
+
+    /**
+     * Returns a symbol starting from an IFeature.
+     *
+     * @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);
+
+    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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/Legend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/Legend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/Legend.java	(revision 46118)
@@ -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;
+
+import org.gvsig.tools.persistence.Persistent;
+
+
+public interface Legend extends Persistent, org.gvsig.tools.lang.Cloneable {
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+
+/**
+ * Information about the legend to be represented in the interface.
+ *
+ */
+public interface ILegend extends Legend {
+
+    /**
+     * Obtains the default symbol of the legend.
+     *
+     * @return default symbol.
+     * @deprecated if vectorial legend use IVectorLegend
+     */
+    ISymbol getDefaultSymbol();
+
+    /**
+     * Clones the legend.
+     *
+     * @return Cloned legend.
+     */
+    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
+     * @deprecated
+     */
+    public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event);
+
+    /**
+     * Obtains the listeners of a legend.
+     *
+     * @return LegendListener[] array composed by the listeners of a legend.
+     * @deprecated
+     */
+    public LegendContentsChangedListener[] getListeners();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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();
+
+	protected ZSort() {
+	}
+
+	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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEvent.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.layers.operations.ClassifiableVectorial;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface VectorLegendEvent extends LegendEvent {
+
+    /**
+     * <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 change on the classification of a legend.</p>
+     */
+    public static final int LEGEND_CLASSIFICATION_CHANGED = 204;
+
+    /**
+     * <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
+     *
+     */
+    public ClassifiableVectorial getLayer();
+
+    /**
+     * <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
+     *
+     */
+    public void setLayer(ClassifiableVectorial layer);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.rendering.legend.events;
+
+import java.util.Arrays;
+import java.util.List;
+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>
+ *
+ */
+public class LegendChangedEvent extends LegendEventBase {
+
+	/**
+	 * <p>Previous vector legend.</p>
+	 */
+	private final ILegend oldLegend;
+
+	/**
+	 * <p>New vector legend.</p>
+	 */
+	private final ILegend newLegend;
+
+	/**
+	 * <p>Events that constitute this one.</p>
+	 */
+	private List<LegendChangedEvent> events;
+
+        private FMapEvent sourceEvent;
+
+        /**
+	 * <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);
+	}
+
+	public static LegendChangedEvent createLegendChangedEvent(ILegend legend, FMapEvent event){
+            LegendChangedEvent e = new LegendChangedEvent(legend, legend, LEGEND_CHANGED);
+            e.setSourceEvent(event);
+            return e;
+	}
+
+	/**
+	 * <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.toArray(new LegendChangedEvent[this.events.size()]);
+	}
+
+	/**
+	 * <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.addAll(Arrays.asList(events));
+	}
+
+        public LegendChangedEvent addEvent(LegendChangedEvent event) {
+            this.events.add(event);
+            return this;
+        }
+
+        public void setSourceEvent(FMapEvent event) {
+            this.sourceEvent = event;
+        }
+
+        public FMapEvent getSourceEvent() {
+            return this.sourceEvent;
+        }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEventBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEventBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/LegendEventBase.java	(revision 46118)
@@ -0,0 +1,69 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.FMapEventBase;
+import org.gvsig.fmap.mapcontext.layers.operations.ClassifiableVectorial;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class LegendEventBase extends FMapEventBase implements LegendEvent{
+
+    private int eventSubtype;
+
+    public LegendEventBase() {
+    }
+
+    /**
+     * @param subtype
+     */
+    public LegendEventBase(int type, int subtype) {
+        setEventSubtype(subtype);
+        setEventType(type);
+    }
+
+    @Override
+    @Deprecated
+    public ClassifiableVectorial getLayer() {
+        return null;
+    }
+
+    @Override
+    @Deprecated
+    public void setLayer(ClassifiableVectorial layer) {
+    }
+
+    @Override
+    public int getEventSubtype() {
+        return this.eventSubtype;
+    }
+
+    @Override
+    public void setEventSubtype(int eventSubtype) {
+        this.eventSubtype = eventSubtype;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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 VectorLegendEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEventBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEventBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/rendering/legend/events/VectorLegendEventBase.java	(revision 46118)
@@ -0,0 +1,61 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.layers.operations.ClassifiableVectorial;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class VectorLegendEventBase extends LegendEventBase implements VectorLegendEvent{
+
+    private ClassifiableVectorial layer;
+
+    public VectorLegendEventBase() {
+
+    }
+
+    /**
+     * <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;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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 VectorLegendEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 interface LegendEvent extends FMapEvent {
+    /**
+     * <p>Identifies this event as a changed of a legend.</p>
+     */
+    public static final int LEGEND_CHANGED = 0;
+
+	/**
+	 * <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>
+     * @deprecated use VectorLegendEvent
+	 */
+	public static final int LEGEND_SYMBOL_CHANGED = 201;
+
+	/**
+	 * <p>Identifies this event as a legend interval change.</p>
+     * @deprecated use VectorLegendEvent
+     */
+	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>
+     * @deprecated use VectorLegendEvent
+     */
+	public static final int LEGEND_CLASSIFICATION_CHANGED = 204;
+
+	/**
+	 * <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
+	 *
+     * @deprecated use VectorLegendEvent
+	 */
+	public ClassifiableVectorial getLayer();
+
+	/**
+	 * <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
+	 *
+     * @deprecated use VectorLegendEvent
+	 */
+	public void setLayer(ClassifiableVectorial layer);
+
+    /**
+     * <p>Gets the subtype of this event.</p>
+     *
+     * @return the subtype of this event
+     */
+    public int getEventSubtype();
+    /**
+     * <p>Sets the subtype of the event.</p>
+     *
+     * @param eventSubtype the number that identifies this event's type
+     */
+    public void setEventSubtype(int eventSubtype);
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.rendering.legend;
+
+import java.awt.Color;
+import java.util.Map;
+
+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 void setIntervals(IInterval[] intervals);
+
+        public Map<IInterval,ISymbol> createSymbols(IInterval[] intervals);
+
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/*
+ * 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";
+    
+    public ISymbol loadSymbol(File file) throws SymbolException ;
+    
+	/**
+	 * 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,670 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.Iterator;
+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.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.type.GeometryType;
+import org.gvsig.fmap.geom.type.GeometryTypeNotSupportedException;
+import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
+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;
+
+/**
+ * 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 multiLayerSymbolsByName
+            = Collections.synchronizedMap(new HashMap());
+
+    private Map multiLayerSymbolsByShapeType
+            = 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.
+     */
+    public 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 = getSymbolName(symbolsByShapeType, 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 = getSymbolName(symbolsByShapeType, shapeType);
+
+        return symbolName == null ? null : createSymbol(symbolName, color);
+    }
+
+    public IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+            throws MapContextRuntimeException {
+        return (IMultiLayerSymbol) createSymbol(symbolName,
+                (Class) multiLayerSymbolsByName.get(symbolName),
+                IMultiLayerSymbol.class);
+    }
+
+    public IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+            throws MapContextRuntimeException {
+        String symbolName = getSymbolName(multiLayerSymbolsByShapeType, shapeType);
+
+        return symbolName == null ? null : createMultiLayerSymbol(symbolName);
+    }
+
+    /**
+     * @param shapeType
+     * @return
+     */
+    private String getSymbolName(Map symbols, int shapeType) {
+        String symbolName
+                = (String) symbols.get(new Integer(shapeType));
+        if (symbolName == null) {
+            GeometryManager geomManager = GeometryLocator.getGeometryManager();
+            GeometryType shapeGeometryType;
+                Iterator it = symbols.keySet().iterator();
+                while (it.hasNext()) {
+                    Integer geomType = (Integer) it.next();
+                  if (geomManager.isSubtype(geomType, shapeType)) {
+                      symbolName = (String) symbols.get(geomType);
+                      break;
+                  }
+                }
+        }
+        return 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);
+        }
+
+        multiLayerSymbolsByName.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++) {
+                multiLayerSymbolsByShapeType.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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.rendering.symbols.styles;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.net.URL;
+import org.gvsig.expressionevaluator.SymbolTable;
+
+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
+     * @throws java.io.IOException
+	 */
+	public void setSource(URL src) throws IOException;;
+	
+	
+	public Rectangle getBounds();
+        
+        public void setSymbolTable(SymbolTable symbolTable);
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,25 @@
+package org.gvsig.fmap.mapcontext.rendering.symbols;
+
+import org.gvsig.fmap.dal.feature.Feature;
+
+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.
+     * @return
+     */
+    public String getID();
+    
+    public Feature getFeature();
+    
+    public void setFeature(Feature feature);
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CantRetrieveLayerByStoreException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CantRetrieveLayerByStoreException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/exceptions/CantRetrieveLayerByStoreException.java	(revision 46118)
@@ -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;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class CantRetrieveLayerByStoreException extends LoadLayerException {
+    
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1442450896900126712L;
+
+    public CantRetrieveLayerByStoreException(String layerName, String storeName) {
+        super(
+                "Can't retrieve the class layer 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);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextRuntimeException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLocator.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Messages.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextLibrary.java	(revision 46118)
@@ -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;
+
+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.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.locator.ReferenceNotRegisteredException;
+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 LOGGER = LoggerFactory.getLogger(MapContextLibrary.class);
+
+  @Override
+    public void doRegistration() {
+        registerAsAPI(MapContextLibrary.class);
+        require(DALLibrary.class);
+        require(CompatLibrary.class);
+    }
+
+  @Override
+	protected void doInitialize() throws LibraryException {
+	}
+
+  @Override
+	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.SelfRegister() );
+            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());
+            }
+
+        // Validate there is any implementation registered.
+        if (!RasterLegendLocator.getInstance().exists(
+                RasterLegendLocator.RASTER_LEGEND_MANAGER_NAME)) {
+            throw new ReferenceNotRegisteredException(
+                    RasterLegendLocator.RASTER_LEGEND_MANAGER_NAME, RasterLegendLocator.getInstance());
+        }
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/MapContextManager.java	(revision 46118)
@@ -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.
+ */
+/*
+ * 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 javax.swing.Icon;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerInformationBuilder;
+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.raster.lib.legend.api.RasterLegend;
+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 interface CreateLayerParameters {
+
+        public DataStoreParameters getDataParameters();
+
+        public boolean useCache();
+
+        public ICoordTrans getCoordTrans();
+    }
+
+    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();
+
+    public boolean registerLayer(
+            Class<? extends DataStore> dataStoreClass,
+            Class<? extends FLayer> layerClass);
+
+    /**
+     * 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;
+
+    public FLayer createLayer(
+            String layerName,
+            CreateLayerParameters 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;
+
+    public FLayer createLayer(
+            String layerName,
+            DataStore store,
+            CreateLayerParameters parameters
+    ) 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;
+
+    public void registerLegend(String legendName, Class legendClass)
+            throws MapContextRuntimeException;
+
+    public ILegend createLegend(String legendName) throws MapContextRuntimeException;
+
+    public String getDefaultVectorLegend();
+
+    public void setDefaultVectorLegend(String legendName);
+
+    public String getDefaultRasterLegend();
+
+    public void setDefaultRasterLegend(String defaultRasterLegend);
+
+    public IVectorLegend createDefaultVectorLegend(int shapeType) throws MapContextRuntimeException;
+
+    public RasterLegend createDefaultRasterLegend(List<BandDescriptor> bands);
+
+    // ================================================================
+    // = 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
+     *
+     * @param legendClass
+     * @param format
+     * @return
+     * @throws org.gvsig.fmap.mapcontext.MapContextException
+     */
+    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)
+     *
+     * @param format
+     * @return
+     */
+    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();
+
+    // ================================================================
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    int getDefaultCartographicSupportMeasureUnit();
+
+    /**
+     * @param defaultCartographicSupportMeasureUnit
+     * @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    void setDefaultCartographicSupportMeasureUnit(
+            int defaultCartographicSupportMeasureUnit);
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    int getDefaultCartographicSupportReferenceSystem();
+
+    /**
+     * @param defaultCartographicSupportReferenceSystem
+     * @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    void setDefaultCartographicSupportReferenceSystem(
+            int defaultCartographicSupportReferenceSystem);
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    Color getDefaultSymbolColor();
+
+    /**
+     * @param defaultSymbolColor
+     * @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();
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    Color getDefaultSymbolFillColor();
+
+    /**
+     * @param defaultSymbolFillColor
+     * @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();
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    boolean isDefaultSymbolFillColorAleatory();
+
+    /**
+     * @param defaultSymbolFillColorAleatory
+     * @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();
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    Font getDefaultSymbolFont();
+
+    /**
+     * @param defaultSymbolFont
+     * @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();
+
+    /**
+     * @return @deprecated to be removed in gvSIG 2.0
+     * @see {@link SymbolPreferences}.
+     */
+    String getSymbolLibraryPath();
+
+    /**
+     * @param symbolLibraryPath
+     * @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();
+
+    /**
+     * @param symbolName
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    ISymbol createSymbol(String symbolName) throws MapContextRuntimeException;
+
+    /**
+     * @param shapeType
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    ISymbol createSymbol(int shapeType) throws MapContextRuntimeException;
+
+    /**
+     * @param symbolName
+     * @param color
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    ISymbol createSymbol(String symbolName, Color color)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param shapeType
+     * @param color
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    ISymbol createSymbol(int shapeType, Color color)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param symbolName
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    IMultiLayerSymbol createMultiLayerSymbol(String symbolName)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param shapeType
+     * @return
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    IMultiLayerSymbol createMultiLayerSymbol(int shapeType)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param symbolName
+     * @param symbolClass
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    void registerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param symbolName
+     * @param shapeTypes
+     * @param symbolClass
+     * @throws org.gvsig.fmap.mapcontext.MapContextException
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    void registerSymbol(String symbolName, int[] shapeTypes, Class symbolClass)
+            throws MapContextException;
+
+    /**
+     * @param symbolName
+     * @param symbolClass
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    void registerMultiLayerSymbol(String symbolName, Class symbolClass)
+            throws MapContextRuntimeException;
+
+    /**
+     * @param symbolName
+     * @param shapeTypes
+     * @param symbolClass
+     * @deprecated to be removed in gvSIG 2.0 @see {@link SymbolManager}
+     */
+    void registerMultiLayerSymbol(String symbolName, int[] shapeTypes,
+            Class symbolClass) throws MapContextRuntimeException;
+
+    /**
+     * @param message
+     * @param symbolDesc
+     * @param symbolDrawExceptionType
+     * @return
+     * @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);
+
+    String getIconLayer(String providerName);
+
+    // 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);
+
+    public LayerInformationBuilder createLayerInformationBuilder();
+
+    public Icon getIcon(int geometryType, boolean hasSelection);
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/Record.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/BaseCreateLayerParameters.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/BaseCreateLayerParameters.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/BaseCreateLayerParameters.java	(revision 46118)
@@ -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.mapcontext;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.dal.DataStoreParameters;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class BaseCreateLayerParameters implements MapContextManager.CreateLayerParameters {
+
+    private DataStoreParameters dataStoreParameters;
+    private boolean useCache;
+    private ICoordTrans coordTrans;
+
+    public BaseCreateLayerParameters() {
+        
+    }
+    
+    public BaseCreateLayerParameters(DataStoreParameters dataStoreParameters,boolean useCache,ICoordTrans coordTrans) {
+        this.coordTrans = coordTrans;
+        this.dataStoreParameters = dataStoreParameters;
+        this.useCache = useCache;
+    }
+
+    @Override
+    public DataStoreParameters getDataParameters() {
+        return this.dataStoreParameters;
+    }
+
+    @Override
+    public boolean useCache() {
+        return this.useCache;
+    }
+
+    @Override
+    public ICoordTrans getCoordTrans() {
+        return this.coordTrans;
+    }
+    
+    /**
+     * @param dataStoreParameters the dataStoreParameters to set
+     */
+    public void setDataStoreParameters(DataStoreParameters dataStoreParameters) {
+        this.dataStoreParameters = dataStoreParameters;
+    }
+
+    /**
+     * @param useCache the useCache to set
+     */
+    public void setUseCache(boolean useCache) {
+        this.useCache = useCache;
+    }
+
+    /**
+     * @param coordTrans the coordTrans to set
+     */
+    public void setCoordTrans(ICoordTrans coordTrans) {
+        this.coordTrans = coordTrans;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/ViewPort.java	(revision 46118)
@@ -0,0 +1,1896 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.List;
+import java.util.Objects;
+
+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 List<ViewPortListener> 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();
+  }
+
+    private Collection<ViewPortListener> getListeners() {
+        List<ViewPortListener> ll = Collections.unmodifiableList(listeners);
+        return ll;
+    }
+    
+  /**
+   * <p>
+   * Appends the specified {@link ViewPortListener ViewPortListener} listener if
+   * weren't.
+   * </p>
+   *
+   * @param listener the listener to add
+   * @return <code>true</code> if has been added successfully
+   * @see #removeViewPortListener(ViewPortListener)
+   */
+    public boolean addViewPortListener(ViewPortListener listener) {
+        if (listener == null) {
+            return false;
+        }
+        if( this.listeners.contains(listener) )  {
+            return false;
+        }
+        this.listeners.add(listener);
+        return true;
+    }
+
+  /**
+   * <p>
+   * Removes the specified {@link ViewPortListener ViewPortListener} listener,
+   * if existed.
+   * </p>
+   *
+   * @param listener the listener to remove
+   * @return <code>true</code> if the contained the specified listener.
+   * @see #addViewPortListener(ViewPortListener)
+   */
+    public boolean removeViewPortListener(ViewPortListener listener) {
+        if (listener == null) {
+            return false;
+        }
+        return this.listeners.remove(listener);
+    }
+
+  /**
+   * <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;
+
+    if( pScreen == null ) {
+        return null;
+    }
+    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 {
+        Point point = geomManager.createPoint(
+                p.getX(), 
+                p.getY(),
+                Geometry.SUBTYPES.GEOM2D
+        );
+        point.setProjection(this.getProjection());
+        return point;
+    }
+    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 {
+        Envelope envelope = geomManager.createEnvelope(
+                extent.getMinX(), 
+                extent.getMinY(),
+                extent.getMaxX(), 
+                extent.getMaxY(), 
+                SUBTYPES.GEOM2D
+        );
+        envelope.setProjection(this.proj);
+        return envelope;
+        // This class has to use Envelope instead of Rectangle2D. This catch
+        // will disappear
+    } catch (CreateEnvelopeException e) {
+      logger.warn("Error creating the ViewPort envelope.", e);
+    }
+    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;
+    try {
+        calculateAffineTransform();
+    } catch(Exception ex) {
+        this.extent = null;
+        throw ex;
+    }
+    extentsHistory.put(extent);
+
+
+    // 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 (ViewPortListener listener : this.getListeners()) {
+            if (listener != null) {
+                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 (ViewPortListener listener : this.getListeners()) {
+            if (listener != null) {
+                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 (ViewPortListener listener : this.getListeners()) {
+            if (listener != null) {
+                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 (ViewPortListener listener : this.getListeners()) {
+            if (listener != null) {
+                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) {
+      String msg = "Can't calculate affine transform for the view port." + "\n" +
+        "The extent can be out of range for this projection." + "\n" +
+        "transformada afin: " + Objects.toString(trans) + "\n" +
+        "extent: " + Objects.toString(extent) + "\n" +
+        "imageSize: " + Objects.toString(imageSize) + "\n" +
+        "projection: " + Objects.toString(proj) + "\n" +
+        e.getLocalizedMessage() 
+      ;
+      logger.error(msg, e);
+      trans.setToIdentity();
+      scale = 0;
+      adjustedExtent = null;
+      adjustableExtent = true;
+      throw new RuntimeException(msg, 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 (adjustedExtent == null) {
+            calculateAffineTransform();
+        }
+        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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1359 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.function.Predicate;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+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.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+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.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
+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.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.Visitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <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<FLayer> {
+
+    /**
+     * List with all listeners registered for this kind of node.
+     */
+    protected ArrayList<LayerCollectionListener> layerCollectionListeners = null;
+
+    /**
+     * A synchronized list with the layers.
+     */
+    protected List<FLayer> layers = null;
+
+    protected MapContext fmap;
+
+    /**
+     * Useful for debug the problems during the implementation.
+     */
+    private static final Logger LOGGER = LoggerFactory.getLogger(FLayers.class);
+    
+    public static final Predicate<FLayer> LAYER_ACTIVE = new Predicate<FLayer>() {
+        @Override
+        public boolean test(FLayer layer) {
+            return layer.isActive();
+        }
+    };
+
+    public static final Predicate<FLayer> LAYER_AVALAIBLE = new Predicate<FLayer>() {
+        @Override
+        public boolean test(FLayer layer) {
+            return layer.isAvailable();
+        }
+    };
+
+    public static Predicate<FLayer> LAYER_FLYRVECT = new Predicate<FLayer>() {
+        @Override
+        public boolean test(FLayer layer) {
+            return layer instanceof FLyrVect;
+        }
+    };
+    public static Predicate<FLayer> LAYER_SELECTION_AVAILABLE = new Predicate<FLayer>() {
+        @Override
+        public boolean test(FLayer layer) {
+            if (layer instanceof FLyrVect) {
+                try {
+                    FeatureStore store = ((FLyrVect) layer).getFeatureStore();
+                    if (store.getFeatureSelection().isAvailable()) {
+                        return true;
+                    }
+                } catch (Exception ex) {
+                    return false;
+                }
+            }
+            return false;
+        }
+    };
+    
+    public static Predicate<FLayer> LAYER_SELECTION_EMPTY = new Predicate<FLayer>() {
+        @Override
+        public boolean test(FLayer layer) {
+            if (layer instanceof FLyrVect) {
+                try {
+                    FeatureStore store = ((FLyrVect) layer).getFeatureStore();
+                    FeatureSelection selection = store.getFeatureSelection();
+                    if (!selection.isAvailable() || selection.isEmpty()) {
+                        return true;
+                    }
+                    return false;
+                } catch (Exception ex) {
+                    return true;
+                }
+            } else {
+                return true;
+            }
+        }
+    };
+
+    public FLayers() {
+        super();
+        layerCollectionListeners = new ArrayList();
+        layers = Collections.synchronizedList(new ArrayList());
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    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);
+        }
+    }
+    
+    public void addLayer(DataStore store) {
+        FLayer layer;
+        try {
+            layer = MapContextLocator.getMapContextManager().createLayer(
+                    store.getName(),
+                    store
+            );
+            
+        } catch (LoadLayerException ex) {
+            throw new RuntimeException("Can't create layer from store.", ex);
+        }
+        this.addLayer(layer);
+    }
+
+    /**
+     * Adds a layer in an specified position in this node.
+     *
+     * @param pos
+     * @param layer a layer
+     */
+    public void addLayer(int pos, FLayer layer) {
+        try {
+            if (layer instanceof FLayers) {
+                FLayers layersToAdd = (FLayers) layer;
+                if( fmap != null ) {
+                    fmap.addAsCollectionListener(layersToAdd);
+                }
+            }
+            callLayerAdding(LayerCollectionEvent.createLayerAddingEvent(layer));
+
+            doAddLayer(pos, layer);
+
+            callLayerAdded(LayerCollectionEvent.createLayerAddedEvent(layer));
+        } catch (CancelationException e) {
+            LOGGER.warn(e.getMessage());
+        }
+    }
+
+    @Override
+    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();
+    }
+
+    @Override
+    public void removeLayer(FLayer lyr) throws CancelationException {
+        callLayerRemoving(LayerCollectionEvent.createLayerRemovingEvent(lyr));
+        doRemoveLayer(lyr);
+        callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(lyr));
+    }
+
+    @Override
+    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));
+    }
+
+    @Override
+    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
+     * @throws org.gvsig.fmap.mapcontext.exceptions.LoadLayerException
+     * @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
+     * @throws org.gvsig.fmap.mapcontext.exceptions.LoadLayerException
+     */
+    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);
+            }
+        }
+    }
+
+    @Override
+    public FLayer[] getVisibles() {
+        ArrayList array = new ArrayList();
+        LayersIterator iter = new LayersIterator(this) {
+            @Override
+            public boolean evaluate(FLayer layer) {
+                return layer.isVisible();
+            }
+
+        };
+
+        while (iter.hasNext()) {
+            array.add(iter.nextLayer());
+        }
+
+        return (FLayer[]) array.toArray(new FLayer[0]);
+    }
+
+    @Override
+    public FLayer getLayer(int index) {
+        return (FLayer) layers.get(index);
+    }
+
+    @Override
+    public FLayer getLayer(final String layerName) {
+        if( StringUtils.isBlank(layerName) ) {
+            return null;
+        }
+        for (FLayer layer : this.layers) {
+            if( layer!=null && StringUtils.equalsIgnoreCase(layer.getName(), layerName) ) {
+                return layer;
+            }
+            if( layer instanceof FLayers ) {
+                List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
+                    @Override
+                    public boolean test(FLayer layer) {
+                        return StringUtils.equalsIgnoreCase(layer.getName(), layerName);                        
+                    }
+                });
+                if( theLayers.isEmpty() ) {
+                    return null;
+                }
+                return theLayers.get(0);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public FLayer getLayer(final DataStore store) {
+        List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                return  layer instanceof SingleLayer && store == ((SingleLayer) layer).getDataStore();
+            }
+        });
+        if( theLayers.isEmpty() ) {
+            return null;
+        }
+        return theLayers.get(0);
+    }
+    
+    private List<FLayer> toPlainList(FLayer layer) {
+        return toPlainList(layer, new ArrayList<FLayer>(), null);
+    }
+
+    private List<FLayer> toPlainList(FLayer layer, Predicate<FLayer> filter) {
+        return toPlainList(layer, new ArrayList<FLayer>(), filter);
+    }
+
+    private List<FLayer> toPlainList(FLayer layer, List<FLayer> result, Predicate<FLayer> filter) {
+        if (layer instanceof FLayers) {
+            FLayers layerGroup = (FLayers) layer;
+            if (filter == null || filter.test(layer)) {
+                result.add(layer);
+            }
+            for (int i = 0; i < layerGroup.getLayersCount(); i++) {
+                toPlainList(layerGroup.getLayer(i), result, filter);
+            }
+        } else if( filter==null || filter.test(layer) ) {
+            result.add(layer);
+        }
+        return result;
+    }
+
+    @Override
+    public int getLayersCount() {
+        return layers.size();
+    }
+
+    @Override
+    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)
+     */
+    @Override
+    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>
+     * @throws org.gvsig.fmap.dal.exception.ReadException
+     *
+     * @see FLayer#print(Graphics2D, ViewPort, Cancellable, double,
+     * PrintAttributes)
+     */
+    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();
+        switch (resolution) {
+            case PrintAttributes.PRINT_QUALITY_NORMAL:
+                dpi = 300;
+                break;
+            case PrintAttributes.PRINT_QUALITY_HIGH:
+                dpi = 600;
+                break;
+            case PrintAttributes.PRINT_QUALITY_DRAFT:
+                dpi = 72;
+                break;
+            default:
+                break;
+        }
+
+        // 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 {
+
+                // 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);
+
+                    }
+                }
+
+            } catch (Exception e) {
+                String mesg = Messages.getString("error_printing_layer") + " " + lyr.getName() + ": " + e.getMessage();
+                if( fmap!=null ) {
+                    fmap.addLayerError(mesg);
+                }
+                LOGGER.error(mesg, e);
+            }
+
+        }
+
+        if (group != null && this.getParentLayer() == null) {
+            //si tenemos un grupo pendiente de pintar, pintamos
+            group.print(g, viewPort, cancel, scale, properties);
+            group = null;
+
+        }
+        return group;
+    }
+
+    @Override
+    @SuppressWarnings("UseSpecificCatch")
+    public Envelope getFullEnvelope() {
+        Envelope rAux = null;
+        boolean first = true;
+
+        for (FLayer capa : layers) {
+            try {
+                if (first) {
+                    rAux = (Envelope) capa.getFullEnvelope().clone();
+                    first = false;
+                } else {
+                    rAux.add(capa.getFullEnvelope());
+                }
+            } catch (Exception e) {
+                LOGGER.warn("Can't calculate the envelope of the layer group '"+this.getName()+"'.",e);
+            }
+        }
+
+        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 event 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 event 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 event 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 event 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);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+
+        super.saveToState(state);
+
+        state.set("mapContext", fmap);
+
+        List layersToSave = new ArrayList();
+        for (FLayer layer : this.layers) {
+            if (!layer.isTemporary()) {
+                layersToSave.add(layer);
+            }
+        }
+        state.set("layers", layersToSave);
+    }
+
+    @Override
+    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();
+            // Cuando falla la carga de la capa desde la persistencia, puede
+            // haberse perdido quien es el parent. Asi que lo asignamos aqui
+            // por si acaso.
+            item.setParentLayer(this);
+            layers.add(item);
+        }
+    }
+
+    @Override
+    public MapContext getMapContext() {
+        return fmap;
+    }
+
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    public List<FLayer> getLayers(Predicate<FLayer> filter) {
+        List<FLayer> theLayers = this.toPlainList(this, filter);
+        return theLayers;
+    }
+    
+    @Override
+    public FLayer[] getActives() {
+        List<FLayer> activeLayers = this.getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                return layer.isActive();
+            }
+        });
+        return (FLayer[]) activeLayers.toArray(new FLayer[activeLayers.size()]);
+    }
+                   
+    @Override
+    public double getMinScale() {
+        return -1; // La visibilidad o no la controla cada capa
+        // dentro de una colecci�n
+    }
+
+    @Override
+    public double getMaxScale() {
+        return -1;
+    }
+
+    @Override
+    public void setMinScale(double minScale) {
+        for (FLayer lyr : layers) {
+            lyr.setMinScale(minScale);
+        }
+    }
+
+    @Override
+    public void setMaxScale(double maxScale) {
+        for (FLayer lyr : layers) {
+            lyr.setMinScale(maxScale);
+        }
+    }
+
+    @Override
+    public void setActive(boolean b) {
+        super.setActive(b);
+        for (FLayer layer : this.layers) {
+            layer.setActive(b);
+        }
+    }
+
+    @Override
+    public boolean addLayerListener(LayerListener o) {
+        for (FLayer layer : this.layers) {
+            layer.addLayerListener(o);
+        }
+        return true;
+    }
+
+    @Override
+    public DynObjectSet getInfo(Point p, double tolerance,
+            Cancellable cancel) throws LoadLayerException, DataException {
+        return getInfo(this.getMapContext().getViewPort().convertToMapPoint(p), tolerance);
+    }
+
+    @Override
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel,
+            boolean fast) throws LoadLayerException, DataException {
+        return getInfo(this.getMapContext().getViewPort().convertToMapPoint(p), tolerance);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public String getTocImageIcon() {
+        return "layer-icon-group";
+    }
+
+    /**
+     * <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;
+        for (FLayer lyr : this.layers) {
+            if(lyr instanceof FLayers){
+                ((FLayers)lyr).setMapContext(mapContext);
+            }
+        }
+    }
+
+    @Override
+    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;
+//            }
+        }
+    }
+
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    public Object getMetadataID() throws MetadataException {
+        StringBuilder strb = new StringBuilder();
+        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();
+
+    }
+
+    @Override
+    public Set getMetadataChildren() {
+        Set ret = new TreeSet();
+        Iterator iter = this.layers.iterator();
+        while (iter.hasNext()) {
+            ret.add(iter.next());
+        }
+        return ret;
+    }
+
+    @Override
+    public String getMetadataName() throws MetadataException {
+        StringBuilder strb = new StringBuilder();
+        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();
+    }
+
+    @Override
+    public void beginDraw(Graphics2D g, ViewPort viewPort) {
+        if( fmap == null ) {
+            return;
+        }
+        LayerDrawEvent beforeEvent = new LayerDrawEvent(this, g, viewPort, LayerDrawEvent.LAYER_BEFORE_DRAW);
+        fmap.fireLayerDrawingEvent(beforeEvent);
+    }
+
+    @Override
+    public void endDraw(Graphics2D g, ViewPort viewPort) {
+        if( fmap == null ) {
+            return;
+        }
+        LayerDrawEvent afterEvent = new LayerDrawEvent(this, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW);
+        fmap.fireLayerDrawingEvent(afterEvent);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        @Override
+        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;
+        }
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        if (layers != null) {
+            for (FLayer layer : this.layers) {
+                dispose(layer);
+            }
+        }
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    public void move(FLayer layer, LayerCollection group) {
+        try {
+            move(layer, group, END, null);
+        } catch (LayerNotFoundInCollectionException e) {
+            throw new MapContextRuntimeException(e);
+        }
+    }
+
+    @Override
+    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;
+        }
+
+    }
+
+    public FLayer getFirstActiveLayer() {
+        List<FLayer> theLayers = this.getLayers(LAYER_ACTIVE);
+        if( theLayers.isEmpty() ) {
+            return null;
+        }
+        return theLayers.get(0);
+    }
+
+    public FLyrVect getFirstActiveVectorLayer() {
+        List<FLayer> theLayers = this.getLayers(LAYER_ACTIVE.and(LAYER_FLYRVECT));
+        if( theLayers.isEmpty() ) {
+            return null;
+        }
+        return (FLyrVect) theLayers.get(0);
+    }
+    
+    @Override
+    public Iterator<FLayer> iterator() {
+        return this.layers.iterator();
+    }
+
+    public Iterator<FLayer> deepiterator() {
+        List theLayers = toPlainList(this);
+        return theLayers.iterator();
+    }
+    
+    @Override
+    public int size() {
+        return this.layers.size();
+    }
+    
+    @Override
+    public FLayer get(int index) {
+        return this.layers.get(index);
+    }
+    
+    @Override
+    public boolean isEmpty() {
+        return this.layers.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+        return this.layers.contains(o);
+    }
+
+    @Override
+    public Object[] toArray() {
+        return this.layers.toArray();
+    }
+
+    @Override
+    public Object[] toArray(Object[] ts) {
+        return this.layers.toArray(ts);
+    }
+
+    @Override
+    public boolean add(FLayer e) {
+        this.addLayer(e);
+        return true;
+    }
+
+    @Override
+    public boolean remove(Object o) {
+        this.removeLayer((FLayer) o);
+        return true;
+    }
+
+    @Override
+    public boolean containsAll(Collection clctn) {
+        return this.layers.containsAll(clctn);
+    }
+
+    @Override
+    public void add(int i, FLayer e) {
+        this.addLayer(i, (FLayer) e);
+    }
+
+    @Override
+    public FLayer remove(int i) {
+        FLayer o = this.getLayer(i);
+        this.removeLayer(i);
+        return o;
+    }
+
+    @Override
+    public int indexOf(Object o) {
+        return this.layers.indexOf(o);
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+        return this.layers.lastIndexOf(o);
+    }
+
+    @Override
+    public ListIterator listIterator() {
+        return this.layers.listIterator();
+    }
+
+    @Override
+    public ListIterator listIterator(int i) {
+        return this.layers.listIterator(i);
+    }
+
+    @Override
+    public List subList(int i, int i1) {
+        return this.layers.subList(i, i1);
+    }
+    
+    @Override
+    public boolean addAll(Collection clctn) {
+        Iterator it = clctn.iterator();
+        while( it.hasNext() ) {
+            this.add((FLayer) it.next());
+        }
+        return true;
+    }
+
+    @Override
+    public boolean addAll(int i, Collection clctn) {
+        Iterator it = clctn.iterator();
+        while( it.hasNext() ) {
+            this.add(i, (FLayer) it.next());
+        }
+        return true;
+    }
+
+    @Override
+    public boolean removeAll(Collection clctn) {
+        Iterator it = clctn.iterator();
+        while( it.hasNext() ) {
+            this.remove((FLayer) it.next());
+        }
+        return true;
+    }
+
+    @Override
+    public boolean retainAll(Collection clctn) {
+        Iterator it = this.layers.iterator();
+        while( it.hasNext() ) {
+            Object o = it.next();
+            if( !clctn.contains(o) ) {
+                this.remove((FLayer) o);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public FLayer set(int i, FLayer e) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    public FLayers createFLayerGroup(String name) {            
+        FLayers group = new FLayers();
+        group.setMapContext(this.getMapContext());
+        group.setParentLayer(this);
+        group.setName(name);
+        return group;
+    }
+
+    @Override
+    public FLayers cloneLayer() throws Exception {
+        FLayers cloned = new FLayers();
+        
+        cloned.fmap = this.fmap;
+        for (FLayer layer : this.layers) {
+            FLayer l = layer.cloneLayer();
+            l.setParentLayer(cloned);
+            cloned.add(l);
+        }
+        for (LayerCollectionListener layerCollectionListener : this.layerCollectionListeners) {
+            cloned.addLayerCollectionListener(layerCollectionListener);
+        }
+        for (LayerListener layerListener : this.layerListeners) {
+            cloned.addLayerListener(layerListener);
+        }
+        cloned.setTransparency(this.getTransparency());
+        cloned.setMaxScale(this.getMaxScale());
+        cloned.setMinScale(this.getMinScale());
+        cloned.setCoordTrans(this.getCoordTrans());
+        cloned.setFLayerStatus(this.getFLayerStatus());
+        cloned.setTemporary(this.isTemporary());
+        cloned.setTocStatusImage(this.getTocStatusImage());
+        cloned.metadataContainer = this.metadataContainer;
+        cloned.setParentLayer(this.getParentLayer());
+        cloned.properties = this.properties;
+        
+        return cloned;
+    }
+
+    @Override
+    public void clear() {
+        //Don't clear layer list for compatibility with older code
+//        this.layers.clear();
+        super.clear();
+    }
+
+    public void clearMetadata() {
+        super.clear();
+    }
+
+    /**
+     * Remove all layers of this object.
+     */
+    public void clearLayers() {
+        this.layers.clear();
+        this.updateDrawVersion();
+    }
+    
+    
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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
+ * @deprecated use layers.deepiterator
+ *
+ */
+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.344/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.344/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.344/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.344/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 46118)
@@ -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.layers;
+
+import java.util.ConcurrentModificationException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * <p>Manages all legend listeners of a layer, notifying them any legend change event produced.</p>
+ *
+ */
+public class LayerChangeSupport {
+        private static final Logger logger = LoggerFactory.getLogger(LayerChangeSupport.class);
+	/**
+	 * <p>The legend listeners of a layer.</p>
+	 */
+	private final Set<LegendListener> listeners = new HashSet<>();
+
+	/**
+	 * <p>Registers a <code>LegendListener</code>.</p>
+	 * 
+	 * @param listener the legend listener
+	 */
+	public void addLayerListener(LegendListener listener) {
+            if( listener == null ) {
+                return;
+            }
+            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 (int i = 0; i < 10; i++) {
+                try {
+                    for (LegendListener listener : listeners) {
+                        try {
+                            listener.legendChanged(e);
+                        } catch(Exception ex) {
+                            logger.warn("Error calling listener '"+listener.toString()+"'.",ex);
+                        }
+                    break;
+                    }
+                } catch (ConcurrentModificationException ex) {
+                    continue;
+                }
+            }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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 overflown = false;
+	
+	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()) {
+                    if (getMaxFeatures() >= size()) {
+                        this.index.insert(bounds, geom);
+			fastNumTotalRegs++;
+                    } else {
+                        overflown = true;
+                    }
+		}
+	}
+
+	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()) {
+                    if (getMaxFeatures() >= size()) {
+			this.index.insert(itemEnv, item);
+			fastNumTotalRegs++;
+                    } else {
+                        overflown = true;
+                    }
+		}
+	}
+
+	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;
+                overflown = false;
+	}
+
+	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;
+	}
+        
+        public boolean isOverflown() {
+            return overflown;
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,571 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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();
+
+        /**
+	 * Returns layer tolerance in pixels
+	 *
+	 * @return layer tolerance
+	 *
+	 */
+        public int getDefaultTolerance();
+        
+	/**
+	 * 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 Throwable 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(Throwable exception);
+
+    public void setError(Throwable ex);
+        
+	/**
+	 * Returns a list with all layer errors.
+	 *
+	 * @return an <code>ArrayList</code> with the errors
+	 *
+	 * @see #getError(int)
+	 * @see #getNumErrors()
+	 */
+	public List<Throwable> 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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerInformationBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerInformationBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/LayerInformationBuilder.java	(revision 46118)
@@ -0,0 +1,118 @@
+package org.gvsig.fmap.mapcontext.layers;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+
+public interface LayerInformationBuilder {
+
+    public interface Element {
+
+        public String build();
+    }
+
+    public interface TitleElement extends Element {
+
+        public TitleElement label(String label);
+        public TitleElement labelkey(String labelkey);
+    }
+
+    public interface RawElement extends Element {
+
+        public RawElement value(String format, Object... args);
+
+        public RawElement value(IProjection proj);
+
+        public RawElement value(Envelope env);
+
+        public RawElement value(Geometry geom);
+
+        public RawElement asWKT(IProjection proj);
+
+        public RawElement asWKT(Envelope env);
+
+        public RawElement asWKT(Geometry geom);
+    }
+
+    public interface TextElement extends RawElement {
+
+        @Override
+        public TextElement value(String format, Object... args);
+
+        @Override
+        public TextElement value(IProjection proj);
+
+        @Override
+        public TextElement value(Envelope env);
+
+        @Override
+        public TextElement value(Geometry geom);
+
+        @Override
+        public TextElement asWKT(IProjection proj);
+
+        @Override
+        public TextElement asWKT(Envelope env);
+
+        @Override
+        public TextElement asWKT(Geometry geom);
+    }
+
+    public interface PropertyElement extends TextElement {
+
+        public PropertyElement monospace();
+        
+        public PropertyElement label(String label);
+
+        public PropertyElement labelkey(String labelkey);
+
+        @Override
+        public PropertyElement value(String format, Object... args);
+
+        @Override
+        public PropertyElement value(IProjection proj);
+
+        @Override
+        public PropertyElement value(Envelope env);
+
+        @Override
+        public PropertyElement value(Geometry geom);
+
+        @Override
+        public PropertyElement asWKT(IProjection proj);
+
+        @Override
+        public PropertyElement asWKT(Envelope env);
+
+        @Override
+        public PropertyElement asWKT(Geometry geom);
+    }
+
+    public interface EnvelopeElement extends Element {
+
+        public EnvelopeElement value(Envelope value);
+    }
+
+    public LayerInformationBuilder backgroundColor(String color);
+
+    public LayerInformationBuilder backgroundColorTitle(String color);
+
+    public LayerInformationBuilder backgroundColorPropertyLabel(String color);
+
+    public LayerInformationBuilder backgroundColorPropertyValue1(String color);
+
+    public LayerInformationBuilder backgroundColorPropertyValue2(String color);
+
+    public TitleElement title();
+
+    public PropertyElement property();
+
+    public TextElement text();
+
+    public RawElement raw();
+
+    public EnvelopeElement envelope();
+
+    public String build();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.FMapEventBase;
+
+
+/**
+ * <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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.FMapEventBase;
+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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DefaultLayerInformationBuilder.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DefaultLayerInformationBuilder.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/DefaultLayerInformationBuilder.java	(revision 46118)
@@ -0,0 +1,402 @@
+package org.gvsig.fmap.mapcontext.layers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.ToolsLocator;
+
+public class DefaultLayerInformationBuilder implements LayerInformationBuilder {
+
+    private String backgroundColor = "\"#FFFFFF\"";
+    private String backgroundColorTitle = "\"#FBFFE1\""; // light yellow
+    private String backgroundColorPropertyLabel = "\"#D6D6D6\""; // Gris
+    private String backgroundColorPropertyValue1 = "\"#FEEDD6\""; // light salmon
+    private String backgroundColorPropertyValue2 = "\"#EAEAEA\""; // light grey
+
+    private int propertyCount = 0;
+    private final List<Element> elements;
+
+    private class DefaultTitleElement implements TitleElement {
+
+        private String label;
+
+        @Override
+        public DefaultTitleElement label(String label) {
+            this.label = StringEscapeUtils.escapeHtml3(label);
+            return this;
+        }
+
+        @Override
+        public TitleElement labelkey(String labelkey) {
+            return label(ToolsLocator.getI18nManager().getTranslation(labelkey));
+        }
+
+        @Override
+        public String build() {
+            propertyCount = 0;
+            return "<tr valign=\"middle\" >"
+                    + "<td bgcolor=" + backgroundColorTitle + " align=\"center\" colspan=\"2\"><font face=\"Arial\" size=\"3\"><b> " + this.label + "</b></font></td>"
+                    + "</tr>";
+        }
+    }
+
+    private class DefaultRawElement implements RawElement {
+
+        protected String value;
+
+        @Override
+        public RawElement value(String format, Object... args) {
+            if (args == null) {
+                this.value = format;
+            } else {
+                this.value = String.format(format, args);
+            }
+            return this;
+        }
+
+        @Override
+        public RawElement value(Envelope env) {
+            return asWKT(env);
+        }
+
+        @Override
+        public RawElement value(Geometry geom) {
+            return asWKT(geom);
+        }
+
+        @Override
+        public RawElement value(IProjection proj) {
+            if( proj == null ) {
+                return value("");
+            }
+            return value(proj.getAbrev());
+        }
+
+        @Override
+        public RawElement asWKT(IProjection proj) {
+            if( proj == null ) {
+                return value("");
+            }
+            String s = proj.export(ICRSFactory.FORMAT_WKT);
+            if (s == null) {
+                s = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
+            }
+            if (s == null) {
+                s = proj.export(ICRSFactory.FORMAT_PROJ4);
+            }
+            if (s == null) {
+                s = proj.getAbrev();
+            }
+            if (s != null) {
+                s = s.replaceAll("\\[", "[\n  ");
+                s = s.replaceAll("]", "\n]");
+            }
+            return value(s);
+        }
+
+        @Override
+        public RawElement asWKT(Envelope env) {
+            if( env == null ) {
+                return value("");
+            }
+            return asWKT(env.getGeometry());
+        }
+
+        @Override
+        public RawElement asWKT(Geometry geom) {
+            String s = "";
+            try {
+                s = geom.convertToWKT();
+            } catch (Exception ex) {
+            }
+            return value(s);
+        }
+
+        @Override
+        public String build() {
+            String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2;
+            String content = "<tr valign=\"top\">\n";
+            content += "<td bgcolor=" + color + "align=\"left\" colspan=\"2\"><font face=\"Arial\" size=\"3\"><div>" + value.replace("\\n",  "<br>\n") + "</div></font></td>\n";
+            content += "</tr>\n";
+            return content;
+        }
+    }
+
+    private class DefaultTextElement extends DefaultRawElement implements TextElement {
+
+        @Override
+        public TextElement value(String format, Object... args) {
+            if (args == null) {
+                this.value = StringEscapeUtils.escapeHtml3(format);
+            } else {
+                this.value = StringEscapeUtils.escapeHtml3(String.format(format, args));
+            }
+            return this;
+        }
+
+        @Override
+        public TextElement value(IProjection proj) {
+            return (TextElement) super.value(proj);
+        }
+
+        @Override
+        public TextElement value(Envelope env) {
+            return (TextElement) super.value(env);
+        }
+
+        @Override
+        public TextElement value(Geometry geom) {
+            return (TextElement) super.value(geom);
+        }
+
+        @Override
+        public TextElement asWKT(IProjection proj) {
+            return (TextElement) super.asWKT(proj);
+        }
+
+        @Override
+        public TextElement asWKT(Envelope env) {
+            return (TextElement) super.asWKT(env);
+        }
+
+        @Override
+        public TextElement asWKT(Geometry geom) {
+            return (TextElement) super.asWKT(geom);
+        }
+
+        @Override
+        public String build() {
+            String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2;
+            String content = "<tr valign=\"top\">\n";
+            content += "<td bgcolor=" + color + "align=\"left\" colspan=\"2\"><font face=\"Arial\" size=\"3\">" + value.replace("\n",  "<br>\n") + "</font></td>\n";
+            content += "</tr>\n";
+            return content;
+        }
+    }
+
+    private class DefaultPropertyElement extends DefaultTextElement implements PropertyElement {
+
+        private String label;
+        private boolean monospace = false;
+
+        @Override
+        public DefaultPropertyElement label(String label) {
+            this.label = StringEscapeUtils.escapeHtml3(label);
+            return this;
+        }
+
+        @Override
+        public PropertyElement labelkey(String labelkey) {
+            return label(ToolsLocator.getI18nManager().getTranslation(labelkey));
+        }
+
+        @Override
+        public PropertyElement value(IProjection proj) {
+            if (this.label == null) {
+                this.labelkey("_CRS");
+            }
+            if( proj == null ) {
+                return (PropertyElement) value("");
+            }
+            return (PropertyElement) value(proj.getAbrev());
+        }
+
+        @Override
+        public String build() {
+            String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2;
+            String content = "<tr valign=\"top\">\n";
+            if (!StringUtils.isEmpty(label)) {
+                content += "<td nowrap bgcolor=" + backgroundColorPropertyLabel + "align=\"right\" width=\"140\"><font face=\"Arial\" size=\"3\">" + label + ":&nbsp;</font></td>\n";
+            }
+            if( this.monospace ) {
+                content += "<td bgcolor=" + color + "align=\"left\"><font face=\"Monospaced\" size=\"3\">" + value.replace("\\n",  "<br>\n") + "</font></td>";
+            } else {
+                content += "<td bgcolor=" + color + "align=\"left\"><font face=\"Arial\" size=\"3\">" + value.replace("\\n",  "<br>\n") + "</font></td>";
+            }
+            content += "</tr>\n";
+            return content;
+        }
+
+        @Override
+        public PropertyElement value(String format, Object... args) {
+            return (PropertyElement) super.value(format, args);
+        }
+
+        @Override
+        public PropertyElement value(Envelope env) {
+            return (PropertyElement) super.value(env);
+        }
+
+        @Override
+        public PropertyElement value(Geometry geom) {
+            return (PropertyElement) super.value(geom);
+        }
+
+        @Override
+        public PropertyElement asWKT(IProjection proj) {
+            return (PropertyElement) super.asWKT(proj);
+        }
+
+        @Override
+        public PropertyElement asWKT(Envelope env) {
+            return (PropertyElement) super.asWKT(env);
+        }
+
+        @Override
+        public PropertyElement asWKT(Geometry geom) {
+            return (PropertyElement) super.asWKT(geom);
+        }
+
+        @Override
+        public PropertyElement monospace() {
+            this.monospace = true;
+            return this;
+        }
+    }
+
+    private class DefaultEnvelopeElement implements EnvelopeElement {
+
+        private Envelope value;
+
+        @Override
+        public DefaultEnvelopeElement value(Envelope value) {
+            this.value = value;
+            return this;
+        }
+
+        @Override
+        public String build() {
+            if( value == null ) {
+                return new DefaultTextElement().value("None").build();
+            } else {
+                PropertyElement p1 = new DefaultPropertyElement();
+                p1.labelkey("_upper_left_corner");
+                p1.value("%+f, %+f", value.getMinimum(DIMENSIONS.X), value.getMaximum(DIMENSIONS.Y));
+                p1.monospace();
+
+                PropertyElement p2 = new DefaultPropertyElement();
+                p2.labelkey("_upper_right_corner");
+                p2.value("%+f, %+f", value.getMaximum(DIMENSIONS.X), value.getMaximum(DIMENSIONS.Y));
+                p2.monospace();
+
+                PropertyElement p3 = new DefaultPropertyElement();
+                p3.labelkey("_lower_right_corner");
+                p3.value("%+f, %+f", value.getMaximum(DIMENSIONS.X), value.getMinimum(DIMENSIONS.Y));
+                p3.monospace();
+
+                PropertyElement p4 = new DefaultPropertyElement();
+                p4.labelkey("_lower_left_corner");
+                p4.value("%+f, %+f", value.getMinimum(DIMENSIONS.X), value.getMinimum(DIMENSIONS.Y));
+                p4.monospace();
+
+                return p1.build() + p2.build() + p3.build() + p4.build();
+            }
+        }
+
+    }
+
+    public DefaultLayerInformationBuilder() {
+        this.elements = new ArrayList<>();
+    }
+
+    @Override
+    public DefaultLayerInformationBuilder backgroundColor(String color) {
+        this.backgroundColor = color;
+        return this;
+    }
+
+    @Override
+    public DefaultLayerInformationBuilder backgroundColorTitle(String color) {
+        this.backgroundColorTitle = color;
+        return this;
+    }
+
+    @Override
+    public DefaultLayerInformationBuilder backgroundColorPropertyLabel(String color) {
+        this.backgroundColorPropertyLabel = color;
+        return this;
+    }
+
+    @Override
+    public DefaultLayerInformationBuilder backgroundColorPropertyValue1(String color) {
+        this.backgroundColorPropertyValue1 = color;
+        return this;
+    }
+
+    @Override
+    public DefaultLayerInformationBuilder backgroundColorPropertyValue2(String color) {
+        this.backgroundColorPropertyValue2 = color;
+        return this;
+    }
+
+    @Override
+    public TitleElement title() {
+        TitleElement element = new DefaultTitleElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public PropertyElement property() {
+        PropertyElement element = new DefaultPropertyElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public TextElement text() {
+        TextElement element = new DefaultTextElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public EnvelopeElement envelope() {
+        EnvelopeElement element = new DefaultEnvelopeElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public RawElement raw() {
+        RawElement element = new DefaultRawElement();
+        this.elements.add(element);
+        return element;
+    }
+
+    @Override
+    public String build() {
+        StringBuilder html = new StringBuilder();
+        html.append("<html>\n");
+        html.append("<body bgcolor=").append(backgroundColor).append(" topmargin=\"0\" marginheight=\"0\">\n");
+        html.append("<table cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">");
+        boolean first = true;
+        for (Element element : elements) {
+            if( element instanceof TitleElement ) {
+                if( first ) {
+                    first = false;
+                } else {
+                    html.append("<tr>\n<td><br></td>\n<td></td></tr>\n");
+                }
+            }
+            html.append(element.build());
+        }
+        html.append("</table>");
+        html.append("</body>");
+        html.append("</html>");
+        return html.toString();
+    }
+
+    @Override
+    public String toString() {
+        return this.build();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.layers.operations;
+
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.HasDataStore;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+public interface SingleLayer extends FLayer, HasDataStore {
+	/**
+	 * 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
+	 *
+	 * @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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.mapcontext.layers.operations;
+
+import java.awt.Graphics2D;
+import java.util.List;
+import java.util.function.Predicate;
+import org.gvsig.fmap.dal.DataStore;
+
+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();
+        
+        public List<FLayer> getLayers(Predicate<FLayer> filter);
+
+	/**
+	 * <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);
+
+	/**
+	 * Returns a first-level layer of this collection, using its name.
+	 *
+	 * @param layerName name of a layer of this collection
+	 *
+	 * @return a layer
+	 *
+	 * @see #getLayer(int)
+	 */
+	public FLayer getLayer(String layerName);
+        
+	/**
+	 * Returns a first-level layer of this collection, using its name.
+	 *
+	 * @param store of a layer of this collection
+	 *
+	 * @return a layer
+	 */
+        public FLayer getLayer(DataStore store);
+
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.mapcontext.layers;
+
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+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.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
+ * 
+ * @deprecated use MapContextManager
+ */
+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
+      ) {
+    throw new UnsupportedOperationException("This method is deprecated use MapContextMananer.registerLayer");
+//		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) 
+      {
+    MapContextManager manager = MapContextLocator.getMapContextManager();
+    manager.registerLayer(storeClass, 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;
+//
+//	}
+
+
+
+	/**
+   * @param layerName
+   * @param storeParameters
+   * @return 
+   * @throws org.gvsig.fmap.mapcontext.exceptions.LoadLayerException 
+	 * @deprecated to be removed in gvSIG 2.1
+	 * @see {@link MapContextManager}.
+	 */
+	public FLayer createLayer(
+          String layerName,
+          DataStoreParameters storeParameters
+    ) throws LoadLayerException {
+    MapContextManager manager = MapContextLocator.getMapContextManager();
+    return manager.createLayer(layerName, storeParameters);
+//    // Se obtiene el driver que lee
+//		try{
+//			DataManager dataManager=DALLocator.getDataManager();
+//			DataStore dataStore=dataManager.openStore(storeParameters.getDataStoreName(), storeParameters);
+//			return createLayer(layerName, dataStore);
+//		}catch (Exception e) {
+//			throw new LoadLayerException(layerName,e);
+//		}
+	}
+
+	/**
+   * @param layerName
+   * @param dataStore
+   * @return 
+   * @throws org.gvsig.fmap.mapcontext.exceptions.LoadLayerException 
+	 * @deprecated to be removed in gvSIG 2.1
+	 * @see {@link MapContextManager}.
+	 */
+	public FLayer createLayer(
+          String layerName, 
+          DataStore dataStore
+    ) throws LoadLayerException{
+    MapContextManager manager = MapContextLocator.getMapContextManager();
+    return manager.createLayer(layerName, dataStore);
+//		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.344/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.344/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.344/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.344/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 46118)
@@ -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.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class OutGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+    
+    OutGeometryEvaluator(
+            Geometry geometry,
+            IProjection envelopeProjection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+        this.projection = envelopeProjection;
+        this.builder = builder;
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return !geometryTrans.contains(geom) && !geometryTrans.intersects(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "out of geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.not(
+                    builder.ST_Contains(
+                            builder.geometry(geometry, projection),
+                            builder.column(fad.getName())
+                    )
+                )
+        ).toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class TouchesGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+    
+    TouchesGeometryEvaluator(Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+        this.projection = projection;
+        this.builder = builder;
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.touches(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "touches with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Touches(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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 boolean 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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+
+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.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 final Envelope envelope;
+    private final String geomName;
+    private final Envelope envelopeTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+    
+    CrossEnvelopeEvaluator(
+            Envelope envelope,
+            IProjection envelopeProjection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.envelope = envelope;
+        this.projection = envelopeProjection;
+        this.builder = builder;
+        this.envelopeTrans = envelope;
+        this.geomName = geomName;
+
+        this.getFieldsInfo().addMatchFieldValue(geomName, envelopeTrans);
+    }
+
+    @Override
+    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 = envelopeTrans.intersects(featureEnvelope);
+            return r;
+
+        } else {
+            Geometry geom = (Geometry) data.getDataValue(geomName);
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return envelopeTrans.intersects(geom.getEnvelope());
+
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "contains in envelope";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Intersects(
+                        builder.envelope(envelope, projection),
+                        builder.ST_Envelope(builder.column(fad.getName()))
+                )
+        ).toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+
+public class ContainsGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+ 
+    ContainsGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+    ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.projection = projection;
+        this.builder = builder;
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(
+                geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return false;
+            }
+            return geometryTrans.contains(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "contains with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Contains(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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()));
+            }
+
+        }
+
+    }
+
+    @Override
+    public void setUp() {
+        try {
+            FeatureStore store = this.getFeatureStore();
+            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);
+        }
+    }
+
+    /* (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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class CrossesGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+    
+    CrossesGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.projection = projection;
+        this.builder = builder;
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.crosses(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "crosses with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Crosses(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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 gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultGraphicLayer extends FLyrVect implements GraphicLayer {
+
+    private static final String DEFAULT = "default";
+    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultGraphicLayer.class);
+    
+    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();
+        DataManager dataManager = DALLocator.getDataManager();
+        
+        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");
+    }
+
+    @Override
+    public void addGraphic(String groupId, Geometry geom, int idsym) {
+        addGraphic(groupId, geom, idsym, null, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    public void addGraphic(Geometry geom, int idsym) {
+        addGraphic(DEFAULT, geom, idsym, null, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    public void addGraphic(Geometry geom, int idsym, String label) {
+        addGraphic(DEFAULT, geom, idsym, label, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    public void addGraphic(String groupId, Geometry geom, int idsym, String label) {
+        addGraphic(groupId, geom, idsym, label, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    @SuppressWarnings("SynchronizeOnNonFinalField")
+    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.isAppending() ) {
+                    insertGeometry(groupId, geom, idsym, label, tag, priority);
+                } else {
+                    store.edit(FeatureStore.MODE_APPEND);
+                    try {
+                        insertGeometry(groupId, geom, idsym, label, tag, priority);
+                        store.finishEditing();
+                    } catch(Throwable th) {
+                        try {
+                            store.cancelEditing();
+                        } catch(Throwable th2) {
+                            // Do nothing
+                        }
+                        throw th;
+                    }
+                }
+            }
+        } catch (Throwable th) {
+            LOGGER.warn("Error adding a geometry to the graphic layer", th);
+        } finally {
+            try {
+                store.endComplexNotification();
+            } catch(Exception ex) {
+                // Do nothing
+            }
+        }
+    }
+
+    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);
+    }
+
+    @Override
+    public void addGraphics(String groupId, Iterator geoms, int idsym) {
+        addGraphics(groupId, geoms, idsym, null, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    public void addGraphics(String groupId, Iterator geoms, int idsym,
+            String label) {
+        addGraphics(groupId, geoms, idsym, label, null, DEFAULT_PRIORITY);
+    }
+
+    @Override
+    @SuppressWarnings("SynchronizeOnNonFinalField")
+    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.isAppending() ) {
+                    store.disableNotifications();
+                    for (; geoms.hasNext();) {
+                        Geometry geom = (Geometry) geoms.next();
+                        insertGeometry(groupId, geom, idsym, label, tag, priority);
+                    }
+                    store.enableNotifications();
+                } else {
+                    store.edit(FeatureStore.MODE_APPEND);
+                    try {
+                        store.disableNotifications();
+                        for (; geoms.hasNext();) {
+                            Geometry geom = (Geometry) geoms.next();
+                            insertGeometry(groupId, geom, idsym, label, tag, priority);
+                        }
+                        store.enableNotifications();
+                        store.finishEditing();
+                    } catch(Throwable th) {
+                        try {
+                            store.cancelEditing();
+                        } catch(Throwable th2) {
+                            // Do nothing
+                        }
+                        throw th;
+                        
+                    }
+                }
+            }
+        } catch (Throwable th) {
+            LOGGER.warn("Error adding a geometry to the graphic layer", th);
+        }
+    }
+
+    @Override
+    public int addSymbol(ISymbol newSymbol) {
+        symbolId++;
+        legend.addSymbol(symbolId, newSymbol);
+        return symbolId;
+    }
+
+    @Override
+    public ISymbol getSymbol(int symbolPos) {
+        return legend.getSymbolByValue(symbolPos);
+    }
+
+    @Override
+    public int getSymbolId(ISymbol symbol) {
+        Object key = legend.getSymbolKey(symbol);
+        return key == null ? -1 : ((Number) key).intValue();
+    }
+
+    @Override
+    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.warn("Error clearing all the geometry of the graphic layer", e);
+        } finally {
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+    }
+
+    @Override
+    public int clearAllSymbols() {
+        legend.clear();
+        symbolId = -1;
+        return symbolId;
+    }
+
+    @Override
+    public boolean removeGraphics(String groupId) {
+        boolean res = false;
+        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);
+                        res = true;
+                    }
+                }
+                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);
+                        res = true;
+                    }
+                }
+                store.endEditingGroup();
+            }
+            store.endComplexNotification();
+        } catch (DataException e) {
+            LOGGER.warn("Error clearing all the geometry of the graphic layer", e);
+        } finally {
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+            if (iterator != null) {
+                iterator.dispose();
+            }
+        }
+        return res;
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        super.doDispose();
+        if (store != null) {
+            store.dispose();
+            store = null;
+        }
+    }
+
+    @Override
+    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});
+            this.legend.setClassifyingFieldTypes(new int[]{DataTypes.INT});
+        } else {
+            if (this.legend != null) { // Skip the first assignment, is always bad.
+                LOGGER.warn("The allocation of legend type '" + (legend==null? "null":legend.getClass().getName()) + "' is ignored. Required a legend of type IVectorialUniqueValueLegend.");
+            }
+        }
+    }
+
+    @Override
+    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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+
+public class DisjointGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+        
+    DisjointGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+        this.projection = projection;
+        this.builder = builder;
+        
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.disjoint(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "disjoint with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Disjoint(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class IntersectsGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+       
+    IntersectsGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType
+                .get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.projection = projection;
+        this.builder = builder;
+        this.geometryTrans = geometry.cloneGeometry();
+        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);
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.intersects(geom);
+
+        } catch (Exception e) {
+            return Boolean.FALSE;
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "intersects with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        ExpressionBuilder.Variable column = builder.column(fad.getName());
+        return builder.set(
+                builder.and(
+                    builder.not_is_null(column),
+                    builder.ST_Intersects(
+                            column,
+                            builder.geometry(geometry, this.projection)
+                    )
+                )
+        ).toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+   
+    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"));
+        Object value = feature.get(timeAttributeName);
+        if( !(value instanceof Time) ) {
+            return false;
+        }
+        Time featureTime = (Time)value;
+        return 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.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class EqualsGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+
+    EqualsGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+    ) {
+        this.builder = builder;
+        this.projection = projection;
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.equals(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "equals with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Equals(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.fastIterator();
+    		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.344/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.344/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.344/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.344/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 46118)
@@ -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.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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 final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+
+    OverlapsGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+        this.projection = projection;
+        this.builder = builder;
+        
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return Boolean.FALSE;
+            }
+            return geometryTrans.overlaps(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "overlaps with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Overlaps(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/SpatialEvaluatorsFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/SpatialEvaluatorsFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/SpatialEvaluatorsFactory.java	(revision 46118)
@@ -0,0 +1,346 @@
+package org.gvsig.fmap.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionUtils;
+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.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public class SpatialEvaluatorsFactory {
+    
+    private static final SpatialEvaluatorsFactory factory = new SpatialEvaluatorsFactory();
+    
+    public static SpatialEvaluatorsFactory getInstance() {
+        return factory;
+    }
+    
+    private SpatialEvaluatorsFactory() {
+        
+    }
+    
+//    public ExpressionBuilder createBuilder() {
+//        DataManager manager = DALLocator.getDataManager();
+//        ExpressionBuilder builder = manager.createSQLBuilder();
+//        return builder;
+//    }
+    
+    private Evaluator intersects(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new IntersectsGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }
+    
+    private Evaluator intersects(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new IntersectsEnvelopeEvaluator(envelope, projection, featureType, geomName, builder);
+    }
+    
+    public Evaluator intersects(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return intersects(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create intersects evaluator.",ex);
+        }
+    }
+
+    public Evaluator intersects(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store,
+            String geomfield
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return intersects(geometry, projection, featureType, geomfield, builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create intersects evaluator.",ex);
+        }
+    }
+
+    public Evaluator intersects(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return intersects(envelope, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create intersects evaluator.",ex);
+        }
+    }
+
+    private Evaluator contains(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ){
+        return new ContainsEnvelopeEvaluator(envelope, projection, featureType, geomName, builder);
+    }
+
+    private Evaluator contains(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ){
+        return new ContainsGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }
+    
+    public Evaluator contains(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.contains(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create contains evaluator.",ex);
+        }
+    }
+
+    public Evaluator contains(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.contains(envelope, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create contains evaluator.",ex);
+        }
+    }
+
+    private Evaluator not_contains(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ){
+        return new OutGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }
+    
+    public Evaluator not_contains(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.not_contains(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create not_contains evaluator.",ex);
+        }
+    }
+
+    public Evaluator crosses(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new CrossesGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }
+
+    private Evaluator crosses(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new CrossEnvelopeEvaluator(envelope, projection, featureType, geomName, builder);
+    }
+
+    public Evaluator crosses(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.crosses(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create crosses evaluator.",ex);
+        }
+    }
+
+    public Evaluator crosses(
+            Envelope envelope,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.crosses(envelope, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create crosses evaluator.",ex);
+        }
+    }
+
+    private Evaluator disjoint(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new DisjointGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }    
+
+    public Evaluator disjoint(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.disjoint(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create disjoint evaluator.",ex);
+        }
+    }
+    
+    private Evaluator overlaps(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new OverlapsGeometryEvaluator(geometry, projection, featureType, geomName, builder);
+    }    
+
+    public Evaluator overlaps(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.overlaps(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create overlaps evaluator.",ex);
+        }
+    }
+    
+    private Evaluator touches(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new TouchesGeometryEvaluator(geometry, projection, featureType, geomName,builder);
+    }    
+
+    public Evaluator touches(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.touches(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create touches evaluator.",ex);
+        }
+    }
+    
+    private Evaluator within(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new WithinGeometryEvaluator(geometry, projection, featureType, geomName,builder);
+    }    
+
+    public Evaluator within(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.within(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create within evaluator.",ex);
+        }
+    }
+    
+    private Evaluator equals(
+            Geometry geometry,
+            IProjection projection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        return new EqualsGeometryEvaluator(geometry, projection, featureType, geomName,builder);
+    }    
+    
+    public Evaluator equals(    
+            Geometry geometry,
+            IProjection projection, 
+            FeatureStore store
+        ) {
+        try {
+            FeatureType featureType = store.getDefaultFeatureType();
+            String geomName = featureType.getDefaultGeometryAttributeName();
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            return this.equals(geometry, projection, featureType, geomName,builder);
+        } catch (DataException ex) {
+            throw new RuntimeException("Can't create equals evaluator.",ex);
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,1415 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.io.File;
+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.LoggerFactory;
+
+import org.gvsig.compat.print.PrintAttributes;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStore;
+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.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.FeatureStoreNotification;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.CreateGeometryException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+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.LayerInformationBuilder;
+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.dynform.spi.DynFormSPILocator;
+import org.gvsig.tools.dynform.spi.DynFormSPIManager;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.evaluator.Evaluator;
+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.task.Cancellable;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Capa b�sica Vectorial.
+ *
+ */
+public class FLyrVect
+        extends FLyrDefault
+        implements VectorLayer,
+        LegendContentsChangedListener, Observer {
+
+    public static final String TAG_LAYERVECT_MAXSCALE = "layervect.scale.max";
+    public static final String TAG_LAYERVECT_MINSCALE = "layervect.scale.min";
+    
+    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;
+    private FeatureQuery baseQuery = null;
+
+    public FLyrVect() {
+        super();
+    }
+
+    @Override
+    public String getTocImageIcon() {
+        return MapContextLocator.getMapContextManager().getIconLayer(this.getDataStore());
+    }
+
+    /**
+     * Return the store associated to the layer.
+     *
+     * @return the store
+     */
+    @Override
+    public DataStore getDataStore() {
+        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);
+        
+        FeatureType featureType = featureStore.getDefaultFeatureTypeQuietly();
+        if( featureType!=null ) {
+            Tags tags = featureType.getTags();
+            if( tags.has(TAG_LAYERVECT_MAXSCALE) ) {
+                this.setMaxScale(tags.getInt(TAG_LAYERVECT_MAXSCALE, -1));
+            }
+            if( tags.has(TAG_LAYERVECT_MINSCALE) ) {
+                this.setMinScale(tags.getInt(TAG_LAYERVECT_MINSCALE, -1));
+            }
+        }
+
+        ToolsLocator.getDisposableManager().bind(dataStore);
+    }
+
+    public Envelope getFullEnvelope() throws ReadException {
+        Envelope rAux;
+        if (getFeatureStore() == null) {
+            return null;
+        }
+        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) {
+            boolean originalEnvelopeIsEmpty = rAux.isEmpty();
+            rAux = rAux.convert(ct);
+            if (!originalEnvelopeIsEmpty && rAux.isEmpty()) {
+                try {
+                    this.setAvailable(false);
+                    throw new EnvelopeCantBeInitializedException();
+                } catch (EnvelopeCantBeInitializedException e) {
+                    this.addError(e);
+                }
+            }
+        }
+        return rAux;
+
+    }
+
+    public void setBaseQuery(FeatureQuery baseQuery) {
+        this.baseQuery = baseQuery;
+    }
+
+    @Override
+    public FeatureQuery getBaseQuery() {
+        return this.baseQuery;
+    }
+
+    public void addBaseFilter(Evaluator filter) {
+        if (this.baseQuery == null) {
+            this.baseQuery = this.getFeatureStore().createFeatureQuery();
+        }
+        this.baseQuery.addFilter(filter);
+    }
+
+    public void addBaseFilter(String filter) {
+        try {
+            this.addBaseFilter(DALLocator.getDataManager().createExpresion(filter));
+        } catch (InitializeException ex) {
+            throw new RuntimeException("Can't create filter with '" + filter + "'", ex);
+        }
+    }
+
+    /**
+     * 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 = createFeatureQuery();
+
+        try {
+            FeatureAttributeDescriptor featureAttributeDescriptor
+                    = getFeatureStore().getDefaultFeatureType().getDefaultTimeAttribute();
+
+            if ((viewPort.getTime() != null) && (featureAttributeDescriptor != null)) {
+                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.setAvailable(false);
+            this.setError(e);
+            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;
+        }
+        FeatureQuery featureQuery = createFeatureQuery();
+
+        try {
+            legend.print(g,
+                    viewPort,
+                    cancel,
+                    scale,
+                    null,
+                    getCoordTrans(),
+                    getFeatureStore(),
+                    featureQuery,
+                    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;
+        }
+
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+
+        FeatureStore store = null;
+        try {
+            super.loadFromState(state);
+
+            this.setIsLabeled(false);
+            this.setLabelingStrategy(null);
+
+            typeShape = state.getInt("typeShape", Geometry.TYPES.GEOMETRY);
+
+            store = (FeatureStore) state.get("featureStore");
+            if (store == null) { // Averiguar como puede llegar aqui un null.
+                this.setAvailable(false);
+                this.addError(new RuntimeException("Can't retrieve store information."));
+            } else {
+                if (store.isBroken()) {
+                    this.setAvailable(false);
+                    this.addError(store.getBreakingsCause());
+                }
+            }
+            try {
+                this.bindToDataStore(store);
+            } catch (Exception ex) {
+                this.setAvailable(false);
+                this.addError(ex);
+            }
+
+            try {
+                IVectorLegend vectorLegend = (IVectorLegend) state.get("legend");
+                this.setLegend(vectorLegend);
+            } catch (Exception ex) {
+                this.setAvailable(false);
+                this.addError(ex);
+            }
+
+            try {
+                if (state.getBoolean("isLabeled", false)) {
+                    this.setIsLabeled(true);
+                    ILabelingStrategy labelingStrategy = (ILabelingStrategy) state.get("labelingStrategy");
+                    this.setLabelingStrategy(labelingStrategy);
+                }
+            } catch (Exception ex) {
+                this.setAvailable(false);
+                this.addError(ex);
+            }
+
+        } 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);
+            this.addError(e);
+        }
+
+    }
+
+    /**
+     * 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 ret; //"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();
+    }
+
+    public FeatureQuery createFeatureQuery() {
+        if (this.baseQuery == null) {
+            return this.getFeatureStore().createFeatureQuery();
+        }
+        try {
+            return (FeatureQuery) baseQuery.clone();
+        } catch (CloneNotSupportedException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    /**
+     * @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);
+        }
+    }
+
+    public FeatureQuery createQueryByPoint(double x, double y,
+            double tol,
+            FeatureType featureType) throws DataException {
+        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(x);
+            center.setY(y);
+            Circle circle
+                    = (Circle) manager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
+            circle.setPoints(center, tol);
+            return createQueryByGeometry(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 = createFeatureQuery();
+        featureQuery.setFeatureType(featureType);
+
+        Geometry query_geo = this.transformToSourceCRS(geom, true);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig();
+        }
+        Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
+                query_geo,
+                query_proj,
+                featureStore
+        );
+        featureQuery.setFilter(iee);
+        featureQuery.setAttributeNames(null);
+        return getFeatureStore().getFeatureSet(featureQuery);
+
+    }
+    
+    public FeatureQuery createQueryByGeometry(Geometry geom, FeatureType featureType) throws DataException {
+        FeatureQuery featureQuery = createFeatureQuery();
+        featureQuery.setFeatureType(featureType);
+
+        Geometry query_geo = this.transformToSourceCRS(geom, true);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig();
+        }
+        Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
+                query_geo,
+                query_proj,
+                featureStore
+        );
+        featureQuery.setFilter(iee);
+        featureQuery.setAttributeNames(null);
+        return featureQuery;
+
+    }
+    
+    public FeatureSet queryByContainedInGeometry(Geometry geom, FeatureType featureType) throws DataException {
+        FeatureQuery featureQuery = createFeatureQuery();
+        featureQuery.setFeatureType(featureType);
+
+        Geometry query_geo = this.transformToSourceCRS(geom, true);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig();
+        }
+        Evaluator iee = SpatialEvaluatorsFactory.getInstance().contains(
+                query_geo,
+                query_proj,
+                featureStore
+        );
+        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 = createFeatureQuery();
+        if (names == null) {
+            featureQuery.setFeatureType(featureType);
+        } else {
+            featureQuery.setAttributeNames(names);
+            featureQuery.setFeatureTypeId(featureType.getId());
+        }
+
+        Envelope query_env = fromViewPortCRSToSourceCRS(this, envelope);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig();
+        }
+
+        Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
+                query_env.getGeometry(),
+                query_proj,
+                featureStore
+        );
+        featureQuery.setFilter(iee);
+        return getFeatureStore().getFeatureSet(featureQuery);
+
+    }
+    
+    public FeatureSet queryByContainedInEnvelope(Envelope envelope, FeatureType featureType) throws DataException {
+        return queryByContainedInEnvelope(envelope, featureType, null);
+    }
+    
+    public FeatureSet queryByContainedInEnvelope(Envelope envelope,
+            FeatureType featureType,
+            String[] names) throws DataException {
+        FeatureQuery featureQuery = createFeatureQuery();
+        if (names == null) {
+            featureQuery.setFeatureType(featureType);
+        } else {
+            featureQuery.setAttributeNames(names);
+            featureQuery.setFeatureTypeId(featureType.getId());
+        }
+
+        Envelope query_env = fromViewPortCRSToSourceCRS(this, envelope);
+        IProjection query_proj = getMapContext().getProjection();
+        if (this.getCoordTrans() != null) {
+            query_proj = this.getCoordTrans().getPOrig();
+        }
+
+        Evaluator iee = SpatialEvaluatorsFactory.getInstance().contains(
+                query_env.getGeometry(),
+                query_proj,
+                featureStore
+        );
+        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);
+    }
+
+    @Override
+    public void legendCleared(LegendClearEvent event) {
+        this.updateDrawVersion();
+        LegendChangedEvent e = LegendChangedEvent.createLegendChangedEvent(legend, event);
+        this.callLegendChanged(e);
+    }
+
+    @Override
+    public boolean symbolChanged(SymbolLegendEvent e) {
+        this.updateDrawVersion();
+        LegendChangedEvent ev = LegendChangedEvent.createLegendChangedEvent(legend, e);
+        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
+                && spatialCache.isEnabled()) {
+            // 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 SelfRegister
+            implements Callable {
+
+        @Override
+        public Object call() {
+          registerPersistence();
+          registerDefaultVectorLayer();
+          DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+          dynObjectManager.registerTag(TAG_LAYERVECT_MAXSCALE, "Sets the maximum scale visible. Higher scales won't be drawn, -1 if not defined");
+          dynObjectManager.registerTag(TAG_LAYERVECT_MINSCALE, "Sets the minimum scale visible. Lower scales won't be drawn, -1 if not defined");
+          return true;
+        }
+        
+        private Object registerDefaultVectorLayer() {
+            MapContextManager manager = MapContextLocator.getMapContextManager();
+            manager.registerLayer(FeatureStore.class, FLyrVect.class);
+            return true;          
+        }
+        
+        private Object registerPersistence() {
+            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 true;
+        }
+    }
+
+    @Override
+    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;
+    }
+
+    public Iterator iterator() {
+        return this.getFeatureStore().iterator();
+    }
+
+    protected class EnvelopeCantBeInitializedException
+            extends BaseException {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 4572797479347381552L;
+        private final static String MESSAGE_FORMAT = "The envelope can't be initialized, maybe the layer has a wrong projection. Change the projection in layer properties of the add layer dialog to try fix it.";
+        private final static String MESSAGE_KEY = "_EnvelopeCantBeInitializedException";
+
+        public EnvelopeCantBeInitializedException() {
+            super(MESSAGE_FORMAT, null, MESSAGE_KEY, serialVersionUID);
+        }
+    }
+
+    @Override
+    public String getInfoString() {
+        LayerInformationBuilder builder = MapContextLocator.getMapContextManager().createLayerInformationBuilder();
+
+        if (!this.isAvailable()) {
+            builder.title().labelkey("Warning");
+            builder.text().value("The layer is not available.");
+        }
+
+        Envelope env = null;
+        FeatureAttributeDescriptor attrgeom = null;
+
+        try {
+            env = this.getFullEnvelope();
+        } catch (Exception ex) {
+        }
+        FeatureStore store = this.getFeatureStore();
+        try {
+            FeatureType ft = store.getDefaultFeatureType();
+            attrgeom = ft.getDefaultGeometryAttribute();
+        } catch (Exception ex) {
+        }
+
+        builder.title().labelkey("Data_source");
+        builder.property().labelkey("Source_type").value(store.getProviderName());
+        builder.property().labelkey("origen").value(store.getFullName());
+        if (store.getParameters() instanceof FilesystemStoreParameters) {
+            File f = ((FilesystemStoreParameters) (store.getParameters())).getFile();
+            if (f != null && f.exists()) {
+                builder.property().labelkey("_Size").value("%d bytes", f.length());
+            }
+        }
+        if (attrgeom != null) {
+            builder.property().labelkey("_Geometry_column").value(attrgeom.getName());
+            builder.property().labelkey("_Geometry_type").value(attrgeom.getGeomType().getFullName());
+        }
+
+        builder.title().labelkey("_Coordenadas_geograficas");
+        if (this.isAvailable()) {
+            builder.envelope().value(env);
+        }
+
+        builder.title().labelkey("_Projection");
+        if (this.isAvailable()) {
+            builder.property().value(this.getProjection());
+            builder.text().asWKT(this.getProjection());
+        }
+        return builder.toString();
+    }
+
+    @Override
+    public boolean isTemporary() {
+        if (this.featureStore != null) {
+            if (this.featureStore.isTemporary()) {
+                return true;
+            }
+        }
+        return super.isTemporary();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.layers.vectorial;
+
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+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;
+import org.gvsig.tools.evaluator.Evaluator;
+
+public interface VectorLayer extends SingleLayer, ILabelable, InfoByPoint,
+        ClassifiableVectorial {
+
+    public FeatureStore getFeatureStore();
+
+    public void setBaseQuery(FeatureQuery baseQuery);
+
+    public FeatureQuery getBaseQuery();
+
+    public void addBaseFilter(Evaluator filter);
+
+    public void addBaseFilter(String filter);
+
+    public FeatureQuery createFeatureQuery();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+
+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.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 final Envelope envelope;
+    private final String geomName;
+    private final Envelope envelopeTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+
+    ContainsEnvelopeEvaluator(
+            Envelope envelope,
+            IProjection envelopeProjection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.projection = envelopeProjection;
+        this.builder = builder;
+        this.envelope = envelope;
+        this.envelopeTrans = envelope;
+        this.geomName = geomName;
+        this.getFieldsInfo().addMatchFieldValue(geomName, envelopeTrans);
+    }
+
+    @Override
+    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 false;
+            }
+            featureEnvelope = geom.getEnvelope();
+        }
+        return envelopeTrans.contains(featureEnvelope);
+    }
+
+    @Override
+    public String getName() {
+        return "contains in envelope";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Contains(
+                        builder.envelope(envelope, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.mapcontext.layers.vectorial;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+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;
+
+public class WithinGeometryEvaluator extends AbstractEvaluator {
+
+    private final String geomName;
+    private final Geometry geometry;
+    private final Geometry geometryTrans;
+    private final boolean isDefault;
+    private final GeometryExpressionBuilder builder;
+    private final IProjection projection;
+    private final FeatureAttributeDescriptor fad;
+    
+    WithinGeometryEvaluator(
+            Geometry geometry,
+            IProjection projection,
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        this.isDefault = featureType.getDefaultGeometryAttributeName().equals(geomName);
+        this.geometry = geometry;
+        this.geometryTrans = geometry.cloneGeometry();
+        this.projection = projection;
+        this.builder = builder;
+
+        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);
+
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        try {
+            Geometry geom;
+            if (isDefault) {
+                Feature feature = (Feature) data.getContextValue("feature");
+                geom = feature.getDefaultGeometry();
+
+            } else {
+                geom = (Geometry) data.getDataValue(geomName);
+            }
+            if (geom == null) {
+                return false;
+            }
+            return geometryTrans.within(geom);
+
+        } catch (Exception e) {
+            throw new EvaluatorException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return "within with geometry";
+    }
+
+    @Override
+    public String getSQL() {
+        return this.builder.set(
+                builder.ST_Within(
+                        builder.geometry(geometry, projection),
+                        builder.column(fad.getName())
+                )
+        ).toString();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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 java.util.Objects;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.ExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+
+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.primitive.Envelope;
+import org.gvsig.tools.evaluator.AbstractEvaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IntersectsEnvelopeEvaluator extends AbstractEvaluator {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(IntersectsEnvelopeEvaluator.class);
+
+    private final Envelope envelope;
+    private final String geomName;
+    private final boolean isDefault;
+    private final String defaultGeometryAttributeName;
+    private final IProjection projection;
+    private final GeometryExpressionBuilder builder;
+    FeatureAttributeDescriptor fad;
+        
+    IntersectsEnvelopeEvaluator(
+            Envelope envelope,
+            IProjection envelopeProjection, 
+            FeatureType featureType,
+            String geomName,
+            GeometryExpressionBuilder builder
+        ) {
+        fad = (FeatureAttributeDescriptor) featureType.get(geomName);
+        defaultGeometryAttributeName = featureType.getDefaultGeometryAttributeName();
+        this.isDefault = defaultGeometryAttributeName.equals(geomName);
+        this.envelope = envelope;
+        this.projection = envelopeProjection;
+        this.builder = builder;
+        this.geomName = geomName;
+        this.getFieldsInfo().addMatchFieldValue(geomName, envelope);
+    }
+
+    @Override
+    public Object evaluate(EvaluatorData data) throws EvaluatorException {
+        Envelope featureEnvelope;
+        Geometry geom ;
+        if (isDefault) {
+            geom = (Geometry) data.getDataValue(defaultGeometryAttributeName);
+            featureEnvelope = ((Feature) data.getContextValue("feature")).getDefaultEnvelope();
+        } else {
+            geom = (Geometry) data.getDataValue(geomName);
+            if (geom == null) {
+                return false;
+            }
+            featureEnvelope = geom.getEnvelope();
+        }
+        if (envelope.intersects(featureEnvelope)) {
+            return envelope.intersects(geom);
+        }
+        return false;
+    }
+
+    @Override
+    public String getName() {
+        return "intersects envelope";
+    }
+
+    @Override
+    public String getSQL() {
+        ExpressionBuilder.Variable column = builder.column(fad.getName());
+        IProjection theProjection = this.projection;
+        LOGGER.debug("Envelope projection = '"+Objects.toString(theProjection)+"'");
+        if( this.fad.getSRS()==null ) {
+            LOGGER.debug("fad SRS NULL use NULL projection'");
+            theProjection = null;
+        }
+        String s = builder.set(
+                builder.and(
+                    builder.not_is_null(column)    ,
+                    builder.ST_Intersects(
+                            column,
+                            builder.geometry(envelope.getGeometry(), theProjection)
+                    )
+                )
+        ).toString();
+        LOGGER.debug("Intersects SQL = '"+s+"'");
+        return s;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+import java.util.Map;
+
+/**
+ * 
+ * @deprecated use org.gvsig.tools.util.PropertiesSupport
+ */
+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.344/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.344/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.344/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 46118)
@@ -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.fmap.mapcontext.layers;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.util.Callable;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+
+public class ExtendedPropertiesHelper extends PropertiesSupportHelper implements ExtendedPropertiesSupport, Persistent {
+
+    private static final Logger logger = LoggerFactory.getLogger(ExtendedPropertiesHelper.class);
+
+    /*
+    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);
+
+     */
+    @Override
+    public Object getProperty(Object key) {
+        return this.getProperty((String) key);
+    }
+
+    @Override
+    public void setProperty(Object key, Object val) {
+        this.setProperty((String) key, val);
+    }
+
+    @Override
+    public Map getExtendedProperties() {
+        return this.getProperties();
+    }
+
+    public void setExtendedProperties(Map properties) {
+        this.setProperties(properties);
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        @Override
+        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.344/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.344/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.344/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 46118)
@@ -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.FMapEventBase;
+
+
+/**
+ * <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 FMapEventBase {
+	/**
+	 * <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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1227 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.io.File;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+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.layers.operations.SingleLayer;
+import static org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect.TAG_LAYERVECT_MAXSCALE;
+import static org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect.TAG_LAYERVECT_MINSCALE;
+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.Tags;
+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.Persistent;
+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 static final int TOL = 7;
+
+    private LayerChangeSupport 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 Set<LayerListener> layerListeners = new HashSet<>();
+
+    //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;
+
+    protected ExtendedPropertiesHelper properties = new ExtendedPropertiesHelper();
+
+    public FLyrDefault(MetadataContainer metadataContainer) {
+        this.layerChangeSupport = new LayerChangeSupport();
+        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)
+     */
+    @Override
+    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)
+     */
+    @Override
+    public void setProperty(Object key, Object val) {
+        properties.setProperty(key, val);
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getExtendedProperties()
+     */
+    @Override
+    public Map getExtendedProperties() {
+        return properties.getExtendedProperties();
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setActive(boolean)
+     */
+    @Override
+    public void setActive(boolean selected) {
+        status.active = selected;
+        callActivationChanged(LayerEvent.createActivationChangedEvent(this,
+                "active"));
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isActive()
+     */
+    @Override
+    public boolean isActive() {
+        return status.active;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setName(java.lang.String)
+     */
+    @Override
+    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()
+     */
+    @Override
+    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()
+     */
+    @Override
+    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)
+     */
+    @Override
+    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()
+     */
+    @Override
+    public boolean isVisible() {
+        return status.visible && status.available;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getParentLayer()
+     */
+    @Override
+    public FLayers getParentLayer() {
+        return parentLayer;
+    }
+
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setParentLayer(com.iver.cit.gvsig.fmap.layers.FLayers)
+     */
+    @Override
+    public void setParentLayer(FLayers root) {
+        if (this.parentLayer != root) {
+            this.parentLayer = root;
+            this.updateDrawVersion();
+        }
+    }
+
+    /**
+     * 
+     * Inserts the projection to this layer.
+     *
+     * @param proj information about the new projection
+     *
+     * @see #isReprojectable()
+     * @see #reProject(MapControl)
+     */
+    @Override
+    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 coordTrans = proj.getCT(getMapContext().getProjection());
+                setCoordTrans(coordTrans);
+                logger.debug("Cambio proyecci�n: FMap con "
+                        + getMapContext().getProjection().getAbrev() + " y capa "
+                        + getName() + " con " + proj.getAbrev());
+            }
+        }
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see org.cresques.geo.Projected#getProjection()
+     */
+    @Override
+    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 arg0
+     * @see #isReprojectable()
+     * @see #setProjection(IProjection)
+     */
+    @Override
+    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()
+     */
+    @Override
+    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)
+     */
+    @Override
+    public boolean addLayerListener(LayerListener o) {
+        if (o == null) {
+            return true;
+        }
+        return layerListeners.add(o);
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getLayerListeners()
+     */
+    @Override
+    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)
+     */
+    @Override
+    public boolean removeLayerListener(LayerListener o) {
+        return layerListeners.remove(o);
+    }
+
+    /**
+     *
+     */
+    private void callDrawValueChanged(LayerEvent e) {
+        for (LayerListener listener : this.layerListeners) {
+            try {
+                listener.drawValueChanged(e);
+            } catch (Exception ex) {
+                logger.warn("Error calling listener '" + listener.toString() + "'.", ex);
+            }
+        }
+    }
+
+    /**
+     * 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 (LayerListener listener : this.layerListeners) {
+            try {
+                listener.nameChanged(e);
+            } catch (Exception ex) {
+                logger.warn("Error calling listener '" + listener.toString() + "'.", ex);
+            }
+        }
+    }
+
+    /**
+     * 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 (LayerListener listener : this.layerListeners) {
+            try {
+                listener.visibilityChanged(e);
+            } catch (Exception ex) {
+                logger.warn("Error calling listener '" + listener.toString() + "'.", ex);
+            }
+        }
+    }
+
+    /**
+     * 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 (LayerListener listener : this.layerListeners) {
+            try {
+                listener.activationChanged(e);
+            } catch (Exception ex) {
+                logger.warn("Error calling listener '" + listener.toString() + "'.", ex);
+            }
+        }
+    }
+
+    /**
+     * 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()
+     */
+    @Override
+    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)
+     */
+    @Override
+    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>
+     *
+     * @throws org.gvsig.fmap.mapcontext.exceptions.LoadLayerException
+     * @deprecated no deberia ser necesario llamar a esto, la capa debe
+     * comportarse correctamente sin necesidad de llamarlo.
+     */
+    public void wakeUp() throws LoadLayerException {
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMinScale()
+     */
+    @Override
+    public double getMinScale() {
+        return minScale;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getMaxScale()
+     */
+    @Override
+    public double getMaxScale() {
+        return maxScale;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setMinScale(double)
+     */
+    @Override
+    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)
+     */
+    @Override
+    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)
+     */
+    @Override
+    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)
+     */
+    @Override
+    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 (LayerListener listener : this.layerListeners) {
+            try {
+                listener.editionChanged(e);
+            } catch (Exception ex) {
+                logger.warn("Error calling listener '" + listener.toString() + "'.", ex);
+            }
+        }
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isEditing()
+     */
+    @Override
+    public boolean isEditing() {
+        return status.editing;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getTocImageIcon()
+     */
+    @Override
+    public String getTocImageIcon() {
+        return "layer-icon";
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isInTOC()
+     */
+    @Override
+    public boolean isInTOC() {
+        return status.inTOC;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setInTOC(boolean)
+     */
+    @Override
+    public void setInTOC(boolean b) {
+        status.inTOC = b;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#isAvailable()
+     */
+    @Override
+    public boolean isAvailable() {
+        return status.available;
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setAvailable(boolean)
+     */
+    @Override
+    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()
+     */
+    @Override
+    public void reload() throws ReloadLayerException {
+        if (this.ct != null) {
+            IProjection srcProj = this.ct.getPOrig();
+            if (!this.getProjection().equals(srcProj)) {
+                this.ct = this.getProjection().getCT(this.ct.getPDest());
+            }
+        }
+        this.setAvailable(true);
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getFLayerStatus()
+     */
+    @Override
+    public FLayerStatus getFLayerStatus() {
+        return status.cloneStatus();
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#setFLayerStatus(com.iver.cit.gvsig.fmap.layers.FLayerStatus)
+     */
+    @Override
+    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()
+     */
+    @Override
+    public boolean isOk() {
+        return status.isOk();
+    }
+
+    /*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#getNumErrors()
+     */
+    @Override
+    public int getNumErrors() {
+        return status.getNumErrors();
+    }
+
+    @Override
+    public Throwable getError(int i) {
+        return status.getError(i);
+    }
+
+    @Override
+    public List<Throwable> getErrors() {
+        return status.getErrors();
+    }
+
+    @Override
+    public void addError(Throwable exception) {
+        status.addLayerError(exception);
+    }
+
+    @Override
+    public void setError(Throwable ex) {
+        this.status.setLayerError(ex);
+    }
+
+    @Override
+    public boolean visibleRequired() {
+        return status.visible;
+    }
+
+    @Override
+    public String getInfoString() {
+        Envelope env = null;
+        DataStore store = null;
+        try {
+            env = this.getFullEnvelope();
+        } catch (ReadException ex) {
+        }
+
+        try {
+            store = ((SingleLayer) this).getDataStore();
+        } catch (Throwable th) {
+
+        }
+
+        LayerInformationBuilder builder = MapContextLocator.getMapContextManager().createLayerInformationBuilder();
+
+        if (store != null) {
+            builder.title().labelkey("Data_source");
+            builder.property().labelkey("Source_type").value(store.getProviderName());
+            builder.property().labelkey("origen").value(store.getFullName());
+            if (store.getParameters() instanceof FilesystemStoreParameters) {
+                File f = ((FilesystemStoreParameters) (store.getParameters())).getFile();
+                if (f != null && f.exists()) {
+                    builder.property().labelkey("_Size").value("%d bytes", f.length());
+                }
+            }
+        }
+
+        builder.title().labelkey("_Coordenadas_geograficas");
+        if (this.isAvailable()) {
+            builder.envelope().value(env);
+        }
+
+        builder.title().labelkey("_Projection");
+        if (this.isAvailable()) {
+            builder.property().value(this.getProjection());
+            builder.text().asWKT(this.getProjection());
+        }
+
+        return builder.toString();
+    }
+
+    @Override
+    public boolean isWritable() {
+        return status.writable;
+    }
+
+    @Override
+    public FLayer cloneLayer() throws Exception {
+        logger.warn("Use of cloneLayer and this is not implemented.");
+        return this;
+    }
+
+    @Override
+    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());
+    }
+
+    @Override
+    public ComposedLayer newComposedLayer() {
+        return null;
+    }
+
+    @Override
+    public boolean allowLinks() {
+        return false;
+    }
+
+    @Override
+    public AbstractLinkProperties getLinkProperties() {
+        return null;
+    }
+
+    @Override
+    public URI[] getLink(Point2D point, double tolerance) throws ReadException {
+        return null;
+    }
+
+    public void addLegendListener(LegendListener listener) {
+        if (listener == null) {
+            return;
+        }
+        layerChangeSupport.addLayerListener(listener);
+    }
+
+    /**
+     * @param e
+     * @see LayerChangeSupport#callLegendChanged(LegendChangedEvent)
+     */
+    protected void callLegendChanged(LegendChangedEvent e) {
+        layerChangeSupport.callLegendChanged(e);
+        if (parentLayer != null) {
+            parentLayer.callLegendChanged(e);
+        }
+    }
+
+    /**
+     * @param listener
+     * @see LayerChangeSupport#removeLayerListener(LegendListener)
+     */
+    public void removeLegendListener(LegendListener listener) {
+        layerChangeSupport.removeLayerListener(listener);
+    }
+
+    public String getClassName() {
+        return this.getClass().getName();
+    }
+
+    @Override
+    public void delegate(DynObject dynObject) {
+        this.metadataContainer.delegate(dynObject);
+    }
+
+    @Override
+    public DynClass getDynClass() {
+        return this.metadataContainer.getDynClass();
+    }
+
+    @Override
+    public Object getDynValue(String name) throws DynFieldNotFoundException {
+        return this.metadataContainer.getDynValue(name);
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        return this.metadataContainer.hasDynValue(name);
+    }
+
+    @Override
+    public void implement(DynClass dynClass) {
+        this.metadataContainer.implement(dynClass);
+    }
+
+    @Override
+    public Object invokeDynMethod(int code, Object[] args)
+            throws DynMethodException {
+        return this.metadataContainer.invokeDynMethod(this, code, args);
+    }
+
+    @Override
+    public Object invokeDynMethod(String name, Object[] args)
+            throws DynMethodException {
+        return this.metadataContainer.invokeDynMethod(this, name, args);
+    }
+
+    @Override
+    public void setDynValue(String name, Object value)
+            throws DynFieldNotFoundException {
+        this.metadataContainer.setDynValue(name, value);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public void activationChanged(LayerEvent e) {
+    }
+
+    @Override
+    public void drawValueChanged(LayerEvent e) {
+        this.updateDrawVersion();
+    }
+
+    @Override
+    public void editionChanged(LayerEvent e) {
+
+    }
+
+    @Override
+    public void nameChanged(LayerEvent e) {
+
+    }
+
+    @Override
+    public void visibilityChanged(LayerEvent e) {
+
+    }
+
+    // ========================================================
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        try {
+            state.set("parentLayer", (Persistent) 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 | RuntimeException ex) {
+            logger.warn("Can't save to persistent state the layer '" + this.getName() + "'.");
+            throw ex;
+        }
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        try {
+            String name = state.getString("name");
+            if (StringUtils.isEmpty(name)) {
+                name = "Unknown";
+            }
+            this.setDynValue(METADATA_NAME, name);
+            this.setDynValue(METADATA_CRS, state.get("crs"));
+
+            this.parentLayer = (FLayers) state.get("parentLayer");
+            this.status = (FLayerStatus) state.get("status");
+            if (this.status == null) {
+                this.status = new FLayerStatus();
+                this.setAvailable(false);
+                this.addError(new RuntimeException("Can't retreieve the status of the layer."));
+            }
+            this.minScale = state.getDouble("minScale", -1);
+            this.maxScale = state.getDouble("maxScale", -1);
+            this.transparency = state.getInt("transparency", 255);
+            this.ct = (ICoordTrans) state.get("coordTrans");
+
+            this.properties.setExtendedProperties((Map) state.get("properties"));
+        } catch (Exception ex) {
+            logger.warn("Can't load from persietent state the layer '" + this.getName() + "'.");
+            throw ex;
+        }
+
+    }
+
+    public static class RegisterPersistence implements Callable {
+
+        @Override
+        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);
+            // "properties" deberia estar declarada como un "ExtendedPropertiesHelper"
+            // pero por compatibilidad con proyectos viejos lo mantenemos como un
+            // Map.
+//			definition.addDynFieldObject("properties").setClassOfValue(
+//				ExtendedPropertiesHelper.class)
+//				.setMandatory(false);
+            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);
+//	}
+    @Override
+    public void clear() {
+        if (metadataContainer != null) {
+            metadataContainer.clear();
+        }
+    }
+
+    @Override
+    public String getMetadataName() throws MetadataException {
+        return FLayer.METADATA_DEFINITION_NAME;
+    }
+
+    public static class RegisterMetadata implements Callable {
+
+        @Override
+        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;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return this.getName();
+    }
+
+    @Override
+    public boolean hidesThisArea(Envelope area) {
+        return false;
+    }
+
+    @Override
+    public boolean isTemporary() {
+        return this.temporary;
+    }
+
+    @Override
+    public void setTemporary(boolean temporary) {
+        this.temporary = temporary;
+    }
+
+    @Override
+    public int getDefaultTolerance() {
+        return TOL;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,321 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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 final List<Throwable> 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(Throwable error){
+		layerErrors.add(error);
+	}
+
+        public void setLayerError(Throwable ex) {
+            layerErrors.clear();
+            layerErrors.add(ex);
+        }
+        
+	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;
+	}
+
+	@Override
+	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 Throwable getError(int i){
+		return 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.isEmpty();
+	}
+
+	/**
+	 * <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<Throwable> 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;
+	}
+
+	@Override
+	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");
+	}
+
+	@Override
+	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 {
+
+		@Override
+        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.344/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.344/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.344/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.344/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 46118)
@@ -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;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.events.FMapEventBase;
+
+
+/**
+ * <p>Event associated to a selection on a vector layer.</p>
+ *
+ * @see FMapEvent
+ */
+public class SelectionEvent extends FMapEventBase {
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/BaseLayerCollectionListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/BaseLayerCollectionListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/BaseLayerCollectionListener.java	(revision 46118)
@@ -0,0 +1,37 @@
+package org.gvsig.fmap.mapcontext.layers;
+
+/**
+ * Utility class to implements LayerCollectionListener overwriting only 
+ * some events.
+ */
+public class BaseLayerCollectionListener implements LayerCollectionListener {
+
+    @Override
+    public void layerAdded(LayerCollectionEvent e) {
+    }
+
+    @Override
+    public void layerMoved(LayerPositionEvent e) {
+    }
+
+    @Override
+    public void layerRemoved(LayerCollectionEvent e) {
+    }
+
+    @Override
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+    }
+
+    @Override
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+    }
+
+    @Override
+    public void layerRemoving(LayerCollectionEvent e) throws CancelationException {
+    }
+
+    @Override
+    public void visibilityChanged(LayerCollectionEvent e) throws CancelationException {
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ * Convert a Font to String.
+ *
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class CoerceFontToString extends AbstractCoercion {
+
+  public CoerceFontToString() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof String) {
+      return value;
+    }
+    try {
+      if (value instanceof Font) {
+        Font font = (Font) value;
+        SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Font");
+        properties.put("name", font.getName());
+        properties.put("style", font.getStyle());
+        properties.put("size", 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);
+    }
+    dataTypesManager.addCoercion(DataTypes.STRING, new CoerceFontToString());
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.tools.coerce;
+
+import java.awt.Font;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ * Convert a String to Font.
+ *
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceStringToFont extends AbstractCoercion {
+
+  public CoerceStringToFont() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof Font) {
+      return value;
+    }
+    try {
+      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("Font");
+    dataTypesManager.addCoercion(id, new CoerceStringToFont());
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+
+/**
+ * Convert a Color to String.
+ *
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class CoerceColorToString extends AbstractCoercion {
+
+  public CoerceColorToString() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof String) {
+      return value;
+    }
+    try {
+      if (value instanceof Color) {
+        Color color = (Color) value;
+        SimpleAttributesSerializer properties = new SimpleAttributesSerializer("Color");
+        properties.put("red", color.getRed());
+        properties.put("green", color.getGreen());
+        properties.put("blue", color.getBlue());
+        properties.put("alpha", 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);
+    }
+    dataTypesManager.addCoercion(DataTypes.STRING, new CoerceColorToString());
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.tools.coerce;
+
+import java.awt.Color;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.AbstractCoercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.swing.api.DataTypes;
+
+/**
+ * Convert a Color to String.
+ *
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CoerceStringToColor extends AbstractCoercion {
+
+  public CoerceStringToColor() {
+    // Do nothing
+  }
+
+  @Override
+  public Object coerce(Object value, CoercionContext context) throws CoercionException {
+    if (value == null || value instanceof Color) {
+      return value;
+    }
+    try {
+      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();
+    dataTypesManager.addCoercion(DataTypes.COLOR, new CoerceStringToColor());
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/RasterLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/RasterLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/RasterLayer.java	(revision 46118)
@@ -0,0 +1,88 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.raster.api;
+
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.tools.task.SimpleTaskStatus;
+
+
+/**
+ * Interface for all raster layers
+ *
+ */
+public interface RasterLayer extends SingleLayer, InfoByPoint {
+
+    //TODO ILabelable,ClassifiableRaster,InfoByPoint??
+
+    /**
+     * Returns RasterStore of this layer
+     * @return RasterStore
+     */
+    public RasterStore getRasterStore();
+
+    /**
+     * Sets a BaseQuery to be applied to the data in the store
+     * @param baseQuery
+     */
+    public void setBaseQuery(RasterQuery baseQuery);
+
+    /**
+     * Returns the BaseQuery
+     * @return RasterQuery
+     */
+    public RasterQuery getBaseQuery();
+
+    /**
+     * Creates a new RasterQuery from the store
+     * @return RasterQuery
+     */
+    public RasterQuery createRasterQuery();
+
+    /**
+     * @param legend
+     */
+    public void setLegend(ILegend legend);
+
+    /**
+     * @param status
+     * @return
+     */
+    public Statistics getStatistics(SimpleTaskStatus status);
+
+    /**
+     *
+     */
+    public void recalculateStatistics();
+
+    /**
+     * @return
+     */
+    public RasterLegend getLegend();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/listeners/RasterLegendChangedListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/listeners/RasterLegendChangedListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/listeners/RasterLegendChangedListener.java	(revision 46118)
@@ -0,0 +1,14 @@
+package org.gvsig.fmap.mapcontext.raster.api.legend.listeners;
+
+import org.gvsig.fmap.mapcontext.raster.api.legend.RasterLegendEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendContentsChangedListener;
+
+/**
+ * Interface with raster legend events
+ */
+public interface RasterLegendChangedListener extends LegendContentsChangedListener{
+
+    public boolean colorInterpretationChanged(RasterLegendEvent e);
+
+    public boolean operationListChanged(RasterLegendEvent e);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteBandEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteBandEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteBandEvent.java	(revision 46118)
@@ -0,0 +1,38 @@
+package org.gvsig.fmap.mapcontext.raster.api.legend;
+
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public final class ChangePaletteBandEvent extends RasterLegendEventBase {
+
+    private int oldPaletteBand;
+    private int newPaletteBand;
+
+    /**
+     * @param oldColorInterpretation
+     * @param newColorInterpretation
+     */
+    public ChangePaletteBandEvent(int oldPaletteBand, int newPaletteBand) {
+        super(LEGEND_CHANGED, RASTER_LEGEND_PALETTE_BAND_CHANGED);
+        this.oldPaletteBand = oldPaletteBand;
+        this.newPaletteBand = newPaletteBand;
+    }
+
+    /**
+     * @return the oldColorInterpretation
+     */
+    public int getOldColorInterpretation() {
+        return oldPaletteBand;
+    }
+
+    /**
+     * @return the newColorInterpretation
+     */
+    public int getNewColorInterpretation() {
+        return newPaletteBand;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEventBase.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEventBase.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEventBase.java	(revision 46118)
@@ -0,0 +1,82 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.raster.api.legend;
+
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendEventBase;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RasterLegendEventBase extends LegendEventBase implements RasterLegendEvent{
+
+
+    /**
+     * Layer of the legend where the event was produced.
+     */
+    private RasterLayer layer;
+
+    /**
+     * @param type
+     * @param subtype
+     */
+    public RasterLegendEventBase(int type, int subtype) {
+        super(type, subtype);
+    }
+
+    /**
+     * <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.
+     */
+    public RasterLayer getRasterLayer() {
+        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.
+     */
+    public void setRasterLayer(RasterLayer layer) {
+        this.layer = layer;
+    }
+
+//    @Override
+//    public void setEventSubtype(int eventSubtype) {
+//        super.setEventSubtype(eventSubtype);
+//        switch (eventSubtype) {
+//        case RASTER_LEGEND_COLORINTERPRETATION_CHANGED:
+//        case RASTER_LEGEND_PALETTE_CHANGED:
+//        case RASTER_LEGEND_PALETTE_BAND_CHANGED:
+//        case RASTER_LEGEND_FILTERS_CHANGED:
+//            this.setEventType(LEGEND_CHANGED);
+//            break;
+//
+//        default:
+//            break;
+//        }
+//    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeColorInterpretationEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeColorInterpretationEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeColorInterpretationEvent.java	(revision 46118)
@@ -0,0 +1,38 @@
+package org.gvsig.fmap.mapcontext.raster.api.legend;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public final class ChangeColorInterpretationEvent extends RasterLegendEventBase {
+
+
+    private String[] oldColorInterpretation;
+    private String[] newColorInterpretation;
+
+    /**
+     * @param oldColorInterpretation
+     * @param newColorInterpretation
+     */
+    public ChangeColorInterpretationEvent(String[] oldColorInterpretation, String[] newColorInterpretation) {
+        super(LEGEND_CHANGED, RASTER_LEGEND_COLORINTERPRETATION_CHANGED);
+        this.oldColorInterpretation = oldColorInterpretation;
+        this.newColorInterpretation = newColorInterpretation;
+    }
+
+    /**
+     * @return the oldColorInterpretation
+     */
+    public String[] getOldColorInterpretation() {
+        return oldColorInterpretation;
+    }
+
+    /**
+     * @return the newColorInterpretation
+     */
+    public String[] getNewColorInterpretation() {
+        return newColorInterpretation;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/RasterLegendEvent.java	(revision 46118)
@@ -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.raster.api.legend;
+
+import org.gvsig.fmap.mapcontext.events.FMapEvent;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendEvent;
+
+
+
+
+/**
+ * <p><code>LegendEvent</code> represents an event produced at a legend in a layer.</p>
+ *
+ * @see FMapEvent
+ */
+public interface RasterLegendEvent extends LegendEvent {
+
+	/**
+	 * <p>Identifies this event as a change of the color interpretation of a legend.</p>
+	 */
+	public static final int RASTER_LEGEND_COLORINTERPRETATION_CHANGED = 300;
+
+    /**
+     * <p>Identifies this event as a change of the color interpretation of a legend.</p>
+     */
+    public static final int RASTER_LEGEND_PALETTE_CHANGED = 301;
+
+    /**
+     * <p>Identifies this event as a change of the color interpretation of a legend.</p>
+     */
+    public static final int RASTER_LEGEND_PALETTE_BAND_CHANGED = 302;
+
+	   /**
+     * <p>Identifies this event as a change of the filters of a legend.</p>
+     */
+    public static final int RASTER_LEGEND_FILTERS_CHANGED = 303;
+
+
+	/**
+	 * <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.
+	 *
+	 */
+	public RasterLayer getRasterLayer();
+
+	/**
+	 * <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.
+	 */
+	public void setRasterLayer(RasterLayer layer);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeOperationListEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeOperationListEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangeOperationListEvent.java	(revision 46118)
@@ -0,0 +1,64 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2018 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.raster.api.legend;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.buffer.api.operations.OperationListEntry;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ChangeOperationListEvent extends RasterLegendEventBase {
+
+    private List<OperationListEntry> oldEntries;
+    private List<OperationListEntry> newEntries;
+
+    /**
+     * @param oldEntries
+     * @param newEntries
+     */
+    public ChangeOperationListEvent(List<OperationListEntry> oldEntries, List<OperationListEntry> newEntries) {
+        super(LEGEND_CHANGED, RASTER_LEGEND_FILTERS_CHANGED);
+        this.oldEntries = oldEntries;
+        this.newEntries = newEntries;
+
+    }
+
+    /**
+     * @return the oldOperationList
+     */
+    public List<OperationListEntry> getOldOperationList() {
+        return oldEntries;
+    }
+
+    /**
+     * @return the newOperationList
+     */
+    public List<OperationListEntry> getNewOperationList() {
+        return newEntries;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/raster/api/legend/ChangePaletteEvent.java	(revision 46118)
@@ -0,0 +1,40 @@
+package org.gvsig.fmap.mapcontext.raster.api.legend;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ChangePaletteEvent extends RasterLegendEventBase {
+
+
+    private ColorTable oldColorTable;
+    private ColorTable newColorTable;
+
+    /**
+     * @param oldColorInterpretation
+     * @param newColorInterpretation
+     */
+    public ChangePaletteEvent(ColorTable oldColorTable, ColorTable newColorTable) {
+        super(LEGEND_CHANGED, RASTER_LEGEND_PALETTE_CHANGED);
+        this.oldColorTable = oldColorTable;
+        this.newColorTable = newColorTable;
+    }
+
+    /**
+     * @return the oldColorInterpretation
+     */
+    public ColorTable getOldColorTable() {
+        return oldColorTable;
+    }
+
+    /**
+     * @return the newColorInterpretation
+     */
+    public ColorTable getNewColorTable() {
+        return newColorTable;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/pom.xml	(revision 46118)
@@ -0,0 +1,123 @@
+<?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.344</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>
+    <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.raster.lib.buffer.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.raster.lib.buffer.spi</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>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.dal.api</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.dynform.spi</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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.fmap.geom.operation.MapContextGeomOperationsLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.fmap.geom.operation;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+
+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.GeometryException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.aggregate.MultiLine;
+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.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.ViewPort;
+import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+import org.gvsig.tools.task.Cancellable;
+
+/**
+ * @author gvSIG Team
+ *
+ */
+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();
+        try {
+            if (doc.hasDPI()) {
+                double previousSize = ((CartographicSupport) symbol).toCartographicSize(viewPort, doc.getDPI(), geom);
+                // draw it as normally
+                Geometry transformedGeometry;
+                transformedGeometry = transformGeometry(geom.cloneGeometry(), viewPort.getAffineTransform());
+
+                // the AffineTransform has to be null because the transformToInts method reprojects the geometry
+                symbol.draw(g, null, transformedGeometry, doc.getFeature(), cancel);
+
+                // restore previous size
+                ((CartographicSupport) symbol).setCartographicSize(previousSize, geom);
+            } else {
+                // Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
+                Geometry transformedGeometry = transformGeometry(geom.cloneGeometry(), viewPort.getAffineTransform());
+                symbol.draw(g, viewPort.getAffineTransform(), transformedGeometry, doc.getFeature(), cancel);
+            }
+        } catch (GeometryException e) {
+		    throw new GeometryOperationException(e);
+		}
+
+		return null;
+	}
+
+	/**
+     * @param geom
+     * @param affineTransform
+     * @return
+	 * @throws GeometryException
+     */
+    private Geometry transformGeometry(Geometry geom, AffineTransform affineTransform) throws GeometryException {
+        if(geom.canBeTransformed(affineTransform)){
+            geom.transform(affineTransform);
+            return geom;
+        }
+        if(geom instanceof Curve || geom instanceof Curve){
+            MultiLine lines = geom.toLines();
+            lines.transform(affineTransform);
+            return lines;
+        }
+        if(geom instanceof Surface || geom instanceof MultiSurface){
+            MultiPolygon polygons = geom.toPolygons();
+            polygons.transform(affineTransform);
+            return polygons;
+        }
+        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;
+		GeometryType geometryType = gp.getGeometryType();
+
+		if(geometryType.isTypeOf(Geometry.TYPES.POINT)){
+		    geom = geomManager.createPoint(ptDst.getX(), ptDst.getY(), SUBTYPES.GEOM2D);
+		} else if(geometryType.isTypeOf(Geometry.TYPES.MULTIPOINT)){
+            geom = geomManager.createMultiPoint(newGp, SUBTYPES.GEOM2D);
+		} else if(geometryType.isTypeOf(Geometry.TYPES.CURVE)){
+		    geom = geomManager.createCurve(newGp, SUBTYPES.GEOM2D);
+        } else if(geometryType.isTypeOf(Geometry.TYPES.MULTICURVE)){
+            geom = geomManager.createMultiCurve(newGp, SUBTYPES.GEOM2D);
+		} else if(geometryType.isTypeOf(Geometry.TYPES.SURFACE)){
+		    geom = geomManager.createSurface(newGp, SUBTYPES.GEOM2D);
+        } else if(geometryType.isTypeOf(Geometry.TYPES.MULTISURFACE)){
+            geom = geomManager.createMultiSurface(newGp, SUBTYPES.GEOM2D);
+		}
+		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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml	(revision 46118)
@@ -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.327-SNAPSHOT</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorManager.java	(revision 46118)
@@ -0,0 +1,522 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl;
+
+
+
+/**
+ * Coversi�n de de colores y valores de pixel aplicando distintos m�todos.
+ *
+ * 31/10/2007
+ * @author Nacho Brodin nachobrodin@gmail.com
+ * 04/12/2017
+ * @author fdiaz
+ */
+public class DefaultColorManager implements ColorManager {
+
+    public double[] RGBtoHSL(int sourceRed, int sourceGreen, int sourceBlue) {
+        double scaler, scaleg, scaleb;
+        double sat;
+        double red, green, blue;
+        double low, high, intens;
+        double hue = 0.0;
+        double[] res1 = new double[3];
+
+        scaler = (double) (sourceRed / 255.0);
+        scaleg = (double) (sourceGreen / 255.0);
+        scaleb = (double) (sourceBlue / 255.0);
+
+        high = scaler;
+
+        if (scaleg > high) {
+            high = scaleg;
+        }
+        if (scaleb > high) {
+            high = scaleb;
+        }
+        low = scaler;
+        if (scaleg < low) {
+            low = scaleg;
+        }
+        if (scaleb < low) {
+            low = scaleb;
+        }
+
+        intens = ((high + low) / 2.0);
+        if (high == low) {
+            sat = 0.0;
+            hue = 0.0;
+            res1[0] = (double) hue;
+            res1[1] = (double) sat;
+            res1[2] = (double) intens;
+        } else if (high != low) {
+            if (intens <= 0.5) {
+                sat = (high - low) / (high + low);
+            } else {
+                sat = (high - low) / (2 - high - low);
+            }
+            red = (high - scaler) / (high - low);
+            green = (high - scaleg) / (high - low);
+            blue = (high - scaleb) / (high - low);
+            if (scaler == high) {
+                hue = blue - green;
+            } else {
+                if (scaleg == high) {
+                    hue = 2 + red - blue;
+                } else {
+                    if (scaleb == high) {
+                        hue = 4 + green - red;
+                    }
+                }
+            }
+            hue *= 60.0;
+            if (hue < 0.0) {
+                hue += 360.0;
+            }
+            res1[0] = (double) (hue);
+            res1[1] = (double) (sat);
+            res1[2] = (double) (intens);
+        }
+        return res1;
+    }
+
+    public double[] RGBtoHSV(int sourceRed, int sourceGreen, int sourceBlue) {
+        double scaler, scaleg, scaleb;
+        double sat;
+        double red, green, blue;
+        double low, high, value;
+        double hue = 0.0;
+        double[] res1 = new double[3];
+
+        scaler = (double) (sourceRed / 255.0);
+        scaleg = (double) (sourceGreen / 255.0);
+        scaleb = (double) (sourceBlue / 255.0);
+
+        high = scaler;
+
+        if (scaleg > high) {
+            high = scaleg;
+        }
+        if (scaleb > high) {
+            high = scaleb;
+        }
+        low = scaler;
+        if (scaleg < low) {
+            low = scaleg;
+        }
+        if (scaleb < low) {
+            low = scaleb;
+        }
+
+        value = high;
+        if (high == 0) {
+            sat = 0.0;
+            hue = 0.0;
+            res1[0] = (double) hue;
+            res1[1] = (double) sat;
+            res1[2] = (double) value;
+        } else {
+            sat = (high - low) / high;
+            red = (high - scaler) / (high - low);
+            green = (high - scaleg) / (high - low);
+            blue = (high - scaleb) / (high - low);
+            if (scaler == high) {
+                hue = blue - green;
+            } else if (scaleg == high) {
+                hue = 2 + red - blue;
+            } else if (scaleb == high) {
+                hue = 4 + green - red;
+            }
+            hue *= 60.0;
+            if (hue < 0.0) {
+                hue += 360.0;
+            }
+            res1[0] = (double) (hue);
+            res1[1] = (double) (sat);
+            res1[2] = (double) (value);
+        }
+        return res1;
+    }
+    /**
+     * return HSLtoRGB((360.0 * h / 255.0), (s / 255.0), (i / 255.0));
+     */
+    public int[] HSLtoRGB(int h, int s, int l) {
+        /*
+         * return HSLtoRGB((360.0 * h / 255.0),
+         * (s / 255.0),
+         * (i / 255.0));
+         */
+        double red; /* the red band output */
+        double red255; /* the red band output */
+        double green; /* the green band output */
+        double green255; /* the green band output */
+        double blue; /* the blue band output */
+        double blue255; /* the blue band output */
+        double m1; /* value used for determining RGB */
+        double m2; /* value used for determining RGB */
+        double scalei; /* intensity value */
+        double scales; /* saturation value */
+        double hue; /* hue */
+        double savehue; /* save the hue for future processing */
+        int[] res = new int[3];
+
+        if (h == s && h == 0) {
+            res[0] = res[1] = res[2] = l;
+            return res;
+        }
+
+        red = green = blue = 0.0;
+        scalei = (double) (l / 255.0);
+        scales = (double) (s / 255.0);
+        m2 = 0.0;
+
+        if (scalei <= 0.50) {
+            m2 = scalei * (1.0 + scales);
+        } else if (scalei > 0.50) {
+            m2 = scalei + scales - (scalei * scales);
+        }
+        m1 = 2.0 * scalei - m2;
+
+        hue = (double) 360.0 * h / 255.0;
+
+        if (scales == 0.0) {
+            if (hue == -1.0) {
+                red = scalei;
+                green = scalei;
+                blue = scalei;
+            }
+        } else {
+            savehue = hue + 120.0;
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                red = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                red = m2;
+            } else if (savehue < 240.0) {
+                red = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                red = m1;
+            }
+
+            savehue = hue;
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                green = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                green = m2;
+            } else if (savehue < 240.0) {
+                green = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                green = m1;
+            }
+            savehue = hue - 120.0;
+
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                blue = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                blue = m2;
+            } else if (savehue < 240.0) {
+                blue = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                blue = m1;
+            }
+        }
+
+        red255 = red * 255.0;
+        green255 = green * 255.0;
+        blue255 = blue * 255.0;
+        if (red255 > 255.0) {
+            red = 255.0;
+        } else {
+            red = red255;
+        }
+        if (green255 > 255.0) {
+            green = 255.0;
+        } else {
+            green = green255;
+        }
+        if (blue255 > 255.0) {
+            blue = 255.0;
+        } else {
+            blue = blue255;
+        }
+
+        //FIXME: ??????????
+
+        if (red > 254.5) {
+            red = 254.5;
+        }
+        if (red < 0.0) {
+            red = 0.0;
+        }
+        if (green > 254.5) {
+            green = 254.5;
+        }
+        if (green < 0.0) {
+            green = 0.0;
+        }
+        if (blue > 254.5) {
+            blue = 254.5;
+        }
+        if (blue < 0.0) {
+            blue = 0.0;
+        }
+
+        res[0] = (int) (red + 0.5);
+        res[1] = (int) (green + 0.5);
+        res[2] = (int) (blue + 0.5);
+        return res;
+    }
+
+    public int[] HSLtoRGB(double h, double s, double l) {
+        double red; /* the red band output */
+        double red255; /* the red band output */
+        double green; /* the green band output */
+        double green255; /* the green band output */
+        double blue; /* the blue band output */
+        double blue255; /* the blue band output */
+        double m1; /* value used for determining RGB */
+        double m2; /* value used for determining RGB */
+        double scalei; /* intensity value */
+        double scales; /* saturation value */
+        double hue; /* hue */
+        double savehue; /* save the hue for future processing */
+        int[] res = new int[3];
+
+        if (h == s && h == 0) {
+            res[0] = res[1] = res[2] = (int) (l * 255);
+            return res;
+        }
+
+        red = green = blue = 0.0;
+        scalei = l;
+        scales = s;
+        m2 = 0.0;
+
+        if (scalei <= 0.50) {
+            m2 = scalei * (1.0 + scales);
+        } else if (scalei > 0.50) {
+            m2 = scalei + scales - (scalei * scales);
+        }
+        m1 = 2.0 * scalei - m2;
+
+        hue = h;
+
+        if (scales == 0.0) {
+            if (hue == -1.0) {
+                red = scalei;
+                green = scalei;
+                blue = scalei;
+            }
+        } else {
+            savehue = hue + 120.0;
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                red = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                red = m2;
+            } else if (savehue < 240.0) {
+                red = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                red = m1;
+            }
+
+            savehue = hue;
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                green = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                green = m2;
+            } else if (savehue < 240.0) {
+                green = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                green = m1;
+            }
+            savehue = hue - 120.0;
+
+            if (savehue > 360.0) {
+                savehue -= 360.0;
+            }
+            if (savehue < 0.0) {
+                savehue += 360.0;
+            }
+            if (savehue < 60.0) {
+                blue = m1 + (m2 - m1) * savehue / 60.0;
+            } else if (savehue < 180.0) {
+                blue = m2;
+            } else if (savehue < 240.0) {
+                blue = m1 + (m2 - m1) * (240.0 - savehue) / 60.0;
+            } else {
+                blue = m1;
+            }
+        }
+
+        red255 = red * 255.0;
+        green255 = green * 255.0;
+        blue255 = blue * 255.0;
+        if (red255 > 255.0) {
+            red = 255.0;
+        } else {
+            red = red255;
+        }
+        if (green255 > 255.0) {
+            green = 255.0;
+        } else {
+            green = green255;
+        }
+        if (blue255 > 255.0) {
+            blue = 255.0;
+        } else {
+            blue = blue255;
+        }
+
+        if (red > 254.5) {
+            red = 254.5;
+        }
+        if (red < 0.0) {
+            red = 0.0;
+        }
+        if (green > 254.5) {
+            green = 254.5;
+        }
+        if (green < 0.0) {
+            green = 0.0;
+        }
+        if (blue > 254.5) {
+            blue = 254.5;
+        }
+        if (blue < 0.0) {
+            blue = 0.0;
+        }
+
+        res[0] = (int) (red + 0.5);
+        res[1] = (int) (green + 0.5);
+        res[2] = (int) (blue + 0.5);
+        return res;
+    }
+
+    public double[] RGBtoCMYK(int red, int green, int blue, double kScale) {
+        double[] cmyk = new double[4];
+        double r = red / 255D;
+        double g = green / 255D;
+        double b = blue / 255D;
+        cmyk[3] = 1D - Math.max(r, Math.max(g, b));
+
+        cmyk[0] = 0;
+        cmyk[1] = 0;
+        cmyk[2] = 0;
+        if(cmyk[3]!=1){
+            cmyk[0] = ((double) (1 - r - cmyk[3]) / (double) (1D - cmyk[3])) * kScale;
+            cmyk[1] = ((double) (1 - g - cmyk[3]) / (double) (1D - cmyk[3])) * kScale;
+            cmyk[2] = ((double) (1 - b - cmyk[3]) / (double) (1D - cmyk[3])) * kScale;
+        }
+        cmyk[3] *= kScale;
+        return cmyk;
+    }
+
+    public double[] CMYKtoRGB(double cyan, double magenta, double yellow, double key) {
+        double[] rgb = new double[3];
+
+      rgb[0] = (1D - cyan)*(1-key);
+      rgb[1] = (1D - magenta)*(1-key);
+      rgb[2] = (1D - yellow)*(1-key);
+
+        return rgb;
+    }
+
+    public double getLuminosity(int red, int green, int blue) {
+        double   scaler, scaleg, scaleb;
+        double   low, high;
+
+        scaler = (double) (red / 255.0);
+        scaleg = (double) (green / 255.0);
+        scaleb = (double) (blue / 255.0);
+
+        high = scaler;
+
+        if (scaleg > high) {
+            high = scaleg;
+        }
+        if (scaleb > high) {
+            high = scaleb;
+        }
+        low = scaler;
+        if (scaleg < low) {
+            low = scaleg;
+        }
+        if (scaleb < low) {
+            low = scaleb;
+        }
+
+        return ((high + low) / 2.0);
+    }
+
+    public byte[] getARGBFromIntToByteArray(int rgb) {
+        byte[] b = new byte[4];
+        b[0] = (byte) ((rgb & 0x00ff0000) >> 16);
+        b[1] = (byte) ((rgb & 0x0000ff00) >> 8);
+        b[2] = (byte) (rgb & 0x000000ff);
+        b[3] = (byte) ((rgb & 0xff000000) >> 24);
+        return b;
+    }
+
+    public int[] getARGBFromIntToIntArray(int rgb) {
+        int[] i = new int[4];
+        i[0] = (((rgb & 0x00ff0000) >> 16) & 0xff);
+        i[1] = (((rgb & 0x0000ff00) >> 8) & 0xff);
+        i[2] = ((rgb & 0x000000ff) & 0xff);
+        i[3] = (((rgb & 0xff000000) >> 24) & 0xff);
+        return i;
+    }
+
+    public int getIntFromARGB(int a, int r, int g, int b) {
+        return (((a & 0xff) << 24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparency.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparency.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparency.java	(revision 46118)
@@ -0,0 +1,206 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.Transparency;
+import org.gvsig.raster.lib.legend.api.TransparencyRange;
+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 <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultTransparency implements Transparency {
+
+    private final static String PERSISTENCE_NAME = "transparency";
+    private final static String PERSISTENCE_DESCRIPTION = "Transparency persistence description";
+    private final static String OPACITY_PERSISTENCE_FIELD = "opacity";
+    private final static String TRANSPARENCY_RANGES_PERSISTENCE_FIELD = "transparencyRanges";
+
+    public final static String OPACITY_PROPERTY_NAME = "opacity";
+    public final static String TRANSPARENCY_RANGES_PROPERTY_NAME = "transparencyRanges";
+
+    private PropertyChangeSupport propertyChangeSupport;
+    private int value;
+    private List<TransparencyRange> transparencyRanges;
+
+    /**
+     *
+     */
+    public DefaultTransparency() {
+        this.propertyChangeSupport = new PropertyChangeSupport(this);
+        this.value = 255;
+        this.transparencyRanges = new ArrayList<TransparencyRange>();
+    }
+
+    /**
+     * @param transparency
+     * @param transparencyRanges
+     */
+    public DefaultTransparency(int transparency, List<TransparencyRange> transparencyRanges) {
+        this();
+        this.setValue(transparency);
+        if(transparencyRanges != null){
+            this.transparencyRanges = transparencyRanges;
+        }
+    }
+
+    @Override
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+        propertyChangeSupport.addPropertyChangeListener(listener);
+    }
+
+    @Override
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        propertyChangeSupport.removePropertyChangeListener(listener);
+    }
+
+    @Override
+    public int getAlpha() {
+        return this.value;
+    }
+
+    @Override
+    public List<TransparencyRange> getTransparencyRanges() {
+        return Collections.unmodifiableList(this.transparencyRanges);
+    }
+
+    @Override
+    public void addTransparencyRange(TransparencyRange range) {
+        if (this.transparencyRanges == null) {
+            this.transparencyRanges = new ArrayList<TransparencyRange>();
+        }
+
+        List<TransparencyRange> oldTransparencyRanges = getTransparencyRanges();
+        this.transparencyRanges.add(range);
+        propertyChangeSupport.firePropertyChange(TRANSPARENCY_RANGES_PROPERTY_NAME,
+            oldTransparencyRanges, transparencyRanges);
+    }
+
+    @Override
+    public void removeTransparencyRange(TransparencyRange range) {
+        if (this.transparencyRanges == null) {
+            return;
+        }
+
+        List<TransparencyRange> oldTransparencyRanges = getTransparencyRanges();
+        this.transparencyRanges.remove(range);
+        propertyChangeSupport.firePropertyChange(TRANSPARENCY_RANGES_PROPERTY_NAME,
+            oldTransparencyRanges, transparencyRanges);
+    }
+
+    @Override
+    public void setValue(int value) {
+
+        if(value < 0 || value > 255){
+            throw new IllegalArgumentException("Opacity value has to be between 0 and 255");
+        }
+
+        if(value != this.value){
+            propertyChangeSupport.firePropertyChange(OPACITY_PROPERTY_NAME, this.value, value);
+            this.value = value;
+        }
+    }
+
+    @Override
+    public void setTransparencyRanges(List<TransparencyRange> ranges) {
+        propertyChangeSupport.firePropertyChange(TRANSPARENCY_RANGES_PROPERTY_NAME,
+            this.transparencyRanges, ranges);
+        this.transparencyRanges = ranges;
+    }
+
+    public static void registerPersistence() {
+
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+        if (definition == null) {
+            definition =
+                persistenceManager.addDefinition(DefaultTransparency.class, PERSISTENCE_NAME,
+                    PERSISTENCE_DESCRIPTION, null, null);
+
+            definition.addDynFieldInt(OPACITY_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldList(TRANSPARENCY_RANGES_PERSISTENCE_FIELD)
+                .setClassOfValue(TransparencyRange.class).setMandatory(false);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(OPACITY_PERSISTENCE_FIELD, value);
+        state.set(TRANSPARENCY_RANGES_PERSISTENCE_FIELD, this.transparencyRanges);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.value = state.getInt(OPACITY_PERSISTENCE_FIELD);
+        this.transparencyRanges = state.getList(TRANSPARENCY_RANGES_PERSISTENCE_FIELD);
+    }
+
+    @Override
+    public int getTransparencyRangeAlpha(byte r, byte g, byte b) {
+        int red = r;
+        int green = g;
+        int blue = b;
+        if(red<0){
+            red = 255+red;
+        }
+        if(green<0){
+            green = 255+green;
+        }
+        if(blue<0){
+            blue = 255+blue;
+        }
+        return getTransparencyRangeAlpha(red, green, blue);
+    }
+
+    @Override
+    public int getTransparencyRangeAlpha(int red, int green, int blue) {
+
+        int alpha = 255;
+        for (int i = 0; i < transparencyRanges.size(); i++) {
+            int alphaRange = 255;
+            TransparencyRange tr = ((TransparencyRange) transparencyRanges.get(i));
+            if (tr == null){
+                continue;
+            }
+            if (tr.isAnd()) {
+                if(isInRange(tr.getRed(),red) && isInRange(tr.getGreen(), green) && isInRange(tr.getBlue(), blue)){
+                    alphaRange = tr.getAlpha();
+                }
+            } else if(isInRange(tr.getRed(),red) || isInRange(tr.getGreen(), green) || isInRange(tr.getBlue(), blue)){
+                    alphaRange = tr.getAlpha();
+            } else {
+                continue;
+            }
+            alpha = alpha * alphaRange/255;
+        }
+        return alpha;
+    }
+
+    private boolean isInRange(int[] range, int value) {
+        if(range==null){
+            return true;
+        }
+        if(range[0]<0 && value<=range[1]){
+            return true;
+        }
+        if(range[1]<0 && value>=range[0]){
+            return true;
+        }
+        if(range[0]<0 && range[1]<0){
+            return true;
+        }
+        if(value>=range[0] && value<=range[1]){
+            return true;
+        }
+        return false;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/RasterLegendManagerServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/RasterLegendManagerServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/RasterLegendManagerServices.java	(revision 46118)
@@ -0,0 +1,39 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface RasterLegendManagerServices extends RasterLegendManager {
+
+    /**
+     * @return
+     */
+    public ColorManager getColorManager();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorUtils.java	(revision 46118)
@@ -0,0 +1,154 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.awt.Color;
+
+/**
+ * Utility class to color conversions
+ * @author dmartinezizquierdo
+ *
+ */
+public class ColorUtils {
+
+    /**
+     *
+     * @param y
+     * @param cb
+     * @param cr
+     * @return the RGB values
+     */
+    public static Number[] fromYCBCRtoRGB(float y, float cb, float cr){
+        Number[] rgbValues = new Number[3];
+
+        int r = (int) (y + 1.40200 * (cr - 0x80));
+        int g = (int) (y - 0.34414 * (cb - 0x80) - 0.71414 * (cr - 0x80));
+        int b = (int) (y + 1.77200 * (cb - 0x80));
+
+        rgbValues[0] = Math.max(0, Math.min(255, r));
+        rgbValues[1] = Math.max(0, Math.min(255, g));
+        rgbValues[2] = Math.max(0, Math.min(255, b));
+
+        return rgbValues;
+    }
+
+    /**
+     * Convert CMYK values to RGB values
+     * NOTE: Conversion maybe very inaccurate
+     *
+     * @param cyan
+     * @param magenta
+     * @param yellow
+     * @param black
+     * @return the RGB values
+     */
+    public static Number[] fromCMYKtoRGB(float cyan, float magenta, float yellow, float black){
+        //TODO: ICC profiles should be used to more precise conversion, as shown here:
+        //http://stackoverflow.com/questions/3123574/how-to-convert-from-cmyk-to-rgb-in-java-correctly
+        Number[] rgbValues = new Number[3];
+
+        float colors = 255 - black;
+        rgbValues[0] = colors * (255 - cyan) / 255;
+        rgbValues[1] = colors * (255 - magenta) / 255;
+        rgbValues[2] = colors * (255 - yellow) / 255;
+        return rgbValues;
+    }
+
+    /**
+     *  Convert HSL values to RGBA values with a default alpha value of 1.
+     *
+     *  @param h Hue is specified as degrees in the range 0 - 360.
+     *  @param s Saturation is specified as a percentage in the range 1 - 100.
+     *  @param l Lumanance is specified as a percentage in the range 1 - 100.
+     *
+     *  @returns the RGBA values
+     */
+    public static Number[] fromHSLtoRGBA(float h, float s, float l)
+    {
+        return fromHSLtoRGBA(h, s, l, 1.0f);
+    }
+
+    /**
+     *  Convert HSL values to RGBA values
+     *
+     *  @param h Hue is specified as degrees in the range 0 - 360.
+     *  @param s Saturation is specified as a percentage in the range 1 - 100.
+     *  @param l Lumanance is specified as a percentage in the range 1 - 100.
+     *  @param alpha  the alpha value between 0 - 1
+     *
+     *  @returns the RGBA values
+     */
+    public static Number[] fromHSLtoRGBA(float h, float s, float l, float alpha)
+    {
+        if (s <0.0f || s > 100.0f)
+        {
+            String message = "Color parameter outside of expected range - Saturation";
+            throw new IllegalArgumentException( message );
+        }
+
+        if (l <0.0f || l > 100.0f)
+        {
+            String message = "Color parameter outside of expected range - Luminance";
+            throw new IllegalArgumentException( message );
+        }
+
+        if (alpha <0.0f || alpha > 1.0f)
+        {
+            String message = "Color parameter outside of expected range - Alpha";
+            throw new IllegalArgumentException( message );
+        }
+
+        //  Formula needs all values between 0 - 1.
+
+        h = h % 360.0f;
+        h /= 360f;
+        s /= 100f;
+        l /= 100f;
+
+        float q = 0;
+
+        if (l < 0.5)
+            q = l * (1 + s);
+        else
+            q = (l + s) - (s * l);
+
+        float p = 2 * l - q;
+
+        float r = Math.max(0, HueToRGB(p, q, h + (1.0f / 3.0f)));
+        float g = Math.max(0, HueToRGB(p, q, h));
+        float b = Math.max(0, HueToRGB(p, q, h - (1.0f / 3.0f)));
+
+        r = Math.min(r, 1.0f);
+        g = Math.min(g, 1.0f);
+        b = Math.min(b, 1.0f);
+
+        Number[] rgbValues=new Number[4];
+        rgbValues[0]=r;
+        rgbValues[1]=g;
+        rgbValues[2]=b;
+        rgbValues[3]=alpha;
+        return rgbValues;
+    }
+
+    private static float HueToRGB(float p, float q, float h)
+    {
+        if (h < 0) h += 1;
+
+        if (h > 1 ) h -= 1;
+
+        if (6 * h < 1)
+        {
+            return p + ((q - p) * 6 * h);
+        }
+
+        if (2 * h < 1 )
+        {
+            return  q;
+        }
+
+        if (3 * h < 2)
+        {
+            return p + ( (q - p) * 6 * ((2.0f / 3.0f) - h) );
+        }
+
+        return p;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegendManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegendManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegendManager.java	(revision 46118)
@@ -0,0 +1,310 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.awt.Color;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.IndexColorModel;
+import java.awt.image.WritableRaster;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.Transparency;
+import org.gvsig.raster.lib.legend.api.TransparencyRange;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+import org.gvsig.raster.lib.legend.api.colortable.MakeColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.impl.colortable.DefaultMakeColorTable;
+import org.gvsig.raster.lib.legend.impl.io.gvSIGColorTableIO;
+
+/**
+ * Default implementation of {@link RasterLegendManager}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultRasterLegendManager implements RasterLegendManagerServices {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultRasterLegendManager.class);
+
+    private Map<String, ColorTableIOFactory> colorTableIOFactories =
+        new HashMap<String, ColorTableIOFactory>();
+
+    private ColorManager colorManager;
+
+    @Override
+    public RasterLegend createLegend() {
+        return new DefaultRasterLegend();
+    }
+
+    @Override
+    public RasterLegend createLegend(ColorInterpretation colorInterpretation) {
+        return new DefaultRasterLegend(colorInterpretation);
+    }
+
+    @Override
+    public RasterLegend createLegend(ColorInterpretation colorInterpretation,
+        Transparency transparency, OperationList filters) {
+        return new DefaultRasterLegend(colorInterpretation, transparency, filters);
+    }
+
+    @Override
+    public List<Pair<File, ColorTable>> getColorTables(File folder) {
+
+        if (folder.isFile()) {
+            throw new IllegalArgumentException("File object has to be a directory");
+        }
+
+        if (!folder.canRead()) {
+            throw new IllegalArgumentException(
+                "It is necessary read permissions to get files and load color tables");
+        }
+
+        List<Pair<File, ColorTable>> colorTables = new ArrayList<Pair<File, ColorTable>>();
+        for (File file : listFilesForFolder(folder)) {
+
+            Collection<ColorTableIOFactory> factories = this.colorTableIOFactories.values();
+            for (ColorTableIOFactory colorTableIOFactory : factories) {
+
+                if(colorTableIOFactory.accept(file)){
+                    ColorTableIO colorTableIO = colorTableIOFactory.create();
+                    try{
+                        ColorTable colorTable = colorTableIO.read(file);
+                        colorTables.add(new ImmutablePair<File, ColorTable>(file,colorTable));
+                        break;
+                    } catch (Exception e){
+                        // Log warn but continue reading files.
+                        LOG.warn(String.format(
+                            "%1s factory accepts file but it can not get ColorTable from file",
+                            colorTableIOFactory.getName()), e);
+                    }
+                }
+            }
+        }
+
+        return colorTables;
+    }
+
+    private List<File> listFilesForFolder(File folder) {
+        List<File> files = new ArrayList<File>();
+        for (File fileEntry : folder.listFiles()) {
+            if (fileEntry.isDirectory()) {
+                listFilesForFolder(fileEntry);
+            } else {
+                files.add(fileEntry);
+            }
+        }
+        return files;
+    }
+
+    @Override
+    public ColorTable createColorTable() {
+        return new DefaultColorTable();
+    }
+
+    @Override
+    public ColorTable createColorTable(String name, List<ColorTableClass> colorTableClasses,
+        boolean interpolated) {
+        return new DefaultColorTable(name, colorTableClasses, interpolated);
+    }
+
+    @Override
+    public List<ColorTableClass> createListColorTableClasses(double minimum, double maximum, int intervals, Color fromColor, Color toColor){
+        double intervalSize = (maximum-minimum)/intervals;
+        return createListColorTableClasses(minimum, maximum, intervalSize, fromColor, toColor);
+
+    }
+
+    @Override
+    public List<ColorTableClass> createListColorTableClasses(double minimum, double maximum, double intervalSize, Color fromColor, Color toColor){
+        List<ColorTableClass> colorTableClasses = new ArrayList<ColorTableClass>();
+
+        int counter = 0;
+        double value = minimum;
+
+        Color color = fromColor;
+        while(value<maximum){
+            double proportion = (value-minimum)/(maximum-minimum);
+            color = getInterpolatedColor(fromColor, toColor, proportion);
+            ColorTableClass colorTableClass = this.createColorTableClass(new Integer(counter).toString(), value, 50.0, color);
+            colorTableClasses.add(colorTableClass);
+            value = value + intervalSize;
+            counter++;
+        }
+        value = maximum;
+        ColorTableClass colorTableClass = this.createColorTableClass(new Integer(counter).toString(), value, 50.0, toColor);
+        colorTableClasses.add(colorTableClass);
+
+        return colorTableClasses;
+    }
+
+    private Color getInterpolatedColor(Color fromColor, Color toColor, double proportion){
+        int red = fromColor.getRed();
+        int green = fromColor.getGreen();
+        int blue = fromColor.getBlue();
+        int alpha = fromColor.getAlpha();
+
+            int rangeRed = toColor.getRed()-fromColor.getRed();
+            red = (int)Math.round(fromColor.getRed()+(rangeRed*proportion));
+
+            int rangeGreen = toColor.getGreen()-fromColor.getGreen();
+            green = (int)Math.round(fromColor.getGreen()+(rangeGreen*proportion));
+
+            int rangeBlue = toColor.getBlue()-fromColor.getBlue();
+            blue = (int)Math.round(fromColor.getBlue()+(rangeBlue*proportion));
+
+            int rangeAlpha = toColor.getAlpha()-fromColor.getAlpha();
+            alpha = (int)Math.round(fromColor.getAlpha()+(rangeAlpha*proportion));
+
+        return new Color(red, green, blue, alpha);
+    }
+
+    @Override
+    public ColorTableIO getColorTableIO() {
+        ColorTableIOFactory defaultFactory = this.colorTableIOFactories.get(gvSIGColorTableIO.NAME);
+        if (defaultFactory == null) {
+            if (this.colorTableIOFactories.isEmpty()) {
+                LOG.warn("Any default Color Table IO factory registered");
+                return null;
+            }
+        }
+        return defaultFactory.create();
+    }
+
+    @Override
+    public List<ColorTableIOFactory> getColorTableIOFactories() {
+        return new ArrayList<ColorTableIOFactory>(this.colorTableIOFactories.values());
+    }
+
+    @Override
+    public ColorTableIOFactory getColorTableIOFactory(String name) {
+        return this.colorTableIOFactories.get(name);
+    }
+
+    @Override
+    public void registerColorTableIOFactory(String name, ColorTableIOFactory colorTableIOFactory) {
+        colorTableIOFactories.put(name, colorTableIOFactory);
+    }
+
+    @Override
+    public ColorTableClass createColorTableClass() {
+        return new DefaultColorTableClass();
+    }
+
+    @Override
+    public ColorTableClass createColorTableClass(String className, double value,
+        double interpolated, Color color) {
+        return new DefaultColorTableClass(className, value, color, interpolated);
+    }
+
+    @Override
+    public ColorInterpretation createColorInterpretation(String[] coloInterpretations) {
+        return new DefaultColorInterpretation(coloInterpretations);
+    }
+
+    @Override
+    public ColorInterpretation createColorInterpretation(List<String> coloInterpretations) {
+        String[] x = coloInterpretations.toArray(new String[coloInterpretations.size()]);
+        return new DefaultColorInterpretation(x);
+    }
+
+    @Override
+    public ColorInterpretation createColorInterpretation(String definedColorInterpretation) {
+        return new DefaultColorInterpretation(definedColorInterpretation);
+    }
+    
+    @Override
+    public ColorInterpretation createColorInterpretation(BufferedImage image, String prefix) {        
+        ColorInterpretation colorInterpretation = null;
+        ColorModel colorModel = image.getColorModel();
+
+        if (colorModel instanceof ComponentColorModel) { //DirectColorModel) {
+            WritableRaster raster = image.getRaster();
+            if (raster.getNumBands() == 3) {
+                colorInterpretation = this.createColorInterpretation(ColorInterpretation.RGB);
+            } else if (raster.getNumBands() == 4) {
+                colorInterpretation = this.createColorInterpretation(ColorInterpretation.ARGB);
+            }
+        } else if (colorModel instanceof IndexColorModel) {
+            colorInterpretation = this.createColorInterpretation(ColorInterpretation.PALETTE);
+
+            ColorTable colorTable;
+            IndexColorModel indexColorModel = (IndexColorModel) colorModel;
+            int[] rgbs = new int[indexColorModel.getMapSize()];
+            boolean hasalpha = indexColorModel.hasAlpha();
+            indexColorModel.getRGBs(rgbs);
+
+            List<ColorTableClass> colorTableClasses = new ArrayList<>();
+
+            for (int i = 0; i < rgbs.length; i++) {
+                String className = i + "";
+                double value = ((byte) i);
+                double interpolation = 50.0;
+                Color color = new Color(rgbs[i], hasalpha);
+                ColorTableClass colorTableClass =
+                    this.createColorTableClass(className, value, interpolation, color);
+                colorTableClasses.add(colorTableClass);
+            }
+            String colorTableName = prefix + "_color_table";
+            colorTable = this.createColorTable(colorTableName, colorTableClasses, true);
+
+            colorInterpretation.setPalette(colorTable);
+            colorInterpretation.setPaletteBand(0);
+
+        }
+
+        return colorInterpretation;
+    }
+
+    @Override
+    public Transparency createTransparency() {
+        return new DefaultTransparency();
+    }
+
+    @Override
+    public Transparency createTransparency(int transparency,
+        List<TransparencyRange> transparencyRanges) {
+        return new DefaultTransparency(transparency, transparencyRanges);
+    }
+
+    @Override
+    public TransparencyRange createTransparencyRange() {
+        return new DefaultTransparencyRange();
+    }
+
+    @Override
+    public TransparencyRange createTransparencyRange(int[] redRange, int[] greenRange, int[] blueRange, int alpha,
+        boolean isAnd) {
+        return new DefaultTransparencyRange(redRange, greenRange, blueRange, alpha, isAnd);
+    }
+
+
+    @Override
+    public MakeColorTable createMakeColorTable() {
+        return new DefaultMakeColorTable();
+    }
+
+    @Override
+    public ColorManager getColorManager() {
+        if( colorManager == null ) {
+            colorManager = new DefaultColorManager();
+        }
+        return colorManager;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTableClass.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTableClass.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTableClass.java	(revision 46118)
@@ -0,0 +1,177 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.awt.Color;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableNotification;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClassNotification;
+import org.gvsig.raster.lib.legend.impl.colortable.colortableclass.DefaultColorTableClassNotification;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+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;
+
+/**
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultColorTableClass extends BaseWeakReferencingObservable implements ColorTableClass {
+
+    /**
+     * Persistence definition name
+     */
+    public static final String PERSISTENT_NAME = "ColorTableClassPersistent";
+    /**
+     * Description of persistence definition
+     */
+    public static final String PERSISTENT_DESCRIPTION =
+        "Persistent definition of color table class";
+
+    private static final String COLOR_PERSISTENCE_FIELD = "color";
+    private static final String NAME_PERSISTENCE_FIELD = "name";
+    private static final String VALUE_PERSISTENCE_FIELD = "value";
+    private static final String INTERPOLATED_PERSISTENCE_FIELD = "interpolated";
+
+    private Color color;
+    private String name;
+    private double value;
+    private double interpolated;
+
+    /**
+     * Empty constructor
+     */
+    public DefaultColorTableClass() {
+
+    }
+
+    /**
+     * Default constructor
+     *
+     * @param name
+     *            Name of class
+     * @param value
+     *            Value of class
+     * @param color
+     *            Color of class
+     * @param interpolated
+     *            Percent of interpolated
+     */
+    public DefaultColorTableClass(String name, double value, Color color, double interpolated) {
+
+        if (color == null) {
+            throw new IllegalArgumentException("Color can not be null");
+        }
+
+        this.name = name;
+        this.value = value;
+        this.color = color;
+        this.interpolated = interpolated;
+    }
+
+    @Override
+    public Color getColor() {
+        return this.color;
+    }
+
+    @Override
+    public void setColor(Color color) {
+
+        if (color == null) {
+            throw new IllegalArgumentException("Color can not be null");
+        }
+
+        this.color = color;
+        this.notifyObservers(new DefaultColorTableClassNotification(ColorTableClassNotification.SETTED_COLOR, new Object[] { color }));
+
+    }
+
+    @Override
+    public double getInterpolated() {
+        return this.interpolated;
+    }
+
+    @Override
+    public void setInterpolated(double interpolated) {
+        this.interpolated = interpolated;
+        this.notifyObservers(new DefaultColorTableClassNotification(ColorTableClassNotification.SETTED_INTERPOLATED, new Object[] { new Double(interpolated) }));
+    }
+
+    @Override
+    public double getValue() {
+        return this.value;
+    }
+
+    @Override
+    public void setValue(double value) {
+        this.value = value;
+        this.notifyObservers(new DefaultColorTableClassNotification(ColorTableClassNotification.SETTED_VALUE, new Object[] { new Double(value) }));
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+        this.notifyObservers(new DefaultColorTableClassNotification(ColorTableClassNotification.SETTED_NAME, new Object[] { name }));
+    }
+
+    @Override
+    public int compareTo(ColorTableClass otherClass) {
+        Double value = Double.valueOf(this.getValue());
+        Double otherValue = Double.valueOf(otherClass.getValue());
+
+        if (value == null || otherValue == null) {
+            throw new IllegalStateException("Value of ColorTableClass can not be null");
+        }
+
+        if (value.compareTo(otherValue) == 0) {
+            if (StringUtils.isBlank(this.getName()) || StringUtils.isBlank(otherClass.getName())) {
+                return value.compareTo(otherValue);
+            }
+            if (this.getName().compareTo(otherClass.getName()) == 0) {
+                return 0;
+            }
+            return this.getName().compareTo(otherClass.getName());
+        }
+        return value.compareTo(otherValue);
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+        if (definition == null) {
+            definition =
+                manager.addDefinition(DefaultColorTableClass.class, PERSISTENT_NAME,
+                    PERSISTENT_DESCRIPTION, null, null);
+            definition.addDynFieldString(NAME_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldDouble(VALUE_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldBoolean(INTERPOLATED_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldObject(COLOR_PERSISTENCE_FIELD).setClassOfValue(Color.class)
+                .setMandatory(false);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(NAME_PERSISTENCE_FIELD, this.getName());
+        state.set(VALUE_PERSISTENCE_FIELD, this.getValue());
+        state.set(INTERPOLATED_PERSISTENCE_FIELD, this.getInterpolated());
+        state.set(COLOR_PERSISTENCE_FIELD, this.getColor());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.setName(NAME_PERSISTENCE_FIELD);
+        this.setValue(state.getDouble(VALUE_PERSISTENCE_FIELD));
+        this.setColor((Color) state.get(COLOR_PERSISTENCE_FIELD));
+        this.setInterpolated(state.getDouble(INTERPOLATED_PERSISTENCE_FIELD));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperation.java	(revision 46118)
@@ -0,0 +1,229 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.hsltorgb;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.buffer.spi.operations.AbstractOperation;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class HSLToRGBOperation extends AbstractColoredOperation {
+
+    /**
+     * @param factory
+     *
+     */
+    public HSLToRGBOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        try {
+            if (!getInputColorInterpretation().isHSL()) {
+                throw new UnsupportedOperationException("The color interpretation of input getInputBuffer() isn't HSL");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.HUE_BAND)] != BufferManager.TYPE_BYTE
+                || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.SATURATION_BAND)] != BufferManager.TYPE_BYTE
+                || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.LIGHTNESS_BAND)] != BufferManager.TYPE_BYTE) {
+                throw new UnsupportedOperationException("The type of bands isn't BYTE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<String>();
+            List<NoData> noDatas = new ArrayList<NoData>();
+            List<Integer> types = new ArrayList<Integer>();
+
+            colorInterpretations.add(ColorInterpretation.RED_BAND);
+            colorInterpretations.add(ColorInterpretation.GREEN_BAND);
+            colorInterpretations.add(ColorInterpretation.BLUE_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                int alphaBand = getInputColorInterpretation().getAlphaBand();
+                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[alphaBand]);
+                noDatas.add(sourceNoDatas[alphaBand]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(getInputColorInterpretation().get(band));
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        try {
+
+            // List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = getInputColorInterpretation().hasAlphaBand() ? 4 : 3;
+                for (int band = 0; band < bands; band++) {
+                    if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                    } else if (!isProcessableBand(band)) {
+                        getOutputBuffer().getBand(outBand).copyFrom(this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            Object[] rowBandsBuffer = new Object[3];
+
+            for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                Band bufferBandHue = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.HUE_BAND));
+                rowBandsBuffer[0] = bufferBandHue.createRowBuffer();
+                bufferBandHue.fetchRow(row, rowBandsBuffer[0]);
+                Band bufferBandSaturation = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.SATURATION_BAND));
+                rowBandsBuffer[1] = bufferBandSaturation.createRowBuffer();
+                bufferBandSaturation.fetchRow(row, rowBandsBuffer[1]);
+                Band bufferBandLightness = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.LIGHTNESS_BAND));
+                rowBandsBuffer[2] = bufferBandLightness.createRowBuffer();
+                bufferBandLightness.fetchRow(row, rowBandsBuffer[2]);
+
+                List<Object> outputRowBuffers = new ArrayList<Object>();
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputRowBuffers.add(outputRowBuffer);
+                }
+
+                processRow(rowBandsBuffer, outputRowBuffers);
+
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    outputBufferBand.putRow(row, outputRowBuffers.get(band));
+                }
+
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    private void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+
+            int[] convertedValues = colorManager.HSLtoRGB((0xFF & inputByteRows[0][i]), (0xFF & inputByteRows[1][i]), (0xFF & inputByteRows[2][i]));
+
+            for (int band = 0; band < outputRows.size(); band++) {
+                ((byte[])(outputRows.get(band)))[i] = new Integer(convertedValues[band]).byteValue();
+            }
+        }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isHSLBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isHSLBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.HUE_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.SATURATION_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.LIGHTNESS_BAND));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.hsltorgb;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class HSLToRGBOperationFactory implements OperationFactory {
+    public static String NAME="HSLToRGB";
+    public static String DESCRIPTION="HSL to RGB operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public HSLToRGBOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new HSLToRGBOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("HSLToRGBOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.rgbtohsl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RGBToHSLOperationFactory implements OperationFactory {
+    public static String NAME="RGBToHSL";
+    public static String DESCRIPTION="RGB to HSL operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public RGBToHSLOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new RGBToHSLOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("RGBToHSLOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperation.java	(revision 46118)
@@ -0,0 +1,247 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.rgbtohsl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RGBToHSLOperation extends AbstractColoredOperation {
+
+    /**
+     * @param factory
+     *
+     */
+    public RGBToHSLOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        try {
+            if (!(getInputColorInterpretation().isGray() || getInputColorInterpretation().isRGB())) {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (getInputColorInterpretation().isGray()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of GRAY band isn't BYTE");
+                }
+            } else if (getInputColorInterpretation().isRGB()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of RGB bands isn't BYTE");
+                }
+            } else {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.HUE_BAND);
+            colorInterpretations.add(ColorInterpretation.SATURATION_BAND);
+            colorInterpretations.add(ColorInterpretation.LIGHTNESS_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                int alphaBand = getInputColorInterpretation().getAlphaBand();
+                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[alphaBand]);
+                noDatas.add(sourceNoDatas[alphaBand]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(getInputColorInterpretation().get(band));
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        try {
+
+            // List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = getInputColorInterpretation().hasAlphaBand() ? 5 : 4;
+                for (int band = 0; band < bands; band++) {
+                    if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                    } else if (!isProcessableBand(band)) {
+                        getOutputBuffer().getBand(outBand).copyFrom(this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            Object[] rowBandsBuffer = new Object[3];
+
+            for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                if (getInputColorInterpretation().isGray()) {
+                    Band bufferBandGray = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND));
+                    rowBandsBuffer[0] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[0]);
+                    rowBandsBuffer[1] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[1]);
+                    rowBandsBuffer[2] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[2]);
+                } else {
+                    Band bufferBandRed = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND));
+                    rowBandsBuffer[0] = bufferBandRed.createRowBuffer();
+                    bufferBandRed.fetchRow(row, rowBandsBuffer[0]);
+                    Band bufferBandGreen = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND));
+                    rowBandsBuffer[1] = bufferBandGreen.createRowBuffer();
+                    bufferBandGreen.fetchRow(row, rowBandsBuffer[1]);
+                    Band bufferBandBlue = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND));
+                    rowBandsBuffer[2] = bufferBandBlue.createRowBuffer();
+                    bufferBandBlue.fetchRow(row, rowBandsBuffer[2]);
+                }
+
+                List<Object> outputRowBuffers = new ArrayList<>();
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputRowBuffers.add(outputRowBuffer);
+                }
+
+                processRow(rowBandsBuffer, outputRowBuffers);
+
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    outputBufferBand.putRow(row, outputRowBuffers.get(band));
+                }
+
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    private void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+
+            double[] convertedValues = colorManager.RGBtoHSL(0xFF & inputByteRows[0][i], 0xFF & inputByteRows[1][i], 0xFF & inputByteRows[2][i]);
+
+            ((byte[])(outputRows.get(0)))[i] += new Double((convertedValues[0]*255)/360.0 + 0.5).byteValue();
+            ((byte[])(outputRows.get(1)))[i] += new Double(convertedValues[1]*255+0.5).byteValue();
+            ((byte[])(outputRows.get(2)))[i] += new Double(convertedValues[2]*255+0.5).byteValue();
+        }
+    }
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) || bandColorInterpretation
+                .equals(ColorInterpretation.GRAY_BAND));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperation.java	(revision 46118)
@@ -0,0 +1,540 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.equalization;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.api.statistics.HistogramBand;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class EqualizationOperation extends AbstractColoredOperation{
+
+    static public String STATISTICS_PARAM = "statistics";
+
+
+    private Statistics statistics;
+    private List<Integer> bandsToProcess;
+    private RowProcessor[] rowProcessors;
+    private HistogramBand[] histogramBands;
+    private Integer dataType;
+    private long[][] lahe;
+    private long[][] laheNegative;
+    private int nElements;
+
+
+
+    /**
+     * @param factory
+     *
+     */
+    public EqualizationOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        statistics = (Statistics) this.getParameter(STATISTICS_PARAM,null);
+        if (statistics==null) {
+            statistics = this.getInputBuffer().getStatistics(null);
+        }
+        histogramBands = statistics.getHistogram();
+
+        int bands = this.getInputBuffer().getBandCount();
+        NoData[] noData = this.getInputBuffer().getBandNoData();
+
+
+        if (mustCopyUnprocessedBands()) {
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getInputColorInterpretation());
+            noData = this.getInputBuffer().getBandNoData();
+            try {
+                this.setOutputBuffer(
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getInputBuffer().getBandTypes(),
+                            this.getInputBuffer().getBandNoData(), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+                throw new ProcessingOperationException(e);
+            }
+        } else {
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+            for (int band = 0; band < bands; band++) {
+                if (isProcessableBand(band)) {
+                    colorInterpretations.add(getInputColorInterpretation().get(band));
+                    noDatas.add(this.getInputBuffer().getBandNoData()[band]);
+                    types.add(this.getInputBuffer().getBandTypes()[band]);
+                }
+            }
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+            }
+            setOutputColorInterpretation(
+                    legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+            try {
+                this.setOutputBuffer(
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getTypesAsArray(types),
+                            this.getNoDatasAsArray(noDatas), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (Exception e) {
+                throw new ProcessingOperationException(e);
+            }
+        }
+
+        rowProcessors = new RowProcessor[bands];
+        dataType = null;
+        if(getBandsToProcess().isEmpty()){
+            throw new ProcessingOperationException("There is no RGB band.", null);
+        }
+        for (Iterator<Integer> iterator = getBandsToProcess().iterator(); iterator.hasNext();) {
+            Integer band = iterator.next();
+            int bandType = this.getInputBuffer().getBand(band).getDataType();
+            if(dataType!=null) {
+                if(dataType!=bandType){
+                    throw new IllegalArgumentException("All bands must be of same data type.");
+                }
+            } else {
+                dataType=bandType;
+            }
+            switch (bandType) {
+            case BufferManager.TYPE_BYTE:
+                rowProcessors[band] = new ByteRowProcessor(band);
+                break;
+            case BufferManager.TYPE_USHORT:
+                rowProcessors[band] = new UShortRowProcessor(band);
+                break;
+            case BufferManager.TYPE_SHORT:
+                rowProcessors[band] = new ShortRowProcessor(band);
+                break;
+            case BufferManager.TYPE_INT:
+                rowProcessors[band] = new IntRowProcessor(band);
+                break;
+            case BufferManager.TYPE_FLOAT: //Can't process float band
+                rowProcessors[band] = null; //new FloatRowProcessor(band);
+                break;
+            case BufferManager.TYPE_DOUBLE: //Can't process double band
+                rowProcessors[band] = null; //new DoubleRowProcessor(band);
+                break;
+            default:
+                throw new IllegalArgumentException("Can't process type of band '" + band + "'");
+            }
+        }
+
+        double[][] accumNormalize = convertTableToNormalizeAccumulate(getHistogramTable());
+        double[][] accumNormalizeNeg = convertTableToNormalizeAccumulate(getNegativeHistogramTable());
+
+        int maxValue = 255;
+        switch (dataType) {
+        case BufferManager.TYPE_BYTE:
+            maxValue = 255;
+            break;
+        case BufferManager.TYPE_SHORT:
+            maxValue = Short.MAX_VALUE;
+            break;
+        case BufferManager.TYPE_USHORT:
+            maxValue = Math.abs(Short.MIN_VALUE) + Short.MAX_VALUE;
+            break;
+        case BufferManager.TYPE_INT:
+            maxValue = Integer.MAX_VALUE;
+            break;
+        default:
+            throw new IllegalArgumentException("Can't process type '" + dataType + "'");
+        }
+
+        lahe = lahe(accumNormalize, maxValue);
+        laheNegative = lahe(accumNormalizeNeg, maxValue);
+        nElements = (laheNegative[0].length - 1); //FIXME: ???
+
+    }
+
+
+    /**
+     * Obtiene la tabla completa del histograma
+     * @return long[][]
+     */
+    private long[][] getHistogramTable() {
+        int size;
+        int rangeMin;
+        int rangeMax;
+        switch (dataType) {
+        case BufferManager.TYPE_BYTE:
+            rangeMin = 0;
+            rangeMax = 255;
+            size = 256;
+            break;
+        case BufferManager.TYPE_SHORT:
+            rangeMin = Short.MIN_VALUE;
+            rangeMax = Short.MAX_VALUE;
+            size = rangeMax-rangeMin+1;
+            break;
+        case BufferManager.TYPE_USHORT:
+            rangeMin = 0;
+            rangeMax = Math.abs(Short.MIN_VALUE) + Short.MAX_VALUE;
+            size = rangeMax-rangeMin+1;
+            break;
+        case BufferManager.TYPE_INT:
+            rangeMin = Integer.MIN_VALUE;
+            rangeMax = Integer.MAX_VALUE;
+            size = rangeMax-rangeMin+1;
+            break;
+        default:
+            throw new IllegalArgumentException("Can't process type '" + dataType + "'");
+        }
+        long[][] table = new long[getBandsToProcess().size()][size];
+        for (int i = 0; i < table.length; i++) {
+            System.arraycopy(histogramBands[getBandsToProcess().get(i)].getFrequencies(), 0, table[i], 0, size);
+        }
+        return table;
+    }
+
+    /**
+     * Obtiene el histograma de la imagen negativa.
+     * @return long[][]
+     */
+    private long[][] getNegativeHistogramTable() {
+        long[][] table = getHistogramTable();
+        long[][] tableNeg = new long[table.length][table[0].length];
+        for (int i = 0; i < tableNeg.length; i++){
+            for (int j = 0; j < tableNeg[i].length; j++){
+                tableNeg[i][table[i].length - j - 1] = table[i][j];
+            }
+        }
+        return tableNeg;
+    }
+
+    /**
+     * Obtiene la tabla de valores normalizada. Divide todos los elementos por el n�mero de
+     * pixeles total.
+     * @return tabla de valores normalizada
+     */
+    private static double[][] convertToNormalizeHistogram(long[][] tableToConvert) {
+        long[] nValues = new long[tableToConvert.length];
+        for (int i = 0; i < tableToConvert.length; i++) {
+            for (int j = 0; j < tableToConvert[i].length; j++) {
+                nValues[i] += tableToConvert[i][j];
+            }
+        }
+
+        double[][] res = new double[tableToConvert.length][tableToConvert[0].length];
+        for (int i = 0; i < tableToConvert.length; i++) {
+            for (int j = 0; j < tableToConvert[i].length; j++) {
+                res[i][j] = (double)((double)tableToConvert[i][j] / (double)nValues[i]);
+            }
+        }
+
+        return res;
+    }
+
+    /**
+     * Obtiene la tabla de valores normalizada y acumulada. Divide todos los elementos por el n�mero de
+     * pixeles total.
+     * @return tabla de valores normalizada
+     */
+    private static double[][] convertTableToNormalizeAccumulate(long[][] tableToConvert) {
+        double[][] res = convertToNormalizeHistogram(tableToConvert);
+        for (int i = 0; i < tableToConvert.length; i++) {
+            for (int j = 0; j < tableToConvert[i].length; j++) {
+                if(j > 0) {
+                    res[i][j] += res[i][j - 1];
+                }
+            }
+        }
+        return res;
+    }
+
+
+
+
+
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        for (int band=0; band<this.getInputBuffer().getBandCount(); band++){
+            if (getBandsToProcess().contains(band)) {
+                Band bufferBand = this.getInputBuffer().getBand(band);
+                Band outputBufferBand = this.getOutputBuffer().getBand(band);
+
+                for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                    Object rowBuffer = bufferBand.createRowBuffer();
+                    bufferBand.fetchRow(row, rowBuffer);
+
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputBufferBand.fetchRow(row, outputRowBuffer);
+
+                    rowProcessors[band].processRow(rowBuffer, outputRowBuffer);
+
+                    outputBufferBand.putRow(row, outputRowBuffer);
+                }
+            } else {
+                try {
+                    this.getOutputBuffer().getBand(band).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    /**
+     * M�todo lahe para la ecualizaci�n. Cada posici�n del array resultante tendr� el valor de salida para
+     * un valor de entrada dado.
+     * @param accumNorm Histograma acumulado
+     * @param value Valor m�ximo
+     * @return
+     */
+    private long[][] lahe(double[][] accumNorm, int value) {
+        long[][] res = new long[accumNorm.length][accumNorm[0].length];
+        for (int i = 0; i < res.length; i++){
+              for (int j = 0; j < res[i].length; j++){
+                  res[i][j] = Math.round(accumNorm[i][j] * value);
+              }
+        }
+        return res;
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    private List<Integer> getBandsToProcess() {
+        if(bandsToProcess == null){
+            int bands = this.getInputBuffer().getBandCount();
+            bandsToProcess = new ArrayList<>();
+
+            for (int band = 0; band < bands; band++) {
+                if (isProcessableBand(band)) {
+                    bandsToProcess.add(band);
+                }
+            }
+        }
+        return bandsToProcess;
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBBand(band) && (this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE
+            || this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_SHORT
+            || this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_USHORT
+            || this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_INT
+        );
+    }
+
+    private boolean isRGBBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND));
+    }
+
+
+    interface RowProcessor {
+        void processRow(Object inputRow, Object outputRow);
+        Number processValue(Object value);
+    };
+
+    private abstract class AbstractRowProcessor implements RowProcessor {
+        protected int band;
+        protected HistogramBand histogram;
+        protected NoData noData;
+
+        public AbstractRowProcessor(int band) {
+            this.band = band;
+            this.histogram = statistics.getHistogram()[this.band];
+            this.noData = getInputBuffer().getBand(this.band).getNoData();
+        }
+    }
+
+    private class ByteRowProcessor extends AbstractRowProcessor {
+
+
+        public ByteRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            byte[] inputByteRow = (byte[])inputRow;
+            byte[] outputByteRow = (byte[])outputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]).byteValue();
+            }
+        }
+
+        @Override
+        public Number processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)value;
+            }
+
+            //M�todo lahe
+            int intValue = 0xFF & ((Byte) value);
+            int equalizationPositive = (int)lahe[getBandsToProcess().indexOf(band)][intValue % (int)histogram.getNumValues()];
+            int equalizationNegative = (int)laheNegative[getBandsToProcess().indexOf(band)][nElements - (intValue % (int)histogram.getNumValues())];
+
+            int resValue = ((nElements - equalizationNegative) + equalizationPositive) / 2;
+            return (byte)(resValue & 0x000000ff);
+        }
+    }
+
+    private class ShortRowProcessor extends AbstractRowProcessor {
+
+        public ShortRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            short[] inputByteRow = (short[])inputRow;
+            short[] outputByteRow = (short[])outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]).shortValue();
+            }
+        }
+
+        @Override
+        public Number processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)0;
+            }
+
+            //M�todo lahe
+            int intValue = ((Short) value).byteValue();
+            int equalizationPositive = (int)lahe[getBandsToProcess().indexOf(band)][intValue % (int)histogram.getNumValues()];
+            int equalizationNegative = (int)laheNegative[getBandsToProcess().indexOf(band)][nElements - (intValue % (int)histogram.getNumValues())];
+
+            int resValue = ((nElements - equalizationNegative) + equalizationPositive) / 2;
+            return (short)resValue;
+        }
+
+    }
+
+    private class UShortRowProcessor extends AbstractRowProcessor {
+
+        public UShortRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            short[] inputByteRow = (short[])inputRow;
+            short[] outputByteRow = (short[])outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]).shortValue();
+            }
+        }
+
+        @Override
+        public Number processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)0;
+            }
+
+            //M�todo lahe
+            int intValue = 0xFFFF & ((Short) value).byteValue();
+            int equalizationPositive = (int)lahe[getBandsToProcess().indexOf(band)][intValue % (int)histogram.getNumValues()];
+            int equalizationNegative = (int)laheNegative[getBandsToProcess().indexOf(band)][nElements - (intValue % (int)histogram.getNumValues())];
+
+            int resValue = ((nElements - equalizationNegative) + equalizationPositive) / 2;
+            return (short)resValue;
+        }
+
+    }
+
+    private class IntRowProcessor extends AbstractRowProcessor {
+
+        public IntRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            int[] inputByteRow = (int[])inputRow;
+            int[] outputByteRow = (int[])outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]).intValue();
+            }
+        }
+
+        @Override
+        public Number processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)0;
+            }
+
+            Double dValue = ((Number) value).doubleValue();
+
+            //M�todo lahe
+            int intValue = ((Integer) value);
+            int equalizationPositive = (int)lahe[getBandsToProcess().indexOf(band)][intValue % (int)histogram.getNumValues()];
+            int equalizationNegative = (int)laheNegative[getBandsToProcess().indexOf(band)][nElements - (intValue % (int)histogram.getNumValues())];
+
+            int resValue = ((nElements - equalizationNegative) + equalizationPositive) / 2;
+            return (int)resValue;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/equalization/EqualizationOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.equalization;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class EqualizationOperationFactory implements OperationFactory {
+    public static String NAME="Equalization";
+    public static String DESCRIPTION="Equalization operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public EqualizationOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new EqualizationOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("EqualizationOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/equalization/EqualizationOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperationFactory.java	(revision 46118)
@@ -0,0 +1,145 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colortable;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.legend.api.operations.ColoredOperation;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorTableOperationFactory implements OperationFactory {
+    public static String DESCRIPTION="ColorTable operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public ColorTableOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new ColorTableOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("ColorTableOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/colortable/ColorTableOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return ColoredOperation.COLOR_TABLE_OPERATION_NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        return Applicable.YES;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colortable/ColorTableOperation.java	(revision 46118)
@@ -0,0 +1,419 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colortable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorTableOperation extends AbstractColoredOperation {
+
+    private RowProcessor rowProcessor;
+
+
+    /**
+     * @param factory
+     *
+     */
+    public ColorTableOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        try {
+            if (!getInputColorInterpretation().isPalette()) {
+                throw new UnsupportedOperationException("The color interpretation of input buffer isn't Palette");
+            }
+
+            int bandType = this.getInputBuffer().getBand(getInputColorInterpretation().getPaletteBand()).getDataType();
+            switch (bandType) {
+            case BufferManager.TYPE_BYTE:
+                rowProcessor = new ByteRowProcessor();
+                break;
+            case BufferManager.TYPE_USHORT:
+                rowProcessor = new UShortRowProcessor();
+                break;
+            case BufferManager.TYPE_SHORT:
+                rowProcessor = new ShortRowProcessor();
+                break;
+            case BufferManager.TYPE_INT:
+                rowProcessor = new IntRowProcessor();
+                break;
+            case BufferManager.TYPE_FLOAT:
+                rowProcessor = new FloatRowProcessor();
+                break;
+            case BufferManager.TYPE_DOUBLE:
+                rowProcessor = new DoubleRowProcessor();
+                break;
+            default:
+                throw new IllegalArgumentException("Unknow type of band '"+getInputColorInterpretation().getPaletteBand()+"'");
+            }
+
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+//            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.RED_BAND);
+            colorInterpretations.add(ColorInterpretation.GREEN_BAND);
+            colorInterpretations.add(ColorInterpretation.BLUE_BAND);
+            colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+//            if (getInputColorInterpretation().hasAlphaBand()) {
+//                int alphaBand = getInputColorInterpretation().getAlphaBand();
+//                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+//                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+//                }
+//                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+//                types.add(sourceTypes[alphaBand]);
+//                noDatas.add(sourceNoDatas[alphaBand]);
+//            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band)) {
+                        colorInterpretations.add(ColorInterpretation.UNDEFINED_BAND);
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        try {
+
+            // List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = 4; //getInputColorInterpretation().hasAlphaBand() ? 4 : 3;
+                for (int band = 0; band < bands; band++) {
+                    if (!isProcessableBand(band)) {
+                        getOutputBuffer().getBand(outBand).copyFrom(this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                Band bufferPaletteBand = getInputBuffer().getBand(getInputColorInterpretation().getPaletteBand());
+                Object rowBandBuffer = bufferPaletteBand.createRowBuffer();
+                bufferPaletteBand.fetchRow(row, rowBandBuffer);
+
+                List<Object> outputRowBuffers = new ArrayList<>();
+                for (int band = 0; band < 4; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputRowBuffers.add(outputRowBuffer);
+                }
+
+                rowProcessor.processRow(rowBandBuffer, outputRowBuffers);
+
+                for (int band = 0; band < 4; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    outputBufferBand.putRow(row, outputRowBuffers.get(band));
+                }
+
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isPaletteBand(band);
+    }
+
+    private boolean isPaletteBand(int band) {
+        return (getInputColorInterpretation().getPaletteBand() == band);
+    }
+
+
+
+    interface RowProcessor {
+        void processRow(Object inputRow, List outputRows);
+        byte[] processValue(Object value);
+    };
+
+    private abstract class AbstractRowProcessor implements RowProcessor {
+        NoData noData;
+
+        public AbstractRowProcessor() {
+            noData = getInputBuffer().getBand(getInputColorInterpretation().getPaletteBand()).getNoData();
+        }
+    }
+
+
+    private class ByteRowProcessor extends AbstractRowProcessor {
+
+
+        public ByteRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            byte[] inputByteRow = (byte[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    ((byte[])(outputRows.get(band)))[i] = rgb[band];
+                }
+            }
+
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if (noData.isDefined()) {
+                if (noData.getValue().equals(value)) {
+                    byte result[] = { 0, 0, 0, 0 };
+                    return result;
+                }
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(0xFF & (byte)value);
+        }
+
+    }
+
+    private class ShortRowProcessor extends AbstractRowProcessor {
+
+        public ShortRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            short[] inputByteRow = (short[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    ((byte[])(outputRows.get(band)))[i] = rgb[band];
+                }
+            }
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                byte result[] = {0,0,0,0};
+                return result;
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(value);
+        }
+
+    }
+
+    private class UShortRowProcessor extends AbstractRowProcessor {
+
+        public UShortRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            short[] inputByteRow = (short[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    ((byte[])(outputRows.get(band)))[i] = rgb[band];
+                }
+            }
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                byte result[] = {0,0,0,0};
+                return result;
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(0xFFFF & (byte)value);
+        }
+
+    }
+
+    private class IntRowProcessor extends AbstractRowProcessor {
+
+        public IntRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            int[] inputByteRow = (int[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    ((byte[])(outputRows.get(band)))[i] = rgb[band];
+                }
+            }
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                byte result[] = {0,0,0,0};
+                return result;
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(value);
+        }
+
+    }
+    private class FloatRowProcessor extends AbstractRowProcessor {
+
+        public FloatRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            float[] inputByteRow = (float[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    ((byte[])(outputRows.get(band)))[i] = rgb[band];
+                }
+            }
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                byte result[] = {0,0,0,0};
+                return result;
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(value);
+        }
+
+    }
+    private class DoubleRowProcessor extends AbstractRowProcessor {
+
+
+        public DoubleRowProcessor() {
+            super();
+        }
+
+        @Override
+        public void processRow(Object inputRow, List outputRows) {
+            double[] inputByteRow = (double[])inputRow;
+
+            for (int i = 0; i < inputByteRow.length; i++) {
+                byte[] rgb = processValue(inputByteRow[i]);
+                for (int band = 0; band < outputRows.size(); band++) {
+                    byte[] bs = (byte[])(outputRows.get(band));
+                    bs[i] = rgb[band];
+                }
+            }
+        }
+
+        @Override
+        public byte[] processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                byte result[] = {0,0,0,0};
+                return result;
+            }
+
+            return getInputColorInterpretation().getPalette().getRGBA(value);
+        }
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperation.java	(revision 46118)
@@ -0,0 +1,218 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.brightness;
+
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class BrightnessOperation extends AbstractColoredOperation {
+
+    static public String BRIGHTNESS_PARAM = "brightness";
+    static public String OUTPUT_COLOR_INTERPRETATION_PARAM = "output_color_interpretation";
+
+    private int brightness;
+    private RowProcessor rowProcessor;
+
+    /**
+     * @param factory
+     *
+     */
+    public BrightnessOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        brightness = (Integer) this.getParameter(BRIGHTNESS_PARAM,0);
+
+        int bands = this.getInputBuffer().getBandCount();
+        NoData[] noData;
+        if (mustCopyUnprocessedBands()) {
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getInputColorInterpretation());
+            noData = this.getInputBuffer().getBandNoData();
+            try {
+                this.setOutputBuffer(
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getInputBuffer().getBandTypes(),
+                            this.getInputBuffer().getBandNoData(), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (Exception e) {
+                throw new ProcessingOperationException(e);
+            }
+        } else {
+            String[] colorInterpretations = this.getProcessableBandColorInterpretationsAsArray();
+            setOutputColorInterpretation(legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+            try {
+                this.setOutputBuffer(
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getProcessableBandTypesAsArray(),
+                            this.getProcessableBandNoDatasAsArray(), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+                throw new ProcessingOperationException(e);
+            }
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        for (int band = 0; band < this.getInputBuffer().getBandCount(); band++) {
+            rowProcessor = new ByteRowProcessor(band);
+            if (isProcessableBand(band)) {
+                Band bufferBand = this.getInputBuffer().getBand(band);
+                Band outputBufferBand = this.getOutputBuffer().getBand(band);
+
+                for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                    Object rowBuffer = bufferBand.createRowBuffer();
+                    bufferBand.fetchRow(row, rowBuffer);
+
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+
+                    rowProcessor.processRow(rowBuffer, outputRowBuffer);
+
+                    outputBufferBand.putRow(row, outputRowBuffer);
+                }
+            } else if (mustCopyUnprocessedBands()) {
+                try {
+                    this.getOutputBuffer().getBand(band).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+                }
+            } else if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                try {
+                    this.getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GRAY_BAND));
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    interface RowProcessor {
+
+        void processRow(Object inputRow, Object outputRow);
+
+        byte processValue(Object value);
+    };
+
+    private abstract class AbstractRowProcessor implements RowProcessor {
+
+        // int band;
+        int maxResult = 255;
+        int minResult = 0;
+        NoData noData;
+
+        public AbstractRowProcessor(int band) {
+            // this.band = band;
+            noData = getInputBuffer().getBand(band).getNoData();
+            if (noData.isDefined()) {
+                minResult = (byte) 1;
+            }
+        }
+    }
+
+    private class ByteRowProcessor extends AbstractRowProcessor {
+
+        public ByteRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            byte[] inputByteRow = (byte[]) inputRow;
+            byte[] outputByteRow = (byte[]) outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]);
+            }
+        }
+
+        @Override
+        public byte processValue(Object value) {
+            if (noData.isDefined() && noData.getValue().equals(value)) {
+                return (byte) value;
+            }
+
+            int iValue = 0xFF & ((Byte) value);
+            int result = iValue + brightness;
+            if (result > maxResult) {
+                result = maxResult;
+            }
+            if (result < minResult) {
+                result = minResult;
+            }
+            return (byte) result;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/brightness/BrightnessOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.brightness;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class BrightnessOperationFactory implements OperationFactory {
+    public static String NAME="Brightness";
+    public static String DESCRIPTION="Brightness operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public BrightnessOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new BrightnessOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("BrightnessOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/brightness/BrightnessOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperation.java	(revision 46118)
@@ -0,0 +1,219 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.grayscale;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class GrayScaleOperation extends AbstractColoredOperation {
+
+    /**
+     * @param factory
+     *
+     */
+    public GrayScaleOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        try {
+
+            if (!(getInputColorInterpretation().hasAnyRGBBand() || getInputColorInterpretation().hasAnyGrayBand())) {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (getInputColorInterpretation().hasAnyRGBBand()) {
+                if ((getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND)>=0 && inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND)] != BufferManager.TYPE_BYTE)
+                    || (getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND)>=0 && inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND)] != BufferManager.TYPE_BYTE)
+                    || (getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND)>=0 && inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND)] != BufferManager.TYPE_BYTE)) {
+                    throw new UnsupportedOperationException("The type of bands isn't BYTE");
+                }
+            } else if (getInputColorInterpretation().hasAnyGrayBand()) {
+                if ((getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND)>=0 && inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND)] != BufferManager.TYPE_BYTE)) {
+                    throw new UnsupportedOperationException("The type of band gray isn't BYTE");
+                }
+            } else {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.GRAY_BAND);
+            types.add(BufferManager.TYPE_BYTE);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                if(sourceTypes[getInputColorInterpretation().getAlphaBand()]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[getInputColorInterpretation().getAlphaBand()]);
+                noDatas.add(sourceNoDatas[getInputColorInterpretation().getAlphaBand()]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(getInputColorInterpretation().get(band));
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        try {
+            super.process();
+            List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            Band outputBufferBand = getOutputBuffer().getBand(0);
+            boolean processed = false;
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = getInputColorInterpretation().hasAlphaBand() ? 2 : 1;
+                for (int band = 0; band < bands; band++) {
+                    if (isProcessableBand(band)) {
+                        if (getInputColorInterpretation().isGrayInterpretation(band)) {
+                            outputBufferBand.copyFrom(this.getInputBuffer().getBand(band));
+                            processed = true;
+                        } else {
+                            bandsToProcess.add(band);
+                        }
+                    } else if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                    } else {
+                        getOutputBuffer().getBand(outBand).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            if (!processed) {
+                Object[] rowBandsBuffer = new Object[bandsToProcess.size()];
+                for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                    for (int i = 0; i < bandsToProcess.size(); i++) {
+                        Integer band = bandsToProcess.get(i);
+                        if (isProcessableBand(band)) {
+                            Band bufferBand = getInputBuffer().getBand(band);
+                            rowBandsBuffer[i] = bufferBand.createRowBuffer();
+                            bufferBand.fetchRow(row, rowBandsBuffer[i]);
+                        }
+                    }
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    processRow(rowBandsBuffer, outputRowBuffer);
+                    outputBufferBand.putRow(row, outputRowBuffer);
+                }
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) || bandColorInterpretation
+                .equals(ColorInterpretation.GRAY_BAND));
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    private void processRow(Object[] inputRows, Object outputRow) {
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+        byte[] outputByteRow = (byte[]) outputRow;
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+
+            int tmp = 0;
+
+            for (int band = 0; band < inputRows.length; band++) {
+                tmp += 0xFF & ((Byte) inputByteRows[band][i]).byteValue();
+            }
+            outputByteRow[i] = (byte) (tmp / inputRows.length);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.grayscale;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class GrayScaleOperationFactory implements OperationFactory {
+    public static String NAME="GrayScale";
+    public static String DESCRIPTION="GrayScale operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public GrayScaleOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new GrayScaleOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("GrayScaleOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancehsl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceHSLOperationFactory implements OperationFactory {
+    public static String NAME="ColorBalanceHSL";
+    public static String DESCRIPTION="HSL Color balance operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public ColorBalanceHSLOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new ColorBalanceHSLOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("ColorBalanceHSLOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperation.java	(revision 46118)
@@ -0,0 +1,100 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancehsl;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.impl.operations.colorbalancergb.AbstractColorBalanceOperation;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceHSLOperation extends AbstractColorBalanceOperation {
+
+    static public String HUE_PARAM = "hue";
+    static public String LIGHTNESS_PARAM = "lightness";
+    static public String SATURATION_PARAM = "saturation";
+
+    private double hue = 0;
+    private double lightness = 0;
+    private double saturation = 0;
+
+
+    /**
+     * @param factory
+     *
+     */
+    public ColorBalanceHSLOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    protected void initialiceParams() {
+        hue = (Double) this.getParameter(HUE_PARAM,0);
+        lightness = (Double) this.getParameter(LIGHTNESS_PARAM,0);
+        saturation = (Double) this.getParameter(SATURATION_PARAM,0);
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    @Override
+    protected void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+            byte[] value = new byte[4];
+            value[0] = inputByteRows[0][i];
+            value[1] = inputByteRows[1][i];
+            value[2] = inputByteRows[2][i];
+
+            double[] hsl = colorManager.RGBtoHSL(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff);
+
+            hsl[0] = ((hsl[0] + hue) % 360);
+            hsl[1] = Math.max(Math.min(hsl[1] + (saturation / 100.0), 1D), 0.001);
+            hsl[2] = Math.max(Math.min(hsl[2] + (lightness / 100.0), 1D), 0);
+            int[] rgb = colorManager.HSLtoRGB(hsl[0], hsl[1], hsl[2]);
+
+            for (int band = 0; band < 3; band++) {
+                value[band] = (byte)(rgb[band]);
+            }
+
+            for (int band = 0; band < inputRows.length; band++) {
+                ((byte[])(outputRows.get(band)))[i] = value[band];
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancecmy;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceCMYOperationFactory implements OperationFactory {
+    public static String NAME="ColorBalanceCMY";
+    public static String DESCRIPTION="Color balance CMY operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public ColorBalanceCMYOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new ColorBalanceCMYOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("ColorBalanceCMYOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperation.java	(revision 46118)
@@ -0,0 +1,116 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancecmy;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.impl.operations.colorbalancergb.AbstractColorBalanceOperation;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceCMYOperation extends AbstractColorBalanceOperation {
+
+    static public String CYAN_PARAM = "cyan";
+    static public String MAGENTA_PARAM = "magenta";
+    static public String YELLOW_PARAM = "yellow";
+    static public String LUMINOSITY_PARAM = "luminosity";
+
+    private int cyan;
+    private int magenta;
+    private int yellow;
+    private boolean luminosity;
+
+    /**
+     * @param factory
+     *
+     */
+    public ColorBalanceCMYOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    protected void initialiceParams() {
+        cyan = (Integer) this.getParameter(CYAN_PARAM,0);
+        magenta = (Integer) this.getParameter(MAGENTA_PARAM,0);
+        yellow = (Integer) this.getParameter(YELLOW_PARAM,0);
+        luminosity = (Boolean) this.getParameter(LUMINOSITY_PARAM,0);
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    @Override
+    protected void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+//        byte[][] outputByteRows = (byte[][]) outputRows;
+
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+            byte[] value = new byte[4];
+            value[0] = inputByteRows[0][i];
+            value[1] = inputByteRows[1][i];
+            value[2] = inputByteRows[2][i];
+
+            double[] cmyk = colorManager.RGBtoCMYK(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff, 1);
+            double lum = colorManager.getLuminosity(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff);
+            cmyk[0] = Math.min(cmyk[0] + (cyan / 300.0), 1D); //FIXME: �Por qu� 300 y no 255?
+            cmyk[1] = Math.min(cmyk[1] + (magenta / 300.0), 1D);
+            cmyk[2] = Math.min(cmyk[2] + (yellow / 300.0), 1D);
+            double[] rgb = colorManager.CMYKtoRGB(cmyk[0], cmyk[1], cmyk[2], cmyk[3]);
+            for (int band = 0; band < 3; band++) {
+                value[band] = (byte)(rgb[band] * 255);
+            }
+
+            if(luminosity) {
+                double[] hsl = colorManager.RGBtoHSL(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff);
+                hsl[0] = (int)(255.0 * hsl[0] / 360.0 + 0.5);
+                hsl[1] = (int) (hsl[1] * 255. + 0.5);
+                hsl[2] = (int) (lum * 255. + 0.5);
+                int[] v1 = colorManager.HSLtoRGB(
+                    (int)(((int)hsl[0]) & 0xffffffff),
+                    (int)(((int)hsl[1]) & 0xffffffff),
+                    (int)(((int)hsl[2]) & 0xffffffff));
+                for (int band = 0; band < 3; band++) {
+                    value[band] = new Integer(v1[band]).byteValue();
+                }
+            }
+
+            for (int band = 0; band < inputRows.length; band++) {
+                ((byte[])(outputRows.get(band)))[i] = value[band];
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperation.java	(revision 46118)
@@ -0,0 +1,250 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.contrast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ContrastOperation extends AbstractColoredOperation{
+
+    static public String CONTRAST_PARAM = "contrast";
+
+    private int contrast;
+    private RowProcessor rowProcessor;
+
+    /**
+     * @param factory
+     *
+     */
+    public ContrastOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        contrast = (Integer) this.getParameter(CONTRAST_PARAM,0);
+
+        int bands = this.getInputBuffer().getBandCount();
+        NoData[] noData;
+        if (mustCopyUnprocessedBands()) {
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getInputColorInterpretation());
+            noData = this.getInputBuffer().getBandNoData();
+            try {
+                this.setOutputBuffer( 
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getInputBuffer().getBandTypes(),
+                            this.getInputBuffer().getBandNoData(), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (Exception e) {
+                throw new ProcessingOperationException(e);
+            }
+        } else {
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+            for (int band = 0; band < bands; band++) {
+                if (isProcessableBand(band)) {
+                    colorInterpretations.add(getInputColorInterpretation().get(band));
+                    noDatas.add(this.getInputBuffer().getBandNoData()[band]);
+                    types.add(this.getInputBuffer().getBandTypes()[band]);
+                }
+            }
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+            }
+            setOutputColorInterpretation(legendManager.createColorInterpretation(
+                    colorInterpretations));
+            this.setParameter(
+                    OUTPUT_COLOR_INTERPRETATION_PARAM, 
+                    getOutputColorInterpretation());
+            try {
+                this.setOutputBuffer(
+                    manager.createBuffer(
+                            this.getInputBuffer().getRows(), 
+                            this.getInputBuffer().getColumns(), 
+                            this.getTypesAsArray(types),
+                            this.getNoDatasAsArray(noDatas), 
+                            this.getInputBuffer().getProjection(), 
+                            this.getInputBuffer().getEnvelope()));
+            } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+                throw new ProcessingOperationException(e);
+            }
+
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        for (int band=0; band<this.getInputBuffer().getBandCount(); band++){
+            rowProcessor = new ByteRowProcessor(band);
+            if (isProcessableBand(band)) {
+                Band bufferBand = this.getInputBuffer().getBand(band);
+                Band outputBufferBand = this.getOutputBuffer().getBand(band);
+
+                for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                    Object rowBuffer = bufferBand.createRowBuffer();
+                    bufferBand.fetchRow(row, rowBuffer);
+
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputBufferBand.fetchRow(row, outputRowBuffer);
+
+                    rowProcessor.processRow(rowBuffer, outputRowBuffer);
+
+                    outputBufferBand.putRow(row, outputRowBuffer);
+                }
+            } else if (mustCopyUnprocessedBands()) {
+                try {
+                    this.getOutputBuffer().getBand(band).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+                }
+            } else if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                try {
+                    this.getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+            }
+        }
+    }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band]==BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GRAY_BAND));
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    interface RowProcessor {
+        void processRow(Object inputRow, Object outputRow);
+        byte processValue(Object value);
+    };
+
+    private abstract class AbstractRowProcessor implements RowProcessor {
+//        int band;
+        int maxResult = 255;
+        int minResult = 0;
+        NoData noData;
+
+        public AbstractRowProcessor(int band) {
+//            this.band = band;
+            noData = getInputBuffer().getBand(band).getNoData();
+            if(noData.isDefined()) {
+                minResult = (byte)1;
+            }
+        }
+    }
+
+    private class ByteRowProcessor extends AbstractRowProcessor {
+
+
+        public ByteRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            byte[] inputByteRow = (byte[])inputRow;
+            byte[] outputByteRow = (byte[])outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]);
+            }
+        }
+
+        @Override
+        public byte processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)value;
+            }
+
+            int iValue = 0xFF & ((Byte) value);
+
+            //FIXME: Copiado del raster viejo. No entiendo los c�lculos
+
+            int result;
+            int diferencia = 127 - iValue;
+            if (contrast >= 0) {
+                result = (int) (iValue - (0.02 * diferencia * contrast)); // ((5.0 * 0.1) / 25) = 0.02
+            } else {
+                result = (int) (iValue - (0.004 * diferencia * contrast)); // (0.1 / 25) = 0.004;
+                if (iValue < 127) {
+                    if (result > 127) result = 127;
+                } else {
+                    if (result < 127) result = 127;
+                }
+            }
+
+            if(result>maxResult){
+                result = maxResult;
+            }
+            if(result<minResult){
+                result = minResult;
+            }
+            return (byte)result;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/contrast/ContrastOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.contrast;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ContrastOperationFactory implements OperationFactory {
+    public static String NAME="Contrast";
+    public static String DESCRIPTION="Contrast operation";
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public ContrastOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new ContrastOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("ContrastOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/contrast/ContrastOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationFactory.java	(revision 46118)
@@ -0,0 +1,160 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.pansharpening;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ * @deprecated
+ * Possibly this class will be deleted
+ */
+@Deprecated
+public class PansharpeningOperationFactory implements OperationFactory {
+    public static String NAME="Pansharpening";
+    public static String DESCRIPTION="Pansharpening operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public PansharpeningOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new PansharpeningOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("PansharpeningOperationParameters", "org/gvsig/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperation.java	(revision 46118)
@@ -0,0 +1,185 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.pansharpening;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ * @deprecated
+ * Possibly this class will be deleted
+ */
+@Deprecated
+public class PansharpeningOperation extends AbstractColoredOperation{
+
+    static public String STATISTICS_PARAM = "statistics";
+
+    private Statistics statistics;
+    private RowProcessor rowProcessor;
+
+    /**
+     * @param factory
+     *
+     */
+    public PansharpeningOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+
+        statistics = (Statistics)this.getParameter(STATISTICS_PARAM,null);
+
+//        int bands = this.getInputBuffer().getBandCount();
+//        NoData[] noData = this.getInputBuffer().getBandNoData();
+
+        try {
+            this.setOutputBuffer( 
+                    manager.createBuffer(
+                        this.getInputBuffer().getRows(),
+                        this.getInputBuffer().getColumns(),
+                        this.getInputBuffer().getBandTypes(),
+                        this.getInputBuffer().getBandNoData(),
+                        this.getInputBuffer().getProjection(),
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        for (int band=0; band<this.getInputBuffer().getBandCount(); band++){
+            rowProcessor = new ByteRowProcessor(band);
+            if (isRGBorGrayBand(band)) {
+                Band bufferBand = this.getInputBuffer().getBand(band);
+                Band outputBufferBand = this.getOutputBuffer().getBand(band);
+
+                for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                    Object rowBuffer = bufferBand.createRowBuffer();
+                    bufferBand.fetchRow(row, rowBuffer);
+
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputBufferBand.fetchRow(row, outputRowBuffer);
+
+                    rowProcessor.processRow(rowBuffer, outputRowBuffer);
+
+                    outputBufferBand.putRow(row, outputRowBuffer);
+                }
+            } else {
+                try {
+                    this.getOutputBuffer().getBand(band).copyFrom(this.getInputBuffer().getBand(band));
+                } catch (BandException e) {
+                    throw new ProcessingOperationException(e);
+                }
+            }
+        }
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GRAY_BAND));
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+
+
+    interface RowProcessor {
+        void processRow(Object inputRow, Object outputRow);
+        byte processValue(Object value);
+    };
+
+    private abstract class AbstractRowProcessor implements RowProcessor {
+//        int band;
+        int maxResult = 255;
+        int minResult = 0;
+        NoData noData;
+
+        public AbstractRowProcessor(int band) {
+//            this.band = band;
+            noData = getInputBuffer().getBand(band).getNoData();
+            if(noData.isDefined()) {
+                minResult = (byte)1;
+            }
+        }
+    }
+
+    private class ByteRowProcessor extends AbstractRowProcessor {
+
+
+        public ByteRowProcessor(int band) {
+            super(band);
+        }
+
+        @Override
+        public void processRow(Object inputRow, Object outputRow) {
+            byte[] inputByteRow = (byte[])inputRow;
+            byte[] outputByteRow = (byte[])outputRow;
+            for (int i = 0; i < inputByteRow.length; i++) {
+                outputByteRow[i] = processValue(inputByteRow[i]);
+            }
+        }
+
+        @Override
+        public byte processValue(Object value) {
+            if(noData.isDefined() && noData.getValue().equals(value)){
+                return (byte)value;
+            }
+
+            int iValue = 0xFF & ((Byte) value);
+            int result = iValue; // + brightness;
+            if(result>maxResult){
+                result = maxResult;
+            }
+            if(result<minResult){
+                result = minResult;
+            }
+            return (byte)result;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/AbstractColorBalanceOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/AbstractColorBalanceOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/AbstractColorBalanceOperation.java	(revision 46118)
@@ -0,0 +1,223 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancergb;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public abstract class AbstractColorBalanceOperation  extends AbstractColoredOperation {
+
+    /**
+     * @param factory
+     *
+     */
+    public AbstractColorBalanceOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    abstract protected void initialiceParams();
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        initialiceParams();
+
+        try {
+            if (!(getInputColorInterpretation().isGray() || getInputColorInterpretation().isRGB())) {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (getInputColorInterpretation().isGray()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of GRAY band isn't BYTE");
+                }
+            } else if (getInputColorInterpretation().isRGB()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of RGB bands isn't BYTE");
+                }
+            } else {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.RED_BAND);
+            colorInterpretations.add(ColorInterpretation.GREEN_BAND);
+            colorInterpretations.add(ColorInterpretation.BLUE_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                int alphaBand = getInputColorInterpretation().getAlphaBand();
+                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[alphaBand]);
+                noDatas.add(sourceNoDatas[alphaBand]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(getInputColorInterpretation().get(band));
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new BufferOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        if (getInputColorInterpretation().hasAlphaBand()) {
+            try {
+                getOutputBuffer().getBand(3).copyFrom(this.getInputBuffer().getBand(getInputColorInterpretation().getAlphaBand()));
+            } catch (BandException e) {
+                throw new ProcessingOperationException(e);
+            }
+        }
+        Object[] rowBandsBuffer = new Object[3];
+
+        for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+            if(getInputColorInterpretation().isGray()){
+                Band bufferBandGray = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND));
+                rowBandsBuffer[0] = bufferBandGray.createRowBuffer();
+                bufferBandGray.fetchRow(row, rowBandsBuffer[0]);
+                rowBandsBuffer[1] = bufferBandGray.createRowBuffer();
+                bufferBandGray.fetchRow(row, rowBandsBuffer[0]);
+                rowBandsBuffer[2] = bufferBandGray.createRowBuffer();
+                bufferBandGray.fetchRow(row, rowBandsBuffer[0]);
+            } else if (getInputColorInterpretation().isRGB()){
+                Band bufferBandRed = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND));
+                rowBandsBuffer[0] = bufferBandRed.createRowBuffer();
+                bufferBandRed.fetchRow(row, rowBandsBuffer[0]);
+                Band bufferBandGreen = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND));
+                rowBandsBuffer[1] = bufferBandGreen.createRowBuffer();
+                bufferBandGreen.fetchRow(row, rowBandsBuffer[1]);
+                Band bufferBandBlue = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND));
+                rowBandsBuffer[2] = bufferBandBlue.createRowBuffer();
+                bufferBandBlue.fetchRow(row, rowBandsBuffer[2]);
+            } else { //No deber�a pasar por aqu�
+                throw new UnsupportedOperationException("The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            List<Object> outputRowBuffers = new ArrayList<>();
+            for (int band = 0; band<3; band++){
+                Band outputBufferBand = getOutputBuffer().getBand(band);
+                Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                outputRowBuffers.add(outputRowBuffer);
+            }
+
+            processRow(rowBandsBuffer, outputRowBuffers);
+
+            for (int band = 0; band<3; band++){
+                Band outputBufferBand = getOutputBuffer().getBand(band);
+                outputBufferBand.putRow(row, outputRowBuffers.get(band));
+            }
+
+        }
+    }
+
+    abstract protected void processRow(Object[] inputRows, List outputRows);
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    protected boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) ||
+            bandColorInterpretation.equals(ColorInterpretation.GRAY_BAND));
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperation.java	(revision 46118)
@@ -0,0 +1,106 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancergb;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceRGBOperation extends AbstractColorBalanceOperation {
+
+    static public String RED_PARAM = "red";
+    static public String GREEN_PARAM = "green";
+    static public String BLUE_PARAM = "blue";
+    static public String LUMINOSITY_PARAM = "luminosity";
+
+    private int red;
+    private int green;
+    private int blue;
+    private boolean luminosity;
+
+    /**
+     * @param factory
+     *
+     */
+    public ColorBalanceRGBOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+
+    @Override
+    protected void initialiceParams() {
+        red = (Integer) this.getParameter(RED_PARAM,0);
+        green = (Integer) this.getParameter(GREEN_PARAM,0);
+        blue = (Integer) this.getParameter(BLUE_PARAM,0);
+        luminosity = (Boolean) this.getParameter(LUMINOSITY_PARAM,true);
+    }
+
+    @Override
+    protected void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+            byte[] value = new byte[4];
+            value[0] = inputByteRows[0][i];
+            value[1] = inputByteRows[1][i];
+            value[2] = inputByteRows[2][i];
+
+            double lum = colorManager.getLuminosity(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff);
+
+            value[0] = (byte)Math.min((value[0] & 0xff) + (red >> 1), 255);
+            value[1] = (byte)Math.min((value[1] & 0xff) + (green >> 1), 255);
+            value[2] = (byte)Math.min((value[2] & 0xff) + (blue >> 1), 255);
+
+            if(luminosity) {
+                double[] hsl = colorManager.RGBtoHSL(value[0] & 0xff, value[1] & 0xff, value[2] & 0xff);
+                hsl[0] = (int)(255.0 * hsl[0] / 360.0 + 0.5);
+                hsl[1] = (int) (hsl[1] * 255. + 0.5);
+                hsl[2] = (int) (lum * 255. + 0.5);
+                int[] v1 = colorManager.HSLtoRGB(
+                    (int)(((int)hsl[0]) & 0xffffffff),
+                    (int)(((int)hsl[1]) & 0xffffffff),
+                    (int)(((int)hsl[2]) & 0xffffffff));
+                for (int band = 0; band < 3; band++) {
+                    value[band] = new Integer(v1[band]).byteValue();
+                }
+            }
+
+            for (int band = 0; band < inputRows.length; band++) {
+                ((byte[])(outputRows.get(band)))[i] = value[band];
+            }
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.colorbalancergb;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorBalanceRGBOperationFactory implements OperationFactory {
+    public static String NAME="ColorBalanceRGB";
+    public static String DESCRIPTION="Color balance RGB operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public ColorBalanceRGBOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new ColorBalanceRGBOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("ColorBalanceRGBOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperation.java	(revision 46118)
@@ -0,0 +1,236 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.cmyktorgb;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class CMYKToRGBOperation extends AbstractColoredOperation {
+
+    /**
+     * @param factory
+     *
+     */
+    public CMYKToRGBOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+
+        try {
+            if (!this.getInputColorInterpretation().isCMYK()) {
+                throw new UnsupportedOperationException("The color interpretation of input buffer isn't CMYK");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.CYAN_BAND)] != BufferManager.TYPE_BYTE
+                || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.MAGENTA_BAND)] != BufferManager.TYPE_BYTE
+                || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.YELLOW_BAND)] != BufferManager.TYPE_BYTE
+                || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.BLACK_BAND)] != BufferManager.TYPE_BYTE) {
+                throw new UnsupportedOperationException("The type of bands isn't BYTE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.RED_BAND);
+            colorInterpretations.add(ColorInterpretation.GREEN_BAND);
+            colorInterpretations.add(ColorInterpretation.BLUE_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                int alphaBand = getInputColorInterpretation().getAlphaBand();
+                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[alphaBand]);
+                noDatas.add(sourceNoDatas[alphaBand]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(ColorInterpretation.UNDEFINED_BAND);
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(
+                    OUTPUT_COLOR_INTERPRETATION_PARAM, 
+                    getOutputColorInterpretation());
+
+
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        try {
+            super.process();
+            // List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = getInputColorInterpretation().hasAlphaBand() ? 4 : 3;
+                for (int band = 0; band < bands; band++) {
+                    if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        getOutputBuffer().getBand(getInputColorInterpretation().getAlphaBand()).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                    } else if (!isProcessableBand(band)) {
+                        getOutputBuffer().getBand(outBand).copyFrom(this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            Object[] rowBandsBuffer = new Object[4];
+
+            for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                Band bufferBandCyan = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.CYAN_BAND));
+                rowBandsBuffer[0] = bufferBandCyan.createRowBuffer();
+                bufferBandCyan.fetchRow(row, rowBandsBuffer[0]);
+                Band bufferBandMagenta = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.MAGENTA_BAND));
+                rowBandsBuffer[1] = bufferBandMagenta.createRowBuffer();
+                bufferBandMagenta.fetchRow(row, rowBandsBuffer[1]);
+                Band bufferBandYellow = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.YELLOW_BAND));
+                rowBandsBuffer[2] = bufferBandYellow.createRowBuffer();
+                bufferBandYellow.fetchRow(row, rowBandsBuffer[2]);
+                Band bufferBandBlack = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.BLACK_BAND));
+                rowBandsBuffer[3] = bufferBandBlack.createRowBuffer();
+                bufferBandBlack.fetchRow(row, rowBandsBuffer[3]);
+
+                List<Object> outputRowBuffers = new ArrayList<>();
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputRowBuffers.add(outputRowBuffer);
+                }
+
+                processRow(rowBandsBuffer, outputRowBuffers);
+
+                for (int band = 0; band < 3; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    outputBufferBand.putRow(row, outputRowBuffers.get(band));
+                }
+
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+
+    }
+
+    private void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+        int[] convertedValues = new int[3];
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+
+            double[] rgb = colorManager.CMYKtoRGB((0xFF & inputByteRows[0][i])/255D, (0xFF & inputByteRows[1][i])/255D, (0xFF & inputByteRows[2][i])/255D, (0xFF & inputByteRows[3][i])/255D);
+
+            for (int band = 0; band < outputRows.size(); band++) {
+                ((byte[])(outputRows.get(band)))[i] = new Double(rgb[band] * 255).byteValue();
+            }
+        }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isCMYKBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isCMYKBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.CYAN_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.MAGENTA_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.YELLOW_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.BLACK_BAND));
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.cmyktorgb;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class CMYKToRGBOperationFactory implements OperationFactory {
+    public static String NAME="CMYKToRGB";
+    public static String DESCRIPTION="CMYK to RGB operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public CMYKToRGBOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new CMYKToRGBOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("CMYKToRGBOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperation.java	(revision 46118)
@@ -0,0 +1,256 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.rgbtocmyk;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.spi.exceptions.ProcessingOperationException;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.impl.ColorManager;
+import org.gvsig.raster.lib.legend.impl.RasterLegendManagerServices;
+import org.gvsig.raster.lib.legend.spi.AbstractColoredOperation;
+import org.gvsig.tools.locator.LocatorException;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RGBToCMYKOperation extends AbstractColoredOperation {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RGBToCMYKOperation.class);
+
+    /**
+     * @param factory
+     *
+     */
+    public RGBToCMYKOperation(OperationFactory factory) {
+        super(factory);
+    }
+
+    @Override
+    public void preProcess() throws BufferOperationException {
+        super.preProcess();
+        BufferManager manager = BufferLocator.getBufferManager();
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        try {
+            if (!(getInputColorInterpretation().isGray() || getInputColorInterpretation().isRGB())) {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int[] inputBandTypes = getInputBuffer().getBandTypes();
+            if (getInputColorInterpretation().isGray()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of GRAY band isn't BYTE");
+                }
+            } else if (getInputColorInterpretation().isRGB()) {
+                if (inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND)] != BufferManager.TYPE_BYTE
+                    || inputBandTypes[getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND)] != BufferManager.TYPE_BYTE) {
+                    throw new UnsupportedOperationException("The type of RGB bands isn't BYTE");
+                }
+            } else {
+                throw new UnsupportedOperationException(
+                    "The color interpretation of input buffer isn't RGB nor GRAYSCALE");
+            }
+
+            int sourceBands = this.getInputBuffer().getBandCount();
+            NoData[] sourceNoDatas = this.getInputBuffer().getBandNoData();
+            int[] sourceTypes = this.getInputBuffer().getBandTypes();
+
+            List<String> colorInterpretations = new ArrayList<>();
+            List<NoData> noDatas = new ArrayList<>();
+            List<Integer> types = new ArrayList<>();
+
+            colorInterpretations.add(ColorInterpretation.CYAN_BAND);
+            colorInterpretations.add(ColorInterpretation.MAGENTA_BAND);
+            colorInterpretations.add(ColorInterpretation.YELLOW_BAND);
+            colorInterpretations.add(ColorInterpretation.BLACK_BAND);
+
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+            types.add(BufferManager.TYPE_BYTE);
+
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+            noDatas.add(null);
+
+            if (getInputColorInterpretation().hasAlphaBand()) {
+                int alphaBand = getInputColorInterpretation().getAlphaBand();
+                if(sourceTypes[alphaBand]!=BufferManager.TYPE_BYTE){
+                    throw new UnsupportedOperationException("The type of ALPHA band isn't BYTE");
+                }
+                colorInterpretations.add(ColorInterpretation.ALPHA_BAND);
+                types.add(sourceTypes[alphaBand]);
+                noDatas.add(sourceNoDatas[alphaBand]);
+            }
+
+            if (mustCopyUnprocessedBands()) {
+                for (int band = 0; band < sourceBands; band++) {
+                    if (!isProcessableBand(band) && !getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        colorInterpretations.add(ColorInterpretation.UNDEFINED_BAND);
+                        noDatas.add(sourceNoDatas[band]);
+                        types.add(this.getInputBuffer().getBandTypes()[band]);
+                    }
+                }
+            }
+
+            setOutputColorInterpretation(
+                legendManager.createColorInterpretation(colorInterpretations));
+            this.setParameter(OUTPUT_COLOR_INTERPRETATION_PARAM, getOutputColorInterpretation());
+
+            this.setOutputBuffer(
+                manager.createBuffer(
+                        this.getInputBuffer().getRows(), 
+                        this.getInputBuffer().getColumns(), 
+                        this.getTypesAsArray(types),
+                        this.getNoDatasAsArray(noDatas), 
+                        this.getInputBuffer().getProjection(), 
+                        this.getInputBuffer().getEnvelope()));
+        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
+            throw new ProcessingOperationException(e);
+        }
+    }
+
+    @Override
+    public void process() throws ProcessingOperationException {
+        super.process();
+        try {
+
+            // List<Integer> bandsToProcess = new ArrayList<Integer>();
+
+            if (mustCopyUnprocessedBands()) {
+                int bands = this.getInputBuffer().getBandCount();
+                int outBand = getInputColorInterpretation().hasAlphaBand() ? 5 : 4;
+                for (int band = 0; band < bands; band++) {
+                    if (getInputColorInterpretation().isAlphaInterpretation(band)) {
+                        getOutputBuffer().getBand(getOutputColorInterpretation().getAlphaBand()).copyFrom(
+                            this.getInputBuffer().getBand(band));
+                    } else if (!isProcessableBand(band)) {
+                        getOutputBuffer().getBand(outBand).copyFrom(this.getInputBuffer().getBand(band));
+                        outBand++;
+                    }
+                }
+            }
+
+            Object[] rowBandsBuffer = new Object[3];
+
+            for (int row = 0; row < this.getInputBuffer().getRows(); row++) {
+                if (getInputColorInterpretation().isGray()) {
+                    Band bufferBandGray = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GRAY_BAND));
+                    rowBandsBuffer[0] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[0]);
+                    rowBandsBuffer[1] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[1]);
+                    rowBandsBuffer[2] = bufferBandGray.createRowBuffer();
+                    bufferBandGray.fetchRow(row, rowBandsBuffer[2]);
+                } else {
+                    Band bufferBandRed = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.RED_BAND));
+                    rowBandsBuffer[0] = bufferBandRed.createRowBuffer();
+                    bufferBandRed.fetchRow(row, rowBandsBuffer[0]);
+                    Band bufferBandGreen = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.GREEN_BAND));
+                    rowBandsBuffer[1] = bufferBandGreen.createRowBuffer();
+                    bufferBandGreen.fetchRow(row, rowBandsBuffer[1]);
+                    Band bufferBandBlue = getInputBuffer().getBand(getInputColorInterpretation().getBand(ColorInterpretation.BLUE_BAND));
+                    rowBandsBuffer[2] = bufferBandBlue.createRowBuffer();
+                    bufferBandBlue.fetchRow(row, rowBandsBuffer[2]);
+                }
+
+                List<Object> outputRowBuffers = new ArrayList<Object>();
+                for (int band = 0; band < 4; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    Object outputRowBuffer = outputBufferBand.createRowBuffer();
+                    outputRowBuffers.add(outputRowBuffer);
+                }
+
+                processRow(rowBandsBuffer, outputRowBuffers);
+
+                for (int band = 0; band < 4; band++) {
+                    Band outputBufferBand = getOutputBuffer().getBand(band);
+                    outputBufferBand.putRow(row, outputRowBuffers.get(band));
+                }
+
+            }
+        } catch (Exception e) {
+            throw new ProcessingOperationException(e);
+        }
+
+    }
+
+    @Override
+    public void postProcess() throws BufferOperationException {
+        super.postProcess();
+    }
+
+    private void processRow(Object[] inputRows, List outputRows) {
+        ColorManager colorManager = ((RasterLegendManagerServices)RasterLegendLocator.getRasterLegendManager()).getColorManager();
+        byte[][] inputByteRows = new byte[inputRows.length][((byte[]) inputRows[0]).length];
+        for (int i = 0; i < inputRows.length; i++) {
+            inputByteRows[i] = (byte[]) inputRows[i];
+        }
+
+        for (int i = 0; i < inputByteRows[0].length; i++) {
+
+            double[] convertedValues = colorManager.RGBtoCMYK(0xFF & inputByteRows[0][i], 0xFF & inputByteRows[1][i], 0xFF & inputByteRows[2][i], 255);
+
+            for (int band = 0; band < outputRows.size(); band++) {
+                ((byte[])(outputRows.get(band)))[i] = new Double(convertedValues[band]).byteValue();
+            }
+        }
+    }
+
+    /**
+     * @param band
+     * @return
+     */
+    @Override
+    protected boolean isProcessableBand(int band) {
+        return isRGBorGrayBand(band) && this.getInputBuffer().getBandTypes()[band] == BufferManager.TYPE_BYTE;
+    }
+
+    private boolean isRGBorGrayBand(int band) {
+        String bandColorInterpretation = getInputColorInterpretation().get(band);
+        return (bandColorInterpretation.equals(ColorInterpretation.RED_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.GREEN_BAND)
+            || bandColorInterpretation.equals(ColorInterpretation.BLUE_BAND) || bandColorInterpretation
+                .equals(ColorInterpretation.GRAY_BAND));
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationFactory.java	(revision 46118)
@@ -0,0 +1,157 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.operations.rgbtocmyk;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynStruct;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RGBToCMYKOperationFactory implements OperationFactory {
+    public static String NAME="RGBToCMYK";
+    public static String DESCRIPTION="RGB to CMYK operation";//FIXME:
+    private DynStruct definition;
+
+    /**
+     *
+     */
+    public RGBToCMYKOperationFactory() {
+        // TODO Auto-generated constructor stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParameters()
+     */
+    @Override
+    public DynObject createParameters() {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        if (definition == null) {
+            definition = createParametersDefinition();
+        }
+        DynObject parameters = manager.createDynObject(definition);
+        return parameters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#create()
+     */
+    @Override
+    public Operation create() {
+        return new RGBToCMYKOperation(this);
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#createParametersDefinition()
+     */
+    @Override
+    public DynStruct createParametersDefinition() {
+        return registerParametersDefinition("RGBToCMYKOperationParameters", "/org/gvsig/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationParameters.xml");
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getName()
+     */
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.Buffer)
+     */
+    @Override
+    public Applicable isApplicable(Buffer buffer) {
+        int bandsCount = buffer.getBandCount();
+        int byteBandsCount = 0;
+        for(int band = 0; band<bandsCount; band++){
+            if (buffer.getBandTypes()[band]==BufferManager.TYPE_BYTE) {
+                byteBandsCount++;
+            }
+        }
+        if(byteBandsCount==bandsCount){
+            return Applicable.YES;
+        } else if (byteBandsCount==0) {
+            return Applicable.NO;
+        }
+        return Applicable.UNKNOW;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.lib.buffer.api.operations.OperationFactory#isApplicable(org.gvsig.raster.lib.buffer.api.operations.Operation)
+     */
+    @Override
+    public Applicable isApplicable(Operation operation) {
+        //FIXME:
+        return Applicable.YES;
+    }
+
+    protected DynStruct registerParametersDefinition(String name, String filename) {
+        DynStruct definition = null;
+
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        definition = manager.get(name);
+        if ( definition == null) {
+            InputStream stream = this.getClass().getResourceAsStream(filename);
+            if( stream == null ) {
+                throw new IllegalArgumentException("File '"+filename+"' not found");
+            }
+            Map<String, DynStruct> definitions = null;
+            try {
+                definitions = manager.importDynClassDefinitions(stream, this.getClass().getClassLoader());
+            } catch (XmlPullParserException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't parse file '"+filename+"'",e);
+            } catch (IOException e) {
+                throw new IllegalArgumentException("DynClass '"+name+"' can't read file '"+filename+"'",e);
+            }
+            definition = definitions.get(name);
+            if ( definition == null) {
+                throw new IllegalArgumentException("DynClass '"+name+"' not found in file '"+filename+"'");
+            }
+        }
+        return definition;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegend.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegend.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultRasterLegend.java	(revision 46118)
@@ -0,0 +1,1217 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cresques.cts.ICoordTrans;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+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.ViewPort;
+import org.gvsig.fmap.mapcontext.raster.api.legend.ChangeColorInterpretationEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.ChangeOperationListEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.ChangePaletteBandEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.ChangePaletteEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.RasterLegendEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.listeners.RasterLegendChangedListener;
+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.ISymbol;
+import org.gvsig.raster.lib.buffer.api.Band;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.NoData;
+import org.gvsig.raster.lib.buffer.api.OperationManager;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.Operation;
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.lib.buffer.api.operations.OperationListEntry;
+import org.gvsig.raster.lib.buffer.api.operations.OperationListNotification;
+import org.gvsig.raster.lib.buffer.api.operations.SpecifiedBandsOperation;
+import org.gvsig.raster.lib.buffer.spi.operations.AbstractOperation;
+import org.gvsig.raster.lib.buffer.spi.operations.AbstractSpecifiedBandsOperation;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.raster.lib.legend.api.Transparency;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretationNotification;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.operations.ColoredOperation;
+import org.gvsig.raster.lib.legend.impl.operations.cmyktorgb.CMYKToRGBOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.hsltorgb.HSLToRGBOperationFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+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.impl.DefaultDynObjectManager;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.operations.OperationException;
+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.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+/**
+ * Default implementation of {@link RasterLegend}. This object can draw buffers
+ * with a {@link ColorInterpretation}, {@link ColorTable} and {@link OperationList}
+ *
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultRasterLegend implements RasterLegend {
+
+    public static final String LEGEND_NAME = "BaseRasterLegend";
+    
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultRasterLegend.class);
+
+    private ColorInterpretation colorInterpretation;
+    private Transparency transparency;
+    private OperationList filters;
+    private boolean transparentNoData;
+
+    private List<RasterLegendChangedListener> listeners =
+        new ArrayList<RasterLegendChangedListener>();
+
+    /**
+     * Persistence definition name
+     */
+    public static final String PERSISTENT_NAME = "RasterLegendPersistence";
+    /**
+     * Description of persistence definition
+     */
+    public static final String PERSISTENT_DESCRIPTION = "Persistence definition of raster legend";
+
+    private final static String COLOR_INTERPRETATION_PERSISTENCE_FIELD = "colorInterpretation";
+    private final static String FILTERS_PERSISTENCE_FIELD = "filters";
+
+    /**
+     * Empty constructor
+     */
+    public DefaultRasterLegend() {
+
+    }
+
+    /**
+     * Default {@link RasterLegend} constructor
+     *
+     * @param colorInterpretation
+     *            Color interpretation of legend
+     */
+    public DefaultRasterLegend(ColorInterpretation colorInterpretation) {
+        this(colorInterpretation, null, null);
+    }
+
+    /**
+     * Default {@link RasterLegend} constructor
+     *
+     * @param colorTable
+     *            Color table of legend
+     * @param colorInterpretation
+     *            Color interpretation of legend
+     * @param transparency
+     *            Transparency of legend
+     * @param filters
+     *            Filters of legend
+     */
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public DefaultRasterLegend(ColorInterpretation colorInterpretation,
+        Transparency transparency, OperationList filters) {
+        this.transparency = transparency;
+        this.filters = filters;
+        setColorInterpretation(colorInterpretation);
+    }
+
+    @Override
+    public void draw(Graphics graphics, Buffer buffer, ViewPort viewPort,
+        SimpleTaskStatus taskStatus) {
+
+        boolean isMyTask = false;
+        if (taskStatus == null) {
+            TaskStatusManager taskStatusManager = ToolsLocator.getTaskStatusManager();
+            taskStatus =
+                taskStatusManager.createDefaultSimpleTaskStatus("_drawing_buffer_XxellipsisxX");
+            taskStatus.setAutoremove(true);
+            taskStatus.add();
+            isMyTask = true;
+        } else {
+            taskStatus.push();
+        }
+
+        taskStatus.setIndeterminate();
+
+        if (this.colorInterpretation == null || !this.colorInterpretation.hasInterpretation()
+            || this.colorInterpretation.isUndefined()) {
+            taskStatus.abort();
+            throw new IllegalStateException(
+                "To draw buffer, raster legend has to have a color interpretation");
+        }
+
+        // Check if viewport projection is the same as buffer projection
+        Buffer clip = null;
+        Buffer interpolated = null;
+        Buffer converted = null;
+        Buffer interpolated2 = null;
+        Buffer bufferToDraw = buffer;
+        try {
+            if (buffer != null && buffer.getColumns()>0 && buffer.getRows()>0) {
+
+                if (!viewPort.getProjection().equals(buffer.getProjection())) {
+
+                    // Convert extension to check if envelopes intersect
+                    ICoordTrans coordTrans = viewPort.getProjection().getCT(buffer.getProjection());
+                    ICoordTrans invertedCoordTrans = buffer.getProjection().getCT(viewPort.getProjection());
+                    Envelope convertedEnvelope = viewPort.getAdjustedEnvelope().convert(coordTrans);
+                    double viewPortPixelSizeX = viewPort.getAdjustedEnvelope().getLength(0) / viewPort.getImageWidth();
+                    double viewPortPixelSizeY = viewPort.getAdjustedEnvelope().getLength(1) / viewPort.getImageHeight();
+                    if (!convertedEnvelope.intersects(buffer.getEnvelope())) {
+                        return;
+                    }
+                    try {
+                        // Clip buffer with doubled converted envelope
+                        clip = buffer.clip(convertedEnvelope);
+                        DisposeUtils.dispose(buffer);
+                        Envelope bufferEnvelopeInViewPortCoords = clip.getEnvelope().convert(invertedCoordTrans);
+
+                        double widthPixel = bufferEnvelopeInViewPortCoords.getLength(0) / viewPortPixelSizeX;
+                        double heightPixel = bufferEnvelopeInViewPortCoords.getLength(1) / viewPortPixelSizeY;
+
+                        interpolated =
+                            clip.createInterpolated((int) Math.floor(heightPixel), (int) Math.floor(widthPixel),
+                                Buffer.INTERPOLATION_Bilinear, taskStatus);
+                        DisposeUtils.dispose(clip);
+                        // Convert interpolated clipped buffer
+                        converted = interpolated.convert(invertedCoordTrans, taskStatus);
+                        DisposeUtils.dispose(interpolated);
+
+                        widthPixel = getWidthPixel(converted.getEnvelope(), viewPortPixelSizeX);
+                        heightPixel = getHeightPixel(converted.getEnvelope(), viewPortPixelSizeY);
+
+                        interpolated2 =
+                            converted.createInterpolated((int) Math.floor(heightPixel), (int) Math.floor(widthPixel),
+                                Buffer.INTERPOLATION_Bilinear, taskStatus);
+                        DisposeUtils.dispose(converted);
+
+                        bufferToDraw = interpolated2;
+
+                    } catch (BufferException | LocatorException | CreateEnvelopeException e) {
+                        LOG.warn("Buffer can not be clipped, converted or interpolated", e);
+                        taskStatus.abort();
+                        return;
+                    }
+                } else if (viewPort.getAdjustedEnvelope().intersects(buffer.getEnvelope())) {
+
+                    double widthPixel = 0;
+                    double heightPixel = 0;
+                    try {
+                        // Clip and interpolate buffer with view port envelope
+                        if (!buffer.getEnvelope().equals(viewPort.getAdjustedEnvelope())) {
+                            clip = buffer.clip(viewPort.getAdjustedEnvelope());
+                            DisposeUtils.dispose(buffer);
+                            bufferToDraw = clip;
+                        }
+                        widthPixel =
+                            getWidthPixel(bufferToDraw.getEnvelope(), viewPort.getAdjustedEnvelope().getLength(0)
+                                / viewPort.getImageWidth());
+                        heightPixel =
+                            getHeightPixel(bufferToDraw.getEnvelope(), viewPort.getAdjustedEnvelope().getLength(1)
+                                / viewPort.getImageHeight());
+
+                        interpolated =
+                            bufferToDraw.createInterpolated((int) Math.floor(heightPixel),
+                                (int) Math.floor(widthPixel), Buffer.INTERPOLATION_Bilinear, taskStatus);
+                        DisposeUtils.disposeQuietly(clip);
+                        bufferToDraw = interpolated;
+                    } catch (BufferException e) {
+                        LOG.warn(
+                            "Buffer can not be interpolated with [rows: {} , columns: {}, method: {}]",
+                            new String[] { String.valueOf((int) Math.floor(heightPixel)),
+                                String.valueOf((int) Math.floor(widthPixel)),
+                                String.valueOf(Buffer.INTERPOLATION_Bilinear) });
+                        taskStatus.abort();
+                        return;
+                    }
+                } else {
+                    // Do nothing view port envelope does not intersect with
+                    // buffer
+                    return;
+                }
+            }
+
+            OperationManager operationManager = BufferLocator.getOperationManager();
+
+            if (bufferToDraw != null && bufferToDraw.getColumns()>0 && bufferToDraw.getRows()>0) {
+
+                // Calculate where image has to be drawn
+                double x = bufferToDraw.getEnvelope().getMinimum(0);
+                double y = bufferToDraw.getEnvelope().getMaximum(1);
+                AffineTransform affineTransform =
+                    calculateAffineTransform(viewPort.getAdjustedEnvelope(), viewPort.getImageWidth(),
+                        viewPort.getImageHeight());
+
+                Point point;
+                try {
+                    point = GeometryLocator.getGeometryManager().createPoint(x, y, SUBTYPES.GEOM2D);
+                    point.transform(affineTransform.createInverse());
+                } catch (CreateGeometryException | NoninvertibleTransformException e) {
+                    LOG.warn("Can not calculate the point of buffer in viewport image", e);
+                    taskStatus.abort();
+                    return;
+                }
+
+                // Draw buffer
+                Image image = null;
+                Buffer filteredBuffer = bufferToDraw;
+                try {
+                    DynObjectManager dynObjectManager = new DefaultDynObjectManager();
+                    DynClass parametersClass = dynObjectManager.createDynClass("Parameters", "Parameters to find through ultimately.");
+                    parametersClass.addDynFieldObject(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM);
+                    DynObject defaultParameters = dynObjectManager.createDynObject(parametersClass);
+                    defaultParameters.setDynValue(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM, colorInterpretation);
+
+                    getFilters().setDefaultParameters(defaultParameters);
+
+                    Object oColorInterpretation = null;
+                    filteredBuffer = getFilters().execute(taskStatus, bufferToDraw);
+                    oColorInterpretation = getFilters().getParameterValue(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM);
+                    ColorInterpretation colorInterpretationAfterFilters = null;
+                    if (oColorInterpretation != null) {
+                        colorInterpretationAfterFilters = (ColorInterpretation) oColorInterpretation;
+                    }
+                    if (colorInterpretationAfterFilters == null) {
+                        colorInterpretationAfterFilters = colorInterpretation;
+                    }
+
+                    if (colorInterpretationAfterFilters.isPalette()) {
+                        DynObject colorTableOperationParameters =
+                            operationManager.createOperationParameters(ColoredOperation.COLOR_TABLE_OPERATION_NAME);
+                        colorTableOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM,
+                            colorInterpretationAfterFilters);
+//                        colorTableOperationParameters.setDynValue(ColoredOperation.COPY_UNPROCESSED_BANDS_PARAM,
+//                            true);
+                        Buffer rgbBuffer =
+                            operationManager.execute(taskStatus, ColoredOperation.COLOR_TABLE_OPERATION_NAME, filteredBuffer,
+                                colorTableOperationParameters);
+                        image =
+                            drawRGBBuffer(graphics, rgbBuffer,
+                                (ColorInterpretation) colorTableOperationParameters
+                                    .getDynValue(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM), transparency,
+                                getFilters());
+
+                    } else if (colorInterpretationAfterFilters.hasAnyGrayBand()) {
+                        // Draw buffer with gray scale
+                        image = drawGrayBuffer(graphics, filteredBuffer, colorInterpretationAfterFilters, transparency, filters);
+                        // } else if (this.colorInterpretation.isRGBA() ||
+                        // this.colorInterpretation.isRGB()
+                        // || this.colorInterpretation.isBGR() ||
+                        // this.colorInterpretation.hasRGBBands()) {
+                    } else if (colorInterpretationAfterFilters.hasAnyRGBBand()) {
+                        // Draw RGB, RGBA or BGR buffer without color table
+                        image =
+                            drawRGBBuffer(graphics, filteredBuffer, colorInterpretationAfterFilters, transparency,
+                                filters);
+//                    } else if (colorInterpretationAfterFilters.hasAnyHSLBand()) {
+//                        // Draw HSL buffer without color table
+//                        // image = drawHSLBuffer(graphics, bufferToDraw,
+//                        // colorInterpretation, transparency, filters);
+//
+//                        DynObject hSLToRGBOperationParameters =
+//                            operationManager.createOperationParameters(HSLToRGBOperationFactory.NAME);
+//                        hSLToRGBOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM,
+//                            colorInterpretationAfterFilters);
+////                        hSLToRGBOperationParameters.setDynValue(ColoredOperation.COPY_UNPROCESSED_BANDS_PARAM, true);
+//                        Buffer rgbBuffer =
+//                            operationManager.execute(HSLToRGBOperationFactory.NAME, filteredBuffer,
+//                                hSLToRGBOperationParameters);
+//                        image =
+//                            drawRGBBuffer(graphics, rgbBuffer,
+//                                (ColorInterpretation) hSLToRGBOperationParameters
+//                                    .getDynValue(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM), transparency,
+//                                filters);
+//
+//                    } else if (colorInterpretationAfterFilters.hasAnyCMYKBand()) {
+//                        // Draw CMYK buffer without color table
+////                        image = drawCMYKBuffer(graphics, filteredBuffer, colorInterpretationAfterFilters, transparency, filters);
+//
+//                        DynObject cmykToRGBOperationParameters =
+//                            operationManager.createOperationParameters(CMYKToRGBOperationFactory.NAME);
+//                        cmykToRGBOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM,
+//                            colorInterpretationAfterFilters);
+////                        cmykToRGBOperationParameters.setDynValue(CMYKToRGBOperation.COPY_UNPROCESSED_BANDS_PARAM, true);
+//                        Buffer rgbBuffer =
+//                            operationManager.execute(CMYKToRGBOperationFactory.NAME, filteredBuffer,
+//                                cmykToRGBOperationParameters);
+//                        image =
+//                            drawRGBBuffer(graphics, rgbBuffer,
+//                                (ColorInterpretation) cmykToRGBOperationParameters
+//                                    .getDynValue(ColoredOperation.OUTPUT_COLOR_INTERPRETATION_PARAM), transparency,
+//                                filters);
+//
+//                    } else if (colorInterpretationAfterFilters.hasAnyYCBCRBand()) {
+//                        // TODO: Hacer un filtro YCBCRToRGB y llamarlo como en
+//                        // los de arriba
+//
+//                        // Draw YCBCR buffer without color table
+//                        image = drawYCBCRBuffer(graphics, bufferToDraw, colorInterpretation, transparency, filters);
+                    }
+                } catch (Exception e) {
+                    LOG.warn("Error drawing legend", e);
+                    taskStatus.abort();
+                    return;
+                } finally {
+                    if (filteredBuffer != null && filteredBuffer != bufferToDraw) {
+                        DisposeUtils.dispose(filteredBuffer);
+                        filteredBuffer = null;
+                    }
+                }
+
+
+                graphics.drawImage(image, (int) Math.floor(point.getX()), (int) Math.floor(point.getY()), null);
+            }
+        } catch (LocatorException | CreateEnvelopeException e1) {
+            LOG.warn("Can not calculate the envelope of buffer", e1);
+            taskStatus.abort();
+            return;
+        } finally {
+            if (clip != null) {
+                DisposeUtils.dispose(clip);
+                clip = null;
+            }
+            if (interpolated != null) {
+                DisposeUtils.dispose(interpolated);
+                interpolated = null;
+            }
+            if (converted != null) {
+                DisposeUtils.dispose(converted);
+                converted = null;
+            }
+            if (interpolated2 != null) {
+                DisposeUtils.dispose(interpolated2);
+                interpolated2 = null;
+            }
+            if (bufferToDraw != null && bufferToDraw != buffer) {
+                DisposeUtils.dispose(bufferToDraw);
+                bufferToDraw = null;
+            }
+
+            if (!isMyTask) {
+                taskStatus.pop();
+            }
+        }
+    }
+
+    private AffineTransform calculateAffineTransform(Envelope envelope, double imageWidth,
+        double imageHeight) {
+        double pixelSizeX = envelope.getLength(0) / imageWidth;
+        double rotationX = 0;
+        double x = envelope.getMinimum(0);
+        double rotationY = 0;
+        double pixelSizeY = -envelope.getLength(1) / imageHeight;
+        double y = envelope.getMaximum(1);
+        return new AffineTransform(pixelSizeX, rotationY, rotationX, pixelSizeY, x, y);
+    }
+
+    private double getWidthPixel(Envelope envelope, double dist1pixel) {
+        double widthEnvelope = envelope.getLength(0);
+        return widthEnvelope / dist1pixel;
+    }
+
+    private double getHeightPixel(Envelope envelope, double dist1pixel) {
+        double heightEnvelope = envelope.getLength(1);
+        return heightEnvelope / dist1pixel;
+    }
+
+
+
+    private Image drawRGBBuffer(Graphics graphics, Buffer buffer,
+        ColorInterpretation colorInterpretation, Transparency transparency, OperationList filters) throws BufferOperationException {
+
+        Buffer byteBuffer = convertToByteBuffer(buffer);
+        Buffer bufferToDraw = byteBuffer;
+
+        BufferedImage image = null;
+
+        if (colorInterpretation.isRGB() || colorInterpretation.isRGBA() || colorInterpretation.hasAnyRGBBand()) {
+            image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(bufferToDraw.getColumns(), bufferToDraw.getRows(),
+                    BufferedImage.TYPE_INT_ARGB);
+        } else if (colorInterpretation.isBGR()) {
+            image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(bufferToDraw.getColumns(), bufferToDraw.getRows(),
+                BufferedImage.TYPE_INT_BGR);
+        }
+
+        if (image == null) {
+            throw new IllegalStateException(
+                "Color interpretation is not RGB,RGBA or BGR and buffer was be drawn without color table");
+        }
+
+        int redBandIndex = colorInterpretation.getBand(ColorInterpretation.RED_BAND);
+        int greenBandIndex = colorInterpretation.getBand(ColorInterpretation.GREEN_BAND);
+        int blueBandIndex = colorInterpretation.getBand(ColorInterpretation.BLUE_BAND);
+
+        Band redBand = null;
+        if(redBandIndex>=0){
+            redBand = bufferToDraw.getBand(redBandIndex);
+        }
+        Band greenBand = null;
+        if(greenBandIndex>=0){
+            greenBand = bufferToDraw.getBand(greenBandIndex);
+        }
+        Band blueBand = null;
+        if(blueBandIndex>=0){
+            blueBand = bufferToDraw.getBand(blueBandIndex);
+        }
+        Band alphaBand = null;
+        if (colorInterpretation.hasAlphaBand()) {
+            int alphaBandIndex =
+                colorInterpretation.getBand(ColorInterpretation.ALPHA_BAND);
+            alphaBand = bufferToDraw.getBand(alphaBandIndex);
+        }
+
+        for (int i = 0; i < bufferToDraw.getRows(); i++) {
+            for (int j = 0; j < bufferToDraw.getColumns(); j++) {
+
+                int alphaByteValue = 0;
+                int redByteValue = 0;
+                if(redBand!=null){
+                    Number redValue = (Number) redBand.get(i, j);
+                    NoData noData = redBand.getNoData();
+                    if(noData != null){
+                        if(redValue.equals(noData.getValue())){
+                            alphaByteValue = 0 | alphaByteValue;
+                            redByteValue = 0;
+                        } else {
+                            alphaByteValue = 255;
+                            redByteValue = redValue.byteValue();
+                        }
+                    } else {
+                        redByteValue = redValue.byteValue();
+                    }
+                }
+                int greenByteValue = 0;
+                if(greenBand!=null){
+                    Number greenValue = (Number) greenBand.get(i, j);
+                    NoData noData = greenBand.getNoData();
+                    if(noData != null){
+                        if(greenValue.equals(noData.getValue())){
+                            alphaByteValue = 0 | alphaByteValue;
+                            greenByteValue = 0;
+                        } else {
+                            alphaByteValue = 255;
+                            greenByteValue = greenValue.byteValue();
+                        }
+                    } else {
+                        greenByteValue = greenValue.byteValue();
+                    }
+                }
+                int blueByteValue = 0;
+                if(blueBand!=null){
+                    Number blueValue = (Number) blueBand.get(i, j);
+                    NoData noData = blueBand.getNoData();
+                    if(noData != null){
+                        if(blueValue.equals(noData.getValue())){
+                            alphaByteValue = 0 | alphaByteValue;
+                            blueByteValue = 0;
+                        } else {
+                            alphaByteValue = 255;
+                            blueByteValue = blueValue.byteValue();
+                        }
+                    } else {
+                        blueByteValue = blueValue.byteValue();
+                    }
+                }
+
+                if (alphaByteValue!=0 && alphaBand != null) {
+                    Number alphaValue = (Number) alphaBand.get(i, j);
+                    int alphaBandIndex = colorInterpretation.getBand(ColorInterpretation.ALPHA_BAND);
+                    NoData noData = alphaBand.getNoData();
+                    if(noData != null){
+                        if(alphaValue.equals(noData.getValue())){
+                            alphaByteValue = 0;
+                        } else {
+                            alphaByteValue = alphaValue.byteValue();
+                        }
+                    } else {
+                        alphaByteValue = alphaValue.byteValue();
+                    }
+                }
+
+                if (alphaByteValue!=0 && transparency != null) {
+                    // Apply defined transparency ranges
+
+                    int newAlpha =
+                        transparency.getTransparencyRangeAlpha(redByteValue,
+                            greenByteValue, blueByteValue);
+                    alphaByteValue = getNewAlpha(alphaByteValue & 0xFF, newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    alphaByteValue = getNewAlpha(alphaByteValue & 0xFF, transparencyValue);
+                }
+
+                //FIXME: TO REMOVE??
+//                if (filters != null) {
+//                    // TODO Apply filters
+//                }
+
+                int intRGB = 0;
+                if (colorInterpretation.hasAnyRGBBand()) {//colorInterpretation.isRGB() || colorInterpretation.isRGBA()) {
+                    intRGB = (((byte)alphaByteValue & 0xFF) << 24) | // alpha
+                        (((byte)redByteValue & 0xFF) << 16) | // red
+                        (((byte)greenByteValue & 0xFF) << 8) | // green
+                        (((byte)blueByteValue & 0xFF)); // blue String.format("%X", b)
+//                    intRGB = ((alphaByteValue & 0xFF) << 24) | // alpha
+//                        ((redByteValue & 0xFF) << 16) | // red
+//                        ((greenByteValue & 0xFF) << 8) | // green
+//                        ((blueByteValue & 0xFF) << 0); // blue String.format("%X", b)
+                } else if (colorInterpretation.isBGR()) {
+                    intRGB = (((byte)blueByteValue & 0xFF) << 16 | // blue
+                        (((byte)greenByteValue & 0xFF) << 8) | // green
+                        (((byte)redByteValue & 0xFF))); // red
+
+                }
+                image.setRGB(j, i, intRGB);
+            }
+        }
+        return image;
+    }
+
+    private Image drawHSLBuffer(Graphics graphics, Buffer buffer,
+        ColorInterpretation colorInterpretation,Transparency transparency,
+        OperationList filters) throws BufferOperationException {
+
+        Buffer byteBuffer = convertToByteBuffer(buffer);
+
+        BufferedImage image = null;
+
+        image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(buffer.getColumns(), buffer.getRows(),
+            BufferedImage.TYPE_INT_ARGB);
+
+        int hueBandIndex = colorInterpretation.getBand(ColorInterpretation.HUE_BAND);
+        int saturationBandIndex = colorInterpretation.getBand(ColorInterpretation.SATURATION_BAND);
+        int lightBandIndex = colorInterpretation.getBand(ColorInterpretation.LIGHTNESS_BAND);
+
+
+        Band hueBand = byteBuffer.getBand(hueBandIndex);
+        Band saturationBand = byteBuffer.getBand(saturationBandIndex);
+        Band lightBand = byteBuffer.getBand(lightBandIndex);
+
+
+        for (int i = 0; i < buffer.getRows(); i++) {
+            for (int j = 0; j < buffer.getColumns(); j++) {
+                Number hueValue = (Number) hueBand.get(i, j);
+                Number saturationValue = (Number) saturationBand.get(i, j);
+                Number lightValue = (Number) lightBand.get(i, j);
+
+                Number[] rgbaValues=ColorUtils.fromHSLtoRGBA(hueValue.floatValue(), saturationValue.floatValue(), lightValue.floatValue());
+
+                Integer alphaValue =rgbaValues[3].intValue();
+                if (transparency != null) {
+                    // Apply defined transparency ranges
+
+                    alphaValue = alphaValue.byteValue() & 0xFF;
+                    int newAlpha =
+                        transparency.getTransparencyRangeAlpha(rgbaValues[0].byteValue(),
+                            rgbaValues[1].byteValue(), rgbaValues[2].byteValue());
+                    alphaValue = getNewAlpha(alphaValue.intValue(), newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    alphaValue = getNewAlpha(alphaValue.intValue(), transparencyValue);
+                }
+
+                if (filters != null) {
+                    // TODO Apply filters
+                }
+
+                int intRGB = 0;
+                intRGB = ((alphaValue.byteValue() & 0xFF) << 24) | // alpha
+                    ((rgbaValues[0].byteValue() & 0xFF) << 16) | // red
+                    ((rgbaValues[1].byteValue() & 0xFF) << 8) | // green
+                    ((rgbaValues[2].byteValue() & 0xFF) << 0); // blue
+                image.setRGB(j, i, intRGB);
+            }
+        }
+        return image;
+    }
+
+    private Image drawCMYKBuffer(Graphics graphics, Buffer buffer,
+        ColorInterpretation colorInterpretation,Transparency transparency,
+        OperationList filters) throws BufferOperationException {
+
+        Buffer byteBuffer = convertToByteBuffer(buffer);
+
+        BufferedImage image = null;
+
+        image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(buffer.getColumns(), buffer.getRows(),
+            BufferedImage.TYPE_INT_ARGB);
+
+        int cyanBandIndex = colorInterpretation.getBand(ColorInterpretation.CYAN_BAND);
+        int magentaBandIndex = colorInterpretation.getBand(ColorInterpretation.MAGENTA_BAND);
+        int yellowBandIndex = colorInterpretation.getBand(ColorInterpretation.YELLOW_BAND);
+        int blackBandIndex = colorInterpretation.getBand(ColorInterpretation.BLACK_BAND);
+
+
+        Band cyanBand = byteBuffer.getBand(cyanBandIndex);
+        Band magentaBand = byteBuffer.getBand(magentaBandIndex);
+        Band yellowBand = byteBuffer.getBand(yellowBandIndex);
+        Band blackBand = byteBuffer.getBand(blackBandIndex);
+
+        for (int i = 0; i < buffer.getRows(); i++) {
+            for (int j = 0; j < buffer.getColumns(); j++) {
+                Number cyanValue = (Number) cyanBand.get(i, j);
+                Number magentaValue = (Number) magentaBand.get(i, j);
+                Number yellowValue = (Number) yellowBand.get(i, j);
+                Number blackValue = (Number) blackBand.get(i, j);
+
+
+
+                Number[] rgbValues=ColorUtils.fromCMYKtoRGB(
+                    cyanValue.floatValue(),
+                    magentaValue.floatValue(),
+                    yellowValue.floatValue(),
+                    blackValue.floatValue()
+                    );
+
+                Integer alphaValue =255;
+                if (transparency != null) {
+                    // Apply defined transparency ranges
+
+                    alphaValue = alphaValue.byteValue() & 0xFF;
+                    int newAlpha =
+                        transparency.getTransparencyRangeAlpha(rgbValues[0].byteValue(),
+                            rgbValues[1].byteValue(), rgbValues[2].byteValue());
+                    alphaValue = getNewAlpha(alphaValue.intValue(), newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    alphaValue = getNewAlpha(alphaValue.intValue(), transparencyValue);
+                }
+
+                if (filters != null) {
+                    // TODO Apply filters
+                }
+
+                int intRGB = 0;
+                intRGB = ((alphaValue.byteValue() & 0xFF) << 24) | // alpha
+                    ((rgbValues[0].byteValue() & 0xFF) << 16) | // red
+                    ((rgbValues[1].byteValue() & 0xFF) << 8) | // green
+                    ((rgbValues[2].byteValue() & 0xFF) << 0); // blue
+                image.setRGB(j, i, intRGB);
+            }
+        }
+        return image;
+    }
+
+    private Image drawYCBCRBuffer(Graphics graphics, Buffer buffer,
+        ColorInterpretation colorInterpretation,Transparency transparency,
+        OperationList filters) throws BufferOperationException {
+
+        Buffer byteBuffer = convertToByteBuffer(buffer);
+
+        BufferedImage image = null;
+
+        image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(buffer.getColumns(), buffer.getRows(),
+            BufferedImage.TYPE_INT_ARGB);
+
+        int yIndex = colorInterpretation.getBand(ColorInterpretation.YCBCR_Y_BAND);
+        int cbBandIndex = colorInterpretation.getBand(ColorInterpretation.YCBCR_CB_BAND);
+        int crBandIndex = colorInterpretation.getBand(ColorInterpretation.YCBCR_CR_BAND);
+
+
+        Band yBand = byteBuffer.getBand(yIndex);
+        Band cbBand = byteBuffer.getBand(cbBandIndex);
+        Band crBand = byteBuffer.getBand(crBandIndex);
+
+        for (int i = 0; i < buffer.getRows(); i++) {
+            for (int j = 0; j < buffer.getColumns(); j++) {
+                Number yValue = (Number) yBand.get(i, j);
+                Number cbValue = (Number) cbBand.get(i, j);
+                Number crValue = (Number) crBand.get(i, j);
+
+                Number[] rgbValues=ColorUtils.fromYCBCRtoRGB(
+                    yValue.floatValue(),
+                    cbValue.floatValue(),
+                    crValue.floatValue()
+                    );
+
+                Integer alphaValue =255;
+                if (transparency != null) {
+                    // Apply defined transparency ranges
+
+                    alphaValue = alphaValue.byteValue() & 0xFF;
+                    int newAlpha =
+                        transparency.getTransparencyRangeAlpha(rgbValues[0].byteValue(),
+                            rgbValues[1].byteValue(), rgbValues[2].byteValue());
+                    alphaValue = getNewAlpha(alphaValue.intValue(), newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    alphaValue = getNewAlpha(alphaValue.intValue(), transparencyValue);
+                }
+
+                if (filters != null) {
+                    // TODO Apply filters
+                }
+
+                int intRGB = 0;
+                intRGB = ((alphaValue.byteValue() & 0xFF) << 24) | // alpha
+                    ((rgbValues[0].byteValue() & 0xFF) << 16) | // red
+                    ((rgbValues[1].byteValue() & 0xFF) << 8) | // green
+                    ((rgbValues[2].byteValue() & 0xFF) << 0); // blue
+                image.setRGB(j, i, intRGB);
+            }
+        }
+        return image;
+    }
+
+    /**
+     * Method to draw gray buffers
+     * @param graphics
+     * @param byteBuffer
+     * @param filters
+     * @return
+     * @throws OperationException
+     */
+    private Image drawGrayBuffer(Graphics graphics, Buffer buffer, ColorInterpretation colorInterpretation, Transparency transparency, OperationList filters) throws BufferOperationException {
+
+        BufferedImage image = null;
+        Buffer byteBuffer = convertToByteBuffer(buffer);
+
+        image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(byteBuffer.getColumns(), byteBuffer.getRows(),
+            BufferedImage.TYPE_INT_ARGB);
+
+        Band grayBand = byteBuffer.getBand(colorInterpretation.getBand(ColorInterpretation.GRAY_BAND));
+
+        for (int i = 0; i < byteBuffer.getRows(); i++) {
+            for (int j = 0; j < byteBuffer.getColumns(); j++) {
+                int grayByteValue = 0;
+                int alphaByteValue = (byte)255;
+                Number grayValue = (Number) grayBand.get(i, j);
+                NoData noData = grayBand.getNoData();
+                if(noData != null){
+                    if(grayValue.equals(noData.getValue())){
+                        alphaByteValue = 0;
+                        grayByteValue = 0;
+                    } else {
+                        alphaByteValue = 255;
+                        grayByteValue = grayValue.byteValue();
+                    }
+                } else {
+                    grayByteValue = grayValue.byteValue();
+                }
+
+                if (alphaByteValue != 0 && transparency != null) {
+                    // Apply defined transparency ranges
+
+//                    alphaByteValue = alphaValue.byteValue() & 0xFF;
+                    int newAlpha = transparency.getTransparencyRangeAlpha(grayByteValue, grayByteValue, grayByteValue);
+                    alphaByteValue = getNewAlpha(alphaByteValue, newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    alphaByteValue = getNewAlpha(alphaByteValue, transparencyValue);
+                }
+
+                if (filters != null) {
+                    // TODO Apply filters
+                }
+
+                int intARGB = (((byte)alphaByteValue & 0xFF) << 24) | // alpha
+                    (((byte)grayByteValue & 0xFF)<< 16) | // red
+                    (((byte)grayByteValue & 0xFF)<< 8) | // green
+                    (((byte)grayByteValue & 0xFF)); // blue
+
+                image.setRGB(j, i, intARGB);
+            }
+        }
+        return image;
+    }
+
+    private Buffer convertToByteBuffer(Buffer buffer) throws BufferOperationException {
+        int[] types = buffer.getBandTypes();
+        boolean mustConvert = false;
+        List<Integer> bandsToProcess = new ArrayList<Integer>();
+        for (int i = 0; i < types.length; i++) {
+            if(types[i]!=BufferManager.TYPE_BYTE){
+                bandsToProcess.add(i);
+                mustConvert = true;
+//                break;
+            }
+        }
+        if(mustConvert){
+            OperationManager operationManager = BufferLocator.getOperationManager();
+            DynObject parameters = operationManager.createOperationParameters(SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME);
+            parameters.setDynValue(AbstractSpecifiedBandsOperation.BANDS_TO_PROCESS_PARAM, bandsToProcess);
+            return operationManager.execute(null, SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME, buffer, parameters);
+        }
+        return buffer;
+    }
+
+    private Image drawPaletteBuffer(Graphics graphics, Buffer buffer, ColorInterpretation colorInterpretation,
+        Transparency transparency, OperationList filters) {
+
+        BufferedImage image = ToolsSwingLocator.getToolsSwingManager().createBufferedImage(buffer.getColumns(), buffer.getRows(),
+            BufferedImage.TYPE_INT_ARGB);
+
+        for (int i = 0; i < buffer.getRows(); i++) {
+            for (int j = 0; j < buffer.getColumns(); j++) {
+
+                Object value = buffer.getBand(colorInterpretation.getPaletteBand()).get(i, j);
+                byte[] rgba = colorInterpretation.getPalette().getRGBA(value);
+
+                if (transparency != null) {
+                    // Apply defined transparency ranges
+                    int alpha = rgba[3] & 0xFF;
+                    int newAlpha =
+                        transparency.getTransparencyRangeAlpha(rgba[0], rgba[1], rgba[2]);
+                    alpha = getNewAlpha(alpha, newAlpha);
+
+                    // Apply general transparency
+                    int transparencyValue = transparency.getAlpha();
+                    rgba[3] = (byte) getNewAlpha(alpha, transparencyValue);
+                }
+
+                if (filters != null) {
+                    // TODO Apply filters
+                }
+
+                int intARGB = ((rgba[3] & 0xFF) << 24) | // alpha
+                    ((rgba[0] & 0xFF) << 16) | // red
+                    ((rgba[1] & 0xFF) << 8) | // green
+                    ((rgba[2] & 0xFF) << 0); // blue
+
+                image.setRGB(j, i, intARGB);
+            }
+        }
+        return image;
+    }
+
+    private int getNewAlpha(int alpha, int newAlpha) {
+        return (int) Math.round(alpha * (newAlpha / 255d));
+    }
+
+    @Override
+    public ColorInterpretation getColorInterpretation() {
+        return this.colorInterpretation;
+    }
+
+    @Override
+    public void setColorInterpretation(ColorInterpretation colorInterpretation) {
+        if (this.colorInterpretation != null) {
+            this.colorInterpretation.deleteObserver(this);
+        }
+        this.colorInterpretation = colorInterpretation;
+        this.colorInterpretation.addObserver(this);
+    }
+
+    @Override
+    public OperationList getFilters() {
+        if(this.filters == null){
+            BufferManager bufferManager = BufferLocator.getBufferManager();
+            this.filters = ((OperationManager)bufferManager).createOperationList();
+        }
+        return this.filters;
+    }
+
+    @Override
+    public void setFilters(OperationList filterList) {
+        OperationList oldFilters = this.filters;
+        this.filters = filterList;
+        fireColorinterpretationChangedEvent(new ChangeOperationListEvent(oldFilters, this.filters));
+    }
+
+    /**
+     *
+     */
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+        if (definition == null) {
+            definition =
+                manager.addDefinition(DefaultRasterLegend.class, PERSISTENT_NAME,
+                    PERSISTENT_DESCRIPTION, null, null);
+            definition.addDynFieldObject(COLOR_INTERPRETATION_PERSISTENCE_FIELD).setMandatory(false)
+                .setClassOfValue(ColorInterpretation.class);
+            definition.addDynFieldObject(FILTERS_PERSISTENCE_FIELD).setMandatory(false)
+                .setClassOfValue(OperationList.class);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(COLOR_INTERPRETATION_PERSISTENCE_FIELD, this.getColorInterpretation());
+        state.set(FILTERS_PERSISTENCE_FIELD, (Persistent)this.getFilters());
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.setColorInterpretation((ColorInterpretation) state
+            .get(COLOR_INTERPRETATION_PERSISTENCE_FIELD));
+        this.setFilters((OperationList) state.get(FILTERS_PERSISTENCE_FIELD));
+    }
+
+    @Override
+    public void setTransparency(Transparency transparency) {
+        this.transparency = transparency;
+    }
+
+    @Override
+    public Transparency getTransparency() {
+        return this.transparency;
+    }
+
+    @Override
+    public ISymbol getDefaultSymbol() {
+        return null;
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        DefaultRasterLegend cloned = (DefaultRasterLegend) super.clone();
+
+        ColorInterpretation clonedColorInterpretation = (ColorInterpretation)this.getColorInterpretation().clone();
+        cloned.setColorInterpretation(clonedColorInterpretation);
+        //FIXME:
+//        cloned.setTransparency((Transparency)this.getTransparency().clone());
+//        cloned.setFilters(getFilters());
+
+        cloned.setFilters((OperationList)getFilters().clone());
+
+        return cloned;
+    }
+
+    @Override
+    public ILegend cloneLegend() {
+        try {
+            return (RasterLegend)this.clone();
+        } catch (Exception e) {
+            throw new RuntimeException("Can't clone the legend", e);
+        }
+    }
+
+
+    @Override
+    public void fireDefaultSymbolChangedEvent(SymbolLegendEvent event) {
+
+        for (int i = 0; i < listeners.size(); i++) {
+            ((LegendContentsChangedListener) listeners.get(i))
+                    .symbolChanged(event);
+        }
+    }
+
+    @Override
+    public LegendContentsChangedListener[] getListeners() {
+        return (LegendContentsChangedListener[]) listeners
+                .toArray(new LegendContentsChangedListener[listeners.size()]);
+    }
+
+
+
+    @Override
+    public void setTransparentNoData(boolean noDataTransparent) {
+        this.transparentNoData=noDataTransparent;
+
+    }
+
+    @Override
+    public boolean areTransparentNoData() {
+        return this.transparentNoData;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void update(Observable observable, Object notification) {
+        if (notification instanceof ColorInterpretationNotification) {
+            String type = ((ColorInterpretationNotification) notification).getType();
+            if(type.equals(ColorInterpretationNotification.CHANGED_COLOR_INTERPRETATION_VALUE)
+               || type.equals(ColorInterpretationNotification.ADDED_COLOR_INTERPRETATION)
+               || type.equals(ColorInterpretationNotification.COPIED_FROM_COLOR_INTERPRETATION)){
+            fireColorinterpretationChangedEvent(new ChangeColorInterpretationEvent(
+                (String[])((ColorInterpretationNotification) notification).getValue(0),
+                (String[])((ColorInterpretationNotification) notification).getValue(1)));
+            }
+            if (type.equals(ColorInterpretationNotification.SETTED_PALETTE)) {
+                fireColorinterpretationChangedEvent(new ChangePaletteEvent(
+                    (ColorTable) ((ColorInterpretationNotification) notification).getValue(0),
+                    (ColorTable) ((ColorInterpretationNotification) notification).getValue(1)));
+            }
+            if (type.equals(ColorInterpretationNotification.CHANGED_PALETTE)) {
+                fireColorinterpretationChangedEvent(new ChangePaletteEvent(
+                    (ColorTable) ((ColorInterpretationNotification) notification).getValue(0),
+                    (ColorTable) ((ColorInterpretationNotification) notification).getValue(0)));
+            }
+
+            if (type.equals(ColorInterpretationNotification.SETTED_PALETTE_BAND)) {
+                fireColorinterpretationChangedEvent(new ChangePaletteBandEvent(
+                    (int) ((ColorInterpretationNotification) notification).getValue(0),
+                    (int) ((ColorInterpretationNotification) notification).getValue(1)));
+            }
+        }
+        if (notification instanceof OperationListNotification) {
+            fireOperationListChangedEvent(new ChangeOperationListEvent(
+                    (List<OperationListEntry>) ((OperationListNotification) notification).getValue(0),
+                    (List<OperationListEntry>) ((OperationListNotification) notification).getValue(1)));
+        }
+    }
+
+    /**
+     * @param event
+     */
+    public void fireColorinterpretationChangedEvent(RasterLegendEvent event) {
+
+        for (int i = 0; i < listeners.size(); i++) {
+            ((RasterLegendChangedListener) listeners.get(i)).colorInterpretationChanged(event);
+        }
+    }
+
+    /**
+     * @param event
+     */
+    public void fireOperationListChangedEvent(RasterLegendEvent event) {
+
+        for (int i = 0; i < listeners.size(); i++) {
+            ((RasterLegendChangedListener) listeners.get(i)).operationListChanged(event);
+        }
+    }
+
+    @Override
+    public void addLegendListener(LegendContentsChangedListener listener) {
+        if(listener instanceof RasterLegendChangedListener){
+            addLegendListener((RasterLegendChangedListener)listener);
+            return;
+        }
+        throw new UnsupportedOperationException("Raster layer can't be listened by a no RasterLegendChangedListener");
+
+    }
+
+    @Override
+    public void removeLegendListener(LegendContentsChangedListener listener) {
+        if(listener instanceof RasterLegendChangedListener){
+            removeLegendListener((RasterLegendChangedListener)listener);
+            return;
+        }
+        throw new UnsupportedOperationException("Raster layer can't be listened by a no RasterLegendChangedListener");
+
+    }
+
+    private void addLegendListener(RasterLegendChangedListener listener) {
+        if (listener != null && !listeners.contains(listener))
+            listeners.add(listener);
+    }
+
+    private void removeLegendListener(RasterLegendChangedListener listener) {
+        listeners.remove(listener);
+    }
+
+    @Override
+    public void addColorTableOperation(ColorInterpretation colorInterpretation, int index) {
+
+        OperationList theFilters = this.getFilters();
+        theFilters.removeIfExists(SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME);
+        theFilters.removeIfExists(ColoredOperation.COLOR_TABLE_OPERATION_NAME);
+
+        OperationManager operationManager = BufferLocator.getOperationManager();
+        Operation colorTableOperation = operationManager.createOperation(ColoredOperation.COLOR_TABLE_OPERATION_NAME);
+        DynObject colorTableOperationParameters = operationManager.createOperationParameters(ColoredOperation.COLOR_TABLE_OPERATION_NAME);
+        colorTableOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM, colorInterpretation);
+        colorTableOperationParameters.setDynValue(AbstractOperation.COPY_UNPROCESSED_BANDS_PARAM, true);
+        OperationListEntry colorTableEntry = operationManager.createOperationListEntry(colorTableOperation, colorTableOperationParameters);
+        theFilters.add(index, colorTableEntry);
+    }
+
+    @Override
+    public void addLinearStretchEnhancementOperationIfNeeded(
+        ColorInterpretation colorInterpretation,
+        List<BandDescriptor> bands, 
+        int index) {
+
+        OperationList theFilters = this.getFilters();
+        
+        theFilters.removeIfExists(SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME);
+        theFilters.removeIfExists(ColoredOperation.COLOR_TABLE_OPERATION_NAME);
+
+        if( (!colorInterpretation.isPalette()) &&
+            (colorInterpretation.hasAnyColorInterpretationBand() || 
+                colorInterpretation.hasAlphaBand() || 
+                colorInterpretation.hasAnyGrayBand())) {
+
+            List<Integer> bandsToProcess = new ArrayList<>();
+            for (int i = 0; i < bands.size(); i++) {
+                if ((colorInterpretation.isColorInterpretation(i) || 
+                    colorInterpretation.isAlphaInterpretation(i) || 
+                    colorInterpretation.isGrayInterpretation(i)) && 
+                    (bands.get(i).getDataType() != BufferManager.TYPE_BYTE)) {
+                    bandsToProcess.add(i);
+                }
+            }
+
+            if (!bandsToProcess.isEmpty()) {
+                OperationManager operationManager = BufferLocator.getOperationManager();
+                Operation linearStretchEnhancementOperation = operationManager.createOperation(SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME);
+                DynObject linearStretchEnhancementOperationParameters =
+                    operationManager.createOperationParameters(SpecifiedBandsOperation.LINEAR_STRETCH_ENHANCEMENT_NAME);
+                linearStretchEnhancementOperationParameters.setDynValue(
+                    AbstractSpecifiedBandsOperation.BANDS_TO_PROCESS_PARAM, bandsToProcess);
+                OperationListEntry colorTableEntry =
+                    ((OperationManager) operationManager).createOperationListEntry(linearStretchEnhancementOperation,
+                        linearStretchEnhancementOperationParameters);
+                theFilters.add(index, colorTableEntry);
+            }
+        }
+    }
+
+    @Override
+    public void addHSLToRGBOperation(ColorInterpretation colorInterpretation) {
+
+        OperationManager operationManager = BufferLocator.getOperationManager();
+        DynObject hSLToRGBOperationParameters =
+            operationManager.createOperationParameters(HSLToRGBOperationFactory.NAME);
+        hSLToRGBOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM, colorInterpretation);
+        Operation hSLToRGBOperation = operationManager.createOperation(HSLToRGBOperationFactory.NAME);
+
+        OperationListEntry hSLToRGBOperationEntry =
+            operationManager.createOperationListEntry(hSLToRGBOperation, hSLToRGBOperationParameters);
+        getFilters().add(hSLToRGBOperationEntry);
+    }
+
+    @Override
+    public void addCMYKToRGBOperation(ColorInterpretation colorInterpretation) {
+
+        OperationManager operationManager = BufferLocator.getOperationManager();
+        DynObject cmykToRGBOperationParameters =
+            operationManager.createOperationParameters(CMYKToRGBOperationFactory.NAME);
+        cmykToRGBOperationParameters.setDynValue(ColoredOperation.COLOR_INTERPRETATION_PARAM, colorInterpretation);
+        Operation cmykToRGBOperation = operationManager.createOperation(HSLToRGBOperationFactory.NAME);
+
+        OperationListEntry cmykToRGBOperationEntry =
+            operationManager.createOperationListEntry(cmykToRGBOperation, cmykToRGBOperationParameters);
+        getFilters().add(cmykToRGBOperationEntry);
+    }
+
+    @Override
+    public void addYCBCRToRGBOperation(ColorInterpretation colorInterpretation){
+        //TODO: Not implemented yet, meanwhile do nothing
+    };
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colorinterpretation/DefaultColorInterpretationNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colorinterpretation/DefaultColorInterpretationNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colorinterpretation/DefaultColorInterpretationNotification.java	(revision 46118)
@@ -0,0 +1,51 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.colorinterpretation;
+
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretationNotification;
+import org.gvsig.tools.observer.BaseNotification;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultColorInterpretationNotification extends BaseNotification implements ColorInterpretationNotification {
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorInterpretationNotification(String type, int values) {
+        super(type, values);
+    }
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorInterpretationNotification(String type, Object[] values) {
+        super(type, values);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultMakeColorTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultMakeColorTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultMakeColorTable.java	(revision 46118)
@@ -0,0 +1,141 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.colortable;
+
+import java.awt.Color;
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.MakeColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultMakeColorTable implements MakeColorTable {
+
+    private String name;
+    private double minimum;
+    private double maximum;
+    private int mode;
+    private double intervalSize;
+    private int intervals;
+    private Color fromColor;
+    private Color toColor;
+    private boolean interpolated;
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setName(java.lang.String)
+     */
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setMinimum(double)
+     */
+    @Override
+    public void setMinimum(double minimum) {
+        this.minimum = minimum;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setMaximum(double)
+     */
+    @Override
+    public void setMaximum(double maximum) {
+        this.maximum = maximum;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setMode(int)
+     */
+    @Override
+    public void setMode(int mode) {
+        this.mode = mode;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setIntervalSize(double)
+     */
+    @Override
+    public void setIntervalSize(double intervalSize) {
+        this.intervalSize = intervalSize;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setIntervals(int)
+     */
+    @Override
+    public void setIntervals(int intervals) {
+        this.intervals = intervals;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setFromColor(java.awt.Color)
+     */
+    @Override
+    public void setFromColor(Color fromColor) {
+        this.fromColor = fromColor;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#setToColor(java.awt.Color)
+     */
+    @Override
+    public void setToColor(Color toColor) {
+        this.toColor = toColor;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.tools.lib.api.colortable.CreateColorTable#getColorTable()
+     */
+    @Override
+    public ColorTable getColorTable() {
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+        List<ColorTableClass> listColorTableClasses = null;
+        switch (mode) {
+        case MakeColorTable.MODE_INTERVAL_SIZE:
+            listColorTableClasses = legendManager.createListColorTableClasses(minimum, maximum, intervalSize, fromColor, toColor);
+            break;
+        case MakeColorTable.MODE_NUMBER_OF_INTERVALS:
+            listColorTableClasses = legendManager.createListColorTableClasses(minimum, maximum, intervals, fromColor, toColor);
+            break;
+        }
+
+        ColorTable colorTable = legendManager.createColorTable(name, listColorTableClasses, interpolated);
+
+        return colorTable;
+    }
+
+    @Override
+    public void setInterpolated(boolean interpolated) {
+        this.interpolated = interpolated;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/colortableclass/DefaultColorTableClassNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/colortableclass/DefaultColorTableClassNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/colortableclass/DefaultColorTableClassNotification.java	(revision 46118)
@@ -0,0 +1,53 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.colortable.colortableclass;
+
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClassNotification;
+import org.gvsig.tools.observer.BaseNotification;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultColorTableClassNotification extends BaseNotification implements ColorTableClassNotification {
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorTableClassNotification(String type, int values) {
+        super(type, values);
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorTableClassNotification(String type, Object[] values) {
+        super(type, values);
+        // TODO Auto-generated constructor stub
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultColorTableNotification.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultColorTableNotification.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/colortable/DefaultColorTableNotification.java	(revision 46118)
@@ -0,0 +1,53 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.lib.legend.impl.colortable;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableNotification;
+import org.gvsig.tools.observer.BaseNotification;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class DefaultColorTableNotification extends BaseNotification implements ColorTableNotification {
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorTableNotification(String type, int values) {
+        super(type, values);
+        // TODO Auto-generated constructor stub
+    }
+
+    /**
+     * @param type
+     * @param values
+     */
+    public DefaultColorTableNotification(String type, Object[] values) {
+        super(type, values);
+        // TODO Auto-generated constructor stub
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIO.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIO.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIO.java	(revision 46118)
@@ -0,0 +1,270 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.awt.Color;
+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.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.api.exceptions.ColorTableIOException;
+
+import org.kxml2.io.KXmlParser;
+import org.kxml2.io.KXmlSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * {@link ColorTableIO} to read and write gvSIG color tables.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class gvSIGColorTableIO implements ColorTableIO {
+
+    private static final Logger LOG = LoggerFactory.getLogger(gvSIGColorTableIO.class);
+
+    public static final String NAME = "gvSIGColorTableIO";
+
+    public static final String DESCRIPTION = "Color table IO to read and write gvSIG color tables";
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    @Override
+    public ColorTable read(File file) throws ColorTableIOException {
+
+        if (file.isDirectory()) {
+            throw new IllegalArgumentException("File can not be a directory.");
+        }
+
+        if (!file.exists() || !file.canRead()) {
+            throw new IllegalArgumentException("File does not exist or can be readed");
+        }
+
+        RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager();
+        ColorTable colorTable = rasterLegendManager.createColorTable();
+        List<ColorTableClass> classes = new ArrayList<ColorTableClass>();
+
+        KXmlParser parser = new KXmlParser();
+        FileInputStream in = null;
+        InputStreamReader reader = null;
+        int tag = 0;
+
+        try {
+            in = new FileInputStream(file);
+            reader = new InputStreamReader(in, "UTF8");
+            parser.setInput(reader);
+            tag = parser.nextTag();
+            parser.require(KXmlParser.START_TAG, null, "ColorTable");
+        } catch (FileNotFoundException e) {
+            LOG.error(String.format("Can not find %1s file", file.getAbsolutePath()), e);
+            throw new ColorTableIOException(e);
+        } catch (XmlPullParserException e) {
+            LOG.error("Can not parse XML", e);
+            throw new ColorTableIOException(e);
+        } catch (IOException e) {
+            LOG.error("Can not go to next XML tag or there are errors setting require tag", e);
+            throw new ColorTableIOException(e);
+        }
+
+        for (int i = 0; i < parser.getAttributeCount(); i++) {
+            if (parser.getAttributeName(i).equals("name")) {
+                colorTable.setName(parser.getAttributeValue(i));
+                continue;
+            } else if (parser.getAttributeName(i).equals("interpolated")) {
+                colorTable.setInterpolated(Boolean.parseBoolean(parser.getAttributeValue(i)));
+                continue;
+            }
+
+        }
+
+        try {
+            tag = parser.nextTag();
+        } catch (XmlPullParserException | IOException e) {
+            LOG.error("Can not go to next XML tag", e);
+            throw new ColorTableIOException(e);
+        }
+
+        while (!((tag == KXmlParser.END_TAG) && (parser.getName().equals("ColorTable")))) {
+            try {
+                if (tag == KXmlParser.START_TAG) {
+                    if (parser.getName().equals("Color")) {
+                        ColorTableClass colorTableClass =
+                            rasterLegendManager.createColorTableClass();
+                        int a = 255;
+                        for (int i = 0; i < parser.getAttributeCount(); i++) {
+                            if (parser.getAttributeName(i).equals("value")) {
+                                colorTableClass.setValue(Double.parseDouble((String) parser
+                                    .getAttributeValue(i)));
+                                ColorTableClass aux =
+                                    getColorItem(classes,
+                                        Double.parseDouble((String) parser.getAttributeValue(i)));
+                                if (aux != null)
+                                    a = aux.getColor().getAlpha();
+                            }
+                            if (parser.getAttributeName(i).equals("name")) {
+                                colorTableClass.setName((String) parser.getAttributeValue(i));
+                            }
+                            if (parser.getAttributeName(i).equals("rgb")) {
+                                String rgb = parser.getAttributeValue(i);
+                                int r =
+                                    Integer.valueOf(rgb.substring(0, rgb.indexOf(","))).intValue();
+                                int g =
+                                    Integer.valueOf(
+                                        rgb.substring(rgb.indexOf(",") + 1, rgb.lastIndexOf(",")))
+                                        .intValue();
+                                int b =
+                                    Integer.valueOf(
+                                        rgb.substring(rgb.lastIndexOf(",") + 1, rgb.length()))
+                                        .intValue();
+
+                                colorTableClass.setColor(new Color(r, g, b, a));
+                            }
+                            if (parser.getAttributeName(i).equals("interpolated")) {
+                                colorTableClass.setInterpolated(Double.parseDouble((String) parser
+                                    .getAttributeValue(i)));
+                            }
+                        }
+
+                        classes.add(colorTableClass);
+                        continue;
+                    }
+                    if (parser.getName().equals("Alpha")) {
+                        ColorTableClass colorItem = null;
+                        for (int i = 0; i < parser.getAttributeCount(); i++) {
+                            if (parser.getAttributeName(i).equals("value")) {
+                                colorItem =
+                                    getColorItem(classes,
+                                        Double.parseDouble((String) parser.getAttributeValue(i)));
+                            }
+                            if (parser.getAttributeName(i).equals("alpha") && colorItem != null) {
+                                int a = Integer.parseInt(parser.getAttributeValue(i));
+
+                                colorItem.setColor(new Color(colorItem.getColor().getRed(),
+                                    colorItem.getColor().getGreen(),
+                                    colorItem.getColor().getBlue(), a));
+                            }
+                            if (parser.getAttributeName(i).equals("interpolated") && colorItem != null) {
+                                colorItem.setInterpolated(Double.parseDouble((String) parser
+                                    .getAttributeValue(i)));
+                            }
+                        }
+
+                        classes.add(colorItem);
+                        continue;
+                    }
+                }
+            } finally {
+                try {
+                    tag = parser.nextTag();
+                } catch (XmlPullParserException | IOException e) {
+                    LOG.error("Can not go to next XML tag", e);
+                    throw new ColorTableIOException(e);
+                }
+            }
+        }
+        try {
+            reader.close();
+        } catch (IOException e) {
+            // Just notice but not throw an exception
+            LOG.warn("Can not close input stream", e);
+        }
+
+        colorTable.setClasses(classes, false);
+        return colorTable;
+    }
+
+    private ColorTableClass getColorItem(List<ColorTableClass> classes, double value) {
+        for (int i = 0; i < classes.size(); i++) {
+            if (classes.get(i).getValue() == value) {
+                return classes.remove(i);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void read(ColorTable colorTable, File file) throws ColorTableIOException {
+        ColorTable tmpColorTable = this.read(file);
+        colorTable.copyFrom(tmpColorTable);
+    }
+
+    @Override
+    public void write(ColorTable colorTable, File file) throws ColorTableIOException {
+        try {
+            KXmlSerializer parserOutput = new KXmlSerializer();
+            FileOutputStream out = new FileOutputStream(file);
+            OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8");
+            parserOutput.setOutput(writer);
+            parserOutput.startDocument("UTF-8", null);
+            parserOutput.startTag(null, "ColorTable");
+            parserOutput.attribute(null, "name", colorTable.getName());
+            parserOutput.attribute(null, "interpolated", String.valueOf(colorTable.isInterpolated()));
+            parserOutput.attribute(null, "version", "1.1");
+            parserOutput.text("\n");
+
+            List<ColorTableClass> classes = colorTable.getClasses();
+            for (int i = 0; i < classes.size(); i++) {
+                ColorTableClass colorItem = classes.get(i);
+                parserOutput.startTag(null, "Color");
+                parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
+                if (colorItem.getName() != null)
+                    parserOutput.attribute(null, "name", String.valueOf(colorItem.getName()));
+                else
+                    parserOutput.attribute(null, "name", "");
+                Color color = colorItem.getColor();
+                parserOutput
+                    .attribute(
+                        null,
+                        "rgb",
+                        String.valueOf(color.getRed() + "," + color.getGreen() + ","
+                            + color.getBlue()));
+                parserOutput.attribute(null, "interpolated",
+                    String.valueOf(colorItem.getInterpolated()));
+                parserOutput.endTag(null, "Color");
+                parserOutput.text("\n");
+            }
+
+            for (int i = 0; i < classes.size(); i++) {
+                ColorTableClass colorItem = classes.get(i);
+                parserOutput.startTag(null, "Alpha");
+                parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
+                parserOutput.attribute(null, "alpha",
+                    String.valueOf(colorItem.getColor().getAlpha()));
+                parserOutput.attribute(null, "interpolated",
+                    String.valueOf(colorItem.getInterpolated()));
+                parserOutput.endTag(null, "Alpha");
+                parserOutput.text("\n");
+            }
+
+            parserOutput.endTag(null, "ColorTable");
+            parserOutput.text("\n");
+            parserOutput.endDocument();
+            writer.close();
+        } catch (FileNotFoundException e) {
+            LOG.error(String.format("Can not find %1s file", file.getAbsolutePath()), e);
+            throw new ColorTableIOException(e);
+        } catch (IOException e) {
+            LOG.error("Error writting Color table to XML file", e);
+            throw new ColorTableIOException(e);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIOFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIOFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIOFactory.java	(revision 46118)
@@ -0,0 +1,56 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.io.File;
+
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+
+/**
+ * Factory to create {@link GimpGradientColorTableIO}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class GimpGradientColorTableIOFactory implements ColorTableIOFactory {
+
+    public static final String DESCRIPTION = "Gimp Gradient";
+    public static final String DEFAULT_EXTENSION = "ggr";
+
+    @Override
+    public String getName() {
+        return GimpGradientColorTableIO.NAME;
+    }
+
+    @Override
+    public ColorTableIO create() {
+        return new GimpGradientColorTableIO();
+    }
+
+    @Override
+    public boolean accept(File file) {
+
+        if (file.isDirectory()) {
+            return false;
+        }
+
+        String extension = FilenameUtils.getExtension(file.getAbsolutePath());
+        if (extension.equalsIgnoreCase(DEFAULT_EXTENSION)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public String getDefaultExtension() {
+        return DEFAULT_EXTENSION;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIOFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIOFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIOFactory.java	(revision 46118)
@@ -0,0 +1,57 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.io.File;
+
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+
+
+/**
+ * Factory to create instances of {@link GimpPaletteColorTableIO}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class GimpPaletteColorTableIOFactory implements ColorTableIOFactory {
+
+    private static final String DEFAULT_EXTENSION = "gpl";
+    private static final String DESCRIPTION = "Gimp Palette";
+
+    @Override
+    public String getName() {
+        return GimpPaletteColorTableIO.NAME;
+    }
+
+    @Override
+    public ColorTableIO create() {
+        return new GimpPaletteColorTableIO();
+    }
+
+    @Override
+    public boolean accept(File file) {
+
+        if (file.isDirectory()) {
+            return false;
+        }
+
+        String extension = FilenameUtils.getExtension(file.getAbsolutePath());
+        if (extension.equalsIgnoreCase("gpl")) {
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public String getDefaultExtension() {
+        return DEFAULT_EXTENSION;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIOFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIOFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/gvSIGColorTableIOFactory.java	(revision 46118)
@@ -0,0 +1,54 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.io.File;
+
+import org.apache.commons.io.FilenameUtils;
+
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+
+/**
+ * Factory to create instances of {@link gvSIGColorTableIO}.
+ *
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class gvSIGColorTableIOFactory implements ColorTableIOFactory {
+
+    private static final String DEFAULT_EXTENSION = "xml";
+    private static final String DESCRIPTION = "gvSIG Color Table";
+
+    @Override
+    public String getName() {
+        return gvSIGColorTableIO.NAME;
+    }
+
+    @Override
+    public ColorTableIO create() {
+        return new gvSIGColorTableIO();
+    }
+
+    @Override
+    public boolean accept(File file) {
+
+        if (file.isDirectory()) {
+            return false;
+        }
+
+        String extension = FilenameUtils.getExtension(file.getAbsolutePath());
+        if (extension.equalsIgnoreCase("xml")) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public String getDefaultExtension() {
+        return DEFAULT_EXTENSION;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIO.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIO.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpGradientColorTableIO.java	(revision 46118)
@@ -0,0 +1,165 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.awt.Color;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.api.exceptions.ColorTableIOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * {@link ColorTableIO} to read Gimp gradients to {@link ColorTable} and write
+ * {@link ColorTable} to Gimp gradients.
+ * 
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class GimpGradientColorTableIO implements ColorTableIO {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GimpGradientColorTableIO.class);
+
+    public static final String NAME = "GimpGradientColorTableIO";
+
+    public static final String DESCRIPTION = "ColorTableIO to read and write Gimp gradients";
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    @Override
+    public ColorTable read(File file) throws ColorTableIOException {
+        List<ColorTableClass> colorTableClasses = new ArrayList<ColorTableClass>();
+        ColorTable colorTable = RasterLegendLocator.getRasterLegendManager().createColorTable();
+        try {
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String currentLine;
+            int cont = 0;
+            while ((currentLine = reader.readLine()) != null) {
+                if (cont == 1) {
+                    colorTable.setName(currentLine.substring(6));
+                } else if (cont > 1) {
+                    String[] strings = currentLine.split("\\s+");
+
+                    if (strings.length < 13) {
+                        continue;
+                    }
+
+                    colorTableClasses.add(parseColorItem(strings, 0));
+                    colorTableClasses.add(parseColorItem(strings, 1));
+                }
+                cont++;
+            }
+            reader.close();
+        } catch (IOException ex) {
+            LOG.error("Error reading file to create color table", ex);
+            throw new ColorTableIOException(ex);
+        }
+
+        colorTable.setClasses(colorTableClasses, true);
+        return colorTable;
+    }
+
+    @Override
+    public void read(ColorTable colorTable, File file) throws ColorTableIOException {
+        ColorTable tmpColorTable = this.read(file);
+        colorTable.copyFrom(tmpColorTable);
+    }
+
+    @Override
+    public void write(ColorTable colorTable, File file) throws ColorTableIOException {
+        List<ColorTableClass> colorTableClass = colorTable.getClasses();
+        try {
+            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+            writer.write("GIMP Gradient\n");
+            writer.write("Name: " + colorTable.getName() + "\n");
+            writer.write((colorTableClass.size() - 1) + "\n");
+            String line;
+
+            for (int i = 1; i < colorTableClass.size(); i++) {
+                double min = colorTableClass.get(0).getValue();
+                double max = colorTableClass.get(colorTableClass.size() - 1).getValue();
+
+                line = "";
+                ColorTableClass item1 = (ColorTableClass) colorTableClass.get(i - 1);
+                ColorTableClass item2 = (ColorTableClass) colorTableClass.get(i);
+
+                double pos1 = (item1.getValue() - min) / (max - min);
+                double pos2 = (item2.getValue() - min) / (max - min);
+
+                NumberFormat format = NumberFormat.getNumberInstance();
+                format.setMaximumFractionDigits(6);
+                format.setMinimumFractionDigits(6);
+                line += format.format(pos1).replaceAll(",", ".") + " ";
+                double interp = pos1 + (((pos2 - pos1) * item1.getInterpolated()) / 100.0);
+                line += format.format(interp).replaceAll(",", ".") + " ";
+                line += format.format(pos2).replaceAll(",", ".") + " ";
+
+                Color color = item1.getColor();
+                line += format.format(color.getRed() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getGreen() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getBlue() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getAlpha() / 255.0).replaceAll(",", ".") + " ";
+
+                color = item2.getColor();
+                line += format.format(color.getRed() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getGreen() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getBlue() / 255.0).replaceAll(",", ".") + " ";
+                line += format.format(color.getAlpha() / 255.0).replaceAll(",", ".") + " ";
+
+                line += "0 0\n";
+                writer.write(line);
+            }
+            writer.close();
+        } catch (IOException ex) {
+            LOG.error("Error writting file to create Gimp gradient", ex);
+            throw new ColorTableIOException(ex);
+        }
+    }
+
+    private ColorTableClass parseColorItem(String[] strings, int pos) {
+        ColorTableClass item = RasterLegendLocator.getRasterLegendManager().createColorTableClass();
+        
+        double pos1 = Double.valueOf(strings[0]).doubleValue();
+        double pos2 = Double.valueOf(strings[1]).doubleValue();
+        double pos3 = Double.valueOf(strings[2]).doubleValue();
+        if (pos == 0) {
+            item.setValue(pos1 * 255);
+        } else {
+            item.setValue(pos3 * 255);
+        }
+        if (pos == 0) {
+            item.setInterpolated((100 * (pos2 - pos1)) / (pos3 - pos1));
+        }
+        if (pos == 0) {
+            item.setColor(new Color((int) (Double.valueOf(strings[3]).doubleValue() * 255.0),
+                (int) (Double.valueOf(strings[4]).doubleValue() * 255.0), (int) (Double.valueOf(
+                    strings[5]).doubleValue() * 255.0), (int) (Double.valueOf(strings[6])
+                    .doubleValue() * 255.0)));
+        } else {
+            item.setColor(new Color((int) (Double.valueOf(strings[7]).doubleValue() * 255.0),
+                (int) (Double.valueOf(strings[8]).doubleValue() * 255.0), (int) (Double.valueOf(
+                    strings[9]).doubleValue() * 255.0), (int) (Double.valueOf(strings[10])
+                    .doubleValue() * 255.0)));
+        }
+        return item;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIO.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIO.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/io/GimpPaletteColorTableIO.java	(revision 46118)
@@ -0,0 +1,150 @@
+package org.gvsig.raster.lib.legend.impl.io;
+
+import java.awt.Color;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIO;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.api.exceptions.ColorTableIOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * {@link ColorTableIO} to read Gimp palettes to {@link ColorTable} and write
+ * {@link ColorTable} to Gimp palettes.
+ * 
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class GimpPaletteColorTableIO implements ColorTableIO {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GimpPaletteColorTableIO.class);
+
+    public static final String NAME = "GimpPaletteColorTableIO";
+
+    public static final String DESCRIPTION = "ColorTableIO to read and write Gimp palettes";
+
+    @Override
+    public String getName() {
+        return NAME;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    @Override
+    public ColorTable read(File file) throws ColorTableIOException {
+
+        if (file.isDirectory()) {
+            throw new IllegalArgumentException("File can not be a directory.");
+        }
+
+        if (!file.exists() || !file.canRead()) {
+            throw new IllegalArgumentException("File does not exist or can be readed");
+        }
+
+        List<ColorTableClass> colorItems = new ArrayList<ColorTableClass>();
+        ColorTable colorTable = RasterLegendLocator.getRasterLegendManager().createColorTable();
+        try {
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String currentLine;
+            int cont = 0;
+            while ((currentLine = reader.readLine()) != null) {
+                if (currentLine.charAt(0) == '#'){
+                    continue;
+                }
+                if (cont == 1) {
+                    colorTable.setName(currentLine.substring(6));
+                } else if (cont > 1) {
+                    String[] strings = (" " + currentLine).split("\\s+");
+
+                    ColorTableClass colorTableClass = null;
+                    if (strings.length >= 4) {
+                        colorTableClass = parseColorItem(strings);
+                    } else {
+                        continue;
+                    }
+
+                    strings = (" " + currentLine).split("\\s+\\d+\\s+\\d+\\s+\\d+\\s+");
+
+                    if (!strings[1].equals("Untitled")) {
+                        colorTableClass.setName(strings[1]);
+                    } else {
+                        colorTableClass.setName("");
+                    }
+
+                    colorTableClass.setValue(cont - 2);
+                    colorItems.add(colorTableClass);
+                }
+                cont++;
+            }
+            reader.close();
+        } catch (IOException ex) {
+            LOG.error("Can not read file to get gimp palette", ex);
+            throw new ColorTableIOException(ex);
+        }
+
+        colorTable.setClasses(colorItems, false);
+        return colorTable;
+    }
+
+    private ColorTableClass parseColorItem(String[] strings) {
+        ColorTableClass item = RasterLegendLocator.getRasterLegendManager().createColorTableClass();
+
+        item.setInterpolated(100);
+
+        item.setColor(new Color(Integer.valueOf(strings[1]).intValue(), Integer.valueOf(strings[2])
+            .intValue(), Integer.valueOf(strings[3]).intValue()));
+        return item;
+    }
+
+    @Override
+    public void read(ColorTable colorTable, File file) throws ColorTableIOException {
+        ColorTable tmpColorTable = this.read(file);
+        colorTable.copyFrom(tmpColorTable);
+    }
+
+    @Override
+    public void write(ColorTable colorTable, File file) throws ColorTableIOException {
+        List<ColorTableClass> colorTableClasses = colorTable.getClasses();
+
+        BufferedWriter writer;
+        try {
+            writer = new BufferedWriter(new FileWriter(file));
+            writer.write("GIMP Palette\n");
+            writer.write("Name: " + colorTable.getName() + "\n");
+            writer.write("#\n");
+
+            for (int i = 0; i < colorTableClasses.size(); i++) {
+                String line = "";
+                ColorTableClass item1 = colorTableClasses.get(i);
+                Color color = item1.getColor();
+                line += color.getRed() + " ";
+                line += color.getGreen() + " ";
+                line += color.getBlue() + "\t";
+                if ((item1.getName() != null) && (item1.getName().length() > 0)) {
+                    line += item1.getName() + "\n";
+                } else {
+                    line += "Untitled\n";
+                }
+                writer.write(line);
+            }
+            writer.close();
+        } catch (IOException e) {
+            LOG.error("Can not write to create new Gimp palette file from color table", e);
+            throw new ColorTableIOException(e);
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/ColorManager.java	(revision 46118)
@@ -0,0 +1,107 @@
+package org.gvsig.raster.lib.legend.impl;
+
+
+/**
+ * Coversi�n de de colores y valores de pixel aplicando distintos m�todos.
+ *
+ * 31/10/2007
+ * @author Nacho Brodin nachobrodin@gmail.com
+ */
+public interface ColorManager {
+
+    /**
+     * Conversi�n de RGB a HSL (Hue, Saturation, Lightness)
+     * @param rojo Banda del rojo del pixel de entrada
+     * @param verde Banda del verde del pixel de entrada
+     * @param azul Banda del azul del pixel de entrada
+     * @return array de 3 valores con los datos HSL correspondiente al pixel de entrada.
+     */
+    public double[] RGBtoHSL(int rojo, int verde, int azul);
+
+    /**
+     * Conversi�n de RGB a HSV (Hue, Saturation, Value). El valor de H es el mismo que en
+     * HSL pero difiere en el calculo de la S y la V.
+     * @param rojo Banda del rojo del pixel de entrada
+     * @param verde Banda del verde del pixel de entrada
+     * @param azul Banda del azul del pixel de entrada
+     * @return array de 3 valores con los datos HSL correspondiente al pixel de entrada.
+     */
+    public double[] RGBtoHSV(int rojo, int verde, int azul);
+
+    /**
+     * Conversi�n de HSL a RGB
+     * @param h Banda de matiz del pixel de entrada
+     * @param s Banda de saturaci�n del pixel de entrada
+     * @param l Banda de brillo del pixel de entrada
+     * @return array de 3 valores con los datos RGB correspondiente al pixel de entrada.
+     */
+    public int[] HSLtoRGB(int h, int s, int l);
+
+
+    /**
+     * Conversi�n de HSL a RGB
+     * @param h Banda de matiz del pixel de entrada. Valor entre 0 y 1.
+     * @param s Banda de saturaci�n del pixel de entrada. Valor entre 0 y 1.
+     * @param l Banda de brillo del pixel de entrada. Valor entre 0 y 1.
+     * @return array de 3 valores con los datos RGB correspondiente al pixel de entrada.
+     */
+    public int[] HSLtoRGB(double h, double s, double l);
+
+    /**
+     * Conversi�n de RGB a CMYK (Cyan, Magenta, Yellow, Key).
+     * @param red Banda del rojo del pixel de entrada
+     * @param green Banda del verde del pixel de entrada
+     * @param blue Banda del azul del pixel de entrada
+     * @param kScale valor entre 0 y 1
+     * @return array de 4 valores con los datos CMYK correspondiente al pixel de entrada.
+     */
+    public double[] RGBtoCMYK(int red, int green, int blue, double kScale);
+
+    /**
+     * Conversi�n de CMYK (Cyan, Magenta, Yellow, Key) a RGB (red, green, blue).
+     * @param red Banda del rojo del pixel de entrada
+     * @param green Banda del verde del pixel de entrada
+     * @param blue Banda del azul del pixel de entrada
+     * @param kScale valor entre 0 y 1
+     * @return array de 4 valores con los datos CMYK correspondiente al pixel de entrada.
+     */
+    public double[] CMYKtoRGB(double cyan, double magenta, double yellow, double key);
+
+    /**
+     * Obtiene la luminosidad del RGB pasado por par�metro
+     * @param red Banda del rojo del pixel de entrada
+     * @param green Banda del verde del pixel de entrada
+     * @param blue Banda del azul del pixel de entrada
+     * @return double que representa la luminosidad. Para tenerlo en un rango de 255 hay que aplicar (lum * 255. + 0.5);
+     */
+    public double getLuminosity(int red, int green, int blue);
+
+    /**
+     * Descompone un entero que representa un ARGB en sus 4 valores byte Obtiene
+     * un array de 4 elementos donde el elemento 0 es el Rojo, el 1 es el verde,
+     * el 2 el azul y el 3 el alpha.
+     * @param rgb Entero con el valor ARGB a descomponer;
+     * @return Array de cuatro elementos
+     */
+    public byte[] getARGBFromIntToByteArray(int rgb);
+
+    /**
+     * Descompone un entero que representa un ARGB en sus 4 valores byte Obtiene
+     * un array de 4 elementos donde el elemento 0 es el Rojo, el 1 es el verde,
+     * el 2 el azul y el 3 el alpha.
+     * @param rgb Entero con el valor ARGB a descomponer;
+     * @return
+     */
+    public int[] getARGBFromIntToIntArray(int rgb);
+
+    /**
+     * Obtiene un entero con los valores ARGB pasados por par�metro
+     * @param a Valor de alpha
+     * @param r Valor del rojo
+     * @param g Valor del verde
+     * @param b Valor del azul
+     * @return entero con la mezcla de valores
+     */
+    public int getIntFromARGB(int a, int r, int g, int b);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorInterpretation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorInterpretation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorInterpretation.java	(revision 46118)
@@ -0,0 +1,638 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.util.List;
+
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretationNotification;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableNotification;
+import org.gvsig.raster.lib.legend.impl.colorinterpretation.DefaultColorInterpretationNotification;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.Observable;
+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;
+
+/**
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultColorInterpretation extends BaseWeakReferencingObservable implements ColorInterpretation {
+
+    /**
+     * Persistence definition name
+     */
+    public static final String PERSISTENCE_DEFINITION = "ColorInterpretationPersistence";
+
+    /**
+     * Persistence definition description
+     */
+    public static final String PERSISTENCE_DESCRIPTION =
+        "Persistence color interpretation definition description";
+
+    private static final String COLOR_INTERPRETATION_PERSISTENCE_FIELD = "colorInterpretation";
+    private static final String COLOR_TABLE_PERSISTENCE_FIELD = "colorTable";
+    private static final String PALETTE_BAND_PERSISTENCE_FIELD = "paletteBand";
+
+
+    private String[] colorInterpretation = null;
+
+    private ColorTable colorTable;
+
+    private int paletteBand;
+
+    /**
+     * Empty constructor
+     */
+    public DefaultColorInterpretation() {
+        this.colorInterpretation = new String[0];
+        this.paletteBand = -1;
+        this.colorTable = null;
+
+    }
+
+    /**
+     *
+     * @param bandColorInterpretations
+     */
+    public DefaultColorInterpretation(String[] bandColorInterpretations) {
+
+        for (int i = 0; i < bandColorInterpretations.length; i++) {
+            if (!isColorInterpretationValid(bandColorInterpretations[i])) {
+                throw new IllegalArgumentException(String.format(
+                    "%1s color interpretation is not valid", bandColorInterpretations[i]));
+            }
+        }
+
+        this.colorInterpretation = new String[bandColorInterpretations.length];
+        System.arraycopy(bandColorInterpretations, 0, this.colorInterpretation, 0,
+            this.colorInterpretation.length);
+        this.paletteBand = -1;
+        this.colorTable = null;
+    }
+
+    /**
+     * Constructor to initialize color interpretation with the number of bands.
+     * It is necessary to indicate color interpretation of each band using
+     * {@link ColorInterpretation#setColorInterpValue(int, String)}
+     *
+     * @param nBands
+     *            Number of bands of this color interpretation
+     */
+    public DefaultColorInterpretation(int nBands) {
+        this.colorInterpretation = new String[nBands];
+        this.paletteBand = -1;
+        this.colorTable = null;
+    }
+
+    /**
+     * @param bandColorInterpretation
+     */
+    public DefaultColorInterpretation(String bandColorInterpretation) {
+
+        this.paletteBand = -1;
+        this.colorTable = null;
+        if (bandColorInterpretation.equals(RGB)) {
+            this.colorInterpretation = new String[] { RED_BAND, GREEN_BAND, BLUE_BAND };
+        } else if (bandColorInterpretation.equals(BGR)) {
+            this.colorInterpretation = new String[] { BLUE_BAND, GREEN_BAND, RED_BAND };
+        } else if (bandColorInterpretation.equals(ARGB)) {
+            this.colorInterpretation = new String[] { RED_BAND, GREEN_BAND, BLUE_BAND, ALPHA_BAND };
+        } else if (bandColorInterpretation.equals(GRAYSCALE)) {
+            this.colorInterpretation = new String[] { GRAY_BAND };
+        }else if (bandColorInterpretation.equals(PALETTE)) {
+            this.colorInterpretation = new String[] { PALETTE_BAND };
+            this.paletteBand = 0;
+        }else if (bandColorInterpretation.equals(HSL)) {
+            this.colorInterpretation = new String[] { HUE_BAND, SATURATION_BAND, LIGHTNESS_BAND };
+        }else if (bandColorInterpretation.equals(CMYK)) {
+            this.colorInterpretation = new String[] { CYAN_BAND, MAGENTA_BAND, YELLOW_BAND, BLACK_BAND };
+        }else if (bandColorInterpretation.equals(YCBCR)) {
+            this.colorInterpretation = new String[] { YCBCR_Y_BAND, YCBCR_CB_BAND, YCBCR_CR_BAND };
+        }
+
+        if(this.colorInterpretation == null){
+            throw new IllegalArgumentException(
+                "Can not create color interpretation. Type is not recognised");
+        }
+    }
+
+    @Override
+    public void setColorInterpValue(int band, String value) {
+
+        String[] oldColorInterpretation = new String[this.colorInterpretation.length];
+        System.arraycopy(this.colorInterpretation, 0, oldColorInterpretation, 0, this.colorInterpretation.length);
+        if (band < 0 || band >= this.colorInterpretation.length) {
+            throw new IllegalArgumentException("Band is out of color interpretation bands");
+        }
+
+        if (!isColorInterpretationValid(value)) {
+            throw new IllegalArgumentException(String.format("%1s is not valid", value));
+        }
+
+        this.colorInterpretation[band] = value;
+        this.notifyObservers(new DefaultColorInterpretationNotification(ColorInterpretationNotification.CHANGED_COLOR_INTERPRETATION_VALUE,
+            new Object[] { oldColorInterpretation, this.colorInterpretation }));
+    }
+
+    @Override
+    public int length() {
+        return this.colorInterpretation.length;
+    }
+
+    private boolean isColorInterpretationValid(String bandColorInterpretation) {
+        if (bandColorInterpretation.equals(RED_BAND)
+            || bandColorInterpretation.equals(GREEN_BAND)
+            || bandColorInterpretation.equals(BLUE_BAND)
+            || bandColorInterpretation.equals(GRAY_BAND)
+            || bandColorInterpretation.equals(PALETTE_BAND)
+            || bandColorInterpretation.equals(HUE_BAND)
+            || bandColorInterpretation.equals(SATURATION_BAND)
+            || bandColorInterpretation.equals(LIGHTNESS_BAND)
+            || bandColorInterpretation.equals(CYAN_BAND)
+            || bandColorInterpretation.equals(MAGENTA_BAND)
+            || bandColorInterpretation.equals(YELLOW_BAND)
+            || bandColorInterpretation.equals(BLACK_BAND)
+            || bandColorInterpretation.equals(YCBCR_Y_BAND)
+            || bandColorInterpretation.equals(YCBCR_CB_BAND)
+            || bandColorInterpretation.equals(YCBCR_CR_BAND)
+            || bandColorInterpretation.equals(UNDEFINED_BAND)
+//            || colorInterpretation.equals(RED_BLUE_BAND)
+//            || colorInterpretation.equals(RED_GREEN_BAND)
+//            || colorInterpretation.equals(GREEN_BLUE_BAND)
+            || bandColorInterpretation.equals(ALPHA_BAND)) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasInterpretation() {
+        if (colorInterpretation == null) {
+            return false;
+        }
+        for (int i = 0; i < colorInterpretation.length; i++) {
+            if (colorInterpretation[i].equals(RED_BAND)
+                || colorInterpretation[i].equals(GREEN_BAND)
+                || colorInterpretation[i].equals(BLUE_BAND)
+//                || colorInterpretation[i].equals(RED_GREEN_BAND)
+//                || colorInterpretation[i].equals(RED_BLUE_BAND)
+//                || colorInterpretation[i].equals(GREEN_BLUE_BAND)
+                || colorInterpretation[i].equals(PALETTE_BAND)
+                || colorInterpretation[i].equals(HUE_BAND)
+                || colorInterpretation[i].equals(SATURATION_BAND)
+                || colorInterpretation[i].equals(LIGHTNESS_BAND)
+                || colorInterpretation[i].equals(CYAN_BAND)
+                || colorInterpretation[i].equals(MAGENTA_BAND)
+                || colorInterpretation[i].equals(YELLOW_BAND)
+                || colorInterpretation[i].equals(BLACK_BAND)
+                || colorInterpretation[i].equals(YCBCR_Y_BAND)
+                || colorInterpretation[i].equals(YCBCR_CB_BAND)
+                || colorInterpretation[i].equals(YCBCR_CR_BAND)
+                || colorInterpretation[i].equals(GRAY_BAND)) {
+
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isBGR() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length == 3 && colorInterpretation[0] == BLUE_BAND
+                && colorInterpretation[1] == GREEN_BAND && colorInterpretation[2] == RED_BAND) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isRGB() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length >= 3 && hasAnyBandWithThisColorInterpretation(RED_BAND)
+                && hasAnyBandWithThisColorInterpretation(GREEN_BAND)
+                && hasAnyBandWithThisColorInterpretation(BLUE_BAND)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAnyRGBBand() {
+        if (colorInterpretation != null) {
+                boolean redFound = false;
+                boolean greenFound = false;
+                boolean bluefound = false;
+                for (int i = 0; i < colorInterpretation.length; i++) {
+                    if(colorInterpretation[i]==RED_BAND){
+                        redFound = true;
+                    }
+                    if(colorInterpretation[i]==GREEN_BAND){
+                        greenFound = true;
+                    }
+                    if(colorInterpretation[i]==BLUE_BAND){
+                        bluefound = true;
+                    }
+                }
+                if(redFound || greenFound || bluefound){
+                    return true;
+                }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isHSL() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length >= 3 && hasAnyBandWithThisColorInterpretation( HUE_BAND)
+                && hasAnyBandWithThisColorInterpretation(LIGHTNESS_BAND) && hasAnyBandWithThisColorInterpretation(SATURATION_BAND) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean hasAnyBandWithThisColorInterpretation(String interpretation){
+        if (colorInterpretation != null) {
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if(colorInterpretation[i] == interpretation){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isCMYK() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length >= 4 && hasAnyBandWithThisColorInterpretation(CYAN_BAND)
+                && hasAnyBandWithThisColorInterpretation(MAGENTA_BAND)
+                && hasAnyBandWithThisColorInterpretation(YELLOW_BAND)
+                && hasAnyBandWithThisColorInterpretation(BLACK_BAND) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isYCBCR() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length >= 3 && hasAnyBandWithThisColorInterpretation(YCBCR_Y_BAND)
+                && hasAnyBandWithThisColorInterpretation(YCBCR_CB_BAND)
+                && hasAnyBandWithThisColorInterpretation(YCBCR_CR_BAND) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isRGBA() {
+        if (colorInterpretation != null) {
+            if (colorInterpretation.length >= 4 && hasAnyBandWithThisColorInterpretation(RED_BAND)
+                && hasAnyBandWithThisColorInterpretation(GREEN_BAND)
+                && hasAnyBandWithThisColorInterpretation(BLUE_BAND)
+                && hasAnyBandWithThisColorInterpretation(ALPHA_BAND)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    @Override
+    public boolean isGray() {
+        if (colorInterpretation != null && this.length() >= 1
+            && hasAnyBandWithThisColorInterpretation(GRAY_BAND)) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAnyGrayBand() {
+        if (colorInterpretation != null) {
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (colorInterpretation[i] == GRAY_BAND) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAnyPaletteBand() {
+        if (colorInterpretation != null) {
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (colorInterpretation[i] == PALETTE_BAND) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isColorInterpretation(int band) {
+        return colorInterpretation[band].equals(RED_BAND)
+            || colorInterpretation[band].equals(GREEN_BAND)
+            || colorInterpretation[band].equals(BLUE_BAND)
+            || colorInterpretation[band].equals(HUE_BAND)
+            || colorInterpretation[band].equals(SATURATION_BAND)
+            || colorInterpretation[band].equals(LIGHTNESS_BAND)
+            || colorInterpretation[band].equals(CYAN_BAND)
+            || colorInterpretation[band].equals(MAGENTA_BAND)
+            || colorInterpretation[band].equals(YELLOW_BAND)
+            || colorInterpretation[band].equals(BLACK_BAND)
+            || colorInterpretation[band].equals(YCBCR_Y_BAND)
+            || colorInterpretation[band].equals(YCBCR_CB_BAND)
+            || colorInterpretation[band].equals(YCBCR_CR_BAND);
+    }
+
+    @Override
+    public boolean hasAnyColorInterpretationBand() {
+        if (colorInterpretation != null) {
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (isColorInterpretation(i)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isGrayInterpretation(int band) {
+        return colorInterpretation[band].equals(GRAY_BAND);
+    }
+
+    @Override
+    public boolean isPaletteInterpretation(int band) {
+        return colorInterpretation[band].equals(PALETTE_BAND);
+    }
+
+    @Override
+    public boolean isAlphaInterpretation(int band) {
+        return colorInterpretation[band].equals(ALPHA_BAND);
+    }
+
+    @Override
+    public String get(int i) {
+        if (i < 0 || i >= colorInterpretation.length) {
+            throw new IllegalArgumentException("Index out of defined color interpretation");
+        }
+        return colorInterpretation[i];
+    }
+
+    @Override
+    public int getBand(String id) {
+        if (colorInterpretation != null && !id.equalsIgnoreCase(ColorInterpretation.UNDEFINED_BAND)) {
+            for (int i = 0; i < colorInterpretation.length; i++)
+                if (colorInterpretation[i] != null && colorInterpretation[i].equals(id))
+                    return i;
+        }
+        return -1;
+    }
+
+    @Override
+    public boolean isUndefined() {
+        for (int i = 0; i < colorInterpretation.length; i++) {
+            if (colorInterpretation[i] != null) {
+                if (!colorInterpretation[i].equals(ALPHA_BAND))
+                    return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public String[] getValues() {
+        return colorInterpretation;
+    }
+
+    @Override
+    public boolean hasAlphaBand() {
+        return getAlphaBand() >= 0;
+    }
+
+    @Override
+    public int getAlphaBand() {
+        String[] values = getValues();
+        for (int i = 0; i < values.length; i++) {
+            if (values[i] != null && values[i].equals(ALPHA_BAND))
+                return i;
+        }
+        return -1;
+    }
+
+    @Override
+    public void addColorInterpretation(ColorInterpretation ci) {
+        String[] oldColorInterpretation = this.colorInterpretation;
+        String[] newCI = new String[colorInterpretation.length + ci.length()];
+        for (int i = 0; i < colorInterpretation.length; i++)
+            newCI[i] = colorInterpretation[i];
+        for (int i = 0; i < ci.length(); i++) {
+            newCI[colorInterpretation.length + i] = ci.get(i);
+        }
+        this.colorInterpretation = newCI;
+        this.notifyObservers(new DefaultColorInterpretationNotification(ColorInterpretationNotification.ADDED_COLOR_INTERPRETATION,
+            new Object[] { oldColorInterpretation, this.colorInterpretation }));
+
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENCE_DEFINITION);
+        if (definition == null) {
+            definition =
+                manager.addDefinition(DefaultColorInterpretation.class, PERSISTENCE_DEFINITION,
+                    PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldList(COLOR_INTERPRETATION_PERSISTENCE_FIELD)
+                .setClassOfItems(String.class).setMandatory(false);
+            definition.addDynFieldInt(PALETTE_BAND_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldObject(COLOR_TABLE_PERSISTENCE_FIELD).setClassOfValue(ColorTable.class);
+        }
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(COLOR_INTERPRETATION_PERSISTENCE_FIELD, colorInterpretation);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        List<String> descriptions =
+            (List<String>) state.get(COLOR_INTERPRETATION_PERSISTENCE_FIELD);
+        this.colorInterpretation = descriptions.toArray(new String[descriptions.size()]);
+        this.setPaletteBand(state.getInt(PALETTE_BAND_PERSISTENCE_FIELD, -1));
+        this.setPalette((ColorTable)state.get(COLOR_TABLE_PERSISTENCE_FIELD));
+    }
+
+    @Override
+    public void copyFrom(ColorInterpretation colorInterpretation) {
+        String[] oldColorInterpretation = new String[this.length()];
+        System.arraycopy(this.colorInterpretation, 0, oldColorInterpretation, 0, length());
+
+        this.colorInterpretation = new String[colorInterpretation.length()];
+        System.arraycopy(colorInterpretation.getValues(), 0, this.colorInterpretation, 0, colorInterpretation.length());
+        this.paletteBand = colorInterpretation.getPaletteBand();
+
+        this.notifyObservers(new DefaultColorInterpretationNotification(ColorInterpretationNotification.COPIED_FROM_COLOR_INTERPRETATION,
+            new Object[] { oldColorInterpretation, this.colorInterpretation }));
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        ColorInterpretation cloned = new DefaultColorInterpretation(this.length());
+        cloned.copyFrom(this);
+        if(this.colorTable!=null){
+            cloned.setPalette((ColorTable)this.colorTable.clone());
+        }
+        return cloned;
+    }
+
+    @Override
+    public boolean hasAnyHSLBand() {
+        if (colorInterpretation != null) {
+            boolean hueFound = false;
+            boolean saturationFound = false;
+            boolean lightnessFound = false;
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (colorInterpretation[i] == HUE_BAND) {
+                    hueFound = true;
+                }
+                if (colorInterpretation[i] == SATURATION_BAND) {
+                    saturationFound = true;
+                }
+                if (colorInterpretation[i] == LIGHTNESS_BAND) {
+                    lightnessFound = true;
+                }
+            }
+            if (hueFound || saturationFound || lightnessFound) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAnyCMYKBand() {
+        if (colorInterpretation != null) {
+            boolean cyanFound = false;
+            boolean magentaFound = false;
+            boolean yellowFound = false;
+            boolean blackFound = false;
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (colorInterpretation[i] == CYAN_BAND) {
+                    cyanFound = true;
+                }
+                if (colorInterpretation[i] == MAGENTA_BAND) {
+                    magentaFound = true;
+                }
+                if (colorInterpretation[i] == YELLOW_BAND) {
+                    yellowFound = true;
+                }
+                if (colorInterpretation[i] == BLACK_BAND) {
+                    blackFound = true;
+                }
+            }
+            if (cyanFound || magentaFound || yellowFound || blackFound) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasAnyYCBCRBand() {
+        if (colorInterpretation != null) {
+            boolean cBFound = false;
+            boolean cRFound = false;
+            boolean yFound = false;
+            for (int i = 0; i < colorInterpretation.length; i++) {
+                if (colorInterpretation[i] == YCBCR_CB_BAND) {
+                    cBFound = true;
+                }
+                if (colorInterpretation[i] == YCBCR_CR_BAND) {
+                    cRFound = true;
+                }
+                if (colorInterpretation[i] == YCBCR_Y_BAND) {
+                    yFound = true;
+                }
+            }
+            if (cBFound || cRFound || yFound ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isPalette() {
+        if(this.paletteBand>=0 && this.paletteBand<this.length() && this.colorTable!=null){
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void setPalette(ColorTable colorTable) {
+        ColorTable oldColorTable = this.colorTable;
+        if (colorTable != null && !colorTable.equals(oldColorTable)) {
+            if(oldColorTable!=null){
+                oldColorTable.deleteObserver(this);
+            }
+            this.colorTable = colorTable;
+            this.colorTable.addObserver(this);
+            this.notifyObservers(new DefaultColorInterpretationNotification(
+                ColorInterpretationNotification.SETTED_PALETTE, new Object[] { oldColorTable, colorTable }));
+        }
+    }
+
+    @Override
+    public void setPaletteBand(int band) {
+        if (band != this.paletteBand) {
+            int oldPaletteBand = this.paletteBand;
+            if (band >= 0 && band < this.length()) {
+                this.paletteBand = band;
+            } else {
+                this.paletteBand = -1;
+            }
+            this.notifyObservers(new DefaultColorInterpretationNotification(
+                ColorInterpretationNotification.SETTED_PALETTE_BAND, new Object[] { new Integer(oldPaletteBand),
+                    new Integer(this.paletteBand) }));
+        }
+    }
+
+    @Override
+    public int getPaletteBand() {
+        return this.paletteBand;
+    }
+
+    @Override
+    public ColorTable getPalette() {
+        return this.colorTable;
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        if (notification instanceof ColorTableNotification && observable instanceof ColorTable) {
+            Notification colorTableNotification = (Notification) notification;
+            if (colorTableNotification.getType().equals(ColorTableNotification.CHANGED_INTERPOLATED_COLOR_TABLE)
+                || colorTableNotification.getType().equals(ColorTableNotification.COMPRESSED_COLOR_TABLE)
+                || colorTableNotification.getType().equals(ColorTableNotification.COPIED_FROM_COLOR_TABLE)
+                || colorTableNotification.getType().equals(ColorTableNotification.REMOVED_DUPLICATED_VALUES_COLOR_TABLE)
+                || colorTableNotification.getType().equals(ColorTableNotification.SETTED_CLASS_VALUES_COLOR_TABLE)) {
+                this.notifyObservers(new DefaultColorInterpretationNotification(ColorInterpretationNotification.CHANGED_PALETTE,
+                    new Object[] { observable }));
+            }
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultColorTable.java	(revision 46118)
@@ -0,0 +1,686 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import java.awt.Color;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretationNotification;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableNotification;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClassNotification;
+import org.gvsig.raster.lib.legend.impl.colorinterpretation.DefaultColorInterpretationNotification;
+import org.gvsig.raster.lib.legend.impl.colortable.DefaultColorTableNotification;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.observer.Notification;
+import org.gvsig.tools.observer.Observable;
+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;
+
+/**
+ * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultColorTable extends BaseWeakReferencingObservable implements ColorTable {
+
+    /**
+     * Persistence definition name
+     */
+    public static final String PERSISTENT_NAME = "ColorTablePersistent";
+    /**
+     * Description of persistence definition
+     */
+    public static final String PERSISTENT_DESCRIPTION = "Persistent definition of color table";
+
+    private static final String NAME_PERSISTENCE_FIELD = "name";
+    private static final String RANGE_PERSISTENCE_FIELD = "range";
+    private static final String NAME_CLASS_PERSISTENCE_FIELD = "nameClass";
+    private static final String CLASSES_PERSISTENCE_FIELD = "classes";
+    private static final String PALETTE_BY_BAND_PERSISTENCE_FIELD = "paletteByBand";
+    private static final String INTERPOLATED_PERSISTENCE_FIELD = "interpolated";
+    private static final String ERROR_COLOR_PERSISTENCE_FIELD = "errorColor";
+
+    /**
+     * Default number of classes when {@link ColorTable} is created
+     */
+    private static final int defaultNumberOfClasses = 256;
+
+    private List<ColorTableClass> classes;
+    private String name;
+    private boolean interpolated;
+    private int errorColor = 8;
+    private double[] classValues = null;
+    private byte[][] paletteByBand = null;
+    private String[] classNames = null;
+
+    /**
+     * Empty constructor
+     */
+    public DefaultColorTable() {
+
+    }
+
+    /**
+     * Default constructor
+     *
+     * @param name
+     *            Name of {@link ColorTable}
+     * @param classes
+     *            Classes of {@link ColorTable}
+     * @param interpolated
+     *            True if this {@link ColorTable} is interpolated
+     */
+    public DefaultColorTable(String name, List<ColorTableClass> classes, boolean interpolated) {
+
+        if (isNamePath(name)) {
+            throw new IllegalArgumentException("Name of Color table can not be a path");
+        }
+
+        this.name = name;
+        this.classes = classes;
+        this.interpolated = interpolated;
+        observeClasses();
+        reCalculateColorTable(false);
+    }
+
+    private void observeClasses() {
+        for (ColorTableClass clazz : this.classes) {
+            clazz.addObserver(this);
+        }
+    }
+
+    private void stopObservingClasses() {
+        for (ColorTableClass clazz : this.classes) {
+            clazz.deleteObserver(this);
+        }
+    }
+
+    private void applyPalette(List<ColorTableClass> colorItems) {
+        List<ColorTableClass> arrayColors = new ArrayList<ColorTableClass>();
+
+        classValues = new double[0];
+        classNames = new String[0];
+
+        if (colorItems.size() == 0) {
+            return;
+        }
+
+        double min = colorItems.get(0).getValue();
+        double max = colorItems.get(colorItems.size() - 1).getValue();
+
+        if (min > max) {
+            double aux = max;
+            max = min;
+            min = aux;
+        }
+
+        Color color = Color.white;
+        Color colorOld = null;
+
+        // Make parts, keeping each class in an array
+        for (int i = 0; i < defaultNumberOfClasses; i++) {
+            double value = min + ((i * (max - min)) / (defaultNumberOfClasses - 1));
+            int pos = 0;
+            for (int j = 1; j <= colorItems.size(); j++) {
+                if (j < colorItems.size()) {
+                    if (value < colorItems.get(j).getValue()) {
+                        pos = j - 1;
+                        break;
+                    }
+                } else {
+                    pos = j - 1;
+                    break;
+                }
+            }
+
+            // Calculate palette color
+            if (interpolated) {
+                color = interpolatedColor(value, pos);
+            } else {
+                if ((pos + 1) < colorItems.size()) {
+                    double min2 = colorItems.get(pos).getValue();
+                    double max2 = colorItems.get(pos + 1).getValue();
+                    if ((min2 + ((max2 - min2) * colorItems.get(pos + 1).getInterpolated() / 100)) < value) {
+                        pos++;
+                    }
+                }
+                color = colorItems.get(pos).getColor();
+            }
+
+            if (!isEqualColor(color, colorOld, 0)) {
+                ColorTableClass colorItem = new DefaultColorTableClass();
+                colorItem.setValue(value);
+                colorItem.setColor(color);
+                arrayColors.add(colorItem);
+            }
+
+            colorOld = color;
+        }
+
+        // Una vez tenemos una paleta de 256 colores o inferior, rellenamos
+        // los siguientes valores para hacer busquedas rapidas.
+        paletteByBand = new byte[arrayColors.size()][4];
+        classValues = new double[arrayColors.size()];
+        classNames = new String[arrayColors.size()];
+
+        for (int i = 0; i < arrayColors.size(); i++) {
+            paletteByBand[i][0] = (byte) arrayColors.get(i).getColor().getRed();
+            paletteByBand[i][1] = (byte) arrayColors.get(i).getColor().getGreen();
+            paletteByBand[i][2] = (byte) arrayColors.get(i).getColor().getBlue();
+            paletteByBand[i][3] = (byte) arrayColors.get(i).getColor().getAlpha();
+            classValues[i] = arrayColors.get(i).getValue();
+            classNames[i] = arrayColors.get(i).getName();
+        }
+    }
+
+    private boolean canDelete(int first, int last) {
+        if (first >= getClasses().size()) {
+            return false;
+        }
+        if (last >= getClasses().size()) {
+            return false;
+        }
+        ColorTableClass c1 = getClasses().get(first);
+        ColorTableClass c2 = getClasses().get(last);
+        for (int i = (first + 1); i < last; i++) {
+            if (!isCorrectColor(c1, c2, getClasses().get(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void compressPalette() {
+        removeDuplicatedValues();
+        int size = -1;
+
+        while (size != classes.size()) {
+            int init = 0;
+            int posMax = 2;
+
+            size = classes.size();
+            while (init < classes.size()) {
+                if ((posMax < classes.size()) && canDelete(init, posMax)) {
+                    posMax++;
+                    continue;
+                }
+                if ((init + 2) < posMax) {
+                    if (canDelete(init, posMax - 1)) {
+                        for (int i = (posMax - 2); i > init; i--) {
+                            if (i < classes.size()) {
+                                classes.remove(i);
+                            }
+                        }
+                    }
+                }
+                init++;
+                posMax = init + 2;
+            }
+        }
+    }
+
+    @Override
+    public void copyFrom(ColorTable colorTable) {
+        RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager();
+        this.interpolated = colorTable.isInterpolated();
+        this.name = colorTable.getName();
+        List<ColorTableClass> clonedClasses = new ArrayList<ColorTableClass>(colorTable.getClasses().size());
+        for (ColorTableClass colorTableClass : colorTable.getClasses()) {
+            ColorTableClass clonedClass = rasterLegendManager.createColorTableClass(
+                colorTableClass.getName(),
+                colorTableClass.getValue(),
+                colorTableClass.getInterpolated(),
+                colorTableClass.getColor());
+            clonedClasses.add(clonedClass);
+        }
+
+        setClasses(clonedClasses, false);
+        this.notifyObservers(new DefaultColorTableNotification(ColorTableNotification.COPIED_FROM_COLOR_TABLE, new Object[] { colorTable }));
+    }
+
+    @Override
+    public List<ColorTableClass> getClasses() {
+        return this.classes;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public boolean hasAlpha() {
+        for (int i = 0; i < classes.size(); i++) {
+            ColorTableClass colorTableClass = classes.get(i);
+            if (colorTableClass.getColor().getAlpha() != 255) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private Color interpolatedColor(double value, int pos) {
+        if (classes.size() <= 0) {
+            return Color.black;
+        }
+
+        if ((pos + 1) == classes.size()) {
+            return classes.get(pos).getColor();
+        }
+
+        if (value <= classes.get(0).getValue()) {
+            return classes.get(0).getColor();
+        }
+
+        ColorTableClass item1 = classes.get(pos);
+        ColorTableClass item2 = classes.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;
+    }
+
+    private boolean isCorrectColor(ColorTableClass c1, ColorTableClass c2, ColorTableClass c3) {
+        if ((c3.getName() != null) && (c3.getName().length() > 0)) {
+            return false;
+        }
+        if (c3.getInterpolated() != 50) {
+            return false;
+        }
+        if (c2.getInterpolated() != 50) {
+            return false;
+        }
+
+        double max = c2.getValue() - c1.getValue();
+        int r =
+            c1.getColor().getRed()
+                + (int) (((c2.getColor().getRed() - c1.getColor().getRed()) * (c3.getValue() - c1
+                    .getValue())) / max);
+        int g =
+            c1.getColor().getGreen()
+                + (int) (((c2.getColor().getGreen() - c1.getColor().getGreen()) * (c3.getValue() - c1
+                    .getValue())) / max);
+        int b =
+            c1.getColor().getBlue()
+                + (int) (((c2.getColor().getBlue() - c1.getColor().getBlue()) * (c3.getValue() - c1
+                    .getValue())) / max);
+        int a =
+            c1.getColor().getAlpha()
+                + (int) (((c2.getColor().getAlpha() - c1.getColor().getAlpha()) * (c3.getValue() - c1
+                    .getValue())) / max);
+        Color aux = new Color(r & 0xff, g & 0xff, b & 0xff, a & 0xff);
+
+        return isEqualColor(c3.getColor(), aux, errorColor);
+    }
+
+    private boolean isEqualColor(Color c1, Color c2, int error) {
+        if ((c2 == null) && (c1 != null)) {
+            return false;
+        }
+        if ((c1 == null) && (c2 != null)) {
+            return false;
+        }
+        if (c2.getRed() < (c1.getRed() - error)) {
+            return false;
+        }
+        if (c2.getGreen() < (c1.getGreen() - error)) {
+            return false;
+        }
+        if (c2.getBlue() < (c1.getBlue() - error)) {
+            return false;
+        }
+        if (c2.getAlpha() < (c1.getAlpha() - error)) {
+            return false;
+        }
+
+        if (c2.getRed() > (c1.getRed() + error)) {
+            return false;
+        }
+        if (c2.getGreen() > (c1.getGreen() + error)) {
+            return false;
+        }
+        if (c2.getBlue() > (c1.getBlue() + error)) {
+            return false;
+        }
+        if (c2.getAlpha() > (c1.getAlpha() + error)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isInterpolated() {
+        return interpolated;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        interpolated = state.getBoolean(INTERPOLATED_PERSISTENCE_FIELD);
+        errorColor = state.getInt(ERROR_COLOR_PERSISTENCE_FIELD);
+        name = state.getString(NAME_PERSISTENCE_FIELD);
+
+        List<Double> range = state.getList(RANGE_PERSISTENCE_FIELD);
+        this.classValues = new double[range.size()];
+        for (int i = 0; i < range.size(); i++) {
+            this.classValues[i] = range.get(i);
+        }
+
+        List<String> nameClass = state.getList(NAME_CLASS_PERSISTENCE_FIELD);
+        if (nameClass != null) {
+            this.classNames = new String[nameClass.size()];
+            nameClass.toArray(this.classNames);
+        }
+
+        List<ColorTableClass> colorItems = state.getList(CLASSES_PERSISTENCE_FIELD);
+        if (colorItems != null) {
+            this.classes = new ArrayList<ColorTableClass>();
+            this.classes.addAll(colorItems);
+        }
+
+        List<String> aux = state.getList(PALETTE_BY_BAND_PERSISTENCE_FIELD);
+        if (aux != null) {
+            this.paletteByBand = null;
+            for (int i = 0; i < aux.size(); i++) {
+                String[] values = aux.get(i).split("#");
+                if (paletteByBand == null) {
+                    if (values.length == 3) {
+                        this.paletteByBand = new byte[aux.size()][3];
+                    }
+                    if (values.length == 4) {
+                        this.paletteByBand = new byte[aux.size()][4];
+                    }
+                }
+                paletteByBand[i][0] = Byte.valueOf(values[0]).byteValue();
+                paletteByBand[i][1] = Byte.valueOf(values[1]).byteValue();
+                paletteByBand[i][2] = Byte.valueOf(values[2]).byteValue();
+                if (values.length == 4) {
+                    paletteByBand[i][3] = Byte.valueOf(values[3]).byteValue();
+                }
+            }
+        }
+    }
+
+    private void reCalculateColorTable(boolean compress) {
+        // Sort classes
+        Collections.sort(this.classes);
+
+        // Compress palette
+        if (compress) {
+            compressPalette();
+        }
+
+        // Calculate and apply palette
+        applyPalette(classes);
+
+        // Remove duplicated values
+        removeDuplicatedValues();
+    }
+
+    @Override
+    public void removeDuplicatedValues() {
+        for (int i = classes.size() - 2; i >= 0; i--) {
+            if ((i + 1) >= classes.size()) {
+                continue;
+            }
+            ColorTableClass nextColorTableClass = classes.get(i + 1);
+            ColorTableClass colorTableClass = classes.get(i);
+
+            // If value is different, don't remove it
+            if (nextColorTableClass.getValue() != colorTableClass.getValue()) {
+                continue;
+            }
+
+            // If color is different, don't remove it
+            if (!nextColorTableClass.getColor().equals(colorTableClass.getColor())) {
+                continue;
+            }
+
+            // If class does not have name, remove it
+            if (StringUtils.isBlank(nextColorTableClass.getName())) {
+                classes.remove(i + 1);
+                continue;
+            }
+            if (StringUtils.isBlank(colorTableClass.getName())) {
+                classes.remove(i);
+                continue;
+            }
+
+            // Remove class if class name is equals
+            if (nextColorTableClass.getName().equals(colorTableClass.getName())) {
+                classes.remove(i);
+                continue;
+            }
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(INTERPOLATED_PERSISTENCE_FIELD, interpolated);
+        state.set(ERROR_COLOR_PERSISTENCE_FIELD, errorColor);
+        state.set(NAME_PERSISTENCE_FIELD, name);
+        state.set(RANGE_PERSISTENCE_FIELD, classValues);
+        state.set(NAME_CLASS_PERSISTENCE_FIELD, classNames);
+        state.set(CLASSES_PERSISTENCE_FIELD, classes);
+
+        ArrayList<String> list = new ArrayList<String>();
+        if (paletteByBand != null) {
+            String entry = null;
+            for (int i = 0; i < paletteByBand.length; i++) {
+                entry = paletteByBand[i][0] + "#" + paletteByBand[i][1] + "#" + paletteByBand[i][2];
+                if (paletteByBand[0].length > 3) {
+                    entry += "#" + paletteByBand[i][3];
+                }
+                list.add(entry);
+            }
+            state.set(PALETTE_BY_BAND_PERSISTENCE_FIELD, list);
+        } else {
+            state.setNull(PALETTE_BY_BAND_PERSISTENCE_FIELD);
+        }
+
+    }
+
+    @Override
+    public void setClasses(List<ColorTableClass> colorTableClasses, boolean compress) {
+        if(this.classes!=null){
+            stopObservingClasses();
+        }
+        this.classes = colorTableClasses;
+        observeClasses();
+        reCalculateColorTable(compress);
+        this.notifyObservers(new DefaultColorTableNotification(ColorTableNotification.SETTED_CLASS_VALUES_COLOR_TABLE, new Object[] { colorTableClasses }));
+    }
+
+    @Override
+    public void setClasses(double min, double max, boolean compress) {
+        ColorTableClass colorTableClass;
+        double max2 = Double.NEGATIVE_INFINITY;
+        double min2 = Double.POSITIVE_INFINITY;
+
+        if (min > max) {
+            double aux = min;
+            min = max;
+            max = aux;
+        }
+
+        RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager();
+        List<ColorTableClass> arrayList = new ArrayList<ColorTableClass>();
+        List<ColorTableClass> items = this.getClasses();
+
+        // Actualizamos el maximo y minimo del array
+        for (int i = 0; i < items.size(); i++) {
+            colorTableClass = items.get(i);
+            if (colorTableClass.getValue() > max2) {
+                max2 = colorTableClass.getValue();
+            }
+            if (colorTableClass.getValue() < min2) {
+                min2 = colorTableClass.getValue();
+            }
+        }
+
+        // A�adir el minimo
+        if (items.size() > 0) {
+            colorTableClass = items.get(0);
+        } else {
+            colorTableClass = rasterLegendManager.createColorTableClass();
+            colorTableClass.setValue(0);
+            colorTableClass.setColor(Color.black);
+        }
+
+        arrayList.add(colorTableClass);
+
+        for (int i = 0; i < items.size(); i++) {
+            colorTableClass = items.get(i);
+            colorTableClass.setValue(min
+                + (((colorTableClass.getValue() - min2) * (max - min)) / (max2 - min2)));
+            arrayList.add(colorTableClass);
+        }
+
+        // A�adir el maximo
+        if (items.size() > 0) {
+            colorTableClass = items.get(items.size() - 1);
+        } else {
+            colorTableClass = rasterLegendManager.createColorTableClass();
+            colorTableClass.setValue(255);
+            colorTableClass.setColor(Color.white);
+        }
+        arrayList.add(colorTableClass);
+
+        setClasses(arrayList, compress);
+    }
+
+    @Override
+    public void setInterpolated(boolean flag) {
+        boolean oldInterpolated = this.interpolated;
+        this.interpolated = flag;
+        if(this.classes!=null){
+            reCalculateColorTable(false);
+        }
+        this.notifyObservers(new DefaultColorTableNotification(ColorTableNotification.CHANGED_INTERPOLATED_COLOR_TABLE, new Object[] { new Boolean(oldInterpolated), new Boolean(this.interpolated) }));
+    }
+
+    @Override
+    public void setName(String name) {
+
+        if (isNamePath(name)) {
+            throw new IllegalArgumentException("Name of Color table can not be a path");
+        }
+
+        this.name = name;
+        this.notifyObservers(new DefaultColorTableNotification(ColorTableNotification.RENAMED_COLOR_TABLE, new Object[] { name }));
+    }
+
+    public static void registerPersistence() {
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+        if (definition == null) {
+            definition =
+                manager.addDefinition(DefaultColorTable.class, PERSISTENT_NAME,
+                    PERSISTENT_DESCRIPTION, null, null);
+            definition.addDynFieldBoolean(INTERPOLATED_PERSISTENCE_FIELD).setMandatory(true);
+            definition.addDynFieldInt(ERROR_COLOR_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldString(NAME_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldList(RANGE_PERSISTENCE_FIELD).setClassOfItems(Double.class)
+                .setMandatory(false);
+            definition.addDynFieldList(NAME_CLASS_PERSISTENCE_FIELD).setClassOfItems(String.class)
+                .setMandatory(false);
+            definition.addDynFieldList(CLASSES_PERSISTENCE_FIELD)
+                .setClassOfItems(ColorTableClass.class).setMandatory(false);
+            definition.addDynFieldList(PALETTE_BY_BAND_PERSISTENCE_FIELD)
+                .setClassOfItems(String.class).setMandatory(false);
+        }
+    }
+
+    private boolean isNamePath(String name) {
+
+        if(name.contains(File.pathSeparator) || name.contains(".")){
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public byte[] getRGBA(Object value) {
+        Number number = null;
+        if (value instanceof Number) {
+            number = (Number) value;
+            for (int i = 1; i <= classValues.length; i++) {
+                if (i < classValues.length) {
+                    if (number.doubleValue() < classValues[i]){
+                        return paletteByBand[i - 1].clone();
+                    }
+                } else {
+                    return paletteByBand[i - 1].clone();
+                }
+            }
+            return new byte[4];
+        }
+        throw new IllegalArgumentException("Value has to be a number");
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        ColorTable cloned = (ColorTable) super.clone();
+        cloned.copyFrom(this);
+        return cloned;
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        //FIXME:
+
+        if (notification instanceof ColorTableClassNotification && observable instanceof ColorTableClass) {
+            Notification colorTableClassNotification = (Notification) notification;
+            if (colorTableClassNotification.getType().equals(ColorTableClassNotification.SETTED_COLOR)
+                || colorTableClassNotification.getType().equals(ColorTableClassNotification.SETTED_INTERPOLATED)
+                || colorTableClassNotification.getType().equals(ColorTableClassNotification.SETTED_NAME)
+                || colorTableClassNotification.getType().equals(ColorTableClassNotification.SETTED_VALUE)) {
+                this.notifyObservers(new DefaultColorTableNotification(ColorTableNotification.SETTED_CLASS_VALUES_COLOR_TABLE,
+                    new Object[] { observable }));
+            }
+        }
+    }
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparencyRange.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparencyRange.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/raster/lib/legend/impl/DefaultTransparencyRange.java	(revision 46118)
@@ -0,0 +1,300 @@
+package org.gvsig.raster.lib.legend.impl;
+
+import org.gvsig.raster.lib.legend.api.TransparencyRange;
+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 <a href="mailto:lmarques@disid.com">Lluis Marques</a>
+ *
+ */
+public class DefaultTransparencyRange implements TransparencyRange {
+
+    private static final String PERSISTENCE_NAME = "transparencyRange";
+    private static final String PERSISTENCE_DESCRIPTION = "transparencyRange";
+
+    private static final String IS_AND_PERSISTENCE_FIELD = "isAnd";
+    private static final String RED_PERSISTENCE_FIELD = "red";
+    private static final String GREEN_PERSISTENCE_FIELD = "green";
+    private static final String BLUE_PERSISTENCE_FIELD = "blue";
+    private static final String ALPHA_PERSISTENCE_FIELD = "aplha";
+
+    private boolean isAnd;
+    private int[] red;
+    private int[] green;
+    private int[] blue;
+    private int alpha;
+
+    public DefaultTransparencyRange() {
+        this.isAnd = false;
+        this.red = new int[2];
+        this.red[0] = -1;
+        this.red[1] = -1;
+        this.green = new int[2];
+        this.green[0] = -1;
+        this.green[1] = -1;
+        this.blue = new int[2];
+        this.blue[0] = -1;
+        this.blue[1] = -1;
+        this.alpha = -1;
+    }
+
+    public DefaultTransparencyRange(int[] redRange, int[] greenRange, int[] blueRange, int alpha, boolean isAnd) {
+        this.isAnd = isAnd;
+        setRGB(redRange, greenRange, blueRange);
+        setAlpha(alpha);
+    }
+
+    @Override
+    public boolean isAnd() {
+        return this.isAnd;
+    }
+
+    @Override
+    public void setAnd(boolean flag) {
+        this.isAnd = flag;
+    }
+
+    @Override
+    public int[] getBlue() {
+        return this.blue;
+    }
+
+    @Override
+    public void setRGB(int[] red, int[] green, int[] blue) {
+
+        if (red.length != 2 || green.length != 2 || blue.length != 2) {
+            throw new IllegalArgumentException(
+                "Transparency range values only accepts 2 values for each color");
+        }
+
+        this.red = red;
+        this.green = green;
+        this.blue = blue;
+    }
+
+    @Override
+    public void setBlue(int[] blue) {
+        if (blue.length != 2) {
+            throw new IllegalArgumentException(
+                "Transparency range values only accepts 2 values for each color");
+        }
+
+        this.blue = blue;
+    }
+
+    @Override
+    public int[] getGreen() {
+        return this.green;
+    }
+
+    @Override
+    public void setGreen(int[] green) {
+        if (green.length != 2) {
+            throw new IllegalArgumentException(
+                "Transparency range values only accepts 2 values for each color");
+        }
+
+        this.green = green;
+    }
+
+    @Override
+    public int[] getRed() {
+        return this.red;
+    }
+
+    @Override
+    public void setRed(int[] red) {
+        if (red.length != 2) {
+            throw new IllegalArgumentException(
+                "Transparency range values only accepts 2 values for each color");
+        }
+
+        this.red = red;
+    }
+
+    @Override
+    public int getAlpha() {
+        return this.alpha;
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+
+        if (alpha < 0 || alpha > 255) {
+            throw new IllegalArgumentException("Alpha value has to be between 0 and 255");
+        }
+
+        this.alpha = alpha;
+    }
+
+    public static void registerPersistence() {
+
+        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
+        DynStruct definition = persistenceManager.getDefinition(PERSISTENCE_NAME);
+        if (definition == null) {
+            definition =
+                persistenceManager.addDefinition(DefaultTransparencyRange.class, PERSISTENCE_NAME,
+                    PERSISTENCE_DESCRIPTION, null, null);
+            definition.addDynFieldArray(RED_PERSISTENCE_FIELD).setClassOfValue(Integer.class)
+                .setMandatory(false);
+            definition.addDynFieldArray(GREEN_PERSISTENCE_FIELD).setClassOfValue(Integer.class)
+                .setMandatory(false);
+            definition.addDynFieldArray(BLUE_PERSISTENCE_FIELD).setClassOfValue(Integer.class)
+                .setMandatory(false);
+            definition.addDynFieldBoolean(IS_AND_PERSISTENCE_FIELD).setMandatory(false);
+            definition.addDynFieldInt(ALPHA_PERSISTENCE_FIELD).setMandatory(false);
+        }
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set(RED_PERSISTENCE_FIELD, this.getRed());
+        state.set(BLUE_PERSISTENCE_FIELD, this.getBlue());
+        state.set(GREEN_PERSISTENCE_FIELD, this.getGreen());
+        state.set(IS_AND_PERSISTENCE_FIELD, isAnd);
+        state.set(ALPHA_PERSISTENCE_FIELD, alpha);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.red = state.getIntArray(RED_PERSISTENCE_FIELD);
+        this.green = state.getIntArray(GREEN_PERSISTENCE_FIELD);
+        this.blue = state.getIntArray(BLUE_PERSISTENCE_FIELD);
+        this.alpha = state.getInt(ALPHA_PERSISTENCE_FIELD);
+        this.isAnd = state.getBoolean(IS_AND_PERSISTENCE_FIELD);
+    }
+
+    @Override
+    public String toString() {
+
+        StringBuilder builder = new StringBuilder();
+        int[] redValues = getRed();
+        if (redValues[0] < 0) {
+            builder.append("*");
+        } else if (redValues[0] == redValues[1]) {
+            builder.append(redValues[0]);
+        } else if (redValues.length > 1) {
+            builder.append("[");
+            for (int i = 0; i < redValues.length; i++) {
+                builder.append(redValues[i]);
+                if (i < (redValues.length - 1)) {
+                    builder.append(",");
+                }
+            }
+            builder.append("]");
+        }
+
+        if (isAnd()) {
+            builder.append(" & ");
+        } else {
+            builder.append(" | ");
+        }
+
+        int[] greenValues = getGreen();
+        if (greenValues[0] < 0) {
+            builder.append("*");
+        } else if (greenValues[0] == greenValues[1]) {
+            builder.append(greenValues[0]);
+        } else if (greenValues.length > 1) {
+            builder.append("[");
+            for (int i = 0; i < greenValues.length; i++) {
+                builder.append(greenValues[i]);
+                if (i < (greenValues.length - 1)) {
+                    builder.append(",");
+                }
+            }
+            builder.append("]");
+        }
+
+        if (isAnd()) {
+            builder.append(" & ");
+        } else {
+            builder.append(" | ");
+        }
+
+        int[] blueValues = getBlue();
+        if (blueValues[0] < 0) {
+            builder.append("*");
+        } else if (blueValues[0] == blueValues[1]) {
+            builder.append(blueValues[0]);
+        } else if (blueValues.length > 1) {
+            builder.append("[");
+            for (int i = 0; i < blueValues.length; i++) {
+                builder.append(blueValues[i]);
+                if (i < (blueValues.length - 1)) {
+                    builder.append(",");
+                }
+            }
+            builder.append("]");
+        }
+
+        int alpha = getAlpha();
+        if (alpha >= 0) {
+            builder.append(" (alpha = ");
+            builder.append(alpha);
+            builder.append(")");
+        }
+        return builder.toString();
+
+    }
+
+//    @Override
+//    public boolean equals(Object obj) {
+//        if(!(obj instanceof TransparencyRange)){
+//            return false;
+//        }
+//        TransparencyRange other = (TransparencyRange)obj;
+//        if(other.getAlpha()!=this.getAlpha()){
+//            return false;
+//        }
+//
+//        return isSameRange(other);
+//    }
+
+    @Override
+    public boolean isSameRange(TransparencyRange otherRange) {
+//        if(!(otherRange instanceof TransparencyRange)){
+//            return false;
+//        }
+//        if(otherRange.getAlpha()!=this.getAlpha()){
+//            return false;
+//        }
+
+        if(otherRange.getRed().length!=this.getRed().length){
+            return false;
+        }
+        if(otherRange.getGreen().length!=this.getGreen().length){
+            return false;
+        }
+        if(otherRange.getBlue().length!=this.getBlue().length){
+            return false;
+        }
+
+        if(otherRange.getRed()[0]!=this.getRed()[0]){
+            return false;
+        }
+        if(otherRange.getRed()[1]!=this.getRed()[1]){
+            return false;
+        }
+
+        if(otherRange.getGreen()[0]!=this.getGreen()[0]){
+            return false;
+        }
+        if(otherRange.getGreen()[1]!=this.getGreen()[1]){
+            return false;
+        }
+
+        if(otherRange.getBlue()[0]!=this.getBlue()[0]){
+            return false;
+        }
+        if(otherRange.getBlue()[1]!=this.getBlue()[1]){
+            return false;
+        }
+
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.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.isTypeOf(TYPES.POINT) || gt.isTypeOf(TYPES.MULTIPOINT) ) {
+            return TYPES.POINT;
+
+        } else if( gt.isTypeOf(TYPES.CURVE) || gt.isTypeOf(TYPES.MULTICURVE) ) {
+            return TYPES.CURVE;
+
+        } else if( gt.isTypeOf(TYPES.SURFACE) || gt.isTypeOf(TYPES.MULTISURFACE) ) {
+            return TYPES.SURFACE;
+
+        }
+        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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/DefaultRasterLayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/DefaultRasterLayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/DefaultRasterLayer.java	(revision 46118)
@@ -0,0 +1,594 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.raster.impl;
+
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.cresques.cts.ICoordTrans;
+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.InitializeException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.raster.BandAttributeDescriptor;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterSet;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.raster.RasterStoreNotification;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+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.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+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.FLyrDefault;
+import org.gvsig.fmap.mapcontext.layers.LayerInformationBuilder;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.raster.api.legend.RasterLegendEvent;
+import org.gvsig.fmap.mapcontext.raster.api.legend.listeners.RasterLegendChangedListener;
+import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
+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.SymbolLegendEvent;
+import org.gvsig.metadata.exceptions.MetadataException;
+import org.gvsig.raster.lib.buffer.api.BufferDimensions;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.locator.LocatorException;
+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.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.gvsig.tools.util.Callable;
+
+/**
+ * Capa b�sica Raster.
+ *
+ */
+public class DefaultRasterLayer extends FLyrDefault implements RasterLayer, RasterLegendChangedListener, Observer {
+
+    final static private org.slf4j.Logger logger = LoggerFactory.getLogger(DefaultRasterLayer.class);
+
+    private RasterStore store;
+    private RasterLegend legend;
+    // private Cancellable cancel;
+    private RasterQuery baseQuery;
+    private Statistics statistics;
+
+    public static class RegisterPersistence implements Callable {
+
+        @Override
+        public Object call() {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct definition =
+                manager.addDefinition(DefaultRasterLayer.class, "DefaultRasterLayer",
+                    "DefaultRasterLayer Persistence definition", null, null);
+            definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, "FLyrDefault");
+            definition.addDynFieldObject("legend").setClassOfValue(RasterLegend.class).setMandatory(true);
+            definition.addDynFieldObject("store").setClassOfValue(RasterStore.class).setMandatory(true);
+            definition.addDynFieldObject("baseQuery").setClassOfValue(RasterQuery.class).setMandatory(false);
+
+            return Boolean.TRUE;
+        }
+    }
+
+    /**
+     * Creates a new DefaultRasterLayer
+     *
+     * @throws LoadLayerException
+     */
+    public DefaultRasterLayer() throws LoadLayerException {
+        super();
+    }
+
+    /**
+     * Creates a new DefaultRasterLayer
+     *
+     * @param store
+     * @param legend
+     */
+    public DefaultRasterLayer(RasterStore store, RasterLegend legend) {
+        super();
+        ToolsLocator.getDisposableManager().bind(store);
+        this.store = store;
+        this.setLegend(legend);
+    }
+
+    @Override
+    public void saveToState(PersistentState state) throws PersistenceException {
+        try {
+            super.saveToState(state);
+
+            state.set("store", (Persistent) this.store);
+            state.set("legend", (Persistent) this.legend);
+            state.set("baseQuery", (Persistent) this.baseQuery);
+
+        } catch (PersistenceException | RuntimeException ex) {
+            logger.warn("Can't save to persistent state the layer '" + this.getName() + "'.");
+            throw ex;
+        }
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+
+        try {
+            super.loadFromState(state);
+
+            this.store = (RasterStore) state.get("store");
+            this.legend = (RasterLegend) state.get("legend");
+            this.baseQuery = (RasterQuery) state.get("baseQuery");
+
+        } catch (PersistenceException | RuntimeException ex) {
+            logger.warn("Can't load from persietent state the layer '" + this.getName() + "'.");
+            throw ex;
+        }
+
+    }
+
+    private void setLegend(RasterLegend legend) {
+        if (this.legend == legend) {
+            return;
+        }
+        if (this.legend != null && this.legend.equals(legend)) {
+            return;
+        }
+        RasterLegend oldLegend = this.legend;
+        if (oldLegend != null) {
+             oldLegend.removeLegendListener( this);
+//             oldLegend.deleteDrawingObserver(this);
+        }
+        this.legend = legend;
+//        if (this.legend != null) {
+//             this.legend.addDrawingObserver(this);
+//             this.legend.addLegendListener( this);
+//        }
+
+        this.legend.addLegendListener(this);
+
+        LegendChangedEvent e = LegendChangedEvent.createLegendChangedEvent(oldLegend, this.legend);
+        // FIXME: cuando se arregle LegendChangeEvent para que admita capas
+        // raster (y no solo las ClassifiableVectorial) descomentarizar la siguiente l�nea
+        // e.setLayer(this);
+        updateDrawVersion();
+        callLegendChanged(e);
+    }
+
+    /**
+     * Devuelve la Leyenda de la capa.
+     *
+     * @return Leyenda.
+     */
+    @Override
+    public RasterLegend getLegend(){
+        if (legend == null) {
+            MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+            RasterLegend theLegend = (RasterLegend) mapContextManager.getLegend(store);
+            this.setLegend(theLegend);
+      }
+        return legend;
+    }
+
+    @Override
+    public DataStore getDataStore() {
+        return this.store;
+    }
+
+    @Override
+    public void setDataStore(DataStore dataStore) throws LoadLayerException {
+
+        if (this.store != null) {
+            DisposeUtils.disposeQuietly(this.store);
+        }
+
+        this.store = (RasterStore) dataStore;
+        ToolsLocator.getDisposableManager().bind(dataStore);
+        
+        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+        RasterLegend theLegend = (RasterLegend) mapContextManager.getLegend(store);
+        this.setLegend(theLegend);
+    }
+
+    @Override
+    public Envelope getFullEnvelope() throws ReadException {
+        Envelope rAux;
+        try {
+            rAux = getRasterStore().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 {
+                GeometryManager geomManager = GeometryLocator.getGeometryManager();
+                rAux = geomManager.createEnvelope(0, 0, 90, 90, SUBTYPES.GEOM2D);
+            } catch (CreateEnvelopeException e) {
+                logger.warn("Error creating the envelope", e);
+            }
+        }
+        // Si existe reproyecci�n, reproyectar el extent
+        ICoordTrans ct = getCoordTrans();
+        if (ct != null) {
+            rAux = rAux.convert(ct);
+        }
+        return rAux;
+    }
+
+    @Override
+    public void draw(BufferedImage image, final Graphics2D g, final ViewPort viewPort, Cancellable cancel, double scale)
+        throws ReadException {
+        if (!this.isWithinScale(scale)) {
+            return;
+        }
+        if (cancel.isCanceled()) {
+            return;
+        }
+
+        RasterQuery rasterQuery = createRasterQuery();
+        Envelope reprojectedViewPortEnvelope = (Envelope) viewPort.getAdjustedEnvelope(); // .getEnvelope();
+        ICoordTrans ct = getCoordTrans();
+        if (ct != null) {
+            try {
+                reprojectedViewPortEnvelope = (Envelope) reprojectedViewPortEnvelope.clone();
+                reprojectedViewPortEnvelope = reprojectedViewPortEnvelope.convert(ct.getInverted());
+            } catch (CloneNotSupportedException e) {
+                this.setAvailable(false);
+                this.setError(e);
+                throw new ReadException(getName(), e);
+            }
+        }
+
+        double pixelSize = reprojectedViewPortEnvelope.getLength(0) / (double) viewPort.getImageWidth();
+
+        rasterQuery.setPixelSize(pixelSize);
+        rasterQuery.setClip(reprojectedViewPortEnvelope);
+
+        RasterSet rasterSet = null;
+        SimpleTaskStatus taskStatus = null;
+        try {
+
+            long tini = System.currentTimeMillis();
+
+            // TODO Task status should be used to cancel
+            TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+            taskStatus = manager.createDefaultSimpleTaskStatus("Draw " + getDataStore().getName());
+            taskStatus.setAutoremove(true);
+            taskStatus.add();
+            rasterSet = getRasterStore().getRasterSet(rasterQuery);
+            if (!rasterSet.isEmpty()) {
+                getLegend().draw(g, rasterSet, viewPort, taskStatus);
+                logger.debug("Layer " + this.getName() + " drawn in " + (System.currentTimeMillis() - tini)
+                    + " milliseconds.");
+            }
+            
+
+        } catch (DataException e) {
+            if( taskStatus!=null ) {
+                taskStatus.abort();
+                taskStatus = null;
+            }
+            this.setAvailable(false);
+            this.setError(e);
+            throw new ReadException(getName(), e);
+        } finally {
+            if (rasterSet != null) {
+                DisposeUtils.dispose(rasterSet);
+                rasterSet = null;
+            }
+            if( taskStatus!=null ) {
+                taskStatus.terminate();
+                taskStatus = null;
+            }
+        }
+
+    }
+
+    @Override
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintAttributes properties)
+        throws ReadException {
+
+        // TODO legend doesn't have print method
+        throw new UnsupportedOperationException();
+
+    }
+
+    @Override
+    public Set<RasterStore> getMetadataChildren() throws MetadataException {
+        Set<RasterStore> ret = new TreeSet<>();
+        ret.add(this.store);
+        return ret;
+    }
+
+    @Override
+    public Object getMetadataID() throws MetadataException {
+        return "Layer(" + this.getName() + "):" + this.store.getMetadataID();
+    }
+
+    @Override
+    public void update(Observable observable, Object notification) {
+        if (observable.equals(this.store)) {
+            if (notification instanceof RasterStoreNotification) {
+                RasterStoreNotification event = (RasterStoreNotification) notification;
+                if (event.getType() == RasterStoreNotification.AFTER_REFRESH
+                    || event.getType() == RasterStoreNotification.SELECTION_CHANGE) {
+                    this.updateDrawVersion();
+                } else if (event.getType() == RasterStoreNotification.RESOURCE_CHANGED) {
+                    this.setAvailable(false);
+                }
+            }
+        }
+    }
+
+    @Override
+    public RasterStore getRasterStore() {
+        return this.store;
+    }
+
+    @Override
+    public void setBaseQuery(RasterQuery baseQuery) {
+        this.baseQuery = baseQuery;
+    }
+
+    @Override
+    public RasterQuery getBaseQuery() {
+        return this.baseQuery;
+    }
+
+    @Override
+    public RasterQuery createRasterQuery() {
+        if (this.baseQuery == null) {
+            return this.getRasterStore().createRasterQuery();
+        }
+        try {
+            return (RasterQuery) baseQuery.clone();
+        } catch (CloneNotSupportedException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    protected void doDispose() throws BaseException {
+        logger.debug("Dispose DefaultRasterLayer '"+(this.getDataStore()==null?"NULL":this.getDataStore().getFullName()+"'"));
+
+        DisposeUtils.dispose(this.store);
+        this.layerListeners.clear();
+        this.store = null;
+        this.legend = null;
+        this.baseQuery = null;
+    }
+
+    @Override
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel) throws LoadLayerException, DataException {
+
+        return getInfo(p, tolerance, cancel, true);
+    }
+
+    @Override
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel, boolean fast) throws LoadLayerException,
+        DataException {
+
+        Point2D infop = new Point2D.Double(p.x, p.y);
+        org.gvsig.fmap.geom.primitive.Point pReal = this.getMapContext().getViewPort().convertToMapPoint(infop);
+
+        // TODO:
+        return null;
+    }
+
+    @Override
+    public DynObjectSet getInfo(org.gvsig.fmap.geom.primitive.Point p, double tolerance) throws LoadLayerException,
+        DataException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getTocImageIcon() {
+        //FIXME: Subir esto a la clase abstracta
+        return MapContextLocator.getMapContextManager().getIconLayer(this.getDataStore());
+    }
+
+    @Override
+    public void setLegend(ILegend legend) {
+        if (legend instanceof RasterLegend) {
+            setLegend((RasterLegend) legend);
+        } else {
+            throw new IllegalArgumentException("The legend isn't a RasterLegend.");
+        }
+    }
+
+    @Override
+    public String getInfoString() {
+        RasterStore rasterStore = this.getRasterStore();
+        Envelope envelope = null;
+        try {
+            envelope = rasterStore.getEnvelope();
+        } catch (LocatorException | DataException | CreateEnvelopeException e) {
+        }
+        int bands = rasterStore.getBands();
+        int rows = -1;
+        int columns = -1;
+        String pixelSize = "-/-";
+        try {
+            BufferDimensions dimensions = rasterStore.getDimensions();
+            rows = dimensions.getRows();
+            columns = dimensions.getColumns();
+            pixelSize = String.format("%.3f/%.3f", dimensions.getPixelSizeX(), dimensions.getPixelSizeY());
+        } catch (InitializeException ex) {
+        }
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        LayerInformationBuilder builder = MapContextLocator.getMapContextManager().createLayerInformationBuilder();
+
+        builder.title().labelkey("Data_source");
+        builder.property().labelkey("Source_type").value(store.getProviderName());
+        builder.property().labelkey("origen").value(store.getFullName());
+        if (store.getParameters() instanceof FilesystemStoreParameters) {
+            File f = ((FilesystemStoreParameters) (store.getParameters())).getFile();
+            if (f != null) {
+                builder.property().labelkey("size").value("%d bytes", f.length());
+            }
+        }
+
+        builder.property().labelkey("_bands").value("%d", bands);
+        builder.property().labelkey("_rows").value("%d", rows);
+        builder.property().labelkey("_columns").value("%d", columns);
+        builder.property().labelkey("_pixel_size").value("%s", pixelSize);
+        builder.property().labelkey("transparency").value("%d", this.getTransparency());
+
+        builder.title().labelkey("_Coordenadas_geograficas");
+        builder.envelope().value(envelope);
+
+        builder.title().labelkey("_Projection");
+        builder.property().value(this.getProjection());
+        builder.text().asWKT(this.getProjection());
+
+        for (int i = 0; i < bands; i++) {
+            builder.title().labelkey(i18nManager.getTranslation("_band") + " " + i);
+
+            BandDescriptor bandDescriptor = rasterStore.getBandDescriptor(i);
+
+            builder.property().labelkey("_name").value(bandDescriptor.getName());
+            builder.property().labelkey("_description").value(bandDescriptor.getDescription());
+            builder.property().labelkey("_dataType")
+                .value(BufferLocator.getBufferManager().getTypeName(bandDescriptor.getDataType()));
+
+            if (bandDescriptor.getNoData() != null) {
+                builder.property().labelkey("_noData").value(bandDescriptor.getNoData().toString());
+            } else {
+                builder.property().labelkey("_noData").value(i18nManager.getTranslation("_null"));
+            }
+
+            for (BandAttributeDescriptor bandAttributeDescriptor : bandDescriptor) {
+                builder.property().labelkey("_name").value(bandAttributeDescriptor.getName());
+                builder.property().labelkey("_description").value(bandAttributeDescriptor.getDescription());
+                builder.property().labelkey("_units").value(bandAttributeDescriptor.getUnits());
+
+                builder.title().labelkey("_values");
+
+                List<Object> attributeValues = bandAttributeDescriptor.getAvailableValues();
+
+                for (Object value : attributeValues) {
+                    if (value != null) {
+                        builder.property().labelkey("_units").value(bandAttributeDescriptor.getUnits());
+                    } else {
+                        builder.property().labelkey("_units").value(bandAttributeDescriptor.getUnits());
+                    }
+                }
+            }
+        }
+
+        return builder.toString();
+    }
+
+    @Override
+    public Statistics getStatistics(SimpleTaskStatus status) {
+        if (statistics == null) {
+            RasterSet rasterSet = null;
+            try {
+                rasterSet = getRasterStore().getRasterSet();
+                statistics = rasterSet.getStatistics(status);
+            } catch (DataException e) {
+                logger.warn("Can't get layer's statistics", e);
+            } finally {
+                DisposeUtils.dispose(rasterSet);
+            }
+        }
+        return statistics;
+    }
+
+    @Override
+    public void recalculateStatistics() {
+        this.statistics = null;
+    }
+
+    @Override
+    public FLayer cloneLayer() throws Exception {
+        RasterLegend clonedLegend = (RasterLegend)this.legend.cloneLegend();
+        DefaultRasterLayer cloned = new DefaultRasterLayer(this.store, clonedLegend);
+        cloned.setName(this.getName());
+        cloned.setProjection(this.getProjection());
+
+        return cloned;
+    }
+
+    @Override
+    public boolean symbolChanged(SymbolLegendEvent e) {
+        //FIXME: Remove when fixed hierarchy of legend events
+        throw new UnsupportedOperationException("There aren't any symbols in a raster legend.");
+    }
+
+    @Override
+    public void legendCleared(LegendClearEvent event) {
+        //FIXME: Remove when fixed hierarchy of legend events
+        throw new UnsupportedOperationException("Can't clear a raster legend.");
+    }
+
+    @Override
+    public boolean colorInterpretationChanged(RasterLegendEvent e) {
+        this.updateDrawVersion();
+
+        LegendChangedEvent ev = LegendChangedEvent.createLegendChangedEvent(legend, e);
+        this.callLegendChanged(ev);
+        return true;
+    }
+
+    @Override
+    public boolean operationListChanged(RasterLegendEvent e) {
+        this.updateDrawVersion();
+
+        LegendChangedEvent ev = LegendChangedEvent.createLegendChangedEvent(legend, e);
+        this.callLegendChanged(ev);
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/MapContextRasterLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/MapContextRasterLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/MapContextRasterLibrary.java	(revision 46118)
@@ -0,0 +1,146 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2016 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.raster.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.CompatLibrary;
+import org.gvsig.fmap.dal.DALLibrary;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.MapContextLibrary;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.OperationManager;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.impl.DefaultColorInterpretation;
+import org.gvsig.raster.lib.legend.impl.DefaultColorTable;
+import org.gvsig.raster.lib.legend.impl.DefaultColorTableClass;
+import org.gvsig.raster.lib.legend.impl.DefaultRasterLegend;
+import org.gvsig.raster.lib.legend.impl.DefaultRasterLegendManager;
+import org.gvsig.raster.lib.legend.impl.DefaultTransparency;
+import org.gvsig.raster.lib.legend.impl.DefaultTransparencyRange;
+import org.gvsig.raster.lib.legend.impl.io.GimpGradientColorTableIO;
+import org.gvsig.raster.lib.legend.impl.io.GimpGradientColorTableIOFactory;
+import org.gvsig.raster.lib.legend.impl.io.GimpPaletteColorTableIO;
+import org.gvsig.raster.lib.legend.impl.io.GimpPaletteColorTableIOFactory;
+import org.gvsig.raster.lib.legend.impl.io.gvSIGColorTableIO;
+import org.gvsig.raster.lib.legend.impl.io.gvSIGColorTableIOFactory;
+import org.gvsig.raster.lib.legend.impl.operations.brightness.BrightnessOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.cmyktorgb.CMYKToRGBOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.colorbalancecmy.ColorBalanceCMYOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.colorbalancehsl.ColorBalanceHSLOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.colorbalancergb.ColorBalanceRGBOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.colortable.ColorTableOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.contrast.ContrastOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.equalization.EqualizationOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.grayscale.GrayScaleOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.hsltorgb.HSLToRGBOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.rgbtocmyk.RGBToCMYKOperationFactory;
+import org.gvsig.raster.lib.legend.impl.operations.rgbtohsl.RGBToHSLOperationFactory;
+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 used to initialize Raster Layer.
+ * Probably should be integrated in MapContextLibrary
+ *
+ */
+public class MapContextRasterLibrary extends AbstractLibrary {
+    final static private Logger LOG = LoggerFactory.getLogger(MapContextRasterLibrary.class);
+
+    @Override
+    public void doRegistration() {
+        registerAsAPI(MapContextRasterLibrary.class);
+        require(DALLibrary.class);
+        require(CompatLibrary.class);
+    }
+
+    @Override
+    protected void doInitialize() throws LibraryException {
+         RasterLegendLocator.registerRasterLegendManager(DefaultRasterLegendManager.class);
+
+    }
+
+    @Override
+    protected void doPostInitialize() throws LibraryException {
+        MapContextManager manager = MapContextLocator.getMapContextManager();
+        manager.registerLayer(RasterStore.class, DefaultRasterLayer.class);
+        
+        Caller caller = new DefaultCaller();
+        caller.add( new DefaultRasterLayer.RegisterPersistence() );
+
+        if( !caller.call() ) {
+            throw new LibraryException(MapContextLibrary.class, caller.getExceptions());
+        }
+
+        // Register persistent definition
+        DefaultColorTableClass.registerPersistence();
+        DefaultColorTable.registerPersistence();
+        DefaultColorInterpretation.registerPersistence();
+        DefaultRasterLegend.registerPersistence();
+        DefaultTransparency.registerPersistence();
+        DefaultTransparencyRange.registerPersistence();
+
+        // Register ColorTableIO factories
+        RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager();
+        rasterLegendManager.registerColorTableIOFactory(gvSIGColorTableIO.NAME,
+            new gvSIGColorTableIOFactory());
+        rasterLegendManager.registerColorTableIOFactory(GimpGradientColorTableIO.NAME,
+            new GimpGradientColorTableIOFactory());
+        rasterLegendManager.registerColorTableIOFactory(GimpPaletteColorTableIO.NAME,
+            new GimpPaletteColorTableIOFactory());
+
+        OperationManager operationManager = BufferLocator.getOperationManager();
+        operationManager.registerOperationFactory(new BrightnessOperationFactory());
+        operationManager.registerOperationFactory(new ContrastOperationFactory());
+        operationManager.registerOperationFactory(new GrayScaleOperationFactory());
+
+        operationManager.registerOperationFactory(new ColorBalanceRGBOperationFactory());
+        operationManager.registerOperationFactory(new ColorBalanceCMYOperationFactory());
+        operationManager.registerOperationFactory(new ColorBalanceHSLOperationFactory());
+
+        operationManager.registerOperationFactory(new RGBToCMYKOperationFactory());
+        operationManager.registerOperationFactory(new RGBToHSLOperationFactory());
+        operationManager.registerOperationFactory(new HSLToRGBOperationFactory());
+        operationManager.registerOperationFactory(new CMYKToRGBOperationFactory());
+
+        operationManager.registerOperationFactory(new EqualizationOperationFactory());
+//        BufferLocator.getBufferManager().registerOperationFactory(new PansharpeningOperationFactory());
+
+        operationManager.registerOperationFactory(new ColorTableOperationFactory());
+
+        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+        mapContextManager.registerLegend(
+                DefaultRasterLegend.LEGEND_NAME, 
+                DefaultRasterLegend.class);
+        mapContextManager.setDefaultRasterLegend(DefaultRasterLegend.LEGEND_NAME);        
+
+
+    }
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/java/org/gvsig/fmap
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,2 @@
+org.gvsig.fmap.mapcontext.layers.order.impl.BasicLayerOrderLibrary
+org.gvsig.fmap.mapcontext.raster.impl.MapContextRasterLibrary
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/hsltorgb/HSLToRGBOperationParameters.xml	(revision 46118)
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="HSLToRGBOperationParameters">
+       <extends>
+      </extends>
+      <description>HSLToRGBOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtohsl/RGBToHSLOperationParameters.xml	(revision 46118)
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="RGBToHSLOperationParameters">
+       <extends>
+      </extends>
+      <description>RGBToHSLOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/equalization/EqualizationOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/equalization/EqualizationOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/equalization/EqualizationOperationParameters.xml	(revision 46118)
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="EqualizationOperationParameters">
+       <extends>
+      </extends>
+      <description>EqualizationOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true"
+          group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="statistics" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.buffer.api.statistics.Statistics" hidden="true">
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colortable/ColorTableOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colortable/ColorTableOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colortable/ColorTableOperationParameters.xml	(revision 46118)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="ColorTableOperationParameters">
+       <extends>
+      </extends>
+      <description>ColorTableOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/brightness/BrightnessOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/brightness/BrightnessOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/brightness/BrightnessOperationParameters.xml	(revision 46118)
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="BrightnessOperationParameters">
+      <extends>
+      </extends>
+      <description>BrightnessOperationParameters</description>
+      <fields>
+        <field name="brightness" type="integer" mandatory="true" group="Basic"
+          minValue="-255" maxValue="255" defaultValue="0">
+          <description>Integer value [-255,255]</description>
+        </field>
+        <field name="color_interpretation" type="object" mandatory="true"
+          group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/grayscale/GrayScaleOperationParameters.xml	(revision 46118)
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="GrayScaleOperationParameters">
+       <extends>
+      </extends>
+      <description>GrayScaleOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancehsl/ColorBalanceHSLOperationParameters.xml	(revision 46118)
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="ColorBalanceHSLOperationParameters">
+       <extends>
+      </extends>
+      <description>ColorBalanceHSLOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="hue" type="double" mandatory="true" group="Basic" minValue="-180" maxValue="180" defaultValue="0">
+          <description>Double value [-180,180]</description>
+        </field>
+        <field name="lightness" type="double" mandatory="true" group="Basic" minValue="-100" maxValue="100" defaultValue="0">
+          <description>Double value [-100,100]</description>
+        </field>
+        <field name="saturation" type="double" mandatory="true" group="Basic" minValue="-100" maxValue="100" defaultValue="0">
+          <description>Double value [-100,100]</description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancecmy/ColorBalanceCMYOperationParameters.xml	(revision 46118)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="ColorBalanceCMYOperationParameters">
+       <extends>
+      </extends>
+      <description>ColorBalanceCMYOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="cyan" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="0">
+          <description>Integer value [0,100]</description>
+        </field>
+        <field name="magenta" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="0">
+          <description>Integer value [0,100]</description>
+        </field>
+        <field name="yellow" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="0">
+          <description>Integer value [0,100]</description>
+        </field>
+        <field name="luminosity" type="boolean" mandatory="false" group="Basic" defaultValue="false">
+          <description>Marked if it must respect the luminosity</description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/contrast/ContrastOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/contrast/ContrastOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/contrast/ContrastOperationParameters.xml	(revision 46118)
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="ContrastOperationParameters">
+      <extends>
+      </extends>
+      <description>ContrastOperationParameters</description>
+      <fields>
+        <field name="contrast" type="integer" mandatory="true" group="Basic"
+          minValue="-255" maxValue="255" defaultValue="0">
+          <description>Integer value [-255,255]</description>
+        </field>
+        <field name="color_interpretation" type="object" mandatory="true"
+          group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/pansharpening/PansharpeningOperationParameters.xml	(revision 46118)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="PansharpeningOperationParameters">
+       <extends>
+      </extends>
+      <description>PansharpeningOperationParameters</description>
+      <fields>
+        <field name="statistics" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.buffer.api.statistics.Statistics">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+        </field>
+        <!-- <field name="bands_to_process" type="List" typeOfItems="integer" mandatory="false" group="Basic">
+          <description></description>
+        </field> -->
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/colorbalancergb/ColorBalanceRGBOperationParameters.xml	(revision 46118)
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="ColorBalanceRGBOperationParameters">
+       <extends>
+      </extends>
+      <description>ColorBalanceRGBOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="red" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="50">
+          <description>Integer value [-100,100]</description>
+        </field>
+        <field name="green" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="50">
+          <description>Integer value [-100,100]</description>
+        </field>
+        <field name="blue" type="integer" mandatory="true" group="Basic" minValue="0" maxValue="100" defaultValue="50">
+          <description>Integer value [-100,100]</description>
+        </field>
+        <field name="luminosity" type="boolean" mandatory="false" group="Basic" defaultValue="false">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>
+
+
+      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/cmyktorgb/CMYKToRGBOperationParameters.xml	(revision 46118)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="CMYKToRGBOperationParameters">
+       <extends>
+      </extends>
+      <description>CMYKToRGBOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationParameters.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationParameters.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig/raster/lib/legend/impl/operations/rgbtocmyk/RGBToCMYKOperationParameters.xml	(revision 46118)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+
+    <class name="RGBToCMYKOperationParameters">
+       <extends>
+      </extends>
+      <description>RGBToCMYKOperationParameters</description>
+      <fields>
+        <field name="color_interpretation" type="object" mandatory="true" group="Basic" classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation" hidden="true">
+          <description></description>
+          <tags>
+            <valueItem name="lookupParameter" value="output_color_interpretation" />
+          </tags>
+          <description></description>
+        </field>
+        <field name="copy_unprocessed_bands" type="boolean" mandatory="false"
+          defaultValue="true" group="Basic">
+          <description>Marked if it must copy the unprocessed bands</description>
+        </field>
+        <field name="output_color_interpretation" type="object" mandatory="false" group="Basic"
+          classOfValue="org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation"
+          hidden="true">
+          <description></description>
+        </field>      </fields>
+    </class>
+
+  </classes>
+</definitions>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/src/main/resources/org/gvsig
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.impl
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml	(revision 46118)
@@ -0,0 +1,24 @@
+<?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.344</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.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/pom.xml	(revision 46118)
@@ -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.desktop.compat.cdc</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop</artifactId>
+      <version>2.0.344</version>
+  </parent>
+
+  <build>
+      <plugins>
+    
+      </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>
+      <module>org.gvsig.basicformats</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.344/org.gvsig.desktop.compat.cdc/pom.xml
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml	(revision 46118)
@@ -0,0 +1,49 @@
+<?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.344</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>
+
+  <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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wms/wms	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdeeWithoutSchema.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/Municipis_NOschema.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-lines.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-polygons.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GMLNomenclatorIdee.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/GML-points.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/gml/PeticionWFS.gml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsGetFeature.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-AtlasAvesGetFeature.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-dmsolutionsDescribeFeatureType.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0SercartlinGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetCapabilities.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinGetFeature.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0IDEEDescribeFeatureType.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType1.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-IDEEDescribeFeatureType.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-sercartlinDescribeFeatureType.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/wfs/WFS-1_1_0TNTDescribeFeatureType2.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/Discovery_Networks.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/geography_awareness_quiz.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/TurnHere_films.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gorliz.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_Samples.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/earthquake_public.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/searchwithin.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/KML_PlaceMarket.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/test/resources/kml/gcb-feed.kml	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ILayer.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/IRasterClient.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCServiceInformation.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCClientOperation.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/OGCProtocolHandler.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/ogc/request/OGCRequest.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IQueue.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveEvent.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveQueue.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RetrieveListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRequest.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTask.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/package.html	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/IRunnableTask.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClient.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RemoteClientStatus.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/RasterClient.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/EncodingXMLParser.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DumbXMLParser.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/CapabilitiesTags.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DescribeCoverageTags.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/Utilities.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/BoundaryBox.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/DateTime.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/ExceptionTags.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/utils/PropertyManager.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/ServerErrorException.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc/org.gvsig.remoteclient
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.compat.cdc
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.directory


Index: tags/org.gvsig.desktop-2.0.344/src/main/sh/make-gvsig
===================================================================
--- tags/org.gvsig.desktop-2.0.344/src/main/sh/make-gvsig	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/src/main/sh/make-gvsig	(revision 46118)
@@ -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.344/src/main/sh/make-gvsig
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/src/main/assembly/gvsig-root-folder-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/src/main/assembly/gvsig-root-folder-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/src/main/assembly/gvsig-root-folder-package.xml	(revision 46118)
@@ -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.344/src/main/assembly/gvsig-root-folder-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/src/main/svn/svn.ignore.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.344/src/main/svn/svn.ignore.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/src/main/svn/svn.ignore.sh	(revision 46118)
@@ -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.344/src/main/svn/svn.ignore.files
===================================================================
--- tags/org.gvsig.desktop-2.0.344/src/main/svn/svn.ignore.files	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/src/main/svn/svn.ignore.files	(revision 46118)
@@ -0,0 +1,8 @@
+.project
+.classpath
+.settings
+.settings/**
+target
+target/**
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.framework/pom.xml
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/test/java/org/gvsig/andami/AllTests.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/assembly/gvsig-andami-package.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/Help.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/HelpPanel.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/help/AndamiHelpPanel.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoManager.java	(revision 46118)
@@ -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.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);
+
+    public ActionInfo createAction(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.
+     * If an action with the same name is in the system and override is false
+     * then actions are merged and the merged action is returned and remain 
+     * in the system. If override is true and the action is already registered
+     * the new action replace the previous action.
+     *
+     * @param action
+     * @param override
+     * @return 
+     */
+    public ActionInfo registerAction(ActionInfo action, boolean override);
+
+    /**
+     * Utility method that call registerAction with override to false.
+     * 
+     * @param action
+     * @return 
+     */
+    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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfo.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/ActionInfoStatusCache.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoStatusCache.java	(revision 46118)
@@ -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.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();
+	}
+
+        @Override
+	public void clear() {
+		extensions = new HashMap<>();
+		actions = new HashMap<>();
+	}
+	
+        private SimpleIdentityManager getIdentityManager() {
+            if( this.identityManager == null ) {
+                this.identityManager = ToolsLocator.getIdentityManager();
+            }
+            return this.identityManager;
+        }
+
+        private SimpleIdentity getCurrentUser() {
+            return this.getIdentityManager().getCurrentIdentity();
+        }
+
+        @Override
+	public boolean isEnabled(ActionInfo action) {
+                if( !this.getCurrentUser().isAuthorized(action.getName()) ) {
+                    return false;
+                }
+                if (!action.isActive()) {
+                    //logger.info("isEnabled(), action {} not active", 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 = action.isEnabled();
+			}
+		} else {
+			status = extensions.get(extension);
+			if( status == null ) {
+				status = new Status();
+				extensions.put(extension, status);
+			}
+			if( status.isEnabled == null ) {
+				status.isEnabled = extension.isEnabled();
+			}
+		}
+		return status.isEnabled;
+	}
+
+        @Override
+	public boolean isVisible(ActionInfo action) {
+                if( !this.getCurrentUser().isAuthorized(action.getName()) ) {
+                    return false;
+                }
+                if (!action.isActive()) {
+                    //logger.info("isVisible(), action {} not active", 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 = action.isVisible();
+			}
+		} else {
+			status = extensions.get(extension);
+			if( status == null ) {
+				status = new Status();
+				extensions.put(extension, status);
+			}
+			if( status.isVisible == null ) {
+				status.isVisible = extension.isVisible();
+			}
+		}
+		return status.isVisible;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfoManager.java	(revision 46118)
@@ -0,0 +1,209 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For 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.io.File;
+import java.io.FileInputStream;
+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 java.util.Properties;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.PluginsLocator;
+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;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultActionInfoManager implements ActionInfoManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultActionInfoManager.class);
+
+    private final Map<String, ActionInfo> actions = new HashMap<>();
+    private int anonymousCounter = 1;
+    private Properties activeStates = null;
+
+    @Override
+    public ActionInfo createAction(Class<? extends IExtension> extension, String name, String text, String command, String icon, String accelerator, long position, String tip) {
+        String actionName = name;
+        if ( StringUtils.isBlank(actionName) ) {
+            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;
+    }
+
+    @Override
+    public ActionInfo createAction(IExtension extension, String name, String text, String command, String icon, String accelerator, long position, String tip) {
+        String actionName = name;
+        if ( StringUtils.isBlank(actionName) ) {
+            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;
+    }
+
+    @Override
+    public ActionInfo registerAction(ActionInfo action) {
+        return this.registerAction(action, false);
+    }
+
+    @Override
+    public ActionInfo registerAction(ActionInfo action, boolean override) {
+        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) {
+            if( override ) {
+                this.actions.put(action.getName(), action);
+            } else {
+                ((DefaultActionInfo) previous).merge(action);
+                action = previous;
+            }
+        } else {
+            this.actions.put(action.getName(), action);
+            SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+            identityManager.registerAction(action.getName());
+        }
+        this.updateActiveState(action);
+        return action;
+    }
+
+    private void updateActiveState(ActionInfo action) {
+        if( activeStates==null ) {
+            this.activeStates = new Properties();
+            File home = PluginsLocator.getManager().getApplicationHomeFolder();
+            File states = new File(home,"actions-states.properties");
+            if( states.exists() ) {
+                FileInputStream fis = null;
+                try {
+                    fis = new FileInputStream(states);
+                    this.activeStates.load(fis);
+                } catch (Exception ex) {
+                    LOGGER.warn("Can't load actions states from '"+states.getAbsolutePath()+"'.",ex);
+                } finally  {
+                    IOUtils.closeQuietly(fis);
+                }
+            }
+        }
+        Boolean active = BooleanUtils.toBooleanObject((String) this.activeStates.getProperty(action.getName(),"true"));
+        action.setActive(active);
+    }
+    
+    @Override
+    public ActionInfo getAction(String name) {
+        if ( StringUtils.isEmpty(name) ) {
+            try {
+                throw new IllegalArgumentException();
+            } catch (IllegalArgumentException e) {
+                LOGGER.info("getAction(null/empty) return null.", e);
+                return null;
+            }
+        }
+        return this.actions.get(name);
+    }
+
+    @Override
+    public Iterator<ActionInfo> getActions() {
+        List<ActionInfo> theActions = new ArrayList<>();
+        theActions.addAll(this.actions.values());
+        Collections.sort(theActions, (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 theActions.iterator();
+    }
+
+    @Override
+    public ActionInfoStatusCache createActionStatusCache() {
+        return new DefaultActionInfoStatusCache();
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void execute(String actionName, Object[] parameters) {
+        ActionInfo action = this.actions.get(actionName);
+        if (action == null) {
+            return;
+        }
+        action.execute(parameters);
+    }
+
+    @Override
+    public ActionInfo getTranslated(ActionInfo actionInfo) {
+        return new TranslatedActionInfo(actionInfo);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/TranslatedActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/TranslatedActionInfo.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/actioninfo/impl/DefaultActionInfo.java	(revision 46118)
@@ -0,0 +1,503 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For 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.Extension;
+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(IExtension extension, String name,
+            String text, String command, String icon, String accelerator,
+            long position, String tip) {
+        this.extensionClass = extension.getClass();
+        this.extension = 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();
+    }
+    
+    DefaultActionInfo(Class<? extends IExtension> extensionClass, String name,
+            String text, String command, String icon, String accelerator,
+            long position, String tip) {
+        this.extensionClass = extensionClass;
+        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() {
+        if( this.extension instanceof Extension ) {
+            return ((Extension)this.extension).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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ProjectionContainerManager.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/IconThemeHelper.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Utilities.java	(revision 46118)
@@ -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.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.gvsig.tools.ToolsLocator;
+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;
+
+    private static final Logger logger = LoggerFactory.getLogger(Utilities.class.getName());
+
+    /**
+     * @deprecated use TemporaryFolderManager
+     */
+    public static final String TEMPDIRECTORYPATH = getTempDirectory();
+
+    /**
+     * @deprecated use TemporaryFolderManager.getTemporaryFolder()
+     */
+    public static String getTempDirectory() {
+        return ToolsLocator.getFoldersManager().getTemporaryFolder().getAbsolutePath();
+    }
+
+    /**
+     * Cleans every temporal file previously downloaded.
+     * 
+     * @deprecated use TemporaryFolderManager.cleanAll()
+     */
+    public static void cleanUpTempFiles() {
+        ToolsLocator.getFoldersManager().cleanTemporaryFiles();
+    }
+
+    /**
+     * 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
+     * @return 
+     * @throws java.io.IOException
+     * 
+     * @deprecated use TemporaryFolderManager.createTemporaryFile()
+     */
+    public static File createTemp(String fileName, String data) throws IOException {
+        return ToolsLocator.getFoldersManager().createTemporaryFile(fileName, data);
+    }
+
+    /**
+     * 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
+     * 
+     * @deprecated use TemporaryFolderManager.createTemporaryFolder()
+     */
+    public static String createTempDirectory() {
+        return ToolsLocator.getFoldersManager().createTemporaryFolder().getAbsolutePath();
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * 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);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java	(revision 46118)
@@ -0,0 +1,309 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For 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.net.URI;
+import java.util.Iterator;
+import java.util.List;
+import static org.gvsig.andami.Launcher.appName;
+
+import org.gvsig.andami.firewall.FirewallConfiguration;
+import org.gvsig.andami.impl.UnsavedDataException;
+import org.gvsig.andami.plugins.ExclusiveUIExtension;
+import org.gvsig.andami.plugins.IExtension;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.installer.lib.api.PackageInfo;
+import org.gvsig.installer.lib.api.Version;
+
+public interface PluginsManager {
+
+    public String getApplicationName();
+
+    /**
+     * 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);
+
+    public File getPluginHomeFolder(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);
+
+    /**
+     * Gets the instance of the extension whose class name is provided.
+     *
+     * @param extension, class name of the extension to retrieve
+     *
+     * @return The instance of the extension, or null if the instance does
+     * not exist.
+     */
+    public IExtension getExtension(String 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();
+
+    /**
+     * Return a list of unsaved data
+     *
+     * @return
+     */
+    public List<IUnsavedData> getUnsavedData();
+
+    /**
+     * Save the provided unsaved data as parameter
+     *
+     * @param unsavedData
+     * @throws UnsavedDataException
+     */
+    public void saveUnsavedData(List<IUnsavedData> unsavedData) throws UnsavedDataException;
+
+    /**
+     * Gets the temporary folder of the plugins framework.
+     *
+     * @return the temp folder
+     */
+    public File getTempFolder();
+
+    /**
+     * Get the file name in the temporary folder of the plugins framework.
+     * @param name
+     * @return
+     */
+    public File getTempFile(String name);
+
+    /**
+     * Create a unique file name in the temporary folder of the plugins framework.
+     *
+     * @param name base name used for create the unique file name
+     * @param sufix to add the the unique file name
+     * @return
+     */
+    public File getTempFile(String name, String sufix);
+
+    /**
+     * Browses to a given URI
+     * @param uri
+     * @return
+     */
+    public boolean desktopBrowse(URI uri);
+
+    /**
+     * Open a given file
+     * @param file
+     * @return
+     */
+    public boolean desktopOpen(File file);
+
+
+    public Arguments getArguments();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstallerFactory.java	(revision 46118)
@@ -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.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);
+            PluginsLocator.getLocaleManager().updateInstalledLocales();
+
+
+            return Boolean.TRUE;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstaller.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/translations/TranslationsInstaller.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstaller.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstaller.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstaller.java	(revision 46118)
@@ -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.andami.installer.icontheme;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+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.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.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class IconThemeInstaller extends AbstractProvider implements InstallPackageProvider {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(IconThemeInstaller.class);
+    
+    private final int BUFFER = 2048;
+    
+    public IconThemeInstaller(ProviderServices providerServices) {
+            super(providerServices);
+    }
+
+    @Override
+    public void install(File applicationFolder, InputStream inputStream, PackageInfo packageInfo) throws InstallPackageServiceException {
+        File folder = null;
+        try {
+            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
+            folder = iconThemeManager.getRepository().asFile();        
+
+            LOGGER.info("Installing package '"+(packageInfo==null?"NULL":packageInfo.getCode())+"' in folder '"+(folder==null?"NULL":folder.getAbsolutePath())+"'.");
+            if (!folder.exists()) {
+                String s = "Can install package '"+packageInfo.getCode()+"', install folder '"+folder+"' does not exists.";
+		LOGGER.warn(s);
+		throw new RuntimeException(s);
+            }
+            decompress(inputStream, folder);
+        } catch (Exception e) {
+            try {
+                LOGGER.warn("Can install package '"+(packageInfo==null?"NULL":packageInfo.getCode())+"' in folder '"+(folder==null?"NULL":folder.getAbsolutePath())+"'.", e);
+                // if there is an exception, installLater is called
+                installLater(applicationFolder, inputStream, packageInfo);
+            } catch (IOException e1) {
+                LOGGER.warn("Can install package '"+(packageInfo==null?"NULL":packageInfo.getCode())+"' in folder '"+(folder==null?"NULL":folder.getAbsolutePath())+"'.", e);
+                throw new InstallPackageServiceException(e1);
+            }
+        }
+
+    }
+
+    private void decompress(InputStream inputStream, File folder) 
+        throws ZipException, IOException, InstallerInfoFileException {
+
+        ZipInputStream zis;
+        ZipEntry entry;
+        byte data[] = new byte[BUFFER];
+        int count;
+
+        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());
+                    try (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();
+                    }
+                }
+            }
+            zis.close();
+        } catch(Exception ex) {
+                LOGGER.warn("Problems uncompresing 'translations' (last entry '"+entryName+"'.",ex);
+                throw ex;
+        } finally {
+            taskStatus.remove();
+
+        }
+    }
+
+    
+    @Override
+    public void installLater(File applicationDirectory, InputStream inputStream, PackageInfo packageInfo) throws InstallPackageServiceException, IOException {
+        LOGGER.warn("installLater is not implementes.");
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstallerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstallerFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstallerFactory.java	(revision 46118)
@@ -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.andami.installer.icontheme;
+
+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 IconThemeInstallerFactory extends
+        AbstractProviderFactory {
+
+    public static final String INSTALLER_NAME = "icontheme";
+    public static final String INSTALLER_DESCRIPTION = "";
+
+    private DynClass dynclass;
+
+    @Override
+    protected DynClass createParametersDynClass() {
+        if ( dynclass == null ) {
+            initialize();
+        }
+        return dynclass;
+    }
+
+    @Override
+    protected Provider doCreate(DynObject parameters, ProviderServices services) {
+        return new IconThemeInstaller(services);
+    }
+
+    @Override
+    public void initialize() {
+        if ( dynclass == null ) {
+            DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+            dynclass = dynObjectManager.createDynClass(
+                    INSTALLER_NAME,
+                    INSTALLER_DESCRIPTION
+            );
+            dynObjectManager.add(dynclass);
+        }
+    }
+
+    public static class RegisterIconThemeInstaller implements Callable {
+
+        @Override
+        public Object call() throws Exception {
+            ProviderManager providerManager = InstallerProviderLocator.getProviderManager();
+            providerManager.addProviderFactory(new IconThemeInstallerFactory());
+            return true;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/installer/icontheme/IconThemeInstallerFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultArguments.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultArguments.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultArguments.java	(revision 46118)
@@ -0,0 +1,138 @@
+package org.gvsig.andami.impl;
+
+import java.time.LocalDate;
+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.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.Arguments;
+import org.gvsig.tools.dataTypes.DataTypeUtils;
+
+public class DefaultArguments implements Arguments {
+
+    private final String[] args;
+    protected Map<String, String> flags;
+    protected List<String> parameters;
+
+    public DefaultArguments(String args[]) {
+        this.args = args;
+        this.flags = new HashMap<>();
+        this.parameters = new ArrayList<>();
+        this.parse();
+    }
+
+    private void parse() {
+        String name;
+        String value;
+        boolean acceptFlags = true;
+        for( String arg : args ) {
+            if( acceptFlags ) {
+                if( arg.equals("--") ) {
+                    acceptFlags = false;
+                    continue;
+                }
+                if( arg.startsWith("--") ) {
+                    int n = arg.indexOf("=");
+                    if( n < 0 ) {
+                        name = arg.substring(2);
+                        value = "true";
+                    } else {
+                        name = arg.substring(2, n);
+                        value = arg.substring(n + 1);
+                    }
+                    this.flags.put(name, value);
+                } else {
+                    this.parameters.add(arg);
+                }
+            } else {
+                this.parameters.add(arg);
+            }
+        }
+    }
+
+    @Override
+    public String get(String name) {
+        return this.flags.get(name);
+    }
+
+    @Override
+    public Object get(String name, Object defaultValue) {
+        String value = this.get(name);
+        if( defaultValue == null ) {
+            return value;
+        }
+        if( StringUtils.isBlank(value) ) {
+            return defaultValue;
+        }
+        if( defaultValue instanceof CharSequence ) {
+            return value;
+        }
+        if( defaultValue instanceof Integer ) {
+            return DataTypeUtils.toInteger(value, (Integer) defaultValue);
+        }
+        if( defaultValue instanceof Long ) {
+            return DataTypeUtils.toLong(value, (Long) defaultValue);
+        }
+        if( defaultValue instanceof Boolean ) {
+            try {
+                return DataTypeUtils.toBoolean(value, (Boolean) defaultValue);
+            } catch(Throwable th) {
+                return BooleanUtils.toBoolean(value);
+            }
+        }
+        if( defaultValue instanceof Double ) {
+            return DataTypeUtils.toDouble(value, (Double) defaultValue);
+        }
+        if( defaultValue instanceof Float ) {
+            return DataTypeUtils.toDouble(value, (Float) defaultValue);
+        }
+        if( defaultValue instanceof Date ) {
+            return DataTypeUtils.toDate(value, (Date) defaultValue);
+        }
+        return value;
+    }
+
+    @Override
+    public boolean contains(String name) {
+        return this.flags.containsKey(name);
+    }
+
+    @Override
+    public boolean contains(String name, String value) {
+        String x = this.flags.get(name);
+        if( x==null ) {
+            return false;
+        }
+        return StringUtils.equalsIgnoreCase(value, x);
+    } 
+
+    @Override
+    public List<String> parameters() {
+        return Collections.unmodifiableList(parameters);
+    }
+
+    @Override
+    public Map<String, String> flags() {
+        return Collections.unmodifiableMap(flags);
+    }
+
+    @Override
+    public int size() {
+        return this.parameters.size();
+    }
+
+    @Override
+    public String get(int n) {
+        return this.parameters.get(n);
+    }
+
+    @Override
+    public Iterator<String> iterator() {
+        return this.parameters.iterator();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/UnsavedDataException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/UnsavedDataException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/UnsavedDataException.java	(revision 46118)
@@ -0,0 +1,36 @@
+package org.gvsig.andami.impl;
+
+import java.util.List;
+
+import org.gvsig.andami.plugins.status.IUnsavedData;
+import org.gvsig.tools.exception.BaseException;
+
+public class UnsavedDataException extends BaseException {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 7764186865062216316L;
+    private final static String MESSAGE_FORMAT = "Has not been able to save the following data: %(errors)\n";
+    private final static String MESSAGE_KEY = "_UnsavedDataException";
+    private List<IUnsavedData> errors;
+
+    public UnsavedDataException(List<IUnsavedData> errors) {
+        super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
+        this.errors = errors;
+
+        StringBuilder errorsString = new StringBuilder();
+        for (IUnsavedData error : errors) {
+            errorsString.append(" - ");
+            errorsString.append(error.getResourceName());
+            errorsString.append(" -- ");
+            errorsString.append(error.getDescription());
+            errorsString.append("\n");
+        }
+        setValue("errors", errorsString);
+    }
+
+    public List<IUnsavedData> getUnsavedData(){
+        return errors;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultLocaleManager.java	(revision 46118)
@@ -0,0 +1,491 @@
+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();
+        if( currentLocale==null ) {
+            // Is run from test, currentLocale is null.
+            currentLocale = Locale.getDefault();
+        }
+        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();
+        if( config != null ) {
+            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 void updateInstalledLocales(){
+        installedLocales.addAll(getAllLocalesFromPackages());
+        storedInstalledLocales = false;
+        storeInstalledLocales();
+    }
+
+    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) {
+        if( locale == null ) {
+            return null;
+        }
+        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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java	(revision 46118)
@@ -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.andami.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+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.Arguments;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.Utilities;
+import org.gvsig.andami.config.generate.AndamiConfig;
+import org.gvsig.andami.config.generate.Plugin;
+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.andami.plugins.status.IExtensionStatus;
+import org.gvsig.andami.plugins.status.IUnsavedData;
+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);
+    }
+
+    public IExtension getExtension(String extension) {
+        return Launcher.getExtensionByName(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) {
+        if (!(extension.getClassLoader() instanceof PluginClassLoader)) {
+            return null;
+        }
+        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);
+        }
+        ClassLoader loader = obj.getClass().getClassLoader();
+        if( loader instanceof PluginClassLoader ) {
+            String pluginName = ((PluginClassLoader)loader).getPluginName();
+            return this.getPlugin(pluginName);
+        }
+        return null;
+    }
+
+    @Override
+    public PluginServices getPlugin(String pluginName) {
+        return Launcher.getPluginServices(pluginName);
+    }
+    
+    @Override
+	public File getPluginHomeFolder(String pluginName) {
+        File folder = FileUtils.getFile( 
+            this.getApplicationHomeFolder(), "plugins", pluginName
+        );
+		if (!folder.exists()) {
+			folder.mkdirs();
+		}
+		return folder;
+	}    
+
+    @Override
+    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(3);
+                } catch (Exception exc) {
+                    // Ignore error
+                }
+                Collections.sort(startupTasks);
+                for ( int i = startupTasks.size() - 1; i >= 0; i-- ) {
+                    Task task = startupTasks.get(i);
+                    logger.info("Task ["+i+"] "+task.priority+", "+task.name+", in event thread "+task.in_event_thread);
+                }
+                for ( int i = startupTasks.size() - 1; i >= 0; i-- ) {
+                    Task task = startupTasks.get(i);
+                    task.run();
+                }
+                logger.info("Running startup tasks terminated.");
+            }
+        });
+        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;
+    }
+
+    public List<IUnsavedData> getUnsavedData() {
+        List<IUnsavedData> unsavedDatas = new ArrayList<IUnsavedData>();
+        Iterator<IExtension> extensions = getExtensions();
+        while(extensions.hasNext()){
+            IExtension extension = extensions.next();
+            IExtensionStatus status = extension.getStatus();
+            if(status != null && status.hasUnsavedData()){
+              IUnsavedData[] unsavedData = status.getUnsavedData();
+              if (unsavedData != null){
+                  unsavedDatas.addAll(Arrays.asList(unsavedData));
+              }
+            }
+        }
+        return unsavedDatas;
+    }
+
+    public void saveUnsavedData(List<IUnsavedData> unsavedData) throws UnsavedDataException {
+        List<IUnsavedData> errors = new ArrayList<IUnsavedData>();
+
+        for (Iterator iterator = unsavedData.iterator(); iterator.hasNext();) {
+            IUnsavedData itemUnsavedData = (IUnsavedData) iterator.next();
+            try {
+                itemUnsavedData.saveData();
+            } catch (Exception e) {
+                errors.add(itemUnsavedData);
+                logger.warn("Can't save '"+itemUnsavedData.getResourceName()+"'.",e);
+            }
+        }
+        if(!errors.isEmpty()){
+            throw new UnsavedDataException(errors);
+        }
+    }
+
+    @Override
+    public String getApplicationName() {
+        return Launcher.getApplicationName();
+    }
+
+    @Override
+    public File getTempFolder() {
+        return new File(Utilities.TEMPDIRECTORYPATH);
+    }
+
+    @Override
+    public File getTempFile(String name) {
+        return new File(Utilities.TEMPDIRECTORYPATH, name);
+    }
+
+    @Override
+    public File getTempFile(String name, String sufix) {
+        File tempFolder = new File(Utilities.TEMPDIRECTORYPATH);
+        if( !tempFolder.exists() ) {
+            try {
+                FileUtils.forceMkdir(tempFolder);
+            } catch(Throwable th) {
+                throw new RuntimeException(th);
+            }
+        }
+        long t = new Date().getTime();
+        String fname = String.format("%s-%x%x%s", name,t,sufix);
+        return new File(tempFolder,fname);
+    }
+
+    @Override
+    public boolean desktopBrowse(URI uri){
+        return DesktopApi.browse(uri);
+    }
+
+    @Override
+    public boolean desktopOpen(File file){
+        return DesktopApi.open(file);
+    }
+
+    @Override
+    public Arguments getArguments() {
+        return Launcher.getArguments();
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DesktopApi.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DesktopApi.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DesktopApi.java	(revision 46118)
@@ -0,0 +1,270 @@
+package org.gvsig.andami.impl;
+
+/*
+ * Based on portions of code of MightyPork, http://www.ondrovo.com/
+ * extracted from :
+ * http://stackoverflow.com/questions/18004150/desktop-api-is-not-supported-on-the-current-platform
+ */
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DesktopApi {
+
+    private static Logger logger = LoggerFactory.getLogger(DesktopApi.class);
+
+    public static boolean browse(URI uri) {
+
+        if ( browseDESKTOP(uri) ) {
+            return true;
+        }
+
+        if ( openSystemSpecific(uri.toString()) ) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public static boolean open(File file) {
+
+        if ( openDESKTOP(file) ) {
+            return true;
+        }
+
+        if ( openSystemSpecific(file.getPath()) ) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public static boolean edit(File file) {
+
+        if ( editDESKTOP(file) ) {
+            return true;
+        }
+
+        if ( openSystemSpecific(file.getPath()) ) {
+            return true;
+        }
+
+        return false;
+    }
+
+    private static boolean openSystemSpecific(String what) {
+
+        EnumOS os = getOs();
+
+        if (os.isLinux()) {
+//            if (runCommand("gnome-open", "%s", what)) {
+//                return true;
+//            }
+//            if (runCommand("kde-open", "%s", what)) {
+//                return true;
+//            }
+            if (runCommand("xdg-open", "%s", what)) {
+                return true;
+            }
+        }
+
+        if ( os.isMac() ) {
+            if ( runCommand("open", "%s", what) ) {
+                return true;
+            }
+        }
+
+        if ( os.isWindows() ) {
+            if ( runCommand("explorer", "%s", what) ) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private static boolean browseDESKTOP(URI uri) {
+
+        logOut("Trying to use Desktop.getDesktop().browse() with " + uri.toString());
+        try {
+            if ( !Desktop.isDesktopSupported() ) {
+                logErr("Platform is not supported.");
+                return false;
+            }
+
+            if ( !Desktop.getDesktop().isSupported(Desktop.Action.BROWSE) ) {
+                logErr("BROWSE is not supported.");
+                return false;
+            }
+
+            Desktop.getDesktop().browse(uri);
+
+            return true;
+        } catch (Throwable t) {
+            logErr("Error using desktop browse.", t);
+            return false;
+        }
+    }
+
+    private static boolean openDESKTOP(File file) {
+
+        logOut("Trying to use Desktop.getDesktop().open() with " + file.toString());
+        try {
+            if ( !Desktop.isDesktopSupported() ) {
+                logErr("Platform is not supported.");
+                return false;
+            }
+
+            if ( !Desktop.getDesktop().isSupported(Desktop.Action.OPEN) ) {
+                logErr("OPEN is not supported.");
+                return false;
+            }
+
+            Desktop.getDesktop().open(file);
+
+            return true;
+        } catch (Throwable t) {
+            logErr("Error using desktop open.", t);
+            return false;
+        }
+    }
+
+    private static boolean editDESKTOP(File file) {
+
+        logOut("Trying to use Desktop.getDesktop().edit() with " + file);
+        try {
+            if ( !Desktop.isDesktopSupported() ) {
+                logErr("Platform is not supported.");
+                return false;
+            }
+
+            if ( !Desktop.getDesktop().isSupported(Desktop.Action.EDIT) ) {
+                logErr("EDIT is not supported.");
+                return false;
+            }
+
+            Desktop.getDesktop().edit(file);
+
+            return true;
+        } catch (Throwable t) {
+            logErr("Error using desktop edit.", t);
+            return false;
+        }
+    }
+
+    private static boolean runCommand(String command, String args, String file) {
+
+        logOut("Trying to exec:\n   cmd = " + command + "\n   args = " + args + "\n   %s = " + file);
+
+        String[] parts = prepareCommand(command, args, file);
+
+        try {
+            Process p = Runtime.getRuntime().exec(parts);
+            if ( p == null ) {
+                return false;
+            }
+
+            try {
+                int retval = p.exitValue();
+                if ( retval == 0 ) {
+                    logErr("Process ended immediately.");
+                    return false;
+                } else {
+                    logErr("Process crashed.");
+                    return false;
+                }
+            } catch (IllegalThreadStateException itse) {
+                logErr("Process is running.");
+                return true;
+            }
+        } catch (IOException e) {
+            logErr("Error running command.", e);
+            return false;
+        }
+    }
+
+    private static String[] prepareCommand(String command, String args, String file) {
+
+        List<String> parts = new ArrayList<String>();
+        parts.add(command);
+
+        if ( args != null ) {
+            for ( String s : args.split(" ") ) {
+                s = String.format(s, file); // put in the filename thing
+
+                parts.add(s.trim());
+            }
+        }
+
+        return parts.toArray(new String[parts.size()]);
+    }
+
+    private static void logErr(String msg, Throwable t) {
+        logger.warn(msg,t);
+    }
+
+    private static void logErr(String msg) {
+        logger.warn(msg);
+    }
+
+    private static void logOut(String msg) {
+        logger.info(msg);
+    }
+
+    public static enum EnumOS {
+
+        linux, macos, solaris, unknown, windows;
+
+        public boolean isLinux() {
+
+            return this == linux || this == solaris;
+        }
+
+        public boolean isMac() {
+
+            return this == macos;
+        }
+
+        public boolean isWindows() {
+
+            return this == windows;
+        }
+    }
+
+    public static EnumOS getOs() {
+
+        String s = System.getProperty("os.name").toLowerCase();
+
+        if ( s.contains("win") ) {
+            return EnumOS.windows;
+        }
+
+        if ( s.contains("mac") ) {
+            return EnumOS.macos;
+        }
+
+        if ( s.contains("solaris") ) {
+            return EnumOS.solaris;
+        }
+
+        if ( s.contains("sunos") ) {
+            return EnumOS.solaris;
+        }
+
+        if ( s.contains("linux") ) {
+            return EnumOS.linux;
+        }
+
+        if ( s.contains("unix") ) {
+            return EnumOS.linux;
+        } else {
+            return EnumOS.unknown;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/StoreException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/AbstractPreferencePage.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreferenceExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/GenericDlgPreferences.java	(revision 46118)
@@ -0,0 +1,656 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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.TreeNode;
+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.gvsig.tools.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+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());
+                        Dimension dim = ToolsSwingUtils.ensureRowsCols(this, 27, 115);
+			viewInfo.setWidth(dim.width);
+			viewInfo.setHeight(dim.height);
+		}
+		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;
+		}
+        
+                SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+                if( ! identityManager.getCurrentIdentity().isAuthorized(IPreference.ACCESS_PREFERENCES_PAGE_AUTHORIZATION, page, page.getID()) ) {
+                    // throw new UnauthorizedException(IPreference.ACCESS_PREFERENCES_PAGE_AUTHORIZATION, page, 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<TreeNode> e = root.breadthFirstEnumeration();
+		while (e.hasMoreElements())
+		{
+            DefaultMutableTreeNode nodeAux = (DefaultMutableTreeNode)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;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/IPreference.java	(revision 46118)
@@ -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.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 {
+
+        public static final String ACCESS_PREFERENCES_PAGE_AUTHORIZATION = "property-page-access";
+
+	/**
+	 * 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/preferences/DlgPreferences.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/GlobalKeyEventDispatcher.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/DefaultFirewallConfiguration.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/firewall/FirewallConfiguration.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptionsDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiOptions.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/OptionDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Option.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Andami.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconThemeDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/IconTheme.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/PluginDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfigDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/Plugin.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/config/generate/AndamiConfig.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ConfigurationException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/MessageEvent.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/Messages.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/ProgressListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/messages/NotificationManager.java	(revision 46118)
@@ -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.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);
+        try {
+            dispatchError(err, e);
+        } catch(Exception ex) {
+            
+        }
+    }
+    
+    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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LocaleManager.java	(revision 46118)
@@ -0,0 +1,44 @@
+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);
+
+    /**
+     *
+     */
+    void updateInstalledLocales();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/splash/MultiSplashWindow.java	(revision 46118)
@@ -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.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.ActionEvent;
+import java.awt.event.ActionListener;
+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 javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import org.gvsig.andami.Launcher;
+
+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 
+    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 int[] 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;
+    private final boolean showsplash;
+
+    public MultiSplashWindow(Frame f, Theme theme, int progressBarStepCount) {
+        super(f);
+        this.showsplash = (boolean) Launcher.getArguments().get("splash",true);
+        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(this.showsplash);
+        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 int[1];
+            timers[0] = 1000;
+        }
+        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.setDelay(timers[current]);
+        repaint();
+        index++;
+
+        if (index >= numLogos) {
+            index = 0;
+        }
+    }
+
+    public void start() {
+        timer = new Timer(1000,new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                tick();
+            }
+        });
+        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();
+        timer = null;
+    }
+
+    /**
+     * 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(final String str) {
+        if( !SwingUtilities.isEventDispatchThread() ) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    @Override
+                    public void run() {
+                        process(str);
+                    }
+                });
+            } catch (Exception ex) {
+            }
+            return;
+        }
+        lblStatus.setText(str);
+        lblStatus.paintImmediately(lblStatus.getVisibleRect());
+        
+        this.progress++;
+        if( this.progress <= pb.getMaximum() ) {
+        	pb.setValue(this.progress);
+                pb.paintImmediately(pb.getVisibleRect());
+        }
+    }
+
+    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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/AndamiEventQueue.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/UnsavedDataPanel.java	(revision 46118)
@@ -0,0 +1,726 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+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 javax.swing.UIManager;
+
+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;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+
+
+/**
+ * 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");
+	private String prompt = PluginServices.getText(this, "select_resources_to_save_before_exit");
+
+
+
+	/**
+	 * This is the default constructor
+	 */
+	public UnsavedDataPanel(IUnsavedData[] unsavedDatalist) {
+		super();
+		initialize();
+		this.setUnsavedDataArray(unsavedDatalist);
+	}
+
+	public UnsavedDataPanel(String prompt) {
+        super();
+        initialize();
+        this.setUnsavedDataArray(new IUnsavedData[0]);
+        this.prompt = prompt;
+    }
+
+
+	/**
+	 * 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(prompt);
+		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.setPreferredSize(ToolsSwingUtils.ensureRowsCols(this, 15, 70));
+                
+	}
+
+	/**
+	 * 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);
+                        Dimension dim = pResources.getPreferredSize();
+                        dim.height = ToolsSwingUtils.rows2px(10);
+                        pResources.setPreferredSize(dim);
+		}
+		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, "save"));
+			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);
+                Dimension dim = this.getPreferredSize();
+		wi.setHeight(dim.height);
+		wi.setWidth(dim.width);
+		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.setBackground(UIManager.getColor("List.background"));
+			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();
+
+	}
+
+	   /**
+     * Set the resorces to ask for
+     *
+     * @param IUnsavedData[] resources pending to save
+     */
+    public void setUnsavedData(List<IUnsavedData> unsavedDatalist){
+        setUnsavedDataArray(unsavedDatalist.toArray(new IUnsavedData[0]));
+    }
+
+    public List<IUnsavedData> getSelectedsUnsavedDataList(){
+        return Arrays.asList(this.getSelectedsUnsavedData());
+    }
+
+	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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardAndami.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/wizard/WizardPanelWithLogo.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/theme/Theme.java	(revision 46118)
@@ -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.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 int[] getTimers() {
+        int[] tms = new int[timers.size()];
+
+        for ( int i = 0; i < tms.length; i++ ) {
+            tms[i] = Integer.parseInt(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;
+        }
+        if( s.contains(",")) {
+            String[] rgb = s.split(",");
+            Color color = new Color(Integer.valueOf(rgb[0]), Integer.valueOf(rgb[1]), Integer.valueOf(rgb[2]));
+            return color;
+        }
+        if( s.length()==6 ) {
+            Color color = new Color(
+                    Integer.parseInt(s.substring(0,2),16), 
+                    Integer.parseInt(s.substring(2,4),16), 
+                    Integer.parseInt(s.substring(4,6),16)
+            );
+            return color;
+        }
+        return null;
+    }
+
+    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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/DisablePluginsConflictingLayoutPanel.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/MDIManagerLoadException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/ToolsWindowManager.java	(revision 46118)
@@ -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.andami.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.Image;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.lang.reflect.InvocationTargetException;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+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.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.swing.impl.windowmanager.DefaultDialog;
+
+
+/**
+ * @author gvSIG Team
+ * @version $Id$
+ *
+ */
+public class ToolsWindowManager implements WindowManager_v2 {
+
+    private int getAlign(MODE mode) {
+        switch(mode) {
+        case DIALOG:
+            return GridBagConstraints.CENTER;
+        case TOOL:
+            return GridBagConstraints.FIRST_LINE_END;
+        case WINDOW:
+        default:
+            return GridBagConstraints.FIRST_LINE_START;
+        }
+    }
+    
+    @Override
+    public void showWindow(JComponent contents, String title, MODE mode) {
+        showWindow(contents, title, mode, getAlign(mode), null, 0);
+    }
+
+    @Override
+    public void showWindow(final JComponent contents, final String title, final MODE mode, final Image icon, final int flags) {
+        showWindow(contents, title, mode, getAlign(mode), icon, 0);
+    }
+//
+//    public void showWindow(final JComponent contents, final String title, final MODE mode, final int align) {
+//        this.showWindow(contents, title, mode, align, null, 0);
+//    }
+    
+    public void showWindow(final JComponent contents, final String title, final MODE mode, final int align, final Image icon, final int flags ) {
+        if( !SwingUtilities.isEventDispatchThread() ) {
+            switch(mode) {
+            case DIALOG:
+                {
+                    try {
+                        SwingUtilities.invokeAndWait(new Runnable() {
+                            @Override
+                            public void run() {
+                                showWindow(contents, title, mode, align, null, flags);
+                            }
+                        });
+                    } catch (InterruptedException | InvocationTargetException ex) {
+                    }
+                }
+                break;
+            case TOOL:
+            case WINDOW:
+            default:
+                SwingUtilities.invokeLater(new Runnable() {
+                    @Override
+                    public void run() {
+                        showWindow(contents, title, mode, align,null, flags);
+                    }
+                });
+                break;
+            }
+            return;
+        }
+        MDIManager manager = PluginServices.getMDIManager();
+        IWindow window = new Window(contents, title, mode, flags);
+        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;
+
+        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
+        public Window(JComponent contents, String title, MODE mode, int flags) {
+            int code;
+            if( flags == 0 ) {
+                code = WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE | WindowInfo.ICONIFIABLE;
+            } else {
+                code = flags;
+            }
+            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);
+            this.windowInfo.setNeedPack(true);
+
+            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));
+            }
+        }
+
+        @Override
+        public WindowInfo getWindowInfo() {
+            return this.windowInfo;
+        }
+
+        @Override
+        public Object getWindowProfile() {
+            return this.profile;
+        }
+
+        @Override
+        public void componentHidden(ComponentEvent arg0) {
+            // Close window when hide contents panel.
+            MDIManager manager = PluginServices.getMDIManager();
+            manager.closeWindow(this);
+        }
+
+        @Override
+        public void componentMoved(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        @Override
+        public void componentResized(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        @Override
+        public void componentShown(ComponentEvent arg0) {
+            // Do nothing
+        }
+
+        public JComponent getContents() {
+            return this.contents;
+        }
+
+    }
+    
+    
+    @Override
+    public Dialog createDialog(JComponent component, String title, String header, int buttons) {
+        DefaultDialog dialog = new DefaultDialog(component, title, header, buttons);
+        return dialog;
+    }
+
+    @Override
+    public void showWindow(JComponent contents, String title, MODE mode, Image icon) {
+        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, icon, 0);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NewStatusBar.java	(revision 46118)
@@ -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.andami.ui.mdiFrame;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Cursor;
+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.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.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        lblTexto.setText(Messages.getString("StatusBar.Aplicacion_iniciada"));
+
+        JPanel panelLeft = new JPanel();
+        panelLeft.setLayout(new BorderLayout(1,1));
+        panelLeft.add(lblIcon, BorderLayout.LINE_START);
+        panelLeft.add(lblTexto, BorderLayout.CENTER);
+//        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);
+        lblTexto.paintImmediately(lblTexto.getVisibleRect());
+        lblIcon.paintImmediately(lblIcon.getVisibleRect());
+    	estado = INFO;
+    }
+
+    
+    public void message(final String msg, final int messageType) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                	message(msg,messageType);
+                }
+            });
+            return;
+        }
+        messageTimer.stop();
+        if( StringUtils.isBlank(msg) ) {
+            this.clearMessage();
+            return;
+        }
+    	switch (messageType) {
+		case JOptionPane.ERROR_MESSAGE:
+			setErrorText(msg);
+			break;
+		case JOptionPane.WARNING_MESSAGE:
+			setWarningText(msg);
+			break;
+		default:
+		case JOptionPane.INFORMATION_MESSAGE:
+			setInfoText(msg);
+			break;
+		}
+        lblTexto.paintImmediately(lblTexto.getVisibleRect());
+        lblIcon.paintImmediately(lblIcon.getVisibleRect());
+    	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() || e.getClickCount()==1 ) {
+					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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MDIFrame.java	(revision 46118)
@@ -0,0 +1,2039 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For 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.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.apache.commons.lang3.StringUtils;
+
+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 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();
+        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);
+    }
+
+    private SelectableToolBar getToolBar(final String toolBarName, String pluginName) {
+        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 SelectableToolBar  addToolBar(final String toolBarName, String description, int position) {
+        SelectableToolBar toolBar = (SelectableToolBar) toolBarMap.get(toolBarName);
+        if( toolBar == null ) {
+            toolBar = new SelectableToolBar(toolBarName, description, position);
+            toolBar.setRollover(true);
+            toolBar.setAndamiVisibility(true);
+            toolBarMap.put(toolBarName, toolBar);
+            toolBars.add(toolBar);
+            
+        } else if( toolBar.getPosition() < 1 ) {
+            toolBar.setPosition(position);
+            
+        } else if( toolBar.getPosition() != position ) {
+            logger.warn("Add duplicate tool-bar ("+toolBarName+") with diferent position.");
+        }
+        
+        return toolBar;
+    }
+    
+    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, loader.getPluginName());
+        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();
+
+        ImageIcon image = PluginServices.getIconTheme().get(selectableTool.getIcon());
+        if ( image == null ) {
+            logger.warn("Unable to find icon '" + selectableTool.getIcon() + "'.");
+            image = PluginServices.getIconTheme().getDefaultIcon();
+        }
+
+        ToggleButtonModel buttonModel = new ToggleButtonModel();
+        JToolBarToggleButton btn = new JToolBarToggleButton(selectableTool.getText(), image);
+        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 = (ButtonGroup) buttonGroupMap.get(selectableTool.getGroup());
+        if ( group == null ) {
+            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();
+        }
+    }
+
+    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, loader.getPluginName());
+        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();
+
+        ImageIcon image = IconThemeHelper.getImageIcon(actionTool.getIcon());
+        if ( image == null ) {
+            logger.warn("Unable to find icon '" + actionTool.getIcon() + "'.");
+            image =  PluginServices.getIconTheme().getDefaultIcon();
+        }
+
+        JToolBarButton btn = new JToolBarButton(actionTool.getText(), image);
+        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();
+        }
+    }
+
+    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, action.getPluginName());
+        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) {
+        addTool(action, toolBarName, false);
+    }
+
+    public void addTool(final ActionInfo action, final String toolBarName, final boolean useText) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    addTool(action, toolBarName, useText);
+                }
+            });
+            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( useText ) {
+            btn.setText(action.getLabel());
+        }
+        if ( action.getTooltip() != null ) {
+            btn.setToolTip(i18nManager.getTranslation(action.getTooltip()));
+            btn.setToolTipKey(action.getTooltip());
+        }
+
+        SelectableToolBar jtb = getToolBar(toolBarName, action.getPluginName());
+        jtb.add(btn);
+
+        addControl(btn);
+
+    }
+
+    public void addSelectableTool(final ActionInfo action, final String toolBarName, final String groupName, final boolean useText) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        if ( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    addSelectableTool(action, toolBarName,groupName,useText);
+                }
+            });
+            return;
+        }
+
+        ButtonGroup group = (ButtonGroup) buttonGroupMap.get(groupName);
+        if ( group == null ) {
+            group = new ButtonGroup();
+            buttonGroupMap.put(groupName, group);
+        }
+        ToggleButtonModel buttonModel = new ToggleButtonModel();
+        buttonModel.setGroupName(groupName);
+
+        JToolBarToggleButton btn = new JToolBarToggleButton(action.getIcon());
+        btn.setModel(buttonModel);
+        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( useText ) {
+            btn.setText(action.getLabel());
+        }
+        if ( action.getTooltip() != null ) {
+            btn.setToolTip(i18nManager.getTranslation(action.getTooltip()));
+            btn.setToolTipKey(action.getTooltip());
+        }
+
+        SelectableToolBar jtb = getToolBar(toolBarName, action.getPluginName());
+        jtb.addButton(group, 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);
+        menuPadre.invalidate();
+        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();
+        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;
+        }
+        JMenuItem nuevoMenu = new JMenuItem();
+        nuevoMenu.setTextKey(label);
+        nuevoMenu.setText(i18nManager.getTranslation(label));
+        nuevoMenu.setName(action.getName());
+        if ( action.getIconName() != null ) {
+            nuevoMenu.setIcon(action.getIcon());
+        }
+        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.setToolTipKey(action.getTooltip());
+        }
+        nuevoMenu.setEnabled(true);
+        nuevoMenu.setVisible(true);
+        final ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
+        nuevoMenu.addActionListener((ActionEvent e) -> {
+            ActionInfo a = actionManager.getAction(action.getName());
+            if( a==null ) {
+                action.actionPerformed(e);
+            } else {
+                a.actionPerformed(e);
+            }
+        });
+        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();
+            if( StringUtils.isEmpty(actionName) ) {
+                continue;
+            }
+            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();
+                        if (visible && enabled){
+                            dropDownButton.updateMainButton();
+                        }
+                    } 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);
+                    }
+                }
+                //logger.info(control.getClass().getName() +" - " +control.getName() + " visible " + visible );
+                control.setEnabled(enabled);
+                control.setVisible(visible);
+            } catch (Throwable ex) {
+                // Catch exceptions 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;
+        }
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void messageDialog(String message, String[] messageArgs,
+            String title, int messageType, String msgid) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        helper.messageDialog(message, messageArgs, title, messageType, msgid);
+    }
+
+    @Override
+    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);
+    }
+
+    
+    @Override
+    public int confirmDialog(String message, String title, int optionType,
+            int messageType, String msgid) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.confirmDialog(message, title, optionType, messageType, msgid);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public String inputDialog(String message, String title) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.inputDialog(message, title);
+    }
+
+    @Override
+    public void showDialog(Component contents, String title) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        helper.showDialog(contents, title);
+    }
+
+    @Override
+    public Component createComponent(Class<? extends Component> theClass,
+            Object... parameters) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.createComponentWithParams(theClass, parameters);
+    }
+
+    @Override
+    public Component createComponentWithParams(
+            Class<? extends Component> theClass, Object[] parameters) {
+        DefaultThreadSafeDialogs helper = new DefaultThreadSafeDialogs(this, this.bEstado);
+        return helper.createComponentWithParams(theClass, parameters);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public File[] showOpenDirectoryDialog(String title, File initialPath) {
+        return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
+    }
+
+    @Override
+    public File[] showOpenFileDialog(String title, File initialPath) {
+        return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
+    }
+
+    @Override
+    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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/SelectableToolBar.java	(revision 46118)
@@ -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.
+ */
+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;
+    private int position;
+    private String description;
+
+    /**
+     * Creates a new SelectableToolBar object.
+     *
+     * @param titulo T�tulo de la barra
+     */
+    public SelectableToolBar(String titulo) {
+        this(titulo,null,0);
+    }
+
+    public SelectableToolBar(String titulo, String description, int position) {
+        super(titulo);
+        this.description = description;
+        this.position = position;
+    }
+
+    public int getPosition() {
+        return this.position;
+    }
+    
+    public void setPosition(int position) {
+        this.position = position;
+    }
+    
+    public String getDescription() {
+        return this.description;
+    }
+    
+    /**
+     * 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DropDownButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DropDownButton.java	(revision 46118)
@@ -0,0 +1,183 @@
+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) {
+            setMainButton(action);
+        }
+    }
+
+    private void setMainButton(Action action){
+        mainButton.setIcon((Icon) action.getValue(Action.SMALL_ICON));
+        if (showText) {
+            mainButton.setText((String) action.getValue(Action.SHORT_DESCRIPTION));
+        } else {
+            mainButton.setText("");
+        }
+        currentAction = action;
+    }
+
+    public void updateMainButton(){
+        for (Action action : actions) {
+            if (action.isEnabled()){
+                setMainButton(action);
+                return;
+            }
+        }
+    }
+
+    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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/EnableTextSupport.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JMenuItem.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ToggleButtonModel.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/MainFrame.java	(revision 46118)
@@ -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.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);
+	
+        public void addTool(final ActionInfo action, final String toolBarName, final boolean useText);
+	
+        public void addSelectableTool(final ActionInfo action, final String toolBarName, final String groupName, final boolean useText);
+        
+
+	/**
+	 * 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JPopUpMenu.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/NoSuchMenuException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/KeyMapping.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/TranslatableButtonHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/TranslatableButtonHelper.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarButton.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/ThreadSafeDialogs.java	(revision 46118)
@@ -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.andami.ui.mdiFrame;
+
+import java.awt.Component;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+
+public interface ThreadSafeDialogs extends ThreadSafeDialogsManager {
+		
+	public void messageDialog(String message, String messageArgs[], String title, int messageType, String msgid);
+        
+    public int confirmDialog(String message, String title, int optionType, int messageType, String msgid) ;
+
+	/**
+	 * 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);	
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/JToolBarToggleButton.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/GlassPane.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java	(revision 46118)
@@ -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.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.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.filechooser.FileFilter;
+
+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.MDIManager;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.filedialogchooser.FileDialogChooser;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.reminder.DialogReminder;
+import org.gvsig.tools.task.CancellableTask;
+import org.gvsig.tools.task.RunnableWithParameters;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+
+/**
+ * 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(null, null);
+	}
+
+	public DefaultThreadSafeDialogs(Component rootComponent) {
+            this(rootComponent,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;
+	}
+
+        @Override
+	public 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;
+	}
+
+        @Override
+	public int confirmDialog(final String message, final String title, final int optionType,
+			final int messageType) {
+            return this.confirmDialog(message, title, optionType, messageType, null);
+        }
+
+        private static class JMessageWithCheck extends JPanel {
+
+        private static final long serialVersionUID = -1902712909850016361L;
+            private final JLabel label;
+            private final JCheckBox check;
+
+            public JMessageWithCheck(String msg, String msgchk) {
+                if( !msg.toLowerCase().trim().startsWith("<html>") ) {
+                    msg = "<html>" + msg.replace("\n", "<br>\n") + "</html>";
+                }
+                this.label = new JLabel(msg);
+                this.check = new JCheckBox(msgchk);
+                this.setLayout(new BorderLayout(10,10));
+                this.add(this.label,BorderLayout.CENTER);
+                this.add(this.check,BorderLayout.PAGE_END);
+            }
+
+            public boolean isCheckSelected() {
+                return this.check.isSelected();
+            }
+        }
+
+        @Override
+	public int confirmDialog(final String message, final String title, final int optionType,
+			final int messageType, final String msgid) {
+		RunnableWithParameters runnable = new RunnableWithParameters() {
+                        @Override
+			public void run() {
+                            DialogReminder r = null;
+                            Object msg = message;
+                            if( msgid != null ) {
+                                r = ToolsSwingLocator.getDialogReminderManager().add(msgid);
+                                if( r.hasValue() ) {
+                                    this.returnValue = r.getValue();
+                                    return;
+                                }
+                                msg = new JMessageWithCheck(
+                                        message,
+                                        ToolsLocator.getI18nManager().getTranslation("_Remember_answer_and_do_not_ask_again")
+                                );
+                            }
+                            this.returnValue = JOptionPane.showConfirmDialog(
+                                getRootComponent(),
+                                msg,
+                                title,
+                                optionType,
+                                messageType
+                            );
+                            if( r!=null ) {
+                                if( ((JMessageWithCheck)msg).isCheckSelected() ) {
+                                    r.setValue(this.returnValue);
+                                } else {
+                                    r.reset();
+                                }
+                            }
+			}
+		};
+		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();
+	}
+
+        @Override
+	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) {
+        messageDialog(message, messageArgs, title, messageType, null);
+    }
+
+        @Override
+    public void messageDialog(final String message, final String messageArgs[],
+            final String title, final int messageType, final String msgid) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            try {
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    @Override
+                    public void run() {
+                        messageDialog(message, messageArgs, title, messageType, msgid);
+                    }
+                });
+            } 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;
+        }
+        DialogReminder r = null;
+        Object msg = translate(message, messageArgs);
+        if (msgid != null) {
+            r = ToolsSwingLocator.getDialogReminderManager().add(msgid);
+            if (r.hasValue() && ((Boolean)r.getValue()) ) {
+                return;
+            }
+            msg = new JMessageWithCheck(
+                    translate(message, messageArgs),
+                    ToolsLocator.getI18nManager().getTranslation("_do_not_show_again")
+            );
+        }
+        JOptionPane.showMessageDialog(getRootComponent(),
+                msg, translate(title), messageType);
+
+        if (r != null) {
+            if (((JMessageWithCheck) msg).isCheckSelected()) {
+                r.setValue(true);
+            } else {
+                r.reset();
+            }
+        }
+
+    }
+
+	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() {
+				// FileDialogChooser fc = new JFileChooserBased();
+                FileDialogChooser fc = ToolsUtilLocator.getFileDialogChooserManager().create();
+				fc.setDialogTitle(title);
+				fc.setDialogType(type);
+				fc.setFileSelectionMode(selectionMode);
+				fc.setMultiSelectionEnabled(multiselection);
+				fc.setCurrentDirectory(initialPath);
+				fc.setFileFilter(filter);
+				fc.setFileHidingEnabled(fileHidingEnabled);
+				int r = FileDialogChooser.CANCEL_OPTION;
+				switch(type) {
+				case FileDialogChooser.SAVE_DIALOG:
+					r = fc.showSaveDialog(getRootComponent());
+					break;
+				case FileDialogChooser.OPEN_DIALOG:
+				default:
+					r = fc.showOpenDialog(getRootComponent());
+					break;
+				}
+				if( r != FileDialogChooser.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, FileDialogChooser.OPEN_DIALOG, FileDialogChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
+	}
+
+
+	public File[] showOpenFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, FileDialogChooser.OPEN_DIALOG, FileDialogChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+
+
+	public File[] showSaveFileDialog(String title, File initialPath) {
+		return showChooserDialog(title, FileDialogChooser.SAVE_DIALOG, FileDialogChooser.FILES_ONLY, false, initialPath, null, false);
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonWindow.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowTransform.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManagerFactory.java	(revision 46118)
@@ -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.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;
+    }
+
+    public static MDIManager getManager() {
+        return createManager();
+    }
+    
+    /**
+     * 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/NoSkinExtensionException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindow.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/SingletonDialogAlreadyShownException.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/WindowInfo.java	(revision 46118)
@@ -0,0 +1,1253 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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";
+
+    private boolean needPack = false;
+    
+    public boolean needPack() {
+        return needPack;
+    }
+    
+    public void setNeedPack(boolean needPack) {
+        this.needPack = needPack;
+    }
+    
+    /**
+     * 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIManager.java	(revision 46118)
@@ -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.andami.ui.mdiManager;
+
+import java.awt.Dialog;
+import java.awt.GridBagConstraints;
+import java.awt.Window;
+import java.awt.image.BufferedImage;
+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();
+
+    public void moveToFrom(IWindow win);
+
+    /**
+     * 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.
+     * If the window is openend with the WindowManager, use setVisible(false) in
+     * the JPanel to close it.
+     *
+     * @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);
+
+    /**
+     * Change the position of the speficied window.
+     *
+     * @param window
+     * @param x
+     * @param y
+     */
+    public void move(IWindow window, int x, int y);
+
+    /**
+     * Gets the associated IWindow to the panel shown with showWindow method.
+     * Also panel shown with the tools WindowManager.
+     *
+     * @param panel
+     * @return
+     */
+    public IWindow getWindow(JPanel panel);
+    
+    public BufferedImage getImagePreview();
+
+    public boolean isModalDialogShowing();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/MDIUtilities.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiManager/IWindowListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/fonts/FontUtils.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/HiddableExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/PluginClassLoader.java	(revision 46118)
@@ -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.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.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+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.apache.commons.lang3.StringUtils;
+
+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());
+
+
+    private Map<String, ZipFile> clasesJar = new HashMap<>();
+
+
+    private File baseDir;
+    private List<PluginClassLoader> pluginLoaders;
+    private static List<ClassLoader> otherLoaders = new ArrayList<>();
+    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);
+        this.baseDir = new File(new File(baseDir).getAbsolutePath());
+        try {
+            logger.debug("Creating PluginClassLoader for {}.", this.getPluginName());
+            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 {
+                    logger.debug("Classloader {}, loading jar {}", this.getPluginName(), jars[i].getPath());
+                    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("Classloader {}, duplicated class {} in {} and {}",
+                                    new Object[]{
+                                        this.getPluginName(),
+                                        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 (PluginClassLoader pluginLoader : this.pluginLoaders) {
+            logger.debug("    {}", pluginLoader.toString());
+        }
+        logger.debug("  urls:");
+        URL[] urls = this.getURLs();
+        for (URL url : urls) {
+            logger.debug("    " + url.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<>();
+        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
+     */
+    @Override
+    protected Class loadClass(String name, boolean resolve)
+            throws ClassNotFoundException {
+        Class<?> c = null;
+
+        // Intentamos cargar con el URLClassLoader
+        for( int retry=0; c==null && retry<3; retry++) {
+            try {
+                if (!isOtherLoader) {
+                    c = super.loadClass(name, resolve);
+                    logger.debug("Classloader {}, found class {}.", this.getPluginName(), name);
+                }
+            } catch (ClassNotFoundException e1) {
+            }
+            if (c == null) {
+                try {
+                    c = singleLoadClass(name);
+                } catch (ClassNotFoundException e2) {
+                }
+            }
+            if (c == null) {
+                try {
+                    isOtherLoader = true;
+                    c = loadOtherClass(name);
+                } catch (ClassNotFoundException e3) {
+                    throw new ClassNotFoundException("Class " + name
+                            + " not found through the plugin " + baseDir, e3);
+                } finally {
+                    isOtherLoader = false;
+                }
+            }
+            if( c==null ) {
+                logger.info("class "+name+", retry "+retry);
+            }
+        }
+        if (c == null) {
+            if( StringUtils.startsWith(name,"java.") || StringUtils.startsWith(name,"javax.") ) {
+                logger.warn("Can't locate class '"+name+"'. It can be a serious problem. It is advisable that you close the application.");
+            }
+            throw new ClassNotFoundException(Messages.getString(
+                    "PluginClassLoader.Error_reading_file") + name);
+        }
+        if (resolve) {
+            resolveClass(c);
+        }
+        return c;
+    }
+
+    private Class<?> loadOtherClass(String name)
+            throws ClassNotFoundException {
+        ClassLoader[] ocls = (ClassLoader[]) otherLoaders.toArray(new ClassLoader[0]);
+        Class<?> c;
+        for (ClassLoader ocl : ocls) {
+            c = ocl.loadClass(name);
+            if (c != null) {
+                logger.debug("Classloader {}, found class {} in classloader {}", 
+                        new Object[]{this, getPluginName(), name, ocl.toString()}
+                );
+                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.
+     */
+    @Override
+    public URL getResource(String res) {
+        URL ret ;
+
+        Set<String> pluginsVisiteds = new HashSet<>();
+        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 (File file : files) {
+            if (file.getName().compareTo(parte) == 0) {
+                if (res.size() == 1) {
+                    try {
+                        return new URL("file:" + file.toString());
+                    }catch (MalformedURLException e) {
+                        return null;
+                    }
+                } else {
+                    return getResource(file, res.subList(1, res.size()));
+                }
+            }
+        }
+
+        return null;
+    }
+    
+    @Override
+    public Enumeration<URL> getResources(String name) throws IOException {
+    	HashSet visitedPlugins = new HashSet();
+    	return getResources(name, visitedPlugins);
+    }
+    
+    protected Enumeration<URL> getResources(String name, HashSet<PluginClassLoader> visitedPlugins) throws IOException {        
+    	List<URL> resources = new ArrayList<>();
+    	Enumeration<URL> aux = super.getResources(name);
+    	while(aux.hasMoreElements()){
+    		URL url = aux.nextElement();
+    		resources.add(url);
+    	}
+        visitedPlugins.add(this);
+    	for(PluginClassLoader loader: this.pluginLoaders){
+    		if (!visitedPlugins.contains(loader)) {
+	    		aux = loader.getResources(name, visitedPlugins);
+	        	while(aux.hasMoreElements()){
+	        		URL url = aux.nextElement();
+	        		resources.add(url);
+	        	}
+    		}
+    	}
+    	return Collections.enumeration(resources);
+    }
+
+    /**
+     * 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)
+     */
+    @Override
+    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("Classloader {}, searching class '{}'",
+                new Object[]{this.getPluginName(), name}
+        );
+        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("Classloader {}/classes-folder, found class {}",
+                            new Object[]{this.getPluginName(), name}
+                    );
+
+                } else {
+                    for (PluginClassLoader pluginLoader1 : pluginLoaders) {
+                        c = null;
+                        PluginClassLoader pluginLoader = pluginLoader1;
+                        if (pluginLoader != null) {
+                            try {
+                                c = pluginLoader.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) {
+                                logger.debug("Classloader {}, found class {} in plugin {}",
+                                        new Object[]{
+                                            this.getPluginName(),
+                                            name,
+                                            pluginLoader.getPluginName()
+                                        }
+                                );
+                                return c;
+                            }
+                        }
+                    }
+                    
+                    
+                }
+            } else {
+                logger.debug("Classloader {}, found class {} in jar {}",
+                        new Object[]{
+                            this.getPluginName(),
+                            name,
+                            jar.getName()
+                        }
+                );
+                String fileName = name.replace('.', '/') + ".class";
+                ZipEntry classFile = jar.getEntry(fileName);
+                byte[] data = loadClassData(classFile,
+                        jar.getInputStream(classFile));
+
+                c = defineClass(name, data, 0, data.length);
+                if (c == null) {
+                    logger.debug("Classloader {}, can't load class {} from jar {}",
+                            new Object[]{
+                                this.getPluginName(),
+                                name,
+                                jar.getName()
+                            }
+                    );
+                }
+
+            }
+
+            if (c == null) {
+                logger.debug("Classloader {}, class not found {}",
+                        new Object[]{
+                            this.getPluginName(),
+                            name
+                        }
+                );
+                debugDump();
+                throw new ClassNotFoundException(name);
+            }
+
+            return c;
+        } catch (IOException e) {
+            logger.debug("Classloader {}, error loading class {}",
+                    new Object[]{
+                        this.getPluginName(),
+                        name
+                    },
+                    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 {
+//            if( res.contains("cosa") ) {
+//                logger.info("Classloader {}, searching resource '{}'", this.getPluginName(), res);
+//            }
+            logger.debug("Classloader {}, searching resource '{}'", this.getPluginName(), res);
+            List<String> resource = new ArrayList<>();
+            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("Classloader {}, Error getting resource '{}'.",
+                    new Object[]{
+                        this.getPluginName(), res
+                    },
+                    e
+            );
+        }
+
+//        if( res.contains("cosa") ) {
+//            logger.info("Classloader {}, searching in depends pluginLoaders", this.getPluginName());
+//        }
+        logger.debug("Classloader {}, searching in depends pluginLoaders", this.getPluginName());
+        for (PluginClassLoader pluginClassLoader : this.pluginLoaders) {
+            if (pluginClassLoader != null) {
+                try {
+                    ret = pluginClassLoader.getResource(pluginsVisiteds, res);
+                    if (ret != null) {
+                        logger.debug("Classloader {}, Found resource '{}' in plugin '{}'.",
+                                new Object[]{
+                                    this.getPluginName(), res, pluginClassLoader.getPluginName(),});
+                        return ret;
+                    }
+                } catch (Exception e) {
+                    // Ignore, try in next classloader
+                }  finally {
+                    pluginsVisiteds.add(pluginClassLoader.getPluginName());
+                }
+            }
+        }
+
+        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("Classloader {}, error getting resource '{}' in parent classloader'",
+                        new Object[]{this.getPluginName(), res},
+                        e
+                );
+            }
+            if (ret == null) {
+                logger.debug("Classloader {}, Resource '{}' not found.",
+                        new Object[]{this.getPluginName(), res}
+                );
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public void addURL(URL url) {
+        super.addURL(url);
+    }
+
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/Extension.java	(revision 46118)
@@ -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  {
+
+	protected 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 void setPlugin(PluginServices plugin) {
+		if (this.plugin != null){
+			throw new IllegalStateException();
+		}
+		this.plugin = plugin;
+	}
+
+	public 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionHelper.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExtensionDecorator.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionExecuteWithArgs.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/ExclusiveUIExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/UnsavedData.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IUnsavedData.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/status/IExtensionStatus.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtensionQueryByAction.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/IExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LibrariesDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Libraries.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundleDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ResourceBundle.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MyFieldValidator.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableToolDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNamesDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SelectableTool.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBarDescriptor.java	(revision 46118)
@@ -0,0 +1,459 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-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);
+        
+        //-- _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
+            {
+                ToolBar target = (ToolBar) object;
+                return target.getDescription();
+            }
+            public void setValue( java.lang.Object object, java.lang.Object value) 
+                throws IllegalStateException, IllegalArgumentException
+            {
+                try {
+                    ToolBar target = (ToolBar) 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);
+        desc.setRequired(false);
+        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);
+        
+        
+        //-- _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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/AlternativeNames.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ToolBar.java	(revision 46118)
@@ -0,0 +1,771 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-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;
+    
+    private java.lang.String _description;
+
+    /**
+     * Field _position
+     */
+    private int _position = 0;
+
+    /**
+     * 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 'name'.
+     * 
+     * @return the value of field 'name'.
+     */
+    public java.lang.String getDescription()
+    {
+        return this._description;
+    } //-- 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 'name'.
+     * 
+     * @param name the value of field 'name'.
+     */
+    public void setDescription(java.lang.String description)
+    {
+        this._description = description;
+    } //-- 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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/MenuDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElementDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Menu.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonElement.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScaleDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboScale.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenusDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionToolDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenus.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionTool.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ActionDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Action.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionTypeDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionType.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Label.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/DependsDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Depends.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfigDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PluginConfig.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenuDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/IconDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/PopupMenu.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Icon.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButtonDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSetDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ComboButton.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/LabelSet.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/ExtensionsDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/Extensions.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionTypeDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/plugins/config/generate/SkinExtensionType.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java	(revision 46118)
@@ -0,0 +1,4210 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For 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.WindowAdapter;
+import java.awt.event.WindowEvent;
+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.impl.DefaultArguments;
+import org.gvsig.andami.impl.UnsavedDataException;
+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.andami.ui.wizard.UnsavedDataPanel.UnsavedDataPanelListener;
+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.InstallWizardPanel;
+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.i18n.I18nManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+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>
+ *
+ *
+ */
+public class Launcher {
+
+    private static Arguments arguments;
+
+    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 List<String> pluginsOrdered = new ArrayList<String>();
+    protected static List<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(final String[] args) throws Exception {
+        arguments = new DefaultArguments(args);
+
+        final Launcher launcher = getInstance();
+        try {
+            if (arguments.contains("install")) {
+                launcher.doInstall(args);
+            } else {
+                launcher.doMain(args);
+            }
+        } catch (Exception e) {
+            logger.error("excepcion 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 static Arguments getArguments() {
+        return arguments;
+    }
+    
+    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.
+        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();
+                frame.setVisible((boolean) arguments.get("showgui", true));
+            }
+        });
+        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();
+                } catch (Throwable th) {
+                    logger.warn("Problems enabling controls", th);
+                }
+            }
+        });
+
+        splashWindow.close();
+
+        frame.setCursor(Cursor.DEFAULT_CURSOR);
+
+        if (launcherrors != null) {
+            NotificationManager.addError(launcherrors);
+        }
+        if( !arguments.contains("showgui", "false") ) {
+            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];
+        }
+        // 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);
+
+        getOrCreateConfigFolder();
+        configureLogging(appName, applicationClasifier);
+        if (!validJVM()) {
+            logger.error("Not a valid JRE. Exit application.");
+            System.exit(-1);
+        }
+
+        ToolsLocator.registerDefaultToolsLibraries();
+
+        ToolsLocator.getFoldersManager().cleanTemporaryFiles();
+
+        if (args.length < 2) {
+            loadAndamiConfig("gvSIG/extensiones"); // Valor por defecto
+        } else {
+            loadAndamiConfig(args[1]);
+        }
+
+        configureLocales();
+
+        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 %r %t %C - %m%n");
+        RollingFileAppender fa = new RollingFileAppender(l, pathname, false);
+        fa.setMaxFileSize("512KB");
+        fa.setMaxBackupIndex(3);
+        
+        org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
+        if( !(boolean) arguments.get("consolelogger", true) ) {
+            rootLogger.removeAppender("stdout");
+        }
+        rootLogger.addAppender(fa);
+        
+        logger.info("Loadded log4j.properties from " + config.toString());
+        if (StringUtils.isBlank(applicationClasifier)) {
+            logger.info("Application " + appName);
+        } else {
+            logger.info("Application " + appName + "-" + applicationClasifier);
+        }
+    }
+
+    public static String getApplicationName() {
+        return appName;
+    }
+
+    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 aplicacion.
+     *
+     * @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_6)) {
+            logger.warn("gvSIG requires Java version 1.6 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;
+    }
+
+    private List<ToolBar> getOrderedToolBars() {
+        Map<String, ToolBar> toolbars = new HashMap<>();
+
+        Iterator<String> pluginNames = getOrdererPluginsNames().iterator();
+        while (pluginNames.hasNext()) {
+            String pluginName = pluginNames.next();
+            String extensionName = "unknow";
+            try {
+                PluginConfig pc = pluginsConfig.get(pluginName);
+                Extension[] extensions = pc.getExtensions().getExtension();
+                for (Extension extension : extensions) {
+                    extensionName = extension.getClassName();
+                    ToolBar[] extensionToolbars = extension.getToolBar();
+                    for (ToolBar toolbar : extensionToolbars) {
+                        ToolBar previosToolbar = toolbars.get(toolbar.getName());
+                        if ( previosToolbar!=null ) {
+                            if( !previosToolbar.hasPosition() && toolbar.hasPosition() ) {
+                                toolbars.put(toolbar.getName(), toolbar);
+                            }
+                        } else {
+                            toolbars.put(toolbar.getName(), toolbar);
+                        }
+                    }
+                }
+            } catch (Exception ex) {
+                addError("Can't process tool-bars of extension '"+extensionName+"'.", ex);
+            }
+        }
+        for (Entry<String, ToolBar> entrySet : toolbars.entrySet()) {
+            ToolBar toolBar = entrySet.getValue();
+            if( toolBar.hasPosition() && toolBar.getPosition()<100 ) {
+                toolBar.setPosition( toolBar.getPosition()+11000);
+            }
+        }
+        List<ToolBar> toolBarsList = new ArrayList<>(toolbars.values());
+        Collections.sort(toolBarsList, new Comparator<ToolBar>() {
+
+            @Override
+            public int compare(ToolBar o1, ToolBar o2) {
+                return Integer.compare(o1.getPosition(), o2.getPosition());
+            }
+        });
+        return toolBarsList;
+    }
+
+    /**
+     * 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)");
+        installPluginsControlsToToolsbar();
+        installPluginsControlsToStatusbar();
+    }
+
+    private void installPluginsControlsToToolsbar() {
+
+        Map<String,List<SortableTool>> toolsByToolbar = new HashMap<>();
+        // A�ade primero las toolbars ordenadas para garantizar el orden de estas
+        // Y inicializa las listas del Map.
+        for( ToolBar toolbar : getOrderedToolBars() ) {
+            frame.addToolBar(toolbar.getName(), toolbar.getDescription(), toolbar.getPosition());
+            ArrayList<SortableTool> tools = new ArrayList<>();
+            toolsByToolbar.put(toolbar.getName(),tools);
+        }
+        for( Entry<String, PluginConfig> entry : pluginsConfig.entrySet() ) {
+            String pluginName = entry.getKey();
+            PluginConfig pluginConfig = entry.getValue();
+            PluginServices plugin = pluginsServices.get(pluginName);
+            PluginClassLoader loader = plugin.getClassLoader();
+            Extension[] pluginExtensions = pluginConfig.getExtensions().getExtension();
+            for( Extension pluginExtension : pluginExtensions ) {
+                ToolBar[] pluginToolbars = pluginExtension.getToolBar();
+                for( ToolBar pluginToolbar : pluginToolbars ) {
+                    ActionTool[] actionTools = pluginToolbar.getActionTool();
+                    for( ActionTool actionTool : actionTools ) {
+                        List<SortableTool> toolbar = toolsByToolbar.get(pluginToolbar.getName());
+                        toolbar.add(new SortableTool(loader, pluginExtension, pluginToolbar, actionTool));
+                    }
+                    SelectableTool[] selectableTools = pluginToolbar.getSelectableTool();
+                    for( SelectableTool selectableTool : selectableTools ) {
+                        List<SortableTool> toolbar = toolsByToolbar.get(pluginToolbar.getName());
+                        toolbar.add(new SortableTool(loader, pluginExtension, pluginToolbar, selectableTool));
+                    }
+                }
+            }
+        }
+        for( Entry<String, List<SortableTool>> entry : toolsByToolbar.entrySet() ) {
+            String toolbarName = entry.getKey();
+            List<SortableTool> tools = entry.getValue();
+            Collections.sort(tools, new Comparator<SortableTool>() {
+                @Override
+                public int compare(SortableTool o1, SortableTool o2) {
+                    return Long.compare(o1.getPosition(), o2.getPosition());
+                }
+            });
+
+            for( SortableTool tool : tools ) {
+                try {
+                    if (tool.actiontool != null) {
+                        frame.addTool(tool.loader, tool.extension,
+                            tool.toolbar, tool.actiontool
+                        );
+                    } else {
+                        frame.addTool(tool.loader, tool.extension,
+                            tool.toolbar, tool.selectabletool
+                        );
+                    }
+                } catch (Exception ex) {
+                }
+            }
+        }
+    }
+
+    private void installPluginsControlsToStatusbar() {
+        Iterator<String> pluginNames = pluginsConfig.keySet().iterator();
+
+        Map<Extension, PluginServices> extensionPluginServices = new HashMap<Extension, PluginServices>();
+        Set<Extension> orderedExtensions = new TreeSet<Extension>(new ExtensionComparator());
+
+        while (pluginNames.hasNext()) {
+            String pluginName = pluginNames.next();
+            try {
+                PluginConfig pc = pluginsConfig.get(pluginName);
+                PluginServices ps = pluginsServices.get(pluginName);
+
+                Extension[] exts = pc.getExtensions().getExtension();
+
+                for (int j = 0; j < exts.length; j++) {
+                    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);
+                        }
+                    } catch (Throwable e) {
+                        addError("Error initializing controls of plugin '"
+                                + pluginName + "' extension '" + cname + "'", e);
+                    }
+                }
+            } catch (Throwable e) {
+                addError("Error initializing controls of plugin '" + pluginName
+                        + "'", e);
+            }
+        }
+
+        Iterator<Extension> e = orderedExtensions.iterator();
+
+        // 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();
+
+                // get controls for statusBar
+                PluginServices ps = extensionPluginServices.get(ext);
+                PluginClassLoader loader = ps.getClassLoader();
+
+                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);
+            }
+        }
+
+    }
+
+    /**
+     * 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 static class OrderedPlugins extends ArrayList<String> {
+
+        private List<String> problems = new ArrayList<String>();
+        private int retries = 0;
+        private PluginsConfig pluginsConfig = null;
+        private List<String> deprcatedPluginNames = null;
+
+        OrderedPlugins(PluginsConfig pluginsConfig, List<String>deprcatedPluginNames) {
+            super();
+            this.pluginsConfig = pluginsConfig;
+            this.deprcatedPluginNames = deprcatedPluginNames;
+            List<String> pluginNames = new ArrayList<String>();
+            for (String pluginName : pluginsConfig.keySet()) {
+                pluginNames.add(pluginName);
+            }
+            Collections.sort(pluginNames);
+            for (String pluginName : pluginNames) {
+                this.add(pluginName);
+            }
+        }
+
+        public List<String> getProblems() {
+            return this.problems;
+        }
+
+        private void addProblem(String msg) {
+           this.problems.add(msg);
+        }
+
+        public boolean add(String pluginName) {
+            return this.add(pluginName,new ArrayList<String>());
+        }
+
+        private boolean add(String pluginName, List<String>processing) {
+            pluginName = this.pluginsConfig.getMainKey(pluginName);
+            if( this.contains(pluginName) ) {
+                return true;
+            }
+            if( processing.contains(pluginName) ) {
+                this.addProblem("Dependencias ciclicas procesando '"+pluginName+"'.");
+                return true;
+            }
+            PluginConfig pluginConfig = this.pluginsConfig.get(pluginName);
+            Depends[] dependencies = pluginConfig.getDepends();
+            if( dependencies.length==0 ) {
+               super.add(pluginName);
+               return true;
+            }
+            if( this.retries > 100 ) {
+               this.addProblem("Posible dependencias ciclicas procesando '"+pluginName+"'." );
+               return false;
+            }
+            processing.add(pluginName);
+            boolean dependenciesAvailables = true;
+            for (Depends dependency : dependencies) {
+                String dependencyName = dependency.getPluginName();
+                if (deprcatedPluginNames.contains(dependencyName)) {
+                    this.addProblem("Plugin '" + pluginName + "' use a deprecated plugin name '" + dependencyName + "' as dependency. Must use '" + pluginsConfig.getMainKey(dependencyName) + "'.");
+                }
+                PluginConfig dependencyConfig = this.pluginsConfig.get(dependencyName);
+                if( dependencyConfig == null) {
+                  if( dependency.getOptional() ) {
+                    this.addProblem("Plugin '" + pluginName + "', declare an optional dependency '" + dependencyName + "' that not found.");
+                    continue;
+                  }
+                  dependenciesAvailables = false;
+                  this.addProblem("Plugin '"+pluginName+"' declara a dependency '"+dependencyName+"' that not found.");
+                  continue;
+                }
+                this.retries++;
+                if( ! (this.add(dependencyName, processing)) ) {
+                  dependenciesAvailables = false;
+                }
+                this.retries--;
+            }
+            if( dependenciesAvailables ) {
+                super.add(pluginName);
+            } else {
+              this.addProblem("Plugin '"+pluginName+"' no disponible, alguna dependencia no resuelta.");
+              return false;
+            }
+            return true;
+        }
+    }
+    
+    private OrderedPlugins getOrdererPluginsNames() {
+        OrderedPlugins orderedPlugins = new OrderedPlugins(pluginsConfig, getDeprecatedPluginNames());
+        return orderedPlugins;
+    }
+
+    private void loadPluginServices() {
+        OrderedPlugins orderedPlugins = getOrdererPluginsNames();
+
+        if( !orderedPlugins.getProblems().isEmpty() ) {
+            for (String problem : orderedPlugins.getProblems()) {
+                logger.warn(problem);
+            }
+        }
+
+        for (String pluginName : orderedPlugins) {
+            PluginConfig config = pluginsConfig.get(pluginName);
+
+            URL[] urls = getPluginClasspathURLs(config);
+
+            List<PluginClassLoader> loaders = new ArrayList<PluginClassLoader>();
+            for (Depends dependency : config.getDepends()) {
+                String dependencyName = dependency.getPluginName();
+                PluginServices dependencyPluginService = pluginsServices.get(dependencyName);
+                if( dependencyPluginService == null ) {
+                    if( dependency.getOptional() ) {
+                        logger.info("Procesing plugin '"+pluginName+", optional dependency not found ("+dependencyName+").");
+                    } else {
+                        logger.warn("Procesing plugin '"+pluginName+", dependency not found ("+dependencyName+").");
+                    }
+                    continue;
+                }
+                loaders.add(dependencyPluginService.getClassLoader());
+            }
+            try {
+                PluginClassLoader 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);
+                pluginsOrdered.add(pluginName);
+            } catch (IOException ex) {
+                logger.warn("Can't create PluginServices for '" + pluginName + "'.", ex);
+            }
+        }
+
+        // Se eliminan los plugins que no fueron instalados
+        List<String> pluginsToRemove = new ArrayList<String>();
+        for (String pluginName : pluginsConfig.keySet()) {
+            PluginServices pluginService = pluginsServices.get(pluginName);
+            if( pluginService == null ) {
+                pluginsToRemove.add(pluginName);
+            }
+        }
+        for (String pluginName : pluginsToRemove) {
+            logger.warn("Removed plugin "+pluginName+".");
+            pluginsConfig.remove(pluginName);
+       }
+    }
+
+    /*
+    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();
+    }
+
+    public synchronized static void closeApplication(boolean quietly) {
+        TerminationProcess terminationProcess = (new Launcher()).new TerminationProcess();
+        if( quietly ) {
+            terminationProcess.closeAndami();
+        } else {
+            terminationProcess.run();
+        }
+    }
+    
+    static HashMap getClassesExtensions() {
+        return classesExtensions;
+    }
+
+    public static IExtension getExtensionByName(String extensionName) {
+        if( StringUtils.isEmpty(extensionName) ) {
+            return null;
+        }
+        for (Entry<Class<? extends IExtension>, ExtensionDecorator> entry : classesExtensions.entrySet()) {
+            Class<? extends IExtension> extensionClass = entry.getKey();
+            IExtension extension = entry.getValue();
+            if( extensionName.equals(extensionClass.getName()) ) {
+                while( extension instanceof ExtensionDecorator ) {
+                    extension = ((ExtensionDecorator)extension).getExtension();
+                }
+                return extension;
+            }
+        }
+        return null;
+    }
+
+    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;
+        }
+
+        public long getPosition() {
+            if( this.actiontool!=null ) {
+                return this.actiontool.getPosition();
+            }
+            if( this.selectabletool!=null ) {
+                return this.selectabletool.getPosition();
+            }
+            return 0;
+        }
+    }
+
+    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>
+     *
+     */
+    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() {
+        // Configurar el locale
+        String localeStr = null;
+
+        if( getArguments().contains("language") ) {
+            localeStr = getArguments().get("language");
+        } else {
+            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>
+     *
+     */
+    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.getApplicationHomeFolder(), "icon-theme");
+        if (!f.exists()) {
+            try {
+                f.mkdir();
+            } catch (Exception ex) {
+                // Do nothing
+            }
+        }
+        iconManager.getRepository().add(f, "_User");
+
+        f = new File(pluginsManager.getApplicationFolder(), "icon-theme");
+        if (!f.exists()) {
+            try {
+                f.mkdir();
+            } catch (Exception ex) {
+                // Do nothing
+            }
+        }
+        iconManager.getRepository().add(f, "_Global");
+
+        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);
+            }
+        }
+        double scaleFactor;
+        try {
+            scaleFactor = prefs.getDouble("scaleFactor",1.0);
+        } catch(Throwable th) {
+            scaleFactor = 1.0;
+        }
+        iconManager.setScaleFactor(scaleFactor);
+    }
+
+    public static void manageUnsavedData(String prompt) throws Exception {
+        final UnsavedDataPanel panel = new UnsavedDataPanel(prompt);
+        final List<IUnsavedData> unsavedData = PluginsLocator.getManager().getUnsavedData();
+        panel.setUnsavedData(unsavedData);
+
+        panel.addActionListener(panel.new UnsavedDataPanelListener() {
+
+            public void cancel(UnsavedDataPanel panel) {
+                panel.setVisible(false);
+            }
+
+            public void discard(UnsavedDataPanel panel) {
+                panel.setVisible(false);
+            }
+
+            @Override
+            public void accept(UnsavedDataPanel panel) {
+                panel.setVisible(false);
+
+                try {
+                    PluginsLocator.getManager().saveUnsavedData(panel.getSelectedsUnsavedDataList());
+                } catch (UnsavedDataException e) {
+                    logger.warn("Can't save resources.",e);
+                    I18nManager i18n = ToolsLocator.getI18nManager();
+                    StringBuilder msg = new StringBuilder();
+                    msg.append(i18n.getTranslation("The_following_resources_could_not_be_saved"));
+                    msg.append("\n");
+                    for (IUnsavedData unsavedData : e.getUnsavedData()) {
+                        msg.append(unsavedData.getResourceName());
+                        msg.append(" -- ");
+                        msg.append(unsavedData.getDescription());
+                        msg.append("\n");
+                    }
+                    JOptionPane.showMessageDialog(
+                            panel, 
+                            msg, 
+                            i18n.getTranslation("Resources_was_not_saved"), 
+                            JOptionPane.ERROR_MESSAGE
+                    );
+                }
+            }
+        });
+
+        //TODO: mostrar panel WindowManager
+        ToolsSwingLocator.getWindowManager().showWindow(
+                panel,
+                PluginServices.getText(panel, "Resource_was_not_saved"),
+                MODE.DIALOG);
+
+    }
+
+    /**
+     * Manages Andami termination process
+     *
+     */
+    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) {
+                logger.warn("It is not possible to close the application", 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,
+                                                    "unsaved_resources"),
+                                            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-testing/";
+            }
+
+            if (line.hasOption("installURLFile")) {
+                installURLFile = line.getOptionValue("installURLFile");
+            } else {
+                installURLFile = "gvsig-installer-urls.config";
+            }
+
+            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();
+
+        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 ## Current build";
+            }
+        }
+        // Configure default index download URL
+        SwingInstallerLocator.getSwingInstallerManager().setDefaultDownloadURL(installURL);
+
+        SwingInstallerLocator.getSwingInstallerManager().setDefaultDownloadURL(new File(installURLFile));
+
+        // Launch installer
+        PluginsManager manager = PluginsLocator.getManager();
+
+        InstallWizardPanel installPackageWizard = SwingInstallerLocator
+                .getSwingInstallerManager().createInstallPackageWizard(
+                        manager.getApplicationFolder(),
+                        manager.getInstallFolder());
+        installPackageWizard.setWizardActionListener(new InstallerWizardActionListener() {
+            @Override
+            public void finish(InstallerWizardPanel installerWizard) {
+                logger.info("Finish installation.");
+                System.exit(0);
+            }
+
+            @Override
+            public void cancel(InstallerWizardPanel installerWizard) {
+                logger.info("Cancel installation.");
+                System.exit(0);
+            }
+        });
+
+        // the wizard will show the Typical or Advanced mode option.
+        installPackageWizard.setSkipTypicalOrAdvancedWizardPage(false);
+        // default packages will be selected.
+        installPackageWizard.setSelectDefaultPackages(true);
+
+        JFrame frame = new JFrame(Messages.get("gvsig_package_installer"));
+        frame.addWindowListener(new WindowAdapter() {
+            @Override
+            public void windowClosing(WindowEvent we) {
+                logger.info("Closing installation.");
+                System.exit(0);
+            }
+
+            @Override
+            public void windowClosed(WindowEvent we) {
+                logger.info("Close installation.");
+                System.exit(0);
+            }
+        });
+        frame.getContentPane().add(installPackageWizard.asJComponent(), BorderLayout.CENTER);
+        URL iconURL = getClass().getResource("/images/main/install-icon.png");
+        if( iconURL!=null ) {
+            ImageIcon icon = new ImageIcon(iconURL);
+            frame.setIconImage(icon.getImage());
+        }
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+
+        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;
+    private static final int INFO_TEMP_FOLDER = 19;
+
+    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"
+                + "    temp forlder            : {" + INFO_TEMP_FOLDER + "}\n"
+                + "Installed packages\n"
+                + "{" + INFO_PACKAGES + "}";
+
+        String values[] = new String[INFO_TEMP_FOLDER + 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_TEMP_FOLDER] = ToolsLocator.getFoldersManager().getTemporaryFolder().getAbsolutePath();
+        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 (PackageInfo pkg : pkgs) {
+                writer.write("    ");
+                writer.write(pkg.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, (Object[])values);
+        return s;
+    }
+
+    private void logger_info(String msg) {
+        String info[] = msg.split("\n");
+        for (String info1 : info) {
+            logger.info(info1);
+        }
+    }
+
+    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 = entry.getValue().getPluginFolder();
+            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(plugin != null){
+        	new DefaultLibrariesInitializer(plugin.getClassLoader()).fullInitialize(true);
+        }
+
+        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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/LibraryExtension.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java	(revision 46118)
@@ -0,0 +1,950 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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.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.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.apache.commons.lang3.StringUtils;
+
+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.
+ * 
+ */
+@SuppressWarnings("UseSpecificCatch")
+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.
+     * @deprecated use I18NManager
+     */
+    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
+     */
+    @Deprecated
+    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.
+     */
+    @Deprecated
+    public static PluginServices getPluginServices(String pluginName) {
+        return Launcher.getPluginServices(pluginName);
+    }
+
+    /**
+     * Gets the window manager (MDIManager).
+     * 
+     * @return A reference to the window manager (MDIManager).
+     */
+    @Deprecated
+    public static MDIManager getMDIManager() {
+        MDIFrame frame = Launcher.getFrame();
+        if( frame == null ) {
+            return null;
+        }
+        return frame.getMDIManager();
+    }
+
+    /**
+     * Gets the application's main frame.
+     * 
+     * @return A reference to the application's main window
+     */
+    @Deprecated
+    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
+     */
+    @Deprecated
+    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.
+     */
+    @Deprecated
+    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).
+     */
+    @Deprecated
+    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).
+     */
+    @Deprecated
+    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.
+     * @deprecated use I18NManager
+     */
+    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
+     */
+    @Deprecated
+    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)
+     */
+    @Deprecated
+    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.
+     */
+    @Deprecated
+    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
+     * @deprecated use PluginManager.getArguments
+     */
+    public static String getArgumentByName(String name) {
+        name = StringUtils.removeStart(name, "-");
+        name = StringUtils.removeStart(name, "-");
+        for (int i = 2; i < PluginServices.arguments.length; i++) {
+            String arg = PluginServices.arguments[i];
+            arg = StringUtils.removeStart(arg, "-");
+            arg = StringUtils.removeStart(arg, "-");
+            int n = arg.indexOf('=');
+            if (n > 0) {
+                String argname = arg.substring(0, n);
+                if (StringUtils.equalsIgnoreCase(argname, name)) {
+                    if (n == arg.length()) {
+                        return "";
+                    }
+                    return arg.substring(n + 1);
+                }
+            } else {
+                if (StringUtils.equalsIgnoreCase(arg, name)) {
+                    return "true";
+                }
+            }
+        }
+        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.
+     * 
+     */
+    @Deprecated
+    public static Logger getLogger() {
+        return logger;
+    }
+
+    @Deprecated
+    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.
+     */
+    @Deprecated
+    public static String getFromClipboard() {
+
+        try {
+            return (String) Toolkit.getDefaultToolkit()
+            .getSystemClipboard()
+            .getContents(null)
+            .getTransferData(DataFlavor.stringFlavor);
+        } catch (Exception e) {
+            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)
+     */
+    @Deprecated
+    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)
+     */
+    @Deprecated
+    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();
+
+    }
+
+    @Deprecated    
+    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 (Throwable 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() {
+        return PluginsLocator.getManager().getPluginHomeFolder(this.getPluginName());
+	}
+
+    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) {
+        if( otherPlugin==null ) {
+            return;
+        }
+        this.getClassLoader().addPluginClassLoader(otherPlugin.getClassLoader());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PropertyDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatusDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Property.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarsDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginsStatus.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBars.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarksDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmarks.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowsDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Windows.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntityDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/XmlEntity.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/PluginDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Plugin.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBarDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/ToolBar.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/BookmarkDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Bookmark.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/WindowDescriptor.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/generate/Window.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/persistence/serverData/ServerDataPersistence.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Arguments.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Arguments.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Arguments.java	(revision 46118)
@@ -0,0 +1,26 @@
+package org.gvsig.andami;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public interface Arguments extends Iterable<String> {
+    
+    public String get(String name);
+    
+    public Object get(String name, Object defaultValue);
+    
+    public boolean contains(String name);
+
+    public boolean contains(String name, String value);
+    
+    public Map<String,String> flags();
+    
+    public List<String> parameters();
+    
+    public int size();
+    
+    public String get(int n);
+    
+    public Iterator<String> iterator();
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLocator.java	(revision 46118)
@@ -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.andami;
+
+import org.apache.commons.lang3.StringUtils;
+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.
+     */
+    @Override
+    public String getLocatorName() {
+        return LOCATOR_NAME;
+    }
+
+    /**
+     * Return a reference to PluginsManager.
+     *
+     * @return a reference to PluginsManager
+     * @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);
+    }
+    
+    public static PluginsManager getPluginsManager() throws LocatorException {
+        return (PluginsManager) getInstance().get(PLUGINS_MANAGER_NAME);
+    }
+    
+    /**
+     * Registers the Class implementing the PluginsManager interface.
+     *
+     * @param clazz
+     *            implementing the PluginsManager interface
+     */
+    public static void registerManager(Class clazz) {
+        getInstance().register(PLUGINS_MANAGER_NAME, PLUGINS_MANAGER_DESCRIPTION,
+                clazz);
+    }
+
+    /**
+     * Registers a class as the default PluginsManager.
+     *
+     * @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);
+    }
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsLibrary.java	(revision 46118)
@@ -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.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.icontheme.IconThemeInstallerFactory.RegisterIconThemeInstaller;
+import org.gvsig.andami.installer.translations.TranslationsInstallerFactory.RegisterTranslationsInstaller;
+import org.gvsig.andami.ui.mdiFrame.DefaultThreadSafeDialogs;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.installer.lib.api.InstallerLibrary;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+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);
+        require(InstallerLibrary.class);
+    }
+
+    protected void doInitialize() throws LibraryException {
+        PluginsLocator.registerDefaultManager(DefaultPluginsManager.class);
+        PluginsLocator.registerActionInfoManager(DefaultActionInfoManager.class);
+        PluginsLocator.registerLocaleManager(DefaultLocaleManager.class);
+
+        ToolsLocator.registerDefaultFirewallManager(DefaultFirewallConfiguration.class);
+        ToolsSwingLocator.registerThreadSafeDialogsManager(DefaultThreadSafeDialogs.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() );
+        caller.add(new RegisterIconThemeInstaller() );
+        if( !caller.call() ) {
+            throw new LibraryException(PluginsLibrary.class, caller.getExceptions());
+        }
+
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/install-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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/images/main/install-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_ca.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_pt.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_cs.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_va.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_fr.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_de.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_eu.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_it.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text.properties	(revision 46118)
@@ -0,0 +1,87 @@
+#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\u00e1 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\u00e1 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\u00faa, es posible\nque no pueda guardar todos los datos. \u00bfDesea 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\u00e1 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\u00f3n '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\u00f3n 'Cerrar' para salir de la aplicaci\u00f3n
+there_are_unsaved_resources=Hay recursos sin guardar
+The_following_resources_could_not_be_saved=Los siguientes recursos no han podido ser guardados
+unsaved_resources=Recursos no guardados
+_do_not_show_again=No volver a mostrar
+_Remember_answer_and_do_not_ask_again=Recordar la respuesta y no volver a preguntar
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_zh.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_en.properties	(revision 46118)
@@ -0,0 +1,83 @@
+#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. \u00bfDo 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
+there_are_unsaved_resources=There are unsaved resources
+The_following_resources_could_not_be_saved=The following resources could not be saved
+unsaved_resources=Unsaved resources
+_do_not_show_again=Don't show again
+_Remember_answer_and_do_not_ask_again=Remember answer and don't ask again
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/org/gvsig/andami/text_gl.properties	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1 @@
+org.gvsig.andami.PluginsLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/iso_639.tab	(revision 46118)
@@ -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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources/default-log4j/log4j.properties	(revision 46118)
@@ -0,0 +1,43 @@
+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 %r [%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.tools.library=INFO
+log4j.logger.org.gvsig.tools.persistence=INFO
+log4j.logger.org.gvsig.i18n.Messages=INFO
+log4j.logger.org.gvsig.installer.lib.impl.DefaultDependenciesCalculator=INFO
+log4j.logger.org.gvsig.tools.dispose.impl.AbstractDisposable=INFO
+
+#
+# JCRS
+log4j.logger.org.gvsig.crs=INFO
+log4j.logger.es.idr.teledeteccion.connection=INFO
+log4j.logger.org.geotools.referencing.operation.projection=INFO
+#
+# JDBC/BBDD
+# Core
+log4j.logger.org.gvsig.fmap.dal.store.jdbc=INFO
+log4j.logger.org.gvsig.fmap.dal.store.jdbc2=INFO
+log4j.logger.org.gvsig.fmap.dal.feature.spi=INFO
+# Data providers
+log4j.logger.org.gvsig.fmap.dal.store.h2=INFO
+log4j.logger.org.gvsig.postgresql.dal=INFO
+log4j.logger.org.gvsig.mssqlserver.dal=INFO
+log4j.logger.org.gvsig.mysql.dal=INFO
+log4j.logger.org.gvsig.spatialite.dal=INFO
+log4j.logger.org.gvsig.oracle.dal=INFO
+# Exoport providers
+log4j.logger.org.gvsig.exportto.swing.prov.jdbc=INFO
+log4j.logger.org.gvsig.exportto.swing.prov.h2=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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-plugins-persistence.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/sample-config.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/castor.properties	(revision 46118)
@@ -0,0 +1 @@
+org.exolab.castor.indent=true
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/andami-config.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-persistence.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/castor/plugin-config.xsd	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/debian.control
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/debian.control	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/debian.control	(revision 46118)
@@ -0,0 +1,16 @@
+Package: gvsig-desktop
+Version: ${GVSIG_VERSION}-${GVSIG_BUILDNUMBER}-1
+Source: http://devel.gvsig.org/svn/gvsig-desktop/tags/org.gvsig.desktop-${CORE_VERSION}/
+Maintainer: gvSIG association <info@gvsig.com>
+Section: graphics
+Homepage: http://www.gvsig.com/en/products/gvsig-desktop
+Priority: optional
+Architecture: ${GVSIG_ARCHITECTURE}
+Depends: default-jre (>=1)
+Description: A powerful, user-friendly, interoperable GIS used by thousands of users worldwide.
+ It is easy to work in a variety of formats with gvSIG  Desktop, vector and raster files, databases and remote services. There are always available all kinds of tools to analyze and manage your geographic information.
+ .
+ gvSIG Desktop is designed to be an easily extensible solution, allowing  thus continually improving the software application and developing tailor made solutions.
+ .
+ gvSIG Desktop is open source software, GNU / GPL license, this makes its free use, distribution, study and improvement.
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/fixProblematicDlls.js
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/fixProblematicDlls.js	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/fixProblematicDlls.js	(revision 46118)
@@ -0,0 +1,59 @@
+
+var fileSystem = WScript.CreateObject("Scripting.FileSystemObject");
+
+function findErrorDll(gdalFolder){
+	
+	var gdalFiles = new Enumerator(gdalFolder.files);
+	var listDll=[];
+
+	for (i=0; !gdalFiles.atEnd(); gdalFiles.moveNext()){
+		
+		var nameFile=gdalFiles.item().Name.toLowerCase();
+		
+		if (nameFile.substr(0,4)!="msvc" && nameFile.slice(-3)=="dll"){
+			if(fileSystem.FileExists("C:\\Windows\\System32\\"+nameFile)){
+				listDll.push(nameFile);
+			}
+		}	
+	}
+	
+	return listDll;
+	
+}
+
+function copyDlls(listDll,sourceFolder){
+	
+	var targetFolder=fileSystem.GetFolder(fileSystem.GetParentFolderName(WScript.ScriptFullName)+"\\..\\gvSIG\\extensiones\\jre\\bin\\");
+
+	for (j=0; j<listDll.length; j++){
+		
+		var fileName=listDll[j];
+		var source=sourceFolder+"\\"+fileName;
+		var target=targetFolder+"\\"+fileName;
+
+		if (!fileSystem.FileExists(target)){
+				fileSystem.CopyFile(source,target,false);
+			}
+		
+	}	
+	
+}	
+	
+function main(){
+	
+	var gdalFolder=fileSystem.GetFolder(fileSystem.GetParentFolderName(WScript.ScriptFullName)+"\\..\\gvSIG\\extensiones\\org.gvsig.gdal.app.mainplugin\\gdal\\bin\\");
+	
+	WScript.Echo("La ejecucion de este script puede causar problemas a tu pc.");
+	
+	var dlls=findErrorDll(gdalFolder);
+	
+	copyDlls(dlls,gdalFolder);
+	
+	WScript.Echo("Operacion finalizada");
+	
+}
+	
+main();
+
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.cmd	(revision 46118)
@@ -0,0 +1,2 @@
+cscript findProblematicDlls.js
+PAUSE
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvSIG.config	(revision 46118)
@@ -0,0 +1,15 @@
+
+###
+GVSIG_HOME_FOLDER="$GVSIG_INSTALL_FOLDER/preferences/gvSIG"
+GVSIG_JAVA_PARAMS="'-DgvSIG.home=$GVSIG_INSTALL_FOLDER/preferences'"
+###
+
+# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
+GVSIG_INITIAL_MEM=256M
+# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
+GVSIG_MAX_MEM=1024M
+# Maximum permanent memory size: needed to load classes and statics
+GVSIG_MAX_PERM_SIZE=128M
+# Default font
+#GVSIG_CUSTOM_FONTS="-DWindows.controlFont=Tahoma-plain-24 -DWindows.menuFont=Tahoma-plain-26 -DPlastic.controlFont=Tahoma-plain-24 -DPlastic.menuFont=Tahoma-plain-24"
+GVSIG_CUSTOM_FONTS=""
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable	(revision 46118)
@@ -0,0 +1,471 @@
+#!/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*-lin-x86-online.zip
+#   - gvSIG-desktop*-lin-x86_64-online.zip
+#   - gvSIG-desktop*-win-x86-online.zip
+#   - gvSIG-desktop*-win-x86_64-online.zip
+#   - gvSIG-desktop*-lin-x86.gvspkg
+#   - gvSIG-desktop*-lin-x86_64.gvspkg
+#   - gvSIG-desktop*-win-x86.gvspkg
+#   - gvSIG-desktop*-win-x86_64.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
+#
+##############################################################################
+
+
+#=============================================
+# JREs to use
+URL_JRE_FOLDER="http://downloads.gvsig.org/download/gvsig-desktop-testing/pool/jre"
+
+GVSPKG_JRE_darwin_x86_64="gvSIG-desktop-2.3.0-jre-1.8.0-72-testing-darwin_macos_10.11-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_lin_x86_64="gvSIG-desktop-2.6.0-jre-1.8.0-311-testing-lin-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_lin_x86="gvSIG-desktop-2.3.0-jre-1.8.0-92-testing-lin-x86-j1_8.gvspkg"
+GVSPKG_JRE_win_x86_64="gvSIG-desktop-2.6.0-jre-1.8.0-311-testing-win-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_win_x86="gvSIG-desktop-2.3.0-jre-1.8.0-73-testing-win-x86-j1_8.gvspkg"
+
+#
+#=============================================
+
+#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"
+
+  #
+  # A veces en el zip los archivos comienzan por "/" y otras no.
+  # Asi que lo primero que hacemos es comprobar eso.
+  #
+  local prefix=""
+  local line=""
+  # El flag -Z1 muestra los ficheros unicamente, similar a -l pero
+  # sin ningun tipo de cabezaras, resumenes o informacion adicional
+  # por cada fichero. Solo el nombre con ruta de cada fichero.
+  local x=$(unzip -Z1 "$PACKAGE_PATH" "*/package.info")
+  if [ "${x:0:1}" == "/" ] ; then
+    prefix="/"
+  fi
+  #
+  # Usamos una redireccion y no un pipe ya que los elementos de un pipe se
+  # ejecutan en un subshell separado y la asignacion a las variables dentro del
+  # while solo tendria efecto en ese subshell.
+  #
+  # Atencion al parametro W del unzip, ya que si lo quitamos y en el zip hay
+  # mas de un "package.info" nos los sacaria todos, y los resultados no serian
+  # los esperados. Solo tenemos que leer el "package.info" que hay en el primer
+  # subdirectorio del zip.
+  # Con el tr intentamos eliminar lo \r ya que algunos package.info generados
+  # desde windows tienen \r.
+  #
+  PACKE_INFO_CONTENTS=$(unzip -nlpWc "$PACKAGE_PATH" "${prefix}*/package.info" | tr -d '\r')
+  while read line ; do
+    case "$line" in
+    type=*)
+      PACKAGE_TYPE=${line#type=}
+      ;;
+    version=*)
+      PACKAGE_VERSION=${line#version=}
+      ;;
+    code=*)
+      PACKAGE_CODE=${line#code=}
+      ;;
+    esac
+  done <<END_OF_PACKAGE_INFO_CONTENTS
+$PACKE_INFO_CONTENTS
+END_OF_PACKAGE_INFO_CONTENTS
+}
+
+
+function install_symbols() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER"
+    mkdir -p "preferences/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
+    cd "preferences/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install symbols $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+function install_icontheme() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER"
+    mkdir -p "preferences/gvSIG/icon-theme"
+    cd "preferences/gvSIG/icon-theme"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install icon theme $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+function install_script() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER"
+    
+    mkdir -p "preferences/gvSIG/plugins/org.gvsig.scripting.app.mainplugin/$PORTABLE_VERSION_WITHOUT_BUILDNUMBER/scripts/addons"
+    cd "preferences/gvSIG/plugins/org.gvsig.scripting.app.mainplugin/$PORTABLE_VERSION_WITHOUT_BUILDNUMBER/scripts/addons"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install script $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+function install_jCRS_EPSG() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER"
+    mkdir -p "preferences/gvSIG/plugins/org.gvsig.projection.app.jcrs/db/EPSG"
+    cd "preferences/gvSIG/plugins/org.gvsig.projection.app.jcrs/db/EPSG"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install jCRS EPSG data base $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+function install_plugin() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER/gvSIG/extensiones"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install plugin $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+function install_translations() {
+    INSTALL_FOLDER="$1"
+
+    cd "$INSTALL_FOLDER/i18n"
+    rm -rf "$PACKAGE_CODE"
+    logger_info "Install translations $PACKAGE_CODE $PACKAGE_VERSION"
+    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
+}
+
+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)"
+        get_package_info $PACKAGE_PATH
+        if include_package $PACKAGE_CODE ; then
+          case $PACKAGE_TYPE in
+          plugin)
+            install_plugin "$INSTALL_FOLDER"
+            ;;
+          jCRS_EPSG)
+            install_jCRS_EPSG "$INSTALL_FOLDER"
+            ;;
+          symbols)
+            install_symbols "$INSTALL_FOLDER"
+            ;;
+          Script)
+            install_script "$INSTALL_FOLDER"
+            ;;
+          translations)
+            install_translations "$INSTALL_FOLDER"
+            ;;
+          icontheme)
+            install_icontheme "$INSTALL_FOLDER"
+            ;;
+          *)
+            echo "ERROR: Type of package $PACKAGE_TYPE of $PACKAGE_NAME not supported."
+            exit 1
+            ;;
+          esac
+        else
+          logger_info "Exclude package $PACKAGE_CODE"
+          #cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
+        fi
+      fi
+    done
+}
+
+function include_package0() {
+    set +e
+    egrep  "^$1\$" "$BASEFOLDER/packages/excludes" >/dev/null
+    FOUND=$?
+    set -e
+    if [ "$FOUND" == 1 ] ; then
+        return 0
+    fi
+    return 1
+}
+
+function include_package() {
+  while read pattern ; do
+    if [ "${1/#${pattern}/ok}" == "ok" ] ; then
+      return 1
+    fi
+  done <<END_OF_EXCLUDE_CONTENTS
+$(cat "$BASEFOLDER/packages/excludes")
+END_OF_EXCLUDE_CONTENTS
+    return 0
+}
+
+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_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 prepare_portable_macos() {
+    echo "Creating MacOS app layout"
+    mkdir -p "$INSTALL_FOLDER/Contents/MacOS"
+    cd "$INSTALL_FOLDER/Contents/MacOS"
+    echo '#!/bin/bash
+cd "$(dirname $0)/../.."
+exec "./gvSIG.sh"
+' >"${PORTABLE_NAME}"
+    chmod a+x "${PORTABLE_NAME}"
+    cp "${PORTABLE_NAME}" "gvSIG"
+    cp "${PORTABLE_NAME}" "gvSIG-desktop"
+    cp "${PORTABLE_NAME}" "gvSIG-desktop-${PORTABLE_VERSION/-*/}"
+    cp "${PORTABLE_NAME}" "gvSIG-desktop-${PORTABLE_VERSION}"
+    rm -f "$INSTALL_FOLDER/gvSIG/extensiones/org.gvsig.gdal.app.mainplugin/gdal/libc++.1.dylib"
+    cd "$INSTALL_FOLDER"
+}
+
+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 expandsVarsOnFile() {
+  sed 's/\${INSTALL_DRIVE}/./
+s/\${INSTALL_PATH}/./' "$1" >"$1.tmp"
+  mv "$1.tmp" "$1"
+}
+
+function download_jre() {
+  GVSPKG_JRE="GVSPKG_JRE_${PORTABLE_OSFAMILY}_${PORTABLE_PLATFORM}"
+  GVSPKG_JRE="${!GVSPKG_JRE}"
+
+  if [ ! -f "${GVSPKG_JRE}" ] ; then
+    echo "Downloading JRE ${URL_JRE_FOLDER}/${GVSPKG_JRE}"
+    wget  -q "${URL_JRE_FOLDER}/${GVSPKG_JRE}"
+  fi
+}
+
+function mkdist() {
+    cd $BASEFOLDER/standard
+
+    # OS code (lin/win/darwin) + distribution + version
+    export PORTABLE_OS="$1"
+
+    # OS family code (lin/win/darwin)
+    export PORTABLE_OSFAMILY="${PORTABLE_OS/_*/}"
+
+    # OS name (linux/windows/darwin) for show only
+    export PORTABLE_OSNAME="$2"
+
+    # Architectute X86, x86_64
+    export PORTABLE_PLATFORM="$3"
+
+    # OS used to locate the online zip
+    export ONLINE_OS
+    case "$PORTABLE_OSFAMILY" in
+    darwin)
+        ONLINE_OS="lin"
+        ;;
+    lin)
+        ONLINE_OS="lin"
+        ;;
+    win)
+        ONLINE_OS="win"
+        ;;
+    *)
+        ONLINE_OS="$PORTABLE_OS"
+        ;;
+    esac
+
+    export PORTABLE_VERSION=$(expr *${ONLINE_OS}-${PORTABLE_PLATFORM}-online.zip : "gvSIG-desktop-\\([0-9.]*-[0-9]*\\)")
+    export PORTABLE_STATUS=$(expr *${ONLINE_OS}-${PORTABLE_PLATFORM}-online.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 PORTABLE_VERSION_WITHOUT_BUILDNUMBER="${PORTABLE_VERSION/-*/}"
+    export INSTALL_FOLDER="$TARGET/$PORTABLE_NAME"
+
+    logger_info "
+=
+=    Creating portable for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})
+=
+    "
+    logger_info "Removing previous files"
+    rm -rf "$TARGET/gvsig-desktop"
+    rm -rf "$INSTALL_FOLDER"
+    rm -f  "$TARGET/${PORTABLE_NAME}"
+    rm -f  "$TARGET/${PORTABLE_NAME}.zip"
+    rm -rf "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+
+    logger_info "Uncompressing ${PORTABLE_OSNAME} (${ONLINE_OS}) base files"
+    cd $TARGET
+    mkdir $PORTABLE_NAME
+    cd $PORTABLE_NAME
+    ff="$BASEFOLDER/standard/gvSIG-desktop-$PORTABLE_VERSION-$PORTABLE_STATUS-${ONLINE_OS}-${PORTABLE_PLATFORM}-online.zip"
+    if [ ! -f "$ff" ] ; then
+       echo "ERROR: Can't locate online zip for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})"
+       echo "ERROR: Expected file $ff"
+       exit 1
+    fi
+    unzip -nqq "$ff"
+
+    logger_info "Uncompressing ${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} package set"
+    mkdir -p "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    cd "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+    ff="$BASEFOLDER/standard/gvSIG-desktop-${PORTABLE_VERSION}-${PORTABLE_STATUS}-${PORTABLE_OS}-${PORTABLE_PLATFORM}.gvspks"
+    if [ ! -f "$ff" ] ; then
+       echo "ERROR: Can't locate package set for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})"
+       echo "ERROR: Expected file $ff"
+       exit 1
+    fi
+    unzip -nqq "$ff"
+
+    download_jre
+
+    echo "Remove platform independent GDAL version"
+    echo "... package $TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}/gvSIG-desktop-${PORTABLE_VERSION/-*/}-org.gvsig.gdal.app.mainplugin-"*-all-all-j1_7.gvspkg
+    rm -f "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}/gvSIG-desktop-${PORTABLE_VERSION/-*/}-org.gvsig.gdal.app.mainplugin-"*-all-all-j1_7.gvspkg
+
+    install_packages "$INSTALL_FOLDER" "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
+
+    install_packages "$INSTALL_FOLDER" "$BASEFOLDER/packages/custom"
+
+    install_portable_configuration_files
+
+    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
+
+    case "$PORTABLE_OSFAMILY" in
+    darwin)
+        prepare_portable_macos
+        rm -rf "${INSTALL_FOLDER}.app"
+        mv "$INSTALL_FOLDER" "${INSTALL_FOLDER}.app"
+        INSTALL_FOLDER="${INSTALL_FOLDER}.app"
+        PORTABLE_NAME="${PORTABLE_NAME}.app"
+        ;;
+    win)
+        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-desktop.vbs"
+        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-desktop.cmd"
+        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-package-installer.cmd"
+        ;;
+    esac
+
+    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 created for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})
+=
+    "
+}
+
+
+function main() {
+    mkdist lin linux x86_64
+    mkdist win windows x86_64
+    mkdist lin linux x86
+    mkdist win windows x86
+    mkdist lin_ubuntu_14.04 linux x86
+    mkdist lin_ubuntu_14.04 linux x86_64
+    mkdist darwin_macos_10.11 darwin x86_64
+    echo "Creation ended"
+}
+
+mkdir -p "$TARGET"
+main | tee "$TARGET/${SCRIPT_NAME}.log"
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/make-portable
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/h2sql
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/h2sql	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/h2sql	(revision 46118)
@@ -0,0 +1,99 @@
+#!/bin/bash
+#
+# gvSIG. Desktop Geographic Information System.
+#
+# Copyright (C) 2007-2020 gvSIG Association.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# For any additional information, do not hesitate to contact us
+# at info AT gvsig.com, or visit our website www.gvsig.com.
+#
+
+# h2sql
+
+ARGS="$@" # Can't use ${@/ , use ${ARGS/ instead
+
+
+# Go into the gvSIG installation folder, just in case
+x=$(dirname "$0")
+cd "$x"
+cd ..
+
+GVSIG_INSTALL_FOLDER="$PWD"
+GVSIG_CLASSPATH=""
+CPSEP=":"
+
+UNAME=$(uname -m -o -s | tr '[:upper:]' '[:lower:]')
+# Use -s to identify cygwin
+case "$UNAME" in
+*cygwin*)
+    OS="win"
+    CPSEP=";"
+    ;;
+*darwin*)
+    OS="darwin"
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+*win*)
+    OS="win"
+    CPSEP=";"
+    ;;
+*lin*)
+    OS="lin"
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+*)
+    OS="unknown"
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+esac
+
+
+add_classpath() {
+  GVSIG_CLASSPATH="$GVSIG_CLASSPATH${CPSEP}$1"
+}
+
+
+# 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
+    add_classpath "$i"
+  fi
+done
+for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
+  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
+    add_classpath "$i"
+  fi
+done
+
+# Load H2 jars in the classpath
+for i in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/org.gvsig.h2spatial.app.mainplugin/lib/"*.jar ; do
+  if [ "$i" != "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/org.gvsig.h2spatial.app.mainplugin/lib/*.jar" -a "$i" != "" ]; then
+    add_classpath "$i"
+  fi
+done
+
+if test -e "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre/bin/java" ; then
+  JAVA="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre/bin/java"
+else
+  JAVA="java"
+fi
+exec "$JAVA" -cp "$GVSIG_CLASSPATH"  org.h2.tools.Shell $ARGS
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/h2sql
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/allow-vbs-run-as-admin.reg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/allow-vbs-run-as-admin.reg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/allow-vbs-run-as-admin.reg	(revision 46118)
@@ -0,0 +1,9 @@
+Windows Registry Editor Version 5.00
+
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBSFile\Shell\runas\Command]
+@=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
+  00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,\
+  53,00,63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,22,00,20,00,22,\
+  00,25,00,31,00,22,00,20,00,25,00,2a,00,00,00
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvsig-debcreate
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvsig-debcreate	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvsig-debcreate	(revision 46118)
@@ -0,0 +1,161 @@
+#!/bin/bash
+#
+
+#set -x
+
+if [ ! -f "gvSIG.sh" ] ; then
+  echo "Usage: $0"
+  echo "  Current folder can be a gvSIG installation"
+  exit -1
+fi
+
+GVSIG_INSTALL_FOLDER="$PWD"
+TARGET_FOLDER="/tmp/gvsig-deb"
+
+function message() {
+  echo $@
+}
+
+
+initArchitecture() {
+  architecture=""
+  cd "$GVSIG_INSTALL_FOLDER"
+  eval $(find . -name package.info -exec grep "architecture=[^a]" {} ';' | sort | head -n 1)
+  if [ "${architecture}" == "" ] ; then
+    echo "Can't determine the gvSIG installation architecture." >&2
+    exit 1
+  fi
+  if [ "${architecture/*x86_64*/x86_64}" == "x86_64" ] ; then
+    GVSIG_ARCHITECTURE="amd64"
+  else
+    GVSIG_ARCHITECTURE="x86"
+  fi
+  cd - >/dev/null
+}
+
+CORE_VERSION=$(echo lib/org.gvsig.andami-*.jar)
+CORE_VERSION=${CORE_VERSION/lib\/org.gvsig.andami-/}
+CORE_VERSION=${CORE_VERSION/.jar/}
+GVSIG_VERSION=$(sed -n 's/^version=\(.*\)/\1/p' package.info)
+GVSIG_BUILDNUMBER=$(sed -n 's/^buildNumber=\(.*\)/\1/p' package.info)
+initArchitecture
+
+
+sudo rm -rf "$TARGET_FOLDER"
+mkdir -p "$TARGET_FOLDER/DEBIAN"
+sed "s/\${GVSIG_ARCHITECTURE}/${GVSIG_ARCHITECTURE}/
+s/\${GVSIG_VERSION}/${GVSIG_VERSION}/
+s/\${GVSIG_BUILDNUMBER}/${GVSIG_BUILDNUMBER}/
+s/\${CORE_VERSION}/${CORE_VERSION}/" "$GVSIG_INSTALL_FOLDER/tools/debian.control" >"$TARGET_FOLDER/DEBIAN/control"
+
+#=============================
+# Load debian.control values
+#
+typeset -l Package
+eval $(sed -n 's/\([A-Za-z0-9]*\)[ ]*:[ ]*\(.*\)/\1="\2"/p' "$TARGET_FOLDER/DEBIAN/control")
+
+#=============================
+# Prepare target folder
+
+message "Prepare package folder in $TARGET_FOLDER"
+
+mkdir -p "$TARGET_FOLDER/DEBIAN"
+mkdir -p "$TARGET_FOLDER/usr/bin"
+mkdir -p "$TARGET_FOLDER/usr/share/applications"
+mkdir -p "$TARGET_FOLDER/usr/share/menu"
+mkdir -p "$TARGET_FOLDER/usr/share/pixmaps"
+mkdir -p "$TARGET_FOLDER/usr/local/bin"
+mkdir -p "$TARGET_FOLDER/usr/local/lib/${Package}/${Version}-${Architecture}"
+
+#===========================================
+# Create gvsig launcher in /usr/local/bin
+
+message "Create gvsig launcher in $TARGET_FOLDER/usr/local/bin"
+echo "#!/bin/sh
+exec /usr/local/lib/${Package}/default/gvSIG.sh \$@
+" > "$TARGET_FOLDER/usr/local/bin/${Package}"
+
+#============================================
+# Link gvSIG launcher to /usr/bin
+
+message "Link gvSIG launcher to $TARGET_FOLDER/usr/bin"
+cd "$TARGET_FOLDER/usr/bin"
+ln -s "../local/bin/${Package}" .
+
+#============================================
+# Link installation to default folder
+
+message "Link installation to default folder"
+cd "$TARGET_FOLDER/usr/local/lib/${Package}"
+ln -s "${Version}-${Architecture}" "default"
+
+#===========================================
+# Create postinst for install dsktop icons
+
+message "Creating post installation script"
+cat <<EOF-postinst >"$TARGET_FOLDER/DEBIAN/postinst"
+#!/bin/sh
+set -e
+if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
+	update-menus
+fi
+EOF-postinst
+
+
+#===========================================
+# Create menu entry file, icon and desktop file
+
+message "Create desktop file, icon and menu entry file"
+
+DesktopCategory="Graphics"
+cp "$GVSIG_INSTALL_FOLDER/gvsig-icon48x48.png" "$TARGET_FOLDER/usr/share/pixmaps/${Package}.png"
+
+cat <<EOF-menu >"$TARGET_FOLDER/usr/share/menu/${Package}"
+?package(${Package}):command="/usr/local/bin/${Package}" icon="/usr/share/pixmaps/${Package}.png" needs="X11" section="Applications/${DesktopCategory}" title="gvSIG desktop" hotkey="gvSIG"
+EOF-menu
+
+cat <<EOF-desktop-file >"$TARGET_FOLDER/usr/share/applications/${Package}.desktop"
+Name=gvSIG desktop
+Version=${Version}
+Exec=${Package}
+Comment=
+Icon=/usr/share/pixmaps/${Package}.png
+Type=Application
+Terminal=false
+StartupNotify=true
+Encoding=UTF-8
+Categories=${DesktopCategory};
+EOF-desktop-file
+
+#============================================
+# Copy files to target folder
+
+message "Copy installation files..."
+cd "$GVSIG_INSTALL_FOLDER"
+
+cp -R . "$TARGET_FOLDER/usr/local/lib/${Package}/${Version}-${Architecture}"
+
+#============================================
+# Fix permissions
+
+message "Fix permissions"
+cd "$TARGET_FOLDER"
+
+find . -type d -exec chmod go=rx,u=rwx {} ';'
+find . -type f -exec chmod go=r,u=rw {} ';'
+
+chmod go=rx,u=rwx "DEBIAN/postinst"
+chmod go=r,u=rw "usr/share/applications/${Package}.desktop"
+chmod go=rx,u=rwx "usr/local/bin/${Package}"
+chmod go=rx,u=rwx "usr/local/lib/${Package}/${Version}-${Architecture}/gvSIG.sh"
+
+sudo chown -R root.root .
+
+#============================================
+# Create debian package
+
+cd "$TARGET_FOLDER"
+
+message "Creating debian package in $TARGET_FOLDER/${Package}_${Version}_${Architecture}.deb"
+sudo dpkg -b . "${Package}_${Version}_${Architecture}.deb"
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/gvsig-debcreate
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.js
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.js	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/findProblematicDlls.js	(revision 46118)
@@ -0,0 +1,46 @@
+
+var fileSystem = WScript.CreateObject("Scripting.FileSystemObject");
+
+function findErrorDll(gdalFolder){
+	
+	var gdalFiles = new Enumerator(gdalFolder.files);
+	var listDll=[];
+
+	for (i=0; !gdalFiles.atEnd(); gdalFiles.moveNext()){
+		
+		var nameFile=gdalFiles.item().Name.toLowerCase();
+		
+		if (nameFile.substr(0,4)!="msvc" && nameFile.slice(-3)=="dll"){
+			if(fileSystem.FileExists("C:\\Windows\\System32\\"+nameFile)){
+				listDll.push(nameFile);
+			}
+		}	
+	}
+	
+	return listDll;
+	
+}
+
+function main(){
+	
+	var gdalFolder=fileSystem.GetFolder(fileSystem.GetParentFolderName(WScript.ScriptFullName)+"\\..\\gvSIG\\extensiones\\org.gvsig.gdal.app.mainplugin\\gdal\\bin\\");
+	var jreFolder=fileSystem.GetFolder(fileSystem.GetParentFolderName(WScript.ScriptFullName)+"\\..\\gvSIG\\extensiones\\jre\\bin\\");
+	
+	var dlls=findErrorDll(gdalFolder);
+	
+	if (dlls.length==0){
+		
+		WScript.Echo("No se han encontrado librerias duplicadas");
+		return
+	}
+	
+	var dll2show="";
+		
+	for (j=0; j<dlls.length; j++){
+		dll2show+=dlls[j]+"\n";
+	}
+	
+	WScript.Echo("Encontradas las siguientes librerias duplicadas: \n"+dll2show+"\n\nPuede tratar de solucionar los problemas copiando estas librerias de la carpeta: \n"+gdalFolder+"\na la carpeta: \n"+jreFolder);
+}
+	
+main();
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/mkexec
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/mkexec	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/mkexec	(revision 46118)
@@ -0,0 +1,248 @@
+#!/bin/bash
+
+#set -x
+set -e
+
+#=============================================
+# JREs to use
+URL_JRE_FOLDER="http://downloads.gvsig.org/download/gvsig-desktop-testing/pool/jre"
+
+GVSPKG_JRE_darwin_x86_64="gvSIG-desktop-2.3.0-jre-1.8.0-72-testing-darwin_macos_10.11-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_lin_x86_64="gvSIG-desktop-2.6.0-jre-1.8.0-311-testing-lin-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_lin_x86="gvSIG-desktop-2.3.0-jre-1.8.0-92-testing-lin-x86-j1_8.gvspkg"
+GVSPKG_JRE_win_x86_64="gvSIG-desktop-2.6.0-jre-1.8.0-311-testing-win-x86_64-j1_8.gvspkg"
+GVSPKG_JRE_win_x86="gvSIG-desktop-2.3.0-jre-1.8.0-73-testing-win-x86-j1_8.gvspkg"
+
+#=============================================
+# self extractors to use
+URL_SELFEXTRACT_FOLDER="http://downloads.gvsig.org/download/gvsig-desktop/runtimes/selfextract"
+
+#=============================================
+# Where to find izpack installers
+URL_DISTS="http://downloads.gvsig.org/download/gvsig-desktop-testing/dists"
+
+
+
+#=============================================
+# for wget >= 1.16
+WGET_SHOW_PROGRESSBAR="--show-progress"
+WGET_SHOW_PROGRESSBAR=""
+
+mkexec_unx() {
+  OS=$1
+  ARCH=$2
+  INSTALL_JAR="$3"
+  WORKINGFOLDER="$4"
+  OSFamily="${OS/_*/}"
+
+  INSTALL_JAR_BASENAME=$(basename "$INSTALL_JAR")
+  GVSPKG_JRE="GVSPKG_JRE_${OSFamily}_${ARCH}"
+  GVSPKG_JRE="${!GVSPKG_JRE}"
+  SELF_EXTRACT="selfextract-${OSFamily}-${ARCH}"
+  DATA_FOLDER="$WORKINGFOLDER/data-${OS}-$ARCH"
+  DATA_ARCHIVE="$WORKINGFOLDER/data-${OS}-$ARCH.tar"
+
+  cd "$WORKINGFOLDER"
+
+  echo "Making selfextract for ${OS} ${ARCH} using:"
+  echo "  selfextract: ${SELF_EXTRACT}"
+  echo "  jre: ${GVSPKG_JRE}"
+  echo "  java installer: ${INSTALL_JAR_BASENAME}"
+  echo "  working folder: ${WORKINGFOLDER}"
+
+
+  echo "Remove previous temporary files"
+  rm -f "$DATA_ARCHIVE"
+  rm -rf "$DATA_FOLDER"
+
+  if [ ! -f ${SELF_EXTRACT} ] ; then
+    echo "Downloading selfextract program ${SELF_EXTRACT}"
+    wget  -q $WGET_SHOW_PROGRESSBAR "$URL_SELFEXTRACT_FOLDER/${OSFamily}-$ARCH/${SELF_EXTRACT}"
+    chmod a+x ${SELF_EXTRACT}
+  fi
+
+  if [ ! -f "${GVSPKG_JRE}" ] ; then
+    echo "Downloading JRE $URL_JRE_FOLDER/${GVSPKG_JRE}"
+    wget  -q $WGET_SHOW_PROGRESSBAR "$URL_JRE_FOLDER/${GVSPKG_JRE}"
+  fi
+
+  echo "Creating temp folder"
+  mkdir -p "$DATA_FOLDER"
+  cd "$DATA_FOLDER"
+
+  # -------------------------------------------------------------
+  # Preparamos en $DATA_FOLDER los ficheros que vamos a meter en el tar
+  # que queremos que sea autoextraible y autoejecutable.
+  # - La carpeta jre
+  # - El instalador del izpack
+  # - El autorun.sh
+  #
+  echo "Extracting JRE"
+  unzip -q  "../${GVSPKG_JRE}" 2>&1 | sed  '/warning:  stripped absolute path spec/ d'
+  chmod a+x "jre/bin/java"
+
+  echo "Coping $INSTALL_JAR"
+  cp "$INSTALL_JAR" .
+
+  echo "#!/bin/sh
+exec ./jre/bin/java -jar \"$INSTALL_JAR_BASENAME\"
+" > autorun.sh
+  chmod a+x "autorun.sh"
+
+  # -------------------------------------------------------------
+  # Creamos el tar
+  echo "Creating archive file (tar)"
+  tar cf "$DATA_ARCHIVE" .
+
+  # -------------------------------------------------------------
+  # Creamos con el fichero tar generado el autoextraible
+  echo "Making selfextract with archive file"
+  {
+    cat ${WORKINGFOLDER}/${SELF_EXTRACT}
+    echo ";!@selfextract@!"
+    cat "$DATA_ARCHIVE"
+  } > "${INSTALL_JAR%.jar}.run"
+  echo "Created ${INSTALL_JAR%.jar}.run"
+  echo ""
+}
+
+
+mkexec_win() {
+  OSFamily="win"
+  OS="$1"
+  ARCH=$2
+  INSTALL_JAR="$3"
+  WORKINGFOLDER="$4"
+
+  INSTALL_JAR_BASENAME=$(basename "$INSTALL_JAR")
+  GVSPKG_JRE="GVSPKG_JRE_${OSFamily}_${ARCH}"
+  GVSPKG_JRE="${!GVSPKG_JRE}"
+  SELF_EXTRACT="7zSD-${OSFamily}-${ARCH}.sfx"
+  DATA_FOLDER="$WORKINGFOLDER/data-${OSFamily}-$ARCH"
+  DATA_ARCHIVE="$WORKINGFOLDER/data-${OSFamily}-$ARCH.7z"
+
+  cd "$WORKINGFOLDER"
+
+  echo "Making selfextract for ${OSFamily} ${ARCH} using:"
+  echo "  selfextract: ${SELF_EXTRACT}"
+  echo "  jre: ${GVSPKG_JRE}"
+  echo "  java installer: ${INSTALL_JAR_BASENAME}"
+  echo "  working folder: ${WORKINGFOLDER}"
+
+  echo "Remove previous temporary files"
+  rm -f "$DATA_ARCHIVE"
+  rm -rf "$DATA_FOLDER"
+
+  if [ ! -f ${SELF_EXTRACT} ] ; then
+    echo "Downloading selfextract program"
+    wget  -q $WGET_SHOW_PROGRESSBAR "$URL_SELFEXTRACT_FOLDER/${OSFamily}-$ARCH/$SELF_EXTRACT"
+  fi
+
+  if [ ! -f "${GVSPKG_JRE}" ] ; then
+    echo "Downloading JRE $URL_JRE_FOLDER/${GVSPKG_JRE}"
+    wget  -q $WGET_SHOW_PROGRESSBAR  "$URL_JRE_FOLDER/${GVSPKG_JRE}"
+  fi
+
+  echo "Creating temp folder"
+  mkdir -p "$DATA_FOLDER"
+  cd "$DATA_FOLDER"
+
+
+  # -------------------------------------------------------------
+  # Preparamos en $DATA_FOLDER los ficheros que vamos a meter en el 7zip
+  # que queremos que sea autoextraible y autoejecutable.
+  # - La carpeta jre
+  # - El instalador del izpack
+  #
+  echo "Extracting JRE"
+  unzip -q  "../${GVSPKG_JRE}" 2>&1 | sed  '/warning:  stripped absolute path spec/ d'
+
+  echo "Copying $INSTALL_JAR"
+  cp "$INSTALL_JAR" .
+
+  # -------------------------------------------------------------
+  # Creamos el 7zip
+  echo "Creating archive file (7zip)"
+  7z a "$DATA_ARCHIVE" . >/dev/null
+
+  # -------------------------------------------------------------
+  # Creamos con el fichero 7zip generado el autoextraible
+  echo "Making selfextract with archive file"
+
+    SFX_CONFIG=";!@Install@!UTF-8!
+RunProgram=\".\\jre\\bin\\javaw.exe -jar .\\${INSTALL_JAR_BASENAME}\"
+GUIMode=\"1\"
+ExtractTitle=\"gvSIG Desktop installation.\"
+Title=\"gvSIG Desktop installation.\"
+GUIFlags=\"2+4\"
+;!@InstallEnd@!"
+
+    echo "SFX config
+==========
+${SFX_CONFIG}
+=========="
+
+  {
+    cat ${WORKINGFOLDER}/${SELF_EXTRACT}
+    echo "${SFX_CONFIG}"
+    cat "$DATA_ARCHIVE"
+  } > "${INSTALL_JAR%.jar}.exe"
+
+  echo "Created ${INSTALL_JAR%.jar}.exe"
+  echo ""
+}
+
+
+mkexec() {
+  OS="$1"
+  ARCH="$2"
+  INSTALL_JAR="$3"
+  WORKINGFOLDER="$4"
+  OSFamily="${OS/_*/}"
+  mkdir -p "$WORKINGFOLDER"
+  if [ "${OSFamily}" == "lin" ] ; then
+    mkexec_unx "$OS" "$ARCH" "$INSTALL_JAR" "$WORKINGFOLDER"
+  elif [ "${OSFamily}" == "darwin" ] ; then
+    mkexec_unx "$OS" "$ARCH" "$INSTALL_JAR" "$WORKINGFOLDER"
+  else
+    mkexec_win "$OS" "$ARCH" "$INSTALL_JAR" "$WORKINGFOLDER"
+  fi
+
+}
+
+main() {
+  if [ "$#" != "5" ] ; then
+    echo "$0: Usage:
+  $0 gvsig-version gvsig-buildnumber gvsig-state gvsig-distribution folder" 2>&1
+    exit 1
+  fi
+  GVSIG_VERSION="$1"
+  GVSIG_BUILDNUMBER="$2"
+  GVSIG_STATE="$3"
+  GVSIG_DISTRIBUTION="$4"
+  ROOTFOLDER="$5"
+
+  echo "
+Making selfextract:
+  root folder=$ROOTFOLDER
+"
+  mkdir -p "$ROOTFOLDER"
+
+  for os_arch in "lin x86_64" "win x86_64" "lin x86" "win x86" "darwin_macos_10.11 x86_64" "lin_ubuntu_14.04 x86" "lin_ubuntu_14.04 x86_64"
+  do
+    cd "$ROOTFOLDER"
+    OS="${os_arch/ */}"
+    ARCH="${os_arch/* /}"
+    INSTALL_JAR_BASENAME="gvSIG-desktop-${GVSIG_VERSION}-${GVSIG_BUILDNUMBER}-${GVSIG_STATE}-${OS}-${ARCH}-${GVSIG_DISTRIBUTION}.jar"
+    INSTALL_JAR="$ROOTFOLDER/$INSTALL_JAR_BASENAME"
+    if [ ! -f "${INSTALL_JAR}" ] ; then
+      echo "Downloading installer ${INSTALL_JAR_BASENAME}"
+      wget  -q $WGET_SHOW_PROGRESSBAR "$URL_DISTS/${GVSIG_VERSION}/builds/${GVSIG_BUILDNUMBER}/${INSTALL_JAR_BASENAME}"
+    fi
+    mkexec "$OS" "$ARCH" "$INSTALL_JAR" "$ROOTFOLDER/mkexec.tmp"
+  done
+  rm -rf "$ROOTFOLDER/mkexec.tmp"
+}
+
+main $@
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools/mkexec
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/tools
___________________________________________________________________
Added: svn:ignore
   + .debian.control.kate-swp
.make-portable.kate-swp
.gvsig-debcreate.kate-swp
.mkexec.kate-swp
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LICENSE.txt	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/theme/andami-theme.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-package-installer.cmd	(revision 46118)
@@ -0,0 +1,3 @@
+@echo off
+cd /d "${INSTALL_PATH}"
+busybox sh gvSIG.sh --install
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/LEEME.txt	(revision 46118)
@@ -0,0 +1,22 @@
+gvSIG Desktop v2.4.1.
+
+ - (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, Linux y Mac. Probado en Windows 10, Linux Ubuntu/Debian.
+
+ Software instalado (disponible en http://www.oracle.com)
+  - M�quina Virtual Java 1.8.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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/install/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/lib/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/README.txt	(revision 46118)
@@ -0,0 +1,21 @@
+gvSIG Desktop v2.4.1.
+
+ - (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, Linux and Mac. Tested in Windows 10, Linux Ubuntu/Debian.
+
+ Installed software (available at http://www.oracle.com)
+  - Java VM 1.8.0.
+
+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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.vbs
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.vbs	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.vbs	(revision 46118)
@@ -0,0 +1,3 @@
+Set shell = CreateObject("Wscript.Shell")
+shell.CurrentDirectory = "${INSTALL_PATH}"
+shell.Run "busybox sh gvSIG.sh", 0, True
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/i18n/locale.config	(revision 46118)
@@ -0,0 +1,25 @@
+#
+# Default locales
+#
+locale=es
+locale=en
+locale=en_US
+locale=ca
+locale=de
+locale=cs
+locale=eu
+locale=fr
+locale=gl
+locale=el
+locale=it
+locale=km
+locale=pl
+locale=pt
+locale=pt_BR
+locale=ro
+locale=ru
+locale=sr
+locale=sw
+locale=tr
+locale=vl
+locale=zh
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/update/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.config
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.config	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.config	(revision 46118)
@@ -0,0 +1,9 @@
+# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
+GVSIG_INITIAL_MEM=256M
+# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
+GVSIG_MAX_MEM=1024M
+# Maximum permanent memory size: needed to load classes and statics
+GVSIG_MAX_PERM_SIZE=128M
+# Default font
+#GVSIG_CUSTOM_FONTS="-DWindows.controlFont=Tahoma-plain-24 -DWindows.menuFont=Tahoma-plain-26 -DPlastic.controlFont=Tahoma-plain-24 -DPlastic.menuFont=Tahoma-plain-24"
+GVSIG_CUSTOM_FONTS=""
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/native/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh	(revision 46118)
@@ -0,0 +1,675 @@
+#!/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.
+#
+
+# gvSIG.sh
+
+#
+# Notes:
+# - find command in busybox (win32) don't support "-exec"
+# - trap command in busybox (win32) don't support "trap comando ERR"
+# - busybox (win32) don't support statement "local"
+# - Careful with loop "while", changes in variables within the loop are
+#   lost when you leave this.  Use "for" loops to avoid this.
+# - busybox (win32) don't support typeset
+#
+
+#set -x
+set -e
+
+ARGS="$@" # Can't use ${@/ , use ${ARGS/ instead
+
+#if [ "$BASH_VERSION" = "" ] ; then
+#    echo "gvSIG.sh is not running with a bash shell"
+#    if type bash 2>/dev/null ; then
+#        echo "Relaunch gvSIG.sh with a bash shell."
+#        exec bash $@
+#    else
+#        echo "Can't locate a bash, continue the execution with current shell."
+#    fi
+#fi
+
+onerror() {
+  set +x
+  echo "Error executing the command:"
+  echo ">>> $BASH_COMMAND <<<"
+  echo "At line $BASH_LINENO"
+  exit 1
+}
+#trap onerror ERR
+
+####################
+# Identify OS and Architecture  #
+####################
+
+UNAME=$(uname -m -o -s | tr '[:upper:]' '[:lower:]')
+# Use -s to identify cygwin
+case "$UNAME" in
+*cygwin*)
+    # gvSIG installation folder
+    export GVSIG_INSTALL_FOLDER=$($CYGPATH -am "$PWD")
+    # gvSIG home folder
+    export HOME=$($CYGPATH -am "$USERPROFILE")
+    OS="win"
+    ARG_D32=""
+    CPSEP=";"
+    CYGWIN="yes"
+    CYGPATH="$PWD/cygpath.exe"
+    CYGCHECK="$PWD/cygcheck.exe"
+    # In developmen mode with cywin installed ?
+    test -f "$CYGPATH" || CYGPATH=$(type -P cygpath)
+    test -f "$CYGCHECK" || CYGCHECK=$(type -P cygcheck)
+    ;;
+*darwin*)
+    OS="darwin"
+    ARG_D32=""
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+*win*)
+    OS="win"
+    ARG_D32=""
+    CPSEP=";"
+    CYGWIN="no"
+    CYGPATH="./cygpath -am"
+    CYGCHECK="./cygcheck.exe"
+    ;;
+*lin*)
+    OS="lin"
+    # Only linux support -d32 arg
+    ARG_D32="-d32"
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+*)
+    OS="unknown"
+    ARG_D32=""
+    CPSEP=":"
+    CYGWIN="no"
+    ;;
+esac
+
+case "$UNAME" in
+*x86_64*)
+    ARCH="x86_64"
+    ;;
+*amd64*)
+    ARCH="x86_64"
+    ;;
+*)
+    ARCH="x86"
+    ;;
+esac
+
+
+if [ "${OS}" == "win" ] ; then
+  if [ "$CYGWIN" = "yes" ] ; then
+    xmkdir() {
+      if [ "$1" == "-p" ] ; then
+        # La criatura falla si intentamos hacer algo como:
+        #   mkdir c:/algo1/algo2
+        #   mkdir /cygdrive/c/algo1/algo2
+        # Lo primero nos aseguramos que el path esta en el formato
+        # que esperamos, el de windows "C:/algo1/algo2"
+        # luego hacemos un:
+        #   cd /cygdrive/c
+        # Y por ultimo un:
+        #   mkdir -p algo1/algo2
+        xmkdir_path=$($CYGPATH -am "$2")
+        if [ "${xmkdir_path:1:2}" == ":/" ] ; then
+          cd "/cygdrive/${xmkdir_path:0:1}"
+          if mkdir -p "${xmkdir_path:3}" ; then
+            cd - >/dev/null
+          else
+            cd - >/dev/null
+            false
+          fi
+        else
+          mkdir -p "$2"
+        fi
+      else
+        mkdir "$1"
+      fi
+    }
+  else
+    xmkdir() {
+      if [ "$1" == "-p" ] ; then
+        # La criatura falla si intentamos hacer algo como:
+        #   mkdir c:/algo1/algo2
+        # Asi que primero hacemos un:
+        #   cd c:/
+        # Y luego un:
+        #   mkdir -p algo1/algo2
+        #
+        if [ "${2:1:2}" == ":/" ] ; then
+          cd "${2:0:3}"
+          if mkdir -p "${2:3}" ; then
+            cd - >/dev/null
+          else
+            cd - >/dev/null
+            false
+          fi
+        else
+          mkdir -p "$2"
+        fi
+      else
+        mkdir "$1"
+      fi
+    }
+  fi
+else
+  xmkdir() {
+    mkdir "$@"
+  }
+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
+x=$(dirname "$0")
+cd "$x"
+
+if [ "$GVSIG_APPLICATION_NAME" = "" ] ; then
+  GVSIG_APPLICATION_NAME=gvSIG
+fi
+export GVSIG_APPLICATION_NAME
+
+# gvSIG installation and home folder
+if [ "$CYGWIN" = "yes" ] ; then
+  # gvSIG installation folder
+  export GVSIG_INSTALL_FOLDER=$($CYGPATH -am "$PWD")
+  # gvSIG home folder
+  export HOME=$($CYGPATH -am "$USERPROFILE")
+else
+  # gvSIG installation folder
+  export GVSIG_INSTALL_FOLDER="$PWD"
+  # gvSIG home folder
+  if [ "$OS" = "win" ] ; then
+    # https://redmine.gvsig.net/redmine/issues/4033
+    export HOME="$USERPROFILE"
+  fi
+fi
+export GVSIG_HOME_FOLDER="$HOME/$GVSIG_APPLICATION_NAME"
+
+####################
+# Load config file #
+####################
+
+update_user_preferences() {
+  if [ "$GVSIG_HOME_FOLDER" = "$GVSIG_INSTALL_FOLDER/preferences" ] ; then
+    # It is a portable using the installation preferences folder as the user preferences folder.
+    # We do not do anything.
+    return
+  fi
+  if [ ! -d "$GVSIG_INSTALL_FOLDER/preferences" ] ; then
+    # There is no installation preference folder. We do not do anything.
+    return
+  fi
+  
+  echo "Updating preferences in personal folder..."
+  echo "This may take a moment."
+  
+  if [ ! -d "$GVSIG_HOME_FOLDER" ] ; then
+    # There is no folder with the gvSIG preferences in the user's folder. 
+    # We copy the preferences folder of the gvSIG installation.
+    echo "Copying the default gvSIG preferences to the user's folder."
+    xmkdir -p "$GVSIG_HOME_FOLDER"
+    cp -a "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME" "$GVSIG_HOME_FOLDER/.."
+    echo "Updating preferences finished."
+    return
+  fi
+  # The user already has their preferences in their personal folder.
+  # We check if we have to copy some preferences that do not have:
+  # - Preferences of some plugin that does not have
+  # - Missing symbols
+  # - Scripts
+
+  #
+  # Check if some plugin preferences are missing, and copy them
+  if [ -d  "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins" ] ; then
+    cd "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins"
+    for FOLDER in *
+    do
+      if [ -d "$FOLDER" -a ! -d "$GVSIG_HOME_FOLDER/plugins/$FOLDER" ] ; then
+        echo "Copying the default $FOLDER preferences to the user's folder."
+        xmkdir -p "$GVSIG_HOME_FOLDER/plugins/$FOLDER"
+        cp -a "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/$FOLDER" "$GVSIG_HOME_FOLDER/plugins"
+      fi
+    done
+  fi
+  
+  #
+  # Check if any symbols are missing and copy them
+  if [ -d "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.app.mainplugin/Symbols" ] ; then
+    cd "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.app.mainplugin/Symbols"
+    for FOLDER in *
+    do
+      if [ -d "$FOLDER" -a ! -d "$GVSIG_HOME_FOLDER/plugins/org.gvsig.app.mainplugin/Symbols/$FOLDER" ] ; then
+        echo "Copying the default $FOLDER symbol to the user's folder."
+        xmkdir -p "$GVSIG_HOME_FOLDER/plugins/org.gvsig.app.mainplugin/Symbols/$FOLDER"
+        cp -a "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.app.mainplugin/Symbols/$FOLDER" "$GVSIG_HOME_FOLDER/plugins/org.gvsig.app.mainplugin/Symbols"
+      fi
+    done
+  fi
+  
+  #
+  # Check if any script are missing and copy them
+  if [ -d  "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons" ] ; then
+    cd "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons"
+    for FOLDER in *
+    do
+      if [ -d "$FOLDER" -a ! -d "$GVSIG_HOME_FOLDER/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons/$FOLDER" ] ; then
+        echo "Copying the default $FOLDER script to the user's folder."
+        xmkdir -p "$GVSIG_HOME_FOLDER/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons/$FOLDER"
+        cp -a "$GVSIG_INSTALL_FOLDER/preferences/$GVSIG_APPLICATION_NAME/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons/$FOLDER" "$GVSIG_HOME_FOLDER/plugins/org.gvsig.scripting.app.mainplugin/scripts/addons"
+      fi
+    done
+  fi
+  echo "Updating preferences finished."
+}
+
+
+if [ -f "$GVSIG_INSTALL_FOLDER/gvSIG.config" ] ; then
+  . "$GVSIG_INSTALL_FOLDER/gvSIG.config"
+fi
+if [ -f "$GVSIG_HOME_FOLDER/gvSIG.config" ] ; then
+  . "$GVSIG_HOME_FOLDER/gvSIG.config"
+fi
+
+update_user_preferences
+
+if [ ! -d "$GVSIG_HOME_FOLDER" ] ; then
+  xmkdir -p "$GVSIG_HOME_FOLDER"
+fi
+
+#################
+# Logger config #
+#################
+
+LOGGER_FILE="$GVSIG_HOME_FOLDER/${GVSIG_APPLICATION_NAME}-launcher.log"
+echo > "$LOGGER_FILE"
+
+CONSOLELOGGER=true
+if [ "${ARGS/*--consolelogger=false*/--consolelogger=false}" == "--consolelogger=false" ] ; then
+    CONSOLELOGGER=false
+fi
+
+logger () {
+  # level (INFO/WARNIG) message
+  LOGGER_LEVEL="$1"
+  shift
+  if [ "$CONSOLELOGGER" == "true" ] ; then
+    echo "$LOGGER_LEVEL launch $@"
+  fi
+  echo "$LOGGER_LEVEL launch $@" >> "$LOGGER_FILE"
+}
+
+logger_info () {
+  logger "INFO" "$@"
+}
+
+logger_warn () {
+  logger "WARNING" "$@"
+}
+
+logger_cmd() {
+  logger_info "$@"
+  if [ "$CONSOLELOGGER" == "true" ] ; then
+    eval $@ 2>&1 | tee -a  "$LOGGER_FILE"
+  else
+    eval $@ 2>&1 > "$LOGGER_FILE"
+  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
+# Note: Busybox in windows don't support -exec in find
+##########################################################
+
+setPreferedArchitecture() {
+  pf_foundArch=""
+  pf_fname=""
+  cd "$GVSIG_INSTALL_FOLDER"
+  find . -name package.info 2>/dev/null | while read pf_fname
+  do
+    cat "$pf_fname"
+  done | grep "architecture=[^a]" | sort | head -n 1 | read pf_foundArch || true
+  # El comando "read x" de la linea anterior puede fallar si
+  # no hay ningun plugin depdendiente de la arquitectura, por eso
+  # el "|| true" del final.
+  if [ "X${pf_foundArch}X" != "XX" ] ; then
+	  eval $pf_foundArch
+	  PREFERED_ARCHITECTURE="$architecture"
+  else
+	  PREFERED_ARCHITECTURE="$ARCH"
+  fi
+  cd - >/dev/null
+}
+
+setPreferedArchitecture
+
+##########################################################
+
+export JAVA_HOME
+export JAVA
+export FORCE_JAVA_32BITS
+
+FORCE_JAVA_32BITS=""
+JAVA_HOME_OTHER_ARCHITECTURE=""
+
+# PRIVATE JAVA HOMEs
+if [ -d "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre" ] ; then
+    PJH1="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre"
+else
+    PJH1=
+fi
+#
+# El ls|head casca en win10 64 bits. Parece que hay algun problema con los
+# pipes y el find y el ls.
+if [ "${OS}" == "win" ] ; then
+  PJH2=""
+  PJH3=""
+  PJH4=""
+  PJH5=""
+else
+  PJH2=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.8* 2>/dev/null | head -1)
+  PJH3=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.7* 2>/dev/null | head -1)
+  PJH4=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.6* 2>/dev/null | head -1)
+  PJH5=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.5* 2>/dev/null | head -1)
+fi
+if [ -d /usr/lib/jvm ] ; then
+    PJH6=$(find /usr/lib/jvm -maxdepth 1 ! -name "jvm" -name "[a-zA-Z]*" ! -type l -print)
+else
+    PJH6=
+fi
+
+if [ -f "$PJH1/bin/java" ] ; then
+    if [ ! -x "$PJH1/bin/java" ] ; then
+	chmod a+x "$PJH1/bin/java"
+    fi
+fi
+
+#
+#
+# Try to use java from:
+# 1. Java in gvSIG/extensiones/jre (jre plugin)
+# 2. Java specified in JAVA_HOME variable
+# 3. Java in the HOME/gvsig/jre folder (old gvsig versions optionally create during installation process)
+# 4. Java installed in the system (/usr/lib/jvm)
+# 5. Java in the system path.
+#
+for JAVA_HOME_TO_USE in "$PJH1" "$JAVA_HOME" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
+do
+  if [ "$JAVA_HOME_TO_USE" = "" ] ; then
+	  continue
+  fi
+  logger_info "Located possible jre at: ${JAVA_HOME_TO_USE}"
+done
+
+for JAVA_HOME_TO_USE in "$PJH1" "$JAVA_HOME" "$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 $(type -p java))" != "$PREFERED_ARCHITECTURE" ] ; then
+                      logger_warn "java $PREFERED_ARCHITECTURE not found, using $(type -p 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 " $(type -p "$JAVA")
+
+###################################################################
+# gvSIG native libraries location
+###################################################################
+
+export GVSIG_NATIVE_LIBS=""
+export LD_LIBRARY_PATH
+export DYLD_LIBRARY_PATH
+export PATH
+export GVSIG_PROPERTIES=""
+
+add_library_path() {
+  #logger_info "add_library_path $1"
+  GVSIG_NATIVE_LIBS="$1${CPSEP}$GVSIG_NATIVE_LIBS"
+
+  # On Linux family systems
+  LD_LIBRARY_PATH="$1${CPSEP}$LD_LIBRARY_PATH"
+  # On Darwin family systems
+  DYLD_LIBRARY_PATH="$1${CPSEP}$DYLD_LIBRARY_PATH"
+  # On Windows family systems
+  if [ "$CYGWIN" = "yes" ] ; then
+    PATH="/cygdrive/${1/:/}:$PATH"
+  else
+    PATH="$1${CPSEP}$PATH"
+  fi
+
+}
+
+list_shared_library_dependencies() {
+  logger_info "Checking shared library dependencies for $1"
+  case "$OS" in
+  "win")
+        logger_cmd "$CYGCHECK" "\"$1\""
+        ;;
+  "lin")
+        logger_cmd ldd "\"$1\""
+        ;;
+  "darwin")
+        logger_cmd otool -L "\"$1\""
+        ;;
+  esac || logger_warn "Problens checking shared library $1"  || true
+}
+
+add_classpath() {
+  GVSIG_CLASSPATH="$GVSIG_CLASSPATH${CPSEP}$1"
+}
+
+add_property() {
+  value="\"$2\""
+  GVSIG_PROPERTIES="$GVSIG_PROPERTIES -D$1=$value"
+}
+
+
+###################################################################
+# gvSIG java libraries location
+###################################################################
+
+# 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
+    add_classpath "$i"
+  fi
+done
+for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
+  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
+    add_classpath "$i"
+  fi
+done
+
+# 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
+
+########################
+# Memory configuration #
+########################
+
+# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
+export GVSIG_INITIAL_MEM=${GVSIG_INITIAL_MEM:-256M}
+# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
+export GVSIG_MAX_MEM=${GVSIG_MAX_MEM:-1024M}
+# Maximum permanent memory size: needed to load classes and statics
+# A partir de java 1.8 ya no esta soportada esta opcion
+#export GVSIG_MAX_PERM_SIZE=${GVSIG_MAX_PERM_SIZE:-128M}
+#  -XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} 
+#
+
+
+#############################
+# Execute plugin's autorun  #
+#############################
+
+for PLUGIN_FOLDER in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/"* "$GVSIG_HOME_FOLDER/installation/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"
+fi
+
+logger_info "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
+logger_info "PATH=$PATH"
+
+#####################
+# Java debug mode ? #
+#####################
+
+if [ "${ARGS/*--pause*/--pause}" == "--pause" ] ; then
+    DEBUG_PAUSE="y"
+else
+    DEBUG_PAUSE="n"
+fi
+
+if [ "${ARGS/*--debug*/--debug}" == "--debug" ] ; then
+  DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8765,server=y,suspend=$DEBUG_PAUSE"
+else
+  DEBUG_OPTIONS=""
+fi
+
+########################
+# Remove old log files #
+########################
+
+rm -f "${GVSIG_HOME_FOLDER}/gvSIG.log"*
+
+################
+# Launch gvSIG #
+################
+
+launch_gvSIG() {
+    cd "$GVSIG_INSTALL_FOLDER"
+    # 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
+    CMD="\"${JAVA}\" \
+      $GVSIG_CUSTOM_FONTS \
+      $FORCE_JAVA_32BITS \
+      -Xms${GVSIG_INITIAL_MEM} \
+      -Xmx${GVSIG_MAX_MEM} \
+      ${DEBUG_OPTIONS} \
+      -Djava.library.path=\"${GVSIG_NATIVE_LIBS}\" \
+      ${GVSIG_PROPERTIES} \
+      -cp \"${GVSIG_CLASSPATH}\" \
+      ${GVSIG_JAVA_PARAMS} \
+      ${GVSIG_LAUNCHER} ${GVSIG_PARAMS}"
+
+    logger_info Launching gvSIG: "${CMD}"
+    eval "$CMD"
+}
+
+if [ "${ARGS/*--lib*/--lib}" != "--lib" ] ; then
+    launch_gvSIG
+fi
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvSIG.sh
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-desktop.cmd	(revision 46118)
@@ -0,0 +1,3 @@
+@echo off
+cd /d "${INSTALL_PATH}"
+busybox sh gvSIG.sh %1 %2 %3 %4 %5 %6 %7 %8 %9
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/icon-theme/README.txt
===================================================================

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application/gvsig-icon16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main/resources-application
___________________________________________________________________
Added: svn:ignore
   + .directory



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/src/main
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml	(revision 46118)
@@ -0,0 +1,512 @@
+<?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.344</version>
+    </parent>
+
+    <dependencies>
+
+        <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.apache.commons</groupId>
+            <artifactId>commons-math</artifactId>
+            <scope>runtime</scope>
+        </dependency>                
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</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.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.util.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.util.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.impl</artifactId>
+            <scope>runtime</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.tools.swing.impl</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>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.help</groupId>
+            <artifactId>javahelp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.jgoodies</groupId>
+            <artifactId>jgoodies-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>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gnu</groupId>
+            <artifactId>jel</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.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>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.swinglabs</groupId>
+            <artifactId>swing-layout</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <!-- lo requieren los paneles de timesupport -->
+            <groupId>com.toedter</groupId>
+            <artifactId>jcalendar</artifactId> 				
+            <scope>runtime</scope>
+        </dependency>	
+        <dependency>
+            <groupId>xml-apis</groupId>
+            <artifactId>xml-apis</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fifesoft</groupId>
+            <artifactId>rsyntaxtextarea</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fifesoft</groupId>
+            <artifactId>rstaui</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fifesoft</groupId>
+            <artifactId>autocomplete</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-awt-util</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-bridge</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-ext</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-gui-util</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-gvt</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-script</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-xml</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-anim</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-css</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-dom</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-js</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-parser</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlgraphics</groupId>
+            <artifactId>batik-svg-dom</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>xml-apis</groupId>
+            <artifactId>xml-apis-ext</artifactId>
+            <scope>runtime</scope>
+        </dependency>        
+        <dependency>
+            <groupId>com.github.jai-imageio</groupId>
+            <artifactId>jai-imageio-jpeg2000</artifactId>
+            <version>1.3.0</version>
+        </dependency>                
+        <dependency>
+            <groupId>com.github.jai-imageio</groupId>
+            <artifactId>jai-imageio-core</artifactId>
+            <version>1.4.0</version>
+        </dependency> 
+        <dependency>
+            <groupId>org.glassfish</groupId>
+            <artifactId>javax.json</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+          <groupId>com.fasterxml.uuid</groupId>
+          <artifactId>java-uuid-generator</artifactId>
+          <version>4.0.1</version>
+          <scope>runtime</scope>
+        </dependency>        
+          <dependency>
+            <groupId>com.github.lespaul361</groupId>
+            <artifactId>JCommunique</artifactId>
+            <scope>runtime</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.devzendo</groupId>
+            <artifactId>quaqua</artifactId>
+            <scope>runtime</scope>
+            <version>9.1</version>
+        </dependency>
+        <dependency>
+          <groupId>com.jidesoft</groupId>
+          <artifactId>jide-oss</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>com.formdev</groupId>
+          <artifactId>flatlaf</artifactId>
+          <version>1.5</version>
+        </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.344/org.gvsig.desktop.framework/org.gvsig.andami/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami
___________________________________________________________________
Added: svn:ignore
   + .classpath
target/**
nbactions.xml
.project
.directory
.settings/**
target
.settings


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java	(revision 46118)
@@ -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.andamiupdater;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+import com.sardak.antform.AntForm;
+import com.sardak.antform.AntMenu;
+import java.io.Closeable;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+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() {
+        return new File("").getAbsoluteFile();
+    }
+
+    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("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});
+
+        } catch (ClassNotFoundException e) {
+            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});
+        }
+    }
+
+    /**
+     *
+     */
+    private void removeAll() {
+        File updateDirectory = new File(getApplicationDirectory(), "update");
+        if (updateDirectory.exists()) {
+            deleteDir(updateDirectory);
+        }
+
+    }
+
+    private boolean deleteDir(File folder) {
+        if (folder == null) {
+            return true;
+        }
+        try {
+            if (folder.isDirectory()) {
+                String[] children = folder.list();
+                for (String children1 : children) {
+                    boolean success = deleteDir(new File(folder, children1));
+                    if (!success) {
+                        return false;
+                    }
+                }
+            }
+            return folder.delete();
+        } catch (Throwable th) {
+            this.warning("Can't remove '" + folder.getAbsolutePath() + "'.", th);
+            return false;
+        }
+    }
+
+    /**
+     * Reads every line of appDirectory/update/scripts.lst and executes the ant
+     * file that this line points to
+     */
+    private void executeScripts() {
+        File updateFolder = new File(getApplicationDirectory(), "update");
+        File antFilesScript = new File(updateFolder, "scripts.lst");
+
+        if (antFilesScript.exists()) {
+            BufferedReader reader = null;
+            try {
+                reader = new BufferedReader(new FileReader(antFilesScript));
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    File antFile = new File(line);
+                    try {
+                        executeAntFile(antFile);
+                    } catch (Throwable th) {
+                        this.warning("Error running file '" + antFile.getAbsolutePath() + "'.", th);
+                    }
+                }
+            } catch (Throwable th) {
+                this.warning("Error running ant scripts.", th);
+            } finally {
+                closeQuietly(reader, antFilesScript);
+            }
+
+        }
+
+    }
+
+    /**
+     * Copies all files and folders from gvSIG/update to gvSIG/extensions
+     *
+     * @throws IOException
+     *
+     */
+    private void copyFiles() throws IOException {
+        File updateFolder = new File(getApplicationDirectory(), "update");
+        File filesFolder = new File(updateFolder, "files");
+        File pluginsDirectory = getPluginsDirectory();
+
+        if (updateFolder.exists()) {
+            String[] childrenDirs = filesFolder.list();
+
+            if (childrenDirs != null) {
+                for (String childrenDir : childrenDirs) {
+                    File sourceLocation = new File(filesFolder, childrenDir);
+                    File targetLocation = new File(pluginsDirectory, childrenDir);
+                    try {
+                        deleteDir(targetLocation);
+                        copyFilesAndFolders(sourceLocation, targetLocation);
+                    } catch (Throwable th) {
+                        this.warning("Can't copy files to '" + targetLocation.getAbsolutePath() + "'.", th);
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean copyFilesAndFolders(File source, File target)
+            throws IOException {
+
+        if (source.isDirectory()) {
+            if (!target.exists()) {
+                target.mkdir();
+            }
+
+            String[] children = source.list();
+            if (children != null) {
+                for (String children1 : children) {
+                    copyFilesAndFolders(
+                            new File(source, children1),
+                            new File(target, children1)
+                    );
+                }
+            }
+        } else {
+            InputStream in = null;
+            OutputStream out = null;
+            try {
+                in = new FileInputStream(source);
+                out = new FileOutputStream(target);
+
+                // 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 (Throwable th) {
+                this.warning("Can't copy '" + source + "' to '" + target + "'.", th);
+            } finally {
+                closeQuietly(in, source);
+                closeQuietly(out, target);
+            }
+        }
+
+        return true;
+    }
+
+    private void closeQuietly(Closeable closeable, File f) {
+        if (closeable == null) {
+            return;
+        }
+        try {
+            closeable.close();
+        } catch (IOException ex) {
+            if (f == null) {
+                this.warning("Can't close file '" + closeable.toString() + "'.", ex);
+            } else {
+                this.warning("Can't close file '" + f.getAbsolutePath() + "'.", ex);
+            }
+        }
+    }
+
+    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());
+    }
+
+    private void warning(String message, Throwable th) {
+        System.err.println(message);
+        th.printStackTrace();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater/src/main/java/org/gvsig/andamiupdater/Updater.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework/org.gvsig.andami.updater
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.framework
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ar.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ar.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ar.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/en.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/en.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/en.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/cs.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/cs.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/cs.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pt_br.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pt_br.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pt_br.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/es.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/es.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/es.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/fr.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/fr.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/fr.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/gvsig-standard-installer.mpi
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/gvsig-standard-installer.mpi	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/gvsig-standard-installer.mpi	(revision 46118)
@@ -0,0 +1,6410 @@
+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 ::DC08C7BC-D41D-2032-C65B-D46ECA3B5FCD -type dir -name org.gvsig.timesupport.app.viewfilter -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::0E5198E8-7D03-8677-8225-5A8AD6B88B62 -type dir -name org.gvsig.snapping.app.mainplugin -active 0 -parent 72746268-7243-EFA6-273F-FEE49F326114
+File ::0D042C27-1F37-C546-CB7C-8F82D2FBDC63 -type dir -name org.gvsig.timesupport.app.animation -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 ::4599E5FC-D69E-5DAE-4515-7C4ADE4129E8 -name org.gvsig.installer.lib.spi-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::34BAB2DB-619A-39C7-6209-5700678A006C -name org.gvsig.about.impl-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::3C76AC52-FBAF-90BC-343C-7FD14921B9E3 -name commons-lang-2.6.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::9891DB02-22F7-B3BB-0FFF-AEF65FC31922 -name bcmail-jdk14-138.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::53115CCF-AA91-D5EA-6AC6-52FC8E84DE31 -name ant-1.8.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::8D3DAFFF-A17C-5D5C-8FC0-9F3982902C25 -name batik-gui-util-1.7.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::1B89770C-8706-E88E-648B-75698CE73023 -name antform-2.0.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::5CCBC5AA-F4A9-036B-D1A3-C42D78DA761D -name org.gvsig.andami.updater-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::88D0AB8C-3143-C1F3-B595-2394864D6EA6 -name commons-lang3-3.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::2D9711EF-4285-3F21-BAB3-4C9A7105B0FB -name org.gvsig.tools.lib-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::FEABCAEE-4C46-7953-33AF-2B99C7CB2F54 -name jgoodies-common-1.4.0.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::88DDDBC1-46C6-5B3E-9F20-AB4F05A698DF -name org.gvsig.i18n-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::2D644B1C-DB5D-E606-35F7-494AB0AE055B -name org.gvsig.installer.prov.plugin-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::1560AA21-2C5C-8877-8149-2E7A5DC44F90 -name kxml2-2.2.2.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::31945C71-B7F4-49BC-CEC5-1D81AB8BEE11 -name slf4j-log4j12-1.5.5.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::CBF0B1FA-84D7-4F1A-24F5-BA621EB05EC0 -name org.gvsig.installer.swing.impl-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::BADB63BA-1360-3F63-9934-272C9F09C4FB -name org.gvsig.tools.swing.api-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::B84E3B7D-C55A-CBD6-1A23-937116C06A86 -name org.gvsig.tools.dynform.spi-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::11118585-4059-7BED-911B-673F1A96149A -name org.gvsig.ui-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::14441AAE-9B9C-7706-D085-AA43E4B9A032 -name org.gvsig.installer.lib.impl-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::CFE1F604-9B6C-06F7-7158-316C0A1FC5BD -name slf4j-api-1.5.5.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::13EBB9F5-5FCC-82F1-08F1-52523BCDF955 -name xercesImpl-2.11.0.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::340744F8-6A52-0AB1-1035-9F254EA6BCEA -name jts-1.13.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::FA99D764-D21E-46F1-1666-04D3ECA8D6B1 -name jwizardcomponent-0i18n-1.2.2.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::B2512EBD-84CE-9558-A328-F23E535DF003 -name org.gvsig.tools.dynform.api-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::808A6E9F-7340-AB77-35A9-EDD50F762AE7 -name commons-configuration-1.10.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::BEE07EC9-B0B3-5D2A-6238-93B4EEF0B438 -name bcprov-jdk14-138.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::3E2CA9A5-E594-945D-DE53-9E8A7C2EEF2B -name org.gvsig.compat.api-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::FB80B1B1-825E-28B6-8F1B-ECC297A27E4E -name org.gvsig.tools.dynform.services-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::A4D88908-C463-CB4E-FE02-A14A0D8D884B -name batik-util-1.7.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::1B06305B-ABCF-A40A-C567-CE5843BEF691 -name flib-jcalendar-unknown.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::DEB38CC5-A097-3186-ADED-E6CFF969CB05 -name javahelp-2.0.05.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::0BC4713C-D3E2-C194-6EE4-F10C9C04B66D -name xmlpull-1.1.3.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::50892131-083C-F6CA-EAD4-38FF42EB8A3E -name swing-layout-1.0.3.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::FC2FAED7-8DDF-BA43-BBC8-B258D3E5C6AA -name bcmail-jdk14-1.38.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::E8807CB7-5C67-D88E-3EF3-5761EE972FBD -name itext-2.1.7.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::4FE97C88-9F7B-1452-0179-4AF7438EF2BE -name org.gvsig.installer.lib.api-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::E1E94AA6-F7B6-AB2D-2487-183D8C8084C4 -name jfreechart-1.0.14.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::6E931EE1-E9DE-29D2-5679-17C06A4EB74B -name commons-cli-1.2.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::7CBB4228-B8D2-154F-9EA7-2FFABC4E99E4 -name commons-codec-1.6.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::2F38985F-0968-FFB5-78C0-68EAC707A972 -name org.gvsig.utils-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::03E0CE4A-474A-BDA0-FE3B-114FCACE0BDD -name org.gvsig.tools.dynform.impl-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::D5932F51-A6A7-F2D4-8FD7-BA0F8018F0DE -name bcprov-jdk14-1.38.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::5F8474DD-8265-8082-AEC8-43BAD989011A -name xml-apis-1.4.01.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::71CA7789-F576-43E6-D816-34AEF6D622DF -name log4j-1.2.14.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::C4F735FB-7099-DF18-0185-BD747F764427 -name org.gvsig.compat.se-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::41C56006-911B-661D-88DA-A6ED73162E50 -name jgoodies-forms-1.6.0.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::0E288AF9-0590-F14C-4A96-31165C08C905 -name commons-logging-1.1.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::88E91093-1E39-8A78-D64D-33BD01812CD8 -name org.gvsig.installer.swing.api-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::69E0EA1A-6A9B-1447-AFB2-43B37072DD01 -name org.gvsig.tools.swing.impl-3.0.60.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::93EEEEEB-E4EC-6D9A-5112-C554B518132E -name looks-2.2.2.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::5D4D462B-48D0-B805-306F-F8B4808A7094 -name org.gvsig.tools.lib-3.0.60-tests.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::B86363B0-259D-DF4F-615C-4A6121EBFF03 -name org.gvsig.about.api-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::3F23AED1-EA83-9697-710C-1D473A1D3C2E -name commons-io-2.4.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::E9D82105-3140-F5B9-F978-F546F34DFD22 -name jwizardcomponent-1.2.2.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::E0F1A7C2-91F2-FEA0-66D9-7B4969D10B68 -name batik-xml-1.7.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::A6FC6570-EBAE-CCAB-71E7-D70788E94D4A -name ant-contrib-1.0b3.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::7C28D5D9-958A-44CD-5427-486E42C2492D -name ant-launcher-1.8.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::431380E5-1259-4151-A8B4-CCDFE1DBF108 -name org.gvsig.andami-2.0.103-SNAPSHOT.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::747E4831-F7CE-526D-0F81-AA55633C10E5 -name org.gvsig.jdk.v1_6-1.0.1.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::BE1FE7E9-8424-446B-1421-22FBEDC873D5 -name castor-0.9.5.3.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::E47A7C0F-6380-1B33-457A-FF5D740B0B54 -name jcommon-1.0.17.jar -active 0 -parent 4EAF94C7-6494-4DEA-3A6A-B3F605D352C5
+File ::C5979EDB-1459-6C9E-BE13-6D4E2DD0A174 -name bctsp-jdk14-1.38.jar -active 0 -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 ::2A23F396-484E-1D14-B028-73A76F189278 -name gvsig-debcreate -parent A885AB3F-7B17-86E1-9129-64919AEEE0A9
+File ::8089BC51-356D-BEA9-551C-996974F100DD -name debian.control -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
+File ::A4F98B25-1DD7-BF0F-12CC-D04FD85730D2 -name busybox.exe -active 0 -parent 1B718456-0AF4-8BDF-A1ED-E17D27781AD8
+File ::9F2D7AFF-8A06-F6FC-29BE-FEC6F9C59929 -name gvsig-package-installer.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 ::74BBA2B4-A7EF-4EB5-C663-A6819286BC25 -type dir -name org.gvsig.timesupport.app.viewfilter -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::8771A378-9359-7C4B-C646-C3AE941317F9 -type dir -name org.gvsig.snapping.app.mainplugin -active 0 -parent 625E9F0B-8214-AD4C-5D83-A18A8A4D5E9F
+File ::9405A20D-E4AE-D79E-3634-8C47134B2B51 -type dir -name org.gvsig.timesupport.app.animation -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 ::EC1D815C-6689-8F56-0FFD-992731E73F16 -name gvsig-debcreate -active 0 -parent 716ECE7B-80E1-1A81-17AD-C1399ED43DC6
+File ::2DB75213-A607-04D3-F9E4-373550DE78C2 -name debian.control -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
+File ::A49A4C9B-5733-BF9E-1C3F-EB7C083CAC2A -name busybox.exe -active 0 -parent F354386B-F812-1B20-D9C2-B49AD74BCD22
+File ::82F0854B-39C0-4F47-05EC-C876A685301C -name gvsig-package-installer.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 -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::4DB1A373-B221-4228-6B16-40C4AF8B026A -name gvsig-desktop.l4j.ini -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::2BBD2461-4548-A42E-DFC4-B401A7E7BD54 -name gvsig-package-installer.exe -active 0 -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 ::512BF279-1109-2649-AFA9-4B7ED4751DAB -type dir -name org.gvsig.timesupport.app.viewfilter -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::74FB7E6B-B25D-BE78-8BFB-4D92BDBAD67E -type dir -name org.gvsig.snapping.app.mainplugin -active 0 -parent 3A891057-34B6-C1A7-E1DD-EB236C4810A8
+File ::3C36409B-0AD0-EA14-74D9-5641EE05F3E3 -type dir -name org.gvsig.timesupport.app.animation -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 -active 0 -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 -active 0 -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::516E0709-940F-AD4A-F6B3-1B6067301F0F -name gvsig-package-installer.xml -active 0 -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 -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::73374121-CDEA-D741-0D2C-4C3B78069636 -name gvsig-desktop-portable.exe -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::F9DB1AB2-43DB-05A2-492A-7B9968432FE1 -name check.sh -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::30F00F82-3EE0-4723-E70B-7D94F00948DE -name check.cmd -active 0 -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::E93AAAD4-D78F-C860-6D10-A25CAA74145C -name gvsig-desktop-portable.xml -active 0 -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 ::16B0D645-E2CB-F704-7E84-5A6C864F4699 -name gvsig-debcreate -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::A5F446B5-AB11-D3F3-579C-B56B3F8899DB -name debian.control -parent 015FCC0A-6D64-07CB-34AA-FC1E674F3226
+File ::1D92E982-3DCC-55EE-481B-0528A77EACB9 -name check.sh -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::A94BAFB3-1DF4-1316-2128-B3692F99FCB0 -name check.cmd -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::07937A6A-1290-1029-8849-7316C1692700 -name busybox.exe -parent D5CF40F1-DF9D-1E2D-FBFC-DFFA740AF249
+File ::EA428773-991A-C188-A1E9-CBFDBC62BB8F -name gvsig-package-installer.cmd -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/nl.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/nl.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/nl.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pl.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pl.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/pl.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/hu.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/hu.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/hu.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/it.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/it.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/it.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/lt.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/lt.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/lt.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ca.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ca.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ca.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/README.txt	(revision 46118)
@@ -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
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ru.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ru.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/ru.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/de.msg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/de.msg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/installjammer/de.msg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/installkit
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/main.tcl
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/main.tcl	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/main.tcl	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/options
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/options	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/packaging/gvspkg.bin/options	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/config/defaultPackages
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/config/defaultPackages	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/config/defaultPackages	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-portable.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-portable.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-portable.xml	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-devel.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-devel.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop-devel.xml	(revision 46118)
@@ -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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-package-installer.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-package-installer.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-package-installer.xml	(revision 46118)
@@ -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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/src/main/launch4j/gvsig-desktop.xml	(revision 46118)
@@ -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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/pom.xml	(revision 46118)
@@ -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+"/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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.installjamer/pom.xml
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/selfextract.c
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/selfextract.c	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/selfextract.c	(revision 46118)
@@ -0,0 +1,229 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <libtar.h>
+#include <errno.h>
+#include <dirent.h>
+
+
+int remove_directory(const char *path) {
+  DIR *d = opendir(path);
+  size_t path_len = strlen(path);
+  int r = -1;
+
+  if (d != NULL ) {
+    struct dirent *p;
+    r = 0;
+    while (!r && (p=readdir(d))) {
+      int r2 = -1;
+      char *buf;
+      size_t len;
+
+      /* Skip the names "." and ".." as we don't want to recurse on them. */
+      if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) {
+          continue;
+      }
+      len = path_len + strlen(p->d_name) + 2;
+      buf = malloc(len);
+      if (buf) {
+        struct stat statbuf;
+        snprintf(buf, len, "%s/%s", path, p->d_name);
+        if (!stat(buf, &statbuf)) {
+          if (S_ISDIR(statbuf.st_mode)) {
+              r2 = remove_directory(buf);
+          } else {
+              r2 = unlink(buf);
+          }
+        }
+        free(buf);
+      }
+      r = r2;
+    }
+    closedir(d);
+  }
+  if (!r) {
+    r = rmdir(path);
+  }
+  return r;
+}
+
+
+char *getMark() {
+  static char buffer[100];
+
+  strcpy(buffer, ";!@self");
+  strcat(buffer,"extract@!\n");
+  return buffer;
+}
+
+int findMark(int fd) {
+  static char buffer[1024*50];
+
+  int x=lseek(fd,0,SEEK_SET);
+  if( x<0 ) {
+    printf("seek 0 error\n");
+    return -1;
+  }
+  x=read(fd,buffer,1024*50);
+  if( x<0 ) {
+    printf("read error\n");
+    return -1;
+  }
+  char *mark = getMark();
+  int markSize = strlen(mark);
+  char *p;
+  for( p=buffer ; p<buffer+x; p++ ) {
+    if( strncmp(p,mark,markSize)==0 ) {
+      int n = p-buffer + markSize;
+      printf("found %d\n", n);
+      return n;
+    }
+  }
+  printf("not found\n");
+  return -1;
+}
+
+void extract(char *source) {
+  static char path[1024];
+  static char folder[1024];
+  TAR *tar;
+  int start,x;
+
+
+  x = tar_open(&tar, source, 0, O_RDONLY, 0, 0);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't create tar object.\n", source);
+    perror(NULL);
+    exit(1);
+  }
+
+  int fdi = tar_fd(tar);
+  start = findMark(fdi);
+  if( start <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't find position of tar start.\n", source);
+    perror(NULL);
+    exit(3);
+  }
+  x = lseek(fdi,start,SEEK_SET);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't seek at position of tar start.\n", source);
+    perror(NULL);
+    exit(4);
+  }
+
+  sprintf(folder,"/tmp/selfextract-%d", getpid());
+  printf("Extracting to %s...\n", folder);
+  x = tar_extract_all(tar, folder);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', output folder '%s'.\n", source, folder);
+    perror(NULL);
+    exit(5);
+  }
+  tar_close(tar);
+
+  sprintf(path,"%s/autorun.sh", folder);
+  if( access(path,R_OK)<0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't access to '%s'.\n", source, path);
+    exit(6);
+  }
+  if( chdir(folder)<0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't change current folder to '%s'.\n", source, folder);
+    exit(7);
+  }
+  printf("Executing autorun.sh...\n");
+  x = system(path);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', execute '%s' fail.\n", source, path);
+    perror(NULL);
+    exit(8);
+  }
+  printf("Removing %s...\n", folder);
+  remove_directory(folder);
+  printf("Finish\n");
+  exit(0);
+}
+
+void create(char *source,char *target, char *tarfile) {
+  static char buffer[1024];
+  int size;
+  int n,x;
+
+  int fdo = creat(target,S_IWUSR|S_IXUSR|S_IRUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IXOTH);
+  if( fdo <0 ) {
+    fprintf(stderr,"Can't create '%s'.\n", target);
+    perror(NULL);
+    exit(20);
+  }
+  int fdi = open(source,O_RDONLY);
+  if( fdo <0 ) {
+    fprintf(stderr,"Can't create '%s', don't open header file '%s'.\n", target, source);
+    perror(NULL);
+    exit(21);
+  }
+
+  while( (n=read(fdi,buffer,1024)) != 0 ) {
+    if( n<0 ) {
+      fprintf(stderr,"Can't create '%s', don't read file '%s'.\n", target, source);
+      perror(NULL);
+      exit(24);
+    }
+    x=write(fdo,buffer,n);
+    if( x!=n ) {
+      fprintf(stderr,"Can't create '%s', don't add '%s' to end of file.\n", target, source);
+      perror(NULL);
+      exit(25);
+    }
+  }
+  close(fdi);
+
+  char *mark = getMark();
+  x=write(fdo,mark,strlen(mark));
+  if( x!=strlen(mark) ) {
+    fprintf(stderr,"Can't create '%s', magic to end of file.\n", target);
+    perror(NULL);
+    exit(26);
+  }
+
+  fdi = open(tarfile,O_RDONLY);
+  if( fdi<0 ) {
+    fprintf(stderr,"Can't create '%s', don't open file '%s'.\n", target, tarfile);
+    perror(NULL);
+    exit(27);
+  }
+  while( (n=read(fdi,buffer,1024)) != 0 ) {
+    if( n<0 ) {
+      fprintf(stderr,"Can't create '%s', don't read file '%s'.\n", target, tarfile);
+      perror(NULL);
+      exit(28);
+    }
+    x=write(fdo,buffer,n);
+    if( x!=n ) {
+      fprintf(stderr,"Can't create '%s', don't add '%s' to end of file.\n", target, tarfile);
+      perror(NULL);
+      exit(29);
+    }
+  }
+  close(fdi);
+
+  close(fdo);
+  exit(0);
+}
+
+void main(int argc, char*argv[]) {
+
+  if( argc==2 && ( strcmp(argv[1], "--help")==0 || strcmp(argv[1], "--h")==0 || strcmp(argv[1], "-?")==0 ) ) {
+    fprintf(stderr,"Usage:\n%s --create target tarfile\n    Create a selfextracting target file with the tarfile indicated.\n%s --help|-h|-?\n    Show this usage\n%s\n    Extract in /tmp/selfextract-PID the tar file and execute the autorun.sh file\n", argv[0], argv[0], argv[0]);
+    exit(-1);
+  }
+  if( argc==4 && strcmp(argv[1], "--create")==0 ) {
+    create(argv[0], argv[2],argv[3]);
+    return;
+  }
+  extract(argv[0]);
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/build.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/build.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/build.sh	(revision 46118)
@@ -0,0 +1,2 @@
+#!/bin/sh
+gcc -s  -o selfextract selfextract.c  /usr/lib/libtar.a

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/build.sh
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/xterm
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/xterm
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/autorun.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/autorun.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/autorun.sh	(revision 46118)
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+PATH=$PATH:$PWD
+
+if [ "$1" == "--message" ] ; then
+  shift
+  tput setf 1
+  tput setb 7
+  #tput bold
+  tput clear
+  echo "
+  
+  $@"
+  echo -n "
+                        "
+  tput smso
+  echo -n "  Aceptar  "
+  tput rmso
+  echo -n "
+  
+Pulse ENTER to continue..."
+  read n
+  exit 0
+fi
+
+message() {
+  echo "$1"
+  if type zenity >/dev/null 2>/dev/null ; then
+    zenity --info --text="$1"
+  else
+    xterm -title "Information" -geometry 60x10+200+200 -e $0 --message "$1"
+  fi
+}
+
+if [ -x "${JAVA_HOME}/bin/java" ] ; then
+  JAVA="${JAVA_HOME}/bin/java"
+else
+  if ! type java >/dev/null ; then
+    message "
+  Can't install gvSIG desktop
+  
+  Can't locate a Java Runtime Environment (JRE)
+  Install it, configure it or set JAVA_HOME and retry."
+    exit 1
+  fi
+  JAVA="java"
+fi
+
+INSTALLER=$(echo gvSIG-desktop-*.jar)
+if [ "${INSTALLER/*-x86_64-*/64}" == "64" ] ; then
+  ARCH="64"
+else
+  ARCH="32"
+fi
+
+"$JAVA" -d${ARCH} -version >/dev/null 2>/dev/null 
+if [ "$?" != "0" ] ; then
+    message "
+  Can't install gvSIG desktop
+  
+  gvSIG requires a ${ARCH}-bit JRE
+  Install it, configure it or set JAVA_HOME and retry."
+    exit 1
+fi
+
+exec "${JAVA}" -d${ARCH} -jar "${INSTALLER}"

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.lin/data/autorun.sh
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar.h
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar.h	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar.h	(revision 46118)
@@ -0,0 +1,295 @@
+/*
+**  Copyright 1998-2003 University of Illinois Board of Trustees
+**  Copyright 1998-2003 Mark D. Roth
+**  All rights reserved.
+**
+**  libtar.h - header file for libtar library
+**
+**  Mark D. Roth <roth@uiuc.edu>
+**  Campus Information Technologies and Educational Services
+**  University of Illinois at Urbana-Champaign
+*/
+
+#ifndef LIBTAR_H
+#define LIBTAR_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <tar.h>
+
+#include "libtar_listhash.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+/* useful constants */
+#define T_BLOCKSIZE		512
+#define T_NAMELEN		100
+#define T_PREFIXLEN		155
+#define T_MAXPATHLEN		(T_NAMELEN + T_PREFIXLEN)
+
+/* GNU extensions for typeflag */
+#define GNU_LONGNAME_TYPE	'L'
+#define GNU_LONGLINK_TYPE	'K'
+
+/* our version of the tar header structure */
+struct tar_header
+{
+	char name[100];
+	char mode[8];
+	char uid[8];
+	char gid[8];
+	char size[12];
+	char mtime[12];
+	char chksum[8];
+	char typeflag;
+	char linkname[100];
+	char magic[6];
+	char version[2];
+	char uname[32];
+	char gname[32];
+	char devmajor[8];
+	char devminor[8];
+	char prefix[155];
+	char padding[12];
+	char *gnu_longname;
+	char *gnu_longlink;
+};
+
+
+/***** handle.c ************************************************************/
+
+typedef int (*openfunc_t)(const char *, int, ...);
+typedef int (*closefunc_t)(int);
+typedef ssize_t (*readfunc_t)(int, void *, size_t);
+typedef ssize_t (*writefunc_t)(int, const void *, size_t);
+
+typedef struct
+{
+	openfunc_t openfunc;
+	closefunc_t closefunc;
+	readfunc_t readfunc;
+	writefunc_t writefunc;
+}
+tartype_t;
+
+typedef struct
+{
+	tartype_t *type;
+	char *pathname;
+	long fd;
+	int oflags;
+	int options;
+	struct tar_header th_buf;
+	libtar_hash_t *h;
+}
+TAR;
+
+/* constant values for the TAR options field */
+#define TAR_GNU			 1	/* use GNU extensions */
+#define TAR_VERBOSE		 2	/* output file info to stdout */
+#define TAR_NOOVERWRITE		 4	/* don't overwrite existing files */
+#define TAR_IGNORE_EOT		 8	/* ignore double zero blocks as EOF */
+#define TAR_CHECK_MAGIC		16	/* check magic in file header */
+#define TAR_CHECK_VERSION	32	/* check version in file header */
+#define TAR_IGNORE_CRC		64	/* ignore CRC in file header */
+
+/* this is obsolete - it's here for backwards-compatibility only */
+#define TAR_IGNORE_MAGIC	0
+
+extern const char libtar_version[];
+
+
+/* open a new tarfile handle */
+int tar_open(TAR **t, char *pathname, tartype_t *type,
+	     int oflags, int mode, int options);
+
+/* make a tarfile handle out of a previously-opened descriptor */
+int tar_fdopen(TAR **t, int fd, char *pathname, tartype_t *type,
+	       int oflags, int mode, int options);
+
+/* returns the descriptor associated with t */
+int tar_fd(TAR *t);
+
+/* close tarfile handle */
+int tar_close(TAR *t);
+
+
+/***** append.c ************************************************************/
+
+/* forward declaration to appease the compiler */
+struct tar_dev;
+
+/* cleanup function */
+void tar_dev_free(struct tar_dev *tdp);
+
+/* Appends a file to the tar archive.
+ * Arguments:
+ *    t        = TAR handle to append to
+ *    realname = path of file to append
+ *    savename = name to save the file under in the archive
+ */
+int tar_append_file(TAR *t, char *realname, char *savename);
+
+/* write EOF indicator */
+int tar_append_eof(TAR *t);
+
+/* add file contents to a tarchive */
+int tar_append_regfile(TAR *t, char *realname);
+
+
+/***** block.c *************************************************************/
+
+/* macros for reading/writing tarchive blocks */
+#define tar_block_read(t, buf) \
+	(*((t)->type->readfunc))((t)->fd, (char *)(buf), T_BLOCKSIZE)
+#define tar_block_write(t, buf) \
+	(*((t)->type->writefunc))((t)->fd, (char *)(buf), T_BLOCKSIZE)
+
+/* read/write a header block */
+int th_read(TAR *t);
+int th_write(TAR *t);
+
+
+/***** decode.c ************************************************************/
+
+/* determine file type */
+#define TH_ISREG(t)	((t)->th_buf.typeflag == REGTYPE \
+			 || (t)->th_buf.typeflag == AREGTYPE \
+			 || (t)->th_buf.typeflag == CONTTYPE \
+			 || (S_ISREG((mode_t)oct_to_int((t)->th_buf.mode)) \
+			     && (t)->th_buf.typeflag != LNKTYPE))
+#define TH_ISLNK(t)	((t)->th_buf.typeflag == LNKTYPE)
+#define TH_ISSYM(t)	((t)->th_buf.typeflag == SYMTYPE \
+			 || S_ISLNK((mode_t)oct_to_int((t)->th_buf.mode)))
+#define TH_ISCHR(t)	((t)->th_buf.typeflag == CHRTYPE \
+			 || S_ISCHR((mode_t)oct_to_int((t)->th_buf.mode)))
+#define TH_ISBLK(t)	((t)->th_buf.typeflag == BLKTYPE \
+			 || S_ISBLK((mode_t)oct_to_int((t)->th_buf.mode)))
+#define TH_ISDIR(t)	((t)->th_buf.typeflag == DIRTYPE \
+			 || S_ISDIR((mode_t)oct_to_int((t)->th_buf.mode)) \
+			 || ((t)->th_buf.typeflag == AREGTYPE \
+			     && ((t)->th_buf.name[strlen((t)->th_buf.name) - 1] == '/')))
+#define TH_ISFIFO(t)	((t)->th_buf.typeflag == FIFOTYPE \
+			 || S_ISFIFO((mode_t)oct_to_int((t)->th_buf.mode)))
+#define TH_ISLONGNAME(t)	((t)->th_buf.typeflag == GNU_LONGNAME_TYPE)
+#define TH_ISLONGLINK(t)	((t)->th_buf.typeflag == GNU_LONGLINK_TYPE)
+
+/* decode tar header info */
+#define th_get_crc(t) oct_to_int((t)->th_buf.chksum)
+#define th_get_size(t) oct_to_int((t)->th_buf.size)
+#define th_get_mtime(t) oct_to_int((t)->th_buf.mtime)
+#define th_get_devmajor(t) oct_to_int((t)->th_buf.devmajor)
+#define th_get_devminor(t) oct_to_int((t)->th_buf.devminor)
+#define th_get_linkname(t) ((t)->th_buf.gnu_longlink \
+                            ? (t)->th_buf.gnu_longlink \
+                            : (t)->th_buf.linkname)
+char *th_get_pathname(TAR *t);
+mode_t th_get_mode(TAR *t);
+uid_t th_get_uid(TAR *t);
+gid_t th_get_gid(TAR *t);
+
+
+/***** encode.c ************************************************************/
+
+/* encode file info in th_header */
+void th_set_type(TAR *t, mode_t mode);
+void th_set_path(TAR *t, char *pathname);
+void th_set_link(TAR *t, char *linkname);
+void th_set_device(TAR *t, dev_t device);
+void th_set_user(TAR *t, uid_t uid);
+void th_set_group(TAR *t, gid_t gid);
+void th_set_mode(TAR *t, mode_t fmode);
+#define th_set_mtime(t, fmtime) \
+	int_to_oct_nonull((fmtime), (t)->th_buf.mtime, 12)
+#define th_set_size(t, fsize) \
+	int_to_oct_nonull((fsize), (t)->th_buf.size, 12)
+
+/* encode everything at once (except the pathname and linkname) */
+void th_set_from_stat(TAR *t, struct stat *s);
+
+/* encode magic, version, and crc - must be done after everything else is set */
+void th_finish(TAR *t);
+
+
+/***** extract.c ***********************************************************/
+
+/* sequentially extract next file from t */
+int tar_extract_file(TAR *t, char *realname);
+
+/* extract different file types */
+int tar_extract_dir(TAR *t, char *realname);
+int tar_extract_hardlink(TAR *t, char *realname);
+int tar_extract_symlink(TAR *t, char *realname);
+int tar_extract_chardev(TAR *t, char *realname);
+int tar_extract_blockdev(TAR *t, char *realname);
+int tar_extract_fifo(TAR *t, char *realname);
+
+/* for regfiles, we need to extract the content blocks as well */
+int tar_extract_regfile(TAR *t, char *realname);
+int tar_skip_regfile(TAR *t);
+
+
+/***** output.c ************************************************************/
+
+/* print the tar header */
+void th_print(TAR *t);
+
+/* print "ls -l"-like output for the file described by th */
+void th_print_long_ls(TAR *t);
+
+
+/***** util.c *************************************************************/
+
+/* hashing function for pathnames */
+int path_hashfunc(char *key, int numbuckets);
+
+/* matching function for dev_t's */
+int dev_match(dev_t *dev1, dev_t *dev2);
+
+/* matching function for ino_t's */
+int ino_match(ino_t *ino1, ino_t *ino2);
+
+/* hashing function for dev_t's */
+int dev_hash(dev_t *dev);
+
+/* hashing function for ino_t's */
+int ino_hash(ino_t *inode);
+
+/* create any necessary dirs */
+int mkdirhier(char *path);
+
+/* calculate header checksum */
+int th_crc_calc(TAR *t);
+#define th_crc_ok(t) (th_get_crc(t) == th_crc_calc(t))
+
+/* string-octal to integer conversion */
+int oct_to_int(char *oct);
+
+/* integer to NULL-terminated string-octal conversion */
+#define int_to_oct(num, oct, octlen) \
+	snprintf((oct), (octlen), "%*lo ", (octlen) - 2, (unsigned long)(num))
+
+/* integer to string-octal conversion, no NULL */
+void int_to_oct_nonull(int num, char *oct, size_t octlen);
+
+
+/***** wrapper.c **********************************************************/
+
+/* extract groups of files */
+int tar_extract_glob(TAR *t, char *globname, char *prefix);
+int tar_extract_all(TAR *t, char *prefix);
+
+/* add a whole tree of files */
+int tar_append_tree(TAR *t, char *realdir, char *savedir);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! LIBTAR_H */
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/selfextract.c
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/selfextract.c	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/selfextract.c	(revision 46118)
@@ -0,0 +1,229 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "libtar.h"
+#include <errno.h>
+#include <dirent.h>
+
+
+int remove_directory(const char *path) {
+  DIR *d = opendir(path);
+  size_t path_len = strlen(path);
+  int r = -1;
+
+  if (d != NULL ) {
+    struct dirent *p;
+    r = 0;
+    while (!r && (p=readdir(d))) {
+      int r2 = -1;
+      char *buf;
+      size_t len;
+
+      /* Skip the names "." and ".." as we don't want to recurse on them. */
+      if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) {
+          continue;
+      }
+      len = path_len + strlen(p->d_name) + 2;
+      buf = malloc(len);
+      if (buf) {
+        struct stat statbuf;
+        snprintf(buf, len, "%s/%s", path, p->d_name);
+        if (!stat(buf, &statbuf)) {
+          if (S_ISDIR(statbuf.st_mode)) {
+              r2 = remove_directory(buf);
+          } else {
+              r2 = unlink(buf);
+          }
+        }
+        free(buf);
+      }
+      r = r2;
+    }
+    closedir(d);
+  }
+  if (!r) {
+    r = rmdir(path);
+  }
+  return r;
+}
+
+
+char *getMark() {
+  static char buffer[100];
+
+  strcpy(buffer, ";!@self");
+  strcat(buffer,"extract@!\n");
+  return buffer;
+}
+
+int findMark(int fd) {
+  static char buffer[1024*50];
+
+  int x=lseek(fd,0,SEEK_SET);
+  if( x<0 ) {
+    printf("seek 0 error\n");
+    return -1;
+  }
+  x=read(fd,buffer,1024*50);
+  if( x<0 ) {
+    printf("read error\n");
+    return -1;
+  }
+  char *mark = getMark();
+  int markSize = strlen(mark);
+  char *p;
+  for( p=buffer ; p<buffer+x; p++ ) {
+    if( strncmp(p,mark,markSize)==0 ) {
+      int n = p-buffer + markSize;
+      printf("found %d\n", n);
+      return n;
+    }
+  }
+  printf("not found\n");
+  return -1;
+}
+
+void extract(char *source) {
+  static char path[1024];
+  static char folder[1024];
+  TAR *tar;
+  int start,x;
+
+
+  x = tar_open(&tar, source, 0, O_RDONLY, 0, 0);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't create tar object.\n", source);
+    perror(NULL);
+    exit(1);
+  }
+
+  int fdi = tar_fd(tar);
+  start = findMark(fdi);
+  if( start <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't find position of tar start.\n", source);
+    perror(NULL);
+    exit(3);
+  }
+  x = lseek(fdi,start,SEEK_SET);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't seek at position of tar start.\n", source);
+    perror(NULL);
+    exit(4);
+  }
+
+  sprintf(folder,"/tmp/selfextract-%d", getpid());
+  printf("Extracting to %s...\n", folder);
+  x = tar_extract_all(tar, folder);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', output folder '%s'.\n", source, folder);
+    perror(NULL);
+    exit(5);
+  }
+  tar_close(tar);
+
+  sprintf(path,"%s/autorun.sh", folder);
+  if( access(path,R_OK)<0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't access to '%s'.\n", source, path);
+    exit(6);
+  }
+  if( chdir(folder)<0 ) {
+    fprintf(stderr,"Can 't extract from '%s', don't change current folder to '%s'.\n", source, folder);
+    exit(7);
+  }
+  printf("Executing autorun.sh...\n");
+  x = system(path);
+  if( x <0 ) {
+    fprintf(stderr,"Can 't extract from '%s', execute '%s' fail.\n", source, path);
+    perror(NULL);
+    exit(8);
+  }
+  printf("Removing %s...\n", folder);
+  remove_directory(folder);
+  printf("Finish\n");
+  exit(0);
+}
+
+void create(char *source,char *target, char *tarfile) {
+  static char buffer[1024];
+  int size;
+  int n,x;
+
+  int fdo = creat(target,S_IWUSR|S_IXUSR|S_IRUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IXOTH);
+  if( fdo <0 ) {
+    fprintf(stderr,"Can't create '%s'.\n", target);
+    perror(NULL);
+    exit(20);
+  }
+  int fdi = open(source,O_RDONLY);
+  if( fdo <0 ) {
+    fprintf(stderr,"Can't create '%s', don't open header file '%s'.\n", target, source);
+    perror(NULL);
+    exit(21);
+  }
+
+  while( (n=read(fdi,buffer,1024)) != 0 ) {
+    if( n<0 ) {
+      fprintf(stderr,"Can't create '%s', don't read file '%s'.\n", target, source);
+      perror(NULL);
+      exit(24);
+    }
+    x=write(fdo,buffer,n);
+    if( x!=n ) {
+      fprintf(stderr,"Can't create '%s', don't add '%s' to end of file.\n", target, source);
+      perror(NULL);
+      exit(25);
+    }
+  }
+  close(fdi);
+
+  char *mark = getMark();
+  x=write(fdo,mark,strlen(mark));
+  if( x!=strlen(mark) ) {
+    fprintf(stderr,"Can't create '%s', magic to end of file.\n", target);
+    perror(NULL);
+    exit(26);
+  }
+
+  fdi = open(tarfile,O_RDONLY);
+  if( fdi<0 ) {
+    fprintf(stderr,"Can't create '%s', don't open file '%s'.\n", target, tarfile);
+    perror(NULL);
+    exit(27);
+  }
+  while( (n=read(fdi,buffer,1024)) != 0 ) {
+    if( n<0 ) {
+      fprintf(stderr,"Can't create '%s', don't read file '%s'.\n", target, tarfile);
+      perror(NULL);
+      exit(28);
+    }
+    x=write(fdo,buffer,n);
+    if( x!=n ) {
+      fprintf(stderr,"Can't create '%s', don't add '%s' to end of file.\n", target, tarfile);
+      perror(NULL);
+      exit(29);
+    }
+  }
+  close(fdi);
+
+  close(fdo);
+  exit(0);
+}
+
+int main(int argc, char*argv[]) {
+
+  if( argc==2 && ( strcmp(argv[1], "--help")==0 || strcmp(argv[1], "--h")==0 || strcmp(argv[1], "-?")==0 ) ) {
+    fprintf(stderr,"Usage:\n%s --create target tarfile\n    Create a selfextracting target file with the tarfile indicated.\n%s --help|-h|-?\n    Show this usage\n%s\n    Extract in /tmp/selfextract-PID the tar file and execute the autorun.sh file\n", argv[0], argv[0], argv[0]);
+    exit(-1);
+  }
+  if( argc==4 && strcmp(argv[1], "--create")==0 ) {
+    create(argv[0], argv[2],argv[3]);
+    return 0;
+  }
+  extract(argv[0]);
+}
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/build.sh
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/build.sh	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/build.sh	(revision 46118)
@@ -0,0 +1,2 @@
+#!/bin/sh
+gcc -o selfextract-darwin-x86_64 selfextract.c  ./libtar.a

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/build.sh
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar.a
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar-1.2.11.tar.gz
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar-1.2.11.tar.gz
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar_listhash.h
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar_listhash.h	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/libtar_listhash.h	(revision 46118)
@@ -0,0 +1,196 @@
+/* listhash/libtar_listhash.h.  Generated from listhash.h.in by configure. */
+
+/*
+**  Copyright 1998-2002 University of Illinois Board of Trustees
+**  Copyright 1998-2002 Mark D. Roth
+**  All rights reserved.
+**
+**  libtar_listhash.h - header file for listhash module
+**
+**  Mark D. Roth <roth@uiuc.edu>
+**  Campus Information Technologies and Educational Services
+**  University of Illinois at Urbana-Champaign
+*/
+
+#ifndef libtar_LISTHASH_H
+#define libtar_LISTHASH_H
+
+
+/***** list.c **********************************************************/
+
+/*
+** Comparison function (used to determine order of elements in a list)
+** returns less than, equal to, or greater than 0
+** if data1 is less than, equal to, or greater than data2
+*/
+typedef int (*libtar_cmpfunc_t)(void *, void *);
+
+/*
+** Free function (for freeing allocated memory in each element)
+*/
+typedef void (*libtar_freefunc_t)(void *);
+
+/*
+** Plugin function for libtar_list_iterate()
+*/
+typedef int (*libtar_iterate_func_t)(void *, void *);
+
+/*
+** Matching function (used to find elements in a list)
+** first argument is the data to search for
+** second argument is the list element it's being compared to
+** returns 0 if no match is found, non-zero otherwise
+*/
+typedef int (*libtar_matchfunc_t)(void *, void *);
+
+
+struct libtar_node
+{
+	void *data;
+	struct libtar_node *next;
+	struct libtar_node *prev;
+};
+typedef struct libtar_node *libtar_listptr_t;
+
+struct libtar_list
+{
+	libtar_listptr_t first;
+	libtar_listptr_t last;
+	libtar_cmpfunc_t cmpfunc;
+	int flags;
+	unsigned int nents;
+};
+typedef struct libtar_list libtar_list_t;
+
+
+/* values for flags */
+#define LIST_USERFUNC	0	/* use cmpfunc() to order */
+#define LIST_STACK	1	/* new elements go in front */
+#define LIST_QUEUE	2	/* new elements go at the end */
+
+
+/* reset a list pointer */
+void libtar_listptr_reset(libtar_listptr_t *);
+
+/* retrieve the data being pointed to */
+void *libtar_listptr_data(libtar_listptr_t *);
+
+/* creates a new, empty list */
+libtar_list_t *libtar_list_new(int, libtar_cmpfunc_t);
+
+/* call a function for every element in a list */
+int libtar_list_iterate(libtar_list_t *,
+				   libtar_iterate_func_t, void *);
+
+/* empty the list */
+void libtar_list_empty(libtar_list_t *,
+				  libtar_freefunc_t);
+
+/* remove and free() the entire list */
+void libtar_list_free(libtar_list_t *,
+				 libtar_freefunc_t);
+
+/* add elements */
+int libtar_list_add(libtar_list_t *, void *);
+
+/* removes an element from the list - returns -1 on error */
+void libtar_list_del(libtar_list_t *,
+				libtar_listptr_t *);
+
+/* returns 1 when valid data is returned, or 0 at end of list */
+int libtar_list_next(libtar_list_t *,
+				libtar_listptr_t *);
+
+/* returns 1 when valid data is returned, or 0 at end of list */
+int libtar_list_prev(libtar_list_t *,
+				libtar_listptr_t *);
+
+/* return 1 if the data matches a list entry, 0 otherwise */
+int libtar_list_search(libtar_list_t *,
+				  libtar_listptr_t *, void *,
+				  libtar_matchfunc_t);
+
+/* return number of elements from list */
+unsigned int libtar_list_nents(libtar_list_t *);
+
+/* adds elements from a string delimited by delim */
+int libtar_list_add_str(libtar_list_t *, char *, char *);
+
+/* string matching function */
+int libtar_str_match(char *, char *);
+
+
+/***** hash.c **********************************************************/
+
+/*
+** Hashing function (determines which bucket the given key hashes into)
+** first argument is the key to hash
+** second argument is the total number of buckets
+** returns the bucket number
+*/
+typedef unsigned int (*libtar_hashfunc_t)(void *, unsigned int);
+
+
+struct libtar_hashptr
+{
+	int bucket;
+	libtar_listptr_t node;
+};
+typedef struct libtar_hashptr libtar_hashptr_t;
+
+struct libtar_hash
+{
+	int numbuckets;
+	libtar_list_t **table;
+	libtar_hashfunc_t hashfunc;
+	unsigned int nents;
+};
+typedef struct libtar_hash libtar_hash_t;
+
+
+/* reset a hash pointer */
+void libtar_hashptr_reset(libtar_hashptr_t *);
+
+/* retrieve the data being pointed to */
+void *libtar_hashptr_data(libtar_hashptr_t *);
+
+/* default hash function, optimized for 7-bit strings */
+unsigned int libtar_str_hashfunc(char *, unsigned int);
+
+/* return number of elements from hash */
+unsigned int libtar_hash_nents(libtar_hash_t *);
+
+/* create a new hash */
+libtar_hash_t *libtar_hash_new(int, libtar_hashfunc_t);
+
+/* empty the hash */
+void libtar_hash_empty(libtar_hash_t *,
+				  libtar_freefunc_t);
+
+/* delete all the libtar_nodes of the hash and clean up */
+void libtar_hash_free(libtar_hash_t *,
+				 libtar_freefunc_t);
+
+/* returns 1 when valid data is returned, or 0 at end of list */
+int libtar_hash_next(libtar_hash_t *,
+				libtar_hashptr_t *);
+
+/* return 1 if the data matches a list entry, 0 otherwise */
+int libtar_hash_search(libtar_hash_t *,
+				  libtar_hashptr_t *, void *,
+				  libtar_matchfunc_t);
+
+/* return 1 if the key matches a list entry, 0 otherwise */
+int libtar_hash_getkey(libtar_hash_t *,
+				  libtar_hashptr_t *, void *,
+				  libtar_matchfunc_t);
+
+/* inserting data */
+int libtar_hash_add(libtar_hash_t *, void *);
+
+/* delete an entry */
+int libtar_hash_del(libtar_hash_t *,
+			       libtar_hashptr_t *);
+
+#endif /* ! libtar_LISTHASH_H */
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/selfextract-darwin-x86_64
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.selfextract.darwin/selfextract-darwin-x86_64
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/src/main/packaging/gvspkg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/src/main/packaging/gvspkg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/src/main/packaging/gvspkg	(revision 46118)
@@ -0,0 +1,2027 @@
+#!/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()
+
+class Platform:
+  def __init__(self,os,arch,exe,onlinefamily=None, portableSufix=""):
+    self.osfamily = None
+    self.osname = None
+    self.osversion = None
+    self.os = os
+    self.arch = arch
+    self.exe_extension = exe
+    self.portableSufix = portableSufix
+    if "_" in self.os:
+      ss=self.os.split("_")
+      self.osfamily = ss[0]
+      if len(ss)>1:
+        self.osname = ss[1]
+        if len(ss)>2:
+          self.osversion= ss[2]
+    else:
+      self.osfamily = self.os
+    if onlinefamily == None:
+      self.onlinefamily = self.osfamily
+    else:
+      self.onlinefamily = onlinefamily
+
+  def getOS(self):
+    return self.os
+
+  def getOSFamily(self):
+    return self.osfamily
+
+  def getOSFamilyForOnlineInstaller(self):
+    return self.onlinefamily
+
+  def getOSName(self):
+    return self.osname
+
+  def getOSVersion(self):
+    return self.osversion
+
+  def getArch(self):
+    return self.arch
+
+  def getExeExtension(self):
+    return self.exe_extension
+
+  def getPortableSufix(self):
+    return self.portableSufix
+
+platforms = (
+  Platform("lin","x86_64",".run"),
+  Platform("win","x86_64",".exe"),
+  Platform("darwin_macos_10.11","x86_64",".run",onlinefamily="lin", portableSufix=".app"),
+  Platform("lin","x86",".run"),
+  Platform("win","x86",".exe"),
+  Platform("lin_ubuntu_14.04","x86_64",".run",onlinefamily="lin"),
+  Platform("lin_ubuntu_14.04","x86",".run",onlinefamily="lin")
+)
+
+
+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
+        sys.stdout.flush()
+    log(msg)
+
+def msgerror(msg, err=None):
+    print "ERROR: ", msg
+    log("ERROR: "+msg)
+    if err!=None :
+      print "ERROR: ", str(err)
+      sys.stdout.flush()
+      log("ERROR: "+ str(err))
+
+
+def msgwarn(msg):
+    print "WARNING: ", msg
+    sys.stdout.flush()
+    log("WARNING: "+ msg)
+
+def debug(msg):
+    if DEBUG:
+        print "DEBUG: ", msg
+        sys.stdout.flush()
+        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 getpackageUrl(path):
+  return re.sub(".*/downloads/","http://downloads.gvsig.org/download/",path)
+
+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)))
+
+def makedirs(path):
+    if not os.path.isdir(path) :
+      os.makedirs(path)
+
+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):
+        try:
+          r = re.compile("([0-9]+)[.]([0-9]+)[.]([0-9]+)-([a-zA-Z0-0]+)$")
+          m = r.match(self.version)
+          if m == None:
+            clasificador="ZZZZZZZZ"
+            r = re.compile("([0-9]+)[.]([0-9]+)[.]([0-9]+)$")
+            m = r.match(self.version)
+          else:
+            clasificador=m.group(4)
+          v1=int(m.group(1))
+          v2=int(m.group(2))
+          v3=int(m.group(3))
+          return "%06d.%06d.%06d-%s-%06d" % (v1,v2,v3,clasificador,self.build)
+        except:
+          if "-" in self.version :
+            return "%s-%06d" %(self.version,self.build)
+          else:
+            return "%s-ZZZZZZZZ-%06d" %(self.version,self.build)
+
+    def getFilename(self):
+        return self.filename + "." + self.type
+
+    def isPki(self):
+        return self.type.lower() == "gvspki"
+
+    def isPkg(self):
+        return self.type.lower() != "gvspki"
+
+    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 match(self, names):
+      for name in names:
+        if self.getCode() == name:
+          return True
+        if self.getFullName() == name:
+          return True
+        if fnmatch.fnmatch(self.getFullName(),name):
+          return True
+      return False
+        
+    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"
+        shorthelp(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 installer_add(cmd,arg1,arg2):
+    installer_add_use_zip(cmd,arg1,arg2)
+
+def installer_add_use_zip(cmd,arg1,arg2):
+    if cmd == "addjrelin":
+      return
+
+    if cmd == "addjrewin":
+      return
+
+    if cmd == "addpks":
+       zip = zipfile.ZipFile(arg1,"a",zipfile.ZIP_STORED)
+       zip.write(arg2,"package.gvspks")
+       zip.close()
+
+def installer_add_use_installkit(cmd,arg1,arg2):
+    folder = "%s/gvspkg.bin" % GVSPKG_ROOT
+
+    cmd = "%s/installkit %s/main.tcl %s %s %s" % (
+        "/mnt/data0/public-files/gvsig-desktop/gvspkg.bin",
+        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"
+        shorthelp(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 :
+        shorthelp(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("Creating %s..." % custom_name)
+    shutil.copyfile(bin_name, custom_name)
+    mychmod(custom_name,RWALL)
+    message("Adding %s..." % gvspks_name)
+    installer_add("addpks", custom_name, gvspks_name)
+
+    """
+    if addjrelin:
+        withjre_name = bin_name.replace("online", distribution_name+"-withjre")
+        message("Creating %s..." % withjre_name)
+        shutil.copyfile(custom_name, withjre_name)
+        mychmod(withjre_name,RWALL)
+        message("Adding %s..." % jrelin)
+        installer_add("addjrelin", withjre_name, jrelin)
+
+
+    if addjrewin:
+        withjre_name = bin_name.replace("online", distribution_name+"-withjre")
+        message("Creating %s..." % withjre_name)
+        shutil.copyfile(custom_name, withjre_name)
+        mychmod(withjre_name,RWALL)
+        message("Adding %s..." % jrewin)
+        installer_add("addjrewin", withjre_name, jrewin)
+    """
+
+def mks(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mks"), "ixscI:", ["index-only","include-default-selection", "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"
+        shorthelp(args)
+        sys.exit(2)
+
+    for platform in platforms:
+      excludes_pkg_by_os[platform.getOS()] = list()
+      
+    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 ("-x", "--exclude"):
+            excludes_pki.append(arg)
+            excludes_pkg.append(arg)
+        elif opt in ( "--excludepki"):
+            excludes_pki.append(arg)
+        elif opt in ( "--excludepkg"):
+            if ":" in arg:
+              osid, arg = arg.split(":")
+              excludes_pkg_by_os[osid] = arg
+            else:
+              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.match(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:
+            debug("Exclude package '%s'" % info.getFullName())
+    if default_selection != None :
+        set.write(default_selection,default_selection)
+    set.write("packages.properties","packages.properties")
+    set.close()
+    mychmod(packages_gvspki,RWALL)
+
+    md5sum(packages_gvspki,packages_gvspki+".md5")
+    mychmod(packages_gvspki+".md5",RWALL)
+
+    if not index_only :
+      for platform in platforms:
+        packages_gvspks = getDist() +"/packages-"+platform.getOS()+"-"+platform.getArch()+".gvspks"
+        message( "Writing 'packages-"+platform.getOS()+"-"+platform.getArch()+".gvspks' to '%s'" % packages_gvspks )
+        set = zipfile.ZipFile(packages_gvspks,"w",zipfile.ZIP_STORED)
+        for info in indexes:
+            if not info.match(excludes_pkg) and not info.match(excludes_pkg_by_os[platform.getOS()]):
+                try:
+                    if info.hasPkg():
+                      if info.getOS() in ("all", platform.getOS()) :
+                        if info.getArch() in ("all", platform.getArch()) :
+                          set.write(info.getPkgFilename(), os.path.basename(info.getPkgFilename()))
+                except Exception, ex:
+                    msgerror("Can't add package '%s', error %s" % (info, str(ex)))
+            else:
+                debug("Exclude package '%s'" % info.getFullName())
+        if default_selection != None :
+            set.write(default_selection,default_selection)
+        set.write("packages.properties","packages.properties")
+        set.close()
+        mychmod(packages_gvspks,RWALL)
+
+        md5sum(packages_gvspks,packages_gvspks+".md5")
+        mychmod(packages_gvspks+".md5",RWALL)
+
+    message( "Createds package indexes.\n")
+
+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"
+        shorthelp(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 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")
+
+def domkmirror(root_src, version, build):
+  join = os.path.join
+
+  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")
+
+  makedirs(root_target)
+  makedirs(build_target)
+  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)
+      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"
+        shorthelp(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
+
+    message("Creating html pages...")
+    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 visualizacion de la tabla y carga dinamica 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>
+
+<!-- inicializacion 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
+
+    message("html pages createds.\n")
+
+
+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 visualizacion 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>
+  <!-- inicializacion 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 extract_make_portable(zfile, targetfolder):
+  print "Extracting 'make-portable' from %r to %r" % (zfile,targetfolder)
+  zf = zipfile.ZipFile(zfile)
+  data = zf.read("tools/make-portable")
+  f = open(os.path.join(targetfolder,"make-portable"),"wb")
+  f.write(data)
+  f.close()
+  zf.close()
+
+
+def extract_mkexec(zfile, targetfolder):
+  print "extract_mkexec: zfile=%s, target=%s" % (zfile, os.path.join(targetfolder,"mkexec"))
+  zf = zipfile.ZipFile(zfile)
+  data = zf.read("tools/mkexec")
+  f = open(os.path.join(targetfolder,"mkexec"),"wb")
+  f.write(data)
+  f.close()
+  zf.close()
+
+
+def prepare_portable(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("prepare-portable"), "b:s:", [ "build=", "state=" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        shorthelp(args)
+        sys.exit(2)
+
+    build=None
+    state=None
+    for opt, arg in opts:
+        if opt in ("-b", "--build"):
+            build=arg
+        elif opt in ("-s", "--state"):
+            state=arg
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if build == None:
+      print "Requiered option --build not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    if state == None:
+      print "Requiered option --state not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    join = os.path.join
+    build_folder = join(getPackagesRoot(),"dists",getVersion(),"builds",build)
+    if not os.path.isdir(build_folder):
+      print "Can't access the build folder "+build_folder+"."
+      sys.exit(2)
+
+    do_prepare_portable(build,state)
+
+def do_prepare_portable(build,state):
+    join = os.path.join
+    build_folder = join(getPackagesRoot(),"dists",getVersion(),"builds",build)
+    portable_folder = join(build_folder,"misc","portable")
+    makedirs(portable_folder)
+    makedirs(join(portable_folder,"packages","custom"))
+    makedirs(join(portable_folder,"standard"))
+    makedirs(join(portable_folder,"patchs"))
+    shutil.copy(
+        join(getPackagesRoot(),"dists",getVersion(),"excludes.portable"),
+        join(portable_folder,"packages","excludes")
+    )
+    for platform in platforms :
+      fname_base = "gvSIG-desktop-%s-%s-%s-%s-%s" % (
+        getVersion(),build,state,platform.getOS(),platform.getArch()
+      )
+      fname_base_onlinefamily = "gvSIG-desktop-%s-%s-%s-%s-%s" % (
+        getVersion(),build,state,platform.getOSFamilyForOnlineInstaller(),platform.getArch()
+      )
+      linkfile(
+        join(build_folder,fname_base_onlinefamily + "-online.zip"),
+        join(portable_folder,"standard",fname_base_onlinefamily + "-online.zip")
+      )
+      linkfile(
+        join(build_folder,fname_base + ".gvspks"),
+        join(portable_folder,"standard",fname_base + ".gvspks")
+      )
+    extract_make_portable(
+      join(build_folder,fname_base_onlinefamily + "-online.zip"),
+      join(portable_folder)
+    )
+    mychmod(join(portable_folder,"make-portable"),RWXALL)
+
+def zipfolder(source,target):
+  def zipdir(path, zip):
+      for root, dirs, files in os.walk(path):
+          for file in files:
+              zip.write(os.path.join(root, file))
+  zipf = zipfile.ZipFile(target, 'w')
+  zipdir(source, zipf)
+  zipf.close()
+
+def removefile(filename):
+  if os.path.exists(filename):
+    os.remove(filename)
+
+def mkportable(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkportable"), "b:s:", [ "build=", "state=" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        shorthelp(args)
+        sys.exit(2)
+
+    build=None
+    state=None
+    for opt, arg in opts:
+        if opt in ("-b", "--build"):
+            build=arg
+        elif opt in ("-s", "--state"):
+            state=arg
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if build == None:
+      print "Requiered option --build not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    if state == None:
+      print "Requiered option --state not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    join = os.path.join
+    build_folder = join(getPackagesRoot(),"dists",getVersion(),"builds",build)
+    portable_folder = join(build_folder,"misc","portable")
+    target_folder = join(portable_folder,"target")
+
+    if not os.path.isdir(build_folder):
+      print "Can't access the build folder "+build_folder+"."
+      sys.exit(2)
+
+    if not os.path.isdir(portable_folder) :
+      do_prepare_portable(build,state)
+    os.system('cd %s ; ./make-portable' % (portable_folder))
+
+    message("Moving portable zip files to build folder")
+    for platform in platforms :
+      fname = "gvSIG-desktop-%s-%s-%s-%s-%s%s.zip" %  (
+        getVersion(),build,state,platform.getOS(),platform.getArch(), platform.getPortableSufix()
+      )
+      if os.path.exists(join(target_folder,fname)) :
+        message("    Removing previos %s" % fname)
+        removefile(join(build_folder,fname))
+        message("    Moving zip %s" % fname)
+        shutil.move(join(target_folder,fname), build_folder)
+      else:
+        message("    Skip zip %s" % fname)
+
+    message("Remove temporary folders")
+    shutil.rmtree(target_folder)
+
+def mkexec(version, build, state, distribution_name, folder):
+  fname = "gvSIG-desktop-%s-%s-%s-lin-x86_64-online.zip" % (version,build,state)
+  extract_mkexec(os.path.join(folder,fname), folder)
+  mychmod(os.path.join(folder,"mkexec"),RWXALL)
+  cmd = 'cd %s ; ./mkexec "%s" "%s" "%s" "%s" "%s"' % (folder,version, build, state, distribution_name, folder)
+  print "mkexec: cmd=", cmd
+  os.system(cmd)
+  os.remove(os.path.join(folder,"mkexec"))
+
+def mkdist(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("mkdist"), "b:s:", [ "build=", "state=", "distribution_name=" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        shorthelp(args)
+        sys.exit(2)
+
+    build=None
+    state=None
+    distribution_name = "standard"
+
+    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
+        else:
+            assert False, "unhandled option %r" % opt
+
+    if build == None:
+      print "Requiered option --build not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    if state == None:
+      print "Requiered option --state not found."
+      shorthelp(args)
+      sys.exit(2)
+
+    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 + "...")
+    message("Recreating index of packages...")
+    executeCommand("mks", "-s", "-c")
+
+    #executeCommand("mkhtml" )
+
+    gvspki_filename = "builds/"+build+"/packages.gvspki"
+    message( "Coping packages.gvspki to "+ gvspki_filename + "\n")
+    shutil.copyfile("packages.gvspki", gvspki_filename)
+    shutil.copyfile("packages.gvspki.md5", gvspki_filename +".md5")
+
+    for platform in platforms:
+        message( "Creating installers for platform "+platform.getOS()+"/"+platform.getArch()+"...")
+        gvspks_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+platform.getOS()+"-"+platform.getArch()+".gvspks"
+        online_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+platform.getOS()+"-"+platform.getArch() + "-online.jar"
+
+        if not os.path.isfile(online_filename):
+          osfamily=platform.getOSFamilyForOnlineInstaller()
+          message("Coping standard online installer from os family (%s) to %s." % (osfamily, online_filename))
+          shutil.copyfile(
+            "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+osfamily+"-"+platform.getArch() + "-online.jar",
+            online_filename
+          )
+
+        if not os.path.isfile(online_filename):
+          msgwarn("Can't access the online installer for "+platform.getOS()+"/"+platform.getArch() + " ("+online_filename+").")
+          continue
+
+        message( "Coping packages-"+platform.getOS()+"-"+platform.getArch()+".gvspks to "+ gvspks_filename)
+        shutil.copyfile("packages-"+platform.getOS()+"-"+platform.getArch()+".gvspks", gvspks_filename)
+        shutil.copyfile("packages-"+platform.getOS()+"-"+platform.getArch()+".gvspks.md5", gvspks_filename +".md5")
+
+        message( "Add execution permissions to online installers....")
+        mychmod(online_filename,RWXALL)
+
+        md5sum(online_filename,online_filename+".md5")
+        mychmod(online_filename+".md5",RWALL)
+
+
+        executeCommand("mkinstall" , online_filename, gvspks_filename)
+
+        message( "Renaming files from custom to standard...")
+        target_filename = "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+platform.getOS()+"-"+platform.getArch()+"-"+distribution_name + ".jar"
+        shutil.move(
+            "builds/"+build+"/gvSIG-desktop-" + VERSION + "-" + build+ "-" + state + "-"+platform.getOS()+"-"+platform.getArch() + "-custom.jar",
+            target_filename
+        )
+        mychmod(target_filename,RWXALL)
+
+        md5sum(target_filename,target_filename+".md5")
+        mychmod(target_filename+".md5",RWALL)
+
+        message( "Createds installers for platform "+platform.getOS()+"/"+platform.getArch()+"\n")
+
+    mkexec(VERSION, build, state, distribution_name, os.path.join(os.getcwd(), "builds", build))
+
+    #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( "\nCreation of distribution completed.\n")
+
+
+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"
+        shorthelp(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"
+        shorthelp(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"
+        shorthelp(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 crearpki(path_pkg, url_pkg):
+  z = zipfile.ZipFile(path_pkg,"r")
+  zi = z.infolist()
+  filename = None
+  contents = None
+  for info in zi :
+    if info.filename.endswith("/package.info"):
+      filename = info.filename
+      contents = z.read(filename)
+      if contents[-1:]!= "\n":
+        contents += "\n"
+      contents += "download-url=%s\n" % url_pkg.replace(":","\\:")
+      break
+
+  z.close()
+  
+  if filename == None:
+    return
+  
+  fname = path_pkg[:-7]+".gvspki"
+  z = zipfile.ZipFile(fname,"w")
+  z.writestr(filename,contents)
+  z.close()
+  
+  return fname
+  
+def install(args):
+    cmd = Command(args)
+    try:
+        opts, args = getopt.getopt(cmd.getArgs("install"), "fS", [ "force","nohttps" ])
+    except getopt.GetoptError, err:
+        # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
+        shorthelp(args)
+        sys.exit(2)
+
+    force = False
+    nohttps = False
+    for opt, arg in opts:
+        if opt in ("-f", "--force"):
+            force = True
+        if opt in ("-S", "--nohttps"):
+            nohttps = True
+        else:
+            assert False, "unhandled option %r" % opt
+
+    url_pki = args[0]
+    if url_pki.endswith(".gvspki") and url_pki.startswith("https:") and nohttps :
+       url_pki = "http:" + url_pki[6:]
+
+    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
+    if temppath_pki.endswith(".gvspki"):
+      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)
+
+      if url_pkg.startswith("https:") and nohttps :
+         url_pkg = "http:" + url_pkg[6:]
+
+      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
+
+    elif temppath_pki.endswith(".gvspkg"):
+      temppath_pkg = temppath_pki
+      pkg = PackageInfo(temppath_pki)
+      url = getpackageUrl(getPool()+"/"+pkg.getCode()+"/"+os.path.basename(temppath_pkg))
+      temppath_pki = crearpki(temppath_pkg,url)
+
+    else:
+      msgerror("Can't install '%s', extension is not a gvspki or gvspkg.\n" % url_pki)
+      return 1
+
+    folder = os.path.join(getPool(),pkg.getCode())
+    makedirs(folder)
+    pathname_pki = os.path.join(folder,os.path.basename(temppath_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(temppath_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 shorthelp(args):
+    print """
+usage: gvspkg [OPTIONS] COMMANDS
+OPTIONS:
+
+-h,--help       Muestra esta ayuda
+-v,--verbose    Activa el modo verbose
+-d,--debug      Activa el modo debug.
+--version ver   Fija la version con la que van a trabajar.
+-r,--package-root root    Fija la carpeta del raiz del sistema de paquetes
+
+COMMANDS:
+
+mkinstall [OPTIONS] install-file packages-file
+    -L, --jrelin=path
+    -W, --jrewin=path
+    -l, --addjrelin
+    -w, --addjrewin
+    -N, --distribution-name=name
+
+lsi [OPTIONS]
+    -l, --long-format
+
+mks [OPTIONS]
+     -c, --clear-list
+     --excludepkg pkgcode
+     --excludepki pkgcode
+     --exclude pkgcode
+     -s, --include-default-selection
+     -i, --index-only
+     -I full-path-to-package, --include full-path-to-package
+
+mkdist [OPTIONS]
+     -s STATE, --state=STATE
+     -b BUILD, --build=BUILD
+     -N, --distribution-name=name
+
+mkmirror [OPTIONS]
+     -b, --build buildnumber
+
+mkhtml [OPTIONS]
+     -c, --clear-list
+     --excludepkg pkgcode
+     --excludepki pkgcode
+     --exclude pkgcode
+
+show OPTIONS package-index
+    --verify, -V
+
+edit [OPTIONS] package-index
+     --replace=@search@replace@
+     --onlysign
+     --sign, -S
+
+editall [OPTIONS]
+     -c, --clear-list
+     --excludepkg pkgcode
+     --excludepki pkgcode
+     --exclude pkgcode
+     --replace=@search@replace@
+     --sign, -S
+
+install [OPTIONS] url-to-pki
+     -f, --force
+
+prepare-portable [OPTIONS]
+     -b, --build
+     -s, --state
+
+mkportable [OPTIONS]
+     -b, --build
+     -s, --state
+
+La version actual a utilizar es:
+  %s
+
+El directorio root de la estructura de packetes actual es:
+  %s
+    """ % (VERSION, GVSPKG_ROOT)
+
+
+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.
+
+     -i | --index-only
+        No crea el fichero gvspks, solo crea el gvspki
+
+     -I full-path-to-package | --include full-path-to-package
+        Agrega 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.
+
+     -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 = "shorthelp"
+    if len(args)>0:
+        command=args[0]
+
+    r=1
+    if command=="lsi" :
+        r=lsi(args)
+    elif command == "mks":
+        r=mks(args)
+    elif command == "edit":
+        r=edit(args)
+    elif command == "editall":
+        r=editall(args)
+    elif command == "show":
+        r=show(args)
+    elif command == "mkhtml":
+        r=mkhtml(args)
+    elif command == "mkinstall":
+        r=mkinstall(args)
+    elif command == "install":
+        r=install(args)
+    elif command == "mkdist":
+        r=mkdist(args)
+    elif command == "mkmirror":
+        r=mkmirror(args)
+    elif command == "mkportable":
+        r=mkportable(args)
+    elif command == "prepare-portable":
+        r=prepare_portable(args)
+    elif command == "help":
+        r=help(args)
+    else:
+        r=shorthelp(args)
+    return r
+
+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"
+        shorthelp(None)
+        sys.exit(2)
+
+    for opt, arg in opts:
+        if opt in ("-h", "--help"):
+            shorthelp(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:
+      shorthelp(None)
+    else:
+      r=executeCommand(*args)
+      sys.exit(r)
+
+main()
+
+
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/src/main/packaging/gvspkg
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/src/main/packaging
___________________________________________________________________
Added: svn:ignore
   + .gvspkg.kate-swp


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/src/main/java/org/gvsig/desktop/installer/izpack/ExtractPackages.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/src/main/java/org/gvsig/desktop/installer/izpack/ExtractPackages.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/src/main/java/org/gvsig/desktop/installer/izpack/ExtractPackages.java	(revision 46118)
@@ -0,0 +1,62 @@
+ 
+package org.gvsig.desktop.installer.izpack;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+
+import com.izforge.izpack.core.resource.ResourceManager;
+import com.izforge.izpack.panels.process.AbstractUIProcessHandler;
+ 
+public class ExtractPackages {
+
+  private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
+  private static final int EOF = -1;
+
+  public boolean run(AbstractUIProcessHandler handler, String[] args) {
+    ResourceManager rm = new ResourceManager();
+    URL packagesurl = null;
+    try {
+      packagesurl = rm.getURL("/package.gvspks");
+    } catch(Exception ex) {
+    }
+    if( packagesurl == null ) {
+      handler.logOutput("package.gvspks not available in the instalation.", false);
+      return true;
+    }
+    handler.logOutput("Extracting packages (This may take a while)...", false);
+
+    File installation_folder = new File(args[0]);
+    File install_folder = new File(installation_folder,"install");
+    File packages = new File(install_folder,"package.gvspks");
+    
+    try {
+      install_folder.mkdir();
+      InputStream packages_fis = rm.getInputStream("/package.gvspks");
+      OutputStream packages_fos = new FileOutputStream(packages);
+      copy(packages_fis, packages_fos, new byte[DEFAULT_BUFFER_SIZE]);
+  
+    } catch(Exception ex) {
+      handler.logOutput("Can't extract packages: " + ex.toString(), false);
+      return false;
+    }
+    
+    handler.logOutput("Packages extracted.", false);
+    return true;
+  }
+  
+  public long copy(final InputStream input, final OutputStream output, final byte[] buffer)
+	  throws IOException {
+      long count = 0;
+      int n = 0;
+      while (EOF != (n = input.read(buffer))) {
+	  output.write(buffer, 0, n);
+	  count += n;
+      }
+      return count;
+  }
+  
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages/pom.xml	(revision 46118)
@@ -0,0 +1,86 @@
+<?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.installer.izpack.extractpackages</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+      <maven.javadoc.skip>true</maven.javadoc.skip>
+  </properties>
+
+  <dependencies>
+
+  <dependency>
+      <groupId>org.codehaus.izpack</groupId>
+      <artifactId>izpack-core</artifactId>
+      <scope>compile</scope>
+  </dependency>
+  <dependency>
+      <groupId>org.codehaus.izpack</groupId>
+      <artifactId>izpack-panel</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>
+
+      <plugin>
+        <!-- Skip test execution -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<configuration>
+	  <skip>true</skip>
+	</configuration>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+	</executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.extractpackages
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/pom.xml	(revision 46118)
@@ -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.desktop.installer.izpack.win.x86_64</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+    <installer_architecture>x86_64</installer_architecture>
+    <installer_os>win</installer_os>
+  </properties>
+
+  <build>
+    <plugins>
+
+      <plugin>
+	  <groupId>com.igormaznitsa</groupId>
+	  <artifactId>jcp</artifactId>
+	  <version>6.0.0</version>
+	  <!--
+	  https://github.com/raydac/java-comment-preprocessor/blob/master/src/main/java/com/igormaznitsa/jcp/maven/PreprocessorMojo.java
+	  -->
+	  <executions>
+	      <execution>
+		  <id>preprocess_installer_files</id>
+		  <phase>generate-sources</phase>
+		  <goals>
+		      <goal>preprocess</goal>
+		  </goals>
+		  <configuration>
+		    <keepLines>false</keepLines>
+		    <removeComments>true</removeComments>
+
+		    <excluded>txt</excluded>
+		    <processing>xml</processing>
+
+		    <source>${project.basedir}/src/main/izpack</source>
+		    <destination>target</destination>
+		  </configuration>
+	      </execution>
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>prepare-lin-installer</id>
+	    <phase>generate-sources</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/prepare_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-lin-installer</id>
+	    <phase>install</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/deploy_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.izpack</groupId>
+	<artifactId>izpack-maven-plugin</artifactId>
+	<version>${izpack.version}</version>
+	<executions>
+	    <execution>
+	      <phase>package</phase>
+	      <goals><goal>izpack</goal></goals>
+	      <configuration>
+		  <baseDir>${project.basedir}/target</baseDir>
+ 		  <finalName>gvSIG-desktop-${package.info.version}-${package.info.state}-${installer_os}-${installer_architecture}-online</finalName>
+		  <installFile>${project.basedir}/target/install.xml</installFile>
+	      </configuration>
+	    </execution>
+	</executions>
+	<dependencies>
+	    <dependency>
+	      <groupId>org.codehaus.izpack</groupId>
+	      <artifactId>izpack-panel</artifactId>
+	      <version>${izpack.version}</version>
+	    </dependency>
+	  </dependencies>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/deploy_win.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/deploy_win.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/deploy_win.groovy	(revision 46118)
@@ -0,0 +1,37 @@
+
+
+import Helper
+
+
+def deployInstallers(helper) {
+
+  WebDAVClient session = helper.getWebDAVClient(log);
+  targetfolder = helper.getAddOnRepoURL()
+  sourcefolder  = new File(project.basedir, "target").getAbsolutePath()
+
+  session.makedirs(targetfolder);
+
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.jar")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.zip")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+}
+
+
+def main() {
+    if( project.properties["deploy-installers"] != null ) {
+	def helper = new Helper(log,project)
+
+        deployInstallers(helper)
+    }
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/prepare_win.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/prepare_win.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/scripts/prepare_win.groovy	(revision 46118)
@@ -0,0 +1,61 @@
+
+import Helper
+
+def main() {
+    def helper = new Helper(log,project)
+
+    log.info("Base path=" + helper.getProjectBaseFolder().getAbsolutePath())
+
+    helper.readPackageInfo()
+
+    target = new File(project.basedir, "target")
+
+    log.info("Copy common install files")
+    helper.copy_common_install_files(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.extractpackages.jar")
+    helper.copy_extractpackages_jar(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.copyjre.jar")
+    helper.copy_copyjre_jar(target)
+
+    log.info("Download busybox.exe")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/busybox.exe",
+      dest: new File(target,"busybox.exe").getAbsolutePath()
+    )
+    log.info("Download cygwin1.dll")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/cygwin1.dll",
+      dest: new File(target,"cygwin1.dll").getAbsolutePath()
+    )
+    log.info("Download cygpath.exe")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/cygpath.exe",
+      dest: new File(target,"cygpath.exe").getAbsolutePath()
+    )
+
+    log.info("Download cygcheck.exe ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/cygcheck.exe",
+      dest: new File(target,"cygcheck.exe").getAbsolutePath()
+    )
+
+        log.info("Download gvsig-desktop.exe ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/gvsig-desktop.exe",
+      dest: new File(target,"gvsig-desktop.exe").getAbsolutePath()
+    )
+
+     log.info("Download gvsig-desktop.au3 ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x64/gvsig-desktop.au3",
+      dest: new File(target,"gvsig-desktop.au3").getAbsolutePath()
+    )
+
+    helper.prepare_portable()
+    helper.pack_portable()
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/shortcut_spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/shortcut_spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/shortcut_spec.xml	(revision 46118)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<shortcuts>
+    <defaultCurrentUser/>
+    <programGroup defaultName="gvSIG" location="applications"/>
+
+    <shortcut
+            name="gvSIG desktop"
+            type="application"
+            programGroup="yes"
+            desktop="yes"
+            applications="no"
+            startMenu="yes"
+            startup="no"
+            target="$INSTALL_PATH\gvsig-desktop.exe"
+            commandLine=""
+            description=""
+	    iconFile="$INSTALL_PATH\gvSIG.ico"
+	    iconIndex="0"
+	    workingDirectory="$INSTALL_PATH"
+	    createForAll="yes"
+    >
+    <createForPack name="gvSIG desktop commons" />
+  </shortcut>
+</shortcuts>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/install.xml	(revision 46118)
@@ -0,0 +1,53 @@
+
+<izpack:installation version="5.0"
+                     xmlns:izpack="http://izpack.org/schema/installation"
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://izpack.org/schema/installation http://izpack.org/schema/5.0/izpack-installation-5.0.xsd">
+
+  <info>
+    //#include "../../../../src/main/izpack/include/info_elements.xml"
+    <run-privileged uninstaller="yes"/>
+  </info>
+
+  //#include "../../../../src/main/izpack/include/langpacks.xml"
+
+  <variables>
+    //#include "../../../../src/main/izpack/include/variables_elements.xml"
+  </variables>
+
+  //#include "../../../../src/main/izpack/include/guiprefs.xml"
+
+  <resources>
+    //#include "../../../../src/main/izpack/include/resources_elements.xml"
+  </resources>
+
+  //#include "../../../../src/main/izpack/include/jars.xml"
+
+  //#include "../../../../src/main/izpack/include/panels.xml"
+
+  <packs>
+    //#include "../../../../src/main/izpack/include/pack_all_platforms.xml"
+
+    <pack name="gvSIG desktop commons windows" required="yes">
+      <description>Core common files for Windows platforms</description>
+      <file src="${product.folder}/gvsig-package-installer.cmd" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-desktop.cmd" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-desktop.vbs" targetdir="$INSTALL_PATH"/>
+      <file src="busybox.exe" targetdir="$INSTALL_PATH"/>
+      <file src="cygcheck.exe" targetdir="$INSTALL_PATH"/>
+      <file src="cygwin1.dll" targetdir="$INSTALL_PATH"/>
+      <file src="cygpath.exe" targetdir="$INSTALL_PATH"/>
+      <file src="gvsig-desktop.exe" targetdir="$INSTALL_PATH"/>
+      <file src="gvsig-desktop.au3" targetdir="$INSTALL_PATH"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-package-installer.cmd"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-desktop.cmd"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-desktop.vbs"/>
+    </pack>
+
+  </packs>
+
+  <natives>
+      <native type="izpack" name="ShellLink_x64.dll"/>
+  </natives>
+
+</izpack:installation>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/ProcessPanel.Spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/ProcessPanel.Spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack/ProcessPanel.Spec.xml	(revision 46118)
@@ -0,0 +1,12 @@
+
+<processing>
+
+  //#include "../../../../src/main/izpack/include/job_extract_packages.xml"
+
+  <job name="Running addon manager">
+    <executefile name="$INSTALL_PATH/gvsig-package-installer.cmd"/>
+  </job>
+  <onFail previous="true" next="false" />
+  <onSuccess previous="true" next="true"/>
+</processing>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main/izpack
___________________________________________________________________
Added: svn:ignore
   + .shortcut_spec.xml.kate-swp
.directory



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64/src/main
___________________________________________________________________
Added: svn:ignore
   + .directory



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86_64
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/pom.xml	(revision 46118)
@@ -0,0 +1,86 @@
+<?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.installer.izpack.copyjre</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+      <maven.javadoc.skip>true</maven.javadoc.skip>
+  </properties>
+
+  <dependencies>
+
+  <dependency>
+      <groupId>org.codehaus.izpack</groupId>
+      <artifactId>izpack-core</artifactId>
+      <scope>compile</scope>
+  </dependency>
+  <dependency>
+      <groupId>org.codehaus.izpack</groupId>
+      <artifactId>izpack-panel</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>
+
+      <plugin>
+        <!-- Skip test execution -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<configuration>
+	  <skip>true</skip>
+	</configuration>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+	</executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/src/main/java/org/gvsig/desktop/installer/izpack/CopyJRE.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/src/main/java/org/gvsig/desktop/installer/izpack/CopyJRE.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre/src/main/java/org/gvsig/desktop/installer/izpack/CopyJRE.java	(revision 46118)
@@ -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.desktop.installer.izpack;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import com.izforge.izpack.panels.process.AbstractUIProcessHandler;
+import java.io.Closeable;
+import java.io.FileInputStream;
+import java.nio.channels.FileChannel;
+
+/*
+ * Based on portions of code from clases IOUtils and FileUtils 
+ * of the project org.apache.commons.io of the Apache Software Foundation (ASF)
+ *
+ * http://svn.apache.org/viewvc/commons/proper/io/tags/commons-io-2.5/src/main/java/org/apache/commons/io/FileUtils.java?view=markup
+ * http://svn.apache.org/viewvc/commons/proper/io/tags/commons-io-2.5/src/main/java/org/apache/commons/io/IOUtils.java?view=markup
+ */
+public class CopyJRE {
+
+    public boolean run(AbstractUIProcessHandler handler, String[] args) {
+        File java_home = new File(System.getProperties().getProperty("java.home"));
+        File f = new File(java_home, "package.info");
+        if (!f.exists()) {
+            // Solo copiamos la JRE si es la de un plugin de gvSIG.
+            return true;
+        }
+
+        handler.logOutput("Installing JRE plugin (This may take a while)...", false);
+        try {
+            File installation_folder = new File(args[0]);
+            File target = getFile(installation_folder,"gvSIG", "extensiones","jre");
+            doCopyDirectory(java_home,target,true);
+            File java_bin = getFile(installation_folder,"gvSIG", "extensiones","jre","bin","java");
+            java_bin.setExecutable(true, false);
+        } catch (Exception ex) {
+            handler.logOutput("Can't install JRE plugin. " + ex.toString(), false);
+            return false;
+        }
+
+        handler.logOutput("JRE plugin installed.", false);
+        return true;
+    }
+
+    public static final long ONE_KB = 1024;
+    public static final long ONE_MB = ONE_KB * ONE_KB;
+    private static final long FILE_COPY_BUFFER_SIZE = ONE_MB * 30;
+
+    public static File getFile(final File directory, final String... names) {
+        if (directory == null) {
+            throw new NullPointerException("directory must not be null");
+        }
+        if (names == null) {
+            throw new NullPointerException("names must not be null");
+        }
+        File file = directory;
+        for (final String name : names) {
+            file = new File(file, name);
+        }
+        return file;
+    }
+
+    private static void doCopyDirectory(final File srcDir, final File destDir,
+            final boolean preserveFileDate)
+            throws IOException {
+        // recurse
+        final File[] srcFiles = srcDir.listFiles();
+        if (srcFiles == null) { // null if abstract pathname does not denote a directory, or if an I/O error occurs
+            throw new IOException("Failed to list contents of " + srcDir);
+        }
+        if (destDir.exists()) {
+            if (destDir.isDirectory() == false) {
+                throw new IOException("Destination '" + destDir + "' exists but is not a directory");
+            }
+        } else {
+            if (!destDir.mkdirs() && !destDir.isDirectory()) {
+                throw new IOException("Destination '" + destDir + "' directory cannot be created");
+            }
+        }
+        if (destDir.canWrite() == false) {
+            throw new IOException("Destination '" + destDir + "' cannot be written to");
+        }
+        for (final File srcFile : srcFiles) {
+            final File dstFile = new File(destDir, srcFile.getName());
+            if (srcFile.isDirectory()) {
+                doCopyDirectory(srcFile, dstFile, preserveFileDate);
+            } else {
+                doCopyFile(srcFile, dstFile, preserveFileDate);
+            }
+        }
+
+        // Do this last, as the above has probably affected directory metadata
+        if (preserveFileDate) {
+            destDir.setLastModified(srcDir.lastModified());
+        }
+    }
+
+    private static void doCopyFile(final File srcFile, final File destFile, final boolean preserveFileDate)
+            throws IOException {
+        if (destFile.exists() && destFile.isDirectory()) {
+            throw new IOException("Destination '" + destFile + "' exists but is a directory");
+        }
+
+        FileInputStream fis = null;
+        FileOutputStream fos = null;
+        FileChannel input = null;
+        FileChannel output = null;
+        try {
+            fis = new FileInputStream(srcFile);
+            fos = new FileOutputStream(destFile);
+            input = fis.getChannel();
+            output = fos.getChannel();
+            final long size = input.size(); // TODO See IO-386
+            long pos = 0;
+            long count = 0;
+            while (pos < size) {
+                final long remain = size - pos;
+                count = remain > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : remain;
+                final long bytesCopied = output.transferFrom(input, pos, count);
+                if (bytesCopied == 0) { // IO-385 - can happen if file is truncated after caching the size
+                    break; // ensure we don't loop forever
+                }
+                pos += bytesCopied;
+            }
+        } finally {
+            closeQuietly(output, fos, input, fis);
+        }
+
+        final long srcLen = srcFile.length(); // TODO See IO-386
+        final long dstLen = destFile.length(); // TODO See IO-386
+        if (srcLen != dstLen) {
+            throw new IOException("Failed to copy full contents from '"
+                    + srcFile + "' to '" + destFile + "' Expected length: " + srcLen + " Actual: " + dstLen);
+        }
+        if (preserveFileDate) {
+            destFile.setLastModified(srcFile.lastModified());
+        }
+    }
+
+    public static void closeQuietly(final Closeable closeable) {
+        try {
+            if (closeable != null) {
+                closeable.close();
+            }
+        } catch (final IOException ioe) {
+            // ignore
+        }
+    }
+
+    public static void closeQuietly(final Closeable... closeables) {
+        if (closeables == null) {
+            return;
+        }
+        for (final Closeable closeable : closeables) {
+            closeQuietly(closeable);
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.copyjre
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/deploy_lin.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/deploy_lin.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/deploy_lin.groovy	(revision 46118)
@@ -0,0 +1,37 @@
+
+
+import Helper
+
+
+def deployInstallers(helper) {
+
+  WebDAVClient session = helper.getWebDAVClient(log);
+  targetfolder = helper.getAddOnRepoURL()
+  sourcefolder  = new File(project.basedir, "target").getAbsolutePath()
+
+  session.makedirs(targetfolder);
+
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.jar")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.zip")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+}
+
+
+def main() {
+  if( project.properties["deploy-installers"] != null ) {
+    def helper = new Helper(log,project)
+
+    deployInstallers(helper)
+  }
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/prepare_lin.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/prepare_lin.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/scripts/prepare_lin.groovy	(revision 46118)
@@ -0,0 +1,28 @@
+
+import Helper
+
+def main() {
+    def helper = new Helper(log,project)
+
+    log.info("Base path=" + helper.getProjectBaseFolder().getAbsolutePath())
+
+    helper.readPackageInfo()
+
+    target = new File(project.basedir, "target")
+
+    log.info("Copy common install files")
+    helper.copy_common_install_files(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.extractpackages.jar")
+    helper.copy_extractpackages_jar(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.copyjre.jar")
+    helper.copy_copyjre_jar(target)
+
+    helper.prepare_portable()
+    helper.pack_portable()
+}
+
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/shortcut_spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/shortcut_spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/shortcut_spec.xml	(revision 46118)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<shortcuts>
+    <defaultCurrentUser/>
+    <programGroup defaultName="gvSIG" location="applications"/>
+
+    <shortcut
+            name="gvSIG desktop"
+            type="Application"
+            programGroup="yes"
+            desktop="yes"
+            applications="no"
+            startMenu="yes"
+            startup="no"
+            target="$INSTALL_PATH/gvSIG.sh"
+	    workingDirectory="$INSTALL_PATH"
+            commandLine=""
+            description=""
+	    iconFile="$INSTALL_PATH/gvsig-icon48x48.png"
+	    iconIndex="0"
+	    createForAll="no"
+            encoding="UTF-8"
+	    terminal="false"
+	    KdeSubstUID="false"
+	    initialState="normal"
+    >
+    <createForPack name="gvSIG desktop commons" />
+  </shortcut>
+</shortcuts>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/install.xml	(revision 46118)
@@ -0,0 +1,14 @@
+ 
+<izpack:installation version="5.0"
+                     xmlns:izpack="http://izpack.org/schema/installation"
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://izpack.org/schema/installation http://izpack.org/schema/5.0/izpack-installation-5.0.xsd">
+ 
+  //#include "../../../../src/main/izpack/include/all.xml"
+  
+  <packs>
+    //#include "../../../../src/main/izpack/include/pack_all_platforms.xml"
+    
+  </packs>
+  
+</izpack:installation>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/ProcessPanel.Spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/ProcessPanel.Spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/src/main/izpack/ProcessPanel.Spec.xml	(revision 46118)
@@ -0,0 +1,15 @@
+
+<processing>
+
+  //#include "../../../../src/main/izpack/include/job_extract_packages.xml"
+
+  <job name="Running addon manager">
+    <executefile name="$INSTALL_PATH/gvSIG.sh">
+      <arg>--install</arg>
+    </executefile>
+  </job>
+
+  <onFail previous="true" next="false" />
+  <onSuccess previous="true" next="true"/>
+</processing>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64/pom.xml	(revision 46118)
@@ -0,0 +1,123 @@
+<?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.installer.izpack.lin.x86_64</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+    <installer_architecture>x86_64</installer_architecture>
+    <installer_os>lin</installer_os>
+  </properties>
+
+  <build>
+    <plugins>
+
+      <plugin>
+	  <groupId>com.igormaznitsa</groupId>
+	  <artifactId>jcp</artifactId>
+	  <version>6.0.0</version>
+	  <!--
+	  https://github.com/raydac/java-comment-preprocessor/blob/master/src/main/java/com/igormaznitsa/jcp/maven/PreprocessorMojo.java
+	  -->
+	  <executions>
+	      <execution>
+		  <id>preprocess_installer_files</id>
+		  <phase>generate-sources</phase>
+		  <goals>
+		      <goal>preprocess</goal>
+		  </goals>
+		  <configuration>
+		    <keepLines>false</keepLines>
+		    <removeComments>true</removeComments>
+
+		    <excluded>txt</excluded>
+		    <processing>xml</processing>
+
+		    <source>${project.basedir}/src/main/izpack</source>
+		    <destination>target</destination>
+		  </configuration>
+	      </execution>
+	  </executions>
+      </plugin>
+
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>prepare-lin-installer</id>
+	    <phase>generate-sources</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/prepare_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-lin-installer</id>
+	    <phase>install</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/deploy_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.izpack</groupId>
+	<artifactId>izpack-maven-plugin</artifactId>
+	<version>${izpack.version}</version>
+	<executions>
+	    <execution>
+	      <phase>package</phase>
+	      <goals><goal>izpack</goal></goals>
+	      <configuration>
+		  <baseDir>${project.basedir}/target</baseDir>
+ 		  <finalName>gvSIG-desktop-${package.info.version}-${package.info.state}-${installer_os}-${installer_architecture}-online</finalName>
+		  <installFile>${project.basedir}/target/install.xml</installFile>
+	      </configuration>
+	    </execution>
+	</executions>
+	<dependencies>
+	    <dependency>
+	      <groupId>org.codehaus.izpack</groupId>
+	      <artifactId>izpack-panel</artifactId>
+	      <version>${izpack.version}</version>
+	    </dependency>
+	  </dependencies>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86_64
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/readme.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/readme.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/readme.html	(revision 46118)
@@ -0,0 +1,14 @@
+<html>
+  <body>
+  <br>
+  <br>
+  <b>Welcome to the installer wizard for <i>gvSIG desktop</i></b><br>
+  <br>
+  <br>
+  This will install <i>gvSIG desktop</i> on your computer.<br>
+  It is recommended that you close all other applications before continuing.<br>
+  Click Next to continue or Cancel to exit Setup.<br>
+  <br>
+  <br>
+  </body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/addonmanager.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/addonmanager.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/addonmanager.html	(revision 46118)
@@ -0,0 +1,17 @@
+<html>
+<body>
+<p>Now you have installed a basic gvSIG version.</p>
+
+<p>Next you will be able to install some additional add-ons to add or improve the available gvSIG functionalities.</p>
+
+<p>Those add-ons installation will be able to be made from three different sources:
+<ul>
+<li>Standard installation: select this option if the downloaded gvSIG installable file contains add-ons to install.</li>
+
+<li>Installation from file: if you have also downloaded installation add-ons or add-on sets (files with extension .gvspkg or .gvspks).</li>
+
+<li>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.</li>
+</ul>
+</p>
+</body>
+</html>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/langpacks.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/langpacks.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/langpacks.xml	(revision 46118)
@@ -0,0 +1,35 @@
+
+  <locale>
+    <langpack iso3="bra"/>
+    <langpack iso3="cat"/>
+    <langpack iso3="ces"/>
+    <langpack iso3="chn"/>
+    <langpack iso3="dan"/>
+    <langpack iso3="deu"/>
+    <langpack iso3="ell"/>
+    <langpack iso3="eng"/>
+    <langpack iso3="eus"/>
+    <langpack iso3="fa"/>
+    <langpack iso3="fin"/>
+    <langpack iso3="fra"/>
+    <langpack iso3="glg"/>
+    <langpack iso3="hun"/>
+    <langpack iso3="idn"/>
+    <langpack iso3="ita"/>
+    <langpack iso3="jpn"/>
+    <langpack iso3="kor"/>
+    <langpack iso3="msa"/>
+    <langpack iso3="nld"/>
+    <langpack iso3="nor"/>
+    <langpack iso3="pol"/>
+    <langpack iso3="prt"/>
+    <langpack iso3="ron"/>
+    <langpack iso3="rus"/>
+    <langpack iso3="slk"/>
+    <langpack iso3="spa"/>
+    <langpack iso3="swe"/>
+    <langpack iso3="tur"/>
+    <langpack iso3="twn"/>
+    <langpack iso3="ukr"/>
+    
+  </locale>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/guiprefs.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/guiprefs.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/guiprefs.xml	(revision 46118)
@@ -0,0 +1,16 @@
+ 
+  <guiprefs width="800" height="600" resizable="no">
+    <!--
+    <splash>images/peas_load.gif</splash>
+    <laf name="substance">
+      <os family="windows" />
+      <os family="unix" />
+      <param name="variant" value="mist-silver" />
+    </laf>
+    <laf name="substance">
+      <os family="mac" />
+      <param name="variant" value="mist-aqua" />
+    </laf>
+    -->
+    <modifier key="useHeadingPanel" value="no" />
+  </guiprefs>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/variables_elements.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/variables_elements.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/variables_elements.xml	(revision 46118)
@@ -0,0 +1,3 @@
+    <variable name="product.folder" value="../../target/product/gvsig-desktop"/>
+    <variable name="TargetPanel.dir.windows" value="${APPLICATIONS_DEFAULT_ROOT}${FILE_SEPARATOR}gvSIG-desktop${FILE_SEPARATOR}gvSIG-desktop-@{gvsig.version}"/>
+    <variable name="TargetPanel.dir.unix" value="${USER_HOME}${FILE_SEPARATOR}gvSIG-desktop${FILE_SEPARATOR}gvSIG-desktop-@{gvsig.version}"/>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/resources_elements.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/resources_elements.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/resources_elements.xml	(revision 46118)
@@ -0,0 +1,6 @@
+    <res id="HTMLInfoPanel.readme" src="readme.html"/>
+    <res id="LicencePanel.licence" src="LICENSE.txt" />
+    <res id="HTMLInfoPanel.addonmanager" src="addonmanager.html"/>
+
+    <res id="ProcessPanel.Spec.xml" src="ProcessPanel.Spec.xml"/>
+    <res id="shortcutSpec.xml" src="shortcut_spec.xml"/>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/info_elements.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/info_elements.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/info_elements.xml	(revision 46118)
@@ -0,0 +1,4 @@
+    <appname>gvSIG desktop</appname>
+    <appversion>/*$mvn.project.property.gvsig.version$*/</appversion>
+    <javaversion>1.6</javaversion>
+ 
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/all.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/all.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/all.xml	(revision 46118)
@@ -0,0 +1,23 @@
+ 
+  <info>
+    //#include "info_elements.xml"
+    <!--
+    <run-privileged/>
+    -->
+  </info>
+ 
+  //#include "langpacks.xml"
+
+  <variables>
+    //#include "variables_elements.xml"
+  </variables>
+	  
+  //#include "guiprefs.xml"
+ 
+  <resources>
+    //#include "resources_elements.xml"
+  </resources>
+
+  //#include "jars.xml"
+  
+  //#include "panels.xml" 
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/pack_all_platforms.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/pack_all_platforms.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/pack_all_platforms.xml	(revision 46118)
@@ -0,0 +1,30 @@
+
+    <pack name="gvSIG desktop commons" required="yes">
+      <description>Core common files for all platforms</description>
+      <file src="${product.folder}/gvSIG.sh" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvSIG.config" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvSIG.ico" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-icon22x22.png" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-icon16x16.png" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-icon48x48.png" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/package.info" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/log4j.properties" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/LEEME.txt" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/LICENSE.txt" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/README.txt" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-installer-urls.config" targetdir="$INSTALL_PATH"/>
+
+      <fileset dir="${product.folder}/update" targetdir="${INSTALL_PATH}/update" override="true"/>
+      <fileset dir="${product.folder}/i18n" targetdir="${INSTALL_PATH}/i18n" override="true"/>
+      <fileset dir="${product.folder}/install" targetdir="${INSTALL_PATH}/install" override="true"/>
+      <fileset dir="${product.folder}/lib" targetdir="${INSTALL_PATH}/lib" override="true"/>
+      <fileset dir="${product.folder}/theme" targetdir="${INSTALL_PATH}/theme" override="true"/>
+      <fileset dir="${product.folder}/icon-theme" targetdir="${INSTALL_PATH}/icon-theme" override="true"/>
+      <fileset dir="${product.folder}/native" targetdir="${INSTALL_PATH}/native" override="true"/>
+      <fileset dir="${product.folder}/tools" targetdir="${INSTALL_PATH}/tools" override="true"/>
+
+      <file src="${product.folder}/gvSIG/README.txt" targetdir="${INSTALL_PATH}/gvSIG"/>
+
+      <executable targetfile="$INSTALL_PATH/gvSIG.sh" stage="never" keep="true"/>
+    </pack>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/jars.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/jars.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/jars.xml	(revision 46118)
@@ -0,0 +1,3 @@
+  <jar src="org.gvsig.desktop.installer.izpack.extractpackages.jar" stage="install"/>
+  <jar src="org.gvsig.desktop.installer.izpack.copyjre.jar" stage="install"/>
+ 
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/job_extract_packages.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/job_extract_packages.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/job_extract_packages.xml	(revision 46118)
@@ -0,0 +1,9 @@
+
+  <job name="Checking packages file">
+    <executeclass name="org.gvsig.desktop.installer.izpack.CopyJRE">
+        <arg>$INSTALL_PATH</arg>
+    </executeclass>
+    <executeclass name="org.gvsig.desktop.installer.izpack.ExtractPackages">
+        <arg>$INSTALL_PATH</arg>
+    </executeclass>
+  </job>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/panels.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/panels.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/izpack/include/panels.xml	(revision 46118)
@@ -0,0 +1,12 @@
+  <panels>
+    <panel classname="HTMLInfoPanel" id="readme" />
+    <panel classname="LicencePanel"/>
+
+    <panel classname="TargetPanel"/>
+    <panel classname="InstallPanel"/>
+    <panel classname="HTMLInfoPanel" id="addonmanager" />
+    <panel classname="ProcessPanel" />
+    <panel classname="ShortcutPanel"/>
+
+    <panel classname="SimpleFinishPanel" allowClose="true"/>
+  </panels>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/config/defaultPackages
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/config/defaultPackages	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/config/defaultPackages	(revision 46118)
@@ -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.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/Helper.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/Helper.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/Helper.groovy	(revision 46118)
@@ -0,0 +1,355 @@
+
+import WebDAVClient
+import java.io.File
+
+public class Helper {
+
+  public ant = null
+
+  private projectBaseFile = null
+  private packageinfo = null
+  private project = null
+  private log = null
+
+  public Helper(logger,project) {
+    this.project = project
+    log = logger
+    //log.info("Helper(...)")
+
+    ant = new AntBuilder()
+  }
+
+  def copyDirToDir(source, target) {
+    //log.info("copyDirToDir "+source+","+target)
+    if( source instanceof File ) {
+      source = source.getAbsolutePath()
+    }
+    if( target instanceof File ) {
+      target = target.getAbsolutePath()
+    }
+    if( !target.endsWith("/") ) {
+      target += "/"
+    }
+    ant.copy( todir: target ) {
+      fileset( dir:source )
+    }
+  }
+
+  def moveDirToDir(source, target) {
+    //log.info("moveDirToDir "+source+","+target)
+    if( source instanceof File ) {
+      source = source.getAbsolutePath()
+    }
+    if( target instanceof File ) {
+      target = target.getAbsolutePath()
+    }
+    if( !target.endsWith("/") ) {
+      target += "/"
+    }
+    ant.move( todir: target ) {
+      fileset( dir: source )
+    }
+  }
+
+  def copyFileToDir(source, target) {
+    //log.info("copyFileToDir "+source+","+target)
+    if( source instanceof File ) {
+      source = source.getAbsolutePath()
+    }
+    if( target instanceof File ) {
+      target = target.getAbsolutePath()
+    }
+    if( !target.endsWith("/") ) {
+      target += "/"
+    }
+    ant.copy(file:source, todir:target)
+  }
+
+  def copyFileToFile(source, target) {
+    //log.info("copyFileToFile "+source+","+target)
+    if( source instanceof File ) {
+      source = source.getAbsolutePath()
+    }
+    if( target instanceof File ) {
+      target = target.getAbsolutePath()
+    }
+    ant.copy(file:source, tofile:target)
+  }
+
+  def getProjectBaseFolder(Object[] args ) {
+    if( projectBaseFile == null ) {
+      projectBaseFile = project.basedir
+      def f = new File(projectBaseFile,"/src/main/scripts/Helper.groovy")
+      if( !f.exists() ) {
+        projectBaseFile = projectBaseFile.getParentFile()
+      }
+    }
+    def f = projectBaseFile
+    args.each {
+      f = new File(f,it)
+    }
+    return f
+  }
+
+  def getProjectTargetFolder(Object[] args) {
+    return getProjectBaseFolder("target", *args)
+  }
+
+  def getProductFolderPath() {
+      return project.properties["gvsig.product.folder.path"]
+  }
+
+  def getInstallationFolder(Object[] args) {
+    return getProjectBaseFolder("target", "product", "gvsig-desktop", *args)
+  }
+
+  def getVersionWithBuildNumber() {
+      def ver = getPackageinfo().getProperty("version")
+      if( ver.contains("-") ) {
+	return ver
+      } else {
+	return ver +"-"+getPackageinfo().getProperty("buildNumber")
+      }
+  }
+
+  def getVersionWithoutBuildNumber() {
+      def ver = getPackageinfo().getProperty("version")
+      if( ver.contains("-") ) {
+	return ver.replaceFirst("-[0-9]*\$","")
+      } else {
+	return ver
+      }
+  }
+
+  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@@", getInstallationFolder().getAbsolutePath())
+      s = s.replaceAll("@@org.gvsig.andami.updater.jar@@", getAndamiUpdaterJarName())
+      s = s.replaceAll("@@version@@", getVersionWithBuildNumber().replace("-","."))
+      new File(target).write(s)
+      log.info("Created "+target)
+      ant.exec( command:"launch4jc "+ target )
+      log.info("Created launcher ("+target+").")
+  }
+
+  def getPackageinfo() {
+    if( packageinfo == null ) {
+      File file = getInstallationFolder("gvSIG","extensiones","org.gvsig.app.mainplugin","package.info")
+      log.info("read package.info from "+file.getAbsolutePath())
+      def p = new Properties()
+      p.load(file.newDataInputStream())
+      packageinfo = p
+      project.properties["package.info.version"] = getVersionWithBuildNumber()
+      project.properties["package.info.buildNumber"] = p.getProperty("buildNumber")
+      project.properties["package.info.state"] = p.getProperty("state")
+    }
+    return packageinfo
+  }
+
+  def readPackageInfo() {
+    getPackageinfo()
+  }
+
+  def getWebDAVClient(log) {
+	  def user
+	  def password
+	  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);
+	      }
+	  }
+	  def 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"]);
+	  }
+	  return session
+  }
+
+  def getAddOnRepoURL() {
+	  return "https://downloads.gvsig.org/download/gvsig-desktop-testing" +
+	      "/dists/" +
+	      getVersionWithoutBuildNumber() +
+	      "/builds/" +
+	      getPackageinfo().getProperty("buildNumber")
+  }
+
+  def getInstallerName(suffix) {
+	  return "gvSIG-desktop-" +
+	    getVersionWithBuildNumber() +
+	    "-" +
+	    getPackageinfo().getProperty("state") +
+	    suffix
+  }
+
+
+  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 = new File(getProjectTargetFolder() , jre_pkg_name).getAbsolutePath()
+      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")
+	    copyFileToDir(source, getProjectTargetFolder())
+
+	  }
+	} 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 getAndamiUpdaterJarName() {
+    def org_gvsig_andami_updater_jar = new FileNameFinder().getFileNames(
+      getInstallationFolder("lib").getAbsolutePath(),
+      '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()
+    return org_gvsig_andami_updater_jar
+  }
+
+  def copy_common_install_files(targetdir) {
+    copyFileToDir(getProjectBaseFolder("src","main","izpack","addonmanager.html"),targetdir)
+    copyFileToDir(getProjectBaseFolder("src","main","izpack","readme.html"),targetdir)
+    copyFileToDir(getProjectBaseFolder("target","product","gvsig-desktop","LICENSE.txt"),targetdir)
+  }
+
+  def copy_extractpackages_jar(targetdir) {
+    def org_gvsig_desktop_installer_izpack_extractpackages_jar = new FileNameFinder().getFileNames(
+      getProjectBaseFolder("org.gvsig.desktop.installer.izpack.extractpackages","target").getAbsolutePath(),
+      "org.gvsig.desktop.installer.izpack.extractpackages-*.jar",
+      "*-sources.jar"
+    )[0]
+
+    copyFileToFile(
+      org_gvsig_desktop_installer_izpack_extractpackages_jar,
+      new File(targetdir, "org.gvsig.desktop.installer.izpack.extractpackages.jar")
+    )
+
+  }
+
+  def copy_copyjre_jar(targetdir) {
+    def org_gvsig_desktop_installer_izpack_copyjre_jar = new FileNameFinder().getFileNames(
+      getProjectBaseFolder("org.gvsig.desktop.installer.izpack.copyjre","target").getAbsolutePath(),
+      "org.gvsig.desktop.installer.izpack.copyjre-*.jar",
+      "*-sources.jar"
+    )[0]
+
+    copyFileToFile(
+      org_gvsig_desktop_installer_izpack_copyjre_jar,
+      new File(targetdir, "org.gvsig.desktop.installer.izpack.copyjre.jar")
+    )
+
+  }
+
+  def expand(s) {
+
+    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
+    def install_path = new File(project.basedir, t).getAbsolutePath()
+    s = s.replace("\${product.folder}",this.getInstallationFolder().getAbsolutePath())
+    s = s.replace("\${INSTALL_PATH}",install_path)
+    s = s.replace("\$INSTALL_PATH",install_path)
+    return s
+  }
+
+  def prepare_portable() {
+
+    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
+    def install_path = new File(project.basedir, t).getAbsoluteFile()
+    install_path.mkdirs()
+
+    def target = new File(project.basedir, "target")
+    def installfile = new File(target,"install.xml")
+    def install = new XmlSlurper().parse(installfile)
+    install.packs.each {
+      it.pack.each {
+	it.file.each {
+	  def src = new File(expand(it.@src.text()))
+	  if( !src.isAbsolute() ) {
+	    src = new File(target,src.getPath())
+	  }
+	  def targetdir = expand(it.@targetdir.text())
+	  this.copyFileToDir(src,targetdir)
+	}
+	it.fileset.each {
+	  def src = new File(expand(it.@dir.text()))
+	  if( !src.isAbsolute() ) {
+	    src = new File(target,src.getPath())
+	  }
+	  def targetdir = expand(it.@targetdir.text())
+	  this.copyDirToDir(src,targetdir)
+	}
+	it.executable.each {
+	  def targetfile = new File(expand(it.@targetfile.text()))
+	  targetfile.setExecutable(true)
+	}
+      }
+    }
+
+    this.copyDirToDir(
+      this.getInstallationFolder("gvSIG/extensiones/org.gvsig.coreplugin.app.mainplugin"),
+      new File(install_path,"gvSIG/extensiones/org.gvsig.coreplugin.app.mainplugin")
+    )
+    this.copyDirToDir(
+      this.getInstallationFolder("gvSIG/extensiones/org.gvsig.installer.app.mainplugin"),
+      new File(install_path,"gvSIG/extensiones/org.gvsig.installer.app.mainplugin")
+    )
+  }
+
+  def pack_portable() {
+
+    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
+    def install_path = new File(project.basedir, t).getAbsoluteFile()
+    def target = new File(project.basedir, "target")
+
+    def portablezip = new File(target,this.getInstallerName(
+      "-" +
+      project.properties["installer_os"] +
+      "-" +
+      project.properties["installer_architecture"] +
+      "-online.zip"
+    ))
+
+    this.ant.zip(
+      destfile: portablezip,
+      basedir: install_path
+    )
+  }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/WebDAVClient.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/WebDAVClient.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/WebDAVClient.groovy	(revision 46118)
@@ -0,0 +1,110 @@
+
+import java.security.SecureRandom;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager
+import java.security.cert.X509Certificate
+import java.security.cert.CertificateException
+
+import org.apache.http.conn.ssl.SSLSocketFactory;
+
+import com.github.sardine.impl.SardineImpl;
+
+public class X509TrustedManager implements X509TrustManager,TrustManager {
+    public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+    }
+
+    public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+    }
+
+    public X509Certificate[] getAcceptedIssuers() {
+      return null;
+    }
+}
+
+public class SardineTrusted extends SardineImpl {
+
+  SSLSocketFactory socketFactory = null;
+
+  public SardineTrusted(String username, String password) {
+    super(username,password);
+  }
+
+  protected SSLSocketFactory createDefaultSecureSocketFactory() {
+    if( socketFactory == null ) {
+      SSLContext sslContext = SSLContext.getInstance("SSL");
+      def trustManagers = new X509TrustedManager[1];
+      X509TrustedManager trustManager = new X509TrustedManager()
+      trustManagers[0] = trustManager
+      sslContext.init(null, trustManagers, new SecureRandom());
+      socketFactory = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+    }
+    return socketFactory;
+  }
+
+}
+
+public class WebDAVClient {
+
+    def log;
+
+    private String user;
+    private String password;
+    private Object sardine;
+
+    public WebDAVClient(logger) {
+    	this.log = logger;
+    }
+
+    public void login(String user, String password) {
+        log.info("[WEBDAV] login as '"+user+"'.");
+        this.user = user;
+        this.password = password;
+
+        this.sardine = new SardineTrusted(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 = new SardineTrusted();
+    }
+
+    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;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/deploy_commons.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/deploy_commons.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/deploy_commons.groovy	(revision 46118)
@@ -0,0 +1,34 @@
+
+import Helper
+
+def deployInstallers(helper) {
+
+        WebDAVClient session = helper.getWebDAVClient(log);
+        targetfolder = helper.getAddOnRepoURL()
+        sourcefolder  = new File(project.basedir, "target").getAbsolutePath()
+
+        session.makedirs(targetfolder);
+        session.makedirs(targetfolder+"/misc");
+
+        fname = helper.getInstallerName("-all-all-pool.zip")
+        session.put(
+	  sourcefolder + "/" + fname,
+	  targetfolder+"/misc/" + fname
+	)
+        fname = helper.getInstallerName("-all-all.gvspks")
+        session.put(
+	  sourcefolder + "/" + fname,
+	  targetfolder+"/misc/" + fname
+	);
+}
+
+
+def main() {
+    if( project.properties["deploy-installers"] != null ) {
+	def helper = new Helper(log,project)
+        deployInstallers(helper)
+    }
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/prepare_commons.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/prepare_commons.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/src/main/scripts/prepare_commons.groovy	(revision 46118)
@@ -0,0 +1,56 @@
+
+import Helper
+
+def main() {
+    def helper = new Helper(log,project)
+
+    log.info("Base path=" + helper.getProjectBaseFolder().getAbsolutePath())
+
+    helper.getInstallationFolder().mkdirs()
+    helper.getProjectTargetFolder("pool.d","pool").mkdirs()
+
+    log.info("Getting a local copy of product folder...")
+    helper.copyDirToDir(
+      helper.getProductFolderPath(),
+      helper.getInstallationFolder()
+    )
+
+    log.info("Populate the pool folder...")
+    helper.moveDirToDir(
+      helper.getInstallationFolder("install"),
+      helper.getProjectTargetFolder("pool.d", "pool" )
+    )
+    helper.getInstallationFolder("install").mkdirs()
+    helper.copyFileToDir(
+      helper.getProjectTargetFolder("pool.d", "pool", "README.txt" ),
+      helper.getInstallationFolder("install")
+    )
+
+    log.info("Preparing basic package set (gvspks)...")
+    gvspks_folder = helper.getProjectTargetFolder("gvspks")
+    gvspks_folder.mkdirs()
+    filenames = new FileNameFinder().getFileNames( helper.getProjectTargetFolder("pool.d").getAbsolutePath(),"**/*.gvspkg")
+    for( filename in filenames ) {
+      helper.copyFileToDir(filename, gvspks_folder)
+    }
+    helper.copyFileToDir(
+      helper.getProjectBaseFolder("src","main","config","defaultPackages"),
+      gvspks_folder
+    )
+
+    log.info("Building pool zip...")
+    source  = helper.getProjectTargetFolder("pool.d")
+    target  = new File(helper.getProjectTargetFolder(),helper.getInstallerName("-all-all-pool.zip"))
+    helper.ant.zip(destfile: target.getAbsolutePath(), basedir: source.getAbsolutePath())
+
+    log.info("Building basic package-set (gvspks)...")
+    source  = helper.getProjectTargetFolder("gvspks")
+    target  = new File(helper.getProjectTargetFolder(),helper.getInstallerName("-all-all.gvspks"))
+    helper.ant.zip(destfile: target.getAbsolutePath(), basedir: source.getAbsolutePath())
+
+    log.info("Found andami updater :"+helper.getAndamiUpdaterJarName())
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/shortcut_spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/shortcut_spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/shortcut_spec.xml	(revision 46118)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<shortcuts>
+    <defaultCurrentUser/>
+    <programGroup defaultName="gvSIG" location="applications"/>
+
+    <shortcut
+            name="gvSIG desktop"
+            type="application"
+            programGroup="yes"
+            desktop="yes"
+            applications="no"
+            startMenu="yes"
+            startup="no"
+            target="$INSTALL_PATH\gvsig-desktop.exe"
+            commandLine=""
+            description=""
+	    iconFile="$INSTALL_PATH\gvSIG.ico"
+	    iconIndex="0"
+	    workingDirectory="$INSTALL_PATH"
+	    createForAll="yes"
+    >
+    <createForPack name="gvSIG desktop commons" />
+  </shortcut>
+</shortcuts>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/install.xml	(revision 46118)
@@ -0,0 +1,51 @@
+
+<izpack:installation version="5.0"
+                     xmlns:izpack="http://izpack.org/schema/installation"
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://izpack.org/schema/installation http://izpack.org/schema/5.0/izpack-installation-5.0.xsd">
+
+  <info>
+    //#include "../../../../src/main/izpack/include/info_elements.xml"
+    <run-privileged uninstaller="yes"/>
+  </info>
+
+  //#include "../../../../src/main/izpack/include/langpacks.xml"
+
+  <variables>
+    //#include "../../../../src/main/izpack/include/variables_elements.xml"
+  </variables>
+
+  //#include "../../../../src/main/izpack/include/guiprefs.xml"
+
+  <resources>
+    //#include "../../../../src/main/izpack/include/resources_elements.xml"
+  </resources>
+
+  //#include "../../../../src/main/izpack/include/jars.xml"
+
+  //#include "../../../../src/main/izpack/include/panels.xml"
+
+  <packs>
+    //#include "../../../../src/main/izpack/include/pack_all_platforms.xml"
+
+    <pack name="gvSIG desktop commons windows" required="yes">
+      <description>Core common files for Windows platforms</description>
+      <file src="${product.folder}/gvsig-package-installer.cmd" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-desktop.cmd" targetdir="$INSTALL_PATH"/>
+      <file src="${product.folder}/gvsig-desktop.vbs" targetdir="$INSTALL_PATH"/>
+      <file src="busybox.exe" targetdir="$INSTALL_PATH"/>
+      <file src="cygcheck.exe" targetdir="$INSTALL_PATH"/>
+      <file src="gvsig-desktop.exe" targetdir="$INSTALL_PATH"/>
+      <file src="gvsig-desktop.au3" targetdir="$INSTALL_PATH"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-package-installer.cmd"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-desktop.cmd"/>
+      <parsable targetfile="$INSTALL_PATH/gvsig-desktop.vbs"/>
+    </pack>
+
+  </packs>
+
+  <natives>
+      <native type="izpack" name="ShellLink.dll"/>
+  </natives>
+
+</izpack:installation>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/ProcessPanel.Spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/ProcessPanel.Spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/izpack/ProcessPanel.Spec.xml	(revision 46118)
@@ -0,0 +1,12 @@
+
+<processing>
+
+  //#include "../../../../src/main/izpack/include/job_extract_packages.xml"
+
+  <job name="Running addon manager">
+    <executefile name="$INSTALL_PATH/gvsig-package-installer.cmd"/>
+  </job>
+  <onFail previous="true" next="false" />
+  <onSuccess previous="true" next="true"/>
+</processing>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/deploy_win.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/deploy_win.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/deploy_win.groovy	(revision 46118)
@@ -0,0 +1,37 @@
+
+
+import Helper
+
+
+def deployInstallers(helper) {
+
+  WebDAVClient session = helper.getWebDAVClient(log);
+  targetfolder = helper.getAddOnRepoURL()
+  sourcefolder  = new File(project.basedir, "target").getAbsolutePath()
+
+  session.makedirs(targetfolder);
+
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.jar")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.zip")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+}
+
+
+def main() {
+    if( project.properties["deploy-installers"] != null ) {
+	def helper = new Helper(log,project)
+
+        deployInstallers(helper)
+    }
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/prepare_win.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/prepare_win.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/src/main/scripts/prepare_win.groovy	(revision 46118)
@@ -0,0 +1,52 @@
+
+import Helper
+
+def main() {
+    def helper = new Helper(log,project)
+
+    log.info("Base path=" + helper.getProjectBaseFolder().getAbsolutePath())
+
+    helper.readPackageInfo()
+
+    target = new File(project.basedir, "target")
+
+    log.info("Copy common install files")
+    helper.copy_common_install_files(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.extractpackages.jar")
+    helper.copy_extractpackages_jar(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.copyjre.jar")
+    helper.copy_copyjre_jar(target)
+
+    log.info("Download busybox.exe")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x86/busybox.exe",
+      dest: new File(target,"busybox.exe").getAbsolutePath()
+    )
+
+    log.info("Download cygcheck.exe ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x86/cygcheck.exe",
+      dest: new File(target,"cygcheck.exe").getAbsolutePath()
+    )
+
+    log.info("Download gvsig-desktop.exe ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x86/gvsig-desktop.exe",
+      dest: new File(target,"gvsig-desktop.exe").getAbsolutePath()
+    )
+
+     log.info("Download gvsig-desktop.au3 ")
+    helper.ant.get(
+      src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/x86/gvsig-desktop.au3",
+      dest: new File(target,"gvsig-desktop.au3").getAbsolutePath()
+    )
+
+    helper.prepare_portable()
+    helper.pack_portable()
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86/pom.xml	(revision 46118)
@@ -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.desktop.installer.izpack.win.x86</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+    <installer_architecture>x86</installer_architecture>
+    <installer_os>win</installer_os>
+  </properties>
+
+  <build>
+    <plugins>
+
+      <plugin>
+	  <groupId>com.igormaznitsa</groupId>
+	  <artifactId>jcp</artifactId>
+	  <version>6.0.0</version>
+	  <!--
+	  https://github.com/raydac/java-comment-preprocessor/blob/master/src/main/java/com/igormaznitsa/jcp/maven/PreprocessorMojo.java
+	  -->
+	  <executions>
+	      <execution>
+		  <id>preprocess_installer_files</id>
+		  <phase>generate-sources</phase>
+		  <goals>
+		      <goal>preprocess</goal>
+		  </goals>
+		  <configuration>
+		    <keepLines>false</keepLines>
+		    <removeComments>true</removeComments>
+
+		    <excluded>txt</excluded>
+		    <processing>xml</processing>
+
+		    <source>${project.basedir}/src/main/izpack</source>
+		    <destination>target</destination>
+		  </configuration>
+	      </execution>
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>prepare-lin-installer</id>
+	    <phase>generate-sources</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/prepare_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-lin-installer</id>
+	    <phase>install</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/deploy_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.izpack</groupId>
+	<artifactId>izpack-maven-plugin</artifactId>
+	<version>${izpack.version}</version>
+	<executions>
+	    <execution>
+	      <phase>package</phase>
+	      <goals><goal>izpack</goal></goals>
+	      <configuration>
+		  <baseDir>${project.basedir}/target</baseDir>
+ 		  <finalName>gvSIG-desktop-${package.info.version}-${package.info.state}-${installer_os}-${installer_architecture}-online</finalName>
+		  <installFile>${project.basedir}/target/install.xml</installFile>
+	      </configuration>
+	    </execution>
+	</executions>
+	<dependencies>
+	    <dependency>
+	      <groupId>org.codehaus.izpack</groupId>
+	      <artifactId>izpack-panel</artifactId>
+	      <version>${izpack.version}</version>
+	    </dependency>
+	  </dependencies>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.win.x86
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/pom.xml	(revision 46118)
@@ -0,0 +1,109 @@
+<?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.installer.izpack</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+    <izpack.version>5.1.1</izpack.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+
+      <dependency>
+	  <groupId>org.codehaus.izpack</groupId>
+	  <artifactId>izpack-core</artifactId>
+	  <version>${izpack.version}</version>
+      </dependency>
+
+      <dependency>
+	  <groupId>org.codehaus.izpack</groupId>
+	  <artifactId>izpack-panel</artifactId>
+	  <version>${izpack.version}</version>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+  <build>
+    <plugins>
+
+      <plugin>
+	<groupId>org.codehaus.mojo</groupId>
+	<artifactId>properties-maven-plugin</artifactId>
+	<executions>
+	    <execution>
+		<phase>generate-resources</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>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>generate-resources</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/prepare_commons.groovy</source>
+	    </configuration>
+	  </execution>
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>install</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/deploy_commons.groovy</source>
+	    </configuration>
+	  </execution>
+	</executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+  <modules>
+    <module>org.gvsig.desktop.installer.izpack.extractpackages</module>
+    <module>org.gvsig.desktop.installer.izpack.copyjre</module>
+    <module>org.gvsig.desktop.installer.izpack.lin.x86</module>
+    <module>org.gvsig.desktop.installer.izpack.lin.x86_64</module>
+    <module>org.gvsig.desktop.installer.izpack.win.x86</module>
+    <module>org.gvsig.desktop.installer.izpack.win.x86_64</module>
+    <!--
+    <module>org.gvsig.desktop.installer.izpack.mac</module>
+    -->
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/pom.xml
___________________________________________________________________
Added: svn:executable
   + *

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/deploy_lin.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/deploy_lin.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/deploy_lin.groovy	(revision 46118)
@@ -0,0 +1,37 @@
+
+
+import Helper
+
+
+def deployInstallers(helper) {
+
+  WebDAVClient session = helper.getWebDAVClient(log);
+  targetfolder = helper.getAddOnRepoURL()
+  sourcefolder  = new File(project.basedir, "target").getAbsolutePath()
+
+  session.makedirs(targetfolder);
+
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.jar")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+  fname = helper.getInstallerName("-"+project.properties["installer_os"]+"-"+project.properties["installer_architecture"]+"-online.zip")
+  session.put(
+    sourcefolder + "/" + fname,
+    targetfolder+"/" + fname
+  )
+}
+
+
+def main() {
+    if( project.properties["deploy-installers"] != null ) {
+	def helper = new Helper(log,project)
+
+        deployInstallers(helper)
+    }
+
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/prepare_lin.groovy
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/prepare_lin.groovy	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/scripts/prepare_lin.groovy	(revision 46118)
@@ -0,0 +1,27 @@
+
+import Helper
+
+def main() {
+    def helper = new Helper(log,project)
+
+    log.info("Base path=" + helper.getProjectBaseFolder().getAbsolutePath())
+
+    helper.readPackageInfo()
+
+    target = new File(project.basedir, "target")
+
+    log.info("Copy common install files")
+    helper.copy_common_install_files(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.extractpackages.jar")
+    helper.copy_extractpackages_jar(target)
+
+    log.info("Copy org.gvsig.desktop.installer.izpack.copyjre.jar")
+    helper.copy_copyjre_jar(target)
+
+    helper.prepare_portable()
+    helper.pack_portable()
+}
+
+main()
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/shortcut_spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/shortcut_spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/shortcut_spec.xml	(revision 46118)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<shortcuts>
+    <defaultCurrentUser/>
+    <programGroup defaultName="gvSIG" location="applications"/>
+
+    <shortcut
+            name="gvSIG desktop"
+            type="Application"
+            programGroup="yes"
+            desktop="yes"
+            applications="no"
+            startMenu="yes"
+            startup="no"
+            target="$INSTALL_PATH/gvSIG.sh"
+	    workingDirectory="$INSTALL_PATH"
+            commandLine=""
+            description=""
+	    iconFile="$INSTALL_PATH/gvsig-icon48x48.png"
+	    iconIndex="0"
+	    createForAll="no"
+            encoding="UTF-8"
+	    terminal="false"
+	    KdeSubstUID="false"
+	    initialState="normal"
+    >
+    <createForPack name="gvSIG desktop commons" />
+  </shortcut>
+</shortcuts>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/install.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/install.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/install.xml	(revision 46118)
@@ -0,0 +1,14 @@
+ 
+<izpack:installation version="5.0"
+                     xmlns:izpack="http://izpack.org/schema/installation"
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://izpack.org/schema/installation http://izpack.org/schema/5.0/izpack-installation-5.0.xsd">
+ 
+  //#include "../../../../src/main/izpack/include/all.xml"
+  
+  <packs>
+    //#include "../../../../src/main/izpack/include/pack_all_platforms.xml"
+    
+  </packs>
+  
+</izpack:installation>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/ProcessPanel.Spec.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/ProcessPanel.Spec.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/src/main/izpack/ProcessPanel.Spec.xml	(revision 46118)
@@ -0,0 +1,15 @@
+
+<processing>
+
+  //#include "../../../../src/main/izpack/include/job_extract_packages.xml"
+
+  <job name="Running addon manager">
+    <executefile name="$INSTALL_PATH/gvSIG.sh">
+      <arg>--install</arg>
+    </executefile>
+  </job>
+
+  <onFail previous="true" next="false" />
+  <onSuccess previous="true" next="true"/>
+</processing>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86/pom.xml	(revision 46118)
@@ -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.desktop.installer.izpack.lin.x86</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.installer.izpack</artifactId>
+    <version>1.1.0</version>
+  </parent>
+
+  <properties>
+    <installer_architecture>x86</installer_architecture>
+    <installer_os>lin</installer_os>
+  </properties>
+
+  <build>
+    <plugins>
+
+      <plugin>
+	  <groupId>com.igormaznitsa</groupId>
+	  <artifactId>jcp</artifactId>
+	  <version>6.0.0</version>
+	  <!--
+	  https://github.com/raydac/java-comment-preprocessor/blob/master/src/main/java/com/igormaznitsa/jcp/maven/PreprocessorMojo.java
+	  -->
+	  <executions>
+	      <execution>
+		  <id>preprocess_installer_files</id>
+		  <phase>generate-sources</phase>
+		  <goals>
+		      <goal>preprocess</goal>
+		  </goals>
+		  <configuration>
+		    <keepLines>false</keepLines>
+		    <removeComments>true</removeComments>
+
+		    <excluded>txt</excluded>
+		    <processing>xml</processing>
+
+		    <source>${project.basedir}/src/main/izpack</source>
+		    <destination>target</destination>
+		  </configuration>
+	      </execution>
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.gmaven</groupId>
+	<artifactId>gmaven-plugin</artifactId>
+	<executions>
+	  <execution>
+	    <id>prepare-gvsig-product-and-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-gvsig-packages</id>
+	    <phase>None</phase>
+	  </execution>
+
+	  <execution>
+	    <id>prepare-lin-installer</id>
+	    <phase>generate-sources</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/prepare_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  <execution>
+	    <id>deploy-lin-installer</id>
+	    <phase>install</phase>
+	    <goals>
+		<goal>execute</goal>
+	    </goals>
+	    <configuration>
+	      <scriptpath>
+		<path>${project.basedir}/../src/main/scripts</path>
+	      </scriptpath>
+	      <source>${project.basedir}/src/main/scripts/deploy_${installer_os}.groovy</source>
+	    </configuration>
+	  </execution>
+
+	  </executions>
+      </plugin>
+
+      <plugin>
+	<groupId>org.codehaus.izpack</groupId>
+	<artifactId>izpack-maven-plugin</artifactId>
+	<version>${izpack.version}</version>
+	<executions>
+	    <execution>
+	      <phase>package</phase>
+	      <goals><goal>izpack</goal></goals>
+	      <configuration>
+		  <baseDir>${project.basedir}/target</baseDir>
+ 		  <finalName>gvSIG-desktop-${package.info.version}-${package.info.state}-${installer_os}-${installer_architecture}-online</finalName>
+		  <installFile>${project.basedir}/target/install.xml</installFile>
+	      </configuration>
+	    </execution>
+	</executions>
+	<dependencies>
+	    <dependency>
+	      <groupId>org.codehaus.izpack</groupId>
+	      <artifactId>izpack-panel</artifactId>
+	      <version>${izpack.version}</version>
+	    </dependency>
+	  </dependencies>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack/org.gvsig.desktop.installer.izpack.lin.x86
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/org.gvsig.desktop.installer.izpack
___________________________________________________________________
Added: svn:ignore
   + target
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/pom.xml	(revision 46118)
@@ -0,0 +1,45 @@
+<?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.1.0</version>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop</artifactId>
+      <version>2.0.327-SNAPSHOT</version>
+  </parent>
+
+
+    <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>
+    <properties>
+        <localRepository>${user.home}/.m2/repository</localRepository>
+    </properties>
+
+  <modules>
+    <!--
+    <module>org.gvsig.desktop.installer.installjammer</module>
+    -->
+    <module>org.gvsig.desktop.installer.izpack</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:executable
   + *


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.installer
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**
.pom.xml.kate-swp
.directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=3077
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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>org.gvsig:org.gvsig.fmap.dal.file.jpg</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/java/org/gvsig/jpg/app/JpgExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/java/org/gvsig/jpg/app/JpgExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/java/org/gvsig/jpg/app/JpgExtension.java	(revision 46118)
@@ -0,0 +1,36 @@
+
+package org.gvsig.jpg.app;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorInterpretation;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorTable;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetLegend;
+import org.gvsig.fmap.dal.file.jpg.JpgLibrary;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public class JpgExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        DynClass metadataDefinition = JpgLibrary.getMatadataDefinition();
+        ImageIOGetLegend.register(metadataDefinition);
+        ImageIOGetColorInterpretation.register(metadataDefinition); 
+        ImageIOGetColorTable.register(metadataDefinition); 
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.jpg.app.JpgExtension"
+      description=""
+      active="true">
+    </extension>
+  </extensions>
+
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,40 @@
+<?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.jpg.app.mainplugin</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>JPG file format support</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.jpg.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.jpg</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.raster.legend.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <gvsig.package.info.name>Formats: JPG file format support</gvsig.package.info.name>
+        <gvsig.package.info.categories>Formats,Raster</gvsig.package.info.categories>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/org.gvsig.jpg.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jpg.app/pom.xml	(revision 46118)
@@ -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.jpg.app</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.344</version>
+    </parent>
+  
+    <modules>
+        <module>org.gvsig.jpg.app.mainplugin</module>
+    </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:15 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/README.txt	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonValue;
+import javax.swing.JOptionPane;
+import javax.swing.event.TableModelListener;
+import org.apache.bcel.generic.DALOAD;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.ListUtils;
+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.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.EditingNotification;
+import org.gvsig.fmap.dal.EditingNotificationManager;
+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.FeatureStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.feature.exception.StoreUpdateFeatureTypeException;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+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.json.Json;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Feature Table Operations.
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class TableOperations {
+
+    private static final Logger logger = LoggerFactory.getLogger(TableOperations.class);
+
+    public static final int MAX_FIELD_LENGTH = 254;
+    private static TableOperations fto = null;
+
+    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 {
+        copy();
+    }
+
+    public boolean hasSelection() {
+        return !ToolsSwingLocator.getToolsSwingManager().isClipboardEmpty();
+    }
+
+    public void pasteFeatures() throws DataException {
+        try {
+            if( featureStore==null ) {
+                return;
+            }
+            List<EditableFeature> features = DALLocator.getDataManager().getFeaturesFromClipboard(
+                    featureStore,
+                    null
+            );
+            if( CollectionUtils.isEmpty(features) ) {
+                return;
+            }
+            for (EditableFeature feature : features) {
+                if (!insertFeature(feature) ) {
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            logger.warn("Can't paste from clipboard.", e);
+        }
+
+    }
+
+    private void copy() throws DataException {
+        DALLocator.getDataManager().putFeaturesInClipboard(featureStore.getFeatureSelection());
+    }
+
+    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<>();
+
+        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 = DALSwingLocator.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 = DALSwingLocator.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 = DALSwingLocator.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 (FeatureAttributeDescriptor selected : selecteds) {
+            eft.remove(selected.getName());
+        }
+        featureStore.update(eft);
+    }
+
+    public void insertAttributes(FeatureTable table) throws DataException {
+
+        EditableFeatureType eft = featureStore.getDefaultFeatureType().getEditable();
+
+        List<String> tmpfnames = new ArrayList<>();
+        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(featureStore);
+        panelNewField.setCurrentFieldNames(tmpfnames.toArray(new String[0]));
+        DataManager dataManager = DALLocator.getDataManager();
+        FeatureStoreProviderFactory factory
+                = (FeatureStoreProviderFactory) dataManager.
+                        getStoreProviderFactory(featureStore.getProviderName());
+        panelNewField.setMaxAttributeNameSize(factory.getMaxAttributeNameSize());
+        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;
+            }
+            FeatureAttributeDescriptor attr = _ft.getAttributeDescriptor(newName);
+            // To be able to change the name of the attribute when it is changed
+            // from uppercase to lowercase or vice versa
+            if (attr != null && attr.getName().equals(newName)) {
+                NotificationManager.showMessageInfo(
+                        Messages.getText("field_already_exists"), null);
+                return;
+            }
+
+            renameAttribute(featureStore, selecteds[i].getName(), newName);
+        }
+    }
+
+    /**
+     * 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
+     * @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;
+        }
+
+        @Override
+        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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,458 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+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.AbstractStoresRepository;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+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.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.i18n.I18nManager;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.util.Invocable;
+import org.gvsig.tools.util.MappedIterator;
+import org.gvsig.tools.util.UnmodifiableBasicSet;
+
+/**
+ * Factory of Table.
+ * 
+ * @author gvSIG Tem
+ * 
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class TableManager extends AbstractDocumentManager {
+    
+    private static class TableDocumentStoresRepository extends AbstractStoresRepository {
+
+        public TableDocumentStoresRepository(String name, String label) {
+            super(name, label);
+        }
+
+        @Override
+        protected DataStoreParameters getMyParameters(String name) {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            TableDocument tableDoc = (TableDocument) project.getDocument(name, TYPENAME);
+            if( tableDoc==null || tableDoc.getFeatureStore()==null) {
+                return null;
+            }
+            return tableDoc.getFeatureStore().getParameters();
+        }
+
+        @Override
+        protected boolean isEmptyMyRepository() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            return project.getDocuments(TableManager.TYPENAME).isEmpty();
+        }
+
+        @Override
+        protected int getMySize() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            int sz = project.getDocuments(TableManager.TYPENAME).size();
+            return sz;
+        }
+
+        @Override
+        protected UnmodifiableBasicSet<String> getMyKeySet() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            final List<Document> docs = project.getDocuments(TableManager.TYPENAME);
+            if( docs==null ) {
+                return UnmodifiableBasicSet.EMPTY_UNMODIFIABLEBASICSET;
+            }
+            UnmodifiableBasicSet<String> x = new UnmodifiableBasicSet<String>() {
+                @Override
+                public boolean isEmpty() {
+                    return docs.isEmpty();
+                }
+
+                @Override
+                public int size() {
+                    return docs.size();
+                }
+
+                @Override
+                public Iterator<String> iterator() {
+                    return new MappedIterator<>(docs.iterator(), (Document t) -> {
+                        if( t==null ) {
+                            return null;
+                        }
+                        return ((TableDocument)t).getName();
+                    });
+                }
+            };
+            return x;
+        }
+
+        
+        @Override
+        public Iterator<DataStoreParameters> iterator() {
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            List<Document> docs = project.getDocuments(TableManager.TYPENAME);
+            if( docs==null ) {
+                return Collections.EMPTY_LIST.iterator();
+            }
+            return new MappedIterator<>(docs.iterator(), (Document t) -> {
+                if( t==null || ((TableDocument)t).getFeatureStore()==null ) {
+                    return null;
+                }
+                return ((TableDocument)t).getFeatureStore().getParameters();
+            });
+        }
+        
+        
+    }
+    
+    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;
+
+    @Override
+    public ImageIcon getIcon() {
+    	return IconThemeHelper.getImageIcon("document-table-icon");
+    }
+
+    @Override
+    public ImageIcon getIconSelected() {
+        return IconThemeHelper.getImageIcon("document-table-icon-sel");
+    }
+
+    @Override
+    public String getTitle() {
+        return PluginServices.getText(this, "Tabla");
+    }
+
+    @Override
+    public String getTypeName() {
+        return TYPENAME;
+    }
+
+    @Override
+    public int getPriority() {
+        return 1;
+    }
+
+    @Override
+    public Iterator<? extends Document> createDocumentsByUser() {
+        return this.createDocumentsByUser(null);
+    }
+    
+    @Override
+    public Iterator<? extends Document> createDocumentsByUser(Invocable whenDocumentsLoaded) {
+        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();
+                panel.initWizard();
+                fopen.addWizardTab(panel.getTabName(), panel);
+            }
+            PluginServices.getMDIManager().addWindow(fopen);
+            if (fopen.isAccepted()) {
+                WizardPanel selectedPanel = (WizardPanel) fopen.getSelectedTab();
+                if( whenDocumentsLoaded==null ) {
+                    List<TableDocument> docs = (List) selectedPanel.executeWizard();
+                    this.checkDocuments(docs);
+                    return docs.iterator();
+                }
+                Thread task = new Thread(() -> {
+                    List<TableDocument> docs = (List) selectedPanel.executeWizard();
+                    checkDocuments(docs);
+                    whenDocumentsLoaded.call(docs.iterator());
+                }, "DocumentTableLoader");
+                task.start();
+                return Collections.EMPTY_LIST.iterator();
+            }
+        } catch (Exception e) {
+            NotificationManager.addError(e);
+        } finally {
+            if (fopen != null) {
+                fopen.dispose();
+                fopen = null;
+            }
+        }
+        return null;
+    }
+    
+    private void checkDocuments(List<TableDocument> docs) {
+        if( docs==null ) {
+            return;
+        }
+        for (TableDocument doc : docs) {
+            try {
+                FeatureStore store = ((TableDocument)doc).getDataStore();
+                FeatureType type = store.getDefaultFeatureType();
+                if( ! type.supportReferences() ) {
+                    I18nManager i18n = ToolsLocator.getI18nManager();
+                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                    dialogs.messageDialog(
+                            "\""+ doc.getName() + "\"\n"+
+                            i18n.getTranslation("_The_table_has_no_primary_key_or_OID") +"\n" +
+                                   i18n.getTranslation("_Many_features_selection_deletion_modification_will_not_be_available_as_they_require_it_for_proper_operation"),
+                            null, 
+                            i18n.getTranslation("_Warning"),
+                            JOptionPane.WARNING_MESSAGE, 
+                            "TableDoNotSupportReferences"
+                   );
+                }
+            } catch (Exception ex) {
+
+            }
+        }        
+    }
+
+    @Override
+    public AbstractDocument createDocumentByUser() {
+        return (AbstractDocument) createDocumentsByUser().next();
+    }
+    
+    /**
+     * Registers in the points of extension the Factory with alias.
+     * 
+     */
+    public static void register() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        
+        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);          
+            factory.persistenceDefinition.addDynFieldMap("patterns")
+                .setClassOfItems(String.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());
+
+        DataManager dataManager = DALLocator.getDataManager();
+        dataManager.getStoresRepository().addRepository(
+                new TableDocumentStoresRepository(
+                    "PROJECT_TABLES",
+                    i18n.getTranslation("_Project_tables")
+            )
+        );
+    }
+
+    /**
+     * Create a new table document.
+     * 
+     * @return TableDocument.
+     */
+    @Override
+    public AbstractDocument createDocument() {
+        AbstractDocument doc = new TableDocument(this);
+        if( this.notifyObservers(NOTIFY_AFTER_CREATEDOCUMENT,doc).isCanceled() ) {
+            return null;
+        }
+    	return doc;        
+    }
+
+    @Override
+    public Class<? extends IDocumentWindow> getMainWindowClass() {
+        return FeatureTableDocumentPanel.class;
+    }
+
+    @Override
+    public IWindow getMainWindow(Document doc, WindowLayout layout) {
+       IDocumentWindow win = (IDocumentWindow) super.getMainWindow(doc, layout);
+        if (win == null) {
+            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;
+    }
+
+    @Override
+    public IWindow getPropertiesWindow(Document doc) {
+        IWindow win = super.getPropertiesWindow(doc);
+        if( win == null ) {
+            win = new TableProperties((TableDocument) doc);
+        }
+        if( this.notifyObservers(NOTIFY_AFTER_GETPROPERTIESWINDOW,win).isCanceled() ) {
+            return null;
+        }
+        return win;        
+    }
+
+    @Override
+    protected Class<? extends Document> getDocumentClass() {
+        return TableDocument.class;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/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.xml	(revision 46118)
@@ -0,0 +1,981 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/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.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.1),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.9),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MIN(12DLU;DEFAULT):GROW(1.0),FILL:4DLU: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">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">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="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="name">lblName</at>
+            <at name="width">86</at>
+            <at name="text">Name</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">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">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="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="name">lblDate</at>
+            <at name="width">86</at>
+            <at name="text">Date</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">6</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">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="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="name">lblOwner</at>
+            <at name="width">86</at>
+            <at name="text">Owner</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">8</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">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="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="name">lblLocaleOfData</at>
+            <at name="width">86</at>
+            <at name="text">Locale</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">10</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">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="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="name">lblDataSource</at>
+            <at name="width">86</at>
+            <at name="text">Data source</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">12</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">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="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="name">lblComments</at>
+            <at name="width">86</at>
+            <at name="text">Coments</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">16</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">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="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="name">lblColumns</at>
+            <at name="width">86</at>
+            <at name="text">Columns</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">15</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">18</at>
+           <at name="colspan">3</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.JPanel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JPanel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="name">pnlColumns</at>
+            <at name="width">803</at>
+            <at name="height">163</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">4</at>
+           <at name="row">2</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.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="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="name">txtName</at>
+            <at name="width">704</at>
+            <at name="height">19</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">4</at>
+           <at name="row">4</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.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="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="name">txtDate</at>
+            <at name="width">704</at>
+            <at name="height">19</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">4</at>
+           <at name="row">6</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.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="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="name">txtOwner</at>
+            <at name="width">704</at>
+            <at name="height">19</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">4</at>
+           <at name="row">8</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.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="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="name">cboLocaleOfData</at>
+            <at name="width">704</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">24</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">4</at>
+           <at name="row">10</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.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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtDataSource</at>
+            <at name="width">704</at>
+            <at name="height">19</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">3</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.JTextArea</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextArea</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">txtComments</at>
+            <at name="width">800</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="height">94</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="19">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -0,0 +1,202 @@
+package org.gvsig.app.project.documents.table.gui;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+
+public class GeneralTablePropertiesPageLayout extends JPanel
+{
+   JLabel lblName = new JLabel();
+   JLabel lblDate = new JLabel();
+   JLabel lblOwner = new JLabel();
+   JLabel lblLocaleOfData = new JLabel();
+   JLabel lblDataSource = new JLabel();
+   JLabel lblComments = new JLabel();
+   JLabel lblColumns = new JLabel();
+   JPanel pnlColumns = new JPanel();
+   JTextField txtName = new JTextField();
+   JTextField txtDate = new JTextField();
+   JTextField txtOwner = new JTextField();
+   JComboBox cboLocaleOfData = new JComboBox();
+   JTextField txtDataSource = new JTextField();
+   JTextArea txtComments = new JTextArea();
+
+   /**
+    * Default constructor
+    */
+   public GeneralTablePropertiesPageLayout()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MIN(12DLU;DEFAULT):GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.1),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(0.9),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblName.setName("lblName");
+      lblName.setText("Name");
+      jpanel1.add(lblName,cc.xy(2,2));
+
+      lblDate.setName("lblDate");
+      lblDate.setText("Date");
+      jpanel1.add(lblDate,cc.xy(2,4));
+
+      lblOwner.setName("lblOwner");
+      lblOwner.setText("Owner");
+      jpanel1.add(lblOwner,cc.xy(2,6));
+
+      lblLocaleOfData.setName("lblLocaleOfData");
+      lblLocaleOfData.setText("Locale");
+      jpanel1.add(lblLocaleOfData,cc.xy(2,8));
+
+      lblDataSource.setName("lblDataSource");
+      lblDataSource.setText("Data source");
+      jpanel1.add(lblDataSource,cc.xy(2,10));
+
+      lblComments.setName("lblComments");
+      lblComments.setText("Coments");
+      jpanel1.add(lblComments,cc.xy(2,12));
+
+      lblColumns.setName("lblColumns");
+      lblColumns.setText("Columns");
+      jpanel1.add(lblColumns,cc.xy(2,16));
+
+      pnlColumns.setName("pnlColumns");
+      jpanel1.add(pnlColumns,cc.xywh(2,18,3,1));
+
+      txtName.setName("txtName");
+      jpanel1.add(txtName,cc.xy(4,2));
+
+      txtDate.setName("txtDate");
+      jpanel1.add(txtDate,cc.xy(4,4));
+
+      txtOwner.setName("txtOwner");
+      jpanel1.add(txtOwner,cc.xy(4,6));
+
+      cboLocaleOfData.setName("cboLocaleOfData");
+      jpanel1.add(cboLocaleOfData,cc.xy(4,8));
+
+      txtDataSource.setBackground(new Color(236,233,216));
+      txtDataSource.setEditable(false);
+      txtDataSource.setName("txtDataSource");
+      jpanel1.add(txtDataSource,cc.xy(4,10));
+
+      txtComments.setName("txtComments");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtComments);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,14,3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,192 @@
+package org.gvsig.app.project.documents.table.gui;
+
+import java.awt.BorderLayout;
+import java.util.Locale;
+import java.util.Set;
+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.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GeneralTablePropertiesPage extends GeneralTablePropertiesPageLayout implements PropertiesPage {
+
+    private static final Logger logger = LoggerFactory.getLogger(GeneralTablePropertiesPage.class);
+    
+    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();
+        try {
+            FeatureType featureType = tableDocument.getFeatureStore().getDefaultFeatureType();
+            for( FeatureAttributeDescriptor descriptor : featureType) {
+                this.columnsConfigurationPanel.setFormattingPattern(
+                    descriptor.getName(), 
+                    tableDocument.getFormattingPattern(descriptor.getName())
+                );
+            }
+        } catch (DataException ex) {
+            logger.warn("Can't initialize columns formating patters",ex);
+        }
+    }
+
+    @Override
+    public void setData(Object data) {
+
+    }
+    
+    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));
+        }
+        if( tableDocument.getFeatureStore().getParameters() instanceof FilesystemStoreParameters ) {
+            FilesystemStoreParameters params = (FilesystemStoreParameters) tableDocument.getFeatureStore().getParameters();
+            this.txtDataSource.setText(params.getFile().getAbsolutePath());
+        } else {
+            this.txtDataSource.setText(tableDocument.getFeatureStore().getFullName());
+        }
+        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"));
+        lblDataSource.setText(i18nManager.getTranslation("Data_source"));
+        
+    }
+
+    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();
+    }
+
+    @Override
+    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();
+        try {
+            FeatureType featureType = tableDocument.getFeatureStore().getDefaultFeatureType();
+            for( FeatureAttributeDescriptor descriptor : featureType) {
+                tableDocument.setFormattingPattern(
+                    descriptor.getName(), 
+                    this.columnsConfigurationPanel.getFormattingPattern(descriptor.getName())
+                );
+            }
+        } catch (DataException ex) {
+            logger.warn("Can't set columns formating patters in the table document",ex);
+        }
+        
+        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.344/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.344/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.344/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 46118)
@@ -0,0 +1,659 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.text.ParseException;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+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.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+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.expressionevaluator.FeatureAttributeEmulatorExpression;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.FeatureStore;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * To create new FeatureAttributeDescriptor from the interface.
+ *
+ * @author Vicente Caballero Navarro
+ *
+ */
+public class CreateNewAttributePanel extends JPanel implements IWindow, ActionListener {
+
+    /**
+	 *
+	 */
+    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 JLabel jLblExpression = null;
+    private JTextField jTxtExpression = null;
+    private JRadioButton jRdbFieldReal = null;
+    private JRadioButton jRdbFieldVirtual = null;    
+    private JButton jBtnExpression = null;
+    private WindowInfo viewInfo;
+    private JPanel jPanel = null;
+    private AcceptCancelPanel jPanelOkCancel = null;
+    private JPanel jPnlFields = null;
+    private int maxAttributeNameSize=-1;
+    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;
+    private ExpressionPickerController expressionPicker;
+    private FeatureStore store;
+
+//    public CreateNewAttributePanel() {
+//        super();
+//        initialize();
+//    }
+
+    public CreateNewAttributePanel(FeatureStore store) {
+        super();
+        this.store = store;
+        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, 310);
+        this.setPreferredSize(new java.awt.Dimension(300, 310));
+        this.add(getJPanel(), java.awt.BorderLayout.CENTER);
+        this.add(getJPanelOkCancel(), java.awt.BorderLayout.SOUTH);
+        
+        jBtnExpression.setText("");        
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        this.expressionPicker = manager.createExpressionPickerController(jTxtExpression, jBtnExpression);
+        if( this.store != null ) {
+            Element element = manager.createElement(
+                    DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT, 
+                    this.expressionPicker, 
+                    this.store
+            );
+            if( element != null ) {
+                this.expressionPicker.addElement(element);
+            }
+            Feature sampleFeature = null;
+            try {
+                sampleFeature = store.getFeatureSelection().first();
+                if( sampleFeature == null ) {
+                    sampleFeature = store.first();
+                }
+            } catch (DataException ex) {
+            }
+            if( sampleFeature!=null ) {
+                FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager()
+                        .createFeatureSymbolTable();
+                featureSymbolTable.setFeature(sampleFeature);
+                this.expressionPicker.setPreviewSymbolTable(
+                        featureSymbolTable.createParent()
+                );
+            }
+            
+        }
+    }
+
+    /**
+     * 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, 200, 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;
+        }
+
+        if (maxAttributeNameSize>0){
+            if (nameAttr.length()>maxAttributeNameSize){
+                JOptionPane.showMessageDialog(
+                    this,
+                    Messages.getText("_Name_too_long"),
+                    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;
+            }
+        }
+
+        if (featureType.getIndex(nameAttr) != -1) {
+            NotificationManager.showMessageInfo(
+                PluginServices.getText(this, "field_already_exists"), null);
+            return null;
+        }
+        EditableFeatureAttributeDescriptor ead = null;
+        if (getJRdbFieldVirtual().isSelected()) {
+            FeatureAttributeEmulatorExpression myEmulated = DALLocator.getDataManager().createFeatureAttributeEmulatorExpression(
+                    featureType, 
+                    this.expressionPicker.get()
+            );
+            if (!myEmulated.isValid()) {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                ApplicationManager application = ApplicationLocator.getManager();
+                int x = application.confirmDialog(
+                        "The expression used in this field is not valid."+
+                                "\n\n"+
+                                myEmulated.getErrorMessage()+
+                                "\n\n"+
+                                "Do you want add this field anyway?", 
+                        "Add invalid field", 
+                        JOptionPane.YES_NO_OPTION, 
+                        JOptionPane.QUESTION_MESSAGE,
+                        "_AddingInvalidField.DoYouWantAddAnyway");
+                if (x==JOptionPane.YES_OPTION) {
+                    ead = featureType.add(nameAttr, typeAttr, myEmulated)
+                    .setSize(sizeAttr);
+                }
+            } else {
+            ead = featureType.add(nameAttr, typeAttr, myEmulated)
+                    .setSize(sizeAttr);
+            }
+        } else {
+            defaultValueAttr = getJTxtDefaultValue().getText();
+            if (defaultValueAttr.equals("")) {
+                defaultValueAttr = null;
+            }
+            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(8);
+            gridLayout.setVgap(3);
+            gridLayout.setHgap(5);
+            gridLayout.setColumns(2);
+            jPnlFields = new JPanel();
+            jPnlFields.setLayout(gridLayout);
+            jPnlFields.setBounds(new java.awt.Rectangle(5, 12, 290, 200));
+//            jLblFieldReal  = new JLabel();
+//            jLblFieldReal.setBounds(14, 237, 125, 22);
+//            jLblFieldReal.setText(PluginServices.getText(this,
+//                "default_value"));
+//            jLblEmulated = new JLabel();
+//            jLblEmulated
+//                .setBounds(new java.awt.Rectangle(14, 200, 125, 22));
+//            jLblEmulated.setText(PluginServices.getText(this,
+//                "emulated"));
+            jLblExpression = new JLabel();
+            jLblExpression
+                .setBounds(new java.awt.Rectangle(14, 272, 125, 22));
+            jLblExpression.setText(PluginServices.getText(this,
+                "expression"));
+            jLblDefaultValue = new JLabel();
+            jLblDefaultValue
+                .setBounds(new java.awt.Rectangle(14, 200, 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(getJRdbFieldReal(), null);
+            jRdbFieldReal.addActionListener(this);
+            jPnlFields.add(new JLabel(), null);
+            //JPanel panelReal = new JPanel();
+            jPnlFields.add(jLblDefaultValue, null);
+            jPnlFields.add(getJTxtDefaultValue(), null);            
+            //jPnlFields.add(panelReal);
+                  
+            jPnlFields.add(getJRdbFieldVirtual(), null);
+            jRdbFieldVirtual.addActionListener(this);
+            
+            jPnlFields.add(new JLabel(), null);
+            jPnlFields.add(jLblExpression, null);
+            JPanel panelVirtual = new JPanel();
+//            panelVirtual.setLayout(new GridLayout(1, 2));
+            GridBagLayout grid = new GridBagLayout();
+            GridBagConstraints gbc = new GridBagConstraints();
+            gbc.gridx = 0;
+            gbc.gridy = 0;
+            gbc.gridwidth = 3;
+            gbc.gridheight = 1;
+            gbc.weightx = 1.0;
+            gbc.fill = GridBagConstraints.HORIZONTAL;
+            panelVirtual.setLayout(grid);
+            
+            panelVirtual.add(getJTxtExpression(), gbc);
+            gbc.gridx = 4;
+            gbc.gridy = 0;
+            gbc.gridwidth = 1;
+            gbc.gridheight = 1;
+            gbc.weightx = 0.0;
+            gbc.weighty = 0.0;
+            gbc.fill = GridBagConstraints.NONE;
+            panelVirtual.add(getJBtnExpression(), gbc);
+            jPnlFields.add(panelVirtual);
+
+            //jPnlFields.add(jLblFieldVirtual, null);
+            ButtonGroup defaultGroup = new ButtonGroup();
+            defaultGroup.add(jRdbFieldReal);
+            defaultGroup.add(jRdbFieldVirtual);
+            
+            // init visible
+            jLblDefaultValue.setEnabled(true);
+            jTxtDefaultValue.setEnabled(true);   
+            jLblExpression.setEnabled(false);
+            jTxtExpression.setEnabled(false);
+            jBtnExpression.setEnabled(false);
+            
+        }
+        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;
+    }
+
+    public void setMaxAttributeNameSize(int maxAttributeNameSize) {
+        this.maxAttributeNameSize = maxAttributeNameSize;
+    }
+
+    private JTextField getJTxtExpression() {
+        if (jTxtExpression == null) {
+            jTxtExpression = new JTextField();
+            jTxtExpression.setBounds(new java.awt.Rectangle(147, 200, 125, 22));
+            jTxtExpression.setColumns(4);
+        }
+        return jTxtExpression;
+    }
+    
+    private JRadioButton getJRdbFieldReal() {
+        if (jRdbFieldReal == null) {
+            jRdbFieldReal = new JRadioButton(PluginServices.getText(this, "_Real_field")); //"real_value"));
+            jRdbFieldReal.setBounds(new java.awt.Rectangle(14, 163, 125, 22));
+            jRdbFieldReal.setSelected(true);
+        }
+        return jRdbFieldReal;
+    }
+    private JRadioButton getJRdbFieldVirtual() {
+        if (jRdbFieldVirtual == null) {
+            jRdbFieldVirtual = new JRadioButton(PluginServices.getText(this, "_Virtual_field"));//"virtual_value"));
+            jRdbFieldVirtual.setBounds(new java.awt.Rectangle(14, 237, 125, 22));
+        }
+        return jRdbFieldVirtual;
+    }
+    
+    private JButton getJBtnExpression() {
+        if (jBtnExpression == null) {
+            jBtnExpression = new JButton();
+            jBtnExpression.setText("...");
+            //jBtnExpression.setBounds(new java.awt.Rectangle(147, 200, 125, 22));
+            //jBtnExpression.setColumns(4);
+        }
+        return jBtnExpression;
+    }
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        if (e.getSource()==jRdbFieldReal) {
+            jLblDefaultValue.setEnabled(true);
+            jTxtDefaultValue.setEnabled(true);   
+            jLblExpression.setEnabled(false);
+            jTxtExpression.setEnabled(false);
+            jBtnExpression.setEnabled(false);
+            
+        } else if (e.getSource()==jRdbFieldVirtual) {
+            jLblDefaultValue.setEnabled(false);
+            jTxtDefaultValue.setEnabled(false);
+            jLblExpression.setEnabled(true);
+            jTxtExpression.setEnabled(true);   
+            jBtnExpression.setEnabled(true);
+            
+        }
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,691 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.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.expressionevaluator.FeatureAttributeEmulatorExpression;
+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.fmap.dal.feature.FeatureStoreProviderFactory;
+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
+ * @deprecated use DataSwingManager.createFeatureTypePanel
+ * 
+ */
+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;
+
+    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 6;
+        }
+
+        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();
+            case 5:
+                if (myField.isComputed() && (myField.getFeatureAttributeEmulator() instanceof FeatureAttributeEmulatorExpression)) {
+                FeatureAttributeEmulatorExpression emulator = (FeatureAttributeEmulatorExpression) myField.getFeatureAttributeEmulator();
+                    return emulator.getExpression().getPhrase();
+                } else if (myField.isComputed()) {
+                    return PluginServices.getText(this, "_Virtual_field");
+                } else {
+                    return "";
+                }
+
+            }
+            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");
+            case 5:
+                return PluginServices.getText(this, "_Calculated");
+
+            }
+            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();
+        this.panelNewField = new CreateNewAttributePanel(this.featureStore);
+
+        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;
+                    DataManager dataManager = DALLocator.getDataManager();
+                    FeatureStoreProviderFactory factory =
+                            (FeatureStoreProviderFactory) dataManager.
+                            getStoreProviderFactory(featureStore.getProviderName());
+                    panelNewField.setMaxAttributeNameSize(factory.getMaxAttributeNameSize());
+                    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;
+                            }
+
+                            //In case there is a field length limit, it is validated
+                            DataManager dataManager = DALLocator.getDataManager();
+                            FeatureStoreProviderFactory factory =
+                                (FeatureStoreProviderFactory) dataManager.
+                                getStoreProviderFactory(featureStore.getProviderName());
+                            if (factory.getMaxAttributeNameSize()>0){
+                                if (newName.length()>factory.getMaxAttributeNameSize()){
+                                    JOptionPane.showMessageDialog(
+                                        jTableFields,
+                                        Messages.getText("_Name_too_long"),
+                                        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.344/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.344/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.344/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.344/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 46118)
@@ -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 {DiSiD Technologies}  {TableDocument implementation based on the gvSIG DAL API}
+ */
+package org.gvsig.app.project.documents.table.gui;
+
+
+import java.util.logging.Level;
+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.FeatureAttributeDescriptor;
+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.mapcontrol.dal.feature.swing.FeatureTypesTablePanel;
+import org.gvsig.fmap.mapcontrol.dal.feature.swing.table.notification.ColumnHeaderSelectionChangeNotification;
+import org.gvsig.tools.ToolsLocator;
+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();
+        try {
+            FeatureType featureType = model.getFeatureStore().getDefaultFeatureType();
+            for( FeatureAttributeDescriptor descriptor : featureType) {
+                this.getTableModel().setFormattingPattern(
+                    descriptor.getName(), 
+                    model.getFormattingPattern(descriptor.getName())
+                );
+            }
+        } catch (DataException ex) {
+            LOG.warn("Can't initialize columns formating patters",ex);
+        }
+        
+    }
+
+    public FeatureStore getFeatureStore() {
+        return this.getTablePanel().getFeatureStore();
+    }
+    
+    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 if(this.model.getAssociatedLayer()!=null ) {
+                windowInfo.setTitle(
+                        ToolsLocator.getI18nManager().getTranslation("Tabla_de_Atributos") +
+                        ":" +
+                        this.model.getName()
+                );
+            } 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
+    }
+    
+    public FeatureAttributeDescriptor[] getSelectedColumnsDescriptors() {
+        try {
+            return this.getTablePanel().getTable().getSelectedColumnsAttributeDescriptor();
+        } catch (DataException ex) {
+            return null;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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 2;
+	}
+
+	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.344/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.344/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.344/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 46118)
@@ -0,0 +1,32 @@
+
+package org.gvsig.app.project.documents.table.gui;
+
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+public class GeneralTablePropertiesPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    @Override
+    public String getName() {
+        return "General";
+    }
+    
+    @Override
+    public PropertiesPage create(Object container, Object data) {
+        return new GeneralTablePropertiesPage((TableDocument)data);
+    }
+
+    @Override
+    public String getGroupID() {
+        return TableDocument.TABLE_PROPERTIES_PAGE_GROUP;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,658 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-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.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+
+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.DataTypes;
+import org.gvsig.fmap.dal.HasDataStore;
+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 HasDataStore, 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 final Object lock = new Object();
+    
+    private Map<String,String> patterns = null;
+
+    public TableDocument(DocumentManager factory) {
+        super(factory);
+        this.store = null;
+        this.query = null;
+        this.featureTypeId = null;
+        this.baseFilter = null;
+        this.baseOrder = null;
+        this.patterns = null;
+    }
+
+    public TableDocument() {
+        this(null);
+    }
+
+    public TableDocument(DocumentManager factory, FeatureStore store) {
+        this(factory);
+        setStore(store);
+    }
+
+    public synchronized FeatureStoreModel getFeatureStoreModel() {
+        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());
+        initializeFormattingPatterns();
+    }
+
+    private void initializeFormattingPatterns() {
+        FeatureType featureType;
+        try {
+            featureType = this.store.getDefaultFeatureType();
+        } catch (DataException ex) {
+            logger.warn("Can't initialize formating patterns", ex);
+            return;
+        }
+        this.patterns = new HashMap<>();
+        for( FeatureAttributeDescriptor descriptor : featureType ) {
+            String pattern = null;
+            switch( descriptor.getDataType().getType() ) {
+            case DataTypes.BYTE:
+            case DataTypes.INT:
+            case DataTypes.LONG:
+                pattern = "#,##0";
+                break;
+            case DataTypes.DOUBLE:
+                pattern = "#,##0.0000000000";
+                break;
+            case DataTypes.FLOAT:
+                pattern = "#,##0.0000";
+                break;
+            case DataTypes.DECIMAL:
+                pattern = "#,##0.0000";
+                break;
+            case DataTypes.DATE:
+                pattern = new SimpleDateFormat().toPattern();
+                break;
+            }
+            this.patterns.put(descriptor.getName(), pattern);
+        }
+    }
+
+    public String getFormattingPattern(String columnName) {
+        if( this.patterns==null ) {
+            return null;
+        }
+        String pattern = this.patterns.get(columnName);
+        return pattern;
+    }
+    
+    public void setFormattingPattern(String columnName, String pattern) {
+        if( this.patterns==null ) {
+            return;
+        }
+        this.patterns.put(columnName,pattern);
+    }
+    
+    @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<>();
+                    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;
+    }
+
+    @Override
+    public FeatureStore getDataStore() {
+        return store;
+    }
+    
+    
+
+    /**
+     * @return the store
+     */
+    public FeatureStore getFeatureStore() {
+        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
+     *
+     * @param targetTable
+     * @param fieldSource
+     * @param fieldTarget
+     * @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<>();
+        }
+        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;
+    }
+
+    @Override
+    public void update(Observable arg0, Object arg1) {
+        if (this.store.equals(arg0)) {
+            if (arg1 instanceof FeatureStoreNotification) {
+                FeatureStoreNotification event =
+                    (FeatureStoreNotification) arg1;
+                if ( FeatureStoreNotification.TRANSFORM_CHANGE.equals(event.getType()) 
+                    || FeatureStoreNotification.RESOURCE_CHANGED.equals(event.getType()) ) {
+                    this.query = null;
+                }
+            }
+
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    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");
+            this.patterns = new HashMap<>(state.getMap("patterns"));
+        } catch (Throwable e) {
+            String storeName = (store == null) ? "unknow" : store.getFullName();
+            logger.warn("can't load table '" + this.getName() + "' (store="
+                + storeName + ") from persisted state.", e);
+        }
+    }
+
+    @Override
+    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);
+        state.set("patterns",patterns);
+    }
+
+    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;
+            }
+        }
+
+        @Override
+        public void update(Observable arg0, Object arg1) {
+            try {
+                FeatureSet fCollection1 =
+                    (FeatureSet) storeSource.getSelection();
+                FeatureSelection fCollection2 =
+                    (FeatureSelection) storeTarget.createSelection();
+                List<Object> idx = new ArrayList<>();
+
+                // 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) {
+                logger.warn(e2.getMessage(),e2);
+            }
+        }
+
+        @Override
+        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"));
+        }
+
+        @Override
+        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;
+        }
+        if( this.getFeatureStore().isTemporary() ) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        if(this.store == null){
+            return false;
+        }
+        return true;
+    }
+
+
+    @Override
+    public boolean contains(Object value) {
+        if( value == null ) {
+            return false;
+        }
+        if( !(value instanceof FeatureStore) ) {
+            return false;
+        }
+        String storeFullName = ((FeatureStore)value).getFullName();
+        FeatureStore featureStore = this.getStore();
+        if( StringUtils.equals(featureStore.getFullName(), storeFullName)){
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void refresh() {
+        try {
+            this.getStore().refresh();
+        } catch (DataException e) {
+            
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesInTableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesInTableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesInTableExtension.java	(revision 46118)
@@ -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.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.ApplicationManager;
+import org.gvsig.app.gui.filter.ExpressionListener;
+import org.gvsig.app.gui.filter.FilterDialog;
+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.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.dal.feature.FeatureType;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+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
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectByAttributesInTableExtension extends Extension implements ExpressionListener {
+
+    protected FeatureStore featureStore = null;
+    protected FeatureTableDocumentPanel table;
+    private String filterTitle;
+
+    @Override
+    public void initialize() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "selection-by-attributes", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (!(v instanceof FeatureTableDocumentPanel)) {
+            return;
+        }
+        if ("selection-by-attributes-table".equals(actionCommand)) {
+            table = (FeatureTableDocumentPanel) v;
+
+            
+            featureStore = table.getFeatureStore();
+            filterTitle = featureStore.getName();
+//            table.getModel().setModified(true);
+            SelectByAttributes selector = new SelectByAttributes();
+            selector.showWindow(filterTitle, featureStore, WindowManager.MODE.TOOL);
+            
+        } else if ("selection-by-attributes-table-old".equals(actionCommand)) {
+            table = (FeatureTableDocumentPanel) v;
+
+            featureStore = table.getFeatureStore();
+            filterTitle = featureStore.getName();
+//            table.getModel().setModified(true);
+
+            doExecute();
+        }
+    }
+
+    protected void doExecute() {
+        FilterDialog dlg = new FilterDialog(filterTitle);
+        dlg.addExpressionListener(this);
+        dlg.addExceptionListener(new ExceptionListener() {
+
+            @Override
+            public void exceptionThrown(Throwable t) {
+                NotificationManager.addError(t.getMessage(), t);
+            }
+        });
+        dlg.setModel(featureStore);
+        PluginServices.getMDIManager().addWindow(dlg);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument doc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if (doc == null) {
+            return false;
+        }
+        FeatureTableDocumentPanel tablePanel = (FeatureTableDocumentPanel) doc.getMainComponent();
+        if( tablePanel == null ) {
+            return false;
+        }
+        FeatureStore store = tablePanel.getFeatureStore();
+        try {
+            if( ! store.getFeatureSelection().isAvailable() ) {
+                return false;
+            }
+        } catch (Exception ex) {
+        }                        
+        
+        return  true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+        return (v instanceof FeatureTableDocumentPanel);
+    }
+
+    // if no filter expression -> no element selected
+    @Override
+    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) {
+                logger.warn("Problems executing query '" + expression + "' on store '" + featureStore + "'.", e);
+                JOptionPane.showMessageDialog(
+                        ApplicationLocator.getManager().getRootComponent(),
+                        Messages.getText("_Invalid_expression") + ":\n"
+                        + getLastMessage(e),
+                        Messages.getText("_Invalid_expression"),
+                        JOptionPane.ERROR_MESSAGE);
+            } finally {
+                DisposeUtils.disposeQuietly(set);
+            }
+        } 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);
+    }
+
+    @Override
+    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);
+
+            } catch (Exception e) {
+                logger.warn("Problems executing query '" + expression + "' on store '" + featureStore + "'.", e);
+                JOptionPane.showMessageDialog(
+                        ApplicationLocator.getManager().getRootComponent(),
+                        Messages.getText("_Invalid_expression") + ":\n"
+                        + getLastMessage(e),
+                        Messages.getText("_Invalid_expression"),
+                        JOptionPane.ERROR_MESSAGE);
+            } finally {
+                DisposeUtils.disposeQuietly(set);
+            }
+        }
+    }
+
+    @Override
+    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();
+                for (Feature feature : set) {
+                    if (oldSelection.isSelected(feature)) {
+                        newSelection.select(feature);
+                    }
+                }
+                featureStore.setSelection(newSelection);
+            } catch (Exception e) {
+                logger.warn("Problems executing query '" + expression + "' on store '" + featureStore + "'.", e);
+                JOptionPane.showMessageDialog(
+                        ApplicationLocator.getManager().getRootComponent(),
+                        Messages.getText("_Invalid_expression") + ":\n"
+                        + getLastMessage(e),
+                        Messages.getText("_Invalid_expression"),
+                        JOptionPane.ERROR_MESSAGE);
+            } finally {
+                DisposeUtils.disposeQuietly(set);
+            }
+        } 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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesInTableExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.extension;
+
+import org.gvsig.andami.plugins.Extension;
+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.TableManager;
+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();
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument tableDoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if( tableDoc == null ) {
+            return false;
+        }
+        if( tableDoc.getFeatureStore().isEditing() ) {
+            this.table = (FeatureTableDocumentPanel) tableDoc.getMainComponent();
+            return true;
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 {
+
+    @Override
+    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());
+    }
+
+    @Override
+    public void postInitialize() {
+        TableManager.register();
+        ApplicationLocator.getManager().registerAddTableWizard("File",
+            "File Table", FilesystemExplorerTableWizardPanel.class);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.extension;
+
+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.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+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;
+    }
+    
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument tableDoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if( tableDoc == null ) {
+            return false;
+        }
+        this.table = (FeatureTableDocumentPanel) tableDoc.getMainComponent();
+        return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.extension;
+
+import javax.swing.JOptionPane;
+import org.gvsig.andami.IconThemeHelper;
+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.Project;
+import org.gvsig.app.project.documents.DocumentManager;
+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.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+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.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+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.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.util.ArrayUtils;
+
+/**
+ * Extensi�n que abre las tablas asociadas a las vistas.
+ *
+ */
+public class ShowTable extends Extension implements LayerCollectionListener {
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument doc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (doc == null) {
+            return false;
+        }
+        MapContext mapContext = doc.getMapContext();
+        return mapContext.hasActiveVectorLayers();
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument doc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (doc == null) {
+            return false;
+        }
+        MapContext mapContext = doc.getMapContext();
+        return mapContext.hasVectorLayers();
+    }
+
+    @Override
+    public void execute(String command) {
+        this.execute(command, null);
+    }
+
+    @Override
+    public void execute(String command, Object[] args) {
+        if ("layer-show-attributes-table".equalsIgnoreCase(command)) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            FLayer[] layers = (FLayer[]) ArrayUtils.get(args, 0);
+            if( layers == null ) {
+                ViewDocument doc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+                if (doc == null) {
+                    return;
+                }
+                MapContext mapContext = doc.getMapContext();
+                layers = mapContext.getLayers().getActives();
+            }
+            Project project = application.getCurrentProject();
+            TableManager tableManager = getTableManager();
+
+            for (FLayer layer : layers) {
+                if (layer instanceof FLyrVect) {
+                    FLyrVect layerVect = (FLyrVect) layer;                    
+                    TableDocument tableDoc = tableManager.getTableDocument(layerVect);
+                    if (tableDoc == null) {
+                        tableDoc = (TableDocument) tableManager.createDocument();
+                        tableDoc.setName(layerVect.getName());
+                        tableDoc.setStore(layerVect.getFeatureStore());
+                        tableDoc.setAssociatedLayer(layerVect);
+                        layerVect.getParentLayer().addLayerCollectionListener(this);
+                        project.addDocument(tableDoc);
+                    }
+                    try {
+                        FeatureStore store = tableDoc.getDataStore();
+                        FeatureType type = store.getDefaultFeatureType();
+                        if( ! type.supportReferences() ) {
+                            I18nManager i18n = ToolsLocator.getI18nManager();
+                            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                            dialogs.messageDialog(
+                                    "\""+ store.getName() + "\"\n"+
+                                    i18n.getTranslation("_The_table_has_no_primary_key_or_OID") +"\n" +
+                                           i18n.getTranslation("_Many_features_selection_deletion_modification_will_not_be_available_as_they_require_it_for_proper_operation"),
+                                    null, 
+                                    i18n.getTranslation("_Warning"),
+                                    JOptionPane.WARNING_MESSAGE, 
+                                    "TableDoNotSupportReferences"
+                           );
+                        }
+                    } catch (Exception ex) {
+
+                    }
+                    
+                    IWindow tablePanel = tableManager.getMainWindow(tableDoc);
+                    tableDoc.setModified(true);
+                    application.getUIManager().addWindow(tablePanel);
+                }
+            }
+        }
+    }
+
+    private TableManager getTableManager() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        DocumentManager tableManager = application.getProjectManager().getDocumentManager(
+                TableManager.TYPENAME
+        );
+        return (TableManager) tableManager;
+    }
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-show-attributes-table", this);
+    }
+
+    @Override
+    public void layerAdded(LayerCollectionEvent e) {
+        // Nothing to do
+    }
+
+    @Override
+    public void layerMoved(LayerPositionEvent e) {
+        // Nothing to do
+    }
+
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    @Override
+    public void layerMoving(LayerPositionEvent e) throws CancelationException {
+        // Nothing to do
+    }
+
+    @Override
+    public void layerRemoving(LayerCollectionEvent e)
+            throws CancelationException {
+        // Nothing to do
+    }
+
+    @Override
+    public void visibilityChanged(LayerCollectionEvent e)
+            throws CancelationException {
+        // Nothing to do
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.app.extension;
+
+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.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+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;
+
+    @Override
+    public void execute(String actionCommand) {
+        
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        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.getWindowInfo().setTitle(i18n.getTranslation("_Create_link_between_tables"));
+                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"
+                        + SelectByAttributesInTableExtension.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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+package org.gvsig.app.extension;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+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.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.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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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<String> selFeats = DALLocator.getDataManager().createLargeSet();
+        
+        FeatureQuery fquery = fstore.createFeatureQuery();
+        /*
+         * Create order based on selected column
+         * (ascending but descending would be ok too)
+         */
+        FeatureQueryOrder fqo = fquery.getOrder();
+        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.getReference().getCode());
+                
+            } else {
+                if (equals) {
+                    // We have gone out of equal group
+                    selFeats.add(prevFeat.getReference().getCode());
+                }
+                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<String> fiter = selFeats.iterator();
+            while (fiter.hasNext()) {
+                fsele.select(fstore.getFeatureReference(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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+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.ApplicationManager;
+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.fmap.dal.EditingNotification;
+import org.gvsig.fmap.dal.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.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.util.ArrayUtils;
+import org.gvsig.utils.swing.threads.IMonitorableTask;
+
+public class TableEditStopExtension extends AbstractTableEditExtension {
+
+    private static Logger LOGGER
+            = LoggerFactory.getLogger(TableEditStopExtension.class);
+
+    @Override
+    public void initialize() {
+        super.initialize();
+        IconThemeHelper.registerIcon("action", "table-stop-editing", this);
+    }
+
+    public void execute(String actionCommand) {
+        this.execute(actionCommand,null);
+    }
+
+    @Override
+    public void execute(String actionCommand, Object[] args) {
+        if ("table-stop-editing".equals(actionCommand)) {
+            TableDocument doc = (TableDocument)ArrayUtils.get(args,0);
+            if( doc == null ) {
+                doc = (TableDocument) table.getDocument();
+            }    
+            EditingNotificationManager editingNotification = DALSwingLocator.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) {
+
+        final FeatureStore featureStore = table.getFeatureStore();
+        boolean allowWrite = featureStore.allowWrite();
+
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String message;
+        Object[] options;
+        if(allowWrite) {
+            options = new Object[]{
+                i18n.getTranslation("_Guardar"),
+                "       " + i18n.getTranslation("_Descartar") + "       ",
+                i18n.getTranslation("_Continuar")
+            };
+            message = i18n.getTranslation("stop_editing_message");
+        } else {
+            options = new Object[]{
+                i18n.getTranslation("_Export"),
+                "       " + i18n.getTranslation("_Descartar") + "       ",
+                i18n.getTranslation("_Continuar")
+            };
+            message = i18n.getTranslation("export_and_stop_editing_message");
+        }
+
+        int resp = JOptionPane
+                .showOptionDialog(
+                        (Component) PluginServices.getMainFrame(),
+                        message,
+                        i18n.getTranslation("stop_edition"),
+                        JOptionPane.YES_NO_CANCEL_OPTION,
+                        JOptionPane.QUESTION_MESSAGE, null, options,
+                        options[2]);
+
+        switch( resp ) {
+        case JOptionPane.NO_OPTION:
+            try {
+                // CANCEL EDITING
+                featureStore.cancelEditing();
+            } catch (DataException e) {
+                LOGGER.warn("Problems canceling table editing: "
+                    + e.getMessage(), e);
+                application.messageDialog(
+                    i18n.getTranslation("_Problems_cancel_table_editing")+"\n\n"+
+                    i18n.getTranslation("_see_error_log_for_more_information"), 
+                    null, 
+                    i18n.getTranslation("_Warning"), 
+                    JOptionPane.WARNING_MESSAGE, 
+                    "Table_cant_cancelEditing"
+                );
+            }
+            break;
+        case JOptionPane.YES_OPTION:
+            try {
+                if(allowWrite){
+                    // Save table
+                    featureStore.finishEditing();
+                } else {
+                    exportTable(table.getDocument(), featureStore);
+                }
+            } catch (DataException e) {
+                LOGGER.warn("Problems finish table editing: "
+                    + e.getMessage(), e);
+                application.messageDialog(
+                    i18n.getTranslation("_Problems_finish_table_editing")+"\n\n"+
+                    i18n.getTranslation("_see_error_log_for_more_information"), 
+                    null, 
+                    i18n.getTranslation("_Warning"), 
+                    JOptionPane.WARNING_MESSAGE, 
+                    "Table_cant_finishEditing"
+                );
+            }
+            break;
+        default:
+            // This happens when user clicks on [x]
+            // to abruptly close previous JOptionPane dialog
+            // We do nothing (equivalent to 'Continue editing')
+            break;
+        }
+    }
+    
+    private void exportTable(Document document, FeatureStore store) {
+        ApplicationManager appManager = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ActionInfo action = PluginsLocator.getActionInfoManager().getAction("table-exportto");
+        action.execute(new Object[]{document, WindowManager.MODE.toInteger(WindowManager.MODE.DIALOG)});
+        String msg = "_Do_you_want_to_finish_editing_If_not_exported_the_data_the_changes_will_be_lost";
+        if (appManager.confirmDialog(
+                i18n.getTranslation(msg),
+                i18n.getTranslation("end_editing"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
+            try {
+                store.cancelEditing();
+            } catch (Exception e) {
+                LOGGER.warn("Can't abort editing of table '" + document.getName() + "'.", e);
+                msg = i18n.getTranslation("_Problems_finish_table_editing")+"\n\n"+
+                    i18n.getTranslation("_see_error_log_for_more_information");
+                appManager.messageDialog(msg, "_Warning", JOptionPane.WARNING_MESSAGE);
+            }
+        }
+    }
+
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    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.
+     *
+     */
+    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;
+        }
+
+        @Override
+        public String getIcon() {
+            return "document-table-icon-small";
+        }
+    }
+
+    // TODO Este codigo esta duplicado, tambien esta en la clase Table en el
+    // metodo "public void stopEditing()"
+    private boolean executeSaveTable(TableDocument table2) {
+        FeatureStore fs = table2.getStore();
+        if (fs.isEditing()) {
+            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;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public IExtensionStatus getStatus() {
+        return new StopEditingStatus();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTableAsForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTableAsForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowTableAsForm.java	(revision 46118)
@@ -0,0 +1,72 @@
+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.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.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class ShowTableAsForm extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "table-show-form", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        if ("table-show-form".equalsIgnoreCase(actionCommand)) {
+            TableDocument doc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+            if (doc == null) {
+                return;
+            }
+//            FeatureStore store = doc.getStore();
+            FeatureTableDocumentPanel tablePanel = (FeatureTableDocumentPanel) doc.getMainComponent();
+            FeatureStore store = tablePanel.getFeatureStore();
+            try {
+                JFeaturesForm form = this.createform(store);
+                form.showForm(WindowManager.MODE.WINDOW);
+            } catch (Exception ex) {
+                String msg = "Can't show form for table '" + doc.getName() + "'.";
+                logger.warn(msg, ex);
+                application.messageDialog(msg + "\n\n(See the error log for more information)", "Warning", JOptionPane.WARNING_MESSAGE);
+            }
+        }
+    }
+
+    private JFeaturesForm createform(FeatureStore featureStore) throws CreateJFeatureFormException, ServiceException, DataException {
+        final DataSwingManager swingManager = DALSwingLocator.getSwingManager();
+        final JFeaturesForm form = swingManager.createJFeaturesForm(featureStore);
+        form.getFormset().setAllowDelete(true);
+        form.getFormset().setAllowNew(true);
+//        form.setPreferredSize(new Dimension(400, 300));
+        return form;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument doc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        return doc != null;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        Document doc = application.getActiveDocument(TableManager.TYPENAME);
+        return doc != null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+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.project.documents.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+
+/**
+ * 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);
+        }
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        try {
+            FeatureStore store = table.getFeatureStore();
+            if( !store.isEditing() ) {
+              return false;
+            }
+
+            DataStoreProviderFactory factory = store.getProviderFactory();
+            if (factory instanceof FeatureStoreProviderFactory) {
+                FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+                if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                    return false;
+                }
+            }
+            if (table.getTablePanel().getTable().getSelectedColumnCount() > 0) {
+                return true;
+            }
+        } catch (DataException e) {
+            return false;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument tableDoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if (tableDoc == null) {
+            return false;
+        }
+        this.table = (FeatureTableDocumentPanel) tableDoc.getMainComponent();
+        return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesInTableExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesInTableExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesInTableExtension.java	(revision 46118)
@@ -0,0 +1,71 @@
+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.table.TableDocument;
+import org.gvsig.app.project.documents.table.TableManager;
+import org.gvsig.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+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 jjdelcerro
+ */
+public class SearchByAttributesInTableExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "search-by-attributes-table", this);                
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        if ("search-by-attributes-table".equals(actionCommand)) {
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+            WindowManager winManager = ToolsSwingLocator.getWindowManager();
+            
+            TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+            if( tabledoc == null ) {
+                return;
+            }
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            final FeatureTableDocumentPanel tablePanel = (FeatureTableDocumentPanel) tabledoc.getMainComponent();
+            final FeatureStore featureStore = tablePanel.getFeatureStore();
+            String title = i18n.getTranslation("search")+ ": " + featureStore.getName();
+            FeatureStoreSearchPanel panel = dataSwingManager.createFeatureStoreSearchPanel(featureStore);
+            winManager.showWindow(
+                    panel.asJComponent(), 
+                    title, 
+                    WindowManager.MODE.WINDOW
+            );
+            
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if( tabledoc == null ) {
+            return false;
+        }
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,332 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import javax.swing.JOptionPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+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.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.app.project.documents.table.gui.FeatureTableDocumentPanel;
+import org.gvsig.configurableactions.ConfigurableActionsMamager;
+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.EditableFeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.EditableFeatureType;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+/**
+ * Extensi�n que abre la ventana para cambiar la configuraci�n de la estructura
+ * de la tabla.
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class TableEditAttributes extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "table-column-manager", this);
+        IconThemeHelper.registerIcon("action", "table-add-column", this);
+    }
+
+    @Override
+    public void postInitialize() {
+        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+        cfgActionsManager.addConfigurableAction(FeatureTypePanel.CONFIGURABLE_PANEL_ID, new ShowAsTableAction());
+        cfgActionsManager.addConfigurableAction(FeatureTypePanel.CONFIGURABLE_PANEL_ID, new WriteToDALFileAction());
+    }
+
+    @Override
+    public boolean canQueryByAction() {
+        return true;
+    }
+
+    @Override
+    public void execute(String s) {
+        final I18nManager i18n = ToolsLocator.getI18nManager();
+        final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        final DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        final DataManager dataMamager = DALLocator.getDataManager();
+        final ApplicationManager application = ApplicationLocator.getManager();
+
+        TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if (tabledoc == null) {
+            return;
+        }
+//        final FeatureStore featureStore = tabledoc.getStore();
+        final FeatureTableDocumentPanel tablePanel = (FeatureTableDocumentPanel) tabledoc.getMainComponent();
+        final FeatureStore featureStore = tablePanel.getFeatureStore();
+
+        if ("table-column-manager".equalsIgnoreCase(s)) {
+            try {
+                final FeatureType featureType = featureStore.getDefaultFeatureType();
+                final EditableFeatureType editableFeatureType = featureType.getEditable();
+                final FeatureTypePanel panel = dataSwingManager.createFeatureTypePanel();
+                panel.put(editableFeatureType);
+//                FeatureStore store = tabledoc.getStore();
+
+                panel.setMode(
+                        featureStore.isEditing()
+                        ? FeatureTypePanel.MODE_EDIT_ALL
+                        : FeatureTypePanel.MODE_EDIT_ONLY_METADATA
+                );
+                
+                if (!featureStore.isEditing()) {
+                    ApplicationManager aplication = ApplicationLocator.getManager();
+                    aplication.messageDialog(
+                            i18n.getTranslation("_The_table_is_not_in_edit_mode._You_can_only_add_virtual_fields_and_modify_some_table_data"),
+                            i18n.getTranslation("_Warning"),
+                            JOptionPane.WARNING_MESSAGE);    
+                }
+                        
+                DataStoreProviderFactory factory = featureStore.getProviderFactory();
+                if (factory instanceof FeatureStoreProviderFactory) {
+                    FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+                    if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                        panel.setMode(FeatureTypePanel.MODE_SHOW_ONLY);
+                    }
+                }
+
+                final Dialog dialog = winManager.createDialog(
+                        panel.asJComponent(),
+                        i18n.getTranslation("_Column_manager") + " - " + tabledoc.getName(),
+                        null,
+                        WindowManager_v2.BUTTONS_OK_CANCEL
+                );
+                panel.addChangeListener((ChangeEvent e) -> {
+                  if (panel.isEditing()) {
+                    dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
+                  } else {
+                    dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, true);
+                  }
+                });
+                dialog.addActionListener((ActionEvent e) -> {
+                  if (dialog.getAction() != WindowManager_v2.BUTTON_OK) {
+                    return;
+                  }
+                  try {
+                    panel.fetch(editableFeatureType);
+                    featureStore.update(editableFeatureType);
+                    dataMamager.clearAvailableValuesCache();
+                  } catch (Exception ex) {
+                    logger.warn("Problems updating featuretype.", ex);
+                  }
+                });
+                dialog.show(WindowManager.MODE.WINDOW);
+            } catch (Exception ex) {
+                logger.warn("Problems show FeatureTypePanel.", ex);
+            }
+
+        } else if ("table-add-column".equals(s)) {
+            try {
+                final FeatureType featureType = featureStore.getDefaultFeatureType();
+                final FeatureTypeAttributePanel panel = dataSwingManager.createFeatureTypeAttributePanel();
+                panel.clean();
+                panel.setNameAsNew(featureType);
+                panel.setMode(FeatureTypePanel.MODE_EDIT_ALL);
+                final Dialog dialog = winManager.createDialog(
+                        panel.asJComponent(),
+                        i18n.getTranslation("_New_field") + " - " + tabledoc.getName(),
+                        null,
+                        WindowManager_v2.BUTTONS_OK_CANCEL
+                );
+                dialog.addActionListener(new ActionListener() {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        if (dialog.getAction() != WindowManager_v2.BUTTONS_OK) {
+                            return;
+                        }
+                        if (!featureStore.isEditing()) {
+                            return;
+                        }
+                        try {
+                            EditableFeatureType editableFeatureType = featureType.getEditable();
+                            EditableFeatureAttributeDescriptor descriptor = editableFeatureType.add(
+                                    panel.getName(),
+                                    DataTypes.STRING
+                            );
+                            panel.fetch(descriptor);
+                            featureStore.update(editableFeatureType);
+                        } catch (Exception ex) {
+                            logger.warn("Problems updating featuretype.", ex);
+                        }
+                    }
+                });
+                dialog.show(WindowManager.MODE.WINDOW);
+            } catch (Exception ex) {
+                logger.warn("Problems show FeatureTypeAttributePanel.", ex);
+            }
+
+        }
+    }
+    public static class WriteToDALFileAction extends AbstractAction {
+
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public WriteToDALFileAction() {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+
+            this.putValue(NAME, i18n.getTranslation("_Save_as_DAL_file"));
+            this.putValue(ACTION_COMMAND_KEY, "WriteToDALFile");
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            FeatureTypePanel panel = (FeatureTypePanel) ae.getSource();
+            EditableFeatureType featureType = panel.fetch(null);
+
+          ApplicationManager application = ApplicationLocator.getApplicationManager();
+          I18nManager i18n = ToolsLocator.getI18nManager();
+          FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+          File[] f = application.showSaveFileDialog(
+                  i18n.getTranslation("_Save_as_DAL_file"), 
+                  foldersManager.getLastPath("SaveAsDALFile", null)
+          );
+          if( f==null || f.length==0 ) {
+            return;
+          }
+        foldersManager.setLastPath("SaveAsDALFile", f[0].getParentFile());
+        featureType.writeAsDALFile(f[0]);
+        }
+    }
+    
+
+    public static class ShowAsTableAction extends AbstractAction {
+
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public ShowAsTableAction() {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+
+            this.putValue(NAME, i18n.getTranslation("_Show_as_table"));
+            this.putValue(ACTION_COMMAND_KEY, "ShowAsTable");
+            this.putValue(
+                    Action.SMALL_ICON,
+                    ToolsSwingLocator.getIconThemeManager().getCurrent().get("layer-show-attributes-table")
+            );
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            FeatureTypePanel panel = (FeatureTypePanel) ae.getSource();
+            EditableFeatureType featureType = panel.fetch(null);
+            FeatureStore store = featureType.getAsFeatureStore();
+
+            ProjectManager projectManager = ApplicationLocator.getManager().getProjectManager();
+            Project project = projectManager.getCurrentProject();
+            TableDocument tableDoc = (TableDocument) project.getDocument(store.getName(), TableManager.TYPENAME);
+            if (tableDoc == null) {
+                tableDoc = (TableDocument) projectManager.createDocument(TableManager.TYPENAME);
+                tableDoc.setStore(store);
+                tableDoc.setName(store.getName());
+                project.addDocument(tableDoc);
+            }
+            ApplicationLocator.getManager().getUIManager().addWindow(tableDoc.getMainWindow());
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if (tabledoc == null) {
+            return false;
+        }
+        return tabledoc.getStore().isEditing();
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        return tabledoc != null;
+    }
+
+    @Override
+    public boolean isVisible(String action) {
+        return this.isVisible();
+    }
+
+    @Override
+    public boolean isEnabled(String action) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        TableDocument tabledoc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        if (tabledoc == null) {
+            return false;
+        }
+        if ("table-column-manager".equalsIgnoreCase(action)) {
+            return true;
+
+        } else if ("table-add-column".equals(action)) {
+            FeatureStore store = tabledoc.getStore();
+
+            DataStoreProviderFactory factory = store.getProviderFactory();
+            if (factory instanceof FeatureStoreProviderFactory) {
+                FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+                if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                    return false;
+                } else {
+                    return tabledoc.getStore().isEditing();
+                }
+            } else {
+                return tabledoc.getStore().isEditing();
+            }
+
+        }
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectAllExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectAllExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectAllExtension.java	(revision 46118)
@@ -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.extension;
+
+import javax.swing.JOptionPane;
+import org.gvsig.andami.plugins.Extension;
+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.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.gui.IView;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * Extension to add support for selecting all the features of a vector layer.
+ *
+ */
+public class SelectAllExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (actionCommand.equals("selection-select-all-table")) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            TableDocument doc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+            if (doc == null) {
+                return;
+            }
+            final FeatureTableDocumentPanel tablePanel = (FeatureTableDocumentPanel) doc.getMainComponent();
+            final FeatureStore fs = tablePanel.getFeatureStore();
+            try {
+                fs.getFeatureSelection().selectAll();
+            } catch (DataException ex) {
+                logger.warn("Can't select rows for table '" + doc.getName() + "'.", ex);
+                application.messageDialog(
+                        i18n.getTranslation("_Cant_select_rows_in_table"),
+                        i18n.getTranslation("_Warning"),
+                        JOptionPane.WARNING_MESSAGE
+                );
+            }
+        }
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        TableDocument doc = (TableDocument) application.getActiveDocument(TableManager.TYPENAME);
+        return doc != null;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectAllExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRefresh.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRefresh.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/extension/TableRefresh.java	(revision 46118)
@@ -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.app.extension;
+
+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.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.app.project.documents.table.gui.GeneralTablePropertiesPageFactory;
+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.exception.DataException;
+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;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extensi�n que refresca los datos de la tabla.
+ *
+ * @author dmartinez
+ */
+public class TableRefresh extends Extension  {
+    private static final Logger LOG = LoggerFactory
+        .getLogger(TableRefresh.class);
+
+    public void initialize() {
+
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        Document doc = application.getActiveDocument(TableManager.TYPENAME);
+        return doc != null;
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#updateUI(java.lang.String)
+     */
+    public void execute(String s) {
+        if ("table-refresh".equalsIgnoreCase(s)) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            Document doc = application.getActiveDocument(TableManager.TYPENAME);
+            if (doc instanceof TableDocument){
+                TableDocument docTable=(TableDocument)doc;
+                try {
+                    docTable.getStore().refresh();
+                } catch (DataException e) {
+                    LOG.warn("Error refreshing table", e);
+                }
+            }
+        }
+	}
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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 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
+ */
+@Deprecated
+public class TableEditCutExtension extends AbstractTableEditExtension {
+    
+    
+    
+    /* Esto no funcionaba y se ha eliminado en el config */
+    
+    
+    
+
+    /**
+     * @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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+
+public class TableRowsOperations extends Extension {
+
+    @Override
+    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);    
+    }
+
+    @Override
+    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) {
+            logger.warn("Can't invert selecction", e);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        FeatureTableDocumentPanel panel = getTableDocument();
+        if( panel == null ) {
+            return false;
+        }
+        FeatureStore store = panel.getFeatureStore();
+        try {
+            if( !store.getFeatureSelection().isAvailable() ) {
+                return false;
+            }
+        } catch (Exception ex) {
+        }                        
+        
+        return  true;
+    }
+
+    @Override
+    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 (Exception e) {
+                logger.warn("Can't check if table has a selecction", e);
+            }
+        }
+        return false;
+        
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.extension;
+
+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.gui.FeatureTableDocumentPanel;
+import org.gvsig.fmap.dal.EditingNotification;
+import org.gvsig.fmap.dal.EditingNotificationManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.tools.util.ArrayUtils;
+
+public class TableEditStartExtension extends AbstractTableEditExtension {
+
+    @Override
+    public void initialize() {
+        super.initialize();
+        IconThemeHelper.registerIcon("action", "table-start-editing", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        this.execute(actionCommand,null);
+    }
+
+    @Override
+    public void execute(String actionCommand, Object[] args) {
+        if ("table-start-editing".equals(actionCommand)) {
+            try {
+                TableDocument doc = (TableDocument)ArrayUtils.get(args,0);
+                if( doc == null ) {
+                    doc = (TableDocument) table.getDocument();
+                }
+                EditingNotificationManager editingNotification = DALSwingLocator.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);
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IWindow v = PluginServices.getMDIManager().getActiveWindow();
+
+        if (v == null) {
+            return false;
+        }
+        if (v instanceof FeatureTableDocumentPanel) {
+            try {
+                FeatureTableDocumentPanel t = (FeatureTableDocumentPanel) v;
+                FeatureStore fs = t.getModel().getStore();
+//                if( ! fs.allowWrite() || !fs.supportReferences() ) {
+                if( !fs.supportReferences() ) {
+                    return false;
+                }
+                return true;
+            } catch (Exception ex) {
+                return false;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    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.344/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.344/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.344/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.344/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 46118)
@@ -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);
+                        csd.setLabelModel(featureStore.getName());
+                	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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.dynobject.DynObject;
+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;
+
+    public FilesystemExplorerTableWizardPanel() {
+        super(true);
+    }
+    
+    @Override
+    public void execute() {
+        executeWizard();
+    }
+
+    @Override
+    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<>(parameters.length);
+
+        Set<String> not_valid = new HashSet<>();
+
+        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() {
+
+                @Override
+                public Window getOwnerWindow() {
+                    return null;
+                }
+
+                @Override
+                public IProjection getViewProjection() {
+                	return null;
+                }
+
+            };
+        }
+        return this.prepareDSContext;
+    }
+
+    @Override
+    public String getTabName() {
+        return PluginServices.getText(this, "File");
+    }
+
+
+    @Override
+    protected void showPropertiesDialog(final DynObject parameters) {
+        DataStoreParametersPanelManager manager = DALSwingLocator.getDataStoreParametersPanelManager();
+        DataStoreParametersPanel panel = manager.createDataStoreParametersPanel(parameters);
+        panel.setExcludeGeometryOptions(true);
+        manager.showPropertiesDialog(parameters, panel);
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,68 @@
+_Real_field=Real field
+_Virtual_field=Virtual field
+_Calculated=Calculated
+_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
+_Copy=Copy
+_Cut=Cut
+_Paste=Paste
+_Rename_column=Rename column
+_Add_column=Add column
+_Refresh=Refresh
+_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
+_Name_too_long=Name is too long
+_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
+_Select_by_attributes_old=Select by attributes (old)
+_Column_information_XcolonX=Column information\:
+_Select_table_duplicates=Select table duplicates
+_Select_all_duplicates=Select all duplicates
+_Select_all_duplicates_in_the_table=Select all duplicates in the table
+_Project_tables=Project tables
+_Show_as_table=Show as table
+_Save_as_DAL_file=Save as DAL file
+_Cant_select_rows_in_table=Can't select rows in table
+_Warning=Warning
+_The_table_is_not_in_edit_mode._You_can_only_add_virtual_fields_and_modify_some_table_data=The table is not in edit mode. You can only add virtual fields and modify some table data
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,68 @@
+_Real_field=Campo real
+_Virtual_field=Campo virtual
+_Calculated=Calculado
+_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
+_Copy=Copiar
+_Cut=Cortar
+_Paste=Pegar
+_Rename_column=Renombrar columna
+_Add_column=A\u00f1adir columna
+_Remove_column=Eliminar columna
+_Add_row=A\u00f1adir fila
+_Refresh=Refrescar
+_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
+_Name_too_long=Nombre demasiado largo
+_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
+_Select_by_attributes_old=Selecci\u00f3n por atributos (antig\u00fco)
+_Column_information_XcolonX=Informaci\u00f3n de columna\:
+_Select_table_duplicates=Seleccionar duplicados tabla
+_Select_all_duplicates=Seleccionar todos los duplicados
+_Select_all_duplicates_in_the_table=Seleccionar todos los duplicados de la tabla
+_Project_tables=Tablas del proyecto
+_Show_as_table=Mostrar como tabla
+_Save_as_DAL_file=Guardar como fichero DAL
+_Cant_select_rows_in_table=No se pueden seleccionar elementos en la tabla
+_Warning=Atenci\u00f3n
+_The_table_is_not_in_edit_mode._You_can_only_add_virtual_fields_and_modify_some_table_data=La tabla no se encuentra en edici\u00f3n. Solo se pueden a\u00f1adir campos virtuales y modificar algunos datos de la tabla
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,835 @@
+<?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 text="Selection/_Select_table_duplicates"
+              position="300200000"
+              is_separator="true"/>
+            
+            <menu
+                name="selection-clear-table"
+                text="Selection/_Clear"
+            />
+
+            <tool-bar name="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_tools">
+                <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">
+                <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">
+                <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">
+                <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="editing">
+                <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="editing">
+                <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">
+                <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">
+                <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">
+                <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">
+                <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">
+                <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">
+                <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">
+                <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-table-duplicates"
+                label="_Select_all_duplicates_in_the_table"
+                tooltip="_Select_all_duplicates_in_the_table"
+                position="300200100"
+                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-table-duplicates"
+                text="Selection/_Select_table_duplicates/_Select_all_duplicates"
+            />
+
+            <tool-bar name="table">
+                <action-tool
+                    name="table-order-asc"
+                />
+                <action-tool
+                    name="table-order-desc"
+                />
+            </tool-bar>
+            <tool-bar name="selection">
+                <action-tool
+                    name="selection-table-duplicates"  dropdowngroup="selection-table-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">
+                <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">
+                <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">
+                <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.SelectByAttributesInTableExtension"
+                   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=""
+            />
+            <action
+                name="selection-by-attributes-table-old"
+                label="_Select_by_attributes_old"
+                tooltip="_Select_by_attributes"
+                position="300400001"
+                action-command="selection-by-attributes-table-old"
+                icon="selection-by-attributes"
+                accelerator=""
+            />
+            <menu
+                name="selection-by-attributes-table-old"
+                text="Selection/_Select_by_attributes_old"
+            />
+            <menu
+                name="selection-by-attributes-table"
+                text="Selection/_Select_by_attributes"
+            />
+
+            <tool-bar name="selection">
+                <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>
+
+
+
+        <extension class-name="org.gvsig.app.extension.ShowTableAsForm"
+                           description="Muestra la tabla en modo formulario."
+                           active="true">
+
+            <action
+                name="table-show-form"
+                label="_Show_form_table"
+                tooltip="_Show_form_table"
+                position="508100000"
+                action-command="table-show-form"
+                icon="table-show-form"
+                accelerator=""
+            />
+
+            <menu
+                name="table-show-form"
+                text="Table/_Show_form"
+            />
+
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.TableRefresh"
+                           description="Refresca los datos de la tabla."
+                           active="true">
+
+            <action
+                name="table-refresh"
+                label="_Refresh"
+                tooltip="_Refresh"
+                position="509950000"
+                action-command="table-refresh"
+                icon="table-refresh"
+                accelerator=""
+            />
+            <menu
+                name="table-refresh"
+                text="Table/_Refresh"
+            />
+
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.SearchByAttributesInTableExtension"
+          description=""
+          active="true">
+
+          <action
+            name="search-by-attributes-table"
+            label="_Search_by_attributes"
+            position="508200000"
+            icon="search-by-attributes-table"
+            tooltip="_Search_by_attributes"
+            action-command="search-by-attributes-table"
+            accelerator=""
+            />
+
+          <menu
+            name="search-by-attributes-table"
+            text="Table/_Search_by_attributes"
+            />
+
+          <tool-bar name="edit">
+            <action-tool name="search-by-attributes-table" />
+          </tool-bar>
+
+        </extension>
+        
+		<extension class-name="org.gvsig.app.extension.SelectAllExtension"
+			description="Extension that allows select all rows of the table."
+			active="true"
+			priority="30">
+		        <action
+			  name="selection-select-all-table"
+			  label="_Select_all"
+			  tooltip="_Select_all"
+			  action-command="selection-select-all-table"
+			  icon="selection-select-all"
+			  position="300350000"
+			  accelerator=""
+			  />
+
+			<menu
+			  name="selection-select-all-table"
+			  text="Selection/SelectAll"
+			  />
+
+			<tool-bar name="selection">
+				<action-tool name="selection-select-all-table"/>
+			</tool-bar>
+		</extension>
+    </extensions>
+    <icon src="gvsig-logo-icon" text="gvSIG"/>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/search-by-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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/search-by-attributes-table.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-show-form.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action/table-show-form.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/resources-plugin/images/action
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,119 @@
+<?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.344</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>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.expressionevaluator.swing.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.expressionevaluator.lib.api</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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/pom.xml	(revision 46118)
@@ -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.344</version>
+    </parent>
+    <modules>
+        <module>org.gvsig.app.document.table.app.mainplugin</module>
+    </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,45 @@
+<?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.png.app.mainplugin</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>PNG file format support</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.png.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.png</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.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <gvsig.package.info.name>Formats: PNG file format support</gvsig.package.info.name>
+        <gvsig.package.info.categories>Formats,Raster</gvsig.package.info.categories>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+
+</project>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:19 CET 2021
+buildNumber=3077
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/java/org/gvsig/png/app/PngExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/java/org/gvsig/png/app/PngExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/java/org/gvsig/png/app/PngExtension.java	(revision 46118)
@@ -0,0 +1,37 @@
+
+package org.gvsig.png.app;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorInterpretation;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorTable;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetLegend;
+import org.gvsig.fmap.dal.file.png.PngLibrary;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public class PngExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        DynClass metadataDefinition = PngLibrary.getMatadataDefinition();
+        ImageIOGetLegend.register(metadataDefinition);
+        ImageIOGetColorInterpretation.register(metadataDefinition); 
+        ImageIOGetColorTable.register(metadataDefinition); 
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.png.app.PngExtension"
+      description=""
+      active="true">
+    </extension>
+  </extensions>
+
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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>org.gvsig:org.gvsig.fmap.dal.file.png</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/org.gvsig.png.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.png.app/pom.xml	(revision 46118)
@@ -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.png.app</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.344</version>
+    </parent>
+  
+    <modules>
+        <module>org.gvsig.png.app.mainplugin</module>
+    </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.newlayer.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.
+
+-->
+<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.csv</include>
+        <include>org.gvsig:org.gvsig.newlayer.prov.jdbc</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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerExtension.java	(revision 46118)
@@ -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.WINDOW);
+		}
+	}
+
+	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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/NewLayerPreferencesExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/main/java/org/gvsig/newlayer/app/extension/package.html	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/src/test/resources/README.txt	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,127 @@
+<?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>${project.artifactId}</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.344</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>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.prov.csv</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.newlayer.prov.jdbc</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>Tools: New layer</gvsig.package.info.name>
+    <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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app/org.gvsig.newlayer.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.newlayer.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=2896

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+    <extension class-name="org.gvsig.shp.saveEncodingExtension"
+      description="Save the current encoding in the '.cpg' file associated to this shape."
+      active="true">
+
+      <action
+        name="layer-modify-save-encoding"
+        label="_Save_encoding"
+        position="601105100"
+        icon="layer-save-encoding"
+        tooltip="_Save_encoding"
+        action-command="layer-modify-save-encoding"
+        accelerator=""
+        />
+
+      <menu
+        name="layer-modify-save-encoding"
+        text="Layer/Modify/_Save_encoding"
+        />
+
+    </extension>
+
+
+  </extensions>
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Translations for language [es]
+_Save_encoding=Guardar codificaci\u00f3n

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Translations for language [en]
+_Save_encoding=Save encoding
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/java/org/gvsig/shp/saveEncodingExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/java/org/gvsig/shp/saveEncodingExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/src/main/java/org/gvsig/shp/saveEncodingExtension.java	(revision 46118)
@@ -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.shp;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.JOptionPane;
+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.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
+
+public class saveEncodingExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        FLayer[] layers = getActiveLayers();
+        if( layers == null ) {
+            return;
+        }
+        List<FLayer> problems = new ArrayList<>();
+        for( FLayer layer : layers ) {
+            if( layer instanceof SingleLayer ) {
+                DataStore ds = ((SingleLayer) layer).getDataStore();
+                try {
+                    ds.invokeDynMethod("saveEncoding", null);
+                } catch (DynMethodNotSupportedException ex) {
+                    // Do nothing
+                } catch (Throwable ex) {
+                    logger.warn("Can't save encoding of layer '" + layer.getName() + "'.", ex);
+                    problems.add(layer);
+                }
+            }
+        }
+        if( !problems.isEmpty() ) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("\n");
+            for( FLayer problem : problems ) {
+                builder.append("- ").append(problem.getName()).append("\n");
+            }
+            ApplicationManager application = ApplicationLocator.getManager();
+            application.messageDialog(
+                "_There_have_been_problems_saving_the_encoding_of_the_following_layers:",
+                new String[]{builder.toString()},
+                "_Problems_saving_encoding_of_layer",
+                JOptionPane.WARNING_MESSAGE,
+                "_Problems_saving_encoding_of_layer"
+            );
+
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        FLayer[] layers = getActiveLayers();
+        if( layers == null ) {
+            return false;
+        }
+        for( FLayer layer : layers ) {
+            try {
+                if( layer instanceof SingleLayer ) {
+                    DataStore ds = ((SingleLayer) layer).getDataStore();
+                    if( ds.hasDynMethod("saveEncoding") ) {
+                        return true;
+                    }
+                }
+            } catch (Throwable ex) {
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        FLayer[] layers = getActiveLayers();
+        if( layers == null ) {
+            return false;
+        }
+        for( FLayer layer : layers ) {
+            try {
+                if( layer instanceof SingleLayer ) {
+                    return true;
+                }
+            } catch (Throwable ex) {
+            }
+        }
+        return false;
+    }
+
+    private FLayer[] getActiveLayers() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return null;
+        }
+        MapContext map = viewdoc.getMapContext();
+        if( !map.hasActiveLayers() ) {
+            return null;
+        }
+        FLayer[] layers = viewdoc.getMapContext().getLayers().getActives();
+        return layers;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,58 @@
+<?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>${project.artifactId}</name>
+  <description>DBF/SHP file format support</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.shp.app</artifactId>
+      <version>2.0.344</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.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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/org.gvsig.shp.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.shp.app.mainplugin</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.shp.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+
+  <modules>
+    <module>org.gvsig.geometry.app.jts</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=2895
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.jts.FlatnessExtension"
+      description="Support flatness preference"
+      active="true">
+    </extension>
+
+  </extensions>
+
+</plugin-config>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/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.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/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.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -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.jts">
+      <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.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.
+
+-->
+<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-core</include>
+        <include>com.vividsolutions:jts-io</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.api</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.jts</include>
+        <include>org.gvsig:org.gvsig.fmap.geometry.operation.jts</include>
+        <include>org.hibernate:hibernate-spatial</include>
+        <include>net.sf:jsi</include>
+        <include>gnu.trove:trove</include>
+        <include>org.gvsig:org.gvsig.expressionevaluator.geometry.lib.api</include>
+        <include>org.gvsig:org.gvsig.expressionevaluator.geometry.lib.impl</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessExtension.java	(revision 46118)
@@ -0,0 +1,45 @@
+package org.gvsig.geometry.app.jts;
+
+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.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/src/main/java/org/gvsig/geometry/app/jts/FlatnessPage.java	(revision 46118)
@@ -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.jts;
+
+
+
+
+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.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts/pom.xml	(revision 46118)
@@ -0,0 +1,112 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.geometry.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.geometry.app.jts</artifactId>
+    <name>${project.artifactId}</name>
+    <description>This project has the geometries library for use in the application based on the use of JTS library</description>
+    <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>
+        <repository>
+            <id>Hibernate Spatial repo</id>
+            <url>http://www.hibernatespatial.org/repository</url>
+            <releases>
+                <enabled>true</enabled>
+                <updatePolicy>never</updatePolicy>
+                <checksumPolicy>warn</checksumPolicy>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</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.jts</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.operation.jts</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.geometry.lib.api</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts-core</artifactId>
+            <version>1.14.0</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts-io</artifactId>
+            <version>1.14.0</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-spatial</artifactId>
+            <version>4.0</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>jsi</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>gnu.trove</groupId>
+            <artifactId>trove</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <gvsig.package.info.name>Geometry Support (JTS)</gvsig.package.info.name>
+        <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>
+        <gvsig.install.plugin>true</gvsig.install.plugin>
+    </properties>
+
+</project>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometry.app/org.gvsig.geometry.app.jts
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:19 CET 2021
+buildNumber=3077
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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>org.gvsig:org.gvsig.fmap.dal.file.jp2</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/java/org/gvsig/jp2/app/JP2Extension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/java/org/gvsig/jp2/app/JP2Extension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/src/main/java/org/gvsig/jp2/app/JP2Extension.java	(revision 46118)
@@ -0,0 +1,37 @@
+
+package org.gvsig.jp2.app;
+
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorInterpretation;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetColorTable;
+import org.gvsig.fmap.dal.file.imageio.legend.ImageIOGetLegend;
+import org.gvsig.fmap.dal.file.jp2.JP2Library;
+import org.gvsig.tools.dynobject.DynClass;
+
+
+public class JP2Extension extends Extension {
+
+    @Override
+    public void initialize() {
+        DynClass metadataDefinition = JP2Library.getMatadataDefinition();
+        ImageIOGetLegend.register(metadataDefinition);
+        ImageIOGetColorInterpretation.register(metadataDefinition); 
+        ImageIOGetColorTable.register(metadataDefinition); 
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,40 @@
+<?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.jp2.app.mainplugin</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>JPEG2000 file format support</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.jp2.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.jp2</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.raster.legend.imageio</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <gvsig.package.info.name>Formats: JPEG2000 file format support</gvsig.package.info.name>
+        <gvsig.package.info.categories>Formats,Raster</gvsig.package.info.categories>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/org.gvsig.jp2.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.jp2.app/pom.xml	(revision 46118)
@@ -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.jp2.app</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.344</version>
+    </parent>
+  
+    <modules>
+        <module>org.gvsig.jp2.app.mainplugin</module>
+    </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.
+
+-->
+<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">
+                    <action
+                        name="create-data-transform"
+                        label="_Create_data_transform"
+                        tooltip="Create_a_data_transform"
+                        position="901000100"
+                        action-command="CREATE"
+                        icon="create-data-transform"
+                        accelerator=""
+                    />
+                    <menu
+                        name="create-data-transform" 
+                        text="tools/feature_transform/create"
+                    />
+		</extension>
+		<extension class-name="org.gvsig.daltransform.app.mainplugin.DataTransformExtension"
+			description="View a transform"
+			active="true">
+                    <action
+                        name="show-data-transforms"
+                        label="_Show_data_transforms"
+                        tooltip="_Show_existing_data_transforms"
+                        position="901000200"
+                        action-command="VIEW"
+                        icon="show-data-transforms"
+                        accelerator=""
+                    />
+                    <menu 
+                        name="show-data-transforms"
+                        text="tools/feature_transform/view"
+                    />
+		</extension>
+	</extensions>	
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,2 @@
+org.gvsig.daltransform.DataTransformLibrary
+org.gvsig.daltransform.impl.DefaultDataTransformLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformManager.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/app/mainplugin/DataTransformExtension.java	(revision 46118)
@@ -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):
+ * 2009 {Iver T.I.}   {Task}
+ */
+
+package org.gvsig.daltransform.app.mainplugin;
+
+
+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.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.ToolsSwingLocator;
+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();
+
+                
+                WindowManager wm = ToolsSwingLocator.getWindowManager();
+                wm.showWindow(
+                        dialog, 
+                        Messages.getText("view_transforms"),
+                        WindowManager.MODE.WINDOW
+                );
+            }
+
+    }
+
+    /*
+     * (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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformLibrary.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/impl/DefaultDataTransformManager.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/CreateWizardException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDataTransformList.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultJDialogDataTransformList.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2020 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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.components;
+
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.tools.dataTypes.DataType;
+
+/**
+ * @author gvSIG Team
+ */
+public class NumericFeatureTypeAttributesCombo extends FeatureTypeAttributesCombo{
+
+    private static final long serialVersionUID = -1694488470656611290L;
+
+    @Override
+	public void addFeatureAttributeDescriptor(
+			FeatureAttributeDescriptor featureAttributeDescriptor) {
+                DataType type = featureAttributeDescriptor.getDataType();
+		if ( type.isNumeric() ){
+                    super.addFeatureAttributeDescriptor(featureAttributeDescriptor);
+		}
+	}	
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectDataStoreWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformSelectionAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DataTransformWizardContainer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/AbstractDataTransformWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/DefaultDataTransformWizard.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/SelectTransformWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/impl/LoadLayerWizardPanel.java	(revision 46118)
@@ -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.
+ */
+/*
+ * 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 {
+		    // En el m�todo createFeatureStoreTransform de la siguiente l�nea
+		    // no solo se creaba la transformaci�n sino que se a�ad�a.
+		    // Parece que era porque se necesita conocer el resultado
+		    // en el updateGuiForTable de m�s abajo.
+		    // He quitado la aplicaci�n de all� porque despu�s, en el performAction
+		    // se vuelve a crear, y adem�s se aplica, con lo se estaba aplicando tres veces.
+			transform = featureTransformGui.createFeatureStoreTransform(featureStore);
+			// La a�ado aqu�, pero la quito en el finally. Ver (*)
+			featureStore.getTransforms().add(transform);
+
+			if (getDataTransformWizard().isFeatureStoreLayer()){
+				updateGuiForLayer(transform);
+			}else{
+				updateGuiForTable(transform);
+			}
+		} catch (DataException e) {
+			logger.error("Error creating the transformation", e);
+		} finally {
+		    // (*)
+		    if(transform!=null){
+		        featureStore.getTransforms().remove(transform);
+		    }
+		}
+	}
+
+	/**
+	 * 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizard.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/DataTransformGui.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDataTransformList.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/swing/JDialogDataTransformList.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLocator.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/NotRegisteredTransformException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/src/main/java/org/gvsig/daltransform/DataTransformLibrary.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/pom.xml	(revision 46118)
@@ -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.344</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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:17 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:17 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/AddEventThemeExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformGui.java	(revision 46118)
@@ -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.
+ */
+/*
+ * 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.setValues(
+                    featureStore,
+                    panel.getGeometryName(),
+                    panel.getXName(),
+                    panel.getYName(),
+                    panel.getProjection()
+                );
+		// Quito la siguiente l�nea, que a�ada la transformaci�n
+		// el que llama a este m�todo cuando se considere conveniente.
+//        featureStore.getTransforms().add(transform);
+		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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/daltransform/EventThemeTransformPanel.java	(revision 46118)
@@ -0,0 +1,303 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2022 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+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.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ * @author gvSIG Team
+ */
+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());
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    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);
+            ToolsSwingLocator.getWindowManager().showWindow(
+                    panel.asJComponent(),
+                    ToolsLocator.getI18nManager().getTranslation("selecciona_sistema_de_referencia"),
+                    WindowManager.MODE.DIALOG
+            );
+            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();
+    }
+
+    @Override
+    public void updatePanel() {
+        featureTypeCombo.addFeatureStore(getFeatureStore());
+        if (nameText != null) {
+            nameText.setText(this.suggestedGeomFieldName(getFeatureStore()));
+        }
+    }
+
+    public IProjection getProjection() {
+        return CRSFactory.getCRS(projectionText.getText());
+    }
+
+    private String suggestedGeomFieldName(FeatureStore fsto) {
+
+        if (fsto == null) {
+            return "";
+        }
+
+        FeatureType ft = fsto.getDefaultFeatureTypeQuietly();
+        if (ft == null) {
+            logger.info("Unable to suggest geom field name, can't access to the feature type.");
+            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;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.app.eventtheme.dal.feature;
+
+import java.util.Arrays;
+import javax.json.JsonObject;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.cresques.cts.IProjection;
+
+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.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.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.json.JsonObjectBuilder;
+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.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.
+     * @param projection
+     * @throws DataException
+     */
+    public void setValues(
+        FeatureStore store,
+        String geometryFieldName,
+        String xFieldName,
+        String yFieldName,
+        IProjection projection) throws DataException {
+
+        setFeatureStore(store);
+        this.xFieldName = xFieldName;
+        this.yFieldName = yFieldName;
+        this.projection = projection;
+        if( StringUtils.isEmpty(geometryFieldName) ) {
+            this.geometryFieldName = "the_geom";
+        } else {
+            this.geometryFieldName = geometryFieldName;
+        }
+    }
+
+    @Override
+    public void setUp() throws Exception {
+
+        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 | GeometryTypeNotValidException e) {
+                throw new InitializeException(e);
+            }
+            attributeDescriptor.setSRS(projection);
+            attributeDescriptor.setFeatureAttributeEmulator(new FeatureAttributeEmulator() {
+                @Override
+                public Object get(Feature feature) {
+                    Geometry point = null;
+                    Object xval = feature.get(xFieldName);
+                    Object yval = feature.get(yFieldName);
+                    if( xval == null || yval == null ) {
+                        LOGGER.info("Found row with null coordinates in event theme (created null geometry)");
+                        return null;
+                    } else {
+                        try {
+                            point = geometryManager.createPoint(
+                                    new Double(xval.toString()),
+                                    new Double(yval.toString()),
+                                    SUBTYPES.GEOM2D);
+                        } catch (CreateGeometryException ex) {
+                        }
+                        return point;
+                    }
+                }
+
+                @Override
+                public void set(EditableFeature feature, Object value) {
+                    throw new UnsupportedOperationException("Not supported yet.");
+                }
+
+                @Override
+                public boolean allowSetting() {
+                    return false;
+                }
+
+                @Override
+                public String[] getRequiredFieldNames() {
+                    return new String[] { xFieldName, yFieldName };
+                }
+
+                @Override
+                public JsonObject toJson() {
+                    return null;
+                }
+
+                @Override
+                public JsonObjectBuilder toJsonBuilder() {
+                    return null;
+                }
+
+                @Override
+                public void fromJson(JsonObject json) {
+                }
+            });
+        }
+
+        try {
+            /*
+             * creates and updates envelope with all features
+             */
+            initEnvelope(this.getFeatureStore(), 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 theStore, int max_feats) throws CreateEnvelopeException {
+
+        envelope = geometryManager.createEnvelope(SUBTYPES.GEOM2D);
+        FeatureSet fset = null;
+        DisposableIterator diter = null;
+        Feature feat = null;
+        try {
+            fset = theStore.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;
+    }
+
+    @Override
+    public void applyTransform(Feature source, EditableFeature target)
+        throws DataException {        
+        target.copyFrom(source);
+    }
+
+    /**
+     * 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());
+    }
+
+    @Override
+    public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
+        return this.originalFeatureType;
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state)
+        throws PersistenceException {
+        super.loadFromState(state);
+        geometryFieldName = state.getString("geometryFieldName");
+        xFieldName = state.getString("xFieldName");
+        yFieldName = state.getString("yFieldName");
+        projection = (IProjection) state.get("projection");
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public boolean hasDynValue(String name) {
+        return ((DataStore.METADATA_CRS.equals(name))
+            || (DataStore.METADATA_ENVELOPE.equals(name)));
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/java/org/gvsig/app/eventtheme/EventThemeTransformLibrary.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_zh.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_gl.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_ca.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_pt.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_cs.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_fr.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_de.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_eu.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/i18n/text_it.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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">
+				<action-tool name="view-event-theme-add"/>
+			</tool-bar>
+		
+		</extension>			
+	</extensions>
+	
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.app.eventtheme.EventThemeTransformLibrary
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml	(revision 46118)
@@ -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/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.344</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>
+
+  <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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.eventtheme
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinToolExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/JoinTransformGui.java	(revision 46118)
@@ -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.
+ */
+/*
+ * 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.setValues(
+                    featureStore,
+                    secondDataStoreWizard.getSelectedFeatureStore(),
+                    parametersWizard.getKeyAttr1(),
+                    parametersWizard.getkeyAtrr2(),
+                    parametersWizard.getPrefix1(),
+                    parametersWizard.getPrefix2(),
+                    parametersWizard.getAttributes()
+		);
+	    // Quito la siguiente l�nea, que a�ada la transformaci�n
+        // el que llama a este m�todo cuando se considere conveniente.
+//        featureStore.getTransforms().add(transform);
+
+		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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectSecondDataStoreWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/daltransform/SelectParametersWizardPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/RemoveTableUnion.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/JoinTransformLibrary.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 java.util.Objects;
+import java.util.logging.Level;
+import org.apache.commons.lang3.StringUtils;
+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.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.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionContext;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+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.observer.Observer;
+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 final 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 final 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 final Map<String, String> store2NamesMap;
+
+    private JoinTransformEvaluator evaluator = null;
+
+    private FeatureType originalFeatureType;
+
+    private String[] attrsForQuery;
+
+    private String prefix1;
+
+    private String prefix2;
+    
+    private CoercionContext attr1Context;
+
+    /**
+     * A default constructor
+     */
+    public JoinTransform() {
+        store1NamesMap = new HashMap<>();
+        store2NamesMap = 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 prefix1
+     * @param prefix2
+     *
+     * @param attrs names of the attributes in store2 that will be joined to
+     * store1.
+     */
+    public void setValues(FeatureStore store1, FeatureStore store2,
+        String keyAttr1, String keyAttr2, String prefix1, String prefix2,
+        String[] attrs) {
+
+        if( store1 == store2 ) {
+            throw new IllegalArgumentException("store1 == store2");
+        }
+
+        this.setFeatureStore(store1);
+        this.store2 = store2;
+        this.keyAttr1 = keyAttr1;
+        this.keyAttr2 = keyAttr2;
+        this.prefix1 = prefix1; // TODO
+        this.prefix2 = prefix2; // TODO
+        this.attrs = attrs;
+        this.attr1Context = store1.getDefaultFeatureTypeQuietly().getAttributeDescriptor(this.keyAttr1).getCoercionContext();
+
+    }
+
+    private boolean containsIgnoreCase(List<String>l, String item) {
+        for (String x : l) {
+            if( StringUtils.equalsIgnoreCase(item, x) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    @Override
+    public void setUp() throws Exception {
+
+        // 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);
+        }
+
+        List<String> list1 = new ArrayList<>();
+        for (String attr : this.attrs) {
+            if( !containsIgnoreCase(list1, attr) ) {
+                list1.add(attr);
+            }
+        }
+        if( !containsIgnoreCase(list1, keyAttr2 ) ) {
+            list1.add(keyAttr2);
+        }
+        List<String> list2 = new ArrayList<>(list1);
+        for (String attrname : list1) {
+            FeatureAttributeDescriptor attrdesc = featureType2.getAttributeDescriptor(attrname);
+            String[] requiredAttrs = attrdesc.getRequiredFieldNames();
+            if( requiredAttrs!=null ) {
+                for (String requiredAttr : requiredAttrs) {
+                    if( !containsIgnoreCase(list2, requiredAttr) ) {
+                        list2.add(requiredAttr);
+                    }
+                }
+            }
+        }
+        this.attrsForQuery = (String[]) list2.toArray(new String[]{});
+//        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]);
+
+        if( store2.getIndexes().getFeatureIndex(keyAttr2)==null ) {
+            store2.createIndex(featureType2, keyAttr2, keyAttr2, (Observer)null);
+        }
+       
+    }
+
+    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());
+        editableFeatureAttributeDescriptor.setScale(featureAttributeDescriptor.getScale());
+        if( featureAttributeDescriptor.getType() == DataTypes.GEOMETRY ) {
+            editableFeatureAttributeDescriptor.setGeometryType(featureAttributeDescriptor.getGeomType());
+        }
+        // keep correspondence between original name and transformed name
+        storeMap.put(featureAttributeDescriptor.getName(), attName);
+    }
+
+    /**
+     *
+     *
+     * @param source
+     *
+     * @param target
+     *
+     * @throws DataException
+     */
+    @Override
+    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), this.attr1Context);
+
+        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.fastIterator();
+            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 && !attr.isReadOnly() ) {
+                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 {
+                    if( !attrTrg.isReadOnly() ) {
+                        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.warn("Can't access to the feature type to build the evaluator.", e);
+                throw new RuntimeException("Can't access to the feature type to build the evaluator.", 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 Coercion coercion;
+        private CoercionContext context;
+
+        //		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, CoercionContext context) {
+            this.value = value;
+            this.coercion = null;
+            this.context = context;
+            
+            if (this.value!=null) {
+                DataType dataType = ToolsLocator.getDataTypesManager().getDataType(value.getClass());
+                if (dataType!=null) {
+                    this.coercion = dataType.getCoercion();
+                }
+                String qt = this.isNumeric ? "" : "'";
+                this.sql = this.attribute + " = " + qt + this.value + qt;
+            } else {
+                this.sql = this.attribute + " = null";
+            }
+            this.info = new EvaluatorFieldsInfo();
+            this.info.addMatchFieldValue(this.attribute, value);
+        }
+
+        @Override
+        public Object evaluate(EvaluatorData arg0) throws EvaluatorException {
+            Object curValue = arg0.getDataValue(attribute);
+            if( curValue == null ) {
+                return value == null;
+            }
+            if ( value == null) {
+                return false;
+            }
+            Object coerceValue;
+            if (this.coercion == null) {
+                return StringUtils.equals(Objects.toString(curValue), Objects.toString(value));
+            }
+            try {
+                coerceValue = this.coercion.coerce(curValue, this.context);
+                return coerceValue.equals(value);
+            } catch (CoercionException ex) {
+                return StringUtils.equals(Objects.toString(curValue), Objects.toString(value));
+            }
+        }
+
+        @Override
+        public String getSQL() {
+            return this.sql;
+        }
+
+        @Override
+        public String getDescription() {
+            return "Evaluates join transform match";
+        }
+
+        @Override
+        public String getName() {
+            return "JoinTransformEvaluator";
+        }
+
+        @Override
+        public EvaluatorFieldsInfo getFieldsInfo() {
+            return this.info;
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public FeatureType getSourceFeatureTypeFrom(FeatureType arg0) {
+        return originalFeatureType;
+    }
+
+    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);
+        }
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        super.loadFromState(state);
+        store2 = (FeatureStore) state.get("store2");
+        keyAttr1 = state.getString("keyAttr1");
+        keyAttr2 = state.getString("keyAttr2");
+        prefix1 = state.getString("prefix1");
+        prefix2 = state.getString("prefix2");
+        attrs = (String[]) state.getArray("attrs", String.class);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/java/org/gvsig/app/join/utils/TransformUtils.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1 @@
+org.gvsig.app.join.JoinTransformLibrary
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml	(revision 46118)
@@ -0,0 +1,118 @@
+<?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.344</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>
+
+  <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.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:17 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app/org.gvsig.daltransform.app.join
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**





Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.daltransform.app
___________________________________________________________________
Added: svn:ignore
   + .classpath
target/**
.project
.directory
.settings/**
.settings
target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/pom.xml	(revision 46118)
@@ -0,0 +1,14 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.raster.tools.app</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <modules>
+        <module>org.gvsig.raster.tools.app.mainplugin</module>
+    </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=78
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,99 @@
+#Translations for language [es]
+#Tue May 12 10:57:39 CEST 2009
+_columnXcolonX=Columna:
+_rowXcolonX=Fila:
+_pixel_coordinates=Coordenadas pixel
+_real_coordinates=Coordenadas reales
+_resolution=Resoluci\u00f3n
+_resolution_selection_mode=Modo de selecci\u00f3n de la resolucion
+_cell_size=Tama\u00f1o de celda
+_interpolation_method=M\u00e9todo de interpolaci\u00f3n
+_cell=Celda
+_cell_width=Ancho de la celda
+_cell_height=Alto de la celda
+_width=Ancho
+_height=Alto
+_raster_width=Ancho del raster
+_raster_height=Alto del raster
+_restore=Restablecer
+_bands=Bandas
+_other_options=Otras opciones
+_layers_names=Nombre de las capas
+_one_layer_per_band=Una capa por banda
+_save_to=Guardar en
+_apply=Aplicar
+_accept=Aceptar
+_cancel=Cancelar
+_up=Subir
+_down=Bajar
+_folder=Carpeta
+_selected=Seleccionada
+_coordinates=Coordenadas
+_load=Cargar
+_folder_selection=Selecci\u00f3n de carpeta
+_raster_size=Tama\u00f1o del r\u00e1ster
+_nearest_neighbour=Vecino m\u00e1s pr\u00f3ximo
+_bilinear=Bilineal
+_inverse_distance=Inversa de la distancia
+_bicubic_spline=SPline bic\u00fabico
+_bspline=B-SPline
+_number=N\u00ba
+_band_number=N\u00ba de la banda
+_band_name=Nombre de la banda
+_view_selection=Selecci\u00f3n de la vista
+_full_layer=Capa completa
+_rois=Regiones de inter\u00e9s
+_update_envelope_from_pixels=Actualizar las coordenadas reales a partir de las coordenadas en pixeles
+_newlayer=NuevaCapa
+_cant_create_the_envelope_with_this_coordinates_XcolonX_XparenthesisX_XUL1X_XUL2X_XdashX_XDR1X_XDR2X_XparenthesisX=No se ha podido crear una envolvente con estas coordenadas: ({0},{1} - {2},{3})
+_there_is_no_previously_saved_envelope=No hay una envolvente guardada anteriormente.
+Clip=Recortar
+_import_cell_width_from_view=Importar ancho de celda de la vista
+_the_resulting_raster_will_have_an_estimated_size_of_XSIZEX_MB_are_you_sure_XquestionX=El raster resultante tendr\u00e1 un tama\u00f1o estimado de {0}MB. \u00bfEst\u00e1 usted seguro?
+Select_raster_layer=Seleccionar capa raster
+Zoom_To_Raster_Layer_Resolution=Zoom a la resoluci\u00f3n del raster
+Assign_projection=Asignar projecci\u00f3n
+_cant_save_prj_file=No ha sido posible guardar el archivo prj
+_the_content_of_the_file_XFILEX_will_be_replaced_do_you_want_to_continue=El contenido del archivo {0} ser\u00e1 sustitu\u00eddo. \u00bfDesea continuar?
+Export_view_to_image=Exportar vista a archivo de imagen
+_view_extent=Extensi\u00f3n de la vista
+_source=Fuente
+_displayed_data=Datos visualizados
+_full=Completo
+_normal=Normal
+_accumulated=Acumulado
+_logarithmic=Logar\u00edtmico
+_all_bands=Todas las bandas
+_select_all_bands=Select all bands
+_unselect_all_bands=Deseleccionar todas las bandas
+_clear_bands=Limpiar las bandas
+_export_table=Exportar tabla
+_remove_tails=Eliminar colas
+_show_statistics=Mostrar estad\u00edsticas
+_number_of_values=N\u00ba de valores
+_maximum=M\u00e1ximo
+_second_maximum=2\u00ba M\u00e1ximo
+_minimum=M\u00ednimo
+_second_minimum=2\u00ba M\u00ednimo
+_mean=Media
+_median=Mediana
+_variance=Varianza
+_pixel_selection=Selecci\u00f3n por p\u00edxeles
+_print_selection=Selecci\u00f3n para impresora
+_width_cm=Ancho (cm)
+_height_cm=Alto (cm)
+_scale_1_XcolonX=Escala 1:
+_resolution_dpi=Resoluci\u00f3n (dpi)
+_result_size_raw_XCOLONX=Tama\u00f1o del resultado (raw):
+_pixel_size=Tama\u00f1o de celda
+Export_View_Clip=Exportar recorte de la vista
+Export_View_Clip_To_Raster=Exportar recorte de la vista a raster
+view_clip=Recorte de la vista
+activate_tool=Activar herramienta
+save-raster-layer=Guardar capa raster
+Save_Raster_Layer=Guardar capa raster
+_error_exporting_buffer=Error exportando el buffer
+convert_raster_layer_type=Convertir tipo de datos de capa raster
+Convert_Raster_Layer_Type=Convertir tipo de datos de capa raster
+error_creating_buffer=Error creando el buffer
+the_destination_buffer_will_lose_data_relative_to_the_source_buffer_the_source_buffer_will_not_be_modified_do_you_wish_to_continue=El buffer de destino perder\u00e1 datos respecto al buffer fuente.\nEl buffer fuente no sufrir\u00e1 modificaciones.\n\u00bfDesea continuar?
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,100 @@
+#Translations for language [en]
+#Tue May 12 10:57:38 CEST 2009
+_columnXcolonX=Column:
+_rowXcolonX=Row:
+_pixel_coordinates=Pixel coordinates
+_real_coordinates=Real coordinates
+_resolution=Resolution
+_resolution_selection_mode=Resolution selection mode
+_cell_size=Cell size
+_interpolation_method=Interpolation method
+_cell=Cell
+_cell_width=Cell width
+_cell_height=Cell height
+_width=Width
+_height=Height
+_raster_width=Raster width
+_raster_height=Raster height
+_restore=Restore
+_bands=Bands
+_other_options=Other options
+_layers_names=_layers_name
+_one_layer_per_band=One layer per band
+_save_to=Save to
+_apply=Apply
+_accept=Accept
+_cancel=Cancel
+_up=Up
+_down=Down
+_folder=Folder
+_selected=Selected
+_coordinates=Coordinates
+_load=Load
+_folder_selection=Folder selection
+_raster_size=Raster size
+_nearest_neighbour=Nearest neighbour
+_bilinear=Bilinear
+_inverse_distance=Inverse distance
+_bicubic_spline=Bicubic spline
+_bspline=B-SPline
+_number=Number
+_band_number=Band number
+_band_name=Band name
+_view_selection=View selection
+_full_layer=Full layer
+_rois=ROI
+_update_envelope_from_pixels=Update envelope from pixels
+_newlayer=NewLayer
+_cant_create_the_envelope_with_this_coordinates_XcolonX_XparenthesisX_XUL1X_XUL2X_XdashX_XDR1X_XDR2X_XparenthesisX=Can't create the envelope with this coordinates: ({0},{1} - {2},{3})
+_there_is_no_previously_saved_envelope=There is no previously saved envelope
+Clip=Clip
+_import_cell_width_from_view=Import cell width from view
+_the_resulting_raster_will_have_an_estimated_size_of_XSIZEX_MB_are_you_sure_XquestionX=The resulting raster will have an estimated size of {0}MB. Are you sure?
+Select_raster_layer=Select raster layer
+Zoom_To_Raster_Layer_Resolution=Zoom to raster layer resolution
+Assign_projection=Assign projection
+_cant_save_prj_file=Can't save prj file
+_the_content_of_the_file_XFILEX_will_be_replaced_do_you_want_to_continue=The content of file {0} will be replaced. Do you want to continue?
+Export_view_to_image=Export view to image file
+_view_extent=View Extent
+_source=Source
+_displayed_data=Displayed data
+_full=Full
+_normal=Normal
+_accumulated=Accumulated
+_logarithmic=Logarithmic
+_all_bands=All bands
+_select_all_bands=Select all bands
+_clear_bands=Clear bands
+_select_all_bands=Select all bands
+_unselect_all_bands=Unselect all bands
+_export_table=Exportar tabla
+_remove_tails=Remove tails
+_show_statistics=Show statistics
+_number_of_values=Number of values
+_maximum=Maximum
+_second_maximum=2nd Maximum
+_minimum=Minimum
+_second_minimum=2nd Minimum
+_mean=Mean
+_median=Median
+_variance=Variance
+_pixel_selection=Pixels selection
+_print_selection=Selection for printer
+_width_cm=Width (cm)
+_height_cm=Height (cm)
+_scale_1_XcolonX=Scale 1:
+_resolution_dpi=Resolution (dpi)
+_result_size_raw_XCOLONX=Result size (raw):
+_pixel_size=Pixel size
+Export_View_Clip=Export view clip
+Export_View_Clip_To_Raster=Export view clip to raster
+view_clip=View clip
+activate_tool=Activate tool
+save-raster-layer=Save raster layer
+Save_Raster_Layer=Save raster layer
+_error_exporting_buffer=Error exporting buffer
+convert_raster_layer_type=Convert raster layer type
+Convert_Raster_Layer_Type=Convert raster layer type
+error_creating_buffer=Error creating buffer
+the_destination_buffer_will_lose_data_relative_to_the_source_buffer_the_source_buffer_will_not_be_modified_do_you_wish_to_continue=The destination buffer will lose data relative to the source buffer.\nThe source buffer will not be modified.\nDo you wish to continue?
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <depends plugin-name="org.gvsig.raster.app.mainplugin" />
+  <libraries library-dir="lib" />
+  <resourceBundle name="text" />
+  <extensions>
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.ClipExtension"
+      description="Creates a layer from other layer clip." active="true"
+      priority="25">
+      <action name="clip" label="Clip" tooltip="Clip" action-command="clip"
+        icon="layer-clip-raster" position="602000000" />
+
+      <menu name="clip" text="Layer/Clip" />
+      <tool-bar name="layer">
+        <action-tool name="clip" />
+      </tool-bar>
+
+    </extension>
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.HistogramExtension"
+      description="Show the histogram of the layer." active="true"
+      priority="25">
+      <action name="histogram" label="Histogram" tooltip="Histogram" action-command="histogram"
+        icon="layer-histogram" position="602000010" />
+
+      <menu name="histogram" text="Layer/Histogram" />
+      <tool-bar name="layer">
+        <action-tool name="histogram" />
+      </tool-bar>
+
+    </extension>
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.SelectRasterLayerExtension"
+      description="Selects the top visible raster layer at the clicked point." active="true"
+      priority="30">
+      <action name="select-raster-layer" label="Select_raster_layer" tooltip="Select_raster_layer" action-command="select-raster-layer"
+        icon="select-raster-layer" position="650300010" />
+
+      <menu name="select-raster-layer" text="View/Select_raster_layer" />
+      <tool-bar name="view">
+        <selectable-tool name="select-raster-layer" />
+      </tool-bar>
+
+    </extension>
+  <extension class-name="org.gvsig.raster.tools.app.mainplugin.ZoomToRasterLayerResolutionExtension"
+    description="Zoom to raster layer resolution." active="true" priority="35">
+    <action name="zoom-to-raster-layer-resolution"
+      label="Zoom_To_Raster_Layer_Resolution"
+      tooltip="Zoom_To_Raster_Layer_Resolution"
+      action-command="zoom-to-raster-layer-resolution"
+      icon="zoom-to-raster-layer-resolution"
+      position="650100950" />
+
+    <menu name="zoom-to-raster-layer-resolution" text="View/Navigation/Zoom_To_Raster_Layer_Resolution" />
+    <tool-bar name="view_navigation">
+      <selectable-tool name="zoom-to-raster-layer-resolution" />
+    </tool-bar>
+
+  </extension>
+
+  <extension class-name="org.gvsig.raster.tools.app.mainplugin.ExportViewToImageExtension"
+    description="Export view to image." active="true" priority="35">
+    <action name="export-view-to-image"
+      label="Export_view_to_image"
+      tooltip="Export_view_to_image"
+      action-command="export-view-to-image"
+      icon="view-export-image"
+      position="650800000" />
+
+    <menu name="export-view-to-image" text="View/export/Export_view_to_image" />
+    <tool-bar name="view">
+      <action-tool name="export-view-to-image" />
+    </tool-bar>
+
+  </extension>
+
+
+  <extension class-name="org.gvsig.raster.tools.app.mainplugin.AssignProjectionExtension"
+    description="Assign projection." active="true" priority="35">
+    <action name="assign-projection"
+      label="Assign_projection"
+      tooltip="Assign_projection"
+      action-command="assign-projection"
+      icon="setviewprojection-raster-icon"
+      position="602001000" />
+
+    <menu name="assign-projection" text="Layer/Assign_projection" />
+    <tool-bar name="layer">
+      <action-tool name="assign-projection" />
+    </tool-bar>
+
+  </extension>
+
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.ViewClipExtension"
+      description="Export a clip from a view to image raster." active="true"
+      priority="25">
+      <action name="view-clip" label="Export_View_Clip" tooltip="Export_View_Clip_To_Raster" action-command="view-clip"
+        icon="view-clip-icon" position="650300020" />
+
+      <menu name="view-clip" text="View/Export_View_Clip" />
+      <tool-bar name="view">
+        <action-tool name="view-clip" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.SaveRasterLayerExtension"
+      description="Save raster layer to selected format." active="true"
+      priority="25">
+      <action name="save-raster-layer" label="Save_Raster_Layer" tooltip="Save_Raster_Layer" action-command="save-raster-layer"
+        icon="layer-saveas" position="602000020" />
+
+      <menu name="save-raster-layer" text="Layer/Save_Raster_Layer" />
+      <tool-bar name="layer">
+        <action-tool name="save-raster-layer" />
+      </tool-bar>
+
+    </extension>
+
+
+    <extension class-name="org.gvsig.raster.tools.app.mainplugin.ConvertRasterLayerTypeExtension"
+      description="Save raster layer converting to selected type." active="true"
+      priority="25">
+      <action name="convert-raster-layer-type" label="Convert_Raster_Layer_Type" tooltip="Convert_Raster_Layer_Type" action-command="convert-raster-layer-type"
+        icon="convert-raster-layer-type-icon" position="602000030" />
+
+      <menu name="convert-raster-layer-type" text="Layer/Convert_Raster_Layer_Type" />
+      <tool-bar name="layer">
+        <action-tool name="convert-raster-layer-type" />
+      </tool-bar>
+
+    </extension>
+
+
+  </extensions>
+</plugin-config>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/loadparameters-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/loadparameters-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/roi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/roi.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/round-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/round-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/upleft.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/fullextent-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/fullextent-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/selecttool-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/selecttool-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/downright.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/down.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/saveparameters-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/saveparameters-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/viewextent-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/clip/viewextent-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/view-export-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/view-export-image.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-saveas.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-saveas.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/zoom-to-raster-layer-resolution.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/zoom-to-raster-layer-resolution.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/convert-raster-layer-type-icon.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/convert-raster-layer-type-icon.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-clip-raster.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-clip-raster.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/view-clip-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/view-clip-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-histogram.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/layer-histogram.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/select-raster-layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/select-raster-layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/setviewprojection-raster-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/action/setviewprojection-raster-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/cursor/zoom-to-raster-layer-resolution-cursor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/cursor/zoom-to-raster-layer-resolution-cursor.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/cursor/select-raster-layer-cursor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/resources-plugin/images/cursor/select-raster-layer-cursor.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -0,0 +1,39 @@
+<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.raster.tools.lib.api</include>
+        <include>org.gvsig:org.gvsig.raster.tools.lib.impl</include>
+        <include>org.gvsig:org.gvsig.raster.tools.swing.api</include>
+        <include>org.gvsig:org.gvsig.raster.tools.swing.impl</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ClipExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ClipExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ClipExtension.java	(revision 46118)
@@ -0,0 +1,212 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.tools.lib.api.RasterClip;
+import org.gvsig.raster.tools.lib.api.RasterToolsLocator;
+import org.gvsig.raster.tools.lib.api.exceptions.ClipException;
+import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
+import org.gvsig.raster.tools.swing.api.clip.ClipPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ClipExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(ClipExtension.class);
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-clip-raster", this);
+        IconThemeHelper.registerIcon("clip", "downright", this);
+        IconThemeHelper.registerIcon("clip", "upleft", this);
+        IconThemeHelper.registerIcon("clip", "fullextent-icon", this);
+        IconThemeHelper.registerIcon("clip", "viewextent-icon", this);
+        IconThemeHelper.registerIcon("clip", "roi", this);
+        IconThemeHelper.registerIcon("clip", "round-icon", this);
+        IconThemeHelper.registerIcon("clip", "selecttool-icon", this);
+        IconThemeHelper.registerIcon("clip", "loadparameters-icon", this);
+        IconThemeHelper.registerIcon("clip", "saveparameters-icon", this);
+        IconThemeHelper.registerIcon("clip", "up", this);
+        IconThemeHelper.registerIcon("clip", "down", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (StringUtils.equalsIgnoreCase(actionCommand, "clip")) {
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
+            if (layers[0] instanceof RasterLayer) {
+                RasterLayer layer = (RasterLayer) layers[0];
+
+                final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+                final RasterToolsSwingManager manager = RasterToolsSwingLocator.getSwingManager();
+                final I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+                final ClipPanel panel;
+                try {
+                    panel = manager.createClipPanel();
+                    panel.asJComponent().setPreferredSize(new Dimension(500, 250));
+                    panel.set(layer);
+                    panel.set(mapControl);
+                } catch (RasterToolException e2) {
+                    logger.error("Error creating panel", e2);
+                    JOptionPane.showMessageDialog(null,
+                        new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
+                            .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
+                        JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+
+                final Dialog dialog =
+                    winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("Clip")+": "+layer.getName(), null,
+                        WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
+
+                dialog.addActionListener(new ActionListener() {
+
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        switch (dialog.getAction()) {
+                        case WindowManager_v2.BUTTON_APPLY:
+                            doClip(panel);
+                            break;
+
+                        case WindowManager_v2.BUTTON_OK:
+                            doClip(panel);
+                            panel.asJComponent().setVisible(false);
+                            break;
+
+                        case WindowManager_v2.BUTTON_CANCEL:
+                            panel.asJComponent().setVisible(false);
+                            break;
+                        }
+
+                    }
+
+                });
+                dialog.show(WindowManager.MODE.WINDOW);
+            }
+        }
+    }
+
+    private void doClip(ClipPanel panel) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        ThreadSafeDialogsManager dlgManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+        RasterClip clip = RasterToolsLocator.getManager().createRasterClip();
+        panel.fetch(clip);
+        long rasterSize = calculateRasterSize(clip); //Bytes
+        if(rasterSize>10000000){
+            String message = "_the_resulting_raster_will_have_an_estimated_size_of_XSIZEX_MB_are_you_sure_XquestionX";
+            String[] sizes = new String[1];
+            sizes[0]= new Long(rasterSize/10000000).toString();
+            String title = "Clip";
+            int confirm = dlgManager.confirmDialog(
+                i18nManager.getTranslation(message, sizes),
+                i18nManager.getTranslation(title),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE);
+            if(confirm!=JOptionPane.YES_OPTION){
+                return;
+            }
+        }
+
+        try {
+            clip.execute(null);
+        } catch (ClipException e) {
+            logger.warn("Can't create raster clip.", e);
+
+            String message = "_cant_create_raster_clip";
+            String title = "_error_creating_clip";
+            dlgManager.messageDialog(message, title, JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    private long calculateRasterSize(RasterClip clip) {
+        RasterLayer layer = clip.getLayer();
+        long columns = clip.getColumns();
+        long rows = clip.getRows();
+        RasterStore rasterStore = layer.getRasterStore();
+        List<Integer> bands = clip.getBands();
+        BufferManager bufferManager = BufferLocator.getBufferManager();
+        long size = 0;
+        for (Integer band : bands) {
+            size += rows*columns*bufferManager.getDataTypeSize(rasterStore.getBandDescriptor(band.intValue()).getDataType());
+        }
+        return size;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view!=null){
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
+            if(layers.length==1 && layers[0] instanceof RasterLayer){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view!=null){
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer fLayer : layers) {
+                if(fLayer instanceof RasterLayer){
+                    return true;
+                }
+            }
+        }
+        return false;
+
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ZoomToRasterLayerResolutionExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ZoomToRasterLayerResolutionExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ZoomToRasterLayerResolutionExtension.java	(revision 46118)
@@ -0,0 +1,166 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Image;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+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.Point;
+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.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ZoomToRasterLayerResolutionExtension extends Extension {
+
+    private static final String ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME = "zoom-to-raster-layer-resolution-tool";
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "zoom-to-raster-layer-resolution", this);
+        IconThemeHelper.registerIcon("cursor", "zoom-to-raster-layer-resolution-cursor", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (StringUtils.equalsIgnoreCase(actionCommand, "zoom-to-raster-layer-resolution")) {
+            IView view = getActiveView();
+            final MapControl mapControl = view.getMapControl();
+
+            PointBehavior behavior = new PointBehavior(new PointListener() {
+
+                @Override
+                public Image getImageCursor() {
+                    return IconThemeHelper.getImage("zoom-to-raster-layer-resolution-cursor");
+                }
+
+                @Override
+                public boolean cancelDrawing() {
+                    return false;
+                }
+
+                @Override
+                public void pointDoubleClick(PointEvent event) throws BehaviorException {
+                    // Do nothing
+                }
+
+                @Override
+                public void point(PointEvent event) throws BehaviorException {
+                    // TODO Seleccionar la capa raster superior que est� visible
+                    Point point = event.getMapPoint();
+                    FLayers layers = mapControl.getMapContext().getLayers();
+                    for (int i = layers.size() - 1; i >= 0; i--) {
+                        FLayer layer = layers.get(i);
+                        if (layer.isVisible() && layer.isActive() && layer instanceof RasterLayer) {
+                            try {
+                                RasterLayer rasterLayer = (RasterLayer) layer;
+                                RasterStore rasterStore = rasterLayer.getRasterStore();
+                                double pixelSizeX = rasterLayer.getFullEnvelope().getLength(DIMENSIONS.X)/rasterStore.getDimensions().getColumns();
+                                double pixelSizeY = rasterLayer.getFullEnvelope().getLength(DIMENSIONS.Y)/rasterStore.getDimensions().getRows();
+                                ViewPort viewPort = mapControl.getViewPort();
+
+
+                                double wcOriginX = point.getX() - ((viewPort.getImageWidth()*pixelSizeX)/2);
+                                double wcOriginY = point.getY() - ((viewPort.getImageHeight()*pixelSizeY)/2);
+
+                                double wcDstMinX = wcOriginX;
+                                double wcDstMinY = wcOriginY;
+                                double wcDstMaxX = wcDstMinX + (viewPort.getImageWidth()*pixelSizeX);
+                                double wcDstMaxY = wcDstMinY + (viewPort.getImageHeight()*pixelSizeY);
+
+                                double wcDstWidth = wcDstMaxX - wcDstMinX;
+                                double wcDstHeight = wcDstMaxY - wcDstMinY;
+
+                                Envelope ext = null;
+
+                                try {
+                                    ext = GeometryLocator.getGeometryManager().createEnvelope(wcDstMinX, wcDstMinY, wcDstMinX
+                                            + wcDstWidth, wcDstMinY + wcDstHeight, SUBTYPES.GEOM2D);
+                                } catch (CreateEnvelopeException e) {
+                                    logger.error("Error creating the Envelope", e);
+                                }
+                                viewPort.setEnvelope(ext);
+
+//
+//                                viewPort.setDist1pixel(pixelSize);
+//
+                                return;
+                            } catch (ReadException | InitializeException e) {
+                                logger.warn("Can't get the pixel size of the layer '" + layer.getName() + "'.", e);
+                            }
+                        }
+                    }
+                }
+            });
+
+            if (!mapControl.hasTool(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME)) {
+                mapControl.addBehavior(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME, behavior);
+            }
+            mapControl.setTool(ZOOM_TO_RASTER_LAYER_RESOLUTION_TOOL_NAME);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer layer : layers) {
+                if (layer instanceof RasterLayer && layer.isActive()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer layer : layers) {
+                if (layer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SaveRasterLayerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SaveRasterLayerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SaveRasterLayerExtension.java	(revision 46118)
@@ -0,0 +1,137 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class SaveRasterLayerExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(SaveRasterLayerExtension.class);
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-saveas", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (StringUtils.equalsIgnoreCase(actionCommand, "save-raster-layer")) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
+            if (layers[0] instanceof RasterLayer) {
+                final RasterLayer layer = (RasterLayer) layers[0];
+
+                final RasterStore store = layer.getRasterStore();
+                Buffer buffer = null;
+                try {
+                    try {
+                        buffer = store.getRasterSet();
+                    } catch (DataException e) {
+                        logger.error("Error creating raster store's buffer", e);
+                        JOptionPane.showMessageDialog(null,
+                            new StringBuilder().append(i18nManager.getTranslation("error_creating_buffer")).append(":")
+                                .append(e.getLocalizedMessage()), i18nManager.getTranslation("error"),
+                            JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+                    OperationList filters = layer.getLegend().getFilters();
+                    if (buffer != null) {
+                        Buffer filteredBuffer = null;
+                        try {
+                            filteredBuffer = filters.execute(null,buffer);
+                            RasterSwingBufferManager rasterSwingBufferManager =
+                                RasterSwingBufferLocator.getSwingManager();
+                            SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog();
+                            saveBufferDialog.setBuffer(filteredBuffer);
+                            saveBufferDialog.showDialog(null);
+                        } catch (BufferOperationException e) {
+                            logger.error("Error applying the filters", e);
+                            JOptionPane.showMessageDialog(
+                                null,
+                                new StringBuilder().append(i18nManager.getTranslation("error_applying_buffer"))
+                                    .append(":").append(e.getLocalizedMessage()), i18nManager.getTranslation("error"),
+                                JOptionPane.ERROR_MESSAGE);
+                            return;
+                        } finally {
+                            DisposeUtils.disposeQuietly(filteredBuffer);
+                        }
+                        return;
+                    }
+                } finally {
+                    DisposeUtils.disposeQuietly(buffer);
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
+            if (layers.length == 1 && layers[0] instanceof RasterLayer) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer fLayer : layers) {
+                if (fLayer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/HistogramExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/HistogramExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/HistogramExtension.java	(revision 46118)
@@ -0,0 +1,346 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterQuery;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.primitive.Envelope;
+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.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingManager;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.SelectableBandsTableModel;
+import org.gvsig.raster.swing.buffer.exceptions.RasterCreatingPanelException;
+import org.gvsig.raster.swing.buffer.histogram.HistogramPanel;
+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;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class HistogramExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(HistogramExtension.class);
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-histogram", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (StringUtils.equalsIgnoreCase(actionCommand, "histogram")) {
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
+            if (layers[0] instanceof RasterLayer) {
+                final RasterLayer layer = (RasterLayer) layers[0];
+
+                WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+                RasterSwingBufferManager manager = RasterSwingBufferLocator.getSwingManager();
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+                final HistogramPanel panel;
+                try {
+                    panel = (HistogramPanel) manager.createHistogramPanel();
+                    panel.asJComponent().setPreferredSize(new Dimension(650, 520));
+                    panel.set(layer.getStatistics(null));
+                    panel.setEnabledVisibleStatistics(true);
+
+                    final RasterStore store = layer.getRasterStore();
+                    List<BandDescriptor> descriptors = new ArrayList<BandDescriptor>();
+                    for (int i = 0; i < store.getBands(); i++) {
+                        descriptors.add(layer.getRasterStore().getBandDescriptor(i));
+                    }
+
+
+//                    try {
+//                        final RasterLegend legend = ((RasterLegend) layer.getLegend());
+//                        //FIXME: Parece que la RasterLegend no lanza eventos de ContentsChanged.
+//                        //Cuando lo haga, eliminar esta l�nea;
+//                        updateColors(panel, store, legend);
+
+//                        legend.addLegendListener(new LegendContentsChangedListener() {
+//
+//                            @Override
+//                            public boolean symbolChanged(SymbolLegendEvent e) {
+//                                updateColors(panel, store, legend);
+//                                return true;
+//                            }
+//
+//                            @Override
+//                            public void legendCleared(LegendClearEvent event) {
+//                                updateColors(panel, store, legend);
+//                            }
+//                        });
+
+
+                        ((FLyrDefault) layer).addLegendListener(new LegendListener() {
+                            @Override
+                            public void legendChanged(LegendChangedEvent e) {
+                                updateColors(panel, store, (RasterLegend)e.getNewLegend());
+                            }
+                        });
+//                    } catch (LegendLayerException e) {
+//                        logger.warn("Can't get layer's legend.", e);
+//                    }
+
+
+                    MapContextRasterSwingManager rasterSwingManager = MapContextRasterSwingLocator.getSwingManager();
+                    SelectableBandsTableModel tableModel =
+                        rasterSwingManager.createSelectableBandDescriptorsTableModel(descriptors);
+                    panel.set(tableModel);
+                    final ViewPort viewPort = mapControl.getViewPort();
+                    final ViewPortListener viewPortListener = new ViewPortListener() {
+
+                        @Override
+                        public void projectionChanged(ProjectionEvent e) {
+                            doUpdateViewPort(panel, layer, viewPort);
+                        }
+                        @Override
+                        public void extentChanged(ExtentEvent e) {
+                            doUpdateViewPort(panel, layer, viewPort);
+                        }
+                        @Override
+                        public void backColorChanged(ColorEvent e) {
+                            // Do nothing
+                        }
+                    };
+
+                    panel.addChangeItemSourceListener(new ItemListener() {
+                        @Override
+                        public void itemStateChanged(ItemEvent event) {
+                            if (event.getStateChange() == ItemEvent.SELECTED) {
+//                                // FIXME: Parece que la RasterLegend no lanza
+//                                // eventos de ContentsChanged.
+//                                // Cuando lo haga, todo el bloque try-catch siguiente
+//                                try {
+//                                    RasterLegend legend = ((RasterLegend) layer.getLegend());
+//                                    updateColors(panel, store, legend);
+//                                } catch (LegendLayerException e) {
+//                                    logger.warn("Can't get layer's legend.", e);
+//                                }
+
+
+                                int selectedIndex = ((JComboBox<?>) (event.getSource())).getSelectedIndex();
+                                if (selectedIndex == 0) {
+                                    viewPort.removeViewPortListener(viewPortListener);
+                                } else if (selectedIndex == 1) {
+                                    viewPort.addViewPortListener(viewPortListener);
+                                    doUpdateViewPort(panel, layer, viewPort);
+                                }
+                            }
+                        }
+                    });
+
+                    panel.asJComponent().addAncestorListener(new AncestorListener() {
+                        @Override
+                        public void ancestorRemoved(AncestorEvent event) {
+                            viewPort.removeViewPortListener(viewPortListener);
+                        }
+                        @Override
+                        public void ancestorMoved(AncestorEvent event) {
+                            // Do nothing
+                        }
+                        @Override
+                        public void ancestorAdded(AncestorEvent event) {
+                            // Do nothing
+                        }
+                    });
+                } catch (RasterCreatingPanelException e2) {
+                    logger.error("Error creating panel", e2);
+                    JOptionPane.showMessageDialog(null,
+                        new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
+                            .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
+                        JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+
+                winManager.showWindow(panel.asJComponent(),
+                    i18nManager.getTranslation("Histogram") + ": " + layer.getName(), WindowManager.MODE.WINDOW);
+            }
+        }
+    }
+
+    /**
+     * @param panel
+     * @param store
+     * @param legend
+     */
+    private void updateColors(final HistogramPanel panel, RasterStore store, RasterLegend legend) {
+        Color[] colorBands = new Color[store.getBands()];
+        ColorInterpretation colorInterpretations = legend.getColorInterpretation();
+        if (colorInterpretations != null) {
+            for (int i = 0; i < store.getBands(); i++) {
+                switch (colorInterpretations.get(i)) {
+                case ColorInterpretation.RED_BAND:
+                    colorBands[i] = Color.red;
+                    break;
+                case ColorInterpretation.GREEN_BAND:
+                    colorBands[i] = Color.green;
+                    break;
+                case ColorInterpretation.BLUE_BAND:
+                    colorBands[i] = Color.blue;
+                    break;
+                case ColorInterpretation.ALPHA_BAND:
+                    colorBands[i] = Color.lightGray;
+                    break;
+                case ColorInterpretation.GRAY_BAND:
+                    colorBands[i] = Color.darkGray;
+                    break;
+                case ColorInterpretation.CYAN_BAND:
+                    colorBands[i] = Color.cyan;
+                    break;
+                case ColorInterpretation.MAGENTA_BAND:
+                    colorBands[i] = Color.magenta;
+                    break;
+                case ColorInterpretation.YELLOW_BAND:
+                    colorBands[i] = Color.yellow;
+                    break;
+                case ColorInterpretation.BLACK_BAND:
+                    colorBands[i] = Color.black;
+                    break;
+                default:
+                    colorBands[i] = Color.orange;
+                    break;
+                }
+            }
+            panel.setBandColors(colorBands);
+        }
+    }
+
+    protected void doUpdateViewPort(HistogramPanel panel, RasterLayer layer, ViewPort viewPort) {
+        logger.info("UPDATING VIEWPORT");
+        if (panel.isEnabledVisibleStatistics()) {
+
+            Envelope envelope = viewPort.getAdjustedEnvelope();
+            Statistics statistics;
+            Envelope layerEnvelope;
+            try {
+                layerEnvelope = layer.getFullEnvelope();
+            } catch (ReadException e1) {
+                logger.warn("Can't get layer's envelope.", e1);
+                return;
+            }
+            if (envelope.contains(layerEnvelope)) {
+                statistics = layer.getStatistics(null);
+                panel.setVisibleStatistics(statistics);
+            } else {
+                if (envelope.intersects(layerEnvelope)) {
+
+                    RasterStore rasterStore = layer.getRasterStore();
+                    RasterQuery query = rasterStore.createRasterQuery();
+                    ICoordTrans ct = layer.getCoordTrans();
+                    Geometry geom = envelope.getGeometry();
+                    if (ct != null) {
+                        geom.reProject(ct.getInverted());
+                    }
+                    Envelope reprojectedEnvelope = geom.getEnvelope();
+
+                    double pixelSize = reprojectedEnvelope.getLength(0) / (double) viewPort.getImageWidth();
+                    query.setPixelSize(pixelSize);
+
+                    query.setClip(reprojectedEnvelope);
+                    Buffer buffer = null;
+                    try {
+                        buffer = rasterStore.getRasterSet(query);
+                    } catch (DataException e) {
+                        logger.warn("Can't create rasterSet from envelope", e);
+                        return;
+                    }
+                    statistics = buffer.getStatistics(null);
+                    panel.setVisibleStatistics(statistics);
+                } else {
+                    panel.setVisibleStatistics(null);
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
+            if (layers.length == 1 && layers[0] instanceof RasterLayer) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer fLayer : layers) {
+                if (fLayer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SelectRasterLayerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SelectRasterLayerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/SelectRasterLayerExtension.java	(revision 46118)
@@ -0,0 +1,129 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Image;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.exception.ReadException;
+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.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class SelectRasterLayerExtension extends Extension {
+
+    private static final String SELECT_RASTER_LAYER_TOOL_NAME = "select-raster-layer-tool";
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "select-raster-layer", this);
+        IconThemeHelper.registerIcon("cursor", "select-raster-layer-cursor", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (StringUtils.equalsIgnoreCase(actionCommand, "select-raster-layer")) {
+            IView view = getActiveView();
+            final MapControl mapControl = view.getMapControl();
+
+            PointBehavior behavior = new PointBehavior(new PointListener() {
+
+                @Override
+                public Image getImageCursor() {
+                    return IconThemeHelper.getImage("select-raster-layer-cursor");
+                }
+
+                @Override
+                public boolean cancelDrawing() {
+                    return false;
+                }
+
+                @Override
+                public void pointDoubleClick(PointEvent event) throws BehaviorException {
+                    // Do nothing
+                }
+
+                @Override
+                public void point(PointEvent event) throws BehaviorException {
+                    // TODO Seleccionar la capa raster superior que est� visible
+                    Point point = event.getMapPoint();
+                    FLayers layers = mapControl.getMapContext().getLayers();
+                    boolean selected = false;
+                    for (int i = layers.size() - 1; i >= 0; i--) {
+                        FLayer layer = layers.get(i);
+                        if (layer.isVisible() && layer instanceof RasterLayer && !selected) {
+                            try {
+                                if (layer.getFullEnvelope().getGeometry().contains(point)) {
+                                    layer.setActive(true);
+                                    selected = true;
+                                } else {
+                                    layer.setActive(false);
+                                }
+                            } catch (ReadException | GeometryOperationNotSupportedException
+                                | GeometryOperationException e) {
+                                logger.warn("Can't get envelope from layer '" + layer.getName() + "'.", e);
+                            }
+                        } else {
+                            layer.setActive(false);
+                        }
+                    }
+                    ApplicationLocator.getManager().refreshMenusAndToolBars();
+                }
+            });
+
+            if (!mapControl.hasTool(SELECT_RASTER_LAYER_TOOL_NAME)) {
+                mapControl.addBehavior(SELECT_RASTER_LAYER_TOOL_NAME, behavior);
+            }
+            mapControl.setTool(SELECT_RASTER_LAYER_TOOL_NAME);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return isVisible();
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer fLayer : layers) {
+                if (fLayer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ConvertRasterLayerTypeExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ConvertRasterLayerTypeExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ConvertRasterLayerTypeExtension.java	(revision 46118)
@@ -0,0 +1,175 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
+import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
+import org.gvsig.raster.tools.swing.api.converttype.ConvertTypePanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ConvertRasterLayerTypeExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(ConvertRasterLayerTypeExtension.class);
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "convert-raster-layer-type-icon", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (StringUtils.equalsIgnoreCase(actionCommand, "convert-raster-layer-type")) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
+            if (layers[0] instanceof RasterLayer) {
+                final RasterLayer layer = (RasterLayer) layers[0];
+
+                final RasterToolsSwingManager manager = RasterToolsSwingLocator.getSwingManager();
+                final ConvertTypePanel panel;
+                try {
+                    panel = manager.createConvertTypePanel();
+                    panel.set(layer);
+                    panel.asJComponent().setPreferredSize(new Dimension(200, 100));
+                } catch (RasterToolException e2) {
+                    logger.error("Error creating panel", e2);
+                    JOptionPane.showMessageDialog(
+                        null,
+                        new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
+                            .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"), JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+
+                final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+                final Dialog dialog =
+                    winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("convert_raster_layer_type") + " '" + layer.getName()+"'.",
+                        null, WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
+
+                dialog.addActionListener(new ActionListener() {
+
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        switch (dialog.getAction()) {
+                        case WindowManager_v2.BUTTON_APPLY:
+                            doConvert(panel);
+                            break;
+
+                        case WindowManager_v2.BUTTON_OK:
+                            if (doConvert(panel)) {
+                                panel.asJComponent().setVisible(false);
+                            }
+                            break;
+
+                        case WindowManager_v2.BUTTON_CANCEL:
+                            panel.asJComponent().setVisible(false);
+                            break;
+                        }
+
+                    }
+
+                });
+                dialog.show(WindowManager.MODE.WINDOW);
+            }
+        }
+    }
+
+    protected boolean doConvert(ConvertTypePanel panel) {
+        ThreadSafeDialogsManager dlgManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+
+        RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
+        SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog();
+
+        // try {
+        panel.fetch(saveBufferDialog);
+        // } catch (BufferException e) {
+        // logger.warn("Can't convert raster layer type.", e);
+        //
+        // String message = "_cant_convert_raster_layer_type";
+        // String title = "_error_converting_layer";
+        // dlgManager.messageDialog(message, title,
+        // JOptionPane.WARNING_MESSAGE);
+        // return false;
+        // }
+
+        if (saveBufferDialog.getBuffer() != null) {
+            saveBufferDialog.showDialog(null);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
+            if (layers.length == 1 && layers[0] instanceof RasterLayer) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer fLayer : layers) {
+                if (fLayer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/AssignProjectionExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/AssignProjectionExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/AssignProjectionExtension.java	(revision 46118)
@@ -0,0 +1,145 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICRSFactory;
+import org.cresques.cts.IProjection;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class AssignProjectionExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "setviewprojection-raster-icon", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager applicationManager = ApplicationLocator.getManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        if (StringUtils.equalsIgnoreCase(actionCommand, "assign-projection")) {
+            IView view = getActiveView();
+            final MapControl mapControl = view.getMapControl();
+            IProjection projection = mapControl.getProjection();
+
+            RasterStore rasterStore = getFirstFileRasterLayerActive().getRasterStore();
+            DataStoreParameters storeParams = rasterStore.getParameters();
+            if (storeParams instanceof FilesystemStoreParameters) {
+                FilesystemStoreParameters fileSystemStoreParameters = (FilesystemStoreParameters) storeParams;
+                File file = fileSystemStoreParameters.getFile();
+                File prjFile = getPrjFile(file);
+                if (prjFile.exists()) {
+                    String message = "_the_content_of_the_file_XFILEX_will_be_replaced_do_you_want_to_continue";
+                    int reply =
+                        applicationManager.confirmDialog(
+                            i18nManager.getTranslation(message, new String[] { prjFile.getAbsolutePath() }),
+                            i18nManager.getTranslation("Assign_projection"),
+                            JOptionPane.YES_NO_OPTION,
+                            JOptionPane.QUESTION_MESSAGE);
+                    if (reply != JOptionPane.YES_OPTION) {
+                        return;
+                    }
+                }
+                try {
+                    savePrjFile(prjFile, projection);
+                } catch (IOException e) {
+                    logger.warn("Can't save prj file.", e);
+                    String message2 = "_cant_save_prj_file";
+                    applicationManager.messageDialog(message2, "Assing_projection", JOptionPane.WARNING_MESSAGE);
+                }
+            }
+        }
+    }
+
+    private void savePrjFile(File prjFile, IProjection proj) throws IOException {
+        String export = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
+        if (export != null) {
+            FileUtils.writeStringToFile(prjFile, export);
+        }
+    }
+
+    /**
+     * @param dataFile
+     * @return
+     */
+    private File getPrjFile(File dataFile) {
+        File file = new File(FilenameUtils.removeExtension(dataFile.getAbsolutePath()) + ".prj");
+        return file;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return (getFirstFileRasterLayerActive() != null);
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer layer : layers) {
+                if (layer instanceof RasterLayer) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+    private RasterLayer getFirstFileRasterLayerActive() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (FLayer layer : layers) {
+                if (layer instanceof RasterLayer && layer.isActive()) {
+                    RasterLayer rasterLayer = (RasterLayer) layer;
+                    RasterStore rasterStore = rasterLayer.getRasterStore();
+                    DataStoreParameters storeParams = rasterStore.getParameters();
+                    if (storeParams instanceof FilesystemStoreParameters) {
+                        return rasterLayer;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ExportViewToImageExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ExportViewToImageExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ExportViewToImageExtension.java	(revision 46118)
@@ -0,0 +1,120 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.dal.DALLocator;
+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.MapContextException;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.BufferManager;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ExportViewToImageExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(ExportViewToImageExtension.class);
+    private MapContext mapContext;
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-export-image", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (StringUtils.equalsIgnoreCase(actionCommand, "export-view-to-image")) {
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+            mapContext = mapControl.getMapContext();
+            ViewPort viewPort = mapControl.getViewPort();
+
+            ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+            BufferedImage image = toolsSwingManager.createBufferedImage(viewPort.getImageWidth(), viewPort.getImageHeight(), BufferedImage.TYPE_3BYTE_BGR);
+
+            Graphics2D g = image.createGraphics();
+
+            try {
+                mapContext.draw(image, g, null, mapContext.getScaleView());
+            } catch (ReadException | MapContextException e2) {
+                logger.warn("Can't draw mapContext.", e2);
+            }
+
+            Envelope envelope = viewPort.getAdjustedEnvelope();
+
+            BufferManager bufferManager = BufferLocator.getBufferManager();
+            Buffer buffer = null;
+            try {
+                buffer = bufferManager.createBufferFromAwtRaster(image.getRaster(), viewPort.getProjection(), envelope);
+                RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
+                SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog(buffer);
+
+                saveBufferDialog.showDialog(null);
+            } catch (IOException | BufferException e1) {
+                logger.warn("Can't create buffer from view's image.", e1);
+                return;
+            } finally {
+                DisposeUtils.disposeQuietly(buffer);
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            FLayers layers = viewDocument.getMapContext().getLayers();
+            for (int i = 0; i < layers.getLayersCount(); i++) {
+                FLayer layer = layers.getLayer(i);
+                if (layer != null && layer.isAvailable()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        return (view != null);
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ViewClipExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ViewClipExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/src/main/java/org/gvsig/raster/tools/app/mainplugin/ViewClipExtension.java	(revision 46118)
@@ -0,0 +1,223 @@
+package org.gvsig.raster.tools.app.mainplugin;
+
+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.JOptionPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.dal.DALLocator;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
+import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
+import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
+import org.gvsig.raster.tools.swing.api.viewclip.ViewClipPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ViewClipExtension extends Extension {
+
+    private List<ViewDocument> viewsWithVisibleTool;
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-clip-icon", this);
+        IconThemeHelper.registerIcon("clip", "downright", this);
+        IconThemeHelper.registerIcon("clip", "upleft", this);
+        viewsWithVisibleTool = new ArrayList<>();
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (StringUtils.equalsIgnoreCase(actionCommand, "view-clip")) {
+            IView view = getActiveView();
+            MapControl mapControl = view.getMapControl();
+
+            ViewClipPanel panel = getPanel();
+            if (panel == null) {
+                return;
+            }
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            try {
+                panel.set(mapControl);
+            } catch (RasterToolException e2) {
+                logger.error("Error creating panel", e2);
+                JOptionPane.showMessageDialog(null,
+                    new StringBuilder().append(i18nManager.getTranslation("error_initializing_panel")).append(":")
+                        .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
+                    JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+
+            showDialog(panel, view.getDocument().getName());
+            final ViewDocument viewDocument = view.getViewDocument();
+            viewsWithVisibleTool.add(viewDocument);
+            panel.asJComponent().addAncestorListener(new AncestorListener() {
+
+                @Override
+                public void ancestorRemoved(AncestorEvent event) {
+                    viewsWithVisibleTool.remove(viewDocument);
+                }
+
+                @Override
+                public void ancestorMoved(AncestorEvent event) {
+                    // Do nothing
+                }
+
+                @Override
+                public void ancestorAdded(AncestorEvent event) {
+                    // Do nothing
+                }
+            });
+        }
+    }
+
+    /**
+     * @param winManager
+     * @param i18nManager
+     * @return
+     */
+    private void showDialog(final ViewClipPanel panel, String documentName) {
+        final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        final Dialog dialog =
+            winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("view_clip") + " " + documentName,
+                null, WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
+
+        dialog.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                switch (dialog.getAction()) {
+                case WindowManager_v2.BUTTON_APPLY:
+                    doClip(panel);
+                    break;
+
+                case WindowManager_v2.BUTTON_OK:
+                    if (doClip(panel)) {
+                        panel.asJComponent().setVisible(false);
+                    }
+                    break;
+
+                case WindowManager_v2.BUTTON_CANCEL:
+                    panel.asJComponent().setVisible(false);
+                    break;
+                }
+
+            }
+
+        });
+        dialog.show(WindowManager.MODE.WINDOW);
+
+    }
+
+    /**
+     * @param manager
+     * @param panel
+     * @param i18nManager
+     * @return
+     */
+    private ViewClipPanel getPanel() {
+        final RasterToolsSwingManager manager = RasterToolsSwingLocator.getSwingManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        ViewClipPanel panel;
+        try {
+            panel = manager.createViewClipPanel();
+            panel.asJComponent().setPreferredSize(new Dimension(500, 250));
+        } catch (RasterToolException e2) {
+            logger.error("Error creating panel", e2);
+            JOptionPane.showMessageDialog(
+                null,
+                new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
+                    .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"), JOptionPane.ERROR_MESSAGE);
+            return null;
+        }
+        return panel;
+    }
+
+    private boolean doClip(ViewClipPanel panel) {
+        ThreadSafeDialogsManager dlgManager = ToolsSwingLocator.getThreadSafeDialogsManager();
+
+        RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
+        SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog();
+
+        try {
+            panel.fetch(saveBufferDialog);
+        } catch (BufferException e) {
+            logger.warn("Can't create raster clip.", e);
+
+            String message = "_cant_create_raster_clip";
+            String title = "_error_creating_clip";
+            dlgManager.messageDialog(message, title, JOptionPane.WARNING_MESSAGE);
+            return false;
+        }
+
+        saveBufferDialog.showDialog(null);
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        IView view = getActiveView();
+        if (view != null) {
+            MapControl mapControl = view.getMapControl();
+            if (mapControl.getCurrentTool().equalsIgnoreCase(ViewClipPanel.VIEW_CLIP_TOOL_NAME)) {
+                return false;
+            }
+            ViewDocument viewDocument = view.getViewDocument();
+            if (viewsWithVisibleTool.contains(viewDocument)) {
+                return false;
+            }
+            return viewDocument.getMapContext().hasLayers();
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        IView view = getActiveView();
+        if (view != null) {
+            ViewDocument viewDocument = view.getViewDocument();
+            return viewDocument != null;
+        }
+        return false;
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,56 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.raster.tools.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.raster.tools.app.mainplugin</artifactId>
+    <name>${project.artifactId}</name>
+    <description>Main plugin for raster tools for gvSIG</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.app.mainplugin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.tools.swing.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.tools.swing.impl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.tools.lib.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.tools.lib.impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.swing.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.buffer.api</artifactId>
+        </dependency>
+    </dependencies>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,76 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.raster.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.raster.app.mainplugin</artifactId>
+    <name>${project.artifactId}</name>
+    <properties>
+        <!-- Package info property values -->
+        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.3.0-A</gvsig.package.info.dependencies>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+        <gvsig.package.info.name>Raster</gvsig.package.info.name>
+        <gvsig.package.info.description>Provides tools to manage rasters</gvsig.package.info.description>
+        <gvsig.package.info.categories>Raster</gvsig.package.info.categories>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.impl</artifactId>
+            <scope>runtime</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>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.remoteclient</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.buffer.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.buffer.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.swing.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.swing.api</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=78
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -0,0 +1,35 @@
+<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>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsLayerPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsLayerPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsLayerPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,58 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class BandsLayerPropertiesPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+    }
+
+    @Override
+    public boolean isVisible(Object obj) {
+        return obj instanceof RasterLayer;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object obj) {
+        return (PropertiesPage) new BandsPropertiesPage((FLayer) obj);
+    }
+
+    @Override
+    public String getName() {
+        return "Bands";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/LayerPropertiesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/LayerPropertiesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/LayerPropertiesExtension.java	(revision 46118)
@@ -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.raster.app.mainplugin;
+
+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.MapContext;
+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;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class LayerPropertiesExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void postInitialize() {
+//        FPopupMenu.registerExtensionPoint();
+////        IconThemeHelper.registerIcon("action", "layer-properties", this);
+//        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+//        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+//        viewManager.addTOCContextAction("raster-layer-properties","group-last",10000,900);
+    }
+
+    @Override
+    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 mapContext = document.getMapContext();
+        mapContext.getLayers();
+        FLayer[] activeLayers = mapContext.getLayers().getActives();
+
+        if (activeLayers.length<=0) {
+            return;
+        }
+
+        if (s.equalsIgnoreCase("layer-properties")) {
+            FLayer layer = mapContext.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
+            );
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+//        ApplicationManager application = ApplicationLocator.getManager();
+//
+//        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+//        if (view == null) {
+//            return false;
+//        }
+//        ViewDocument document = view.getViewDocument();
+//        MapContext mapContext = document.getMapContext();
+//        mapContext.getLayers();
+//        FLayer[] activeLayers = mapContext.getLayers().getActives();
+//
+//        return (activeLayers.length>0);
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+
+//        ApplicationManager application = ApplicationLocator.getManager();
+//
+//        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+//        if (view == null) {
+//            return false;
+//        }
+//        ViewDocument document = view.getViewDocument();
+//        MapContext mapContext = document.getMapContext();
+//        mapContext.getLayers();
+//        FLayer[] activeLayers = mapContext.getLayers().getActives();
+//
+//        return (activeLayers.length>0);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.java	(revision 46118)
@@ -0,0 +1,147 @@
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+
+public class ColorTablePagePanelView extends JPanel
+{
+   JSplitPane splPanel = new JSplitPane();
+   JComboBox cmbBand = new JComboBox();
+   JLabel lblBand = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public ColorTablePagePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      splPanel.setDividerLocation(120);
+      splPanel.setLastDividerLocation(-1);
+      splPanel.setName("splPanel");
+      jpanel1.add(splPanel,cc.xywh(2,4,4,1));
+
+      cmbBand.setName("cmbBand");
+      cmbBand.setToolTipText("_band_in_which_will_be_apply_the_color_table");
+      jpanel1.add(cmbBand,cc.xy(4,2));
+
+      lblBand.setName("lblBand");
+      lblBand.setText("_band");
+      lblBand.setToolTipText("_band_in_which_will_be apply_the_color_table");
+      jpanel1.add(lblBand,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePropertiesPage.java	(revision 46118)
@@ -0,0 +1,91 @@
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import javax.swing.JComponent;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingManager;
+import org.gvsig.fmap.mapcontext.raster.swing.transparency.TransparencyPanel;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorTablePropertiesPage extends javax.swing.JPanel implements PropertiesPage, Disposable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -6269560433899392154L;
+    private ColorTablePagePanel panel;
+    private FLayer layer;
+
+
+
+    /**
+     * @param layer
+     */
+    public ColorTablePropertiesPage(FLayer layer) {
+        DisposeUtils.bind(this);
+        this.layer = layer;
+        DisposeUtils.bind(this.layer);
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.panel == null) {
+            panel = new ColorTablePagePanelController();
+            panel.set(layer);
+        }
+        return (JComponent) panel;
+    }
+
+    @Override
+    public void setData(Object data) {
+      // FIXME
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_color_table");
+    }
+
+    @Override
+    public int getPriority() {
+        return 560;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        this.whenApply();
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        this.panel.fetch(layer);
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        // Do nothing
+        return true;
+    }
+
+    @Override
+    public void dispose() {
+        if(!ToolsLocator.getDisposableManager().release(this)){
+            return;
+        }
+        DisposeUtils.disposeQuietly(layer);
+        DisposeUtils.disposeQuietly(panel);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanel.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface ColorTablePagePanel extends Component, Disposable {
+
+    /**
+     * @param layer
+     * @return
+     */
+    public boolean fetch(FLayer layer);
+
+    /**
+     * @param layer
+     */
+    public void set(FLayer layer);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTableLayerPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTableLayerPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTableLayerPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,58 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorTableLayerPropertiesPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+    }
+
+    @Override
+    public boolean isVisible(Object obj) {
+        return obj instanceof RasterLayer;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object obj) {
+        return (PropertiesPage) new ColorTablePropertiesPage((FLayer) obj);
+    }
+
+    @Override
+    public String getName() {
+        return "ColorTable";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelController.java	(revision 46118)
@@ -0,0 +1,524 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import java.awt.Component;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.File;
+import java.util.List;
+import java.util.Locale;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JSplitPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.raster.BandDescriptor;
+import org.gvsig.fmap.dal.raster.RasterSet;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.previewer.OneLayerPreviewer;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.colorinterpretation.ColorInterpretation;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
+import org.gvsig.raster.swing.legend.RasterSwingLegendLocator;
+import org.gvsig.raster.swing.legend.colortable.editor.ColorTableEditorPanel;
+import org.gvsig.raster.swing.legend.colortable.selector.ColorTableSelectorPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class ColorTablePagePanelController extends ColorTablePagePanelView implements ColorTablePagePanel {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 798930218545360652L;
+    private static final Logger LOG = LoggerFactory.getLogger(ColorTablePagePanelController.class);
+
+    private ColorTableSelectorPanel selector;
+    private ColorTableEditorPanel editor;
+    private ColorTable colorTable;
+    private JSplitPane splPanelRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+    private RasterLayer rasterLayer;
+    private OneLayerPreviewer previewer;
+    private boolean initialized;
+    private TableModelListener editorTableModelListener;
+    private RasterLayer clonedLayerForPreview;
+    private boolean isChanged;
+
+    /**
+     *
+     */
+    public ColorTablePagePanelController() {
+        this.initialized = false;
+        DisposeUtils.bind(this);
+        initializeComponents();
+        translate();
+    }
+
+    private void initializeComponents() {
+        selector = RasterSwingLegendLocator.getSwingManager().createColorTableSelectorPanel();
+        PluginServices rasterPlugin = PluginsLocator.getManager().getPlugin("org.gvsig.raster.app.mainplugin");
+        DynObject properties = rasterPlugin.getPluginProperties();
+        File defaultColorTableLibraryPath = (File) properties.getDynValue("defaultColorTableLibraryPath");
+        List<Pair<File, ColorTable>> colorTables = RasterLegendLocator.getRasterLegendManager().getColorTables(defaultColorTableLibraryPath);
+        selector.set(colorTables);
+        selector.setEditable(false);
+
+        splPanelRight.setTopComponent(getPreviewer().asJComponent());
+        splPanelRight.setBottomComponent(selector.asJComponent());
+
+        splPanel.setRightComponent(splPanelRight);
+
+        editor = RasterSwingLegendLocator.getSwingManager().createColorTableEditorPanel();
+        splPanel.setLeftComponent(editor.asJComponent());
+
+        editor.addChkInterpolatedItemListener(new ItemListener() {
+
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                Thread thread = new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        SwingUtilities.invokeLater(new Runnable() {
+                            @Override
+                            public void run() {
+                                updatePreviewer();
+                            }
+                        });
+                    }
+                }, "Check por interpolate changed");
+
+                thread.setDaemon(false);
+                thread.start();
+            }
+        });
+
+        selector.addListSelectionListener(new ListSelectionListener() {
+
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                Thread thread = new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        SwingUtilities.invokeLater(new Runnable() {
+                            @Override
+                            public void run() {
+                                updateColorTable();
+                            }
+                        });
+                    }
+                }, "Selector changed");
+
+                thread.setDaemon(false);
+                thread.start();
+            }
+        });
+        splPanel.setDividerLocation(0.75);
+
+        cmbBand.setRenderer(new ComboBandsCellRenderer());
+        cmbBand.addItemListener(new ItemListener() {
+
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                if(e.getStateChange()==ItemEvent.SELECTED){
+                    Thread thread = new Thread(new Runnable() {
+                        @Override
+                        public void run() {
+                            SwingUtilities.invokeLater(new Runnable() {
+                                @Override
+                                public void run() {
+                                    updateColorTable();
+                                }
+                            });
+                        }
+                    }, "Palette band changed");
+
+                    thread.setDaemon(false);
+                    thread.start();
+                }
+            }
+        });
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        lblBand.setText(i18nManager.getTranslation(lblBand.getText()));
+        lblBand.setToolTipText(i18nManager.getTranslation(lblBand.getToolTipText()));
+        cmbBand.setToolTipText(i18nManager.getTranslation(cmbBand.getToolTipText()));
+    }
+
+    /**
+     * @param locale
+     *
+     */
+    public void setLocate(Locale locale) {
+        Locale l = super.getLocale();
+        if (!l.equals(locale)) {
+            translate();
+        }
+        super.setLocale(locale);
+    }
+
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private OneLayerPreviewer getPreviewer() {
+        if(previewer == null){
+            previewer = MapContextRasterSwingLocator.getSwingManager().createOneLayerPreviewer();
+        }
+        return this.previewer;
+
+    }
+
+    private void initializePreviewer(){
+
+        getPreviewer().setLayer(this.clonedLayerForPreview);
+
+        splPanelRight.setTopComponent(previewer.asJComponent());
+    }
+
+    /**
+     *
+     */
+    private void updateColorTable() {
+        if (this.initialized) {
+            ColorTable selectedColorTable = selector.getSelected();
+            if (selectedColorTable != null) {
+                colorTable = selectedColorTable;
+            } else {
+                if (colorTable == null) {
+                    selector.select(0);
+                    selectedColorTable = selector.getSelected();
+                    colorTable = selectedColorTable;
+                }
+            }
+            if (((BandItem) cmbBand.getSelectedItem()).getIndex() > -1 && selectedColorTable != null) {
+                colorTable = adaptToTheBand(selectedColorTable);
+                setEditorColorTable();
+            }
+            updatePreviewer();
+        }
+    }
+
+    private void updatePreviewer() {
+        if (this.initialized) {
+
+            RasterLegend legend = getClonedLayerForPreview().getLegend();
+
+            ColorInterpretation colorInterpretation = legend.getColorInterpretation();
+            updateColorInterpretation(colorInterpretation);
+
+            isChanged = true;
+        }
+    }
+
+    protected ColorTable adaptToTheBand(ColorTable colorTable) {
+        ColorTable cloned = RasterLegendLocator.getRasterLegendManager().createColorTable();
+        cloned.copyFrom(colorTable);
+
+        List<ColorTableClass> classes = cloned.getClasses();
+        double minClassValue = Double.POSITIVE_INFINITY;
+        double maxClassValue = Double.NEGATIVE_INFINITY;
+        for (ColorTableClass colorTableClass : classes) {
+            double value = colorTableClass.getValue();
+            if(value < minClassValue){
+                minClassValue = value;
+            }
+            if(value > maxClassValue){
+                maxClassValue = value;
+            }
+        }
+
+        Statistics statistics = this.rasterLayer.getStatistics(null);
+
+        int bandIndex = ((BandItem)cmbBand.getSelectedItem()).getIndex();
+        double minBandValue = statistics.getMin()[bandIndex];
+        double maxBandValue = statistics.getMax()[bandIndex];
+
+        double ratio = (maxBandValue-minBandValue)/(maxClassValue-minClassValue);
+
+        for (ColorTableClass colorTableClass : classes) {
+            double value = colorTableClass.getValue();
+            double adaptedValue = ((value-minClassValue)*ratio)+minBandValue;
+            colorTableClass.setValue(adaptedValue);
+        }
+
+        return cloned;
+    }
+
+    @Override
+    public boolean fetch(FLayer layer) {
+        if(isChanged){
+            RasterLayer rasterLayer = (RasterLayer) layer;
+            RasterLegend rasterLegend = (RasterLegend) rasterLayer.getLegend();
+            ColorInterpretation colorInterpretation = rasterLegend.getColorInterpretation();
+            updateColorInterpretation(colorInterpretation);
+            updateCmbBands(rasterLayer);
+        }
+        return true;
+    }
+
+    /**
+     * @param colorInterpretation
+     */
+    private void updateColorInterpretation(ColorInterpretation colorInterpretation) {
+        int paletteBand = ((BandItem)cmbBand.getSelectedItem()).getIndex();
+        colorInterpretation.setPaletteBand(paletteBand);
+        ColorTable colorTable2 = this.editor.getColorTable();
+        if(colorTable2!=null){
+            try {
+                colorInterpretation.setPalette((ColorTable)colorTable2.clone());
+            } catch (CloneNotSupportedException e) {
+                String message = "Can't clone ColorTable.";
+                LOG.warn(message, e);
+                throw new RuntimeException(message, e);
+            }
+        }
+    }
+
+    @Override
+    public void set(FLayer layer) {
+        if(this.rasterLayer != null) {
+            DisposeUtils.dispose(this.rasterLayer);
+        }
+        this.rasterLayer = (RasterLayer) layer;
+        DisposeUtils.bind(this.rasterLayer);
+
+        init();
+    }
+
+    /**
+    *
+    */
+   private void init() {
+       updateCmbBands(getClonedLayerForPreview());
+       RasterLegend legend = null;
+       legend = getClonedLayerForPreview().getLegend();
+
+       ColorInterpretation colorInterpretation = legend.getColorInterpretation();
+
+       if (colorInterpretation.isPalette()) {
+           splPanel.getLeftComponent().setEnabled(true);
+           colorTable = colorInterpretation.getPalette();
+       } else {
+           splPanel.getLeftComponent().setEnabled(false);
+       }
+       setEditorColorTable();
+
+       isChanged = false;
+       initializePreviewer();
+       initialized = true;
+
+   }
+
+    private RasterLayer getClonedLayerForPreview() {
+        if(this.clonedLayerForPreview==null){
+            try {
+                this.clonedLayerForPreview = (RasterLayer) this.rasterLayer.cloneLayer();
+            } catch (Exception e1) {
+                LOG.warn("Can't clone the raster layer to preview.", e1);
+            }
+        }
+        return this.clonedLayerForPreview;
+    }
+
+
+    /**
+     * @return
+     */
+    private TableModelListener getEditorTableModelListener() {
+        if (editorTableModelListener == null) {
+            editorTableModelListener = new TableModelListener() {
+
+                @Override
+                public void tableChanged(TableModelEvent e) {
+                    updatePreviewer();
+                }
+            };
+        }
+        return editorTableModelListener;
+    }
+
+    private void updateCmbBands(RasterLayer layer){
+        RasterStore store = layer.getRasterStore();
+
+        DefaultComboBoxModel<BandItem> currentBandsModel = (DefaultComboBoxModel<BandItem>) cmbBand.getModel();
+        DefaultComboBoxModel<BandItem> bandsModel = new DefaultComboBoxModel<BandItem>();
+
+        boolean equals = true;
+        for (int i = -1; i < store.getBands(); i++) {
+            BandDescriptor bandDescriptor = null;
+            if(i>=0){
+                bandDescriptor = store.getBandDescriptor(i);
+                if(currentBandsModel==null || currentBandsModel.getSize()<=i+1 || currentBandsModel.getElementAt(i+1) == null ||!bandDescriptor.equals(currentBandsModel.getElementAt(i+1).getDescriptor())){
+                    equals = false;
+                }
+            }
+
+            bandsModel.addElement(new BandItem(i,bandDescriptor));
+        }
+        if (!equals) {
+            cmbBand.setModel(bandsModel);
+
+            ColorInterpretation colorInterpretation = layer.getLegend().getColorInterpretation();
+            if (colorInterpretation.isPalette()) {
+                cmbBand.setSelectedIndex(colorInterpretation.getPaletteBand() + 1);
+            } else {
+                cmbBand.setSelectedIndex(0);
+            }
+        }
+    }
+
+    private static class BandItem{
+
+        private int index;
+        private BandDescriptor descriptor;
+
+        public BandItem(int index, BandDescriptor descriptor) {
+            this.setIndex(index);
+            this.setDescriptor(descriptor);
+        }
+
+        /**
+         * @return the index
+         */
+        public int getIndex() {
+            return index;
+        }
+
+        /**
+         * @param index the index to set
+         */
+        public void setIndex(int index) {
+            this.index = index;
+        }
+
+        /**
+         * @return the descriptor
+         */
+        public BandDescriptor getDescriptor() {
+            return descriptor;
+        }
+
+        /**
+         * @param descriptor the descriptor to set
+         */
+        public void setDescriptor(BandDescriptor descriptor) {
+            this.descriptor = descriptor;
+        }
+    }
+
+    private static class ComboBandsCellRenderer extends javax.swing.JLabel implements ListCellRenderer<BandItem> {
+
+        /**
+         *
+         */
+        private static final long serialVersionUID = 7763209775607437499L;
+
+        @Override
+        public Component getListCellRendererComponent(JList<? extends BandItem> list, BandItem value, int index,
+            boolean isSelected, boolean cellHasFocus) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            if (value == null || value.getIndex() < 0) {
+                setHorizontalAlignment(JLabel.CENTER);
+                setText("\u2015");
+            } else {
+                setHorizontalAlignment(JLabel.LEFT);
+                setText(i18nManager.getTranslation("_band") + ": " + (value.getIndex()) + " - '"
+                    + value.getDescriptor().getName() + "'");
+            }
+            return this;
+        }
+    }
+
+    @Override
+    public void setVisible(boolean aFlag) {
+        super.setVisible(aFlag);
+        splPanel.setDividerLocation(0.60);
+        splPanelRight.setDividerLocation(0.40);
+    }
+
+    /**
+     *
+     */
+    private void setEditorColorTable() {
+        if (colorTable != null) {
+            if(editor.getColorTable()!=null){
+                editor.removeTableModelListener(getEditorTableModelListener());
+            }
+            editor.set(colorTable);
+            if (editorTableModelListener == null) {
+                editor.addTableModelListener(getEditorTableModelListener());
+            }
+        }
+    }
+
+    @Override
+    public void dispose() {
+        if(initialized) {
+            if(!ToolsLocator.getDisposableManager().release(this)){
+                return;
+            }
+            DisposeUtils.dispose(this.rasterLayer);
+            this.rasterLayer = null;
+            DisposeUtils.dispose(this.previewer);
+            this.previewer = null;
+            DisposeUtils.disposeQuietly(this.clonedLayerForPreview);
+            this.clonedLayerForPreview = null;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablesLibraryExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablesLibraryExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablesLibraryExtension.java	(revision 46118)
@@ -0,0 +1,195 @@
+package org.gvsig.raster.app.mainplugin.colortable;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+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.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
+import org.gvsig.raster.lib.legend.api.RasterLegendManager;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
+import org.gvsig.raster.lib.legend.api.colortable.ColorTableIOFactory;
+import org.gvsig.raster.lib.legend.api.exceptions.ColorTableIOException;
+import org.gvsig.raster.swing.legend.RasterSwingLegendLocator;
+import org.gvsig.raster.swing.legend.RasterSwingLegendManager;
+import org.gvsig.raster.swing.legend.colortable.selector.ColorTableSelectorPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author fdiaz
+ *
+ */
+public class ColorTablesLibraryExtension extends Extension {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ColorTablesLibraryExtension.class);
+    private List<Pair<File, ColorTable>> previousColorTables;
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "color-tables-library-icon", this);
+        IconThemeHelper.registerIcon("colortable", "new-color-table-icon", this);
+        IconThemeHelper.registerIcon("colortable", "edit-color-table-icon", this);
+        IconThemeHelper.registerIcon("colortable", "import-color-table-icon", this);
+        IconThemeHelper.registerIcon("colortable", "export-color-table-icon", this);
+        IconThemeHelper.registerIcon("colortable", "remove-color-table-icon", this);
+
+
+        IconThemeHelper.registerIcon("editcolortable","add-color-table-class-icon", this);
+        IconThemeHelper.registerIcon("editcolortable","remove-color-table-class-icon", this);
+        IconThemeHelper.registerIcon("editcolortable","remove-all-color-table-class-icon", this);
+
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager applicationManager = ApplicationLocator.getManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        if (StringUtils.equalsIgnoreCase(actionCommand, "color-tables-library")) {
+            //Mostrar una ventana con el controller
+
+            RasterSwingLegendManager rasterSwingLegendManager = RasterSwingLegendLocator.getSwingManager();
+            final ColorTableSelectorPanel panel = rasterSwingLegendManager.createColorTableSelectorPanel();
+
+            PluginServices rasterPlugin = PluginsLocator.getManager().getPlugin("org.gvsig.raster.app.mainplugin");
+            DynObject properties = rasterPlugin.getPluginProperties();
+            File defaultColorTableLibraryPath = (File) properties.getDynValue("defaultColorTableLibraryPath");
+            previousColorTables = RasterLegendLocator.getRasterLegendManager().getColorTables(defaultColorTableLibraryPath);
+//            List<Triple<File, ColorTable, Modification>> modifiableColorTables = new ArrayList<Triple<File, ColorTable, Modification>>(previousColorTables.size());
+//            for (Iterator iterator = previousColorTables.iterator(); iterator.hasNext();) {
+//                Pair<File, ColorTable> pair = (Pair<File, ColorTable>) iterator.next();
+//                ImmutableTriple<File, ColorTable, Modification> triple = new ImmutableTriple<File, ColorTable, Modification>(pair.getKey(), pair.getValue(), Modification.NONE);
+//                modifiableColorTables.add(triple);
+//            }
+            panel.set(previousColorTables);
+            panel.asJComponent().setPreferredSize(new Dimension(600, 400));
+
+            final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+            final Dialog dialog =
+                winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("color-tables-library"),
+                    null, WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
+
+            dialog.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    switch (dialog.getAction()) {
+                    case WindowManager_v2.BUTTON_APPLY:
+                        doApply(panel);
+                        break;
+
+                    case WindowManager_v2.BUTTON_OK:
+                        if (doApply(panel)) {
+                            panel.asJComponent().setVisible(false);
+                        }
+                        break;
+
+                    case WindowManager_v2.BUTTON_CANCEL:
+                        panel.asJComponent().setVisible(false);
+                        break;
+                    }
+
+                }
+
+            });
+            dialog.show(WindowManager.MODE.WINDOW);
+        }
+
+    }
+
+    protected boolean doApply(ColorTableSelectorPanel panel) {
+        RasterLegendManager legendManager = RasterLegendLocator.getRasterLegendManager();
+
+        List<Pair<File, ColorTable>> removedColorTables = panel.getRemovedColorTables();
+        for (Pair<File, ColorTable> pair : removedColorTables) {
+            File file = pair.getLeft();
+            file.delete();
+        }
+
+        List<Pair<File, ColorTable>> modifiedColorTables = panel.getModifiedColorTables();
+        for (Pair<File, ColorTable> pair : modifiedColorTables) {
+
+            File oldFile = null;
+            File file = pair.getLeft();
+            ColorTable colorTable = pair.getRight();
+            if (!FilenameUtils.getBaseName(file.getName()).equalsIgnoreCase(colorTable.getName())) {
+                oldFile = file;
+                file = new File(file.getParent(), colorTable.getName()+ "." + FilenameUtils.getExtension(file.getAbsolutePath()));
+            }
+            List<ColorTableIOFactory> factories = legendManager.getColorTableIOFactories();
+            for (Iterator factoriesIt = factories.iterator(); factoriesIt.hasNext();) {
+                ColorTableIOFactory colorTableIOFactory = (ColorTableIOFactory) factoriesIt.next();
+                if (colorTableIOFactory.accept(file)) {
+                    try {
+                        colorTableIOFactory.create().write(colorTable, file);
+                    } catch (ColorTableIOException e) {
+                        LOG.warn("Can't write color table '" + file.getName() + "'.", e);
+                        // FIXME: mostrar aviso al usuario
+                        throw new RuntimeException("Can't write color table '" + file.getName() + "'.", e);
+                    }
+                }
+            }
+            if(oldFile!=null){
+                oldFile.delete();
+            }
+        }
+
+        List<ColorTable> addedColorTables = panel.getAddedColorTables();
+        for (ColorTable colorTable : addedColorTables) {
+            colorTable.getName();
+
+            PluginServices rasterPlugin =
+                PluginsLocator.getManager().getPlugin("org.gvsig.raster.app.mainplugin");
+            DynObject properties = rasterPlugin.getPluginProperties();
+            File defaultColorTableLibraryPath = (File) properties.getDynValue("defaultColorTableLibraryPath");
+            // FIXME: De momento creo tablas de color en formato de gvSIG
+            // (ver de coger la extension en lugar de ponerla fija)
+            File file = new File(defaultColorTableLibraryPath, colorTable.getName() + ".xml");
+            List<ColorTableIOFactory> factories = legendManager.getColorTableIOFactories();
+            for (Iterator factoriesIt = factories.iterator(); factoriesIt.hasNext();) {
+                ColorTableIOFactory colorTableIOFactory = (ColorTableIOFactory) factoriesIt.next();
+                if (colorTableIOFactory.accept(file)) {
+                    try {
+                        colorTableIOFactory.create().write(colorTable, file);
+                    } catch (ColorTableIOException e) {
+                        LOG.warn("Can't write color table '" + file.getName() + "'.", e);
+                        // FIXME: mostrar aviso al usuario
+                        throw new RuntimeException("Can't write color table '" + file.getName() + "'.", e);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.xml	(revision 46118)
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/paco/projects/externals/gvsig-desktop/RasterRefactoring/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/colortable/ColorTablePagePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</at>
+           <at name="colspan">4</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.JSplitPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JSplitPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="name">splPanel</at>
+            <at name="width">932</at>
+            <at name="lastDividerLocation">-1</at>
+            <at name="maximumDividerLocation">810</at>
+            <at name="dividerLocation">120</at>
+            <at name="height">24</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">4</at>
+           <at name="row">2</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.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="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="name">cmbBand</at>
+            <at name="width">26</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="toolTipText">_band_in_which_will_be_apply_the_color_table</at>
+            <at name="height">20</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">2</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">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="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="name">lblBand</at>
+            <at name="width">34</at>
+            <at name="text">_band</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="toolTipText">_band_in_which_will_be apply_the_color_table</at>
+            <at name="height">14</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPage.java	(revision 46118)
@@ -0,0 +1,176 @@
+package org.gvsig.raster.app.mainplugin;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerListener;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
+import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
+import org.gvsig.raster.swing.buffer.statistics.StatisticsPanel;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class StatisticsPage extends javax.swing.JPanel implements PropertiesPage {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 8264136278039978040L;
+    private StatisticsPanel panel;
+    private RasterLayer layer;
+    private Thread updateStatisticsThread;
+
+
+    /**
+     * @param layer
+     */
+    public StatisticsPage(RasterLayer layer) {
+        this.layer = layer;
+        initializePanel();
+    }
+
+    private void initializePanel(){
+        if (this.panel == null) {
+            RasterSwingBufferManager manager = RasterSwingBufferLocator.getSwingManager();
+            panel = manager.createStatisticsPanel();
+
+            final LayerListener layerListener = new LayerListener() {
+                @Override
+                public void visibilityChanged(LayerEvent arg0) {
+                    //Do nothing
+                }
+                @Override
+                public void nameChanged(LayerEvent arg0) {
+                    //Do nothing
+                }
+                @Override
+                public void editionChanged(LayerEvent arg0) {
+                    //Do nothing
+                }
+                @Override
+                public void drawValueChanged(LayerEvent arg0) {
+                    if(asJComponent().isVisible()){
+                        updateStatisticsPanel();
+                    }
+                }
+                @Override
+                public void activationChanged(LayerEvent arg0) {
+                    //Do nothing
+                }
+            };
+            layer.addLayerListener(layerListener);
+
+            this.asJComponent().addAncestorListener(new AncestorListener() {
+
+                @Override
+                public void ancestorRemoved(AncestorEvent event) {
+                    layer.removeLayerListener(layerListener);
+                }
+                @Override
+                public void ancestorMoved(AncestorEvent event) {
+                    //Do nothing
+                }
+                @Override
+                public void ancestorAdded(AncestorEvent event) {
+                    layer.addLayerListener(layerListener);
+                    updateStatisticsPanel();
+                }
+            });
+            updateStatisticsPanel();
+//            panel.set(this.layer.getStatistics(null));
+
+            panel.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    if(e.getActionCommand().equalsIgnoreCase("_recalculate_statistics")){
+                        layer.recalculateStatistics();
+                        updateStatisticsPanel();
+                    }
+
+                }
+            });
+        }
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.panel == null) {
+            initializePanel();
+        }
+        return (JComponent)this.panel;
+    }
+
+    @Override
+    public void setData(Object data) {
+      // FIXME
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_statistics");
+    }
+
+    @Override
+    public int getPriority() {
+        return 500;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        return true;
+    }
+
+    /**
+     *
+     */
+    private synchronized void updateStatisticsPanel() {
+        if( updateStatisticsThread!=null ) {
+            return;
+        }
+        this.updateStatisticsThread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                final Statistics statistics = layer.getStatistics(null);
+                SwingUtilities.invokeLater(new Runnable() {
+                    @Override
+                    public void run() {
+                        panel.set(statistics);
+                    }
+                });
+                updateStatisticsThread = null;
+            }
+        }, "Calculate statistics");
+
+        updateStatisticsThread.setDaemon(false);
+        updateStatisticsThread.start();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyLayerPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyLayerPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyLayerPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,58 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class TransparencyLayerPropertiesPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+    }
+
+    @Override
+    public boolean isVisible(Object obj) {
+        return obj instanceof RasterLayer;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object obj) {
+        return (PropertiesPage) new TransparencyPropertiesPage((FLayer) obj);
+    }
+
+    @Override
+    public String getName() {
+        return "Transparency";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/RasterExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/RasterExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/RasterExtension.java	(revision 46118)
@@ -0,0 +1,73 @@
+package org.gvsig.raster.app.mainplugin;
+
+import java.io.File;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.raster.app.mainplugin.colortable.ColorTableLayerPropertiesPageFactory;
+import org.gvsig.raster.app.mainplugin.operations.OperationsLayerPropertiesPageFactory;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class RasterExtension extends Extension{
+
+    @Override
+    public void execute(String arg0) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void initialize() {
+        registerIcons();
+        DynObject properties = this.getPlugin().getPluginProperties();
+        File defaultColorTableLibraryPath = (File) properties.getDynValue("defaultColorTableLibraryPath");
+        if(defaultColorTableLibraryPath==null){
+            defaultColorTableLibraryPath = new File(PluginsLocator.getManager().getApplicationHomeFolder(),"colortable");
+            properties.setDynValue("defaultColorTableLibraryPath", defaultColorTableLibraryPath);
+        }
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+//        AddLayer.addWizard(FilesystemExplorerWizardPanel.class);
+
+        //Properties pages register
+
+        PropertiesPageManager propertiesPageManager = MapControlLocator.getPropertiesPageManager();
+        propertiesPageManager.registerFactory(new StatisticsPageFactory());
+        propertiesPageManager.registerFactory(new TransparencyLayerPropertiesPageFactory());
+        propertiesPageManager.registerFactory(new BandsLayerPropertiesPageFactory());
+        propertiesPageManager.registerFactory(new ColorTableLayerPropertiesPageFactory());
+        propertiesPageManager.registerFactory(new OperationsLayerPropertiesPageFactory());
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        // TODO Auto-generated method stub
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        // TODO Auto-generated method stub
+        return true;
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("layer", "layer-icon-raster", this);
+        IconThemeHelper.registerIcon("operationlist", "add-operation-icon", this);
+        IconThemeHelper.registerIcon("operationlist", "remove-operation-icon", this);
+        IconThemeHelper.registerIcon("operationlist", "up-operation-icon", this);
+        IconThemeHelper.registerIcon("operationlist", "down-operation-icon", this);
+        IconThemeHelper.registerIcon("operationlist", "update-operation-icon", this);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/StatisticsPageFactory.java	(revision 46118)
@@ -0,0 +1,63 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin;
+
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class StatisticsPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+    }
+
+    @Override
+    public boolean isVisible(Object obj) {
+        return obj instanceof RasterLayer;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object obj) {
+        if(obj instanceof RasterLayer){
+            RasterLayer layer = (RasterLayer)obj;
+            StatisticsPage page = (StatisticsPage) new StatisticsPage(layer);
+            return page;
+        }
+        return null;
+    }
+
+    @Override
+    public String getName() {
+        return "Statistics";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/BandsPropertiesPage.java	(revision 46118)
@@ -0,0 +1,95 @@
+package org.gvsig.raster.app.mainplugin;
+
+import javax.swing.JComponent;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingManager;
+import org.gvsig.fmap.mapcontext.raster.swing.bands.BandsPanel;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class BandsPropertiesPage extends javax.swing.JPanel implements PropertiesPage, Disposable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6611273055806827529L;
+    private BandsPanel panel;
+    private FLayer layer;
+
+
+
+    /**
+     * @param layer
+     */
+    public BandsPropertiesPage(FLayer layer) {
+        DisposeUtils.bind(this);
+        DisposeUtils.bind(layer);
+        this.layer = layer;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.panel == null) {
+            MapContextRasterSwingManager manager = MapContextRasterSwingLocator.getSwingManager();
+            panel = manager.createBandsPanel();
+            panel.set(layer);
+        }
+        return (JComponent) panel;
+    }
+
+    @Override
+    public void setData(Object data) {
+      // FIXME
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_bands");
+    }
+
+    @Override
+    public int getPriority() {
+        return 600;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        return this.whenApply();
+    }
+
+    @Override
+    public boolean whenApply() {
+        if (this.panel.fetch(layer)) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        // Do nothing
+        return true;
+    }
+
+    @Override
+    public void dispose() {
+        if(!ToolsLocator.getDisposableManager().release(this)){
+            return;
+        }
+        DisposeUtils.disposeQuietly(layer);
+        DisposeUtils.disposeQuietly(panel);
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/AddTestRasterLayerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/AddTestRasterLayerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/AddTestRasterLayerExtension.java	(revision 46118)
@@ -0,0 +1,1242 @@
+package org.gvsig.raster.app.mainplugin;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStore;
+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.raster.NewRasterStoreParameters;
+import org.gvsig.fmap.dal.raster.RasterStore;
+import org.gvsig.fmap.dal.spi.DALSPILocator;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+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.raster.lib.buffer.api.Buffer;
+import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.locator.LocatorException;
+
+/**
+ * Class for test purpose only. It serves to load a test layer in the active View.
+ * @author fdiaz
+ *
+ */
+public class AddTestRasterLayerExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-test-layer-add", this);
+    }
+
+    @Override
+    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 mapControl = view.getMapControl();
+        MapContext mapContext = mapControl.getMapContext();
+
+        final MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+        FLayer layer = null;
+        DataStore dataStore = null;
+        try {
+            ////////// FILE
+            /*
+             dataStore = openFileCached(new
+             File("/home/paco/data/cartography/raster/ecw/valencia_1980_tif.tif"));
+            // dataStore = openFileCached(new
+            // File("/home/paco/data/Testdata/raster/JPG/relieve_andalucia.png"));
+              String layerName = dataStore.getName();
+              layer = mapContextManager.createLayer(layerName, dataStore);
+
+              mapContext.getLayers().add(layer);
+*/
+            ///////////// GoogleMaps
+            /*
+            dataStore = openGoogleMaps("roadmap");
+//             dataStore = openGoogleMaps("hybrid");
+             String layerName = dataStore.getName();
+             layer = mapContextManager.createLayer(layerName, dataStore);
+
+             mapContext.getLayers().add(layer);
+             */
+
+             ///////////// BingMaps
+            /*
+//             dataStore = openBingMaps("aerial");
+//             dataStore = openBingMaps("aerialwithlabels");
+             dataStore = openBingMaps("road");
+              String layerName = dataStore.getName();
+              layer = mapContextManager.createLayer(layerName, dataStore);
+
+              mapContext.getLayers().add(layer);
+*/
+
+             ///////////// WMS
+
+            /*
+            dataStore = openWMSCatastro();
+            String layerName = dataStore.getName();
+            layer = mapContextManager.createLayer(layerName, dataStore);
+            mapContext.getLayers().add(layer);
+*/
+            ///////////// OSM
+
+            /*
+            Stamen_Watercolor=Stamen Watercolor*http\://tile.stamen.com/watercolor*17*jpg
+            Open_Cycle_Map=Open Cycle Map*http\://tile.opencyclemap.org/cycle/*16*png
+            Stamen_Terrain=Stamen Terrain*http\://tile.stamen.com/terrain*17*jpg
+            Stamen_Toner=Stamen Toner*http\://tile.stamen.com/toner*17*png
+            Mapnik=Mapnik*http\://tile.openstreetmap.org/*18*png
+            */
+
+            /*
+            List<MyOSMServer> servers = new ArrayList<MyOSMServer>();
+            try {
+                servers.add(new MyOSMServer("Stamen Watercolor",new URL("http://tile.stamen.com/watercolor"),17,"jpg",""));// fixed
+                servers.add(new MyOSMServer("Open Cycle Map",new URL("http://tile.opencyclemap.org/cycle"),22,"png",""));
+                servers.add(new MyOSMServer("Stamen Terrain",new URL("http://tile.stamen.com/terrain"),17,"png",""));// fixed
+                servers.add(new MyOSMServer("Stamen Toner",new URL("http://tile.stamen.com/toner"),20,"png",""));// fixed
+                servers.add(new MyOSMServer("Mapnik",new URL("http://tile.openstreetmap.org"),19,"png",""));// fixed
+            } catch (MalformedURLException e){
+                logger.warn("Can't create URL.", e);
+            }
+
+            for (Iterator iterator = servers.iterator(); iterator.hasNext();) {
+                MyOSMServer MyOSMServer = (MyOSMServer) iterator.next();
+                dataStore = openOSM(MyOSMServer);
+                if (dataStore == null) {
+                    continue;
+                }
+                String layerName = dataStore.getName();
+                layer = mapContextManager.createLayer(layerName, dataStore);
+
+                mapContext.getLayers().add(layer);
+            }
+            */
+
+
+
+            ///////////// WMTS
+/*
+            dataStore = openWMTSPnoa();
+            String layerName = dataStore.getName();
+            layer = mapContextManager.createLayer(layerName, dataStore);
+            mapContext.getLayers().add(layer);
+*/
+
+
+            ///////////// WCS
+
+//            for (int i = 0; i < 4; i++) {
+//                logger.info("Abriendo capa: " + i);
+//                dataStore = openTestWCS(i);
+//                if (dataStore == null) {
+//                    continue;
+//                }
+//                String layerName = dataStore.getName();
+//                layer = mapContextManager.createLayer(layerName, dataStore);
+//                mapContext.getLayers().add(layer);
+//            }
+
+
+            ////////////// MULTIFILE
+/*
+            dataStore = openMultifile();
+            String layerName = dataStore.getName();
+            layer = mapContextManager.createLayer(layerName, dataStore);
+            RasterLayer rasterLayer = (RasterLayer)layer;
+            RasterLegendManager rasterLegendManager = RasterLegendLocator.getRasterLegendManager();
+//            ColorInterpretation colorInterpretation = rasterLegendManager.createColorInterpretation(ColorInterpretation.RGB);
+            ColorInterpretation colorInterpretation =
+                rasterLegendManager.createColorInterpretation(new String[] {
+                    ColorInterpretation.RED_BAND,
+                    ColorInterpretation.GREEN_BAND,
+                    ColorInterpretation.BLUE_BAND,
+                    ColorInterpretation.ALPHA_BAND });
+//                    ColorInterpretation.UNDEFINED_BAND,
+//                    ColorInterpretation.UNDEFINED_BAND,
+//                    ColorInterpretation.UNDEFINED_BAND });
+//                    ColorInterpretation.ALPHA_BAND,
+
+            RasterLegend legend = rasterLegendManager.createLegend(colorInterpretation);
+            rasterLayer.setLegend(legend);
+            mapContext.getLayers().add(rasterLayer);
+ */
+
+
+            mapContext.callLegendChanged();
+            document.setModified(true);
+        } catch (Exception e) {
+            logger.warn("Cant load test layer", e);
+        } finally {
+//            if (dataStore!=null){
+//                DisposeUtils.dispose(dataStore);
+//                dataStore = null;
+//            }
+            if (layer!=null){
+                DisposeUtils.dispose(layer);
+                layer = null;
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        if( DALLocator.getDataManager().isTheOldRasterRegistered() ) {
+          return false;
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        return application.getActiveComponent(ViewDocument.class) != null;
+    }
+
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openTestWCS(int index) {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters parameters;
+        RasterStore store = null;
+        DataParameters providerParams = null;
+        try {
+            parameters = manager.createServerExplorerParameters("WCSRasterServerExplorer");
+//            parameters.setDynValue("service", new URL("http://idechg.chguadalquivir.es/inspire/wcs"));
+
+            parameters.setDynValue("service", new URL("http://inspire.cop.gva.es/mapserver/wcs"));
+//            parameters.setDynValue("service", new URL("http://geoservicios.cantabria.es/inspire/services/NDVI/MapServer/WCSServer?service=WCS"));
+//            parameters.setDynValue("service", new URL("http://www.juntadeandalucia.es/medioambiente/mapwms/REDIAM_WCS_modelos_meteorologicos_prealertas"));
+//            parameters.setDynValue("service", new URL("http://www.idecyl.jcyl.es/IGCyL/services/MedioFisico/MDT/MapServer/WCSServer?request=GetCapabilities&service=WCS"));
+            DataServerExplorer serverExplorer =
+                (DataServerExplorer) manager.openServerExplorer("WCSRasterServerExplorer", parameters);
+
+            @SuppressWarnings("unchecked")
+            List<DataParameters> list = serverExplorer.list();
+            try{
+                providerParams = list.get(index);
+            } catch (IndexOutOfBoundsException e){
+                logger.info("**** index out of bounds *****", e);
+                return null;
+            }
+            store = (RasterStore) manager.openStore("WCSRaster", providerParams);
+        } catch (ValidateDataParametersException | DynFieldNotFoundException | DataException | MalformedURLException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+
+         //Prueba para cacheado de tiles tanto en memoria como en disco
+
+         RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("TileCache");
+         // Prueba para cacheado de tiles solo en memoria
+         //   RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("MemoryTileCache");
+         DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+         // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+        //FIXME: �SOBRA?
+//        if (tileParameters.getDynClass().getDynField("name") != null) {
+//            tileParameters.setDynValue("name", store.getName());
+//        }
+
+        File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+            tileParameters.setDynValue("rootFolder", rootFolder);
+        }
+        // Prueba para que la cach� utilice una carpeta alternativa
+//        if (tileParameters.getDynClass().getDynField("folder") != null) {
+//            tileParameters.setDynValue("folder", new File("/home/paco/tmp/WMS_catastro_cache"));
+//        }
+
+        try {
+            // Prueba para cacheado de tiles tanto en memoria como en disco
+            store.useCache("TileCache", tileParameters);
+            // Prueba para cacheado de tiles solo en memoria
+            // store.useCache("MemoryTileCache", tileParameters);
+        } catch (DataException e) {
+            logger.warn("Can't cache the layer.", e);
+        }
+
+        return store;
+
+    }
+
+    */
+
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openWMTSPnoa() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters parameters;
+        RasterStore store = null;
+        DataParameters providerParams = null;
+        try {
+            parameters = manager.createServerExplorerParameters("WMTS");
+
+            parameters.setDynValue("service", new URL("http://www.ign.es/wmts/pnoa-ma")); //PNOA
+//            parameters.setDynValue("service", new URL("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts")); //opengeo
+
+            DataServerExplorer serverExplorer =
+                (DataServerExplorer) manager.openServerExplorer("WMTS", parameters);
+
+
+
+//            List<String> formats = serverExplorer.getFormats();
+
+            @SuppressWarnings("unchecked")
+            List<DataParameters> list = serverExplorer.list();
+            providerParams = list.get(0); //PNOA
+//            providerParams = list.get(1); //opengeo
+//            providerParams.setDynValue("transparency", false);
+            store = (RasterStore) manager.openStore("WMTS", providerParams);
+//            for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+//                try {
+//                    providerParams = (DataParameters) iterator.next();
+//                    providerParams.setDynValue("transparency", true);
+//                    store = (RasterStore) manager.openStore("WMS", providerParams);
+//                    break;
+//                } catch (Exception e) {
+//                    continue;
+//                }
+//            }
+//            if(store==null){
+//                throw new IllegalArgumentException("Can't open any store from this server.'");
+//            }
+        } catch (ValidateDataParametersException | DynFieldNotFoundException | DataException | MalformedURLException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+         //Prueba para cacheado de tiles tanto en memoria como en disco
+         RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("TileCache");
+         // Prueba para cacheado de tiles solo en memoria
+         //   RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("MemoryTileCache");
+         DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+         // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+        //FIXME: �SOBRA?
+//        if (tileParameters.getDynClass().getDynField("name") != null) {
+//            tileParameters.setDynValue("name", store.getName());
+//        }
+
+        File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+            tileParameters.setDynValue("rootFolder", rootFolder);
+        }
+        // Prueba para que la cach� utilice una carpeta alternativa
+//        if (tileParameters.getDynClass().getDynField("folder") != null) {
+//            tileParameters.setDynValue("folder", new File("/home/paco/tmp/WMS_catastro_cache"));
+//        }
+
+        try {
+            // Prueba para cacheado de tiles tanto en memoria como en disco
+            store.useCache("TileCache", tileParameters);
+            // Prueba para cacheado de tiles solo en memoria
+            // store.useCache("MemoryTileCache", tileParameters);
+        } catch (DataException e) {
+            logger.warn("Can't cache the layer.", e);
+        }
+
+        return store;
+
+    }
+*/
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openWMSCatastro() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters parameters;
+        RasterStore store = null;
+        DataParameters providerParams = null;
+        try {
+            parameters = manager.createServerExplorerParameters("WMS");
+            parameters.setDynValue("service", new URL("http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx"));
+            parameters.setDynValue("override_capabilities", false);
+
+//            parameters.setDynValue("service", new URL("http://terramapas.icv.gva.es/mapa_topografico_base"));
+//            parameters.setDynValue("service", new URL("http://atlas.gc.ca/cgi-bin/atlaswms_en"));
+            DataServerExplorer serverExplorer =
+                (DataServerExplorer) manager.openServerExplorer("WMS", parameters);
+
+//            List<String> formats = serverExplorer.getFormats();
+
+            @SuppressWarnings("unchecked")
+            List<DataParameters> list = serverExplorer.list();
+            providerParams = list.get(1);
+            providerParams.setDynValue("transparency", false);
+            providerParams.setDynValue("override_capabilities", false);
+            store = (RasterStore) manager.openStore("WMS", providerParams);
+//            for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+//                try {
+//                    providerParams = (DataParameters) iterator.next();
+//                    providerParams.setDynValue("transparency", true);
+//                    store = (RasterStore) manager.openStore("WMS", providerParams);
+//                    break;
+//                } catch (Exception e) {
+//                    continue;
+//                }
+//            }
+//            if(store==null){
+//                throw new IllegalArgumentException("Can't open any store from this server.'");
+//            }
+        } catch (ValidateDataParametersException | DynFieldNotFoundException | DataException | MalformedURLException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+         //Prueba para cacheado de tiles tanto en memoria como en disco
+
+         RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("TileCache");
+         // Prueba para cacheado de tiles solo en memoria
+         //   RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory)manager.getStoreProviderFactory("MemoryTileCache");
+         DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+         // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+        //FIXME: �SOBRA?
+//        if (tileParameters.getDynClass().getDynField("name") != null) {
+//            tileParameters.setDynValue("name", store.getName());
+//        }
+
+        File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+            tileParameters.setDynValue("rootFolder", rootFolder);
+        }
+        // Prueba para que la cach� utilice una carpeta alternativa
+//        if (tileParameters.getDynClass().getDynField("folder") != null) {
+//            tileParameters.setDynValue("folder", new File("/home/paco/tmp/WMS_catastro_cache"));
+//        }
+
+        try {
+            // Prueba para cacheado de tiles tanto en memoria como en disco
+            store.useCache("TileCache", tileParameters);
+            // Prueba para cacheado de tiles solo en memoria
+//             store.useCache("MemoryTileCache", tileParameters);
+        } catch (DataException e) {
+            logger.warn("Can't cache the layer.", e);
+        }
+        return store;
+
+    }
+    */
+
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openGoogleMaps(String mapType) {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("GoogleMaps");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("mapType") != null) {
+            params.setDynValue("mapType", mapType);
+        }
+
+        if (params.getDynClass().getDynField("hasApiKey") != null) {
+            params.setDynValue("hasApiKey", true);
+        }
+
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:3857"));
+        }
+
+        //FIXME:
+
+        if (params.getDynClass().getDynField("apiKey") != null) {
+            params.setDynValue("apiKey", "AIzaSyANaBO8KAMiwLosno8ue84efcTNZeqWjIw");
+        }
+        if (params.getDynClass().getDynField("language") != null) {
+            params.setDynValue("language", "es");
+        }
+
+//        if (params.getDynClass().getDynField("region") != null) {
+//            params.setDynValue("region", "");
+//        }
+
+        if (params.getDynClass().getDynField("format") != null) {
+            params.setDynValue("format", "png32");
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("GoogleMaps", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+        //Prueba para cacheado de tiles tanto en memoria como en disco
+        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("TileCache");
+        // Prueba para cacheado de tiles solo en memoria
+//        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("MemoryTileCache");
+      DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+      // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+      // FIXME: Ver qu� datos ser�an los adecuados para generar una carpeta
+      // �nica para la cach�
+
+      File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+      if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+          tileParameters.setDynValue("rootFolder", rootFolder);
+      }
+
+
+      try {
+          //Prueba para cacheado de tiles tanto en memoria como en disco
+          store.useCache("TileCache", tileParameters);
+          // Prueba para cacheado de tiles solo en memoria
+//          store.useCache("MemoryTileCache", tileParameters);
+      } catch (DataException e) {
+          logger.warn("Can't cache the layer.", e);
+      }
+
+        return store;
+
+    }
+
+*/
+
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openBingMaps(String mapType) {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("BingMapsRaster");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("mapType") != null) {
+            params.setDynValue("mapType", mapType);
+        }
+
+        if (params.getDynClass().getDynField("hasApiKey") != null) {
+            params.setDynValue("hasApiKey", true);
+        }
+
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:3857"));
+        }
+
+        //FIXME:
+
+        if (params.getDynClass().getDynField("apiKey") != null) {
+            params.setDynValue("apiKey", "ApnOuekwlg7jlnsnahbnFyJR8dbfOI0iICSGKauUt-z4_NuB7utaWZXAYmdWiX0P");
+        }
+        if (params.getDynClass().getDynField("language") != null) {
+            params.setDynValue("language", "es");
+        }
+
+//        if (params.getDynClass().getDynField("region") != null) {
+//            params.setDynValue("region", "");
+//        }
+
+//        if (params.getDynClass().getDynField("format") != null) {
+//            params.setDynValue("format", "png32");
+//        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("BingMapsRaster", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+        //Prueba para cacheado de tiles tanto en memoria como en disco
+        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("TileCache");
+        // Prueba para cacheado de tiles solo en memoria
+//        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("MemoryTileCache");
+      DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+      // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+      // FIXME: Ver qu� datos ser�an los adecuados para generar una carpeta
+      // �nica para la cach�
+
+      File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+      if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+          tileParameters.setDynValue("rootFolder", rootFolder);
+      }
+
+
+      try {
+          //Prueba para cacheado de tiles tanto en memoria como en disco
+          store.useCache("TileCache", tileParameters);
+          // Prueba para cacheado de tiles solo en memoria
+//          store.useCache("MemoryTileCache", tileParameters);
+      } catch (DataException e) {
+          logger.warn("Can't cache the layer.", e);
+      }
+
+        return store;
+
+    }
+*/
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openOSM(MyOSMServer myOSMServer) {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("OSM");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("name") != null) {
+            params.setDynValue("name", myOSMServer.name);
+        }
+
+        if (params.getDynClass().getDynField("service") != null) {
+            params.setDynValue("service", myOSMServer.service);
+        }
+
+        if (params.getDynClass().getDynField("maxLevel") != null) {
+            params.setDynValue("maxLevel", myOSMServer.maxLevel);
+        }
+
+        if (params.getDynClass().getDynField("suffix") != null) {
+            params.setDynValue("suffix", myOSMServer.suffix);
+        }
+
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:3857"));
+        }
+
+        if (params.getDynClass().getDynField("apiKey") != null) {
+            params.setDynValue("apiKey", myOSMServer.apiKey);
+        }
+
+        RasterStore store = null;
+
+        try {
+            store = (RasterStore) manager.openStore("OSM", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+        //Prueba para cacheado de tiles tanto en memoria como en disco
+        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("TileCache");
+        // Prueba para cacheado de tiles solo en memoria
+//        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("MemoryTileCache");
+      DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+      // FIXME: Si la prueba es para cacheado solo en memoria es innecesaria la generaci�n de la carpeta, se puede comentarizar
+
+      // FIXME: Ver qu� datos ser�an los adecuados para generar una carpeta
+      // �nica para la cach�
+
+      File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+      if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+          tileParameters.setDynValue("rootFolder", rootFolder);
+      }
+
+
+      try {
+          //Prueba para cacheado de tiles tanto en memoria como en disco
+          store.useCache("TileCache", tileParameters);
+          // Prueba para cacheado de tiles solo en memoria
+//          store.useCache("MemoryTileCache", tileParameters);
+      } catch (DataException e) {
+          logger.warn("Can't cache the layer.", e);
+      }
+
+        return store;
+    }
+*/
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openWMS() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("WMS");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("WMS", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+        try {
+            exportGTiff(store);
+        } catch (ValidateDataParametersException | DataException | BufferException | LocatorException | CreateEnvelopeException e) {
+            logger.info("failed to copy");
+        }
+        return store;
+
+    }
+*/
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+/*    private RasterStore openWCS() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("WCS");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("url") != null) {
+            params.setDynValue("url", "http://inspire.cop.gva.es/mapserver/wcs?");
+        }
+        if (params.getDynClass().getDynField("coverage") != null) {
+            params.setDynValue("coverage", "MDT");
+        }
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("WCS", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+        try {
+            exportGTiff(store);
+        } catch (ValidateDataParametersException | DataException | BufferException | LocatorException | CreateEnvelopeException e) {
+            logger.info("failed to copy");
+        }
+        return store;
+
+    }
+*/
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+    private RasterStore openPOSTGIS() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("PostGISRaster");
+        DynObject params = providerFactory.createParameters();
+        // PG:host='gvsig-training.com' port='5432'
+        // dbname='andalucia' user='curso' password='curso' schema='public'
+        // table='tr_relieve_andalucia2'
+        if (params.getDynClass().getDynField("host") != null) {
+            params.setDynValue("host", "gvsig-training.com");
+        }
+        if (params.getDynClass().getDynField("dbname") != null) {
+            params.setDynValue("dbname", "andalucia");
+        }
+        if (params.getDynClass().getDynField("table") != null) {
+            params.setDynValue("table", "tr_relieve_andalucia2");
+        }
+        if (params.getDynClass().getDynField("schema") != null) {
+            params.setDynValue("schema", "public");
+        }
+        if (params.getDynClass().getDynField("user") != null) {
+            params.setDynValue("user", "curso");
+        }
+        if (params.getDynClass().getDynField("password") != null) {
+            params.setDynValue("password", "curso");
+        }
+        if (params.getDynClass().getDynField("port") != null) {
+            params.setDynValue("port", 5432);
+        }
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:23030"));
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("PostGISRaster", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+        try {
+            exportPNG(store);
+        } catch (ValidateDataParametersException | DataException | BufferException | LocatorException | CreateEnvelopeException e) {
+            logger.info("failed to copy");
+        }
+        return store;
+
+    }
+
+    /**
+     * TO TEST ONLY
+     *
+     * @return
+     */
+    private RasterStore openTileCache() {
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("TileCache");
+        DynObject params = providerFactory.createParameters();
+
+        if (params.getDynClass().getDynField("name") != null) {
+            params.setDynValue("name", "TilecacheTEST");
+        }
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore("TileCache", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+        // try {
+        // exportGTiff(store);
+        // } catch (ValidateDataParametersException | DataException
+        // | BufferException e) {
+        // logger.info("failed to copy");
+        // }
+        return store;
+    }
+
+
+/*    private RasterStore openMultifile() throws Exception {
+
+//        File redFile = new File("/home/paco/tmp/costa1_R.tif");
+//        File greenFile = new File("/home/paco/tmp/costa1_G.tif");
+//        File blueFile = new File("/home/paco/tmp/costa1_B.tif");
+
+
+//        File redFile = new File("/home/paco/tmp/Costa1-rojo.tif");
+//        File greenFile = new File("/home/paco/tmp/Costa1-verde.tif");
+//        File blueFile = new File("/home/paco/tmp/Costa1-azul.tif");
+
+        DataManager manager = DALLocator.getDataManager();
+
+
+        //RED
+
+//        File redFile = new File("/home/paco/Descargas/fruit-2021816_640-rojo.tiff");
+        File redFile = new File("/home/paco/Documentos/RED.tiff");
+        DataServerExplorerParameters redExplorerParams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        FilesystemServerExplorer redExplorer = (FilesystemServerExplorer) manager.openServerExplorer(FilesystemServerExplorer.NAME, redExplorerParams);
+        String redType = redExplorer.getProviderName(redFile);
+
+        DynObject redParams = manager.createStoreParameters(redType);
+
+        if (redParams.getDynClass().getDynField("file") != null) {
+            redParams.setDynValue("file", redFile);
+        }
+        if (redParams.getDynClass().getDynField("crs") != null) {
+            redParams.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+        }
+
+        RasterStore redStore = null;
+
+
+        //GREEN
+
+//        File greenFile = new File("/home/paco/Descargas/fruit-2021816_640-verde.tiff");
+        File greenFile = new File("/home/paco/Documentos/GREEN.tiff");
+
+        DataServerExplorerParameters greenExplorerParams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        FilesystemServerExplorer greenExplorer = (FilesystemServerExplorer) manager.openServerExplorer(FilesystemServerExplorer.NAME, greenExplorerParams);
+        String greenType = greenExplorer.getProviderName(greenFile);
+
+        DynObject greenParams = manager.createStoreParameters(greenType);
+
+        if (greenParams.getDynClass().getDynField("file") != null) {
+            greenParams.setDynValue("file", greenFile);
+        }
+        if (greenParams.getDynClass().getDynField("crs") != null) {
+            greenParams.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+        }
+
+        RasterStore greenStore = null;
+
+        //BLUE
+
+//        File blueFile = new File("/home/paco/Descargas/fruit-2021816_640-azul.tiff");
+        File blueFile = new File("/home/paco/Documentos/BLUE.tiff");
+
+        DataServerExplorerParameters blueExplorerParams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        FilesystemServerExplorer blueExplorer = (FilesystemServerExplorer) manager.openServerExplorer(FilesystemServerExplorer.NAME, blueExplorerParams);
+        String blueType = blueExplorer.getProviderName(blueFile);
+
+        DynObject blueParams = manager.createStoreParameters(blueType);
+
+        if (blueParams.getDynClass().getDynField("file") != null) {
+            blueParams.setDynValue("file", blueFile);
+        }
+        if (blueParams.getDynClass().getDynField("crs") != null) {
+            blueParams.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+        }
+
+        RasterStore blueStore = null;
+
+        //ALPHA
+
+      File alphaFile = new File("/home/paco/Documentos/ALPHA.tiff");
+
+      DataServerExplorerParameters alphaExplorerParams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+      FilesystemServerExplorer alphaExplorer = (FilesystemServerExplorer) manager.openServerExplorer(FilesystemServerExplorer.NAME, alphaExplorerParams);
+      String alphaType = alphaExplorer.getProviderName(alphaFile);
+
+      DynObject alphaParams = manager.createStoreParameters(alphaType);
+
+      if (alphaParams.getDynClass().getDynField("file") != null) {
+          alphaParams.setDynValue("file", alphaFile);
+      }
+      if (alphaParams.getDynClass().getDynField("crs") != null) {
+          alphaParams.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+      }
+
+      RasterStore alphaStore = null;
+
+
+        try {
+            redStore = (RasterStore) manager.openStore(redType, redParams);
+            greenStore = (RasterStore) manager.openStore(greenType, greenParams);
+            blueStore = (RasterStore) manager.openStore(blueType, blueParams);
+            alphaStore = (RasterStore) manager.openStore(alphaType, alphaParams);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        List<Integer> bands = new ArrayList<Integer>();
+        bands.add(0);
+//        bands.add(1);
+
+        redStore.addBands(greenStore, bands);
+        redStore.addBands(blueStore, bands);
+        redStore.addBands(alphaStore, bands);
+        if (redStore != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+        /*
+        //Prueba para cacheado de tiles tanto en memoria como en disco
+        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("TileCache");
+        // Prueba para cacheado de tiles solo en memoria
+//        RasterStoreProviderFactory tileCacheProviderFactory = (RasterStoreProviderFactory) manager.getStoreProviderFactory("MemoryTileCache");
+      DynObject tileParameters = tileCacheProviderFactory.createParameters();
+
+      File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+      if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+          tileParameters.setDynValue("rootFolder", rootFolder);
+      }
+
+
+      try {
+          //Prueba para cacheado de tiles tanto en memoria como en disco
+          redStore.useCache("TileCache", tileParameters);
+//          greenStore.useCache("TileCache", tileParameters);
+          blueStore.useCache("TileCache", tileParameters);
+          // Prueba para cacheado de tiles solo en memoria
+//          redStore.useCache("MemoryTileCache", tileParameters);
+      } catch (DataException e) {
+          logger.warn("Can't cache the layer.", e);
+      }
+
+        return redStore;
+    }
+*/
+
+
+/*    private RasterStore openFileCached(File file) throws Exception {
+        DataManager manager = DALLocator.getDataManager();
+        DataServerExplorerParameters explorerParams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+        FilesystemServerExplorer explorer = (FilesystemServerExplorer) manager.openServerExplorer(FilesystemServerExplorer.NAME, explorerParams);
+        String type = explorer.getProviderName(file);
+
+
+        DynObject params = manager.createStoreParameters(type);
+//        DynObject params = manager.createStoreParameters("GTiff");
+//        DynObject params = manager.createStoreParameters("PNG");
+
+        if (params.getDynClass().getDynField("file") != null) {
+            params.setDynValue("file", file);
+        }
+        if (params.getDynClass().getDynField("crs") != null) {
+            params.setDynValue("crs", CRSFactory.getCRS("EPSG:25830"));
+        }
+
+        RasterStore store = null;
+        try {
+            store = (RasterStore) manager.openStore(type, params);
+//            store = (RasterStore) manager.openStore("PNG", params);
+        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
+            logger.info("**** error opening store *****", e);
+        }
+        if (store != null) {
+            logger.info("**** ������� O.K !!!!!!! *****");
+        } else {
+            logger.info("**** K.O ;_( *****");
+        }
+
+        DynObject tileParameters = manager.createStoreParameters("TileCache");
+
+        File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
+
+        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+            tileParameters.setDynValue("rootFolder", rootFolder);
+        }
+
+        try {
+            store.useCache("TileCache", tileParameters);
+        } catch (DataException e) {
+            logger.warn("Can't cache the layer.", e);
+        }
+
+        return store;
+    }
+    */
+
+    /**
+     * TO TEST ONLY
+     * @throws CreateEnvelopeException
+     * @throws LocatorException
+     */
+    private void exportPNG(RasterStore store) throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException, DataException, BufferException, LocatorException, CreateEnvelopeException {
+        String providerName = "PNG";
+        String extension = "png";
+
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters eparams = manager.createServerExplorerParameters("FilesystemExplorer");
+        int count = 0;
+        String path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile." + extension;
+        File destFile = new File(path);
+        while (destFile.exists()) {
+            count++;
+            path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile_" + count + "." + extension;
+            destFile = new File(path);
+        }
+        eparams.setDynValue("initialpath", path);
+        DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
+
+        NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
+        params.setDynValue("file", destFile);
+
+        params.setDynValue("worldfile", false);
+        params.setDynValue("zlevel", 1);
+
+        Buffer buffer = store.getRasterSet().clip(store.getEnvelope());
+        params.setBuffer(buffer);
+        serverExplorer.add(providerName, params, true);
+    }
+
+    /**
+     * TO TEST ONLY
+     * @throws CreateEnvelopeException
+     * @throws LocatorException
+     */
+    private void exportGTiff(RasterStore store) throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException, DataException, BufferException, LocatorException, CreateEnvelopeException {
+        String providerName = "GTiff";
+        String extension = "tif";
+
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters eparams = manager.createServerExplorerParameters("FilesystemExplorer");
+        int count = 0;
+        String path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile." + extension;
+        File destFile = new File(path);
+        while (destFile.exists()) {
+            count++;
+            path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile_" + count + "." + extension;
+            destFile = new File(path);
+        }
+        eparams.setDynValue("initialpath", path);
+        DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
+
+        NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
+        params.setDynValue("file", destFile);
+
+        params.setDynValue("compress", "NONE");
+        params.setDynValue("tfw", false);
+        params.setDynValue("photometric", "RGB");
+
+        Buffer buffer = store.getRasterSet().clip(store.getEnvelope());
+        params.setBuffer(buffer);
+        serverExplorer.add(providerName, params, true);
+    }
+
+    /**
+     * TO TEST ONLY
+     * @throws CreateEnvelopeException
+     * @throws LocatorException
+     */
+    private void exportBMP(RasterStore store) throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException, DataException, BufferException, LocatorException, CreateEnvelopeException {
+        String providerName = "BMP";
+        String extension = "bmp";
+
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters eparams = manager.createServerExplorerParameters("FilesystemExplorer");
+        int count = 0;
+        String path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile." + extension;
+        File destFile = new File(path);
+        while (destFile.exists()) {
+            count++;
+            path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile_" + count + "." + extension;
+            destFile = new File(path);
+        }
+        eparams.setDynValue("initialpath", path);
+        DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
+
+        NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
+        params.setDynValue("file", destFile);
+
+        params.setDynValue("worldfile", true);
+
+        Buffer buffer = store.getRasterSet().clip(store.getEnvelope());
+        params.setBuffer(buffer);
+        serverExplorer.add(providerName, params, true);
+    }
+
+    /**
+     * TO TEST ONLY
+     * @throws CreateEnvelopeException
+     * @throws LocatorException
+     */
+    private void exportNetCDF(RasterStore store) throws InitializeException, ProviderNotRegisteredException,
+        ValidateDataParametersException, DataException, BufferException, LocatorException, CreateEnvelopeException {
+        String providerName = "netCDF";
+        String extension = "nc";
+
+        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
+        DataServerExplorerParameters eparams = manager.createServerExplorerParameters("FilesystemExplorer");
+        int count = 0;
+        String path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile." + extension;
+        File destFile = new File(path);
+        while (destFile.exists()) {
+            count++;
+            path = "/home/daniel/pruebas/datosPruebaRaster/copiedFile_" + count + "." + extension;
+            destFile = new File(path);
+        }
+        eparams.setDynValue("initialpath", path);
+        DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
+
+        NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
+        params.setDynValue("file", destFile);
+        // params.setDynValue("format", "NC4C");
+        // params.setDynValue("pixeltype", "DEFAULT");
+        params.setDynValue("chunking", false);
+
+        Buffer buffer = store.getRasterSet().clip(store.getEnvelope());
+        params.setBuffer(buffer);
+        serverExplorer.add(providerName, params, true);
+    }
+
+//    private class MyOSMServer {
+//        public String name;
+//        public URL service;
+//        public int maxLevel;
+//        public String suffix;
+//        public String apiKey;
+//
+//        public MyOSMServer(String name, URL service, int maxLevel, String suffix, String apiKey) {
+//            this.name = name;
+//            this.service = service;
+//            this.maxLevel = maxLevel;
+//            this.suffix = suffix;
+//            this.apiKey = apiKey;
+//        }
+//    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/TransparencyPropertiesPage.java	(revision 46118)
@@ -0,0 +1,77 @@
+package org.gvsig.raster.app.mainplugin;
+
+import javax.swing.JComponent;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingManager;
+import org.gvsig.fmap.mapcontext.raster.swing.transparency.TransparencyPanel;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class TransparencyPropertiesPage extends javax.swing.JPanel implements PropertiesPage {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7929465326507671702L;
+    private TransparencyPanel panel;
+    private FLayer layer;
+
+
+
+    public TransparencyPropertiesPage(FLayer layer) {
+        this.layer = layer;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.panel == null) {
+            MapContextRasterSwingManager manager = MapContextRasterSwingLocator.getSwingManager();
+            panel = manager.createTransparencyPanel();
+            panel.set(layer);
+        }
+        return (JComponent) panel;
+    }
+
+    @Override
+    public void setData(Object data) {
+      // FIXME
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_transparency");
+    }
+
+    @Override
+    public int getPriority() {
+        return 550;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        this.whenApply();
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        this.panel.fetch(layer);
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        // Do nothing
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPropertiesPage.java	(revision 46118)
@@ -0,0 +1,86 @@
+package org.gvsig.raster.app.mainplugin.operations;
+
+import javax.swing.JComponent;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class OperationsPropertiesPage extends javax.swing.JPanel implements PropertiesPage, Disposable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3392816016162558568L;
+    private OperationsPagePanel panel;
+    private FLayer layer;
+
+
+
+    public OperationsPropertiesPage(FLayer layer) {
+        DisposeUtils.bind(this);
+        DisposeUtils.bind(layer);
+        this.layer = layer;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        if (this.panel == null) {
+            panel = new OperationsPagePanelController();
+            panel.set(layer);
+        }
+        return (JComponent) panel;
+    }
+
+    @Override
+    public void setData(Object data) {
+      // FIXME
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_filters");
+    }
+
+    @Override
+    public int getPriority() {
+        return 550;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        this.whenApply();
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        this.panel.fetch(layer);
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        // Do nothing
+        return true;
+    }
+
+    @Override
+    public void dispose() {
+        if(!ToolsLocator.getDisposableManager().release(this)){
+            return;
+        }
+        DisposeUtils.disposeQuietly(layer);
+        DisposeUtils.disposeQuietly(panel);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanel.java	(revision 46118)
@@ -0,0 +1,24 @@
+package org.gvsig.raster.app.mainplugin.operations;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.dispose.Disposable;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ * @author fdiaz
+ *
+ */
+public interface OperationsPagePanel extends Component, Disposable{
+
+    /**
+     * @param layer
+     * @return
+     */
+    public boolean fetch(FLayer layer);
+
+    /**
+     * @param layer
+     */
+    public void set(FLayer layer);
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsLayerPropertiesPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsLayerPropertiesPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsLayerPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,58 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin.operations;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class OperationsLayerPropertiesPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+    }
+
+    @Override
+    public boolean isVisible(Object obj) {
+        return obj instanceof RasterLayer;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object obj) {
+        return (PropertiesPage) new OperationsPropertiesPage((FLayer) obj);
+    }
+
+    @Override
+    public String getName() {
+        return "Operations";
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelController.java	(revision 46118)
@@ -0,0 +1,524 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.raster.app.mainplugin.operations;
+
+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 java.util.Locale;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingLocator;
+import org.gvsig.fmap.mapcontext.raster.swing.MapContextRasterSwingManager;
+import org.gvsig.fmap.mapcontext.raster.swing.operations.OperationListPanel;
+import org.gvsig.fmap.mapcontext.raster.swing.operations.OperationSelectorPanel;
+import org.gvsig.fmap.mapcontext.raster.swing.previewer.OneLayerPreviewer;
+import org.gvsig.raster.lib.buffer.api.BufferLocator;
+import org.gvsig.raster.lib.buffer.api.OperationManager;
+import org.gvsig.raster.lib.buffer.api.operations.OperationFactory;
+import org.gvsig.raster.lib.buffer.api.operations.OperationList;
+import org.gvsig.raster.lib.buffer.api.operations.OperationListEntry;
+import org.gvsig.raster.lib.legend.api.RasterLegend;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynform.DynFormLocator;
+import org.gvsig.tools.dynform.JDynForm;
+import org.gvsig.tools.dynform.JDynForm.JDynFormListener;
+import org.gvsig.tools.dynform.JDynFormField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class OperationsPagePanelController extends OperationsPagePanelView implements OperationsPagePanel {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -274577556465497747L;
+
+    private static final Logger LOG = LoggerFactory.getLogger(OperationsPagePanelController.class);
+
+    private OperationSelectorPanel selector;
+    private OperationListPanel operationListPanel;
+    private JSplitPane splPanelRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+    private JSplitPane splPanelMiddleLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+    private JSplitPane splPanelLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+    private RasterLayer rasterLayer;
+    private OneLayerPreviewer previewer;
+    private OneLayerPreviewer middlePreviewer;
+    private boolean initialized;
+    private boolean isChanged;
+
+    private JDynForm form;
+
+    private RasterLayer clonedLayerForPreview;
+
+    private RasterLayer clonedLayerForMiddlePreview;
+
+    /**
+     *
+     */
+    public OperationsPagePanelController() {
+        this.initialized = false;
+        DisposeUtils.bind(this);
+        initializeComponents();
+        translate();
+    }
+
+    private void initializeComponents() {
+        splPanelRight.setTopComponent(getPreviewer().asJComponent());
+        splPanelRight.setBottomComponent(getMiddlePreviewer().asJComponent());
+        splPanelRight.setResizeWeight(0.5);
+
+        splPanel.setRightComponent(splPanelRight);
+
+        MapContextRasterSwingManager manager = MapContextRasterSwingLocator.getSwingManager();
+        selector = manager.createOperationSelectorPanel();
+        selector.addListSelectionListener(new ListSelectionListener() {
+
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                Thread thread = new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        SwingUtilities.invokeLater(new Runnable() {
+                            @Override
+                            public void run() {
+                                OperationFactory selected = selector.getSelected();
+                                if (selected != null) {
+                                    updateParametersPanelFromSelector(selected);
+                                    operationListPanel.clearSelection();
+                                }
+                            }
+                        });
+                    }
+                }, "Selector changed");
+
+                thread.setDaemon(false);
+                thread.start();
+            }
+        });
+
+
+        operationListPanel = manager.createOperationListPanel();
+
+        operationListPanel.addListSelectionListener(new ListSelectionListener() {
+
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                Thread thread = new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        SwingUtilities.invokeLater(new Runnable() {
+                            @Override
+                            public void run() {
+                                OperationListEntry selected = operationListPanel.getSelected();
+                                if(selected!=null){
+                                    updateParametersPanelFromOperationListPanel(selected);
+                                    selector.clearSelection();
+                                } else {
+                                    int location = splPanelMiddleLeft.getDividerLocation();
+                                    form = null;
+                                    JPanel emptyPanel = getEmptyPanel();
+                                    splPanelMiddleLeft.setRightComponent(emptyPanel);
+                                    splPanelMiddleLeft.setDividerLocation(location);
+                                }
+                            }
+                        });
+                    }
+                }, "Selector changed");
+
+                thread.setDaemon(false);
+                thread.start();
+            }
+        });
+
+        operationListPanel.addTableModelListener(new TableModelListener() {
+
+            @Override
+            public void tableChanged(TableModelEvent e) {
+                isChanged = true;
+                updatePreviewers();
+            }
+        });
+
+        operationListPanel.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (e.getActionCommand().equals(OperationListPanel.ADD_ACTION_COMMAND)) {
+                    doAddOperation();
+                } else if (e.getActionCommand().equals(OperationListPanel.UPDATE_ACTION_COMMAND)) {
+                    doUpdateOperation();
+                } else if (e.getActionCommand().equals(OperationListPanel.UP_ACTION_COMMAND)) {
+                    isChanged = true;
+                } else if (e.getActionCommand().equals(OperationListPanel.DOWN_ACTION_COMMAND)) {
+                    isChanged = true;
+                } else if (e.getActionCommand().equals(OperationListPanel.REMOVE_ACTION_COMMAND)) {
+                    isChanged = true;
+                }
+            }
+        });
+
+        splPanelLeft.setTopComponent(selector.asJComponent());
+        splPanelLeft.setBottomComponent(operationListPanel.asJComponent());
+        splPanelMiddleLeft.setLeftComponent(splPanelLeft);
+        splPanelMiddleLeft.setRightComponent(getEmptyPanel());
+
+        splPanel.setLeftComponent(splPanelMiddleLeft);
+        splPanel.setResizeWeight(0.75);
+        splPanel.setDividerLocation(0.75);
+
+        splPanelRight.setResizeWeight(0.50);
+
+        splPanelMiddleLeft.setResizeWeight(0.1875);
+        splPanelMiddleLeft.setDividerLocation(0.1875);
+
+        splPanelLeft.setResizeWeight(0.50);
+    }
+
+
+
+    private void updateParametersPanelFromSelector(OperationFactory selected) {
+        try {
+            DynObject parameters = selected.createParameters();
+            form = DynFormLocator.getDynFormManager().createJDynForm(parameters);
+            form.addListener(new JDynFormListener() {
+
+                @Override
+                public void message(String arg0) {
+                    // TODO Auto-generated method stub
+                }
+
+                @Override
+                public void fieldChanged(JDynFormField arg0) {
+                    updatePreviewers();
+                }
+            });
+            splPanelMiddleLeft.setRightComponent(form.asJComponent());
+            this.operationListPanel.enableAdd(true);
+            this.operationListPanel.enableUpdate(false);
+            updatePreviewers();
+
+        } catch (Exception e) {
+            LOG.warn("Can't create parameters for '"+selected.getName()+"'.", e);
+            return;
+        }
+
+    }
+
+    private void updateParametersPanelFromOperationListPanel(OperationListEntry selected) {
+        try {
+            DynObject parameters = selected.getParameters();
+            form = DynFormLocator.getDynFormManager().createJDynForm(parameters);
+            form.addListener(new JDynFormListener() {
+
+                @Override
+                public void message(String arg0) {
+                    // TODO Auto-generated method stub
+                }
+
+                @Override
+                public void fieldChanged(JDynFormField arg0) {
+                    updatePreviewers();
+                }
+            });
+            splPanelMiddleLeft.setRightComponent(form.asJComponent());
+            this.operationListPanel.enableAdd(false);
+            this.operationListPanel.enableUpdate(true);
+            updatePreviewers();
+
+        } catch (Exception e) {
+            LOG.warn("Can't create parameters for '"+selected.getOperation().getFactory().getName()+"'.", e);
+            return;
+        }
+
+    }
+
+    private OneLayerPreviewer getPreviewer() {
+        if(previewer == null){
+            previewer = MapContextRasterSwingLocator.getSwingManager().createOneLayerPreviewer();
+            previewer.asJComponent().setToolTipText("_previewer");
+        }
+        return this.previewer;
+
+    }
+
+    private OneLayerPreviewer getMiddlePreviewer() {
+        if(middlePreviewer == null){
+            middlePreviewer = MapContextRasterSwingLocator.getSwingManager().createOneLayerPreviewer();
+            middlePreviewer.asJComponent().setToolTipText("_middle_previewer");
+        }
+        return this.middlePreviewer;
+
+    }
+
+    private void initializePreviewers() {
+        getPreviewer().setLayer(clonedLayerForPreview);
+        getMiddlePreviewer().setLayer(clonedLayerForMiddlePreview);
+
+        splPanelRight.setTopComponent(previewer.asJComponent());
+        splPanelRight.setBottomComponent(middlePreviewer.asJComponent());
+        initialized = true;
+    }
+
+    private void updatePreviewers() {
+        updatePreviewer();
+        updateMiddlePreviewer();
+    }
+
+    private void updatePreviewer() {
+        if (this.initialized) {
+            RasterLegend legendForPreview = ((RasterLayer)this.getPreviewer().getLayer()).getLegend();
+            OperationList operationListForPreview = ((OperationManager) BufferLocator.getBufferManager()).createOperationList();
+            operationListPanel.fetch(operationListForPreview);
+            int selectedRow = operationListPanel.getSelectedRow();
+            if (selectedRow >= 0 && selectedRow<operationListForPreview.size()) {
+                OperationListEntry selectedEntryForPreview = operationListForPreview.get(selectedRow);
+                DynObject parametersForPreview = selectedEntryForPreview.getParameters();
+                if (form.hasValidValues()) {
+                    form.getValues(parametersForPreview);
+                    // Update complete previewer but the selected entry is filled with form values
+                    legendForPreview.setFilters(operationListForPreview);
+                }
+            } else if(selector.getSelected()!=null){
+                updateLegendFromSelector(legendForPreview, operationListForPreview);
+            } else {
+                form = null;
+                //update legend with complete operationList
+                legendForPreview.setFilters(operationListForPreview);
+            }
+        }
+    }
+
+    private void updateMiddlePreviewer() {
+        if (this.initialized) {
+            RasterLegend legendForMiddlePreview = ((RasterLayer)this.getMiddlePreviewer().getLayer()).getLegend();
+            OperationList operationListForMiddlePreview =
+                ((OperationManager) BufferLocator.getBufferManager()).createOperationList();
+            operationListPanel.fetch(operationListForMiddlePreview);
+            int selectedRow = operationListPanel.getSelectedRow();
+            if (selectedRow >= 0 && selectedRow<operationListForMiddlePreview.size()) {
+                OperationListEntry selectedEntryForMiddlePreview = operationListForMiddlePreview.get(selectedRow);
+                DynObject parametersForMiddlePreview = selectedEntryForMiddlePreview.getParameters();
+                if (form.hasValidValues()) {
+                    form.getValues(parametersForMiddlePreview);
+                    // Update middle previewer but the selected entry is filled with form values
+                    while(operationListForMiddlePreview.size()>selectedRow+1){
+                        operationListForMiddlePreview.remove(operationListForMiddlePreview.size()-1);
+                    }
+                    legendForMiddlePreview.setFilters(operationListForMiddlePreview);
+                }
+            } else if(selector.getSelected()!=null){
+                updateLegendFromSelector(legendForMiddlePreview, operationListForMiddlePreview);
+            } else {
+                form = null;
+                //update legend with complete operationList
+                legendForMiddlePreview.setFilters(operationListForMiddlePreview);
+            }
+        }
+    }
+
+    /**
+     * @param rasterLegend
+     * @param operationList
+     */
+    private void updateLegendFromSelector(RasterLegend rasterLegend, OperationList operationList) {
+        OperationFactory factory = selector.getSelected();
+        DynObject parameters = factory.createParameters();
+        if (form.hasValidValues()) {
+            //update legend with complete operationList but the last entry is filled with form values
+            form.getValues(parameters);
+            OperationManager operationManager = BufferLocator.getOperationManager();
+            OperationListEntry entryForPreview = operationManager.createOperationListEntry(factory.create(), parameters);
+            entryForPreview.setActive(true);
+            operationList.add(entryForPreview);
+            rasterLegend.setFilters(operationList);
+        }
+    }
+
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        previewer.asJComponent().setToolTipText(i18nManager.getTranslation(previewer.asJComponent().getToolTipText()));
+        middlePreviewer.asJComponent().setToolTipText(i18nManager.getTranslation(middlePreviewer.asJComponent().getToolTipText()));
+        selector.asJComponent().setToolTipText(i18nManager.getTranslation(selector.asJComponent().getToolTipText()));
+    }
+
+    /**
+     * @param locale
+     *
+     */
+    public void setLocate(Locale locale) {
+        Locale l = super.getLocale();
+        if (!l.equals(locale)) {
+            translate();
+        }
+        super.setLocale(locale);
+    }
+
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public boolean fetch(FLayer layer) {
+        if(isChanged) {
+            RasterLayer rasterLayer = (RasterLayer) layer;
+            RasterLegend rasterLegend = (RasterLegend) rasterLayer.getLegend();
+            OperationList operationList = ((OperationManager)BufferLocator.getBufferManager()).createOperationList();
+            operationListPanel.fetch(operationList);
+            rasterLegend.setFilters(operationList);
+        }
+        isChanged = false;
+        return true;
+    }
+
+    @Override
+    public void set(FLayer layer) {
+        this.rasterLayer = (RasterLayer) layer;
+        DisposeUtils.bind(rasterLayer);
+
+        try {
+            if(clonedLayerForPreview!=null){
+                DisposeUtils.dispose(clonedLayerForPreview);
+            }
+            clonedLayerForPreview = (RasterLayer) this.rasterLayer.cloneLayer();
+            if(clonedLayerForMiddlePreview!=null){
+                DisposeUtils.dispose(clonedLayerForMiddlePreview);
+            }
+            if(clonedLayerForMiddlePreview!=null){
+                DisposeUtils.dispose(clonedLayerForMiddlePreview);
+            }
+            clonedLayerForMiddlePreview = (RasterLayer) this.rasterLayer.cloneLayer();
+            this.initializePreviewers();
+            OperationList filters = this.rasterLayer.getLegend().getFilters();
+            operationListPanel.set(filters);
+
+            if(filters!=null && filters.size()>0){
+                operationListPanel.select(filters.size()-1);
+            }
+        } catch (Exception e1) {
+            LOG.warn("Can't clone the raster layer to preview.", e1);
+            return;
+        }
+        isChanged = false;
+    }
+
+    @Override
+    public void setVisible(boolean aFlag) {
+        super.setVisible(aFlag);
+        splPanel.setResizeWeight(0.75);
+        splPanelRight.setResizeWeight(0.50);
+        splPanelMiddleLeft.setResizeWeight(0.1875);
+        splPanelLeft.setResizeWeight(0.50);
+    }
+
+    /**
+     * @return
+     */
+    private JPanel getEmptyPanel() {
+        JPanel emptyPanel = new JPanel();
+        GridBagLayout layout = new GridBagLayout();
+        emptyPanel.setLayout(layout);
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.fill = GridBagConstraints.BOTH;
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        emptyPanel.setPreferredSize(new Dimension(100,100));
+        return emptyPanel;
+    }
+
+    @Override
+    public void dispose() {
+        if(initialized) {
+            if(!ToolsLocator.getDisposableManager().release(this)){
+                return;
+            }
+            DisposeUtils.dispose(this.rasterLayer);
+            this.rasterLayer = null;
+            DisposeUtils.dispose(this.previewer);
+            this.previewer = null;
+            DisposeUtils.dispose(this.middlePreviewer);
+            this.middlePreviewer = null;
+            DisposeUtils.disposeQuietly(this.clonedLayerForPreview);
+            this.clonedLayerForPreview = null;
+            DisposeUtils.disposeQuietly(this.clonedLayerForMiddlePreview);
+            this.clonedLayerForMiddlePreview = null;
+        }
+    }
+
+    /**
+     *
+     */
+    private void doAddOperation() {
+        OperationFactory factory = selector.getSelected();
+        DynObject parameters = factory.createParameters();
+        form.getValues(parameters);
+        OperationManager operationManager = BufferLocator.getOperationManager();
+        OperationListEntry entry = operationManager.createOperationListEntry(factory.create(), parameters);
+        entry.setActive(true);
+        operationListPanel.add(entry);
+        isChanged = true;
+        selector.clearSelection();
+    }
+
+    /**
+     *
+     */
+    private void doUpdateOperation() {
+        OperationListEntry entry = operationListPanel.getSelected();
+        if (entry != null) {
+            DynObject parameters = entry.getParameters();
+            form.getValues(parameters);
+        } else {
+            form.clear();
+        }
+        updatePreviewers();
+        isChanged = true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.xml	(revision 46118)
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/paco/projects/externals/gvsig-desktop/RasterRefactoring/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.xml</at>
+   <at name="path">RasterRefactoring/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">2</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.JSplitPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JSplitPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="name">splPanel</at>
+            <at name="width">857</at>
+            <at name="lastDividerLocation">-1</at>
+            <at name="resizeWeight">0.75</at>
+            <at name="maximumDividerLocation">735</at>
+            <at name="dividerLocation">120</at>
+            <at name="height">24</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="3">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/java/org/gvsig/raster/app/mainplugin/operations/OperationsPagePanelView.java	(revision 46118)
@@ -0,0 +1,135 @@
+package org.gvsig.raster.app.mainplugin.operations;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+
+public class OperationsPagePanelView extends JPanel
+{
+   JSplitPane splPanel = new JSplitPane();
+
+   /**
+    * Default constructor
+    */
+   public OperationsPagePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      splPanel.setDividerLocation(120);
+      splPanel.setLastDividerLocation(-1);
+      splPanel.setName("splPanel");
+      splPanel.setResizeWeight(0.75);
+      jpanel1.add(splPanel,cc.xywh(2,2,2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,139 @@
+#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
+#Translations for language [en]
+#Tue May 12 10:57:38 CEST 2009
+
+Alpha                                                                                                         = Alpha
+Black                                                                                                         = Black
+Blue                                                                                                          = Blue
+Color_tables                                                                                                  = Color tables
+Cyan                                                                                                          = Cyan
+Gray                                                                                                          = Gray
+Green                                                                                                         = Green
+Hue                                                                                                           = Hue
+Lightness                                                                                                     = Lightness
+Magenta                                                                                                       = Magenta
+Palette                                                                                                       = Palette
+Red                                                                                                           = Red
+Saturation                                                                                                    = Saturation
+Undefined                                                                                                     = Undefined
+YCbCr_Cb                                                                                                      = YCbCr_Cb
+YCbCr_Cr                                                                                                      = YCbCr_Cr
+YCbCr_Y                                                                                                       = YCbCr_Y
+Yellow                                                                                                        = Yellow
+_File_exists_Overwrite_question                                                                               = File already exists. Would you like to overwrite it?
+_Show_color_tables_library                                                                                    = Show color tables library
+_Unknown_CRS_so_assumed                                                                                       = CRS unknown. Assumed
+_activate                                                                                                     = Activate
+_activate_opacity                                                                                             = Activate opacity
+_activate_pixel_transparency                                                                                  = Activate pixel transparency
+_active                                                                                                       = Active
+_add                                                                                                          = Add
+_add_operation                                                                                                = Add operation
+_alpha                                                                                                        = Alpha
+_and                                                                                                          = AND
+_band                                                                                                         = Band
+_band_attributes                                                                                              = Band attributes
+_band_in_which_will_be_apply_the_color_table                                                                  = Band in which will be apply the color table
+_band_info                                                                                                    = Band information
+_band_name                                                                                                    = Band name
+_bands                                                                                                        = Bands
+_blue                                                                                                         = Blue
+_cant_add_band_XbandX_from_store_XsourceX_to_store_XtargetX                                                   = Can't add band {0} from store "{1}" to store "{2}".
+_classes                                                                                                      = Classes
+_color                                                                                                        = Color
+_color_interpretation                                                                                         = Color interpretation
+_color_space                                                                                                  = Color space
+_color_table                                                                                                  = Color table
+_covariance_matrix                                                                                            = Covariance matrix
+_covariance_with_band                                                                                         = Covariance with band
+_dataCount                                                                                                    = Data count
+_dataType                                                                                                     = Data type
+_data_type                                                                                                    = Data type
+_default_value                                                                                                = Default value
+_description                                                                                                  = Description
+_do_not_display_the_layer_when_the_scale_is_larger_than_the_ratio                                             = Don't display the layer when the scale is larger than the ratio.
+_do_not_display_the_layer_when_the_scale_is_smaller_than_the_ratio                                            = Don't display the layer when the scale is smaller than the ratio.
+_do_not_show_the_layer_when_the_scale_is                                                                      = Don't show the layer when the scale is
+_down                                                                                                         = Down
+_down_operation                                                                                               = Downm operation
+_edit                                                                                                         = Edit
+_envelope                                                                                                     = Envelope
+_error_adding_bands                                                                                           = Error adding bands
+_export                                                                                                       = Export
+_export_raster                                                                                                = Export raster
+_external_tool                                                                                                = External tool
+_file                                                                                                         = File
+_filters                                                                                                      = Filters
+_from_color                                                                                                   = From color
+_greater_than_ratio                                                                                           = greater than 1:
+_green                                                                                                        = Green
+_import                                                                                                       = Import
+_information                                                                                                  = Information
+_interpolated                                                                                                 = Interpolated
+_interpolation_percent                                                                                        = Interpolation percent
+_interval_number                                                                                              = Interval number
+_interval_size                                                                                                = Interval size
+_it_cant_be_reconized_XvalueX_as_a_XdatatypenameX.                                                            = It can't be reconized '{0}' as a '{1}'.
+_it_makes_transparent_the_pixels_whose_color_has_some_channel_that_matches_some_channel_of_the_selected_color = It makes transparent the pixels whose color has some channel that matches some channel of the selected color.
+_it_makes_transparent_the_pixels_whose_color_matches_all_the_channels_of_the_selected_color                   = It makes transparent the pixels whose color matches all the channels of the selected color.
+_layer_information                                                                                            = Layer information
+_layer_statistics                                                                                             = Layer statistics
+_maximum                                                                                                      = Maximum
+_maximum_scale                                                                                                = (Maximum scale)
+_mean                                                                                                         = Mean
+_median                                                                                                       = Median
+_middle_previewer                                                                                             = Intermediate previewer
+_minimum                                                                                                      = Minimum
+_minimum_scale                                                                                                = (Minimum scale)
+_name                                                                                                         = Name
+_new_color_table                                                                                              = New color table
+_noDataValuesCount                                                                                            = NoData count
+_nodata                                                                                                       = NoData
+_null                                                                                                         = Null
+_opacity                                                                                                      = Opacity
+_operation                                                                                                    = Operation
+_operations_selector                                                                                          = Operations selector
+_or                                                                                                           = OR
+_pearson_correlation_coefficient_with_band                                                                    = Pearson correlation coefficient with band
+_pixel_transparency                                                                                           = Pixel transparency
+_preview                                                                                                      = Preview
+_previewer                                                                                                    = Previsualizador
+_properties                                                                                                   = Properties
+_recalculate_statistics                                                                                       = Recalculate statistics
+_red                                                                                                          = Red
+_remove                                                                                                       = Remove
+_remove_all                                                                                                   = Remove all
+_remove_operation                                                                                             = Remove operation
+_reprojected_on_the_fly                                                                                       = reprojected on the fly
+_restore                                                                                                      = Restore
+_save                                                                                                         = Save
+_scale_range                                                                                                  = Scale range
+_secondMax                                                                                                    = Second maximum
+_secondMin                                                                                                    = Second minimum
+_select                                                                                                       = Select
+_smaller_than_ratio                                                                                           = smaller than 1:
+_standard_deviation                                                                                           = Standard deviation
+_statistics                                                                                                   = Statistics
+_store_full_name                                                                                              = Store full name
+_store_information                                                                                            = Store information
+_store_name                                                                                                   = Store name
+_tiled                                                                                                        = Tiled
+_to_color                                                                                                     = To color
+_transparency                                                                                                 = Transparency
+_treats_nodata_values_as_transparent                                                                          = Treats NoData values as transparent.
+_unselected                                                                                                   = Unselected
+_up                                                                                                           = Up
+_up_operation                                                                                                 = Up operation
+_value                                                                                                        = Value
+_values                                                                                                       = Values
+_variance                                                                                                     = Variance
+bands_to_process                                                                                              = Bands to process
+color-tables-library                                                                                          = Color tables library
+copy_unprocessed_bands                                                                                        = Copy unprocessed bands
+cyan                                                                                                          = Cyan
+magenta                                                                                                       = Magenta
+operations_selector                                                                                           = Operations selector
+remove_ends                                                                                                   = Remove ends
+tail_trim                                                                                                     = Tail trim
+tail_trim_percent                                                                                             = Tail trim percent
+yellow                                                                                                        = Yellow
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,139 @@
+#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
+#Translations for language [es]
+#Tue May 12 10:57:39 CEST 2009
+
+Alpha                                                                                                         = Alfa
+Black                                                                                                         = Negro
+Blue                                                                                                          = Azul
+Color_tables                                                                                                  = Tablas de color
+Cyan                                                                                                          = Cian
+Gray                                                                                                          = Gris
+Green                                                                                                         = Verde
+Hue                                                                                                           = Tonalidad
+Lightness                                                                                                     = Luminosidad
+Magenta                                                                                                       = Magenta
+Palette                                                                                                       = Paleta
+Red                                                                                                           = Rojo
+Saturation                                                                                                    = Saturaci\u00F3n
+Undefined                                                                                                     = Indefinido
+YCbCr_Cb                                                                                                      = YCbCr_Cb
+YCbCr_Cr                                                                                                      = YCbCr_Cr
+YCbCr_Y                                                                                                       = YCbCr_Y
+Yellow                                                                                                        = Amarillo
+_File_exists_Overwrite_question                                                                               = El archivo ya existe. \u00BFDesea sobreescribirlo?
+_Show_color_tables_library                                                                                    = Muestra la biblioteca de tablas de color
+_Unknown_CRS_so_assumed                                                                                       = CRS desconocido. Se asume
+_activate                                                                                                     = Activar
+_activate_opacity                                                                                             = Activar opacidad
+_activate_pixel_transparency                                                                                  = Activar transparencia de pixel
+_active                                                                                                       = Activa
+_add                                                                                                          = A\u00F1adir
+_add_operation                                                                                                = A\u00F1adir operaci\u00F3n
+_alpha                                                                                                        = Alfa
+_and                                                                                                          = Y
+_band                                                                                                         = Banda
+_band_attributes                                                                                              = Atributos de la banda
+_band_in_which_will_be_apply_the_color_table                                                                  = Banda en la que se aplicar\u00E1 la tabla de color
+_band_info                                                                                                    = Informaci\u00F3n de la banda
+_band_name                                                                                                    = Nombre de la banda
+_bands                                                                                                        = Bandas
+_blue                                                                                                         = Azul
+_cant_add_band_XbandX_from_store_XsourceX_to_store_XtargetX                                                   = No se puede a\u00F1adir la banda {0} del almac\u00E9n "{1}" al almac\u00E9n "{2}".
+_classes                                                                                                      = Clases
+_color                                                                                                        = Color
+_color_interpretation                                                                                         = Interpretaci\u00F3n de color
+_color_space                                                                                                  = Espacio de color
+_color_table                                                                                                  = Tabla de color
+_covariance_matrix                                                                                            = Matriz de covarianzas
+_covariance_with_band                                                                                         = Covarianza con la banda
+_dataCount                                                                                                    = Cantidad de valores
+_dataType                                                                                                     = Tipo de dato
+_data_type                                                                                                    = Tipo de datos
+_default_value                                                                                                = Valor por defecto
+_description                                                                                                  = Descripcion
+_do_not_display_the_layer_when_the_scale_is_larger_than_the_ratio                                             = No mostrar la capa cuando la escala sea mayor que el ratio.
+_do_not_display_the_layer_when_the_scale_is_smaller_than_the_ratio                                            = No mostrar la capa cuando la escala sea menor que el ratio.
+_do_not_show_the_layer_when_the_scale_is                                                                      = No mostrar la capa cuando la escala sea
+_down                                                                                                         = Bajar
+_down_operation                                                                                               = Bajar operaci\u00F3n
+_edit                                                                                                         = Editar
+_envelope                                                                                                     = Extensi\u00F3n
+_error_adding_bands                                                                                           = Error a\u00F1adiendo bandas
+_export                                                                                                       = Exportar
+_export_raster                                                                                                = Exportar raster
+_external_tool                                                                                                = Externa
+_file                                                                                                         = Archivo
+_filters                                                                                                      = Filtros
+_from_color                                                                                                   = Desde el color
+_greater_than_ratio                                                                                           = mayor que 1:
+_green                                                                                                        = Verde
+_import                                                                                                       = Importar
+_information                                                                                                  = Informaci\u00F3n
+_interpolated                                                                                                 = Interpolada
+_interpolation_percent                                                                                        = % de interpolaci\u00F3n
+_interval_number                                                                                              = N\u00FAmero intervalos
+_interval_size                                                                                                = Tama\u00F1o de los intervalos
+_it_cant_be_reconized_XvalueX_as_a_XdatatypenameX.                                                            = No se puede reconocer el valor "{0}" como un "{1}".
+_it_makes_transparent_the_pixels_whose_color_has_some_channel_that_matches_some_channel_of_the_selected_color = Hace transparentes los pixels cuyo color tenga alg\u00FAn canal que coincida con alg\u00FAn canal del color seleccionado.
+_it_makes_transparent_the_pixels_whose_color_matches_all_the_channels_of_the_selected_color                   = Hace transparentes los pixels cuyo color coincida con todos los canales del color seleccionado.
+_layer_information                                                                                            = Informaci\u00F3n de la capa
+_layer_statistics                                                                                             = Estad\u00EDsticas de la capa
+_maximum                                                                                                      = M\u00E1ximo
+_maximum_scale                                                                                                = (Escala m\u00E1xima)
+_mean                                                                                                         = Media
+_median                                                                                                       = Mediana
+_middle_previewer                                                                                             = Previsualizador intermedio
+_minimum                                                                                                      = M\u00EDnimo
+_minimum_scale                                                                                                = (Escala m\u00EDnima)
+_name                                                                                                         = Nombre
+_new_color_table                                                                                              = Nueva tabla de color
+_noDataValuesCount                                                                                            = Cantidad de valores NoData
+_nodata                                                                                                       = NoData
+_null                                                                                                         = Nulo
+_opacity                                                                                                      = Opacidad
+_operation                                                                                                    = Operaci\u00F3n
+_operations_selector                                                                                          = Selector de operaciones
+_or                                                                                                           = O
+_pearson_correlation_coefficient_with_band                                                                    = Coeficiente de correlaci\u00F3n de Pearson con banda
+_pixel_transparency                                                                                           = Transparencia de pixel
+_preview                                                                                                      = Previsualizaci\u00F3n
+_previewer                                                                                                    = Previsualizador
+_properties                                                                                                   = Propiedades
+_recalculate_statistics                                                                                       = Recalcular estad\u00EDsticas
+_red                                                                                                          = Rojo
+_remove                                                                                                       = Borrar
+_remove_all                                                                                                   = Borrar todos
+_remove_operation                                                                                             = Quitar operaci\u00F3n
+_reprojected_on_the_fly                                                                                       = reproyectado al vuelo
+_restore                                                                                                      = Restaurar
+_save                                                                                                         = Guardar
+_scale_range                                                                                                  = Rango de escalas
+_secondMax                                                                                                    = Segundo m\u00E1ximo
+_secondMin                                                                                                    = Segundo m\u00EDnimo
+_select                                                                                                       = Seleccionar
+_smaller_than_ratio                                                                                           = menor que 1:
+_standard_deviation                                                                                           = Desviaci\u00F3n t\u00EDpica
+_statistics                                                                                                   = Estad\u00EDsticas
+_store_full_name                                                                                              = Nombre completo del almac\u00E9n
+_store_information                                                                                            = Informaci\u00F3n del almac\u00E9n
+_store_name                                                                                                   = Nombre del almac\u00E9n
+_tiled                                                                                                        = Teselado
+_to_color                                                                                                     = Hasta el color
+_transparency                                                                                                 = Transparencia
+_treats_nodata_values_as_transparent                                                                          = Tratar los valores NoData como transparentes
+_unselected                                                                                                   = Sin selecci\u00F3n
+_up                                                                                                           = Subir
+_up_operation                                                                                                 = Subir operaci\u00F3n
+_value                                                                                                        = Valor
+_values                                                                                                       = Valores
+_variance                                                                                                     = Varianza
+bands_to_process                                                                                              = Bandas a procesar
+color-tables-library                                                                                          = Biblioteca de tablas de color
+copy_unprocessed_bands                                                                                        = Copiar bandas no procesadas
+cyan                                                                                                          = Cian
+magenta                                                                                                       = Magenta
+operations_selector                                                                                           = Selector de operaciones
+remove_ends                                                                                                   = Eliminar extremos
+tail_trim                                                                                                     = Recorte de colas
+tail_trim_percent                                                                                             = % de recorte de colas
+yellow                                                                                                        = Amarillo
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+  <depends plugin-name="org.gvsig.app.mainplugin" />
+  <libraries library-dir="lib" />
+  <resourceBundle name="text" />
+  <extensions>
+    <extension class-name="org.gvsig.raster.app.mainplugin.RasterExtension"
+      description="Support to raster" active="true" priority="1">
+    </extension>
+
+    <!-- <extension class-name="org.gvsig.raster.app.mainplugin.AddTestRasterLayerExtension"
+      description="Add test raster layer extension" active="true" priority="25">
+      <action name="view-test-layer-add" label="Add_test_layer" tooltip="Add_test_layer"
+        action-command="view-test-layer-add" icon="view-test-layer-add"
+        position="650300005" />
+
+      <menu name="view-test-layer-add" text="View/Add_test_layer" />
+      <tool-bar name="view">
+        <action-tool name="view-test-layer-add" />
+      </tool-bar>
+
+    </extension> -->
+
+
+    <!-- <extension class-name="org.gvsig.raster.app.mainplugin.LayerPropertiesExtension"
+      description="" active="true">
+
+      <action name="raster-layer-properties" label="propiedades2"
+        tooltip="_Layer_properties" position="609000000" action-command="layer-properties"
+        icon="layer-properties" accelerator="" />
+
+      <menu name="raster-layer-properties" text="Layer/propiedades2" />
+
+    </extension> -->
+
+    <extension class-name="org.gvsig.raster.app.mainplugin.colortable.ColorTablesLibraryExtension"
+      description="Extensi�n encargada de gestionar la librer�a de tablas de color."
+      active="true" priority="1">
+      <action
+        name= "color-tables-library"
+        label="Color_tables"
+        tooltip="_Show_color_tables_library"
+        action-command="color-tables-library"
+        icon="color-tables-library-icon"
+        position="000900400400"
+        />
+
+      <menu
+        name="color-tables-library"
+        text="tools/Symbols/Color_tables"
+        />
+
+      <!-- <tool-bar name="core" position="30">
+        <action-tool name="color-tables-library" last="true" />
+      </tool-bar> -->
+
+    </extension>
+
+
+
+  </extensions>
+</plugin-config>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/export-color-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/export-color-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/edit-color-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/edit-color-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/new-color-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/new-color-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/import-color-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/import-color-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/remove-color-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/colortable/remove-color-table-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/remove-all-color-table-class-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/remove-all-color-table-class-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/add-color-table-class-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/add-color-table-class-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/remove-color-table-class-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/editcolortable/remove-color-table-class-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-raster.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-raster.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/up-operation-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/up-operation-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/down-operation-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/down-operation-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/add-operation-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/add-operation-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/remove-operation-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/remove-operation-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/update-operation-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/operationlist/update-operation-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/color-tables-library-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/color-tables-library-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/view-test-layer-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.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/view-test-layer-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/color-tables-library-icon (copia).png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/images/action/color-tables-library-icon (copia).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.raster
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.raster.app.mainplugin">
+      <description>Persistence for the gvSIG raster plugin</description>
+      <fields>
+
+        <field name="defaultColorTableLibraryPath" type="File" classOfValue="" mandatory="false">
+          <description>Default color table library path</description>
+        </field>
+
+      </fields>
+    </class>
+  </classes>
+</definitions>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/org.gvsig.raster.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.raster.app/pom.xml	(revision 46118)
@@ -0,0 +1,14 @@
+<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>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop.plugin</artifactId>
+        <version>2.0.344</version>
+    </parent>
+    <artifactId>org.gvsig.raster.app</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.artifactId}</name>
+    <modules>
+        <module>org.gvsig.raster.app.mainplugin</module>
+    </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 46118)
@@ -0,0 +1,2 @@
+org.gvsig.app.ApplicationLibrary
+org.gvsig.app.imp.ApplicationLibraryImpl
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.
+
+-->
+<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>org.gvsig:org.gvsig.raster.lib.buffer.api</include>
+        <include>org.gvsig:org.gvsig.raster.lib.buffer.impl</include>
+        <include>org.gvsig:org.gvsig.raster.lib.buffer.spi</include>
+        <include>org.gvsig:org.gvsig.raster.swing.buffer.api</include>
+        <include>org.gvsig:org.gvsig.raster.swing.buffer.impl</include>
+        <include>org.gvsig:org.gvsig.raster.legend.swing.api</include>
+        <include>org.gvsig:org.gvsig.raster.legend.swing.impl</include>
+        <include>org.gvsig:org.gvsig.raster.legend.imageio</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.swing.api</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.swing.impl</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.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.expressionevaluator.time.lib.impl</include>
+<!--
+        <include>org.gvsig:org.gvsig.expressionevaluator.lib.api</include>
+        <include>org.gvsig:org.gvsig.expressionevaluator.lib.impl</include>
+        <include>org.gvsig:org.gvsig.expressionevaluator.swing.api</include>
+        <include>org.gvsig:org.gvsig.expressionevaluator.swing.impl</include>
+-->
+        <include>org.gvsig:org.gvsig.tools.evaluator.sqljep</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.file.imageio</include>
+        <include>org.gvsig:org.gvsig.fmap.dal.tilecache.raster</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.temporarystorage.lib.api</include>
+        <include>org.gvsig:org.gvsig.temporarystorage.lib.impl</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.fmap.mapcontext.api</include>
+        <include>org.gvsig:org.gvsig.fmap.mapcontext.impl</include>
+        
+        <include>org.gvsig:org.gvsig.fmap.control</include>
+
+        <include>org.gvsig:org.gvsig.remoteclient</include>
+        
+        <include>org.jpedal:jpedal_lgpl</include>
+
+        <include>zql:zql</include>
+        
+        <include>org.gvsig:org.gvsig.basicformats</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanel.java	(revision 46118)
@@ -0,0 +1,415 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Window;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.filechooser.FileFilter;
+import org.apache.commons.lang3.ArrayUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//import org.gvsig.andami.Launcher;
+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.prepareAction.PrepareContextView_v1;
+import org.gvsig.app.project.documents.view.toc.actions.LayerErrorsPanel;
+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.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+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.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.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+
+/**
+ * @author gvSIG Team
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class FilesystemExplorerWizardPanel extends WizardPanel {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 788115220334290212L;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(FilesystemExplorerWizardPanel.class);
+
+    private static final String DEFAULT_FILTER = "All_supported";
+
+    public static final String OPEN_LAYER_FILE_CHOOSER_ID =
+        "OPEN_LAYER_FILE_CHOOSER_ID";
+
+    protected FilesystemServerExplorer explorer;
+    private ArrayList<MyFileFilter> filters;
+
+//    private static String lastPath = null;
+    private FilesystemExplorerWizardPanelController panel = null;
+    private boolean tabularOnly;
+    /**
+     *
+     */
+    public FilesystemExplorerWizardPanel() {
+        this(false);
+    }
+    
+    public FilesystemExplorerWizardPanel(boolean tabularOnly) {
+        super();
+        this.tabularOnly = tabularOnly;
+        this.addAncestorListener(new AncestorListener() {
+            @Override
+            public void ancestorAdded(AncestorEvent ae) {
+                initExplorer();
+                initFilters();
+                updatePanel();
+            }
+            @Override
+            public void ancestorRemoved(AncestorEvent ae) {
+                dispose();
+            }
+            @Override
+            public void ancestorMoved(AncestorEvent ae) {
+            }
+        });
+    }
+
+    protected void updatePanel() {
+        this.panel.setExplorer(this.explorer);
+        this.panel.setFilters(this.filters);
+    }
+
+    @Override
+    public void initWizard() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        setTabName(i18nManager.getTranslation("Fichero"));
+        initExplorer();
+        initFilters();
+        initUI();
+    }
+
+    private void initUI() {
+
+        setLayout(new GridBagLayout());
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.fill = GridBagConstraints.BOTH;
+        gridBagConstraints.weightx = 1.0;
+        gridBagConstraints.weighty = 1.0;
+
+        panel = new FilesystemExplorerWizardPanelController(getMapContext(),explorer, filters);
+        panel.setTabularOnly(this.tabularOnly);
+        this.add(panel, gridBagConstraints);
+        panel.addChangeListener((ChangeEvent e) -> {
+            callStateChanged(this.areSettingsValid());
+        });
+
+    }
+
+    @Override
+    public void execute() {
+        if (this.getMapCtrl() == null) {
+            throw new IllegalArgumentException("MapControl need");
+        }
+        String layerName;
+
+        for (DataStoreParameters params : this.getParameters()) {
+            fixCRS(params);
+
+            layerName = ((FilesystemStoreParameters) params).getFile().getName();
+
+            this.doAddLayer(layerName, params);
+        }
+    }
+
+    @Override
+    public void close() {
+        this.dispose();
+    }
+
+    /**
+     * Dispose filters and explorer
+     */
+    public void dispose() {
+        if (explorer != null) {
+            explorer.dispose();
+            explorer = null;
+        }
+        if (filters != null) {
+            filters.clear();
+            filters = null;
+        }
+        panel.dispose();
+    }
+
+    @Override
+    public DataStoreParameters[] getParameters() {
+        return this.panel.getParameters();
+    }
+
+    /**
+     * @param files
+     */
+    public void addFiles(List<File> files) {
+        this.panel.addFiles(files);
+    }
+
+
+    private void initExplorer() {
+        if (this.explorer == null) {
+            DataManager dm = DALLocator.getDataManager();
+            FilesystemServerExplorerParameters param;
+            try {
+                FoldersManager folderManager = ToolsLocator.getFoldersManager();
+                param = (FilesystemServerExplorerParameters) dm
+                        .createServerExplorerParameters(FilesystemServerExplorer.NAME);
+                param.setInitialpath(
+                        folderManager.getLastPath(
+                                OPEN_LAYER_FILE_CHOOSER_ID, 
+                                folderManager.getHome()
+                        ).getAbsolutePath()
+                );
+                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<>();
+            if (this.getMapCtrl() == null) {
+                mode = FilesystemServerExplorer.MODE_FEATURE;
+            } else {
+                mode = FilesystemServerExplorer.MODE_GEOMETRY
+                        | FilesystemServerExplorer.MODE_RASTER;
+            }
+
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+            // First filter in list will be 'All formats' filter
+            this.filters.add(new MyFileFilter(explorer.getFilter(mode,
+                    i18nManager.getTranslation(DEFAULT_FILTER))));
+
+            @SuppressWarnings("unchecked")
+            Iterator<FilesystemFileFilter> iter = explorer.getFilters(mode);
+            while (iter.hasNext()) {
+                this.filters.add(new MyFileFilter(iter.next()));
+            }
+        }
+    }
+
+    boolean isTiled(DataStoreParameters parameters){
+        return this.panel.isTiled(parameters);
+    }
+
+    @Override
+    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);
+        Thread task = new Thread(() -> {
+            FLayer layer = null;
+            FLayer preparedLayer = null;
+            try {
+                DataManager dataManager = DALLocator.getDataManager();
+                DataStore dataStore = dataManager.openStore(parameters.getDataStoreName(), parameters);
+                DataStoreProviderFactory factory = dataStore.getProviderFactory();
+                if (factory.isTiledSupported() != DataStoreProviderFactory.NO && !factory.getClass().getSimpleName().equals("TileProviderFactory")) {
+                    if (isTiled(parameters)) {
+                        DynObject tileParameters = dataManager.createStoreParameters("TileCache");
+                        
+                        PluginsManager pluginsManager = PluginsLocator.getManager();
+                        File rootFolder = new File(pluginsManager.getApplicationHomeFolder(),"gvsig_rcache");
+                        
+                        if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
+                            tileParameters.setDynValue("rootFolder", rootFolder);
+                        }
+                        
+                        try {
+                            dataStore.useCache("TileCache", tileParameters);
+                        } catch (DataException e) {
+                            LOGGER.warn("Can't cache the layer.", e);
+                        }
+                        
+                    }
+                }
+                String layerName1 = dataStore.getName();
+                layer = manager.createLayer(layerName1, dataStore);
+                DisposeUtils.disposeQuietly(dataStore);
+                preparedLayer
+                        = application.prepareOpenLayer(layer,
+                                new PrepareContextView_v1() {
+                                    
+                                    @Override
+                                    public Window getOwnerWindow() {
+                                        return null;
+                                    }
+                                    
+                                    @Override
+                                    public MapControl getMapControl() {
+                                        return mapControl;
+                                    }
+                                    
+                                    @Override
+                                    public IProjection getViewProjection() {
+                                        return mapContext.getProjection();
+                                    }
+                                    
+                                    @Override
+                                    public MapContext getMapContext() {
+                                        return mapContext;
+                                    }
+                                    
+                                    @Override
+                                    public boolean isMapControlAvailable() {
+                                        return b_isMapControlAvail;
+                                    }
+                                });
+                if (preparedLayer != null) {
+                    mapControl.addLayer(preparedLayer);
+                }
+            } catch (UnauthorizedException e) {
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+                ApplicationManager application1 = ApplicationLocator.getManager();
+                String resource = "";
+                if (e.getResource() instanceof FilesystemStoreParameters) {
+                    resource = ((FilesystemStoreParameters) e.getResource()).getFile().getPath();
+                }
+                application1.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);
+            } catch (Exception e) {
+                LayerErrorsPanel panel1 = new LayerErrorsPanel(layerName, e);
+                if (preparedLayer != null) {
+                    panel1.setLayer(preparedLayer);
+                } else if (layer!=null) {
+                    panel1.setLayer(layer);
+                }
+                I18nManager i18nManager = ToolsLocator.getI18nManager();
+                ToolsSwingLocator.getWindowManager().showWindow(panel1, i18nManager.getTranslation("_Problems_loading_the_layer"), WindowManager.MODE.WINDOW);
+                LOGGER.warn("Can't load layer '" + layerName + "'.", e);
+            } finally {
+                if (preparedLayer != layer) {
+                    DisposeUtils.disposeQuietly(preparedLayer);
+                }
+                DisposeUtils.disposeQuietly(layer);
+            }
+        });
+        task.setName("LoadLayer"+layerName);
+        task.start();
+
+    }
+
+
+    /**
+     * @author fdiaz
+     *
+     */
+    public class MyFileFilter extends FileFilter {
+
+        private FilesystemFileFilter filter = null;
+
+        /**
+         * @param params
+         */
+        public MyFileFilter(FilesystemFileFilter params) {
+            this.setFilter(params);
+        }
+
+        @Override
+        public boolean accept(File f) {
+            if (f.isDirectory()) {
+                return true;
+            }
+            return getFilter().accept(f);
+
+        }
+
+        @Override
+        public String getDescription() {
+            return getFilter().getDescription();
+        }
+
+        /**
+         * @return
+         */
+        public String getName() {
+            return getFilter().getDataStoreProviderName();
+        }
+
+        /**
+         * @return the filter
+         */
+        public FilesystemFileFilter getFilter() {
+            return filter;
+        }
+
+        /**
+         * @param filter the filter to set
+         */
+        public void setFilter(FilesystemFileFilter filter) {
+            this.filter = filter;
+        }
+    }
+
+    protected void showPropertiesDialog(DynObject parameters) {
+        panel.showPropertiesDialog(parameters);
+    }
+
+    protected PrepareContext getPrepareDataStoreContext() {
+        return panel.getPrepareDataStoreContext();
+    }
+
+    @Override
+    public boolean areSettingsValid() {
+        DataStoreParameters[] params = this.getParameters();
+        return !ArrayUtils.isEmpty(params);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/TiledCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/TiledCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/TiledCellRenderer.java	(revision 46118)
@@ -0,0 +1,91 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional 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.Component;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author fdiaz
+ *
+ */
+public class TiledCellRenderer extends JPanel implements TableCellRenderer {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3875203211014535067L;
+
+    private JCheckBox checkBox;
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(TiledCellRenderer.class);
+
+    /**
+     *
+     */
+    public TiledCellRenderer() {
+        super(new BorderLayout()); //new FlowLayout(FlowLayout.CENTER, 0, 0));
+        checkBox = new JCheckBox();
+        checkBox.setOpaque(false);
+        checkBox.setHorizontalAlignment(JCheckBox.CENTER);
+        add(checkBox, BorderLayout.CENTER);
+    }
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+        int row, int column) {
+        if (isSelected) {
+            checkBox.setForeground(table.getSelectionForeground());
+            checkBox.setBackground(table.getSelectionBackground());
+            setForeground(table.getSelectionForeground());
+            setBackground(table.getSelectionBackground());
+        } else {
+            checkBox.setForeground(table.getForeground());
+            checkBox.setBackground(table.getBackground());
+            setForeground(table.getForeground());
+            setBackground(table.getBackground());
+        }
+         boolean booleanValue;
+        try {
+            booleanValue = ((Boolean) value).booleanValue();
+        } catch (Exception ex) {
+            booleanValue = false;
+//            LOGGER.warn("Value is null", ex);
+        }
+        boolean cellEditable = table.getModel().isCellEditable(row, column);
+        if(!cellEditable && !booleanValue){
+            checkBox.setVisible(false);
+        } else {
+            checkBox.setVisible(true);
+        }
+        checkBox.setEnabled(cellEditable);
+        checkBox.setSelected((value != null && booleanValue));
+        return this;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelController.java	(revision 46118)
@@ -0,0 +1,558 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+
+import java.awt.Component;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.JFileChooser;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.table.TableColumn;
+
+import org.cresques.cts.IProjection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.filedialogchooser.FileDialogChooser;
+import org.gvsig.filedialogchooser.FileDialogChooserManager;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel.MyFileFilter;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ChangeListenerSupport;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilesystemExplorerWizardPanelController 
+        extends FilesystemExplorerWizardPanelView 
+        implements ChangeListenerSupport
+    {
+
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -2351856603294610783L;
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory
+        .getLogger(FilesystemExplorerWizardPanelController.class);
+
+    /**
+     *
+     */
+    public static final String OPEN_LAYER_FILE_CHOOSER_ID = "OPEN_LAYER_FILE_CHOOSER_ID";
+
+    private static final String DEFAULT_FILTER = "All_supported";
+
+    protected FilesystemServerExplorer explorer;
+    private ArrayList<MyFileFilter> filters;
+    protected MapContext mapContext;
+    protected int selectedIndex;
+    private static MyFileFilter lastFilter = null;
+    private boolean tabularOnly;
+    private final ChangeListenerHelper changeListeners;
+
+    /**
+     * @param mapContext
+     * @param explorer
+     * @param filters
+     */
+    public FilesystemExplorerWizardPanelController(MapContext mapContext, FilesystemServerExplorer explorer, ArrayList<MyFileFilter> filters) {
+        this.mapContext = mapContext;
+        this.explorer = explorer;
+        this.filters = filters;
+        this.selectedIndex = -1;
+
+        this.changeListeners = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
+        initComponents();
+        translate();
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        btnAdd.setText(i18nManager.getTranslation("Anadir"));
+        btnProperties.setText(i18nManager.getTranslation("Properties"));
+        btnRemove.setText(i18nManager.getTranslation("Eliminar"));
+        btnUp.setText(i18nManager.getTranslation("arriba"));
+        btnDown.setText(i18nManager.getTranslation("abajo"));
+        
+        btnAdd.setToolTipText(i18nManager.getTranslation(btnAdd.getToolTipText()));
+        btnProperties.setToolTipText(i18nManager.getTranslation(btnProperties.getToolTipText()));
+        btnRemove.setToolTipText(i18nManager.getTranslation(btnRemove.getToolTipText()));
+        btnUp.setToolTipText(i18nManager.getTranslation(btnUp.getToolTipText()));
+        btnDown.setToolTipText(i18nManager.getTranslation(btnDown.getToolTipText()));
+        
+        btnChangeViewProjection.setText(i18nManager.getTranslation(btnChangeViewProjection.getText()));
+        btnChangeViewProjection.setToolTipText(i18nManager.getTranslation(btnChangeViewProjection.getToolTipText()));
+    }
+
+    /**
+     * @param locale
+    *
+    */
+    public void setLocate(Locale locale) {
+        Locale l = super.getLocale();
+        if (!l.equals(locale)) {
+            translate();
+        }
+        super.setLocale(locale);
+    }
+
+    private void initComponents() {
+
+        this.btnAdd.addActionListener((ActionEvent e) -> {
+            doAdd();
+        });
+
+        this.btnProperties.addActionListener((ActionEvent e) -> {
+            doOpenProperties();
+        });
+
+        this.btnRemove.addActionListener((ActionEvent e) -> {
+            doRemove();
+        });
+
+        this.btnUp.addActionListener((ActionEvent e) -> {
+            doUp();
+        });
+
+        this.btnDown.addActionListener((ActionEvent e) -> {
+            doDown();
+        });
+
+        this.btnChangeViewProjection.addActionListener((ActionEvent e) -> {
+            doChangeViewProjection();
+        });
+        
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        this.tableFiles.setModel(new FilesystemExplorerWizardTableModel());
+        this.tableFiles.getColumn(
+            i18nManager.getTranslation(FilesystemExplorerWizardTableModel.COLUMN_STORE_PARAMETERS_NAME))
+            .setCellRenderer(new FilesystemStoreParameteresCellRenderer(mapContext));
+        TableColumn columnTiled = this.tableFiles.getColumn(
+            i18nManager.getTranslation(FilesystemExplorerWizardTableModel.COLUMN_TILED_NAME));
+        columnTiled.setMaxWidth(80);
+        columnTiled.setCellRenderer(new TiledCellRenderer());
+        this.tableFiles.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        this.tableFiles.getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
+            handleSelectionEvent(e);
+        });
+        this.btnChangeViewProjection.setEnabled(false);
+    }
+
+
+    protected void updateComponents() {
+        btnUp.setEnabled(selectedIndex > 0 && selectedIndex < tableFiles.getRowCount());
+        btnDown.setEnabled(selectedIndex >= 0 && selectedIndex < (tableFiles.getRowCount() - 1));
+        btnProperties.setEnabled(selectedIndex >= 0 && selectedIndex < tableFiles.getRowCount());
+        btnRemove.setEnabled(selectedIndex >= 0 && selectedIndex < tableFiles.getRowCount());
+    }
+
+    protected void handleSelectionEvent(ListSelectionEvent e){
+        if (e.getValueIsAdjusting()) {
+            return;
+        }
+        final DefaultListSelectionModel target = (DefaultListSelectionModel)e.getSource();
+        selectedIndex = target.getAnchorSelectionIndex();
+
+        updateComponents();
+    }
+
+    protected void doAdd() {
+
+        List<FilesystemStoreParameters> list = chooseFilesParameters();
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel) this.tableFiles.getModel();
+
+        for (FilesystemStoreParameters filesystemStoreParameters : list) {
+            model.add(filesystemStoreParameters);
+            updateTable();
+            int index = model.getRowCount()-1;
+            this.tableFiles.getSelectionModel().setSelectionInterval(index, index);
+        }
+        updateChangeViewProjection();
+        this.changeListeners.fireEvent();
+    }
+
+    protected void doRemove() {
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel)this.tableFiles.getModel();
+        if(selectedIndex>=0 && selectedIndex<model.getRowCount()){
+            int index = selectedIndex;
+            model.remove(index);
+            updateTable();
+            if(index>(model.getRowCount()-1)) {
+                index = model.getRowCount()-1;
+            }
+            this.tableFiles.getSelectionModel().setSelectionInterval(index, index);
+            updateChangeViewProjection();
+            this.changeListeners.fireEvent();
+        }
+    }
+
+    protected void doOpenProperties() {
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel) this.tableFiles.getModel();
+        if (selectedIndex >= 0 && selectedIndex < model.getRowCount()) {
+            int index = selectedIndex;
+            FilesystemStoreParameters parameters = model.getParams(index);
+            showPropertiesDialog((DynObject) parameters);
+            updateTable();
+            this.tableFiles.getSelectionModel().setSelectionInterval(index, index);
+            updateChangeViewProjection();
+        }
+    }
+
+    protected void doUp() {
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel)this.tableFiles.getModel();
+        if(selectedIndex>0 && selectedIndex<model.getRowCount()){
+            int index = selectedIndex;
+            model.up(index);
+            updateTable();
+            this.tableFiles.getSelectionModel().setSelectionInterval(index-1, index-1);
+            updateChangeViewProjection();
+        }
+    }
+
+    protected void doDown() {
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel)this.tableFiles.getModel();
+        if(selectedIndex>=0 && selectedIndex<model.getRowCount()-1){
+            int index = selectedIndex;
+            model.down(index);
+            updateTable();
+            this.tableFiles.getSelectionModel().setSelectionInterval(index+1, index+1);
+            updateChangeViewProjection();
+        }
+    }
+
+    protected void showPropertiesDialog(final DynObject parameters) {
+        DataStoreParametersPanelManager manager = DALSwingLocator.getDataStoreParametersPanelManager();
+        DataStoreParametersPanel panel = manager.createDataStoreParametersPanel(parameters);
+        panel.setExcludeGeometryOptions(false);
+        manager.showPropertiesDialog(parameters, panel);
+    }
+
+    private void updateTable(){
+        ((FilesystemExplorerWizardTableModel)this.tableFiles.getModel()).fireTableDataChanged();
+        updateRowHeights();
+        this.tableFiles.getSelectionModel().setSelectionInterval(selectedIndex, selectedIndex);
+    }
+
+    private void updateRowHeights() {
+
+        /*
+         * Auto adjust the height of rows in a JTable.
+         * The only way to know the row height for sure is to render each cell
+         * to determine the rendered height. After your table is populated with
+         * data you can do:
+         *
+         */
+        for (int row = 0; row < this.tableFiles.getRowCount(); row++) {
+            int rowHeight = this.tableFiles.getRowHeight();
+            for (int column = 0; column < this.tableFiles.getColumnCount(); column++)
+            {
+                Component comp = this.tableFiles.prepareRenderer(this.tableFiles.getCellRenderer(row, column), row, column);
+                rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
+            }
+            this.tableFiles.setRowHeight(row, rowHeight);
+        }
+    }
+
+
+     private List<FilesystemStoreParameters> chooseFilesParameters() {
+
+        FileDialogChooserManager fileDialogChooserManager = ToolsUtilLocator.getFileDialogChooserManager();
+        FileDialogChooser fileChooser = fileDialogChooserManager.create(OPEN_LAYER_FILE_CHOOSER_ID);
+        fileChooser.setCurrentDirectory(fileDialogChooserManager.getLastPath(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<>();
+
+        if (result == JFileChooser.APPROVE_OPTION) {
+            lastFilter = (MyFileFilter) fileChooser.getFileFilter();
+            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<>();
+        List<DataStoreParameters> preparedParams = null;
+        List<FilesystemStoreParameters> returnParams = new ArrayList<>();
+
+        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;
+    }
+
+    /**
+     * @return
+     */
+    protected PrepareContext getPrepareDataStoreContext() {
+        return new PrepareContext() {
+
+            @Override
+            public IProjection getViewProjection() {
+                return FilesystemExplorerWizardPanelController.this.mapContext.getProjection();
+            }
+
+            @Override
+            public Window getOwnerWindow() {
+                return null;
+            }
+        };
+    }
+
+    /**
+     * @return DataStoreParameters[]
+     */
+    public DataStoreParameters[] getParameters() {
+        return ((FilesystemExplorerWizardTableModel)this.tableFiles.getModel()).getParameters();
+    }
+
+    /**
+     * @param files
+     */
+    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;
+        }
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel)this.tableFiles.getModel();
+        model.add(filesParams);
+        updateChangeViewProjection();
+        this.changeListeners.fireEvent();
+        this.updateTable();
+    }
+
+    /**
+     * @param parameters
+     * @return boolean
+     */
+    public boolean isTiled(DataStoreParameters parameters) {
+        return ((FilesystemExplorerWizardTableModel)this.tableFiles.getModel()).isTiled(parameters);
+    }
+
+    /**
+     * @param explorer
+     */
+    public void setExplorer(FilesystemServerExplorer explorer) {
+        this.explorer = explorer;
+    }
+
+    /**
+     * @param filters
+     */
+    public void setFilters(ArrayList<MyFileFilter> filters) {
+        this.filters=filters;
+    }
+
+    /**
+     * Dispose filters and explorer.
+     *
+     */
+    public void dispose() {
+        if (explorer != null) {
+            explorer.dispose();
+            explorer = null;
+        }
+        if (filters != null) {
+            filters.clear();
+            filters = null;
+        }
+    }
+
+    private void updateChangeViewProjection() {
+        if(!this.btnChangeViewProjection.isVisible()){
+            return;
+        }
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel) this.tableFiles.getModel();
+        if (selectedIndex < 0 && selectedIndex >= model.getRowCount()) {
+            this.btnChangeViewProjection.setEnabled(false);
+            return;
+        }
+        IProjection projection;
+        if( model.getRowCount()>0 ) {
+            DynObject parameters = (DynObject) model.getParams(0);
+            if( parameters.getDynClass().getDynField(DataStore.METADATA_CRS) != null ) {
+                projection = (IProjection) parameters.getDynValue(DataStore.METADATA_CRS);
+                if( mapContext == null || mapContext.getLayers().isEmpty() ) {
+                    if( projection == null ) {
+                        this.btnChangeViewProjection.setEnabled(false);
+                    } else if( projection.equals(mapContext.getProjection()) ) {
+                        this.btnChangeViewProjection.setEnabled(false);
+                    } else {
+                        for( DataStoreParameters p : model.getParameters()) {
+                            projection = (IProjection) p.getDynValue(DataStore.METADATA_CRS);
+                            if( projection != null ) {
+                                String s = projection.getFullCode();
+                                if( s.contains("@") ) {
+                                    this.btnChangeViewProjection.setEnabled(false);
+                                    return;
+                                }
+                            }
+                        }
+                        this.btnChangeViewProjection.setEnabled(true);
+                    }
+                }
+            }
+        }
+    }
+    
+    private void doChangeViewProjection() {
+        FilesystemExplorerWizardTableModel model = (FilesystemExplorerWizardTableModel) this.tableFiles.getModel();
+        if( model.getRowCount() <= 0 || 
+            (selectedIndex < 0 && selectedIndex >= model.getRowCount()) ) {
+            this.btnChangeViewProjection.setEnabled(false);
+            return;
+        }
+        IProjection projection;
+        DynObject parameters = (DynObject) model.getParams(selectedIndex);
+        if( parameters.getDynClass().getDynField(DataStore.METADATA_CRS) != null ) {
+            projection = (IProjection) parameters.getDynValue(DataStore.METADATA_CRS);
+            if( mapContext == null || mapContext.getLayers().isEmpty() ) {
+                mapContext.setProjection(projection);
+                updateTable();
+            }
+        }            
+    }
+
+    void setTabularOnly(boolean tabularOnly) {
+        this.tabularOnly = tabularOnly;
+        this.btnChangeViewProjection.setVisible(!tabularOnly);
+    }
+
+    @Override
+    public void addChangeListener(ChangeListener cl) {
+        this.changeListeners.addChangeListener(cl);
+    }
+
+    @Override
+    public ChangeListener[] getChangeListeners() {
+        return this.changeListeners.getChangeListeners();
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener cl) {
+        this.changeListeners.removeChangeListener(cl);
+    }
+
+    @Override
+    public void removeAllChangeListener() {
+        this.changeListeners.removeAllChangeListener();
+    }
+
+    @Override
+    public boolean hasChangeListeners() {
+        return this.changeListeners.hasChangeListeners();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardTableModel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardTableModel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardTableModel.java	(revision 46118)
@@ -0,0 +1,315 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.table.AbstractTableModel;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilesystemExplorerWizardTableModel extends AbstractTableModel {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1289509561088757725L;
+
+    private static final int COLUMNS = 2;
+
+    private static final int COLUMN_STORE_PARAMETERS = 0;
+    private static final int COLUMN_TILED = 1;
+
+    public static final String COLUMN_STORE_PARAMETERS_NAME = "Fichero";
+    public static final String COLUMN_TILED_NAME = "_tiled";
+
+    private List<FilesystemStoreParametersToLoad> data = null;
+
+    /**
+     *
+     */
+    public FilesystemExplorerWizardTableModel() {
+        this.data = (List<FilesystemStoreParametersToLoad>) new ArrayList<FilesystemStoreParametersToLoad>();
+    }
+
+    @Override
+    public int getColumnCount() {
+        return COLUMNS;
+    }
+
+    @Override
+    public int getRowCount() {
+        return data.size();
+    }
+
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        switch (columnIndex) {
+        case COLUMN_STORE_PARAMETERS:
+            return FilesystemStoreParametersToLoad.class;
+        case COLUMN_TILED:
+            return Boolean.class;
+        }
+        return super.getColumnClass(columnIndex);
+    }
+
+    @Override
+    public Object getValueAt(int i, int j) {
+        if (i < data.size()) {
+            FilesystemStoreParametersToLoad filesystemStoreParametersToLoad = (FilesystemStoreParametersToLoad) data.get(i);
+            switch (j) {
+            case COLUMN_STORE_PARAMETERS:
+                return filesystemStoreParametersToLoad.getParameters();
+            case COLUMN_TILED:
+                return filesystemStoreParametersToLoad.isTiled();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getColumnName(int col) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        if(col < COLUMNS){
+            switch (col) {
+            case COLUMN_STORE_PARAMETERS:
+                return i18nManager.getTranslation(COLUMN_STORE_PARAMETERS_NAME);
+            case COLUMN_TILED:
+                return i18nManager.getTranslation(COLUMN_TILED_NAME);
+            default:
+                break;
+            }
+        }
+        throw new IndexOutOfBoundsException("Column '"+col+"' > "+COLUMNS);
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        if (col == COLUMN_TILED && isEditableTiled(row) ) {
+            return true;
+        }
+        return false;
+    }
+
+    public void setValueAt(Object value, int row, int col) {
+        if (row < data.size()) {
+            if (col < COLUMNS) {
+                FilesystemStoreParametersToLoad filesystemStoreParametersToLoad = data.get(row);
+                switch (col) {
+                case COLUMN_STORE_PARAMETERS:
+                    if (value == null || !(value instanceof FilesystemStoreParameters)) {
+                        throw new IllegalArgumentException("The object '" + value.toString() + "' must be a FilesystemStoreParameters.");
+                    }
+                    filesystemStoreParametersToLoad.setParameters((FilesystemStoreParameters) value);
+                    break;
+                case COLUMN_TILED:
+                    if (value == null) {
+                        filesystemStoreParametersToLoad.setTiled(false);
+                        break;
+                    }
+                    if (!(value instanceof Boolean)) {
+                        throw new IllegalArgumentException("The object '" + value.toString() + "' must be a Boolean.");
+                    }
+                    filesystemStoreParametersToLoad.setTiled((boolean) value);
+                    break;
+
+                default:
+                    break;
+                }
+
+            }
+        }
+    }
+
+    /**
+     * @param fileParams
+     * @param projection
+     * @param tiled
+     */
+    public void add(FilesystemStoreParameters fileParams){
+        DataManager dataManager = DALLocator.getDataManager();
+        DataStoreProviderFactory factory = dataManager.getStoreProviderFactory( ((DataStoreParameters)fileParams).getDataStoreName());
+        boolean editable = false;
+        boolean tiled = false;
+        if( factory != null ) {
+            if( factory.getClass().getSimpleName().equalsIgnoreCase("TileProviderFactory")){
+                editable = false;
+                tiled = true;
+            } else {
+                switch (factory.isTiledSupported()) {
+                case DataStoreProviderFactory.NO:
+                    editable = false;
+                    tiled = false;
+                    break;
+                case DataStoreProviderFactory.YES:
+                    editable = true;
+                    tiled = (factory.worksBestTiled()==DataStoreProviderFactory.YES);
+                    break;
+                case DataStoreProviderFactory.UNKNOWN:
+                    //De momento, si no sabemos si se puede tilear lo marcamos como no
+                    editable = false;
+                    tiled = false;
+                    break;
+                default:
+                    break;
+                }
+            }
+        }
+        FilesystemStoreParametersToLoad filesystemStoreParametersToLoad = new FilesystemStoreParametersToLoad(fileParams, tiled, editable) ;
+        data.add(filesystemStoreParametersToLoad);
+    }
+
+    /**
+     * @param listFileParams
+     * @param tiled
+     */
+    public void add(List<FilesystemStoreParameters> listFileParams){
+        for (FilesystemStoreParameters filesystemStoreParameters : listFileParams) {
+            this.add(filesystemStoreParameters);
+        }
+    }
+
+    /**
+     * @param row
+     */
+    public void remove(int row){
+        this.data.remove(row);
+    }
+
+    /**
+     * @param row
+     * @return FilesystemStoreParameters
+     */
+    public FilesystemStoreParameters getParams(int row){
+        return this.data.get(row).getParameters();
+    }
+
+    /**
+     * @param row
+     * @return boolean
+     */
+    public boolean isTiled(int row){
+        return this.data.get(row).isTiled();
+    }
+
+    /**
+     * @param row
+     * @return
+     */
+    public boolean isEditableTiled(int row){
+        return this.data.get(row).isEditable();
+    }
+    /**
+     * @param row
+     */
+    public void up(int row){
+        if(row>0 && row<this.data.size()){
+            FilesystemStoreParametersToLoad aux = this.data.get(row-1);
+            this.data.set(row-1, this.data.get(row));
+            this.data.set(row, aux);
+        }
+    }
+
+    /**
+     * @param row
+     */
+    public void down(int row){
+        if(row>=0 && row<(this.data.size()-1)){
+            FilesystemStoreParametersToLoad aux = this.data.get(row);
+            this.data.set(row, this.data.get(row+1));
+            this.data.set(row+1, aux);
+        }
+    }
+
+    /**
+     * @return DataStoreParameters[]
+     */
+    public DataStoreParameters[] getParameters() {
+        List<FilesystemStoreParameters> result = new ArrayList<FilesystemStoreParameters>();
+        for (FilesystemStoreParametersToLoad rowData : this.data) {
+            result.add(rowData.getParameters());
+        }
+        return result.toArray(new DataStoreParameters[0]);
+    }
+
+    /**
+     * @param parameters
+     * @return boolean
+     */
+    public boolean isTiled(DataStoreParameters parameters) {
+        for (FilesystemStoreParametersToLoad filesystemStoreParametersToLoad : data) {
+            if(filesystemStoreParametersToLoad.getParameters()==parameters){
+                return filesystemStoreParametersToLoad.isTiled();
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @author fdiaz
+     *
+     */
+    public static class FilesystemStoreParametersToLoad{
+        private FilesystemStoreParameters params;
+        private boolean tiled;
+        private boolean editable = false;
+
+        /**
+         * @param params
+         */
+        public FilesystemStoreParametersToLoad(FilesystemStoreParameters params) {
+            this.setParameters(params);
+        }
+
+        /**
+         * @param params
+         * @param tiled
+         * @param editable
+         */
+        public FilesystemStoreParametersToLoad(FilesystemStoreParameters params, boolean tiled, boolean editable) {
+            this.setParameters(params);
+            this.setTiled(tiled);
+            this.editable = editable;
+        }
+
+        FilesystemStoreParameters getParameters(){
+            return this.params;
+        }
+
+        /**
+         * @param file the file to set
+         */
+        public void setParameters(FilesystemStoreParameters file) {
+            this.params = file;
+        }
+
+        /**
+         * @return the tiled
+         */
+        public boolean isTiled() {
+            return tiled;
+        }
+
+        /**
+         * @param tiled the tiled to set
+         */
+        public void setTiled(boolean tiled) {
+                this.tiled = tiled;
+        }
+
+        public boolean isEditable() {
+            return this.editable;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.xml	(revision 46118)
@@ -0,0 +1,697 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">fill</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.JTable</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTable</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">tableFiles</at>
+            <at name="width">739</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="height">32</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">2</at>
+           <at name="colspan">1</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.FormComponent</at>
+        </super>
+        <at name="id">embedded.279458962</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0)</at>
+        <at name="colspecs">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">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.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="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="actionCommand">JButton</at>
+                 <at name="name">btnAdd</at>
+                 <at name="width">174</at>
+                 <at name="text">_add</at>
+                 <at name="toolTipText">_select_a_file_to_add_to_the_list</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">3</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="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="actionCommand">JButton</at>
+                 <at name="name">btnProperties</at>
+                 <at name="width">174</at>
+                 <at name="text">_properties</at>
+                 <at name="toolTipText">_change_default_properties_to_load_the_selected_item</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">5</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="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="actionCommand">JButton</at>
+                 <at name="name">btnRemove</at>
+                 <at name="width">174</at>
+                 <at name="text">_remove</at>
+                 <at name="toolTipText">_remove_the_selected_item_from_the_list</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">7</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="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="actionCommand">JButton</at>
+                 <at name="name">btnUp</at>
+                 <at name="width">174</at>
+                 <at name="text">_up</at>
+                 <at name="toolTipText">_move_up_the_selected_item_in_the_list</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">9</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="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="actionCommand">JButton</at>
+                 <at name="name">btnDown</at>
+                 <at name="width">174</at>
+                 <at name="text">_down</at>
+                 <at name="toolTipText">_move_down_the_selected_item_in_the_list</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">11</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="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="actionCommand">_Change_view_projection</at>
+                 <at name="name">btnChangeViewProjection</at>
+                 <at name="width">174</at>
+                 <at name="text">_Change_view_projection</at>
+                 <at name="toolTipText">_Change_view_projection_to_projection_of_the_selected_item_in_the_list
+</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="12">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="7">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="8">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="9">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="10">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="11">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="3">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5">
+         <at name="item" index="1">
+          <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+           <at name="name">fill</at>
+           <at name="delegate">
+            <object classname="com.jeta.forms.store.properties.effects.SolidProperty">
+             <at name="color">
+              <object classname="com.jeta.forms.store.properties.ColorProperty">
+               <at name="name">dyncolor</at>
+               <at name="colorkey">constant</at>
+               <at name="constantcolor" object="color">255,255,255</at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </object>
+         </at>
+        </object>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemExplorerWizardPanelView.java	(revision 46118)
@@ -0,0 +1,192 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+
+
+public class FilesystemExplorerWizardPanelView extends JPanel
+{
+   JTable tableFiles = new JTable();
+   JButton btnAdd = new JButton();
+   JButton btnProperties = new JButton();
+   JButton btnRemove = new JButton();
+   JButton btnUp = new JButton();
+   JButton btnDown = new JButton();
+   JButton btnChangeViewProjection = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public FilesystemExplorerWizardPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tableFiles.setName("tableFiles");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tableFiles);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,new CellConstraints(2,2,1,1,CellConstraints.DEFAULT,CellConstraints.FILL));
+
+      jpanel1.add(createPanel1(),new CellConstraints(4,2,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAdd.setActionCommand("JButton");
+      btnAdd.setName("btnAdd");
+      btnAdd.setText("_add");
+      btnAdd.setToolTipText("_select_a_file_to_add_to_the_list");
+      jpanel1.add(btnAdd,cc.xy(1,1));
+
+      btnProperties.setActionCommand("JButton");
+      btnProperties.setName("btnProperties");
+      btnProperties.setText("_properties");
+      btnProperties.setToolTipText("_change_default_properties_to_load_the_selected_item");
+      jpanel1.add(btnProperties,cc.xy(1,3));
+
+      btnRemove.setActionCommand("JButton");
+      btnRemove.setName("btnRemove");
+      btnRemove.setText("_remove");
+      btnRemove.setToolTipText("_remove_the_selected_item_from_the_list");
+      jpanel1.add(btnRemove,cc.xy(1,5));
+
+      btnUp.setActionCommand("JButton");
+      btnUp.setName("btnUp");
+      btnUp.setText("_up");
+      btnUp.setToolTipText("_move_up_the_selected_item_in_the_list");
+      jpanel1.add(btnUp,cc.xy(1,7));
+
+      btnDown.setActionCommand("JButton");
+      btnDown.setName("btnDown");
+      btnDown.setText("_down");
+      btnDown.setToolTipText("_move_down_the_selected_item_in_the_list");
+      jpanel1.add(btnDown,cc.xy(1,9));
+
+      btnChangeViewProjection.setActionCommand("_Change_view_projection");
+      btnChangeViewProjection.setName("btnChangeViewProjection");
+      btnChangeViewProjection.setText("_Change_view_projection");
+      btnChangeViewProjection.setToolTipText("_Change_view_projection_to_projection_of_the_selected_item_in_the_list\n");
+      jpanel1.add(btnChangeViewProjection,cc.xy(1,11));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4,6,8,10,12 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemStoreParameteresCellRenderer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemStoreParameteresCellRenderer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/fmap/dal/serverexplorer/filesystem/swing/FilesystemStoreParameteresCellRenderer.java	(revision 46118)
@@ -0,0 +1,88 @@
+package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
+
+import java.io.File;
+
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
+
+import org.cresques.cts.IProjection;
+
+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.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class FilesystemStoreParameteresCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 3360312241312140371L;
+
+    MapContext mapContext;
+
+    /**
+     * @param mapContext
+     */
+    public FilesystemStoreParameteresCellRenderer(MapContext mapContext) {
+        super();
+        this.mapContext = mapContext;
+    }
+
+
+    @Override
+    protected void setValue(Object value) {
+        if (value==null) {
+            return;
+        }
+        FilesystemStoreParameters params = (FilesystemStoreParameters)value;
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        File file = params.getFile();
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("<html><p>");
+        builder.append("<b>");
+        builder.append(file.getName());
+        builder.append("</b></p>");//<font size=+2>");
+        builder.append("<p>");
+        builder.append("<font size=-2>");
+
+        IProjection projection = null;
+        if(params instanceof DataStoreParameters){
+            DataStoreParameters parameters = (DataStoreParameters)params;
+            if(parameters.getDynClass().getDynField(DataStore.METADATA_CRS)!=null){
+                projection = (IProjection) parameters.getDynValue(DataStore.METADATA_CRS);
+                String crsText;
+                if (mapContext != null) {
+                    if (projection == null) {
+                        crsText =
+                            i18nManager.getTranslation("_Unknown_CRS_so_assumed") + " " + mapContext.getProjection().getAbrev();
+
+                    } else {
+                        if (!projection.equals(mapContext.getProjection())) {
+                            crsText =
+                                projection.getAbrev() + " (" + i18nManager.getTranslation("_reprojected_on_the_fly") + ") ";
+                        } else {
+                            crsText = projection.getAbrev();
+                        }
+                    }
+                    builder.append(crsText);
+                }
+            };
+        }
+        builder.append("</font></p>");
+        builder.append("</html>");
+
+        super.setValue(builder.toString());
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLocator.java	(revision 46118)
@@ -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.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";
+	
+	public static final String FILESYSTEMEXPLORERPROPERTIESPANEL_MANAGER_NAME = "FilesystemExplorerPropertiesPanel.manager";
+	private static final String FILESYSTEMEXPLORERPROPERTIESPANEL_MANAGER_DESCRIPTION = "Manager for FilesystemExplorerPropertiesPanel";
+	
+	/**
+	 * 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);
+	}
+        
+	public static ApplicationManager getApplicationManager() {
+            return getManager();
+        }
+
+	/**
+	 * 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();
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/PreferencesNode.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationLibrary.java	(revision 46118)
@@ -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.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.app.project.documents.view.expressionevaluator.savedpoints.SavedPointsElementFactory;
+import org.gvsig.app.project.documents.view.expressionevaluator.ViewElementFactory;
+import org.gvsig.app.project.symboltables.ProjectSymbolTableFactory;
+import org.gvsig.app.project.symboltables.functionPanels.area.AreaAditionalPanelFactory;
+import org.gvsig.app.project.symboltables.functionPanels.perimeter.PerimeterAditionalPanelFactory;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLibrary;
+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);
+        require(ExpressionEvaluatorLibrary.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();
+
+                ProjectSymbolTableFactory.selfRegister();
+                AreaAditionalPanelFactory.selfRegister();
+                PerimeterAditionalPanelFactory.selfRegister();
+//                FirstLayerFeatureAditionalPanelFactory.selfRegister();
+                ViewElementFactory.selfRegister();
+                SavedPointsElementFactory.selfRegister();
+        }
+
+	/**
+	 * 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayerDropingFile.java	(revision 46118)
@@ -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, 800);    
+    }
+
+    
+    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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewInvertSelection.java	(revision 46118)
@@ -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.extension;
+
+import java.util.List;
+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.FLayers;
+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;
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "selection-reverse", this);
+    }
+
+    @Override
+    public void postInitialize() {
+    }
+
+    @Override
+    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);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if( document == null ) {
+            return false;
+        }
+        List<FLayer> layers = document.getMapContext().getLayers().getLayers(
+                FLayers.LAYER_ACTIVE
+                        .and(FLayers.LAYER_AVALAIBLE)
+                        .and(FLayers.LAYER_SELECTION_AVAILABLE)
+        );
+        if (layers.size()>=1) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/OpenLayerOnStart.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/OpenLayerOnStart.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/OpenLayerOnStart.java	(revision 46118)
@@ -0,0 +1,127 @@
+package org.gvsig.app.extension;
+
+import java.awt.GridBagConstraints;
+import java.beans.PropertyVetoException;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.Arguments;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.documents.DocumentManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+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.DataServerExplorer;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+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.FilesystemFileFilter;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.dynobject.DynField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OpenLayerOnStart implements Runnable {
+
+    private static final Logger logger = LoggerFactory.getLogger(OpenLayerOnStart.class);
+
+    @Override
+    public void run() {
+        PluginsManager PluginManager = PluginsLocator.getManager();
+        DataManager dataManager = DALLocator.getDataManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        ProjectManager projectManager = application.getProjectManager();
+        DocumentManager viewManager = projectManager.getDocumentManager(ViewManager.TYPENAME);
+        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+        Project project = application.getProjectManager().getCurrentProject();
+
+        Arguments args = PluginManager.getArguments();
+        List<String> params = new ArrayList<>(args.parameters());
+        params.remove(0);
+        params.remove(0);
+        for( String param : params ) {
+            if( !StringUtils.isEmpty(param) && param.endsWith(Project.FILE_EXTENSION) ) {
+                try {
+                    File f = new File(param);
+                    application.getUIManager().closeAllWindows();
+                    project = projectManager.createProject();
+                    project.loadState(f);
+                    projectManager.setCurrentProject(project);
+                } catch (Throwable th) {
+                    logger.warn("Can't load project '" + param + "'.", th);
+                }
+                break;
+            }
+        }
+
+        ViewDocument viewDoc = null;
+        FilesystemServerExplorer explorer = null;
+        FilesystemFileFilter filter = null;
+        IProjection proj = null;
+        for( String param : params ) {
+            try {
+                if( FilenameUtils.isExtension(param, "gvproj") ) {
+                    continue;
+                }
+                if( explorer == null ) {
+                    DataServerExplorerParameters explorerparams = dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
+                    explorer = (FilesystemServerExplorer) dataManager.openServerExplorer(FilesystemServerExplorer.NAME, explorerparams);
+                    filter = explorer.getFilter(DataServerExplorer.MODE_GEOMETRY | DataServerExplorer.MODE_RASTER, "All formats");
+                }
+
+                File f = new File(param);
+                if( filter.accept(f) ) {
+                    if( viewDoc == null ) {
+                        viewDoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+                        if( viewDoc==null || !viewDoc.getMapContext().getLayers().isEmpty() ) {
+                            application.getUIManager().closeAllWindows();
+                            viewDoc = (ViewDocument) viewManager.createDocument();
+                            project.addDocument(viewDoc);
+                        }
+                        proj = viewDoc.getMapContext().getProjection();
+                        IView viewWindow = (IView) viewManager.getMainWindow(viewDoc);
+                        application.getUIManager().addWindow(viewWindow, GridBagConstraints.CENTER);
+                        try {
+                            application.getUIManager().setMaximum((IWindow) viewWindow, true);
+                        } catch (PropertyVetoException e) {
+
+                        }
+                    }
+                    DataStoreParameters storeParams = explorer.createStoreParameters(f);
+                    // 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 = storeParams.getDynClass().getDynFields();
+                    for (DynField field : fields) {
+                        if (field.getType() == DataTypes.CRS && field.isMandatory()) {
+                            if (storeParams.getDynValue(field.getName()) == null) {
+                                storeParams.setDynValue(field.getName(), proj);
+                            }
+                        }
+                    }                    
+                    DataStore store = dataManager.openStore(storeParams.getDataStoreName(), storeParams);
+                    FLayer layer = mapContextManager.createLayer(store.getName(), store);
+                    viewDoc.getMapContext().getLayers().add(layer);
+                }
+            } catch (Throwable th) {
+                logger.warn("Can't load layer '" + param + "'.", th);
+            }
+        }
+
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitialWarningExtension.java	(revision 46118)
@@ -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.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 {
+
+    private DlgWaring dlgWarning;
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    @Override
+    public void initialize() {
+
+        if (isEnabled() && isVisible()) {
+            dlgWarning = new DlgWaring();
+            dlgWarning.setText(PluginServices.getText(this, "initial_warning"));
+            dlgWarning.setVisible(true);
+        }
+
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+    }
+
+    private class DlgWaring extends JWindow {
+
+        private JButton btnOk = null;
+        private final 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(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() {
+                    @Override
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        dlgWarning.setVisible(false);
+                        dlgWarning.dispose();
+                        //						PluginServices.getMDIManager().closeWindow(dlgWarning);
+                    }
+                });
+            }
+            return btnOk;
+        }
+
+        public WindowInfo getWindowInfo() {
+            WindowInfo vi = new WindowInfo(WindowInfo.MODALDIALOG);
+            vi.setWidth(300 + 8);
+            vi.setHeight(250);
+            vi.setTitle(PluginServices.getText(this, "warning"));
+            return vi;
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCountExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCountExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCountExtension.java	(revision 46118)
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2015 DiSiD Technologies S.L.L. All rights reserved.
+ *
+ * Project  : DiSiD org.gvsig.app.mainplugin
+ * SVN Id   : $Id$
+ */
+package org.gvsig.app.extension.selectioncount;
+
+import javax.swing.border.BevelBorder;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiFrame.NewStatusBar;
+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.gui.IView;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlCreationListener;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.gui.beans.controls.IControl;
+import org.gvsig.gui.beans.controls.label.Label;
+
+/**
+ * Controls the extension Selection count, which shows the selected features in the status bar
+ * @author Daniel Martinez
+ *
+ */
+public class SelectionCountExtension extends Extension {
+    private IControl control;
+    private SelectionCount selectionCount;
+
+    @Override
+    public void initialize() {
+        // Do nothing
+
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+     // Do nothing
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        IWindow window = getActiveWindow();
+        if (window instanceof IView) {
+            IView view = (IView)window;
+            ViewDocument viewDocument = view.getViewDocument();
+            return viewDocument.getMapContext().hasActiveVectorLayers();
+        }
+        return false;
+    }
+
+    private IView getActiveView() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        return view;
+    }
+
+    private IWindow getActiveWindow() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        return application.getActiveWindow();
+    }
+
+    @Override
+    public void postInitialize() {
+        if (this.control==null){
+            this.control=createLabel();
+        }
+        selectionCount = new SelectionCount(this.control);
+    }
+
+    private IControl createLabel(){
+        MainFrame mainFrame = PluginsLocator.getMainFrame();
+        Label label=new Label();
+        label.setName("selectionCount");
+        String tooltip=PluginServices.getText(this,"_Selected_features");
+        label.setToolTipText(tooltip);
+        label.setBorder(new BevelBorder(BevelBorder.LOWERED));
+        mainFrame.addStatusBarControl(this.getClass(), label);
+        return label;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCount.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCount.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/selectioncount/SelectionCount.java	(revision 46118)
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2015 DiSiD Technologies S.L.L. All rights reserved.
+ *
+ * Project  : DiSiD org.gvsig.app.mainplugin
+ * SVN Id   : $Id$
+ */
+package org.gvsig.app.extension.selectioncount;
+
+import javax.swing.JLabel;
+
+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.exception.DataException;
+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.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerListener;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlCreationListener;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.gui.beans.controls.IControl;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Counts total and selected features and shows them in the status bar
+ * @author Daniel Martinez
+ *
+ */
+public class SelectionCount implements LayerListener,Observer{
+    private static Logger logger =
+        LoggerFactory.getLogger(SelectionCount.class);
+
+    private IControl control;
+
+    /**
+     * Listens the map control to show the count through the control in the status bar
+     * @param mapControl
+     * @param control
+     */
+    public SelectionCount (IControl control){
+        this.control=control;
+        MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+        mapControlManager.addMapControlCreationListener(new MapControlCreationListener() {
+            @Override
+            public MapControl mapControlCreated(final MapControl mapControl) {
+                final MapContext mapContext = mapControl.getMapContext();
+                mapContext.addAtomicEventListener(new AtomicEventListener() {
+                    @Override
+                    public void atomicEvent(AtomicEvent e) {
+                        doAtomicEvent(mapContext, e);
+                    }
+                });
+                return mapControl;
+            }
+        });
+    }
+
+    public void doAtomicEvent(MapContext mapContext, AtomicEvent e) {
+        LayerCollectionEvent[] events = e.getLayerCollectionEvents();
+        for( int i=0; i<events.length ; i++ ) {
+            if( events[i].getEventType() == LayerCollectionEvent.LAYER_ADDED ) {
+                FLayer fLayer = events[i].getAffectedLayer();
+                fLayer.addLayerListener(this);
+            }
+            if( events[i].getEventType() == LayerCollectionEvent.LAYER_REMOVED ) {
+                FLayer fLayer = events[i].getAffectedLayer();
+                fLayer.removeLayerListener(this);
+                showFeatureCount();
+            }
+        }
+    }
+
+    @Override
+    public void visibilityChanged(LayerEvent e) {
+        // Do nothing
+    }
+
+    @Override
+    public void activationChanged(LayerEvent e) {
+        if (e.getEventType()==LayerEvent.ACTIVATION_CHANGED){
+            FLayer fLayer =e.getSource();
+            if( fLayer.isAvailable() ) {
+                showFeatureCount();
+                if (fLayer.isActive()){
+                    if (fLayer instanceof FLyrVect) {
+                        FLyrVect lyrVect = (FLyrVect) fLayer;
+                        lyrVect.getFeatureStore().addObserver(this);
+                    }
+                }else{
+                    if (fLayer instanceof FLyrVect) {
+                        FLyrVect lyrVect = (FLyrVect) fLayer;
+                        lyrVect.getFeatureStore().deleteObserver(this);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void nameChanged(LayerEvent e) {
+     // Do nothing
+    }
+
+    @Override
+    public void editionChanged(LayerEvent e) {
+     // Do nothing
+    }
+
+    @Override
+    public void drawValueChanged(LayerEvent e) {
+     // Do nothing
+    }
+
+    @Override
+    public void update(final Observable observable, final Object notification) {
+        if (notification instanceof FeatureStoreNotification) {
+            FeatureStoreNotification event
+                    = (FeatureStoreNotification) notification;
+            if (event.getType() == FeatureStoreNotification.AFTER_DELETE ||
+                event.getType() == FeatureStoreNotification.AFTER_INSERT ||
+                event.getType() == FeatureStoreNotification.AFTER_FINISHEDITING ||
+                event.getType() == FeatureStoreNotification.SELECTION_CHANGE ){
+
+                if (event.getSource() instanceof FeatureStore){
+                    showFeatureCount();
+                }
+            }
+        }
+    }
+
+    /**
+     * Gets the features from the selected layers and shows them through the control
+     * @param mapControl
+     */
+    public void showFeatureCount(){
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewDoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewDoc == null ) {
+            return;
+        }
+        MapContext mapContext = viewDoc.getMapContext();
+        Long totalFeaturesCount=Long.valueOf(0);
+        Long selectedFeaturesCount=Long.valueOf(0);;
+        if (mapContext!=null){
+            FLayer[] actives =mapContext.getLayers().getActives();
+            if (actives!=null && actives.length>0){
+                for(FLayer fLayer:actives){
+                    if (fLayer instanceof FLyrVect) {
+                        FLyrVect lyrVect = (FLyrVect) fLayer;
+                        FeatureStore featureStore=lyrVect.getFeatureStore();
+                        if (featureStore != null) {
+                            try {
+                                totalFeaturesCount +=
+                                    featureStore.getFeatureCount();
+                            } catch (DataException e) {
+                                logger.warn(
+                                    "Problem obtaining total features count");
+                                totalFeaturesCount = 0L;
+                            }
+                            try {
+                                FeatureSelection featureSelection =
+                                    featureStore.getFeatureSelection();
+                                if (featureSelection != null) {
+                                    selectedFeaturesCount +=
+                                        featureSelection.getSize();
+                                }
+                            } catch (DataException e) {
+                                logger.warn(
+                                    "Problem obtaining selected features count");
+                                selectedFeaturesCount = 0L;
+                            }
+                        }
+                    }
+                }
+                messageToStatusBar(totalFeaturesCount,selectedFeaturesCount);
+            }else {
+                clean();
+            }
+        }else {
+            clean();
+        }
+    }
+
+    /**
+     * Cleans the text shown in the control
+     */
+    public void clean(){
+        if (control!=null && control instanceof JLabel ){
+            JLabel jlabel = (JLabel)control;
+            jlabel.setText("");
+        }
+    }
+
+    private void messageToStatusBar(Long totalFeaturesCount, Long selectedFeaturesCount){
+        String strTotal;
+        String strSelected;
+        if (totalFeaturesCount!=null){
+            strTotal=totalFeaturesCount.toString();
+        }else{
+            strTotal="N/A";
+        }
+        if (selectedFeaturesCount!=null){
+            strSelected=selectedFeaturesCount.toString();
+        }else{
+            strSelected="N/A";
+        }
+        if (control!=null && control instanceof JLabel ){
+            JLabel jlabel = (JLabel)control;
+            jlabel.setText(strSelected+"/"+strTotal);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteFeaturesFromClipboardExtension.java	(revision 46118)
@@ -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.extension.clipboard;
+
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+
+import javax.swing.JOptionPane;
+import org.apache.commons.lang.mutable.MutableInt;
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.logger.FilteredLogger;
+
+import javax.json.JsonObject;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonReader;
+
+
+public class PasteFeaturesFromClipboardExtension extends Extension {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(PasteFeaturesFromClipboardExtension.class);
+
+    @Override
+    public void initialize() {
+
+        IconThemeHelper.registerIcon("action", "layer-modify-clipboard-paste", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (actionCommand.compareToIgnoreCase("layer-modify-clipboard-paste") != 0) {
+            return;
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return;
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String clipboardValue = application.getFromClipboard();
+        if( StringUtils.isBlank(clipboardValue) ) {
+            application.messageDialog(
+                i18n.getTranslation("_Clipboard_has_no_valid_info_or_is_empty"),
+                null, 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.INFORMATION_MESSAGE, 
+                "ClipboardEmptyWhenPasteFeatures"
+            );
+            return;
+        }
+        
+        JsonArray jsonArray;
+        try {
+            JsonReader jsonReader = Json.createReader(new StringReader(clipboardValue));
+            jsonArray = jsonReader.readArray();
+            jsonReader.close();
+        } catch(Exception ex) {
+            LOGGER.warn("Can't get JSON from the clipboard.", ex);
+            application.messageDialog(
+                i18n.getTranslation("_Clipboard_has_no_valid_info_or_is_empty"),
+                null, 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.WARNING_MESSAGE, 
+                "ClipboardNotValidWhenPasteFeatures"
+            );
+            return;
+        }
+        if( jsonArray.size()<1 ) {
+            application.messageDialog(
+                i18n.getTranslation("_No_features_found_in_clipboard"),
+                null, 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.WARNING_MESSAGE, 
+                "ClipboardNotHasElementsWhenPasteFeatures"
+            );
+            return;
+        }
+        
+        
+        MapContext mapContext = viewdoc.getMapContext();
+        List<FLayer> layers = mapContext.getLayers().getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                return layer instanceof FLyrVect && 
+                        layer.isActive() &&
+                        layer.isAvailable() &&
+                        layer.isEditing(); 
+            }
+        });
+        if( layers.isEmpty() ) {
+            return;
+        }
+        FLyrVect layer = (FLyrVect) layers.get(0);
+        FeatureStore store = layer.getFeatureStore();
+        List<EditableFeature> features = new ArrayList<>();
+        FilteredLogger theLogger = new FilteredLogger(LOGGER, "PasteFeatures", 10);
+        for (Object obj : jsonArray) {
+            if( !(obj instanceof JsonObject ) ) {
+                continue;
+            }
+            JsonObject fjson = (JsonObject) obj;
+            try {
+                EditableFeature f = store.createNewFeature(fjson);
+                features.add(f);
+            } catch (Exception ex) {
+                theLogger.warn("Can't create feature from JSON.", ex);
+            }
+        }
+        if( features.isEmpty() ) {
+            application.messageDialog(
+                i18n.getTranslation("_No_features_found_in_clipboard"),
+                null, 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.WARNING_MESSAGE, 
+                "ClipboardNotHasFeaturesWhenPasteFeatures"
+            );
+            return;
+        }
+
+        int inserteds = 0;
+        theLogger = new FilteredLogger(LOGGER, "PasteFeatures", 10);
+        Envelope envelope = GeometryUtils.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+        for (EditableFeature feature : features) {
+            try {
+                store.insert(feature);
+                inserteds++;
+                try {
+                    envelope.add(feature.getDefaultGeometry());
+                } catch(Exception ex) {
+                    theLogger.warn("Can't calculate envelope.", ex);
+                }
+            } catch(Exception ex) {
+                theLogger.warn("Can't insert feature.", ex);
+            }
+        }
+        StringBuilder msg = new StringBuilder();
+        msg.append(i18n.getTranslation("_Number_of_features_pasted_from_clipboard"));
+        msg.append(":   ");
+        msg.append(inserteds);
+        msg.append("\n");
+        msg.append(i18n.getTranslation("_Number_of_features_from_clipboard_discarded_due_to_bad_format"));
+        msg.append(":   ");
+        msg.append(jsonArray.size() - inserteds);
+        if( inserteds<1 || envelope.isEmpty() ) {
+            application.messageDialog(
+                msg.toString(),
+                null, 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.WARNING_MESSAGE, 
+                "ClipboardNotInsertFeaturesWhenPasteFeatures"
+            );
+            return;
+        }
+        msg.append("\n\n");
+        msg.append(i18n.getTranslation("_Zoom_to_added_features_question"));
+        int r = application.confirmDialog(
+                msg.toString(), 
+                i18n.getTranslation("_Pasting_features_from_clipboard"),
+                JOptionPane.YES_NO_OPTION, 
+                JOptionPane.QUESTION_MESSAGE, 
+                "ZoomToInsertedFeaturesWhenPasteFeatures"
+        );
+        if( r == JOptionPane.NO_OPTION ) {
+            return;
+        }
+        try {
+            viewdoc.getMapContext().getViewPort().setEnvelope(envelope);
+        } catch(Exception ex) {
+            LOGGER.warn("Can't zoom to envelope.", ex);
+        }
+    }
+    
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return false;
+        }
+        String clipboardValue = application.getFromClipboard();
+        if( StringUtils.isBlank(clipboardValue) ) {
+            return false;
+        }
+        MapContext mapContext = viewdoc.getMapContext();
+        MutableInt numActiveVectorial = new MutableInt(0);
+        MutableInt numActiveVectorialEditable = new MutableInt(0);
+        List<FLayer> layers = mapContext.getLayers().getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                if (layer instanceof FLyrVect && 
+                        layer.isActive() && 
+                        layer.isAvailable() ) {
+                        numActiveVectorial.increment();
+                    if (layer.isEditing()) {
+                        numActiveVectorialEditable.increment();
+                    }
+                }
+                // No recuperamos ninguna capa, solo contamos las activa en edicion
+                return false; 
+            }
+        });
+        if (numActiveVectorialEditable.intValue() == 1 && 
+                numActiveVectorial.intValue() == 1) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        return application.getActiveDocument(ViewManager.TYPENAME)!=null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteAlphanumericValuesFromClipboardExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteAlphanumericValuesFromClipboardExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/PasteAlphanumericValuesFromClipboardExtension.java	(revision 46118)
@@ -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.extension.clipboard;
+
+import java.io.StringReader;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.logging.Level;
+
+import javax.swing.JOptionPane;
+import org.apache.commons.lang.mutable.MutableInt;
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.fmap.dal.feature.EditableFeature;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+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.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.logger.FilteredLogger;
+
+import javax.json.JsonObject;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonReader;
+import org.gvsig.app.project.documents.Document;
+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.FeatureSelection;
+
+public class PasteAlphanumericValuesFromClipboardExtension extends Extension {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(PasteAlphanumericValuesFromClipboardExtension.class);
+
+    @Override
+    public void initialize() {
+
+        IconThemeHelper.registerIcon("action", "layer-modify-clipboard-paste-alphanumeric", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (actionCommand.compareToIgnoreCase("layer-modify-clipboard-paste-alphanumeric") != 0) {
+            return;
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (viewdoc == null) {
+            return;
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String clipboardValue = application.getFromClipboard();
+        if (StringUtils.isBlank(clipboardValue)) {
+            application.messageDialog(
+                    i18n.getTranslation("_Clipboard_has_no_valid_info_or_is_empty"),
+                    null,
+                    i18n.getTranslation("_Pasting_features_from_clipboard"),
+                    JOptionPane.INFORMATION_MESSAGE,
+                    "ClipboardEmptyWhenPasteFeatures"
+            );
+            return;
+        }
+
+        JsonArray jsonArray;
+        try {
+            JsonReader jsonReader = Json.createReader(new StringReader(clipboardValue));
+            jsonArray = jsonReader.readArray();
+            jsonReader.close();
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get JSON from the clipboard.", ex);
+            application.messageDialog(
+                    i18n.getTranslation("_Clipboard_has_no_valid_info_or_is_empty"),
+                    null,
+                    i18n.getTranslation("_Pasting_features_from_clipboard"),
+                    JOptionPane.WARNING_MESSAGE,
+                    "ClipboardNotValidWhenPasteFeatures"
+            );
+            return;
+        }
+        if (jsonArray.size() < 1) {
+            application.messageDialog(
+                    i18n.getTranslation("_No_features_found_in_clipboard"),
+                    null,
+                    i18n.getTranslation("_Pasting_features_from_clipboard"),
+                    JOptionPane.WARNING_MESSAGE,
+                    "ClipboardNotHasElementsWhenPasteFeatures"
+            );
+            return;
+        }
+
+        MapContext mapContext = viewdoc.getMapContext();
+        List<FLayer> layers = mapContext.getLayers().getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                return layer instanceof FLyrVect
+                        && layer.isActive()
+                        && layer.isAvailable()
+                        && layer.isEditing();
+            }
+        });
+        if (layers.isEmpty()) {
+            return;
+        }
+        FLyrVect layer = (FLyrVect) layers.get(0);
+        FeatureStore store = layer.getFeatureStore();
+        FeatureSelection selectionFeatures;
+        try {
+            selectionFeatures = store.getFeatureSelection();
+        } catch (DataException ex) {
+            return;
+        }
+        try {
+            if (selectionFeatures.isEmpty()) {
+                return;
+            }
+        } catch (Exception ex) {
+            return;
+        }
+        FilteredLogger theLogger = new FilteredLogger(LOGGER, "PasteFeatures", 10);
+        Object obj = jsonArray.get(0);
+        if (!(obj instanceof JsonObject)) {
+            return;
+        }
+        JsonObject fjson = (JsonObject) obj;
+        try {
+            EditableFeature f = store.createNewFeature(fjson);
+            
+            
+            for (Feature selectionFeature : selectionFeatures) {
+                EditableFeature eds = selectionFeature.getEditable();
+                eds.copyFrom(f, new Predicate<FeatureAttributeDescriptor>() {
+                    public boolean test(FeatureAttributeDescriptor attr) {
+                        String nameGeom;
+                        try {
+                            nameGeom = store.getDefaultFeatureType().getDefaultGeometryAttributeName();
+                        } catch (DataException ex) {
+                            nameGeom = null;
+                        }
+                        if (StringUtils.equals(attr.getName(), nameGeom)) {
+                            return false;
+                        }
+                        return true;
+                    }
+                });
+                selectionFeatures.update(eds);
+            }
+        } catch (Exception ex) {
+            theLogger.warn("Can't create feature from JSON.", ex);
+        }
+        mapContext.invalidate();
+    }
+    
+    //metodo static para escribir en el store
+    // pasteFromClipboard(FeatureStore store)
+    
+    // isValidClipboard()
+    
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (viewdoc == null) {
+            return false;
+        }
+        String clipboardValue = application.getFromClipboard();
+        if (StringUtils.isBlank(clipboardValue)) {
+            return false;
+        }
+        JsonArray jsonArray;
+        try {
+            JsonReader jsonReader = Json.createReader(new StringReader(clipboardValue));
+            jsonArray = jsonReader.readArray();
+            jsonReader.close();
+
+        } catch (Exception ex) {
+            return false;
+        }
+        if (jsonArray.size() != 1) {
+            return false;
+        }
+        MapContext mapContext = viewdoc.getMapContext();
+        MutableInt numActiveVectorial = new MutableInt(0);
+        MutableInt numActiveVectorialEditable = new MutableInt(0);
+        MutableInt hasSelection = new MutableInt(0);
+        List<FLayer> layers = mapContext.getLayers().getLayers(new Predicate<FLayer>() {
+            @Override
+            public boolean test(FLayer layer) {
+                if (layer instanceof FLyrVect
+                        && layer.isActive()
+                        && layer.isAvailable()) {
+                    numActiveVectorial.increment();
+                    if (layer.isEditing()) {
+                        numActiveVectorialEditable.increment();
+                    }
+                    try {
+                        if (!((FLyrVect) layer).getFeatureStore().getFeatureSelection().isEmpty()) {
+                            hasSelection.increment();
+                        }
+                    } catch (DataException ex) {
+
+                    }
+                }
+                // No recuperamos ninguna capa, solo contamos las activa en edicion
+                return false;
+            }
+        });
+        if (numActiveVectorialEditable.intValue() == 1
+                && numActiveVectorial.intValue() == 1
+                && hasSelection.intValue() > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        Document activeDocument = application.getActiveDocument(ViewManager.TYPENAME);
+        return activeDocument != null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/clipboard/CopyFeaturesToClipboardExtension.java	(revision 46118)
@@ -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.app.extension.clipboard;
+
+import javax.json.JsonArray;
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+public class CopyFeaturesToClipboardExtension extends Extension {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CopyFeaturesToClipboardExtension.class);
+
+    @Override
+    public void initialize() {
+
+        IconThemeHelper.registerIcon("action", "layer-modify-clipboard-copy", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+        if (actionCommand.compareToIgnoreCase("layer-modify-clipboard-copy") != 0) {
+            return;
+        }
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return;
+        }
+        MapContext mapContext = viewdoc.getMapContext();
+        FLyrVect layer = mapContext.getLayers().getFirstActiveVectorLayer();
+        if( layer==null ) {
+            return;
+        }
+        try {
+            FeatureSelection selection = layer.getFeatureStore().getFeatureSelection();
+
+            JsonArray json = selection.toJSON();
+            application.putInClipboard(json.toString());
+
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            application.messageDialog(
+                    i18n.getTranslation("_Number_of_features_copied_to_clipboard")
+                        + ":   " + selection.getSize(),
+                    null, 
+                    i18n.getTranslation("_Copy_selected_features_to_clipboard"),
+                    JOptionPane.INFORMATION_MESSAGE, 
+                    "CopyFeaturesToClipboard"
+            );
+
+        } catch (Exception e) {
+            LOGGER.warn("Can't get the selection as JSON.", e);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        // it's enabled if there is exactly one vector layer in the active view
+        // and it has a selection
+
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return false;
+        }
+        MapContext mapContext = viewdoc.getMapContext();
+        FLyrVect layer = mapContext.getLayers().getFirstActiveVectorLayer();
+        if( layer==null ) {
+            return false;
+        }
+        if (!layer.isAvailable()) {
+            // This can happen when opening a persisted project
+            // and there is a "slow" layer (GeoDB)
+            return false;
+        }
+        try {
+            FeatureSelection selection = layer.getFeatureStore().getFeatureSelection();
+            return !selection.isEmpty();
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get selection from layer '"+layer.getName()+"'.", ex);
+            return false;
+        }
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        return application.getActiveDocument(ViewManager.TYPENAME)!=null;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributes.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributes.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributes.java	(revision 46118)
@@ -0,0 +1,135 @@
+package org.gvsig.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectByAttributes {
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(SelectByAttributes.class);
+
+    public SelectByAttributes() {
+        
+    }
+    
+    public void showWindow(String title, final FeatureStore store, WindowManager.MODE mode) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
+        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        
+        final JPanel panel = new JPanel();
+        panel.setLayout(new BorderLayout());
+
+        final JExpressionBuilder builder = dataSwingManager.createQueryFilterExpresion(store);
+        panel.add(builder.asJComponent(), BorderLayout.CENTER);
+        JPanel buttons = new JPanel();
+        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
+        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_New_selection")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                setSelection(store, builder.getExpression());
+            }
+        }));
+        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                addToSelection(store, builder.getExpression());
+            }
+        }));
+        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                filterSelection(store, builder.getExpression());
+            }
+        }));
+        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                panel.setVisible(false);
+            }
+        }));
+        panel.add(buttons, BorderLayout.SOUTH);
+        
+        windowManager.showWindow(
+                panel,
+                title,
+                mode
+        );
+
+    }
+
+    public void setSelection(FeatureStore store, Expression expression) {
+        try {
+            DataManager manager = DALLocator.getDataManager();
+
+            FeatureSelection currentSelection = store.getFeatureSelection();
+            FeatureQuery query = store.createFeatureQuery();
+            query.setFilter(manager.createExpresion(expression));
+            FeatureSet selection = store.getFeatureSet(query);
+            currentSelection.deselectAll();
+            currentSelection.select(selection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction from filter expression.", ex);
+        }
+    }
+
+    public void addToSelection(FeatureStore store, Expression expression) {
+        try {
+            DataManager manager = DALLocator.getDataManager();
+
+            FeatureSelection currentSelection = store.getFeatureSelection();
+            FeatureQuery query = store.createFeatureQuery();
+            query.setFilter(manager.createExpresion(expression));
+            FeatureSet selection = store.getFeatureSet(query);
+            currentSelection.select(selection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction from filter expression.", ex);
+        }
+    }
+
+    public void filterSelection(FeatureStore store, Expression expression) {
+        try {
+            DataManager manager = DALLocator.getDataManager();
+
+            FeatureSelection currentSelection = store.getFeatureSelection();
+            FeatureQuery query = store.createFeatureQuery();
+            query.setFilter(manager.createExpresion(expression));
+            FeatureSet set = store.getFeatureSet(query);
+            FeatureSelection newSelection = store.createFeatureSelection();
+            for (Feature feature : set) {
+                if( currentSelection.isSelected(feature) ) {
+                    newSelection.select(feature);
+                }
+            }
+            store.setSelection(newSelection);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction from filter expression.", ex);
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomPrev.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BasicSymbologyExtension.java	(revision 46118)
@@ -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.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.GeneralLayerPropertiesPage.GeneralLayerPropertiesPageFactory;
+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.app.project.documents.view.legend.gui.legendactions.LoadLegendAction;
+import org.gvsig.app.project.documents.view.legend.gui.legendactions.SaveLegendAction;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.propertypage.PropertiesPageManager;
+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);
+
+        // Registry property page of layers
+        PropertiesPageManager propertiesPageManager = MapControlLocator.getPropertiesPageManager();
+        propertiesPageManager.registerFactory(new GeneralLayerPropertiesPageFactory());
+
+        // Registry old style property page of layers
+        // These must be updated to use "PropertiesPage" instead of "ThemeManagerWindow"
+        // Do not use this procedure more!!!
+        ThemeManagerWindow.addPage(LegendManager.class);
+        ThemeManagerWindow.addPage(LabelingManager.class);
+
+        ThemeManagerWindow.setTabEnabledForLayer(LegendManager.class, FLyrVect.class, true);
+        ThemeManagerWindow.setTabEnabledForLayer(LabelingManager.class, FLyrVect.class, true);
+
+        symbologySwingManager.addOptionalActionToLegendsPanel(new LoadLegendAction());
+        symbologySwingManager.addOptionalActionToLegendsPanel(new SaveLegendAction());
+        
+        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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomToSelectExtension.java	(revision 46118)
@@ -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.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.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+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;
+
+/**
+ * Extensi�n de zoom a lo seleccionado teniendo como ventana activa una vista.
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ZoomToSelectExtension extends Extension {
+
+//    private static final Logger logger = LoggerFactory.getLogger(ZoomToSelectExtension.class);
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-navigation-zoom-to-selection", this);
+    }
+
+    @Override
+    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;
+        try {
+            selectedExtent = mapa.getSelectionBounds();
+            mapa.zoomToEnvelope(selectedExtent);
+        } catch (BaseException e) {
+            String msg = "Can't zoom to the seleccion.";
+            logger.warn(msg, e);
+            application.message(msg, JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if( document == null ) {
+            return false;
+        }
+        boolean hasActiveVectorLayers = false;
+        boolean hasSelection = false;
+        for (FLayer layer : document.getMapContext().getLayers()) {
+            if( layer.isActive() && layer.isAvailable() && layer instanceof FLyrVect ) {
+                try {
+                    hasActiveVectorLayers = true;
+                    FeatureStore store = ((FLyrVect)layer).getFeatureStore();
+                    FeatureSelection selection = store.getFeatureSelection();
+                    if( !selection.isAvailable() ) {
+                        return false;
+                    }
+                    if( !selection.isEmpty() ) {
+                        hasSelection = true;
+                    }
+                } catch (Exception ex) {
+                }
+            }
+        }
+        return hasActiveVectorLayers && hasSelection;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowLayerAsForm.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowLayerAsForm.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowLayerAsForm.java	(revision 46118)
@@ -0,0 +1,220 @@
+package org.gvsig.app.extension;
+
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import static javax.swing.Action.SHORT_DESCRIPTION;
+import static javax.swing.Action.SMALL_ICON;
+import javax.swing.JOptionPane;
+import org.cresques.cts.IProjection;
+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.app.project.documents.view.gui.IView;
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.JFeaturesForm;
+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.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Circle;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.SpatialEvaluatorsFactory;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+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.evaluator.Evaluator;
+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.gvsig.tools.swing.icontheme.IconTheme;
+
+@SuppressWarnings("UseSpecificCatch")
+public class ShowLayerAsForm extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-show-form", this);
+        IconThemeHelper.registerIcon("action", "layer-selectforediting", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        if ("layer-show-form".equalsIgnoreCase(actionCommand)) {
+            ViewDocument doc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+            if (doc == null) {
+                return;
+            }
+            FLayer[] layers = doc.getMapContext().getLayers().getActives();
+            for (int i = 0; i < layers.length; i++) {
+                FLayer layer = layers[i];
+                if (layer.isAvailable() && layer instanceof FLyrVect) {
+                    try {
+                        FLyrVect vectLayer = (FLyrVect) layer;
+                        FeatureStore featureStore = vectLayer.getFeatureStore();
+                        FeatureType type = featureStore.getDefaultFeatureType();
+                        if( type.supportReferences() ) {
+                            JFeaturesForm form = this.createform(featureStore);
+                            form.addAction(new SelectFeatureInTheViewAction(doc, form, layer));
+                            form.showForm(WindowManager.MODE.WINDOW);
+                        }
+                    } catch (Exception ex) {
+                        String msg = "Can't show form for layer '" + layer.getName() + "'.";
+                        logger.warn(msg, ex);
+                        application.messageDialog(msg + "\n\n(See the error log for more information)", "Warning", JOptionPane.WARNING_MESSAGE);
+                    }
+                }
+            }
+        }
+    }
+
+    private static class SelectFeatureInTheViewAction extends AbstractAction implements PointListener {
+
+        private final JFeaturesForm form;
+        private final ViewDocument doc;
+        private MapControl mapControl = null;
+        private String previousTool = null;
+        private final FLyrVect layer;
+
+        public SelectFeatureInTheViewAction(ViewDocument doc, JFeaturesForm form, FLayer layer) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+            this.doc = doc;
+            this.form = form;
+            this.putValue(NAME, null);
+            this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Select_feature_in_the_View"));
+            this.putValue(SMALL_ICON, iconTheme.get("layer-selectforediting"));
+            this.putValue(ACTION_COMMAND_KEY, "selectInTheView");
+            if( layer instanceof FLyrVect ) {
+                this.layer = (FLyrVect) layer;
+                this.setEnabled(true);
+            } else {
+                this.layer = null;
+                this.setEnabled(false);
+            }
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            if( this.layer == null ) {
+                return;
+            }
+            if (this.mapControl == null) {
+                IView view = (IView) application.getActiveComponent(ViewDocument.class);
+                if (view != null) {
+                    MapControl theMapControl = view.getMapControl();
+                    this.previousTool = theMapControl.getCurrentTool();
+                    theMapControl.addBehavior("layer-selectforediting", new PointBehavior(this));
+                    theMapControl.setTool("layer-selectforediting");
+                    this.mapControl = theMapControl;
+                    theMapControl.requestFocus();
+                }
+            } else {
+                this.mapControl.setTool(this.previousTool);
+                this.mapControl = null;
+                this.previousTool = null;
+            }
+        }
+
+        @Override
+        public void point(PointEvent event) throws BehaviorException {
+            ApplicationManager application = ApplicationLocator.getManager();
+            try {
+                Point point = event.getMapPoint();
+                double tolerance = mapControl.getViewPort().toMapDistance(7);
+                GeometryManager manager = GeometryLocator.getGeometryManager();
+                Circle circle = (Circle) manager.create(
+                        Geometry.TYPES.CIRCLE,
+                        Geometry.SUBTYPES.GEOM2D
+                );
+                circle.setPoints(point, tolerance);
+
+                FeatureStore featureStore = this.form.getFeatureStore();
+                FeatureType featureType = featureStore.getDefaultFeatureType();
+                FeatureQuery featureQuery = featureStore.createFeatureQuery();
+                featureQuery.setFeatureType(featureType);
+
+                Geometry query_geo = this.layer.transformToSourceCRS(circle, true);
+                IProjection query_proj = this.mapControl.getMapContext().getProjection();
+                if (this.layer.getCoordTrans() != null) {
+                    query_proj = this.layer.getCoordTrans().getPOrig();
+                }
+
+                Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
+                                query_geo,
+                                query_proj,
+                                featureStore
+                );
+                featureQuery.setFilter(iee);
+                featureQuery.setAttributeNames(null);
+
+                this.form.setQuery(featureQuery);
+
+                this.mapControl.setTool(this.previousTool);
+                this.mapControl = null;
+                this.previousTool = null;
+            } catch (Exception e) {
+                application.message("Can't filter form.", JOptionPane.WARNING_MESSAGE);
+                throw new RuntimeException("Can't create filter", e);
+            }
+        }
+
+        @Override
+        public void pointDoubleClick(PointEvent event) throws BehaviorException {
+            this.point(event);
+        }
+
+        @Override
+        public Image getImageCursor() {
+            return IconThemeHelper.getImage("cursor-info-by-point");
+        }
+
+        @Override
+        public boolean cancelDrawing() {
+            return false;
+        }
+
+    }
+
+    private JFeaturesForm createform(FeatureStore featureStore) throws CreateJFeatureFormException, ServiceException, DataException {
+        final DataSwingManager swingManager = DALSwingLocator.getSwingManager();
+        final JFeaturesForm form = swingManager.createJFeaturesForm(featureStore);
+//        form.setPreferredSize(new Dimension(400, 300));
+        return form;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument doc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (doc == null) {
+            return false;
+        }
+        return doc.getMapContext().hasActiveVectorLayers();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InfoToolExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/LayerPropertiesExtension.java	(revision 46118)
@@ -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.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.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.IView;
+import org.gvsig.app.project.documents.view.gui.LayerProperties;
+import org.gvsig.app.project.documents.view.toc.gui.FPopupMenu;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+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;
+
+public class LayerPropertiesExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void postInitialize() {
+        FPopupMenu.registerExtensionPoint();
+        IconThemeHelper.registerIcon("action", "layer-properties", this);
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addTOCContextAction("layer-properties","group-last",10000,900);    
+    }
+
+    @Override
+    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().hasActiveLayers()) {
+            return;
+        }
+
+        if (s.equalsIgnoreCase("layer-properties")) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            FLayer layer = document.getMapContext().getLayers().getActives()[0];
+            LayerProperties dlg = new LayerProperties(layer);
+            WindowManager wm = ToolsSwingLocator.getWindowManager();
+            wm.showWindow(
+                    dlg.asJComponent(),
+                    i18n.getTranslation("propiedades_de_la_capa") + " ("+layer.getName()+")",
+                    WindowManager.MODE.WINDOW
+            );
+        }
+    }
+
+    @Override
+    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().hasActiveLayers();
+    }
+
+    @Override
+    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().hasLayers();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.xml	(revision 46118)
@@ -0,0 +1,1168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">4</at>
+           <at name="row">2</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="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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                    <at name="title"></at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="actionCommand">...</at>
+            <at name="name">btnExpression</at>
+            <at name="width">13</at>
+            <at name="text">...</at>
+            <at name="height">660</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">4</at>
+           <at name="row">4</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="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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                    <at name="title"></at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="actionCommand">...</at>
+            <at name="name">btnExpressionHistory</at>
+            <at name="width">13</at>
+            <at name="text">...</at>
+            <at name="height">20</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">4</at>
+           <at name="row">6</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="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.EmptyBorderProperty">
+                   <super classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                    <at name="title"></at>
+                   </super>
+                   <at name="top">2</at>
+                   <at name="left">2</at>
+                   <at name="bottom">2</at>
+                   <at name="right">2</at>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="actionCommand">...</at>
+            <at name="name">btnExpressionBookmarks</at>
+            <at name="width">13</at>
+            <at name="text">...</at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</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">embedded.1341909161</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="name">lblLaunchOnChangeBBox</at>
+                 <at name="width">276</at>
+                 <at name="text">Ejecutar cuando cambie el encuadre de la vista activa</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">chkLaunchOnChangeBBox</at>
+                 <at name="width">1277</at>
+                 <at name="height">15</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">1</at>
+                <at name="row">3</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">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="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="name">lblTitle</at>
+                 <at name="width">276</at>
+                 <at name="text">Titulo de la ventana</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">1</at>
+                <at name="row">5</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">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="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="name">lblWindowType</at>
+                 <at name="width">276</at>
+                 <at name="text">Tipo de ventana</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">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.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="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="selectedItem">
+                  <object classname="com.jeta.forms.store.properties.ListItemProperty">
+                   <at name="name">listitem</at>
+                   <at name="label">Ventana</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="name">cboWindowType</at>
+                 <at name="width">1277</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">Ventana</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">Modal</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">Semimodal</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="height">20</at>
+                 <at name="itemCount">3</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">3</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.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="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="name">txtTitle</at>
+                 <at name="width">1277</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">7</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">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="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="name">lblContentType</at>
+                 <at name="width">276</at>
+                 <at name="text">Tipo de contenido</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">7</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.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="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="selectedItem">
+                  <object classname="com.jeta.forms.store.properties.ListItemProperty">
+                   <at name="name">listitem</at>
+                   <at name="label">text/plain</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="name">cboContentType</at>
+                 <at name="width">1277</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">text/plain</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">text/html</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">image/png</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="height">20</at>
+                 <at name="itemCount">3</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="7">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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">10</at>
+           <at name="colspan">1</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="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="actionCommand">Ejecutar</at>
+            <at name="name">btnExecute</at>
+            <at name="width">74</at>
+            <at name="text">Ejecutar</at>
+            <at name="height">24</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">2</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">5</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.JTextArea</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextArea</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">txtExpression</at>
+            <at name="width">1566</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="height">712</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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="11">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanelView.java	(revision 46118)
@@ -0,0 +1,227 @@
+package org.gvsig.app.extension.evalexpression;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class EvaluateExpressionPanelView extends JPanel
+{
+   JButton btnExpression = new JButton();
+   JButton btnExpressionHistory = new JButton();
+   JButton btnExpressionBookmarks = new JButton();
+   JLabel lblLaunchOnChangeBBox = new JLabel();
+   JCheckBox chkLaunchOnChangeBBox = new JCheckBox();
+   JLabel lblTitle = new JLabel();
+   JLabel lblWindowType = new JLabel();
+   JComboBox cboWindowType = new JComboBox();
+   JTextField txtTitle = new JTextField();
+   JLabel lblContentType = new JLabel();
+   JComboBox cboContentType = new JComboBox();
+   JButton btnExecute = new JButton();
+   JTextArea txtExpression = new JTextArea();
+
+   /**
+    * Default constructor
+    */
+   public EvaluateExpressionPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnExpression.setActionCommand("...");
+      btnExpression.setName("btnExpression");
+      btnExpression.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnExpression.setBorder(emptyborder1);
+      jpanel1.add(btnExpression,cc.xy(4,2));
+
+      btnExpressionHistory.setActionCommand("...");
+      btnExpressionHistory.setName("btnExpressionHistory");
+      btnExpressionHistory.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnExpressionHistory.setBorder(emptyborder2);
+      jpanel1.add(btnExpressionHistory,cc.xy(4,4));
+
+      btnExpressionBookmarks.setActionCommand("...");
+      btnExpressionBookmarks.setName("btnExpressionBookmarks");
+      btnExpressionBookmarks.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnExpressionBookmarks.setBorder(emptyborder3);
+      jpanel1.add(btnExpressionBookmarks,cc.xy(4,6));
+
+      jpanel1.add(createPanel1(),cc.xy(2,8));
+      btnExecute.setActionCommand("Ejecutar");
+      btnExecute.setName("btnExecute");
+      btnExecute.setText("Ejecutar");
+      jpanel1.add(btnExecute,new CellConstraints(2,10,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      txtExpression.setName("txtExpression");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtExpression);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,2,1,5));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblLaunchOnChangeBBox.setName("lblLaunchOnChangeBBox");
+      lblLaunchOnChangeBBox.setText("Ejecutar cuando cambie el encuadre de la vista activa");
+      jpanel1.add(lblLaunchOnChangeBBox,cc.xy(1,1));
+
+      chkLaunchOnChangeBBox.setName("chkLaunchOnChangeBBox");
+      jpanel1.add(chkLaunchOnChangeBBox,cc.xy(3,1));
+
+      lblTitle.setName("lblTitle");
+      lblTitle.setText("Titulo de la ventana");
+      jpanel1.add(lblTitle,cc.xy(1,3));
+
+      lblWindowType.setName("lblWindowType");
+      lblWindowType.setText("Tipo de ventana");
+      jpanel1.add(lblWindowType,cc.xy(1,5));
+
+      cboWindowType.setName("cboWindowType");
+      cboWindowType.addItem("Ventana");
+      cboWindowType.addItem("Modal");
+      cboWindowType.addItem("Semimodal");
+      jpanel1.add(cboWindowType,cc.xy(3,5));
+
+      txtTitle.setName("txtTitle");
+      jpanel1.add(txtTitle,cc.xy(3,3));
+
+      lblContentType.setName("lblContentType");
+      lblContentType.setText("Tipo de contenido");
+      jpanel1.add(lblContentType,cc.xy(1,7));
+
+      cboContentType.setName("cboContentType");
+      cboContentType.addItem("text/plain");
+      cboContentType.addItem("text/html");
+      cboContentType.addItem("image/png");
+      jpanel1.add(cboContentType,cc.xy(3,7));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[]{ 2,4,6 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionExtension.java	(revision 46118)
@@ -0,0 +1,82 @@
+package org.gvsig.app.extension.evalexpression;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class EvaluateExpressionExtension extends Extension implements ActionListenerSupport {
+
+    private ActionListenerSupport listenerHelper;
+
+    @Override
+    public void initialize() {
+        this.listenerHelper = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        switch(actionCommand) {
+            case "tools-scripting-evaluateexpression":
+                doEvaluateExpression();
+                break;
+        }
+    }
+
+    private void doEvaluateExpression() {
+        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
+        windowManager.showWindow(new EvaluateExpressionPanel(this), "Expression", WindowManager.MODE.WINDOW);
+    }
+    
+    @Override
+    public boolean isEnabled() {
+        try {
+            this.listenerHelper.fireActionEvent(null);
+        } catch(Throwable th) {
+            
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    @Override
+    public void addActionListener(ActionListener listener) {
+        this.listenerHelper.addActionListener(listener);
+    }
+
+    @Override
+    public ActionListener[] getActionListeners() {
+        return this.listenerHelper.getActionListeners();
+    }
+
+    @Override
+    public void removeActionListener(ActionListener listener) {
+        this.listenerHelper.removeActionListener(listener);
+    }
+
+    @Override
+    public void removeAllActionListener() {
+        this.listenerHelper.removeAllActionListener();
+    }
+
+    @Override
+    public void fireActionEvent(ActionEvent event) {
+        this.listenerHelper.fireActionEvent(event);
+    }
+
+    @Override
+    public boolean hasActionListeners() {
+        return this.listenerHelper.hasActionListeners();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/evalexpression/EvaluateExpressionPanel.java	(revision 46118)
@@ -0,0 +1,257 @@
+package org.gvsig.app.extension.evalexpression;
+
+import java.awt.BorderLayout;
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+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.tools.swing.api.ActionListenerSupport;
+import org.gvsig.tools.swing.api.SimpleImage;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class EvaluateExpressionPanel extends EvaluateExpressionPanelView {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EvaluateExpressionPanel.class);
+    
+    private ExpressionPickerController pickerExpression;
+    private final ActionListenerSupport actionListener;
+    
+    public EvaluateExpressionPanel(ActionListenerSupport  actionListener) {
+        this.actionListener = actionListener;
+        initComponents();
+    }
+    
+    private void initComponents() {
+        ApplicationManager application = ApplicationLocator.getApplicationManager();
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+        
+        this.pickerExpression = expressionSwingManager.createExpressionPickerController(
+                this.txtExpression, 
+                this.btnExpression, 
+                this.btnExpressionHistory, 
+                this.btnExpressionBookmarks
+        );
+        MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
+        IWindow window = application.getActiveWindow();
+        symbolTable.setVar("window", window);
+        this.pickerExpression.setPreviewSymbolTable(symbolTable);
+        
+        this.btnExecute.addActionListener((ActionEvent e) -> {
+            doExecuteExpression();
+        });
+        this.txtTitle.setText("Expresion");
+    }
+    
+    private void doExecuteExpression() {
+        ApplicationManager application = ApplicationLocator.getApplicationManager();
+        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
+
+        Expression exp = this.pickerExpression.get();
+        if( exp == null ) {
+            return ; //???
+        }
+        MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
+        IWindow window = application.getActiveWindow();
+        symbolTable.setVar("window", window);
+        this.pickerExpression.setPreviewSymbolTable(symbolTable);
+        Object value;
+        try {
+            value = exp.execute(symbolTable);
+        } catch(Throwable th) {
+            LOGGER.warn("",th);
+            return; //???
+        }
+        if( value == null ) {
+            return;
+        }
+        MyPanel panel = new MyPanel(this.actionListener, symbolTable, exp, (String) this.cboContentType.getSelectedItem());
+        if( this.chkLaunchOnChangeBBox.isSelected() ) {
+            Document doc = application.getActiveDocument();            
+            panel.setWindow(doc.getMainWindow());
+        }
+        panel.setValue(value);
+        windowManager.showWindow(panel, this.txtTitle.getText(), this.getWindowMode());
+    }
+    
+    private WindowManager.MODE getWindowMode() {
+        String s = (String) this.cboWindowType.getSelectedItem();
+        switch(s.toLowerCase()) {
+            case "modal":
+            case "dialog":
+                return WindowManager.MODE.DIALOG;
+            case "tool":
+            case "palette":
+            case "semimodal":
+                return WindowManager.MODE.TOOL;
+            case "window":
+            default:
+                return WindowManager.MODE.WINDOW;
+        }
+    }
+    
+    private static class MyPanel extends JPanel {
+
+        private final Expression expression;
+        private final String contentType;
+        private IWindow window;
+        private final ViewPortListener viewPortListener;
+        private final MutableSymbolTable symbolTable;
+        private final ActionListenerSupport actionListener;
+		private boolean isProcessing;
+		private Thread lastUpdate = null;
+        
+        public MyPanel(ActionListenerSupport actionListener, MutableSymbolTable symbolTable, Expression expression, String contentType) {
+            this.actionListener = actionListener;
+            this.setOpaque(false);
+            this.symbolTable = symbolTable;
+            this.expression = expression;
+            this.contentType = contentType;
+			this.isProcessing = false;
+            this.actionListener.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    doUpdate();
+                }
+            });
+            this.viewPortListener = new ViewPortListener() {
+                @Override
+                public void extentChanged(ExtentEvent e) {
+                    doUpdate();
+                }
+
+                @Override
+                public void backColorChanged(ColorEvent e) {
+                }
+
+                @Override
+                public void projectionChanged(ProjectionEvent e) {
+                }
+            };
+            this.addComponentListener(new ComponentListener() {
+                @Override
+                public void componentResized(ComponentEvent e) {
+                }
+
+                @Override
+                public void componentMoved(ComponentEvent e) {
+                }
+
+                @Override
+                public void componentShown(ComponentEvent e) {
+                }
+
+                @Override
+                public void componentHidden(ComponentEvent e) {
+                    if( window instanceof IView) {
+                        ViewPort viewPort = ((IView)window).getMapControl().getMapContext().getViewPort();
+                        viewPort.removeViewPortListener(viewPortListener);
+                    }
+                }
+            });
+        }
+        
+        private synchronized void doUpdate() {
+			Thread th = new Thread(() -> {
+				isProcessing = true;
+				Object value = null;
+				
+				try {
+					value = this.expression.execute(this.symbolTable);
+					this.setValue(value);
+				} catch (Throwable tt) {
+					LOGGER.warn("", tt);
+				}
+				if(lastUpdate!=null) {
+					lastUpdate.start();
+					lastUpdate = null;
+				} else {
+					isProcessing = false;
+				}
+			});
+			if (isProcessing==true) {
+				lastUpdate = th;
+				return;
+			}
+			th.start();
+
+        }
+        
+        public void setValue(Object value) {
+			if (!SwingUtilities.isEventDispatchThread()) {
+				Object v = value;
+				SwingUtilities.invokeLater(() -> {
+					setValue(v);
+				});
+				return;
+			}
+            if( value == null ) {
+                this.removeAll();
+                this.revalidate();
+                return;
+            }
+            if( value instanceof SimpleImage ) {
+                value = ((SimpleImage)value).getBufferedImage();
+            }
+            if( value instanceof Image ) {
+                JLabel label = new JLabel();
+                label.setIcon(new ImageIcon((Image)value));
+                value = label;
+            }
+            
+            JComponent component;
+            if( value instanceof JComponent ) {
+                component = (JComponent) value;
+            } else {
+                JEditorPane browser = new JEditorPane();
+                browser.setEditable(false);
+                browser.setOpaque(false);
+                browser.setContentType(contentType);
+                browser.setText(value.toString());
+                component = browser;
+            }
+            this.removeAll();
+            this.setLayout(new BorderLayout());
+            this.add(component);
+            this.revalidate();
+			
+        }
+        
+        public void setWindow(IWindow window) {
+            this.window = window;
+            if( window instanceof IView) {
+                ViewPort viewPort = ((IView)this.window).getMapControl().getMapContext().getViewPort();
+                viewPort.addViewPortListener(this.viewPortListener);
+            }
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ClearSelectionExtension.java	(revision 46118)
@@ -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.app.extension;
+
+import java.util.List;
+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.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.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 {
+
+
+    @Override
+    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")) {
+            MapControl mapCtrl = view.getMapControl();
+            FLayers layers = document.getMapContext().getLayers();
+            List<FLayer> activeLayers = layers.getLayers(
+                    FLayers.LAYER_ACTIVE
+                            .and(FLayers.LAYER_AVALAIBLE)
+                            .and(FLayers.LAYER_FLYRVECT)
+            );
+            List<FLayer> layersToDeselect;
+            if (activeLayers.size() >= 1) {
+                layersToDeselect = layers.getLayers(
+                        FLayers.LAYER_ACTIVE
+                                .and(FLayers.LAYER_AVALAIBLE)
+                                .and(FLayers.LAYER_FLYRVECT)
+                                .and(FLayers.LAYER_SELECTION_EMPTY.negate())
+                );
+            } else {
+                layersToDeselect = layers.getLayers(
+                        FLayers.LAYER_AVALAIBLE
+                                .and(FLayers.LAYER_FLYRVECT)
+                                .and(FLayers.LAYER_SELECTION_EMPTY.negate())
+                );
+            }
+            clearSelectionOfView(layersToDeselect);
+            mapCtrl.drawMap(false);
+            document.setModified(true);
+        }
+    }
+
+    private void clearSelectionOfView(List<FLayer> layers) {
+        for (FLayer layer : layers) {
+            FeatureStore featureStore;
+            featureStore = ((FLyrVect) layer).getFeatureStore();
+            try {
+                featureStore.getFeatureSelection().deselectAll();
+            } catch (DataException ex) {
+                ex.printStackTrace();
+            }
+        }
+    };
+
+    @Override
+    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;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if( document == null ) {
+            return false;
+        }
+        
+        FLayers layers = document.getMapContext().getLayers();
+        List<FLayer> activeLayers = layers.getLayers(
+                FLayers.LAYER_ACTIVE
+        );
+        // if has active layers, at least one of them has to have selection
+        if (activeLayers.size()>=1) {
+            List<FLayer> activeLayersWithSelection = layers.getLayers(
+                    FLayers.LAYER_ACTIVE
+                            .and(FLayers.LAYER_AVALAIBLE)
+                            .and(FLayers.LAYER_FLYRVECT)
+                            .and(FLayers.LAYER_SELECTION_EMPTY.negate())
+            );
+            if (activeLayersWithSelection.size()>=1) {
+                return true;
+            } else{
+                return false;
+            }
+        }
+
+        List<FLayer> selectionLayers = layers.getLayers(
+                        FLayers.LAYER_AVALAIBLE
+                        .and(FLayers.LAYER_FLYRVECT)
+                        .and(FLayers.LAYER_SELECTION_EMPTY.negate())
+        );
+        // if there are not active layers, at least one of all has to have selection
+        if (selectionLayers.size() >= 1) {
+            return true;
+        }
+        
+        return false;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#initialize()
+     */
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-clear", this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/DefaultFeatureTypeDefinitionsManager.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/DefaultFeatureTypeDefinitionsManager.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/DefaultFeatureTypeDefinitionsManager.java	(revision 46118)
@@ -0,0 +1,309 @@
+package org.gvsig.app.extension;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.zip.CRC32;
+
+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.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.complements.RelatedFeatures;
+import org.gvsig.fmap.dal.feature.AbstractFeatureTypeDefinitionsManager;
+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.FeatureTypeDefinitionsManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.JDynForm;
+import static org.gvsig.tools.dynform.spi.DynFormSPIManager.TAG_DYNFORM_LAYOUTMODE;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynClass_v2;
+import org.gvsig.tools.dynobject.DynField_v2;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.HasAFile;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class DefaultFeatureTypeDefinitionsManager extends AbstractFeatureTypeDefinitionsManager implements FeatureTypeDefinitionsManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypeDefinitionsManager.class);
+
+    private static final String FILE_EXTENSION = "form";
+    
+    private File definitionsFolder = null;
+    private final Map<String, DynClass> dynClasses;
+
+    public DefaultFeatureTypeDefinitionsManager() {
+        this.dynClasses = new HashMap<>();
+    }
+
+    protected Map<String, DynClass> getDynClasses() {
+        return this.dynClasses;
+    }
+    
+    protected File getDefinitionsFolder() throws IOException {
+        if (this.definitionsFolder == null) {
+            PluginsManager pluginManager = PluginsLocator.getManager();
+            PluginServices plugin = pluginManager.getPlugin(InitializeApplicationExtension.class);
+            File homeFolder = plugin.getPluginHomeFolder();
+            File definitionsFolder = new File(homeFolder, "schemas");
+            if (!definitionsFolder.exists()) {
+                FileUtils.forceMkdir(definitionsFolder);
+            }
+            this.definitionsFolder = definitionsFolder;
+        }
+        return this.definitionsFolder;
+    }
+
+    protected long getCRC(FeatureType type) {
+        StringBuilder buffer = new StringBuilder();
+        for (int i = 0; i < type.size(); i++) {
+            FeatureAttributeDescriptor x = type.getAttributeDescriptor(i);
+            if( !x.isComputed() ) {
+                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();
+    }
+
+    protected String getKey(FeatureStore store, FeatureType featureType) {
+        return store.getName() + "_" + Long.toHexString(getCRC(featureType));
+    }
+
+    protected String getKey(FeatureStore store, FeatureType featureType, String name) {
+        CRC32 crc = new CRC32();
+        crc.update(name.getBytes());
+        crc.getValue();
+        if( !StringUtils.isAlphanumeric(name) ) {
+            name = StringUtils.removeAll(name, "[^a-zA-Z0-9_]");
+        }
+        return store.getName() + name + "_" + Long.toHexString(getCRC(featureType))+Long.toHexString(crc.getValue()) ;
+    }
+
+    protected File getDefinitionFile(String key) {
+        File folder;
+        try {
+            folder = getDefinitionsFolder();
+        } catch (IOException ex) {
+            return null;
+        }
+        File f = new File(folder, key + "."+FILE_EXTENSION);
+        if (f.exists()) {
+            return f;
+        }
+        Properties prop = new Properties();
+        FileInputStream fin = null;
+        try {
+            fin = new FileInputStream(new File(folder, "index.properties"));
+            prop.load(fin);
+        } catch (IOException ex) {
+            return null;
+        } finally {
+            IOUtils.closeQuietly(fin);
+        }
+        String s = prop.getProperty(key, null);
+        if (s == null) {
+            return null;
+        }
+        f = new File(folder, s);
+        if (f.exists()) {
+            return f;
+        }
+        f = new File(s);
+        if (f.exists()) {
+            return f;
+        }
+        return null;
+    }
+
+    @Override
+    public DynClass get(FeatureStore store, FeatureType featureType) {
+        String key = this.getKey(store, featureType);
+        DynClass dynClass = this.getDynClasses().get(key);
+        if (dynClass != null) {
+            return dynClass;
+        }
+        String xml = null;
+        Resource resource = null;
+        DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+        File definitionFile = getDefinitionFile(key);
+        try {
+            if (definitionFile == null) {
+                ResourcesStorage resourcesStorage = store.getResourcesStorage();
+                if( resourcesStorage!=null ) {
+                    resource = resourcesStorage.getResource(FILE_EXTENSION);
+                    if( resource !=null && resource.exists() ) {
+                        xml = IOUtils.toString(resource.asInputStream());
+                    }
+                }
+            } else {
+                xml = FileUtils.readFileToString(definitionFile);
+                xml = xml.replaceAll("[$][{]CWD[}]",definitionFile.getParentFile().getAbsolutePath());
+            }
+            if( !StringUtils.isEmpty(xml) ) {
+                InputStream is = IOUtils.toInputStream(xml, Charset.forName("UTF-8"));
+                Map<String, DynClass> theDynClasses = dynObjectManager.importDynClassDefinitions(is, this.getClass().getClassLoader());
+                for (DynClass aDynClass : theDynClasses.values()) {
+                    this.getDynClasses().put(aDynClass.getName(), aDynClass);
+                }
+            }
+            dynClass = this.getDynClasses().get(key);
+            if (dynClass != null) {
+                return dynClass;
+            }
+            return this.getDynClass(store, featureType);
+
+        } catch(Exception ex) {
+            LOGGER.warn("Can't retrieve definition of '"+key+"'.", ex);
+            return null;
+        } finally {
+            IOUtils.closeQuietly(resource);
+        }
+    }
+
+    @Override
+    public boolean contains(FeatureStore store, FeatureType featureType) {
+        String key = this.getKey(store, featureType);
+        return this.getDynClasses().containsKey(key);
+    }
+
+    @Override
+    public void add(FeatureStore store, FeatureType featureType, DynClass dynClass) {
+        try {
+            if( dynClass instanceof FeatureType ) {
+                dynClass = this.getDynClass(store, (FeatureType) dynClass);
+            }
+            String key = this.getKey(store, featureType);
+            File f = new File(getDefinitionsFolder(), key + "."+FILE_EXTENSION);
+            DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+            String xml = dynObjectManager.exportSimpleDynClassDefinitions(dynClass);
+            FileUtils.write(f, xml);
+            this.getDynClasses().put(key, dynClass);
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public void remove(FeatureStore store, FeatureType featureType) {
+        String key = this.getKey(store, featureType);
+        this.getDynClasses().remove(key);
+    }
+
+    @Override
+    public void addModel(File model) {
+    	  DynObjectManager dynObjectManager = ToolsLocator.getDynObjectManager();
+          try {
+              String xml = FileUtils.readFileToString(model);
+              InputStream is = IOUtils.toInputStream(xml, Charset.forName("UTF-8"));
+              Map<String, DynClass> dynClasses = dynObjectManager.importDynClassDefinitions(is, this.getClass().getClassLoader());
+
+              File folder;
+              try {
+                  folder = getDefinitionsFolder();
+              } catch (IOException ex) {
+                  return ;
+              }
+              Properties prop = new Properties();
+              FileInputStream fin = null;
+              try {
+                  fin = new FileInputStream(new File(folder, "index.properties"));
+                  prop.load(fin);
+              } catch (IOException ex) {
+              } finally {
+                  IOUtils.closeQuietly(fin);
+              }
+              for (DynClass aDynClass : dynClasses.values()) {
+            	  String className = aDynClass.getName();
+            	  prop.setProperty(className, model.getAbsolutePath());
+              }
+              FileOutputStream fout = null;
+              try {
+            	  fout = new FileOutputStream(new File(folder, "index.properties"));
+                  prop.store(fout, "");
+              } catch (IOException ex) {
+              } finally {
+                  IOUtils.closeQuietly(fout);
+              }
+
+          } catch (Exception ex) {
+              LOGGER.warn("Can't parse xml definition.", ex);
+          }
+    }
+
+    private DynClass getDynClass(FeatureStore store, FeatureType featureType) {
+        DynObjectManager manager = ToolsLocator.getDynObjectManager();
+        DynClass_v2 definition = (DynClass_v2) manager.createCopy(featureType);
+
+        File path = null;
+        if( store!=null ) {
+            try {
+                String label = featureType.getLabel();
+                if( StringUtils.isEmpty(label) ) {
+                    definition.setLabel(store.getName());
+                } else {
+                    definition.setLabel(label);
+                }
+                DataStoreParameters params = store.getParameters();
+                if( params instanceof HasAFile ) {
+                    File f = ((HasAFile)params).getFile();
+                    if( f!=null ) {
+                        path = f.getParentFile();
+                    }
+                }
+            } catch (Exception ex) {
+            }
+        }
+        boolean calculateLayout = true;
+        if( featureType.getTags().has(TAG_DYNFORM_LAYOUTMODE) ) {
+            calculateLayout = false;
+        }
+        for (FeatureAttributeDescriptor descriptor : featureType) {
+            DynField_v2 definitionField = (DynField_v2) definition.getDynField(descriptor.getName());
+            if( descriptor.isComputed() ) {
+                definitionField.setReadOnly(true);
+            }
+            String profileName = descriptor.getDataProfileName();
+            if( !StringUtils.isBlank(profileName) ) {
+                definitionField.setSubtype(profileName);
+            }
+            if( path!=null && definitionField.getType()==DataTypes.FILE ) {
+                Tags tags = definitionField.getTags();
+                if (!tags.has("path")) {    
+                    tags.set("path", path);
+                }
+            }
+            if( calculateLayout ) {
+                RelatedFeatures complement = (RelatedFeatures) ToolsLocator.getComplementsManager().get(
+                        RelatedFeatures.COMPLEMENT_MANE, descriptor
+                );
+                if( complement.isRelatedFeatures() ) {
+                    definition.getTags().set(TAG_DYNFORM_LAYOUTMODE, JDynForm.USE_TABS);
+                    definitionField.setGroup(descriptor.getLabel());
+                }
+            }
+        }
+        return definition;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/TranslationsPackageExtension.java	(revision 46118)
@@ -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.extension;
+
+import javax.swing.JPanel;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+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.installer.lib.api.InstallerManager;
+import org.gvsig.installer.swing.api.SwingInstallerLocator;
+import org.gvsig.installer.swing.api.SwingInstallerManager;
+import org.gvsig.tools.swing.api.Component;
+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();
+            PluginsManager pluginsManager = PluginsLocator.getManager();
+            SwingInstallerManager installerManager = SwingInstallerLocator.getSwingInstallerManager();
+            Component packager = installerManager.createPackagerPanel(
+                    TranslationsInstallerFactory.PROVIDER_NAME,
+                    pluginsManager.getApplicationI18nFolder(),
+                    pluginsManager.getInstallFolder()
+            );
+            application.getUIManager().showWindow(
+                    (JPanel)packager.asJComponent(),
+                    application.translate("_Translations_package"),
+                    WindowManager.MODE.WINDOW
+            );
+        }
+    }
+
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public boolean isVisible() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSimpleSelectionControl.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewControls.java	(revision 46118)
@@ -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.app.extension;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Predicate;
+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.gui.preferencespage.dal.DALPage;
+import org.gvsig.app.gui.preferencespage.databaseworkspace.DatabaseWorkspacePage;
+import org.gvsig.app.gui.preferencespage.dialogreminder.DialogReminderPage;
+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.TocItemBranch;
+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("active-layer-set-hide")) {
+            setActivesVisibles(false, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("active-layer-set-visible")) {
+            setActivesVisibles(true, mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("active-layer-bring-front")) {
+            FLayers layers = mapa.getLayers();
+            List<FLayer> orderedLayers = bringToFront(layers);
+            if(orderedLayers != null){
+                layers.clearLayers();
+                layers.addAll(orderedLayers);
+            }
+            
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("active-layer-send-back")) {
+            FLayers layers = mapa.getLayers();
+            List<FLayer> orderedLayers = sendToBack(layers);
+            if(orderedLayers != null){
+                layers.clearLayers();
+                layers.addAll(orderedLayers);
+            }
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("active-layer-move-ahead")) {
+            moveAhead(mapa.getLayers());
+            document.setModified(true);
+            application.refreshMenusAndToolBars();
+
+        } else if (command.equalsIgnoreCase("active-layer-move-behind")) {
+            moveBehind(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 newscale = (Long) ToolsLocator.getDataTypesManager().coerce(DataTypes.LONG, args[0]);
+                long prevscale = mapa.getScaleView();
+                mapa.setScaleView(newscale);
+                if(prevscale != newscale) {
+                    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);
+            }
+        }
+    }
+
+    public static void setActivesVisibles(boolean visible, FLayers layers) {
+        int layerCount = layers.getLayersCount();
+        for (int i = 0; i < layerCount; i++) {
+            FLayer layer = layers.getLayer(i);
+            if (layer.isActive()) {
+                layer.setVisible(visible);
+            }
+            if (layer instanceof FLayers) {
+                setActivesVisibles(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");
+    }
+
+    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);
+
+        IconThemeHelper.registerIcon("preferences", "dialog-remember-preferences", this);
+        IconThemeHelper.registerIcon("preferences", "dal-preferences", this);
+        IconThemeHelper.registerIcon("preferences", "databaseworkspace-preferences", 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;
+    }
+
+    @Override
+    public IPreference[] getPreferencesPages() {
+        List<IPreference> prefs = new ArrayList<>();
+        prefs.add(getViewPropertiesPage());
+        prefs.add(new DialogReminderPage());
+        prefs.add(new DALPage());
+        prefs.add(new DatabaseWorkspacePage());
+
+        return prefs.toArray(new IPreference[prefs.size()]);
+    }
+
+    private List<FLayer> bringToFront(FLayers groupLayers) {
+        List<FLayer> res = new ArrayList<>();
+        List<FLayer> activeLayers = new ArrayList<>();
+        List<FLayer> nonActiveLayers = new ArrayList<>();
+        
+        for (FLayer layer : groupLayers) {
+            if(layer.isActive()){
+                activeLayers.add(layer);
+            } else {
+                nonActiveLayers.add(layer);
+            }
+            if(layer instanceof FLayers){
+                FLayers group = (FLayers)layer;
+                List<FLayer> layers = bringToFront(group);
+                if(layers != null){
+                    group.clearLayers(); //NOTE: Don't use clear method because also remove metadata 
+                    group.addAll(layers);
+                }
+            }
+        }
+        if(activeLayers.isEmpty() || nonActiveLayers.isEmpty()){
+            return null;
+        }
+        res.addAll(nonActiveLayers);
+        res.addAll(activeLayers);
+        return res;
+    }
+
+    private List<FLayer> sendToBack(FLayers groupLayers) {
+        List<FLayer> res = new ArrayList<>();
+        List<FLayer> activeLayers = new ArrayList<>();
+        List<FLayer> nonActiveLayers = new ArrayList<>();
+        
+        for (FLayer layer : groupLayers) {
+            if(layer.isActive()){
+                activeLayers.add(layer);
+            } else {
+                nonActiveLayers.add(layer);
+            }
+            if(layer instanceof FLayers){
+                FLayers group = (FLayers)layer;
+                List<FLayer> layers = sendToBack(group);
+                if(layers != null){
+                    group.clearLayers(); //NOTE: Don't use clear method because also remove metadata 
+                    group.addAll(layers);
+                }
+            }
+        }
+        if(activeLayers.isEmpty() || nonActiveLayers.isEmpty()){
+            return null;
+        }
+        res.addAll(activeLayers);
+        res.addAll(nonActiveLayers);
+        return res;
+    }
+
+    private int getPositionInFlayersGroup(FLayers groupLayers, FLayer layer) {
+        for (int i = 0; i < groupLayers.getLayersCount(); i++) {
+            FLayer actualLayer = groupLayers.getLayer(i);
+            if (actualLayer.equals(layer)) {
+                int correction = groupLayers.getLayersCount() - 1 - i;
+                return correction;
+            }
+        }
+        return -1;
+    }
+
+    private int getValidTocPosition(int position, FLayers groupLayers, int move) {
+        int totalSize = groupLayers.getLayersCount();
+        int newPosition = position + move;
+        if (newPosition <= 0) {
+            return 0;
+        }
+        if (newPosition >= totalSize) {
+            return totalSize - 1;
+        }
+        return newPosition;
+    }
+    
+    private List<FLayer> getFirstLevelActivesFromLayers(FLayers groupLayers, boolean reverse) {
+        ArrayList<FLayer> actives = new ArrayList<>();
+        for (FLayer layer : groupLayers) {
+            if (layer.isActive()) {
+                actives.add(layer);
+            }
+        }
+        if (reverse) {
+            Collections.reverse(actives);
+        }
+        return actives;
+    }
+    
+    private List<FLayers> getFirstLevelGroupsFromLayers(FLayers groupLayers) {
+        ArrayList<FLayers> flayers = new ArrayList<>();
+        for (FLayer layer : groupLayers) {
+            if (layer instanceof FLayers) {
+                flayers.add((FLayers) layer);
+            }
+        }
+        Collections.reverse(flayers);
+        return flayers;
+    }
+
+    private void moveAhead(FLayers groupLayers) {
+        List<FLayer> actives = getFirstLevelActivesFromLayers(groupLayers, true);
+        for (FLayer layer : actives) {
+            FLayers layers = layer.getParentLayer();
+            int position = this.getPositionInFlayersGroup(layers, layer);
+            int newPosition =  getValidTocPosition(position, layers, -1);
+            layers.moveTo(position,newPosition);
+        }
+        List<FLayers> flayersGroup = getFirstLevelGroupsFromLayers(groupLayers);
+        for (FLayers fLayer : flayersGroup) {
+            this.moveAhead(fLayer);
+        }
+    }
+
+    private void moveBehind(FLayers groupLayers) {
+        List<FLayer> actives = getFirstLevelActivesFromLayers(groupLayers, false);
+        for (FLayer layer : actives) {
+            FLayers layers = layer.getParentLayer();
+            int position = this.getPositionInFlayersGroup(layers, layer);
+            int newPosition =  getValidTocPosition(position, layers, +1);
+            layers.moveTo(position, newPosition);
+        }
+        List<FLayers> flayersGroup = getFirstLevelGroupsFromLayers(groupLayers);
+        for (FLayers fLayer : flayersGroup) {
+            this.moveBehind(fLayer);
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowEditedFeatures.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowEditedFeatures.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowEditedFeatures.java	(revision 46118)
@@ -0,0 +1,74 @@
+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.extension.editedfeatures.EditedFeaturesPanel;
+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.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+@SuppressWarnings("UseSpecificCatch")
+public class ShowEditedFeatures extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        if ("layer-show-editedfeatures".equalsIgnoreCase(actionCommand)) {
+            FLayer layer = application.getCurrentLayer();
+            if (layer == null || !(layer instanceof FLyrVect)) {
+                return;
+            }
+            FLyrVect vectLayer = (FLyrVect)layer;
+            FeatureStore featureStore = vectLayer.getFeatureStore();
+            if( !featureStore.isEditing() ) {
+                return;
+            }            
+            try {
+                FeatureType type = featureStore.getDefaultFeatureType();
+                if( !type.supportReferences() ) {
+                    return;
+                }
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                EditedFeaturesPanel panel = new EditedFeaturesPanel(featureStore);
+                WindowManager  windowManager = ToolsSwingLocator.getWindowManager();
+                String title = String.format("%s (%s)",
+                    featureStore.getName(),
+                    i18n.getTranslation("_Edited_features")
+                );                
+                windowManager.showWindow(
+                        panel.asJComponent(), 
+                        title, 
+                        WindowManager.MODE.WINDOW
+                );
+            } catch (Exception ex) {
+                logger.warn("Can't show form of edited features",ex);
+            }
+        }            
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        FLayer layer = application.getCurrentLayer();
+        if (layer == null || !(layer instanceof FLyrVect)) {
+            return false;
+        }
+        return ((FLyrVect)layer).getFeatureStore().isEditing();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MeasureExtension.java	(revision 46118)
@@ -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.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);
+        IconThemeHelper.registerIcon("action", "view-query-feature-angle", 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");
+        } else if (s.equals("view-query-feature-angle")) {
+            mapCtrl.setTool("feature-angle");
+        }
+    }
+
+    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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionByTheme.java	(revision 46118)
@@ -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.app.extension;
+
+import java.util.List;
+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.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.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.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;
+
+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() {
+        registerIcons();
+    }
+
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "selection-select-by-layer", 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();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        if (actionCommand.equalsIgnoreCase("selection-select-by-layer")) {
+
+            SelectionByTheme dlg = new SelectionByTheme();
+            dlg.setModel(new DefaultSelectionByThemeModel());
+            dlg.addSelectionListener(new MySelectionByThemeListener());
+            ToolsSwingLocator.getWindowManager().showWindow(
+                    dlg, 
+                    i18n.getTranslation("Seleccion_por_capa"), 
+                    WindowManager.MODE.TOOL
+            );
+            document.setModified(true);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if( document == null ) {
+            return false;
+        }
+         List<FLayer> layers = document.getMapContext().getLayers().getLayers(
+                FLayers.LAYER_ACTIVE
+                        .and(FLayers.LAYER_AVALAIBLE)
+                        .and(FLayers.LAYER_SELECTION_AVAILABLE)
+        );
+        if (layers.size()>=1) {
+            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();
+
+        return document.getMapContext().hasVectorLayers();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.xml	(revision 46118)
@@ -0,0 +1,1115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">5</at>
+            <at name="tabPlacement">3</at>
+            <at name="tabLayoutPolicy">1</at>
+            <at name="name"></at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">Elements</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>
+                   <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">embedded.Veba1224P17a28b66affML7ffb</at>
+                     <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+                     <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                             <at name="row">3</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.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="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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">lstData</at>
+                              <at name="width">1411</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </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="height">614</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">1</at>
+                             <at name="row">5</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.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="name">spnSize</at>
+                              <at name="width">1413</at>
+                              <at name="height">36</at>
+                             </object>
+                            </at>
+                           </object>
+                          </at>
+                         </object>
+                        </at>
+                       </item>
+                       <item >
+                        <at name="value">
+                         <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">embedded.Ueba1224I17a28b66affNV7ffc</at>
+                          <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+                          <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtDataFilter</at>
+                                   <at name="width">1379</at>
+                                   <at name="height">38</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">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.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="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.EmptyBorderProperty">
+                                          <super classname="com.jeta.forms.store.properties.BorderProperty">
+                                           <at name="name">border</at>
+                                           <at name="title"></at>
+                                          </super>
+                                          <at name="top">2</at>
+                                          <at name="left">2</at>
+                                          <at name="bottom">2</at>
+                                          <at name="right">2</at>
+                                         </object>
+                                        </at>
+                                       </item>
+                                      </object>
+                                     </at>
+                                    </object>
+                                   </at>
+                                   <at name="actionCommand">...</at>
+                                   <at name="name">btnDataFilter</at>
+                                   <at name="width">19</at>
+                                   <at name="text">...</at>
+                                   <at name="height">30</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="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>
+                              <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>
+                               </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="1">
+                              <at name="item" index="0">
+                               <object classname="[Ljava.lang.Object;" size="3"/>
+                              </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>
+                       </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="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>
+                         <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>
+                          </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="5">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="1"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">Config</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>
+                   <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">embedded.Yeba1224O17a28b66affTA7ff9</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</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.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="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="name">cboLabel</at>
+                              <at name="width">1401</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">38</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">2</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">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="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="name"></at>
+                              <at name="width">1401</at>
+                              <at name="text">Label</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">26</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">8</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.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="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="name">cboColor</at>
+                              <at name="width">1401</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">38</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">12</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.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="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="name">cboGroup</at>
+                              <at name="width">1401</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </at>
+                              <at name="height">38</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">6</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">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="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="name"></at>
+                              <at name="width">1401</at>
+                              <at name="text">Color</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">26</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">10</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">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="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="name"></at>
+                              <at name="width">1401</at>
+                              <at name="text">Group</at>
+                              <at name="fill">
+                               <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                                <at name="name">fill</at>
+                               </object>
+                              </at>
+                              <at name="height">26</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="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>
+                         <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>
+                          </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="15">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="3">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="4">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="5">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="6">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="7">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="8">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="9">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="10">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="11">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="12">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="13">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="14">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">1459</at>
+            <at name="tabCount">2</at>
+            <at name="height">825</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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="3">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanelView.java	(revision 46118)
@@ -0,0 +1,225 @@
+package org.gvsig.app.extension.geometriespalette;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSpinner;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class GeometriesPalettePanelView extends JPanel
+{
+   JTabbedPane jtabbedpane1 = new JTabbedPane();
+   JList lstData = new JList();
+   JSpinner spnSize = new JSpinner();
+   JTextField txtDataFilter = new JTextField();
+   JButton btnDataFilter = new JButton();
+   JComboBox cboLabel = new JComboBox();
+   JComboBox cboColor = new JComboBox();
+   JComboBox cboGroup = new JComboBox();
+
+   /**
+    * Default constructor
+    */
+   public GeometriesPalettePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      jtabbedpane1.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+      jtabbedpane1.setTabPlacement(JTabbedPane.BOTTOM);
+      jtabbedpane1.addTab("Elements",null,createPanel1());
+      jtabbedpane1.addTab("Config",null,createPanel3());
+      jpanel1.add(jtabbedpane1,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstData.setName("lstData");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstData);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(1,3));
+
+      spnSize.setName("spnSize");
+      jpanel1.add(spnSize,cc.xy(1,5));
+
+      jpanel1.add(createPanel2(),cc.xy(1,1));
+      addFillComponents(jpanel1,new int[]{ 1 },new int[]{ 1,2,4 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtDataFilter.setName("txtDataFilter");
+      jpanel1.add(txtDataFilter,cc.xy(1,1));
+
+      btnDataFilter.setActionCommand("...");
+      btnDataFilter.setName("btnDataFilter");
+      btnDataFilter.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnDataFilter.setBorder(emptyborder1);
+      jpanel1.add(btnDataFilter,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboLabel.setName("cboLabel");
+      jpanel1.add(cboLabel,cc.xy(2,4));
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Label");
+      jpanel1.add(jlabel1,cc.xy(2,2));
+
+      cboColor.setName("cboColor");
+      jpanel1.add(cboColor,cc.xy(2,8));
+
+      cboGroup.setName("cboGroup");
+      jpanel1.add(cboGroup,cc.xy(2,12));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("Color");
+      jpanel1.add(jlabel2,cc.xy(2,6));
+
+      JLabel jlabel3 = new JLabel();
+      jlabel3.setText("Group");
+      jpanel1.add(jlabel3,cc.xy(2,10));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPaletteExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPaletteExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPaletteExtension.java	(revision 46118)
@@ -0,0 +1,104 @@
+package org.gvsig.app.extension.geometriespalette;
+
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.addlayer.AddLayerDialog;
+import static org.gvsig.app.extension.AddLayer.createAddLayerDialog;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.fmap.crs.CRSFactory;
+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.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.fmap.mapcontrol.MapControlManager;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class GeometriesPaletteExtension extends Extension {
+    
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (StringUtils.equalsIgnoreCase("tools-open-geometriespalette", actionCommand)) {
+            doOpenGeometriesPalette();
+        }
+    }
+
+    @SuppressWarnings("SleepWhileInLoop")
+    private void doOpenGeometriesPalette() {
+        AddLayerDialog addLayerDialog = null;
+        MapContext mapContext = null;
+        MapControl mapControl = null;
+
+        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
+        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+        MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+
+        try {
+            mapContext = mapContextManager.createMapContext();
+            mapContext.setProjection(CRSFactory.getCRS("EPSG:4326"));
+            mapControl = mapControlManager.createJMapControlPanel(mapContext);
+
+            addLayerDialog = createAddLayerDialog(mapControl, mapContext, null);
+            windowManager.showWindow(
+                    addLayerDialog,
+                    "Select palette layer",
+                    WindowManager.MODE.DIALOG
+            );
+
+            if (addLayerDialog.isAccepted()) {
+                if (addLayerDialog.getSelectedTab() instanceof WizardPanel) {
+                    WizardPanel panel = (WizardPanel) addLayerDialog.getSelectedTab();
+                    panel.executeWizard();
+                    // Las capas se cargan en segundo plano, asi que si tratamos de 
+                    // acceder a ellas ya mismo aun no estan cargadas.
+                    // No es muy ortodox pero nos esperaremos un poco.
+                    for (int i = 0; i < 30; i++) {
+                        Thread.sleep(1000);
+                        if (!mapContext.getLayers().isEmpty()) {
+                            FLyrVect layer = (FLyrVect) mapContext.getLayers().getLayer(0);
+                            GeometriesPalettePanel palette = new GeometriesPalettePanel();
+                            palette.setFeatureStore(layer.getFeatureStore());
+                            windowManager.showWindow(
+                                    palette,
+                                    "Palette" + " - " + layer.getName(),
+                                    WindowManager.MODE.TOOL
+                            );
+                            return;
+                        }
+                    }
+                    // TODO: Avisar que no se ha cargado ninguna capa ?
+                }
+            }
+        } catch (Exception ex) {
+            logger.warn("Can't open palete from layer",ex);
+        } finally {
+            DisposeUtils.disposeQuietly(addLayerDialog);
+            DisposeUtils.disposeQuietly(mapControl);
+            DisposeUtils.disposeQuietly(mapContext);
+        }
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/geometriespalette/GeometriesPalettePanel.java	(revision 46118)
@@ -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.app.extension.geometriespalette;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.util.List;
+import javax.swing.AbstractListModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+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.FeatureAttributeDescriptor;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributeListCellRenderer;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.type.GeometryType;
+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.symbology.fmap.mapcontext.rendering.symbol.fill.impl.SimpleFillSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.impl.SimpleLineSymbol;
+import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
+import org.gvsig.tools.swing.api.FilteredListController;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+public class GeometriesPalettePanel extends GeometriesPalettePanelView {
+
+    private AttributeDescriptorPickerController labelPicker;
+    private FeatureAttributeDescriptor attributeLabel;
+    private ISymbol symbol;
+    private FeatureAttributeDescriptor geomattr;
+    private FeatureStore store;
+    private FilteredListController dataController;
+    private AttributeDescriptorPickerController colorPicker;
+    private AttributeDescriptorPickerController groupPicker;
+
+    private class FeratureWithGeomCellRenderer extends DefaultListCellRenderer {
+
+        @Override
+        public Component getListCellRendererComponent(
+                JList<?> list,
+                Object value,
+                int index,
+                boolean isSelected,
+                boolean cellHasFocus) {
+            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+            LabeledValue<Feature> x = (LabeledValue<Feature>) value;
+            if ( x!=null && x.getValue() != null && attributeLabel!=null && symbol!=null ) {
+                Image img = drawGeometry(x.getValue());
+                label.setHorizontalAlignment(SwingConstants.CENTER);
+                label.setHorizontalTextPosition(JLabel.CENTER);
+                label.setVerticalTextPosition(JLabel.BOTTOM);
+                label.setIcon(new ImageIcon(img));
+                label.setText(x.getLabel());
+            }
+            return label;
+        }
+    }
+
+    public GeometriesPalettePanel() {
+        initComponents();
+
+    }
+
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
+
+        FeatureAttributeListCellRenderer renderer = dataSwingManager.createDefaultFeatureAttributeListCellRenderer();
+        renderer.setUseLabeld(DataManager.USE_LABELS_NO);
+        this.cboLabel.setRenderer(renderer);
+        labelPicker = dataSwingManager.createAttributeDescriptorPickerController(this.cboLabel);
+        labelPicker.addChangeListener((ChangeEvent e) -> {
+            doChangeAttrLabel();
+        });
+        renderer = dataSwingManager.createDefaultFeatureAttributeListCellRenderer();
+        renderer.setUseLabeld(DataManager.USE_LABELS_NO);
+        this.cboColor.setRenderer(renderer);
+        colorPicker = dataSwingManager.createAttributeDescriptorPickerController(this.cboColor);
+        colorPicker.addChangeListener((ChangeEvent e) -> {
+            doChangeAttrColor();
+        });
+        renderer = dataSwingManager.createDefaultFeatureAttributeListCellRenderer();
+        renderer.setUseLabeld(DataManager.USE_LABELS_NO);
+        this.cboGroup.setRenderer(renderer);
+        groupPicker = dataSwingManager.createAttributeDescriptorPickerController(this.cboGroup);
+        groupPicker.addChangeListener((ChangeEvent e) -> {
+            doChangeAttrGroup();
+        });
+        SpinnerNumberModel spnSizeModel = new SpinnerNumberModel(100, 30, 600, 10);
+        this.spnSize.setModel(spnSizeModel);
+        this.spnSize.addChangeListener((ChangeEvent e) -> { doChangeSize(); });
+
+        this.lstData.setCellRenderer(new FeratureWithGeomCellRenderer());
+        this.lstData.addListSelectionListener((ListSelectionEvent e) -> {
+            if( e.getValueIsAdjusting() ) {
+                return;
+            }
+            doCopyFeature();
+        });
+        this.dataController = toolsSwingManager.createFilteredListController(lstData, txtDataFilter, btnDataFilter);
+        
+        ToolsSwingUtils.ensureRowsCols(this, 25,40);
+        ToolsSwingUtils.ensureMaxRows(this, 25);
+    }
+
+    private void doChangeSize() {
+        this.lstData.updateUI();
+    }
+    
+    private void doChangeAttrGroup() {
+        
+    }
+    
+    private void doChangeAttrColor() {
+        
+    }
+    
+    private void doCopyFeature() {
+        try {
+            LabeledValue<Feature> x = (LabeledValue<Feature>) this.lstData.getSelectedValue();
+            if( x == null ) {
+                return;
+            }
+            DataManager dataManager = DALLocator.getDataManager();
+            FeatureSelection selection = this.store.createFeatureSelection();
+            selection.select(x.getValue());
+            dataManager.putFeaturesInClipboard(selection);
+        } catch (DataException ex) {
+            // TODO: LOGGER.warn
+        }
+    }
+    
+    private Image drawGeometry(Feature feature) {
+        Geometry geom = (Geometry) feature.get(geomattr.getName());
+                
+        int pixels = (int) this.spnSize.getValue();
+        Dimension size = new Dimension(pixels, pixels);
+        BufferedImage img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
+        
+        ViewPort viewPort = new ViewPort();
+        viewPort.setImageSize(size);
+        viewPort.setProjection(geomattr.getSRS());
+        viewPort.setEnvelope(geom.getEnvelope());
+        this.symbol.draw(
+                (Graphics2D) img.getGraphics(), 
+                viewPort.getAffineTransform(),
+                geom,
+                feature, 
+                null
+        );
+        return img;
+    }
+    
+    private void doChangeAttrLabel() {
+        this.attributeLabel = this.labelPicker.get();
+        this.lstData.setModel(new AbstractListModel<LabeledValue<Feature>>() {
+            List<Feature> features = store.getFeatures((String)null, attributeLabel.getName());
+
+            @Override
+            public int getSize() {
+                return features.size();
+            }
+
+            @Override
+            public LabeledValue<Feature> getElementAt(int index) {
+                Feature feature = features.get(index);
+                return new LabeledValueImpl(
+                        feature.getString(attributeLabel.getName()),
+                        feature
+                );
+            }
+        });
+    }
+
+    public void setFeatureStore(FeatureStore store) {
+        this.store = store;
+        this.lstData.setModel(new AbstractListModel<LabeledValue<Feature>>() {
+            List<Feature> features = store.getFeatures();
+
+            @Override
+            public int getSize() {
+                return features.size();
+            }
+
+            @Override
+            public LabeledValue<Feature> getElementAt(int index) {
+                Feature feature = features.get(index);
+                return new LabeledValueImpl(
+                        feature.getString(attributeLabel.getName()),
+                        feature
+                );
+            }
+        });
+        FeatureType featureType = store.getDefaultFeatureTypeQuietly();
+        this.labelPicker.setFeatureType(featureType);
+        this.colorPicker.setFeatureType(featureType);
+        this.groupPicker.setFeatureType(featureType);
+        this.geomattr = featureType.getDefaultGeometryAttribute();
+        GeometryType geomtype = geomattr.getGeomType();
+        if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, geomtype.getType()) ||
+                GeometryUtils.isSubtype(Geometry.TYPES.MULTIPOINT, geomtype.getType())) {
+            this.symbol = new SimpleMarkerSymbol();
+        } else if( GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, geomtype.getType()) ||
+                GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, geomtype.getType())) {
+            this.symbol = new SimpleFillSymbol();
+        } else if( GeometryUtils.isSubtype(Geometry.TYPES.CURVE, geomtype.getType()) ||
+                GeometryUtils.isSubtype(Geometry.TYPES.MULTICURVE, geomtype.getType())) {
+            this.symbol = new SimpleLineSymbol();
+        }
+    }
+
+    public static void showPalette(FLyrVect layer) {
+        WindowManager winmanager = ToolsSwingLocator.getWindowManager();
+        GeometriesPalettePanel panel = new GeometriesPalettePanel();
+
+        winmanager.showWindow(
+                panel,
+                "Paleta",
+                WindowManager.MODE.TOOL
+        );
+        panel.setFeatureStore(layer.getFeatureStore());
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewSelectionControls.java	(revision 46118)
@@ -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.app.extension;
+
+import java.util.List;
+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.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+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);
+
+    @Override
+    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);
+    }
+
+    @Override
+    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);
+
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if( document == null ) {
+            return false;
+        }
+        List<FLayer> layers = document.getMapContext().getLayers().getLayers(
+                FLayers.LAYER_ACTIVE
+                        .and(FLayers.LAYER_AVALAIBLE)
+                        .and(FLayers.LAYER_SELECTION_AVAILABLE)
+        );
+        if (layers.size()>=1) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoRedoViewExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoRedoViewExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoRedoViewExtension.java	(revision 46118)
@@ -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.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.command.CommandStackDialog;
+import org.gvsig.app.project.documents.view.gui.IView;
+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.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.undo.RedoException;
+import org.gvsig.tools.undo.UndoException;
+
+/**
+ * Extensi�n encargada de gestionar el deshacer los comandos anteriormente
+ * aplicados.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class UndoRedoViewExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "edit-undo", this);
+        IconThemeHelper.registerIcon("action", "edit-redo", this);
+        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions", this);        
+    }
+
+    @Override
+    public void execute(String s) {
+        switch (s) {
+            case "edit-undo-layer":
+                undo();
+                break;
+            case "edit-redo-layer":
+                redo();
+                break;
+            case "edit-undo-redo-actions-layer":
+                showHistory();
+                break;
+                
+        }
+    }
+
+    private void undo() {
+        try {
+            FLyrVect layer = getActiveAndEditingLayer();
+            if (layer == null) {
+                return;
+            }
+            if (!layer.getFeatureStore().canUndo()) {
+                return;
+            }
+            ApplicationManager application = ApplicationLocator.getApplicationManager();
+            IView vista = (IView) application.getActiveWindow();
+            layer.getFeatureStore().undo();
+            vista.getMapControl().drawMap(false);
+            application.refreshMenusAndToolBars();
+        } catch (UndoException ex) {
+            logger.warn("Can't undo", ex);
+        }
+    }
+    
+    private void showHistory() {
+        FLyrVect layer = getActiveAndEditingLayer();
+        if (layer == null) {
+            return;
+        }
+        ApplicationManager application = ApplicationLocator.getApplicationManager();
+        MDIManager uiManager = application.getUIManager();
+        FeatureStore featureStore = layer.getFeatureStore();
+        CommandStackDialog csd = new CommandStackDialog();
+        csd.setModel(featureStore);
+        csd.setLabelModel(featureStore.getName());
+        uiManager.addWindow(csd);
+
+    }
+    
+    private void redo() {
+        try {
+            FLyrVect layer = getActiveAndEditingLayer();
+            if (layer == null) {
+                return;
+            }
+            if (!layer.getFeatureStore().canRedo()) {
+                return;
+            }
+            ApplicationManager application = ApplicationLocator.getApplicationManager();
+            IView vista = (IView) application.getActiveWindow();
+            layer.getFeatureStore().redo();
+            vista.getMapControl().drawMap(false);
+            application.refreshMenusAndToolBars();
+        } catch (RedoException ex) {
+            logger.warn("Can't undo", ex);
+        }
+    }
+
+    @Override
+    public boolean canQueryByAction() {
+        return true;
+    }
+
+    
+    @Override
+    public boolean isEnabled(String action) {
+        FLyrVect layer = getActiveAndEditingLayer();
+        switch (action) {
+            case "edit-undo-layer":
+                if (layer == null) {
+                    return false;
+                }
+                return layer.getFeatureStore().canUndo();
+            case "edit-redo-layer":
+                if (layer == null) {
+                    return false;
+                }
+                return layer.getFeatureStore().canRedo();
+            case "edit-undo-redo-actions-layer":
+                return true;
+            default:
+                return false;
+        }
+
+    }
+
+    private FLyrVect getActiveAndEditingLayer() {
+        ApplicationManager application = ApplicationLocator.getApplicationManager();
+        IView vista = (IView) application.getActiveWindow();
+        MapControl mapControl = vista.getMapControl();
+        FLayer[] activeLayers = mapControl.getMapContext().getLayers().getActives();
+        if (activeLayers.length != 1) {
+            return null;
+        }
+        FLayer layer = activeLayers[0];
+        if (layer instanceof FLyrVect && ((FLyrVect) layer).getFeatureStore().isEditing()) {
+            return (FLyrVect) layer;
+        }
+        return null;
+
+    }
+
+    @Override
+    public boolean isVisible(String action) {
+        ApplicationManager application = ApplicationLocator.getApplicationManager();
+        if(!(application.getActiveWindow() instanceof IView)) {
+            return false;
+        }
+
+        return getActiveAndEditingLayer()!=null;
+    }
+    
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/UndoRedoViewExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ShowDevelInfoExtension.java	(revision 46118)
@@ -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.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 final Logger logger = LoggerFactory
+			.getLogger(ShowDevelInfoExtension.class);
+
+        @Override
+	public void initialize() {
+		// Do nothing
+	}
+
+        @Override
+	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);
+		}
+
+	}
+
+        @Override
+	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-toolbars".equalsIgnoreCase(actionCommand)) {
+			new ActionsInfoDevelTool().showToolBars();
+		} 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/About.java	(revision 46118)
@@ -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.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.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(
+                "Generalitat Valenciana",
+                getResource("about/gva/gva.html"),
+                1,
+                getResource("about/gva/logo-gva-16x16-red.png")
+        );
+        about.addSponsor(
+                "European Union", 
+                getResource("about/eu/eu.html"),
+                2,
+                getResource("about/eu/logo-eu-16x16.png")
+        );
+
+
+
+        about.addDeveloper(
+                "gvSIG association",
+                getResource("about/gvsigassociation.html"),
+                1
+        );
+
+        about.addDeveloper(
+                "Software Colaborativo",
+                getResource("about/scolab/scolab.html"),
+                2
+        );
+
+//        about.addDeveloper(
+//                "DISID",
+//                getResource("about/disid/disid.html"),
+//                3
+//        );
+//        about.addDeveloper(
+//                "PRODEVELOP",
+//                getResource("about/prodevelop/prodevelop.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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddToLocatorExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddToLocatorExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddToLocatorExtension.java	(revision 46118)
@@ -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 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.ProjectManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.mapcontext.MapContext;
+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;
+
+/**
+ * Extensi�n que a�ade una capa al locator
+ *
+ */
+public class AddToLocatorExtension extends Extension {
+
+    private static final Logger logger = LoggerFactory.getLogger(AddToLocatorExtension.class);
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if (view != null) {
+            FLayer[] layers = view.getMapContext().getLayers().getActives();
+            return layers != null && layers.length > 0;
+        }
+        return false;
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addTOCContextAction("layer-addtolocator");
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        this.execute(actionCommand, null);
+    }
+
+    @Override
+    public void execute(String command, Object[] args) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        if ("layer-addtolocator".equalsIgnoreCase(command)) {
+            ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+            if (view == null) {
+                return;
+            }
+            MapContext mapOverViewContext = view.getMapOverViewContext();
+
+            FLayer[] layers = view.getMapContext().getLayers().getActives();
+            
+            for (FLayer layer : layers) {
+                try {
+                    mapOverViewContext.getLayers().addLayer(layer.cloneLayer());
+                    // initialize mapOverviewContext envelope
+                    try {
+                        if (mapOverViewContext.getViewPort().getEnvelope() == null && layer.getFullEnvelope() != null) {
+                            mapOverViewContext.getViewPort().setEnvelope(layer.getFullEnvelope());
+                        }
+                    } catch (ReadException ex) {
+                        logger.warn("Not able to set Envelope for the overview.", ex);
+                    }
+                    mapOverViewContext.invalidate();
+                    view.setModified(true);
+                } catch (Exception ex) {
+                    logger.warn("Can't add layer '" + layer.getName() + "' to the overview.", ex);
+                    application.messageDialog(
+                            i18nManager.getTranslation("_Add_to_locator"),
+                            i18nManager.getTranslation("_Cant_add_layer_{0}_to_locator", new String[] {layer.getName()})
+                                + "\n\n"
+                                + i18nManager.getTranslation("_See_the_error_log_for_more_information"),
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "layer-addtolocator", this);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.xml	(revision 46118)
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.JTable</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTable</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">tblFeatures</at>
+            <at name="width">1298</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="height">32</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">4</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">embedded.Z608d98d4X17aa8da5927SK7ff9</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">_Check_only_not_validated_features</at>
+                 <at name="name">chkOnlyNotValidatedFeatures</at>
+                 <at name="width">340</at>
+                 <at name="text">_Show_only_not_validated_features</at>
+                 <at name="height">28</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">4</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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                         <at name="title"></at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">datos/devel/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/resources/org/gvsig/vcsgis/swing/impl/images/common-showform.png</at>
+                   <at name="description">common-showform.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnShowForm</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <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>
+             </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="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </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>
+     </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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanelView.java	(revision 46118)
@@ -0,0 +1,165 @@
+package org.gvsig.app.extension.editedfeatures;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.border.EmptyBorder;
+
+
+public class EditedFeaturesPanelView extends JPanel
+{
+   JTable tblFeatures = new JTable();
+   JCheckBox chkOnlyNotValidatedFeatures = new JCheckBox();
+   JButton btnShowForm = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public EditedFeaturesPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tblFeatures.setName("tblFeatures");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tblFeatures);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      jpanel1.add(createPanel1(),cc.xy(2,4));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkOnlyNotValidatedFeatures.setActionCommand("_Check_only_not_validated_features");
+      chkOnlyNotValidatedFeatures.setName("chkOnlyNotValidatedFeatures");
+      chkOnlyNotValidatedFeatures.setText("_Show_only_not_validated_features");
+      jpanel1.add(chkOnlyNotValidatedFeatures,cc.xy(1,1));
+
+      btnShowForm.setIcon(loadImage("datos/devel/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/resources/org/gvsig/vcsgis/swing/impl/images/common-showform.png"));
+      btnShowForm.setName("btnShowForm");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnShowForm.setBorder(emptyborder1);
+      jpanel1.add(btnShowForm,cc.xy(4,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,3 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/editedfeatures/EditedFeaturesPanel.java	(revision 46118)
@@ -0,0 +1,346 @@
+package org.gvsig.app.extension.editedfeatures;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.List;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableColumn;
+import org.gvsig.featureform.swing.CreateJFeatureFormException;
+import org.gvsig.featureform.swing.JFeatureReferencesForm;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_BASIC;
+import static org.gvsig.fmap.dal.feature.Feature.CHECK_REQUIREDS;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+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.FeatureStoreNotification;
+import static org.gvsig.fmap.dal.feature.FeatureStoreNotification.AFTER_CANCELEDITING;
+import static org.gvsig.fmap.dal.feature.FeatureStoreNotification.AFTER_FINISHEDITING;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.Coercion;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynform.AbortActionException;
+import org.gvsig.tools.dynform.JDynFormSet;
+import org.gvsig.tools.dynform.JDynFormSetAdapter;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.TableColumnAdjuster;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class EditedFeaturesPanel extends EditedFeaturesPanelView implements Component {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EditedFeaturesPanel.class);
+    private TableColumnAdjuster columnAdjuster;
+
+    private class FeatureAttributeCellRenderer extends DefaultTableCellRenderer {
+
+        private final FeatureAttributeDescriptor descriptor;
+
+        public FeatureAttributeCellRenderer(FeatureAttributeDescriptor descriptor) {
+            this.descriptor = descriptor;
+        }
+
+        @Override
+        public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+            if (value == null) {
+                setText("");
+            } else {
+                try {
+                    value = toString.coerce(value);
+                } catch (CoercionException ex) {
+                    LOGGER.debug("Can't coerce value to string.", ex);
+                }
+                setText((String) value);
+            }
+            if (!isSelected) {
+                this.setBackground(table.getBackground());
+                try {
+                    Feature feature = references.get(row).getFeature();
+                    feature.validate(Feature.CHECK_RULES_AT_FINISH | CHECK_REQUIREDS | CHECK_BASIC);
+                } catch (Exception ex) {
+                    this.setBackground(backgroundColorWarning);
+                }
+            }
+            return this;
+        }
+
+    }
+
+    private class MyTableModel extends AbstractTableModel {
+
+        public MyTableModel() {
+
+        }
+
+        @Override
+        public int getRowCount() {
+            try {
+                if (references == null) {
+                    return 0;
+                }
+                return references.size();
+            } catch(Exception ex) {
+                return 0;
+            }
+        }
+
+        @Override
+        public int getColumnCount() {
+            try {
+                if (featureType == null) {
+                    return 0;
+                }
+                return featureType.size();
+            } catch(Exception ex) {
+                return 0;
+            }
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            try {
+                if (references == null) {
+                    return "";
+                }
+                Feature feature = references.get(rowIndex).getFeature();
+                return feature.get(columnIndex);
+            } catch (Exception ex) {
+                return "";
+            }
+        }
+
+    }
+
+    private final FeatureStore store;
+    private final Coercion toString;
+    private final FeatureType featureType;
+    private List<FeatureReference> references;
+    private JFeatureReferencesForm form;
+    private Color backgroundColorWarning;
+    private DefaultTableColumnModel columnModel;
+    private Observer storeObserver;
+
+    public EditedFeaturesPanel(FeatureStore store) {
+        this.store = store;
+        this.featureType = this.store.getDefaultFeatureTypeQuietly();
+        this.toString = ToolsLocator.getDataTypesManager().get(DataTypes.STRING).getCoercion();
+        this.initComponents();
+    }
+
+    private void executeQuietly(Runnable r) {
+        try {
+            r.run();
+        } catch(Exception ex) {
+            LOGGER.debug("Can't execute", ex);
+        }
+    }
+    
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+        this.backgroundColorWarning = toolsSwingManager.getWarningBackgroundColor();
+
+        this.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                if (form != null && form.asJComponent().isVisible()) {
+                    form.asJComponent().setVisible(false);
+                }
+            }
+        });
+        
+        this.storeObserver = (Observable observable, Object notification) -> {
+            if( notification instanceof FeatureStoreNotification && (
+                    ((FeatureStoreNotification)notification).getType().equals(AFTER_FINISHEDITING) ||
+                    ((FeatureStoreNotification)notification).getType().equals(AFTER_CANCELEDITING))
+                    ) {
+                executeQuietly(()-> store.deleteObserver(storeObserver));
+                executeQuietly(()-> form.asJComponent().setVisible(false));
+                executeQuietly(()-> setVisible(false));
+            }
+        };
+        this.store.addObserver(storeObserver);
+
+        toolsSwingManager.translate(this.chkOnlyNotValidatedFeatures);
+        this.chkOnlyNotValidatedFeatures.addActionListener((ActionEvent e) -> {
+            doOnlyNotValidatedFeaturesChange();
+        });
+
+        this.btnShowForm.addActionListener((ActionEvent e) -> {
+            doShowForm();
+        });
+
+        this.tblFeatures.setAutoCreateColumnsFromModel(false);
+        this.tblFeatures.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        this.tblFeatures.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+                    int x = tblFeatures.rowAtPoint(e.getPoint());
+                    tblFeatures.getSelectionModel().setSelectionInterval(x, x);
+                    doShowForm();
+                }
+            }
+
+        });
+        this.tblFeatures.getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
+            if (e.getValueIsAdjusting()) {
+                return;
+            }
+            doSelectCurrentFeature();
+        });
+        this.columnModel = new DefaultTableColumnModel();
+        FeatureType ftype = store.getDefaultFeatureTypeQuietly();
+        int modelIndex = 0;
+        for (FeatureAttributeDescriptor attr : ftype) {
+            TableColumn column = new TableColumn();
+            column.setHeaderValue(attr.getLabel());
+            column.setCellRenderer(new FeatureAttributeCellRenderer(attr));
+            column.setResizable(true);
+            column.setModelIndex(modelIndex++);
+            columnModel.addColumn(column);
+        }
+
+        this.references = this.store.getEditedFeatures();
+        doOnlyNotValidatedFeaturesChange();
+
+        ToolsSwingUtils.ensureRowsCols(this, 15, 90, 30, 100);
+
+    }
+
+    private void doSelectCurrentFeature() {
+        int row = tblFeatures.getSelectedRow();
+        if (row >= 0) {
+            try {
+                FeatureSelection selection = store.getFeatureSelection();
+                selection.deselectAll();
+                selection.select(references.get(row));
+            } catch (DataException ex) {
+            }
+        }
+    }
+
+    private void doOnlyNotValidatedFeaturesChange() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+
+        if (this.chkOnlyNotValidatedFeatures.isSelected()) {
+            this.references = this.store.getEditedFeaturesNotValidated();
+        } else {
+            this.references = this.store.getEditedFeatures();
+        }
+        this.tblFeatures.setModel(new MyTableModel());
+        this.tblFeatures.setColumnModel(columnModel);
+        if(this.columnAdjuster == null){
+            this.columnAdjuster = toolsSwingManager.createTableColumnAdjuster(this.tblFeatures);
+        } else {
+            this.columnAdjuster.restoreColumns();
+        }
+        if (this.form != null) {
+            if (this.form.getFormset().getForm().isModified()) {
+                this.form.getFormset().fireEvent(JDynFormSet.ACTION_SAVE, null);
+            }
+            this.form.setFeatures(this.references);
+            this.form.getFormset().addListener(new JDynFormSetAdapter() {
+                @Override
+                public void formMovedTo(int currentPosition) throws AbortActionException {
+                    tblFeatures.getSelectionModel().setSelectionInterval(currentPosition, currentPosition);
+                }
+            });
+        }
+    }
+
+    private void doShowForm() {
+
+        if (this.references.isEmpty()) {
+            return;
+        }
+        int index = this.tblFeatures.getSelectedRow();
+        if (index < 0) {
+            index = 0;
+        }
+
+        if (this.form == null) {
+            try {
+                WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+                DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
+                I18nManager i18n = ToolsLocator.getI18nManager();
+
+                this.form = dataSwingManager.createJFeatureReferencesForm(store, references);
+                this.form.getFormset().setAutosave(false);
+
+                this.form.asJComponent().addComponentListener(new ComponentAdapter() {
+                    @Override
+                    public void componentHidden(ComponentEvent e) {
+                        form = null;
+                    }
+                });
+                this.form.getFormset().addListener(new JDynFormSetAdapter() {
+                    @Override
+                    public void formMovedTo(int currentPosition) throws AbortActionException {
+                        tblFeatures.getSelectionModel().setSelectionInterval(currentPosition, currentPosition);
+                    }
+                });
+                String title = String.format("%s (%s)",
+                        this.store.getName(),
+                        i18n.getTranslation("_Edited_features")
+                );
+                winmgr.showWindow(
+                        this.form.asJComponent(),
+                        title,
+                        WindowManager.MODE.WINDOW
+                );
+
+            } catch (CreateJFeatureFormException ex) {
+                // TODO: falta tratamiento de las excepciones
+            }
+        }
+        JDynFormSet formset = this.form.getFormset();
+        if (formset.getCurrentIndex() != index) {
+            if (formset.getForm().isModified()) {
+                formset.fireEvent(JDynFormSet.ACTION_SAVE, null);
+            }
+            formset.setCurrentIndex(index);
+        }
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        return ToolsSwingUtils.loadImage(this, imageName);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java	(revision 46118)
@@ -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.extension;
+
+import java.util.Iterator;
+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.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.FLayers;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+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
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SelectByAttributesExtension extends Extension implements ExpressionListener {
+
+    protected FeatureStore featureStore = null;
+    private String filterTitle;
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "selection-by-attributes", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        if ("selection-by-attributes-layer".equals(actionCommand)) {
+            ViewDocument document = view.getViewDocument();
+
+            FLayer layer = document.getMapContext().getLayers().getFirstActiveVectorLayer();
+            filterTitle = layer.getName();
+            featureStore = ((FLyrVect) layer).getFeatureStore();
+            document.setModified(true);
+            SelectByAttributes selector = new SelectByAttributes();
+            selector.showWindow(filterTitle, featureStore, WindowManager.MODE.TOOL);
+
+
+        } else if ("selection-by-attributes-layer-old".equals(actionCommand)) {
+            ViewDocument document = view.getViewDocument();
+
+            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() {
+
+            @Override
+            public void exceptionThrown(Throwable t) {
+                NotificationManager.addError(t.getMessage(), t);
+            }
+        });
+        dlg.setModel(featureStore);
+        PluginServices.getMDIManager().addWindow(dlg);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return false;
+        }
+        ViewDocument document = view.getViewDocument();
+        if (document == null) {
+            return false;
+        }
+       
+        FLayers layers = document.getMapContext().getLayers();
+        List<FLayer> activeLayers = layers.getLayers(
+                FLayers.LAYER_ACTIVE
+                        .and(FLayers.LAYER_AVALAIBLE)
+                        .and(FLayers.LAYER_FLYRVECT)
+        );
+        if (activeLayers.size() != 1) {
+            return false;
+        }
+        List<FLayer> selectivedLayers = document.getMapContext().getLayers().getLayers(
+                FLayers.LAYER_ACTIVE
+                        .and(FLayers.LAYER_AVALAIBLE)
+                        .and(FLayers.LAYER_SELECTION_AVAILABLE)
+        );
+        if (selectivedLayers.size()==1) {
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    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
+    @Override
+    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);
+    }
+
+    @Override
+    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();
+                }
+            }
+        }
+    }
+
+    @Override
+    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;
+                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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java	(revision 46118)
@@ -0,0 +1,471 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.GridBagConstraints;
+import java.beans.PropertyVetoException;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.prefs.Preferences;
+import javax.swing.JOptionPane;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+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.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import static org.gvsig.app.extension.ProjectExtension.PROJECT_FILE_CHOOSER_ID;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
+import org.gvsig.app.util.BaseOpenErrorHandler;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+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.DatabaseWorkspaceManager;
+import org.gvsig.fmap.dal.OpenErrorHandler;
+import org.gvsig.fmap.dal.feature.AbstractDataProfile;
+import org.gvsig.fmap.dal.resource.ResourceManager;
+import org.gvsig.fmap.dal.resource.exception.DisposeResorceManagerException;
+import static org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanelController.OPEN_LAYER_FILE_CHOOSER_ID;
+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.bookmarksandhistory.Bookmark;
+import org.gvsig.tools.bookmarksandhistory.Bookmarks;
+import org.gvsig.tools.bookmarksandhistory.History;
+import org.gvsig.tools.dataTypes.CoercionException;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.Tags;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.resourcesstorage.FilesResourcesStorage;
+import org.gvsig.tools.swing.api.SimpleImage;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class InitializeApplicationExtension extends Extension {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(InitializeApplicationExtension.class);
+
+    // Copiadas de org.gvsig.coreplugin.PreferencesExtension
+    public static final String PROJECTS_FOLDER_PROPERTY_NAME = "ProjectsFolder";
+    public static final String DATA_FOLDER_PROPERTY_NAME = "DataFolder";
+    public static final String TEMPLATES_FOLDER_PROPERTY_NAME = "TemplatesFolder";
+    public static final String SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME = "SymbolLibraryFolder";
+
+    private OpenErrorHandler openErrorHandler = null;
+
+    private static class SimpleImageDataProfile extends AbstractDataProfile {
+
+        public SimpleImageDataProfile() {
+            super("Image", SimpleImage.class);
+        }
+
+        @Override
+        public Object createData(Object data, Tags tags) {
+            final ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+            SimpleImage image = toolsSwingManager.createSimpleImage(data);
+            return image;
+        }
+
+        @Override
+        public Object coerce(DataType dataType, Object data, Tags tags) throws CoercionException {
+            final ToolsSwingManager toolsSwingManager;
+            final SimpleImage image;
+            try {
+                switch (dataType.getType()) {
+                    case DataTypes.BYTEARRAY:
+                        toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+                        image = toolsSwingManager.createSimpleImage(data);
+                        return image.toBytearray();
+                    case DataTypes.STRING:
+                        toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+                        image = toolsSwingManager.createSimpleImage(data);
+                        return image.toString();
+                    default:
+                        break;
+                }
+            } catch (Exception ex) {
+                throw new CoercionException("Can't convert imagen to " + dataType.getName(), ex);
+            }
+            throw new CoercionException("Can't convert imagen to " + dataType.getName());
+        }
+
+    }
+
+    @Override
+    public void initialize() {
+        DALLocator.registerFeatureTypeDefinitionsManager(DefaultFeatureTypeDefinitionsManager.class);
+
+        ExpressionEvaluatorLocator.getManager().registerClassLoader(this.getClass().getClassLoader());
+
+        DataManager dataManager = DALLocator.getDataManager();
+        dataManager.registerDataProfile(new SimpleImageDataProfile());
+
+        InfoListener.initializeExtensionPoint();
+
+        initLastPath();
+        registerIcons();
+//        loadExpressionBookmarks();
+//        loadExpressionHistory();
+//        loadHistoryAndBookmarks();
+    }
+
+    public void loadHistoryAndBookmarks() {
+        PluginsManager pluginmgr = PluginsLocator.getManager();
+        File folder = pluginmgr.getApplicationHomeFolder();
+        String nameFolder = "bookmarks";
+
+        File storageFolder = new File(folder, nameFolder);
+        try {
+            if (!storageFolder.exists()) {
+                storageFolder.mkdir();
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Not able to create bookmarks folder. Load and save of bookmarks will be deactivated", ex);
+            //Stop trying to load bookmarks and not create listener to save them
+            return;
+        }
+        FilesResourcesStorage bookmarksResources = new FilesResourcesStorage(storageFolder.getAbsolutePath());
+        ToolsLocator.getBookmarksAndHistoryManager().setPrimaryStorage(bookmarksResources);
+        ToolsLocator.getBookmarksAndHistoryManager().load();
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        pluginManager.addShutdownTask("saveBookmarksAndHistory", () -> {
+          ToolsLocator.getBookmarksAndHistoryManager().save();
+        }, false, 100);
+
+    }
+
+    private void initLastPath() {
+        Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        String v;
+
+        v = prefs.get(DATA_FOLDER_PROPERTY_NAME, folderManager.getHome().getAbsolutePath());
+        folderManager.setLastPath(OPEN_LAYER_FILE_CHOOSER_ID, new File(v));
+
+        v = prefs.get(PROJECTS_FOLDER_PROPERTY_NAME, folderManager.getHome().getAbsolutePath());
+        folderManager.setLastPath(PROJECT_FILE_CHOOSER_ID, new File(v));
+
+        v = prefs.get("LegendsFolder", folderManager.getHome().getAbsolutePath());
+        folderManager.setLastPath("LegendsFolder", new File(v));
+    }
+
+    @Override
+    public void postInitialize() {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+
+        openErrorHandler = new BaseOpenErrorHandler();
+        ApplicationLocator.getManager().getDataManager().setOpenErrorHandler(openErrorHandler);
+
+        DALLocator.getResourceManager().startResourceCollector(
+                3 * (60 * 1000), // minutes --> miliseconds
+                null);
+
+        // showAddOnManagerOnStartIfNeed();
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+        if (projectPreferences.getOpenWithANewMaximizedView()) {
+            pluginManager.addStartupTask(
+                    "showNewViewMaximized",
+                    new ShowNewMaximizedView(),
+                    true,
+                    750
+            );
+        }
+        pluginManager.addStartupTask("OpenLayerOnStart", new OpenLayerOnStart(), true, 740);
+
+        pluginManager.addStartupTask("ApplicationStartedMessage", new Runnable() {
+            @Override
+            public void run() {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                ApplicationManager application = ApplicationLocator.getManager();
+                application.message(
+                        i18n.getTranslation("StatusBar.Aplicacion_iniciada"),
+                        JOptionPane.INFORMATION_MESSAGE
+                );
+            }
+        }, true, -1);
+
+        pluginManager.addStartupTask("ConnectoToDefaultWorkspace", () -> {
+            connectToDefaultWorkspace();
+        }, false, 500);
+        
+        pluginManager.addStartupTask("InitilizeHistoryAndBookmarks", new Runnable() {
+            @Override
+            public void run() {
+                loadHistoryAndBookmarks();
+            }
+        }, true, 100);
+    }
+
+    private void connectToDefaultWorkspace() {
+        String workspaceName = null;
+        try {
+            DataManager dataManager = DALLocator.getDataManager();
+            PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+            PluginServices plugin = pluginManager.getPlugin(this);
+            DynObject preferences = plugin.getPluginProperties();
+            if ((Boolean) (preferences.getDynValue("connectAutomaticallyToDatabaseWorkspace"))) {
+                workspaceName = (String) preferences.getDynValue("databaseWorkspaceToConnect");
+                DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
+                DataServerExplorerPoolEntry entry = pool.get(workspaceName);
+                if (entry != null) {
+                    DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(
+                            entry.getExplorerParameters()
+                    );
+                    if (workspace != null && workspace.isValid()) {
+                        workspace.connect();
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't connect to default workspace (" + Objects.toString(workspaceName) + ").", ex);
+        }
+    }
+
+    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<>();
+            pluginProperties.setDynValue("showAddOnmanagerOnStart", showAddOnmanagerOnStart);
+        }
+        Boolean showAddOnmanagerOnStartForCurrentVersion = showAddOnmanagerOnStart.get(pluginManager.getApplicationVersion().fullFormat());
+
+        if (showAddOnmanagerOnStartForCurrentVersion == null || showAddOnmanagerOnStartForCurrentVersion) {
+            pluginManager.addStartupTask(
+                    "showAddOnmanagerOnStart",
+                    new ShowAddOnManagerOnStart(),
+                    true,
+                    500
+            );
+        }
+    }
+
+    private static class ShowNewMaximizedView implements Runnable {
+
+        @Override
+        public void run() {
+            ApplicationManager application = ApplicationLocator.getManager();
+            ProjectManager projectManager = application.getProjectManager();
+            Project project = projectManager.getCurrentProject();
+
+            ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+            ViewDocument view = (ViewDocument) viewManager.createDocument();
+            project.addDocument(view);
+
+            IView viewWindow = (IView) viewManager.getMainWindow(view);
+
+            application.getUIManager().addWindow(viewWindow, GridBagConstraints.CENTER);
+            try {
+                application.getUIManager().setMaximum((IWindow) viewWindow, true);
+            } catch (PropertyVetoException e) {
+                LOGGER.info("Can't maximize view.", e);
+            }
+            project.setModified(false);
+        }
+
+    }
+
+    private static class ShowAddOnManagerOnStart implements Runnable {
+
+        @Override
+        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);
+
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+
+    private void addToLogInfo() {
+        String info[] = this.getStringInfo().split("\n");
+        for (String line : info) {
+            LOGGER.info(line);
+        }
+    }
+
+    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 (PackageInfo pkg : pkgs) {
+                writer.write("    ");
+                writer.write(pkg.toStringCompact());
+                writer.write("\n");
+            }
+        } catch (Throwable e) {
+            writer.write("Can't get installed package information.");
+        }
+        return writer.toString();
+    }
+
+    @Override
+    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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ZoomNext.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewer.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewer.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewer.java	(revision 46118)
@@ -0,0 +1,91 @@
+
+package org.gvsig.app.extension.logviewer;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.slf4j.LoggerFactory;
+
+
+public class LogViewer extends LogViewerView {
+    
+    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(LogViewer.class);
+    
+    private final File logfile;
+    
+    
+    public LogViewer() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        this.logfile = FileUtils.getFile(
+                pluginsManager.getApplicationHomeFolder(), 
+                pluginsManager.getApplicationName() + ".log"
+        );
+        this.initComponents();
+    }
+    
+    private void initComponents() {
+        
+        this.translateComponents();
+        
+        this.btnClose.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doClose();
+            }
+        });
+        this.btnUpdate.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                doUpdate();
+            }
+        });
+        
+        String s = this.logfile.getAbsolutePath();
+        this.txtFilename.setText(s);
+        this.txtFilename.setSelectionStart(s.length());
+        this.txtFilename.setSelectionEnd(s.length());
+        
+        doUpdate();
+    }
+
+    @Override
+    public Dimension getPreferredSize() {
+        Dimension preferredSize = super.getPreferredSize();
+        preferredSize.width = Math.max(preferredSize.width, 400);
+        preferredSize.height = Math.max(preferredSize.height, 300);
+        return preferredSize;
+    }
+    
+    
+    private void translateComponents() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        this.btnClose.setText(i18nManager.getTranslation("_Close"));
+        this.btnUpdate.setText(i18nManager.getTranslation("_Update"));
+    }
+    
+    public void doClose() {
+        this.setVisible(false);
+    }
+    
+    public void doUpdate() {
+        try {
+            String s = FileUtils.readFileToString(logfile);
+            this.txtLogContents.setText(s);
+            this.txtLogContents.setSelectionStart(s.length());
+            this.txtLogContents.setSelectionEnd(s.length());
+        } catch (IOException ex) {
+            logger.warn("Can't load log file '"+this.logfile.getAbsolutePath()+"'.",ex);
+            this.txtLogContents.setText("Can't load log file\n\n"+ex.toString());
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.xml	(revision 46118)
@@ -0,0 +1,487 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:12DLU:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:12DLU:GROW(1.0),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">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.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">20</at>
+            <at name="width">395</at>
+            <at name="name">txtFilename</at>
+            <at name="background" object="color">236,233,216</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="editable">false</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">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.JTextArea</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextArea</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="height">257</at>
+            <at name="width">393</at>
+            <at name="name">txtLogContents</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>
+            <at name="editable">false</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">6</at>
+           <at name="colspan">1</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.FormComponent</at>
+        </super>
+        <at name="id">embedded.172811994</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">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">4</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.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">Close</at>
+                 <at name="height">22</at>
+                 <at name="width">64</at>
+                 <at name="name">btnClose</at>
+                 <at name="actionCommand">Close</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">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.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">Update</at>
+                 <at name="height">22</at>
+                 <at name="width">72</at>
+                 <at name="name">btnUpdate</at>
+                 <at name="actionCommand">Update</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="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </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>
+     </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="7">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerView.java	(revision 46118)
@@ -0,0 +1,171 @@
+package org.gvsig.app.extension.logviewer;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+
+public class LogViewerView extends JPanel
+{
+   JTextField txtFilename = new JTextField();
+   JTextArea txtLogContents = new JTextArea();
+   JButton btnClose = new JButton();
+   JButton btnUpdate = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public LogViewerView()
+   {
+      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:12DLU:GROW(1.0),FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:12DLU:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtFilename.setBackground(new Color(236,233,216));
+      txtFilename.setEditable(false);
+      txtFilename.setName("txtFilename");
+      jpanel1.add(txtFilename,cc.xy(2,2));
+
+      txtLogContents.setEditable(false);
+      txtLogContents.setName("txtLogContents");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtLogContents);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      jpanel1.add(createPanel1(),new CellConstraints(2,6,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnClose.setActionCommand("Close");
+      btnClose.setName("btnClose");
+      btnClose.setText("Close");
+      jpanel1.add(btnClose,cc.xy(4,1));
+
+      btnUpdate.setActionCommand("Update");
+      btnUpdate.setName("btnUpdate");
+      btnUpdate.setText("Update");
+      jpanel1.add(btnUpdate,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/logviewer/LogViewerExtension.java	(revision 46118)
@@ -0,0 +1,43 @@
+package org.gvsig.app.extension.logviewer;
+
+import org.gvsig.andami.plugins.Extension;
+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;
+
+
+public class LogViewerExtension extends Extension {
+    
+    
+    public LogViewerExtension() {
+        
+    }
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if( "log-view".equalsIgnoreCase(actionCommand) ) {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+            winmgr.showWindow(
+                    new LogViewer(), 
+                    i18nManager.getTranslation("_Log viewer"),
+                    WindowManager.MODE.WINDOW
+            );
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewPropertiesExtension.java	(revision 46118)
@@ -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.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", "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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/Version.java	(revision 46118)
@@ -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.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() {
+        Version v = ApplicationLocator.getManager().getVersion();
+        if( v == null ) {
+            return null;
+        }
+        return v.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);
+        if( pinfo == null ) {
+            this.version = null;
+        } else {
+            this.version = pinfo.getVersion();
+        }
+        LOG.debug("Loaded version information: {}", getLongFormat());
+    }
+
+    public int getMinor() {
+        if( this.version == null ) {
+            return -1;
+        }
+        return this.version.getMinor();
+    }
+
+    public int getMajor() {
+        if( this.version == null ) {
+            return -1;
+        }
+        return this.version.getMajor();
+    }
+
+    public int getRelease() {
+        if( this.version == null ) {
+            return -1;
+        }
+        return this.version.getRevision();
+    }
+
+    public String getBuildId() {
+        if( this.version == null ) {
+            return null;
+        }
+        return Integer.toString(this.version.getBuild());
+    }
+
+    public String toString() {
+        return getLongFormat();
+    }
+
+    public String getFormat() {
+        return getMajor() + "." + getMinor() + "." + getRelease();
+    }
+
+    public String getLongFormat() {
+        if( this.version == null ) {
+            return null;
+        }
+        return version.toString(); 
+    }
+    
+    public org.gvsig.installer.lib.api.Version asInstallerVersion() {
+        return version;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/AddLayer.java	(revision 46118)
@@ -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.extension;
+
+import java.awt.Component;
+import java.awt.Dimension;
+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.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.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.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.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.util.ArrayUtils;
+
+/**
+ * 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<>();
+        // Anadimos el panel al wizard de cargar capa.
+        AddLayer.addWizard(FilesystemExplorerWizardPanel.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;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        return application.getActiveComponent(ViewDocument.class) != null;
+    }
+
+    @Override
+    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;
+            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());
+            }
+        }
+
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        this.execute(actionCommand, null);
+    }
+
+    @Override
+    public void execute(String command, Object[] args) {
+        List<File> files = ArrayUtils.getListOf(args,0,File.class);
+
+        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);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * Creates FOpenDialog, and adds file tab, and additional registered tabs
+     *
+     * @return FOpenDialog
+     */
+    public static AddLayerDialog createAddLayerDialog(MapControl mapControl, MapContext mapContext, List<File> files) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        AddLayerDialog fopen = new AddLayerDialog();
+        Dimension preferredSize = fopen.getPreferredSize();
+        for (Class<? extends WizardPanel> wpClass : wizardStack) {
+            WizardPanel wp;
+            try {
+                Object[] params = {};
+                wp = wpClass.getConstructor()
+                        .newInstance(params);
+                application.message(
+                        i18nManager.getTranslation("Adding tab...") + wp.getTabName(),
+                        JOptionPane.INFORMATION_MESSAGE
+                );
+                wp.setMapCtrl(mapControl);
+                wp.setMapContext(mapContext);
+                wp.initWizard();
+                if (wp instanceof FilesystemExplorerWizardPanel && files != null && !files.isEmpty()) {
+                    FilesystemExplorerWizardPanel fswp = (FilesystemExplorerWizardPanel) wp;
+                    fswp.addFiles(files);
+                }
+                Dimension dim = wp.getPreferredSize();
+                if( dim.height>preferredSize.height ) {
+                    preferredSize.height = dim.height;
+                }
+                if( dim.width>preferredSize.width ) {
+                    preferredSize.width = dim.width;
+                }
+                fopen.addWizardTab(wp.getTabName(), wp);
+            } catch (Exception e) {
+                logger.warn("Can't create layer open dialog.", e);
+            }
+        }
+        preferredSize.height += ToolsSwingUtils.rows2px(4);
+        preferredSize.width += ToolsSwingUtils.cols2px(2);
+        
+        ToolsSwingUtils.ensureRowsCols(fopen, -1, -1, 30, 100);
+        
+        fopen.setPreferredSize(preferredSize);
+        
+        application.message(null,JOptionPane.INFORMATION_MESSAGE);
+        fopen.updateOkButtonState();
+        return fopen;
+    }
+
+    /**
+     * 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 addLayerDialog = null;
+        try {
+            addLayerDialog = createAddLayerDialog(mapControl, mapContext, files);
+            PluginServices.getMDIManager().addWindow(addLayerDialog);
+
+            if (addLayerDialog.isAccepted()) {
+                if (addLayerDialog.getSelectedTab() instanceof WizardPanel) {
+                    WizardPanel panel = (WizardPanel) addLayerDialog.getSelectedTab();
+                    panel.executeWizard();
+                    return true;
+                } else {
+                    JOptionPane.showMessageDialog((Component) PluginServices
+                            .getMainFrame(), PluginServices.getText(this, "ninguna_capa_seleccionada"));
+                }
+            }
+            return false;
+        } finally {
+            DisposeUtils.disposeQuietly(addLayerDialog);
+        }
+    }
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "view-layer-add", this);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/HelpExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/HelpExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/HelpExtension.java	(revision 46118)
@@ -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.awt.Dimension;
+import java.util.Locale;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.LocaleManager;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.plugins.Extension;
+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;
+import org.gvsig.webbrowser.WebBrowserFactory;
+import org.gvsig.webbrowser.WebBrowserPanel;
+
+
+public class HelpExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "help-contents", this);
+        IconThemeHelper.registerIcon("action", "help-search", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        WindowManager winmanager = ToolsSwingLocator.getWindowManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        WebBrowserPanel webbrowser;
+        
+        LocaleManager localeManager = PluginsLocator.getLocaleManager();
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(this);
+        String baseHelpURL = (String) plugin.getPluginProperties().getDynValue("baseHelpURL");        
+        if( !baseHelpURL.endsWith("/") ) {
+            baseHelpURL = baseHelpURL + "/";
+        }
+        
+        Locale locale = localeManager.getCurrentLocale();
+        String localeid = locale.getLanguage();
+        Locale[] localeAlternatives = localeManager.getLocaleAlternatives(locale);
+        if( !ArrayUtils.isEmpty(localeAlternatives) ) {
+            localeid = localeAlternatives[0].getLanguage();
+        }
+        switch( StringUtils.defaultIfEmpty(actionCommand, "").toLowerCase() ) {
+        case "help-contents":
+            webbrowser = WebBrowserFactory.createWebBrowserPanel();
+            webbrowser.asJComponent().setPreferredSize(new Dimension(900,500));
+            webbrowser.setPage(baseHelpURL + localeid +"/build/html/user_manual/2.3/index.html");
+            winmanager.showWindow( 
+                webbrowser.asJComponent(), 
+                i18n.getTranslation("_Help_contents"), 
+                WindowManager.MODE.WINDOW
+            );
+            break;
+        case "help-search":
+            webbrowser = WebBrowserFactory.createWebBrowserPanel();
+            webbrowser.asJComponent().setPreferredSize(new Dimension(900,500));
+            webbrowser.setPage(baseHelpURL + localeid +"/build/html/gvsigsearch_all.html");
+            winmanager.showWindow( 
+                webbrowser.asJComponent(), 
+                i18n.getTranslation("_Help_contents"), 
+                WindowManager.MODE.WINDOW
+            );
+            break;
+        }
+    }
+    
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.java	(revision 46118)
@@ -0,0 +1,238 @@
+package org.gvsig.app.extension.dispose;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+
+
+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();
+   JLabel lblTotalMemory = new JLabel();
+   JLabel lblFreeMemory = new JLabel();
+   JLabel lblMaxMemory = new JLabel();
+   JLabel lblActiveThreads = new JLabel();
+   JLabel lblObjectPendingFinalization = new JLabel();
+
+   /**
+    * 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,CENTER: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:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU: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");
+      messageLabel.setText("Pending ?");
+      messageLabel.setHorizontalAlignment(JLabel.TRAILING);
+      jpanel1.add(messageLabel,new CellConstraints(2,6,1,1,CellConstraints.LEFT,CellConstraints.DEFAULT));
+
+      refreshButton.setActionCommand("Refresh");
+      refreshButton.setName("refreshButton");
+      refreshButton.setText("Refresh");
+      jpanel1.add(refreshButton,cc.xy(3,6));
+
+      splitPanel.setDividerLocation(40);
+      splitPanel.setLastDividerLocation(-1);
+      splitPanel.setName("splitPanel");
+      splitPanel.setOneTouchExpandable(true);
+      splitPanel.setOrientation(0);
+      jpanel1.add(splitPanel,cc.xywh(2,4,8,1));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,8,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,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Total mem.");
+      jlabel1.setToolTipText("Total memory in Kb");
+      jpanel1.add(jlabel1,cc.xy(1,1));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("Free mem.");
+      jpanel1.add(jlabel2,cc.xy(5,1));
+
+      JLabel jlabel3 = new JLabel();
+      jlabel3.setText("Max mem.");
+      jpanel1.add(jlabel3,cc.xy(9,1));
+
+      lblTotalMemory.setName("lblTotalMemory");
+      lblTotalMemory.setText("0");
+      lblTotalMemory.setToolTipText("Total memory in Kb");
+      jpanel1.add(lblTotalMemory,cc.xy(3,1));
+
+      lblFreeMemory.setName("lblFreeMemory");
+      lblFreeMemory.setText("0");
+      lblFreeMemory.setToolTipText("Free memory in Kb");
+      jpanel1.add(lblFreeMemory,cc.xy(7,1));
+
+      lblMaxMemory.setName("lblMaxMemory");
+      lblMaxMemory.setText("0");
+      lblMaxMemory.setToolTipText("Max memory in kb");
+      jpanel1.add(lblMaxMemory,cc.xy(11,1));
+
+      JLabel jlabel4 = new JLabel();
+      jlabel4.setText("Threads");
+      jlabel4.setToolTipText("Active threads");
+      jpanel1.add(jlabel4,cc.xy(13,1));
+
+      lblActiveThreads.setName("lblActiveThreads");
+      lblActiveThreads.setText("0");
+      lblActiveThreads.setToolTipText("Active threads");
+      jpanel1.add(lblActiveThreads,cc.xy(15,1));
+
+      JLabel jlabel5 = new JLabel();
+      jlabel5.setText("O.P.F");
+      jlabel5.setToolTipText("Objects pending finalization count.");
+      jpanel1.add(jlabel5,cc.xy(17,1));
+
+      lblObjectPendingFinalization.setName("lblObjectPendingFinalization");
+      lblObjectPendingFinalization.setText("0");
+      lblObjectPendingFinalization.setToolTipText("Objects pending finalization count.");
+      jpanel1.add(lblObjectPendingFinalization,cc.xy(19,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6,8,10,12,14,16,18 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java	(revision 46118)
@@ -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.
+ */
+/*
+ * AUTHORS (In addition to CIT):
+ * 2009 {}  {{Task}}
+ */
+package org.gvsig.app.extension.dispose;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextPane;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableColumn;
+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.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.util.LabeledValue;
+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);
+
+    @Override
+    public void initialize() {
+        // Nothing to do
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    class DisposablesDoList extends DisposablesDoListLayout {
+
+        private DisposableManager manager;
+        private JTable disposablesTable = null;
+        private JTextPane infoTextArea = null;
+
+        public DisposablesDoList() {
+            manager = ToolsLocator.getDisposableManager();
+            initComponents();
+            SwingUtilities.invokeLater(() -> {
+                refreshList();
+                updateMemoryUsage();
+            });
+        }
+
+        private void initComponents() {
+            ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+            
+            this.setPreferredSize(new Dimension(600, 550));
+
+            this.disposablesTable = new JTable(new DisposablesTableModel());
+            this.disposablesTable.setAutoCreateColumnsFromModel(false);
+
+            DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
+            columnModel.addColumn(createTableColumn(0, ToolsSwingUtils.cols2px(5), "refs"));
+            columnModel.addColumn(createTableColumn(1, ToolsSwingUtils.cols2px(12), "class"));
+            columnModel.addColumn(createTableColumn(2, ToolsSwingUtils.cols2px(10), "code"));
+            columnModel.addColumn(createTableColumn(3, ToolsSwingUtils.cols2px(12), "fullClass"));
+            columnModel.addColumn(createTableColumn(4, ToolsSwingUtils.cols2px(25), "toString"));
+            this.disposablesTable.setColumnModel(columnModel);
+
+            this.disposablesTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+            ToolsSwingUtils.ensureRows(this.disposablesTable, 10);
+            
+            this.infoTextArea = new JTextPane();
+            this.infoTextArea.setContentType("text/html");
+            toolsSwingManager.setDefaultPopupMenu(
+                    this.infoTextArea, 
+                    "Disposable information"
+            );
+
+            JScrollPane listScroller = new JScrollPane(this.disposablesTable);
+            JScrollPane infoScroller = new JScrollPane(this.infoTextArea);
+            this.splitPanel.setLeftComponent(listScroller);
+            this.splitPanel.setRightComponent(infoScroller);
+            this.splitPanel.setDividerLocation(0.3);
+
+            this.closeButton.addActionListener((ActionEvent arg0) -> {
+                closeWindow();
+            });
+            this.closeButton.setEnabled(true);
+            this.disposeAllButton.addActionListener((ActionEvent e) -> {
+                disposeAll();
+                refreshList();
+                updateMemoryUsage();
+            });
+            this.disposeAllButton.setEnabled(true);
+            this.disposeButton.addActionListener((ActionEvent e) -> {
+                disposeSelecteds();
+                refreshList();
+                updateMemoryUsage();
+            });
+            this.disposeButton.setEnabled(true);
+            this.disposablesTable.getSelectionModel().addListSelectionListener((ListSelectionEvent arg0) -> {
+                ListItemSelected();
+                updateMemoryUsage();
+            });
+            this.disposablesTable.setEnabled(true);
+            this.refreshButton.addActionListener((ActionEvent arg0) -> {
+                refreshList();
+                updateMemoryUsage();
+            });
+            this.refreshButton.setEnabled(true);
+        }
+
+        private TableColumn createTableColumn(int col, int size, String name) {
+            TableColumn tableColumn = new TableColumn(col, size);
+            tableColumn.setHeaderValue(name);
+            return tableColumn;
+        }
+
+        private void refreshList() {
+            fillTable();
+        }
+
+        private void ListItemSelected() {
+            DisposablesTableModel model = (DisposablesTableModel) this.disposablesTable.getModel();
+            DisposableInfo info = model.get(this.disposablesTable.getSelectedRow());
+            if (info == null) {
+                this.infoTextArea.setText("");
+            } else {
+                this.infoTextArea.setText(toHTML(info));
+                this.infoTextArea.setCaretPosition(0);
+            }
+        }
+
+        private void fillTable() {
+            Set<DisposableInfo> disposables = (Set<DisposableInfo>) manager.getBoundDisposables();
+            this.messageLabel.setText("Disposables " + disposables.size());
+
+            this.disposablesTable.setModel(new DisposablesTableModel(new ArrayList<>(disposables)));
+            this.messageLabel.setText("Pending " + disposables.size());
+            this.infoTextArea.setText("");
+        }
+
+        private void updateMemoryUsage() {
+            Runtime rt = Runtime.getRuntime();
+            this.lblTotalMemory.setText(String.valueOf(rt.totalMemory() / 1024));
+            this.lblMaxMemory.setText(String.valueOf(rt.maxMemory() / 1024));
+            this.lblFreeMemory.setText(String.valueOf(rt.freeMemory() / 1024));
+            this.lblActiveThreads.setText(String.valueOf(Thread.activeCount()));
+
+            int objectPendingFinalizationCount = -1;
+            try {
+                MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
+                objectPendingFinalizationCount = memBean.getObjectPendingFinalizationCount();
+            } catch (ThreadDeath th) {
+
+            }
+            this.lblObjectPendingFinalization.setText(String.valueOf(objectPendingFinalizationCount));
+        }
+
+        private class DisposablesTableModel extends AbstractTableModel {
+
+            private List<DisposableInfo> disposables;
+            private final String[] columnNames;
+            private final Class[] columnClass;
+
+            public DisposablesTableModel() {
+                this(Collections.EMPTY_LIST);
+            }
+
+            public DisposablesTableModel(List<DisposableInfo> disposables) {
+                this.disposables = disposables;
+                this.columnNames = new String[]{"Refs.", "Class", "Code", "Full class", "To str."};
+                this.columnClass = new Class[]{Integer.class, String.class, String.class, String.class, String.class};
+            }
+
+            public DisposableInfo get(int rowIndex) {
+                try {
+                    return this.disposables.get(rowIndex);
+                } catch (Throwable th) {
+                    return null;
+                }
+            }
+
+            @Override
+            public int getRowCount() {
+                return this.disposables.size();
+            }
+
+            @Override
+            public int getColumnCount() {
+                return this.columnNames.length;
+            }
+
+            @Override
+            public String getColumnName(int columnIndex) {
+                return this.columnNames[columnIndex];
+            }
+
+            @Override
+            public Class<?> getColumnClass(int columnIndex) {
+                return this.columnClass[columnIndex];
+            }
+
+            @Override
+            public Object getValueAt(int rowIndex, int columnIndex) {
+                DisposableInfo info = this.disposables.get(rowIndex);
+                switch (columnIndex) {
+                    case 0:
+                        return info.getReferencesCount();
+                    case 1:
+                        try {
+                            return info.getDisposable().getClass().getSimpleName();
+                        } catch (Throwable th) {
+                            return "(unknown)";
+                        }
+                    case 2:
+                        try {
+                            return String.format("%x",info.getDisposable().hashCode());
+                        } catch (Throwable th) {
+                            return -1;
+                        }
+                    case 3:
+                        try {
+                            return info.getDisposable().getClass().getName();
+                        } catch (Throwable th) {
+                            return "(unknown)";
+                        }
+                    case 4:
+                        try {
+                            return info.getDisposable().toString();
+                        } catch (Throwable th) {
+                            return "(unknown)";
+                        }
+                }
+                return null;
+            }
+        }
+
+        public String toHTML(DisposableInfo disposableInfo) {
+            StringBuilder buffer = new StringBuilder();
+            Disposable disposable = disposableInfo.getDisposable();
+            int code = disposable.hashCode();
+
+            buffer.append("<b>Class</b>: ").append(disposable.getClass().getSimpleName()).append("<br>\n");
+            buffer.append("<b>Full class</b>: ").append(disposable.getClass().getName()).append("<br>\n");
+            buffer.append("<b>References</b>: ").append(disposableInfo.getReferencesCount()).append("<br>\n");
+            buffer.append(String.format("<b>Code</b>: %x (%d)<br>\n", code,code));
+            buffer.append("<b>toString</b>: ").append(disposable.toString()).append("<br>\n");
+
+            try {
+                List<LabeledValue<StackTraceElement[]>> allStackTraces = disposableInfo.getAllStackTrace();
+                for (int i = 0; i < allStackTraces.size(); i++) {
+                    LabeledValue<StackTraceElement[]> trace = allStackTraces.get(i);
+                    buffer.append("<b>#");
+                    buffer.append(i + 1);
+                    buffer.append(" ");
+                    buffer.append(trace.getLabel());
+                    buffer.append(" from (stack)</b>:<br>\n");
+                    for (StackTraceElement stackTrace1 : trace.getValue()) {
+                        buffer.append("&nbsp;&nbsp;").append(stackTrace1.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() {
+            DisposablesTableModel model = (DisposablesTableModel) this.disposablesTable.getModel();
+            for (int row : this.disposablesTable.getSelectedRows()) {
+                DisposableInfo info = model.get(row);
+                this.manager.release(info.getDisposable());
+            }
+            refreshList();
+        }
+
+        public void showPanel() {
+            WindowManager wm = ToolsSwingLocator.getWindowManager();
+            wm.showWindow(this, "Disposable do list", WindowManager.MODE.WINDOW);
+        }
+
+//        private class ActionListenerImpl implements ActionListener {
+//
+//            public ActionListenerImpl() {
+//            }
+//
+//            @Override
+//            public void actionPerformed(ActionEvent e) {
+//                disposeSelecteds();
+//                refreshList();
+//                updateMemoryUsage();
+//            }
+//        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.xml	(revision 46118)
@@ -0,0 +1,1236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposablesDoListLayout.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,CENTER: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</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">8</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="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="name"></at>
+            <at name="width">1370</at>
+            <at name="text">Disposables do list</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">26</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">6</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="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="actionCommand">Dispose</at>
+            <at name="name">disposeButton</at>
+            <at name="width">83</at>
+            <at name="text">Dispose</at>
+            <at name="enabled">false</at>
+            <at name="height">40</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">9</at>
+           <at name="row">6</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="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="actionCommand">Close</at>
+            <at name="name">closeButton</at>
+            <at name="width">60</at>
+            <at name="text">Close</at>
+            <at name="height">40</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">6</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="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="actionCommand">Dispose all</at>
+            <at name="name">disposeAllButton</at>
+            <at name="width">109</at>
+            <at name="text">Dispose all</at>
+            <at name="height">40</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">6</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">left</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="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="horizontalAlignment">11</at>
+            <at name="name">messageLabel</at>
+            <at name="width">88</at>
+            <at name="text">Pending ?</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">26</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">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="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="actionCommand">Refresh</at>
+            <at name="name">refreshButton</at>
+            <at name="width">81</at>
+            <at name="text">Refresh</at>
+            <at name="height">40</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">8</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.JSplitPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JSplitPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="orientation">0</at>
+            <at name="name">splitPanel</at>
+            <at name="oneTouchExpandable">true</at>
+            <at name="width">1370</at>
+            <at name="minimumDividerLocation">40</at>
+            <at name="lastDividerLocation">-1</at>
+            <at name="maximumDividerLocation">597</at>
+            <at name="dividerLocation">40</at>
+            <at name="height">642</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</at>
+           <at name="colspan">8</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">embedded.1344228425</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name"></at>
+                 <at name="width">99</at>
+                 <at name="text">Total mem.</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Total memory in Kb</at>
+                 <at name="height">26</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">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.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="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="name"></at>
+                 <at name="width">95</at>
+                 <at name="text">Free mem.</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">26</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">9</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.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="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="name"></at>
+                 <at name="width">93</at>
+                 <at name="text">Max mem.</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">26</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">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.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="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="name">lblTotalMemory</at>
+                 <at name="width">12</at>
+                 <at name="text">0</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Total memory in Kb</at>
+                 <at name="height">26</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">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.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="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="name">lblFreeMemory</at>
+                 <at name="width">12</at>
+                 <at name="text">0</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Free memory in Kb</at>
+                 <at name="height">26</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">11</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.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="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="name">lblMaxMemory</at>
+                 <at name="width">12</at>
+                 <at name="text">0</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Max memory in kb</at>
+                 <at name="height">26</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">13</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.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="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="name"></at>
+                 <at name="width">73</at>
+                 <at name="text">Threads</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Active threads</at>
+                 <at name="height">26</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">15</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.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="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="name">lblActiveThreads</at>
+                 <at name="width">12</at>
+                 <at name="text">0</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Active threads</at>
+                 <at name="height">26</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">17</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.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="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="name"></at>
+                 <at name="width">46</at>
+                 <at name="text">O.P.F</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Objects pending finalization count.</at>
+                 <at name="height">26</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">19</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.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="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="name">lblObjectPendingFinalization</at>
+                 <at name="width">12</at>
+                 <at name="text">0</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="toolTipText">Objects pending finalization count.</at>
+                 <at name="height">26</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="19"/>
+            </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>
+     </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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="10"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/RestoreViewInfoExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ViewProjectWindow.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/MetadataPropertiesExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CheckSOAndArquitectureExtension.java	(revision 46118)
@@ -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.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 final Logger logger = LoggerFactory.getLogger(CheckSOAndArquitectureExtension.class);
+
+    @Override
+    public void initialize() {
+        // Do nothing
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        // Do nothing
+
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+
+    @Override
+    public void postInitialize() {
+        PluginsManager pluginManager = PluginsLocator.getManager();
+        pluginManager.addStartupTask("CheckOsAndArquitectre", this, true, 2000);
+    }
+
+    @Override
+    public void run() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        InstallerManager installmgr = InstallerLocator.getInstallerManager();
+        PluginsManager pluginmgr = PluginsLocator.getManager();
+
+        Set<PackageInfo> mismatchs = new HashSet<>();
+        String recommendedArchitecture = installmgr.getArchitecture();
+        try {
+            PackageInfo[] pkgs = installmgr.getInstalledPackages();
+            for (PackageInfo pkg : pkgs) {
+                if( !InstallerManager.ARCH.ALL.equalsIgnoreCase(pkg.getArchitecture()) 
+                    && !installmgr.getArchitecture().equalsIgnoreCase(pkg.getArchitecture())) {
+                    recommendedArchitecture = pkg.getArchitecture();
+                    mismatchs.add(pkg);
+                }
+                if (!InstallerManager.OS.ALL.equalsIgnoreCase(pkg.getOperatingSystemFamily()) && 
+                    !installmgr.getOperatingSystemFamily().equalsIgnoreCase(pkg.getOperatingSystemFamily())) {
+                    mismatchs.add(pkg);
+                }
+            }
+        } catch (Throwable e) {
+            logger.info("Can't get installed packages.", e);
+        }
+        if (mismatchs.isEmpty()) {
+            return;
+        }
+
+        StringBuilder buffer = new StringBuilder();
+        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>gvSIG is running on a platform $(CURRENT_ARCHITECTURE)</p>\n" 
+                + "<br>\n"
+                + "<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 probably need to configure a $(RECOMMENDED_ARCHITECTURE) 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());
+
+        msg = msg.replaceAll("[$][(]RECOMMENDED_ARCHITECTURE[)]", recommendedArchitecture);
+        msg = msg.replaceAll("[%]RECOMMENDED_ARCHITECTURE[%]", recommendedArchitecture);
+        msg = msg.replaceAll("[$]RECOMMENDED_ARCHITECTURE", recommendedArchitecture);
+
+        msg = msg.replaceAll("[$][(]CURRENT_ARCHITECTURE[)]", installmgr.getArchitecture());
+        msg = msg.replaceAll("[%]CURRENT_ARCHITECTURE[%]", installmgr.getArchitecture());
+        msg = msg.replaceAll("[$]CURRENT_ARCHITECTURE", installmgr.getArchitecture());
+        
+        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() {
+                @Override
+                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
+         */
+        @Override
+        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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/PersistenceDevelTool.java	(revision 46118)
@@ -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.app.extension.develtools;
+
+import java.lang.reflect.Method;
+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 java.util.logging.Level;
+
+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.persistence.PersistentState;
+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;
+        }
+
+        boolean hasSaveToState() {
+            try {
+                Method method = theClass.getMethod("saveToState", PersistentState.class);
+                if (method == null) {
+                    return false;
+                }
+            } catch (NoSuchMethodException | SecurityException ex) {
+                return false;
+            }
+            return true;
+        }
+
+        boolean hasLoadFromState() {
+            try {
+                Method method = theClass.getMethod("loadFromState", PersistentState.class);
+                if (method == null) {
+                    return false;
+                }
+            } catch (NoSuchMethodException | SecurityException ex) {
+                return false;
+            }
+            return true;
+        }
+
+        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.");
+                if (!classInfo.hasSaveToState()) {
+                    classBuffer.append("<br>\n    <b>This class doesn't implement saveToState</b>");
+                    warningsCounter++;
+                    warning = true;
+                }
+                if (!classInfo.hasLoadFromState()) {
+                    classBuffer.append("<br>\n    <b>This class doesn't implement loadFromState</b>");
+                    warningsCounter++;
+                    warning = true;
+                }
+            } 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> as container (")
+                                    .append(field.getDataType().getName())
+                                    .append("),  can't has class for value of items.<br>\n    ");
+                            warningsCounter++;
+                            warning = true;
+                        } else {
+                            classBuffer.append("Field ")
+                                    .append(field.getName())
+                                    .append(" as container (")
+                                    .append(field.getDataType().getName())
+                                    .append(") 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(" as object </b> can't has class of value.<br>\n    ");
+                            warningsCounter++;
+                            warning = true;
+                        } else {
+                            classBuffer.append("Field ")
+                                    .append(field.getName()).append(" as object '")
+                                    .append(field.getClassOfValue())
+                                    .append("'.<br>\n    ");
+                            referencedClasses.add(field.getClassOfValue());
+                        }
+                    } else {
+                        classBuffer.append("Field ")
+                                .append(field.getName()).append(" as '")
+                                .append(field.getDataType().getName())
+                                .append("'.<br>\n    ");
+                    }
+                }
+            }
+            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 (manager.getFactories().get(theClass) != null) {
+                continue;
+            }
+            if (Persistent.class.isAssignableFrom(theClass)) {
+              buffer.append("  <li>\n");
+              buffer.append("    <i>").append(theClass.getName())
+                      .append("</i> Persistent without factory<br>\n");
+              buffer.append("  </li>\n");
+            } else {
+              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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/MenusDevelTool.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanel.java	(revision 46118)
@@ -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.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.fmap.dal.EditingNotification;
+import org.gvsig.fmap.dal.EditingNotificationManager;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+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.getAuxData()== null ) {
+            b.append("<b>Layer</b>: (unknow)<br>\n");
+        } else {
+            b.append("<b>Layer</b>: <i>");
+            b.append(((FLayer)(n.getAuxData())).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 = DALSwingLocator.getEditingNotificationManager();
+        editingNotificationManager.addObserver(this);
+    }
+
+    private void stopObservation() {
+        EditingNotificationManager editingNotificationManager = DALSwingLocator.getEditingNotificationManager();
+        editingNotificationManager.deleteObserver(this);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/EditingListenerPanelLayout.form	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/IconThemeDevelTool.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/ActionsInfoDevelTool.java	(revision 46118)
@@ -0,0 +1,316 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.Component;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiFrame.SelectableToolBar;
+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 showToolBars() {
+            ActionInfoManager actionsManager = PluginsLocator.getActionInfoManager();
+            MainFrame mainFrame = ApplicationLocator.getManager().getMainFrame();
+            SelectableToolBar[] toolbars = mainFrame.getToolbars();
+            Arrays.sort(toolbars, new Comparator<SelectableToolBar>() {
+                @Override
+                public int compare(SelectableToolBar o1, SelectableToolBar o2) {
+                    return Integer.compare(o1.getPosition(), o2.getPosition());
+                }
+            });
+            
+            StringBuilder buffer = new StringBuilder();
+
+            buffer.append("<html>\n");
+            buffer.append("<body>\n");
+
+            buffer.append("<div>\n");
+            buffer.append("<h2>Toolbars 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>Name</td>\n");
+            buffer.append("    <td></td>\n");
+            buffer.append("    <td>Plugin</td>\n");
+            buffer.append("  </tr>\n");
+            for (SelectableToolBar toolBar : toolbars) {
+                buffer.append("  <tr valign=\"top\">\n");
+                buffer.append("    <td>")
+                        .append(toolBar.getPosition())
+                        .append("</td>\n");
+                buffer.append("    <td colspan=\"3\"><b>")
+                        .append(toolBar.getName())
+                        .append("</b> - ")
+                        .append(toolBar.getDescription())
+                        .append("</td>\n");
+                buffer.append("  </tr>\n");
+                Component item;;
+                for( int i=0; (item=toolBar.getComponentAtIndex(i))!=null; i++) {
+                    String name = item.getName();
+                    ActionInfo action = null;
+                    if( name!=null ) {
+                        action = actionsManager.getAction(name);
+                    }
+                    buffer.append("  <tr valign=\"top\">\n");
+                    buffer.append("    <td></td>\n");
+                    buffer.append("    <td>");
+                    buffer.append(name);
+                    buffer.append("    </td>\n");
+                    if( action!=null ) {
+                        buffer.append("    <td>");
+                        buffer.append(action.getPosition());
+                        buffer.append("</td>\n");            
+                        buffer.append("    <td>");
+                        buffer.append(action.getPluginName());
+                        buffer.append("</td>\n");            
+                    } else {
+                        buffer.append("    <td></td>\n");            
+                        buffer.append("    <td></td>\n");            
+                    }
+                    buffer.append("  </tr>\n");
+                }
+            }
+            buffer.append("</table>\n");
+            buffer.append("</div>\n");
+            buffer.append("</body>\n");
+            buffer.append("</html>\n");
+
+            String html = buffer.toString();
+            InfoPanel.save2file("toolbars-report", html);
+            InfoPanel.showPanel("Toolbars report", 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/develtools/InfoPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/PaletteViewInfoExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java	(revision 46118)
@@ -0,0 +1,914 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.geom.AffineTransform;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.prefs.Preferences;
+import java.util.zip.ZipFile;
+
+import javax.swing.JOptionPane;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.FilenameUtils;
+
+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.PluginsManager;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+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.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.gui.ProjectPreviewPanel;
+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.gui.projectpanel.ProjectDocumentsPanelPageFactory;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.filedialogchooser.FileDialogChooser;
+import org.gvsig.filedialogchooser.FileDialogChooserManager;
+import org.gvsig.gui.beans.swing.JFileChooser;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.util.ToolsUtilLocator;
+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.
+ *
+ */
+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 final List<BeforeSavingListener> beforeSavingListeners;
+
+    private final List<AfterSavingListener> afterSavingListeners;
+
+    public ProjectExtension() {
+        this.afterSavingListeners = new ArrayList<>();
+        this.beforeSavingListeners = new ArrayList<>();
+    }
+
+    @Override
+    public void initialize() {
+        initializeDocumentActionsExtensionPoint();
+        registerDocuments();
+        registerIcons();
+
+        PropertiesPageManager propertiesManager = ToolsUtilLocator.getPropertiesPageManager();
+        propertiesManager.registerFactory(new ProjectDocumentsPanelPageFactory());
+
+        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 final File projectFile;
+
+        public OpenInitialProjectTask(File projectFile) {
+            this.projectFile = projectFile;
+        }
+
+        @Override
+        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.
+     * @param wi
+     */
+    public void showProjectWindow(WindowInfo wi) {
+        seedProjectWindow = wi;
+        showProjectWindow();
+    }
+
+    /**
+     * Guarda el proyecto actual en disco.
+     */
+    private boolean saveProject() {
+        boolean saved;
+        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().setProject(p);
+        }
+        return saved;
+    }
+
+    private boolean saveAsProject(File file) {
+        boolean saved = false;
+
+        if (lastSavePath == null) {
+            lastSavePath = projectPath;
+        }
+
+        if (file == null) {
+            FileDialogChooserManager fileDialogChooserManager = ToolsUtilLocator.getFileDialogChooserManager();
+            FileDialogChooser jfc = fileDialogChooserManager.create(PROJECT_FILE_CHOOSER_ID);
+            if (lastSavePath == null) {
+                jfc.setCurrentDirectory(getPreferredProjectsFolder());
+            } else {
+                jfc.setCurrentDirectory(new File(lastSavePath));
+            }
+            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 = FilenameUtils.getPath(filePath);
+
+        getProjectFrame().setProject(p);
+        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;
+    }
+
+    @Override
+    public void execute(String command) {
+        this.execute(command, null);
+    }
+
+    @Override
+    public void execute(String actionCommand, Object[] args) {
+        switch (actionCommand) {
+            case "application-project-new":
+                if (!askSave()) {
+                    return;
+                }   projectPath = null;
+                PluginServices.getMDIManager().closeAllWindows();
+                setProject(ProjectManager.getInstance().createProject());
+                showProjectWindow();
+                PluginServices.getMainFrame().setTitle(PluginServices.getText(this, "sin_titulo"));
+                break;
+            case "application-project-open":
+                if (!askSave()) {
+                    return;
+                }   setProject(ProjectManager.getInstance().createProject());
+                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) {
+                    FileDialogChooserManager fileDialogChooserManager = ToolsUtilLocator.getFileDialogChooserManager();
+                    FileDialogChooser jfc = fileDialogChooserManager.create(PROJECT_FILE_CHOOSER_ID);
+                    if (lastSavePath == null) {
+                        jfc.setCurrentDirectory(getPreferredProjectsFolder());
+                    } else {
+                        jfc.setCurrentDirectory(new File(lastSavePath));
+                    }
+                    ProjectPreviewPanel preview = new ProjectPreviewPanel();
+                    jfc.setAccessory(preview);
+                    jfc.addPropertyChangeListener(preview);
+                    
+                    GenericFileFilter projExtensionFilter
+                            = new GenericFileFilter(Project.FILE_EXTENSION, PluginServices.getText(this, "tipo_fichero_proyecto"));
+                    jfc.addChoosableFileFilter(projExtensionFilter);
+                    GenericFileFilter bakExtensionFilter
+                            = new GenericFileFilter(Project.FILE_BAK, PluginServices.getText(this, "tipo_fichero_proyecto_bak"));
+                    jfc.addChoosableFileFilter(bakExtensionFilter);
+                    jfc.setFileFilter(projExtensionFilter);
+                    
+                    if (jfc.showOpenDialog((Component) PluginServices.getMainFrame()) != JFileChooser.APPROVE_OPTION) {
+                        return;
+                    }
+                    projectFile = jfc.getSelectedFile();
+                }   PluginServices.getMDIManager().closeAllWindows();
+                Project o = readProject(projectFile);
+                if ("bak".equals(FilenameUtils.getExtension(projectFile.getAbsolutePath()))) {
+                    setPath(null);
+                } else {
+                    setPath(projectFile.getAbsolutePath());
+                }   // lastPath = getPath();
+                if (o != null) {
+                    setProject(o);
+                }   getProjectFrame().setProject(p);
+                PluginServices.getMainFrame().setTitle(projectFile.getName());
+                
+                break;
+            case "application-project-save":
+                // saveProject();
+                try {
+                    Launcher.manageUnsavedData("there_are_unsaved_resources");
+                } catch (Exception e) {
+                    LOG.warn("Can't manage unsaved data", e);
+                }   break;
+            case "application-project-save-as":
+                File file = (File) ArrayUtils.get(args, 0, DataTypes.FILE);
+                saveAsProject(file);
+                break;
+            default:
+                break;
+        }
+
+    }
+
+    private File getPreferredProjectsFolder() throws LocatorException {
+        Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        String v;
+        
+        v = prefs.get(InitializeApplicationExtension.PROJECTS_FOLDER_PROPERTY_NAME, folderManager.getHome().getAbsolutePath());
+        return new File(v);
+    }
+
+    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();
+    }
+
+    @Override
+    public void postInitialize() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        pluginsManager.addStartupTask("createEmptyProject", () -> {
+            createEmptyProject();
+        },
+                true,
+                1000
+        );
+    }
+
+    /**
+     * Escribe el proyecto en XML.
+     *
+     * @param file Fichero.
+     * @param p Proyecto.
+     * @return 
+     */
+    public boolean writeProject(File file, Project p) {
+        return writeProject(file, p, true);
+    }
+
+    /**
+     * Escribe el proyecto en disco. Pero permite decidir si se pide
+     * confirmaci�n para sobreescribir
+     *
+     * @param file Fichero.
+     * @param p Proyecto.
+     * @param askConfirmation boolean
+     * @return
+     */
+    public boolean writeProject(File file, Project p, boolean askConfirmation) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        if (askConfirmation && file.exists()) {
+            int resp = application.confirmDialog(
+                    i18n.getTranslation("fichero_ya_existe_seguro_desea_guardarlo"),
+                    i18n.getTranslation("guardar"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    "Overwrite_project_file"
+            );
+            if (resp != JOptionPane.YES_OPTION) {
+                return false;
+            }
+        }
+        LOG.info("Writing project '" + file.getAbsolutePath() + "'.");
+        try {
+            fireBeforeSavingFileEvent(new SaveEvent(this, SaveEvent.BEFORE_SAVING, file));
+            BufferedImage img = ApplicationLocator.getManager().getUIManager().getImagePreview();
+            img = scale(img, 0.40);
+            p.saveState(file, img);
+
+            PluginServices.getMainFrame().setTitle(file.getName());
+            setPath(file.toString());
+
+        } catch (LocatorException e) {
+            application.messageDialog(
+                    i18n.getTranslation("_Problems_saving_the_project_XnlX_It_is_possible_that_this_was_not_saved_properly_and_can_not_be_loaded_again"),
+                    null,
+                    i18n.getTranslation("guardar"),
+                    JOptionPane.ERROR_MESSAGE,
+                    "Problems_saving_the_project"
+            );
+            LOG.warn("Error writing project '" + file.getAbsolutePath() + "'.", e);
+            return false;
+        }
+        LOG.warn("Wrote project '" + file.getAbsolutePath() + "'.");
+        return true;
+    }
+
+    boolean isValidZIP(final File file) {
+        ZipFile zipfile = null;
+        try {
+            zipfile = new ZipFile(file);
+            return true;
+        } catch (IOException e) {
+            return false;
+        } finally {
+            try {
+                if (zipfile != null) {
+                    zipfile.close();
+                }
+            } catch (IOException e) {
+            }
+        }
+    }
+
+    private BufferedImage scale(BufferedImage before, double factor) {
+        int w = (int) (before.getWidth() * factor);
+        int h = (int) (before.getHeight() * factor);
+        BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+        AffineTransform at = new AffineTransform();
+        at.scale(factor, factor);
+        AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
+        after = scaleOp.filter(before, after);
+        return after;
+    }
+
+    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);
+        Set<String> unloadedObjects = project.getUnloadedObjects();
+        List<Exception> errors = project.getLoadErrors();
+
+        if (!CollectionUtils.isEmpty(unloadedObjects)) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("Unloaded elements loading the project:\n");
+            Iterator<String> it = unloadedObjects.iterator();
+            while (it.hasNext()) {
+                builder.append("\t");
+                builder.append(it.next());
+                builder.append("\n");
+            }
+
+            LOG.warn(builder.toString());
+        }
+        if (!CollectionUtils.isEmpty(unloadedObjects) || !CollectionUtils.isEmpty(errors)) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+            application.messageDialog(
+                    i18nManager.getTranslation("_some_project_elements_could_not_be_loaded") + "\n"
+                    + i18nManager.getTranslation("_maybe_you_need_to_install_any_plugins") + "\n"
+                    + i18nManager.getTranslation("_Recovered_data_may_be_corrupted") + "\n\n"
+                    + i18nManager.getTranslation("_see_error_log_for_more_information"),
+                    i18nManager.getTranslation("warning"),
+                    JOptionPane.WARNING_MESSAGE);
+
+        } else {
+
+        }
+        return (Project) project;
+    }
+
+    /**
+     * Devuelve el proyecto.
+     *
+     * @return Proyecto.
+     */
+    public Project getProject() {
+        return p;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
+     */
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * @see org.gvsig.andami.plugins.IExtension#isVisible()
+     */
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    /**
+     * Sets the project
+     *
+     * @param p
+     */
+    public void setProject(Project p) {
+        this.p = p;
+        getProjectFrame().setProject(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();
+    }
+
+    @Override
+    public IExtensionStatus getStatus() {
+        return this;
+    }
+
+    @Override
+    public boolean hasUnsavedData() {
+        return p.hasChanged();
+    }
+
+    @Override
+    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);
+        }
+
+        @Override
+        public String getDescription() {
+            if (getPath() == null) {
+                return PluginServices.getText(ProjectExtension.this,
+                        "Unnamed_new_gvsig_project_");
+            } else {
+                return PluginServices.getText(ProjectExtension.this,
+                        "Modified_project_");
+            }
+        }
+
+        @Override
+        public String getResourceName() {
+            if (getPath() == null) {
+                return PluginServices.getText(ProjectExtension.this, "_Project_not_saved");
+            } else {
+                return getPath();
+            }
+
+        }
+
+        @Override
+        public boolean saveData() {
+            return saveProject();
+        }
+
+        @Override
+        public String getIcon() {
+            return "project-icon";
+        }
+    }
+
+    @Override
+    public IMonitorableTask[] getRunningProcesses() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SearchByAttributesExtension.java	(revision 46118)
@@ -0,0 +1,190 @@
+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.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.IView;
+import org.gvsig.expressionevaluator.Expression;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+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.threadsafedialogs.ThreadSafeDialogsManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class SearchByAttributesExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "search-by-attributes-layer", this);   
+        IconThemeHelper.registerIcon("action", "filter-by-attributes-layer", this);
+    }
+
+    @Override
+    public void postInitialize() {
+        ProjectManager projectManager = ProjectManager.getInstance();
+    	ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
+        viewManager.addTOCContextAction("search-by-attributes-layer", "group2", 20, 10);
+        viewManager.addTOCContextAction("filter-by-attributes-layer", "group2", 20, 11);
+    }
+    
+    
+
+    @Override
+    public void execute(String actionCommand) {
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        if ("search-by-attributes-layer".equals(actionCommand)) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+            WindowManager winManager = ToolsSwingLocator.getWindowManager();
+            
+            ViewDocument document = view.getViewDocument();
+
+            FLayer layer = document.getMapContext().getLayers().getActives()[0];
+            String title = i18n.getTranslation("search")+ ": " + layer.getName();
+            FeatureStore featureStore = ((FLyrVect) layer).getFeatureStore();
+            
+            try {
+                FeatureType type = featureStore.getDefaultFeatureType();
+                if( ! type.supportReferences() ) {
+                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
+                    dialogs.messageDialog(
+                           i18n.getTranslation("_The_table_has_no_primary_key_or_OID") +"\n" +
+                                   i18n.getTranslation("_Many_features_selection_deletion_modification_will_not_be_available_as_they_require_it_for_proper_operation"),
+                           null, 
+                           i18n.getTranslation("_Warning"),
+                            JOptionPane.WARNING_MESSAGE, 
+                           "TableDoNotSupportReferences"
+                   );
+                }
+            } catch (Exception ex) {
+                logger.debug("Error in search by attributes leyer.",ex);
+            }
+            
+            FeatureStoreSearchPanel panel = dataSwingManager.createFeatureStoreSearchPanel(featureStore);
+            winManager.showWindow(
+                    panel.asJComponent(), 
+                    title, 
+                    WindowManager.MODE.WINDOW
+            );
+            
+        }else if ("filter-by-attributes-layer".equals(actionCommand)) {
+            doFilter(); 
+        }
+        
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    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();
+    }
+    
+    private void doFilter(){ 
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+        IView view = (IView) application.getActiveComponent(ViewDocument.class);
+        if (view == null) {
+            return;
+        }
+        ViewDocument document = view.getViewDocument();
+        FLyrVect layer = (FLyrVect) document.getMapContext().getLayers().getActives()[0];
+
+        String title = i18n.getTranslation("Filter")+ ": " + layer.getName();
+        FeatureStore featureStore = ((FLyrVect) layer).getFeatureStore();
+        
+        FeatureStoreSearchPanel builderPanel = dataSwingManager.createFeatureStoreSearchPanel(featureStore);
+        
+        try{
+          builderPanel.setFilterOnlyMode(true);
+        }catch (Exception ex) {
+          return;
+        }
+  
+        Dialog dialog = winManager.createDialog(
+                builderPanel.asJComponent(),
+                title,
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+  
+        dialog.show(WindowManager.MODE.DIALOG);
+
+        if (dialog.getAction() == WindowManager_v2.BUTTONS_OK){
+//    # Si se cerro el dialogo con el boton OK, recogemos
+//    # el filtro y lo aplicacmos a la capa.
+//    #
+//    # Recogemos los parametros de la ficha de busqueda,
+//    # y extraemos del query el filtro que ha introducido
+//    # el usuario (la ficha de busqueda tiene mas parametros,
+//    # que aqui no nos interesan).
+            SearchParameters params = builderPanel.fetch(null);
+            FeatureQuery query = params.getQuery().getCopy();
+            FeatureQuery layerQuery = null;
+            if (query != null){
+                Expression expFilter = query.getExpressionFilter();
+                if (expFilter != null && !expFilter.isEmpty()){
+                    if( layerQuery==null ) {
+                        layerQuery = featureStore.createFeatureQuery();
+                    }
+                    layerQuery.addFilter(expFilter);
+                    layerQuery.retrievesAllAttributes();
+                }
+                if( query.hasOrder() ) {
+                    if( layerQuery==null ) {
+                        layerQuery = featureStore.createFeatureQuery();
+                    }
+                    layerQuery.getOrder().copyFrom(query.getOrder());
+                }
+                if( layerQuery==null ) {
+//                  # Si el usuario pulso en OK sin haber introducido un filtro quitamos
+//                  # el filtro que pudiese tener la capa.
+                    layer.setBaseQuery(null);
+                } else {
+                    layer.setBaseQuery(layerQuery);
+                }
+//              # Por ultimo forzamos un repintado de la vista.
+            }
+        }
+        layer.getMapContext().invalidate();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CreateSpatialIndexExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CreateSpatialIndexExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/CreateSpatialIndexExtension.java	(revision 46118)
@@ -0,0 +1,125 @@
+
+package org.gvsig.app.extension;
+
+import java.io.File;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.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.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.geom.Geometry;
+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.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.service.Service;
+import org.gvsig.tools.service.ServiceException;
+import org.gvsig.tools.util.HasAFile;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
+
+
+public class CreateSpatialIndexExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if( "layer-create-spatialindex".equalsIgnoreCase(actionCommand) ) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+            if( view ==null ) {
+                return;
+            }
+            FLayer[] layers = view.getMapContext().getLayers().getActives();
+            if( !ArrayUtils.isEmpty(layers) ) {
+                for( FLayer layer : layers ) {
+                    if( layer instanceof FLyrVect ) {
+                        FeatureStore store = ((FLyrVect) layer).getFeatureStore();
+                        DataStoreParameters params = store.getParameters();
+                        if( params instanceof HasAFile) {
+                            createSpatialIndex(store);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( view ==null ) {
+            return false;
+        }
+        FLayer[] layers = view.getMapContext().getLayers().getActives();
+        if( !ArrayUtils.isEmpty(layers) ) {
+            for( FLayer layer : layers ) {
+                if( layer instanceof FLyrVect ) {
+                    DataStoreParameters params = ((FLyrVect) layer).getFeatureStore().getParameters();
+                    if( params instanceof HasAFile) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( view ==null ) {
+            return false;
+        }
+        return view.getMapContext().hasVectorLayers();
+    }
+
+    private void createSpatialIndex(FeatureStore store) {
+
+        try {
+            HasAFile storeParams = (HasAFile) store.getParameters();
+            File f = new File(FilenameUtils.removeExtension(storeParams.getFile().getAbsolutePath()) + ".jqt");
+
+            GeometryManager geomManager = GeometryLocator.getGeometryManager();
+            DynObject indexParams = geomManager.createServiceParameters(geomManager.SPATIALINDEX_DEFAULT_QUADTREE);
+            ((HasAFile)indexParams).setFile(f);
+            final SpatialIndex index = store.wrapSpatialIndex(geomManager.createSpatialIndex(geomManager.SPATIALINDEX_DEFAULT_QUADTREE, indexParams));
+
+            store.accept(new Visitor() {
+                @Override
+                public void visit(Object o) throws VisitCanceledException, BaseException {
+                    Feature f = (Feature) o;
+                    Geometry g = f.getDefaultGeometry();
+                    index.insert(g,f);
+                }
+            });
+
+        } catch (Exception ex) {
+        }
+
+
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/BrowseSymbolsExtension.java	(revision 46118)
@@ -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.344/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


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/loaders/PanelGroupLoaderFromExtensionPoint.java	(revision 46118)
@@ -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.panelGroup.loaders;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+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);
+			}
+		}
+		Collections.sort(panels);
+
+		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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/panelGroup/PanelGroupDialog.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStoreParameters.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareLayer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/prepareAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContext.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareContextView_v1.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/prepareAction/PrepareDataStore.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/util/BaseOpenErrorHandler.java	(revision 46118)
@@ -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.util;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.utils.SimpleFileFilter;
+
+public class BaseOpenErrorHandler implements OpenErrorHandler {
+
+    private DataParameters parameters;
+
+    public BaseOpenErrorHandler() {
+        parameters = null;
+
+    }
+
+    public boolean canRetryOpen(Exception e, DataParameters parameters) {
+        this.parameters = parameters;
+        boolean retry = false;
+
+        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")) {
+                File searchedDBFFile = (File) this.parameters.getDynValue("dbfFile");
+                if (searchedDBFFile != null && !searchedDBFFile.exists()) {
+                    File possibleDbfFile = null;
+                    if (file != null) {
+                        possibleDbfFile = findFile(file, "dbf");
+                    }
+                    if (possibleDbfFile != null && possibleDbfFile.exists()) {
+                        this.parameters.setDynValue("dbfFile", possibleDbfFile);
+                        retry = true;
+                    } else {
+                        File dbfFile = chooseAlternateFile(searchedDBFFile);
+                        if (dbfFile != null) {
+                            this.parameters.setDynValue("dbfFile", dbfFile);
+                            retry = true;
+                        } else {
+                            return false;
+                        }
+                    }
+                }
+                File searchedSHXFile = (File) this.parameters.getDynValue("shxfile");;
+                if (searchedDBFFile != null && !searchedSHXFile.exists()) {
+                    File possibleShxFile = null;
+                    if (file != null) {
+                        possibleShxFile = findFile(file, "shx");
+                    }
+                    if (possibleShxFile != null && possibleShxFile.exists()) {
+                        this.parameters.setDynValue("shxfile", possibleShxFile);
+                        retry = true;
+                    } else {
+                        File shxFile = chooseAlternateFile(searchedSHXFile);
+                        if (shxFile != null) {
+                            this.parameters.setDynValue("shxfile", shxFile);
+                            retry = true;
+                        } else {
+                            return false;
+                        }
+                    }
+                }
+            }
+        }
+        return retry;
+    }
+
+    private File chooseAlternateFile(File searchedFile) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        int resp = application.confirmDialog(
+                i18nManager.getTranslation("dont_find_the_file") + "\n"
+                + searchedFile.getName() + "\n"
+                + i18nManager.getTranslation("do_you_want_to_locate_the_file"),
+                i18nManager.getTranslation("dont_find_the_file"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.QUESTION_MESSAGE,
+                "File not found when open data source"
+        );
+        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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/ApplicationManager.java	(revision 46118)
@@ -0,0 +1,352 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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 javax.swing.tree.TreeModel;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.about.AboutManager;
+import org.gvsig.andami.Arguments;
+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.dal.feature.FeatureStore;
+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.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.tools.util.GetItemByKey;
+import org.gvsig.tools.util.PropertiesSupport;
+
+
+public interface ApplicationManager 
+        extends ThreadSafeDialogs, PropertiesSupport, GetItemByKey<String, Object>
+    {
+
+    /**
+     * Return the version of the application.
+     * 
+     * @return the version
+     */
+    public Version getVersion() ;
+
+    /**
+     * Close the application.
+     * 
+     * @param quietly
+     */
+    public void close(boolean quietly);
+     
+    /**
+     * 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();
+
+    public FLayer getCurrentLayer();
+    
+    /**
+     * 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 
+	 */
+	public Arguments getArguments();
+	
+	/**
+	 * 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 addSelectableTool(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);
+
+    public TreeModel createProjectLayersTreeModel(); 
+    
+    public TreeModel createProjectStoresTreeModel();
+
+    public void addPropertiesObserver(Observer o);
+
+    public void deletePropertiesObserver(Observer o);
+    
+    public void deletePropertiesObservers();
+
+    public void refreshDocument(FeatureStore store);
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/sqlQueryValidation/SQLQueryValidation.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByTheme.java	(revision 46118)
@@ -0,0 +1,389 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.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.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.utils.swing.JComboBox;
+
+import javax.swing.*;
+
+import java.awt.*;
+import java.util.ArrayList;
+
+public class SelectionByTheme extends JPanel implements IWindow {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -5094042907941800674L;
+
+    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;
+
+    private I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+    public final String[] textosAcciones = new String[] {
+            i18nManager.getTranslation("Sean_iguales_a"), // "sean iguales a",
+            i18nManager.getTranslation("Sean_disjuntos_a"), // "sean disjuntos a",
+            i18nManager.getTranslation("Intersecten_con"), // "intersecten con",
+            i18nManager.getTranslation("Toquen"), // "toquen",
+            i18nManager.getTranslation("Crucen_con"), // "crucen con",
+            i18nManager.getTranslation("Contengan"), // "contengan",
+            i18nManager.getTranslation("Esten_contenidos_en"), // "est�n contenidos en",
+            i18nManager.getTranslation("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 GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+
+        c.fill = GridBagConstraints.BOTH;
+        c.anchor = GridBagConstraints.LINE_START;
+        c.insets = new Insets(3, 10, 3, 10);
+        
+        // Labels and Comboboxes
+        c.weightx = 1;
+
+        c.gridx = 0;
+        c.gridy = 0;
+        this.add(getJLabel(), c);
+
+        c.gridy = 1;
+        this.add(getCmbAction(), c);
+
+        c.gridy = 2;
+        this.add(getJLabel1(), c);
+
+        c.gridy = 3;
+        this.add(getCmbCapas(), c);
+        
+
+        // Buttons
+        c.weightx = 0;
+        c.gridx = 1;
+        
+        c.gridy = 0;
+        this.add(getBtnNew(), c);
+
+        c.gridy = 1;
+        this.add(getBtnAdd(), c);
+
+        c.gridy = 2;
+        this.add(getBtnFrom(), c);
+
+        c.gridy = 3;
+        this.add(getBtnCancel(), c);
+        
+
+        this.setSize(540, 95);
+    }
+
+    /**
+     * This method initializes jLabel
+     *
+     * @return JLabel
+     */
+    private JLabel getJLabel() {
+        if (jLabel == null) {
+            jLabel = new JLabel();
+            jLabel.setText(i18nManager
+                    .getTranslation("Seleccionar_de_las_capas_activas_los_elementos_que"));
+            jLabel.setVerticalAlignment(SwingConstants.BOTTOM);
+            jLabel.setToolTipText(i18nManager.getTranslation("select_from_the_active_layers"));
+        }
+        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(i18nManager.getTranslation("Elementos_seleccionados_de_la_capa").concat(":"));
+            jLabel1.setVerticalAlignment(SwingConstants.BOTTOM);
+            jLabel1.setToolTipText(i18nManager.getTranslation("layer_to_which_belong_the_elements_selected_previously"));
+        }
+        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(i18nManager.getTranslation("_New_selection"));
+            btnNew.setMargin(new java.awt.Insets(3, 3, 3, 3));
+            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(i18nManager.getTranslation("_Add_to_selection"));
+            btnAdd.setMargin(new java.awt.Insets(3, 3, 3, 3));
+            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(i18nManager
+                    .getTranslation("_Intersect_with_selection"));
+            btnFrom.setMargin(new java.awt.Insets(3, 3, 3, 3));
+            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(i18nManager.getTranslation("_Close"));
+            btnCancel.setMargin(new java.awt.Insets(3, 3, 3, 3));
+            btnCancel.addActionListener((java.awt.event.ActionEvent e) -> {
+                this.setVisible(false);
+            });
+        }
+        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());
+        vi.setHeight(this.getHeight());
+        vi.setTitle(i18nManager.getTranslation("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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/DefaultSelectionByThemeModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/SelectionByThemeListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/selectionByTheme/MySelectionByThemeListener.java	(revision 46118)
@@ -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.app.gui.selectionByTheme;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.messages.NotificationManager;
+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.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.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontext.layers.vectorial.SpatialEvaluatorsFactory;
+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;
+
+public class MySelectionByThemeListener implements SelectionByThemeListener {
+
+    @Override
+    public void newSet(FLayer[] layersToSelect, FLayer selectionLayer, int action) {
+        if (selectionLayer instanceof FLyrVect) {
+            try {
+                FeatureSelection selection = ((FLyrVect) selectionLayer).getFeatureStore().getFeatureSelection();
+                SelectByTheme filter = new SelectByTheme(
+                        selection,
+                        selectionLayer.getMapContext().getProjection(),
+                        action
+                );
+
+                for (FLayer layerToSelect : layersToSelect) {
+                    if (layerToSelect instanceof FLyrVect) {
+                        FeatureStore storeToQuery = ((FLyrVect) layerToSelect).getFeatureStore();
+                        FeatureQuery fQuery = storeToQuery.createFeatureQuery();
+                        filter.setData(storeToQuery, null);
+                        fQuery.setFilter(filter);
+                        FeatureSet featureSet = null;
+                        try {
+                            featureSet = storeToQuery.getFeatureSet(fQuery);
+                            storeToQuery.getFeatureSelection().deselectAll();
+                            storeToQuery.setSelection(featureSet);
+                        } finally {
+                            DisposeUtils.disposeQuietly(featureSet);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                NotificationManager.addError("error_selection_by_theme", e);
+            }
+        }
+    }
+
+    @Override
+    public void addToSet(FLayer[] layersToSelect, FLayer selectionLayer, int action) {
+        if (selectionLayer instanceof FLyrVect) {
+            try {
+                FeatureSelection selection = ((FLyrVect) selectionLayer).getFeatureStore().getFeatureSelection();
+                SelectByTheme filter = new SelectByTheme(
+                        selection,
+                        selectionLayer.getMapContext().getProjection(),
+                        action
+                );
+
+                for (FLayer layerToSelect : layersToSelect) {
+                    if (layerToSelect instanceof FLyrVect) {
+                        if (!selectionLayer.getFullEnvelope().intersects(layerToSelect.getFullEnvelope())) {
+                            continue;
+                        }
+                        FeatureStore storeToQuery = ((FLyrVect) layerToSelect).getFeatureStore();
+                        FeatureQuery fQuery = storeToQuery.createFeatureQuery();
+                        filter.setData(storeToQuery, 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 {
+                            DisposeUtils.disposeQuietly(newFeatureSet);
+                            DisposeUtils.disposeQuietly(previousFeatureSet);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                NotificationManager.addError("error_selection_by_theme", e);
+            }
+        }
+    }
+
+    @Override
+    public void fromSet(FLayer[] layersToSelect, FLayer selectionLayer, int action) {
+        if (selectionLayer instanceof FLyrVect) {
+            try {
+                FeatureSelection selection = ((FLyrVect) selectionLayer).getFeatureStore().getFeatureSelection();
+                SelectByTheme filter = new SelectByTheme(
+                        selection,
+                        selectionLayer.getMapContext().getProjection(),
+                        action
+                );
+
+                for (FLayer layerToSelect : layersToSelect) {
+                    if (layerToSelect instanceof FLyrVect) {
+                        if (!selectionLayer.getFullEnvelope().intersects(layerToSelect.getFullEnvelope())) {
+                            continue;
+                        }
+                        FeatureStore storeToQuery = ((FLyrVect) layerToSelect).getFeatureStore();
+                        FeatureQuery fQuery = storeToQuery.createFeatureQuery();
+                        filter.setData(
+                                storeToQuery,
+                                (FeatureSelection) storeToQuery.getSelection()
+                        );
+                        fQuery.setFilter(filter);
+                        FeatureSet featureSet = null;
+                        try {
+                            featureSet = storeToQuery.getFeatureSet(fQuery);
+                            storeToQuery.getFeatureSelection().deselectAll();
+                            storeToQuery.setSelection(featureSet);
+                        } finally {
+                            DisposeUtils.disposeQuietly(featureSet);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                NotificationManager.addError("error_selection_by_theme", e);
+            }
+        }
+    }
+
+    class SelectByTheme implements Evaluator {
+
+        private FeatureSelection selection = null;
+        private final IProjection projection;
+        private FeatureStore store;
+        private String geomName;
+        private EvaluatorFieldsInfo info;
+        private FeatureSelection featureSelection;
+        private final int action;
+
+        
+        public SelectByTheme(
+                FeatureSelection selection,
+                IProjection projection,
+                int action
+        ) {
+            this.selection = selection;
+            this.projection = projection;
+            this.action = action;
+        }
+
+        public void setData(
+                FeatureStore store,
+                FeatureSelection featureSelection
+            ) throws DataException {
+            this.store = store;
+            this.geomName = store.getDefaultFeatureType().getDefaultGeometryAttributeName();
+            this.featureSelection = featureSelection;
+            this.info = new EvaluatorFieldsInfo();
+            this.info.addFieldValue(this.geomName);
+        }
+
+        @Override
+        public Object evaluate(EvaluatorData data) throws EvaluatorException {
+            if (featureSelection != null && !featureSelection.isSelected(((Feature) data.getContextValue("feature")))) {
+                return false;
+            }
+            DisposableIterator features = null;
+            try {
+                features = selection.fastIterator();
+
+                while (features.hasNext()) {
+                    Feature feature = (Feature) features.next();
+                    Geometry geometry = feature.getDefaultGeometry();
+                    Evaluator eval;
+                    switch (action) {
+                        case SelectionByTheme.INTERSECTS:
+                            eval = SpatialEvaluatorsFactory.getInstance().intersects(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.CONTAINS:
+                            eval = SpatialEvaluatorsFactory.getInstance().contains(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.CROSSES:
+                            eval = SpatialEvaluatorsFactory.getInstance().crosses(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.DISJOINT:
+                            eval = SpatialEvaluatorsFactory.getInstance().disjoint(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.EQUALS:
+                            eval = SpatialEvaluatorsFactory.getInstance().equals(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.OVERLAPS:
+                            eval = SpatialEvaluatorsFactory.getInstance().overlaps(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.TOUCHES:
+                            eval = SpatialEvaluatorsFactory.getInstance().touches(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                        case SelectionByTheme.WITHIN:
+                            eval = SpatialEvaluatorsFactory.getInstance().within(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+
+                        default:
+                            eval = SpatialEvaluatorsFactory.getInstance().intersects(
+                                    geometry,
+                                    projection,
+                                    store
+                            );
+                            break;
+                    }
+
+                    Boolean evaluate = (Boolean) eval.evaluate(data);
+                    if ( evaluate) {
+                        return evaluate;
+                    }
+                }
+            } catch (DataException e) {
+                NotificationManager.addError("error_selection_by_theme", e);
+            } finally {
+                DisposeUtils.dispose(features);
+            }
+            return false;
+        }
+
+        @Override
+        public String getName() {
+            return "select by theme";
+        }
+
+        @Override
+        public String getSQL() {
+            return null;
+        }
+
+        @Override
+        public String getDescription() {
+            return getName();
+        }
+
+        @Override
+        public EvaluatorFieldsInfo getFieldsInfo() {
+            return info;
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListenerSupport.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/FormatListModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerInfo.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/LayerListModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardData.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/wizards/WizardDataSource.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/MessagePanel.java	(revision 46118)
@@ -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.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) {
+            DynObject data = feature.getAsDynObject();
+            JDynForm form = DynFormLocator.getDynFormManager().createJDynForm(data);
+            form.setLayoutMode(form.USE_TABS);
+            tabs.addTab(i18nManager.getTranslation("_Row_values"), form.asJComponent());
+        }
+
+        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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ILayerPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/FilterDialog.java	(revision 46118)
@@ -0,0 +1,733 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.List;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.swing.JOptionPane;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+
+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.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+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 final List<ExpressionListener> expressionListeners = new ArrayList<>();
+    private final ExceptionHandlingSupport exceptionHandlingSupport = new ExceptionHandlingSupport();
+    private final 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
+     * @param _title
+     */
+    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() {
+
+                    @Override
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        final String expr = getTxtExpression().getText();
+                        if (!validateQuotes(expr) || !validateLike(expr)) {
+                            return;
+                        }
+
+                        PluginServices.backgroundExecution(new Runnable() {
+
+                            @Override
+                            public void run() {
+                                for (ExpressionListener l : expressionListeners) {
+                                    try {
+                                        l.addToSet(expr);
+                                    } catch (DataException e) {
+                                        logger.warn("Can't add expression '"+expr+"' to set.", e);
+                                    }
+                                }
+                            }
+                        });
+                    }
+                });
+
+        // Listener for "btnNuevo"
+        // Adds a new set
+        getBtnNewSet().addActionListener(new java.awt.event.ActionListener() {
+
+            @Override
+            public void actionPerformed(java.awt.event.ActionEvent e) {
+                final String expr = getTxtExpression().getText();
+                if (!validateQuotes(expr) || !validateLike(expr)) {
+                    return;
+                }
+
+                PluginServices.backgroundExecution(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        for (ExpressionListener l : expressionListeners) {
+                            try {
+                                l.newSet(expr);
+                            } catch (DataException e) {
+                                logger.warn("Can't create set with expression '"+expr+"'.", e);
+                            }
+                        }
+                    }
+                });
+            }
+        });
+
+        // Listener for "btnFromSet"
+        // Selects elements from the current filtered selection
+        getBtnFromSet().addActionListener(new java.awt.event.ActionListener() {
+
+            @Override
+            public void actionPerformed(java.awt.event.ActionEvent e) {
+                final String expr = getTxtExpression().getText();
+                if (!validateQuotes(expr) || !validateLike(expr) ) {
+                    return;
+                }
+
+                PluginServices.backgroundExecution(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        for (ExpressionListener l : expressionListeners) {
+                            try {
+                                l.fromSet(expr);
+                            } catch (DataException e) {
+                                logger.warn("Can't create expression '"+expr+"' from set.", e);
+                            }
+                        }
+                    }
+                });
+            }
+        });
+
+        // Listener for "fieldsJTree"
+        getFieldsJTree().addMouseListener(new MouseAdapter() {
+
+            @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:
+                            String s = jtreeRoot.getChildAt(row).toString();
+                            if( !s.matches("[A-Za-z_]+[A-Za-z_0-9]*") ) {
+                                s = "["+s+"]";
+                            }
+                            putSymbol(s);
+                            break;
+                    }
+                }
+            }
+        });
+
+        // Listener for "valuesJList"
+        getValuesJList().addMouseListener(new MouseAdapter() {
+
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+                    Object valor = valuesListModel.getElementAt(getValuesJList()
+                            .getSelectedIndex());
+                    if (valor == null) {
+                        putSymbol("null");
+                    } else if (valor instanceof Date) {
+                        putSymbol("date('" + valor + "')");
+                    } else if (valor instanceof Boolean) {
+                        putSymbol(valor.toString());
+                    } else if (valor instanceof String) {
+                        putSymbol("'" + StringEscapeUtils.escapeSql((String) valor) + "'");
+                        //putSymbol("'" + ((String)valor).replace('\'', '?') + "'");
+                    } else {
+                        putSymbol(StringEscapeUtils.escapeSql(valor.toString()));
+                    }
+                }
+            }
+        });
+    }
+
+    private boolean validateQuotes(String expr) {
+        if ((StringUtils.countMatches(expr, "'") % 2) != 0) {
+            ApplicationManager application = ApplicationLocator.getManager();
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            String msg = i18n.getTranslation("_The_number_of_quotes_is_doubtful_It_could_be_that_some_of_them_should_escape_Do_you_want_to_continue_the_operation_anyway");
+            int resp = application.confirmDialog(
+                    msg,
+                    i18n.getTranslation("_Caution"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    "Doubtless number of quotes in the filter dialog"
+            );
+            if (resp == JOptionPane.NO_OPTION) {
+                return false;
+            }
+        }
+        return true;
+
+    }
+
+    private boolean validateLike(String expr) {
+        if( (expr.toLowerCase().contains("?") || 
+                expr.toLowerCase().contains("%")) && 
+                !expr.toLowerCase().contains("like") ) 
+            {
+            ApplicationManager application = ApplicationLocator.getManager();
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            String msg = i18n.getTranslation("_It_looks_like_youre_using_percent_o_question_and_the_like_operator_is_not_being_used_I_should_probably_keep_the_equal_operator_by_like_Do_you_want_to_continue_anyway");
+            int resp = application.confirmDialog(
+                    msg,
+                    i18n.getTranslation("_Caution"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    "You may need the like operator in the filter dialog"
+            );
+            if (resp == JOptionPane.NO_OPTION) {
+                return false;
+            }
+        }
+        return true;
+
+    }
+    /**
+     * 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.fastIterator();
+            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|WindowInfo.MAXIMIZABLE|WindowInfo.RESIZABLE);
+
+        // 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/filter/ExpressionDataSource.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/TableSorter.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ProjectPreviewPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ProjectPreviewPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/ProjectPreviewPanel.java	(revision 46118)
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2017 gvSIG Association
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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/>.
+ */
+package org.gvsig.app.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import javax.imageio.ImageIO;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProjectPreviewPanel extends JPanel
+        implements PropertyChangeListener {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ProjectPreviewPanel.class);
+    private static final long serialVersionUID = -8314273002829710953L;
+    
+    private int width, height;
+//    private ImageIcon icon;
+    private Image image;
+    private static final int ACCSIZE = 155;
+    private final Color bg;
+    
+    public ProjectPreviewPanel() {
+        setPreferredSize(new Dimension(ACCSIZE, -1));
+        bg = getBackground();
+    }
+    
+    @Override
+    public void propertyChange(PropertyChangeEvent e) {
+        String propertyName = e.getPropertyName();
+        
+        // Make sure we are responding to the right event.
+        if (propertyName.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
+            File selection = (File)e.getNewValue();
+            if (selection == null) {
+                return;
+            }
+            String name = selection.getAbsolutePath();
+            if ( name != null ) {
+                try {
+                    ZipFile zfile = new ZipFile(name);
+                    ZipEntry entry = zfile.getEntry("preview.jpg");
+                    if( entry != null ) {
+                        image = ImageIO.read(zfile.getInputStream(entry));
+                        scaleImage();
+                    } else {
+                        image = null;
+                    }
+                    repaint();
+                } catch(Throwable ex) {
+                    LOG.warn("Can't load project preview. Ignore preview.",ex);
+                }
+            }
+        }
+    }
+    
+    private void scaleImage() {
+        width = image.getWidth(this);
+        height = image.getHeight(this);
+        double ratio = 1.0;
+       
+        /* 
+         * Determine how to scale the image. Since the accessory can expand
+         * vertically make sure we don't go larger than 150 when scaling
+         * vertically.
+         */
+        if (width >= height) {
+            ratio = (double)(ACCSIZE-5) / width;
+            width = ACCSIZE-5;
+            height = (int)(height * ratio);
+        }
+        else {
+            if (getHeight() > 150) {
+                ratio = (double)(ACCSIZE-5) / height;
+                height = ACCSIZE-5;
+                width = (int)(width * ratio);
+            }
+            else {
+                ratio = (double)getHeight() / height;
+                height = getHeight();
+                width = (int)(width * ratio);
+            }
+        }
+                
+        image = image.getScaledInstance(width, height, Image.SCALE_DEFAULT);
+    }
+    
+    @Override
+    public void paintComponent(Graphics g) {
+        g.setColor(bg);
+        
+        /*
+         * If we don't do this, we will end up with garbage from previous
+         * images if they have larger sizes than the one we are currently
+         * drawing. Also, it seems that the file list can paint outside
+         * of its rectangle, and will cause odd behavior if we don't clear
+         * or fill the rectangle for the accessory before drawing. This might
+         * be a bug in JFileChooser.
+         */
+        g.fillRect(0, 0, ACCSIZE, getHeight());
+        if( image != null ) {
+            g.drawImage(image, getWidth() / 2 - width / 2 + 5,
+                    getHeight() / 2 - height / 2, this);
+        }
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/SimpleWizard.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/simpleWizard/WizardPanelWithLogo.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandStackDialog.java	(revision 46118)
@@ -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.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.SwingUtilities;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumn;
+import org.apache.commons.lang3.StringUtils;
+
+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.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
+import org.gvsig.gui.beans.DefaultBean;
+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.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;
+    private String labelModel;
+	/**
+	 * 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;
+	}
+
+        @Override
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.ICONIFIABLE |
+				WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE | WindowInfo.PALETTE);
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                if(StringUtils.isBlank(this.labelModel)){
+                    m_viewinfo.setTitle(i18n.getTranslation("pila_de_comandos"));
+                } else {
+                    m_viewinfo.setTitle(
+                            i18n.getTranslation("pila_de_comandos")+
+                                    " - "+this.labelModel
+                    );
+                }
+		return m_viewinfo;
+	}
+
+	public Object getWindowModel() {
+		return this.undoRedoStack;
+	}
+
+	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();
+
+                                            SwingUtilities.invokeLater(new Runnable() {
+                                                @Override
+                                                public void run() {
+                                                    ViewDocument view = (ViewDocument) ApplicationLocator.getManager().getActiveDocument(ViewManager.TYPENAME);
+                                                    if (view != null) {
+                                                        view.getMapContext().invalidate();
+                                                    }
+                                                }
+                                            }
+                                            );
+
+
+				            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;
+	}
+        
+        public void setLabelModel (String labelModel) {
+            this.labelModel = labelModel;
+        }
+}  

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/ColorRenderer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/command/CommandTableModel.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.xml	(revision 46118)
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">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.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">Conectar automaticamente</at>
+            <at name="name">chkConnectAutomatically</at>
+            <at name="width">796</at>
+            <at name="text">_Automatically_connect_to_a_database_workspace</at>
+            <at name="height">16</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">6</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.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="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="name">cboSelectWorkspace</at>
+            <at name="width">796</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">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">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="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="name">lblSelectWorkspace</at>
+            <at name="width">796</at>
+            <at name="text">_Select_the_workspace_you_want_to_connect</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="8">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePageView.java	(revision 46118)
@@ -0,0 +1,146 @@
+package org.gvsig.app.gui.preferencespage.databaseworkspace;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+
+public abstract class DatabaseWorkspacePageView extends AbstractPreferencePage
+{
+   JCheckBox chkConnectAutomatically = new JCheckBox();
+   JComboBox cboSelectWorkspace = new JComboBox();
+   JLabel lblSelectWorkspace = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public DatabaseWorkspacePageView()
+   {
+      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","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkConnectAutomatically.setActionCommand("Conectar automaticamente");
+      chkConnectAutomatically.setName("chkConnectAutomatically");
+      chkConnectAutomatically.setText("_Automatically_connect_to_a_database_workspace");
+      jpanel1.add(chkConnectAutomatically,cc.xy(2,2));
+
+      cboSelectWorkspace.setName("cboSelectWorkspace");
+      jpanel1.add(cboSelectWorkspace,cc.xy(2,6));
+
+      lblSelectWorkspace.setName("lblSelectWorkspace");
+      lblSelectWorkspace.setText("_Select_the_workspace_you_want_to_connect");
+      jpanel1.add(lblSelectWorkspace,cc.xy(2,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/databaseworkspace/DatabaseWorkspacePage.java	(revision 46118)
@@ -0,0 +1,128 @@
+package org.gvsig.app.gui.preferencespage.databaseworkspace;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+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.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+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.DatabaseWorkspaceManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class DatabaseWorkspacePage extends DatabaseWorkspacePageView implements IPreference {
+
+    //
+    // The class DatabaseWorkspacePage can extend from AbstractPreferencePage, not JPanel,
+    // if recreate it from the GUI builder change te class declaration to:
+    //    public abstract class DatabaseWorkspacePageView extends AbstractPreferencePage
+
+    private final ImageIcon icon;
+    public static String id = DatabaseWorkspacePage.class.getName();
+
+    public DatabaseWorkspacePage() {
+        setParentID("org.gvsig.coreplugin.preferences.general.GeneralPage");
+        icon = IconThemeHelper.getImageIcon("databaseworkspace-preferences");
+        initComponents();
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+    
+    private void initComponents() {
+        this.translateAll();
+    }
+
+    private void translateAll() {
+        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
+
+        manager.translate(this.lblSelectWorkspace);
+        manager.translate(this.chkConnectAutomatically);
+    }
+    
+    @Override
+    public void storeValues() throws StoreException {
+      PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+      PluginServices plugin = pluginManager.getPlugin(this);
+      DynObject preferences = plugin.getPluginProperties();
+
+      preferences.setDynValue("connectAutomaticallyToDatabaseWorkspace", this.chkConnectAutomatically.isSelected());
+      preferences.setDynValue("databaseWorkspaceToConnect",this.cboSelectWorkspace.getSelectedItem());
+    }
+
+    @Override
+    public void setChangesApplied() {
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Databaseworkspace");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+    @Override
+    public void initializeValues() {
+      PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+      DataManager dataManager = DALLocator.getDataManager();
+      
+      DefaultComboBoxModel<String> connectionsModel = new DefaultComboBoxModel<>();
+      DataServerExplorerPool connections = dataManager.getDataServerExplorerPool();
+      for (DataServerExplorerPoolEntry connectionEntry : connections) {
+        DataServerExplorerParameters connection = connectionEntry.getExplorerParameters();
+        DatabaseWorkspaceManager workspaceManager = dataManager.createDatabaseWorkspaceManager(connection);
+        if( workspaceManager.isValid() ) {
+          connectionsModel.addElement(connectionEntry.getName());
+        }
+      }
+      this.cboSelectWorkspace.setModel(connectionsModel);
+      
+      PluginServices plugin = pluginManager.getPlugin(this);
+      DynObject preferences = plugin.getPluginProperties();
+      this.cboSelectWorkspace.setSelectedIndex(-1);
+      this.chkConnectAutomatically.setSelected((Boolean)(preferences.getDynValue("connectAutomaticallyToDatabaseWorkspace")));
+      this.cboSelectWorkspace.setSelectedItem(preferences.getDynValue("databaseWorkspaceToConnect"));
+    }
+
+    @Override
+    public void initializeDefaults() {
+      this.initializeValues();
+      this.chkConnectAutomatically.setSelected(false);
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return this.icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        return true;
+    }
+   
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriverCSVPage.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/LayerOrderPage.java	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.xml	(revision 46118)
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/paco/projects/externals/gvsig-desktop/gvSIG_v2.1/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogRememberView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstRemembers</at>
+            <at name="width">568</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">390</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">2</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">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="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="name">lblTitle</at>
+            <at name="width">570</at>
+            <at name="text">_Remember_responses_from_selected_dialogs</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderView.java	(revision 46118)
@@ -0,0 +1,147 @@
+package org.gvsig.app.gui.preferencespage.dialogreminder;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+
+public abstract class DialogReminderView extends AbstractPreferencePage
+{
+   JList lstRemembers = new JList();
+   JLabel lblTitle = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public DialogReminderView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstRemembers.setName("lstRemembers");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstRemembers);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      lblTitle.setName("lblTitle");
+      lblTitle.setText("_Remember_responses_from_selected_dialogs");
+      jpanel1.add(lblTitle,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dialogreminder/DialogReminderPage.java	(revision 46118)
@@ -0,0 +1,169 @@
+package org.gvsig.app.gui.preferencespage.dialogreminder;
+
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.JListWithCheckbox;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.reminder.DialogReminder;
+import org.gvsig.tools.swing.api.reminder.DialogReminderManager;
+
+
+public class DialogReminderPage extends DialogReminderView implements IPreference {
+
+    private static final long serialVersionUID = 3811078625224506453L;
+    //
+    // The class DialogReminderView can extend from AbstractPreferencePage, not JPanel,
+    // if recreate it from the GUI builder change te class declaration to:
+    //    public abstract class DialogReminderView extends AbstractPreferencePage
+
+    private JListWithCheckbox lstCheckdsRemembers;
+
+    public static String id = DialogReminderPage.class.getName();
+    private ImageIcon icon;
+
+    public DialogReminderPage() {
+        //setParentID(GeneralPage.class.getName());
+        initComponents();
+    }
+
+    private void initComponents() {
+        icon = IconThemeHelper.getImageIcon("dialog-remember-preferences");
+        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+        this.lstCheckdsRemembers = swingManager.createJListWithCheckbox(this.lstRemembers);
+        final ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        checkModel.addListSelectionListener(new ListSelectionListener() {
+
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if( e.getValueIsAdjusting() ) {
+                    return;
+                }
+                int n = e.getFirstIndex();
+                if( n<=lstCheckdsRemembers.getModel().getSize() ) {
+                    return;
+                }
+                ListElement<DialogReminder> element = (ListElement) lstCheckdsRemembers.getModel().getElementAt(n);
+                if( element==null ) {
+                    return;
+                }
+                if( checkModel.isSelectedIndex(n) && !element.getValue().hasValue() ) {
+                    checkModel.removeIndexInterval(n, n);
+                }
+            }
+        });
+        translateAll();
+    }
+
+    private void translateAll() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        this.lblTitle.setText(i18n.getTranslation(this.lblTitle.getText()));
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+
+    @Override
+    public void initializeValues() {
+        DialogReminderManager remembers = ToolsSwingLocator.getDialogReminderManager();
+
+        DefaultListModel model = new DefaultListModel();
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        checkModel.clearSelection();
+        int n=0;
+        for(DialogReminder remember : remembers.reminders() ) {
+            model.addElement(new ListElement<>(remember.getId(), remember));
+            if( remember.hasValue() ) {
+                checkModel.addSelectionInterval(n, n);
+            }
+            n++;
+        }
+        this.lstCheckdsRemembers.setModel(model);
+    }
+
+    @Override
+    public void initializeDefaults() {
+        DialogReminderManager remembers = ToolsSwingLocator.getDialogReminderManager();
+
+        DefaultListModel model = new DefaultListModel();
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        for(DialogReminder remember : remembers.reminders() ) {
+            model.addElement(new ListElement<>(remember.getId(), remember));
+        }
+        this.lstCheckdsRemembers.setModel(model);
+        checkModel.clearSelection();
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Remembered_dialogs");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+
+    @Override
+    public void storeValues() throws StoreException {
+        DialogReminderManager remembers = ToolsSwingLocator.getDialogReminderManager();
+
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        int n=0;
+        for(DialogReminder remember : remembers.reminders() ) {
+            if( ! checkModel.isSelectedIndex(n)  ) {
+                remember.reset();
+            }
+            n++;
+        }
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        DialogReminderManager remembers = ToolsSwingLocator.getDialogReminderManager();
+
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        int n=0;
+        for(DialogReminder remember : remembers.reminders() ) {
+            if( checkModel.isSelectedIndex(n) != remember.hasValue() ) {
+                return true;
+            }
+            n++;
+        }
+        return false;
+    }
+
+    @Override
+    public void setChangesApplied() {
+        // Do nothing
+    }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewBehaviorPage.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPage.java	(revision 46118)
@@ -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.app.gui.preferencespage;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang3.BooleanUtils;
+
+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.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.gui.panels.CRSSelectPanel;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.app.project.ProjectPreferences;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.i18n.Messages;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ * View document configuration page.
+ *
+ * Here the user can establish what settings wants to use by default regarding
+ * to the document View.
+ *
+ */
+public class ViewPage extends ViewPageView implements ChangeListener, ItemListener, IPreference {
+    //
+    // The class ViewPageView can extend from AbstractPreferencePage, not JPanel,
+    // if rereate it from the GUI builder change te class declaration to:
+    //    public abstract class ViewPageView extends AbstractPreferencePage
+
+    private static final long serialVersionUID = 1204688910771374514L;
+
+    public static String id = ViewPage.class.getName();
+
+    private static final IProjection FACTORY_DEFAULT_PROJECTION
+            = MapContextLocator.getMapContextManager().getDefaultCRS();
+
+    private static String[] unitsNames = null;
+    private static String[] areaUnitsNames = null;
+
+    private static final double DEFAULT_ZOOM_IN_FACTOR = 2.0;
+    private static final double DEFAULT_ZOOM_OUT_FACTOR = 1.5;
+    private static final Color FACTORY_DEFAULT_SELECTION_COLOR = Color.YELLOW;
+    private static final Color FACTORY_DEFAULT_VIEW_BACK_COLOR = Color.WHITE;
+    private static int FACTORY_DEFAULT_MAP_UNITS;
+    private static int FACTORY_DEFAULT_DISTANCE_UNITS;
+    private static int FACTORY_DEFAULT_DISTANCE_AREA;
+
+    private final ImageIcon icon;
+
+    private ProjectionController defaultProjection = null;
+    private ColorChooserController defaultViewBackColor = null;
+    private ColorChooserController defaultSelectionColor = null;
+
+    private boolean hasChanges = false;
+
+    private static class ProjectionController implements ActionListener {
+
+        private static final long serialVersionUID = -1442364274073324390L;
+
+        private final JTextField txtLabel;
+        private final JButton btnShowDialog;
+        private IProjection proj = null;
+        private ChangeListener changeListener;
+
+        public ProjectionController(JTextField txtLabel, JButton btnShowDialog) {
+            this.txtLabel = txtLabel;
+            this.btnShowDialog = btnShowDialog;
+
+            this.btnShowDialog.addActionListener(this);
+            this.set(null);
+        }
+
+        public void addChangeListener(ChangeListener changeListener) {
+            this.changeListener = changeListener;
+        }
+
+        public void fireChanged() {
+            if (this.changeListener != null) {
+                this.changeListener.stateChanged(null);
+            }
+        }
+
+        public void set(IProjection proj) {
+            this.proj = proj;
+            if (this.proj == null) {
+                this.txtLabel.setText("");
+            } else {
+                this.txtLabel.setText(proj.getAbrev());
+            }
+        }
+
+        public IProjection get() {
+            return this.proj;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            ISelectCrsPanel panel = CRSSelectPanel.getUIFactory().getSelectCrsPanel(
+                    CRSFactory.getCRS(this.txtLabel.getText()), false);
+            ToolsSwingLocator.getWindowManager().showWindow(
+                    panel.asJComponent(), 
+                    ToolsLocator.getI18nManager().getTranslation("selecciona_sistema_de_referencia"), 
+                    WindowManager.MODE.DIALOG
+            );
+            if (panel.isOkPressed()) {
+                this.set(panel.getProjection());
+                this.fireChanged();
+            }
+        }
+
+    }
+
+    private static class ColorChooserController implements ActionListener, ChangeListener {
+
+        private final JTextField txtLabel;
+        private final JButton btnShowDialog;
+        private final JSlider sldAlpha;
+        private Color color;
+        private boolean allowNull;
+        private ChangeListener changeListener;
+
+        public ColorChooserController(JTextField txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
+            this.txtLabel = txtLabel;
+            this.btnShowDialog = btnShowDialog;
+            this.sldAlpha = sldAlpha;
+            this.btnShowDialog.addActionListener(this);
+            if (this.sldAlpha != null) {
+                this.sldAlpha.addChangeListener(this);
+            }
+            this.allowNull = allowNull;
+            if (!this.allowNull) {
+                this.color = Color.BLACK;
+            }
+        }
+
+        public ColorChooserController(JTextField txtLabel, JButton btnShowDialog) {
+            this(txtLabel, btnShowDialog, null, false);
+        }
+
+        public ColorChooserController(JTextField txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
+            this(txtLabel, btnShowDialog, sldAlpha, false);
+        }
+
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            if (this.color == null) {
+                set(Color.BLACK);
+            }
+            if (this.sldAlpha == null) {
+                this.color = new Color(
+                        color.getRed(),
+                        color.getGreen(),
+                        color.getBlue()
+                );
+            } else {
+                this.color = new Color(
+                        color.getRed(),
+                        color.getGreen(),
+                        color.getBlue(),
+                        this.sldAlpha.getValue()
+                );
+            }
+            this.txtLabel.setBackground(this.color);
+        }
+
+        public void addChangeListener(ChangeListener changeListener) {
+            this.changeListener = changeListener;
+        }
+
+        public void fireChanged() {
+            if (this.changeListener != null) {
+                this.changeListener.stateChanged(null);
+            }
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            Color c = JColorChooser.showDialog(
+                    SwingUtilities.windowForComponent(this.btnShowDialog),
+                    Messages.getText("choose_color"),
+                    this.get()
+            );
+            if (c == null) {
+                return;
+            }
+            set(c);
+        }
+
+        private void set(Color color) {
+            if (color == null) {
+                if (allowNull) {
+                    this.color = null;
+                    return;
+                }
+                color = Color.BLACK;
+            }
+            this.color = color;
+            this.txtLabel.setBackground(this.color);
+            if (this.sldAlpha != null) {
+                this.sldAlpha.setValue(this.color.getAlpha());
+            }
+        }
+
+        public Color get() {
+            return this.color;
+        }
+
+    }
+
+    /**
+     * Creates a new panel containing View preferences settings.
+     *
+     */
+    public ViewPage() {
+        super();
+
+        initUnitsNames();
+
+        icon = IconThemeHelper.getImageIcon("document-view-icon");
+
+        this.chkKeepScaleOnResizing.setEnabled(false);
+        
+        this.defaultProjection = new ProjectionController(
+                this.txtDefaultProjection,
+                this.btnChangeProjection
+        );
+        this.defaultProjection.addChangeListener(this);
+
+        this.defaultSelectionColor = new ColorChooserController(
+                this.txtDefaultSelectionColor,
+                this.btnDefaultSelectionColor,
+                this.sldDefaultSelectionColor
+        );
+        this.defaultSelectionColor.addChangeListener(this);
+
+        this.defaultViewBackColor = new ColorChooserController(
+                this.txtDefaultViewBackColor,
+                this.btnDefaultViewBackColor
+        );
+        this.defaultViewBackColor.addChangeListener(this);
+
+        this.chkInvisibleNewLayers.addChangeListener(this);
+        this.chkKeepScaleOnResizing.addChangeListener(this);
+
+        this.jCmbDistanceArea.addItemListener(this);
+        this.jCmbDistanceUnits.addItemListener(this);
+        this.jCmbMapUnits.addItemListener(this);
+
+        this.translateAll();
+        this.initializeValues();
+    }
+
+    private void translateAll() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        this.lblDefaultProjection.setText(i18n.getTranslation("default_projection"));
+        this.chkInvisibleNewLayers.setText(i18n.getTranslation("options.view.invisible_new_layers"));
+        this.chkKeepScaleOnResizing.setText(i18n.getTranslation("options.view.keep_scale_on_resizing"));
+        this.lblZoomInFactor.setText(i18n.getTranslation("zoom_in_factor"));
+        this.lblZoomOutFactor.setText(i18n.getTranslation("zoom_out_factor"));
+        this.lblDefaultViewBackColor.setText(i18n.getTranslation("options.view.default_view_back_color"));
+        this.lblDefaultSelectionColor.setText(i18n.getTranslation("options.view.default_selection_color"));
+        this.lblMapUnits.setText(i18n.getTranslation("map_units"));
+        this.lblDistanceUnits.setText(i18n.getTranslation("distance_units"));
+        this.lblDistanceArea.setText(i18n.getTranslation("distance_area"));
+        this.chkHideLegendOfNonVisibleLayers.setText(i18n.getTranslation("_Hide_legend_of_non_visible_layers"));
+        this.chkOpenWithANewMaximizedView.setText(i18n.getTranslation("_Open_with_a_new_maximized_view"));
+        this.btnChangeProjection.setText(i18n.getTranslation("_Change"));
+        this.lblAlpha.setText(i18n.getTranslation("Alpha"));
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+
+    @Override
+    public void initializeValues() {
+        Double zif;
+        Double zof;
+
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+        PluginServices plugin = PluginsLocator.getManager().getPlugin(this);
+        DynObject props = plugin.getPluginProperties();
+        XMLEntity xml = plugin.getPersistentXML();
+
+        this.defaultProjection.set(projectPreferences.getDefaultProjection());
+
+        this.chkInvisibleNewLayers.setSelected(projectPreferences.getAddNewLayersInInvisibleMode());
+        this.chkKeepScaleOnResizing.setSelected(projectPreferences.getKeepScaleOnResizing());
+        this.chkOpenWithANewMaximizedView.setSelected(projectPreferences.getOpenWithANewMaximizedView());
+        this.chkHideLegendOfNonVisibleLayers.setSelected(projectPreferences.getHideLegendInToCOfNonVisibleLayers());
+        this.txtZoomInFactor.setModel(
+                new SpinnerNumberModel(
+                        projectPreferences.getZoomInFactor(), //initial value
+                        0.01, //min
+                        1000, //max
+                        0.25 //step
+                )
+        );
+        this.txtZoomOutFactor.setModel(
+                new SpinnerNumberModel(
+                        projectPreferences.getZoomOutFactor(), //initial value
+                        0.01, //min
+                        1000, //max
+                        0.25 //step
+                )
+        );
+        MapContext.ZOOMINFACTOR = projectPreferences.getZoomInFactor();
+        MapContext.ZOOMOUTFACTOR = projectPreferences.getZoomOutFactor();
+
+        this.defaultViewBackColor.set(projectPreferences.getDefaultViewBackColor());
+        this.defaultSelectionColor.set(projectPreferences.getDefaultSelectionColor());
+
+        this.jCmbMapUnits.setModel(new DefaultComboBoxModel(unitsNames));
+        this.jCmbMapUnits.setSelectedIndex(projectPreferences.getDefaultMapUnits());
+
+        this.jCmbDistanceUnits.setModel(new DefaultComboBoxModel(unitsNames));
+        this.jCmbDistanceUnits.setSelectedIndex(projectPreferences.getDefaultDistanceUnits());
+
+        this.jCmbDistanceArea.setModel(new DefaultComboBoxModel(areaUnitsNames));
+        this.jCmbDistanceArea.setSelectedIndex(projectPreferences.getDefaultDistanceArea());
+    }
+
+    @Override
+    public void stateChanged(ChangeEvent e) {
+        this.hasChanges = true;
+    }
+
+    @Override
+    public void itemStateChanged(ItemEvent e) {
+        this.hasChanges = true;
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("Vista");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+    @Override
+    public void storeValues() throws StoreException {
+
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+
+        try {
+            double zif = (double) txtZoomInFactor.getValue();
+            double zof = (double) txtZoomOutFactor.getValue();
+            if (zif == 0 || zof == 0) {
+                throw new NumberFormatException();
+            }
+
+            projectPreferences.setZoomInFactor(zif);
+            projectPreferences.setZoomOutFactor(zof);
+            MapContext.ZOOMINFACTOR = zif;
+            MapContext.ZOOMOUTFACTOR = zof;
+
+            projectPreferences.setDefaultProjection(this.defaultProjection.get());
+            projectPreferences.setDefaultSelectionColor(defaultSelectionColor.get());
+            projectPreferences.setDefaultViewBackColor(defaultViewBackColor.get());
+            projectPreferences.setDefaultOverviewBackColor(defaultViewBackColor.get());
+
+            projectPreferences.setDefaultMapUnits(jCmbMapUnits.getSelectedIndex());
+            projectPreferences.setDefaultDistanceUnits(jCmbDistanceUnits.getSelectedIndex());
+            projectPreferences.setDefaultDistanceArea(jCmbDistanceArea.getSelectedIndex());
+
+            projectPreferences.setAddNewLayersInInvisibleMode(chkInvisibleNewLayers.isSelected());
+            projectPreferences.setKeepScaleOnResizing(chkKeepScaleOnResizing.isSelected());
+            projectPreferences.setOpenWithANewMaximizedView(chkOpenWithANewMaximizedView.isSelected());
+            projectPreferences.setHideLegendInToCOfNonVisibleLayers(this.chkHideLegendOfNonVisibleLayers.isSelected());
+            
+        } catch (Exception e) {
+            throw new StoreException(PluginServices.getText(this, "factor_zoom_incorrecto"));
+        }
+    }
+
+    @Override
+    public void initializeDefaults() {
+        defaultProjection.set(FACTORY_DEFAULT_PROJECTION);
+        txtZoomInFactor.setModel(
+                new SpinnerNumberModel(
+                        DEFAULT_ZOOM_IN_FACTOR, //initial value
+                        1, //min
+                        1000, //max
+                        0.25 //step
+                )
+        );
+        txtZoomOutFactor.setModel(
+                new SpinnerNumberModel(
+                        DEFAULT_ZOOM_OUT_FACTOR, //initial value
+                        1, //min
+                        1000, //max
+                        0.25 //step
+                )
+        );        
+//        txtZoomInFactor.setText(String.valueOf(DEFAULT_ZOOM_IN_FACTOR));
+//        txtZoomOutFactor.setText(String.valueOf(DEFAULT_ZOOM_OUT_FACTOR));
+        this.chkInvisibleNewLayers.setSelected(false);
+        this.chkKeepScaleOnResizing.setSelected(false);
+        this.chkHideLegendOfNonVisibleLayers.setSelected(true);
+        try {
+            this.defaultViewBackColor.set(
+                (Color) UIManager.getLookAndFeel().getDefaults().get("TextField.background")
+            );
+        } catch(Exception es ) {
+            this.defaultViewBackColor.set(FACTORY_DEFAULT_VIEW_BACK_COLOR);
+        }
+        this.defaultSelectionColor.set(FACTORY_DEFAULT_SELECTION_COLOR);
+        this.jCmbMapUnits.setSelectedIndex(FACTORY_DEFAULT_MAP_UNITS);
+        this.jCmbDistanceUnits.setSelectedIndex(FACTORY_DEFAULT_DISTANCE_UNITS);
+        this.jCmbDistanceArea.setSelectedIndex(FACTORY_DEFAULT_DISTANCE_AREA);
+
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        return this.hasChanges;
+    }
+
+    @Override
+    public void setChangesApplied() {
+        this.hasChanges = false;
+    }
+
+    private void initUnitsNames() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        if (unitsNames == null) {
+            String[] names = MapContext.getDistanceNames();
+            unitsNames = new String[names.length];
+            for (int i = 0; i < names.length; i++) {
+                unitsNames[i] = i18n.getTranslation(names[i]);
+                if (names[i].equals("Metros")) {
+                    FACTORY_DEFAULT_DISTANCE_UNITS = i;
+                    FACTORY_DEFAULT_DISTANCE_AREA = i;
+                    FACTORY_DEFAULT_MAP_UNITS = i;
+                }
+            }
+        }
+        if( areaUnitsNames == null ) {
+            String[] names = MapContext.getAreaNames();
+            areaUnitsNames = new String[names.length];
+            for (int i = 0; i < names.length; i++) {
+                areaUnitsNames[i] = i18n.getTranslation(names[i])+MapContext.getOfLinear(i);
+            }
+        }
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/AppSymbolPreferences.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPageView.java.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPageView.java.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPageView.java.xml	(revision 46118)
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPageView.java.xml</at>
+   <at name="rowspecs">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,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:GROW(1.0),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">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">com.jeta.forms.components.border.TitledBorderLabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Color por defecto</at>
+            <at name="height">19</at>
+            <at name="name"/>
+            <at name="width">397</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.FormMemento">
+        <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">3</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">embedded.1931095982</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(0.1),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,LEFT:DEFAULT:GROW(0.1),FILL:DEFAULT:GROW(0.8)</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">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.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">Relleno</at>
+                 <at name="height">14</at>
+                 <at name="name"/>
+                 <at name="width">41</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">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.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">20</at>
+                 <at name="width">12</at>
+                 <at name="name"></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">4</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.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">...</at>
+                 <at name="height">22</at>
+                 <at name="name"/>
+                 <at name="width">44</at>
+                 <at name="actionCommand">...</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">6</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.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">Alpha</at>
+                 <at name="height">14</at>
+                 <at name="name"/>
+                 <at name="width">31</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">7</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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JSlider</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JSlider</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="majorTickSpacing">20</at>
+                 <at name="height">16</at>
+                 <at name="maximum">255</at>
+                 <at name="width">200</at>
+                 <at name="name"></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">8</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.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="height">12</at>
+                 <at name="name"/>
+                 <at name="width">12</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>
+         </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 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="1">
+            <at name="item" index="0">
+             <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>
+     </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 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="20">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="19">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/DriversPages.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/CartographicSupportPage.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.xml	(revision 46118)
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.xml</at>
+   <at name="rowspecs">CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</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">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="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="name">lblAccuracy</at>
+            <at name="width">219</at>
+            <at name="text">Precision comparing decimal numbers</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">2</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">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="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="name">lblDALEvaluator</at>
+            <at name="width">219</at>
+            <at name="text">Default expression evaluator</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">2</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.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="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="name">cboDALEvaluator</at>
+            <at name="width">694</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">4</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.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="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="name">txtAccuracy</at>
+            <at name="width">694</at>
+            <at name="height">20</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALView.java	(revision 46118)
@@ -0,0 +1,153 @@
+package org.gvsig.app.gui.preferencespage.dal;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+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.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+
+public abstract class DALView extends AbstractPreferencePage
+{
+   JLabel lblAccuracy = new JLabel();
+   JLabel lblDALEvaluator = new JLabel();
+   JComboBox cboDALEvaluator = new JComboBox();
+   JTextField txtAccuracy = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public DALView()
+   {
+      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()
+   {
+      I18nManager i18nManager = ToolsLocator.getI18nManager();
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblAccuracy.setName("lblAccuracy");
+      lblAccuracy.setText(i18nManager.getTranslation("_precision_comparing_decimal_numbers"));
+      jpanel1.add(lblAccuracy,cc.xy(2,4));
+
+      lblDALEvaluator.setName("lblDALEvaluator");
+      lblDALEvaluator.setText(i18nManager.getTranslation("_default_expression_evaluator"));
+      jpanel1.add(lblDALEvaluator,cc.xy(2,2));
+
+      cboDALEvaluator.setName("cboDALEvaluator");
+      jpanel1.add(cboDALEvaluator,cc.xy(4,2));
+
+      txtAccuracy.setName("txtAccuracy");
+      jpanel1.add(txtAccuracy,cc.xy(4,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);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/dal/DALPage.java	(revision 46118)
@@ -0,0 +1,114 @@
+package org.gvsig.app.gui.preferencespage.dal;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+
+@SuppressWarnings("UseSpecificCatch")
+public class DALPage extends DALView implements IPreference {
+
+    //
+    // The class DALView can extend from AbstractPreferencePage, not JPanel,
+    // if recreate it from the GUI builder change te class declaration to:
+    //    public abstract class DALView extends AbstractPreferencePage
+
+    private ImageIcon icon;
+    private static final long serialVersionUID = -1592454009494400591L;
+    public static String id = DALPage.class.getName();
+
+    public DALPage() {
+        setParentID("org.gvsig.coreplugin.preferences.general.GeneralPage");
+        icon = IconThemeHelper.getImageIcon("dal-preferences");
+        initComponents();
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+    
+    private void initComponents() {
+//        EvaluatorFactory factory;
+//        
+//        factory = new SQLJEPEvaluatorFactory();
+//        this.cboDALEvaluator.addItem(new ListElement<>(factory.getName(), factory));
+//        factory = DALLocator.getDataManager().createEvaluatorFactory();
+//        this.cboDALEvaluator.addItem(new ListElement<>(factory.getName(), factory));
+//        this.cboDALEvaluator.setSelectedIndex(0);
+        this.cboDALEvaluator.setEnabled(false);
+
+        this.translateAll();
+    }
+
+    private void translateAll() {
+        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
+
+        manager.translate(lblDALEvaluator);
+    }
+    
+    @Override
+    public void storeValues() throws StoreException {
+//        ListElement<EvaluatorFactory> n = (ListElement<EvaluatorFactory>) this.cboDALEvaluator.getSelectedItem();
+//        if( n!=null ) {
+//            DataManager dataManager = DALLocator.getDataManager();
+//            dataManager.registerDefaultEvaluator(n.getValue());
+//        }
+        String s = this.txtAccuracy.getText();
+        if( !StringUtils.isEmpty(s) ) {
+            try {
+                double accuracy = Double.parseDouble(s);
+                ExpressionEvaluatorLocator.getManager().setAccuracy(accuracy);
+            } catch(Exception ex) {
+                throw new StoreException("Incorrect accuracy value.");
+            }
+        }
+    }
+
+    @Override
+    public void setChangesApplied() {
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Data_access_services");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+    @Override
+    public void initializeValues() {
+    }
+
+    @Override
+    public void initializeDefaults() {
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return this.icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        return true;
+    }
+   
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SymbologyPage.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.xml	(revision 46118)
@@ -0,0 +1,2267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</at>
+   <at name="colspecs">FILL:8DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">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">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="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="name">lblDefaultProjection</at>
+            <at name="width">131</at>
+            <at name="text">Default proyection</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">2</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">embedded.2133623846</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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="actionCommand">Change</at>
+                 <at name="name">btnChangeProjection</at>
+                 <at name="width">75</at>
+                 <at name="text">Change</at>
+                 <at name="height">22</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">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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtDefaultProjection</at>
+                 <at name="width">227</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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">6</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">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="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="name">lblZoomInFactor</at>
+            <at name="width">131</at>
+            <at name="text">Zoom in factor</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">4</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">embedded.788152652</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0)</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">1</at>
+                <at name="row">3</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.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Add new layers in invisible mode</at>
+                 <at name="name">chkInvisibleNewLayers</at>
+                 <at name="width">313</at>
+                 <at name="text">Add new layers in invisible mode</at>
+                 <at name="height">16</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">1</at>
+                <at name="row">5</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.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Keep scale on resizing</at>
+                 <at name="name">chkKeepScaleOnResizing</at>
+                 <at name="width">313</at>
+                 <at name="text">Keep scale on resizing</at>
+                 <at name="height">16</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Open with a new maximized  view </at>
+                 <at name="name">chkOpenWithANewMaximizedView</at>
+                 <at name="width">313</at>
+                 <at name="text">Open with a new maximized  view </at>
+                 <at name="height">16</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="5">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="1"/>
+            </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>
+     </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">8</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">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="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="name">lblZoomOutFactor</at>
+            <at name="width">131</at>
+            <at name="text">Zoom out factor</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">10</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">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="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="name">lblDefaultViewBackColor</at>
+            <at name="width">131</at>
+            <at name="text">Default view back color</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">12</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">center</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="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="name">lblDefaultSelectionColor</at>
+            <at name="width">131</at>
+            <at name="text">Default selection color</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblMapUnits</at>
+            <at name="width">131</at>
+            <at name="text">Map units</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">16</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">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="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="name">lblDistanceUnits</at>
+            <at name="width">131</at>
+            <at name="text">Measuring units</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">18</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">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="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="name">lblDistanceArea</at>
+            <at name="width">131</at>
+            <at name="text">Area units</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">14</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.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="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="name">jCmbMapUnits</at>
+            <at name="width">318</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">16</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.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="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="name">jCmbDistanceUnits</at>
+            <at name="width">318</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">18</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.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="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="name">jCmbDistanceArea</at>
+            <at name="width">318</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">10</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">embedded.676643009</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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="actionCommand">...</at>
+                 <at name="name">btnDefaultViewBackColor</at>
+                 <at name="width">44</at>
+                 <at name="text">...</at>
+                 <at name="height">22</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">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.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="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.BevelBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="type">1</at>
+                        <at name="highlightouter">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                        <at name="shadowouter">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                        <at name="shadowinner">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="name">txtDefaultViewBackColor</at>
+                 <at name="width">258</at>
+                 <at name="enabled">false</at>
+                 <at name="height">18</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">12</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">embedded.457298936</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,LEFT:50DLU: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">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.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="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.BevelBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="type">1</at>
+                        <at name="highlightouter">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                        <at name="shadowouter">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                        <at name="shadowinner">
+                         <object classname="com.jeta.forms.store.properties.ColorProperty">
+                          <at name="name">dyncolor</at>
+                          <at name="colorkey">default</at>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="background" object="color">255,255,0</at>
+                 <at name="name">txtDefaultSelectionColor</at>
+                 <at name="width">121</at>
+                 <at name="enabled">false</at>
+                 <at name="height">18</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JSlider</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JSlider</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">sldDefaultSelectionColor</at>
+                 <at name="width">84</at>
+                 <at name="maximum">255</at>
+                 <at name="majorTickSpacing">10</at>
+                 <at name="value">255</at>
+                 <at name="toolTipText">Alpha</at>
+                 <at name="height">16</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">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.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="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="actionCommand">...</at>
+                 <at name="name">btnDefaultSelectionColor</at>
+                 <at name="width">44</at>
+                 <at name="text">...</at>
+                 <at name="height">22</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">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.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="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="name">lblAlpha</at>
+                 <at name="width">31</at>
+                 <at name="text">Alpha</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </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>
+     </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">4</at>
+           <at name="row">6</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.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="name">txtZoomInFactor</at>
+            <at name="width">318</at>
+            <at name="height">20</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">4</at>
+           <at name="row">8</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.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="name">txtZoomOutFactor</at>
+            <at name="width">318</at>
+            <at name="height">20</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">20</at>
+           <at name="colspan">1</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">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="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="name">lblToC</at>
+            <at name="width">131</at>
+            <at name="text">ToC</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">20</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">embedded.322665410</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:12DLU:NONE,FILL:DEFAULT:GROW(1.0)</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">1</at>
+                <at name="row">1</at>
+                <at name="colspan">2</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.JCheckBox</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JCheckBox</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Hide legend of non visible layers</at>
+                 <at name="name">chkHideLegendOfNonVisibleLayers</at>
+                 <at name="width">313</at>
+                 <at name="text">Hide legend of non visible layers</at>
+                 <at name="height">16</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">1</at>
+                <at name="row">2</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">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="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="width">17</at>
+                 <at name="name"/>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="2">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="2"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="2"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="21">
+       <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>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="19">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="20">
+        <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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/ViewPageView.java	(revision 46118)
@@ -0,0 +1,337 @@
+package org.gvsig.app.gui.preferencespage;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JSpinner;
+import javax.swing.JTextField;
+import javax.swing.border.BevelBorder;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+
+public abstract class ViewPageView extends AbstractPreferencePage
+{
+   JLabel lblDefaultProjection = new JLabel();
+   JButton btnChangeProjection = new JButton();
+   JTextField txtDefaultProjection = new JTextField();
+   JLabel lblZoomInFactor = new JLabel();
+   JCheckBox chkInvisibleNewLayers = new JCheckBox();
+   JCheckBox chkKeepScaleOnResizing = new JCheckBox();
+   JCheckBox chkOpenWithANewMaximizedView = new JCheckBox();
+   JLabel lblZoomOutFactor = new JLabel();
+   JLabel lblDefaultViewBackColor = new JLabel();
+   JLabel lblDefaultSelectionColor = new JLabel();
+   JLabel lblMapUnits = new JLabel();
+   JLabel lblDistanceUnits = new JLabel();
+   JLabel lblDistanceArea = new JLabel();
+   JComboBox jCmbMapUnits = new JComboBox();
+   JComboBox jCmbDistanceUnits = new JComboBox();
+   JComboBox jCmbDistanceArea = new JComboBox();
+   JButton btnDefaultViewBackColor = new JButton();
+   JTextField txtDefaultViewBackColor = new JTextField();
+   JTextField txtDefaultSelectionColor = new JTextField();
+   JSlider sldDefaultSelectionColor = new JSlider();
+   JButton btnDefaultSelectionColor = new JButton();
+   JLabel lblAlpha = new JLabel();
+   JSpinner txtZoomInFactor = new JSpinner();
+   JSpinner txtZoomOutFactor = new JSpinner();
+   JLabel lblToC = new JLabel();
+   JCheckBox chkHideLegendOfNonVisibleLayers = new JCheckBox();
+
+   /**
+    * Default constructor
+    */
+   public ViewPageView()
+   {
+      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:8DLU: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:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblDefaultProjection.setName("lblDefaultProjection");
+      lblDefaultProjection.setText("Default proyection");
+      jpanel1.add(lblDefaultProjection,cc.xy(2,2));
+
+      jpanel1.add(createPanel1(),cc.xy(4,2));
+      lblZoomInFactor.setName("lblZoomInFactor");
+      lblZoomInFactor.setText("Zoom in factor");
+      jpanel1.add(lblZoomInFactor,cc.xy(2,6));
+
+      jpanel1.add(createPanel2(),cc.xy(4,4));
+      lblZoomOutFactor.setName("lblZoomOutFactor");
+      lblZoomOutFactor.setText("Zoom out factor");
+      jpanel1.add(lblZoomOutFactor,cc.xy(2,8));
+
+      lblDefaultViewBackColor.setName("lblDefaultViewBackColor");
+      lblDefaultViewBackColor.setText("Default view back color");
+      jpanel1.add(lblDefaultViewBackColor,cc.xy(2,10));
+
+      lblDefaultSelectionColor.setName("lblDefaultSelectionColor");
+      lblDefaultSelectionColor.setText("Default selection color");
+      jpanel1.add(lblDefaultSelectionColor,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.CENTER));
+
+      lblMapUnits.setName("lblMapUnits");
+      lblMapUnits.setText("Map units");
+      jpanel1.add(lblMapUnits,cc.xy(2,14));
+
+      lblDistanceUnits.setName("lblDistanceUnits");
+      lblDistanceUnits.setText("Measuring units");
+      jpanel1.add(lblDistanceUnits,cc.xy(2,16));
+
+      lblDistanceArea.setName("lblDistanceArea");
+      lblDistanceArea.setText("Area units");
+      jpanel1.add(lblDistanceArea,cc.xy(2,18));
+
+      jCmbMapUnits.setName("jCmbMapUnits");
+      jpanel1.add(jCmbMapUnits,cc.xy(4,14));
+
+      jCmbDistanceUnits.setName("jCmbDistanceUnits");
+      jpanel1.add(jCmbDistanceUnits,cc.xy(4,16));
+
+      jCmbDistanceArea.setName("jCmbDistanceArea");
+      jpanel1.add(jCmbDistanceArea,cc.xy(4,18));
+
+      jpanel1.add(createPanel3(),cc.xy(4,10));
+      jpanel1.add(createPanel4(),cc.xy(4,12));
+      txtZoomInFactor.setName("txtZoomInFactor");
+      jpanel1.add(txtZoomInFactor,cc.xy(4,6));
+
+      txtZoomOutFactor.setName("txtZoomOutFactor");
+      jpanel1.add(txtZoomOutFactor,cc.xy(4,8));
+
+      lblToC.setName("lblToC");
+      lblToC.setText("ToC");
+      jpanel1.add(lblToC,new CellConstraints(2,20,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      jpanel1.add(createPanel5(),cc.xy(4,20));
+      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,19,20,21 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnChangeProjection.setActionCommand("Change");
+      btnChangeProjection.setName("btnChangeProjection");
+      btnChangeProjection.setText("Change");
+      jpanel1.add(btnChangeProjection,cc.xy(3,1));
+
+      txtDefaultProjection.setBackground(new Color(236,233,216));
+      txtDefaultProjection.setEditable(false);
+      txtDefaultProjection.setName("txtDefaultProjection");
+      jpanel1.add(txtDefaultProjection,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkInvisibleNewLayers.setActionCommand("Add new layers in invisible mode");
+      chkInvisibleNewLayers.setName("chkInvisibleNewLayers");
+      chkInvisibleNewLayers.setText("Add new layers in invisible mode");
+      jpanel1.add(chkInvisibleNewLayers,cc.xy(1,3));
+
+      chkKeepScaleOnResizing.setActionCommand("Keep scale on resizing");
+      chkKeepScaleOnResizing.setName("chkKeepScaleOnResizing");
+      chkKeepScaleOnResizing.setText("Keep scale on resizing");
+      jpanel1.add(chkKeepScaleOnResizing,cc.xy(1,5));
+
+      chkOpenWithANewMaximizedView.setActionCommand("Open with a new maximized  view ");
+      chkOpenWithANewMaximizedView.setName("chkOpenWithANewMaximizedView");
+      chkOpenWithANewMaximizedView.setText("Open with a new maximized  view ");
+      jpanel1.add(chkOpenWithANewMaximizedView,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnDefaultViewBackColor.setActionCommand("...");
+      btnDefaultViewBackColor.setName("btnDefaultViewBackColor");
+      btnDefaultViewBackColor.setText("...");
+      jpanel1.add(btnDefaultViewBackColor,cc.xy(3,1));
+
+      txtDefaultViewBackColor.setEnabled(false);
+      txtDefaultViewBackColor.setName("txtDefaultViewBackColor");
+      jpanel1.add(txtDefaultViewBackColor,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,LEFT:50DLU:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtDefaultSelectionColor.setBackground(new Color(255,255,0));
+      txtDefaultSelectionColor.setEnabled(false);
+      txtDefaultSelectionColor.setName("txtDefaultSelectionColor");
+      jpanel1.add(txtDefaultSelectionColor,cc.xy(1,1));
+
+      sldDefaultSelectionColor.setMajorTickSpacing(10);
+      sldDefaultSelectionColor.setMaximum(255);
+      sldDefaultSelectionColor.setName("sldDefaultSelectionColor");
+      sldDefaultSelectionColor.setToolTipText("Alpha");
+      sldDefaultSelectionColor.setValue(255);
+      jpanel1.add(sldDefaultSelectionColor,cc.xy(7,1));
+
+      btnDefaultSelectionColor.setActionCommand("...");
+      btnDefaultSelectionColor.setName("btnDefaultSelectionColor");
+      btnDefaultSelectionColor.setText("...");
+      jpanel1.add(btnDefaultSelectionColor,cc.xy(3,1));
+
+      lblAlpha.setName("lblAlpha");
+      lblAlpha.setText("Alpha");
+      jpanel1.add(lblAlpha,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:12DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      chkHideLegendOfNonVisibleLayers.setActionCommand("Hide legend of non visible layers");
+      chkHideLegendOfNonVisibleLayers.setName("chkHideLegendOfNonVisibleLayers");
+      chkHideLegendOfNonVisibleLayers.setText("Hide legend of non visible layers");
+      jpanel1.add(chkHideLegendOfNonVisibleLayers,cc.xywh(1,1,2,1));
+
+      JLabel jlabel1 = new JLabel();
+      jpanel1.add(jlabel1,cc.xy(1,2));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/WizardPanel.java	(revision 46118)
@@ -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.gui;
+
+import java.awt.Window;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+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.app.project.documents.view.toc.actions.LayerErrorsPanel;
+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.DataTypes;
+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.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+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 final 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);
+        Thread task = new Thread(new Runnable() {
+
+            @Override
+            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);
+                    DisposeUtils.disposeQuietly(dataStore);
+                    preparedLayer
+                            = application.prepareOpenLayer(layer,
+                                    new PrepareContextView_v1() {
+
+                                        @Override
+                                        public Window getOwnerWindow() {
+                                            return null;
+                                        }
+
+                                        @Override
+                                        public MapControl getMapControl() {
+                                            return mapControl;
+                                        }
+
+                                        @Override
+                                        public IProjection getViewProjection() {
+                                            return mapContext.getProjection();
+                                        }
+
+                                        @Override
+                                        public MapContext getMapContext() {
+                                            return mapContext;
+                                        }
+
+                                        @Override
+                                        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);
+
+                } catch (Exception e) {
+                    LayerErrorsPanel panel = new LayerErrorsPanel(layerName, e);
+                    if (preparedLayer != null) {
+                        panel.setLayer(preparedLayer);
+                    } else if(layer!=null){
+                        panel.setLayer(layer);
+                    }
+                    I18nManager i18nManager = ToolsLocator.getI18nManager();
+                    ToolsSwingLocator.getWindowManager().showWindow(
+                        panel,
+                        i18nManager.getTranslation("_Problems_loading_the_layer"),
+                        WindowManager.MODE.WINDOW
+                    );
+                    logger.warn("Can't load layer '" + layerName + "'.", e);
+
+                } finally {
+                    if (preparedLayer != layer) {
+                        DisposeUtils.disposeQuietly(preparedLayer);
+                    }
+                    DisposeUtils.disposeQuietly(layer);
+                }
+            }
+        });
+        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;
+    }
+
+    protected void fixCRS(DataStoreParameters params) {
+        IProjection 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();
+        int crsfields = 0;
+        DynField crsfield = null;
+        for (DynField field : fields) {
+            if (field.getType() == DataTypes.CRS) {
+                crsfields++;
+                crsfield = field;
+                if (field.isMandatory()) {
+                    if (params.getDynValue(field.getName()) == null) {
+                        params.setDynValue(field.getName(), proj);
+                    }
+                }
+            }
+        }
+        if (crsfields == 1 && crsfield != null) {
+            // Si solo hay un parametro CRS y esta a null, aunque no sea
+            // obligatorio le asigna el CRS de la vista.
+            if (params.getDynValue(crsfield.getName()) == null) {
+                params.setDynValue(crsfield.getName(), proj);
+            }
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/FontChooser.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorScheme.txt	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/ColorRenderer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserDialog.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/utils/PartialFontChooserPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TransparencyPanel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/PanelLinkProperties.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/SelectAnnotationLayerNameAndField.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/annotation/ConfigureLabel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/TextFieldEdit.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/FPanelAbout.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/gui/panels/MappingFieldsToAnotation.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/addlayer/AddLayerDialog.java	(revision 46118)
@@ -0,0 +1,283 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2017 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.gvsig.tools.swing.api.ToolsSwingUtils;
+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 final WizardListener wizardListener = new DialogWizardListener();
+
+    /**
+     * Creates a new FOpenDialog object.
+     */
+    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());
+        ToolsSwingUtils.ensureRowsCols(this, 22, 90, 25, 100);
+        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() {
+                @Override
+                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()
+     */
+    @Override
+    public WindowInfo getWindowInfo() {
+        WindowInfo m_viewinfo = new WindowInfo(
+                WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+        m_viewinfo.setTitle(this.title);
+        Dimension dim = this.getPreferredSize();
+        m_viewinfo.setHeight(dim.height);
+        m_viewinfo.setWidth(dim.width);
+        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() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    accepted = true;
+                    closeWindow();
+                }
+            };
+            ActionListener cancelAction = new ActionListener() {
+                @Override
+                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)
+         */
+
+        @Override
+        public void error(Exception e) {
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see com.iver.cit.gvsig.gui.wizards.WizardListener#wizardStateChanged(boolean)
+         */
+        @Override
+        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;
+    }
+
+    @Override
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+
+    private void closeWindow() {
+        if (PluginServices.getMainFrame() == null) {
+            try {
+                ((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+            } catch(Exception ex) {
+                logger.debug("Can't close window.",ex);
+            }
+        } else {
+            PluginServices.getMDIManager().closeWindow(AddLayerDialog.this);
+        }
+    }
+
+    @Override
+    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);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/ApplicationLibraryImpl.java	(revision 46118)
@@ -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):
+ * 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.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultPreferencesNode.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/imp/DefaultApplicationManager.java	(revision 46118)
@@ -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.
+ */
+
+package org.gvsig.app.imp;
+
+import java.awt.Component;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.swing.JComponent;
+
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.event.HyperlinkListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.tree.TreeModel;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.about.AboutLocator;
+import org.gvsig.about.AboutManager;
+import org.gvsig.andami.Arguments;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.andami.ui.ToolsWindowManager;
+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.app.project.documents.view.ViewManager;
+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.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+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.CompoundLayersTreeModel;
+import org.gvsig.fmap.mapcontrol.CompoundStoresTreeModel;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+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.observer.Observer;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+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;
+    private PropertiesSupportHelper psh;
+
+    public DefaultApplicationManager() {
+        this.psh = new PropertiesSupportHelper();
+        
+        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");
+
+        try {
+            version = new Version();
+        } catch(Exception ex) {
+            logger.warn("Can't locate application 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();
+	}
+
+        @Override
+	public Arguments getArguments() {
+		return Launcher.getArguments();
+	}
+
+  @Override
+	public String getFromClipboard() {
+		return PluginServices.getFromClipboard();
+	}
+
+  @Override
+	public void putInClipboard(String data) {
+		PluginServices.putInClipboard(data);
+	}
+
+	public Project getCurrentProject() {
+		return ProjectManager.getInstance().getCurrentProject();
+	}
+
+    @Override
+    public FLayer getCurrentLayer() {
+        ViewDocument viewdoc = (ViewDocument) this.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return null;
+        }
+        MapContext mapContext = viewdoc.getMapContext();
+        return mapContext.getLayers().getFirstActiveLayer();
+    }
+        
+	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;
+	}
+
+        @Override
+        public void close(boolean quietly) {
+            Launcher.closeApplication(quietly);
+        }
+
+	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 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);
+	}
+
+        @Override
+        public void messageDialog(String message, String[] messageArgs, String title, int messageType, String msgid) {
+		MainFrame main = PluginServices.getMainFrame();
+		main.messageDialog(message, messageArgs, title, messageType, msgid);
+        }        
+
+        @Override
+	public int confirmDialog(String message, String title, int optionType,
+			int messageType) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.confirmDialog(message, title, optionType, messageType);
+	}
+
+        @Override
+	public int confirmDialog(String message, String title, int optionType,
+			int messageType, String msgid) {
+		MainFrame main = PluginServices.getMainFrame();
+		return main.confirmDialog(message, title, optionType, messageType, msgid);
+	}
+
+	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);
+	}
+
+        @Override
+        public void message(String message, int message_type) {
+		MainFrame main = PluginServices.getMainFrame();
+                if( main != null) {
+                    main.message(message, message_type);
+                }
+        }        
+	
+	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);
+	}
+
+        @Override
+	public void addTool(ActionInfo action, String toolBarName) {
+		MainFrame f = this.getMainFrame();
+		f.addTool(action,toolBarName);
+		f.refreshControls();
+	}
+	
+        @Override
+        public void addSelectableTool(ActionInfo action, String toolBarName) {
+		MainFrame f = this.getMainFrame();
+		f.addSelectableTool(action,toolBarName,"unico",false);
+		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);
+        }
+
+        @Override
+        public TreeModel createProjectLayersTreeModel() {
+            CompoundLayersTreeModel model = (CompoundLayersTreeModel) MapControlLocator.getMapControlManager().createCompoundLayersTreeModel();
+            Project project = this.getCurrentProject();
+            List<Document> views = project.getDocuments(ViewManager.TYPENAME);
+            for (Document view : views) {
+                model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
+            }
+            return model;
+        }
+
+    @Override
+    public TreeModel createProjectStoresTreeModel() {
+        CompoundStoresTreeModel model = MapControlLocator.getMapControlManager().createCompoundStoresTreeModel();
+        Project project = this.getCurrentProject();
+        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
+        for (Document view : views) {
+            model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
+        }
+        return model;
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return this.psh.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        this.psh.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return this.psh.getProperties();
+    }
+
+    @Override
+    public void addPropertiesObserver(Observer o) {
+        this.psh.addObserver(o);
+    }
+
+    @Override
+    public void deletePropertiesObserver(Observer o) {
+        this.psh.deleteObserver(o);
+    }
+
+    @Override
+    public void deletePropertiesObservers() {
+        this.psh.deleteObservers();
+    }
+
+    @Override
+    public void refreshDocument(FeatureStore store){
+        if(store == null){
+            return;
+        }
+        ProjectManager projectManager = this.getProjectManager();
+        Project project = projectManager.getCurrentProject();
+        for (Document doc : project.getDocuments()) {
+            if( doc.contains(store) ) {
+                doc.refresh();
+            }
+        }
+    }
+
+    @Override
+    public Object get(String key) {
+        Object value = null;
+        IWindow[] windows = this.getUIManager().getOrderedWindows();
+        for (IWindow window : windows) {
+            String title = window.getWindowInfo().getTitle();
+            Object component = null;
+            if( window instanceof PropertiesSupport ) {
+                component = (JComponent) window;
+            } else if( window instanceof ToolsWindowManager.Window ) {
+                component = ((ToolsWindowManager.Window)window).getContents();
+                if( component instanceof Dialog) {
+                    component = ((Dialog)component).getContents();
+                }
+            }
+            if( component instanceof PropertiesSupport ) {
+                value = ((PropertiesSupport)component).getProperty(key);
+                if( value!=null ) {
+                    break;
+                }
+            } 
+        }
+        return value;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DefaultProject.java	(revision 46118)
@@ -0,0 +1,1489 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.awt.image.BufferedImage;
+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.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+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 java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+import javax.imageio.ImageIO;
+import javax.swing.JOptionPane;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+
+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.ProjectManager.ProjectEventImpl;
+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.i18n.I18nManager;
+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.PersistentContext;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
+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<>();
+
+    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;
+
+    private File fname = null;
+
+    private Set<String> unloadedObjects;
+    private PersistenceException loadErrors = null;
+
+    /**
+     * Creates a new Project object.
+     */
+    DefaultProject() {
+        this.change = new PropertyChangeSupport(this);
+        this.clean();
+        notifyProjectManagerEvent(ProjectNotification.NEW_PROJECT);
+    }
+
+    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;
+    }
+
+    @Override
+    public void propertyChange(PropertyChangeEvent evt) {
+        change.firePropertyChange(evt);
+    }
+
+    @Override
+    public synchronized void addPropertyChangeListener(
+            PropertyChangeListener arg0) {
+        change.addPropertyChangeListener(arg0);
+    }
+
+    @Override
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+        change.removePropertyChangeListener(listener);
+    }
+    
+    /**
+     * Return the creation date of the project
+     *
+     * @return
+     */
+    @Override
+    public String getCreationDate() {
+        return creationDate;
+    }
+
+    protected void setCreationDate(String creationDate) {
+        this.creationDate = creationDate;
+        change.firePropertyChange("setCreationDate", null, null);
+    }
+
+    @Override
+    public Document createDocument(String type) {
+        logger.info("createDocument('{}')", type);
+        return ProjectManager.getInstance().createDocument(type);
+    }
+
+    /**
+     * Return the name of the project
+     *
+     * @return
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Set the name of he project.
+     *
+     * @param string
+     */
+    @Override
+    public void setName(String name) {
+        this.name = name;
+        change.firePropertyChange("setName", null, null);
+    }
+
+    /**
+     * Return the comments associateds with the project
+     *
+     * @return comments
+     */
+    @Override
+    public String getComments() {
+        return comments;
+    }
+
+    /**
+     * Set the comments associateds with the project
+     *
+     * @param comments as string
+     */
+    @Override
+    public void setComments(String string) {
+        comments = string;
+        change.firePropertyChange("setComments", null, null);
+    }
+
+    /**
+     * Retuen the modification date of the project.
+     *
+     * @return modification date as string
+     */
+    @Override
+    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
+     */
+    @Override
+    public String getOwner() {
+        return owner;
+    }
+
+    /**
+     * Sets the author of the project
+     *
+     * @param author name as string
+     */
+    @Override
+    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
+     */
+    @Override
+    public Color getSelectionColor() {
+        if (selectionColor == null) {
+            selectionColor = getPreferences().getDefaultSelectionColor();
+        }
+        return selectionColor;
+    }
+
+    /**
+     * Sets the selecction color
+     *
+     * @param selection color as string
+     */
+    @Override
+    public void setSelectionColor(String selectionColor) {
+        this.setSelectionColor(StringUtilities.string2Color(selectionColor));
+    }
+
+    /**
+     * Sets the selecction color
+     *
+     * @param selection color as Color
+     */
+    @Override
+    public void setSelectionColor(Color selectionColor) {
+        this.selectionColor = selectionColor;
+        MapContext.setSelectionColor(selectionColor);
+        change.firePropertyChange("selectionColor", null, selectionColor);
+    }
+
+    @Override
+    public IProjection getProjection() {
+        if (projection == null) {
+            projection = getPreferences().getDefaultProjection();
+        }
+        return projection;
+    }
+
+    @Override
+    public void setProjection(IProjection projection) {
+        this.projection = projection;
+    }
+
+    /**
+     * Sets the modified state of project.
+     *
+     * Can't set to not modified.
+     *
+     * @param modified as boolean
+     */
+    @Override
+    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);
+            }
+        }
+    }
+
+    @Override
+    public boolean hasChanged() {
+        if( modified ) {
+            return true;
+        }
+        if (this.getDocuments().isEmpty() ) {
+            return false;
+        }
+        for (Document document : this.getDocuments()) {
+            if( document.isTemporary()) {
+                continue;
+            }
+            if( document.isModified() ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Return a list of documents in the project.
+     *
+     * @return documents as List of IProjectDocument
+     */
+    @Override
+    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
+     */
+    @Override
+    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);
+                }
+            }
+        }
+        Collections.sort(docs, (Document o1, Document o2) -> StringUtils.compareIgnoreCase(o1.getName(), o2.getName()));
+        return Collections.unmodifiableList(docs);
+    }
+
+    /**
+     * Adds a document to the project
+     *
+     * @param document as Document
+     */
+    @Override
+    public void add(Document document) {
+        this.addDocument(document);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public void remove(Document doc) {
+        this.removeDocument(doc);
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public Iterator<Document> iterator() {
+        return documents.iterator();
+    }
+
+    @Override
+    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
+     */
+    @Override
+    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;
+    }
+
+    @Override
+    public void addExtent(ProjectExtent arg1) {
+        extents.add(arg1);
+        change.firePropertyChange("addExtent", null, null);
+    }
+
+    @Override
+    public ProjectExtent removeExtent(int arg0) {
+        change.firePropertyChange("delExtent", null, null);
+        return extents.remove(arg0);
+    }
+
+    @Override
+    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
+     */
+    @Override
+    public Document getDocument(String name, String type) {
+        if (type == null) {
+            for (int i = 0; i < documents.size(); i++) {
+                Document document = documents.get(i);
+                if ( name.equalsIgnoreCase(document.getName())) {
+                    return document;
+                }
+            }
+        } else {
+            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;
+    }
+
+    @Override
+    public Document getDocument(String name) {
+        return this.getDocument(name, 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));
+        }
+    }
+
+    @Override
+    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) {
+            createProjectCopy(true);
+            throw new PersistenceException(e);
+        }
+        if( !isValidZIP(out) ) {
+            throw new PersistenceException(new ZipException());
+        }
+        this.fname = out;
+        //sacar copia al bak
+        createProjectCopy(false);
+        notifyObservers(ProjectNotification.AFTER_SAVE_TO_FILE, out);
+    }
+
+    boolean isValidZIP(final File file) {
+        ZipFile zipfile = null;
+        try {
+            zipfile = new ZipFile(file);
+            return true;
+        } catch (IOException e) {
+            //sacar copia. 
+            return false;
+        } finally {
+            try {
+                if (zipfile != null) {
+                    zipfile.close();
+                    zipfile = null;
+                }
+            } catch (IOException e) {
+            }
+        }
+    }
+   
+    @Override
+    public File getFile() {
+        return this.fname;
+    }
+
+    @Deprecated
+    @Override
+    public void saveState(OutputStream out) throws PersistenceException {
+        saveState(out, null);
+    }
+    
+    @Override
+    public void saveState(File file, BufferedImage preview) {
+        FileOutputStream fout=null;
+        ZipOutputStream zout=null;
+        try {
+            fout = new FileOutputStream(file);
+            zout = new ZipOutputStream(fout);
+            this.saveState(zout, file.getParentFile());
+
+            zout.putNextEntry(new ZipEntry("preview.jpg"));
+            try {
+                ImageIO.write(preview, "jpg", zout);
+            } catch (IOException ex) {
+                LOG.warn("Can't save preview image'.", ex);
+            }
+            IOUtils.closeQuietly(zout);
+            IOUtils.closeQuietly(fout);
+
+            if( !isValidZIP(file) ) {
+                throw new ZipException("Invalid project file '"+file.getAbsolutePath()+"'");
+            }
+            this.fname = file;
+            if (file.exists()) {
+                createProjectCopy(false);
+            }
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            ThreadSafeDialogsManager dialog = ToolsSwingLocator.getThreadSafeDialogsManager();
+            dialog.message(
+                    i18n.getTranslation("wrote_project"), 
+                    JOptionPane.INFORMATION_MESSAGE
+            );
+        } catch (Exception ex) {
+            createProjectCopy(true);
+            throw new RuntimeException("Can't write project in '" + file.getAbsolutePath() + ".", ex);
+        } finally {
+            IOUtils.closeQuietly(zout);
+            IOUtils.closeQuietly(fout);
+
+        }
+    }
+    
+    @Override
+    public void saveState(OutputStream out, File rootFolder)
+            throws PersistenceException {
+        if (notifyObservers(ProjectNotification.BEFORE_SAVE_TO_STREAM, rootFolder).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, true);
+        if (state.getContext().getErrors() != null) {
+            createProjectCopy(true);
+            throw state.getContext().getErrors();
+        }
+        this.fname = null;
+        notifyObservers(ProjectNotification.AFTER_SAVE_TO_STREAM, rootFolder);
+    }
+    
+    private File getNameFileForProject(File actualProjectFile, boolean error) {
+        // if there is a error, creates a file with a unique timecode
+        // not error: return path with .gvsproj.bak extension that could exists
+               
+        if (actualProjectFile==null) {
+            LOG.info("Doesn't have previous project to create a bak");
+            return null;
+        }
+        String noExt = FilenameUtils.removeExtension(actualProjectFile.getAbsolutePath());
+        String timeCode = new SimpleDateFormat("_MMddHHmmss").format(new Date());
+        String ext = ".gvsproj.bak";
+
+        int code = 0;
+        if (noExt.length() > 230) {
+            noExt = noExt.substring(0, 229);
+        }
+        
+        File bakProjectFile;
+        if (error) {
+            bakProjectFile = new File(noExt + timeCode + ext);
+            while (bakProjectFile.exists()) {
+                code = code + 1;
+                bakProjectFile = new File(noExt + timeCode + "_" + code + ext);
+            }
+        } else {
+            bakProjectFile = new File(noExt + ext);
+        }
+        return bakProjectFile;
+    }
+    public File createProjectCopy(boolean error) {
+        File actualProjectFile = ApplicationLocator.getProjectManager().getCurrentProject().getFile();
+        File bakProjectFile = getNameFileForProject(actualProjectFile, error);
+        if (bakProjectFile==null){
+            return null;
+        }
+        if (!error){
+            try {
+                if (bakProjectFile.exists()){
+                    FileUtils.deleteQuietly(bakProjectFile);
+                }
+            } catch (Exception ex) {
+                LOG.warn("Not possible to delete file", ex);
+            }
+            try {
+                FileUtils.copyFile(actualProjectFile, bakProjectFile);
+            } catch (IOException ex) {
+                LOG.warn("Can't create bak copy from project", ex);
+            }
+        } else {
+            File bakProjectFileOld = getNameFileForProject(actualProjectFile, false);
+            if (bakProjectFileOld.exists()) {
+                try {
+                    FileUtils.moveFile(bakProjectFileOld, bakProjectFile);
+                } catch (IOException ex) {
+                    LOG.warn("Can't rename file", ex);
+                }
+            } else {
+                LOG.info("Can't find bak project. Probably doesn't exist or already has been renamed");
+            }
+        }
+        
+        return bakProjectFile;
+    }
+
+    @Deprecated
+    @Override
+    public void loadState(InputStream in) {
+        loadState(in, null);
+    }
+
+    public void loadState(InputStream in, File rootFolder) {
+        if (notifyObservers(ProjectNotification.BEFORE_LOAD_FROM_STREAM, rootFolder).isProcessCanceled()) {
+            return;
+        }
+        PersistenceManager manager = ToolsLocator.getPersistenceManager();
+        try {
+            PersistentContext context = manager.getNewContext();
+            context.setCollectErrors(true);
+            PersistentState state = manager.loadState(in, context);
+            try {
+                if (rootFolder != null) {
+                    state.derelativizeFiles(rootFolder);
+                }
+            } catch (Exception ex) {
+                state.getContext().addError(ex);
+            }
+            this.loadFromState(state);
+            this.unloadedObjects = getUnloadedObjects(state.getContext());
+            this.loadErrors = state.getContext().getErrors();
+
+        } catch (PersistenceException e) {
+            LOG.info("Can't load project to stream", e);
+        }
+        this.fname = null;
+        notifyObservers(ProjectNotification.AFTER_LOAD_FROM_STREAM, rootFolder);
+
+    }
+
+
+
+    /**
+     * @param context
+     * @return
+     */
+    private Set<String> getUnloadedObjects(PersistentContext context) {
+        Set unloadedObjects = new HashSet();
+
+        Iterator statesIterator = context.iterator();
+        String className = null;
+
+        while (statesIterator.hasNext()) {
+            PersistentState aState = (PersistentState) statesIterator.next();
+            try {
+                className = aState.getTheClassName();
+                DynStruct definition = aState.getDefinition();
+                if (definition == null) {
+                    unloadedObjects.add(className);
+                }
+            } catch (Throwable e) {
+                // do nothing
+            }
+        }
+
+        if(unloadedObjects.isEmpty()){
+            return null;
+        }
+
+        return unloadedObjects;
+    }
+
+    @Override
+    public Set<String> getUnloadedObjects() {
+        return this.unloadedObjects;
+    }
+
+    @Override
+    public List<Exception> getLoadErrors() {
+        return this.loadErrors;
+    }
+    
+    @Override
+    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) {
+            LOG.info("Can't load project to stream", e);
+        }
+        if ("bak".equals(FilenameUtils.getExtension(in.getAbsolutePath()))) {
+            this.fname =  null;
+        } else {
+            this.fname = in;
+        }
+        notifyObservers(ProjectNotification.AFTER_LOAD_FROM_FILE, in);
+    }
+
+    //@SuppressWarnings("unchecked")
+    @Override
+    public void loadFromState(PersistentState state)
+            throws PersistenceException {
+        this.clean();
+        PersistentContext context = state.getContext();
+        
+        notifyObservers(ProjectNotification.BEFORE_LOAD_FROM_STATE, state);
+
+        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++) {
+            AbstractDocument doc = documents.get(i);
+            if( doc != null ) {
+                this.add(doc);
+            }
+        }
+
+        try {
+            List<DocumentWindowInfo> persistentWindows = (List<DocumentWindowInfo>) state.get("documentWindowsInformation");
+
+            for (int i = 0; i < persistentWindows.size(); i++) {
+                try {
+                    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);
+                    }
+                } catch(Exception ex) {
+                    if( !context.getCollectErrors() ) {
+                        throw ex;
+                    }
+                    context.addError(ex);
+                }
+            }
+
+            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);
+            }
+        } catch(Exception ex) {
+            if( !context.getCollectErrors() ) {
+                throw ex;
+            }
+            context.addError(ex);
+        }
+        notifyObservers(ProjectNotification.AFTER_LOAD_FROM_STATE, state);
+    }
+
+    @Override
+    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<>();
+        for (Document document : docs) {
+            if(!document.isTemporary()){
+                noTempDocs.add(document);
+            }
+        }
+        state.set("documents", noTempDocs);
+
+        state.set("propertiesHelper",propertiesHelper);
+
+        List<DocumentWindowInfo> persistentWindows = new ArrayList<>();
+        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);
+
+    }
+
+    @Override
+    @Deprecated
+    public Object getProperty(Object key) {
+        return this.propertiesHelper.getProperty(key);
+    }
+
+    @Override
+    @Deprecated
+    public void setProperty(Object key, Object obj) {
+        this.propertiesHelper.setProperty(key, obj);
+    }
+
+    @Override
+    @Deprecated
+    public Map getExtendedProperties() {
+        return this.propertiesHelper.getExtendedProperties();
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return this.propertiesHelper.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        this.propertiesHelper.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        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");
+    }
+
+    @Override
+    public boolean canImportDocuments(String data, String doctype) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public String exportDocumentsAsText(List<Document> documents) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void importDocuments(String data, String doctype) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public Document getActiveDocument() {
+        return this.getActiveDocument((Class<? extends Document>)null);
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public void addObserver(Observer o) {
+        observableHelper.addObserver(o);
+    }
+
+    @Override
+    public void deleteObserver(Observer o) {
+        observableHelper.deleteObserver(o);
+    }
+
+    @Override
+    public void deleteObservers() {
+        observableHelper.deleteObservers();
+    }
+
+    private ProjectNotification notifyObservers(int type) {
+        return notifyObservers(new DefaultProjectNotification(type));
+    }
+
+    private ProjectNotification notifyObservers(int type, Document document) {
+        return notifyObservers(new DefaultProjectNotification(type, document));
+    }
+    
+    private ProjectNotification notifyObservers(int type, PersistentState state) {
+        return notifyObservers(new DefaultProjectNotification(type, state));
+    }
+
+    private ProjectNotification notifyObservers(int type, File file) {
+        return notifyObservers(new DefaultProjectNotification(type, file));
+    }
+
+    private ProjectNotification notifyObservers(ProjectNotification notifycation) {
+        try {
+            observableHelper.notifyObservers(this, notifycation);
+        } catch (Exception ex) {
+            LOG.info("Can't notify observers", ex);
+        }
+        notifyProjectManagerEvent(notifycation.getNotificationType());
+        return notifycation;
+    }
+    
+    private void notifyProjectManagerEvent(int type) {
+        try {
+            ProjectManager.getInstance().notifyProjectEvent(new ProjectEventImpl(this, type));
+        } catch (Exception ex) {
+            LOG.info("Can't notify project manager events", ex);
+        }
+    }
+    
+    class DefaultProjectNotification implements ProjectNotification {
+
+        private int type;
+        private Document document;
+        private File file;
+        private boolean processCanceled = false;
+        private PersistentState state = null;
+
+        DefaultProjectNotification(int type) {
+            this.type = type;
+        }
+
+        DefaultProjectNotification(int type, Document document) {
+            this(type);
+            this.document = document;
+        }
+
+        DefaultProjectNotification(int type, File file) {
+            this(type);
+            this.file = file;
+        }
+
+        DefaultProjectNotification(int type, PersistentState state) {
+            this(type);
+            this.state = state;
+        }
+
+        @Override
+        public int getNotificationType() {
+            return type;
+        }
+
+        @Override
+        public Document getDocument() {
+            return document;
+        }
+
+        @Override
+        public void cancelProcess() {
+            processCanceled = true;
+        }
+
+        @Override
+        public boolean isProcessCanceled() {
+            return processCanceled;
+        }
+
+        @Override
+        public File getFile() {
+            return file;
+        }
+
+        @Override
+        public PersistentState getState() {
+            return this.state;
+        }
+
+        @Override
+        public Project getProject() {
+            return DefaultProject.this;
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainerNotification.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectNotification.java	(revision 46118)
@@ -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;
+
+import java.io.File;
+import org.gvsig.tools.persistence.PersistentState;
+
+
+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 static final int BEFORE_LOAD_FROM_STATE = 17;
+	public static final int AFTER_LOAD_FROM_STATE = 18;
+	
+	public static final int BEFORE_SAVE_TO_STATE = 19;
+	public static final int AFTER_SAVE_TO_STATE = 20;
+
+	public static final int NEW_PROJECT = 21;
+        
+	public File getFile();
+        
+        public PersistentState getState();
+        
+        public Project getProject();
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectExtent.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTableFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTableFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTableFactory.java	(revision 46118)
@@ -0,0 +1,33 @@
+package org.gvsig.app.project.symboltables;
+
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTableFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ProjectSymbolTableFactory extends AbstractSymbolTableFactory {
+
+    private SymbolTable symbolTable;
+    
+    public ProjectSymbolTableFactory() {
+        super(ProjectSymbolTable.NAME, true);
+    }
+    
+    @Override
+    public SymbolTable create(Object... args) {
+        if( this.symbolTable==null ) {
+            this.symbolTable = new ProjectSymbolTable();
+        }
+        return this.symbolTable;
+    }
+
+    public static void selfRegister() {
+        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
+        manager.registerSymbolTable(new ProjectSymbolTableFactory());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ListOfFeaturesWrapper.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ListOfFeaturesWrapper.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ListOfFeaturesWrapper.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.app.project.symboltables;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.MutableSymbolTable;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.util.UnmodifiableBasicList;
+import org.gvsig.tools.util.UnmodifiableBasicListToListAdapter;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ListOfFeaturesWrapper implements UnmodifiableBasicList<Object> {
+
+    private final List<Feature> features;
+    private final FeatureSymbolTable featureSymbolTable;
+    private final MutableSymbolTable symbolTable;
+    private final Expression expression;
+    
+    public ListOfFeaturesWrapper(
+            List<Feature> features, 
+            SymbolTable symbolTable, 
+            String expression
+        ) {
+        DataManager dataManager = DALLocator.getDataManager();
+        ExpressionEvaluatorManager expManager = ExpressionEvaluatorLocator.getManager();
+        
+        this.features = features;
+        this.featureSymbolTable = dataManager.createFeatureSymbolTable();
+        this.symbolTable = this.featureSymbolTable.createParent();
+        this.symbolTable.addSymbolTable(symbolTable);
+
+        this.expression = expManager.createExpression();
+        this.expression.setPhrase(expression);
+    }
+
+    private Object getValue(Feature feature) {
+        this.featureSymbolTable.setFeature(feature);
+        Object value = this.expression.execute(this.symbolTable);
+        return value;
+    }
+    
+    @Override
+    public boolean isEmpty() {
+        return this.features.isEmpty();
+    }
+
+    @Override
+    public List<Object> toList() {
+        List<Object> x = new UnmodifiableBasicListToListAdapter<>(this);
+        return x;
+    }
+
+    @Override
+    public Object get(int position) {
+        return this.getValue(this.features.get(position));
+    }
+
+    @Override
+    public int size() {
+        return this.features.size();
+    }
+
+    @Override
+    public Iterator<Object> iterator() {
+        return new Itr();
+    }
+    
+    private class Itr implements Iterator<Object> {
+        int cursor;       // index of next element to return
+
+        Itr() {}
+
+        @Override
+        public boolean hasNext() {
+            return cursor != size();
+        }
+
+        @Override
+        public Object next() {
+            int i = cursor;
+            if (i >= size())
+                throw new NoSuchElementException();
+            cursor = i + 1;
+            return get(i);
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException("Not supported yet."); 
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTable.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTable.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/ProjectSymbolTable.java	(revision 46118)
@@ -0,0 +1,747 @@
+package org.gvsig.app.project.symboltables;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.Range;
+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.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.app.project.documents.view.ViewManager;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.ExpressionRuntimeException;
+import org.gvsig.expressionevaluator.Interpreter;
+import org.gvsig.expressionevaluator.spi.AbstractFunction;
+import org.gvsig.expressionevaluator.spi.AbstractGeometryFunction;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.HasDataStore;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.Point;
+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.mapcontrol.AreaAndPerimeterCalculator;
+import org.gvsig.temporarystorage.TemporaryStorageGroup;
+import org.gvsig.temporarystorage.TemporaryStorageLocator;
+import org.gvsig.temporarystorage.TemporaryStorageManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ProjectSymbolTable extends AbstractSymbolTable {
+    public static final String PROJECT_GROUP = "Project";        
+
+    public static final String AREA_NAME = "AREA";        
+    public static final String PERIMETER_NAME = "PERIMETER";
+    public static final String TABLE_NAME = "TABLE";
+//    public static final String FETCH_FIRST_NAME = "FETCH_FIRST";
+    public static final String FETCH_FIRST_SELECTED_NAME = "FETCH_FIRST_SELECTED";
+//    public static final String FETCH_NAME = "FETCH";
+    public static final String APPLICATION_NAME = "APPLICATION";
+        
+    static final String NAME = "Project";
+    
+    private static final String TABLE_DOCUMENT_TYPENAME = "project.document.table";
+    
+    private abstract class CachedValue<T> {
+
+        T value = null;
+        long lastAccess = 0;
+
+        protected abstract void reload();
+
+        public boolean isExpired() {
+            long now = System.currentTimeMillis();
+            return now - lastAccess > 3000;
+        }
+
+        public T get() {
+            if (isExpired()) {
+                reload();
+            }
+            lastAccess = System.currentTimeMillis();
+            return value;
+        }
+    }
+
+    private class ProjectValue extends CachedValue<Project> {
+
+        @Override
+        protected void reload() {
+            value = ProjectManager.getInstance().getCurrentProject();
+        }
+
+    }
+
+    private class CurrentViewValue extends CachedValue<ViewDocument> {
+
+        @Override
+        protected void reload() {
+            ApplicationManager application = ApplicationLocator.getManager();
+            ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+            value = viewdoc;
+        }
+
+    }
+
+    private class CurrentViewEnvelopeValue extends CachedValue<Geometry> {
+
+        @Override
+        protected void reload() {
+            ApplicationManager application = ApplicationLocator.getManager();
+            ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+            if( viewdoc == null ) {
+                value = null;
+                return;
+            }
+            value = viewdoc.getMapContext().getViewPort().getEnvelope().getGeometry();
+        }
+
+    }
+
+    private class PropertiesValue extends CachedValue<Map<File, Properties>> {
+
+        @Override
+        protected void reload() {
+            value = new HashMap<>();
+        }
+    }
+
+    private class CurrentProjectFunction extends AbstractFunction {
+
+        public CurrentProjectFunction() {
+            super(
+                    PROJECT_GROUP,
+                    "project",
+                    Range.is(0),
+                    "Access to the current project loaded in gvSIG desktop.\n",
+                    "project()",
+                    null,
+                    "Project"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            return currentProject.get();
+        }
+
+    }
+
+    private class ApplicationFunction extends AbstractFunction {
+
+        public ApplicationFunction() {
+            super(
+                    PROJECT_GROUP,
+                    APPLICATION_NAME,
+                    Range.is(0),
+                    "Access to the Application object.\n",
+                    APPLICATION_NAME+"()",
+                    null,
+                    "ApplicationManager"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            return ApplicationLocator.getApplicationManager();
+        }
+
+    }
+
+    private class TabbleFunction extends AbstractFunction {
+
+        public TabbleFunction() {
+            super(PROJECT_GROUP,
+                    TABLE_NAME,
+                    Range.is(2), // Range.between(1, 2),
+                    "Return the data store associated with a layer.", // or a table.\n" +
+//                       "If receive a single parameter, it will correspond to " + 
+//                       "the name of a table-type document, and it will return " + 
+//                       "your data store. If you receive two parameters, you expect " +
+//                       "to be the name of a view and a layer of it, returning the " +
+//                       "data store of the layer.",
+                    TABLE_NAME+"({{view}}, layer)",
+                    new String[]{
+                        "view - String value with the name of a view, if view is null use current View.",
+                        "layer - String value with the name of a layer in the indicated view"
+//                        "table - String value with the name of document table"
+                    },
+                    "DataStore"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            Project project = currentProject.get();
+            switch (args.length) {
+                case 1:
+                    String tableName = getStr(args, 0);
+                    Document document = project.getDocument(tableName, TABLE_DOCUMENT_TYPENAME);
+                    if (document == null) {
+                        throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't locate table document '"+tableName+"'.");
+//                        return null;
+                    }
+                    if( document instanceof HasDataStore ) {
+                        return ((HasDataStore) document).getDataStore();
+                    }
+                    throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't get store from table document '"+tableName+"'.");
+//                    return null;//                    return null;
+
+                case 2:
+                    ViewDocument view;
+                    String viewName = getStr(args, 0);
+                    if( StringUtils.isBlank(viewName) ) {
+                        view = (ViewDocument) project.getActiveDocument(ViewManager.TYPENAME);
+                        if (view == null) {
+                            throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't locate active View.");
+//                            return null;
+                        }
+                    } else {
+                        view = (ViewDocument) project.getDocument(viewName, ViewManager.TYPENAME);
+                        if (view == null) {
+                            throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't locate View '"+viewName+"'.");
+//                            return null;
+                        }
+                    }
+                    String layerName = getStr(args, 1);
+                    FLayer layer = view.getLayer(layerName);
+                    if( layer == null ) {
+                        throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't locate layer '"+layerName+"' in View '"+viewName+"'.");
+                    }
+                    if( layer instanceof HasDataStore ) {
+                        return ((HasDataStore)layer).getDataStore();
+                    }
+                    throw new ExpressionRuntimeException("Problems calling '"+TABLE_NAME+"' function, can't get the store from layer '"+layerName+"' in View '"+viewName+"'.");
+//                    return null;
+            }
+            return null;
+        }
+        
+    }
+    
+//    private class FetchFunction extends AbstractFunction {
+//
+//        public FetchFunction() {
+//            super(
+//                    PROJECT_GROUP,
+//                    FETCH_NAME,
+//                    Range.between(2, 4),
+//                    "Access to the features of a table and retuen a list with the values.",
+//                    FETCH_NAME+"({{value}}, store, where, order)",
+//                    new String[]{
+//                        "value - value to retrieve from the store, usually an expression in the columns of this are involved.",
+//                        "store - data store from which values will be collected",
+//                        "where - Optional. String value with a filter expression",
+//                        "order - Optional. String value with the order. must be a string with the names of separate fields with commas"
+//                    },
+//                    "Object"
+//            );
+//        }
+//
+//        @Override
+//        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+//            Object value;
+//            String where = null;
+//            String order = null;
+//            String expression_s = getStr(args, 0);
+//            FeatureStore store = (FeatureStore) getObject(args, 1);
+//            switch (args.length) {
+//                case 3:
+//                    where = getStr(args, 2);
+//                    break;
+//                case 4:
+//                    where = getStr(args, 2);
+//                    order = getStr(args, 3);
+//                    break;
+//            }
+//            try {
+//                List<Feature> features;
+//                if (where == null && order == null) {
+//                    features = store.getFeatures();
+//                } else {
+//                    FeatureQuery query = store.createFeatureQuery();
+//                    if (where != null) {
+//                        query.addFilter(where);
+//                    }
+//                    if (order != null) {
+//                        query.getOrder().add(order);
+//                    }
+//                    query.retrievesAllAttributes();
+//                    features = store.getFeatures(query);
+//                }
+//                UnmodifiableBasicList<Object> list = new ListOfFeaturesWrapper(
+//                        features,
+//                        interpreter.getSymbolTable(), 
+//                        expression_s
+//                );
+//                return list;
+//            } catch (Exception ex) {
+//                throw new ExpressionRuntimeException("Problems calling '"+FETCH_NAME+"' function", ex);
+//            }
+//        }
+//    }
+//
+//    private class FetchFirstFunction extends AbstractFunction {
+//
+//        public FetchFirstFunction() {
+//            super(
+//                    PROJECT_GROUP,
+//                    FETCH_FIRST_NAME,
+//                    Range.between(2, 4),
+//                    "Access to the first feature of the layer, and "
+//                    + "return the value of the attribute.",
+//                    FETCH_FIRST_NAME+"({{value}}, store, where, order)",
+//                    new String[]{
+//                        "value - value to retrieve from the store, usually an expression in the columns of this are involved.",
+//                        "store - data store from which values will be collected",
+//                        "where - Optional. String value with a filter expression",
+//                        "order - Optional. String value with the order. must be a string with the names of separate fields with commas"
+//                    },
+//                    "Object"
+//            );
+//        }
+//
+//        @Override
+//        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+//            Object value;
+//            String where = null;
+//            String order = null;
+//            String expression_s = getStr(args, 0);
+//            FeatureStore store = (FeatureStore) getObject(args, 1);
+//            if( store == null ) {
+//                throw new ExpressionRuntimeException("Problems calling '"+FETCH_FIRST_NAME+"' function, the store is null.");
+//            }
+//            switch (args.length) {
+//                case 3:
+//                    where = getStr(args, 2);
+//                    break;
+//                case 4:
+//                    where = getStr(args, 2);
+//                    order = getStr(args, 3);
+//                    break;
+//            }
+//            try {
+//                FeatureSet set;
+//                if (where == null && order == null) {
+//                    set = store.getFeatureSet();
+//                } else {
+//                    FeatureQuery query = store.createFeatureQuery();
+//                    if (where != null) {
+//                        query.addFilter(where);
+//                    }
+//                    if (order != null) {
+//                        query.getOrder().add(order);
+//                    }
+//                    query.retrievesAllAttributes();
+//                    set = store.getFeatureSet(query);
+//                }
+//                Feature feature = set.first();
+//                if (feature == null) {
+//                    return null;
+//                }
+//                DataManager dataManager = DALLocator.getDataManager();
+//                FeatureSymbolTable symbolTable = dataManager.createFeatureSymbolTable();
+//                symbolTable.setFeature(feature);
+//
+//                ExpressionEvaluatorManager expManager = ExpressionEvaluatorLocator.getManager();
+//                Expression expression = expManager.createExpression();
+//                expression.setPhrase(expression_s);
+//                value = expression.execute(symbolTable.createParent());
+//                
+//                return value;
+//            } catch (Exception ex) {
+//                throw new ExpressionRuntimeException("Problems calling '"+FETCH_FIRST_NAME+"' function", ex);
+//            }
+//        }
+//    }
+
+    private class FetchFirstSelectedFunction extends AbstractFunction {
+
+        public FetchFirstSelectedFunction() {
+            super(
+                    PROJECT_GROUP,
+                    FETCH_FIRST_SELECTED_NAME,
+                    Range.is(2),
+                    "Access to the first feature of the selection.",
+                    FETCH_FIRST_SELECTED_NAME+"({{value}}, store)",
+                    new String[]{
+                        "value - value to retrieve from the store, usually an expression in the columns of this are involved.",
+                        "store - data store from which values will be collected"
+                    },
+                    "Object"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            String expression_s = getStr(args, 0);
+            FeatureStore store = (FeatureStore) getObject(args, 1);
+            try {
+                FeatureSet set = store.getFeatureSelection();
+                Feature feature = set.first();
+                if (feature == null) {
+                    return null;
+                }
+                DataManager dataManager = DALLocator.getDataManager();
+                FeatureSymbolTable symbolTable = dataManager.createFeatureSymbolTable();
+                symbolTable.setFeature(feature);
+
+                ExpressionEvaluatorManager expManager = ExpressionEvaluatorLocator.getManager();
+                Expression expression = expManager.createExpression();
+                expression.setPhrase(expression_s);
+                Object value = expression.execute(symbolTable.createParent());
+                
+                return value;
+            } catch (Exception ex) {
+                throw new ExpressionRuntimeException("Problems calling '"+FETCH_FIRST_SELECTED_NAME+"' function", ex);
+            }
+        }
+    }
+
+    private class ViewFunction extends AbstractFunction {
+
+        public ViewFunction() {
+            super(
+                    PROJECT_GROUP,
+                    "view",
+                    Range.is(1),
+                    "Access to the indicated view",
+                    "view({{viewName}})",
+                    new String[]{
+                        "view - String value with the name of a view"
+                    },
+                    "DocumentView"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            String viewName = getStr(args, 0);
+            Project project = currentProject.get();
+            ViewDocument view = (ViewDocument) project.getDocument(viewName, ViewManager.TYPENAME);
+            return view;
+        }
+
+    }
+
+    private class ViewBBoxFunction extends AbstractFunction {
+
+        public ViewBBoxFunction() {
+            super(
+                    PROJECT_GROUP,
+                    "viewbbox",
+                    Range.is(0),
+                    "Return the BBox of the active view.",
+                    "viewbbox()",
+                    null,
+                    "Geometry"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            return currentViewEnvelope.get();
+        }
+
+    }
+
+
+    private class SavedPointFunction extends AbstractFunction {
+
+        public SavedPointFunction() {
+            super(
+                    PROJECT_GROUP,
+                    "savedpoint",
+                    Range.is(1),
+                    "Return the value of the saved point with the name indicated.\n"
+                            + "If the named point do not exists return null.",
+                    "savedpoint({{name}})",
+                    new String[]{
+                        "name - String value with the name of the point"
+                    },
+                    "Geometry"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            TemporaryStorageManager manager = TemporaryStorageLocator.getTemporaryStorageManager();
+            TemporaryStorageGroup storage = manager.create("Points",Point.class);
+            Geometry value = (Geometry) storage.get(getStr(args, 0));
+            return value;
+        }
+		
+		}
+
+    private  class AreaFunction extends AbstractGeometryFunction {
+        
+        public AreaFunction() {
+            super(
+                    PROJECT_GROUP,
+                    AREA_NAME,
+                    Range.between(2,3),
+                    "Calculate the area of the geometry in the indicated units",
+                    AREA_NAME+"({{geometry}}, 'm�')",
+                    new String[]{
+                        "geometry - Geometry",
+                        "Projection - Optional. Projection of the geometry or a string with the projection name",
+                        "units - String value with the name the units to use"
+                    },
+                    "Double"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            int units = 0;
+            IProjection proj = null;
+            Geometry geom = getGeom(args, 0);
+            switch( args.length ) {
+                case 2:
+                    units = getUnitsArea(args, 1);
+                    break;
+                case 3:
+                    proj = getProjection(args, 1);
+                    units = getUnitsArea(args, 2);
+                    break;
+            }
+            if (proj == null) {
+                proj = geom.getProjection();
+            }
+            AreaAndPerimeterCalculator calculator = new AreaAndPerimeterCalculator();
+            double area = calculator.area(geom, proj, units);
+            return area;
+        }
+    }
+
+    private class PerimeterFunction extends AbstractGeometryFunction {
+
+        public PerimeterFunction() {
+            super(
+                    PROJECT_GROUP,
+                    PERIMETER_NAME,
+                    Range.between(2,3),
+                    "Calculate the perimeter of the geometry in the indicated units",
+                    PERIMETER_NAME+"({{geometry}}, 'm')",
+                    new String[]{
+                        "geometry - Geometry",
+                        "Projection - Optional. Projection of the geometry or a string with the projection name",
+                        "units - String value with the name the units to use"
+                    },
+                    "Double"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            int units = 0;
+            IProjection proj = null;
+            Geometry geom = getGeom(args, 0);
+            switch( args.length ) {
+                case 2:
+                    units = getUnitsDistance(args, 1);
+                    break;
+                case 3:
+                    proj = getProjection(args, 1);
+                    units = getUnitsDistance(args, 2);
+                    break;
+            }
+            if (proj == null) {
+                proj = geom.getProjection();
+            }
+            AreaAndPerimeterCalculator calculator = new AreaAndPerimeterCalculator();
+            double perimeter = calculator.perimeter(geom, proj, units);
+            return perimeter;
+        }
+    }
+
+    private class PropertyFunction extends AbstractFunction {
+
+        public PropertyFunction() {
+            super(
+                    PROJECT_GROUP,
+                    "property",
+                    Range.between(2, 3),
+                    "Access to a property value in a properties file. If the"
+                    + "indicated filename is not absolute, access it relative"
+                    + "to the project.",
+                    "property({{filename}}, name, defaultValue)",
+                    new String[]{
+                        "filename - String value with the name of the properties file",
+                        "name - String value with the name of the property to retrieve from the file",
+                        "defaultValue - Optional. Default value if can't access the file or the property",},
+                    "String"
+            );
+        }
+
+        @Override
+        public Object call(Interpreter interpreter, Object[] args) throws Exception {
+            String filename = getStr(args, 0);
+            String name = getStr(args, 1);
+            String defaultValue = null;
+            if (args.length == 3) {
+                defaultValue = getStr(args, 2);
+            }
+
+            File file = new File(filename);
+            if (!file.isAbsolute()) {
+                Project project = currentProject.get();
+                if (project.getFile() == null) {
+                    return defaultValue;
+                }
+                file = new File(project.getFile().getParent(), filename);
+            }
+            Map<File, Properties> x = propertiesFiles.get();
+            Properties properties = x.get(file);
+            if (properties == null) {
+                properties = new Properties();
+                FileInputStream in = null;
+                try {
+                    in = new FileInputStream(file);
+                    properties.load(in);
+                } catch (Exception ex) {
+                    return defaultValue;
+                } finally {
+                    IOUtils.closeQuietly(in);
+                }
+                x.put(file, properties);
+            }
+            String value = properties.getProperty(name, defaultValue);
+            return value;
+        }
+
+    }
+
+    ProjectValue currentProject = new ProjectValue();
+    CurrentViewValue currentView = new CurrentViewValue();
+    CurrentViewEnvelopeValue currentViewEnvelope = new CurrentViewEnvelopeValue();
+    PropertiesValue propertiesFiles = new PropertiesValue();
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public ProjectSymbolTable() {
+        super(NAME);
+        this.addFunction(new CurrentProjectFunction());
+        this.addFunction(new TabbleFunction());
+//        this.addFunction(new FetchFunction());
+//        this.addFunction(new FetchFirstFunction());
+        this.addFunction(new FetchFirstSelectedFunction());
+        this.addFunction(new ViewFunction());
+        this.addFunction(new ViewBBoxFunction());
+        this.addFunction(new PropertyFunction());
+        this.addFunction(new AreaFunction());
+        this.addFunction(new PerimeterFunction());
+        this.addFunction(new SavedPointFunction());
+        this.addFunction(new ApplicationFunction());
+    }
+
+    private MapContext getMapContext(Feature feature) {
+        FeatureStore store = feature.getStore();
+        Project project = ProjectManager.getInstance().getCurrentProject();
+        project.getDocuments(ViewManager.TYPENAME);
+        for (Document document : project.getDocuments(ViewManager.TYPENAME)) {
+            ViewDocument view = (ViewDocument) document;
+            MapContext mapContext = view.getMapContext();
+            FLayer layer = getLayer(mapContext, store);
+            if (layer != null) {
+                return mapContext;
+            }
+        }
+        return null;
+    }
+
+    private FLayer getLayer(MapContext mapContext, FeatureStore store) {
+        Iterator<FLayer> it = mapContext.deepiterator();
+        while (it.hasNext()) {
+            FLayer layer = it.next();
+            if (layer instanceof FLyrVect) {
+                FeatureStore layer_store = ((FLyrVect) layer).getFeatureStore();
+                if (layer_store == store) {
+                    return layer;
+                }
+            }
+        }
+        return null;
+    }
+
+    private IProjection getProjection(Object[] args, int i) {
+        Object value = args[i];
+        if (value == null) {
+            return null;
+        }
+        if (value instanceof IProjection) {
+            return (IProjection) value;
+        }
+        String code = value.toString();
+        return CRSFactory.getCRS(code);
+    }
+
+    private int getUnitsArea(Object[] args, int i) {
+        Object value = args[i];
+        if (value == null) {
+            throw new IllegalArgumentException("Illegal unit value 'null'");
+        }
+        if (value instanceof Number) {
+            return ((Number) value).intValue();
+        }
+        String name = value.toString();
+        String[] names = MapContext.getAreaAbbr();
+        for (int j = 0; j < names.length; j++) {
+            if (name.equalsIgnoreCase(names[j])) {
+                return j;
+            }
+        }
+        names = MapContext.getAreaNames();
+        for (int j = 0; j < names.length; j++) {
+            if (name.equalsIgnoreCase(names[j])) {
+                return j;
+            }
+        }
+        throw new IllegalArgumentException("Illegal unit name '" + name + "'");
+    }
+
+    private int getUnitsDistance(Object[] args, int i) {
+        Object value = args[i];
+        if (value == null) {
+            throw new IllegalArgumentException("Illegal unit value 'null'");
+        }
+        if (value instanceof Number) {
+            return ((Number) value).intValue();
+        }
+        String name = value.toString();
+        String[] names = MapContext.getDistanceAbbr();
+        for (int j = 0; j < names.length; j++) {
+            if (name.equalsIgnoreCase(names[j])) {
+                return j;
+            }
+        }
+        names = MapContext.getDistanceNames();
+        for (int j = 0; j < names.length; j++) {
+            if (name.equalsIgnoreCase(names[j])) {
+                return j;
+            }
+        }
+        throw new IllegalArgumentException("Illegal unit name '" + name + "'");
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanel.java	(revision 46118)
@@ -0,0 +1,160 @@
+package org.gvsig.app.project.symboltables.functionPanels.area;
+
+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.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.function.Predicate;
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ListElement;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class AreaAditionalPanel 
+        extends AreaAditionalPanelView 
+        implements Component
+    {
+
+    private final JExpressionBuilder expressionBuilder;
+    private AttributeDescriptorPickerController fieldPicker;
+    
+    public AreaAditionalPanel(JExpressionBuilder expressionBuilder) {
+        this.expressionBuilder = expressionBuilder;
+        this.initComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private void initComponents() {
+        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        
+        this.fieldPicker = dataSwingManager.createAttributeDescriptorPickerController(
+            this.cboFields, 
+            new Predicate<FeatureAttributeDescriptor>() {
+            @Override
+            public boolean test(FeatureAttributeDescriptor descriptor) {
+                if( descriptor.getDataType().getType()!=DataTypes.GEOMETRY ) {
+                    return false;
+                }
+                GeometryType geomtype = descriptor.getGeomType();
+                if( geomtype.getType()==Geometry.TYPES.GEOMETRY ) {
+                    return true;
+                }
+                boolean isSurface = geomtype.isTypeOf(Geometry.TYPES.SURFACE) ||
+                        geomtype.isTypeOf(Geometry.TYPES.MULTISURFACE);
+                return isSurface;
+            }
+        });
+        final FeatureStore store = this.getFeatureStore();
+        try {
+            this.fieldPicker.setFeatureType(store.getDefaultFeatureType());
+        } catch (DataException ex) {
+        }
+        
+        String[] abbrev = MapContext.getAreaAbbr();
+        String[] names = MapContext.getAreaNames();
+        List<ListElement<String>> elements = new ArrayList<>();
+        for (int j = 0; j < names.length; j++) {
+            elements.add(new ListElement<>(names[j]+" ("+abbrev[j]+")", abbrev[j]));
+        }
+        Collections.sort(elements, new Comparator<ListElement<String>>() {
+            @Override
+            public int compare(ListElement<String> o1, ListElement<String> o2) {
+                return o1.toString().compareTo(o2.toString());
+            }
+        });
+        
+        DefaultListModel unitsModel = new DefaultListModel();
+        for (ListElement<String> element : elements) {
+            unitsModel.addElement(element);
+        }
+        this.lstUnits.setModel(unitsModel);
+        if( lstUnits.getModel().getSize()>0 ) {
+            this.lstUnits.setSelectedIndex(0);
+        }
+        if( this.cboFields.getModel().getSize()>0 ) {
+            this.cboFields.setSelectedIndex(0);
+        }    
+        this.cboFields.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                doUpdatePreview();
+            }
+        });
+        this.lstUnits.addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if( e.getValueIsAdjusting() ) {
+                    return;
+                }
+                doUpdatePreview();
+            }
+        });
+        this.btnInsertFunction.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doInsertFunction();
+            }
+        });
+        doUpdatePreview();
+    }
+
+    private void doUpdatePreview() {
+        FeatureAttributeDescriptor descriptor = this.fieldPicker.get();
+        String fieldName;
+        if( descriptor == null ) {
+            fieldName = "{{geometry}}";
+        } else {
+            fieldName = descriptor.getName();
+        }
+        String unitName = (String) ListElement.getSelected(lstUnits);
+        String template = ProjectSymbolTable.AREA_NAME + "( "+fieldName+", '"+unitName+"' )";
+        this.txtPreview.setText(template);
+        this.txtPreview.setCaretPosition(0);
+        
+    }
+    
+    private void doInsertFunction() {
+        this.expressionBuilder.insertText(this.txtPreview.getText());
+    }
+    
+    private FeatureStore getFeatureStore() {
+        List<Element> elements = this.expressionBuilder.getElements();
+        for (Element element : elements) {
+            if( element instanceof FeatureStoreElement ) {
+                FeatureStore store = ((FeatureStoreElement) element).getFeatureStore();
+                if( store != null ) {
+                    return store;
+                }
+            }
+        }
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelFactory.java	(revision 46118)
@@ -0,0 +1,35 @@
+package org.gvsig.app.project.symboltables.functionPanels.area;
+
+import org.gvsig.app.project.symboltables.functionPanels.perimeter.PerimeterAditionalPanelFactory;
+import org.gvsig.app.project.symboltables.functionPanels.perimeter.PerimeterAditionalPanel;
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.FunctionAdditionalPanelFactory;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.expressionevaluator.swing.spi.AbstractFunctionAdditionalPanelFactory;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class AreaAditionalPanelFactory extends AbstractFunctionAdditionalPanelFactory {
+    
+    public AreaAditionalPanelFactory() {
+        super(ProjectSymbolTable.AREA_NAME);
+    }
+
+    @Override
+    public Component createAdditionalPanel(JExpressionBuilder expressionBuilder, Object... args) {
+        Component p = new AreaAditionalPanel(expressionBuilder);
+        return p;
+    }
+
+    public static void selfRegister() {
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        FunctionAdditionalPanelFactory factory = new AreaAditionalPanelFactory();
+        manager.registerAdditionalPanel(factory);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.xml	(revision 46118)
@@ -0,0 +1,706 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblTitle</at>
+            <at name="width">997</at>
+            <at name="text">_Area</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">8</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">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="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="name">lblSelectUnits</at>
+            <at name="width">997</at>
+            <at name="text">_Select_units</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">10</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstUnits</at>
+            <at name="width">995</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">363</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">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">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="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="name">lblSelectField</at>
+            <at name="width">997</at>
+            <at name="text">_Select_field</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">6</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.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="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="name">cboFields</at>
+            <at name="width">997</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">14</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">embedded.2136574238</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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="actionCommand">_Insert_function</at>
+                 <at name="name">btnInsertFunction</at>
+                 <at name="width">122</at>
+                 <at name="text">_Insert_function</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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">12</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.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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtPreview</at>
+            <at name="width">997</at>
+            <at name="height">20</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="15">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/area/AreaAditionalPanelView.java	(revision 46118)
@@ -0,0 +1,187 @@
+package org.gvsig.app.project.symboltables.functionPanels.area;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+
+public class AreaAditionalPanelView extends JPanel
+{
+   JLabel lblTitle = new JLabel();
+   JLabel lblSelectUnits = new JLabel();
+   JList lstUnits = new JList();
+   JLabel lblSelectField = new JLabel();
+   JComboBox cboFields = new JComboBox();
+   JButton btnInsertFunction = new JButton();
+   JTextField txtPreview = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public AreaAditionalPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblTitle.setFont(new Font("Dialog",Font.BOLD,11));
+      lblTitle.setName("lblTitle");
+      lblTitle.setText("_Area");
+      jpanel1.add(lblTitle,cc.xy(2,2));
+
+      lblSelectUnits.setName("lblSelectUnits");
+      lblSelectUnits.setText("_Select_units");
+      jpanel1.add(lblSelectUnits,cc.xy(2,8));
+
+      lstUnits.setName("lstUnits");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstUnits);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,10));
+
+      lblSelectField.setName("lblSelectField");
+      lblSelectField.setText("_Select_field");
+      jpanel1.add(lblSelectField,cc.xy(2,4));
+
+      cboFields.setName("cboFields");
+      jpanel1.add(cboFields,cc.xy(2,6));
+
+      jpanel1.add(createPanel1(),cc.xy(2,14));
+      txtPreview.setBackground(new Color(236,233,216));
+      txtPreview.setEditable(false);
+      txtPreview.setName("txtPreview");
+      jpanel1.add(txtPreview,cc.xy(2,12));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnInsertFunction.setActionCommand("_Insert_function");
+      btnInsertFunction.setName("btnInsertFunction");
+      btnInsertFunction.setText("_Insert_function");
+      jpanel1.add(btnInsertFunction,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/fetch/FetchAditionalPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/fetch/FetchAditionalPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/fetch/FetchAditionalPanelView.xml	(revision 46118)
@@ -0,0 +1,1537 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/fetch/FetchAditionalPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/fetch/FetchAditionalPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="name">lblTitle</at>
+            <at name="width">855</at>
+            <at name="text">FETCH</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">20</at>
+           <at name="colspan">1</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="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="actionCommand">_Insert_function</at>
+            <at name="name">btnInsertFunction</at>
+            <at name="width">122</at>
+            <at name="text">_Insert_function</at>
+            <at name="height">22</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">12</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">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="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="name">lblValue</at>
+            <at name="width">46</at>
+            <at name="text">_Value</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblFilter</at>
+            <at name="width">46</at>
+            <at name="text">_Filter</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">16</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">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="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="name">lblOrder</at>
+            <at name="width">46</at>
+            <at name="text">_Order</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblSource</at>
+            <at name="width">46</at>
+            <at name="text">_Source</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">4</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.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="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="selectedItem">
+             <object classname="com.jeta.forms.store.properties.ListItemProperty">
+              <at name="name">listitem</at>
+              <at name="label">Table</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="name">cboSourceMode</at>
+            <at name="width">798</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">Table</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">Layer</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">Other</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="height">18</at>
+            <at name="itemCount">3</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">4</at>
+           <at name="row">6</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.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="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="name">cboSource1</at>
+            <at name="width">798</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">4</at>
+           <at name="row">8</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.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="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="name">cboSource2</at>
+            <at name="width">798</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">10</at>
+           <at name="colspan">3</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.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">_use_selection</at>
+            <at name="horizontalAlignment">11</at>
+            <at name="name">chkUseSelection</at>
+            <at name="width">855</at>
+            <at name="horizontalTextPosition">2</at>
+            <at name="text">_use_selection</at>
+            <at name="height">16</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">18</at>
+           <at name="colspan">3</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="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>
+            <at name="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtPreview</at>
+            <at name="width">855</at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">12</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">embedded.841901615</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtValue</at>
+                 <at name="width">770</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="name">btnValue</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">14</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">embedded.1158219727</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtFilter</at>
+                 <at name="width">770</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="name">btnFilter</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">16</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">embedded.441915799</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtOrder</at>
+                 <at name="width">766</at>
+                 <at name="enabled">false</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="name">btnOrder</at>
+                 <at name="width">16</at>
+                 <at name="text">...</at>
+                 <at name="enabled">false</at>
+                 <at name="height">18</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="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>
+            <at name="name">btnOrder</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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="21">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="19">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="20">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanel.java	(revision 46118)
@@ -0,0 +1,160 @@
+package org.gvsig.app.project.symboltables.functionPanels.perimeter;
+
+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.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.function.Predicate;
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ListElement;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class PerimeterAditionalPanel 
+        extends PerimeterAditionalPanelView 
+        implements Component
+    {
+
+    private final JExpressionBuilder expressionBuilder;
+    private AttributeDescriptorPickerController fieldPicker;
+    
+    public PerimeterAditionalPanel(JExpressionBuilder expressionBuilder) {
+        this.expressionBuilder = expressionBuilder;
+        this.initComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private void initComponents() {
+        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        
+        this.fieldPicker = dataSwingManager.createAttributeDescriptorPickerController(
+            this.cboFields, 
+            new Predicate<FeatureAttributeDescriptor>() {
+            @Override
+            public boolean test(FeatureAttributeDescriptor descriptor) {
+                if( descriptor.getDataType().getType()!=DataTypes.GEOMETRY ) {
+                    return false;
+                }
+                GeometryType geomtype = descriptor.getGeomType();
+                if( geomtype.getType()==Geometry.TYPES.GEOMETRY ) {
+                    return true;
+                }
+                boolean isSurface = geomtype.isTypeOf(Geometry.TYPES.SURFACE) ||
+                        geomtype.isTypeOf(Geometry.TYPES.MULTISURFACE);
+                return isSurface;
+            }
+        });
+        final FeatureStore store = this.getFeatureStore();
+        try {
+            this.fieldPicker.setFeatureType(store.getDefaultFeatureType());
+        } catch (DataException ex) {
+        }
+        
+        String[] abbrev = MapContext.getDistanceAbbr();
+        String[] names = MapContext.getDistanceNames();
+        List<ListElement<String>> elements = new ArrayList<>();
+        for (int j = 0; j < names.length; j++) {
+            elements.add(new ListElement<>(names[j]+" ("+abbrev[j]+")", abbrev[j]));
+        }
+        Collections.sort(elements, new Comparator<ListElement<String>>() {
+            @Override
+            public int compare(ListElement<String> o1, ListElement<String> o2) {
+                return o1.toString().compareTo(o2.toString());
+            }
+        });
+        
+        DefaultListModel unitsModel = new DefaultListModel();
+        for (ListElement<String> element : elements) {
+            unitsModel.addElement(element);
+        }
+        this.lstUnits.setModel(unitsModel);
+        if( lstUnits.getModel().getSize()>0 ) {
+            this.lstUnits.setSelectedIndex(0);
+        }
+        if( this.cboFields.getModel().getSize()>0 ) {
+            this.cboFields.setSelectedIndex(0);
+        }    
+        this.cboFields.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                doUpdatePreview();
+            }
+        });
+        this.lstUnits.addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if( e.getValueIsAdjusting() ) {
+                    return;
+                }
+                doUpdatePreview();
+            }
+        });
+        this.btnInsertFunction.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doInsertFunction();
+            }
+        });
+        doUpdatePreview();
+    }
+
+    private void doUpdatePreview() {
+        FeatureAttributeDescriptor descriptor = this.fieldPicker.get();
+        String fieldName;
+        if( descriptor == null ) {
+            fieldName = "{{geometry}}";
+        } else {
+            fieldName = descriptor.getName();
+        }
+        String unitName = (String) ListElement.getSelected(lstUnits);
+        String template = ProjectSymbolTable.PERIMETER_NAME + "( "+fieldName+", '"+unitName+"' )";
+        this.txtPreview.setText(template);
+        this.txtPreview.setCaretPosition(0);
+        
+    }
+    
+    private void doInsertFunction() {
+        this.expressionBuilder.insertText(this.txtPreview.getText());
+    }
+    
+    private FeatureStore getFeatureStore() {
+        List<Element> elements = this.expressionBuilder.getElements();
+        for (Element element : elements) {
+            if( element instanceof FeatureStoreElement ) {
+                FeatureStore store = ((FeatureStoreElement) element).getFeatureStore();
+                if( store != null ) {
+                    return store;
+                }
+            }
+        }
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelFactory.java	(revision 46118)
@@ -0,0 +1,33 @@
+package org.gvsig.app.project.symboltables.functionPanels.perimeter;
+
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.FunctionAdditionalPanelFactory;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.expressionevaluator.swing.spi.AbstractFunctionAdditionalPanelFactory;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class PerimeterAditionalPanelFactory extends AbstractFunctionAdditionalPanelFactory {
+    
+    public PerimeterAditionalPanelFactory() {
+        super(ProjectSymbolTable.PERIMETER_NAME);
+    }
+
+    @Override
+    public Component createAdditionalPanel(JExpressionBuilder expressionBuilder, Object... args) {
+        Component p = new PerimeterAditionalPanel(expressionBuilder);
+        return p;
+    }
+
+    public static void selfRegister() {
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        FunctionAdditionalPanelFactory factory = new PerimeterAditionalPanelFactory();
+        manager.registerAdditionalPanel(factory);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.xml	(revision 46118)
@@ -0,0 +1,706 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lblTitle</at>
+            <at name="width">997</at>
+            <at name="text">_Perimeter</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">8</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">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="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="name">lblSelectUnits</at>
+            <at name="width">997</at>
+            <at name="text">_Select_units</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">10</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstUnits</at>
+            <at name="width">995</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">363</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">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">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="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="name">lblSelectField</at>
+            <at name="width">997</at>
+            <at name="text">_Select_field</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">6</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.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="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="name">cboFields</at>
+            <at name="width">997</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">14</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">embedded.1986565366</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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="actionCommand">_Insert_function</at>
+                 <at name="name">btnInsertFunction</at>
+                 <at name="width">122</at>
+                 <at name="text">_Insert_function</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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">12</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.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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtPreview</at>
+            <at name="width">997</at>
+            <at name="height">20</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="15">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/perimeter/PerimeterAditionalPanelView.java	(revision 46118)
@@ -0,0 +1,187 @@
+package org.gvsig.app.project.symboltables.functionPanels.perimeter;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+
+public class PerimeterAditionalPanelView extends JPanel
+{
+   JLabel lblTitle = new JLabel();
+   JLabel lblSelectUnits = new JLabel();
+   JList lstUnits = new JList();
+   JLabel lblSelectField = new JLabel();
+   JComboBox cboFields = new JComboBox();
+   JButton btnInsertFunction = new JButton();
+   JTextField txtPreview = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public PerimeterAditionalPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblTitle.setFont(new Font("Dialog",Font.BOLD,11));
+      lblTitle.setName("lblTitle");
+      lblTitle.setText("_Perimeter");
+      jpanel1.add(lblTitle,cc.xy(2,2));
+
+      lblSelectUnits.setName("lblSelectUnits");
+      lblSelectUnits.setText("_Select_units");
+      jpanel1.add(lblSelectUnits,cc.xy(2,8));
+
+      lstUnits.setName("lstUnits");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstUnits);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,10));
+
+      lblSelectField.setName("lblSelectField");
+      lblSelectField.setText("_Select_field");
+      jpanel1.add(lblSelectField,cc.xy(2,4));
+
+      cboFields.setName("cboFields");
+      jpanel1.add(cboFields,cc.xy(2,6));
+
+      jpanel1.add(createPanel1(),cc.xy(2,14));
+      txtPreview.setBackground(new Color(236,233,216));
+      txtPreview.setEditable(false);
+      txtPreview.setName("txtPreview");
+      jpanel1.add(txtPreview,cc.xy(2,12));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnInsertFunction.setActionCommand("_Insert_function");
+      btnInsertFunction.setName("btnInsertFunction");
+      btnInsertFunction.setText("_Insert_function");
+      jpanel1.add(btnInsertFunction,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanel.java	(revision 46118)
@@ -0,0 +1,238 @@
+package org.gvsig.app.project.symboltables.functionPanels.firstlayerfeature;
+
+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.Collections;
+import java.util.Comparator;
+import java.util.List;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComponent;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+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.view.ViewDocument;
+import org.gvsig.app.project.documents.view.ViewManager;
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
+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.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.LayersTreeModel;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FirstLayerFeatureAditionalPanel 
+        extends FirstLayerFeatureAditionalPanelView 
+        implements Component
+    {
+
+    private final JExpressionBuilder expressionBuilder;
+    private AttributeDescriptorPickerController fieldPicker;
+    private AttributeDescriptorPickerController pickerFields;
+    private ExpressionPickerController picketFilter;
+    private FeatureSymbolTable featureSymbolTable;
+    private FeatureStoreElement storeElement;
+    
+    public FirstLayerFeatureAditionalPanel(JExpressionBuilder expressionBuilder) {
+        this.expressionBuilder = expressionBuilder;
+        this.initComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private void initComponents() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        
+        toolsSwingManager.setDefaultPopupMenu(this.txtPreview);
+        
+        Project project = application.getCurrentProject();
+        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
+        List<ListElement<Document>> views2 = new ArrayList<>();
+        for (Document view : views) {
+            views2.add(new ListElement<>(view.getName(),view));
+        }
+        Collections.sort(views2, new Comparator<ListElement<Document>>() {
+            @Override
+            public int compare(ListElement<Document> o1, ListElement<Document> o2) {
+                return StringUtils.compare(o1.toString(), o2.toString());
+            }
+        });
+        DefaultComboBoxModel model = new DefaultComboBoxModel();
+        for (ListElement<Document> element : views2) {
+            model.addElement(element);
+        }
+        this.cboViews.setModel(model);
+        this.cboViews.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                doChangeView();
+            }
+        });
+    
+        this.cboLayers.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                doChangeLayer();
+            }
+        });
+    
+        this.pickerFields = DALSwingLocator.getSwingManager().createAttributeDescriptorPickerController(
+                this.cboFields
+        );
+        this.pickerFields.addChangeListener(new ChangeListener() {
+            @Override
+            public void stateChanged(ChangeEvent e) {
+                doChangeField();
+            }
+        });
+    
+        this.picketFilter = ExpressionEvaluatorSwingLocator.getManager().createExpressionPickerController(
+                this.txtFilter, 
+                this.btnFilter
+        );
+        this.cboViews.setSelectedIndex(0);
+        doChangeView();
+        
+        this.btnInsertFunction.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doInsertFunction();
+            }
+        });
+
+
+        this.featureSymbolTable = dataManager.createFeatureSymbolTable();
+        this.storeElement = dataSwingManager.createFeatureStoreElement();
+        this.picketFilter.addElement(this.storeElement);
+    }
+
+    private void doChangeView() {
+        ViewDocument viewdoc = (ViewDocument) ListElement.getSelected(this.cboViews);
+        if( viewdoc == null ) {
+            this.cboLayers.setEnabled(false);
+            this.pickerFields.setEnabled(false);
+            return;
+        }
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        LayersTreeModel layerTreeModel = new LayersTreeModel(viewdoc.getMapContext().getLayers());
+        toolsSwingManager.setTreeModel(this.cboLayers, layerTreeModel);
+        this.cboLayers.setEnabled(true);
+        this.cboLayers.setSelectedIndex(0);
+        this.doChangeLayer();
+    }
+    
+    private void doChangeLayer() {
+        FLayer layer = (FLayer) ListElement.getSelected(this.cboLayers);
+        if( layer == null ) {
+            this.pickerFields.setEnabled(false);
+            return;
+        }
+        if( !(layer instanceof FLyrVect) ) {
+            this.pickerFields.setEnabled(false);
+            return;
+        }
+        FeatureStore store = ((FLyrVect)layer).getFeatureStore();
+        try {
+            this.pickerFields.setFeatureType(store.getDefaultFeatureType());
+            this.pickerFields.setEnabled(true);
+        } catch (DataException ex) {
+            //TODO:
+        }
+        Feature sampleFeature = null;
+        try {
+            sampleFeature = store.getFeatureSelection().first();
+            if( sampleFeature == null ) {
+                sampleFeature = store.first();
+            }
+        } catch (DataException ex) {
+        }      
+        if( sampleFeature!=null ) {
+            this.featureSymbolTable.setFeature(sampleFeature);
+            this.picketFilter.setPreviewSymbolTable(this.featureSymbolTable.createParent());
+        }
+        this.storeElement.setFeatureStore(store);
+    }
+    
+    private void doChangeField() {
+        FeatureAttributeDescriptor descriptor = this.pickerFields.get();
+        if( descriptor == null ) {
+            this.txtPreview.setText("");
+            return;
+        }
+        doUpdatePreview();
+    }
+    
+    private void doUpdatePreview() {
+//        ViewDocument viewdoc = (ViewDocument) ListElement.getSelected(this.cboViews);
+//        if( viewdoc == null ) {
+//            this.txtPreview.setText("");
+//            return;
+//        }
+//        FLayer layer = (FLayer) ListElement.getSelected(this.cboLayers);
+//        if( layer == null ) {
+//            this.txtPreview.setText("");
+//            return;
+//        }
+//        FeatureAttributeDescriptor descriptor = this.pickerFields.get();
+//        if( descriptor == null ) {
+//            this.txtPreview.setText("");
+//            return;
+//        }
+//        Expression filter = this.picketFilter.get();
+//        StringBuilder template = new StringBuilder();
+//        template.append(ProjectSymbolTable.FETCH_FIRST_NAME);
+//        template.append("( '");
+//        template.append(viewdoc.getName());
+//        template.append("', '");
+//        template.append(layer.getName());
+//        template.append("', '");
+//        template.append(descriptor.getName());
+//        template.append("'");
+//        if( !filter.isPhraseEmpty() ) {
+//            template.append(", '");
+//            template.append(StringEscapeUtils.escapeSql(filter.getPhrase()));            
+//            template.append("'");
+//        }
+//        template.append(" )");
+//        this.txtPreview.setText(template.toString());
+//        this.txtPreview.setCaretPosition(0);
+    }
+    
+    private void doInsertFunction() {
+        this.expressionBuilder.insertText(this.txtPreview.getText());
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelFactory.java	(revision 46118)
@@ -0,0 +1,33 @@
+package org.gvsig.app.project.symboltables.functionPanels.firstlayerfeature;
+
+import org.gvsig.app.project.symboltables.ProjectSymbolTable;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.FunctionAdditionalPanelFactory;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.expressionevaluator.swing.spi.AbstractFunctionAdditionalPanelFactory;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class FirstLayerFeatureAditionalPanelFactory extends AbstractFunctionAdditionalPanelFactory {
+    
+    public FirstLayerFeatureAditionalPanelFactory() {
+        super(null); //ProjectSymbolTable.FETCH_FIRST_NAME);
+    }
+
+    @Override
+    public Component createAdditionalPanel(JExpressionBuilder expressionBuilder, Object... args) {
+        Component p = new FirstLayerFeatureAditionalPanel(expressionBuilder);
+        return p;
+    }
+
+    public static void selfRegister() {
+//        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+//        FunctionAdditionalPanelFactory factory = new FirstLayerFeatureAditionalPanelFactory();
+//        manager.registerAdditionalPanel(factory);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.xml	(revision 46118)
@@ -0,0 +1,1254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="width">713</at>
+            <at name="name"/>
+            <at name="text">FistLayerFeature</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">4</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.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="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="name">cboViews</at>
+            <at name="width">663</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">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">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="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="width">39</at>
+            <at name="name"/>
+            <at name="text">_View</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">6</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">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="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="width">39</at>
+            <at name="name"/>
+            <at name="text">_Layer</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">6</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.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="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="name">cboLayers</at>
+            <at name="width">663</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">8</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">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="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="width">39</at>
+            <at name="name"/>
+            <at name="text">_Field</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">8</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.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="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="name">cboFields</at>
+            <at name="width">663</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">10</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">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="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="width">39</at>
+            <at name="name"/>
+            <at name="text">_Filter</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">12</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">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="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="width">39</at>
+            <at name="name"/>
+            <at name="text">_Order</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">47</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">4</at>
+           <at name="row">14</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.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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtPreview</at>
+            <at name="width">663</at>
+            <at name="height">20</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">4</at>
+           <at name="row">16</at>
+           <at name="colspan">1</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="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="actionCommand">_Insert_function</at>
+            <at name="name">btnInsertFunction</at>
+            <at name="width">122</at>
+            <at name="text">_Insert_function</at>
+            <at name="height">22</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">10</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">embedded.1406818497</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtFilter</at>
+                 <at name="width">635</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="name">btnFilter</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">4</at>
+           <at name="row">12</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">embedded.2084547916</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">txtOrder</at>
+                 <at name="width">631</at>
+                 <at name="enabled">false</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="width">16</at>
+                 <at name="name"/>
+                 <at name="text">...</at>
+                 <at name="enabled">false</at>
+                 <at name="height">18</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="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>
+            <at name="name">btnOrder</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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="17">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/symboltables/functionPanels/firstlayerfeature/FirstLayerFeatureAditionalPanelView.java	(revision 46118)
@@ -0,0 +1,231 @@
+package org.gvsig.app.project.symboltables.functionPanels.firstlayerfeature;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class FirstLayerFeatureAditionalPanelView extends JPanel
+{
+   JComboBox cboViews = new JComboBox();
+   JComboBox cboLayers = new JComboBox();
+   JComboBox cboFields = new JComboBox();
+   JTextField txtPreview = new JTextField();
+   JButton btnInsertFunction = new JButton();
+   JTextField txtFilter = new JTextField();
+   JButton btnFilter = new JButton();
+   JPanel btnOrder = new JPanel();
+   JTextField txtOrder = new JTextField();
+   JButton jbutton1 = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public FirstLayerFeatureAditionalPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setFont(new Font("Tahoma",Font.BOLD,11));
+      jlabel1.setText("FistLayerFeature");
+      jpanel1.add(jlabel1,cc.xywh(2,2,3,1));
+
+      cboViews.setName("cboViews");
+      jpanel1.add(cboViews,cc.xy(4,4));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("_View");
+      jpanel1.add(jlabel2,cc.xy(2,4));
+
+      JLabel jlabel3 = new JLabel();
+      jlabel3.setText("_Layer");
+      jpanel1.add(jlabel3,cc.xy(2,6));
+
+      cboLayers.setName("cboLayers");
+      jpanel1.add(cboLayers,cc.xy(4,6));
+
+      JLabel jlabel4 = new JLabel();
+      jlabel4.setText("_Field");
+      jpanel1.add(jlabel4,cc.xy(2,8));
+
+      cboFields.setName("cboFields");
+      jpanel1.add(cboFields,cc.xy(4,8));
+
+      JLabel jlabel5 = new JLabel();
+      jlabel5.setText("_Filter");
+      jpanel1.add(jlabel5,cc.xy(2,10));
+
+      JLabel jlabel6 = new JLabel();
+      jlabel6.setText("_Order");
+      jpanel1.add(jlabel6,cc.xy(2,12));
+
+      txtPreview.setBackground(new Color(236,233,216));
+      txtPreview.setEditable(false);
+      txtPreview.setName("txtPreview");
+      jpanel1.add(txtPreview,cc.xy(4,14));
+
+      btnInsertFunction.setActionCommand("_Insert_function");
+      btnInsertFunction.setName("btnInsertFunction");
+      btnInsertFunction.setText("_Insert_function");
+      jpanel1.add(btnInsertFunction,new CellConstraints(4,16,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      jpanel1.add(createPanel1(),cc.xy(4,10));
+      jpanel1.add(createbtnOrder(),cc.xy(4,12));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtFilter.setName("txtFilter");
+      jpanel1.add(txtFilter,cc.xy(1,1));
+
+      btnFilter.setName("btnFilter");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnFilter.setBorder(emptyborder1);
+      jpanel1.add(btnFilter,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createbtnOrder()
+   {
+      btnOrder.setName("btnOrder");
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      btnOrder.setLayout(formlayout1);
+
+      txtOrder.setEnabled(false);
+      txtOrder.setName("txtOrder");
+      btnOrder.add(txtOrder,cc.xy(1,1));
+
+      jbutton1.setActionCommand("...");
+      jbutton1.setEnabled(false);
+      jbutton1.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      jbutton1.setBorder(emptyborder1);
+      btnOrder.add(jbutton1,cc.xy(3,1));
+
+      addFillComponents(btnOrder,new int[]{ 2 },new int[0]);
+      return btnOrder;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java	(revision 46118)
@@ -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.app.project;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EventListener;
+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.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;
+import org.gvsig.tools.util.BaseListenerSupport;
+import org.gvsig.tools.util.BaseListenerSupport.NotificationListener;
+import org.gvsig.tools.util.Invocable;
+
+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;
+
+    private final BaseListenerSupport newProjectListeners;
+            
+    public interface ProjectEvent extends EventListener {
+        public int getId();
+        public Project getProject();
+    }
+    
+    public static class ProjectEventImpl implements ProjectEvent {
+        private final Project project;
+        private final int id;
+        public ProjectEventImpl(Project project, int id) {
+            this.project = project;
+            this.id = id;
+        }
+        @Override
+        public int getId() { return this.id; }
+        @Override
+        public Project getProject() { return this.project; }
+    }
+
+    public static ProjectManager getInstance() {
+        if (factory == null) {
+            factory = new ProjectManager();
+        }
+        return factory;
+    }
+
+    private ProjectManager() {
+        this.documentActionGroups = new HashMap<String, DocumentActionGroup>();
+        this.newProjectListeners = new BaseListenerSupport();
+    }
+
+    
+    public Project getCurrentProject() {
+        ProjectExtension ext = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
+        if( ext==null ) {
+            return null;
+        }
+        return ext.getProject();
+    }
+    
+    public void setCurrentProject(Project project) {
+        ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).setProject(project);
+    }
+
+    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 Iterator<? extends Document> createDocumentsByUser(String type, Invocable whenDocumentsLoadeds) {
+        logger.info("createDocumentsByUser('{}')", type);
+        return getDocumentManager(type).createDocumentsByUser(whenDocumentsLoadeds);
+    }
+
+    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();
+    }
+
+    public void addProjectListener(NotificationListener listener) {
+        this.newProjectListeners.addListener(listener);
+    }
+
+    public NotificationListener[] getProjectListeners() {
+        return (NotificationListener[]) this.newProjectListeners.getListeners();
+    }
+
+    public boolean hasProjectListeners() {
+        return this.newProjectListeners.hasListeners();
+    }
+    
+    public void removeProjectListener(NotificationListener listener) {
+        this.newProjectListeners.removeListener(listener);
+    }
+
+    public void removeAllProjectListener() {    
+        this.newProjectListeners.removeAllListener();
+    }
+    
+    public void notifyProjectEvent(ProjectEvent event) {
+        this.newProjectListeners.notifyEvent(event);
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/AbstractContextMenuAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/AddFilterToLayerAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/AddFilterToLayerAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/AddFilterToLayerAction.java	(revision 46118)
@@ -0,0 +1,135 @@
+package org.gvsig.app.project.documents.view.dalactions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.swing.AbstractDALActionFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class AddFilterToLayerAction 
+        extends AbstractAction 
+    {
+
+    public static class AddFilterToLayerActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "AddFilterToLayerAction";
+    
+        public AddFilterToLayerActionFactory() {
+            super(ACTION_NAME);
+        }
+
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new AddFilterToLayerAction(context);
+        }
+		
+		public static void selfRegister() {
+            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+            dalSwingManager.registerStoreAction(new AddFilterToLayerAction.AddFilterToLayerActionFactory());
+        }
+    }
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger(AddFilterToLayerAction.class);
+    
+    private final DALActionContext context;
+
+    public AddFilterToLayerAction(DALActionContext context) {
+        this.context = context;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.putValue(
+                Action.ACTION_COMMAND_KEY, 
+                AddFilterToLayerActionFactory.ACTION_NAME
+        );
+        this.putValue(
+                Action.SHORT_DESCRIPTION, 
+                i18n.getTranslation("_Add_filter_to_layer")
+        );
+        this.putValue(
+                Action.SMALL_ICON, 
+                ToolsSwingLocator.getIconThemeManager().getCurrent().get("filter-by-attributes-layer")
+        );
+    }
+	
+	private FLyrVect getFLyrVect(FeatureStore store) {
+		ApplicationManager aplication = ApplicationLocator.getApplicationManager();
+		FLayer layer = aplication.getCurrentLayer();
+		if(layer instanceof FLyrVect && ((FLyrVect)layer).getFeatureStore()==store) {
+			return (FLyrVect) layer;
+		}
+		ViewDocument viewDoc = (ViewDocument) aplication.getActiveDocument(ViewDocument.class);
+		if (viewDoc==null) {
+			return null;
+		}
+		for (FLayer layer1 : viewDoc.getMapContext().getLayers().getLayers(null)) {
+			if (layer1 instanceof FLyrVect && ((FLyrVect)layer1).getFeatureStore()==store) {
+				return (FLyrVect) layer1;
+			}
+		}
+		return null;
+	}
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            DataStore store = this.context.getStore();
+            if( !(store instanceof FeatureStore) ) {
+                return ;
+            }
+            FeatureStore featureStore = (FeatureStore) store;
+			FLyrVect layer = getFLyrVect(featureStore);
+			
+            FeatureQuery query = this.context.getQuery();
+            FeatureQuery layerQuery = null;
+            if (query != null){
+                Expression expFilter = query.getExpressionFilter();
+                if (expFilter != null && !expFilter.isEmpty()){
+                    if( layerQuery==null ) {
+                        layerQuery = featureStore.createFeatureQuery();
+                    }
+                    layerQuery.addFilter(expFilter);
+                    layerQuery.retrievesAllAttributes();
+                }
+                if( query.hasOrder() ) {
+                    if( layerQuery==null ) {
+                        layerQuery = featureStore.createFeatureQuery();
+                    }
+                    layerQuery.getOrder().copyFrom(query.getOrder());
+                }
+                if( layerQuery==null ) {
+//                  # Si el usuario pulso en OK sin haber introducido un filtro quitamos
+//                  # el filtro que pudiese tener la capa.
+                    layer.setBaseQuery(null);
+                } else {
+                    layer.setBaseQuery(layerQuery);
+                }
+//              # Por ultimo forzamos un repintado de la vista.
+				layer.getMapContext().invalidate();
+            }
+        
+        } catch (Exception ex) {
+            LOGGER.warn("Can't build selecction.", ex);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/ViewZoomAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/ViewZoomAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/ViewZoomAction.java	(revision 46118)
@@ -0,0 +1,106 @@
+package org.gvsig.app.project.documents.view.dalactions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import static javax.swing.Action.ACTION_COMMAND_KEY;
+import static javax.swing.Action.NAME;
+import static javax.swing.Action.SHORT_DESCRIPTION;
+import static javax.swing.Action.SMALL_ICON;
+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.expressionevaluator.Expression;
+import org.gvsig.fmap.dal.DataStore;
+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.swing.AbstractDALActionFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryUtils;
+import org.gvsig.fmap.geom.primitive.Envelope;
+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;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewZoomAction extends AbstractAction {
+
+    public static class ViewZoomActionFactory extends AbstractDALActionFactory {
+
+        public static final String ACTION_NAME = "ViewZoom";
+    
+        public ViewZoomActionFactory() {
+            super(ACTION_NAME);
+        }
+        
+        @Override
+        public Action createAction(DALActionContext context) {
+            return new ViewZoomAction(context);
+        }
+        
+        public static void selfRegister() {
+            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+            dalSwingManager.registerStoreAction(new ViewZoomActionFactory());
+        }
+        
+    }
+
+    private final DALActionContext context;
+
+    public ViewZoomAction(DALActionContext context) {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
+
+        this.context = context;
+        this.putValue(NAME, null);
+        this.putValue(SHORT_DESCRIPTION, i18nManager.getTranslation("_Zoom"));
+        this.putValue(SMALL_ICON, iconTheme.get("view-navigation-zoom-to-selection"));
+        this.putValue(ACTION_COMMAND_KEY, ViewZoomActionFactory.ACTION_NAME);
+        DataStore store = this.context.getStore();
+        this.setEnabled(store instanceof FeatureStore);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewDocument.class);
+        if( view == null ) {
+            return;
+        }
+        Expression filter = this.context.getFilterForSelecteds();
+        if (filter == null) {
+            FeatureQuery query = this.context.getQuery();
+            if( query!=null ) {
+              filter = query.getExpressionFilter();
+            }
+        }
+        if (filter == null) {
+            return;
+        }
+        try {
+            FeatureStore store = (FeatureStore) this.context.getStore();
+            FeatureSet set = store.getFeatureSet(filter);
+            Envelope envelope = GeometryUtils.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+            for (Feature feature : set) {
+                envelope.add(feature.getDefaultGeometry());
+            }
+            if( !envelope.isEmpty() ) {
+                view.getMapContext().getViewPort().setEnvelope(envelope);
+            }
+        } catch(Exception ex) {
+                
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/CreateTemporalLayerAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/CreateTemporalLayerAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/dalactions/CreateTemporalLayerAction.java	(revision 46118)
@@ -0,0 +1,272 @@
+package org.gvsig.app.project.documents.view.dalactions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.expressionevaluator.Expression;
+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.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.FeatureAttributeEmulator;
+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.store.jdbc.JDBCNewStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import org.gvsig.fmap.dal.swing.AbstractDALActionFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+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.IVectorLegend;
+import org.gvsig.tools.dataTypes.DataType;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.tools.namestranslator.NamesTranslator;
+import org.gvsig.tools.util.HasAFile;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class CreateTemporalLayerAction
+	extends AbstractAction {
+
+	public static class CreateTemporalLayerActionFactory extends AbstractDALActionFactory {
+
+		public static final String ACTION_NAME = "CreateTemporalLayerAction";
+
+		public CreateTemporalLayerActionFactory() {
+			super(ACTION_NAME);
+		}
+
+		@Override
+		public Action createAction(DALActionContext context) {
+			return new CreateTemporalLayerAction(context);
+		}
+
+		public static void selfRegister() {
+			DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+			dalSwingManager.registerStoreAction(new CreateTemporalLayerAction.CreateTemporalLayerActionFactory());
+		}
+	}
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(CreateTemporalLayerAction.class);
+
+	private final DALActionContext context;
+
+	public CreateTemporalLayerAction(DALActionContext context) {
+		this.context = context;
+		I18nManager i18n = ToolsLocator.getI18nManager();
+		this.putValue(
+			Action.ACTION_COMMAND_KEY,
+			CreateTemporalLayerActionFactory.ACTION_NAME
+		);
+		this.putValue(
+			Action.SHORT_DESCRIPTION,
+			i18n.getTranslation("_Create_layer_filtered")
+		);
+		this.putValue(
+			Action.SMALL_ICON,
+			ToolsSwingLocator.getIconThemeManager().getCurrent().get("view-layer-add")
+		);
+	}
+
+	private FeatureStore createTemporaryH2Store(String name, FeatureType ft_sourceStore, FeatureQuery query) throws Exception {
+		FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+		File tempFile = foldersManager.getUniqueTemporaryFile(name + UUID.randomUUID().toString());
+
+		// crear SERVER STORE
+		DataManager dataManager = DALLocator.getDataManager();
+		DataServerExplorerParameters serverParameters = dataManager.createServerExplorerParameters("H2Spatial");
+		((HasAFile) serverParameters).setFile(tempFile);
+		JDBCServerExplorer serverExplorer = (JDBCServerExplorer) dataManager.openServerExplorer("H2Spatial", serverParameters);
+
+		//Crear tablas en server store
+		JDBCNewStoreParameters newParametersTarget = serverExplorer.getAddParameters();
+		newParametersTarget.setDynValue("Table", name);
+		EditableFeatureType ft_targetStore = dataManager.createFeatureType();
+		ft_targetStore.addAll(ft_sourceStore);
+		boolean ignoreDefaultGeometry = false;
+
+		for (EditableFeatureAttributeDescriptor column : query.getExtraColumn().getColumns()) {
+			if (column.getType() == DataTypes.GEOMETRY) {
+				ignoreDefaultGeometry = true;
+			}
+		}
+		for (FeatureAttributeDescriptor attr : ft_sourceStore) {
+			DataType dataType = attr.getDataType();
+			EditableFeatureAttributeDescriptor eattr = ft_targetStore.getEditableAttributeDescriptor(attr.getName());
+			if (dataType.isContainer()) {
+				ft_targetStore.remove(attr.getName());
+				continue;
+			}
+			if (dataType.getType() == DataTypes.GEOMETRY && ignoreDefaultGeometry) {
+				ft_targetStore.remove(attr.getName());
+				continue;
+			}
+			if (eattr.isComputed()) {
+				eattr.setFeatureAttributeEmulator((FeatureAttributeEmulator) null);
+			}
+			if (eattr.isPrimaryKey()) {
+				eattr.setIsPrimaryKey(false);
+			}
+			if (!eattr.allowIndexDuplicateds()) {
+				eattr.setAllowIndexDuplicateds(true);
+			}
+		}
+		Map<String, EditableFeatureAttributeDescriptor> allExtraColumns = new HashMap<>();
+		for (EditableFeatureAttributeDescriptor column : ft_sourceStore.getExtraColumns().getColumns()) {
+			allExtraColumns.put(column.getName(), column);
+		}
+		for (EditableFeatureAttributeDescriptor column : query.getExtraColumn().getColumns()) {
+			allExtraColumns.put(column.getName(), column);
+		}
+		if (allExtraColumns.size() > 0) {
+			for (EditableFeatureAttributeDescriptor column : allExtraColumns.values()) {
+				DataType dataType = column.getDataType();
+				if (!dataType.isContainer()) {
+					EditableFeatureAttributeDescriptor attr;
+//					if (column.getType() == DataTypes.GEOMETRY) {
+//						attr = ft_targetStore.add(column.getName(), DataTypes.GEOMETRY);
+//						//attr.setGeometryType(column.getGeomType().getType(), column.getGeomType().getSubType());
+//					} else {
+//						attr = ft_targetStore.add(column.getName(), column.getType(), column.getSize());
+//					}
+					attr = ft_targetStore.add(column.getName(), column.getType());
+					attr.copyFrom(column);
+					attr.setFeatureAttributeEmulator((Expression)null);
+				}
+			}
+		}
+		NamesTranslator tr = NamesTranslator.createBaseTranslator();
+		for (FeatureAttributeDescriptor attr : ft_targetStore) {
+			tr.addSource(attr.getName());
+		}
+		String suggestedPk = tr.getSuggestion("ID");
+		EditableFeatureAttributeDescriptor pkAttr = ft_targetStore.add(suggestedPk, DataTypes.LONG);
+		pkAttr.setIsPrimaryKey(true);
+		newParametersTarget.setDefaultFeatureType(ft_targetStore);
+
+		serverExplorer.add("H2Spatial", newParametersTarget, true);
+
+		DataStoreParameters openParametersTarget = dataManager.createStoreParameters("H2Spatial");
+		openParametersTarget.setDynValue("database_file", tempFile);
+		openParametersTarget.setDynValue("Table", name);
+
+		//Creaci�n del store con los resultados
+		FeatureStore storeResults = (FeatureStore) dataManager.openStore("H2Spatial", openParametersTarget);
+		return storeResults;
+
+	}
+
+	private FLyrVect getFLyrVect(FeatureStore store) {
+		ApplicationManager aplication = ApplicationLocator.getApplicationManager();
+		FLayer layer = aplication.getCurrentLayer();
+		if (layer instanceof FLyrVect && ((FLyrVect) layer).getFeatureStore() == store) {
+			return (FLyrVect) layer;
+		}
+		ViewDocument viewDoc = (ViewDocument) aplication.getActiveDocument(ViewDocument.class);
+		if (viewDoc == null) {
+			return null;
+		}
+		for (FLayer layer1 : viewDoc.getMapContext().getLayers().getLayers(null)) {
+			if (layer1 instanceof FLyrVect && ((FLyrVect) layer1).getFeatureStore() == store) {
+				return (FLyrVect) layer1;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		FeatureStore featureStore = null;
+		FeatureStore targetStore = null;
+		FeatureSet fs = null;
+		ApplicationManager aplication = ApplicationLocator.getApplicationManager();
+		try {
+			Document viewDoc = aplication.getActiveDocument(ViewDocument.class);
+			if (viewDoc == null) {
+				//msgbox
+				return;
+			}
+			DataStore store = this.context.getStore();
+			if (!(store instanceof FeatureStore)) {
+				return;
+			}
+			featureStore = (FeatureStore) store;
+
+			FeatureQuery query = this.context.getQuery();
+			targetStore = createTemporaryH2Store(featureStore.getName() + "_filtered", featureStore.getDefaultFeatureTypeQuietly(), query);
+
+			fs = featureStore.getFeatureSet(query);
+			targetStore.edit(FeatureStore.MODE_APPEND);
+			long n = 0;
+			String pkName = targetStore.getDefaultFeatureTypeQuietly().getPrimaryKey()[0].getName();
+			for (Feature f : fs) {
+				EditableFeature newf = targetStore.createNewFeature(f);
+				newf.set(pkName, n++);
+				targetStore.insert(newf);
+			}
+			targetStore.finishEditingQuietly();
+			FLyrVect layer = (FLyrVect) MapContextLocator.getMapContextManager().createLayer(targetStore.getName(), targetStore);
+			layer.setTemporary(true);
+
+			FLyrVect sourceLayer = getFLyrVect(featureStore);
+			if (sourceLayer != null) {
+				layer.setProjection(sourceLayer.getProjection());
+				if (!query.hasGroupByColumns()) {
+					try {
+						if (sourceLayer != null && sourceLayer.getGeometryType() == layer.getGeometryType()) {
+							ILegend legend = sourceLayer.getLegend().cloneLegend();
+							layer.setLegend((IVectorLegend) legend);
+						}
+					} catch (Exception ex) {
+						LOGGER.warn("Not able to apply same legend", ex);
+					}
+				}
+			}
+
+			IView view = (IView) viewDoc.getMainWindow();
+			view.getMapControl().addLayer(layer);
+
+		} catch (Exception ex) {
+			LOGGER.warn("Can't create filtered layer.", ex);
+			FeatureStore.cancelEditingQuietly(targetStore);
+			//msgbox
+		} finally {
+			DisposeUtils.disposeQuietly(fs);
+			DisposeUtils.disposeQuietly(featureStore);
+			DisposeUtils.disposeQuietly(targetStore);
+		}
+
+	}
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanel.java	(revision 46118)
@@ -0,0 +1,170 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturerectangle;
+
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import javax.swing.JComponent;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import org.gvsig.andami.IconThemeHelper;
+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.IView;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
+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.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewCaptureRectanglePanel extends ViewCaptureRectanglePanelView implements Component {
+    
+    private Geometry geometry = null;
+    private MapControl mapControl = null;
+    private String previousTool = null;
+    private Behavior tool = null;
+    
+    public ViewCaptureRectanglePanel() {
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        
+        toolsSwingManager.setDefaultPopupMenu(this.txtBox);
+        
+        this.btnToggleCapture.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doToggleCapture();
+            }
+        });
+        this.tool = new RectangleBehavior(new RectangleListener() {
+            @Override
+            public void rectangle(EnvelopeEvent event) throws BehaviorException {
+                setGeometry(event.getWorldCoordRect().getGeometry());
+            }
+
+            @Override
+            public Image getImageCursor() {
+		return IconThemeHelper.getImage("cursor-select-by-rectangle");
+            }
+
+            @Override
+            public boolean cancelDrawing() {
+                return false;
+            }
+        });
+        this.addAncestorListener(new AncestorListener() {
+            @Override
+            public void ancestorAdded(AncestorEvent event) {
+            }
+
+            @Override
+            public void ancestorRemoved(AncestorEvent event) {
+                doEndCapture();
+            }
+
+            @Override
+            public void ancestorMoved(AncestorEvent event) {
+            }
+        });
+        
+        this.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                doEndCapture();
+            }
+            
+        });
+        toolsSwingManager.translate(this.lblConstantRectangle);
+        toolsSwingManager.translate(this.lblValue);
+        toolsSwingManager.translate(this.lblDescription);
+        toolsSwingManager.translate(this.lblCaptureAPointFromCurrentView);
+        toolsSwingManager.translate(this.lblUseWktOrWkb);
+        toolsSwingManager.translate(this.lblUseGeometryOrText);
+        toolsSwingManager.translate(this.rdoInsertAsGeometry);
+        toolsSwingManager.translate(this.rdoInsertAsString);
+        toolsSwingManager.translate(this.rdoInsertAsWKB);
+        toolsSwingManager.translate(this.rdoInsertAsWKT);
+        toolsSwingManager.translate(this.btnToggleCapture);
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void setGeometry(Geometry geom) {
+        this.geometry = geom;
+        try {
+            String wkt = geom.convertToWKT();
+            this.txtBox.setText(wkt);
+        } catch (Exception ex) {
+            this.txtBox.setText("#########");
+        }
+        this.txtBox.setCaretPosition(0);
+    }
+    
+    private void doToggleCapture() {
+        if( this.mapControl == null ) {
+            doStartCapture();
+        } else {
+            doEndCapture();
+        }
+    }
+    
+    private void doStartCapture() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return;
+        }
+        this.mapControl = ((IView)(viewdoc.getMainWindow())).getMapControl();
+        this.previousTool = this.mapControl.getCurrentTool();
+        this.mapControl.addBehavior("ElementViewPointCaptureTool", this.tool);
+        this.mapControl.setTool("ElementViewPointCaptureTool");
+        this.btnToggleCapture.setText(i18n.getTranslation("_End_capture"));
+        
+    }
+
+    private void doEndCapture() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        if( this.mapControl == null ) {
+            return;
+        }
+        this.mapControl.setTool(this.previousTool);
+        this.mapControl = null;
+        this.btnToggleCapture.setText(i18n.getTranslation("_Start_capture"));
+    }
+
+    Geometry getGeometry() {
+        return this.geometry;
+    }
+
+    boolean insertAsWKT() {
+        return this.rdoInsertAsWKT.isSelected();
+    }
+
+    boolean insertAsGeometry() {
+        return this.rdoInsertAsGeometry.isSelected();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectangleElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectangleElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectangleElement.java	(revision 46118)
@@ -0,0 +1,92 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturerectangle;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionUtils;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.expressionevaluator.swing.Element.CalculatedElement;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewCaptureRectangleElement 
+        extends AbstractElement
+        implements SimpleElement, CalculatedElement
+{
+    private ViewCaptureRectanglePanel aditionalPanel;
+
+    public ViewCaptureRectangleElement() {
+        super(
+                "ViewCaptureRectangle",
+                ToolsLocator.getI18nManager().getTranslation("_Capture_rectangle"), 
+                "expressionbuilder-element-view-capture-bbox"
+        );
+    }
+
+    @Override
+    public Object getValue() {
+        if (this.aditionalPanel == null) {
+            return null;
+        }
+        try {
+            Geometry geom = this.aditionalPanel.getGeometry();
+            if (geom == null) {
+                return null;
+            }
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            if (this.aditionalPanel.insertAsWKT()) {
+                if (this.aditionalPanel.insertAsGeometry()) {
+                    builder.geometry_support_type(GeometrySupportType.WKT);
+                    return builder.geometry(geom).toString();
+                } else {
+                    String wkt = geom.convertToWKT();
+                    return "'" + wkt + "'";
+                }
+            } else {
+                if (this.aditionalPanel.insertAsGeometry()) {
+                    builder.geometry_support_type(GeometrySupportType.WKB);
+                    return builder.geometry(geom).toString();
+                } else {
+                    byte[] wkb = geom.convertToWKB();
+                    return builder.bytearray_hex(wkb);
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get point value.", ex);
+            return null;
+        }
+    }
+
+    @Override
+    public String getRenderedValue() {
+        Object v = this.getValue();
+        if( v == null ) {
+            return super.getRenderedValue();
+        }
+        return v.toString();
+    }
+    
+    @Override
+    public Component getAditionalPanel(JExpressionBuilder expressionBuilder) {
+        if (aditionalPanel == null) {
+            this.aditionalPanel = new ViewCaptureRectanglePanel();
+        }
+        return this.aditionalPanel;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        return ! application.getUIManager().isModalDialogShowing();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.xml	(revision 46118)
@@ -0,0 +1,1053 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewCaptureRectanglePanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewCaptureRectanglePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="name">lblConstantRectangle</at>
+            <at name="width">953</at>
+            <at name="text">_Constant_Rectangle</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">6</at>
+           <at name="colspan">3</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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtBox</at>
+            <at name="width">953</at>
+            <at name="height">20</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">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">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="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="name">lblValue</at>
+            <at name="width">79</at>
+            <at name="text">_Value</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">8</at>
+           <at name="colspan">1</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="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="actionCommand">Toggle point capture</at>
+            <at name="name">btnToggleCapture</at>
+            <at name="width">115</at>
+            <at name="text">_Start_capture</at>
+            <at name="height">22</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">10</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">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="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="name">lblDescription</at>
+            <at name="width">79</at>
+            <at name="text">_Description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">3</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="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="name">lblCaptureAPointFromCurrentView</at>
+            <at name="width">953</at>
+            <at name="text">_Capture_a_point_from_current_view</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">13</at>
+           <at name="colspan">3</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">embedded.150240449</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:8DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">1</at>
+                <at name="colspan">2</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="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="name">lblUseWktOrWkb</at>
+                 <at name="width">154</at>
+                 <at name="text">_Use_WKT_or_WKB</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">2</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as WKT</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">1</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsWKT</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_WKT</at>
+                 <at name="height">16</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">4</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as WKB</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">1</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsWKB</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_WKB</at>
+                 <at name="selected">true</at>
+                 <at name="height">16</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">6</at>
+                <at name="colspan">2</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="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="name">lblUseGeometryOrText</at>
+                 <at name="width">154</at>
+                 <at name="text">_Use_Geometry_or_Text</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as geometry</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">2</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsGeometry</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_Geometry</at>
+                 <at name="selected">true</at>
+                 <at name="height">16</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">10</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as String</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">2</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsString</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_Text</at>
+                 <at name="height">16</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="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>
+            <at name="name"/>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+              <at name="delegate">
+               <object classname="com.jeta.forms.store.properties.effects.SolidProperty">
+                <at name="color">
+                 <object classname="com.jeta.forms.store.properties.ColorProperty">
+                  <at name="name">dyncolor</at>
+                  <at name="colorkey">constant</at>
+                  <at name="constantcolor" object="color">255,255,255</at>
+                 </object>
+                </at>
+               </object>
+              </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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="10">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="7">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="8">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="9">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <at name="fill">
+        <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+         <at name="name">fill</at>
+         <at name="delegate">
+          <object classname="com.jeta.forms.store.properties.effects.SolidProperty">
+           <at name="color">
+            <object classname="com.jeta.forms.store.properties.ColorProperty">
+             <at name="name">dyncolor</at>
+             <at name="colorkey">constant</at>
+             <at name="constantcolor" object="color">255,255,255</at>
+            </object>
+           </at>
+          </object>
+         </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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="14">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturerectangle/ViewCaptureRectanglePanelView.java	(revision 46118)
@@ -0,0 +1,227 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturerectangle;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+
+public class ViewCaptureRectanglePanelView extends JPanel
+{
+   JLabel lblConstantRectangle = new JLabel();
+   JTextField txtBox = new JTextField();
+   JLabel lblValue = new JLabel();
+   JButton btnToggleCapture = new JButton();
+   JLabel lblDescription = new JLabel();
+   JLabel lblCaptureAPointFromCurrentView = new JLabel();
+   JLabel lblUseWktOrWkb = new JLabel();
+   JRadioButton rdoInsertAsWKT = new JRadioButton();
+   ButtonGroup buttongroup1 = new ButtonGroup();
+   JRadioButton rdoInsertAsWKB = new JRadioButton();
+   JLabel lblUseGeometryOrText = new JLabel();
+   JRadioButton rdoInsertAsGeometry = new JRadioButton();
+   ButtonGroup buttongroup2 = new ButtonGroup();
+   JRadioButton rdoInsertAsString = new JRadioButton();
+
+   /**
+    * Default constructor
+    */
+   public ViewCaptureRectanglePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblConstantRectangle.setFont(new Font("Dialog",Font.BOLD,11));
+      lblConstantRectangle.setName("lblConstantRectangle");
+      lblConstantRectangle.setText("_Constant_Rectangle");
+      jpanel1.add(lblConstantRectangle,cc.xywh(2,2,3,1));
+
+      txtBox.setBackground(new Color(236,233,216));
+      txtBox.setEditable(false);
+      txtBox.setName("txtBox");
+      jpanel1.add(txtBox,cc.xywh(2,6,3,1));
+
+      lblValue.setFont(new Font("Dialog",Font.BOLD,11));
+      lblValue.setName("lblValue");
+      lblValue.setText("_Value");
+      jpanel1.add(lblValue,cc.xy(2,4));
+
+      btnToggleCapture.setActionCommand("Toggle point capture");
+      btnToggleCapture.setName("btnToggleCapture");
+      btnToggleCapture.setText("_Start_capture");
+      jpanel1.add(btnToggleCapture,new CellConstraints(4,8,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      lblDescription.setFont(new Font("Dialog",Font.BOLD,11));
+      lblDescription.setName("lblDescription");
+      lblDescription.setText("_Description");
+      jpanel1.add(lblDescription,cc.xy(2,10));
+
+      lblCaptureAPointFromCurrentView.setName("lblCaptureAPointFromCurrentView");
+      lblCaptureAPointFromCurrentView.setText("_Capture_a_point_from_current_view");
+      jpanel1.add(lblCaptureAPointFromCurrentView,cc.xywh(2,11,3,1));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,13,3,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:8DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblUseWktOrWkb.setName("lblUseWktOrWkb");
+      lblUseWktOrWkb.setText("_Use_WKT_or_WKB");
+      jpanel1.add(lblUseWktOrWkb,cc.xywh(2,1,2,1));
+
+      rdoInsertAsWKT.setActionCommand("Insert as WKT");
+      rdoInsertAsWKT.setName("rdoInsertAsWKT");
+      rdoInsertAsWKT.setOpaque(false);
+      rdoInsertAsWKT.setText("_Insert_as_WKT");
+      buttongroup1.add(rdoInsertAsWKT);
+      jpanel1.add(rdoInsertAsWKT,cc.xy(3,2));
+
+      rdoInsertAsWKB.setActionCommand("Insert as WKB");
+      rdoInsertAsWKB.setName("rdoInsertAsWKB");
+      rdoInsertAsWKB.setOpaque(false);
+      rdoInsertAsWKB.setSelected(true);
+      rdoInsertAsWKB.setText("_Insert_as_WKB");
+      buttongroup1.add(rdoInsertAsWKB);
+      jpanel1.add(rdoInsertAsWKB,cc.xy(3,4));
+
+      lblUseGeometryOrText.setName("lblUseGeometryOrText");
+      lblUseGeometryOrText.setText("_Use_Geometry_or_Text");
+      jpanel1.add(lblUseGeometryOrText,cc.xywh(2,6,2,1));
+
+      rdoInsertAsGeometry.setActionCommand("Insert as geometry");
+      rdoInsertAsGeometry.setName("rdoInsertAsGeometry");
+      rdoInsertAsGeometry.setOpaque(false);
+      rdoInsertAsGeometry.setSelected(true);
+      rdoInsertAsGeometry.setText("_Insert_as_Geometry");
+      buttongroup2.add(rdoInsertAsGeometry);
+      jpanel1.add(rdoInsertAsGeometry,cc.xy(3,8));
+
+      rdoInsertAsString.setActionCommand("Insert as String");
+      rdoInsertAsString.setName("rdoInsertAsString");
+      rdoInsertAsString.setOpaque(false);
+      rdoInsertAsString.setText("_Insert_as_Text");
+      buttongroup2.add(rdoInsertAsString);
+      jpanel1.add(rdoInsertAsString,cc.xy(3,10));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,4 },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);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElement.java	(revision 46118)
@@ -0,0 +1,99 @@
+package org.gvsig.app.project.documents.view.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.ProjectManager;
+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.app.project.documents.view.expressionevaluator.viewcapturepoint.ViewCapturePointElement;
+import org.gvsig.app.project.documents.view.expressionevaluator.viewcapturerectangle.ViewCaptureRectangleElement;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.GroupElement;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.tools.ToolsLocator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ViewElement 
+    extends AbstractElement
+    implements GroupElement 
+    {
+
+    private final List<Element> children;
+    private final List<Element> values;
+    
+    
+    public ViewElement() {
+        super(
+                "Views",
+                ToolsLocator.getI18nManager().getTranslation("Views"), 
+                "expressionbuilder-element-view"
+        );
+        this.children = new ArrayList<>();
+        this.values = new ArrayList<>();
+        
+        this.values.add(new ViewCaptureRectangleElement());
+        this.values.add(new ViewCapturePointElement());
+        this.values.add(new ViewTakeProjectionCodeElement());
+
+        ProjectManager manager = ApplicationLocator.getProjectManager();
+        List<Document> views = manager.getCurrentProject().getDocuments(ViewManager.TYPENAME);
+        for (Document view : views) {
+            Element e = new ViewLayersElement((ViewDocument) view);
+            this.children.add(e);
+        }
+    }
+
+    @Override
+    public Collection<Element> getValues() {
+        return this.values;
+    }
+
+    @Override
+    public Element setConfig(ExpressionBuilderConfig config) {
+        super.setConfig(config); 
+        for (Element child : children) {
+            child.setConfig(config);
+        }
+        return this;
+    }
+    
+    @Override
+    public Element get(int index) {
+        return this.children.get(index);
+    }
+
+    @Override
+    public int size() {
+        return this.children.size();
+    }
+
+    @Override
+    public Iterator<Element> iterator() {
+        return this.children.iterator();
+    }
+
+    @Override
+    public void addElement(Element element) {
+        this.children.add(element);
+    }
+
+    @Override
+    public void addElement(Function function) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public List<Element> getElements() {
+        return this.children;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewLayersElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewLayersElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewLayersElement.java	(revision 46118)
@@ -0,0 +1,115 @@
+package org.gvsig.app.project.documents.view.expressionevaluator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.GroupElement;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ViewLayersElement
+        extends AbstractElement
+        implements GroupElement, SimpleElement {
+
+    private class LayerEntryElement
+            extends AbstractElement
+            implements ConstantElement {
+
+        private final FLayer layer;
+        
+        public LayerEntryElement(ViewDocument view, FLayer layer) {
+            super(layer.getName(), layer.getName(), "expressionbuilder-element-constant");
+            this.layer = layer;
+        }
+
+        @Override
+        public Object getValue() {
+            return layer.getName();
+        }
+    }
+
+    private final List<Element> children;
+
+    public ViewLayersElement(ViewDocument view) {
+        super(view.getName());
+        
+        DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+
+        this.children = new ArrayList<>();
+        Iterator<FLayer> it = view.deepiterator();
+        while( it.hasNext() ) {
+            FLayer layer = it.next();
+            if( layer instanceof SingleLayer ) {
+                if( layer instanceof FLyrVect ) {
+                    FeatureStoreElement e = dalSwingManager.createFeatureStoreElement();
+                    e.setFeatureStore(((FLyrVect) layer).getFeatureStore());
+                    e.setName(layer.getName());
+                    this.children.add(e);
+                } else {
+                    ConstantElement e = new LayerEntryElement(view, layer);
+                    this.children.add(e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public Element setConfig(ExpressionBuilderConfig config) {
+        super.setConfig(config); 
+        for (Element child : this.children) {
+            child.setConfig(config);
+        }
+        return this;
+    }
+
+    @Override
+    public Collection<Element> getValues() {
+        return this.children;
+    }
+    
+    @Override
+    public Element get(int index) {
+        return this.children.get(index);
+    }
+
+    @Override
+    public int size() {
+        return this.children.size();
+    }
+
+    @Override
+    public Iterator<Element> iterator() {
+        return this.children.iterator();
+    }
+
+    @Override
+    public void addElement(Element element) {
+        this.children.add(element);
+    }
+
+    @Override
+    public void addElement(Function function) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public List<Element> getElements() {
+        return this.children;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointElement.java	(revision 46118)
@@ -0,0 +1,91 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturepoint;
+
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
+import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
+import org.gvsig.expressionevaluator.GeometryExpressionUtils;
+import org.gvsig.expressionevaluator.swing.Element.CalculatedElement;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.swing.api.Component;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewCapturePointElement
+        extends AbstractElement
+        implements SimpleElement, CalculatedElement {
+
+    private ViewCapturePointPanel aditionalPanel;
+
+    public ViewCapturePointElement() {
+        super(
+                ToolsLocator.getI18nManager().getTranslation("_Capture_point"),
+                null, 
+                "expressionbuilder-element-view-capture-point"
+        );
+    }
+
+    @Override
+    public Object getValue() {
+        if (this.aditionalPanel == null) {
+            return null;
+        }
+        try {
+            Geometry geom = this.aditionalPanel.getGeometry();
+            if (geom == null) {
+                return null;
+            }
+            GeometryExpressionBuilder builder = GeometryExpressionUtils.createExpressionBuilder();
+            if (this.aditionalPanel.insertAsWKT()) {
+                if (this.aditionalPanel.insertAsGeometry()) {
+                    builder.geometry_support_type(GeometrySupportType.WKT);
+                    return builder.geometry(geom, geom.getProjection()).toString();
+                } else {
+                    String wkt = geom.convertToWKT();
+                    return "'" + wkt + "'";
+                }
+            } else {
+                if (this.aditionalPanel.insertAsGeometry()) {
+                    builder.geometry_support_type(GeometrySupportType.WKB);
+                    return builder.geometry(geom, geom.getProjection()).toString();
+                } else {
+                    byte[] wkb = geom.convertToWKB();
+                    return builder.bytearray_hex(wkb);
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.warn("Can't get point value.", ex);
+            return null;
+        }
+    }
+
+    @Override
+    public String getRenderedValue() {
+        Object v = this.getValue();
+        if( v == null ) {
+            return super.getRenderedValue();
+        }
+        return v.toString();
+    }
+    
+    @Override
+    public Component getAditionalPanel(JExpressionBuilder expressionBuilder) {
+        if (aditionalPanel == null) {
+            this.aditionalPanel = new ViewCapturePointPanel();
+        }
+        return this.aditionalPanel;
+    }
+    
+    @Override
+    public boolean isEnabled() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        return ! application.getUIManager().isModalDialogShowing();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.xml	(revision 46118)
@@ -0,0 +1,1053 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewCapturePointPanelView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewCapturePointPanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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="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="name">lblConstantPoint</at>
+            <at name="width">953</at>
+            <at name="text">_Constant_Point</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">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">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="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="name">lblValue</at>
+            <at name="width">79</at>
+            <at name="text">_Value</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">10</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">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="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="name">lblDescription</at>
+            <at name="width">79</at>
+            <at name="text">_Description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="font">
+             <object classname="com.jeta.forms.store.properties.FontProperty">
+              <at name="family">Dialog</at>
+              <at name="style">1</at>
+              <at name="size">11</at>
+             </object>
+            </at>
+            <at name="height">14</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">3</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="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="name">lblCaptureAPointFromCurrentView</at>
+            <at name="width">953</at>
+            <at name="text">_Capture_a_point_from_current_view</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">8</at>
+           <at name="colspan">1</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="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="actionCommand">Toggle point capture</at>
+            <at name="name">btnToggleCapture</at>
+            <at name="width">115</at>
+            <at name="text">_Start_capture</at>
+            <at name="height">22</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">6</at>
+           <at name="colspan">3</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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtGeometry</at>
+            <at name="width">953</at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">13</at>
+           <at name="colspan">3</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">embedded.1539465916</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:8DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">1</at>
+                <at name="colspan">2</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="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="name">lblUseWktOrWkb</at>
+                 <at name="width">154</at>
+                 <at name="text">_Use_WKT_or_WKB</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">6</at>
+                <at name="colspan">2</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="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="name">lblUseGeometryOrText</at>
+                 <at name="width">154</at>
+                 <at name="text">_Use_Geometry_or_Text</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">2</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as WKT</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">1</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsWKT</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_WKT</at>
+                 <at name="height">16</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">4</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as WKB</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">1ç</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsWKB</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_WKB</at>
+                 <at name="selected">true</at>
+                 <at name="height">16</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">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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as geometry</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">2</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsGeometry</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_Geometry</at>
+                 <at name="selected">true</at>
+                 <at name="height">16</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">10</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.JRadioButton</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JRadioButton</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="actionCommand">Insert as String</at>
+                 <at name="buttonGroup">
+                  <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+                   <at name="name">buttonGroup</at>
+                   <at name="groupname">2</at>
+                  </object>
+                 </at>
+                 <at name="opaque">false</at>
+                 <at name="name">rdoInsertAsString</at>
+                 <at name="width">140</at>
+                 <at name="text">_Insert_as_Text</at>
+                 <at name="height">16</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="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>
+            <at name="name"/>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+              <at name="delegate">
+               <object classname="com.jeta.forms.store.properties.effects.SolidProperty">
+                <at name="color">
+                 <object classname="com.jeta.forms.store.properties.ColorProperty">
+                  <at name="name">dyncolor</at>
+                  <at name="colorkey">constant</at>
+                  <at name="constantcolor" object="color">255,255,255</at>
+                 </object>
+                </at>
+               </object>
+              </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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="10">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="7">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="8">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </at>
+            <at name="item" index="9">
+             <object classname="[Ljava.lang.Object;" size="4"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <at name="fill">
+        <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+         <at name="name">fill</at>
+         <at name="delegate">
+          <object classname="com.jeta.forms.store.properties.effects.SolidProperty">
+           <at name="color">
+            <object classname="com.jeta.forms.store.properties.ColorProperty">
+             <at name="name">dyncolor</at>
+             <at name="colorkey">constant</at>
+             <at name="constantcolor" object="color">255,255,255</at>
+            </object>
+           </at>
+          </object>
+         </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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="14">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanelView.java	(revision 46118)
@@ -0,0 +1,227 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturepoint;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+
+public class ViewCapturePointPanelView extends JPanel
+{
+   JLabel lblConstantPoint = new JLabel();
+   JLabel lblValue = new JLabel();
+   JLabel lblDescription = new JLabel();
+   JLabel lblCaptureAPointFromCurrentView = new JLabel();
+   JButton btnToggleCapture = new JButton();
+   JTextField txtGeometry = new JTextField();
+   JLabel lblUseWktOrWkb = new JLabel();
+   JLabel lblUseGeometryOrText = new JLabel();
+   JRadioButton rdoInsertAsWKT = new JRadioButton();
+   ButtonGroup buttongroup1 = new ButtonGroup();
+   JRadioButton rdoInsertAsWKB = new JRadioButton();
+   JRadioButton rdoInsertAsGeometry = new JRadioButton();
+   ButtonGroup buttongroup2 = new ButtonGroup();
+   JRadioButton rdoInsertAsString = new JRadioButton();
+
+   /**
+    * Default constructor
+    */
+   public ViewCapturePointPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblConstantPoint.setFont(new Font("Dialog",Font.BOLD,11));
+      lblConstantPoint.setName("lblConstantPoint");
+      lblConstantPoint.setText("_Constant_Point");
+      jpanel1.add(lblConstantPoint,cc.xywh(2,2,3,1));
+
+      lblValue.setFont(new Font("Dialog",Font.BOLD,11));
+      lblValue.setName("lblValue");
+      lblValue.setText("_Value");
+      jpanel1.add(lblValue,cc.xy(2,4));
+
+      lblDescription.setFont(new Font("Dialog",Font.BOLD,11));
+      lblDescription.setName("lblDescription");
+      lblDescription.setText("_Description");
+      jpanel1.add(lblDescription,cc.xy(2,10));
+
+      lblCaptureAPointFromCurrentView.setName("lblCaptureAPointFromCurrentView");
+      lblCaptureAPointFromCurrentView.setText("_Capture_a_point_from_current_view");
+      jpanel1.add(lblCaptureAPointFromCurrentView,cc.xywh(2,11,3,1));
+
+      btnToggleCapture.setActionCommand("Toggle point capture");
+      btnToggleCapture.setName("btnToggleCapture");
+      btnToggleCapture.setText("_Start_capture");
+      jpanel1.add(btnToggleCapture,new CellConstraints(4,8,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      txtGeometry.setBackground(new Color(236,233,216));
+      txtGeometry.setEditable(false);
+      txtGeometry.setName("txtGeometry");
+      jpanel1.add(txtGeometry,cc.xywh(2,6,3,1));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,13,3,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:8DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblUseWktOrWkb.setName("lblUseWktOrWkb");
+      lblUseWktOrWkb.setText("_Use_WKT_or_WKB");
+      jpanel1.add(lblUseWktOrWkb,cc.xywh(2,1,2,1));
+
+      lblUseGeometryOrText.setName("lblUseGeometryOrText");
+      lblUseGeometryOrText.setText("_Use_Geometry_or_Text");
+      jpanel1.add(lblUseGeometryOrText,cc.xywh(2,6,2,1));
+
+      rdoInsertAsWKT.setActionCommand("Insert as WKT");
+      rdoInsertAsWKT.setName("rdoInsertAsWKT");
+      rdoInsertAsWKT.setOpaque(false);
+      rdoInsertAsWKT.setText("_Insert_as_WKT");
+      buttongroup1.add(rdoInsertAsWKT);
+      jpanel1.add(rdoInsertAsWKT,cc.xy(3,2));
+
+      rdoInsertAsWKB.setActionCommand("Insert as WKB");
+      rdoInsertAsWKB.setName("rdoInsertAsWKB");
+      rdoInsertAsWKB.setOpaque(false);
+      rdoInsertAsWKB.setSelected(true);
+      rdoInsertAsWKB.setText("_Insert_as_WKB");
+      buttongroup1.add(rdoInsertAsWKB);
+      jpanel1.add(rdoInsertAsWKB,cc.xy(3,4));
+
+      rdoInsertAsGeometry.setActionCommand("Insert as geometry");
+      rdoInsertAsGeometry.setName("rdoInsertAsGeometry");
+      rdoInsertAsGeometry.setOpaque(false);
+      rdoInsertAsGeometry.setSelected(true);
+      rdoInsertAsGeometry.setText("_Insert_as_Geometry");
+      buttongroup2.add(rdoInsertAsGeometry);
+      jpanel1.add(rdoInsertAsGeometry,cc.xy(3,8));
+
+      rdoInsertAsString.setActionCommand("Insert as String");
+      rdoInsertAsString.setName("rdoInsertAsString");
+      rdoInsertAsString.setOpaque(false);
+      rdoInsertAsString.setText("_Insert_as_Text");
+      buttongroup2.add(rdoInsertAsString);
+      jpanel1.add(rdoInsertAsString,cc.xy(3,10));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,4 },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);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/viewcapturepoint/ViewCapturePointPanel.java	(revision 46118)
@@ -0,0 +1,176 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.viewcapturepoint;
+
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import javax.swing.JComponent;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import org.gvsig.andami.IconThemeHelper;
+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.IView;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+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.i18n.I18nManager;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewCapturePointPanel extends ViewCapturePointPanelView implements Component {
+    
+    private Geometry geometry = null;
+    private MapControl mapControl = null;
+    private String previousTool = null;
+    private Behavior tool = null;
+    
+    public ViewCapturePointPanel() {
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        
+        toolsSwingManager.setDefaultPopupMenu(this.txtGeometry);
+        
+        this.btnToggleCapture.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doToggleCapture();
+            }
+        });
+        this.tool = new PointBehavior(new PointListener() {
+            @Override
+            public void point(PointEvent event) throws BehaviorException {
+                setGeometry(event.getMapPoint());
+            }
+
+            @Override
+            public void pointDoubleClick(PointEvent event) throws BehaviorException {
+                setGeometry(event.getMapPoint());
+            }
+
+            @Override
+            public Image getImageCursor() {
+                return IconThemeHelper.getImage("cursor-select-by-point");
+            }
+
+            @Override
+            public boolean cancelDrawing() {
+                return false;
+            }
+        });
+        this.addAncestorListener(new AncestorListener() {
+            @Override
+            public void ancestorAdded(AncestorEvent event) {
+            }
+
+            @Override
+            public void ancestorRemoved(AncestorEvent event) {
+                doEndCapture();
+            }
+
+            @Override
+            public void ancestorMoved(AncestorEvent event) {
+            }
+        });
+        this.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                doEndCapture();
+            }
+            
+        });
+        
+        toolsSwingManager.translate(this.lblConstantPoint);
+        toolsSwingManager.translate(this.lblValue);
+        toolsSwingManager.translate(this.lblDescription);
+        toolsSwingManager.translate(this.lblCaptureAPointFromCurrentView);
+        toolsSwingManager.translate(this.lblUseWktOrWkb);
+        toolsSwingManager.translate(this.lblUseGeometryOrText);
+        toolsSwingManager.translate(this.rdoInsertAsGeometry);
+        toolsSwingManager.translate(this.rdoInsertAsString);
+        toolsSwingManager.translate(this.rdoInsertAsWKB);
+        toolsSwingManager.translate(this.rdoInsertAsWKT);
+        toolsSwingManager.translate(this.btnToggleCapture);
+        
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void setGeometry(Geometry geom) {
+        this.geometry = geom;
+        try {
+            String wkt = geom.convertToWKT();
+            this.txtGeometry.setText(wkt);
+        } catch (Exception ex) {
+            this.txtGeometry.setText("#########");
+        }
+        this.txtGeometry.setCaretPosition(0);
+    }
+    
+    private void doToggleCapture() {
+        if( this.mapControl == null ) {
+            doStartCapture();
+        } else {
+            doEndCapture();
+        }
+    }
+    
+    private void doStartCapture() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
+        if( viewdoc == null ) {
+            return;
+        }
+        this.mapControl = ((IView)(viewdoc.getMainWindow())).getMapControl();
+        this.previousTool = this.mapControl.getCurrentTool();
+        this.mapControl.addBehavior("ElementViewPointCaptureTool", this.tool);
+        this.mapControl.setTool("ElementViewPointCaptureTool");
+        this.btnToggleCapture.setText(i18n.getTranslation("_End_capture"));
+        
+    }
+
+    private void doEndCapture() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        if( this.mapControl == null ) {
+            return;
+        }
+        this.mapControl.setTool(this.previousTool);
+        this.mapControl = null;
+        this.btnToggleCapture.setText(i18n.getTranslation("_Start_capture"));
+    }
+
+    Geometry getGeometry() {
+        return this.geometry;
+    }
+
+    boolean insertAsWKT() {
+        return this.rdoInsertAsWKT.isSelected();
+    }
+
+    boolean insertAsGeometry() {
+        return this.rdoInsertAsGeometry.isSelected();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElementFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElementFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewElementFactory.java	(revision 46118)
@@ -0,0 +1,41 @@
+package org.gvsig.app.project.documents.view.expressionevaluator;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElementFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ViewElementFactory extends AbstractElementFactory {
+    
+    public ViewElementFactory() {
+        super("View", null);
+    }
+
+    @Override
+    public Element createElement(Object... parameters) {
+        ViewElement e = new ViewElement();
+        return e;
+    }
+
+    @Override
+    public boolean isAutoload() {
+        return true;
+    }
+   
+    public static void selfRegister() {
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        ViewElementFactory factory = new ViewElementFactory();
+        manager.registerElement(factory);
+
+        IconThemeHelper.registerIcon("element", "expressionbuilder-element-view-capture-point", factory);
+        IconThemeHelper.registerIcon("element", "expressionbuilder-element-view-capture-bbox", factory);
+        IconThemeHelper.registerIcon("element", "expressionbuilder-element-view-projection-code", factory);
+        IconThemeHelper.registerIcon("element", "expressionbuilder-element-view", factory);        
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElement.java	(revision 46118)
@@ -0,0 +1,90 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.savedpoints;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
+import org.gvsig.expressionevaluator.Function;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.Element.GroupElement;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.temporarystorage.TemporaryStorageGroup;
+import org.gvsig.temporarystorage.TemporaryStorageLocator;
+import org.gvsig.temporarystorage.TemporaryStorageManager;
+import org.gvsig.tools.ToolsLocator;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SavedPointsElement
+        extends AbstractElement
+        implements GroupElement {
+
+    private class PointEntryElement
+            extends AbstractElement
+            implements ConstantElement {
+
+        public PointEntryElement(Object value, String name) {
+            super(name, value, "expressionbuilder-element-constant");
+        }
+
+    }
+
+    private final List<Element> childs;
+
+    public SavedPointsElement() {
+        super(
+                "SavedPoints",
+                ToolsLocator.getI18nManager().getTranslation("Saved points"), 
+                "view-query-coordinate-capture"
+        );
+
+        TemporaryStorageManager manager = TemporaryStorageLocator.getTemporaryStorageManager();
+        TemporaryStorageGroup storage = manager.create("Points", Point.class);
+
+        this.childs = new ArrayList<>();
+        for (Pair<String, Object> entry : storage.asList()) {
+            ConstantElement e = new PointEntryElement(entry.getValue(),entry.getKey());
+            this.childs.add(e);
+        }
+    }
+
+    @Override
+    public Element get(int index) {
+        return this.childs.get(index);
+    }
+
+    @Override
+    public int size() {
+        return this.childs.size();
+    }
+
+    @Override
+    public Iterator<Element> iterator() {
+        return this.childs.iterator();
+    }
+
+    @Override
+    public void addElement(Element element) {
+        this.childs.add(element);
+    }
+
+    @Override
+    public void addElement(Function function) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public List<Element> getElements() {
+        return this.childs;
+    }
+
+    @Override
+    public Collection<Element> getValues() {
+        return this.childs;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElementFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElementFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/savedpoints/SavedPointsElementFactory.java	(revision 46118)
@@ -0,0 +1,36 @@
+package org.gvsig.app.project.documents.view.expressionevaluator.savedpoints;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.expressionevaluator.swing.Element;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElementFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class SavedPointsElementFactory extends AbstractElementFactory {
+    
+    public SavedPointsElementFactory() {
+        super("CapturedPoints", null);
+    }
+
+    @Override
+    public Element createElement(Object... parameters) {
+        Element e = new SavedPointsElement();
+        return e;
+    }
+
+    @Override
+    public boolean isAutoload() {
+        return true;
+    }
+    
+    public static void selfRegister() {
+        ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
+        SavedPointsElementFactory factory = new SavedPointsElementFactory();
+        manager.registerElement(factory);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewTakeProjectionCodeElement.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewTakeProjectionCodeElement.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/expressionevaluator/ViewTakeProjectionCodeElement.java	(revision 46118)
@@ -0,0 +1,90 @@
+package org.gvsig.app.project.documents.view.expressionevaluator;
+
+import java.util.Objects;
+import org.cresques.cts.IProjection;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
+import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
+import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
+import org.gvsig.expressionevaluator.swing.Element.ConstantElement;
+import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class ViewTakeProjectionCodeElement 
+        extends AbstractElement
+        implements SimpleElement, ConstantElement
+{
+    public ViewTakeProjectionCodeElement() {
+        super(
+                "ViewTakeProjectionCode",
+                ToolsLocator.getI18nManager().getTranslation("_Take_projection_code"), 
+                "expressionbuilder-element-view-projection-code"
+        );
+    }
+
+    private IProjection getCurrentProjection() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ViewDocument viewDoc = (ViewDocument) application.getActiveDocument(ViewDocument.class);
+        if( viewDoc == null ) {
+            return null;
+        }
+        IProjection proj = viewDoc.getMapContext().getProjection();
+        return proj;
+    }
+
+    private Object getProjectionCode(IProjection proj) {
+        if( proj == null ) {
+            return 0;
+        }
+        String[] proj_s = proj.getAbrev().split(":");
+        try {
+            int code = Integer.parseInt(proj_s[1]);
+            return code;
+        } catch(Exception ex) {
+            return proj_s[1];
+        }
+    }
+    
+    @Override
+    public Object getValue() {
+        IProjection proj = this.getCurrentProjection();
+        return this.getProjectionCode(proj);
+    }
+
+    @Override
+    public String getRenderedValue() {
+        return Objects.toString(this.getValue(), "0");
+    }
+
+    @Override
+    public String getDescription() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        IProjection proj = this.getCurrentProjection();
+        
+        StringBuilder html = new StringBuilder();
+        html.append("<html>\n");
+        html.append("<b>").append(i18n.getTranslation("_Constant")).append("</b><br>\n<br>\n");
+        if( proj == null ) {
+            html.append("<b>").append(i18n.getTranslation("_Value")).append("</b> NULL<br>\n");
+        } else {
+            ExpressionEvaluatorManager expressionManager = ExpressionEvaluatorLocator.getExpressionEvaluatorManager();
+            Object code = this.getProjectionCode(proj);
+            html.append("<b>").append(i18n.getTranslation("_Value")).append("</b> ").append(expressionManager.getReprMethod(proj).repr(proj)).append("</b>");
+            html.append(" (").append(proj.getAbrev()).append(")<br>\n");
+            html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(code.getClass().getSimpleName()).append("<br>\n");
+        }
+        html.append("</html>\n");
+        return html.toString();
+    }
+
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/BaseViewDocument.java	(revision 46118)
@@ -0,0 +1,447 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.awt.geom.Point2D;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import org.apache.commons.lang.StringUtils;
+
+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.ApplicationLocator;
+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.dal.DataStore;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.geom.GeometryLocator;
+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.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.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+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;
+    }
+
+    @Override
+    public void setName(String name) {
+        super.setName(name);
+        this.mapContext.getLayers().setName(name);
+    }
+
+    
+    /**
+     * 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");
+
+    
+        IProjection proj = ApplicationLocator.getProjectManager().getProjectPreferences().getDefaultProjection();
+        if( this.mapContext!=null ) {
+            if( this.mapContext.getProjection()==null ) {
+                try {
+                    this.mapContext.setProjection(proj);
+                } catch(Throwable ex) {
+                    
+                }
+            }
+        }
+        for( FLayer layer : mapContext ) {
+            if( layer.getProjection()==null ) {
+                try {
+                    layer.setProjection(proj);
+                } catch(Throwable ex) {
+                    
+                }
+            }
+        }
+        for( FLayer layer : mapOverViewContext ) {
+            if( layer.getProjection()==null ) {
+                try {
+                    layer.setProjection(proj);
+                } catch(Throwable ex) {
+                    
+                }
+            }
+        }
+    }
+
+    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();
+    }
+
+    @Override
+    public FLayer getLayer(String name) {
+        FLayer layer = this.getMapContext().getLayers().getLayer(name);
+        return layer;            
+    }
+
+    @Override
+    public Iterator<FLayer> iterator() {
+        return this.mapContext.iterator();
+    }
+
+    @Override
+    public Iterator<FLayer> deepiterator() {
+        return this.mapContext.deepiterator();
+    }
+
+    @Override
+    public Iterable<FLayer> layers() {
+        return new Iterable<FLayer>() {
+            @Override
+            public Iterator<FLayer> iterator() {
+                return deepiterator();
+            }
+        };
+    }
+
+    @Override
+    public boolean contains(FLayer layer) {
+        if( !(layer instanceof SingleLayer) ) {
+            return false;
+        }
+        return this.isInLayers(this.getMapContext().getLayers(), ((SingleLayer)layer).getDataStore());
+    }
+    
+    @Override
+    public boolean contains(DataStore store) {
+        return this.isInLayers(this.getMapContext().getLayers(), store);
+    }
+    
+    private boolean isInLayers(FLayers layers, DataStore store) {
+        for (int i = 0; i < layers.getLayersCount(); i++) {
+            if (layers.getLayer(i) instanceof FLayers) {
+                if (isInLayers((FLayers) layers.getLayer(i), store)) {
+                    return true;
+                }
+            }
+            FLayer layer = layers.getLayer(i);
+            if( layer instanceof SingleLayer ) {
+                if (((SingleLayer)layer).getDataStore() == store ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+    @Override
+    public void center(Envelope envelope) {
+        ViewPort viewPort = this.getMapContext().getViewPort();
+
+        try {
+            Envelope oldExtent = viewPort.getAdjustedEnvelope();
+            double oldCenterX = oldExtent.getCenter(0);
+            double oldCenterY = oldExtent.getCenter(1);
+            double centerX = envelope.getCenter(0);
+            double centerY = envelope.getCenter(1);
+            Point2D.Double 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,
+                    Geometry.SUBTYPES.GEOM2D);
+            viewPort.setEnvelope(extent);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    @Override
+    public boolean contains(Object value) {
+        if( value == null ) {
+            return false;
+        }
+        if( !(value instanceof FeatureStore) ) {
+            return false;
+        }
+        String storeFullName = ((FeatureStore)value).getFullName();
+        for (Iterator<FLayer> it = this.deepiterator(); it.hasNext();) {
+            FLayer layer = it.next();
+            if(layer instanceof FLyrVect){
+                if( StringUtils.equals(((FLyrVect) layer).getFeatureStore().getFullName(), storeFullName)){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void refresh() {
+        this.getMapContext().invalidate();
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/MapOverview.java	(revision 46118)
@@ -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.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());
+        setDefaultMouseWheelEnabled(false);
+        
+		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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/AbstractViewPanel.java	(revision 46118)
@@ -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.app.project.documents.view.gui;
+
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Iterator;
+import javax.swing.JComponent;
+
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import org.apache.commons.lang3.StringUtils;
+
+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 gvSIG Team
+ * 
+ */
+
+public abstract class AbstractViewPanel extends JPanel implements IView,
+    IWindowTransform, PropertyChangeListener, Component {
+
+	protected 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;
+
+    protected ViewInformationArea viewInformationArea;
+    
+    // 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 ViewInformationArea getViewInformationArea() {
+        return this.viewInformationArea;
+    }
+    
+    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)
+         */
+        @Override
+        public void exceptionThrown(Throwable t) {
+            
+            NotificationManager.addError(getMessages(t), t);
+        }
+        
+        private class ExceptionIterator implements Iterator {
+
+            Throwable exception;
+
+            ExceptionIterator(Throwable exception) {
+                this.exception = exception;
+            }
+
+            @Override
+            public boolean hasNext() {
+                return this.exception != null;
+            }
+
+            @Override
+            public Object next() {
+                Throwable exception = this.exception;
+                this.exception = exception.getCause();
+                return exception;
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        }
+        
+        private String getMessages(Throwable ex) {
+            StringBuilder msg = new StringBuilder();
+            boolean firstline = true;
+            Iterator exceptions = new ExceptionIterator(ex);
+            String lastmsg = "";
+
+            while (exceptions.hasNext()) {
+                Throwable ex1 = ((Throwable) exceptions.next());
+                String message;
+                message = ex1.getMessage();
+                if ( !StringUtils.isEmpty(message) ) {
+                    if( firstline ) {
+                        msg.append(message);
+                        msg.append("\n\n");
+                        firstline = false;
+                    } else {
+                        if (!message.equalsIgnoreCase(lastmsg)) {
+                            msg.append("- ");
+                            msg.append(message.replace("\n","\n  "));
+                            msg.append("\n");
+                        }
+                    }
+                    lastmsg = message;
+                }
+            }
+            return msg.toString();
+        }
+
+    }
+
+    /**
+     * @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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewInformationArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewInformationArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewInformationArea.java	(revision 46118)
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2017 gvSIG Association
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU 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/>.
+ */
+package org.gvsig.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+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 javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import org.gvsig.tools.swing.api.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class DefaultViewInformationArea implements ViewInformationArea {
+
+    protected final Logger logger = LoggerFactory.getLogger(DefaultViewInformationArea.class);
+
+    private static class Element implements ViewInformationAreaElement {
+        
+        private final Component component;
+        private final String id;
+        private String label;
+        private Icon icon;
+        private int priority;
+        private String tip;
+        
+        public Element(Component component, String id, int priority, String label, Icon icon, String tip) {
+            this.component = component;
+            this.id = id;
+            this.priority = priority;
+            this.label = label;
+            this.icon = icon;
+            this.tip = tip;
+        }
+        
+        @Override
+        public int getPriority() {
+            return this.priority;
+        }
+
+        @Override
+        public Component getComponent() {
+            return this.component;
+        }
+        
+        @Override
+        public JComponent asJComponent() {
+            return this.component.asJComponent();
+        }
+        
+        @Override
+        public String getLabel() {
+            return this.label;
+        }
+        
+        @Override
+        public void setLabel(String label) {
+            this.label = label;
+        }
+        
+        @Override
+        public String getTip() {
+            return this.tip;
+        }
+        
+        @Override
+        public Icon getIcon() {
+            return this.icon;
+        }
+
+        @Override
+        public void setIcon(Icon icon) {
+            this.icon = icon;
+        }
+
+        @Override
+        public void setPriority(int priority) {
+            this.priority = priority;
+        }
+
+        @Override
+        public void setTip(String tip) {
+            this.tip = tip;
+        }
+    }
+    
+    private final Map<String,ViewInformationAreaElement> elements;
+    private JPanel panel;
+    private JTabbedPane tab;
+    
+    public DefaultViewInformationArea() {
+        this.elements = new HashMap<>();
+        this.panel = null;
+        this.tab = null;
+    }
+    
+    @Override
+    public void add(final JComponent component, String id, int priority, String label, Icon icon, String tip) {
+        this.add(
+            new Component() {
+                @Override
+                public JComponent asJComponent() {
+                    return component;
+                }
+            }, 
+            id, priority, label, icon, tip
+        );
+    }
+
+    @Override
+    public void add(Component component, String id, int priority, String label, Icon icon, String tip) {
+        Element element = new Element(component, id, priority, label, icon, tip);
+        this.elements.put(id, element);
+        this.update();
+    }
+
+    @Override
+    public ViewInformationAreaElement get(String id) {
+        ViewInformationAreaElement x = this.elements.get(id);
+        return x;
+    }
+
+    @Override
+    public Iterator<ViewInformationAreaElement> iterator() {
+        Iterator<ViewInformationAreaElement> x = this.elements.values().iterator();
+        return x;
+    }
+    
+    @Override
+    public void remove(String id) {
+        this.elements.remove(id);
+        this.update();
+    }
+
+    @Override
+    public void update() {
+        if( this.panel == null ) {
+            return;
+        }
+        this.panel.removeAll();
+        if( this.elements.isEmpty() ) {
+            return;
+        }
+        List<Element> elements = new ArrayList(this.elements.values());
+        if( elements.size()==1 ) {
+            Element element = elements.get(0);
+            this.panel.add(element.asJComponent(), BorderLayout.CENTER);
+            return;
+        }
+        Collections.sort(elements, new Comparator<Element>() {
+            @Override
+            public int compare(Element o1, Element o2) {
+                return Integer.compare(o1.getPriority(),o2.getPriority());
+            }
+        });
+        JTabbedPane tab = new JTabbedPane();
+        tab.setTabPlacement(JTabbedPane.BOTTOM);
+        tab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+        for( Element element : elements ) {
+            tab.addTab(
+                element.getLabel(), 
+                element.getIcon(), 
+                element.asJComponent(), 
+                element.getTip()
+            );
+        }
+        int index = 0;
+        if( this.tab != null ) { 
+            index = this.tab.getSelectedIndex();
+        }
+        if( index < 0 ) {
+            index = 0;
+        } else if( index >= tab.getTabCount() ) {
+            index = tab.getTabCount()-1;
+        }
+        try {
+            tab.setSelectedIndex(index);
+        } catch(Exception ex) {
+            logger.warn("Can't restore the selected tab", ex);
+        }
+        this.tab = tab;
+        this.panel.add(this.tab, BorderLayout.CENTER);
+    }
+    
+    @Override
+    public JComponent asJComponent() {
+        if( this.panel == null ) {
+            this.panel = new JPanel();
+            this.panel.setLayout(new BorderLayout());
+            this.update();
+        }
+        return this.panel;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelExtentSelector.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/DefaultViewPanel.java	(revision 46118)
@@ -0,0 +1,632 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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 java.util.Map;
+
+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.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.AngleGeometryListener;
+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.TwoLinesBehavior;
+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.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+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, PropertiesSupport
+    {
+
+    /**
+     *
+     */
+    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 PropertiesSupportHelper propertiesHelper;
+
+    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.propertiesHelper = new PropertiesSupportHelper();
+        this.propertiesHelper.setProperty("View", this);
+        this.setName("View");
+        // TODO Remove this when the system lo load libraries is finished
+        if (mapControlManager == null) {
+            mapControlManager = MapControlLocator.getMapControlManager();
+        }
+        this.viewInformationArea = new DefaultViewInformationArea();
+    }
+
+    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.
+     * @param mapContext
+     */
+    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) {
+        final ApplicationManager application = ApplicationLocator.getApplicationManager();
+        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.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) {
+                    try {
+                        IWindow activeWin = application.getActiveWindow();
+                        if(activeWin != DefaultViewPanel.this) {
+                            return; 
+                        }
+                        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()
+                            );
+                        }
+                    } catch(Exception ex) {
+                        logger.warn("Problems process 'extentChanged'.",ex);
+                    }
+                }
+
+                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);
+
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return this.propertiesHelper.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        this.propertiesHelper.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return this.propertiesHelper.getProperties();
+    }
+
+    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();
+        this.viewInformationArea.add(m_TOC, "TOC", 0, "ToC", null, "Table of contents");
+
+        // 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(this.viewInformationArea.asJComponent());
+            tempSplitToc.setBottomComponent(m_MapLoc);
+            tempSplitToc.setResizeWeight(0.7);
+            tempMainSplit.setLeftComponent(tempSplitToc);
+        } else {
+            tempMainSplit.setLeftComponent(this.viewInformationArea.asJComponent());
+        }
+        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));
+        
+        // Angulo
+        AngleGeometryListener agl = new AngleGeometryListener(m_MapControl);
+        m_MapControl.addBehavior("feature-angle", new TwoLinesBehavior(agl));
+        
+        // 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(this.viewInformationArea.asJComponent());
+        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();
+    }
+
+    /**
+     * @param color
+     * @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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPage.java	(revision 46118)
@@ -0,0 +1,723 @@
+
+
+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.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.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.i18n.Messages;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * @author gvSIG team
+ *
+ */
+public class GeneralViewPropertiesPage extends JPanel implements PropertiesPage {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1356416393907133043L;
+
+    private JPanel propertiesPanel;
+
+    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;
+
+    /**
+     * @param view
+     */
+    public GeneralViewPropertiesPage(ViewDocument view) {
+        super(new BorderLayout());
+        this.view = view;
+        initComponents();
+    }
+
+    @Override
+    public void setData(Object data) {
+
+    }
+            
+    @Override
+    public boolean whenAccept() {
+        isAcceppted = true;
+        return whenApply();
+    }
+
+    @Override
+    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;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        isAcceppted = false;
+        return true;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("General");
+    }
+
+    @Override
+    public int getPriority() {
+        return 1000;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        this.add(getCenterPanel(), BorderLayout.NORTH);
+    }
+
+    private Component getCenterPanel() {
+        if (propertiesPanel == null) {
+            propertiesPanel = new JPanel(new GridBagLayout());
+
+            propertiesPanel.setLayout(new GridBagLayout());
+            propertiesPanel.setBorder(BorderFactory.createEmptyBorder(4, 5, 4, 5));
+
+            GridBagConstraints c = new GridBagConstraints();
+            c.insets = new Insets(2, 5, 2, 5);
+            c.gridy = -1;
+
+            addRow(propertiesPanel, c, getJLabelName(), getTxtName());
+            addRow(propertiesPanel, c, getJLabelDate(), getTxtDate());
+            addRow(propertiesPanel, c, getJLabelOwner(), getTxtOwner());
+            addRow(propertiesPanel, c, getJLabelMapUnits(), getCmbMapUnits());
+            addRow(propertiesPanel, c, getJLabelDistanceUnits(), getCmbDistanceUnits());
+            addRow(propertiesPanel, c, getJLabelAreaUnits(), getCmbDistanceArea());
+
+            // some extra space
+            addRow(propertiesPanel, 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++;
+            propertiesPanel.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;
+            propertiesPanel.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);
+            propertiesPanel.add(auxp, c);
+            // =============================
+
+            // some extra space
+            addRow(propertiesPanel, c, new JLabel(" "), new JLabel(" "));
+
+            c.anchor = GridBagConstraints.WEST;
+            c.weightx = 0.0d;
+            c.gridx = 0;
+            c.gridy++;
+            propertiesPanel.add(getJLabelComments(), c);
+
+            c.fill = GridBagConstraints.BOTH;
+            c.weightx = 1.0d;
+            c.gridy++;
+            c.gridwidth = 2;
+            propertiesPanel.add(getJScrollPaneComments(), c);
+        }
+        return propertiesPanel;
+    }
+
+
+    /**
+     * @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.getJPanelProj().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(JComponent panel, GridBagConstraints c, JComponent label, JComponent text) {
+        c.anchor = GridBagConstraints.WEST;
+        c.weightx = 0.0d;
+        c.gridx = 0;
+        c.gridy++;
+        panel.add(label, c);
+
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.weightx = 1.0d;
+        c.gridx = 1;
+        panel.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() {
+
+                @Override
+                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() {
+
+                @Override
+                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"));
+    }
+
+    /**
+     * @return ViewDocument
+     * @see org.gvsig.andami.ui.mdiManager.SingletonWindow#getWindowModel()
+     */
+    public Object getWindowModel() {
+        return view;
+    }
+
+
+    /**
+     * @return boolean
+     */
+    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() {
+
+                    @Override
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        // view.getMapContext().getViewPort().setDistanceUnits(cmbDistanceUnits.getSelectedIndex());
+                    }
+                });
+        }
+
+        return cmbDistanceArea;
+
+    }
+
+
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/IView.java	(revision 46118)
@@ -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.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();
+    
+    public ViewInformationArea getViewInformationArea();
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/MapOverViewPalette.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ExtentListSelectorModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerListItem.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewProperties.java	(revision 46118)
@@ -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.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.setProperty("ViewProperties", this);
+        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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/FPanelLocConfig.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/LayerProperties.java	(revision 46118)
@@ -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.project.documents.view.gui;
+
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.propertypage.BasePropertiesPageDialog;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+
+/**
+ * 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.setProperty("LayerProperties", this);
+        this.setPreferredSize(ToolsSwingUtils.ensureRowsCols(this, 30, 115));
+    }
+
+    @Override
+    protected boolean useTabsAlwais() {
+        return super.useTabsAlwais();
+        // return true;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewInformationArea.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewInformationArea.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewInformationArea.java	(revision 46118)
@@ -0,0 +1,45 @@
+package org.gvsig.app.project.documents.view.gui;
+
+import java.util.Iterator;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import org.gvsig.tools.swing.api.Component;
+
+public interface ViewInformationArea extends Component, Iterable<ViewInformationArea.ViewInformationAreaElement>  {
+
+    public interface ViewInformationAreaElement extends Component {
+
+        Icon getIcon();
+
+        void setIcon(Icon icon);
+
+        String getLabel();
+
+        void setLabel(String label);
+
+        int getPriority();
+
+        void setPriority(int priority);
+
+        String getTip();
+
+        void setTip(String tip);
+        
+        public Component getComponent();
+
+    }
+
+    public void add(JComponent component, String id, int priority, String label, Icon icon, String tip);
+
+    public void add(Component component, String id, int priority, String label, Icon icon, String tip);
+
+    public ViewInformationAreaElement get(String id);
+
+    public void remove(String id);
+    
+    public void update();
+    
+    @Override
+    public Iterator<ViewInformationAreaElement> iterator();
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/GeneralViewPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,32 @@
+
+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 {
+
+    @Override
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    @Override
+    public String getName() {
+        return "General";
+    }
+        
+    @Override
+    public PropertiesPage create(Object container, Object data) {
+        return new GeneralViewPropertiesPage((ViewDocument)data);
+    }
+
+    @Override
+    public String getGroupID() {
+        return ViewDocument.VIEW_PROPERTIES_PAGE_GROUP;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemLeaf.java	(revision 46118)
@@ -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.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.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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);
+
+    }
+
+    /* (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) {
+            return new ImageIcon(imgLegend);
+        }
+
+        BufferedImage img = null;
+        Graphics2D g2 = null;
+        Rectangle r = null;
+
+        switch (layerType) {
+            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);
+                break;
+
+            case Geometry.TYPES.NULL:
+                break;
+
+            default:
+                int wSymbol = w_1symbol;
+                if (StringUtils.isEmpty(getLabel())) {
+                    wSymbol = sz.width;
+                }
+                img = new BufferedImage(wSymbol, h_1symbol, BufferedImage.TYPE_INT_ARGB);
+                g2 = img.createGraphics();
+                r = new Rectangle(w_1symbol, h_1symbol);
+                break;
+
+        }
+
+        if (g2 == null) {
+            return null;
+        }
+        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 {
+                logger.warn("Symbol type mismatch", e);
+                return null;
+            }
+        } catch (CloneNotSupportedException e) {
+            logger.warn("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() {
+        if (symbol == null) {
+            return null;
+        }
+        return new ChangeSymbolTocMenuEntry();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocMenuEntry.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocItem.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractActionInfoAdapterToTocContextMenuAction.java	(revision 46118)
@@ -0,0 +1,80 @@
+package org.gvsig.app.project.documents.view.toc;
+
+import java.awt.Image;
+import javax.swing.ImageIcon;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.actioninfo.ActionInfo;
+import org.gvsig.app.project.documents.view.IContextMenuActionWithIcon;
+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 implements IContextMenuActionWithIcon  {
+
+    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);
+    }
+    
+    public ImageIcon getIcon() {
+        return this.action.getIcon();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/DnDJTree.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/ITocOrderListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.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 {
+                    FLayer layer = getNodeLayer(item);
+                    layer.reload();
+                    layer.getMapContext().invalidate();
+		} catch (Exception ex) {
+            logger.info("While reloading layer", ex);
+            getNodeLayer(item).setAvailable(false);
+		}
+	}
+}
+

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.xml	(revision 46118)
@@ -0,0 +1,613 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER: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</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">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">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">Layer:</at>
+            <at name="height">14</at>
+            <at name="width">51</at>
+            <at name="name">lblLayer</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">4</at>
+           <at name="row">2</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.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">20</at>
+            <at name="width">346</at>
+            <at name="name">txtLayerName</at>
+            <at name="background" object="color">236,233,216</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="editable">false</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">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">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">Problem:</at>
+            <at name="height">14</at>
+            <at name="width">51</at>
+            <at name="name">lblProblem</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">6</at>
+           <at name="colspan">3</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.JEditorPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JEditorPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="height">367</at>
+            <at name="width">508</at>
+            <at name="name">txtMessage</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>
+            <at name="editable">false</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</at>
+           <at name="colspan">3</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">embedded.2013415053</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">RIGHT:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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">Close</at>
+                 <at name="height">22</at>
+                 <at name="width">64</at>
+                 <at name="name">btnClose</at>
+                 <at name="actionCommand">Close</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">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.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">View properties of data source</at>
+                 <at name="height">22</at>
+                 <at name="width">208</at>
+                 <at name="name">btnViewParameters</at>
+                 <at name="actionCommand">View parameters</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="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("UseSpecificCatch")
+public class ZoomAlTemaTocMenuEntry extends AbstractTocContextMenuAction {
+
+    private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
+    private static final Logger logger = LoggerFactory.getLogger(ZoomAlTemaTocMenuEntry.class);
+
+    @Override
+    public String getGroup() {
+        return "group2"; //FIXME
+    }
+
+    @Override
+    public int getGroupOrder() {
+        return 20;
+    }
+
+    @Override
+    public int getOrder() {
+        return 1;
+    }
+
+    @Override
+    public String getText() {
+        return PluginServices.getText(this, "Zoom_a_la_capa");
+    }
+
+    @Override
+    public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+
+        if (isVisible(item, selectedItems)) {
+
+            for (FLayer selectedItem : selectedItems) {
+                if (!selectedItem.isAvailable()) {
+                    return false;
+                }
+            }
+            return true;
+
+        } else {
+            return false;
+        }
+
+    }
+
+    @Override
+    public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+        if (isTocItemBranch(item) && !(selectedItems == null || selectedItems.length <= 0)) {
+            return true;
+        }
+        return false;
+
+    }
+
+    @Override
+    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) {
+                logger.warn("Can't zoom to selected layer", e1);
+            }
+        } else {
+            try {
+                Envelope maxExtent = setMaxExtent(selectedItems);
+                getMapContext().zoomToEnvelope(maxExtent);
+            } catch (ReadException e1) {
+                logger.warn("Can't zoom to selected layer", e1);
+            }
+        }
+        Project project = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
+        project.setModified(true);
+    }
+
+    private Envelope setMaxExtent(FLayer[] actives)
+            throws ReadException {
+
+        Envelope extRef;
+        try {
+            extRef = geomManager.createEnvelope(Geometry.SUBTYPES.GEOM2D);
+        } catch (Exception ex) {
+            logger.warn("Can't create new envelope", ex);
+            return null;
+        }
+        for (FLayer active : actives) {
+            if (active.isAvailable()) {
+                Envelope extVar = active.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.344/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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+/* 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.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+
+public class ShowLayerErrorsTocMenuEntry extends AbstractTocContextMenuAction {
+
+    @Override
+    public void execute(ITocItem item, FLayer[] selectedItems) {
+        FLayer layer = getNodeLayer(item);
+        LayerErrorsPanel panel = new LayerErrorsPanel(layer);
+        WindowManager wm = ToolsSwingLocator.getWindowManager();
+        wm.showWindow(panel, "Errors in layer '"+layer.getName()+"'", WindowManager.MODE.WINDOW);
+    }
+
+    @Override
+    public String getText() {
+        return PluginServices.getText(this, "ver_error_capa");
+    }
+
+    @Override
+    public String getGroup() {
+        return "group3"; //FIXME
+    }
+
+    @Override
+    public int getGroupOrder() {
+        return 30;
+    }
+
+    @Override
+    public int getOrder() {
+        return 2;
+    }
+
+    @Override
+    public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+        return !getNodeLayer(item).isOk();
+    }
+
+    @Override
+    public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+        return isTocItemBranch(item);
+
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsPanel.java	(revision 46118)
@@ -0,0 +1,172 @@
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.impl.CallableException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LayerErrorsPanel
+    extends LayerErrorsView {
+
+    private static final Logger logger = LoggerFactory.getLogger(LayerErrorsPanel.class);
+    private static final long serialVersionUID = -5972995402218954892L;
+    private FLayer layer;
+
+    public LayerErrorsPanel(FLayer layer) {
+        this.initComponents();
+        this.setLayer(layer);
+    }
+
+    public LayerErrorsPanel(String name, Exception ex) {
+        this.initComponents();
+        this.setName(name);
+        this.setError(ex);
+    }
+
+    private void initComponents() {
+        this.translate();
+        this.txtMessage.setContentType("text/html");
+        this.btnClose.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doClose();
+            }
+        });
+        this.btnViewParameters.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doViewParameters();
+            }
+        });
+        this.setPreferredSize(new Dimension(550, 400));
+    }
+
+    @Override
+    public void setName(String name) {
+        this.txtLayerName.setText(name);
+    }
+
+    public void setError(Throwable e) {
+        List<Throwable> exs = new ArrayList<>();
+        exs.add(e);
+        this.txtMessage.setText(new MessageAsHTML(exs).toString());
+        this.btnViewParameters.setEnabled(false);
+    }
+
+    public void setLayer(FLayer layer) {
+        this.layer = layer;
+        if(layer==null){
+            setName("(null)");
+            this.txtMessage.setText("layer is null");
+        } else {
+            setName(layer.getName());
+            this.txtMessage.setText(new MessageAsHTML(layer.getErrors()).toString());
+        }
+        this.btnViewParameters.setEnabled(this.layer instanceof SingleLayer);
+    }
+
+    private class MessageAsHTML {
+
+        StringBuilder html;
+        Set<String> usedMsgs;
+
+        public MessageAsHTML(List<Throwable> exs) {
+            this.clear();
+            this.build(exs);
+        }
+
+        public MessageAsHTML() {
+            this.clear();
+        }
+
+        public void clear() {
+            this.html = new StringBuilder();
+            this.usedMsgs = new HashSet<>();
+        }
+
+        public void build(List<Throwable> exs) {
+            for( Throwable ex : exs ) {
+//                html.append("<ul>\n");
+                List<Throwable> causes = new ArrayList<>();
+                causes.addAll(ExceptionUtils.getThrowableList(ex));
+                if( ex instanceof List ) {
+                    causes.addAll((List<Throwable>) ex);
+                }
+                for( Throwable cause : causes ) {
+                    if( cause instanceof List ) {
+                        continue;
+                    }
+                    if( cause instanceof CallableException ) {
+                        cause = ((CallableException) cause).getCause();
+                    }
+                    if( cause == null ) {
+                        continue;
+                    }
+                    String message = cause.getMessage();
+                    if( message != null ) {
+                        if( !this.usedMsgs.contains(message) ) {
+                            this.usedMsgs.add(message);
+                            html.append("<li>");
+                            html.append(message.replace("\n", "<br>\n"));
+                            if( cause.getCause() != null ) {
+                                this.build(ExceptionUtils.getThrowableList(
+                                    cause.getCause()));
+                            }
+                            html.append("</li>\n");
+                        }
+                    }
+                }
+
+//                html.append("</ul>\n");
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "<ul>\n" + html.toString() + "</ul>\n";
+        }
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        this.lblLayer.setText(i18nManager.getTranslation("_Layer") + ":");
+        this.lblProblem.setText(i18nManager.getTranslation("_Problems") + ":");
+        this.btnClose.setText(i18nManager.getTranslation("_Close"));
+        this.btnViewParameters.setText(i18nManager.getTranslation("_View_properties_of_data_source"));
+    }
+
+    private void doClose() {
+        this.setVisible(false);
+    }
+
+    private void doViewParameters() {
+        try {
+            DynObjectEditor editor = new DynObjectEditor(
+                ((SingleLayer) layer).getDataStore().getParameters()
+            );
+            editor.editObject(true);
+        } catch (Throwable th) {
+            logger.warn(
+                "Can't show standard properties dialog for this parameters.",
+                th);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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 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.mapcontext.exceptions.ReloadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.tools.persistence.PersistentState;
+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();
+
+				FLayer[] layers = new FLayer[agrupa.getLayersCount()];
+				for(int i=0; i<agrupa.getLayersCount(); i++){
+					layers[i] = agrupa.getLayer(i);
+				}
+				 try {
+					 PersistentState lyrs_state = CopyPasteLayersUtils.getAsFLayersPersistentState(
+							 layers, this.getMapContext());
+					 CopyPasteLayersUtils.saveToClipboard(lyrs_state);
+					 CopyPasteLayersUtils.removeLayers(
+							 layers, this.getMapContext());
+					 FLayers resp = CopyPasteLayersUtils.getClipboardAsFLayers();
+					 CopyPasteLayersUtils.addLayers(resp, parent);
+				 } catch (Exception e) {
+					 logger.error("Error ungrouping layers. Can't copy layers outside the group");
+				 }
+				parent.removeLayer(agrupa);
+				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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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/_Visibility/colocar_delante"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 40;
+	}
+
+	public int getOrder() {
+		return 8;
+	}
+
+	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.344/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.344/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.344/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.344/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 46118)
@@ -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.project.documents.view.toc.actions;
+
+import java.awt.Component;
+
+import javax.swing.JOptionPane;
+import org.apache.commons.lang3.StringUtils;
+
+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.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;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+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) {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        FLayer[] actives = selectedItems;
+        if( actives == null ) {
+            return;
+        }
+        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;
+            }
+        }
+        if (actives.length <= 0) {
+            return;
+        }
+        int option = application.confirmDialog(
+                    i18n.getTranslation("desea_borrar_la_capa"), 
+                    i18n.getTranslation("_Question"), 
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE, 
+                    "Confirm remove layer from the view"
+            );
+        if (option != JOptionPane.YES_OPTION) {
+            return;
+        }
+        getMapContext().beginAtomicEvent();
+        for (i = actives.length - 1; i >= 0; i--) {
+            try {
+                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 ( StringUtils.equals(name, actives[k].getName()) ) {
+                            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();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/LayerErrorsView.java	(revision 46118)
@@ -0,0 +1,182 @@
+package org.gvsig.app.project.documents.view.toc.actions;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+
+public class LayerErrorsView extends JPanel
+{
+   JLabel lblLayer = new JLabel();
+   JTextField txtLayerName = new JTextField();
+   JLabel lblProblem = new JLabel();
+   JEditorPane txtMessage = new JEditorPane();
+   JButton btnClose = new JButton();
+   JButton btnViewParameters = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public LayerErrorsView()
+   {
+      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","CENTER:DEFAULT:NONE,CENTER: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);
+
+      lblLayer.setName("lblLayer");
+      lblLayer.setText("Layer:");
+      jpanel1.add(lblLayer,cc.xy(2,2));
+
+      txtLayerName.setBackground(new Color(236,233,216));
+      txtLayerName.setEditable(false);
+      txtLayerName.setName("txtLayerName");
+      jpanel1.add(txtLayerName,cc.xy(4,2));
+
+      lblProblem.setName("lblProblem");
+      lblProblem.setText("Problem:");
+      jpanel1.add(lblProblem,cc.xy(2,4));
+
+      txtMessage.setEditable(false);
+      txtMessage.setName("txtMessage");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtMessage);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,6,3,1));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,8,3,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("RIGHT:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnClose.setActionCommand("Close");
+      btnClose.setName("btnClose");
+      btnClose.setText("Close");
+      jpanel1.add(btnClose,cc.xy(3,1));
+
+      btnViewParameters.setActionCommand("View parameters");
+      btnViewParameters.setName("btnViewParameters");
+      btnViewParameters.setText("View properties of data source");
+      jpanel1.add(btnViewParameters,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/AbstractTocContextMenuAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/TocItemBranch.java	(revision 46118)
@@ -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.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 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()) {
+                        BufferedImage img = this.getUnavailableImage();
+                        grp.drawImage(img,0,icolayer.getIconHeight()-img.getHeight(),null);
+                }
+                
+                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.344/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.344/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.344/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.344/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 46118)
@@ -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.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.
+     * @param tocBackground
+     */
+    public TOCRenderer(Color tocBackground) {
+        this(Color.RED, tocBackground);
+    }
+
+    /**
+     * Creates a new TOCRenderer object.
+     * @param editingColor
+     * @param tocBackground
+     */
+    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
+     */
+    @Override
+    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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,302 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.text.NumberFormat;
+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 javax.swing.JMenu;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.gvsig.andami.PluginServices;
+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.IContextMenuActionWithIcon;
+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.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;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ * 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("active-layer-set-visible", "group4/_Visibility/_Visible_active_layers", 40, 2);
+        viewManager.addTOCContextAction("active-layer-set-hide", "group4/_Visibility/_Hide_active_layers", 40, 3);
+        viewManager.addTOCContextAction("active-layer-bring-front", "group4/_Visibility/_Bring_to_front", 40, 4);
+        viewManager.addTOCContextAction("active-layer-send-back", "group4/_Visibility/_Send_to_back", 40, 5);
+        viewManager.addTOCContextAction("active-layer-move-ahead", "group4/_Visibility/_Move_ahead", 40, 6);
+        viewManager.addTOCContextAction("active-layer-move-behind", "group4/_Visibility/_Move_behind", 40, 7);
+        
+        viewManager.addTOCSeparator("group4/_Visibility", 40, 8);
+        
+        viewManager.addTOCContextAction("layer-set-active", "group4/_Visibility/_Active_all_layers", 40, 10);
+        viewManager.addTOCContextAction("layer-set-inactive", "group4/_Visibility/_Inactive_all_layers", 40, 11);
+        viewManager.addTOCContextAction("layer-set-hide", "group4/_Visibility/_Hide_all_layers", 40, 12);
+        viewManager.addTOCContextAction("layer-set-visible", "group4/_Visibility/_Visible_all_layers", 40, 13);
+
+        
+        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();
+        
+        List<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 List<IContextMenuAction> getActionList() {
+        List<IContextMenuAction> actions =  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)) {
+                        actions.add(action);
+                    }
+                }
+
+            }
+            Collections.sort(actions, new CompareAction());
+            return actions;
+        }
+        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(6);
+            String key1 =
+                "" + formater.format(o1.getGroupOrder()) + formater.format(o1.getOrder()) + o1.getGroup();
+            String key2 =
+                "" + formater.format(o2.getGroupOrder()) + formater.format(o2.getOrder()) + o2.getGroup();
+            return key1.compareTo(key2);
+        }
+    }
+
+    private void createMenuElements(List<IContextMenuAction> actions) {
+        String lastGroup = null;
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        HashMap<String, JMenu> menus = new HashMap<String, JMenu>();
+        for (IContextMenuAction action : actions) {
+            MenuItem item = new MenuItem(action.getText(), action);
+            item.setEnabled(action.isEnabled(this.getNodeUserObject(),
+                this.selecteds));
+            if( action.getGroup()!=null ) {
+                    String newGroup = action.getGroup(); 
+                    //Format group: "group4/_Change_visibility/_Visible_active_layers"
+                    String[] splits;
+                    if (newGroup.contains("/")) {
+                        splits = newGroup.split("/");
+                        newGroup = splits[0];
+                    } else {
+                        splits = null;
+                    }
+	            if ( !newGroup.equals(lastGroup)) {
+	                if (lastGroup != null) {
+	                    this.addSeparator();
+	                }
+	                lastGroup = newGroup;
+	            }
+                    if (splits!=null && splits.length>0) {
+                        String agrupation1 = splits[1];
+                        String actionName = splits[2];
+                        JMenu actualMenu;
+                        if (!menus.containsKey(agrupation1)) {
+                            JMenu m = new JMenu(i18n.getTranslation(agrupation1));
+                            menus.put(agrupation1, m);
+                            this.add(m);
+                            actualMenu = m;
+                        } else {
+                            actualMenu = menus.get(agrupation1);
+                        }
+                        if(actionName.equals("-")){
+                            actualMenu.addSeparator();
+                        } else {
+                            item = new MenuItem(i18n.getTranslation(actionName), action);
+                            actualMenu.add(item);
+                        }
+                        continue;
+                    }
+            }
+            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;
+            if( this.action instanceof IContextMenuActionWithIcon ) {
+                this.setIcon(((IContextMenuActionWithIcon)this.action).getIcon());
+            }
+            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);
+            if (PluginServices.getMainFrame() != null) {
+                PluginServices.getMainFrame().enableControls();
+            }
+        }
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,1011 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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.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.List;
+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.TreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.apache.commons.lang.BooleanUtils;
+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.ProjectPreferences;
+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.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.events.AtomicEvent;
+import org.gvsig.fmap.mapcontext.events.listeners.AtomicEventListener;
+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.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.events.LegendChangedEvent;
+import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
+import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
+
+/**
+ *
+ * @author fjp
+ */
+public class TOC extends JComponent {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 5689047685537359038L;
+
+    private static final Logger logger = LoggerFactory.getLogger(TOC.class);
+
+    private static class ItemsExpandeds {
+
+        private final Map<Object, Boolean> itemsExpanded = new HashMap<>();
+        private boolean expandingNodes = false;
+
+        public boolean isMarked(ITocItem item) {
+            Object key = item.getLabel();
+            boolean isItemExpanded = BooleanUtils.isTrue(this.itemsExpanded.get(key));
+            return isItemExpanded;
+        }
+
+        public void setMark(ITocItem item, boolean expanded) {
+            Object key = item.getLabel();
+            this.itemsExpanded.put(key, expanded);
+        }
+
+        public void removeLayer(FLayer layer) {
+            Object key = layer.getName();
+            this.itemsExpanded.remove(key);
+        }
+
+        public void update(JTree tree, TreeNode node) {
+            if (expandingNodes) {
+                return;
+            }
+            try {
+                expandingNodes = true;
+                DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();
+                Enumeration<TreeNode> nodes = (Enumeration<TreeNode>)(node.children());
+                while (nodes.hasMoreElements()) {
+                    DefaultMutableTreeNode curNode = (DefaultMutableTreeNode) nodes.nextElement();
+                    if (curNode.getChildCount() > 0) {
+                        update(tree, curNode);
+                    }
+                    TreePath path = new TreePath(treeModel.getPathToRoot(curNode));
+                    ITocItem item = (ITocItem) curNode.getUserObject();
+                    if (this.isMarked(item)) {
+                        tree.expandPath(path);
+                    } else {
+                        tree.collapsePath(path);
+                    }
+                }
+            } finally {
+                expandingNodes = false;
+            }
+
+        }
+    }
+
+    private MapContext mapContext;
+
+    private final DnDJTree m_Tree;
+    private final DefaultTreeModel m_TreeModel;
+    private final DefaultMutableTreeNode m_Root;
+    private final TOCRenderer m_TocRenderer;
+    private final JScrollPane m_Scroller;
+
+    private final ItemsExpandeds itemsExpandeds = new ItemsExpandeds();
+
+    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));
+
+        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.setShowsRootHandles(true);
+        m_Tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+        nodeSelectionListener = new NodeSelectionListener(m_Tree);
+        m_Tree.addMouseListener(nodeSelectionListener);
+
+        this.addComponentListener(new ComponentListener() {
+
+            @Override
+            public void componentResized(ComponentEvent e) {
+                tocResized();
+            }
+
+            @Override
+            public void componentMoved(ComponentEvent e) {
+            }
+
+            @Override
+            public void componentShown(ComponentEvent e) {
+            }
+
+            @Override
+            public void componentHidden(ComponentEvent e) {
+            }
+        });
+
+        m_Tree.addOrderListener(new ITocOrderListener() {
+
+            @Override
+            public void orderChanged(int oldPos, int newPos, FLayers layers) {
+                try {
+                    layers.moveTo(oldPos, newPos);
+                } catch (Exception e) {
+                    logger.warn("Can't change order of layers in TOC", e);
+                }
+                mapContext.invalidate();
+            }
+
+            @Override
+            public void parentChanged(FLayers source, FLayers targer, FLayer layer) {
+                try {
+                    source.move(layer, targer);
+                } catch (Exception e) {
+                    logger.warn("Can't move layers in TOC", e);
+                }
+                mapContext.invalidate();
+            }
+        });
+
+        m_Tree.addTreeExpansionListener(new TreeExpansionListener() {
+
+            @Override
+            public void treeCollapsed(TreeExpansionEvent event) {
+                TreePath path = event.getPath();
+                DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
+                if (node.getUserObject() instanceof ITocItem) {
+                    itemsExpandeds.setMark((ITocItem) node.getUserObject(), false);
+                }
+            }
+
+            @Override
+            public void treeExpanded(TreeExpansionEvent event) {
+                TreePath path = event.getPath();
+                DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
+                if (node.getUserObject() instanceof ITocItem) {
+                    itemsExpandeds.setMark((ITocItem) node.getUserObject(), true);
+                }
+            }
+        });
+
+        m_Tree.setRowHeight(0); // Para que lo determine el renderer
+
+        m_Scroller = new JScrollPane(m_Tree);
+        m_Scroller.setBorder(BorderFactory.createEmptyBorder());
+
+        add(m_Scroller);
+
+    }
+
+    /**
+     * 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();
+    }
+
+    /**
+     * @param mc
+     */
+    public void setMapContext(MapContext mc) {
+        this.mapContext = mc;
+        this.mapContext.addAtomicEventListener(new AtomicEventListener() {
+
+            @Override
+            public void atomicEvent(final AtomicEvent e) {
+                if (!SwingUtilities.isEventDispatchThread()) {
+                    SwingUtilities.invokeLater(new Runnable() {
+
+                        @Override
+                        public void run() {
+                            atomicEvent(e);
+                        }
+                    });
+                    return;
+                }
+
+                if ((e.getLayerCollectionEvents().length > 0) || (e.getLegendEvents().length > 0)) {
+                    reloadLayers();
+                }
+
+                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 (haveToAddNewLayersInInvisibleMode()) {
+                            events[i].getAffectedLayer().setVisible(false);
+                        }
+                    }
+                }
+            }
+        });
+
+        this.mapContext.getLayers().addLegendListener(new LegendListener() {
+
+            @Override
+            public void legendChanged(LegendChangedEvent e) {
+                reloadLayers();
+            }
+        });
+
+        reloadLayers();
+    }
+
+    /**
+     *
+     */
+    public void refresh() {
+        reloadLayers();
+    }
+
+    /**
+     *
+     */
+    public void reloadLayers() {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                @Override
+                public void run() {
+                    reloadLayers();
+                }
+            });
+            return;
+        }
+        LayerCollection theLayers = mapContext.getLayers();
+        m_Root.removeAllChildren();
+        m_Root.setAllowsChildren(true);
+        reloadLayers(theLayers, m_Root);
+
+        m_TreeModel.reload();
+
+        itemsExpandeds.update(m_Tree, m_Root);
+    }
+
+    private void reloadLayers(LayerCollection theLayers, DefaultMutableTreeNode parentNode) {
+
+        int width = m_Tree.getWidth();
+        if (width == 0) {
+            width = 300;
+        }
+
+        // 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;
+                reloadLayers(group, nodeLayer);
+
+            } else if (haveToShowLeyendOfLayer(lyr)) {
+                this.addLegend(nodeLayer, lyr);
+            }
+        }
+    }
+
+    private void addLegend(final DefaultMutableTreeNode nodeLayer, FLayer lyr) {
+        int width = m_Tree.getWidth();
+        if (width == 0) {
+            width = 300;
+        }
+        Dimension sizeLeaf = new Dimension(width, 15);
+
+        if (lyr instanceof Classifiable) {
+            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) {
+                    final IHasImageLegend imageLegend = (IHasImageLegend) legendInfo;
+                    // Las imagenes de la leyenda que vienen de servicios
+                    // remotos pueden
+                    // ser lentas de pintar y relentizan todo gvSIG, asi que
+                    // mejor si
+                    // podemos hacerlo en segundo plano.
+                    Thread thread = new Thread(new Runnable() {
+
+                        @Override
+                        public void run() {
+                            final Image image = imageLegend.getImageLegend();
+                            // Una vez obtenida la imagen, la actualizacion del
+                            // ToC
+                            // la hacemos en el thread de Swing para evitar
+                            // problemas.
+                            SwingUtilities.invokeLater(new Runnable() {
+
+                                @Override
+                                public void run() {
+                                    int w = 0;
+                                    int h = 0;
+
+                                    if (image != null) {
+                                        w = image.getWidth(null);
+                                        h = image.getHeight(null);
+                                    }
+
+                                    if (image != null && w > 0 && h > 0) {
+                                        TocItemLeaf itemLeaf = new TocItemLeaf();
+                                        itemLeaf.setImageLegend(image, "", new Dimension(w, h));
+                                        DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(itemLeaf);
+                                        m_TreeModel.insertNodeInto(nodeValue, nodeLayer, nodeLayer.getChildCount());
+                                    }
+                                    // Aqui habria que forzar a refrescar el
+                                    // nodo nodeLayer
+                                }
+                            });
+                        }
+                    }, "ToCImageLegendUpdate");
+                    thread.start();
+                }
+            } catch (Throwable e) {
+                logger.warn(MessageFormat.format("Can't add leyend of layer {0} to the TOC.", lyr), e);
+            }
+        }
+
+    }
+
+    private void tocResized() {
+        DefaultMutableTreeNode n;
+        Enumeration<TreeNode> 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));
+            }
+
+        }
+    }
+
+    /**
+     * Obtiene el JScrollPane que contiene el TOC
+     *
+     * @return JScrollPane que contiene el TOC
+     */
+    public JScrollPane getJScrollPane() {
+        return this.m_Scroller;
+    }
+
+    /**
+     * @return
+     */
+    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
+         *            !
+         */
+        NodeSelectionListener(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);
+            final FLayers layers = mapContext.getLayers();
+            List<FLayer> plainListLayers = toPlainList(layers);
+            plainListLayers.remove(plainListLayers.size() - 1);
+            int countDeepActiveLayers = countDeepActiveLayers(plainListLayers);
+
+            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<>();
+
+                                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);
+                                                vectorLayer.setActive(true);
+                                            } 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;
+                                    }
+                                    targetLayers.get(k).setActive(true);
+                                }
+
+                                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();
+                    if( lyr.isAvailable() ) {
+                        lyr.getMapContext().beginAtomicEvent();
+                    }
+
+                    // Si est� pulsado SHIFT
+                    if (((e.getModifiers() & InputEvent.SHIFT_MASK) != 0)
+                        && (e.getButton() == MouseEvent.BUTTON1 || e.getButton() == MouseEvent.BUTTON3)) {
+                        if (countDeepActiveLayers > 0) {
+                            selectInterval(plainListLayers, lyr);
+                        } else {
+                            lyr.setActive(!lyr.isActive());
+                        }
+
+                    } else { // Si no est� pulsado SHIFT
+                        // Si no est� pulsado CTRL
+                        if (!((e.getModifiers() & InputEvent.CTRL_MASK) != 0)) {
+                            if (e.getButton() == MouseEvent.BUTTON1) {
+                                if (countDeepActiveLayers > 1) {
+                                    layers.setAllActives(false);
+                                    lyr.setActive(true);
+                                } else {
+                                    boolean active = lyr.isActive();
+                                    layers.setAllActives(false);
+                                    lyr.setActive(!active);
+                                }
+                            }
+                            if (e.getButton() == MouseEvent.BUTTON3) {
+                                if (lyr.isActive()) {
+                                    // No modificamos la selecci�n porque lo que
+                                    // se va a hacer m�s abajo es abrir el men�
+                                    // contextual
+                                } else {
+                                    boolean active = lyr.isActive();
+                                    layers.setAllActives(false);
+                                    lyr.setActive(!active);
+                                }
+                            }
+                        } else { // Si s� est� pulsado CTRL
+                            if (e.getButton() == MouseEvent.BUTTON1) {
+                                // BUTTON1 cambiamos la activaci�n de la lyr
+                                // seleccionada
+                                lyr.setActive(!lyr.isActive());
+                            }
+                            if (e.getButton() == MouseEvent.BUTTON3) {
+                                if (lyr.isActive()) {
+                                    // No modificamos la selecci�n porque lo que
+                                    // se va a hacer m�s abajo es abrir el men�
+                                    // contextual
+                                } else {
+                                    lyr.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);
+                        // si node no tiene leyenda llamar a addLegend
+                    }
+
+                    if (e.getButton() == MouseEvent.BUTTON3) {
+                        popmenu = new FPopupMenu(mapContext, node);
+                        tree.add(popmenu);
+                        popmenu.show(e.getComponent(), e.getX(), e.getY());
+                    }
+                    if( lyr.isAvailable() ) {
+                        lyr.getMapContext().endAtomicEvent();
+                    }                    
+                }
+
+                if (node != null && node.getUserObject() instanceof TocItemLeaf) {
+                    TocItemBranch owner = (TocItemBranch) ((DefaultMutableTreeNode) node.getParent()).getUserObject();
+
+                    FLayer masterLayer = owner.getLayer();
+
+                    // 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.
+                                 */
+                                /*
+                                 * #3035: Symbology is applied to active layers
+                                 * too
+                                 * Now it will be done only on the
+                                 * double-clicked one
+                                 */
+                                action.execute(leaf, new FLayer[] { masterLayer });
+                            }
+                        } catch (Exception ex) {
+                            logger.warn("Problems executing action in the ToC.", ex);
+                        } finally {
+                            PluginServices.getMDIManager().restoreCursor();
+                        }
+                        return;
+                    }
+                }
+
+                ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
+
+                if (row == 0) {
+                    tree.revalidate();
+                    tree.repaint();
+                }
+
+                // FIXME Is it really necessary?
+                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(List<FLayer> layers, FLayer lyr) {
+            // FLayer[] activeLayers = layers.getActives();
+            int firstActive = Integer.MAX_VALUE;
+            int lastActive = -1;
+            int myLayer = -1;
+
+            for (int j = 0; j < layers.size(); j++) {
+                FLayer layerAux = layers.get(j);
+
+                if (layerAux.isActive()) {
+                    if (firstActive > j) {
+                        firstActive = j;
+                    }
+                    if (lastActive < j) {
+                        lastActive = j;
+                    }
+                    if (layerAux.equals(lyr)) {
+                        myLayer = j;
+                    }
+                }
+                if (myLayer < 0 && layerAux.equals(lyr)) {
+                    myLayer = j;
+                }
+            }
+
+            if (firstActive < Integer.MAX_VALUE && myLayer >= 0) {
+                for (int pasada = 0; pasada < 2; pasada++) {
+                    if (myLayer < firstActive) {
+                        for (int j = 0; j < myLayer; j++) {
+                            FLayer layerAux = layers.get(j);
+                            if (pasada == 0) {
+                                if (layerAux instanceof FLayers) {
+                                    layerAux.setActive(false);
+                                }
+                            } else {
+                                if (!(layerAux instanceof FLayers)) {
+                                    layerAux.setActive(false);
+                                }
+                            }
+                        }
+                        for (int j = myLayer; j <= lastActive; j++) {
+                            FLayer layerAux = layers.get(j);
+                            if (pasada == 0) {
+                                if (layerAux instanceof FLayers) {
+                                    layerAux.setActive(true);
+                                }
+                            } else {
+                                if (!(layerAux instanceof FLayers)) {
+                                    layerAux.setActive(true);
+                                }
+                            }
+                        }
+                        for (int j = lastActive + 1; j < layers.size(); j++) {
+                            FLayer layerAux = layers.get(j);
+                            if (pasada == 0) {
+                                if (layerAux instanceof FLayers) {
+                                    layerAux.setActive(false);
+                                }
+                            } else {
+                                if (!(layerAux instanceof FLayers)) {
+                                    layerAux.setActive(false);
+                                }
+                            }
+                        }
+                    } else {
+                        if (myLayer > lastActive) {
+                            for (int j = 0; j < firstActive; j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(false);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(false);
+                                    }
+                                }
+                            }
+                            for (int j = firstActive; j <= myLayer; j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(true);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(true);
+                                    }
+                                }
+                            }
+                            for (int j = myLayer + 1; j < layers.size(); j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(false);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(false);
+                                    }
+                                }
+                            }
+                        } else { // Si myLayer est� entre firstActive y lastActive
+                                 // seleccionamos desde myLayer hasta lastLayer
+                            for (int j = 0; j < myLayer; j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(false);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(false);
+                                    }
+                                }
+                            }
+                            for (int j = myLayer; j <= lastActive; j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(true);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(true);
+                                    }
+                                }
+                            }
+                            for (int j = lastActive + 1; j < layers.size(); j++) {
+                                FLayer layerAux = layers.get(j);
+                                if (pasada == 0) {
+                                    if (layerAux instanceof FLayers) {
+                                        layerAux.setActive(false);
+                                    }
+                                } else {
+                                    if (!(layerAux instanceof FLayers)) {
+                                        layerAux.setActive(false);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        private List<FLayer> toPlainList(FLayer layer) {
+            return toPlainList(layer, new ArrayList<FLayer>());
+        }
+
+        private List<FLayer> toPlainList(FLayer layer, List<FLayer> result) {
+            if (layer instanceof FLayers) {
+                FLayers layerGroup = (FLayers) layer;
+                for (int i = 0; i < layerGroup.getLayersCount(); i++) {
+                    toPlainList(layerGroup.getLayer(i), result);
+                }
+            }
+            result.add(layer);
+            return result;
+        }
+
+        private int countDeepActiveLayers(List<FLayer> layers) {
+            int count = 0;
+            for (FLayer fLayer : layers) {
+                if (fLayer.isActive()) {
+                    count++;
+                }
+            }
+            return count;
+        }
+
+        /**
+         * 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);
+                if (node != null && !(lyr instanceof FLayers)) {
+                    if (haveToShowLeyendOfLayer(lyr)) {
+                        if (node.getChildCount() == 0) {
+                            addLegend(node, lyr);
+                        }
+                    } else {
+                        this.node.removeAllChildren();
+                        m_TreeModel.reload(node);
+                    }
+                }
+            }
+        }
+
+        /**
+         * 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);
+            }
+        }
+
+        @Override
+        public void mouseReleased(MouseEvent arg0) {
+            super.mouseReleased(arg0);
+        }
+
+        @Override
+        public void mouseEntered(MouseEvent arg0) {
+            super.mouseEntered(arg0);
+        }
+    }
+
+    private boolean haveToAddNewLayersInInvisibleMode() {
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+
+        return projectPreferences.getAddNewLayersInInvisibleMode();
+    }
+
+    private boolean haveToShowLeyendOfLayer(FLayer layer) {
+        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
+        return !(!layer.isVisible() && projectPreferences.getHideLegendInToCOfNonVisibleLayers());
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java	(revision 46118)
@@ -0,0 +1,526 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+
+import javax.swing.ImageIcon;
+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.actioninfo.ActionInfo;
+import org.gvsig.andami.actioninfo.ActionInfoManager;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+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.view.dalactions.AddFilterToLayerAction.AddFilterToLayerActionFactory;
+import org.gvsig.app.project.documents.view.dalactions.CreateTemporalLayerAction;
+import org.gvsig.app.project.documents.view.dalactions.ViewZoomAction.ViewZoomActionFactory;
+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.dal.AbstractStoresRepository;
+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.feature.FeatureStore;
+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.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+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.gvsig.tools.util.UnmodifiableBasicSet;
+import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Factory of View.
+ *
+ * @author gvSIG Team
+ *
+ */
+public class ViewManager extends AbstractDocumentManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ViewManager.class);
+
+    private static class ViewDocumentStoresRepository extends AbstractStoresRepository {
+
+        public ViewDocumentStoresRepository(String name) {
+            super(name);
+        }
+
+        private Map<String, DataStoreParameters> getAll(Predicate<DataStore> filter, int limit) {
+            Map<String, DataStoreParameters> all = new HashMap<>();
+            Project project = ProjectManager.getInstance().getCurrentProject();
+            List<Document> views = project.getDocuments(TYPENAME);
+            for (Document view : views) {
+                for (FLayer layer : ((ViewDocument) view).layers()) {
+                    if (layer instanceof FLyrVect) {
+                        FeatureStore store = ((FLyrVect) layer).getFeatureStore();
+                        if (store!=null && (filter == null || filter.test(store))) {
+                            all.put(store.getName(), store.getParameters());
+                        }
+//                        UnmodifiableBasicMap<String, DataStore> children = store.getChildren();
+//                        if (children != null) {
+//                            for (DataStore dataStore : children) {
+//                                if (filter == null || filter.test(dataStore)) {
+//                                    all.put(dataStore.getName(), dataStore.getParameters());
+//                                }
+//                            }
+//                        }
+                    }
+                    if (limit > 0 && all.size() >= limit) {
+                        break;
+                    }
+                }
+            }
+            if (all.isEmpty()) {
+                return null;
+            }
+            return all;
+        }
+
+        @Override
+        protected DataStoreParameters getMyParameters(final String name) {
+            Map<String, DataStoreParameters> all = this.getAll((DataStore t) -> {
+                String x = t==null? null:t.getName();
+                return StringUtils.equalsIgnoreCase(name, x);
+            }, 1);
+            if (all == null) {
+                return null;
+            }
+            return all.get(name);
+        }
+
+        @Override
+        public boolean containsKey(final String key) {
+            Map<String, DataStoreParameters> all = this.getAll((DataStore t) -> {
+                String x = t==null? null:t.getName();
+                return StringUtils.equalsIgnoreCase(key, x);
+            }, 1);
+            if (all == null) {
+                return false;
+            }
+            return all.containsKey(key);
+        }
+
+        @Override
+        protected UnmodifiableBasicSet<String> getMyKeySet() {
+            Map<String, DataStoreParameters> all = this.getAll(null, 0);
+            if (all == null) {
+                return null;
+            }
+            return new UnmodifiableBasicSetAdapter<>(all.keySet());
+        }
+
+        @Override
+        protected boolean isEmptyMyRepository() {
+            Map<String, DataStoreParameters> all = this.getAll(null, 1);
+            return all.isEmpty();
+        }
+
+        @Override
+        protected int getMySize() {
+            Map<String, DataStoreParameters> all = this.getAll(null, 0);
+            return all.size();
+        }
+
+        @Override
+        public Iterator<DataStoreParameters> iterator() {
+            Map<String, DataStoreParameters> all = this.getAll(null, 0);
+            return all.values().iterator();
+        }
+
+        public static void selfRegister() {
+            DataManager dataManager = DALLocator.getDataManager();
+            dataManager.getStoresRepository().addRepository(new ViewDocumentStoresRepository("Project layers"));            
+        }
+    }
+    private static final String PERSISTENCE_VIEW_DOCUMENT_DEFINITION_NAME
+            = "DefaultViewDocument";
+    public static String TYPENAME = "project.document.view2d";
+    private DynStruct persistenceDefinition;
+
+    public ViewManager() {
+        // Do nothing
+    }
+
+    @Override
+    public int getPriority() {
+        return 0;
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return PluginServices.getIconTheme().get("document-view-icon");
+    }
+
+    @Override
+    public ImageIcon getIconSelected() {
+        return PluginServices.getIconTheme().get("document-view-icon-sel");
+    }
+
+    @Override
+    public String getTitle() {
+        return PluginServices.getText(this, "Vista");
+    }
+
+    @Override
+    public String getTypeName() {
+        return TYPENAME;
+    }
+
+    @Override
+    public Class getMainWindowClass() {
+        return DefaultViewPanel.class;
+    }
+
+    @Override
+    public AbstractDocument createDocument() {
+        AbstractDocument doc = new DefaultViewDocument(this);
+        if (this.notifyObservers(NOTIFY_AFTER_CREATEDOCUMENT, doc).isCanceled()) {
+            return null;
+        }
+        return doc;
+
+    }
+
+    @Override
+    public IWindow getMainWindow(Document doc, WindowLayout layout) {
+        IDocumentWindow win = (IDocumentWindow) super.getMainWindow(doc, layout);
+        if (win == null) {
+            win = this.createDocumentWindow(doc);
+            if (layout != null && win != null) {
+                win.setWindowLayout(layout);
+            }
+            if (this.notifyObservers(NOTIFY_AFTER_CREATEMAINWINDOW, win).isCanceled()) {
+                return null;
+            }
+        }
+        if (this.notifyObservers(NOTIFY_AFTER_GETMAINWINDOW, win).isCanceled()) {
+            return null;
+        }
+        ((AbstractDocument) doc).raiseEventCreateWindow(win);
+        return win;
+    }
+
+    @Override
+    public IWindow getPropertiesWindow(Document doc) {
+        IWindow win = super.getPropertiesWindow(doc);
+        if (win == null) {
+            win = new ViewProperties((DefaultViewDocument) doc);
+            if (this.notifyObservers(NOTIFY_AFTER_CREATEPROPERTIESWINDOW, win).isCanceled()) {
+                return null;
+            }
+        }
+        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, order)
+        );
+    }
+
+    public void addTOCContextAction(ActionInfo action) {
+        this.addTOCContextAction(action.getName(), new ActionInfoAdapterToContextMenuAction(action, "default", 9000));
+    }
+
+    public void addTOCContextAction(ActionInfo action, String group, int groupOrder) {
+        this.addTOCContextAction(action.getName(), new ActionInfoAdapterToContextMenuAction(action, group, groupOrder));
+    }
+
+    public void addTOCSeparator(String group, int groupOrder, int order) {
+        this.addTOCContextAction(
+            group + "/-",
+            new IContextMenuAction() {
+                @Override
+                public boolean isVisible(Object item, Object[] selectedItems) {
+                    return true;
+                }
+
+                @Override
+                public boolean isEnabled(Object item, Object[] selectedItems) {
+                    return true;
+                }
+
+                @Override
+                public void execute(Object item, Object[] selectedItems) {
+                }
+
+                @Override
+                public String getGroup() {
+                    return group + "/-";
+                }
+
+                @Override
+                public int getGroupOrder() {
+                    return groupOrder;
+                }
+
+                @Override
+                public int getOrder() {
+                    return order;
+                }
+
+                @Override
+                public String getText() {
+                    return "-";
+                }
+
+                @Override
+                public String getDescription() {
+                    return "";
+                }
+            }
+        );
+    }
+
+    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;
+        }
+
+        @Override
+        public Object create() {
+            return this.menuAction;
+        }
+
+        @Override
+        public Object create(Object[] args) {
+            return this.menuAction;
+        }
+
+        @Override
+        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-csv", 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("layer", "active-layer-bring-front", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "active-layer-move-ahead", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "active-layer-move-behind", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "active-layer-send-back", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "active-layer-set-hide", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "active-layer-set-visible", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "layer-set-visible", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "layer-set-hide", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "layer-set-inactive", ViewManager.class);
+        IconThemeHelper.registerIcon("layer", "layer-set-active", 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("CSV", "layer-icon-csv");
+        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);
+
+        }
+        ViewDocumentStoresRepository.selfRegister();
+        ViewZoomActionFactory.selfRegister();
+        AddFilterToLayerActionFactory.selfRegister();
+        CreateTemporalLayerAction.CreateTemporalLayerActionFactory.selfRegister();
+    }
+
+    @SuppressWarnings("rawtypes")
+    @Override
+    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")
+    @Override
+    protected Class getDocumentClass() {
+        return DefaultViewDocument.class;
+    }
+
+    @Override
+    public boolean manages(Object object) {
+        return object instanceof ViewDocument;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/Encuadrator.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewDocument.java	(revision 46118)
@@ -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.app.project.documents.view;
+
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import java.util.Iterator;
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.Document;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+
+
+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 Map contexts of the main map in the view.
+	 *
+	 * @return MapContext
+	 */
+	public MapContext getMapContext();
+
+	/**
+	 * Gets the Map 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);
+
+        /**
+         * Gets the name of the View
+         * @return name of the view
+         */
+	public String getName();
+
+	public Project getProject();
+
+	public void addPropertyChangeListener(PropertyChangeListener listener);
+        
+        
+        /**
+         * Gets the CRS of the view
+         * 
+         * @return CRS of the view 
+         */
+        public IProjection getProjection();
+        
+        public void setProjection (IProjection proj);
+        
+        public void setBackColor(Color c) ;
+        
+        public FLayer getLayer(String name);
+	
+        /**
+         * Get the first level of layer in the view TOC.
+         * 
+         * @return layers in TOC
+         */
+        public Iterator<FLayer> iterator();
+        
+        /**
+         * Get all layer in the view TOC.
+         * 
+         * @return layers in TOC
+         */
+        public Iterator<FLayer> deepiterator();
+        
+        public Iterable<FLayer> layers();
+ 
+        /**
+         * Return true if layer is in this view.
+         * 
+         * @param layer
+         * @return 
+         */
+        public boolean contains(FLayer layer);
+
+        /**
+         * Return true if this view has a layer with this store.
+         * @param store
+         * @return 
+         */
+        public boolean contains(DataStore store);
+        
+        /**
+         * Center view in the envelope.
+         * 
+         * @param envelope 
+         */
+        public void center(Envelope envelope);
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.fastIterator();
+			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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/DefaultViewDocument.java	(revision 46118)
@@ -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;
+
+import javax.swing.JOptionPane;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.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.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.BaseLayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+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
+ *
+ */
+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";
+
+    private class SetViewPortExtentWhenAddLayerListener extends BaseLayerCollectionListener {
+
+        private Thread th = null;
+        private final ViewPort viewPort;
+
+        public SetViewPortExtentWhenAddLayerListener(ViewPort viewPort) {
+            this.viewPort = viewPort;
+        }
+
+        @Override
+        public synchronized void layerAdded(LayerCollectionEvent e) {
+            if (th != null) {
+                return;
+            }
+            if (viewPort.getEnvelope() == null) {
+                final FLayer layer = e.getAffectedLayer();
+                if (layer.isAvailable()) {
+                    th = new Thread(new Runnable() {
+                        @Override
+                        public void run() {
+                            try {
+                                ApplicationManager application = ApplicationLocator.getManager();
+                                I18nManager i18n = ToolsLocator.getI18nManager();
+                                application.message(
+                                        i18n.getTranslation("_Calculating_envelope"),
+                                        JOptionPane.INFORMATION_MESSAGE
+                                );
+                                Envelope envelope = layer.getFullEnvelope();
+                                // Si nadie le ha asignado un envelope mientras se
+                                // calculaba el inicial le asignamos el calculado.
+                                if (viewPort.getEnvelope() == null) {
+                                    getMapContext().zoomToEnvelope(envelope); // viewPort.setEnvelope(envelope);
+                                }
+                                application.message(
+                                        "",
+                                        JOptionPane.INFORMATION_MESSAGE
+                                );
+                            } catch (ReadException ex) {
+                            }
+                        }
+                    }, "AddLayerToView");
+                    th.start();
+                    // Forzamos a salir del scheduler para dar paso al nuevo 
+                    // thread que acabamos de crear. Prefiero el sleep al yield
+                    // ya que este ultimo puede ser ignorado por el scheduler.
+                    try {
+                        Thread.sleep(1);
+                    } catch (InterruptedException ex) {
+                    }
+                }
+            }
+        }
+
+    }
+
+    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 = overviewMapContext.getViewPort();
+        vp.setBackColor(preferences.getDefaultOverviewBackColor());
+        this.setMapOverViewContext(overviewMapContext);
+
+        this.getMapContext().getLayers().addLayerCollectionListener(
+                new SetViewPortExtentWhenAddLayerListener(this.getMapContext().getViewPort())
+        );
+        this.getMapOverViewContext().getLayers().addLayerCollectionListener(
+                new SetViewPortExtentWhenAddLayerListener(this.getMapOverViewContext().getViewPort())
+        );
+    }
+
+    /**
+     * 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/CreateSpatialIndexMonitorableTask.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.xml	(revision 46118)
@@ -0,0 +1,1159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.xml</at>
+   <at name="rowspecs">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,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:GROW(1.0),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">2</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="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="name">lblName</at>
+            <at name="width">897</at>
+            <at name="text">Name:</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">5</at>
+           <at name="colspan">2</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.border.TitledBorderLabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblRangeOfScales</at>
+            <at name="width">897</at>
+            <at name="text">Range of scales</at>
+            <at name="height">19</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">6</at>
+           <at name="colspan">2</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.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">Show always</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdoShowAlways</at>
+            <at name="width">897</at>
+            <at name="text">Show always</at>
+            <at name="height">16</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">8</at>
+           <at name="colspan">2</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.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">Do not show the layer when the scale:</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdoShowConditionedToTheScale</at>
+            <at name="width">897</at>
+            <at name="text">Do not show the layer when the scale:</at>
+            <at name="height">16</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">2</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.border.TitledBorderLabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblProperties</at>
+            <at name="width">897</at>
+            <at name="text">Properties</at>
+            <at name="height">19</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">9</at>
+           <at name="colspan">2</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">embedded.1611319155</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">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.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="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="name">lblIsLessThan</at>
+                 <at name="width">85</at>
+                 <at name="text">Is less than</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">3</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">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="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="name">lblIsGreaterThan</at>
+                 <at name="width">85</at>
+                 <at name="text">Is greater than</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="name">lblFullScale</at>
+                 <at name="width">95</at>
+                 <at name="text">(full scale)</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">3</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">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="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="name">lblMinumunScale</at>
+                 <at name="width">95</at>
+                 <at name="text">(minimum scale)</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="name">txtIsLessThan</at>
+                 <at name="width">640</at>
+                 <at name="height">20</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">3</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.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="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="name">txtIsGreaterThan</at>
+                 <at name="width">640</at>
+                 <at name="height">20</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">4</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.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="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="width">12</at>
+                 <at name="name"/>
+                 <at name="text">1:</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">4</at>
+                <at name="row">3</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">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="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="width">12</at>
+                 <at name="name"/>
+                 <at name="text">1:</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="7"/>
+            </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>
+     </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">3</at>
+           <at name="colspan">2</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="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="name">txtName</at>
+            <at name="width">897</at>
+            <at name="height">20</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">12</at>
+           <at name="colspan">2</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.JEditorPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JEditorPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">txtProperties</at>
+            <at name="width">895</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="height">195</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="13">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/SaveLegendAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/SaveLegendAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/SaveLegendAction.java	(revision 46118)
@@ -0,0 +1,102 @@
+package org.gvsig.app.project.documents.view.legend.gui.legendactions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.List;
+
+import javax.swing.Action;
+import javax.swing.JFileChooser;
+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.documents.view.legend.gui.LegendFileFilter;
+import org.gvsig.app.project.documents.view.legend.gui.LegendsPanel;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+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.i18n.Messages;
+
+public class SaveLegendAction extends AbstractLoadSaveLegendAction {
+
+    private static final long serialVersionUID = -382469306285635077L;
+    private static final Logger logger = LoggerFactory.getLogger(SaveLegendAction.class);
+
+    public SaveLegendAction() {
+       super();
+        this.putValue(Action.NAME, PluginServices.getText(this, "Guardar_leyenda") + "...");
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        if( ! (e.getSource() instanceof LegendsPanel) ) {
+            return;
+        }
+        try {
+            saveLegend((LegendsPanel) e.getSource());
+        } catch (Exception exc) {
+            logger.warn("_Unable_to_save_legend", exc);
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_Unable_to_save_legend")
+                + "\n\n" + exc.getMessage(),
+                Messages.getText("legend"),
+                JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    private void saveLegend(LegendsPanel legends) throws Exception {
+
+        List<LegendFileFilter> filters = getLegendFileFilters(true);
+        if( filters.isEmpty() ) {
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_No_output_format_available"),
+                Messages.getText("legend"),
+                JOptionPane.WARNING_MESSAGE);
+            return;
+        }
+
+        ILegend legend = legends.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 = mcoman.createLegendWriter(
+                legend.getClass(),
+                lff.getFileExtension()
+            );
+
+            if( lw == null ) {
+                throw new WriteLegendException(legend,
+                    new Exception("Unable to create legend writer."));
+            }
+            lw.write(legend, selfile, lff.getFileExtension());
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/LoadLegendAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/LoadLegendAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/LoadLegendAction.java	(revision 46118)
@@ -0,0 +1,82 @@
+package org.gvsig.app.project.documents.view.legend.gui.legendactions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.documents.view.legend.gui.LegendFileFilter;
+import org.gvsig.app.project.documents.view.legend.gui.LegendsPanel;
+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.ILegend;
+import org.gvsig.fmap.mapcontext.rendering.legend.driver.ILegendReader;
+import org.gvsig.i18n.Messages;
+
+public class LoadLegendAction extends AbstractLoadSaveLegendAction {
+
+    private static final long serialVersionUID = 8023893921676942206L;
+
+    public LoadLegendAction() {
+        super();
+        this.putValue(Action.NAME, PluginServices.getText(this, "Recuperar_leyenda") + "...");
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        if( ! (e.getSource() instanceof LegendsPanel) ) {
+            return;
+        }
+        try {
+            loadLegend((LegendsPanel) e.getSource());
+        } catch (Exception e1) {
+            JOptionPane.showMessageDialog(
+                ApplicationLocator.getManager().getRootComponent(),
+                Messages.getText("_Unable_to_read_legend")
+                + "\n\n" + e1.getMessage(),
+                Messages.getText("legend"),
+                JOptionPane.WARNING_MESSAGE);
+        }
+    }
+
+    private void loadLegend(LegendsPanel legends) throws Exception {
+
+        List<LegendFileFilter> filters = getLegendFileFilters(false);
+        if( filters.isEmpty() ) {
+            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);
+            legends.setLegend(leg);
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/AbstractLoadSaveLegendAction.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/AbstractLoadSaveLegendAction.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/legendactions/AbstractLoadSaveLegendAction.java	(revision 46118)
@@ -0,0 +1,78 @@
+package org.gvsig.app.project.documents.view.legend.gui.legendactions;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.AbstractAction;
+import org.gvsig.app.project.documents.view.legend.gui.LegendFileFilter;
+import org.gvsig.fmap.mapcontext.MapContextLocator;
+import org.gvsig.fmap.mapcontext.MapContextManager;
+
+public abstract class AbstractLoadSaveLegendAction extends AbstractAction {
+
+    private static final long serialVersionUID = 3282139517245723693L;
+
+    protected AbstractLoadSaveLegendAction() {
+        super();
+    }
+    
+    protected List<LegendFileFilter> getLegendFileFilters(boolean writing) {
+
+        List<LegendFileFilter> resp = new ArrayList<>();
+        MapContextManager mcoman = MapContextLocator.getMapContextManager();
+        List wformats;
+
+        if( writing ) {
+            wformats = mcoman.getLegendWritingFormats();
+        } else {
+            wformats = mcoman.getLegendReadingFormats();
+        }
+
+        String fmt;
+        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
+     */
+    protected 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();
+            }
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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> themeManagerPageClass) {
+            
+		pages.add(themeManagerPageClass);
+	}
+
+	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;
+	};
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.legend.gui;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+import org.apache.commons.lang3.StringUtils;
+
+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 = "";
+
+    private I18nManager i18n = ToolsLocator.getI18nManager();
+
+    public LegendFileFilter(String ext, String desc) {
+        fileExt = ext.toLowerCase();
+        description = desc;
+    }
+
+    public LegendFileFilter(String ext) {
+
+        StringBuilder sb = new StringBuilder();
+        fileExt = ext.toLowerCase();
+
+        description = i18n.getTranslation("format_for_legends");
+        description = StringUtils.replace(description, "%(ext)",
+                ext.toUpperCase());
+
+        sb.append(description);
+        sb.append(" (*." + ext.toLowerCase() + ")");
+        description = sb.toString();
+    }
+
+    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.344/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.344/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.344/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 46118)
@@ -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.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.apache.commons.lang3.mutable.MutableObject;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.gui.styling.AbstractTypeSymbolEditor;
+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.dal.feature.Feature;
+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.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;
+        private FeatureStore featureStore;
+        private transient MutableObject<Feature> sampleFeature;
+
+
+	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( lyr instanceof FLyrVect ) {
+                    this.setFeatureStore(((FLyrVect) lyr).getFeatureStore());
+                }
+		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(this.getSampleFeature());
+			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) {
+        getSymbolPreviewPanel().setSymbol(symbol);
+		if(symbol.getDescription() != null) {
+			txtLabel.setText(symbol.getDescription());
+		}
+        if (legend != null){
+            legend.setDefaultSymbol(symbol);
+        }
+	}
+
+	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);
+                        se.setFeatureStore(this.featureStore);
+			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());
+		}
+	}
+
+        public void setFeatureStore(FeatureStore store) {
+            this.featureStore = store;
+            if( this.featureStore!=null ) {
+                this.sampleFeature.setValue(this.featureStore.getSampleFeature());
+            }
+        }
+        
+        public MutableObject<Feature> getSampleFeature() {
+            if( this.sampleFeature == null ) {
+                this.sampleFeature = new MutableObject();
+                if( this.featureStore!=null ) {
+                    this.sampleFeature.setValue(this.featureStore.getSampleFeature());
+                }
+            }
+            return this.sampleFeature;
+        }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,639 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.border.EmptyBorder;
+import javax.swing.text.DefaultFormatterFactory;
+import javax.swing.text.NumberFormatter;
+
+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.*;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.AttrInTableLabelingStrategy;
+import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+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 JFormattedTextField txtHeightField;
+
+    private FLyrVect layer;
+
+    private JCheckBox chkItalic;
+
+    private ColorChooserPanel colorChooser;
+
+    private JComboBox cmbColorField;
+
+    private Font labelFont;
+
+    private JCheckBox chkBold;
+
+    private JComboBoxFonts cmbFontType;
+
+    private I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+    private JPanel pnlAttributes;
+
+    public AttrInTableLabeling() {
+        labelFont = MapContextLocator.getSymbolManager().getSymbolPreferences()
+                .getDefaultSymbolFont();
+        initialize();
+    }
+
+    private void initialize() {
+        setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
+        GridBagLayoutPanel panel = new GridBagLayoutPanel();
+        Insets ins = new Insets(3, 0, 3, 0);
+
+        GridBagLayoutPanel aux = new GridBagLayoutPanel();
+        aux.addComponent(PluginServices.getText(this, "_Field_to_use_in_label")
+                + ":", getCmbTextField(), GridBagConstraints.BOTH, ins);
+        aux.addComponent(i18nManager.getTranslation("font_type_XcolonX"),
+                getCmbFontType(), GridBagConstraints.BOTH, ins);
+        aux.addComponent(getRdBtnHeightField(), getCmbHeightField(),
+                GridBagConstraints.BOTH, ins);
+        aux.addComponent(getRdBtnFixedHeight(), getTxtHeightField(),
+                GridBagConstraints.BOTH, ins);
+        aux.addComponent(i18nManager.getTranslation("attributes_XcolonX"),
+                getPanelAttributes(), GridBagConstraints.BOTH, ins);
+        aux.addComponent(PluginServices.getText(this, "rotation_height") + ":",
+                getCmbRotationField(), GridBagConstraints.BOTH, ins);
+        aux.addComponent(PluginServices.getText(this, "units") + ":",
+                getCmbUnits(), GridBagConstraints.BOTH, ins);
+        aux.addComponent(PluginServices.getText(this, "reference_system"),
+                getCmbReferenceSystem(), GridBagConstraints.BOTH, ins);
+        panel.add(aux);
+        aux = new GridBagLayoutPanel();
+        GridBagLayoutPanel colorPanel = new GridBagLayoutPanel();
+        ins = new Insets(0, 3, 3, 3);
+        Insets ins2 = new Insets(3, 3, 0, 3);
+        colorPanel.setBorder(BorderFactory.createTitledBorder(null,
+                PluginServices.getText(this, "Color")));
+        colorChooser = new ColorChooserPanel(true);
+        colorPanel.addComponent(getRdBtnFixedColor(), colorChooser,
+                GridBagConstraints.HORIZONTAL, ins2);
+        colorPanel.addComponent(getRdBtnColorField(), getCmbColorField(),
+                GridBagConstraints.BOTH, ins);
+
+        aux.addComponent(colorPanel);
+
+        panel.add(new JBlank(20, 0));
+        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());
+    }
+
+    private JPanel getPanelAttributes() {
+        if (pnlAttributes == null) {
+            pnlAttributes = new JPanel(new GridBagLayout());
+            GridBagConstraints c = new GridBagConstraints();
+
+            c.fill = GridBagConstraints.BOTH;
+            c.anchor = GridBagConstraints.WEST;
+            c.insets = new Insets(3, 3, 3, 3);
+            c.weightx = 1;
+            c.gridx = 0;
+            c.gridy = 0;
+            pnlAttributes.add(getChkBoxBold(), c);
+
+            c.gridx = 1;
+            pnlAttributes.add(getChkItalic(), c);
+        }
+        return pnlAttributes;
+    }
+
+    private JCheckBox getChkItalic() {
+        if (chkItalic == null) {
+            chkItalic = new JCheckBox(i18nManager.getTranslation("Italic"));
+            chkItalic.setSelected(false);
+        }
+        return chkItalic;
+    }
+
+    private JCheckBox getChkBoxBold() {
+        if (chkBold == null) {
+            chkBold = new JCheckBox(i18nManager.getTranslation("Bold"));
+            chkBold.setSelected(false);
+        }
+        return chkBold;
+    }
+
+    private JComboBoxFonts getCmbFontType() {
+        if (cmbFontType == null) {
+            cmbFontType = new JComboBoxFonts();
+        }
+        return cmbFontType;
+    }
+
+    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 JFormattedTextField getTxtHeightField() {
+        if (txtHeightField == null) {
+            NumberFormat integerInstance = NumberFormat.getIntegerInstance();
+            integerInstance.setGroupingUsed(false);
+            NumberFormatter numberFormatter = new NumberFormatter(integerInstance);
+            numberFormatter.setMinimum(0);
+            numberFormatter.setMaximum(Integer.MAX_VALUE);
+            DefaultFormatterFactory tf = new DefaultFormatterFactory(
+                numberFormatter,
+                numberFormatter,
+                numberFormatter,
+                numberFormatter);
+
+            txtHeightField = new JFormattedTextField();
+            txtHeightField.setFormatterFactory(tf);
+            txtHeightField.setValue(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 = ((Number) (getTxtHeightField().getValue())).doubleValue();
+        }
+        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(getSelectedFont());
+        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);
+        getCmbFontType().setEnabled(enabled);
+        getChkBoxBold().setEnabled(enabled);
+        getChkItalic().setEnabled(enabled);
+    }
+
+    /**
+     * Returns the selected style.
+     *
+     * @return the style.
+     */
+    public int getSelectedStyle() {
+        int result = Font.PLAIN;
+        if (this.getChkBoxBold().isSelected()) {
+            result += Font.BOLD;
+        }
+        if (this.getChkItalic().isSelected()) {
+            result += Font.ITALIC;
+        }
+        return result;
+    }
+
+    /**
+     * Returns a Font object representing the selection in the panel.
+     *
+     * @return the font.
+     */
+    public Font getSelectedFont() {
+        return new Font((String) getCmbFontType().getSelectedItem(),
+                getSelectedStyle(), ((Number) (getTxtHeightField().getValue())).intValue());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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.ComboBoxModel;
+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.configurableactions.ConfigurableActionsMamager;
+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.tools.util.ToolsUtilLocator;
+import org.gvsig.utils.swing.JComboBox;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class LabelingManager
+    extends AbstractThemeManagerPage
+    implements ActionListener, LabelingPanel {
+
+    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();
+    }
+
+    @Override
+    public boolean isLabelingEnabled() {
+        return getChkApplyLabels().isSelected();
+    }
+
+    @Override
+    public void setLabelingEnabled(boolean enabled) {
+        getChkApplyLabels().setSelected(enabled);
+        getCmbStrategy().setEnabled(enabled);
+        ILabelingStrategyPanel panel = getCurrentLabelingStrategy();
+        ((Component)panel).setEnabled(enabled);
+    }
+
+    @Override
+    public void setCurrentLabelingStrategy(ILabelingStrategyPanel panel) {
+        ComboBoxModel model = getCmbStrategy().getModel();
+        model.setSelectedItem(panel);
+    }
+  
+    @Override
+    public ILabelingStrategyPanel getCurrentLabelingStrategy() {
+        ILabelingStrategyPanel panel = ((LabelingStrategyItem) getCmbStrategy().getSelectedItem()).strategyPanel;
+        return panel;
+    }
+  
+    @Override
+    public FLayer getLayer() {
+        return (FLayer) this.layer;
+    }
+
+    @Override
+    public void setLayer(FLayer layer) {
+        this.setModel(layer);
+    }
+
+    @Override
+    public ILabelingStrategy getLabelingStrategy() {
+        ILabelingStrategyPanel panel = ((LabelingStrategyItem) getCmbStrategy().getSelectedItem()).strategyPanel;
+        ILabelingStrategy strategy = panel.getLabelingStrategy();
+        return strategy;
+    }
+
+    
+    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 BorderLayout());
+
+            aux.add(getChkApplyLabels(), BorderLayout.LINE_START);
+            
+            ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+            JComponent c = cfgActionsManager.getConfigurableActionsComponent("labelingPropertiesPage", this);
+            aux.add(c, BorderLayout.LINE_END);
+            
+            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.isAvailable() ) {
+            setComponentEnabled(this, false);
+            getChkApplyLabels().setSelected(false);
+            getChkApplyLabels().setEnabled(false);
+            getCmbStrategy().setEnabled(false);
+            return;
+        }
+        if( layer instanceof ILabelable ) {
+            // get the labeling strategy
+            this.layer = (ILabelable) layer;
+            getChkApplyLabels().setEnabled(true);
+            getCmbStrategy().setEnabled(true);
+            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() {
+        applyAction();
+    }
+
+    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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,683 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.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.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.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+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 final GridBagLayoutPanel defaultSymbolPanel = new GridBagLayoutPanel();
+
+  private final MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
+
+  /**
+   *
+   */
+  public VectorialUniqueValue() {
+    super();
+    initComponents();
+  }
+
+  protected void initComponents() {
+    I18nManager i18n = ToolsLocator.getI18nManager();
+    JPanel pnlButtons = new JPanel();
+
+    JButton btnAddAll = new JButton(i18n.getTranslation("Anadir_todos"));
+    btnAddAll.setActionCommand("ADD_ALL_VALUES");
+    btnAddAll.addActionListener(this);
+    pnlButtons.add(btnAddAll);
+
+    JButton btnAdd = new JButton(i18n.getTranslation("Anadir"));
+    btnAdd.setActionCommand("ADD_VALUE");
+    btnAdd.addActionListener(this);
+    pnlButtons.add(btnAdd);
+
+    btnRemoveAll = new JButton(i18n.getTranslation("Quitar_todos"));
+    btnRemoveAll.setActionCommand("REMOVE_ALL");
+    btnRemoveAll.addActionListener(this);
+    pnlButtons.add(btnRemoveAll);
+
+    btnRemove = new JButton(i18n.getTranslation("Quitar"));
+    btnRemove.setActionCommand("REMOVE");
+    btnRemove.addActionListener(this);
+    pnlButtons.add(btnRemove);
+
+    btnOpenSymbolLevelsEditor = new JButton(i18n.getTranslation("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(i18n.getTranslation("Campo_de_clasificacion") + ": ");
+    auxPanel.add(lblFieldClassification);
+    auxPanel.add(cmbFields);
+    pnlNorth.add(auxPanel);
+
+    auxPanel = new GridBagLayoutPanel();
+    auxPanel.add(new JLabel(i18n.getTranslation("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);
+
+  }
+
+  private void fillTableValues() {
+    FeatureStore elRs;
+
+    try {
+      elRs = ((FLyrVect) layer).getFeatureStore();
+      String fieldName = (String) cmbFields.getSelectedItem();
+      if (fieldName == null) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        JOptionPane.showMessageDialog(
+                (Component) PluginServices.getMainFrame(),
+                i18n.getTranslation("no_hay_campo_seleccionado")
+        );
+        return;
+      }
+
+      symbolTable.removeAllItems();
+
+      int numSymbols = 0;
+      ISymbol theSymbol;
+
+      auxLegend = (VectorialUniqueValueLegend) MapContextLocator
+              .getMapContextManager().createLegend(
+                      IVectorialUniqueValueLegend.LEGEND_NAME);
+      auxLegend.setShapeType(layer.getShapeType());
+      auxLegend.setClassifyingFieldNames(new String[]{fieldName});
+      FeatureAttributeDescriptor attr = elRs.getDefaultFeatureTypeQuietly().getAttributeDescriptor(fieldName);
+      int fieldType = attr.getDataType().getType();
+      auxLegend.setClassifyingFieldTypes(new int[]{fieldType});
+      Object clave;
+
+      //Object resul;
+      if (chbUseDefault.isSelected()) {
+        auxLegend.getDefaultSymbol().setDescription("Default");
+        auxLegend.addSymbol(null, auxLegend.getDefaultSymbol());
+      }
+
+      Color[] colorScheme = cmbColorScheme.getSelectedColors();
+
+      Color[] colors = new Color[colorScheme.length];
+      System.arraycopy(colorScheme, 0, colors, 0, colorScheme.length);
+      auxLegend.setColorScheme(colors);
+
+      Random rand = new Random(System.currentTimeMillis());
+
+      FeatureSet set = null;
+      DisposableIterator iterator = null;
+
+      try {
+        set = elRs.getFeatureSet();
+
+        int count = 0;
+
+        iterator = set.fastIterator();
+        while (iterator.hasNext()) {
+          Feature feature = (Feature) iterator.next();
+          clave = feature.get(fieldName);
+          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) {
+              I18nManager i18n = ToolsLocator.getI18nManager();
+              int resp = JOptionPane.showConfirmDialog(this,
+                      i18n.getTranslation("mas_de_100_simbolos"),
+                      i18n.getTranslation("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 {
+        DisposeUtils.disposeQuietly(iterator);
+        DisposeUtils.disposeQuietly(set);
+      }
+
+      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);
+    } catch (DataException e) {
+      LOGGER.warn("recovering_recordset", e);
+    }
+
+    btnRemoveAll.setEnabled(true);
+    btnRemove.setEnabled(true);
+  }
+
+  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;
+    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[] 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) {
+      LOGGER.warn("could_not_setup_legend", e);
+    } catch (Exception e) {
+      LOGGER.warn("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 (Object key : keys) {
+        if (!visitedKeys.contains(key)) {
+          auxLegend.delSymbol(key);
+        }
+      }
+    }
+    clave = null;
+    if (chbUseDefault.isSelected()) {
+      theSymbol = defaultSymbolPrev.getSymbol();
+      if (theSymbol != null) {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        String description = i18n.getTranslation("default");
+        theSymbol.setDescription(description);
+        ISymbol legendSymbol = null;
+        if (auxLegend != null) {
+          legendSymbol = auxLegend.getSymbolByValue(clave);
+        }
+        if (legendSymbol == null) {
+          auxLegend.addSymbol(clave, theSymbol);
+        } else {
+          if (legendSymbol != theSymbol) {
+            auxLegend.replace(legendSymbol, theSymbol);
+          }
+        }
+      }
+    } else {
+      if (auxLegend != null) {
+        ISymbol legendSymbol = auxLegend.getSymbolByValue(clave);
+        if (legendSymbol != null) {
+          auxLegend.replace(legendSymbol, null);
+        }
+      }
+    }
+  }
+
+  private void fillFieldNames() {
+    FeatureStore rs;
+
+    try {
+      rs = ((FLyrVect) layer).getFeatureStore();
+      ArrayList names = new ArrayList();
+      for (FeatureAttributeDescriptor descriptor : rs.getDefaultFeatureType()) {
+        Class fieldClass = descriptor.getDataType().getDefaultClass();
+        if (Comparable.class.isAssignableFrom(fieldClass)) {
+          names.add(descriptor.getName());
+        }
+      }
+      DefaultComboBoxModel cM = new DefaultComboBoxModel(names.toArray(new String[0]));
+      cmbFields.setModel(cM);
+
+    } catch (DataException e) {
+      LOGGER.warn("recovering_recordset", e);
+    }
+  }
+
+  @Override
+  public void setData(FLayer layer, ILegend legend) {
+    this.layer = (ClassifiableVectorial) layer;
+    int shapeType = 0;
+    try {
+      shapeType = this.layer.getShapeType();
+    } catch (ReadException e) {
+      LOGGER.warn("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();
+      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);
+    }
+  }
+
+  @Override
+  public ILegend getLegend() {
+    fillSymbolListFromTable();
+
+    if (auxLegend != null) {
+      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) {
+      I18nManager i18n = ToolsLocator.getI18nManager();
+      chbUseDefault = new JCheckBox();
+      chbUseDefault.setSelected(false);
+      chbUseDefault.addActionListener((java.awt.event.ActionEvent e) -> {
+        if (chbUseDefault.isSelected()) {
+          auxLegend.useDefaultSymbol(true);
+        } else {
+          auxLegend.useDefaultSymbol(false);
+        }
+      });
+      chbUseDefault.setText(i18n.getTranslation("resto_valores") + ": ");
+    }
+
+    return chbUseDefault;
+  }
+
+  private void addDefault() {
+    auxLegend.getDefaultSymbol().setDescription("Default");
+    auxLegend.addSymbol(null, auxLegend.getDefaultSymbol());
+    symbolTable.addTableRecord(
+            auxLegend.getDefaultSymbol(),
+            null,
+            auxLegend.getDefaultSymbol().getDescription()
+    );
+    symbolTable.repaint();
+  }
+
+  private void delDefault() {
+    auxLegend.delSymbol(null);
+    symbolTable.removeRow(null);
+    symbolTable.repaint();
+  }
+
+  @Override
+  public void actionPerformed(ActionEvent e) {
+
+    //modificar el combobox de valor
+    if ("FIELD_SELECTED".equals(e.getActionCommand())) {
+      JComboBox cb = (JComboBox) e.getSource();
+      String fieldName = (String) cb.getSelectedItem();
+      symbolTable.removeAllItems();
+      btnOpenSymbolLevelsEditor.setEnabled(false);
+    }
+
+    // add all elements by value
+    if ("ADD_ALL_VALUES".equals(e.getActionCommand())) {
+      fillTableValues();
+      btnOpenSymbolLevelsEditor.setEnabled(symbolTable != null && symbolTable.getRowCount() > 0);
+    }
+
+    // add only one value
+    if ("ADD_VALUE".equals(e.getActionCommand())) {
+      try {
+        ISymbol symbol = mapContextManager.getSymbolManager().createSymbol(
+                layer.getShapeType()
+        );
+        Double clave = 0.0;
+        symbolTable.addTableRecord(
+                symbol, clave, "0 - 0"
+        );
+        btnOpenSymbolLevelsEditor.setEnabled(true);
+      } catch (ReadException ex) {
+        LOGGER.warn("getting_shape_type", ex);
+      }
+    }
+
+    //Vacia la tabla
+    if ("REMOVE_ALL".equals(e.getActionCommand())) {
+      symbolTable.removeAllItems();
+      auxLegend.setZSort(null);
+      btnOpenSymbolLevelsEditor.setEnabled(false);
+
+    }
+
+    //Quitar solo el elemento seleccionado
+    if ("REMOVE".equals(e.getActionCommand())) {
+      symbolTable.removeSelectedRows();
+      btnOpenSymbolLevelsEditor.setEnabled(symbolTable.getRowCount() > 0);
+    }
+
+    if ("OPEN_SYMBOL_LEVEL_EDITOR".equals(e.getActionCommand())) {
+      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());
+    }
+  }
+
+  @Override
+  public String getDescription() {
+    I18nManager i18n = ToolsLocator.getI18nManager();
+    return i18n.getTranslation("Dado_un_campo_de_atributos") + ","
+            + i18n.getTranslation("muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico") + ".";
+  }
+
+  @Override
+  public ImageIcon getIcon() {
+    return IconThemeHelper.getImageIcon(
+            "legend-overview-vectorial-unique-value");
+  }
+
+  @Override
+  public Class getParentClass() {
+    return Categories.class;
+  }
+
+  @Override
+  public String getTitle() {
+    I18nManager i18n = ToolsLocator.getI18nManager();
+    return i18n.getTranslation("Valores_unicos");
+  }
+
+  @Override
+  public JPanel getPanel() {
+    return this;
+  }
+
+  @Override
+  public Class getLegendClass() {
+    return VectorialUniqueValueLegend.class;
+  }
+
+  @Override
+  public boolean isSuitableFor(FLayer layer) {
+    return (layer instanceof FLyrVect);
+  }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+
+/**
+ * @deprecated This tab is outdated and not used. It has been replaced by "GeneralLayerPropertiesPage"
+ * @see GeneralLayerPropertiesPage
+
+ */
+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);
+                    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.344/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.344/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.344/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.344/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 46118)
@@ -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.app.project.documents.view.legend.gui;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+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.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;
+  
+	public static final String VALUES_TYPE = "values";
+	public static final String INTERVALS_TYPE = "intervals";
+
+  private static final Map<String,TableCellEditor> CELL_EDITORS = new HashMap<>();
+	
+  private final JTable table;
+	private final String type;
+	private final int shapeType;
+
+	public SymbolTable(Component ownerComponent, String type, int shapeType) {
+    this(new org.gvsig.utils.swing.jtable.JTable(), ownerComponent, type, shapeType);
+  }
+  
+	/**
+	 * Crea un nuevo FSymbolTable.
+	 *
+   * @param theTable
+   * @param ownerComponent
+	 * @param type, tipo de valor si es intervalo: "intervals" y si es por valores: "values".
+   * @param shapeType
+	 */
+	public SymbolTable(JTable theTable, Component ownerComponent, String type, int shapeType) {
+		super(new GridLayout(1, 0));
+		this.type = type;
+		this.shapeType = shapeType;
+
+		table = theTable;
+		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(CELL_EDITORS.get(type) == null)
+			throw new Error("Symbol table type not set!");
+
+		setUpValueColumn(table, table.getColumnModel().getColumn(1),CELL_EDITORS.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);
+	}
+  
+  public void setCellEditor(TableCellEditor cellEditor) {
+    TableColumn column = table.getColumnModel().getColumn(1);
+    column.setCellEditor(cellEditor);
+  }
+  
+	/**
+	 * Inicializa los valores de los CellEditors que la SymbolTable poseer� por defecto
+	 */
+	private void initializeCellEditors() {
+		this.CELL_EDITORS.put(this.INTERVALS_TYPE,new IntervalCellEditor());
+		this.CELL_EDITORS.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 ) {
+		CELL_EDITORS.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),CELL_EDITORS.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);
+	}
+
+	class MyTableModel extends DefaultTableModel {
+
+		private final String[] columnNames = {
+				PluginServices.getText(this, "Simbolo"),
+				PluginServices.getText(this, "Valor"),
+				PluginServices.getText(this, "Etiqueta") };
+
+    @Override
+		public int getColumnCount() {
+			return columnNames.length;
+		}
+
+    @Override
+		public String getColumnName(int col) {
+			return columnNames[col];
+		}
+
+    @Override
+		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;
+            }
+		}
+
+    @Override
+		public boolean isCellEditable(int row, int col) {
+			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.344/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.344/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.344/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.344/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 46118)
@@ -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.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;
+	}
+
+        @Override
+        public void setData(Object data) {
+
+        }
+
+        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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPageView.java	(revision 46118)
@@ -0,0 +1,224 @@
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import com.jeta.forms.components.border.TitledBorderLabel;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+
+public class GeneralLayerPropertiesPageView extends JPanel
+{
+   JLabel lblName = new JLabel();
+   TitledBorderLabel lblRangeOfScales = new TitledBorderLabel();
+   JRadioButton rdoShowAlways = new JRadioButton();
+   ButtonGroup buttongroup1 = new ButtonGroup();
+   JRadioButton rdoShowConditionedToTheScale = new JRadioButton();
+   TitledBorderLabel lblProperties = new TitledBorderLabel();
+   JLabel lblIsLessThan = new JLabel();
+   JLabel lblIsGreaterThan = new JLabel();
+   JLabel lblFullScale = new JLabel();
+   JLabel lblMinumunScale = new JLabel();
+   JTextField txtIsLessThan = new JTextField();
+   JTextField txtIsGreaterThan = new JTextField();
+   JTextField txtName = new JTextField();
+   JEditorPane txtProperties = new JEditorPane();
+
+   /**
+    * Default constructor
+    */
+   public GeneralLayerPropertiesPageView()
+   {
+      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:GROW(1.0),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,FILL:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblName.setName("lblName");
+      lblName.setText("Name:");
+      jpanel1.add(lblName,cc.xywh(2,2,2,1));
+
+      lblRangeOfScales.setName("lblRangeOfScales");
+      lblRangeOfScales.setText("Range of scales");
+      jpanel1.add(lblRangeOfScales,cc.xywh(2,5,2,1));
+
+      rdoShowAlways.setActionCommand("Show always");
+      rdoShowAlways.setName("rdoShowAlways");
+      rdoShowAlways.setText("Show always");
+      buttongroup1.add(rdoShowAlways);
+      jpanel1.add(rdoShowAlways,cc.xywh(2,6,2,1));
+
+      rdoShowConditionedToTheScale.setActionCommand("Do not show the layer when the scale:");
+      rdoShowConditionedToTheScale.setName("rdoShowConditionedToTheScale");
+      rdoShowConditionedToTheScale.setText("Do not show the layer when the scale:");
+      buttongroup1.add(rdoShowConditionedToTheScale);
+      jpanel1.add(rdoShowConditionedToTheScale,cc.xywh(2,8,2,1));
+
+      lblProperties.setName("lblProperties");
+      lblProperties.setText("Properties");
+      jpanel1.add(lblProperties,cc.xywh(2,11,2,1));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,9,2,1));
+      txtName.setName("txtName");
+      jpanel1.add(txtName,cc.xywh(2,3,2,1));
+
+      txtProperties.setName("txtProperties");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(txtProperties);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(2,12,2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblIsLessThan.setName("lblIsLessThan");
+      lblIsLessThan.setText("Is less than");
+      jpanel1.add(lblIsLessThan,cc.xy(2,1));
+
+      lblIsGreaterThan.setName("lblIsGreaterThan");
+      lblIsGreaterThan.setText("Is greater than");
+      jpanel1.add(lblIsGreaterThan,cc.xy(2,3));
+
+      lblFullScale.setName("lblFullScale");
+      lblFullScale.setText("(full scale)");
+      jpanel1.add(lblFullScale,cc.xy(7,1));
+
+      lblMinumunScale.setName("lblMinumunScale");
+      lblMinumunScale.setText("(minimum scale)");
+      jpanel1.add(lblMinumunScale,cc.xy(7,3));
+
+      txtIsLessThan.setName("txtIsLessThan");
+      jpanel1.add(txtIsLessThan,cc.xy(5,1));
+
+      txtIsGreaterThan.setName("txtIsGreaterThan");
+      jpanel1.add(txtIsGreaterThan,cc.xy(5,3));
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("1:");
+      jpanel1.add(jlabel1,cc.xy(4,1));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("1:");
+      jpanel1.add(jlabel2,cc.xy(4,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,6 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/GeneralLayerPropertiesPage.java	(revision 46118)
@@ -0,0 +1,276 @@
+package org.gvsig.app.project.documents.view.legend.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import javax.swing.JComponent;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GeneralLayerPropertiesPage extends GeneralLayerPropertiesPageView implements PropertiesPage {
+
+    private static final Logger logger = LoggerFactory.getLogger(GeneralLayerPropertiesPage.class);
+    private FLayer layer = null;
+
+    public static class GeneralLayerPropertiesPageFactory implements PropertiesPageFactory {
+
+        @Override
+        public String getGroupID() {
+            return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+        }
+
+        @Override
+        public String getName() {
+            return "General";
+        }
+
+        @Override
+        public boolean isVisible(Object obj) {
+            return obj instanceof FLayer;
+        }
+
+        @Override
+        public PropertiesPage create(Object container, Object obj) {
+            return new GeneralLayerPropertiesPage((FLayer) obj);
+        }
+
+    }
+
+    @SuppressWarnings("OverridableMethodCallInConstructor")
+    public GeneralLayerPropertiesPage(FLayer layer) {
+        this.initComponents();
+        this.setLayer(layer);
+    }
+
+    @Override
+    public void setData(Object data) {
+
+    }
+
+    private void initComponents() {
+        this.rdoShowAlways.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                txtIsGreaterThan.setEnabled(false);
+                txtIsLessThan.setEnabled(false);
+            }
+        });
+        this.rdoShowConditionedToTheScale.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                txtIsGreaterThan.setEnabled(true);
+                txtIsLessThan.setEnabled(true);
+            }
+        });
+        this.translate();
+        ToolsSwingUtils.ensureRowsCols(this.txtProperties, 10, 60, 15, 100);
+    }
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        this.lblName.setText(i18nManager.getTranslation("Nombre") + ":");
+        this.lblRangeOfScales.setText(i18nManager.getTranslation("rango_de_escalas"));
+        this.lblIsGreaterThan.setText(i18nManager.getTranslation("este_por_encima_de"));
+        this.lblIsLessThan.setText(i18nManager.getTranslation("este_por_debajo_de_"));
+        this.lblFullScale.setText(i18nManager.getTranslation("escala_maxima"));
+        this.lblMinumunScale.setText(i18nManager.getTranslation("escala_minima"));
+        this.lblProperties.setText(i18nManager.getTranslation("propiedades"));
+        this.rdoShowAlways.setText(i18nManager.getTranslation("Mostrar_siempre"));
+        this.rdoShowConditionedToTheScale.setText(i18nManager.getTranslation("No_mostrar_la_capa_cuando_la_escala") + ":");
+
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("General");
+    }
+
+    @Override
+    public int getPriority() {
+        return 1000;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        this.whenApply();
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        NumberFormat nf = NumberFormat.getInstance();
+
+        if (this.rdoShowConditionedToTheScale.isSelected()) {
+            try {
+                String s = this.txtIsGreaterThan.getText();
+                if (StringUtils.isEmpty(s)) {
+                    layer.setMinScale(-1);
+                } else {
+                    layer.setMinScale((nf.parse(s)).doubleValue());
+                }
+            } catch (ParseException ex) {
+                this.txtIsGreaterThan.setText("");
+            }
+            try {
+                String s = this.txtIsLessThan.getText();
+                if (StringUtils.isEmpty(s)) {
+                    layer.setMaxScale(-1);
+                } else {
+                    layer.setMaxScale((nf.parse(s)).doubleValue());
+                }
+            } catch (ParseException ex) {
+                this.txtIsLessThan.setText("");
+            }
+        } else {
+            layer.setMinScale(-1);
+            layer.setMaxScale(-1);
+        }
+        if (!this.txtName.getText().equals(layer.getName())) {
+            layer.setName(this.txtName.getText());
+        }
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        // Do nothing
+        return true;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public void setLayer(FLayer layer) {
+        NumberFormat nf = NumberFormat.getInstance();
+
+        this.layer = layer;
+
+        this.txtName.setText(this.layer.getName());
+        
+        String info = this.getLayerInfo();
+        if( info.startsWith("<html>") ) {
+		this.txtProperties.setContentType("text/html");
+        }
+        this.txtProperties.setText(info);
+	this.txtProperties.setCaretPosition(0);
+
+        if (layer.getMinScale() != -1) {
+            this.txtIsGreaterThan.setText(nf.format(layer.getMinScale()));
+        }
+        if (layer.getMaxScale() != -1) {
+            this.txtIsLessThan.setText(nf.format(layer.getMaxScale()));
+        }
+        if (layer.getMinScale() == -1 && layer.getMaxScale() == -1) {
+            this.rdoShowConditionedToTheScale.setSelected(false);
+        } else {
+            this.rdoShowConditionedToTheScale.setSelected(true);
+        }
+    }
+
+    private String getLayerInfo() {
+        String info;
+        StringBuilder buff = new StringBuilder();
+        try {
+            I18nManager i18nManager = ToolsLocator.getI18nManager();
+            info = layer.getInfoString();
+            if (info == null) {
+                Envelope fullExtentViewPort = layer.getFullEnvelope();
+                IProjection mapProjection = layer.getMapContext().getProjection();
+                buff.append(i18nManager.getTranslation("Extent"));
+                buff.append(" ");
+                buff.append(mapProjection.getAbrev());
+                buff.append(" (")
+                        .append(i18nManager.getTranslation("view_projection"))
+                        .append("):\n\t");
+                buff.append(i18nManager.getTranslation("Superior"))
+                        .append(":\t")
+                        .append(fullExtentViewPort.getMaximum(1))
+                        .append("\n\t");
+                buff.append(i18nManager.getTranslation("Inferior"))
+                        .append(":\t")
+                        .append(fullExtentViewPort.getMinimum(1))
+                        .append("\n\t");
+                buff.append(i18nManager.getTranslation("Izquierda"))
+                        .append(":\t")
+                        .append(fullExtentViewPort.getMinimum(0))
+                        .append("\n\t");
+                buff.append(i18nManager.getTranslation("Derecha"))
+                        .append(":\t")
+                        .append(fullExtentViewPort.getMaximum(0))
+                        .append("\n");
+
+                if (layer.getProjection() != null
+                        && !layer.getProjection().getAbrev().equals(
+                                mapProjection.getAbrev())) {
+                    IProjection nativeLayerProj = layer.getProjection();
+                    ICoordTrans ct = mapProjection.getCT(nativeLayerProj);
+                    Envelope nativeLayerExtent = fullExtentViewPort.convert(ct);
+                    buff.append(i18nManager.getTranslation("Extent"))
+                            .append(" ");
+                    buff.append(nativeLayerProj.getAbrev());
+                    buff.append(" (")
+                            .append(i18nManager.getTranslation("layer_native_projection"))
+                            .append("):\n\t");
+                    buff.append(i18nManager.getTranslation("Superior"))
+                            .append(":\t")
+                            .append(nativeLayerExtent.getMaximum(1))
+                            .append("\n\t");
+                    buff.append(i18nManager.getTranslation("Inferior"))
+                            .append(":\t")
+                            .append(nativeLayerExtent.getMinimum(1))
+                            .append("\n\t");
+                    buff.append(i18nManager.getTranslation("Izquierda"))
+                            .append(":\t")
+                            .append(nativeLayerExtent.getMinimum(0))
+                            .append("\n\t");
+                    buff.append(i18nManager.getTranslation("Derecha"))
+                            .append(":\t")
+                            .append(nativeLayerExtent.getMaximum(0))
+                            .append("\n");
+                }
+
+                if (layer instanceof FLyrVect) {
+                    try {
+                        GeometryType geomType = ((FLyrVect) layer).getTypeVectorLayer();
+                        buff.append("\n")
+                                .append(i18nManager.getTranslation("type"))
+                                .append(": ")
+                                .append(geomType.getFullName())
+                                .append("\n");
+                    } catch (Exception e) {
+                        logger.warn("Can't get gemetry type for layer '" + layer.getName() + "'.", e);
+                        buff.append("\n")
+                                .append(i18nManager.getTranslation("type"))
+                                .append(": ")
+                                .append("unknow")
+                                .append("\n");
+                    }
+
+                }
+                info = buff.toString();
+            }
+        } catch (Exception e) {
+            logger.warn("Can't get layer information.", e);
+            info = buff.toString();
+        }
+        return info;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.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;
+
+/**
+ * @deprecated use PropertiesPageManager, see GeneralLayerPropertiesPage for an exemple
+ */
+public final class ThemeManagerWindow {
+
+    private static final Logger logger = LoggerFactory.getLogger(ThemeManagerWindow.class);
+
+    private static final long serialVersionUID = 4650656815369149211L;
+
+    private static final Map<Class<? extends AbstractThemeManagerPage>, List<Class<? extends FLayer>>> s = new HashMap<>();
+
+    private static class ThemeManagerPropertiesPageFactory implements PropertiesPageFactory {
+
+        private final Class<? extends AbstractThemeManagerPage> pageClass;
+        private AbstractThemeManagerPage page = null;
+        private FLayer layer = null;
+
+        public ThemeManagerPropertiesPageFactory(Class<? extends AbstractThemeManagerPage> pageClass) {
+            this.pageClass = pageClass;
+        }
+
+        @Override
+        public String getName() {
+            return this.pageClass.getName();
+        }
+
+        private AbstractThemeManagerPage getPage(FLayer layer) throws InstantiationException, IllegalAccessException {
+            if (this.layer == null || this.layer != layer) {
+                AbstractThemeManagerPage p = pageClass.newInstance();
+                this.page = p;
+                this.layer = layer;
+            }
+            try {
+                this.page.setModel(this.layer);
+            } catch(Throwable th) {
+                // Some pages fails with raster layers, ignore it.
+                // Expect isTabEnabledForLayer return the correct value.
+            }
+            return this.page;
+        }
+
+        @Override
+        public String getGroupID() {
+            return ViewDocument.LAYER_PROPERTIES_PAGE_GROUP;
+        }
+
+        @Override
+        public boolean isVisible(Object obj) {
+            try {
+                AbstractThemeManagerPage thePage = this.getPage((FLayer) obj);
+                return thePage.isTabEnabledForLayer((FLayer) obj);
+            } catch (Throwable th) {
+                logger.warn("can't determine if the page must be visible to the object '" + obj + "'", th);
+            }
+            return false;
+        }
+
+        @Override
+        public PropertiesPage create(Object container, 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() {
+    }
+
+    /**
+     * @param pageClass
+     * @deprecated use PropertiesPageManager, see BasicSymbologyExtension
+     */
+    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<>();
+                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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,799 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.prefs.Preferences;
+import javax.swing.Action;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextArea;
+import javax.swing.JTree;
+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.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
+import static org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanel.OPEN_LAYER_FILE_CHOOSER_ID;
+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.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.symbology.SymbologyLocator;
+import org.gvsig.symbology.swing.SymbologySwingLocator;
+import org.gvsig.symbology.swing.SymbologySwingManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.folders.FoldersManager;
+
+/**
+ * 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 implements LegendsPanel {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(LegendManager.class);
+
+    private static final long serialVersionUID = 7989057553773181019L;
+
+    public static class Pages implements Iterable<ILegendPanel> {
+
+        private Map<Class<? extends ILegendPanel>, ILegendPanel> pages;
+
+        public Pages() {
+            this.pages = new HashMap<>();
+        }
+        
+        public void add(ILegendPanel page) {
+            this.pages.put(page.getClass(), page);
+        }
+
+        public void clear() {
+          this.pages.clear();
+        }
+        
+        @Override
+        public Iterator<ILegendPanel> iterator() {
+            return this.pages.values().iterator();
+        }
+
+        public boolean contains(Class<? extends ILegendPanel> pageClass) {
+            return this.pages.containsKey(pageClass);
+        }
+
+        public ILegendPanel get(Class<? extends ILegendPanel> pageClass) {
+            return this.pages.get(pageClass);
+        }
+
+        public Collection<ILegendPanel> asCollection() {
+            return this.pages.values();
+        }
+    }
+
+    private FLayer layer;
+    private ILegend legend; 
+    private final Pages pages = new Pages();
+    
+    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 final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
+    private DefaultTreeModel treeModel;
+    private JScrollPane jPanelContainer;
+    private JPanel jCentralPanel;
+    private JSplitPane jSplitPane;
+    private boolean isTreeListenerDisabled;
+    private JButton btnOptionalActions;
+    private JPopupMenu menuOptionalActions;
+    private Hashtable<FLayer, ILegend> table = null;
+    private boolean empty = true;
+    private JLabel iconLabel;
+
+    public static String defaultLegendFolderPath;
+    {
+        FoldersManager folderManager = ToolsLocator.getFoldersManager();
+        defaultLegendFolderPath = folderManager.getLastPath(
+                "LegendsFolder", 
+                folderManager.getHome()
+        ).getAbsolutePath();
+    }
+
+
+    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();
+            jPanelContainer.setBorder(null);
+        }
+        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(getBtnOptionalActions(), null);
+        }
+        return topPanel;
+    }
+
+    private JButton getBtnOptionalActions() {
+        if (btnOptionalActions == null) {
+            btnOptionalActions =
+                new JButton(PluginServices.getText(this, "_Mas_opciones")
+                    + "...");
+            btnOptionalActions.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    Point p = btnOptionalActions.getLocationOnScreen();
+                    menuOptionalActions.show(asJComponent(),0,0);
+                    menuOptionalActions.setLocation(p.x,p.y+btnOptionalActions.getHeight());
+                }
+            });
+        }
+        return btnOptionalActions;
+    }
+
+    /**
+     * 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 iLegendPanelClass
+     * @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();
+            pages.clear();
+            treeModel = new DefaultTreeModel(root);
+            try {
+              for (ILegendPanel page : manager.getLegendEditors(layer)) {
+                  pages.add(page);
+              }
+            } catch(Throwable th) {
+              logger.warn("Problems loading legend editors.",th);
+            }
+            for(ILegendPanel page : this.pages ) {
+                try {
+                  doInsertNode(treeModel, page);
+                } catch(Throwable th) {
+                  logger.warn("Problems adding legend editor ("+(page==null?"NULL":page.getTitle())+") to the GUI.",th);
+                }
+            }
+            addOptionalActions();
+            getJTreeLegends().setModel(treeModel);
+            getJTreeLegends().repaint();
+            empty = false;
+        }
+    }
+
+    private void addOptionalActions() {
+        this.menuOptionalActions = new JPopupMenu();
+        Iterable<Action> actions = SymbologySwingLocator.getSwingManager().getOptionalActionOfLegendsPanel();
+        for( Action action : actions ) {
+            JMenuItemForOptionalAction item = new JMenuItemForOptionalAction(action);
+            this.menuOptionalActions.add(item);
+        }
+    }
+    
+    private class JMenuItemForOptionalAction extends JMenuItem implements ActionListener {
+
+        private static final long serialVersionUID = 1656264978338543368L;
+        Action action;
+        
+        JMenuItemForOptionalAction(Action action) {
+            this.action = action;
+            this.configurePropertiesFromAction(action);
+            this.addActionListener(this);
+        }
+        
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            e.setSource(LegendManager.this);
+            this.action.actionPerformed(e);
+        }
+    }
+    
+    @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)) {
+            if (pages.contains(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());
+            jTitleScrollPane.setBorder(null);
+        }
+        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;
+    }
+
+    @Override
+    public 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());
+        }
+    }
+
+    @Override
+    public ILegendPanel getActivePage() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    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() {
+        applyAction();
+        // 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 = this.getLayer(); //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();
+        for(ILegendPanel page : this.pages ) {
+//        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;
+    }
+
+    @Override
+    public ILegend getLegend() {
+        return this.legend;
+    }
+
+    @Override
+    public void setLegend(ILegend legend) {
+        applyLegend(legend);
+    }
+
+    @Override
+    public FLayer getLayer() {
+        return this.layer;
+    }
+
+    @Override
+    public void setLayer(FLayer layer) {
+        this.layer = layer;
+        applyLegend(((Classifiable) layer).getLegend());
+    }
+
+    @Override
+    public ILegendPanel getPage(Class<? extends ILegendPanel> pageClass) {
+        return this.pages.get(pageClass);
+    }
+
+    @Override
+    public Collection<ILegendPanel> getPages() {
+        return this.pages.asCollection();
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -0,0 +1,901 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.*;
+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 javax.swing.border.EmptyBorder;
+
+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, 300);
+        this.setBorder(new EmptyBorder(new Insets(5,5,5,5)));
+        
+        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, 5, 5));
+            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_XcolonX"),
+                    getCmbFields(),new Insets(2, 5, 2, 5));
+            pnlGeneral.addComponent(PluginServices.getText(this, "tipo_de_intervalo_XcolonX"),
+                    getCmbIntervalTypes(),new Insets(2, 5, 2, 5));
+
+            JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));
+            aux.add(getTxtNumIntervals());
+            pnlGeneral.addComponent(PluginServices.getText(this, "No_de_intervalos_XcolonX"),
+                    aux,new Insets(2, 5, 2, 5));
+            defaultSymbolPanel.add(getChkDefaultvalues(), null);
+			pnlGeneral.addComponent(defaultSymbolPanel,new Insets(10, 25, 2, 5));
+        }
+        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_XcolonX"),
+                    getColorChooserPanel());
+            aux.addComponent(PluginServices.getText(this, "Color_final_XcolonX"),
+                    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 = (int) Math.floor((endColor.getRed() - r) / (arrayIntervalos.length-1));
+            stepG = (int) Math.floor((endColor.getGreen() - g) / (arrayIntervalos.length-1));
+            stepB = (int) Math.floor((endColor.getBlue() - b) / (arrayIntervalos.length-1));
+
+//            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);
+				int intervalos = arrayIntervalos.length -1;
+				if(intervalos == k){
+					col = endColor;
+				}
+				
+                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.isAvailable() ) {
+                    return false;
+                }
+		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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/legend/gui/LabelingPanel.java	(revision 46118)
@@ -0,0 +1,22 @@
+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;
+
+
+public interface LabelingPanel {
+    
+    public boolean isLabelingEnabled();
+    
+    public void setLabelingEnabled(boolean enabled);
+    
+    public ILabelingStrategyPanel getCurrentLabelingStrategy();
+
+    public void setCurrentLabelingStrategy(ILabelingStrategyPanel panel);
+    
+    public FLayer getLayer(); 
+    
+    public void setLayer(FLayer layer);
+    
+    public ILabelingStrategy getLabelingStrategy();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ListSelectorListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuActionWithIcon.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuActionWithIcon.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/IContextMenuActionWithIcon.java	(revision 46118)
@@ -0,0 +1,9 @@
+package org.gvsig.app.project.documents.view;
+
+import javax.swing.ImageIcon;
+
+
+public interface IContextMenuActionWithIcon extends IContextMenuAction {
+ 
+    public ImageIcon getIcon();
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/CircleMeasureListener.java	(revision 46118)
@@ -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.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.AbstractCircleListener;
+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 extends AbstractCircleListener {
+	/**
+	 * 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewPanListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/RectangleSelectListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PolygonSelectListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AreaListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/StatusBarListener.java	(revision 46118)
@@ -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.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.geom.GeometryUtils;
+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);
+
+    private static final String DEGRESS_FORMAT = "%-%d� %m' %.0s''";
+    
+    /**
+	 * 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()]));
+
+            // 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
+            IProjection proj = mapControl.getViewPort().getProjection();
+			mF.getStatusBar().setMessage("projection", 
+                proj==null? "":proj.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!=null && !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 == null ) {
+			axisText[0] = "";
+			axisText[1] = "";
+        } else {
+            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+"''";
+//                return GeometryUtils.formatCoordinate("%-%d� %m' %s''", d);
+//	}
+
+	/**
+	 * <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(GeometryUtils.formatCoordinate(DEGRESS_FORMAT, p.getX()));
+			coords[1]=String.valueOf(GeometryUtils.formatCoordinate(DEGRESS_FORMAT, 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(GeometryUtils.formatCoordinate(DEGRESS_FORMAT, pgeo.getX()));
+	                coords[1]=String.valueOf(GeometryUtils.formatCoordinate(DEGRESS_FORMAT, 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PointSelectListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java	(revision 46118)
@@ -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.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;
+
+    /**
+     * <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();
+
+            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;
+                    int layerTolerance = laCapa.getDefaultTolerance();
+                    double tolerance = mapCtrl.getViewPort().toMapDistance(layerTolerance);
+                    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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomInListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/ZoomOutListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/PanListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MapOverviewChangeZoomListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/MeasureListener.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AngleGeometryListener.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AngleGeometryListener.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AngleGeometryListener.java	(revision 46118)
@@ -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.project.documents.view.toolListeners;
+
+import java.awt.Image;
+import java.text.NumberFormat;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.primitive.Point;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.LineGeometry;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.MeasureEvent;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.AngleListener;
+
+public class AngleGeometryListener implements AngleListener {
+
+    private final MapControl mapCtrl;
+    private MeasureEvent event;
+    private final Image cursorImg = PluginServices.getIconTheme()
+            .get("cursor-info-by-point").getImage();
+
+    private GeometryManager geomManager = GeometryLocator.getGeometryManager();
+
+    public AngleGeometryListener(MapControl mc) {
+        this.mapCtrl = mc;
+
+    }
+
+    @Override
+    public void point(PointEvent event) throws BehaviorException {
+
+    }
+
+    private void showAngleStatusBar(double angle) {
+//        double angle = angleBetween2Lines(twoSegment.get(0), twoSegment.get(1));
+        MainFrame mF = PluginServices.getMainFrame();
+        if (mF != null) {
+            NumberFormat nf = NumberFormat.getInstance();
+            nf.setMaximumFractionDigits(2);
+            double smallAngle;
+            double bigAngle;
+            if (angle>=180) {
+                smallAngle = angle-180;
+                bigAngle = 180 - smallAngle;
+            } else {
+                smallAngle = angle;
+                bigAngle = 180 - smallAngle;
+            }
+            if (smallAngle>bigAngle) {
+                double temp = bigAngle;
+                bigAngle = smallAngle;
+                smallAngle = temp;
+            }
+            mF.getStatusBar().setMessage("4",
+                    "Ang.1=" + nf.format(smallAngle));
+
+            mF.getStatusBar().setMessage("5",
+                    "Ang.2=" + nf.format(bigAngle));
+        }
+    }
+
+    @Override
+    public void pointDoubleClick(PointEvent event) throws BehaviorException {
+
+    }
+
+    @Override
+    public Image getImageCursor() {
+        return cursorImg;
+    }
+
+    @Override
+    public boolean cancelDrawing() {
+        return false;
+    }
+
+    @Override
+    public double angle(LineGeometry line1, LineGeometry line2, Point cuadrantPoint) {
+        double angle = 0;
+        try {
+            angle = line1.angleWith(line2, cuadrantPoint);
+            showAngleStatusBar(angle);
+        } catch (Exception ex) {
+            showAngleStatusBar(0);
+        }
+        return angle;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toolListeners/AngleGeometryListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/ProjectDocumentListener.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentManager.java	(revision 46118)
@@ -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.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.gui.WindowLayout;
+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.identitymanagement.SimpleIdentityManager;
+import org.gvsig.tools.identitymanagement.UnauthorizedException;
+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;
+import org.gvsig.tools.util.Invocable;
+
+
+
+/**
+ * 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;
+
+    private ExtendedPropertiesHelper propertiesHelper = new ExtendedPropertiesHelper();
+    
+    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");
+    }
+
+    @Override
+    public AbstractDocument createDocumentByUser() {
+        return createDocument();
+    }
+
+    @Override
+    public Iterator<? extends Document> createDocumentsByUser() {
+        Set<AbstractDocument> doc = new HashSet<>(1);
+        doc.add(createDocumentByUser());
+        return doc.iterator();
+    }
+
+    @Override
+    public Iterator<? extends Document> createDocumentsByUser(Invocable whenDocumentsLoaded) {
+        Set<AbstractDocument> docs = new HashSet<>(1);
+        docs.add(createDocumentByUser());
+        return docs.iterator();
+    }
+
+    /**
+     * @see ExtensionBuilder
+     */
+    @Override
+    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;
+    }
+
+    @Override
+    public IWindow getMainWindow(Document doc) {
+        return getMainWindow(doc, null);
+    }
+
+    @Override
+    public IWindow getMainWindow(Document doc, WindowLayout layout) {
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if( ! identityManager.getCurrentIdentity().isAuthorized(Document.ACCESS_DOCUMENT_AUTHORIZATION, this, this.getTypeName()) ) {
+            throw new UnauthorizedException(Document.ACCESS_DOCUMENT_AUTHORIZATION, this, this.getTypeName());
+        }   
+        IDocumentWindow win;
+
+        win = (IDocumentWindow) PluginServices.getMDIManager().getSingletonWindow(getMainWindowClass(), doc);
+        return win;
+    }
+
+    @Override
+    public IWindow getPropertiesWindow(Document doc) {
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+        if( ! identityManager.getCurrentIdentity().isAuthorized(Document.ACCESS_DOCUMENT_AUTHORIZATION, this, this.getTypeName()) ) {
+            throw new UnauthorizedException(Document.ACCESS_DOCUMENT_AUTHORIZATION, this, this.getTypeName());
+        }   
+        return null;
+    }
+    
+    
+    
+    @Override
+    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;
+    }
+
+    @Override
+    public Object getProperty(Object key) {
+        return this.propertiesHelper.getProperty(key);
+    }
+
+    @Override
+    public void setProperty(Object key, Object obj) {
+        this.propertiesHelper.setProperty(key, obj);
+    }
+
+    @Override
+    public Map getExtendedProperties() {
+        return this.propertiesHelper.getExtendedProperties();
+    }
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DefaultDocumentActionGroup.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/Document.java	(revision 46118)
@@ -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.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;
+import org.gvsig.tools.util.Contains;
+
+public interface Document extends Persistent, Contains {
+
+        public static final String ACCESS_DOCUMENT_AUTHORIZATION = "project-document-access";
+
+	/**
+	 * 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();
+    
+    public boolean getOpenWhenTheUserCreates();
+    
+    public void refresh();
+
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocumentAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyPasteDocsUtils.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CopyDocumentAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/CutDocumentAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/actions/PasteDocumentAction.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/SaveException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/NameException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/exceptions/OpenException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/AbstractDocument.java	(revision 46118)
@@ -0,0 +1,389 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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.apache.commons.lang3.StringUtils;
+
+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( StringUtils.isEmpty(name) ) {
+			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;
+    }
+
+    @Override
+    public boolean getOpenWhenTheUserCreates() {
+        return true;
+    }
+
+    @Override
+    public boolean contains(Object value) {
+        return false;
+    }
+
+    @Override
+    public void refresh() {
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow2.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow2.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow2.java	(revision 46118)
@@ -0,0 +1,1222 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any 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 java.util.Map;
+
+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.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.identitymanagement.SimpleIdentityManager;
+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.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+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 ProjectWindow2 extends JPanel implements PropertyChangeListener,
+    IWindow, SingletonWindow, Observer, PropertiesSupport {
+
+    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;
+    private PropertiesSupportHelper propertiesHelper;
+
+    /**
+     * This is the default constructor
+     *
+     * @param project
+     *            Extension
+     */
+    public ProjectWindow2() {
+        super();
+        this.propertiesHelper = new PropertiesSupportHelper();
+        this.propertiesHelper.setProperty("ProjectWindow", this);
+        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;
+        if(project!=null){
+            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() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        int res = application.confirmDialog(
+                i18n.getTranslation("confirmar_borrar"),
+                i18n.getTranslation("borrar"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.INFORMATION_MESSAGE,
+                "Confirm remove document from project"
+        );
+        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()) {
+                    application.messageDialog(
+                        i18n.getTranslation("locked_element_it_cannot_be_deleted"),
+                        i18n.getTranslation("Information"),
+                        JOptionPane.INFORMATION_MESSAGE
+                    );
+                    return;
+                }
+                PluginServices.getMDIManager().closeSingletonWindow(doc);
+                project.removeDocument(doc);
+                lastremoved = index;
+            }
+            if (lastremoved >= lstDocs.getModel().getSize()) {
+                lstDocs.setSelectedIndex(lstDocs.getModel().getSize()-1);
+            } else if (lastremoved >= 0) {
+                lstDocs.setSelectedIndex(lastremoved);
+            }
+            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();
+                }
+
+            });
+            SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+            for (DocumentManager documentFactory : factories) {
+                if( ! identityManager.getCurrentIdentity().isAuthorized(Document.ACCESS_DOCUMENT_AUTHORIZATION, documentFactory, documentFactory.getTypeName()) ) {
+                    // throw new UnauthorizedException(Document.ACCESS_DOCUMENT_AUTHORIZATION, documentFactory, documentFactory.getTypeName());
+                    continue;
+                }
+                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();
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return this.propertiesHelper.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        this.propertiesHelper.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return this.propertiesHelper.getProperties();
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow2.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/PDFViewerWindow.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectProperties.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/WindowLayout.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPageFactory.java	(revision 46118)
@@ -0,0 +1,28 @@
+
+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;
+    }
+
+    @Override
+    public String getName() {
+        return "General";
+    }
+    
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object container, Object data) {
+        return new ProjectGeneralPropertiesPage((Project)data);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.xml	(revision 46118)
@@ -0,0 +1,1474 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/osc/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:115PX:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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">com.jeta.forms.components.separator.TitledSeparator</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.separator.TitledSeparator</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblDocumentTypes</at>
+            <at name="width">680</at>
+            <at name="text">tipos_de_documentos</at>
+            <at name="height">15</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">6</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">com.jeta.forms.components.separator.TitledSeparator</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.separator.TitledSeparator</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblDocument</at>
+            <at name="width">680</at>
+            <at name="text">documentos_existentes</at>
+            <at name="height">15</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">10</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">com.jeta.forms.components.separator.TitledSeparator</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.separator.TitledSeparator</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblSessionProperties</at>
+            <at name="width">680</at>
+            <at name="text">propiedades_sesion</at>
+            <at name="height">15</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">8</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">embedded.1318146442</at>
+        <at name="rowspecs">FILL:DEFAULT:GROW(1.0)</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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>
+                 <at name="scrollableTracksViewportWidth">true</at>
+                 <at name="name">lstDocuments</at>
+                 <at name="width">554</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </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="height">188</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</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">embedded.660578757</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+             <at name="colspecs">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">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.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="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="actionCommand">JButton</at>
+                      <at name="name">btnDocumentNew</at>
+                      <at name="width">103</at>
+                      <at name="text">nuevo</at>
+                      <at name="height">22</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">1</at>
+                     <at name="row">3</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="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="actionCommand">JButton</at>
+                      <at name="name">btnDocumentOpen</at>
+                      <at name="width">103</at>
+                      <at name="text">abrir</at>
+                      <at name="height">22</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">1</at>
+                     <at name="row">5</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="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="actionCommand">JButton</at>
+                      <at name="name">btnDocumentRename</at>
+                      <at name="width">103</at>
+                      <at name="text">renombrar</at>
+                      <at name="height">22</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">1</at>
+                     <at name="row">7</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="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="actionCommand">JButton</at>
+                      <at name="name">btnDocumentDelete</at>
+                      <at name="width">103</at>
+                      <at name="text">borrar</at>
+                      <at name="height">22</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">1</at>
+                     <at name="row">9</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="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="actionCommand">JButton</at>
+                      <at name="name">btnDocumentProperties</at>
+                      <at name="width">103</at>
+                      <at name="text">propiedades</at>
+                      <at name="height">22</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="9">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="1">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="2">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="3">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="4">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="5">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="6">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="7">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </at>
+                 <at name="item" index="8">
+                  <object classname="[Ljava.lang.Object;" size="1"/>
+                 </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>
+          </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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">12</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">embedded.1119359906</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="name">lblSessionName</at>
+                 <at name="width">88</at>
+                 <at name="text">nombre_sesion</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">3</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">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="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="name">lblSavedIn</at>
+                 <at name="width">88</at>
+                 <at name="text">guardado</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">5</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">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="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="name">lblCreationDate</at>
+                 <at name="width">88</at>
+                 <at name="text">creation_date</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtSessionName</at>
+                 <at name="width">576</at>
+                 <at name="height">20</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">3</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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtSavedIn</at>
+                 <at name="width">576</at>
+                 <at name="height">20</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">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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtCreationDate</at>
+                 <at name="width">576</at>
+                 <at name="height">20</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">7</at>
+                <at name="colspan">1</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="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="actionCommand">JButton</at>
+                 <at name="name">btnProjectProperties</at>
+                 <at name="width">103</at>
+                 <at name="text">propiedades</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="7">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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">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.JPanel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JPanel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="name">documentTypesContainer</at>
+            <at name="width">680</at>
+            <at name="height">111</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="13">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageView.java	(revision 46118)
@@ -0,0 +1,288 @@
+package org.gvsig.app.project.documents.gui.projectpanel;
+
+import com.jeta.forms.components.separator.TitledSeparator;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.ComponentOrientation;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+
+public class ProjectDocumentsPanelPageView extends JPanel
+{
+   TitledSeparator lblDocumentTypes = new TitledSeparator();
+   TitledSeparator lblDocument = new TitledSeparator();
+   TitledSeparator lblSessionProperties = new TitledSeparator();
+   JList lstDocuments = new JList();
+   JButton btnDocumentNew = new JButton();
+   JButton btnDocumentOpen = new JButton();
+   JButton btnDocumentRename = new JButton();
+   JButton btnDocumentDelete = new JButton();
+   JButton btnDocumentProperties = new JButton();
+   JLabel lblSessionName = new JLabel();
+   JLabel lblSavedIn = new JLabel();
+   JLabel lblCreationDate = new JLabel();
+   JTextField txtSessionName = new JTextField();
+   JTextField txtSavedIn = new JTextField();
+   JTextField txtCreationDate = new JTextField();
+   JButton btnProjectProperties = new JButton();
+   JPanel documentTypesContainer = new JPanel();
+
+   /**
+    * Default constructor
+    */
+   public ProjectDocumentsPanelPageView()
+   {
+      initializePanel();
+   }
+
+   /**
+    * Main method for panel
+    */
+   public static void main(String[] args)
+   {
+      JFrame frame = new JFrame();
+      frame.setSize(600, 400);
+      frame.setLocation(100, 100);
+      frame.getContentPane().add(new ProjectDocumentsPanelPageView());
+      frame.setVisible(true);
+
+      frame.addWindowListener( new WindowAdapter()
+      {
+         public void windowClosing( WindowEvent evt )
+         {
+            System.exit(0);
+         }
+      });
+   }
+
+   /**
+    * 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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:115PX:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblDocumentTypes.setName("lblDocumentTypes");
+      lblDocumentTypes.setText("tipos_de_documentos");
+      jpanel1.add(lblDocumentTypes,cc.xy(2,2));
+
+      lblDocument.setName("lblDocument");
+      lblDocument.setText("documentos_existentes");
+      jpanel1.add(lblDocument,cc.xy(2,6));
+
+      lblSessionProperties.setName("lblSessionProperties");
+      lblSessionProperties.setText("propiedades_sesion");
+      jpanel1.add(lblSessionProperties,cc.xy(2,10));
+
+      jpanel1.add(createPanel1(),cc.xy(2,8));
+      jpanel1.add(createPanel3(),cc.xy(2,12));
+      documentTypesContainer.setName("documentTypesContainer");
+      jpanel1.add(documentTypesContainer,cc.xy(2,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:GROW(1.0)");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstDocuments.setName("lstDocuments");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstDocuments);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(1,1));
+
+      jpanel1.add(createPanel2(),cc.xy(3,1));
+      addFillComponents(jpanel1,new int[]{ 2,3 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnDocumentNew.setActionCommand("JButton");
+      btnDocumentNew.setName("btnDocumentNew");
+      btnDocumentNew.setText("nuevo");
+      jpanel1.add(btnDocumentNew,cc.xy(1,1));
+
+      btnDocumentOpen.setActionCommand("JButton");
+      btnDocumentOpen.setName("btnDocumentOpen");
+      btnDocumentOpen.setText("abrir");
+      jpanel1.add(btnDocumentOpen,cc.xy(1,3));
+
+      btnDocumentRename.setActionCommand("JButton");
+      btnDocumentRename.setName("btnDocumentRename");
+      btnDocumentRename.setText("renombrar");
+      jpanel1.add(btnDocumentRename,cc.xy(1,5));
+
+      btnDocumentDelete.setActionCommand("JButton");
+      btnDocumentDelete.setName("btnDocumentDelete");
+      btnDocumentDelete.setText("borrar");
+      jpanel1.add(btnDocumentDelete,cc.xy(1,7));
+
+      btnDocumentProperties.setActionCommand("JButton");
+      btnDocumentProperties.setName("btnDocumentProperties");
+      btnDocumentProperties.setText("propiedades");
+      jpanel1.add(btnDocumentProperties,cc.xy(1,9));
+
+      addFillComponents(jpanel1,new int[0],new int[]{ 2,4,6,8 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblSessionName.setName("lblSessionName");
+      lblSessionName.setText("nombre_sesion");
+      jpanel1.add(lblSessionName,cc.xy(1,1));
+
+      lblSavedIn.setName("lblSavedIn");
+      lblSavedIn.setText("guardado");
+      jpanel1.add(lblSavedIn,cc.xy(1,3));
+
+      lblCreationDate.setName("lblCreationDate");
+      lblCreationDate.setText("creation_date");
+      jpanel1.add(lblCreationDate,cc.xy(1,5));
+
+      txtSessionName.setBackground(new Color(236,233,216));
+      txtSessionName.setEditable(false);
+      txtSessionName.setName("txtSessionName");
+      jpanel1.add(txtSessionName,cc.xy(3,1));
+
+      txtSavedIn.setBackground(new Color(236,233,216));
+      txtSavedIn.setEditable(false);
+      txtSavedIn.setName("txtSavedIn");
+      jpanel1.add(txtSavedIn,cc.xy(3,3));
+
+      txtCreationDate.setBackground(new Color(236,233,216));
+      txtCreationDate.setEditable(false);
+      txtCreationDate.setName("txtCreationDate");
+      jpanel1.add(txtCreationDate,cc.xy(3,5));
+
+      btnProjectProperties.setActionCommand("JButton");
+      btnProjectProperties.setName("btnProjectProperties");
+      btnProjectProperties.setText("propiedades");
+      jpanel1.add(btnProjectProperties,new CellConstraints(3,7,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[]{ 2,4,6,7 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectPanelPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectPanelPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectPanelPage.java	(revision 46118)
@@ -0,0 +1,18 @@
+/*
+ * 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.gui.projectpanel;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.propertypage.PropertiesPage;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public interface ProjectPanelPage extends PropertiesPage {
+    
+    public void setProject(Project project);
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPage.java	(revision 46118)
@@ -0,0 +1,533 @@
+package org.gvsig.app.project.documents.gui.projectpanel;
+
+import java.awt.BorderLayout;
+import org.gvsig.app.project.documents.gui.*;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+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.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.ButtonGroup;
+import javax.swing.JComponent;
+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.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
+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.DocumentManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
+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.ToolsSwingManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.util.Invocable;
+import org.gvsig.utils.DefaultListModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProjectDocumentsPanelPage
+        extends ProjectDocumentsPanelPageView
+        implements ProjectPanelPage {
+    
+    private final Logger LOG = LoggerFactory.getLogger(ProjectGeneralPropertiesPage.class);
+
+    private Project project;
+    private DocumentManager currentDocumentType;
+    private final PropertyChangeListener projectPropertyChangeListener;
+    private final Observer projectObserver;
+
+    public ProjectDocumentsPanelPage() {
+        this.project = null;
+        this.projectPropertyChangeListener = new PropertyChangeListener() {
+            @Override
+            public void propertyChange(PropertyChangeEvent evt) {
+                updateProject();
+            }
+        };
+        this.projectObserver = new Observer() {
+            @Override
+            public void update(Observable observable, Object notification) {
+                updateProject();
+            }
+        };
+        this.initComponents();
+    }
+
+    @Override
+    public void setData(Object data) {
+    }
+    
+    @Override
+    public String getTitle() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        return i18n.getTranslation("_Documents");
+    }
+
+    @Override
+    public int getPriority() {
+        return 1000;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        return true;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        this.initDocumentTypes();
+        this.btnDocumentNew.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDocumentNew();
+            }
+        });
+        this.btnDocumentOpen.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDocumentOpen();
+            }
+        });
+        this.btnDocumentRename.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDocumentRename();
+            }
+        });
+        this.btnDocumentDelete.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDocumentDelete();
+            }
+        });
+        this.btnDocumentProperties.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doDocumentProperties();
+            }
+        });
+        this.btnProjectProperties.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doProjectProperties();
+            }
+        });
+        this.lstDocuments.addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if (e.getValueIsAdjusting()) {
+                    return;
+                }
+                doDocumentsSelectionChanged();
+            }
+        });
+        this.lstDocuments.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if( e.getButton()==MouseEvent.BUTTON1 && e.getClickCount()==2 ) {
+                    doDocumentOpen();
+                } 
+            }
+        });
+        this.translate();
+    }
+
+    private void translate() {
+        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblSavedIn);
+        manager.translate(this.lblSessionName);
+        manager.translate(this.lblDocument);
+        manager.translate(this.lblDocumentTypes);
+        manager.translate(this.lblSessionProperties);
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblCreationDate);
+        manager.translate(this.lblCreationDate);
+
+        manager.translate(this.btnDocumentDelete);
+        manager.translate(this.btnDocumentNew);
+        manager.translate(this.btnDocumentOpen);
+        manager.translate(this.btnDocumentProperties);
+        manager.translate(this.btnDocumentRename);
+        manager.translate(this.btnProjectProperties);
+
+    }
+
+    @Override
+    public void setProject(Project project) {
+        if( this.project!=null ) {
+            this.project.removePropertyChangeListener(this.projectPropertyChangeListener);
+            this.project.deleteObserver(this.projectObserver);
+        }
+        this.project = project;
+        if(project!=null){
+            project.addPropertyChangeListener(this.projectPropertyChangeListener);
+            project.addObserver(this.projectObserver);
+        }
+        updateProject();
+    }
+
+    private void updateProject() {
+        if( !SwingUtilities.isEventDispatchThread() ) {
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    updateProject();
+                }
+            });
+            return;
+        }
+        updateProjectDocumens();
+        updateProjectProperties();
+    }
+    
+    private void updateProjectProperties() {
+        if (project != null) {
+            this.txtSessionName.setText(project.getName());
+            File path = this.project.getFile();
+            if (path != null) {
+                this.txtSavedIn.setText(path.toString());
+            } else {
+                this.txtSavedIn.setText("");
+            }
+            this.txtCreationDate.setText(project.getCreationDate());
+        }
+    }    
+    
+    private void initDocumentTypes() {
+        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
+
+        this.documentTypesContainer.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
+
+        List<DocumentManager> factories = ProjectManager.getInstance().getDocumentManagers();
+        Collections.sort(factories, new Comparator<DocumentManager>() {
+
+            @Override
+            public int compare(DocumentManager arg0, DocumentManager arg1) {
+                return arg0.getPriority() - arg1.getPriority();
+            }
+
+        });
+        this.currentDocumentType = factories.get(0);
+        JRadioButton selectButton = null;
+        ButtonGroup group = new ButtonGroup();
+        JPanel panel = new JPanel();
+        for (DocumentManager documentFactory : factories) {
+            if (!identityManager.getCurrentIdentity().isAuthorized(
+                    Document.ACCESS_DOCUMENT_AUTHORIZATION,
+                    documentFactory,
+                    documentFactory.getTypeName())) {
+                continue;
+            }
+            JRadioButton button = this.createDocumentTypeButton(documentFactory);
+            group.add(button);
+            panel.add(button);
+            if( documentFactory == this.currentDocumentType ) {
+                selectButton = button;
+            }
+        }
+     
+        JScrollPane scroll = new JScrollPane(panel);
+        Dimension dim = panel.getPreferredSize();
+        scroll.setMinimumSize(new Dimension(dim.width+2, dim.height + 35));
+        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
+        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+        this.documentTypesContainer.setLayout(new BorderLayout());
+        this.documentTypesContainer.add(scroll, BorderLayout.CENTER);
+        selectButton.setSelected(true);
+    }
+   
+    private JRadioButton createDocumentTypeButton(final DocumentManager documentFactory) {
+        final 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() {
+            @Override
+            public void stateChanged(javax.swing.event.ChangeEvent e) {
+                if (rb.isSelected()) {
+                    currentDocumentType = documentFactory;
+                    updateProjectDocumens();
+                }
+            }
+        });
+        return rb;
+    }
+
+    private void openDocumentWindow(Document doc) {
+        if (doc == null) {
+            return;
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+        IWindow window = doc.getFactory().getMainWindow(doc);
+        if (window == null) {
+            application.message(
+                    i18n.getTranslation("error_opening_the_document"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+        application.getUIManager().addWindow(
+                window,
+                MDIManager.ALIGN_FIRST_LINE_END_CASCADE
+        );
+        project.setModified(true);
+    }
+
+    private void updateProjectDocumens() {
+        if (project == null) {
+            return;
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.lblDocument.setText(i18n.getTranslation("documentos_existentes"));
+
+        String documentsTypeName = this.currentDocumentType.getTypeName();
+        List<Document> documents = project.getDocuments(documentsTypeName);
+        DefaultListModel model = new DefaultListModel(documents);
+        this.lstDocuments.setModel(model);
+        this.lblDocument.setText(currentDocumentType.getTitle());
+        updateDocumentButtons();
+    }
+
+    private void updateDocumentButtons() {
+        this.btnDocumentNew.setEnabled(true);
+        if (this.lstDocuments.getSelectedIndex() != -1) {
+            this.btnDocumentOpen.setEnabled(true);
+            this.btnDocumentDelete.setEnabled(true);
+            this.btnDocumentRename.setEnabled(true);
+            this.btnDocumentProperties.setEnabled(true);
+        } else {
+            btnDocumentOpen.setEnabled(false);
+            btnDocumentDelete.setEnabled(false);
+            btnDocumentRename.setEnabled(false);
+            btnDocumentProperties.setEnabled(false);
+        }
+    }
+
+    private void doDocumentNew() {
+        String documentsTypeName = this.currentDocumentType.getTypeName();
+        ProjectManager projectManager = ProjectManager.getInstance(); 
+        Iterator<? extends Document> documents = projectManager.createDocumentsByUser(documentsTypeName, new Invocable() {
+            @Override
+            public Object call(Object... args) {
+                Iterator<? extends Document> docs = (Iterator<? extends Document>) args[0];
+                addNewDocuments(docs);
+                return null;
+            }
+        });
+        addNewDocuments(documents);
+    }
+
+    private void addNewDocuments(Iterator<? extends Document> documents) {
+        while ( documents != null && documents.hasNext() ) {
+            try {
+                Document document = documents.next();
+                project.addDocument(document);
+                openDocumentWindow(document);
+            } catch (Exception e) {
+                LOG.warn("Can't open document", e);
+            }
+        }
+        this.lstDocuments.requestFocus();        
+        this.lstDocuments.setSelectedIndex(this.lstDocuments.getModel().getSize()-1);
+    }
+
+    private void doDocumentOpen() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        int[] indexes = this.lstDocuments.getSelectedIndices();
+        for (int i = indexes.length - 1; i >= 0; i--) {
+            int index = indexes[i];
+            if (index == -1) {
+                return;
+            }
+            String documentsTypeName = this.currentDocumentType.getTypeName();
+            List<Document> documents = project.getDocuments(documentsTypeName);
+            Document doc = documents.get(index);
+            if (!doc.isAvailable()) {
+                application.messageDialog(
+                        i18n.getTranslation("document_not_available"),
+                        i18n.getTranslation("abrir"),
+                        JOptionPane.WARNING_MESSAGE
+                );
+            }
+            IWindow win = doc.getMainWindow();
+            openDocumentWindow(doc);
+        }
+
+    }
+
+    private void doDocumentRename() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        int index = this.lstDocuments.getSelectedIndex();
+        if (index == -1) {
+            return;
+        }
+        String DoumentTypeName = this.currentDocumentType.getTypeName();
+        List<Document> documents = project.getDocuments(DoumentTypeName);
+        Document doc = documents.get(index);
+        String name = application.inputDialog(
+                i18n.getTranslation("introduce_nombre"),
+                i18n.getTranslation("renombrar"),
+                JOptionPane.QUESTION_MESSAGE,
+                doc.getName()
+        );
+        if(name != null) {
+            for (Document document : documents) {
+                if (StringUtils.equals(document.getName(), name)) {
+                    application.messageDialog(
+                            i18n.getTranslation("elemento_ya_existe"),
+                            i18n.getTranslation("warning"),
+                            JOptionPane.WARNING_MESSAGE
+                    );
+                    return;
+                }
+            }
+            doc.setName(name);
+            updateProjectDocumens();
+            this.project.setModified(true);
+        }
+    }
+
+    private void doDocumentDelete() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        int res = application.confirmDialog(
+                i18n.getTranslation("confirmar_borrar"),
+                i18n.getTranslation("borrar"),
+                JOptionPane.YES_NO_OPTION,
+                JOptionPane.INFORMATION_MESSAGE,
+                "Confirm remove document from project"
+        );
+        int lastremoved = 0;
+        if (res == JOptionPane.YES_OPTION) {
+            String DoumentTypeName = this.currentDocumentType.getTypeName();
+            int[] indexes = this.lstDocuments.getSelectedIndices();
+            for (int i = indexes.length - 1; i >= 0; i--) {
+                int index = indexes[i];
+                List<Document> documents = project.getDocuments(DoumentTypeName);
+                Document doc = documents.get(index);
+                if (doc.isLocked()) {
+                    application.messageDialog(
+                            i18n.getTranslation("locked_element_it_cannot_be_deleted"),
+                            i18n.getTranslation("Information"),
+                            JOptionPane.INFORMATION_MESSAGE
+                    );
+                    return;
+                }
+                PluginServices.getMDIManager().closeSingletonWindow(doc);
+                project.removeDocument(doc);
+                lastremoved = index;
+            }
+            if (lastremoved >= this.lstDocuments.getModel().getSize()) {
+                this.lstDocuments.setSelectedIndex(this.lstDocuments.getModel().getSize() - 1);
+            } else if (lastremoved >= 0) {
+                this.lstDocuments.setSelectedIndex(lastremoved);
+            }
+            project.setModified(true);
+        }
+
+    }
+
+    private void doDocumentProperties() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        ApplicationManager application = ApplicationLocator.getManager();
+
+        int index = this.lstDocuments.getSelectedIndex();
+        if (index == -1) {
+            return;
+        }
+        String DoumentTypeName = this.currentDocumentType.getTypeName();
+        List<Document> documents = project.getDocuments(DoumentTypeName);
+        Document doc = documents.get(index);
+        if (!doc.isAvailable()) {
+            application.messageDialog(
+                i18nManager.getTranslation("document_not_available"),
+                i18nManager.getTranslation("properties"),
+                JOptionPane.WARNING_MESSAGE
+            );
+            return;
+        }
+        IWindow properties = doc.getFactory().getPropertiesWindow(doc);
+        application.getUIManager().addWindow(
+                properties
+        );
+        this.lstDocuments.setSelectedIndex(index);
+        project.setModified(true);
+    }
+
+    private void doProjectProperties() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
+        ProjectProperties panel = new ProjectProperties(project);
+        panel.addComponentListener(new ComponentAdapter() {
+            @Override
+            public void componentHidden(ComponentEvent e) {
+                updateProjectProperties();
+            }
+        });
+        winmgr.showWindow(
+                panel,
+                i18nManager.getTranslation("project_properties"),
+                WindowManager.MODE.WINDOW
+        );
+    }
+
+    private void doDocumentsSelectionChanged() {
+        this.updateDocumentButtons();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/projectpanel/ProjectDocumentsPanelPageFactory.java	(revision 46118)
@@ -0,0 +1,31 @@
+
+package org.gvsig.app.project.documents.gui.projectpanel;
+
+import org.gvsig.app.project.Project;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageFactory;
+
+public class ProjectDocumentsPanelPageFactory implements PropertiesPageFactory {
+
+    @Override
+    public String getGroupID() {
+        return Project.PROJECT_PANEL_PAGE_GROUP;
+    }
+
+    @Override
+    public String getName() {
+        return "General";
+    }
+    
+    @Override
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    @Override
+    public PropertiesPage create(Object container, Object data) {
+        return new ProjectDocumentsPanelPage();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/DocumentContextMenu.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ObjectSelectionStep.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/AndamiWizard.java	(revision 46118)
@@ -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.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;
+    
+    WindowInfo viewInfo = null;
+
+    /**
+     * @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() {
+        if(viewInfo == null){
+            viewInfo = new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+                    | WindowInfo.RESIZABLE);
+        }
+        return viewInfo;
+    }
+
+    public Object getWindowProfile() {
+        // TODO Auto-generated method stub
+        return WindowInfo.PROPERTIES_PROFILE;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ListManagerSkin.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/SymbolCellEditor.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectElementListModel.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectGeneralPropertiesPage.java	(revision 46118)
@@ -0,0 +1,432 @@
+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();
+    }
+
+    @Override
+    public void setData(Object data) {
+        
+    }
+
+    @Override
+    public boolean whenAccept() {
+        return whenApply();
+    }
+
+    @Override
+    public boolean whenApply() {
+        project.setName(txtName.getText());
+        project.setOwner(txtOwner.getText());
+        project.setComments(txtComments.getText());
+        project.setSelectionColor(lblColor.getBackground());
+
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        return true;
+    }
+
+    @Override
+    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 = new JButton("..."); //ToolsSwingLocator.getUsabilitySwingManager().createJButton("...");
+
+            btnColor.addActionListener(new java.awt.event.ActionListener() {
+
+                @Override
+                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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/ProjectWindow.java	(revision 46118)
@@ -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.project.documents.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.util.List;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.documents.gui.projectpanel.ProjectPanelPage;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.propertypage.PropertiesPageManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+public class ProjectWindow  
+        extends JPanel
+        implements SingletonWindow 
+    {
+
+    private Project project;
+    private WindowInfo viewInfo;
+    private final List<PropertiesPage> pages;
+    
+    public ProjectWindow() {
+        PropertiesPageManager manager = ToolsUtilLocator.getPropertiesPageManager();
+        this.pages = manager.getPages(Project.PROJECT_PANEL_PAGE_GROUP,this, null);        
+        initComponents();
+    }
+    
+    private void initComponents() {
+        this.setLayout(new BorderLayout());
+        Component contents = createPagesPanel();
+        this.add(contents, BorderLayout.CENTER);
+    }
+    
+    protected Component createPagesPanel() {
+        if( this.pages.size()==1 && !useTabsAlwais() ) {
+            PropertiesPage page = this.pages.get(0);
+            return page.asJComponent();
+        } else {
+            JTabbedPane theTabbedPane = new JTabbedPane();
+            for( int i=0; i<this.pages.size(); i++ ) {
+                PropertiesPage page = this.pages.get(i);
+                theTabbedPane.addTab(page.getTitle(), page.asJComponent());
+            }
+            return theTabbedPane;
+        }
+    }
+    
+    protected boolean useTabsAlwais() {
+        return false;
+    }
+
+    @Override
+    public Object getWindowModel() {
+        return project;
+    }
+
+    public Project getProject() {
+        return project;
+    }
+    
+    public void setProject(Project project) {
+        this.project = project;
+        for (PropertiesPage page : this.pages) {
+            if( page instanceof ProjectPanelPage ) {
+                ((ProjectPanelPage)page).setProject(project);
+            }
+        }
+    }
+    
+    @Override
+    public Object getWindowProfile() {
+        return WindowInfo.PROJECT_PROFILE;
+    }
+    
+    @Override
+    public WindowInfo getWindowInfo() {
+        if (viewInfo == null) {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            viewInfo = new WindowInfo(WindowInfo.MAXIMIZABLE | WindowInfo.RESIZABLE);
+            viewInfo.setWidth(this.getWidth());
+            viewInfo.setHeight(this.getHeight());
+            Dimension dim = ToolsSwingUtils.ensureRowsCols(this, 25, 65);            
+            viewInfo.setNormalWidth(dim.width);
+            viewInfo.setNormalHeight(dim.height);
+            viewInfo.setMinimumSize(getPreferredSize());
+            viewInfo.setTitle(i18n.getTranslation("_Project_manager"));
+        }
+        return viewInfo;
+    }    
+    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/gui/IDocumentWindow.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentActionGroup.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/DocumentManager.java	(revision 46118)
@@ -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.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.fmap.mapcontext.layers.ExtendedPropertiesSupport;
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+import org.gvsig.tools.observer.WeakReferencingObservable;
+import org.gvsig.tools.persistence.PersistenceFactory;
+import org.gvsig.tools.util.Invocable;
+
+public interface DocumentManager extends ExtensionBuilder, PersistenceFactory, WeakReferencingObservable, ExtendedPropertiesSupport {
+
+        public static String NOTIFY_AFTER_CREATEDOCUMENT = "DocumentManager.CreateDocument";
+        public static String NOTIFY_AFTER_GETMAINWINDOW = "DocumentManager.getMainWindow";
+        public static String NOTIFY_AFTER_CREATEMAINWINDOW = "DocumentManager.createMainWindow";
+        public static String NOTIFY_AFTER_GETPROPERTIESWINDOW = "DocumentManager.getPropertiesWindow";
+        public static String NOTIFY_AFTER_CREATEPROPERTIESWINDOW = "DocumentManager.createPropertiesWindow";
+        
+	/**
+	 * 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();
+
+    public Iterator<? extends Document> createDocumentsByUser(Invocable whenDocumentsLoaded);
+    
+	/**
+	 * 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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/DocumentsContainer.java	(revision 46118)
@@ -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;
+
+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();
+        
+	/**
+         * Returns the document of the type indicated and the name specified by name.
+         * If documnt don't exists return null
+	 *
+	 * @param name name of the document to retrieve
+	 * @param type name of the type of document to retrieve
+	 *
+	 * @return Documento
+	 */
+	public Document getDocument(String name, String type);
+
+        /**
+         * Returns the document with the name specified by name.
+         * If documnt don't exists return null
+         * 
+         * @param name
+         * @return Document with the name specified by name
+         */
+        public Document getDocument(String name);
+	
+	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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/Project.java	(revision 46118)
@@ -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.project;
+
+import java.awt.Color;
+import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Set;
+
+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.persistence.Persistent;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.PropertiesSupport;
+
+public interface Project extends DocumentsContainer, Persistent, ExtendedPropertiesSupport, PropertiesSupport {
+
+    public static final String PROJECT_PANEL_PAGE_GROUP = "ProyectPanel";
+
+    public static final String PROJECT_PROPERTIES_PAGE_GROUP = "Proyect";
+
+    public static final String FILE_EXTENSION = ".gvsproj";
+    
+    public static final String FILE_BAK = FILE_EXTENSION + ".bak";
+
+    public void addPropertyChangeListener(PropertyChangeListener listener);
+
+    public void removePropertyChangeListener(PropertyChangeListener listener);
+
+    /**
+     * 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 name
+     */
+    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 comments);
+
+    /**
+     * 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 owner
+     */
+    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 selectionColor
+     */
+    public void setSelectionColor(String selectionColor);
+
+    /**
+     * Sets the selecction color
+     *
+     * @param selectionColor
+     */
+    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, BufferedImage preview);
+
+    @Deprecated
+    public void saveState(File out) throws PersistenceException;
+
+    @Deprecated
+    public void saveState(OutputStream out) throws PersistenceException;
+
+    @Deprecated
+    public void saveState(OutputStream out, File rootFolder) throws PersistenceException;
+
+    @Deprecated
+    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);
+
+    public File getFile();
+
+    public Set<String> getUnloadedObjects();
+
+    public List<Exception> getLoadErrors();
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectPreferences.java	(revision 46118)
@@ -0,0 +1,415 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any 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 javax.swing.UIManager;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.BooleanUtils;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+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.tools.dynobject.DynObject;
+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 static final String ZOOM_IN_FACTOR = "ZoomInFactor";
+    private static final String ZOOM_OUT_FACTOR = "ZoomOutFactor";
+    private static final String KEEP_SCALE_ON_RESIZING = "KeepScaleOnResizing";
+    private static final String OPEN_WITH_A_NEW_MAXIMIZED_VIEW = "OpenWithANewMaximizedView";
+    private static final String ADD_NEW_LAYERS_IN_INVISIBLE_MODE = "NewLayersInInvisibleMode";
+
+    private IProjection defaultProjection = null;
+
+    private final IProjection defaultFactoryProjection
+            = MapContextLocator.getMapContextManager().getDefaultCRS();
+
+    private Color defaultSelectionColor = Color.YELLOW;
+
+    private Color defaultViewBackColor = null;  // Color.WHITE;
+
+    private Color defaultOverviewBackColor = null; //Color.WHITE;
+
+    private int defaultMapUnits = -1;
+
+    private int defaultDistanceUnits = -1;
+
+    private int defaultDistanceArea = -1;
+
+    private final PluginServices plugin;
+    private final DynObject pluginPreferences;
+
+    public ProjectPreferences() {
+        this.plugin = PluginsLocator.getManager().getPlugin(this);
+        this.pluginPreferences = plugin.getPluginProperties();
+    }
+
+    /**
+     * Sets the projection used when no projection is defined
+     *
+     * @param defaultProjection
+     */
+    public void setDefaultProjection(IProjection defaultProjection) {
+        this.defaultProjection = defaultProjection;
+        if (defaultProjection != null) {
+            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) {
+            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;
+    }
+
+    @Override
+    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;
+        XMLEntity xml = plugin.getPersistentXML();
+        xml.putProperty("DefaultSelectionColor", StringUtilities.color2String(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 = plugin.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"));
+        } 
+        if( defaultViewBackColor == null ) {
+            defaultViewBackColor  = UIManager.getColor("EditorPane.background");
+            if( defaultViewBackColor == null ) {
+                defaultViewBackColor  = Color.WHITE;
+            }
+        }
+        return defaultViewBackColor;
+    }
+
+    public void setDefaultViewBackColor(Color color) {
+        defaultViewBackColor = color;
+        XMLEntity xml = plugin.getPersistentXML();
+        xml.putProperty("DefaultViewBackColor", StringUtilities.color2String(color));
+    }
+
+    public Color getDefaultOverviewBackColor() {
+        XMLEntity xml = plugin.getPersistentXML();
+        if (xml.contains("defaultOverviewBackColor")) {
+            defaultOverviewBackColor = StringUtilities.string2Color(xml
+                    .getStringProperty("defaultOverviewBackColor"));
+        } 
+        if( defaultOverviewBackColor == null ) {
+            defaultOverviewBackColor  = UIManager.getColor("EditorPane.background");
+            if( defaultOverviewBackColor == null ) {
+                defaultOverviewBackColor  = Color.WHITE;
+            }
+        }
+        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 = plugin.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 = plugin.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 = plugin.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;
+        XMLEntity xml = plugin.getPersistentXML();
+        xml.putProperty("DefaultMapUnits", mapUnits);
+    }
+
+    /**
+     * Sets the default distance units (the units shown in the status bar)
+     *
+     * @param distanceUnits
+     */
+    public void setDefaultDistanceUnits(int distanceUnits) {
+        defaultDistanceUnits = distanceUnits;
+        XMLEntity xml = plugin.getPersistentXML();
+        xml.putProperty("DefaultDistanceUnits", distanceUnits);
+    }
+
+    /**
+     * Sets the default distance area (the units shown in the status bar)
+     *
+     * @param distanceArea
+     */
+    public void setDefaultDistanceArea(int distanceArea) {
+        defaultDistanceArea = distanceArea;
+        XMLEntity xml = plugin.getPersistentXML();
+        xml.putProperty("DefaultDistanceArea", distanceArea);
+    }
+
+    public boolean getAddNewLayersInInvisibleMode() {
+        Boolean addNewLayersInInvisibleMode = (Boolean) this.pluginPreferences.getDynValue(ADD_NEW_LAYERS_IN_INVISIBLE_MODE);
+        if (addNewLayersInInvisibleMode == null) {
+            XMLEntity xml = plugin.getPersistentXML();
+            if (xml.contains(ADD_NEW_LAYERS_IN_INVISIBLE_MODE)) {
+                addNewLayersInInvisibleMode = xml.getBooleanProperty(ADD_NEW_LAYERS_IN_INVISIBLE_MODE);
+            } else {
+                addNewLayersInInvisibleMode = false;
+            }
+            this.pluginPreferences.setDynValue(ADD_NEW_LAYERS_IN_INVISIBLE_MODE, addNewLayersInInvisibleMode);
+        }
+        return BooleanUtils.isTrue(addNewLayersInInvisibleMode);
+    }
+
+    public void setAddNewLayersInInvisibleMode(boolean addNewLayersInInvisibleMode) {
+        this.pluginPreferences.setDynValue(ADD_NEW_LAYERS_IN_INVISIBLE_MODE, addNewLayersInInvisibleMode);
+    }
+
+    public boolean getOpenWithANewMaximizedView() {
+        Boolean openWithANewMaximizedView = (Boolean) this.pluginPreferences.getDynValue(OPEN_WITH_A_NEW_MAXIMIZED_VIEW);
+        if (openWithANewMaximizedView == null) {
+            XMLEntity xml = plugin.getPersistentXML();
+            if (xml.contains(OPEN_WITH_A_NEW_MAXIMIZED_VIEW)) {
+                openWithANewMaximizedView = xml.getBooleanProperty(OPEN_WITH_A_NEW_MAXIMIZED_VIEW);
+            } else {
+                openWithANewMaximizedView = true;
+            }
+            this.pluginPreferences.setDynValue(OPEN_WITH_A_NEW_MAXIMIZED_VIEW, openWithANewMaximizedView);
+        }
+        return BooleanUtils.isTrue(openWithANewMaximizedView);
+    }
+
+    public void setOpenWithANewMaximizedView(boolean openWithANewMaximizedView) {
+        this.pluginPreferences.setDynValue(OPEN_WITH_A_NEW_MAXIMIZED_VIEW, openWithANewMaximizedView);
+    }
+
+    public boolean getKeepScaleOnResizing() {
+        Boolean keepScaleOnResizing = (Boolean) this.pluginPreferences.getDynValue(KEEP_SCALE_ON_RESIZING);
+        if (keepScaleOnResizing == null) {
+            XMLEntity xml = plugin.getPersistentXML();
+            if (xml.contains(KEEP_SCALE_ON_RESIZING)) {
+                keepScaleOnResizing = xml.getBooleanProperty(KEEP_SCALE_ON_RESIZING);
+            } else {
+                keepScaleOnResizing = false;
+            }
+            this.pluginPreferences.setDynValue(KEEP_SCALE_ON_RESIZING, keepScaleOnResizing);
+        }
+        return BooleanUtils.isTrue(keepScaleOnResizing);
+    }
+
+    public void setKeepScaleOnResizing(boolean keepScaleOnResizing) {
+        this.pluginPreferences.setDynValue(KEEP_SCALE_ON_RESIZING, keepScaleOnResizing);
+    }
+
+    public double getZoomInFactor() {
+        Double zoomInFactor = (Double) this.pluginPreferences.getDynValue(ZOOM_IN_FACTOR);
+        if (zoomInFactor == null) {
+            XMLEntity xml = plugin.getPersistentXML();
+            if (xml.contains(ZOOM_IN_FACTOR)) {
+                zoomInFactor = xml.getDoubleProperty(ZOOM_IN_FACTOR);
+            } else {
+                zoomInFactor = MapContext.ZOOMINFACTOR;
+            }
+            this.pluginPreferences.setDynValue(ZOOM_IN_FACTOR, zoomInFactor);
+        }
+        return zoomInFactor;
+    }
+
+    public void setZoomInFactor(double zoomInFactor) {
+        this.pluginPreferences.setDynValue(ZOOM_IN_FACTOR, zoomInFactor);
+    }
+
+    public double getZoomOutFactor() {
+        Double zoomOutFactor = (Double) this.pluginPreferences.getDynValue(ZOOM_OUT_FACTOR);
+        if (zoomOutFactor == null) {
+            XMLEntity xml = plugin.getPersistentXML();
+            if (xml.contains(ZOOM_OUT_FACTOR)) {
+                zoomOutFactor = xml.getDoubleProperty(ZOOM_OUT_FACTOR);
+            } else {
+                zoomOutFactor = MapContext.ZOOMINFACTOR;
+            }
+            this.pluginPreferences.setDynValue(ZOOM_OUT_FACTOR, zoomOutFactor);
+        }
+        return zoomOutFactor;
+    }
+
+    public void setZoomOutFactor(double zoomOutFactor) {
+        this.pluginPreferences.setDynValue(ZOOM_OUT_FACTOR, zoomOutFactor);
+    }
+
+    public boolean getHideLegendInToCOfNonVisibleLayers() {
+        Boolean hideLegendInToCOfNonVisibleLayers = (Boolean)this.pluginPreferences.getDynValue("hideLegendInToCOfNonVisibleLayers");
+        return BooleanUtils.toBooleanDefaultIfNull(hideLegendInToCOfNonVisibleLayers,true);
+    }
+
+    public void setHideLegendInToCOfNonVisibleLayers(boolean hideLegendInToCOfNonVisibleLayers) {
+        this.pluginPreferences.setDynValue("hideLegendInToCOfNonVisibleLayers", hideLegendInToCOfNonVisibleLayers);
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/disid-logo.jpeg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/disid.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/disid.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/disid.html	(revision 46118)
@@ -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="gvsig-logo1-association.jpg">
+<p><em>Miembro de la <a href="http://www.gvsig.com/">Asociaci&oacute;n gvSIG</a></em>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/disid/disid.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-16x16-red.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-16x16-red.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva.svg	(revision 46118)
@@ -0,0 +1,99 @@
+<?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="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg102"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="logogva.svg">
+  <defs
+     id="defs96" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.979899"
+     inkscape:cx="400"
+     inkscape:cy="613.67656"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="703"
+     inkscape:window-x="1366"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata99">
+    <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
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g272">
+      <path
+         d="m 91.784379,144.71994 c 0.221865,-0.32699 0.259761,-0.33387 0.259761,-0.33387 0,0 -0.209737,-0.0666 -0.341479,0.1276 -0.221036,0.32617 -0.257552,0.33404 -0.257552,0.33404 0,0 0.209462,0.0639 0.33927,-0.12777"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path158"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 90.833258,152.77169 1.222181,1.22218 c 0.50891,0.50878 1.131923,0.8362 1.790485,0.98282 l -2.608626,-2.6089 -0.40404,0.4039"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path160"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 91.596002,152.00909 3.056887,3.05676 c 0.246415,5.5e-4 0.49336,-0.023 0.737129,-0.0707 l -3.390113,-3.38998 -0.403903,0.40391"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path162"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 94.202148,147.15841 h -0.220073 v 0.25932 H 93.72273 v 0.21992 h 0.259345 v 0.25937 h 0.07552 v 0.33609 h 0.06904 v -0.33609 h 0.07551 v -0.25937 h 0.259359 v -0.21992 h -0.259359 v -0.25932"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path164"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 93.121491,150.48358 2.608781,2.60878 c -0.146649,-0.65856 -0.473921,-1.28157 -0.982697,-1.79047 l -1.222319,-1.2222 -0.403765,0.40389"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path166"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 92.358747,151.24632 3.390117,3.38999 c 0.04755,-0.24363 0.07108,-0.49058 0.07055,-0.73711 l -3.05677,-3.05677 -0.403902,0.40389"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path168"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 92.694711,143.25855 c -0.06449,0 -0.116857,0.0524 -0.116857,0.11698 0,0.0645 0.05237,0.11674 0.116857,0.11674 0.06463,0 0.116858,-0.0522 0.116858,-0.11674 0,-0.0646 -0.05223,-0.11698 -0.116858,-0.11698"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path170"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 91.50519,145.63843 -0.0011,3.9e-4 0.382408,0.92427 -0.476663,0.96489 c 0,0 0.36008,0.72196 0.475146,1.36384 0.11176,0.62289 0.0215,1.58944 0.0215,1.58944 l 1.780978,-0.89408 0.0011,-0.003 c 0.07648,0.12527 0.169224,0.24504 0.282223,0.35818 0.299861,0.29972 0.400738,0.40072 0.400738,0.40072 l 1.382994,-1.3819 -0.09109,-0.0855 c -0.556331,-0.5213 -0.793609,-1.01257 -0.793609,-1.64221 v -0.67413 l 0.380753,-0.92053 -0.0011,-3.9e-4 c 0.06918,-0.0258 0.118498,-0.0921 0.118498,-0.17008 0,-0.10029 -0.08132,-0.18175 -0.181751,-0.18175 -0.100189,0 -0.181505,0.0815 -0.181505,0.18175 0,0.045 0.0164,0.086 0.04353,0.11769 -0.05468,0.15685 -0.183797,0.27838 -0.345052,0.32247 -0.08322,-0.22062 -0.07786,-0.47392 0.03651,-0.70114 0.10294,-0.20437 0.275343,-0.35098 0.474062,-0.42542 -0.131198,-0.16633 -0.202282,-0.38075 -0.183973,-0.60868 0.01845,-0.22793 0.123049,-0.42813 0.279188,-0.57132 -0.09948,-0.0225 -0.418782,-0.0703 -0.764258,0.1312 -0.188513,-0.14387 -0.31116,-0.37014 -0.31116,-0.62523 0,-0.0575 0.0062,-0.11342 0.01791,-0.16743 -0.08544,0.0354 -0.179007,0.0551 -0.277121,0.0551 -0.280984,0 -0.525173,-0.16055 -0.645612,-0.39483 v 0 c -0.109693,0.17307 -0.302895,0.28815 -0.522552,0.28815 -0.217318,0 -0.408866,-0.11286 -0.519247,-0.28304 0.0463,0.51248 -0.107346,1.11605 -0.543909,1.43563 l 0.118646,0.15752 c 0.07138,-0.0536 0.143316,-0.11398 0.205331,-0.17819 0.02742,-0.0285 0.05402,-0.0447 0.09122,-0.044 0.05402,9.6e-4 0.101424,0.0453 0.101561,0.10432 1.38e-4,0.0266 -0.0099,0.0462 -0.01957,0.0645 l 1.37e-4,2.8e-4 c -0.03018,0.0609 -0.04726,0.1294 -0.04726,0.20175 0,0.0696 0.01571,0.13558 0.04355,0.1947 l 0.178869,-0.0841 c -0.08351,-0.17929 0.05898,-0.34657 0.284702,-0.51372 0.162056,-0.12016 0.332797,-0.23343 0.457645,-0.23428 0.139181,-9.5e-4 0.25232,0.11314 0.25232,0.25234 0,0.15625 -0.154615,0.28071 -0.27354,0.35581 -0.446211,0.28152 -0.896415,0.48645 -1.104085,0.98129 -0.08723,0.20768 -0.114928,0.42139 -0.123747,0.54197 -0.114791,-0.078 -0.179836,-0.19099 -0.202297,-0.25576 0.02701,-0.0317 0.04341,-0.0727 0.04341,-0.11769 0,-0.10029 -0.08131,-0.18175 -0.181628,-0.18175 -0.100182,0 -0.181486,0.0815 -0.181486,0.18175 0,0.078 0.04933,0.14429 0.118374,0.17008 z m 1.27937,4.15572 -0.633483,0.31806 c 0.01585,-0.34865 0.02136,-0.86374 -0.04947,-1.25924 -0.08213,-0.45765 -0.277675,-0.94533 -0.3966,-1.21517 h 1.079556 z m 0.220074,-0.11049 v -2.26593 h -1.294942 l 0.402936,-0.81565 h 1.194209 v 0.6314 c 0,0.18757 0.0018,0.58085 0.02908,0.99977 0.02673,0.41233 0.08489,0.80465 0.249975,1.1588 z m 2.43569,-0.71727 -1.06881,1.0655 -0.245019,-0.24518 c -0.416719,-0.41656 -0.529583,-0.92795 -0.571196,-1.56778 -0.01902,-0.29655 -0.02839,-0.61902 -0.02839,-0.98545 v -0.6314 h 0.393428 0.728281 0.0011 v 0.6314 c 0,0.66449 0.24377,1.19394 0.790575,1.73291 z m -3.227373,-3.57148 c 0.202156,-0.51594 0.855073,-0.77252 1.155897,-0.98627 0.08268,-0.0588 0.250942,-0.22584 0.246945,-0.44591 -0.0044,-0.25248 -0.205327,-0.45794 -0.457923,-0.45794 -0.236471,0 -0.588973,0.26857 -0.742901,0.42679 -0.04589,-0.0726 -0.0966,-0.10982 -0.172392,-0.13793 0.148139,-0.25813 0.202159,-0.49763 0.242397,-0.76483 0.09881,0.0419 0.207395,0.0652 0.321222,0.0652 0.189756,0 0.364628,-0.0645 0.504084,-0.17269 0.168949,0.17226 0.404319,0.27933 0.66408,0.27933 0.01971,0 0.039,-6.7e-4 0.05829,-0.002 0.02384,0.26184 0.150619,0.49403 0.338723,0.65748 l -0.0142,0.0102 c -0.09481,0.0816 -0.189065,0.18563 -0.278776,0.31708 -0.194165,0.28487 -0.397842,0.42859 -0.534405,0.49914 -0.122781,0.0634 -0.214147,0.0806 -0.242256,0.0846 0.01557,0.0724 0.0237,0.14234 0.0237,0.21925 0,0.13589 -0.02535,0.26568 -0.07166,0.38516 l 0.190856,0.0739 c 0.05512,-0.1422 0.08544,-0.2971 0.08544,-0.45903 0,-0.0186 -4.12e-4,-0.0372 -0.0012,-0.0558 0.189064,-0.0737 0.471149,-0.24158 0.731323,-0.62315 0.214291,-0.31446 0.454603,-0.43959 0.647679,-0.4845 -0.04396,0.10333 -0.0725,0.21551 -0.08199,0.33376 -0.01573,0.19389 0.0212,0.38005 0.09853,0.54416 -0.151589,0.10033 -0.279894,0.24035 -0.367383,0.41437 -0.130916,0.25993 -0.146367,0.54766 -0.06601,0.80522 -0.181225,-0.0284 -0.33033,-0.15244 -0.394546,-0.31916 0.03597,-0.0331 0.05857,-0.0804 0.05857,-0.13314 0,-0.10029 -0.08131,-0.18175 -0.181628,-0.18175 -0.100182,0 -0.181624,0.0815 -0.181624,0.18175 0,0.0528 0.02274,0.10005 0.0587,0.13314 -0.07331,0.19015 -0.257277,0.32519 -0.473216,0.32519 -0.215801,0 -0.399768,-0.13504 -0.473082,-0.32519 0.03611,-0.0331 0.05871,-0.0804 0.05871,-0.13314 0,-0.10029 -0.08131,-0.18175 -0.181624,-0.18175 -0.100323,0 -0.181628,0.0815 -0.181628,0.18175 0,0.0528 0.0226,0.10005 0.05857,0.13314 -0.07317,0.19015 -0.257143,0.32671 -0.473082,0.32519 -0.02467,-1e-4 -0.04796,-0.003 -0.07055,-0.006 0.0014,-0.0879 0.01378,-0.3102 0.09839,-0.52599 z m -0.02784,0.73642 c 0.2497,0 0.468948,-0.12841 0.596142,-0.32272 0.127053,0.19431 0.346576,0.32272 0.596,0.32272 0.2497,0 0.469085,-0.12841 0.596138,-0.32272 0.127194,0.19431 0.346576,0.32272 0.596135,0.32272 0.09909,0 0.193498,-0.0203 0.279329,-0.0571 l -0.127176,0.30787 h -2.688703 l -0.127194,-0.30787 c 0.08571,0.0368 0.18011,0.0571 0.279329,0.0571"
+         style="fill:#d21a38;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.03527778"
+         id="path172"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-20x20-blue.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-20x20-blue.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-lanscape-400x200.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-lanscape-400x200.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-lanscape.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-lanscape.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/logo-gva-lanscape.svg	(revision 46118)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+	<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+	<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+	<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+]>
+<svg version="1.1" id="Capa_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="446.679px" height="214.824px" viewBox="0 0 446.679 214.824" enable-background="new 0 0 446.679 214.824"
+	 xml:space="preserve">
+<path d="M188.613,177.149v-61.437h-5.981l0.145,64.726h21.742c0.105-0.832,0-2.021-0.009-3.289H188.613z"/>
+<path d="M148.275,159.696l7.463-30.943l0.716,1.258l7.866,28.85L148.275,159.696z M158.497,115.957c-0.812-0.098-1.942,0-3.062,0
+	l-11.853,46.89l-4.395,17.617c0.917,0.629,2.041,0,3.066,0l3.885-15.416l0.91-1.68l18.707,0.209l4.905,16.887l5.616-0.211
+	l-13.281-49.087C161.463,126.132,160.138,120.997,158.497,115.957"/>
+<path d="M204.649,33.916v51.169l-27.008-51.169h-2.92V98.64h3.431V48.23c0.202,0,27.011,50.409,27.011,50.409h2.84V33.916
+	C206.984,34.024,205.668,33.916,204.649,33.916"/>
+<path d="M250.329,64.059l-0.105-26.321h1.221c1.59-0.187,3.519,0.214,4.434,0.423c3.374,0.844,5.484,2.539,6.708,5.864
+	c2.053,5.578,2.048,13.956-3.269,17.841C256.863,63.955,253.501,64.797,250.329,64.059 M262.999,63.852
+	c4.596-4.408,6.942-10.492,5.506-17.096c-1.313-5.663-5.643-11.002-11.439-12.486c-0.595-0.152-0.469-0.078-2.037-0.417
+	c-3.077-0.665-6.949-0.312-10.633-0.209l0.202,64.709l4.605,0.11l0.913-0.316V68.784c0.107-0.32,0.415-0.846,0.924-0.638
+	c5.007,9.755,8.277,20.245,12.979,30.112c1.844,0.204,3.979,0.204,5.729,0l-12.672-30.421
+	C258.809,66.262,261.152,65.527,262.999,63.852"/>
+<path d="M139.86,115.713c-4.748,18.728-5.842,23.081-13.119,51.644c-0.197,0.314-0.197-0.105-0.403,0
+	c-5.017-18.379-8.089-31.262-13.342-51.644h-5.609c0,0,9.114,37.911,15.827,65.028c1.896,0,3.014,0.125,3.793,0l16.354-65.028
+	H139.86z"/>
+<path d="M215.397,177.149v-30.871h12.926c0.068-1.273,0-1.613,0-3.297h-12.926v-24.122h14.164c-0.105-0.943,0-2.019,0-3.146h-19.853
+	v64.726h20.436c0.101-0.832,0-1.797,0-3.289H215.397z"/>
+<path d="M266.276,115.713v51.169l-27.004-51.169h-2.922v64.726h3.44v-50.417c0.192,0,26.997,50.417,26.997,50.417h2.846v-64.726
+	C268.615,115.824,267.297,115.713,266.276,115.713"/>
+<path d="M114.822,94.057c3.985,3.986,8.999,5.979,14.713,5.243c4.907-0.944,9.745-4.208,12.196-8.82l-0.029-23.794
+	c-1.872-0.107-3.404,0.045-5.216,0l-0.009,23.642c-1.947,3.462-5.913,5.723-10.005,5.515c-4.291-0.418-8.104-3.113-9.487-7.539
+	c-3.355-9.511-3.211-15.8-3.211-24.199c0-7.642,0.846-15.354,4.119-21.751c2.351-3.78,6.229-5.566,10.521-5.248
+	c4.292,0.42,7.971,4.404,9.094,8.5c0,0,2.473-1.273,3.934-2.023c-3.066-6.518-9.446-10.146-15.686-9.938
+	c-5.21,0.312-9.912,3.461-12.671,8.078c-5.11,9.75-6.436,22.409-4.934,33.914C109.05,82.466,110.125,89.022,114.822,94.057"/>
+<path d="M414.047,34.68C414.024,35.18,414.015,36.405,414.047,34.68"/>
+<path d="M414.13,37.063l9.601-0.105c0.924,0,2.252-0.379,1.944,0.988l0.049,60.693h5.41l-0.046-61.221l0.519-0.355h11.211
+	c0-0.076,0-0.119-0.005-0.19c0.014-0.278,0.022-1.099,0.032-2.957h-28.784c-0.005,0.303-0.009,0.559-0.014,0.764
+	C414.072,34.268,414.1,34.354,414.13,37.063"/>
+<polygon points="348.984,34.543 348.687,33.914 343.581,33.914 343.478,34.021 343.478,98.733 348.889,98.733 "/>
+<path d="M168.155,95.354h-14.75V64.482h12.922c0.066-1.273,0.005-1.619,0-3.299h-12.922v-24.12h14.163c-0.101-0.949,0-2.021,0-3.147
+	h-19.853V98.64h20.439C168.256,97.807,168.155,96.848,168.155,95.354"/>
+<path d="M237.062,95.354h-14.75V64.482h12.922c0.068-1.273,0-1.619,0-3.299h-12.922v-24.12h14.163c-0.105-0.949,0-2.021,0-3.147
+	h-19.857V98.64h20.444C237.157,97.807,237.062,96.848,237.062,95.354"/>
+<polygon points="315.346,115.824 315.346,180.54 320.921,180.499 320.921,115.618 315.451,115.713 "/>
+<path d="M400.584,115.713v51.169l-27.009-51.169h-2.919v64.726h3.431v-50.417c0.199,0,27.006,50.417,27.006,50.417h2.845v-64.726
+	C402.919,115.824,401.603,115.713,400.584,115.713"/>
+<path d="M373.578,37.419l0.519-0.355h11.199c0-0.068,0-0.11-0.005-0.172c0.014-0.267,0.025-1.088,0.034-2.978H356.54
+	c-0.005,0.342-0.01,0.605-0.014,0.828c0.024-0.481,0.059-0.523,0.091,2.321l9.605-0.107c0.913,0,2.238-0.377,1.94,0.99l0.041,60.695
+	h5.41L373.578,37.419z"/>
+<path d="M356.526,34.742C356.503,35.263,356.493,36.292,356.526,34.742"/>
+<path d="M390.268,77.601l7.459-30.943l0.711,1.257l7.866,28.843L390.268,77.601z M418.263,98.158l-13.287-49.091
+	c-1.529-5.034-2.864-10.174-4.499-15.208c-0.816-0.104-1.942,0-3.066,0L385.566,80.75l-4.403,17.614c0.922,0.631,2.048,0,3.066,0
+	l3.885-15.42l0.922-1.672l18.699,0.202l4.903,16.89L418.263,98.158z"/>
+<path d="M418.675,159.495l7.473-30.939l0.711,1.26l7.862,28.84L418.675,159.495z M433.396,130.966
+	c-1.539-5.036-2.867-10.171-4.491-15.21c-0.825-0.099-1.942,0-3.073,0l-11.849,46.888l-4.403,17.623c0.924,0.625,2.049,0,3.068,0
+	l3.895-15.416l0.913-1.68l18.699,0.215l4.903,16.881l5.621-0.217L433.396,130.966z"/>
+<path d="M336.928,159.495l7.461-30.939l0.723,1.26l7.862,28.84L336.928,159.495z M347.149,115.756c-0.816-0.099-1.942,0-3.059,0
+	l-11.862,46.888l-4.395,17.623c0.925,0.625,2.048,0,3.068,0l3.886-15.416l0.912-1.68l18.709,0.215l4.9,16.881l5.615-0.217
+	l-13.275-49.081C350.11,125.93,348.783,120.795,347.149,115.756"/>
+<path d="M306.599,165.896c-0.512,2.406-1.223,4.711-2.855,6.709c-2.463,3.043-6.037,4.299-9.922,3.781
+	c-10.825-2.42-9.605-14.902-11.24-23.922c-0.202-10.695-0.401-21.818,4.809-30.412c2.547-2.728,5.922-4.619,9.808-3.675
+	c3.775,0.734,7.046,4.515,7.968,8.289l3.481-2.099c0.308-0.734-0.413-1.051-0.308-1.676c-1.126-2.205-2.56-4.515-4.807-6.09
+	c-4.289-3.353-11.037-3.452-15.738-0.938c-10.114,7.233-11.344,19.718-11.747,31.884c0.816,9.652,1.729,19.195,7.046,26.949
+	c4.297,4.936,10.43,6.715,16.768,5.25c4.488-1.258,8.575-5.354,10.006-9.961C311.81,167.153,307.818,167.04,306.599,165.896"/>
+<path d="M288.234,46.649l0.711,1.258l7.876,28.841l-16.046,0.839L288.234,46.649z M279.556,81.262l18.696,0.206l4.906,16.888
+	l5.621-0.209l-13.284-49.083c-1.529-5.039-2.866-10.177-4.5-15.211c-0.818-0.104-1.944,0-3.068,0l-11.853,46.887l-4.395,17.616
+	c0.913,0.628,2.048,0,3.066,0l3.886-15.422L279.556,81.262z"/>
+<path d="M336.229,95.354h-15.881V33.916h-5.993l0.147,64.724h21.745C336.353,97.807,336.247,96.621,336.229,95.354"/>
+<path fill="#CD2B2F" d="M49.641,55.375c-1.351-0.505-1.351-0.505-2.706-1.516c4.059-5.03,4.965-12.078,4.059-20.138
+	c2.258-3.017,5.872-5.534,8.578-8.053c-1.808-3.522-3.163-6.544-6.32-9.06c0.449-0.506,1.807-1.006,2.259-1.006
+	c-3.163-2.017-6.316-4.027-9.03-4.528c0-0.512,0.906-1.012,1.355-1.512c-3.155-1.004-9.031-1.004-13.987,0.5
+	c-0.454,0-0.901-0.5-0.901-1.006h-0.457c-0.447,1.006-0.901,2.018-0.901,3.021h-2.257c0-1.515,0-3.021,0.452-4.525V7.041
+	c-1.355,1.519-1.803,2.522-2.255,5.037c-1.81,0.502-3.609,3.525-4.063,7.047c-1.355,0.503-2.709,0.503-3.608,3.523
+	c0,1.01-0.451,3.525,0.899,3.021c0.456-0.502,0.903-1.507,1.808-2.011c1.355-1.512,3.614-2.019,5.417-1.01
+	c0.903,1.01,0.903,2.519,0.447,4.532c0,0.505-0.447,1.509-1.805,2.519c-0.904,1.509,0.454,2.012,0.454,1.509
+	c1.351-0.503,1.351-1.509,1.807-2.011c0.447,4.024-0.456,7.048-4.068,8.552c0.903-0.502,1.362-2.511,0.903-3.521
+	c-2.704,0-3.155-3.021-0.903-5.539c2.262-3.021,0.903-5.031-0.445-3.021c-0.451,1.003-0.905,2.017-2.711,2.519
+	c-1.803,1.512-4.514,1.01-4.961-2.519c-0.451-5.029,2.255-7.55,4.514-9.06c0-2.514,1.352-5.033,3.604-6.546
+	C26.178,5.534,28.884,1.005,33.848,0c-0.901,1.005-0.901,3.019-0.901,4.027c0,0,0.447,0.498,0.447,0
+	c0.903-1.009,2.259-2.016,4.062-2.016c-0.447,1.509-0.899,2.016-0.447,3.522C44.68,5.03,49.193,5.03,55.058,8.048
+	c-0.898,0.512-1.357,1.01-1.807,2.016c4.062,2.015,7.22,4.53,9.931,9.062h-3.163c0.903,1.515,1.805,3.021,2.259,5.037
+	c10.378-7.553,19.857-11.075,27.529-13.599c-1.355,6.046-3.163,9.571,0,13.599c-2.713,5.035-3.163,8.051-1.808,13.085
+	c-2.706,2.52-4.062,5.541-4.509,10.072c-4.066,1-7.674,3.519-9.029,9.06c-4.064,1.008-7.218,2.514-9.478,5.541
+	c-1.351,0-1.802-0.514-3.609-1.012c3.163-4.529,5.869-6.547,10.378-7.552c1.808-4.025,4.064-7.551,9.479-9.564
+	c0-2.516,0.903-5.031,3.614-7.547c-0.908-4.032-1.355-7.556,1.349-11.581c-1.349-2.518-1.805-5.539-0.901-8.561
+	c-9.933,3.524-20.31,9.063-31.134,18.627C55.058,42.283,54.159,48.829,49.641,55.375"/>
+<polygon fill="#CD2B2F" points="25.719,16.611 26.625,19.128 30.235,16.105 30.235,15.092 "/>
+<path fill="#CD2B2F" d="M20.309,31.208l1.351,3.021c-1.803,0.502-0.905,2.017-2.706,3.521c-1.351,1.51-1.808,0.504-3.16,0.504
+	c0,0-0.899,1.006-1.354,2.017l-1.355-3.021c0.908-1.514,1.81-2.011,3.614-2.011c0.904,0,1.352-1.01,1.801-1.517
+	C18.953,32.719,18.953,31.711,20.309,31.208"/>
+<path fill="#CD2B2F" d="M31.132,32.719c0-1.514,0-3.02-0.899-4.027c0.899-1.009,1.81-2.02,1.358-3.022
+	c2.706-0.5,6.32-2.516,6.32-6.544c9.927,2.515,7.216,14.097,2.699,17.622c-4.055,3.522-7.217,6.041-10.827,10.066
+	c-3.605,3.522-7.22,8.56-7.22,14.095h-3.16c0.905-6.038,3.16-10.572,7.674-15.606c4.055-5.032,10.834-10.062,12.63-12.08
+	c2.262-3.522,2.262-7.048,0-9.062c-1.351,2.014-3.151,4.025-5.859,4.531C33.394,30.199,32.946,31.708,31.132,32.719"/>
+<path fill="#CD2B2F" d="M60.922,37.749c0-1.504,0-1.504-0.451-3.021L79.874,24.16l0.453,4.025L60.922,37.749z"/>
+<path fill="#CD2B2F" d="M60.019,43.29c0.449-1.509,0.449-1.509,0.903-3.523l18.502-2.018l-0.454,4.032L60.019,43.29z"/>
+<path fill="#CD2B2F" d="M59.115,45.304l12.637,1.005l-0.899,3.522l-13.089-1.002C58.668,47.319,58.668,46.813,59.115,45.304"/>
+<path fill="#CD2B2F" d="M22.563,47.822c-0.904,1.005-1.352,1.507-1.81,2.514L16.698,44.8l1.801-2.012L22.563,47.822z"/>
+<path fill="#CD2B2F" d="M19.856,51.852c-0.451,1.005-0.451,1.005-0.903,2.51l-4.516-4.025l0.905-3.017L19.856,51.852z"/>
+<path fill="#CD2B2F" d="M18.499,55.877c-0.449,1-0.449,1-0.449,2.521l-4.968-2.019l0.458-3.025L18.499,55.877z"/>
+<path fill="#CD2B2F" d="M41.521,54.87c2.704,2.007,2.25,3.524,1.803,5.53c1.355,0,3.155,0.511,3.61,2.527
+	c-0.455,2.004-1.808,2.511-3.61,2.511c2.257,3.025,6.316,4.032,9.475,1.012c-1.355-0.512-2.714-1.519-2.714-3.522
+	c0.908-1.52,2.714-1.52,4.074-1.52c-0.908-2.014-0.457-3.521,2.249-5.029c2.26,2.016,2.26,3.521,0.904,5.541
+	c1.355,0,2.706,1.008,3.609,3.012c-0.903,1.519-2.254,2.014-4.057,2.525c1.803,3.011,5.412,4.022,8.57,2.014
+	c-1.803-1.007-2.254-2.014-2.254-4.032c1.802-1.005,2.706-1.005,4.509-1.005c-0.904-2.018,0.456-4.033,2.706-3.522l-4.06,12.08
+	c-4.511,1.509-9.024,0.502-12.178-3.521c-4.966,3.014-8.578,2.009-12.638-1.007c-4.066,3.016-7.225,4.021-12.638,1.007
+	c-3.165,4.022-7.672,5.029-12.186,3.521l-3.616-12.08c1.812-0.511,3.616,2.017,2.713,4.021c1.806-0.998,2.704-0.498,4.06,0.507
+	c0,2.019-0.449,3.025-1.805,4.032c2.706,2.009,6.766,0.997,8.128-2.014c-1.362-0.512-2.711-0.512-3.614-2.525
+	c0.449-2.004,2.252-2.516,3.614-3.012c-1.362-2.02-1.808-3.525,0.899-5.541c2.706,1.508,2.254,3.016,1.807,5.029
+	c1.803,0,3.158,0,4.062,1.52c0,2.004-0.904,3.011-2.714,3.522c3.615,3.021,7.223,2.014,9.475-1.012
+	c-1.351,0-2.699-0.507-3.605-2.511c0.906-2.017,2.704-2.527,4.064-2.527C39.26,58.395,39.26,56.877,41.521,54.87"/>
+<path fill="#CD2B2F" d="M18.05,77.522l0.903,3.021c4.964-2.016,13.087-4.035,22.568-4.035c9.022,0,17.146,2.02,22.109,4.035
+	l0.903-3.021c-4.963-2.518-13.538-4.027-23.013-4.027C31.591,73.495,23.467,75.005,18.05,77.522"/>
+<path fill="#CD2B2F" d="M64.983,126.853c0.904,0.502,1.354,1.008,2.26,2.018c-1.355,1.007-2.26,3.016-2.706,5.032
+	c-0.904,2.519,1.351,3.522,2.706,2.021c1.351-1.523,1.801-3.025,3.153-5.046c1.355-1.503,2.711-3.017,4.064-4.024
+	c-0.903-2.514-4.064-4.025-5.417-7.549h3.611c2.707,3.523,4.966,5.537,9.025,8.051c0.454-0.502,0.906-1.508,0.906-2.514
+	c-8.576-7.548-12.19-11.583-18.507-20.138c1.808,0,2.706,0,3.61-1.004c4.965,7.05,9.931,12.584,14.896,16.604
+	c1.803-2.002,2.704-3.522,3.607-5.534c-12.637-10.066-18.048-18.623-26.623-33.222c1.803,0,2.706,0.502,4.509,1.008
+	c7.672,14.601,16.247,24.671,26.623,30.702c-1.353,4.035-3.158,6.548-5.412,9.067c0.449,0.502,0.903,0.502,1.353,1.004
+	c-3.153,8.055-4.963,13.092-9.926,18.628c-1.803-2.014-3.16-4.027-5.42-6.034c0.454-1.012,0.91-1.523,1.81-3.025
+	c1.808,1.502,2.255,2.512,3.61,3.523c1.349-1.012,2.704-3.021,2.704-4.535c0.454-2.009-0.45-3.016-2.255-2.512
+	c-1.349,0-4.959,4.025-5.869,6.549c-0.901,1.502-1.351,2.512-2.254,3.522c-1.801,1.503-4.061,2.015-5.411,0.498
+	c-5.419-5.032-9.026-10.569-13.089-16.614c-2.254,0.502-3.612,0.502-6.316,1.512l-0.903-3.016
+	c-3.614-10.578-5.413-17.624-7.672-28.694c-5.869,4.025-10.378,6.539-16.699,9.559c3.158,7.046,5.417,23.66,3.61,34.735
+	c2.711-1.502,4.965-4.025,7.22-6.041c4.514-4.531,7.669-7.045,13.089-9.559l1.355,3.016c-5.424,2.012-12.186,9.062-18.509,14.604
+	c-2.252,2.015-8.118,3.517-6.766-2.021c3.61-15.1-0.905-29.7-4.516-37.249c2.708-0.506,8.577-2.518,12.188-5.034
+	c0,0,1.355-1.007,1.801-1.007h-8.117l-0.903-11.579c0,0,0.451-0.506,2.706-1.008l0.903,9.562h9.475
+	c0.454-0.498,1.808-1.503,2.716-2.014c2.706-2.012,3.153-0.498,3.153,1.516c1.352,8.55,3.607,18.62,7.672,30.203
+	c0.901-0.512,2.26-0.512,3.16-1.01c-5.419-14.601-6.318-25.173-7.225-41.277h3.161c5.417,20.634,13.087,41.277,25.27,46.818
+	c-0.899,1.506-2.25,2.008-2.706,3.017c-12.181-7.548-18.5-24.664-22.109-38.756c0-0.511,0,0.498-0.454,0
+	c1.805,15.598,7.22,34.731,16.247,42.786C62.277,130.38,63.633,127.86,64.983,126.853"/>
+<path fill="#CD2B2F" d="M54.159,98.158c0-1.508,0-3.017-0.457-4.532h-0.903c0.903-1.505,0.903-2.514,0.903-4.527
+	c-1.355,0-2.259,0.507-3.617,1.004l0.459-4.527c1.355,0.508,1.803,1.005,3.158,1.005c0-1.505,0-2.514-0.451-3.522h4.062
+	c-0.904,1.506-0.904,2.518-1.351,3.522c1.351,0.505,2.254,0,3.609-0.497l-0.459,4.529c-0.896-0.51-1.8-1.007-3.15-1.007
+	c-0.455,1.507,0,2.516,0.446,4.021h-0.901C54.604,95.142,54.159,96.65,54.159,98.158"/>
+<path fill="#CD2B2F" d="M75.362,179.208c-4.062-19.131-15.344-35.232-29.781-52.858l-6.318,5.534L75.362,179.208z"/>
+<path fill="#CD2B2F" d="M42.872,211.427l-37.006-46.82L0,170.651C13.99,188.769,26.625,203.872,42.872,211.427"/>
+<path fill="#CD2B2F" d="M56.408,214.444c3.608,0.504,6.319,0.504,10.378,0l-47.833-62.924l-5.871,6.041L56.408,214.444z"/>
+<path fill="#CD2B2F" d="M74.915,207.896c1.349-3.018,1.803-8.051,1.349-11.074L32.04,139.445l-5.862,5.536L74.915,207.896z"/>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/gva.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/gva.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/gva.html	(revision 46118)
@@ -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.
+
+-->
+<html>
+<body>
+
+<img src="logo-gva-lanscape-400x200.png"><br>
+
+<h2>Generalitat Valenciana</h2>
+<br>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gva/gva.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/gvsig-icon16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/prodevelop-logo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/prodevelop.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/prodevelop.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/prodevelop.html	(revision 46118)
@@ -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.
+
+-->
+<html>
+<body>
+
+<img src="prodevelop-logo.png"><br>
+
+<h2>Prodevelop SL</h2>
+<br>
+<a href="http://www.prodevelop.es">http://www.prodevelop.es</a>
+<br><br>
+<p><b>Prodevelop</b> is a highly specialized firm in the application of
+Information System Technologies and Communications, where we try to
+provide innovative and flexible solutions, designed to satisfy the
+needs and requirements of each of our clients. The sectors in which
+we specialize are: Port, Public Administration and Agriculture mainly.
+Different clients and projects require the adequate solutions to every
+need, so in Prodevelop, we work with the following technologies:
+Geospatial Technology, Java EE Architecture, . NET Architecture,
+Eclipse and UML Frameworks and mobility.</p>
+<p><b>Prodevelop</b> is a founding member of the gvSIG Association.</p>
+<p> &bull; &bull; &bull;</p>
+<p><b>Prodevelop</b>, empresa altamente especializada en la aplicaci�n de
+las Tecnolog�as de la Informaci�n y las Comunicaciones, donde nos
+esforzamos por ofrecer soluciones innovadoras y flexibles, especialmente
+dise�adas seg�n las necesidades y requerimientos de cada uno de nuestros
+clientes. Los sectores en los que estamos especializados son: Portuario,
+Administraci�n P�blica y Agrario principalmente. Prodevelop trabaja
+intensivamente con tecnolog�as geoespaciales basadas en software libre.
+En Prodevelop estamos especializados en seleccionar los proyectos m�s
+estables y maduros de cada tipo de tecnolog�a, para poder dise�ar la
+configuraci�n �ptima para cada proyecto. Para ello colaboramos y nos
+relacionamos con las diferentes comunidades de desarrollo, lo que nos
+permite disponer del conocimiento necesario para abordar cada soluci�n
+con garant�as de �xito.</p>
+<p><b>Prodevelop</b> es miembro fundador de la Asociaci�n gvSIG.</p>
+<br>
+<img src="gvsig-logo1-association.jpg">
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/prodevelop/prodevelop.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/about.htm
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/about.htm	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/about.htm	(revision 46118)
@@ -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.
+
+-->
+<html>
+<body>
+
+<img src="logo-gvsig-association.jpg"><br>
+<h2>gvSIG desktop</h2>
+<p>
+A Geographic Information System (GIS) for desktop environments<br>
+<br>
+Version: %(version) %(state)<br>
+Java version: %(java.version)<br/>
+&copy; Copyright gvSIG Association. All rights reserved.<br>
+<br>
+For more information, contact:<a href="http://www.gvsig.com/contact-info">http://www.gvsig.com/contact-info</a><br>
+Or visit <a href="http://www.gvsig.org">http://www.gvsig.org</a>
+</p>
+<br>
+<br>
+<br>
+<font face="Arial, Helvetica, sans-serif"> 
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 3
+of the License, or (at your option) any later version.
+<br>
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.<br>
+<br>
+You 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.
+<br>
+
+<p>With our most sincere thanks to:</p>
+<ul>
+	<li><a target="blank" href="http://www.gvsig.org/web/community/agradecimientos/traductores/">Traductores</a></li>
+	<li><a target="blank" href="http://www.gvsig.org/web/community/agradecimientos/testers/">Testers</a></li>
+	<li><a target="blank" href="http://www.gvsig.org/web/community/agradecimientos/otras-colaboraciones/">Otras colaboraciones</a></li>
+</ul>
+      
+
+</font>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/about.htm
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/logo-scolab.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/logo-scolab.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/scolab.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/scolab.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/scolab.html	(revision 46118)
@@ -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="logo-scolab.png">
+<br>
+<h2>Software Colaborativo</h2>
+<br>
+<p><b>SCOLAB</b> (<a href="http://www.scolab.es">http://www.scolab.es</a>) es una empresa especializada en
+Sistemas de Informaci&oacute;n Geogr&aacute;fica (SIG) basados en software libre.</p>
+<p><b>SCOLAB</b> (<a href="http://www.scolab.es">http://www.scolab.es</a>) is a company specialized on Geographic
+Information Systems (GIS) based on open source software.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/scolab/scolab.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/logo-gvsig-association.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/logo-gvsig-association.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/eu.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/eu.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/eu.html	(revision 46118)
@@ -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.
+
+-->
+<html>
+<body>
+
+<img src="logo-eu_es-landscape-650x120.png"><br>
+
+<h2>European Union</h2>
+<br>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/eu.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu_es-landscape-650x120.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu_es-landscape-650x120.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu-16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/about/eu/logo-eu.svg	(revision 46118)
@@ -0,0 +1,161 @@
+<?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: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="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg102"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="logoue.svg">
+  <defs
+     id="defs96">
+    <path
+       id="a3Q5djVcX"
+       d="M0 0L1505.92 0L1505.92 1004.37L0 1004.37L0 0Z" />
+    <clipPath
+       id="clipcGGasTEwZ">
+      <use
+         id="use294"
+         opacity="1"
+         xlink:href="#a3Q5djVcX" />
+    </clipPath>
+    <text
+       dominant-baseline="text-before-edge"
+       xml:space="preserve"
+       style="line-height:100%"
+       transform="matrix(1 0 0 1 -446.0142957166676 -77.37481657549222)"
+       alignment-baseline="before-edge"
+       letter-spacing="0"
+       font-style="normal"
+       font-weight="normal"
+       font-family="Open Sans"
+       font-size="158"
+       y="1118.1"
+       x="1194.12"
+       id="a8K2Dfiqe"><tspan
+         id="tspan297"
+         text-anchor="middle"
+         dominant-baseline="text-before-edge"
+         alignment-baseline="before-edge"
+         dy="0em"
+         x="1194.12">UNIÓN EUROPEA</tspan></text>
+    <style
+       id="opensansnormalnormal">
+    @font-face {
+    font-family: &quot;Open Sans&quot;;
+    font-weight: normal;
+    src: url(&quot;data:font/ttf;base64,AAEAAAATAQAABAAwRFNJR54SRB0AAzucAAAVdEdERUYAJgOvAAM3fAAAAB5HUE9TCzcPNwADN5wAAAA4R1NVQg4rPbcAAzfUAAADxk9TLzKhPp7JAAABuAAAAGBjbWFwKasvaAAAELQAAAQaY3Z0IA9NGKQAAB2QAAAAomZwZ21+YbYRAAAU0AAAB7RnYXNwABUAIwADN2wAAAAQZ2x5ZnQ4mUsAACWMAAEvtGhlYWT3duKmAAABPAAAADZoaGVhDcwJcwAAAXQAAAAkaG10eOg1PN0AAAIYAAAOmmtlcm5UKwl+AAFVQAABtjZsb2NhKRTc8QAAHjQAAAdWbWF4cAVDAgoAAAGYAAAAIG5hbWVzsIiFAAMLeAAABcdwb3N0AkPvbAADEUAAACYrcHJlcEO3lqQAAByEAAABCQABAAAAARmaIcf1X18PPPUACQgAAAAAAMk1MYsAAAAAyehMTPua/dUJoghiAAAACQACAAAAAAAAAAEAAAiN/agAAAms+5r+ewmiAAEAAAAAAAAAAAAAAAAAAAOjAAEAAAOqAIoAFgBWAAUAAgAQAC8AXAAAAQ4A+AADAAEAAwS2AZAABQAIBZoFMwAAAR8FmgUzAAAD0QBmAfEIAgILBgYDBQQCAgTgAALvQAAgWwAAACgAAAAAMUFTQwBAACD//QYf/hQAhAiNAlggAAGfAAAAAARIBbYAAAAgAAMEzQDBAAAAAAQUAAACFAAAAiMAmAM1AIUFKwAzBJMAgwaWAGgF1wBxAcUAhQJeAFICXgA9BGoAVgSTAGgB9gA/ApMAVAIhAJgC8AAUBJMAZgSTALwEkwBkBJMAXgSTACsEkwCFBJMAdQSTAF4EkwBoBJMAagIhAJgCIQA/BJMAaASTAHcEkwBoA28AGwcxAHkFEAAABS8AyQUMAH0F1QDJBHMAyQQhAMkF0wB9BecAyQKqAFQCI/9gBOkAyQQnAMkHOQDJBggAyQY7AH0E0QDJBjsAfQTyAMkEZABqBG0AEgXTALoEwwAAB2gAGwSeAAgEewAABJEAUgKiAKYC8AAXAqIAMwRWADEDlv/8BJ4BiQRzAF4E5wCwA88AcwTnAHMEfQBzArYAHQRiACcE6QCwAgYAogIG/5EEMwCwAgYAsAdxALAE6QCwBNUAcwTnALAE5wBzA0QAsAPRAGoC0wAfBOkApAQCAAAGOQAXBDEAJwQIAAIDvgBSAwgAPQRoAe4DCABIBJMAaAIUAAACIwCYBJMAvgSTAD8EkwB7BJMAHwRoAe4EIQB7BJ4BNQaoAGQC1QBGA/oAUgSTAGgCkwBUBqgAZAQA//oDbQB/BJMAaALHADECxwAhBJ4BiQT0ALAFPQBxAiEAmAHRACUCxwBMAwAAQgP6AFAGPQBLBj0ALgY9ABoDbwAzBRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABvz//gUMAH0EcwDJBHMAyQRzAMkEcwDJAqoAPAKqAFQCqv//AqoAPAXHAC8GCADJBjsAfQY7AH0GOwB9BjsAfQY7AH0EkwCFBjsAfQXTALoF0wC6BdMAugXTALoEewAABOMAyQT6ALAEcwBeBHMAXgRzAF4EcwBeBHMAXgRzAF4G3QBeA88AcwR9AHMEfQBzBH0AcwR9AHMCBv/aAgYAqQIG/7MCBv/sBMUAcQTpALAE1QBzBNUAcwTVAHME1QBzBNUAcwSTAGgE1QBzBOkApATpAKQE6QCkBOkApAQIAAIE5wCwBAgAAgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUMAH0DzwBzBQwAfQPPAHMFDAB9A88AcwUMAH0DzwBzBdUAyQTnAHMFxwAvBOcAcwRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMF0wB9BGIAJwXTAH0EYgAnBdMAfQRiACcF0wB9BGIAJwXnAMkE6QCwBecAAATpABQCqv/iAgb/kAKqACoCBv/aAqoAHgIG/8wCqgBUAgYANQKqAFQCBgCwBM0AVAQMAKICI/9gAgb/kQTpAMkEMwCwBCUAsAQnAMkCBgCjBCcAyQIGAFkEJwDJAgYAsAQnAMkCgwCwBC8AHQIX//wGCADJBOkAsAYIAMkE6QCwBggAyQTpALAFcwABBggAyQTpALAGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMHYgB9B4kAcQTyAMkDRACwBPIAyQNEAGAE8gDJA0QAggRkAGoD0QBqBGQAagPRAGoEZABqA9EAagRkAGoD0QBqBG0AEgLTAB8EbQASAtMAHwRtABIC0wAfBdMAugTpAKQF0wC6BOkApAXTALoE6QCkBdMAugTpAKQF0wC6BOkApAXTALoE6QCkB2gAGwY5ABcEewAABAgAAgR7AAAEkQBSA74AUgSRAFIDvgBSBJEAUgO+AFICjwCwBJ4AwwUUAAAEcwBeBvz//gbdAF4GOwB9BNUAcwRkAGoD0QBqBLwBDAS8AQwEsgEtBLwBJQIGAKIEngFvAZMAJQS8AQgEngDnBJ4B/ASeARsFEAAAAiEAmATy/9QGff/UA5j/5AaB/+QFhf/UBoH/5AK2/+kFEAAABS8AyQQpAMkEkwAnBHMAyQSRAFIF5wDJBjsAfQKqAFQE6QDJBNMAAAc5AMkGCADJBG0ASAY7AH0F1QDJBNEAyQSJAEoEbQASBHsAAAZiAGoEngAIBl4AbQZCAFACqgA8BHsAAATjAHMDzQBaBOkAsAK2AKgE3wCkBOMAcwUGALAEGQAKBKQAcQPNAFoD3QBzBOkAsAS8AHMCtgCoBCUAsARG//IE9ACwBFYAAAPNAHEE1QBzBTMAGQTVAKYD2wBzBOcAcwPJABIE3wCkBb4AcwRe/+wGBgCkBi8AcwK2AAkE3wCkBNUAcwTfAKQGLwBzBHMAyQXfABIEKQDJBR0AfQRkAGoCqgBUAqoAPAIj/2AHbwAAB6AAyQXfABIE5QDJBPgAGwXVAMkFEAAABOcAyQUvAMkEKQDJBXcADgRzAMkGwQACBKYASgYZAMsGGQDLBOUAyQWiAAAHOQDJBecAyQY7AH0F1QDJBNEAyQUMAH0EbQASBPgAGwZiAGoEngAIBeUAyQWPAKoIQgDJCEQAyQWBABIG0wDJBSUAyQUKAD0IZgDJBRcAMwRzAF4ExQB3BI0AsANtALAEkwApBH0AcwXjAAQD3QBEBRIAsAUSALAEJwCwBJEAEAXhALAFEgCwBNUAcwT4ALAE5wCwA88AcwO8ACkECAACBbgAcQQxACcFAgCwBN0AnAcfALAHLQCwBY8AKQYpALAEvACwA/AAOQamALAEcQAlBH0AcwTpABQDbQCwA/AAcwPRAGoCBgCiAgb/7AIG/5EGsgAQBxcAsATpABQEJwCwBAgAAgT4ALAENwDJA20AsAdoABsGOQAXB2gAGwY5ABcHaAAbBjkAFwR7AAAECAACBAAAUggAAFIIAABSA0r//AFcABkBXAAZAfYAPwFcABkCzQAZAs0AGQM9ABkEBAB7BBQAewMCAKQGRgCYCZ4AZAHFAIUDJQCFAm8AUgJvAFAD4wCYAQr+eQMnAG0EkwBiBJMARAYbAJoEuAA/BpgAjQQpAHcIJwDJBjUAJQZCAFAE9ABmBj0ARwY9ACAGPQBHBj0AagSmAGYEkwAnBekAyQUMAEwEkwBoBGQAJQWkAHcDEgAMBJMAYgSTAGgEkwBoBJMAaASqAG8EvAAdBLwAHQSeANsCBv+RBAABiQQAAXEEAAGBAscAJwLHABQCxwA7AscAKQLHADkCxwAzAscAIwQAAAAIAAAABAAAAAgAAAACqgAAAgAAAAFWAAAEeQAAAiEAAAGaAAAAzQAAAAAAAAAAAAAIAABUCAAAVAIG/5EBXAAZBPoACgSFAAAGuAASBzkAyQdxALAFEAAABHMAXgZS/t8CqgB1AzMAmAd1AB0HdQAdBj0AfQTfAHMGJQC6BVIApAAA/FMAAP0NAAD8GQAA/QgAAP07BHMAyQYZAMsEfQBzBRIAsAgXAIUGjQAABWYAFwUOABcHWgDJBeMAsAVtAAAEgwAKB14AyQYhALAFxQAUBSMADAfLAMkGxQCwBKgAPwPdABkGXgBtBgYApAY9AH0E1QBzBQIAAAQMAAAFAgAABAwAAAmsAH0IfQBzBo0AfQVCAHMH/gB9BncAcwffAF4GjQAABR0AfQPnAHME3wBqBHUAywSeAPgEngHfBJ4B4QfpACkHpgApBikAyQUlALAE5wAvBLwAFATjAMkE5wCwBDcALwNtABIFIwDJBDMAsAcfAAIGPQAEBKYASgPdAEQFSgDJBFwAsATpAMkERACwBOkALwQjABQFgwAQBOwAKQX4AMkFLwCwBoEAyQXjALAIiQDJBuwAsAY7AH0FHwBzBQwAfQPPAHMEbQAQA7wAKQR7AAAEAgAABHsAAAQCAAAE9AAIBFYAJwbXABAFvAApBYkAqgTfAJwFjwCqBM0AnAWPAMkErgCwBrQAPQVGADMGtAA9BUYAMwKqAFQGwQACBeMABAWDAMkEZACwBaYAAASTABAF0QDJBO4AsAX2AMkFOQCwBY8AqgTdAJwHOwDJBeMAsAKqAFQFEAAABHMAXgUQAAAEcwBeBvz//gbdAF4EcwDJBH0AcwXXAHUEeQBmBdcAdQR5AGYGwQACBeMABASmAEoD3QBEBKoASgPpABsGGQDLBRIAsAYZAMsFEgCwBjsAfQTVAHMGPQB9BNUAcwY9AH0E1QBzBQoAPQPwADkE+AAbBAgAAgT4ABsECAACBPgAGwQIAAIFjwCqBN0AnAQ3AMkDbQCwBtMAyQYpALAENwAvA20AEgT4AAgEUgAnBJ4ABgQxACcE5wCDBOcAcwcxAIMHKwBzBzsATgZqAFAFAABOBC8AUAfZAAAGzwAQCBkAyQdOALAGDAB9BR8AcwWuABAFLQApBKoAbwPNAFoFmgAABJEAEAUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUQAAAEcwAtBRAAAARzAF4FEAAABHMAXgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAXQR9AEoEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMCqgBUAgYAewKqAFQCBgCdBjsAfQTVAHMGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAGEGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMGPQB9BN8AcwY9AH0E3wBzBj0AfQTfAHMGPQB9BN8AcwY9AH0E3wBzBdMAugTpAKQF0wC6BOkApAYlALoFUgCkBiUAugVSAKQGJQC6BVIApAYlALoFUgCkBiUAugVSAKQEewAABAgAAgR7AAAECAACBHsAAAQIAAIE5wBzAAD75QAA/HEAAPuaAAD8cQAA/GgAAPx5AAD8eQAA/HkAAPxoAaQAMQGkABkBpAAZAy0ANASJAHMC9AAtBBQAKQSTAF4EjwAXBJMAhQSTAHUEkwBeBJMAaASTAGoFbQAdBloAXARtABIC0wAfBOcAcQTnAHEE5wBxBOcAcQTnAHECOwDJAjsABQI7ALMCO//HAjsABQI7/6sCO//zAjv/5wI7AFYCOwC7BF4AyQLl/+QCOwDJAAUAyQAFAMkAyQCZALgAAAAAAAEAAwABAAAADAAEBA4AAACwAIAABgAwAEgASQB+AMsAzwEnATIBYQF/AZIBoQGwAfAB/wIbAjcCvALHAskC3QLzAwEDAwMJAw8DIwOKA4wDoQOqA84D0gPWBA0ETwRfBIYEkQS/BM8FEx4BHj8ehR7HHsoe8R75H00gCyAVIB4gIiAmIDAgMyA6IDwgRCBwIHkgfyCkIKcgrCEFIRMhFiEgISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK+wT+///9//8AAAAgAEkASgCgAMwA0AEoATMBYgGSAaABrwHwAfoCGAI3ArwCxgLJAtgC8wMAAwMDCQMPAyMDhAOMA44DowOrA9ED1gQABA4EUARgBIgEkgTABNAeAB4+HoAeoB7IHsse8h9NIAAgEyAXICAgJiAwIDIgOSA8IEQgcCB0IH8goyCnIKshBSETIRYhICEiISYhLiFbIgIiBiIPIhEiGiIeIisiSCJgImQlyvsA/v///P///+MAAP/j/8IAAP/CAAD/wgAA/7AAvwCyAGH/SQAAAAD/lv6F/oT+dv9o/2P/Yv9dAGf/RAAA/c8AAAAA/c3+gv5/AAD9mgAA/gwAAP4JAAD+CeRY5BjjeuR9AADkfQAA4w3iQuHv4e7h7eHq4eHh4OHb4drh0+HL4cjhmeF24XQAAOEY4QvhCeJu4P7g++D04MjgJeAi4BrgGeAS4A/gA9/n39DfzdxpAAADTwJTAAEAAACuAAAAAACqAAAArgAAAMAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADqARAAAAAAAAABGAAAATAAAAFMAAABXAAAAAAAAAAAAAABcAAAAXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAAAAAAAOWA5cDmAOZA5oDmwDrA5wA7QOdAO8DngDxA58A8wOgA48DkAEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUkBSgEkASUBVAFVAVYBVwFYAVkDoQFcAV0BXgFfAWABYQFiAWMBZAFlAWYDogFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgOjAmgBnAGdAZ4BnwGgA6QDpQGjAaQBpQGmAacCaQJqAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AmsB9gH3ApMClAKVApYClwKYApkCmgH4AfkDpgLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcDpwOoA0YDqQIAAgEDbwNwA3EDcgNzA3QDdQIcA40CNAI1Al0CXgAAQEdbWllYVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1MTAvLi0sKCcmJSQjIiEfGBQREA8ODQsKCQgHBgUEAwIBACwgsAFgRbADJSARRmEjRSNhSC0sIEUYaEQtLEUjRmCwIGEgsEZgsAQmI0hILSxFI0YjYbAgYCCwJmGwIGGwBCYjSEgtLEUjRmCwQGEgsGZgsAQmI0hILSxFI0YjYbBAYCCwJmGwQGGwBCYjSEgtLAEQIDwAPC0sIEUjILDNRCMguAFaUVgjILCNRCNZILDtUVgjILBNRCNZILAEJlFYIyCwDUQjWSEhLSwgIEUYaEQgsAFgIEWwRnZoikVgRC0sAbELCkMjQ2UKLSwAsQoLQyNDCy0sALAoI3CxASg+AbAoI3CxAihFOrECAAgNLSwgRbADJUVhZLBQUVhFRBshIVktLEmwDiNELSwgRbAAQ2BELSwBsAZDsAdDZQotLCBpsEBhsACLILEswIqMuBAAYmArDGQjZGFcWLADYVktLIoDRYqKh7ARK7ApI0SwKXrkGC0sRWWwLCNERbArI0QtLEtSWEVEGyEhWS0sS1FYRUQbISFZLSwBsAUlECMgivUAsAFgI+3sLSwBsAUlECMgivUAsAFhI+3sLSwBsAYlEPUA7ewtLLACQ7ABUlghISEhIRtGI0ZgiopGIyBGimCKYbj/gGIjIBAjirEMDIpwRWAgsABQWLABYbj/uosbsEaMWbAQYGgBOlktLCBFsAMlRlJLsBNRW1iwAiVGIGhhsAMlsAMlPyMhOBshEVktLCBFsAMlRlBYsAIlRiBoYbADJbADJT8jITgbIRFZLSwAsAdDsAZDCy0sISEMZCNki7hAAGItLCGwgFFYDGQjZIu4IABiG7IAQC8rWbACYC0sIbDAUVgMZCNki7gVVWIbsgCALytZsAJgLSwMZCNki7hAAGJgIyEtLEtTWIqwBCVJZCNFabBAi2GwgGKwIGFqsA4jRCMQsA72GyEjihIRIDkvWS0sS1NYILADJUlkaSCwBSawBiVJZCNhsIBisCBharAOI0SwBCYQsA72ihCwDiNEsA72sA4jRLAO7RuKsAQmERIgOSMgOS8vWS0sRSNFYCNFYCNFYCN2aBiwgGIgLSywSCstLCBFsABUWLBARCBFsEBhRBshIVktLEWxMC9FI0VhYLABYGlELSxLUViwLyNwsBQjQhshIVktLEtRWCCwAyVFaVNYRBshIVkbISFZLSxFsBRDsABgY7ABYGlELSywL0VELSxFIyBFimBELSxFI0VgRC0sSyNRWLkAM//gsTQgG7MzADQAWURELSywFkNYsAMmRYpYZGawH2AbZLAgYGYgWBshsEBZsAFhWSNYZVmwKSNEIxCwKeAbISEhISFZLSywAkNUWEtTI0tRWlg4GyEhWRshISEhWS0ssBZDWLAEJUVksCBgZiBYGyGwQFmwAWEjWBtlWbApI0SwBSWwCCUIIFgCGwNZsAQlELAFJSBGsAQlI0I8sAQlsAclCLAHJRCwBiUgRrAEJbABYCNCPCBYARsAWbAEJRCwBSWwKeCwKSBFZUSwByUQsAYlsCngsAUlsAglCCBYAhsDWbAFJbADJUNIsAQlsAclCLAGJbADJbABYENIGyFZISEhISEhIS0sArAEJSAgRrAEJSNCsAUlCLADJUVIISEhIS0sArADJSCwBCUIsAIlQ0ghISEtLEUjIEUYILAAUCBYI2UjWSNoILBAUFghsEBZI1hlWYpgRC0sS1MjS1FaWCBFimBEGyEhWS0sS1RYIEWKYEQbISFZLSxLUyNLUVpYOBshIVktLLAAIUtUWDgbISFZLSywAkNUWLBGKxshISEhWS0ssAJDVFiwRysbISEhWS0ssAJDVFiwSCsbISEhIVktLLACQ1RYsEkrGyEhIVktLCCKCCNLU4pLUVpYIzgbISFZLSwAsAIlSbAAU1ggsEA4ERshWS0sAUYjRmAjRmEjIBAgRophuP+AYoqxQECKcEVgaDotLCCKI0lkiiNTWDwbIVktLEtSWH0belktLLASAEsBS1RCLSyxAgBCsSMBiFGxQAGIU1pYuRAAACCIVFiyAgECQ2BCWbEkAYhRWLkgAABAiFRYsgICAkNgQrEkAYhUWLICIAJDYEIASwFLUliyAggCQ2BCWRu5QAAAgIhUWLICBAJDYEJZuUAAAIBjuAEAiFRYsgIIAkNgQlm5QAABAGO4AgCIVFiyAhACQ2BCWbEmAYhRWLlAAAIAY7gEAIhUWLICQAJDYEJZuUAABABjuAgAiFRYsgKAAkNgQllZWVlZWbEAAkNUWEAKBUAIQAlADAINAhuxAQJDVFiyBUAIugEAAAkBALMMAQ0BG7GAAkNSWLIFQAi4AYCxCUAbsgVACLoBgAAJAUBZuUAAAICIVblAAAIAY7gEAIhVWlizDAANARuzDAANAVlZWUJCQkJCLSxFGGgjS1FYIyBFIGSwQFBYfFloimBZRC0ssAAWsAIlsAIlAbABIz4AsAIjPrEBAgYMsAojZUKwCyNCAbABIz8AsAIjP7EBAgYMsAYjZUKwByNCsAEWAS0ssICwAkNQsAGwAkNUW1ghIxCwIBrJG4oQ7VktLLBZKy0sihDlLUCZCSFIIFUgAR5VH0gDVR8eAQ8ePx6vHgNNSyYfTEszH0tGJR8mNBBVJTMkVRkT/x8HBP8fBgP/H0pJMx9JRiUfEzMSVQUBA1UEMwNVHwMBDwM/A68DA0dGGR/rRgEjMyJVHDMbVRYzFVURAQ9VEDMPVQ8PTw8CHw/PDwIPD/8PAgYCAQBVATMAVW8AfwCvAO8ABBAAAYAWAQUBuAGQsVRTKytLuAf/UkuwCVBbsAGIsCVTsAGIsEBRWrAGiLAAVVpbWLEBAY5ZhY2NAEIdS7AyU1iwIB1ZS7BkU1iwEB2xFgBCWXNzKytec3R1KysrKyt0K3N0KysrKysrKysrKysrK3N0KysrGF4AAAAGFAAXAE4FtgAXAHUFtgXNAAAAAAAAAAAAAAAAAAAESAAUAJEAAP/sAAAAAP/sAAAAAP/sAAD+FP/sAAAFtgAT/JT/7f6F/+r+qf/sABj+vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACLAIEA3QCYAI8AjgCZAIgAgQEPAIoAAAAAAB8AHwAfAB8AUQB3AP8BewHsAmoCgwKuAtkDFQNBA18DdAOWA68D8QQaBFsEuQT7BUYFowXFBjQGkQbHBvsHGwdEB2QHuwhBCIAI2wkZCVUJigm4CggKOQpsCpQKwwrhCx8LVgucC9kMLAx5DMwM8A0kDUsNjw2/DeYOEg42Dk8Ocg6TDqkOyA8kD3kPtBAHEFQQlBEoEWYRlBHSEhASJxJ/ErkS+hNPE6MT1hQoFGgUpRTMFRcVRxWAFawV7hYGFksWhRaFFrYXARdTF6EX9RgaGJUYyxlHGZQZzxntGfUafxqVGs0a2RsTG2MbghvBG/EcExxFHGwcpRzdHPMdCB0eHXsdjB2dHa4dvx3RHd0eKx43HkgeWR5qHnwejR6eHq8ewR8ZHyofOx9MH10fbh+AH64gGSAqIDsgTCBeIG8gsSEYISghOCFIIVghaSF6IgUiESIhIjEiQSJSImMidCKFIpci/yMPIx8jLyM/I08jYCOmJAwkHCQsJDwkTSRdJLQkxSTWJOYk9yUHJRMlHyUwJUAlUSVhJXIlgyWUJaQltSXGJc4mOiZLJlsmbCZ8Jo0mniaqJrYmxybXJugm+CcJJxknKic7J0cnVydoJ3knySgiKDMoRChVKGYodyiIKJMoniivKMYo0ijeKO8pACkMKRcpTCldKW4peSmFKZYppimyKb4p+CotKj4qTipaKmUqdiqGKpcq3isnKzgrSCtZK2kreyuMK+8saSx6LIoslSyhLLIswyzULOQs9S0FLREtHS0uLT4tSS1ULWUtdS2yLgQuFS4lLjYuRi5XLmcueS6KLpwurS65LsUu1i7nLvgvCC8aLysvOy9ML10vbi9+L6Uv+DB3MRYxJzE4MUkxWTFkMW8xmDHBMdcx/zIfMlQyezK0MuYzBTNOM18zZzN4M4oznDOtM78z0DPjM+sz8zQSNBo0IjQqNDI0izSTNJs0wTTJNNE1BjUONTI1OjVxNXk1gTXoNfA2PDaQNqI2tDbENtQ25Db1Nwc3azfQOAY4ZzjFORI5TDmmOdI52josOjQ6XzrKOtI7EDtcO6g77TwlPF08uj0QPV89uT3LPdw97D38Pg0+Hz5vPoA+yj7SPto+7D70P1M/pj/lP/ZAB0A3QD9AhkCOQJZA30DnQSxBiUHBQdJCAUI8QkRCTEJUQlxCZEJsQnRCs0K7QsNC9EMrQ1tDlUPbRCNEYUSvRQ9FVkVeRbpGFUY0RnxGhEbKRyNHW0drR5tH0UgUSElIUUh1SH1IhUiqSLJJE0kbSUxJg0m0Se9KNEp9SrhLCEtlS6lLukwlTDVMg0yLTJNMpUytTQZNWE1gTXBNgE2xTdZN/U4OTh5OL05ATlJOZE51ToZOm06wTrhO2k73TxVPHU86T2lPmk+0T/JQWlB6UIpRJFEsUTRRV1F7UYdRoFHTUhhShlL4U25T1FQsVKBU9FT8VUtVYlV5VZBVp1YKVj5WY1aXVq5W0lcyV2JX41gsWD5YUFh9WIlYlVi8WONZAlkhWUBZdVm3WfxaTVpuWtNbJ1snWydbJ1snWydbJ1snWydbJ1snWydbJ1snXHFczFzdXOVdbF2nXgteHF4tXjleRV5XXoxew17TXuNfQF+XX+BgMWA6YENgTGB6YJlgqmC7YMtg22FOYZlh7WI7Ypti/mM/Y4Bj1mQsZI9k9GVpZeBmjGcwZzhnQGedZ/ZoL2hnaHloi2kBaQ1pgGnzap1rO2vRbDpsfWy/bQNtM21gbYZtrG6QbxtvgW/fcDFwgnDXcUNxe3G0cgZyVXKocvtzB3MTc1BzjHPNdBB0WHSsdOZ1HnVddaJ13XYddnN2xndCd7l3xXfReAJ4NHg8eG94rXjxeTB5cXmueex6MHpzer97C3tDe3p76HxLfMF9LX01fUZ9V32sffx+RH6Hfsx/FX9Vf5Z/2oAegG+AvYDFgNaA5oD4gQmBEYEZgSqBOoGLgdqB7IH9gg+CIYIzgkSCkILaguuC+4MNgx6DMINBg0mDUYNjg3SDhoOXg6iDuIPKg9uD7YP+hBCEIYRMhHeEiYSbhKeEsoS+hMqFEIVWhZSFnIX2hmSGyYcnh4GH1IgriHmIxIkTiWaJsInvii2KioqSip6Kqoq2isKK04rkivaLCIsaiyyLPotQi2KLdIuJi52Lr4vBi9OL5Yv3jAmMG4wtjEKMVoxijG6Mf4yQjKGMsYzDjNWM54z5jQuNHY0vjUGNVo1qjXuNjI2YjaSNsI28jc2N3o3wjgKOFI4mjjiOSo5cjm6Og46XjqiOuI7JjtmO6o77jwyPHI8ojzSPQI9Mj12Pbo9/j4+PoI+wj8GP0o/jj/OP/5ALkBeQI5A0kEWQVpBmkHKQppDhkR2RapHCkfqSMpJ7ks2S9ZMYkzuTRJODk62T7pROlJOU3pTmlQmVEZVulXqV9pYClg6WcZaBlpGWopaylseW2JbplvqXDJcdly6XP5dKl1uXZ5d5l4GXk5ebl62XtZe9l86X2gAAAAIAwQAABAoFtgADAAcAFbcEAwUCBAMHAAAvMi8zAS8zLzMxMBMhESE3IREhwQNJ/LdoAnn9hwW2+kpoBOYAAgCY/+MBiQW2AAMADgArQBQDCQkCBAQPEAEBDAIMBk9ZDBYCAwA/PysREgA5GC8REgE5ETMzETMxMAEjAzMDNDMyFhUUBiMiJgFGaTPP4Xg6P0A5NEQBkwQj+rSIRkJARz8AAAIAhQOmArAFtgADAAcAH0ANAAMHBAMECAkGAgcDAwA/M80yERIBOTkRMxEzMTABAyMDIQMjAwE/KGkpAispaCkFtv3wAhD98AIQAAACADMAAAT2BbYAGwAfAJlAVQgfHBUEFAkRDAwJEg8OCwQKExMUFh0eBwQGFwQBABkEGAUFBhQGCiEDGhcDGAoYICEIBAwNDE5ZHAENHwAQERBOWRkVEU8NAU8RAQ0RDREFFxMDCgUALzM/MxI5OS8vXV0RMzMrEQAzMxEzMysRADMzERIBOTkRFzMREjk5ETMREhc5ERIXOREzERIXOTIyETMREhc5MTABAyEVIQMjEyEDIxMhNSETITUhEzMDIRMzAyEVASETIQPVQgEb/s1UiVT+0VKIUP76AR9E/usBK1KLUgExVIZUAQj85QEvQv7RA4P+rIH+UgGu/lIBroEBVH8BtP5MAbT+TH/+rAFUAAMAg/+JBAwGEgAgACYALQBmQDUnESUdFwQEKhQNBSEAABkFEQkFLi8lDQYNTVkDBiQOKg5MWR0qKxwUHE1ZFyoUBhQGFAUWBQAvLxI5OS8vEjkyKxEAMxEzKxEAMxEzKxEAMxESARc5ETMRMzMzMxEzMzMRMzEwARQGBxUjNSImJzUWFjMRJiY1NDY3NTMVFhcHJicRHgIHNCYnETYBFBYXEQYGBAzMt4Fw0kNT2VnNpcungbirNJWanZxKqlmA2f3dWm9jZgHBiLEX6N8jH5wlLwG4QayIg6gStrQFRYM7C/5OMl97ZUhZLP57HgMHTFwpAYMQXQAABQBo/+wGLQXLAAkAFQAhAC0AMQBFQCQAEAUKFigcIiIuKAowEAYyMwMNHysNKw0rMDEGMBgZJRkHEwcAPzM/Mz8/Ejk5Ly8RMxEzERIBFzkRMxEzETMRMzEwExQWMzIRECMiBgUUBiMiJjU0NjMyFgEUFjMyNjU0JiMiBgUUBiMiJjU0NjMyFgEBIwHySlOkpFNKAcqZlIyblZKRnAGmSlRUUFBUVEoBy5mUjpmVko6f/v781ZMDKwQCqqoBVAFSqKrk6e7f4+bu/Nurqaetq6Wlq+Pp7t7j5usDIPpKBbYAAAMAcf/sBdMFzQALABUANQBRQDATFgAdBiMqKy4rLSMOJhkdFgk2NzMMSVkzEw8nLQ4wBS8DGSYDKiogLxIgCUpZIAQAPysAGD8SOS8XORIXOT8rERIBFzkRMxEzETMRMzEwARQWFzY2NTQmIyIGEzI3AQ4CFRQWJTQ2Ny4CNTQ2MzIWFRQGBwE2NjczAgcBIycGBiMiJgGeSFeBZWdWWW+b8Z/+S29cLJv+uYu0VT0kxK+iuoidAZc4QxeoRIkBK+W5dvSW1+0Ek0V9WEt/U01hYPudmgGoRFlmQXWJ+oLIZl9iajmWqKeVa7Vd/nk+p2P+4pT+3bJqXNQAAAEAhQOmAT8FtgADABS3AAMDBAUCAwMAP80REgE5ETMxMAEDIwMBPyhpKQW2/fACEAAAAQBS/rwCIQW2AA0AHEAMBwAKBAAEDg8LJwMDAD8/ERIBOTkRMxEzMTATEBI3MwYCFRQSFyMmAlKbkqKQkZSLoJOaAjEBCQHOrsH+MvTw/ja9qgHGAAABAD3+vAIMBbYADQAcQAwECgcACgAODwoDBCcAPz8REgE5OREzETMxMAEQAgcjNhI1NAInMxYSAgybkqCLlJGQopOaAjH++f46qLwBy/D0Ac7Br/4xAAEAVgJ/BA4GFAAOADBAGwMFBAEHDQoJCwkPEAQKAQ0CDAwNCgcEBggOAAA/xDIXOREzETMRMxESARc5MTABAyUXBRMHAwMnEyU3BQMCkSsBjhr+g/issKCw8v6HHQGHKwYU/nVvth/+ul4Bav6WXgFGH7ZvAYsAAAEAaADjBCkEwwALAChAEwAEBAkFBQwNAwcIB1BZAA8IAQgAL10zKxEAMxESATkRMzMRMzEwASEVIREjESE1IREzAo0BnP5ki/5mAZqLAxeK/lYBqooBrAABAD/++AFtAO4ACAARtQUACQoFAAAvzRESATk5MTAlFwYCByM2EjcBXg8aYjV9G0EN7hdk/vdyaAEyXAABAFQB2QI/AnEAAwARtQIABQQAAQAvMxESATk5MTATNSEVVAHrAdmYmAABAJj/4wGJAPIACwAYQAsGAAAMDQkDT1kJFgA/KxESATkRMzEwNzQ2MzIWFRQGIyImmD05OkFCOTNDakNFRUNBRj8AAAEAFAAAAtsFtgADABO3AgAEBQMDAhIAPz8REgE5OTEwAQEjAQLb/d+mAiEFtvpKBbYAAgBm/+wELQXNAAsAFwAoQBQSAAwGAAYZGAkVS1kJBwMPS1kDGQA/KwAYPysREgE5OREzETMxMAEQAiMiAhEQEjMyEgEQEjMyEhEQAiMiAgQt7/bs9u707vf84ZakppWVpqSWAt3+hf6KAX8BcgF+AXL+fv6S/sH+3QEnATsBOwEl/t8AAQC8AAACywW2AAoAJEAQCQABCAELDAQJBwcBCQYBGAA/PxI5LxI5ERIBOTkRMzMxMCEjETQ3BgYHJwEzAsuiCBU01FgBg4wEEoJ0FS6scgErAAEAZAAABCUFywAZACtAFxgBBxMAEw4BBBobEApLWRAHARhMWQEYAD8rABg/KxESARc5ETMRMzEwISE1AT4CNTQmIyIGByc2MzIWFRQCBwEVIQQl/D8BgbBwOI5+W6NkWMruzuqc1v7AAvCPAYOymJBTdYk8T3Go07KL/vDQ/scIAAABAF7/7AQbBcsAJwBDQCQbABMHBwADFiINBigpAxcWFxZLWRcXCiUlHktZJQcKEUtZChkAPysAGD8rERIAORgvKxESADkREgEXOREzETMxMAEUBgcVFhYVFAQhIiYnNRYWMyARECEjNTMyNjU0JiMiBgcnNjYzMhYD7p2QsKr+3v71dMFbX9dgAXv+XpCSq8iTfmCqbVRa64LV7ARejLIeCBa0ktHhIyyeLzEBKQEKj5eGa3o0RnBHUcMAAAIAKwAABGoFvgAKABIAPEAeEgUJAgILBwMAAwUDExQBBRIFTFkJDwcSEgMHBgMYAD8/EjkvEjkzKxEAMxESARc5ETMzMxEzETMxMAEjESMRITUBMxEzIRE0NyMGBwEEatmf/TkCtrDZ/ogKCDAq/jcBUP6wAVCRA938KQHmj7RgP/12AAEAhf/sBB0FtgAaADpAHw8DGRQIFBcDBBwbABFLWQAABhUVGExZFQYGDEtZBhkAPysAGD8rERIAORgvKxESARc5ETMRMzEwATIEFRQAIyInNRYWMzI2NRAhIgcnEyEVIQM2Ai3nAQn+3/73gkbQZbDD/olfn1Y3Atf9tyVzA33lx+P+/k+gLTOmnQEyHTcCrJn+SRcAAAIAdf/sBC8FywAWACQAREAjGhELISEAAAYRAyYlDAsOHU1ZCw4OFAMUF0tZFBkDCE1ZAwcAPysAGD8rERIAORgvOSsRADMREgEXOREzETMRMzEwExAAITIXFSYjIgIDMzYzMhYVFAIjIgAFMjY1NCYjIgYGFRQWFnUBTwFIcUFNY+v4DAxu7sXj+dTj/vYB646dkpFalllQkwJxAa8BqxOPGf7b/sas7szk/vsBVcizqZGmSoJGZ7JoAAEAXgAABCsFtgAGAB9AEAEFBQACAwcIAwJMWQMGABgAPz8rERIBFzkRMzEwIQEhNSEVAQEdAl784wPN/aoFHZmF+s8AAwBo/+wEKQXLABYAIgAuAE1AKRcPJhQsAx0JCQMGERQPBi8wBhEpICkgS1kpKQwADBpNWQwZACNNWQAHAD8rABg/KxESADkYLysREgA5ORESARc5ETMRMxEzETMxMAEyFhUUBgcWFhUUBiMiJjU0JSYmNTQ2AxQWMzI2NTQmJwYGASIGFRQWFzY2NTQmAkjI6oaTspb+3er8ATKKeOt3p5eVppzClYYBOn2Odp+Pd5EFy7qkbLJJVbt7ttnNvPuMTrVwn737pniGjHphl0dAmwNneGRchEI8ilxldwAAAgBq/+wEJQXLABcAJQBBQCIbESIKCgAABBEDJicOHk1ZCxQODgIUFBhLWRQHAgdNWQIZAD8rABg/KxESADkYLxI5KxESARc5ETMRMxEzMTABECEiJzUWMzISEyMGBiMiJjU0EjMyFhIBIgYVFBYzMjY2NTQmJgQl/Wh0RFBm8PULDDe2csLk/9CV33j+FI+ckJNbmVhSkwNG/KYUjxoBKQEzU1fo0OQBCJn+2wEwuKSQpUqARmmyZgAAAgCY/+MBiQRkAAsAFQAoQBQQBgYMAAAWFw4TT1kOEAkDT1kJFgA/KwAYPysREgE5ETMzETMxMDc0NjMyFhUUBiMiJhE0MzIVFAYjIiaYPTk6QUI5M0N2e0I5M0NqQ0VFQ0FGPwO7h4dBRj8AAgA//vgBhQRkAAgAEgAiQBABDQ0FCQkUEwsQT1kLEAUAAC/NPysREgE5ETMzETMxMCUXBgIHIzYSNwM0MzIVFAYjIiYBXg8aYjV9G0ENFXd7Qjk6Pe4XZP73cmgBMlwC74eHQUZGAAABAGgA8gQpBNkABgAVQAkEAAUBBAcIAwAALy8REgEXOTEwJQE1ARUBAQQp/D8DwfzyAw7yAaZiAd+V/o3+uAAAAgB3AcEEGQPjAAMABwAqQBUHAgQAAgAJCAQFUFkEAQBQWQ8BAQEAL10rABgvKxESATk5ETMRMzEwEzUhFQE1IRV3A6L8XgOiA1qJif5niYkAAAEAaADyBCkE2QAGABVACQUBAgAEBwgGAwAvLxESARc5MTATAQE1ARUBaAMP/PEDwfw/AYkBRgF1lf4hYv5aAAACABv/4wM5BcsAGwAmADlAHSEcGwAHExMAHA4EJygAACQQJB5PWSQWEApJWRAEAD8rABg/KxESADkYLxESARc5ETMRMxEzMTABNTQ2NzY2NTQmIyIGByc2MzIWFRQGBgcGBhUVAzQzMhYVFAYjIiYBIUhiiEeDe0+WYTu9zr/UJ0x+ZUGyeDo/QDk0RAGTNnWXVHN0UmZvJTGHY7yrSW9jblZyXyH+14hGQkBHPwACAHn/Rga4BbQANQA/AEVAIiMuNg47BxQbAAApFA4uBUBBGDg4BD0IEQsRCxErHzIDJisALzM/MxI5OS8vEjkyMzMRMxESARc5ETMRMzMRMxEzMTABFAYGIyImJyMGBiMiJjU0NjMyFhcDFRQzMjY1NAIkIyIEAhUQACEyNxUGIyAAERASJCEyBBIBFDMyExMmIyIGBrhYoGhWdgsIKJVmlqnswESsRRmFW3KU/u+x3/62rgFCAS/S4sD0/pX+b9YBjAEA1wFPt/v2w88SDkhVgpMC2Y7sgmhRV2LNsMz/GRb+Khay16y1ARCTuf6p4f7P/rhWhVQBjwFmAQQBlt+1/rP+pP4BOQEFFLQAAgAAAAAFEAW8AAcADgA5QB4CDgsIAQUAAwAHAwQHBBAPDgJJWQsFDg4EBQMABBIAPzM/EjkvEjkrERIBOTkRMxEzERIXOTEwIQMhAyMBMwEBAyYnBgcDBGC2/ba0rAJCjwI//mWqISMWKawB0f4vBbz6RAJqAcVWfWBz/jsAAwDJAAAEvgW2AA4AFwAgAElAJhMEHQoPGRkOCgQHDgQhIggPGA8YSlkPDw4ADhlKWQ4SABdKWQADAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzETMRMzEwEyEgBBUUBgcVBBEUBCMhEyEyNjU0JiMjEREhMjY1NCYjyQGdASMBBJGLAU3+9+7+AqoBGLSesMD6ATGxs7e7BbauvIKpGQo5/tvE3ANEcYZ7bf2R/d2JkoiAAAABAH3/7ATPBcsAFgAmQBQDDhQJDgMXGBIASVkSBAsGSVkLEwA/KwAYPysREgEXOREzMTABIgAREAAzMjcVBiMgABE0EiQzMhcHJgM78f7pAQ35mcSY3/69/qGpAT/Y5qxIpgUz/r/+6f7h/sc3lTkBiAFp4gFUuFSSTgAAAgDJAAAFWAW2AAgAEQAoQBQOBAkABAASEwUNSlkFAwQOSlkEEgA/KwAYPysREgE5OREzETMxMAEQACEhESEgAAMQACEjETMgAAVY/nf+j/5rAcABVQF6tP7h/uX3zwEwATIC6f6W/oEFtv6G/qcBHgEi+3ABKwAAAQDJAAAD+AW2AAsAOkAfBgoKAQQACAEEDA0GCUlZBgYBAgIFSVkCAwEKSVkBEgA/KwAYPysREgA5GC8rERIBFzkRMxEzMTAhIREhFSERIRUhESED+PzRAy/9ewJe/aIChQW2l/4plv3mAAEAyQAAA/gFtgAJADJAGgYAAAEDCAEDCgsGCUlZBgYBAgIFSVkCAwESAD8/KxESADkYLysREgEXOREzETMxMCEjESEVIREhFSEBc6oDL/17Al79ogW2l/3plwAAAQB9/+wFPQXLABsAOkAfFAgZAgIOGwgEHB0AG0lZAAAFDAwRSVkMBAUXSVkFEwA/KwAYPysREgA5GC8rERIBFzkRMxEzMTABIREGBiMgABE0EiQzMhcHJiMgABEQACEyNxEhA0wB8XTwnv60/o63AVjn6spCxrf+9f7UASEBGJiR/rkC/v05JSYBiwFk5AFXtVaWVP7C/ub+2P7OIwHCAAEAyQAABR8FtgALADNAGQkBAQAIBAQFAAUNDAgDSVkICAUKBgMBBRIAPzM/MxI5LysREgE5OREzETMRMxEzMTAhIxEhESMRMxEhETMFH6r8/qqqAwKqArD9UAW2/ZICbgAAAQBUAAACVgW2AAsAN0AcBQEKAwgAAAMBAwwNCQQGBEpZBgMKAwEDSlkBEgA/KxEAMxg/KxEAMxESARc5ETMRMxEzMTAhITU3ESc1IRUHERcCVv3+rKwCAqysYiMEqiViYiX7ViMAAf9g/n8BaAW2AA0AHUANCwgIDg8JAwAFSVkAIgA/KwAYPxESATkRMzEwAyInNRYzMjY1ETMRFAYMXjZHTWNnqsD+fxuRFHhxBbb6WL7RAAABAMkAAATpBbYACwAqQBUIBAQFBQILCgAFDQwCCAUJBgMBBRIAPzM/MxI5ORESARc5ETMRMzEwISMBBxEjETMRATMBBOnI/euZqqoCl8n9tALFiP3DBbb9KwLV/YUAAQDJAAAD+AW2AAUAH0AOAwAABAYHAQMAA0lZABIAPysAGD8REgE5OREzMTAzETMRIRXJqgKFBbb65JoAAQDJAAAGcQW2ABMAMkAYCAUFBgsODg0GDRQVAQoRAwYLBwMOAAYSAD8zMz8zEhc5ERIBOTkRMxEzETMRMzEwIQEjFhURIxEhATMBMxEjETQ3IwEDUP4QCA6dAQABzwgB0/6qDgj+DAUQmtT8XgW2+0oEtvpKA66ivvryAAEAyQAABT8FtgAQAC5AFQkGBgcBDw8ABwAREgsDBw8IAwEHEgA/Mz8zEjk5ERIBOTkRMxEzETMRMzEwISMBIxYVESMRMwEzJgI3ETMFP8L84QgQncADHQgCDgKfBMvYtPzBBbb7OhsBJT8DRwAAAgB9/+wFvgXNAAsAFwAoQBQSAAwGAAYZGAkVSVkJBAMPSVkDEwA/KwAYPysREgE5OREzETMxMAEQACEgABEQACEgAAEQEjMyEhEQAiMiAgW+/p3+xP69/qEBYAFEATsBYvtz/fHz+Pfy8/0C3f6h/m4BiwFoAWUBif5w/qD+1/7NATIBKgEnATH+zQACAMkAAARoBbYACQASADRAGgoFBQYOAAYAExQKBEpZCgoGBwcSSlkHAwYSAD8/KxESADkYLysREgE5OREzETMRMzEwARQEISMRIxEhIAEzMjY1NCYjIwRo/tH+5qyqAXsCJP0LmeLKvsm+BAze7/3BBbb9G5KhkY4AAAIAff6kBb4FzQAPABsANEAbEAoWAAAEAwoEHB0DDQcNGUlZDQQHE0lZBQcTAD/GKwAYPysREgA5ERIBFzkRMxEzMTABEAIHASMBByAAERAAISAAARASMzISERACIyICBb7izgFc9/7jN/69/qEBYAFEATsBYvtz/fHz+Pfy8/0C3f7n/oxC/pYBSgIBiwFoAWUBif5w/qD+1/7NATIBKgEnATH+zQACAMkAAATPBbYADAAVAEhAJQ0BAQIMCREHCwoKBwkCBBYXCQ0ADQBKWQ0NAgMDFUlZAwMLAhIAPzM/KxESADkYLysREgA5ERIBFzkRMxEzETMRMxEzMTABESMRISAEFRAFASMBJTMyNjU0JiMjAXOqAZEBDQEB/toBjcn+nv7P6bSoq73dAmD9oAW2zs/+3mb9bwJgko+PkYAAAQBq/+wEAgXLACQANEAbHhMMAAAYEwUEJSYMHgMWFhtJWRYEAwlJWQMTAD8rABg/KxESADk5ERIBFzkRMxEzMTABFAQjICc1FhYzMjY1NCYmJyYmNTQ2MzIXByYjIgYVFBYWFxYWBAL+6PD+/Ixa1GiqrD2Pksyv/tHatzW1q4eYOIWJ5q0BhcHYQ6QmLIFzTGFSNEnIoanIUJRMdGdMYVExUrwAAAEAEgAABFoFtgAHACRAEgABBQEDAwgJBwMEA0lZBAMBEgA/PysRADMREgEXOREzMTAhIxEhNSEVIQKLqv4xBEj+MQUfl5cAAAEAuv/sBRkFtgARACVAERABCgcBBxMSEQgDBA1JWQQTAD8rABg/MxESATk5ETMRMzEwAREUACEgADURMxEUFjMyNjURBRn+0v74/vj+36rIwrnIBbb8Tvr+4gEg/AOu/Ea3xMW4A7gAAQAAAAAEwwW2AAoAGkALAQQMCwgDAAQDAxIAPz8zEjkREgE5OTEwATMBIwEzARYXNjcEDLf98aj99LQBUDoiJDoFtvpKBbb8TqOaoqEAAQAbAAAHTAW2ABkAJEAQGQobGhUODgUJGBEKAwEJEgA/Mz8zMxI5OREzERIBOTkxMCEjASYmJwYHASMBMxMWFzY3ATMBFhc2NxMzBcWo/tkVNAEWMP7iqP57tOcwFhs1AQa0ARMwIRM15rQD00HGFISd/DMFtvx5vpq3rwN5/H+bw47MA4UAAAEACAAABJYFtgALACNAEgQGBQsKAAYNDAIIBAkGAwEEEgA/Mz8zEjk5ERIBFzkxMCEjAQEjAQEzAQEzAQSWwf53/nC0Aeb+O7wBawFutf47AoP9fQL8Arr9vQJD/UwAAAEAAAAABHsFtgAIACBADwQFAgUHAwkKAAUBBwMFEgA/PzMSORESARc5ETMxMAEBMwERIxEBMwI9AYa4/his/hm6AtsC2/yB/ckCLwOHAAEAUgAABD8FtgAJACtAFwgBAwcABwQBBAoLBQRJWQUDAQhJWQESAD8rABg/KxESARc5ETMRMzEwISE1ASE1IRUBIQQ//BMDCP0QA7/8+AMehQSYmYX7aQABAKb+vAJvBbYABwAgQA4GAQQAAQAICQUCAwYBJwA/Mz8zERIBOTkRMxEzMTABIREhFSERIQJv/jcByf7fASH+vAb6jfohAAABABcAAALdBbYAAwATtwMBBAUDAwISAD8/ERIBOTkxMBMBIwG6AiOm/eAFtvpKBbYAAAEAM/68AfwFtgAHACBADgMAAQYABggJAAcnAwQDAD8zPzMREgE5OREzETMxMBchESE1IREhMwEh/t8Byf43tgXfjfkGAAABADECJwQjBcEABgAYQAkAAwcIBQIABAIALy8zEjkREgE5OTEwEwEzASMBATEBsmMB3Zj+jP6yAicDmvxmAun9FwAB//z+xQOa/0gAAwARtQAFAQQBAgAvMxEBMxEzMTABITUhA5r8YgOe/sWDAAEBiQTZAxIGIQAJABO2AAQLCgaAAQAvGs0REgE5OTEwASMmJic1MxYWFwMSbkGyKMsgciwE2TTAPxVFtTUAAgBe/+wDzQRaABkAJABHQCUiCAseHhkZEggDJSYBAgseR1kCCwsAFRUPRlkVEAUaRlkFFgAVAD8/KwAYPysREgA5GC85KxEAMxESARc5ETMRMxEzMTAhJyMGBiMiJjUQJTc1NCYjIgcnNjYzMhYVESUyNjU1BwYGFRQWA1IhCFKjeqO5AhO6b3qJrTNRwWHEvf4Om7Gmxq9tnGdJqJsBTBAGRIF7VH8sMq7A/RR1qpljBwdtc1peAAIAsP/sBHUGFAATAB8AREAiChcXDw8MHQMMAyAhDQAMFRIRChEGAAYaRlkGFgAURlkAEAA/KwAYPysREgA5OREzGD8/ERIBOTkRMxEzETMRMzEwATISERACIyImJyMHIxEzERQHMzYXIgYVFBYzMjY1NCYCrtjv8dZrsTwMI3emCAh0zKqWmqqZlpYEWv7Z/vL+8v7VT1KNBhT+hn9lpIvD5+fH39HW0gAAAQBz/+wDiwRcABYAJkAUDwMDFQkDGBcGDUZZBhAAEkZZABYAPysAGD8rERIBFzkRMzEwBSIAERAAMzIWFwcmJiMgERQWMzI3FQYCZu7++wEJ9U+eLTM3gjL+sqOgiZBuFAElAQwBEwEsIheNFh3+VsrYO5M5AAIAc//sBDcGFAASAB8AQkAhHQYXAA4OEQYRICESFQ8AAAEBDAMJCRpGWQkQAxNGWQMWAD8rABg/KxESADk5ETMYPz8REgE5OREzETMzETMxMCUjBiMiAhEQEjMyFzMnJxEzESMlMjY1NTQmIyIGFRQWA5oJc+XX7/DW33cNBwSmh/6eqpmbqpKbmpOnASYBDwEPASyiT00Bvvnsd7nOI+nH48/S1gACAHP/7AQSBFwAEwAaADtAHxgKFwsDAxEKAxwbFwtGWRcXAAYGFEZZBhAADkZZABYAPysAGD8rERIAORgvKxESARc5ETMzETMxMAUiABEQADMyEhUVIRYWMzI3FQYGAyIGByE0JgJ/8/7nAQXczvD9DQW5qLGtWJ2chJ0OAj2MFAEoAQcBCQE4/vHeacHISpQmIQPlrJidpwAAAQAdAAADDgYfABQAOUAdFAwMEwICBwMFAxUWCg9GWQoAAQUHBUZZEwcPAxUAPz8zKxEAMxg/KxESATk5ETMzETMzEjkxMAEhESMRIzU3NRAhMhcHJiMiBhUVIQKe/ummxMQBYVd1K2BEXloBFwPH/DkDx0s8PQGUI4UffYpHAAADACf+FAQxBFwAKgA3AEEAbkA+Kxk4JQwfPQUxEwETBQIqIhwfJRkKQkMcDzUPNUZZCDtHWQoiCCoPCA8IFioqAkdZKg8oP0dZKBAWLkdZFhsAPysAGD8rABg/KxESADk5GC8vERI5OSsrERIAORESARc5ETMRMxEzETMRMzEwARUHFhYVFAYjIicGFRQWMzMyFhUUBCEiJjU0NjcmJjU0NjcmJjU0NjMyFwEUFjMyNjU0JiMjIgYTFBYzMjU0IyIGBDHLHCzcwDErakpawrK//tz+6NfpgHQqOUBFVWvYxlZF/hGWjNHJbpjHcX5agnTz9nV+BEhpGCNxR6HACDhVLSuWj7a/oJJkkhoTUDU8WiojqGy0wxT7AFlcfWtZRWwDPHN27Pd+AAEAsAAABEQGFAAWADNAGQ4MCAgJABYJFhcYDgkSEgRGWRIQCgAACRUAPzM/PysREgA5ERIBOTkRMxEzETMzMTAhETQmIyIGFREjETMRFAczNjYzMhYVEQOeeoKtn6amCAoxtXTJyQLFhoS81v3DBhT+KVU4T1u/0P01AAACAKIAAAFmBd8AAwAPACNAEQoAAAQBARARDQdIWQ0CDwEVAD8/zisREgE5ETMzETMxMCEjETMDNDYzMhYVFAYjIiYBVqamtDgqKDo6KCo4BEgBKTk1Njg4NzcAAAL/kf4UAWYF3wAMABgALEAWEwsLDQgIGRoWEEhZFkAJDwAFRlkAGwA/KwAYPxrOKxESATkRMzMRMzEwEyInNRYzMjY1ETMREAM0NjMyFhUUBiMiJitfO0VDTkmmtDgqKDo6KCo4/hQZhxRVVwT8+xD+vAddOTU2ODg3NwABALAAAAQdBhQAEAA2QBsQDgoKCwsIBgQFCAQREgwAABAQCAgDBwsVAw8APz8zEjkvOREzPxESARc5ETkRMxEzMzEwATY3ATMBASMBBxEjETMRFAcBVCtYAWLF/kQB28n+fX2kpAgCMT1jAXf+Lf2LAgZs/mYGFPzHN3MAAQCwAAABVgYUAAMAFkAJAAEBBAUCAAEVAD8/ERIBOREzMTAhIxEzAVampgYUAAEAsAAABssEXAAjAEZAIxURERIICQAjCRIjAyQlHBYVFRIZBA0ZDUZZHxkQEw8JABIVAD8zMz8/MysRADMREjkYLzMzERIBFzkRMxEzETMRMzEwIRE0JiMiBhURIxE0JiMiBhURIxEzFzM2NjMgFzM2NjMyFhURBiVwdpuUpnB3nJGmhxsIL6tqAQFPCDG6d7q5AsmDg7K5/ZwCyYODu9X9wQRIllBaulZkv9L9NQAAAQCwAAAERARcABQAMUAYABQMCAgJFAkWFQwJEBAERlkQEAoPAAkVAD8zPz8rERIAORESATk5ETMRMxEzMTAhETQmIyIGFREjETMXMzY2MzIWFREDnnqCrKCmhxsIM7hxxsgCxYaEutb9wQRIllFZv9L9NQACAHP/7ARiBFwADAAYAChAFBMADQcABxoZChZGWQoQAxBGWQMWAD8rABg/KxESATk5ETMRMzEwARAAIyImAjUQADMyAAEUFjMyNjU0JiMiBgRi/vLuk+R8AQzu5gEP/L2oo6OpqaWjpgIl/vT+04oBAq0BDAEr/s7++9Lc29PR2dYAAgCw/hQEdQRcABQAIQA/QCAZCwQHBwgfEggSIiMECwAPDxVGWQ8QCQ8IGwAcRlkAFgA/KwAYPz8/KxESADk5ERIBOTkRMxEzETMzMzEwBSImJyMWFREjETMXMzY2MzISERACAyIGBxUUFjMyNjU0JgKua7E8DAymhxcIQKpu2u3x7qiWApqqjqGhFE9SYFb+PQY0llpQ/tb+8/7y/tUD47rLJefH5srN2wACAHP+FAQ3BFwADAAfAERAIgoQHRYDGhoZEBkgIRobFw8dHh4WDRMTB0ZZExANAEZZDRYAPysAGD8rERIAOTkRMxg/PxESATk5ETMRMzMzETMxMCUyNjc1NCYjIgYVFBYXIgIREBIzMhczNzMRIxE0NyMGAk6mmAWcqZKbmX3U7vDW4XkJGIOmCw1zd7LTJebK48/P2YsBKgELAQ0BLqqW+cwB1WRGpwABALAAAAMnBFwAEAAqQBQNCQkKCgIREgsPDQAKFQAFRlkAEAA/KwAYPxI5PxESATk5ETMRMzEwATIXByYjIgYVESMRMxczNjYCpEk6F0Q0hb2miRMIPawEXAyaD9ih/bQESMtrdAABAGr/7ANzBFwAJAA2QBweEwwAABgFEwQlJgweAxYWG0ZZFhAGAwlGWQMWAD8rABgvPysREgA5ORESARc5ETMRMzEwARQGIyInNRYWMzI2NTQmJy4CNTQ2MzIXByYjIgYVFBYWFxYWA3Pkztp6T7VUgoxvoZmBP9q+sak7pYZ2eC1kjsOJASuZpkWaKC5TVUBbPjlVbEuGm0iHREpBLD44NUeQAAEAH//sAqgFRgAWADRAGxAUFAkLCRIDBBgXChMQE0dZDkAQDwcARlkHFgA/KwAYPxrNKxEAMxESARc5ETMRMzEwJTI2NxUGBiMgEREjNTc3MxUhFSERFBYCEixSGBtpKv7CnZ1GYAE+/sJedQ0Hfw0RAU8CjFBF6v6B/XtjagAAAQCk/+wEOQRIABQANEAZARMHDAwKEwoVFgwNDRAIFA8QBEZZEBYLFQA/PysAGD8zEjkRMxESATk5ETMRMxEzMTABERQWMzI2NREzESMnIwYGIyImNREBTHqCrJ+miRgJM7V0yMcESP05hoS81QJA+7iTUVa+0QLNAAABAAAAAAQCBEgACwAYQAoBCgwNBQkBDwAVAD8/MzkREgE5OTEwIQEzExYXMzYSEzMBAaD+YLLsUA4IC3XMsv5gBEj9duRENQFNAjD7uAABABcAAAYjBEgAHAAsQBQJGx0eFxYODQMEDQQIGhIJDwAIFQA/Mz8zMxI5OREzETMzMxESATk5MTAhAyYnIwYHAyMBMxISFzM2NjcTMxMWFzM2NhMzAQQvyRM0CCgez8D+1a5qbwgICzESybTEOBQIBCO/rP7RAoM70a9f/X8ESP5j/lBLObU1AnX9i6x1JJYC3Pu4AAABACcAAAQIBEgACwAiQBEHBQYAAQUMDQkDAQgLFQQBDwA/Mz8zEjk5ERIBFzkxMAEBMwEBMwEBIwEBIwG4/oO9ASEBILv+gwGRvP7N/sq8AjECF/5cAaT96f3PAbz+RAABAAL+FAQGBEgAFQAkQBIJDwADFhcEDQANEkZZDRsIAA8APzI/KxESADkREgEXOTEwEzMTFhczNjYTMwEGBiMiJzUWMzI3NwKy8E8TCA1T5rL+KUa7iExKN0SrST0ESP2P1l8z9wJ8+yC5mxGFDMCcAAABAFIAAANtBEgACQArQBcIAQMHAAcEAQQKCwUER1kFDwEIR1kBFQA/KwAYPysREgEXOREzETMxMCEhNQEhNSEVASEDbfzlAlb9zwLn/bICXXEDVoGB/LoAAQA9/rwCwQW2ABwALEAVGRoaCxcAAA8HFAMDBwsDHR4TAwQnAD8/ERIBFzkRMxEzMxEzETMRMzEwJRQWFxUmJjURNCYjNTY2NRE0NjMVBhURFAcVFhUB23VxvtB+eIJ02Lbm398MZlwCjAKqmgEvaFmNAlxgATKbrIsGwf7Z1ycMJ9cAAQHu/hACewYUAAMAFkAJAgMDBAUDGwAAAD8/ERIBOREzMTABMxEjAe6NjQYU9/wAAQBI/rwCywW2AB0ALEAVFQUKEhICGQAdHQ4OGQUDHh8VJwYDAD8/ERIBFzkRMxEzETMzETMRMzEwASY1ETQnNTIWFREUFhcVIgYVERQGBzU2NjURNDY3Agrf47jTdoJ6fs2+b3RucQI/J9cBJ8EGi66Z/s5hWwKNWWj+0ZmrAowCXGYBKXJ4FAAAAQBoAlAEKQNUABcAJEARAw8YGRIMUFkDEg8GBgBQWQYALysAEBjEL8QrERIBOTkxMAEiBgc1NjMyFhcWFjMyNjcVBiMiJicmJgFSNX82ZJBEcVlCYi82gDZmjkh+SEtaAslDNpdtHCYcG0A5lm4hICAYAAACAJj+iwGJBF4AAwAOACtAFAIEBAMJCQ8QAAADDAwGT1kMEAMiAD8/KxESADkYLxESATkRMzMRMzEwEzMTIxMUIyImNTQ2MzIW22kzz+F5PDw/OTNGAqz73wVMh0dAP0hAAAEAvv/sA9sFywAbAD5AHhYIDQMDCgQAEBAECAMcHRkFAhMKDQINAg0ECwcEGQA/PxI5OS8vETMzETMzERIBFzkRMxEzMxEzETMxMCUGBxUjNSYCNRAlNTMVFhYXByYjIgYVFBYzMjcDy2mThcvBAYyHS44xMYVtrKKfp42O8DYGyM4gARH6Afw+rKQDIReMM9PZ1Ms7AAEAPwAABEQFyQAdAEhAJhgTCQ0NGhYRAgsWEwUeHwwYGRhOWQkZGRMAExBMWRMYAAVLWQAHAD8rABg/KxESADkYLzMrEQAzERIBFzkRMzMRMxEzMTABMhcHJiMiBhURIRUhFRQGByEVITU2NTUjNTMRNDYCqr6qPZqPe30Bpv5aQUoDG/v7zcbG4AXJVIVNfIz+2X/dZIgsmo0v9N9/ATyyzQAAAgB7AQYEFwSgABsAJwAgQA0cACIOAA4oKR8VFSUHAC8zMy8zERIBOTkRMxEzMTATNDcnNxc2MzIXNxcHFhUUBxcHJwYjIicHJzcmNxQWMzI2NTQmIyIGuEqHXodogn9miV+GSkqDXIlmf4Zkh1yFSoGddHSeoHJ0nQLTemuMXIVJSYVcinF2g2eHXIVHSYVciGt8cKCfcXKipAAAAQAfAAAEcQW2ABYAVkAuEg4HCwsQDAUJAgkDDBQOFQcXGAoODgcPBhISAwATFQ8THxMCDxMPEwwBFQYMGAA/PzMSOTkvL10REjkyMhEzETMzETMREgEXOREzETMzETMRMzEwAQEzASEVIRUhFSERIxEhNSE1ITUhATMCSAF7rv5gAQb+wwE9/sOk/sQBPP7EAQD+ZbIC3wLX/P5/qn/+9AEMf6p/AwIAAgHu/hACewYUAAMABwAkQBACBgYDBwcICQQDBAMHGwAAAD8/OTkvLxESATkRMzMRMzEwATMRIxEzESMB7o2NjY0GFPz4/g389wACAHv/+AOWBh0AMQA9AENAJjIAEwYqHjgZGR4MBgAjBj4/FQM7NhwtBiEJISdHWSEVCRBHWQkAAD8rABg/KxESABc5ERIBFzkRMxEzETMRMzEwEzQ2NyYmNTQ2MzIWFwcmJiMiBhUUFhcWFhUUBgcWFRQGIyInNRYWMzI2NTQmJicuAjcUFhcXNjU0JicGBotWTkpUz8Ven2E1YodMdHR7mrqWUkqZ6tTagE7CUoaNMGxzjoZCkoSnMYmTuURVAylWiSUob1V5ix0ngycbO0A8VDdEl2tajSlRkoyZQZQlLUxHLjo6KzRacmJNaT0TUG9TcDkTZAACATUFDgNoBdMACwAXAB5ADAYADBIAEhgZDwMVCQAvM80yERIBOTkRMxEzMTABNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYBNTUlJjc3JiU1AX01JSU3NyUlNQVxNC4uNDIxMTI0Li40MjExAAADAGT/7AZEBcsAFgAmADYARkAnJxcDDy8fHxQJDxcFNzgGDAASDwwfDAIAEhASAgwSDBIbKyMTMxsEAD8zPzMSOTkvL11dETMRMxESARc5ETMRMxEzMTABIgYVFBYzMjcVBgYjIiY1NDYzMhcHJgE0EiQzMgQSFRQCBCMiJAI3FBIEMzIkEjU0AiQjIgQCA319h3+DVn0wZUbC0N2/gHY6bPyXyAFeysgBXsrC/qLQz/6iw2muAS2srgEqr67+17Cu/tavBCOumqiiLXwUHPHY0fY8djP+uMgBXsrI/qLKxf6m0M8BWsat/tOtrgEpsK4BKq+u/tcAAAIARgMUAnEFxwAWAB8AN0AcFwYbCgEBFhYQBgMgIRwKChIZFgADEAMCAw0SHwA/M9RdxDMSOS8zERIBFzkRMxEzMxEzMTABJwYjIiY1NDY3NzU0IyIHJzYzMhYVESUUMzI1NQcGBgIUGFyMX2+apXWUZGgrcoWCif5QcMlicGcDIVRhY2ZmaQYEJ4UzYDhpef48vGS0MQQEOQACAFIAdQOqA74ABgANAClAEwMGCg0CBAsJCQQNBgQODwwFCAEALzMvMxESARc5ETMRMxEzETMxMBMBFwEBBwElARcBAQcBUgFWd/7fASF3/qoBiwFYdf7hAR91/qgCJwGXRf6i/qFHAZcbAZdF/qL+oUcBlwAAAQBoAQgEKQMXAAUAG0AMAgEEAQYHBQRQWQUCAC8vKxESATk5ETMxMAERIxEhNQQpifzIAxf98QGFigD//wBUAdkCPwJxAgYAEAAAAAQAZP/sBkQFywAIABYAJgA2AF1AMycXABEREgQJLx8fDQkMEhcGNzgMEBAAAA4TDhIIEw8SHxICABMQEwISExITGysjEzMbBAA/Mz8zEjk5Ly9dXREzETMREjkvMxEzERIBFzkRMxEzETMRMxEzMTABMzI2NTQmIyMFFAYHEyMDIxEjESEyFgE0EiQzMgQSFRQCBCMiJAI3FBIEMzIkEjU0AiQjIgQCAtNsUGFWXWoBslVN7qjPh5QBBaab+9/IAV7KyAFeysL+otDP/qLDaa4BLayuASqvrv7XsK7+1q8C+lNAS0GIUHse/nUBYv6eA3uC/sXIAV7KyP6iysX+ptDPAVrGrf7Tra4BKbCuASqvrv7XAAH/+gYUBAYGkwADABG1AAUBBAECAC8zEQEzETMxMAEhNSEEBvv0BAwGFH8AAgB/A1wC7gXLAAwAGAAhQA4NABMGAAYZGhAKwBYDBAA/MxrMMhESATk5ETMRMzEwEzQ2MzIWFRQGBiMiJjcUFjMyNjU0JiMiBn+1goK2UpJUgrVzdVFQc3FSU3MEk4K2tYNUj1S0g1JycVNUcXIA//8AaAABBCkEwwImAA4AAAAHAisAAP10AAEAMQJKAo0FyQAYACNAEQcTFwEBDhMABBoZChAfFwEgAD8zPzMREgEXOREzETMxMAEhNTc+AjU0JiMiBgcnNjMyFhUUBgcHIQKN/aTsWVIhUD80YkVCg5iEk1mTrgG4Akpo5lZhTDZERSYyWG+CcFCXiqUAAQAhAjkCjQXJACMAOUAiDwUFAAMSHgoGJCUSXRNtEwJMEwELExsTAhMTCBohHw0IIQA/Mz8zEjkvXV1dMxESARc5ETMxMAEUBgcWFRQGIyInNRYzMjU0IyM1MzI2NTQmIyIGByc2NjMyFgJzUkSwuKiYdJN70+d1d2djUENCcDhFP4xeiJ0E51BnFy+igI84e0SikWtPRD1EKyNaLTZ3AAEBiQTZAxIGIQAJABO2CQQKCwSACQAvGs0REgE5OTEwATY2NzMVBgYHIwGJMG8gyiyuQG8E8j6wQRVBvjQAAQCw/hQERARIABYANUAaBQoKCBAAExMUCBQYFwYVDxQbDQJGWQ0WCRUAPz8rABg/PzMREgE5OREzETMzETMRMzEwARAzMjY1ETMRIycjBiMiJyMWFREjETMBVv6rn6aIGgpv5ZZYCgqmpgF9/vq91AJA+7iTp1xUoP7ABjQAAQBx/vwEYAYUAA8AJ0ASBAUBAAAFCwMQEQgIBQMPBQEFAC8zPzMSOS8REgEXOREzETMxMAEjESMRIxEGIyImNRA2MyEEYHLVcz5U2Mva6AIt/vwGsPlQAzMS+vsBBP4AAQCYAkwBiQNaAAsAF0AKBgAADQwDCU9ZAwAvKxESATkRMzEwEzQ2MzIWFRQGIyImmD44OkFCOTNDAtNCRUVCQUY/AAABACX+FAG0AAAAEgAkQBARDgsAAA4FAxMUDhERCAMQAC/MMjkvMxESARc5ETMRMzEwARQGIyInNRYzMjY1NCYnNzMHFgG0mZYzLS07T1FPbVhuN7T+32FqCWoIKDYrNRGycycAAQBMAkoB4QW2AAoAIEAOAgADAwoMCwkJAyAGAB4APzI/OS8REgE5OREzMzEwATMRIxE0NwYGBycBUo+FBhY2h0MFtvyUAkNbWhYtX2AAAgBCAxQCvgXHAAsAFwAlQBIMBhIABgAYGQ8AAxADAgMVCR8APzPEXTIREgE5OREzETMxMAEUBiMiJjU0NjMyFgUUFjMyNjU0JiMiBgK+q5aSqaiXmKX9/ltoaVxcaWdcBG+kt7qho7W2onp6enp7dnYAAgBQAHUDqAO+AAYADQAjQBELCQQCAAMHAgoJBg4PDAUIAQAvMy8zERIBFzkRMxEzMTABAScBATcBBQEnAQE3AQOo/qh1AR/+4XUBWP51/qh1AR/+4XUBWAIM/mlHAV8BXkX+aRv+aUcBXwFeRf5p//8ASwAABdEFtgAnAhcCgwAAACYAe/8AAQcCPAMd/bcACbMDAhIYAD81NQD//wAuAAAF2wW2ACcCFwI/AAAAJgB74gABBwB0A079twAHsgIQGAA/NQD//wAaAAAGIQXJACYAdfkAACcCFwLfAAABBwI8A239twAJswMCKxgAPzU1AAACADP+dwNUBF4AHQAoAEFAIggUHiMBHA8cIxQEKSoAHQEMAx0dESYmIE9ZJhARC0lZESMAPysAGD8rERIAORgvX15dERIBFzkRMxEzETMxMAEVFAYHDgIVFBYzMjY3FwYjIiY1ND4CNzY2NTUTFCMiJjU0NjMyFgJOS2F5PRmEelCWYjvFxr7YI0BZNmVBtHk7PkI3M0YCrDN6lFRqS004ZHEmMIdguqpGaVlSL1h0XR8BK4dFQkBHQP//AAAAAAUQB3MCJgAkAAABBwBD/8IBUgAIswIQBSYAKzX//wAAAAAFEAdzAiYAJAAAAQcAdgCFAVIACLMCGAUmACs1//8AAAAABRAHcwImACQAAAEHAUsAIwFSAAizAh0FJgArNf//AAAAAAUQBy8CJgAkAAABBwFSAAQBUgAIswIYBSYAKzX//wAAAAAFEAclAiYAJAAAAQcAagA3AVIACrQDAiQFJgArNTX//wAAAAAFEAcGAiYAJAAAAAcBUAA5AIEAAv/+AAAGgQW2AA8AEwBOQCwKDg4RAQAIDAEQBQUVBRQJEwYTSVkQA0lZCg1JWRAKEAoBBgMFEgEOSVkBEgA/KwAYPz8SOTkvLysrKxEAMxEBMxESFzkRMzMRMzEwISERIQMjASEVIREhFSERIQEhESMGgf0S/f7jsAK6A8n9vAId/eMCRPtUAb52AdH+LwW2l/4plv3mAdICtQD//wB9/hQEzwXLAiYAJgAAAAcAegICAAD//wDJAAAD+AdzAiYAKAAAAQcAQ/+3AVIACLMBDQUmACs1//8AyQAAA/gHcwImACgAAAEHAHYAPwFSAAizARUFJgArNf//AMkAAAP4B3MCJgAoAAABBwFL//sBUgAIswEaBSYAKzX//wDJAAAD+AclAiYAKAAAAQcAagASAVIACrQCASEFJgArNTX//wA8AAACVgdzAiYALAAAAQcAQ/6zAVIACLMBDQUmACs1//8AVAAAAnMHcwImACwAAAEHAHb/YQFSAAizARUFJgArNf////8AAAKhB3MCJgAsAAABBwFL/vMBUgAIswEaBSYAKzX//wA8AAACbwclAiYALAAAAQcAav8HAVIACrQCASEFJgArNTUAAgAvAAAFSAW2AAwAFwBXQDIRFRUIBA0AABMEBgQYGRQGBwZJWREPBz8HrwfPB98HBQsDBwcECQkQSlkJAwQVSlkEEgA/KwAYPysREgA5GC9fXl0zKxEAMxESARc5ETMRMzMRMzEwARAAISERIzUzESEgAAMQISMRIRUhETMgBUj+d/6P/nuamgGyAVEBfLX9x+cBe/6FvgJiAun+lv6BAomWApf+if6kAkD9/Jb+Cv//AMkAAAU/By8CJgAxAAABBwFSAJMBUgAIswEaBSYAKzX//wB9/+wFvgdzAiYAMgAAAQcAQwB5AVIACLMCGQUmACs1//8Aff/sBb4HcwImADIAAAEHAHYBCgFSAAizAiEFJgArNf//AH3/7AW+B3MCJgAyAAABBwFLALQBUgAIswImBSYAKzX//wB9/+wFvgcvAiYAMgAAAQcBUgCaAVIACLMCIQUmACs1//8Aff/sBb4HJQImADIAAAEHAGoA1QFSAAq0AwItBSYAKzU1AAEAhQEQBAwEmAALABlACQcJAwEJAQwNCAAZLxESATk5ETMRMzEwARcBAQcBAScBATcBA6xg/qABXmD+nv6kZQFe/qBkAWEEmGP+nv6gYwFf/qFjAWABYGX+nQAAAwB9/8MFvgX2ABMAGwAjAE5ALBYfFx4EHBQcChQAABIPBQgKBiQlFh4hGQ0hSVkPEggFBAMQDQQDGUlZBgMTAD/GKwAYP8YSFzkrERIAOTkREgEXOREzETMREhc5MTABEAAhIicHJzcmERAAITIXNxcHFgMQJwEWMzISARAXASYjIgIFvv6d/sTrlGV4bLIBYAFE0Z1heGrAtG79YHOw8/j8J2UCnWqo8/0C3f6h/m5kjU+axgFtAWUBiV6HUJTK/pUBEJr8TFIBMgEq/vqaA69J/s0A//8Auv/sBRkHcwImADgAAAEHAEMARgFSAAizARMFJgArNf//ALr/7AUZB3MCJgA4AAABBwB2AM8BUgAIswEbBSYAKzX//wC6/+wFGQdzAiYAOAAAAQcBSwB9AVIACLMBIAUmACs1//8Auv/sBRkHJQImADgAAAEHAGoAmAFSAAq0AgEnBSYAKzU1//8AAAAABHsHcwImADwAAAEHAHYAMQFSAAizARIFJgArNQACAMkAAAR5BbYADAAVADZAHA0JBQUGEQAGABYXDQRKWQkVSlkNCQ0JBgcDBhIAPz8SOTkvLysrERIBOTkRMxEzETMzMTABFAQhIxEjETMRMyAEATMyNjU0JiMjBHn+0f7huKqq1wEZARb8+qjiyr7KzAMQ4+7+wQW2/wDP/eqPpJWKAAABALD/7AScBh8AMABBQCIpKgUdIwAXDAwAHREqBTEyEhIqLi4mRlkuACoVDxVGWQ8WAD8rABg/PysREgA5GC8REgEXOREzETMRMxEzMTABFAcGBhUUFhYXFhYVFAYjIic1FhYzMjU0JicmJjU0Njc2NjU0JiMgFREjETQ2MzIWBBmPWDgbR06MZsKzvGs/nEjXU25/YEVHS0CIf/7sptzezuEE8odzRkMhICo5M1+dZaCrRZonL7ZLa0ZSe1Q/ajU5WjVQVd/7TASysrud//8AXv/sA80GIQImAEQAAAEGAEOOAAAIswImESYAKzX//wBe/+wDzQYhAiYARAAAAQYAdisAAAizAi4RJgArNf//AF7/7APNBiECJgBEAAABBgFL2AAACLMCMxEmACs1//8AXv/sA80F3QImAEQAAAEGAVK9AAAIswIuESYAKzX//wBe/+wDzQXTAiYARAAAAQYAauIAAAq0AwI6ESYAKzU1//8AXv/sA80GhQImAEQAAAEGAVD3AAAKtAMCKBEmACs1NQADAF7/7AZzBFwAKQA0ADsAYUAzKgAkETA4GRkEMDkYGB8wCwAFPD0bLSctRlkZMQQxR1k4JCcRBAQOIicWNQgOCEZZFA4QAD8zKxEAMxg/MxI5LzkSOTMrEQAzKxEAMxESARc5ETMRMzMRMxI5OREzMTATNDY3NzU0JiMiByc2NjMyFhc2NjMyEhUVIRIhMjY3FQYGIyAnBgYjIiY3FBYzMjY1NQcGBgEiBgchNCZe+P64dHeQozRKx2KCpSk1q27A6P1DCAE6W51UVpVl/t99UcWGo7mua1iRqJ66pAO9eYsLAgeAAS+hswgGRIF7VH8pNVdfWGD+9d5r/nUjJ5QmIel/aqqXX1mpmmMHCG0CMqaenKgA//8Ac/4UA4sEXAImAEYAAAAHAHoBRgAA//8Ac//sBBIGIQImAEgAAAEGAEO1AAAIswIcESYAKzX//wBz/+wEEgYhAiYASAAAAQYAdk4AAAizAiQRJgArNf//AHP/7AQSBiECJgBIAAABBgFL9wAACLMCKREmACs1//8Ac//sBBIF0wImAEgAAAEGAGoKAAAKtAMCMBEmACs1Nf///9oAAAFjBiECJgDzAAABBwBD/lEAAAAIswEFESYAKzX//wCpAAACMgYhAiYA8wAAAQcAdv8gAAAACLMBDREmACs1////swAAAlUGIQImAPMAAAEHAUv+pwAAAAizARIRJgArNf///+wAAAIfBdMCJgDzAAABBwBq/rcAAAAKtAIBGREmACs1NQACAHH/7ARiBiEAGwAmAEpAKyEGDBwcAAAYGRYOERMQBgknKAkfRlkLAxYRGQ4PBRQJCQMXFAEDJEZZAxYAPysAGD8zEjkvEhc5EjkrERIBFzkRMxEzETMxMAEQACMiADU0ADMyFzcmJwUnNyYnNxYXNxcHFhIDNCYjIBEUFjMyNgRi/vv33v7pAQfc4mQIOc3+8UnpXF5FnGbuTM+Ypai0nP6vr6KvoQIz/uf+0gEN4uYBBnkE1r+bbIU+MXVJS4prd4/+cv7ok6r+mKe3yQD//wCwAAAERAXdAiYAUQAAAQYBUg4AAAizAR4RJgArNf//AHP/7ARiBiECJgBSAAABBgBD1AAACLMCGhEmACs1//8Ac//sBGIGIQImAFIAAAEGAHZWAAAIswIiESYAKzX//wBz/+wEYgYhAiYAUgAAAQYBSw4AAAizAicRJgArNf//AHP/7ARiBd0CJgBSAAABBgFS8QAACLMCIhEmACs1//8Ac//sBGIF0wImAFIAAAEGAGobAAAKtAMCLhEmACs1NQADAGgA/AQpBKgAAwAPABsAM0AYFgoKEAQCBAEDHB0ZExMBBw0NAQEAUFkBAC8rEQAzGC8zETMvMxESARc5ETMzETMxMBM1IRUBNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiZoA8H9rjs2NDo7MzQ9OzY0OjszND0CjYqK/ug8PT86OUA/AvQ8PT86OUA/AAMAc/+8BGIEhwATABsAIwBLQCkXHxwUFAocAAASDwUICgYkJRYeIRkNGUZZDxIIBQQDEA0QAyFGWQYDFgA/xisAGD/GEhc5KxESADk5ERIBFzkRMxEzERI5OTEwARAAIyInByc3JhEQADMyFzcXBxYFFBcBJiMiBgU0JwEWMzI2BGL+8u6acFRyXoEBDO6adFR1YX/8vTUB0Utyo6YClzP+L0dxo6kCJf70/tNFdU6DmAEAAQwBK0x3TIWY+atmAoY11tSkZP19M9sA//8ApP/sBDkGIQImAFgAAAEGAEPEAAAIswEWESYAKzX//wCk/+wEOQYhAiYAWAAAAQYAdnEAAAizAR4RJgArNf//AKT/7AQ5BiECJgBYAAABBgFLEgAACLMBIxEmACs1//8ApP/sBDkF0wImAFgAAAEGAGohAAAKtAIBKhEmACs1Nf//AAL+FAQGBiECJgBcAAABBgB2EgAACLMBHxEmACs1AAIAsP4UBHUGFAAWACIAPkAfIAYbFBAQEQYRJCMSABEbDBYJAwkeRlkJFgMXRlkDEAA/KwAYPysREgA5ORg/PxESATk5ETMRMzMRMzEwATY2MzISERACIyInIxcWFREjETMRFAclIgYHFRQWMyARNCYBWEKqatfw8dbeegwECKamBgFIqJgCmqoBL5QDtFlP/tT+9f70/tOhIk0//jUIAP4uNFobuMkp58cBsNfR//8AAv4UBAYF0wImAFwAAAEGAGq1AAAKtAIBKxEmACs1Nf//AAAAAAUQBrQCJgAkAAABBwFNAD8BUgAIswISBSYAKzX//wBe/+wDzQViAiYARAAAAQYBTfUAAAizAigRJgArNf//AAAAAAUQBzcCJgAkAAABBwFOACsBUgAIswIPBSYAKzX//wBe/+wDzQXlAiYARAAAAQYBTuQAAAizAiURJgArNf//AAD+QgURBbwCJgAkAAAABwFRA6AAAP//AF7+QgQABFoCJgBEAAAABwFRAo8AAP//AH3/7ATPB3MCJgAmAAABBwB2AQgBUgAIswEgBSYAKzX//wBz/+wDiwYhAiYARgAAAQYAdkQAAAizASARJgArNf//AH3/7ATPB3MCJgAmAAABBwFLAKwBUgAIswElBSYAKzX//wBz/+wDiwYhAiYARgAAAQYBS9QAAAizASURJgArNf//AH3/7ATPBzECJgAmAAABBwFPAhsBUgAIswEgBSYAKzX//wBz/+wDiwXfAiYARgAAAQcBTwFQAAAACLMBIBEmACs1//8Aff/sBM8HcwImACYAAAEHAUwAwQFSAAizASIFJgArNf//AHP/7AOhBiECJgBGAAABBgFM8wAACLMBIhEmACs1//8AyQAABVgHcwImACcAAAEHAUwAWAFSAAizAh0FJgArNf//AHP/7AWBBhQCJgBHAAABBwI4AwwAAAAHsgIjAAA/NQD//wAvAAAFSAW2AgYAkgAAAAIAc//sBNMGFAAaACcAZEA3JQYSDgAeHhUZFhkQBgQoKRoVGBAREEdZFQ8RHxEvEQMJAxERCRMAAQwDCQkiRlkJEAMbRlkDFgA/KwAYPysREgA5ORg/EjkvX15dMysRADMYPxESARc5ETMzETMzMxEzMTAlIwYjIgIREBIzMhczJjU1ITUhNTMVMxUjESMlMjY1NTQmIyIGFRQWA5oJc+XX7/DW33cNC/5AAcCmnJyH/p6qmZuqkpuak6cBJgEPAQ8BLKJTSYWBuLiB+yV3uc4j6cfjz9LW//8AyQAAA/gGtAImACgAAAEHAU0AEgFSAAizAQ8FJgArNf//AHP/7AQSBWICJgBIAAABBgFNCgAACLMCHhEmACs1//8AyQAAA/gHNwImACgAAAEHAU4AEAFSAAizAQwFJgArNf//AHP/7AQSBeUCJgBIAAABBgFO+wAACLMCGxEmACs1//8AyQAAA/gHFAImACgAAAEHAU8BbwE1AAizARUFJgArNf//AHP/7AQSBd8CJgBIAAABBwFPAVQAAAAIswIkESYAKzX//wDJ/kID+AW2AiYAKAAAAAcBUQJzAAD//wBz/mEEEgRcAiYASAAAAAcBUQJmAB///wDJAAAD+AdzAiYAKAAAAQcBTAAQAVIACLMBFwUmACs1//8Ac//sBBIGIQImAEgAAAEGAUz7AAAIswImESYAKzX//wB9/+wFPQdzAiYAKgAAAQcBSwDpAVIACLMBKgUmACs1//8AJ/4UBDEGIQImAEoAAAEGAUvKAAAIswNQESYAKzX//wB9/+wFPQc3AiYAKgAAAQcBTgEAAVIACLMBHAUmACs1//8AJ/4UBDEF5QImAEoAAAEGAU7OAAAIswNCESYAKzX//wB9/+wFPQcxAiYAKgAAAQcBTwJkAVIACLMBJQUmACs1//8AJ/4UBDEF3wImAEoAAAEHAU8BHwAAAAizA0sRJgArNf//AH3+OwU9BcsCJgAqAAAABwI5AScAAP//ACf+FAQxBiECJgBKAAABBgI6RAAACLMDRhEmACs1//8AyQAABR8HcwImACsAAAEHAUsAlgFSAAizARoFJgArNf//ALAAAAREB6oCJgBLAAABBwFLAB8BiQAIswElAiYAKzUAAgAAAAAF5wW2ABMAFwBUQCwXAw8PABAUBAwMBwsICxASBBgZFw5JWRYKEhMSSlkHAxMXExcTAQwQEgUBAwA/Mz8zEjk5Ly8RMzMrEQAzMysREgEXOREzMxEzMxEzMxEzMzEwEzUzFSE1MxUzFSMRIxEhESMRIzUBNSEVyaoDAqrIyKr8/qrJBHX8/gS++Pj4+I37zwKw/VAEMY3+iunpAAEAFAAABEQGFAAeAFlAMhYUEAgIDQkAHh4SCQsEHyAXFhoERlkTCwwLR1kQDA8MHwwvDAMWGgwMGhYDCQ4AAAkVAD8zPxIXOS8vL10RMysRADMrEQAzERIBFzkRMxEzMxEzMzMxMCERNCYjIgYVESMRIzUzNTMVIRUhFRQHMzY2MzIWFREDnnqCrp6mnJymAcH+PwgKMbV0yckCnoaEutX95wTbf7q6f8RUOE9bv9L9XP///+IAAALKBy8CJgAsAAABBwFS/toBUgAIswEVBSYAKzX///+QAAACeAXdAiYA8wAAAQcBUv6IAAAACLMBDREmACs1//8AKgAAAoIGtAImACwAAAEHAU3+/QFSAAizAQ8FJgArNf///9oAAAIyBWICJgDzAAABBwFN/q0AAAAIswEHESYAKzX//wAeAAACigc3AiYALAAAAQcBTv75AVIACLMBDAUmACs1////zAAAAjgF5QImAPMAAAEHAU7+pwAAAAizAQQRJgArNf//AFT+QgJWBbYCJgAsAAAABgFRaAD//wA1/kIBgQXfAiYATAAAAAYBURAA//8AVAAAAlYHMQImACwAAAEHAU8AUAFSAAizARUFJgArNQABALAAAAFWBEgAAwAWQAkAAQEFBAIPARUAPz8REgE5ETMxMCEjETMBVqamBEj//wBU/n8EEAW2ACYALAAAAAcALQKoAAD//wCi/hQDbAXfACYATAAAAAcATQIGAAD///9g/n8CZQdzAiYALQAAAQcBS/63AVIACLMBHAUmACs1////kf4UAk8GIQImAjcAAAEHAUv+oQAAAAizARsRJgArNf//AMn+OwTpBbYCJgAuAAAABwI5AIkAAP//ALD+OwQdBhQCJgBOAAAABgI5KwAAAQCwAAAEGwRGAA0AL0AZDQsHBwgDAQIFCAUODwINBQYECAAJDwQIFQA/Mz8zEhc5ERIBFzkRMxEzMzEwATMBASMBBxEjETMRFAcDL8/+YgG7yf6Xh7KyDARG/h79nAH4cf55BEb+5aZx//8AyQAAA/gHcwImAC8AAAEHAHb/YwFSAAizAQ8FJgArNf//AKMAAAIsB6wCJgBPAAABBwB2/xoBiwAIswENAiYAKzX//wDJ/jsD+AW2AiYALwAAAAYCOTEA//8AWf47AVcGFAImAE8AAAAHAjn+6AAA//8AyQAAA/gFtwImAC8AAAEHAjgBHf+jAAeyAQkDAD81AP//ALAAAAKgBhQCJgBPAAABBgI4KwAAB7IBBwAAPzUA//8AyQAAA/gFtgImAC8AAAAHAU8CBP1n//8AsAAAAqgGFAAmAE8AAAAHAU8BQv04AAEAHQAAA/gFtgANAD1AIQcLCwQADAkAAwQPDgkHBAoDAQYIAggCCAAFAwALSVkAEgA/KwAYPxI5OS8vEhc5ERIBFzkRMzMRMzEwMxEHJzcRMxElFwURIRXJaUOsqgEpQ/6UAoUB/DtyZQMe/UauedP+PJoAAf/8AAACJwYUAAsAN0AcAAQECQUFDAINCAwAAgkDCAYGAQcBBwEFCgAFFQA/PxI5OS8vEhc5EQEzETMSOREzMxEzMTABNxcHESMRByc3ETMBVolI0aZuRrSmA2BecI39PwJUSHF3AyAA//8AyQAABT8HcwImADEAAAEHAHYBAgFSAAizARoFJgArNf//ALAAAAREBiECJgBRAAABBgB2eQAACLMBHhEmACs1//8Ayf47BT8FtgImADEAAAAHAjkAzQAA//8AsP47BEQEXAImAFEAAAAGAjlWAP//AMkAAAU/B3MCJgAxAAABBwFMAKYBUgAIswEcBSYAKzX//wCwAAAERAYhAiYAUQAAAQYBTB8AAAizASARJgArNf//AAEAAATLBbYAJwBRAIcAAAEGAgfoAAAHsgEcAwA/NQAAAQDJ/n8FPwW2ABkAOEAcEA0NDggUFBcXAg4DGhsSCg4VDwMOEgAFSVkAIgA/KwAYPz8zEjk5ERIBFzkRMxEzETMRMzEwASInNRYzMjY1ASMSFREjETMBMyY1ETMRFAYDyWI2R1NpavzACBCdwAMdCA6fwf5/G5EUem8Ey/74nvzbBbb7TpXgAz36WMPMAAEAsP4UBEQEXAAdADhAHhMPDxAHGxsCEAMeHxcLRlkXEBMQEQ8QFQAFRlkAGwA/KwAYPz8SOT8rERIBFzkRMxEzETMxMAEiJzUWMzI1ETQmIyIGFREjETMXMzY2MzIWFREUBgMlVjc8Pox6gqygpocbCjS0bsvHjP4UGYcUrAN5hoS61v3BBEiWUli/0vyNmqr//wB9/+wFvga0AiYAMgAAAQcBTQDHAVIACLMCGwUmACs1//8Ac//sBGIFYgImAFIAAAEGAU0SAAAIswIcESYAKzX//wB9/+wFvgc3AiYAMgAAAQcBTgDBAVIACLMCGAUmACs1//8Ac//sBGIF5QImAFIAAAEGAU4OAAAIswIZESYAKzX//wB9/+wFvgdzAiYAMgAAAQcBUwEUAVIACrQDAisFJgArNTX//wBz/+wEYgYhAiYAUgAAAQYBU1oAAAq0AwIsESYAKzU1AAIAff/sBucFzQAUAB8AU0AuGAYPExMdAA0RHQYFICEPEklZDw8ACwsOSVkLAwkVSVkJBAMbSVkDEgATSVkAEgA/KwAYPysAGD8rABg/KxESADkYLysREgEXOREzETMRMzEwISEGIyAAERAAITIXIRUhESEVIREhASIAERAAMzI3ESYG5/0AZlz+uf6fAVwBQGZaAw79swIn/dkCTfxE+f7/AQH3cFdXFAGJAWoBaAGGF5f+KZb95gSd/s/+2f7X/s0hBHUeAAMAcf/sBx8EWgAeACoAMQBVQC0fCA4CFhYlLxUVHCUIBDIzKygLKEZZLhZGWQIFDgsuLgURCxAYIgUiRlkABRYAPzMrEQAzGD8zEjkvEjkSOSsrEQAzERIBFzkRMxEzEjk5ETMxMAUgJwYGIyIAERAAMzIWFzY2MzISFRUhEiEyNjcVBgYBFBYzMjY1NCYjIgYlIgYHITQmBZb+230+0Ynf/vQBBuuDzT46wH7J7v0nCAFKXqFXWJj7IZino5mbpaaVBEd/kQwCIIQU63R3ATEBCAEJASx3cnB5/vfiaf53IyeUJyACOdPb1dHd1djYpJ6epP//AMkAAATPB3MCJgA1AAABBwB2AHkBUgAIswIfBSYAKzX//wCwAAADJwYhAiYAVQAAAQYAdtwAAAizARoRJgArNf//AMn+OwTPBbYCJgA1AAAABgI5fQD//wBg/jsDJwRcAiYAVQAAAAcCOf7vAAD//wDJAAAEzwdzAiYANQAAAQcBTAAbAVIACLMCIQUmACs1//8AggAAAycGIQImAFUAAAEHAUz/dgAAAAizARwRJgArNf//AGr/7AQCB3MCJgA2AAABBwB2AFABUgAIswEuBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYAduoAAAizAS4RJgArNf//AGr/7AQCB3MCJgA2AAABBwFL/+oBUgAIswEzBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYBS5cAAAizATMRJgArNf//AGr+FAQCBcsCJgA2AAAABwB6AScAAP//AGr+FANzBFwCJgBWAAAABwB6ANUAAP//AGr/7AQCB3MCJgA2AAABBwFM/+QBUgAIswEwBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYBTJkAAAizATARJgArNf//ABL+OwRaBbYCJgA3AAAABgI5GQD//wAf/jsCqAVGAiYAVwAAAAYCOYIA//8AEgAABFoHcwImADcAAAEHAUz/3AFSAAizARMFJgArNf//AB//7ALXBhQCJgBXAAABBgI4YgAAB7IBGgAAPzUAAAEAEgAABFoFtgAPAD9AIQcLCwAMBAkMDgIFEBEKDg8OSlkHDw8DDBIGAgMCSVkDAwA/KxEAMxg/EjkvMysRADMREgEXOREzMxEzMTABESE1IRUhESEVIREjESE1AeH+MQRI/jEBNv7Kqv7HAy8B8JeX/hCN/V4Coo0AAQAf/+wCqAVGABwATEApFxMbGwwIAhUZCAoOBh0eDhYTFkdZGgoLCkdZFwsLBhFAEw8GAEZZBhYAPysAGD8azRI5LzMrEQAzKxEAMxESARc5ETMzETMzMTAlMjcVBgYjIBE1IzUzESM1NzczFSEVIREhFSEVFAIXVTwgair+yI2NnZ1GYAE+/sIBLf7TdRR/DhABXP6BAQBQRer+gf8AgfTdAP//ALr/7AUZBy8CJgA4AAABBwFSAG8BUgAIswEbBSYAKzX//wCk/+wEOQXdAiYAWAAAAQYBUvcAAAizAR4RJgArNf//ALr/7AUZBrQCJgA4AAABBwFNAJEBUgAIswEVBSYAKzX//wCk/+wEOQViAiYAWAAAAQYBTRkAAAizARgRJgArNf//ALr/7AUZBzcCJgA4AAABBwFOAIsBUgAIswESBSYAKzX//wCk/+wEOQXlAiYAWAAAAQYBThIAAAizARURJgArNf//ALr/7AUZB9cCJgA4AAABBwFQAJwBUgAKtAIBFQUmACs1Nf//AKT/7AQ5BoUCJgBYAAABBgFQIwAACrQCARgRJgArNTX//wC6/+wFGQdzAiYAOAAAAQcBUwDhAVIACrQCASUFJgArNTX//wCk/+wEOQYhAiYAWAAAAQYBU2gAAAq0AgEoESYAKzU1//8Auv5CBRkFtgImADgAAAAHAVECIQAA//8ApP5CBGUESAImAFgAAAAHAVEC9AAA//8AGwAAB0wHcwImADoAAAEHAUsBVAFSAAizASgFJgArNf//ABcAAAYjBiECJgBaAAABBwFLAMEAAAAIswErESYAKzX//wAAAAAEewdzAiYAPAAAAQcBS//gAVIACLMBFwUmACs1//8AAv4UBAYGIQImAFwAAAEGAUutAAAIswEkESYAKzX//wAAAAAEewclAiYAPAAAAQcAav/xAVIACrQCAR4FJgArNTX//wBSAAAEPwdzAiYAPQAAAQcAdgBCAVIACLMBEwUmACs1//8AUgAAA20GIQImAF0AAAEGAHboAAAIswETESYAKzX//wBSAAAEPwcxAiYAPQAAAQcBTwFEAVIACLMBEwUmACs1//8AUgAAA20F3wImAF0AAAEHAU8A3wAAAAizARMRJgArNf//AFIAAAQ/B3MCJgA9AAABBwFM/+0BUgAIswEVBSYAKzX//wBSAAADbQYhAiYAXQAAAQYBTIYAAAizARURJgArNQABALAAAALbBh8ADAAdQA4AAQENBg4ECUZZBAABFQA/PysRATMSOREzMTAhIxEQITIXByYjIgYVAVamAWdgZCtXSWFZBJwBgyWFHnt6AAABAMP+FAQXBcsAIABEQCQaHh4MCBIcCAoCBSEiHQoMCkZZGgwMEAAQFkZZEAQABUZZABsAPysAGD8rERIAORgvMysRADMREgEXOREzMxEzMTABIic1FjMyNjURIzU3NTQ2MzIXBwcmIyIGFRUhFSERFAYBSEVARj1fTd7eorZVeBYVZjxiUAEa/uqe/hQTixJmcQPNSzyLw7IrQEEgaXyVgfw3uK8ABAAAAAAFFAeqABAAGAAiAC4AYUA0EQUEGAYUBwQDBwgjACkLCAsJIhQCAB0DCTAvJg4sAgkYBklZCRQOGCIOGBgOIgMIHAQIEgA/My8SFzkvLy8REjk5KxEAMzMRMxESARc5ETMRMxEzETMREjk5ETk5MTABFAcBIwMhAyMBJjU0NjMyFhMDJicGBgcDEzY2NzMVBgYHIxM0JiMiBhUUFjMyNgNoaAIUrrD9nqauAhRqemNkfRuyGS8OMAmxmDFmF8sgqEJv00IzM0I8OTVABZaFOPsnAZH+bwTXNIhlcnX8NgGwOpEwhxj+VASFO5UqEC6hLf71OTw8OTc9PQAFAF7/7APNB6oACQAkAC8AOwBHAGdANy0SQjY8MCkVFQskJAYwADYdEgdISQkJBD85RTMRCwwVKUdZDBUVDyAgGUZZIBAPJUZZDxYKFQQALz8/KwAYPysREgA5GC85KxEAMxg/M8QyETkvERIBFzkRMzMRMxEzETMRMzEwATU2NjchFQYGBwEnIwYGIyImNRAlNzU0JiMiBgcnNjYzMhYVESUyNjU1BwYGFRQWARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AdcuahYBBBWkgAECIQhSo3qjuQIZtHeFYKdHN1TQZdHJ/g6bsabGr20BqntmZXl5ZWV8bUEzM0I8OTRABtkQKngfDBhpRPknnGdJqJsBTBAGRIJ6NCB/KzOuwP0UdaqZYwcHbXNaXgU9Ynd0Y2Jzd144PT04OD09AP////4AAAaBB3MCJgCIAAABBwB2AkwBUgAIswIdBSYAKzX//wBe/+wGcwYhAiYAqAAAAQcAdgGFAAAACLMDRREmACs1//8Aff/DBb4HcwImAJoAAAEHAHYBGQFSAAizAy0FJgArNf//AHP/vARiBiECJgC6AAABBgB2VgAACLMDLREmACs1//8Aav47BAIFywImADYAAAAGAjkGAP//AGr+OwNzBFwCJgBWAAAABgI5uQAAAQEMBNkDrgYhAA4AGEAJBwAQDwsEgA4JAC8zGs0yERIBOTkxMAE2NjczFhYXFSMmJwYHIwEMf2YXphZtfXdYhYhTcwTwiIApKoWCFzeDhjQAAAEBDATZA64GIQAOABhACQYAEA8FAYADCwAvMxrNMhESATk5MTABMxYXNjczFQcGByMmJicBDHNyaYJbd0KQLqYXZn8GIUpzgjsZRJRXKX6IAAABAS0E2QOFBWIAAwARtQABBAUAAwAvMxESATk5MTABIRUhAS0CWP2oBWKJAAEBJQTZA5EF5QAOABhACQwDEA8LBIAIAAAvMhrMMhESATk5MTABIiYnMx4CMzI2NzMGBgJWjJwJaAYpSVVlYApoCqcE2YmDMTgaQEN+jgAAAQCiBQIBZgXfAAsAE7YGAAAMDQMJAC/NERIBOREzMTATNDYzMhYVFAYjIiaiOCooOjooKjgFcTk1Njg4NzcAAAIBbwTZAy0GhQALABcAHkAMEgYMAAYAGBkPCRUDAC8zzDIREgE5OREzETMxMAEUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgMte2ZleHlkZXxsQjMzQjw5NEEFsmJ3dWJic3deOD09ODg9PQABACX+QgFxAAAADwAYQAoACQQNCQMQEQIHAC8zERIBFzkRMzEwFxQzMjcVBiMiNTQ2NzMGBrJeKjdBPM9WSHhERe5eDW0SvEaHNUJtAAABAQgE2QPwBd0AFwAkQA8JFRgZEQAFDAAMAAwVgAkALxrMOTkvLxEzETMREgE5OTEwASIuAiMiBgcjNjYzMh4CMzI2NzMGBgMUK1JPSSIyMw5iDXNbLlZOSCAxMA9jDXEE2yUtJTw9eYklLSU7PnmJAAACAOcE2QO2BiEACQATABtADA4FEwkEFBUNBIATCQAvMxrNMhESARc5MTATNjY3MxUGBgcjJTY2NzMVBgYHI+ckbh+6Jas6YQFlMWUauiWrOmAE8jC6RRU/xDAZRLE6FT/EMAAAAQH8BNkDEAZzAAkAE7YEAAsKBIAJAC8azRESATk5MTABNjY3MxUGBgcjAfwbNQy4Em0xZAT2SONSF0rtTAADARsFDgODBrQACAAUACAAK0AUDwkVGxsDCAkEISIYDAgMCAwDHhIALzPMOTkvLxEzERIBFzkRMxEzMTABNjczFQYGByMnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAEEfvSF5M1DlNCYpMTcjJjQBtDQmKTE3IyY0BYWphhRDsz0ENC40LjIxMTI0LjQuMjEx//8AAAAABRAGCgImACQAAAEHAVT+IP+XAAeyAhIAAD81AP//AJgCTAGJA1oCBgB5AAD////UAAAEdQYKACYAKH0AAQcBVP3Y/5cAB7IBEAAAPzUA////1AAABbUGCgAnACsAlgAAAQcBVP3Y/5cAB7IBEAAAPzUA////5AAAA0QGCgAnACwA7gAAAQcBVP3o/5cAB7IBEAAAPzUA////5P/sBgIGCgAmADJEAAEHAVT96P+XAAeyAhwAAD81AP///9QAAAWFBgoAJwA8AQoAAAEHAVT92P+XAAeyAQ0AAD81AP///+QAAAYzBgoAJgF2PwABBwFU/ej/lwAHsgEjAAA/NQD////p/+wCkwa0AiYBhgAAAQcBVf7OAAAADLUDAgEuESYAKzU1Nf//AAAAAAUQBbwCBgAkAAD//wDJAAAEvgW2AgYAJQAAAAEAyQAAA/gFtgAFAB1ADgMEBAAGBwUCSVkFAwQSAD8/KxESATk5ETMxMAEVIREjEQP4/XuqBbaZ+uMFtgD//wAnAAAEbQW2AgYCKAAA//8AyQAAA/gFtgIGACgAAP//AFIAAAQ/BbYCBgA9AAD//wDJAAAFHwW2AgYAKwAAAAMAff/sBb4FzQADAA8AGwA/QCACAxAWEAoWBAoEHB0AA0lZAAAHDQ0ZSVkNBAcTSVkHEwA/KwAYPysREgA5GC8rERIBOTkRMxEzERI5OTEwASEVISUQACEgABEQACEgAAEQEjMyEhEQAiMiAgHjAnX9iwPb/p3+xP69/qEBYAFEATsBYvtz+vTz+Pfy9fsDM5U//qH+bgGLAWgBZQGJ/nD+oP7Y/swBMAEsASoBLv7OAP//AFQAAAJWBbYCBgAsAAD//wDJAAAE6QW2AgYALgAAAAEAAAAABNMFtgAKABpACwgADAsECAkDAQgSAD8zPxI5ERIBOTkxMCEjASYnBgcBIwEzBNO2/rZXFiFH/ri2AhCxA6D8WovJ/F4Ftv//AMkAAAZxBbYCBgAwAAD//wDJAAAFPwW2AgYAMQAAAAMASAAABCUFtgADAAcACwA0QB0KBwMCBggGDQwAA0lZAAAKBAoLSVkKEgQHSVkEAwA/KwAYPysREgA5GC8rERIBFzkxMBMhFSEDIRUhARUhNcMC5/0ZUgOL/HUDtPwjA0iWAwSX+3mYmP//AH3/7AW+Bc0CBgAyAAAAAQDJAAAFDAW2AAcAI0ARAQAEBQAFCQgGA0lZBgMBBRIAPzM/KxESATk5ETMRMzEwISMRIREjESEFDKr9EaoEQwUf+uEFtgD//wDJAAAEaAW2AgYAMwAAAAEASgAABFwFtgAMADVAHAgKCgAJAgsGAwIABQ0OBwgECElZBAMACklZABIAPysAGD8rEQAzERIBFzkRMxEzETMxMDM1AQE1IRUhJwEBIRVKAeH+KwPL/VxgAcz+HwNUjQJvAiuPmQL93/2amAD//wASAAAEWgW2AgYANwAA//8AAAAABHsFtgIGADwAAAADAGr/7AX4BcsAGQAiACsAUEApJxQaAg0NKxkOHgcHDhQDLC0MEBoqECpKWSIkGCRKWQIYEBgQGA4TAAQAPz85OS8vETMrEQAzKxEAMxEzERIBFzkRMxEzMzMRMzMRMzEwATMVMzIWFhUUAgQjIxUjNSMiJAI1NDY2MzMTMzI2NTQmKwMiBhUUFjMzAtusRqv7hZX+/bAprC2w/v6Sh/yrQ6wZyd/OuTqsObbR3soYBcu0iPifpv79guHhhAEEoZ74i/xF28O50tS3xdkA//8ACAAABJYFtgIGADsAAAABAG0AAAXyBbYAHQA+QB8KBxEAAA4BFRgYAQcDHh8dAw0DSVkRDQ0BFg8IAwESAD8/MzMSOS8zKxEAMxESARc5ETMRMzMRMxEzMTAhIxEjIiYmNREzERQWMzMRMxEzMjY1ETMRFAYEIyMDg6otsP+Qrs/UG6od08+wkP79ry0Bvnr3pAHj/iG8yQNk/JzGuwHj/h+l93sAAAEAUAAABfQFzQAfADlAIAMNHRMYExYZBwoNCAggIRAASVkQBBoWBgkICUlZGQgSAD8zKxEAMzMzGD8rERIBFzkRMxEzMTABIgIVFBIXFSE1ISYCNRAAISAAERQCByEVITU2EjU0AgMh7vqttP22AWyXoAFiAToBOwFinpcBa/22t6n5BTX+//3h/rOEhZh2AV7LATYBYP6l/sfP/qZ4mIWGAU7e/AEC//8APAAAAm8HJQImACwAAAEHAGr/BwFSAAq0AgEhBSYAKzU1//8AAAAABHsHJQImADwAAAEHAGr/7wFSAAq0AgEeBSYAKzU1//8Ac//sBMcGcwImAX4AAAEGAVQdAAAIswI0ESYAKzX//wBa/+wDhwZzAiYBggAAAQYBVMgAAAizAS8RJgArNf//ALD+FAREBnMCJgGEAAABBgFUOwAACLMBHhEmACs1//8AqP/sApMGcwImAYYAAAEHAVT+xAAAAAizARkRJgArNf//AKT/7ARxBrQCJgGSAAABBgFVOwAADLUDAgE0ESYAKzU1NQACAHP/7ATHBFwACwAqAEdAJAkPJxUEBB0iHQ8DKywYDycoKBYMEhIHRlkSEB8ADABGWSQMFgA/MysRADMYPysREgA5OREzGD8REgEXOREzETMzETMxMCUyNjU1NCYjIBEUFhciAhEQEjMyFhczNjczBgYVERQzMjcVBiMiJicjBgYCUKmWmKn+0ZOF1u704XmhNgwYKYEVHFQdIS5BUVkSDTund8PaD+XH/lDU1IsBKQEMARIBKVRUXDhC9nT+SXIKdxpRVlZRAAIAsP4UBKgGHwATACkATEAoGA8PECcDHggIAwUiEAUqKxAbIyJGWQ4jDiMLAAsbRlkLFgAURlkAAAA/KwAYPysREgA5ORgvLysAGD8REgEXOREzETMRMxEzMTABMhYVEAUVBBEUBCMiJicRIxE0NhciBhURFhYzMjY1NCYjIzUzMjY1NCYCk9z5/scBef747m2gT6b95J6dXaFWq62+sXBcm6KcBh/Qt/7aMwgq/pHR4R8m/eMGNOH2jKyl/IkxJZadnaSOk4l7hQABAAr+FAQOBEgAEgAhQBAPBAEFBBMUCgkJAQ4FDwEbAD8/MxI5LzMREgEXOTEwASM0EjcBMxMWFzM+AhMzAQYCAhS0QCv+P6zwXhMIBSkr6qz+azA1/hRgASZyBDz9uOtnHo6BAm3703z+3AACAHH/7ARgBhIAHgAqADtAICUcEAMfFhYJAAMcBSssEAAiAxkGGShGWRkWBg1GWQYAAD8rABg/KxESABc5ERIBFzkRMxEzETMxMAEmJjU0NjMyFhcHJiYjIgYVFBYXFhYVFAAjIiQ1NBIBNCYnBgYVFBYzMjYCIYx0wqRnvX5IcJ9RVWFrp9Kx/vDs4/7w4gJhe43Ov7KToq4DqE6fY4KYLT+HPixPQkdvW3PxpOv++PjSsQEF/nOAt0o12aCQq7oAAAEAWv/sA4cEXAAlAE1AKwQQIxcdCwETFxAGJicUJQIlAkZZDyUfJQILAyUlDRoaIUZZGhANB0ZZDRYAPysAGD8rERIAORgvX15dKxESADkREgEXOREzETMxMAEVIyAVFBYzMjY3FQYjIiY1NDY3NSYmNTQ2MzIWFwcmJiMiFRQhAsuU/smTklSmZInd0vFugmJr4MBhpWQ/XoJP+gE9AoGNw1piJy+US6mUYoMpCxx/XIWeIS2FKhyirAAAAQBz/m8DoAYUACAAMEAYBxkeExMODgMAGQQhIhEjHgMAAQBGWQEAAD8rEQAzMxg/ERIBFzkRMxEzETMxMBM1IRUGAAIVFBYWFxYWFRQHIzY1NCYnJiY1ND4CNwYhsALw1/7gijt9rJWIf6Z9b4/LvDtwyfIo/vEFh42BtP69/t+mYnZJJR9tW5WkoWs4PRok28Jy0MPl2ggAAAEAsP4UBEQEXAAUAC9AGAAUDAgICRQJFhUQBEZZEBAMCQoPCRUAGwA/Pz8SOT8rERIBOTkRMxEzETMxMAERNCYjIgYVESMRMxczNjYzMhYVEQOeeoKsoKaHGwgzuHHGyP4UBLGGhLrW/cEESJZRWb/S+0kAAwBz/+wESgYrAAsAEgAZAElAJxYQEAYXDw8ABgAaGxYQRlkPFr8WAgsDFhYDCQkTRlkJAQMMRlkDFgA/KwAYPysREgA5GC9fXl0rERIBOTkRMxEzETMRMzEwARACIyICERASMzISATISEyESEhMiAgMhAgIESvT68Pn19PT6/hKknAb9eQSWp6GWCgKFC5gDDP5q/nYBkwGNAZcBiP5r++EBMQEz/tD+zAUp/uH+5wEZAR8AAQCo/+wCkwRIAA8AH0AOAQ4HDhEQDw8LBEZZCxYAPysAGD8REgE5OREzMTABERQWMzI2NxUGBiMiJjURAU5JVyVlGx9pMqCRBEj8+mhlDQd/DRGoqQML//8AsAAABBsERgIGAPoAAAAB//L/7ARGBiEAIgAzQBsIARUDJAAAIxgTRlkYFh4fHwALCwZGWQsBABUAPz8rERIAOREzGD8rEQEzERIXOTEwIwEnLgIjIgc1NjMyFhYXARYWMzI3FQYjIiYnAyYnIwYHAw4B2ToeMkMxOjlEP1t5WDYBaxMqIxshMD1KUx2cVBYJHFj+BDeiVUYkDYURPIKY/AwxMwp5GExTAbTwYHTR/bYA//8AsP4UBEQESAIGAHcAAAABAAAAAAQCBEgADgAcQAwJCgoAEA8FDhUJAA8APzI/ORESATk5ETMxMBEzExYWFzM2EhEzEAIHI6zbGlMQCLGfps/hugRI/bJD7j6vAb0BUf6V/gThAAEAcf5vA6AGFAAxAElAJwQZLR8dHBMMDCgAHB8lGQcyMxwwATABR1kwMBAmKSUmJUZZJgAQIwA/PysRADMREjkYLysREgA5ERIBFzkRMxEzETMRMzEwASMiBhUUHgIXFhYVFAYHIzY2NTQmJyYmNTQ2NzUmNTQ2NwYjIzUhFSMiBgYVFBYzMwNWsrDVMl+HVI6HNkOcNUJzj8jHnoDZi6aAc0QCujOC4H+nr6oC8rKOUGI9JBIdblpBlWNHkzQ3PRkiyLCM0icMQNl1njIMjYNQkF9zbP//AHP/7ARiBFwCBgBSAAAAAQAZ/+wE9ARIABUANkAdCgsHExADEwsNBRYXEgkNDw1GWQ8PCxUFAEZZBRYAPysAGD8/KxEAMzMREgEXOREzETMxMCUyNxUGIyI1ESERIxEjNTchFSMRFBYEfSYwK1Tb/iOm3Y8ETNUzdRKDGP0C0fxGA7pKRI79PEo3AAIApv4UBGIEXAAQABwANkAbFQkJChoACgAdHgYDDg4RRlkOEAobAxdGWQMWAD8rABg/PysREgA5ERIBOTkRMxEzETMxMAEQACMiJyMWFREjERASMzISJSIGFREWMzI2NTQmBGL/AOmzeAgIqPvq2/z+IZ6XerefmJACJf7x/tZePdT+2wQfAQoBH/7Ros/R/q5m0N7W1AAAAQBz/m8DogRcACAALkAXDgcAFRUHGwMiIQQSEhgLGB5GWRgQCyMAPz8rERIAOREzERIBFzkRMxEzMTABFBYWFxYWFRQGByM2NjU0JiYnJiY1EAAzMhYXByYjIgYBHzuPoJSDNkOcNkMzbmHMwwEU+E+eNjWCcrCqAgqHhFAiIGtaQphfRpQyKC8mEiX+2wEeATYhGI0z2gACAHP/7AS2BEgADQAZADBAGRQADgcHDAALBBsaDBcJF0ZZCQ8EEUZZBBYAPysAGD8rEQAzERIBFzkRMxEzMTABFAYGIyIANRAhIRUhFgEUFjMyNjUQJyMiBgRge+Wa6/74AlAB8/74svy/qqGfq65B3sgB/J3xggEg/gI+jqf+98LRxbYBDrrQAAABABL/5wOTBEgAEwAsQBcDDwAJDxEEFBUCERMRRlkTDwwFRlkMFgA/KwAYPysRADMREgEXOREzMTABFSERFDMyNjcVBgYjIiY1ESE1NwOT/lDNL2IbI28wtar+15QESI79lt8NB30PEqqqAn9KRAAAAQCk/+wEcQRIABUAJUARDBMGAxMDFxYPBA8ACUZZABYAPysAGD8zERIBOTkRMxEzMTAFIiYRETMRFBYzMjY1NCYnMxYWFRAAAnPn6KaemaehHCKmJBz+/hT6AQoCWP2wwMPu+4LgiJDWjP7C/tQAAAIAc/4UBUwEXAAYACIAQUAjCgQgGBgMABkTEwAHBAQjJBAcRlkQEAYPIAwBDEZZFwEWABsAPz8zKxEAMxg/PysREgEXOREzETMzETMRMzEwAREkABEQNxcGBhUQBRE0NjMyEhUUAgYHEQE0JiMiBhURNjYCg/78/vTPg1lRAWimlbTaiPilAXl8ZklOs8b+FAHaCwEjAQ8BKP1adeB8/nUjAmy7vv7b+rL++5AI/iYEJ7nbeHL9khDsAAH/7P4UBFAETgAgADlAIQ4HCAUVGB4HIhchBRgIFQQGFxsRDEZZERsGDwAcRlkADwA/KwAYPz8rABg/Ehc5EQEzEhc5MTATMhYWFxMBMwETFhYzMjcVBiMiJicDASMBAyYmIyIHNTayNk4+LJEBPrT+VL4wUj8tLTw7c407lv6WsgHQrCZGKyUbMQROK1tw/o8CYfz8/hx6SgiBD3afAYP9aANEAbxjUAuBEQABAKT+FAWHBhIAGgA9QB8WEwEODhkPBAoKDxMDGxwaAAcUDwEZEBlGWQ0QFg8bAD8/MysRADMYPzM/ERIBFzkRMxEzMxEzETMxMAERNjY1NCYnMxIVEAAFESMRJAARETMRFBYXEQNavMsaJaY//uP+8KT++P72prS4BhL6aQ/nzHjrqP7w9P7s/s4Q/iYB2gkBIgEQAh/928PaDQWZAAEAc//sBbwESAAnAD1AHgoDJhMTEBkgIBADAygpJhERABwGDxYNAA1GWSMAFgA/MisRADMYPzMSOS85ERIBFzkRMxEzEjkRMzEwBSICNTQSNzMGBhUUFjMyNjURMxEUFjMyNjU0AiczFhIVFAIjIicjBgH0tss3RKxEOXhrXmmhal1reDdFrEE5y7bcRAlBFAEo/pwBAZmc/53B2I99ATf+yYCM2MGXAQSdkv75nfz+1ra2//8ACf/sApMF0wImAYYAAAEHAGr+1AAAAAq0AgElESYAKzU1//8ApP/sBHEF0wImAZIAAAEGAGo5AAAKtAIBKxEmACs1Nf//AHP/7ARiBnMCJgBSAAABBgFUIQAACLMCIhEmACs1//8ApP/sBHEGcwImAZIAAAEGAVQnAAAIswEfESYAKzX//wBz/+wFvAZzAiYBlgAAAQcBVADJAAAACLMBMREmACs1//8AyQAAA/gHJQImACgAAAEHAGoAJwFSAAq0AgEhBSYAKzU1AAEAEv/sBUIFtgAdAEZAJhYODg8IGxsUAg8RBR4fFg1JWRYWDxIVERIRSVkSAw8SAAVJWQATAD8rABg/PysRADMREjkYLysREgEXOREzETMRMzEwBSInNRYzMjY1NTQmIyERIxEhNSEVIREhMhYVFRQGA89gNjdbZWiDjP6Dqv6wA7f+QwGMzd3EFBaWE3xwg4Bx/RsFH5eX/l6/so++0///AMkAAAP4B3MCJgFhAAABBwB2AFoBUgAIswEPBSYAKzUAAQB9/+wE4wXNABgAOEAeBgMRFgwFEQQZGgMGSVkDAw4UFABJWRQEDglJWQ4TAD8rABg/KxESADkYLysREgEXOREzMzEwASIEByEVIRIAMzI3FQYjIAAREAAhMhcHJgNC4v7zHgLT/SkKAQv5osmh4v60/qIBeQFO7bJHqQUz+vGW/u7+4zeVOQGEAW0BXwGRWJRS//8Aav/sBAIFywIGADYAAP//AFQAAAJWBbYCBgAsAAD//wA8AAACbwclAiYALAAAAQcAav8HAVIACrQCASEFJgArNTX///9g/n8BaAW2AgYALQAAAAIAAP/pByMFtgAaACMAR0AmGBsbBB8AAAQNAyQlGCNJWRgYCxYWBklZFgMLEEpZCxIEG0pZBBIAPysAGD8rABg/KxESADkYLysREgEXOREzETMRMzEwARQEISERIQICBgYjIic1FjMyPgISEyERMyABMzI2NTQmIyMHI/7t/vz+uf6TOVRQi2tFQDI/MEErN0RBAqZ6Ajr9TIXGt8DcZgGqztwFH/5I/fb7eRmPGj5n+gG+AeL9kP1Ni4yKfAACAMkAAAdUBbYAEQAaAEpAJgsHBwgPEhIMBBYAAAQIAxscGgYLBklZDwsLBA0JAwgSBBJKWQQSAD8rABg/PzMSOS8zKxEAMxESARc5ETMRMzMRMxEzETMxMAEUBCEhESERIxEzESERMxEzIAEzMjY1NCYjIwdU/vD++/63/X2qqgKDrHkCOf1OhcS5wdtmAarO3AKw/VAFtv2SAm79kP1Ni4yJfQAAAQASAAAFQgW2ABMAOkAfAAwMDQYFBRINDwQUFRMPEA9JWQALSVkAAA0QAwYNEgA/Mz8SOS8rKxEAMxESARc5ETMRMxEzMTABITIWFREjETQmIyERIxEhNSEVIQIMAZDN2ap9jP59qv6wA/b+BAN9vLX99AH2fnH9GwUfl5f//wDJAAAE5QdzAiYBtAAAAQcAdgCiAVIACLMBFAUmACs1//8AG//sBPgHXgImAb0AAAEHAjYARAFSAAizARcFJgArNQABAMn+gwUMBbYACwAwQBgIBQIDCQAAAwUDDA0KBgMFCElZAQUSAyIAPz8zKwAYPzMREgEXOREzETMRMzEwISERIxEhETMRIREzBQz+L7D+PqoC76r+gwF9Bbb65AUcAP//AAAAAAUQBbwCBgAkAAAAAgDJAAAEfQW2AA0AFgA9QCASAAkODgQEBwADGBcJFklZCQkEBQUISVkFAwQOSlkEEgA/KwAYPysREgA5GC8rERIBFzkRMxEzETMxMAEUBCEhESEVIREzMhYWATMyNjU0JiMjBH3+/f77/lQDXv1M48HydPz2776tsNvPAara0AW2l/4nWa7+VIKVjngA//8AyQAABL4FtgIGACUAAP//AMkAAAP4BbYCBgFhAAAAAgAO/oMFSgW2AA0AEwBDQCQEBRMHEAoODAEAAAwKBwUFFBUKEElZCgMBBSITDAYDBklZAxIAPysRADMzGD8zPysREgEXOREzETMRMxEzETMxMAEjESERIxEzEhITIREzIREhBgIHBUqi/AiicZrbDAKRuf6d/rMSzon+gwF9/oMCFwEDAuYBM/rkBIPy/VnqAP//AMkAAAP4BbYCBgAoAAAAAQACAAAGvAW2ABEAPEAfBg0NAw4KCQgBDgARBxITDwwJBgMAAAEOCxESBwQBAwA/MzM/MzMSOREzMzMzMxESARc5ETMzETMxMAEBMwERMxEBMwEBIwERIxEBIwJW/cG+AjmkAjq+/cACUsT9uqT9u8cC8ALG/TwCxP08AsT9PP0OAuX9GwLl/RsAAQBK/+wENQXLACgAQ0AkHAATBwcAAxcjDAYpKgMYFxgXSlkYGAomJh9KWSYEChBKWQoTAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzMTABFAYHFRYWFRQEISInNRYWMzI2NTQmIyM1MzI2NTQmIyIGByc2NjMyFgQZt6G3vf7O/un/o2DfZ8bL4d/a0c3hoolusnVUZfuH4f8EYJC0GAgZtJHN5U+eLjKWjYaKj5OEa4AySnJLTcUAAQDLAAAFUgW2AA8ANEAYDgICDwYJCQgPCBARBQQMDQQNCQ8SBgADAD8yPzM5OREzETMREgE5OREzETMRMxEzMTATMxEUBzMBMxEjETQ3IwEjy58OCAM0uqARCfzLugW2/NPhtgTE+koDJcnd+zUA//8AywAABVIHXgImAbIAAAEHAjYA4QFSAAizARAFJgArNQABAMkAAATlBbYACgAtQBYHAwMEAAkKBAQLDAoHAgcECAUDAQQSAD8zPzMSOTkRMxESARc5ETMRMzEwISMBESMRMxEBMwEE5c79XKqqApPD/XkC5f0bBbb9PALE/ToAAQAA/+cE2QW2ABMALUAYAxIBAAASCgMUFRIDSVkSAwgNSlkIEwESAD8/KwAYPysREgEXOREzETMxMCEjESEHAgIGJyInNRYzMjY2EhMhBNmq/iUfPV2Yfko7Njs1Tz1dOAMSBR/w/iH+Ra4CGY8aV9cCWQG4//8AyQAABnEFtgIGADAAAP//AMkAAAUfBbYCBgArAAD//wB9/+wFvgXNAgYAMgAA//8AyQAABQwFtgIGAW4AAP//AMkAAARoBbYCBgAzAAD//wB9/+wEzwXLAgYAJgAA//8AEgAABFoFtgIGADcAAAABABv/7AT4BbYAFgAqQBUSCAIJBBcYDg0IDQARCQMABUlZABMAPysAGD8zEjk5ETMREgEXOTEwBSInNRYzMjY3ATMBFhczNjcBMwEOAgElb1RdYG6FQv3HvAGwGQ4IHAsBZ7T+LVSHqRQepitliwRB/MExL1QWAzX76ruqT///AGr/7AX4BcsCBgFzAAD//wAIAAAElgW2AgYAOwAAAAEAyf6DBbgFtgALADJAGQgFCQADAgIABQMMDQoGAwAIBQhJWQUSAyIAPz8rEQAzGD8zERIBFzkRMxEzETMxMCUzESMRIREzESERMwUMrKH7sqoC76qa/ekBfQW2+uQFHAAAAQCqAAAExwW2ABMALUAWCwgRAQEACAAUFQUOSVkFBQESCQMBEgA/PzMSOS8rERIBOTkRMxEzETMxMCEjEQYGIyImNREzERQWMzI2NxEzBMeqlcZqz9+qf49hsamqAlw1J76zAkX9z3l0HTcCygABAMkAAAd5BbYACwAxQBgEAQgFCQAABQEDDA0KBgIDCAQBBElZARIAPysRADMYPzMzERIBFzkRMxEzETMxMCEhETMRIREzESERMwd5+VCqAliqAlisBbb65AUc+uQFHAABAMn+gwgEBbYADwA7QB4DAAcECAsODQ0LBAAEEBEOIgkFAQMLBwMAA0lZABIAPysRADMzGD8zMz8REgEXOREzETMRMxEzMTAzETMRIREzESERMxEzESMRyaoCR6wCSKqsogW2+uQFHPrkBRz65P3pAX0AAAIAEgAABRcFtgAMABUAPUAgCQ0NBBEAAAQGAxYXCRVJWQkJBAcHBklZBwMEDUpZBBIAPysAGD8rERIAORgvKxESARc5ETMRMxEzMTABFAQjIREhNSERMyAEATMyNjU0JiMjBRf+/fn+R/6wAfr0AQUBEvz1/LWpr8vgAarO3AUfl/2Qzf4ai4yIfgAAAwDJAAAGCgW2AAoAEwAXAD9AIAMLCwAPBxUUFAcAAxgZFRIDE0lZAwMAFgEDAAtKWQASAD8rABg/MxI5LysAGD8REgEXOREzETMRMxEzMTAzETMRMyAEFRQEIyUzMjY1NCYjIwEjETPJqu8BBQES/v35/vb3taqzyNsEl6qqBbb9kM3PztyRjYyJe/1SBbYAAgDJAAAEugW2AAoAEgAyQBkHCwsEDgAEABMUBxJJWQcHBAUDBAtKWQQSAD8rABg/EjkvKxESATk5ETMRMxEzMTABFAQjIREzESEgBAEhIBE0JiMhBLr+8fv+GaoBIwELARn8uQErAWy7zv7yAarL3wW2/ZDT/iABF4d/AAEAPf/sBIkFywAaADpAHxgVFQkJFg8DBBscFxZJWRcXDAUMEklZDBMFAElZBQQAPysAGD8rERIAORgvKxESARc5ETMRMzEwASIHJzYzMgQSFRAAISInNRYWMyAAEyE1ISYAAdOsokis7NkBOaL+lP6q45xTrGMBDwEUCP0xAs0W/vEFM0yQVLD+ut3+iP5sOZUVIgEhARCY5QECAAIAyf/sB+cFzQASAB4AR0AmDAgICRMNBhkAAAYJAx8gEBxJWRAEDAdJWQwMCQoDCRIDFklZAxMAPysAGD8/EjkvKwAYPysREgEXOREzETMzETMRMzEwARAAISAAAyERIxEzESESACEgAAEQEjMyEhEQAiMiAgfn/qv+0P7T/qsL/p6qqgFkFwFRAR8BMwFW+6Du5+rt6+jp8ALd/p7+cQFvAVX9UAW2/ZIBNwFO/m/+of7Y/swBMgEqASoBLv7PAAIAMwAABE4FtgANABUAPUAgFQwMCxIGAgYDCwQXFgAUSlkDCQAAAgkJD0pZCQMMAhIAPzM/KxESADkYLxI5KxESARc5ETMRMxEzMTABASMBJiY1NCQhIREjEREjIgYVECEzAnv+gckBmqGSAQ8BEwGSquO3vgF73QJi/Z4CfzPPnsTT+koCYgLBfo7+3f//AF7/7APNBFoCBgBEAAAAAgB3/+wEVAYhABcAIgA7QB4aEiALAAAGEgMkIwwLDxxGWQsPDxUFFRhGWRUWBQEAPz8rERIAORgvOSsRADMREgEXOREzMxEzMTATEBI3JDcXBAcGBgczNjYzMhIVEAAjIgAFIBEQISIGBgcQEnfU5gEe2h/+pZWRkQcMPsRryuL++urn/voB/AEx/utMjXUgpgKRAWgBkzI9JpI6IiH21FRg/vro/v/+3wFi1wGFAXM/aDf++f7tAAMAsAAABEwESAAOABYAHwBJQCYcFBQLFwAPBwcAAwsEICEEHBMcE0ZZHBwLDAwbRlkMDwsURlkLFQA/KwAYPysREgA5GC8rERIAORESARc5ETMRMxEzETMxMAEUBgcVFhYVFAYjIREhIAM0JiMhESEgAzQmIyERITI2BCl7b4yB4dj+HQHhAZiDh5z+0wExAR8fe33+xwEZmn4DNWtvEwkTfm+ZpgRI/QJZUf6XAppQQ/7LTAAAAQCwAAADRARIAAUAHUAOAgMAAwcGBAFGWQQPAxUAPz8rERIBOTkRMzEwASERIxEhA0T+EqYClAO6/EYESAACACn+hQRoBEgADQATAENAJAQFEwcQCg4MAQAADAoHBQUUFQoQR1kKDwEFIhMMBgMGRlkDFQA/KxEAMzMYPzM/KxESARc5ETMRMxEzETMRMzEwASMRIREjETM2EhMhETMhESMGAgcEaKH9AqBWhpgDAiud/sP2DZFs/oUBe/6FAgq2AeoBGfxHAzbe/jmRAP//AHP/7AQSBFwCBgBIAAAAAQAEAAAF3wRGABEAPEAfAgkJEQoGBAUKDg8NBxMSEQsIBQIODg0DAA8PCgcNFQA/MzM/MzMSOREzMzMzMxESARc5ETMzETMxMAEzEQEzAQEjAREjEQEjAQEzAQKkmQHFtv42AfHA/h6Z/h+/AfD+N7YBwwRG/e0CE/3t/c0CK/3VAiv91QIzAhP97QABAET/7AN/BFwAIgBNQCsCDR4TEw0PIQgYBiMkECIhIiFGWQ8iHyICCwMiIhYKFhtGWRYWCgRGWQoQAD8rABg/KxESADkYL19eXSsREgA5ERIBFzkRMxEzMTABIDU0IyIGByc2MzIWFRQHFRYWFRQGIyInNRYzMjY1NCEjNQGBATf8TX5mO6rJvdrNfnT12O2Bt7uQk/7JmAKBrKIcKodMm4a4OQgliWeYqUeYVmNdv40AAQCwAAAEYgRIAA0ANEAZCAQHBwYLAwMMBgwPDgMKDAQNDwwVBxUEDwA/Pz8/ERI5ORESATk5ETMRMxEzETMzMTABEQcHATMRIxE3NwEjEQFMBwMCUc+bAwX9sM8ESP1JtjkDpvu4Ap6EgvxcBEgA//8AsAAABGIGDAImAdIAAAEGAjY9AAAIswEOESYAKzUAAQCwAAAEDARIAAoALUAWCgYGBwMBAgcEDAsCCgUKBwAIDwQHFQA/Mz8zEjk5ETMREgEXOREzETMxMAEzAQEjAREjETMRAy+2/icCAML+DKamBEj97/3JAiv91QRI/esAAQAQ//ID4QRIABAALUAYAQADDwoPAAMSEQ8DRlkPDwcMR1kHFgEVAD8/KwAYPysREgEXOREzETMxMCEjESECAgYjIic1FjMyEhMhA+Go/rcbYJl2NiAWHHOIIwKBA7r+nP5ewgx7BgHmAe8AAQCwAAAFLwRGABQANUAZAwYGBRIPDxAFEBYVBw4ADgsDEQ8GEBULFQA/PzM/MxI5OREzERIBOTkRMxEzETMRMzEwJTc3ATMRIxEHBwEjASYnESMRMwEWAukfKwEp05MUOv7li/7lNRSUywEfK6BddgLT+7oDiTqZ/UoCuIZL/HcERv1JbgABALAAAARiBEgACwA5QB4CBgYFAQkJCgUKDQwBCEZZLwE/AQIBAQoDCw8GChUAPzM/MxI5L10rERIBOTkRMxEzETMRMzEwAREhETMRIxEhESMRAVYCZqam/ZqmBEj+NQHL+7gB7v4SBEj//wBz/+wEYgRcAgYAUgAAAAEAsAAABEgESAAHACNAEQABBQQBBAgJAgdGWQIPBQEVAD8zPysREgE5OREzETMxMCEjESERIxEhAVamA5io/bYESPu4A7gA//8AsP4UBHUEXAIGAFMAAP//AHP/7AOLBFwCBgBGAAAAAQApAAADkwRIAAcAJEASAgMAAwUDCAkBBQYFRlkGDwMVAD8/KxEAMxESARc5ETMxMAEhESMRITUhA5P+nKb+oANqA7r8RgO6jv//AAL+FAQGBEgCBgBcAAAAAwBx/hQFRgYUABEAGAAeAExAJxIJHA8EBBUMBRkAAAUJAx8gDQAbFgwWRlkPDBAcFQYVRlkDBhYFGwA/PzMrEQAzGD8zKxEAMxg/ERIBFzkRMxEzMzMRMzMRMzEwARQABxEjESYANTQANxEzERYABRQWFxEGBgUQJRE2NgVG/uX+pPj+4AEf/577AR772bDAubcDe/6Tvq8CJfn+2RX+JAHcEwEu9PkBJhQBvP5EF/7U8MDaEgNUEc/IAX8n/K4T2v//ACcAAAQIBEgCBgBbAAAAAQCw/oUE3QRIAAsAMkAZBgMHCgEAAAoDAwwNCAQPCgYDBkZZAxUBIgA/PysRADMYPzMREgEXOREzETMRMzEwASMRIREzESERMxEzBN2m/HmmAkamm/6FAXsESPxHA7n8RwABAJwAAAQtBEgAEgAtQBYGCgoJAREJERQTAw5GWQMDCgcSDwoVAD8/MxI5LysREgE5OREzETMRMzEwAREUMzI2NxEzESMRBgYjIiY1EQFC21umaaamabNxpLoESP5wwDhDAdX7uAHwSDuskwGcAAEAsAAABm8ESAALADFAGAgFAAkBBAQJBQMMDQoCBg8ACAUIRlkFFQA/KxEAMxg/MzMREgEXOREzETMRMzEwJSERMxEhETMRIREzA+EB5qj6QaYB5aaPA7n7uARI/EcDuQAAAQCw/ocHCgRGAA8AO0AeDAkADQEEBwYGBA0JBBARDgIKDwQADAkMRlkJFQciAD8/KxEAMzMYPzMzERIBFzkRMxEzETMRMzEwJSERMxEzESMRIREzESERMwPhAeamnaj6TqYB5aaPA7f8Sf34AXkERvxJA7cAAAIAKQAABR0ESAAMABQAPUAgABISCA0EBAgKAxUWABFGWQAACAsLCkZZCw8IEkZZCBUAPysAGD8rERIAORgvKxESARc5ETMRMxEzMTABITIWFRQGIyERITUhATQmIyERISACLQE54Nff3P4l/qICBAJMfJ3+zQE5ARMCg5qbpqgDuo78/F1T/pcAAAMAsAAABXkESAAKAA4AFgA/QCAAEBAIBBMMCwsTCAMXGAwVAA9GWQAACA0JDwgQRlkIFQA/KwAYPzMSOS8rABg/ERIBFzkRMxEzETMRMzEwASEyFhUUBiMhETMBIxEzAREhIDU0JiMBVgEr0cnVz/45pgQjpqb73QEZAQh6kwKDm5qlqQRI+7gESP2s/pe5XFQAAgCwAAAETARIAAkAEgAyQBkPAwALCwcDBxQTAApGWQAABwgPBwtGWQcVAD8rABg/EjkvKxESATk5ETMRMxEzMTABISARFAYjIREzEREhMjY1NCYjAVYBUgGk29P+EqYBQISMgZQCg/7LoqwESP2s/pdcXVtVAAEAOf/sA30EXAAaAERAJgwJCRgYChICBBscCwpGWQ8LHwsCCwMLCwAVFQ9GWRUQAAZGWQAWAD8rABg/KxESADkYL19eXSsREgEXOREzETMxMAUiJzUWFjMyNjchNSEmJiMiByc2NjMgABEQAAFWp3Y8jFuuvQr91QIpEKmhZ5cvN6RQAQABCv7fFDmTFyS6uY2soDaMGiP+2/7s/vP+1gACALD/7AYzBFwAEgAeAFFALQwICAkTDQYZAAAGCQMfIBAcRlkQEAwHRlkPDB8MAgsDDAwJCg8JFQMWRlkDFgA/KwAYPz8SOS9fXl0rABg/KxESARc5ETMRMzMRMxEzMTABEAAjIgInIREjETMRITY2MzIAARQWMzI2NTQmIyIGBjP+/+DV+g7+4aamASEU/M/cAQH87pKhnpWSoaGSAiX+8/7UAQv3/hIESP415Pv+z/7609vV2dLY2AACACUAAAPBBEgADQAUAD1AIBELCwoOBQEFAgoEFhUNEEZZAggNDQEICBNGWQgPCwEVAD8zPysREgA5GC8SOSsREgEXOREzETMRMzEwMyMBJiY1NDYzIREjESEBFCEhESEi58IBO3+HyrUB6Kb+6/72ARQBC/7T8gHPHKF6lqz7uAG2AU6+AXL//wBz/+wEEgXTAiYASAAAAQYAaggAAAq0AwIwESYAKzU1AAEAFP4UBEQGFAAnAGZAOh0bFw8PFBAHJSUZAhASBSgpHh0hC0ZZGhITEkdZFxMPEx8TLxMDCQMdIRMTIR0DEBUAEBUABUZZABsAPysAGD8/Ehc5Ly8vX15dETMrEQAzKxEAMxESARc5ETMRMzMRMzMzMTABIic1FjMyNRE0JiMiBhURIxEjNTM1MxUhFSEVFAczNjYzMhYVERQGAy9PNDo3gXqCrZ2onJymAZH+bwgKMbV0ycmJ/hQZiRSqA1KGhLzT/ecE23+6un/EVDhPW7/S/Lacqv//ALAAAANEBiECJgHNAAABBgB28QAACLMBDxEmACs1AAEAc//sA6oEXAAZAERAJg8SEgMJGBEDBBobDxJGWQ8PHw8CCwMPDwAGBgxGWQYQABVGWQAWAD8rABg/KxESADkYL19eXSsREgEXOREzETMxMAUiABEQADMyFhcHJiMiBgchFSEWFjMyNxUGAnn4/vIBE/tSnjkxj22kqhACKf3VCaqnjJd0FAEjARABEwEqIBmNM6Opjb61O5M5//8Aav/sA3MEXAIGAFYAAP//AKIAAAFmBd8CBgBMAAD////sAAACHwXTAiYA8wAAAQcAav63AAAACrQCARkRJgArNTX///+R/hQBZgXfAgYATQAAAAIAEP/yBkIESAAVAB0ATEApCRQAGxsHFgQEBxQOBB4fABpGWQAADBQUCUZZFA8MEUdZDBUHG0ZZBxUAPysAGD8rABg/KxESADkYLysREgEXOREzETMRMxEzMTABMzIWFRAhIREhAgIjIic1FjMyEhMhATQmIyMRMyADsPTTy/5L/mX+/ii1qzggFhxziCMCUAHsfZ7n7QEVAoObmv6yA7r9+v4+DHsGAeYB7/z8W1X+lwACALAAAAakBEYAEQAZAEpAJg8LCwwBExMQCBYFBQgMAxobEgoPCkZZAQ8PCBENDwwVCBNGWQgVAD8rABg/PzMSOS8zKxEAMxESARc5ETMRMzMRMxEzETMxMAERITIWFRAhIREhESMRMxEhERMRMyA1NCYjBAABANnL/k7+YP4KrKwB+qbwARSAmQRG/juZmv6yAe7+EgRG/jcByf2u/pe5XFQA//8AFAAABEQGFAIGAOkAAP//ALAAAAQMBiECJgHUAAABBgB2MwAACLMBFBEmACs1//8AAv4UBAYGDAImAFwAAAEGAja3AAAIswEWESYAKzUAAQCw/ocERgRGAAsAMkAZBAEKCwUICAsBAwwNCyIGAg8JAQEERlkBFQA/KxEAMxg/Mz8REgEXOREzETMRMzEwISERMxEhETMRIREjAi/+gaYCSqb+j6YERvxJA7f7uv6HAAABAMkAAAQIBuMABwAjQBEAAwUGAwYJCAcESVkBBwMGEgA/P8YrERIBOTkRMxEzMTABETMRIREjEQNmov1rqgW2AS3+OvrjBbYAAAEAsAAAA0QFiQAHACdAEgUAAgMAAwkIBgQEAUdZBA8DFQA/PysAGBDGERIBOTkRMxEzMTABIREjESERMwNE/hKmAe6mA8f8OQRIAUEA//8AGwAAB0wHcwImADoAAAEHAEMBFwFSAAizARsFJgArNf//ABcAAAYjBiECJgBaAAABBgBDcwAACLMBHhEmACs1//8AGwAAB0wHcwImADoAAAEHAHYBsAFSAAizASMFJgArNf//ABcAAAYjBiECJgBaAAABBwB2ARsAAAAIswEmESYAKzX//wAbAAAHTAclAiYAOgAAAQcAagFkAVIACrQCAS8FJgArNTX//wAXAAAGIwXTAiYAWgAAAQcAagDPAAAACrQCATIRJgArNTX//wAAAAAEewdzAiYAPAAAAQcAQ/+UAVIACLMBCgUmACs1//8AAv4UBAYGIQImAFwAAAEHAEP/YQAAAAizARcRJgArNQABAFIB2QOuAnEAAwARtQACBAUAAQAvMxESATk5MTATNSEVUgNcAdmYmAABAFIB2QeuAnEAAwARtQACBAUAAQAvMxESATk5MTATNSEVUgdcAdmYmP//AFIB2QeuAnECBgIDAAAAAv/8/jEDTv/TAAMABwAcQAsEAAkFAQEIBQYCAQAvMy8zEQEzETMRMzIxMAEhNSE1ITUhA078rgNS/K4DUv4xi4yLAAABABkDwQFEBbYABwAStgEFCAkABAMAP80REgE5OTEwEyc2EjczBgclDBZiOHtCJQPBFloBDHn+9wAAAQAZA8EBRAW2AAcAErYFAQgJBQcDAD/GERIBOTkxMAEXBgIHIxI3ATUPGmI1ekYgBbYWZP73cgEd2AD//wA//vgBbQDuAgYADwAAAAEAGQPBAUYFtgAHABK2AgYJCAMHAwA/zRESATk5MTATFhcjJgInN98lQnstbRgOBbb7+l4BHGUWAAACABkDwQK0BbYABwAPABpADAQBDQkEEBEACAMMAwA/M80yERIBFzkxMAEnNhMzBgIHISc2EjczBgcBlg84enseOw391wwWYjh7QiUDwRbXAQhz/t9hFloBDHn+9wAAAgAZA8ECtAW2AAcAEAAaQAwJDQEFBBESDQUQBwMAPzPGMhESARc5MTABFwYCByMSNyEXBgIHIzYSNwE1DxpiNXpGIAInDhhgOH0aQg0FthZk/vdyAR3YFlv+9npkATRdAP//ABn++QK0AO4BBwILAAD7OAAgtwEAB0ANDUgHuP/AswwMSAe4/8CzCQlIBwARKysrNTUAAQB7AAADiQYUAAsAQ0AhCQICCAMKAQEHBAAEAwUEDA0ABQULBgYHCAABBAQKBwMSAD8uMzMRMz8SOS8zMxEzERIBFzkRMzMRMxEzMxEzMTABJRMjEwU1BQMzAyUDif6gMcQx/rQBTDHEMQFgA+cf+/oEBh+qHgGh/l8eAAEAewAAA5oGFAAVAHVAOgwHFRAEBA8KBRQRAAMDDgsJBhMBAQYFBwQWFwEICAIHAwYGAAkUCwsRDhMMDBIJDg0HDQcNBQ8ABRIAPz8SOTkvLxI5OTIyETMRMzMRMxEzMxEzETMzETMREgEXOREzETMzMzMRMzMzETMzMxEzMxEzMTABJRUlEyMTBTUFAxMFNQUDMwMlFSUTAjkBYf6fMcYx/qYBWisr/qYBWjHGMQFh/p8rAecfqB3+hQF7HagfASsBGx+oHgF8/oQeqB/+5QABAKQB9AJeA+MACwATtgYAAAwNCQMAL80REgE5ETMxMBM0NjMyFhUUBiMiJqRxbGl0c2prcgLseX58e3eBgwD//wCY/+MFrgDyACYAEQAAACcAEQISAAAABwARBCUAAAAHAGT/7Ak7BcsACQAUABgAJAAvADsARgBbQDAAEAUKMEI2PBkrHyUlKzwVQgoXEAhHSBwzMyg/GQMNIjk5LUQNRA1EFxgGFxgHEgcAPzM/PxI5OS8vETMzETMRMz8zMxEzERIBFzkRMxEzETMRMxEzETMxMBMUFjMyERAjIgYFFAYjIiY1ECEyFiUBIwEBFBYzMjY1NCYjIgYFFAYjIiY1ECEyFgUUFjMyNjU0JiMiBgUUBiMiJjUQITIW7FNdtLRdUwHtoZyVowE4mKUCafzVlAMrAqBTXVtZWVtdUwHtopuUowE3lqf7OFFdW1lZW11RAeuim5WjATiWpwQCqqoBVAFSqKrm5+7fAcnw2/pKBbb8Aqupp62rpaWr5ubv3QHJ7N2rqaetq6Wlq+bm7t4ByewA//8AhQOmAT8FtgIGAAoAAP//AIUDpgKwBbYABgAFAAAAAQBSAHUCHwO+AAYAGkAKBAIDBgIGCAcFAQAvLxESATk5ETMRMzEwEwEXAQEHAVIBVnf+3wEhd/6qAicBl0X+ov6hRwGXAAEAUAB1Ah0DvgAGABpACgMABAIAAggHBQEALy8REgE5OREzETMxMAEBJwEBNwECHf6odQEf/uF1AVgCDP5pRwFfAV5F/mkA//8AmP/jA0oFtgAmAAQAAAAHAAQBwQAAAAH+eQAAAo8FtgADABO3AAUCBAMDAhIAPz8RATMRMzEwAQEjAQKP/HmPA4cFtvpKBbYAAQBtAyECwwXHABIAJkARABIMCAgJEgkUEwQPHwAJCh8AP80yPzMREgE5OREzETMRMzEwARE0JiMiBhURIxEzFzM2MyAVEQJMTlByW3RgDgpLkQECAyEBpFRHaXr+pAKZWGX6/lQAAQBiAAAEIwW2ABEAS0AoDgAEBAkFCxACBQcFEhMDBwgHTlkACA4RTFkIDggOBQoKDUxZCgYFGAA/PysREgA5ORgvLysRADMrEQAzERIBFzkRMzMRMzMxMAEhFSERIxEjNTMRIRUhESEVIQG4ATT+zKawsAMR/ZUCRP28AYuB/vYBCoEEK5f96ZcAAQBEAAAESAXJACUAcEBADQkRESIeGgsPFQIPGhwgFwcmJxAcHRxOWQ0dDCAhIE5ZCSEPIR8hPyFPIQQJAx0hHSEXABcUTFkXGAAFS1kABwA/KwAYPysREgA5ORgvL19eXREzKxEAMxEzKxEAMxESARc5ETMRMzMzETMzMTABMhcHJiMiBhUVIRUhFSEVIRUUBgchFSE1NjU1IzUzNSM1MzU0NgKwyZ48mJN6fgGk/lwBpP5cQUoDG/v8zsjIyMjgBclQg0eHgbqBpoEhZIgsmo0w8yOBpoHPss0AAAMAmv/sBdEFtgAWACEAKgBgQDciHBwdJhcQFBQNCQISCRcLHQYrLBsiS1kQE05ZAxsLEA4OEAsbAwUdHh4qS1keBh0YBgBNWQYZAD8rABg/PysREgAXORgvLy8vLysrERIBFzkRMzMRMxEzETMRMzEwJTI2NxUGIyImNREjNTc3MxUzFSMRFBYBFAQhIxEjESEgFgEzMjY1NCYjIwVOIlYLPG5tgZ2dPmLd3TT+kf7r/vZApQEGAQD+/aE0yLmst1J1DgR9HoiKAc9QRb/Tgf5HTVIDl+Pq/cEFttP97pGikY4AAAEAP//sBIkFywAmAHFAPx0XHxYWGgsCBwcaJBEEChoXBicoCxcYF05ZCBgFHR4dTlkCHg8eHx4vHgMJAxgeGB4TIiIATFkiBxMOTFkTGQA/KwAYPysREgA5ORgvL19eXREzKxEAMxEzKxEAMxESARc5ETMRMzMRMxEzETMxMAEgAyEVIQcVFyEVIRYWMzI3FQYjIgADIzUzJzU3IzUzEgAzMhcHJgMb/sFPAf799AICAc/+QSXLqpyZkqvt/t8uppgCApikJwEk7cmlR6YFNf5tgTlALYG0xUKWQQENAQGBKixQgQEFASRhi1YABACN//gGCgXBAAMADwAXACsARUAkJRsgKhAKFAQEAAoqAhsGLC0jHgYSBxgWDScYDRgNGAIDBgIYAD8/Ejk5Ly8RMxEzPzM/MxESARc5ETMRMxEzETMxMAEBIwEBFAYjIiY1NDYzMhYFFDMyNTQjIiUiJjU0NjMyFwcmIyIVFDMyNxUGBR/81ZQDKwF/qZSLqqeUjar+FbKwsLL9yqa2vKtoWCFRUODcYlpOBbb6SgW2+5ift7mdnri6nO7u69uxoaizI2cf7ushZSUAAgB3/+wDnAXLABwAJAA9QB8jGhoPCR0WAxYJDAQlJiMPDRkKBQwTAgwCDAYfEwAGAC8zLzMSOTkvLxESFzkREgEXOREzETMzETMxMCUyNzMGBiMiJjU1Bgc1NjcRNDYzMhYVFAIHERQWEzQjIgYVESQCfa4SXwiZjpagYGBOcpaHdYfOr1Kuf0M+AQBv1aaytanzIxZxFSYB8oqfoYq5/tBK/uVoewQrwlZs/kuJAAAEAMkAAAfDBbYADwAbACcAKwBfQDEJBgYHAQ0NABwWIhAQKygWAAcGLC0fEyUZCygTAxkIExkTGSgIKClKWSgSDggDAQcSAD8zPzM/KxESADk5GC8vERI5ERI5ETMRMxESARc5ETMRMxEzETMRMxEzMTAhIwEjEhURIxEzATMmNREzARQGIyImNTQ2MzIWBRQWMzI2NTQmIyIGAzUhFQTHu/1MCBCXwgKqCA6YAvyhk4uioZOLov4iUV1bT09bXFJWAgAEy/7gbPzBBbb7OvWKA0f8t6O4u6CjtbudcnZ1c3NwcP0gh4cAAgAlAuUFhQW2AAcAGABPQCcAAQ8MDA0RFBQTEw0GAQMFGRoXFgkKChEODgQHAwMEEAgIFA0BBAMAP8QyMjkvMxEzETMRMxEzMxEzMzMREgEXOREzETMRMxEzETMxMAEjESM1IRUjAQMjFxEjETMTEzMRIxE3IwMBcXvRAh/TAljJCAZ3u8TLtH8GCNMC5QJnamr9mQIvgf5SAtH90QIv/S8BpIn90wD//wBQAAAF9AXNAgYBdgAAAAIAZv/dBIsESAAXAB8ANEAaHw4OBBgMDBUEAyAhDRQvHz8fAh8fERwIEQAALzIvMxI5L105MxESARc5ETMRMxEzMTAFIiYCNTQ2NjMyFhIVIREWFjMyNjcXBgYTESYmIyIHEQJ5nfGFivSVmPOH/MUxplKDt1FIYtmTMqNYrXojkwEFnav/jI7+/aX+nDVGaYEpm3wCiwEVNUJ1/un//wBH/+wF8wW2ACcCFwJcAAAAJgB7+wABBwJAA2D9swALtAQDAhkZAD81NTUA//8AIP/sBggFyQAnAhcCogAAACcCQAN1/bMBBgB1/wAAC7QBAwIOGQA/NTU1AP//AEf/7AYEBbYAJwIXApwAAAAmAj0MAAEHAkADcf2zAAu0BAMCLBkAPzU1NQD//wBq/+wGAAW2ACcCFwJGAAAAJwJAA239swEGAj8xAAALtAEDAg4ZAD81NTUAAAIAZv/sBDUFxwAaACgAQUAiJgcfDw8AABQHAykqCyJHWQ4ECwsYBBgRRlkYAwQbRlkEFgA/KwAYPysREgA5GC8SOSsREgEXOREzETMRMzEwARACBCMiJjU0EjYzMhYXNxAhIgYHNTY2MzISATI2EjcmJiMiBgYVFBYENaf+7K2su4jol2GSKwT+5j6QMC+bStLY/aJfpngWGYBQZaVlZQOm/vr+NenJwKkBM6FdS1oBlSwhnxcl/uz7xpABA5ZhbIT6gHaCAAIAJwAABG0FtgAFAAwAKEATCQUKBAUEDg0GBQEFCUlZBRIBAwA/PysREgA5ERIBOTkRMxEzMTA3ATMBFSEBBgcBIQEmJwHPpgHR+7oCIT0o/vwC0f7+RGgFTvqwZgT04Xn8/gL5ygAAAQDJ/hAFIQW2AAcAI0ARAAcDBAcECQgFAklZBQMABBsAPzM/KxESATk5ETMRMzEwAREhESMRIREEd/z8qgRY/hAHDfjzB6b4WgABAEz+EATdBbYACwAxQBoHCQkDAAgCCgYCAAQMDQQHSVkEAwAJSVkAGwA/KwAYPysREgEXOREzETMzETMxMBM1AQE1IRUhAQEhFUwCd/2ZBED8sAJD/aQDqv4QawOcAzNsl/z8/I2YAAEAaAKNBCkDFwADABVACQIABQQBAFBZAQAvKxESATk5MTATNSEVaAPBAo2KigABACX/8gS8BpgACAAcQAsICgMJAwYEBAEIAQAvLxI5LzkzEQEzETMxMAUjASM1IRMBMwJvf/7ptAEh6wICiQ4DDof9VAW9AAADAHcBkwUtBAwAFQAhAC0AM0AYHwwrAAAlGQwELi8iHBwRBgkTDygWFgMJAC8zMxEzLzMSOTkzETMREgEXOREzETMxMAEUBiMiJicGBiMiJjU0NjMyFzYzMhYBMjY3JiYjIgYVFBYBIgYHFhYzMjY1NCYFLaeAXZlBPJlYg6iog7V6fLmFovx9Qm02Mm1ITGRhAqFCbTczbkdMZGUCz4O5anRoca2OhrPb16/+u1tkYV1pV1NqAXlcYmFea1RVaQABAAz+FAL4BhQAFAAcQAwIEgISDQMVFhALBQAALzIvMxESARc5ETMxMAEyFxUmIyIVERQGIyInNRYzMjUREAJ9TywxPrClo0o7PTq2BhQQiRbz+uGwuxOHFvMFHwFqAAACAGIBhwQtBB8AFwAvAHBAQCgPGwMPAzEwJx4eGFBZDx4fHi8eAwkDHipAKiRQWRsqQA8GBgBQWQ8GHwYvBgMJAwYSQBIMUFkDABIQEiASAxIAL13EKwAaGBDNX15dKwAQGMQa3sQrABoYEM1fXl0rABAYxBESATk5ETMRMzEwASIGBzU2MzIWFxYWMzI2NxUGIyImJyYmAyIGBzU2MzIWFxYWMzI2NxUGIyImJyYmAVA2fzlslENwWE1bLTWANmWZQ29YSVsxOYA1apZFdFJFXzE3gTNkmkV2T1RVAgBAOZZuHCUhGUI5l20dJR4ZAZZENZVtICIdGkI3lm4gISIYAAABAGgApgQpBQIAEwBGQCYFARALCwkKDgQAEwEIFBUNBQYFUFkKCA8GAQkDBg4CAQJQWRIRAQAvM8QrEQAzGC9fXl3GMysRADMREgEXOREzETMxMAEhNSETITUhExcHIRUhAyEVIQMnAX3+6wFUf/4tAhOHfW0BF/6qgQHX/emDfQHBiQEQiQEfOeaJ/vCJ/uU3//8AaAABBCkE2QImAB8AAAEHAisAAP10AAmzAQAHEgA/NTUA//8AaAABBCkE2QImACEAAAEHAisAAP10AAmzAQAHEgA/NTUAAAIAbwAABD0FwwAFAAkAIEANCAAGAwADCgsJBwIFAgAvLxI5ORESATk5ETMRMzEwEwEzAQEjCQNvAcJIAcT+PEgBYv7D/sMBPQLfAuT9HP0hAuECE/3t/ewA//8AHQAABBwGHwAmAEkAAAAHAEwCtgAA//8AHQAABAwGHwAmAEkAAAAHAE8CtgAAAAEA2wTZA74GDAANABhACQsDDw4KBIAHAAAvMhrMMhESATk5MTABIiYnMxYWMzI2NzMGBgJIuaoKnAlbcWdjC50MsgTZj6RoUlhinpUAAAH/kf4UAVYESAAMAB1ADQsICA4NCQ8ABUZZABsAPysAGD8REgE5ETMxMBMiJzUWMzI2NREzERArXztFQ05Jpv4UGYcUVVcE/PsQ/rwAAAEBiQTNAnUGFAAJABO2CQQKCwSACQAvGs0REgE5OTEwATY2NzMVBgYHIwGJEycKqAtYL1oE5TenURIzvEYAAQFx/jsCb/+DAAkAE7YJBAoLCYAEAC8azRESATk5MTABNjY3MxUGBgcjAXEcMweoC2I3Wv5UQLo1EjPBQgABAYEE2QJ/BiEACQATtgkECgsJgAQALxrNERIBOTkxMAEGBgcjNTY2NzMCfx01BqYOYzFcBgg9wTETPb85AAIAJwI5Ap4FxwALABUAIEAOBgwAEQwRFxYJEx8DDiEAPzM/MxESATk5ETMRMzEwExQWMzI2NTQmIyIGBRAhIiY1ECEyFrBSXl5WVl5eUgHu/sSenQE7np4EAKimpauqpKWp/jfs3QHF6AACABQCSgK0BbwACgAUADxAHxQFCwcDAwkCAAIFAxUWAQUFCQ8UHxQCFBQDDgcfAyAAPz8zEjkvXTMzETMREgEXOREzMxEzMxEzMTABIxUjNSE1ATMRMyE1NDcOAwcHArR9kf5uAZiLff7yBgUYHh4LqAMUysplAkP9zcOGSwwnLS0R9gABADsCNwKJBaoAHQArQBUQAxwXCRcaAwQfHhMAAAYbGB4NBiEAPzM/MxI5LzMREgEXOREzETMxMAEyFhUUBiMiJic1FhYzMjY1NCYjIgYHJxMhFSEHNgFIkbCqpkqLKTiMNl9ubWY5TB87IQHv/oMUPgRoj3uMmx8XgyImU1lOWBEIKQGgaOYMAAACACkCOQKiBccAFwAjADZAHBsSIQsAAAYSAyUkHgsVAA8QDwIPDwMYFSEIAx8APzM/MxI5L10SOTMREgEXOREzMxEzMTATEDYzMhcVJiMiBgczNjYzMhYVFAYjIiYFMjY1NCYjIgYVFBYp29tKMTRTjZYKCB1xVX2Upo2ZrQFEUWNYVlVwagPDAQX/D3ISmaYrO5R+kKTSY11jT1taO1l8AAABADkCSgKPBbYABgAcQA0BBQUAAgMHCAIDHgAgAD8/MxESARc5ETMxMBMBITUhFQGiAV7+OQJW/qACSgL4dF788gADADMCOQKTBccAFQAiAC0AP0AiFg0mEysDHAcHAwUQEw0GLi8FECAgCykbKQIpKRkKISMAHwA/Mj8zOS9dMxI5ORESARc5ETMRMxEzETMxMAEyFhUUBxYVFAYjIiY1NDY3JiY1NDYDFBYzMjY1NCYnJwYGEyIGFRQWFzY1NCYBZHyXlLClipKfSVVKOZ01VFZaVF1RHEhGrERLRFGMTgXHdmiCTEqecYmAdEV0Li5dRGZ+/WY8SUk8P08cCiJUAe88OS9HITZhOTwAAgAjAjkCnAXJABYAIgA8QB8aESAKAAAFEQMjJB0OCgsLFA8OHw4CDg4DFxQfCAMhAD8zPzMSOS9dEjkRMxEzERIBFzkRMzMRMzEwARAGIyInNRYzIBMjBgYjIiY1NDYzMhYlIgYVFBYzMjY1NCYCnNrUUzExXQEUFQojdEGDmamImLD+uFFfVVdUc2cERv7y/w90FAFGMzSSg4ilyltfV1FfVT5hcgAAFgBU/oEHwQXuAAUACwARABcAGwAfACMAJwArAC8AMwA3ADsAPwBDAEcAUwBbAGsAdAB8AIkA+ECHQUA9PDEwDwUADFROWEh2a3BgemeFhkVEKSglJBQKCRcXhgYSOxt/Z2A4GDcvazQsSCMfIBwDEU4MGYqLCgAqQlpRhlx0XClBRj5kdXVsRT2CfVZLa3ZrJjIlMRUNAEIBQT5cPWwNMTIDawxcbGtrbFwDAS0sHRwZGBMSDww5ODU0ISAHBgQBAC8zMzMzMzMzMzMvMzMzMzMzMzMzEhc5Ly8vERIXORE5Ejk5ETk5ETMRMxEzETMQxDLEMhEzETMSOREzETMRMxDExDIRMxEzERIBFzkRMzMzMzMzMzMzETMRMxEzETMRMxEzETMzMzMzMzMzMzEwExEhFSMVJTUhESM1AREzFTMVITUzNTMRITUhFSE1IRUBNSEVASMRMxEjETMBNSEVASMRMwE1IRUzNSEVASMRMzUjETMBIxEzBRQGIyImNTQ2MzIWBRQzMjU0IyIlMzIWFRQGBxUWFhUUBiMjEzMyNjU0JiMjFRUzMjY1NCMBIic1FjMyNREzERQGVAEvwAXOATBt+QBvwAUOw239SQER++EBDv7yAQ4Et21tbW37wgEQ/DBvbwLAARB3ARH6qG9vb28G/m1t+5+Hf3+Hh39+iP5zh4eHhwHhrG1wLiw9Lm1ez3tCLiQqLztKMSVaAV40HCsZVn1pBL4BMG/BwW/+0MH5AgEvwm1twv7RbW1tbQb+b2/6qAEOAgIBD/o7bW0BpgEOBEpvb29v/C8BEHkBD/1oARBJkZyckZKbmpPFxcRhQ1MxQggIDkQ1UVkBYiIgIh3jmislSv76CmYIVgGS/nJfYwAAAwBU/sEHqgYUAAMAHgAqAC5AGQELFyUEHh8RAwkrLCgeFA4iHg4OHiIDAgAALy8XOS8vLxEzETMREgEXOTEwCQMFNTQ2NzY2NTQmIyIGBxc2MzIWFRQGBwYGFRUDFBYzMjY1NCYjIgYD/gOs/FT8VgPrLEFnSbulT7pHUqBaPz4xSFQ7G0dGQklIQ0hFBhT8VvxXA6n7LzJBMVJ+WIeaOCqyUDovNUs2RHBKO/7tP0hJPkBJSP///5H+FAJXBiECJgI3AAABBwFM/qkAAAAIswEYESYAKzX//wAZA8EBRAW2AgYCBwAAAAIACv/sBN8GKwAtADYAZkA5GwcXCzQlLh8fKwItAiULBxIGNzgUDkdZACEuIUdZKy4PLh8uAgkDFC4ULgUoKDFGWSgBBR1GWQUWAD8rABg/KxESADk5GC8vX15dETMrEQAzKxESARc5ETMzETMRMxEzETMxMAEWFRAAISARNDc2NTQmIyIGByc2MzIWFRQHBhUUMyARNCcmJCY1NDYzMgATMxUlJgIjIgYVFAQEVgT+4P79/ncQDyQgGTYPIVNfWF0PEOkBdwTf/smgtqjQAQAqj/7HHLd7XWEBEwNOLkH+n/5uAVg5e3oXLyMPCXYnXV0jg4Q6zwJwPywCabyDkKP+zf7XgYHTAQBfS42aAAEAAAAABHsFwwAVAChAFBESBxIUAxYXABIUAxISBQpKWQUEAD8rABg/PxI5ERIBFzkRMzEwARISNjYzMhcVJiMiDgMHESMRATMCOXqNTVw6MCgaHyg7VnxlH6z+I7oCzQEjATdsMA+HBjih/OxV/eMCLwOHAAACABL/7AZ3BEgAFAApAExAJxgDEiEhHicNCg0eAwYFKisTHx8ACBULBggGRlkIDyQbABtGWRAAFgA/MisRADMYPysRADMzERI5GC85ERIBFzkRMxEzEjkRMzEwBSImNTQTITU3IRUjFhUUBiMiJyMGAQYCFRQWMzI2NTUzFRQWMzI2NTQnAim6x4f+444F1/p1yLndRAhE/s8/Qmx1XWyia111bW8U5/DwAQdKRI78+/DntrYDzoT+/meuqI99vLx6kqmt/u8A//8AyQAABnEHdQImADAAAAEHAHYBnAFUAAizAR0FJgArNf//ALAAAAbLBiECJgBQAAABBwB2Ac0AAAAIswEtESYAKzX//wAA/dUFEAW8AiYAJAAAAAcCWwE1AAD//wBe/dUDzQRaAiYARAAAAAcCWwDHAAD///7f/+wF0gXNACYAMhQAAQcCXP5HAAAACbMDAhoDAD81NQAAAgB1/dUCNf+DAAsAFwAeQAwSBgwABgAYGRUDDwkALzPMMhESATk5ETMRMzEwARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AjV9ZmV4eGVlfm5CMzNCPDk1QP6uYXh1YmJ1dmE5PDw5OD09AAIAmARoAs8FxQAIABcAHkAODgkDCAwTCQUYGQILCBUAL8TcxhESARc5ETMxMAE2NzMVBgYHIyU0NxUGFRQeAhUUIyImAbBGHL0pdzFO/ujteR8lH103QwSHtXoUTqw5dqM9SCk1FBMQGhxKRAD//wAdAAAG0wYfACcASQKwAAAAJgBJAAAABwBMBW0AAP//AB0AAAbDBh8AJwBJArAAAAAmAEkAAAAHAE8FbQAAAAIAff/sBmQGFAAVACEAPEAfFgYPEREcAAAUCwYEIiMUCwMJCR9JWQ8JBAMZSVkDEwA/KwAYP8YrERIAOTkREgEXOREzMxEzETMxMAEQACEgABEQACEgFz4CNTMXBgYHFgEQEjMyEhEQAiMiAgW8/p3+xv69/qEBYQFDAUWzMjobtg4dg2hg+3X69PP29fLz/QLd/p7+cQGJAWoBaAGG1wxDZmkWm60nsP7+/tb+zgExASsBJwEx/tEAAAIAc//sBRkE8AAWACIAPEAfFwcQEhIdAAAVDAcEIyQVDAMKCiBGWRAKEAMaRlkDFgA/KwAYP8YrERIAOTkREgEXOREzMxEzETMxMAEQACMiJgI1EAAzMhc+AjUzFwYGBxYFFBYzMjY1NCYjIgYEYv7y7pPkfAEM7tmJMzoatA8feWZH/L2era+dn6+tnAIl/vT+04oBAq0BDAErjQ9BY24XnK8mirnT29vT0tjYAAEAuv/sBnsGFAAbADNAGAUHBwELFBELER0cCgEOGwUSAw4XSVkOEwA/KwAYP8YzEjk5ERIBOTkRMxEzMxEzMTABFT4CNTMXBgYHERAAISAANREzERQWMzI2NREFGTpGH7UOIayV/uH++P70/tSqzMa4wQW2xgg+cG4WtrgZ/Y3+/v7qAR/9A678RrfEwbwDuAAAAQCk/+wFlgTyAB0AREAiARwNDw8TFAcHChMcEx4fFRYKEhYDFA0IHQ8ZBEZZGRYUFQA/PysAGD8zxhIXOREzERIBOTkRMzMRMxEzETMRMzEwAREUFjMyNjURMxU2NjUzFwYGBxEjJyMGBiMiJjURAUx6gqyfplJKsg8gsI2JGAk0tW/LyARG/TuGhLzVAj55C4CaF7q/Dvysk1JVvtECywD///xTBNn93AYhAAcAQ/rKAAD///0NBNn+lgYhAAcAdvuEAAD///wZBNn/AQXdAAcBUvsRAAAAAf0IBLj+cwaPABEAHkAMAgUFDQ0IAAATCxAEAC/MMhEBMxEzMxI5ETMxMAEUBwcjJzY2NTQmIyIHNTYzIP5zpgppDFZOQ0k+ICZFAQAF14wicbAOMisrKQZkCgAB/Tv+oP4C/30ACwARtQYAAA0JAwAvzREBMxEzMTAFNDYzMhYVFAYjIib9OzsqKDo6KCo78jk2Njk3NzcA//8AyQAAA/gHcwImACgAAAEHAEP/2AFSAAizAQ0FJgArNf//AMsAAAVSB3MCJgGyAAABBwBDAGgBUgAIswERBSYAKzX//wBz/+wEEgYhAiYASAAAAQYAQ7cAAAizAhwRJgArNf//ALAAAARiBiECJgHSAAABBgBD3AAACLMBDxEmACs1AAEAhf/sB5EFyQAxAEVAJCIWKicvCQkEJxsWBTIzAB8ZH0lZECgoEwYZBCwlEyVJWQwTEwA/MysRADMYPzMSOS85KxEAMxESARc5ETMRMxEzMTABIgYHJzYzMgAREAAjIiYnIwYGIyAAERASMzIXByYmIyICERASMzI3ETMRFjMyEhEQAgWkPF4tRX6W5AEB/uX/bKxTCFCpa/8A/uX/5Jl8Ri1dPJOlz7uLZqpmjrvOpQUvKR+SUP6I/q3+jf5hLTMyLgGbAXcBUwF4UJIfKf7X/vb+0/6yTAHJ/jdMAUsBMAELASgAAQAAAAAGHQRIAB0AKEAWFwANDgUFHh8bFQ0AEgoEBBYOBQ8EFQA/PzMzEhc5PxESARc5MTABBgYDIwEzExYXMzY2EwMzABYXMzYSETMQAgcjAyYDJwoUs9X+f6z2IC4IE0qOrLIBCS0KCK2ZpsPbtn0hAckaM/6EBEj9SV29NaMBJAHV/P+QLLgBswFS/pb+B+UBWlwAAgAXAAAE/AYUABEAGgBMQCgIBBISAQ8WCwsGDwAEGxwHEQARSVkEAAgaSVkACAAIDwIADxJKWQ8SAD8rABg/Ejk5Ly8rEQAzKxEAMxESARc5ETMRMzMRMzMxMBMhETMRIRUhETMgERQEISERIQEzMjY1NCYjIxcBP6wBov5eyQIx/vf++/5o/sEB69XAtbratgT6ARr+5pT+4P5k0NoEZvwriZCKegAAAgAXAAAEnAUnABEAGQBHQCYEABMTDwsWBwcCCw0EGhsDDQ4NRlkEEkZZBAQLEAAODwsTRlkLFQA/KwAYPzPGEjkvKysRADMREgEXOREzETMzETMzMTABIRUhESEgERQGIyERIzUzNTMRESEgNTQmIwGoAVj+qAE/AbXf3P4h6+umATEBH4ecBEiM/sX+zaaoA7yM3/zN/pe5XFQAAQDJ/+wHIQXLACAASkApFxMTFAYYHQwFGBEUBiEiGwBJWRsEBhIXEklZAxcXFBUDFBIOCUlZDhMAPysAGD8/EjkvMysRADMYPysREgEXOREzETMRMzEwASIEByEVIRIAMzI3FQYjIAADIREjETMRIRIAJTIXByYmBY/j/vwfAr/9PQgBCfeawpje/sH+pQj+oqqqAWQeAXEBMNW2SGSdBTP68Zb+7/7iN5U5AXABVP1QBbb9kgEzAU4CXJIwJgAAAQCw/+wFnARcACEAWUAyFhkZCgMJBQUGECAYAwYFIiMNE0ZZDRAZBAkERlkWDwkfCQILAwkJBgcPBhUAHEZZABYAPysAGD8/EjkvX15dMysRADMYPysREgEXOREzETMRMzMRMzEwBSIAJyERIxEzESE2JDMyFhcHJiMiBgchFSEWFjMyNjcVBgR36/70C/7hpqYBIRgBDd9RmjYyimWjpxACGP3mCamkPXdibhQBCvj+EgRI/jPr9iAZjTOkqo28tRYlkzkAAgAAAAAFbQW2AAsAEgA0QBsCAwcMAw0KBRQTAQUMBUlZEAgMDAcIAwsDBxIAPzMzPxI5LxI5KxEAMxESARc5ETMxMAEjESMRIwEjATMBIwEhJyYnBgcDmJSclf7fsgJongJnt/1cAUxSOB4YQAKq/VYCqv1WBbb6SgM/z5BkYqQAAAIACgAABHkESAALABIANUAcBQYKDAYNAwEGFBMECAwIRlkRCwwMCgsPBgIKFQA/MzM/EjkvEjkrEQAzERIBFzkRMzEwAQEjAyMRIxEjAyMBAyEmJicjBgKoAdGsz3GXc82sAdEhAQ8rOCIJHARI+7gB6f4XAen+FwRI/i1simpcAAACAMkAAAdeBbYAEwAaAEZAJQ4KCgsCAxIVAxQIBwsHGxwFAQkOCUlZFBgMDg4LEAwDEwcDCxIAPzMzMz8zEjkvEjkzKxEAMzMREgEXOREzETMRMzEwASMRIxEjASMBIREjETMRIQEzASMBIQImJwYGBYWPmpP+47oBIv5fqqoB4QEGngJmvP1mAT52HAwTIwKw/VACsP1QArD9UAW2/ZICbvpKA0gBNVYvQ2gAAgCwAAAGFARIABMAGQBNQCsRDQ0OBQYBGQYYCwoOBxobCAQMEQxGWRgVEy8RPxECEREOEw8PDwoGAg4VAD8zMzM/PxI5L10SOTMrEQAzMxESARc5ETMRMxEzMTABASMDIxEjESMDIxMhESMRMxEhExcjBgYHIQRGAc6q0HGYbtGs0f7fpqYBXsVoCAogWQEMBEj7uAHu/hIB7v4SAe7+EgRI/jMBzXMiX9kAAAIAFAAABa4FtgAfACIAS0AoIAEPECEeHh0QAgEHBiQjHgEhHx8hSVkOEh0SSlkiAh0dGB8DEAgYEgA/MzM/EjkvMzMrEQAzKxESADk5ERIBFzkRMxEzETMxMAEVAR4CFxMjAy4CIyMRIxEjIgYGBwMjEz4CNwE1BSEBBSn+WnaaZDKFrokjRGVZG6oaW2NBIIe5iC9jlXb+ZQO+/QoBewW2hf4RBkiLpP47AclvYCb9QgK+J19v/jcBxZ+OSQcB74WZ/jkAAAIADAAABRQESAAgACMATkAqIQEPECIfGB8eEAIBBwclJB8BIiAgIkZZEQ4SHhJHWSMCHh4YIA8QCBgVAD8zMz8SOS8zMysRADMzKxESADk5ERIBFzkRMxEzETMxMAEVAR4DEyMDLgIjIxEjESMiBgYHAyMTPgM3ATUFIQEEi/6uV29JMZushSI6VEwKmQtLUjgnh6qDGDBJblf+sQMg/bQBJQRIaf6gBzBQaf5xAVBXRxz99gIKGkBe/q4BUD1pTzIIAWBpjP7BAAACAMkAAAfFBbYAJAAnAGFANSEdHR4mIw8QAiclAQcBJxAiGyMYHgkpKCMBJCYkJklZEg4cIRxJWScCISEeJAMfAxgQCB4SAD8zMzM/PxI5LzMzKxEAMzMrERIAOTkREgEXOREzETMRMxEzETMRMzEwARUBHgIXEyMDLgIjIxEjESMiBgYHAyMTNjchESMRMxEhATUFIQEHPf5deJllLYioih9GaV8YrBleZEIhh7KHNzj+UqqqAtf+aAPB/QoBewW2hf4OBkiQnP47AcloYyj9RAK8KF9s/jcBvrg6/VAFtv2SAemFmf43AAACALAAAAa6BEgAJAAnAGdAOiEdHR4mIw8QAiclAQcBJxAiGyMYHgkpKCMBJCYkJkZZEg4cIRxGWScCLyE/IQIhIR4kDx8PGBAIHhUAPzMzMz8/EjkvXTMzKxEAMzMrERIAOTkREgEXOREzETMRMxEzETMRMzEwARUBHgMTIwMuAiMjESMRIyIGBgcDIxM2NyERIxEzESEBNQUhAQYx/q5Yb0kwm6yFIjpWSgqaCktUNyaHqoMvJf7NpqYCNf6wAyH9tAElBEhp/p4HMU5p/nIBUFZGHP34AggbP1z+rgFQeCj+EARI/jUBYmmM/scAAQA//k4ENQbRAEsAhEBNABMhPxlGRgo/N0M8KhwtKBMLTE1JFkpZSRM5NDEPLh8uLy4DCQMuKkBDHRwdHEpZHR0QPCoqJEpZKgQKCUlZChAQA0lZECMMB0lZDCIAPysAGD8rABgQxisAGD8rEQAzEjkYLysREgA5GhgQ3V9eXTnEMj8rERIBFzkRMxEzETMxMBcUFjMyNzYzMhcVJiMiBwYjIiY1NDY3NjY1ECEjNTMyNjU0JiMiBgcnNjcmJyc1MxYXNjYzMhcVJiMiBgcWFhUUBgcVFhYVFAQFBgbwV1lheHhGm0dQoERpaWmzuNnozLX+QNrRzeGiiWq7blaovjl1MXtcg1yDQDIwGCssbzCywb+qusv+5f7mioaJNzIHBiemMwUFfYV+gQkIio0BDI+ThGuAN0VychxCeTQbO4hzVg5xClJHF72PjLgaCBiykNDVCQU3AAABABn+ewN/BU4ARgCDQE4XKTYLLhAQIAsDDgg+MkA8KQtHSEQ+QQAFR1kAD0EfQS9BAwkDQT4mGkZZIx1GWQ4zMjMyRlkmIzMzIyYDID4+OEZZCD4QICITLEdZExYAPysAGD8/MysREgAXORgvLy8rERIAOSsrABgQ1F9eXcQrERIAORESARc5ETMRMxEzMTABMhcVJiMiBgcWFhUUBxUWFRQGBw4CFRQWMzI3NzIXFSYmIwcGIyImNTQ2NyQ1NCYjIzUzIDU0IyIGByc2NyYnNTMWFzY2AvgzLRgpL2cteozT+PLhXW0wS1lWeq99JxVUN7OCXJCfvrQBTpyflHcBN/xKj1g7fH5cZ3tLjFiGBU4PcApPPhyKa7g5CEfKlKgDAhcqLDErBQUnjxMYBQV3cHR9AwS+YVqNrKIiJIc3D3ViGzSJblX//wBtAAAF8gW2AgYBdQAA//8ApP4UBYcGEgIGAZUAAAADAH3/7AW+Bc0ACwASABkAR0AlFhAQBhcPDwAGABobFhBJWQ8WAQsDFhYDCQkTSVkJBAMMSVkDEwA/KwAYPysREgA5GC9fXl0rERIBOTkRMxEzETMRMzEwARAAISAAERAAISAAATISEyESEhMiAgMhJgIFvv6d/sT+vf6hAWABRAE7AWL9YeX3DfwrDfno4PsTA9MR9ALd/qH+bgGLAWgBZQGJ/nD8RAERAQz+9f7uBLT+/v8A/gEEAAADAHP/7ARiBFwADAATABoASUAnFxERBxgQEAAHABscFxFGWQ8XHxcCCwMXFwMKChRGWQoQAw1GWQMWAD8rABg/KxESADkYL19eXSsREgE5OREzETMRMxEzMTABEAAjIiYCNRAAMzIAATI2NyEWFhMiBgchJiYEYv7y7pPkfAEM7uYBD/4InqQK/WkJoKCcng0Ckw+hAiX+9P7TigECrQEMASv+zv1NuL+6vQNYraeorAAAAQAAAAAFSAXDABUAIEAQBhYTFxEASlkRBAoFBgMFEgA/PxI5PysRATMSOTEwASIGBwEjATMBFhc2NxM+AjMyFxUmBOE7Tjn+uMX97rQBUkgjIEaiO1RuWSpPOAU3Z7X75QW2/FbHj5DfAga/mEETjRQAAQAAAAAEPQRSABYAHkAPARcPGA0SR1kNEAUBDwAVAD8/OT8rEQEzEjkxMCEBMxMSFzM2ExM+AjMyFxUmIyIGBwMBlv5qruFkEwgXUmAlR1tULR4dJi86HPgESP2b/vRkdgELATV6ezQKfwhUXPzf//8AAAAABUgHcwImAoAAAAEHA3YE1wFSAAq0AgEhBSYAKzU1//8AAAAABD0GIQImAoEAAAEHA3YEZAAAAAq0AgEiESYAKzU1AAMAff4UCaIFzQALABcALgBEQCYMBhIAIS4nGAAGBi8wJSpKWSUbHRwcAyAYDwkVSVkJBAMPSVkDEwA/KwAYPysAGD8zEjkRMz8rERIBFzkRMxEzMTABEAAhIAAREAAhIAABEBIzMhIREAIjIgIlMxMWFzM2NhMzAQYGIyInNRYzMjY3NwVU/rn+3P7X/r0BQwEsASMBRfvd39na3dzY2uEEb7D2ThQIC1PksP4rRbyITEo3Ql51Iz0C3f6g/m8BiwFoAWYBiP5w/qD+1/7NATEBKwEpAS/+0kH9i89mLPsCg/sgtp4RhQxnWZz//wBz/hQIewRcACYAUgAAAAcAXAR1AAAAAgB9/4cGEAYtABMAKABRQCoUCiYNBxEiIgMcHwAAHAcXCgUpKiQiJg0mSVkRDw0DHBoXBxdJWQUDBxIAPzMzKxEAMzMYPzMzKxEAMzMREgEXOREzETMzETMRMzMRMzEwARAABQYjIickABEQACU2MzIXBAABFBIXNjYzMhc2EjU0AicGIyInBgIGEP7R/vgad3wU/vT+0QErARAUfHkWAQwBLfshyr0RSTZuH73Kyr0fbnEfvcoC3f7S/nMsb28pAYoBNgExAYUsbGws/nP+1fT+zykwJlYpATH09AEvJ1hWJ/7TAAACAHP/kwTPBLQAFwAtAFBAKhgMDwkrGyUVAyMAAAMgGwkMBi4vKCUrDytGWRUSDxAgHhsJG0ZZBgMJFQA/MzMrEQAzMxg/MzMrEQAzMxESARc5ETMRMzMRMxEzETMxMAEUAgcGBiMiJicmAjU0Ejc2NjMyFhcWEgUUFhc2NjMyFzY2NRAlBgYjIiYnBgYEz+DMCUA4OT0Jy+Xg0Ag+OThACcri/FB9iQw8NWcYhnz+/A09MzU8DIl9AiXp/t8lNi0rOCQBJuXpASAkOCorOSb+3OGx0h8qIkof0q8BYD4qICAsH9EAAAMAff/sB38IOwAVAEUAVABVQC5DNx8rKwEmRktQSDwMNwpVVhUCAgcHEAxSQEg6IkA6QElZKDoEHBY0FklZLjQTAD8zKxEAMxg/MysRADMYENYa3NTNMhI5LzMREgEXOREzETMxMAEVIyIuAiMiBhUVIzU0NjMyHgIzATI2NxYWMzISERACIyIGByc2MzIAERAAISImJwYGIyAAERAAMzIXByYmIyICERASARQHNTY1NC4CNTQzMhYFohFUjnhmKy88fXRwOnB3hU79KFirPTerXbzSpZM8XytGeZrkAQH+4P79aKpMS6du/vz+4wEB5Jp5RitePJSl0gKA7XgfJB9cOEMHx3kkKyQ0MxAcZ24kLCT4ukI/OUgBTgEtAQsBKCsfklL+iP6t/oz+YigwLSsBnQF1AVUBdlKSHyv+2f70/tH+tAZooj1IKTUUEhEaHElEAAADAHP/7AYEBwYAKgA/AE4AXEAzEwccKCgsIkBFDUpCNgcKT1AyOj8tLTZMQgpAHxAKEEZZAhdGWQIEJQoQGhUEFUZZAAQWAD8zKxEAMxg/MxI5KysRADMaGBDe3NQyETPNMhESARc5ETMRMzEwBSInBiMiAhEQEjMyFhcHJiMiBhUQITI3FhYzIBE0JiMiByc2NjMyEhEQAgMVIyIuAiMiFRUjNTQ2MzIeAjMFFAc1NjU0LgI1NDMyFgQrlF5cj+H6z7o+dyg5WUd0bQExe3A+b0MBLW5zR1k5KHc+u873URBUj3hlK2t9c3A6cXaDTv7w7nceJB5cOEMUQUEBIwEOARcBKCAZizPW1v5eUComAaLW1jOLGSD+1/7q/vX+2galeCQqJGYRH2RvJSsl3aE+SCg4FBERGRtKRAAAAgBe/+wHfwcEAA0AQABfQDQwJDk2PhcXARI2KQwkB0FCDi0nLUlZHjc3IScFCQkNQAkPSA0HAwtAFCcEOzMhM0lZGiETAD8zKxEAMxg/MxreMjLNKzIRMxESOS85KxEAMxESARc5ETMRMxEzMTABFQcjJyMHIycjByMnNQEiBgcnNjMyEhEQACEiJicjBgYjIAAREAAzMhcHJiYjIgIREBIzMjY3ETMRFjMyEhEQAgWLUCAyujEhMbwvIVADQzxdLUZ8meT//uL+/XSsTAlOrHD+/P7jAQHlln5GLV08k6XSvkGCM6pmkbzUpQcEG6xnZ2dnrBv+KykfklD+iP6t/ov+YzAwMS8BoAFyAVUBdlCSHyn+1/72/tH+tCYmAcn+N0wBSgExAQsBKAAAAgAAAAAGHQWkAA0AKgA/QCQkAQ4aGwwSByssKBUOHxYDERIFCQkNQAkPSA0HAwsjGxIPERUAPz8zM94yMs0rMhEzERIXOT8REgEXOTEwARUHIycjByMnIwcjJzUBBwMjATMTFhczNjYTAzMAFhczNhIRMxACByMDJgS2Uh4yvDEfMbwyHlABrCeq1f5/rPYnKQgMI7qssgEJLQoIrZmmw9u2fSEFpBusZ2dnZ6wb/CVf/pYESP1Jb6sjUQGIAdX8/5AsuAGzAVL+lv4H5QFaXAAAAQB9/hQE4wXLABcALUAYAw8JChUKDwMYGRMASVkTBAwGSVkMEwobAD8/KwAYPysREgEXOREzETMxMAEiABEQACEyNxEjESMgABE0EiQzMhcHJgNI9f7gAQoBAm85qhT+tf6frwFI2O2qR6sFM/7A/uj+2v7UF/10AdgBhAFt4AFWuFSSTgABAHP+FAOiBFwAGAAvQBgPAxcWCRYDAxkaFxsGDEZZBhAAEkZZABYAPysAGD8rABg/ERIBFzkRMxEzMTAFIgAREAAzMhYXByYjIgYVFBYzMjY3ESMRAnX+/vwBEftPpDAxjmixq6urNVA5phQBHwESARQBKyIXjTPN3dzIERr9bgHYAAABAGr//AR1BQYAEwAvQCEEAggDBgARBwoQDRIMDg4VFBMAAxEGDwUQBw0KCQwLARIAP80XORESARc5MTABAycTJTcFEyU3BRMXAwUHJQMFBwICtnm2/uFCASHN/t9DASG5drgBIUT+4cwBHkEBOf7DQwFCpnOoAWSmdagBPUP+wKZzpv6eqHMAAQDLBJEDrAW0ABMAHkAMAAYKEAYQFBUDAA0JAC8zMzIREgE5OREzETMxMAEGBiMiJjU0NjMhNjYzMhYVFAYjAYcGKjAzKSo2AcEGKy8zLSw2BPAtMjI1NSkuMDEzOCgAAQD4BOUD2wXXABMAHEALBxIVFAASEgwEgAkALxrMMjMRMxESATk5MTABMjc2MzIWFRUjNTQjIg4CIyM1AQR4lpVRb3R9aitmeY5UEAViOzpvZB8RZiQrJHkAAQHfBNcCzQY1AA4AGEAKCgAMBQADDxADDQAvzBESARc5ETMxMAE0NjMyFRQOAhUUFxUmAd9DOFweJB537gW4OEVMGxkQEhQ2KEpAAAEB4QTXAs8GNQAOABhACgUAAAoCAw8QDAIAL8wREgEXOREzMTABFAc1NjU0LgI1NDMyFgLP7nceJB5cOEMFuKFASig2FBIQGRtMRQAIACn+wQfBBZEADAAaACgANgBEAFIAXwBtAIBASV8oRFoiPgwaBxRSNm1MMGcQbm8ABzpISEFPRUQ+TFZjY1xqZl9abR4sLCUzLyIoAzYQFwdPTGptMzYXFzYzbWpMTwcICQ0UAwkALzMvMxIXOS8vLy8vLy8vETMRFzMRMzMRMxEzMzMRMzMRMxEzMzMRMzMRMxEzERIBFzkxMAEmJiMiBgcjNjMyFhcDJiYjIgYHIzY2MzIWFwEmJiMiBgcjNjYzMhYXISYmIyIGByM2NjMyFhcBJiYjIgYHIzY2MzIWFyEmJiMiBgcjNjYzMhYXASYmIyIGByM2MzIWFyEmJiMiBgcjNjYzMhYXBG8FPEVOMgVLC8VdcQdPBTxFTjIFSwVkZ1xzBgH0BTxETjIFTAVlZ1xzBvsvBTxETjIFTAVlZ1xzBgQxBTxETjIFTAVlZ1xzBvsvBTxETjIFTAVlZ1xzBgTwBTxETjMFSwvGXHMG+b4FPEROMgVMBWVnXHMGBM8sLCkvwmVd+fIsLCkvWWlmXAEWLSsnMVppZl0tKycxWmlmXQPbLSsnMVppZl0tKycxWmlmXf4ZLCwoMMJoWi0rJzFaaGZcAAAIACn+fwd9BdMABwAPABcAHwAnAC4ANQA+ADRAJRUXJSA+OgUBKSwfHDI1CQ0QP0A7KwcuNhkVHREvJw8kMw4FDAUALy8SFzkREgEXOTEwBRcGBgcjNjcDJzY2NzMGBwE3FhYXFSYnBQcmJic1FhcBNzY2NxcGBwEHBgcnNjcDJyYnNxYXARcWFhcHJiYnBDcLEUYkYTUROwsTSR9hNBICIw5HyEHdgftoDkK/T92BA6YCQ75DRbF4/OoCm6lFsXgrEVJFQ3tMA2oRJ1oWQx+CJiMOQr9P3YEEmA5HyEHcgv4WCxNJH2E1ETsLEUYkYTURAaoQJ1gZRG5Y/JUQWT9EblgC3gKMt0bGY/zpAkXCPEYywzQAAAIAyf6DBggHXgAUACIAWUAvDQoMBw4OCRMCAhQUGCAJCgUkIxQSBgUREgUSDgAOCUlZDhIMIh8PGAEYHBUHAAMAPzLeMs1dMj8/KxESADk5ETMRMxg/ERIBFzkRMxEzETMRMzMRMzEwEzMRFAcHMwEzETMDIxMjETQ3IwEjASImJzMWFjMyNjczBgbJoQoECAM0uLiPxZygEwn8yboCQ7qoCpsKXW5pYwmeDLUFtvzRds5TBMb64v3rAX0DJa/3+zUGK4+kbE5dXZ+UAAIAsP6HBRIGDAARAB8AT0AqCgcJBAsLBg8BARAQFR0GBwUhIAMOEBEPCwZGWQsQFQkiHA8VARUZEgQPAD/eMs1dMj8/MysAGD8SOTkREgEXOREzETMRMxEzMxEzMTABERQHATMRMwMjEyMRNDcBIxElIiYnMxYWMzI2NzMGBgFMCgJRz7CBrH2bCP2uzQHsuaoKnAdadGdkCp0MsgRI/WqIiAOm/Ef9+AF5AqCeaPxaBEiRj6RmVFpgnpUAAgAvAAAEfQW2ABEAGQBNQCkIBBISAQ8VCwsGDxEEGhsIGUlZBxEAEUlZBAAIAAgADwIPEkpZDxICAwA/PysREgA5ORgvLxEzKxEAMysREgEXOREzETMzETMzMTATMzUzFSEVIREzIBEUBCEhESMBMyARNCYjIy+aqgFW/qrAAkr+7P7x/m+aAUTdAXu4ydcE/Lq6lv7g/mTS2ARm/CsBGYSAAAACABQAAARMBhQAEgAaAEtAKAQAFBQQDBcICAIMDgQbHAQTRlkDDg8OR1kADwQPBA8MEQAMFEZZDBUAPysAGD8SOTkvLxEzKxEAMysREgEXOREzETMzETMzMTABIRUhESEyFhUUBiMhESM1MzUzEREhIDU0JiMBVgEn/tkBQN/X4N3+IZycpgExAR+EnwUfgf3lmpukqgSegfX74P6XuVxUAAACAMkAAAR5BbYADwAcAEhAKRAKCgsYAAAEBQMWBhUTFAsKHR4WExwQDBxKWQkQSlkGAwwJCQsMAwsSAD8/EjkvEjk5KysREgA5ORESARc5ETMRMxEzMTABFAYHFwcnBiMjESMRISAEATMyNyc3FzY1NCYjIwR5c2x4ZJVmiLiqAYkBEgEV/PqmV0xsbIx/wsrIBAx/yTmdVMAb/cEFttf98gqNUrBIspGOAAIAsP4UBHUEXAAYACkAVUAxHQsEBwcIJxISFRYUJRciJCMICiorJSIZIA8ZRlkMCwsEFBcEAA8QCQ8IGwAgRlkAFgA/KwAYPz8/Ehc5ETMrERIAOTkREgEXOREzETMRMzMzMTAFIiYnIxYVESMRMxczNjYzMhIREAcXBycGAyIGBxUUFjMyNyc3FzY1NCYCrmuxPAwMpocZCECpbdrtt3Nkg0dtqJYCmqovKXlqgWWWFE9SlCL+PQY0llpQ/tb+8/6ukZxQrhgD47rLJefHDJ5Qqmf519EAAAEALwAABAgFtgANADxAHwMHBwwIAAUICgQODwYKCwpJWQMLCwgNDQJJWQ0DCBIAPz8rERIAORgvMysRADMREgEXOREzMxEzMTABFSERIRUhESMRIzUzEQQI/WsBqP5YqpqaBbaZ/gKW/XcCiZYClwABABIAAANCBEgADQA8QB8CBgYLBwAEBwkEDg8FCQoJR1kCCgoHDAwBRlkMDwcVAD8/KxESADkYLzMrEQAzERIBFzkRMzMRMzEwASERIRUhESMRIzUzESEDQv4UAVr+pqaengKSA7z+qH/+GwHlfwHkAAABAMn+AATbBbYAGwBBQCMJAwMEGQ4OBxQEBBwdERdJWREcCwBJWQsLBAUFCElZBQMEEgA/PysREgA5GC8rABg/KxESARc5ETMRMxEzMTABIgcRIxEhFSERNjMgABEQACEiJic1FjMgETQAAjFkWqoDSf1hWnkBQAFV/uL+/VN9RnuJAX//AAKPDP19BbaZ/fwK/q3+xv7F/qUVHJgxAf71AQQAAAEAsP4KA/oESAAbAEFAIwgZFA4ODw8CEhkEHRwWC0ZZFhYPEBATRlkQDw8VAAVGWQAbAD8rABg/PysREgA5GC8rERIBFzkRMxEzETMxMAEiJzUWMzI2NTQmIyIHESMRIRUhETYzIAAREAICRpFldHuFiLK1RUqmApr+DFI7ARABB+T+CjyVP8rX39AR/iUESI7+twz+5f7Z/vX+2gAAAQAC/oMG+AW2ABUATUApBhERAxINDAwICRIAARUHFhcSFRITEAkGAwAADwEPCklZDxINIgcEAQMAPzMzPz8rERIAOREzMzMzMxg/MxESARc5ETMRMzMRMzEwAQEzAREzEQEzAQEzESMRIwERIxEBIwJW/cG+AjmkAjq+/cAB2rSiXv26pP27xwLwAsb9PALE/TwCxP08/aj96QF9AuX9GwLl/RsAAAEABP6HBh8ESAAVAEtAKAINDRUOCQgIBAUOEhMRBxYXFQ8MBQISEgsDABMPDhEVCwZGWQsVCSIAPz8rABg/Mz8zMxI5ETMzMzMzERIBFzkRMxEzMxEzMTABMxEBMwEBMxEjESMBESMRASMBATMBAqSZAcW2/jYBcMGiXv4emf4fvwHw/je2AcMESP3tAhP97f5a/fgBeQIt/dMCLf3TAjUCE/3tAP//AEr+QgQ1BcsCJgGxAAAABwN/AVgAAP//AET+QgN/BFwCJgHRAAAABwN/AQgAAAABAMn+gwUrBbYADwA7QCAMCAgJAwICDg8GCQUQEQ8MBgMFDQoDCRIFAElZBRIDIgA/PysAGD8/MxIXORESARc5ETMRMxEzMTAlMxEjESMBBxEjETMRATMBBH+somb96ZmqqgKXyf20mv3pAX0CxYj9wwW2/SsC1f2FAAEAsP6FBD0ESAAOADpAHw4KCgsGBQUBAgsEDxACDgkDCAAMDwsVCANGWQgVBiIAPz8rABg/PzMSFzkREgEXOREzETMRMzEwATMBATMRIxEjAREjETMRAy+2/icBf7KfVP4MpqYESP3v/lj99gF7Aiv91QRI/esAAAEAyQAABOkFtgASADhAHgYCAgMKEREHEg4MEgMEExQICgYAEBIGAwsEAw8DEgA/Mz8zEhc5ERIBFzkRMzMRMxEzETMxMAEHESMRMxE3ETMVATMBASMBESMB8H2qqn19AZvL/bQCYsj+TH0CqGv9wwW2/SWLAV3TAcb9hfzFAlz+zwABALAAAAQ7BEgAEwA6QB8GAgIDDgoSEgcTDwwTAwQUFQgKBgEREwYDCwQPEAMVAD8zPzMSFzkREgEXOREzMxEzMxEzETMxMAEnESMRMxE3ETMVATMBFQEjARUjAc13pqZ3gwEOtv48AevC/tWBAbJ5/dUESP3reQFKzQEf/iVr/f4BO90AAAEALwAABOkFtgATAEdAJggEEBABEQsODAoGDhETBhQVBxMAE0lZBAsIDgMRAAACDRESCQIDAD8zPzMSOS8SFzkzKxEAMxESARc5ETMRMzMRMzMxMBMzNTMVMxUjEQEzAQEjAQcRIxEjL5qq3d0Clcv9tAJizv3xmaqaBQSyspf+bgLb/YX8xQLFhv3BBG0AAAEAFAAABBsGFAAZAE1AKwoIBBYWARcSEAYRFxkGGhsUCg8TFxUHGQAZR1kEDwAfAC8AAwAAAg8PAgAAPz8SOS9dMysRADMYPzMSOTkREgEXOREzMxEzMzMxMBMzNTMVIRUhEQcHMzc2NgEzAQEjAQcRIxEjFJykAX3+gwMDCBI3KAFwx/5EAdnH/n19pJwFWrq6f/3oWzcYSjABhf4t/YsCBGr+ZgTbAAEAEAAABYMFtgANADVAGwIKCgsFCAYECAsEDg8IAgAHCxIDAwANSVkAAwA/KwAYPz8zEjk5ERIBFzkRMxEzETMxMBMhEQEzAQEjAQcRIxEhEAH8ApbL/bQCYsn97Jqq/q4Ftv0lAtv9hfzFAsWI/cMFHQAAAQApAAAE4wRIAAwANUAbBQEBCQkKDAoEBgQODQgCAAcKFQMPAAxGWQAPAD8rABg/PzMSOTkREgEXOREzETMRMzEwEyERATMBASMBESMRISkCAgHbtv4nAgDC/gqk/qIESP3rAhX97f3LAiv91QO8AAEAyf6DBcEFtgAPAERAJAwICAkNBQUAAwICAAkDEBEMB0lZDAwFDgoDCRIFAElZBRIDIgA/PysAGD8/MxI5LysREgEXOREzETMRMxEzETMxMCUzESMRIxEhESMRMxEhETMFH6Kiqvz+qqoDAqqa/ekBfQKw/VAFtv2SAm4AAAEAsP6HBPgESAAPAE5AKwENDQ4CCgoFCAcHBQ4DEBEBDEZZDwEfAQILAwEBCgMPDw4VCgVGWQoVCCIAPz8rABg/PzMSOS9fXl0rERIBFzkRMxEzETMRMxEzMTABESERMxEzESMRIxEhESMRAVYCZqaWppb9mqYESP41Acv8R/34AXkB7v4SBEgAAAEAyQAABm8FtgANAD9AIQoGBgcLAwMCAAIHAw4PCgVJWQoKBwwMAUlZDAMIAwMHEgA/Mz8/KxESADkYLysREgEXOREzETMRMxEzMTABIREjESERIxEzESERIQZv/rCs/QCqqgMAAfwFHfrjArD9UAW2/ZICbgABALAAAAXBBEgADQBJQCcBCwsMAggIBwQHDAMODw0PAQpGWQ8BHwECCwMBAQMIDBUDBkZZAw8APysAGD8zEjkvX15dKwAYPxESARc5ETMRMxEzETMxMAERIREhFSERIxEhESMRAVYCZgIF/qGm/ZqmBEj+NQHLjPxEAe7+EgRIAAEAyf4ACB0FtgAdAEdAJgQFCAAAARcNDRIBBQQeHxAVSVkQHAoaSVkKCgUGBgNJWQYDAQUSAD8zPysREgA5GC8rABg/KxESARc5ETMRMxEzETMxMCEjESERIxEhETYzIAAREAAhIic1FjMgETQCIyIGBwTZqv1EqgQQRH0BMgFR/uX+/px7hn8BeuboKn8YBR364wW2/WEM/qj+yP7H/qYxmDEB/vIBBQcFAAABALD+CgaoBEgAHABHQCYREhUNDQ4HGhoCDhIEHR4XCkZZFxcSExMQRlkTDw4SFQAFRlkAGwA/KwAYPzM/KxESADkYLysREgEXOREzETMRMxEzMTABIic1FjMyETQmIyIHESMRIREjESERNjMyABEQAgUXg2FtbPCmrENIqP3fpgNvS0L2AQbR/go8lT8Bod/QFf4pA7j8SARI/icO/tf+5/70/tsAAgB9/6wF4QXNACgANABQQCwbES8jKQAIAAMWICMRBzU2JixKWQwyJiYOFBQZSVkUBAoFSVkKDg4eSVkOEwA/KwAYEMQrABg/KxESADkYLzk5KxESARc5ETMRMxEzMTABFAIHFjMyNxUGIyInBiMgABEQACEyFwcmIyAREBIzMjcmAjU0EjMyEgM0JiMiBhUUFhc2NgW4inRCWk49OFuylGaQ/sr+oQFJATp/XC9UWv4z/+s2LlZcxq+1wbBnXV5nXVNmcwKmtf7LVh4WmRlkJAGJAVYBeAGKI5Ec/Z7+4P7OCmcBHKD0AQr+9v7+sczJsIz+VUP/AAACAHP/xwTTBFwACgA1AFBALB4TACYGLDQsLxgkJhMHNjcpCEdZDQMpKQ8WFhtGWRYQCzFGWQsPDyFGWQ8WAD8rABgQxCsAGD8rERIAORgvOTkrERIBFzkRMxEzETMxMAEUFhc2NjU0IyIGASInBiMiJiY1EBIzMhcHJiMiBhUUFjMyNjcmNTQ2MzIWFRQGBxYzMjcVBgLuRD9EU4dISwFmk4Jge5XievjjW00lNk+ckaqkJTUGi6iXlJ1rXjRDQjEnAfJeoTUsnm7rff1jTSiL/qQBEwEwFooT0efO0gkDlOGtwb2xfdFAGg6JDgD//wB9/kIEzwXLAiYAJgAAAAcDfwIlAAD//wBz/kIDiwRcAiYARgAAAAcDfwGDAAAAAQAQ/oMEWgW2AAsAMkAbBgsICQMJCwEEDA0LBklZCxIJIgUBAgFJWQIDAD8rEQAzGD8/KxESARc5ETMRMzEwASE1IRUhETMRIxEjAd/+MQRK/jGioqwFHZmZ+3396QF9AAABACn+hwORBEgACwA0QBsGCwgJAwkLAQQMDQkiBQECAUZZAg8LBkZZCxUAPysAGD8rEQAzGD8REgEXOREzETMxMAEhNSEVIREzESMRIwGJ/qADaP6elqaWA7yMjPzT/fgBeQD//wAAAAAEewW2AgYAPAAAAAEAAP4UBAIESAANAClAFAABDAEDAw4PCAcNBwILAw8CFQEbAD8/PzMSOTkRMxESARc5ETMxMAEjEQEzExYXMzY3EzMBAlSm/lKs7FMTCCFG6az+Uv4UAegETP2b3mGKtQJl+7QAAAEAAAAABHsFtgAQADpAHgQICA0JAgYJCw8FERIHCwwLSVkEAA8MDAkBDwMJEgA/PzMSOS8SOTMrEQAzERIBFzkRMzMRMzEwAQEzARUhFSERIxEhNSE1ATMCPQGGuP4YASv+1az+0wEt/hm6AtsC2/yBO5j+nAFkmDMDhwABAAD+FAQCBEgAEwA8QB8RAQEGAhATAgQHBRQVDAsLBQ8HDwAEBQRHWREFFQIbAD8/MysRADMYPzMSOREzERIBFzkRMzMRMzEwBREjESE1IQEzExYXMzY3EzMBIRUCVKb+6gEU/lSs7FMTCCFG6az+VAESgf6VAWuBBEj9m95hirUCZfu4gQAAAQAI/oME1QW2AA8AN0AgAwICDg8MBgkKCAgQEQwPCQYEBQ0KAwgSBQBJWQUSAyIAPz8rABg/PzMSFzkREgEXOREzMTAlMxEjESMBASMBATMBATMBBDOiol7+d/5wtAHm/ju8AWsBbrX+O5r96QF9AoP9fQL8Arr9vQJD/UwAAQAn/oUENwRIAA8AOUAhCgkJBQYDDQABDwgQEQ8VAwYADQQMAQwHRlkMFQoiBAEPAD8zPz8rERIAFzkYPxESARc5ETMxMAEBMwEBMwEBMxEjESMBASMBuP6DvQEhASC7/oMBK5WmRf7N/sq8AjECF/5cAaT96f5e/fYBewG8/kQAAAEAEP6DBqgFtgAPAEBAIgwFAA0DAgINCgUHBRARDgMLBwgHSVkIAwAMBQxJWQUSAyIAPz8rEQAzGD8rEQAzGD8REgEXOREzETMRMzEwJTMRIxEhESE1IRUhESERMwX+qqL7tP5WBC/+JQLwqpr96QF9BR2Zmft9BRwAAQAp/ocFmARGAA8AP0AiAgsGAwkICAMACw0FEBEBDQ4NRlkODwYCCwJGWQsVCSIEDwA/Pz8rEQAzGD8rEQAzERIBFzkRMxEzETMxMAEhESERMxEzESMRIREhNSEDef6XAkamnKb8eP6/A1ADuvzVA7f8Sf34AXkDuowAAAEAqv6DBWgFtgAXADtAHxUABQMCDwwCBQwDGBkSCUlZEhIFFg0DBQBJWQUSAyIAPz8rABg/MxI5LysREgEXOREzETMRMzMxMCUzESMRIxEGBiMiJjURMxEUFjMyNjcRMwTHoaGqlcZqz9+qf49hsamqmv3pAX0CXDUnvrMCRf3PeXQdNwLKAAABAJz+hQTDBEgAFgA7QB8BFQkGDgwLCw4VAxcYAxJGWQMDDgcWDw4JRlkOFQwiAD8/KwAYPzMSOS8rERIBFzkRMxEzMxEzMTABERQzMjY3ETMRMxEjESMRBgYjIiY1EQFC21umaaaWppZps3GkugRI/nDAOEMB1fxH/fYBewHwSDuskwGcAAEAqgAABMcFtgAWAEpAJgUCCxUVCBYNEREQEBYCAxcYFAAIAElZCwgWCAkJCBYDAxESDgMDAD8zPxIXOS8vLxEzKxEAMxESARc5ETMRMxEzMxEzETMxMAEgEREzERQWMxEzETY3ETMRIxEGBxEjAnX+NaqHmn2Go6ysqIF9AgABcQJF/c93dgFc/qoNPALP+koCWEER/s8AAQCcAAAEHQRIABcASkAmARYGEBADEQgMDAsLERYDGBkPEwMTRlkGAxEDBAQDEQMMCRcPDBUAPz8zEhc5Ly8vETMrEQAzERIBFzkRMxEzETMzETMRMzEwAREUFxEzETY3ETMRIxEGBxUjNSMiJjURAULId3GFpqaAdncWoLgESP5wugYBLf7dGFkB1fu4AfBbGvjqqpUBnAABAMkAAATlBbYAEgAvQBcCERESCQgIEhQTBA1JWQISBAQJEhIAAwA/PzM5LxI5KxESATk5ETMRMxEzMTATMxEkMzIWFREjETQmIyIGBxEjyaoBAMTP36p/j2u6laoFtv2kXL+x/boCMXh2IjL9NQAAAQCwAAAEQgRIABIAL0AXABILBwcIEggUEw4DRlkLDg4ICQ8ACBUAPzM/EjkvOSsREgE5OREzETMRMzEwIRE0IyIGBxEjETMRNjYzMhYVEQOa2Vicd6amX7pyo74BjcExSv4tBEj+DkU+qJf+ZgACAD3/7AY/Bc0AIAAnAFFAKgUDACQREQgeJRAQGB4ABCgpER4HHklZJAcCBwIbDBsUSVkbEwwhSVkMBAA/KwAYPysREgA5ORgvLzMrEQAzERIBFzkRMxEzMxEzETMzMTATNDczBhUUMzM3EgAhIAARFSESADMyNjcVBgYjIAADIiYBIgIHIRAmPRuRFHEiBR0BTQEXASkBKPvcDgEF92XKjXLdgv7G/qMTjpsDr9HwEANuywOHSTYyPGcrASoBR/6F/o9F/vj+7x8rnCceAWQBTHYCI/71+QEJ+wAAAgAz/+wE3QRaAB8AJgBMQCgKCAUWDSQVFR0NAwUFJygWAwwDRlkjDAcMBwARESBGWREQABlGWQAWAD8rABg/KxESADk5GC8vMysRADMREgEXOREzETMRMzMxMAUiACckNTQ3MwYVFDMzNzY2MzISFRUhFhYzMjY3FQYGAyIGByE0JgNK8/7sBv72GY0UahUGIvq3z/H9DAasrWWfYlidoIaXDgI9jBQBHvwE3UUyLztnI8rg/vfiacbDICqUJiED46SenaUAAgA9/oMGPwXNACIAKQBdQDELCQYmFxcOAyEiJxYWHiIDBgUqKyIiIBMXAw0DSVkmDQgNCAASEiNJWRIEABpKWQATAD8rABg/KxESADk5GC8vMysRADMYPz8REgEXOREzETMRMzMRMxEzMzEwBSQAAyImNTQ3MwYVFDMzNxIAISAAERUhEgAzMjY3FQYHESMTIgIHIRAmA6D+/v7bE46bG5EUcSIFHQFNARcBKQEo+9wOAQX3ZcqNsOumTNHwEANuywwdAVoBMXZ1STYyPGcrASoBR/6F/o9F/vj+7x8rnD4F/pUGsv71+QEJ+wACADP+hwTdBFoAIQAoAFhALwoIBRYNICEmFRUdIQ0DBQYpKiEiHxYWAwwDRlklDAcMBwARESJGWREQABlGWQAVAD8rABg/KxESADk5GC8vMysRADMYPz8REgEXOREzETMRMxEzMzEwBSYCJyQ1NDczBhUUMzM3NjYzMhIVFSEWFjMyNjcVBgcRIxMiBgchNCYC1b/TBv72GY0UahUGIvq3z/H9DAasrWWfYo6lpkSGlw4CPYwKHwER4ATdRTIvO2cjyuD+9+JpxsMgKpRBBP6ZBUiknp2lAP//AFQAAAJWBbYCBgAsAAD//wACAAAGvAdgAiYBsAAAAQcCNgEQAVQACLMBEgUmACs1//8ABAAABd8GDAImAdAAAAEHAjYApAAAAAizARIRJgArNQABAMn+AAUZBbYAHABCQCUHAwMEGg4OCQoUBAUdHhEXSVkRHAcCSVkLAEpZBwsLBAgFAwQSAD8/MxI5LzkrKwAYPysREgEXOREzETMRMzEwASIHESMRMxEBMwE3IAAREAAhIiYnNRYzMhI1NCQCXoxfqqoCic39hRoBTwFi/tn+9VJ8RnqYu8j+6wJ7H/2kBbb9PALE/VQC/rv+z/7G/qQUHZgxAQ3x6P0AAAEAsP4KBCEESAAcAEJAJQQAAAEXChAKBgcBBR0eDhRGWQ4bBBxHWQcaRlkEBwcBBQIPARUAPz8zEjkvOSsrABg/KxESARc5ETMRMxEzMTAhIxEzEQEzAQQSERQGBiMiJzUWFjMyNjU0JiMiBwFUpKQB47f+NwEA/G7MhYhfLmxHh5i7vlJcBEj9+gIG/h4E/uT+9bH8hDyRGSbZyNPPGAABAAD+gwWRBbYAFwA5QB8DAAUEAQEFDgMYGRYHSVkWAwwRSlkMEgUASVkFEgMiAD8/KwAYPysAGD8rERIBFzkRMxEzMzEwJTMDIxMjESEHAgIGJyInNRYzMjY2EhMhBNm4j8Wcqv4lHz1dmH5KOzY7NU89XTgDEpr96QF9BR/w/iH+Ra4CGY8aV9cCWQG4AAABABD+hwSPBEYAFAA5QB8DAAUEAQEFDQMVFhMHRlkTDwsQR1kLFQUARlkFFQMiAD8/KwAYPysAGD8rERIBFzkRMxEzMzEwJTMDIxMjESECAgYjIic1FjMyEhMhA9+wgax9pv61HF6YdjocFhxxiSICgY/9+AF5A7j+mP5kwAp/BgHZAfYAAAEAyf4ABR8FtgAVAD1AIBIODg8TCwsAAAYPAxYXEg1JWRISDxQQAw8SAwlJWQMcAD8rABg/PzMSOS8rERIBFzkRMxEzETMRMzEwJRAAISImJzUWMyARESERIxEzESERMwUf/ub++1J6TXuHAYz8/qqqAwKqlv7C/qgTHpYxAfcCI/1QBbb9kgJuAAEAsP4KBGIESAAVAEdAJw8LCwwQCAgTEwIMAxYXDwpGWQ8PHw8CCwMPDwwRDQ8MFQAFRlkAGwA/KwAYPz8zEjkvX15dKxESARc5ETMRMxEzETMxMAEiJzUWMzI2NREhESMRMxEhETMREAIC04Rdb2Z9dv2cpqYCZKjP/go6lT3GzwG9/hIESP41Acv76/70/uMAAQDJ/oMF1wW2AA8AREAkDAgICQ0DAAUEAQEFCQMQEQwHSVkMDAUOCgMJEgUASVkFEgMiAD8/KwAYPz8zEjkvKxESARc5ETMRMzMzETMRMzEwJTMDIxMjESERIxEzESERMwUfuJHFnqr8/qqqAwKqmv3pAX0CsP1QBbb9kgJuAAABALD+hwUSBEYADwBEQCQBDQ0OCAUCCgkGBgoOAxARAQxGWQEBCgMPDw4VCgVGWQoVCCIAPz8rABg/PzMSOS8rERIBFzkRMxEzMzMRMxEzMTABESERMxEzAyMTIxEhESMRAVYCZqawgax9pv2apgRG/jcByfxJ/fgBeQHu/hIERgAAAQCq/oMExwW2ABcAPUAgDwwCAxUFBQAAAwwDGBkSCUlZEhIBFg0DAyIBBElZARIAPysAGD8/MxI5LysREgEXOREzETMRMxEzMTAhIxEjETMRBgYjIiY1ETMRFBYzMjY3ETMEx6qiopXGas/fqn+PYbGpqv6DAhcBwjUnvrMCRf3PeXQdNwLKAAEAnP6FBC0ESAAWAD1AIAEVCwwGDg4JCQwVAxcYAxJGWQMDCgcWDwwiCg1GWQoVAD8rABg/PzMSOS8rERIBFzkRMxEzETMRMzEwAREUMzI2NxEzESMRIxEzEQYGIyImNREBQttbpmmmlaaVabNxpLoESP5wwDhDAdX7uP6FAgoBYUg7rJMBnAABAMn+gwcpBbYAGABIQCUJBgYHEQ4MExIPDxMHAxkaFxYCCwITCBMOSVkTEhEiDAgDAAcSAD8zPzM/PysREgA5OREzMxESARc5ETMRMzMzETMRMzEwIQEjFxYVESMRIQEzATMRMwMjEyMRNDcjAQNQ/hAIBwedAQAB0QgB0f64j8eeqg4I/gwFEH/AL/xeBbb7SgS2+uT96QF9A66E3PryAAABALD+hwXfBEYAGAA/QCATFAgFCgkGBgoUAxkaCxIAEg8DFQ8UFQoFRlkKDxUIIgA/PzMrABg/PzMSOTkRMxESARc5ETMRMzMRMzEwJTc3ATMRMwMjEyMRBwcBIwEmJxEjETMBFgLpHysBKdOwgax9kxQ6/uWL/uU1FJTLASktoF12AtP8Sf34AXkDiTqZ/UoCuIZL/HcERv0tbv//AFQAAAJWBbYCBgAsAAD//wAAAAAFEAdeAiYAJAAAAQcCNgA5AVIACLMCDwUmACs1//8AXv/sA80GDAImAEQAAAEGAjboAAAIswIlESYAKzX//wAAAAAFEAclAiYAJAAAAQcAagA9AVIACrQDAiQFJgArNTX//wBe/+wDzQXTAiYARAAAAQYAavMAAAq0AwI6ESYAKzU1/////gAABoEFtgIGAIgAAP//AF7/7AZzBFwCBgCoAAD//wDJAAAD+AdeAiYAKAAAAQcCNgAQAVIACLMBDAUmACs1//8Ac//sBBIGDAImAEgAAAEGAjYMAAAIswIbESYAKzUAAgB1/+wFWAXNABIAGQA9QCAXDhAWFgkJAg4DGhsPF0lZDw8MBgwTSVkMEwYASVkGBAA/KwAYPysREgA5GC8rERIBFzkRMxEzETMxMAEiBzU2NjMgABEQACEgETUhAgADMhI3IRAWApjj4nPShgFLAW/+pv7L/awELxH++cPS+RD8h8wFNUyeJiD+cf6b/qL+cQLrRgEKAQ77TgEN9/74/AAAAgBm/+wEBgRcABQAGwA7QB8ZCRgLAwMRCQMcHQoZRlkKCgYABhVGWQYWAA5GWQAQAD8rABg/KxESADkYLysREgEXOREzMxEzMTABMgAREAAjIgI1NSEmJiMiBgc1NjYTMjY3IRQWAfr1ARf+/drQ8wL0BbOmYqVfWaKahZoM/cONBFz+1P77/vj+yQEM4WnMuyEpkygi/BulnJ2kAP//AHX/7AVYByUCJgLhAAABBwBqAJMBUgAKtAMCLwUmACs1Nf//AGb/7AQGBdMCJgLiAAABBgBq6gAACrQDAjERJgArNTX//wACAAAGvAclAiYBsAAAAQcAagEQAVIACrQCAScFJgArNTX//wAEAAAF3wXTAiYB0AAAAQcAagCiAAAACrQCAScRJgArNTX//wBK/+wENQclAiYBsQAAAQcAav/zAVIACrQCAT4FJgArNTX//wBE/+wDfwXTAiYB0QAAAQYAapQAAAq0AgE4ESYAKzU1AAEASv/sBDcFtgAZAEBAIwATFRkPAwMZExYIBRobGRYXFklZABJKWQAABhcDBgxKWQYTAD8rABg/EjkvKysRADMREgEXOREzETMRMzEwAQQEFRQEISAnNRYWMzI2NTQmIyM1ASE1IRUB/AEXAST+zf7q/v+jYN5qx8rh34wB7v1OA4cDPwnTwc7oT54uMpmQhoqNAd6ZiwAAAQAb/hQDpgRIABkAQEAjABMVGQ8EBBkTFgkFGhsZFhcWRlkAEkdZAAAHFw8HDEZZBxsAPysAGD8SOS8rKxEAMxESARc5ETMRMxEzMTABHgIVFAAjIic1FjMyNjU0JiMjNQEhNSEVAayV5n/+2O/qirfIocXWynkBxf2JAzgBzwdyyoje/u5Gmla+oKSqcgH+jnsA//8AywAABVIGtAImAbIAAAEHAU0AtAFSAAizARMFJgArNf//ALAAAARiBWICJgHSAAABBgFNMQAACLMBEREmACs1//8AywAABVIHJQImAbIAAAEHAGoAvgFSAAq0AgElBSYAKzU1//8AsAAABGIF0wImAdIAAAEGAGo9AAAKtAIBIxEmACs1Nf//AH3/7AW+ByUCJgAyAAABBwBqANEBUgAKtAMCLQUmACs1Nf//AHP/7ARiBdMCJgBSAAABBgBqHQAACrQDAi4RJgArNTX//wB9/+wFvgXNAgYCfgAA//8Ac//sBGIEXAIGAn8AAP//AH3/7AW+ByUCJgJ+AAABBwBqANEBUgAKtAQDLwUmACs1Nf//AHP/7ARiBdMCJgJ/AAABBgBqGwAACrQEAzARJgArNTX//wA9/+wEiQclAiYBxwAAAQcAav/tAVIACrQCATAFJgArNTX//wA5/+wDfQXTAiYB5wAAAQYAao4AAAq0AgEwESYAKzU1//8AG//sBPgGtAImAb0AAAEHAU0ALwFSAAizARoFJgArNf//AAL+FAQGBWICJgBcAAABBgFNrQAACLMBGREmACs1//8AG//sBPgHJQImAb0AAAEHAGoAOwFSAAq0AgEsBSYAKzU1//8AAv4UBAYF0wImAFwAAAEGAGq3AAAKtAIBKxEmACs1Nf//ABv/7AT4B3MCJgG9AAABBwFTAI0BUgAKtAIBKgUmACs1Nf//AAL+FAQGBiECJgBcAAABBgFTBAAACrQCASkRJgArNTX//wCqAAAExwclAiYBwQAAAQcAagBqAVIACrQCASkFJgArNTX//wCcAAAELQXTAiYB4QAAAQYAahcAAAq0AgEoESYAKzU1AAEAyf6DBAgFtgAJAC1AGAQJBgcBBwkDCgsJBElZCRIHIgADSVkAAwA/KwAYPz8rERIBFzkRMxEzMTATIRUhETMRIxEjyQM//WuhoaoFtpn7ff3pAX0AAQCw/ocDQgRGAAkALUAYBAkGBwEHCQMKCwkERlkJFQciAANGWQAPAD8rABg/PysREgEXOREzETMxMBMhFSERMxEjESOwApL+FJamlgRGjPzV/fgBef//AMkAAAYKByUCJgHFAAABBwBqARsBUgAKtAQDLQUmACs1Nf//ALAAAAV5BdMCJgHlAAABBwBqAMUAAAAKtAQDLBEmACs1Nf//AC/+dQQIBbYCJgKbAAAABwOAAJMAAP//ABL+dQNCBEgCJgKcAAAABgOBdQD//wAI/nUEyQW2ACYAOwAAAAcDgANYAAD//wAn/nUENARIACYAWwAAAAcDgQLDAAAAAQAGAAAElgW2ABEAO0AiDwIRARANBAoHCQYLDBMSChEAEUlZBw0PBAAAAgwPEgUCAwA/Mz8zEjkvORI5MysRADMREgEXOTEwEyEBMwEBMwEhFSEBIwEBIwEhfwEz/ne8AWsBbLf+cAE8/roBvcH+d/5wtgG//roDVAJi/bsCRf2emP1EAoP9fQK8AAABACcAAAQIBEgAEQA7QCIPAhEBEA0ECgcJBgsMExIKEQARR1kHDQ8EAAACDA8VBQIPAD8zPzMSOS85EjkzKxEAMxESARc5MTATIQEzAQEzASEVIQEjAQEjASF1ARL+tL0BIQEgu/6yARj+4gFovP7N/sq8AWb+6AJ3AdH+XAGk/i+B/goBvP5EAfYAAAIAgwAABDcFtgAKABMANEAaBBMTBw8ABwAVFAMMSVkDAwgFCBJKWQgSBQMAPz8rERIAORgvKxESATk5ETMRMxEzMTATNCQhMxEzESEgJAEjIgYVFBYzM4MBJAEgxqr+Y/71/vQDCrrewrbL2QGk1M4CcPpK1QHbfI6PhP//AHP/7AQ3BhQCBgBHAAAAAgCD/+wGdwW2ABkAIwBGQCQeAxgKCgcjDxISIwMDJCUGG0lZGAYQBhAACAMMIAAgSlkVABMAPzIrEQAzGD8SOTkvLzkrERIBFzkRMxEzMxI5ETMxMAUiJjU0JCEzETMRFDMyNjURMxEUBiMiJicGEyMiBhUQITI2NQJO4ukBKgEikarmZHmqz7h2nzNxKZfUwgEhf40S0dDZ3gJw+7fse24B5v4Yrs5SWqoCwIuW/vR3cAAAAgBz/+wGhwYUACIALgBRQCksEwwgIB0aJgMGBiYTAy8wHgANEBoWBAQQFhYqRlkWEAAjECNGWQkQFgA/MysRADMYPysREgA5GC8SORI5PxESARc5ETMRMzMzEjkRMzEwJTI2NREzERQGIyImJyMGBiMiAhEQEjMyFhczJiY1ETMRFBYhMjY1NTQmIyARFBYE/nZrqMi9gZ4rCEu5gdDo589qnz8MAgimbf25opKUov7ii3eEiAE5/r3IxVtxcVsBKQEMAQwBL01VEXAbAb77jKCJuc4j58n+TtbSAAEATv/sBoEFywAqAEtAKAYTKBkfIiIWGRMBDQYrLBcCAQIBSlkCIAIgJRAlHElZJRMQCUpZEAQAPysAGD8rERIAOTkYLy8rERIAORESARc5ETMRMxEzMTABIzUzMjY1NCYjIgYHJzY2MzIWFRQGBxUEExYWMzI2NREzERQGIyImJyYmAa7JwcDVmoBnsWdUXfaC1vWynAFiBgJsfHdwqNK9ytACAs0CrI+ThGx/N0VySFDEp423Gggz/tGWf3mHAc3+KcbH0ciWkQABAFD/7AXFBFwAJQBLQCgSHgokAgUFJB4gDhgGJichDw4PDkZZDwMPAwgbGxRGWRsQCABGWQgWAD8rABg/KxESADk5GC8vKxESADkREgEXOREzETMRMzEwJTIRETMRFAYjIAMmJiMjNTMgNTQjIgYHJzY2MzIWFRQHFRYWFxYEQt2mu8T+hhAFjZSMbwEh8kuHTTlVo2i408BjewUJdwEMATn+vcrDAU1jWI2soiQihygkm4a4OQgUemrTAAEATv6DBNEFywAjAEpAKBkaHiMhICAWGiMEEAYkJRoFBAUESlkFBSMTIx5JWSMSISITDEpZEwQAPysAGD8/KxESADkYLysREgA5ERIBFzkRMxEzETMxMAE0JiMjNTMyNjU0JiMiBgcnNjYzMhYVFAYHFRYWFREzESMRIwOD5eLZ0c3hpIdpw2lUYf6E3P29o7jDrKKsAZyFi4+ThGuAOkJySk7Ep4y3GQgZs5T+/v3pAX0AAAEAUP6HBBAEWgAeAEpAKAcSGR4cGxsVHhIDDQYgHxUEAwQDRlkEBB4PHhlGWR4VHCIPCkZZDxAAPysAGD8/KxESADkYLysREgA5ERIBFzkRMxEzETMxMAE0ISM1MyA1NCYjIgcnNjMyFhUUBxUWFhUVMxEjESMC1f7LlnUBOYV3mZY9ocu/1ct+cJ2mlQEtx42sUlBGh0qah7Y5CyWJZpz9+AF5AAABAAD/6QchBbYAIwA6QB0UIxodHSMJAyQlGxsHEhIBSVkSAxcMBwxKWSAHEwA/MysRADMYPysREgA5GC8REgEXOREzETMxMAEhBwICBgYjIic1FjMyNjYSEhMhERQWMzI2NREzERQGIyImNQQM/kgfK0xTgmRFQDI/MUAsOEo3Au9vc3BxqM28xMgFH/D+rv5E0mYZjxo+aAECAekBrvvPiXl5hwHN/inBzMzFAAABABD/7AYpBEYAHQA6QB0ADgUICA4WAx8eBgYUHBwQRlkcDwMZFBlHWQsUFgA/MysRADMYPysREgA5GC8REgEXOREzETMxMAEUFjMyEREzERQGIyImNREhAgIGIyInNRYzMhITIQPPaHfVpru+vMv+xRxemHY6HBYccYkiAnEBg4mDAQoBO/69ysPEywI9/pj+ZMAKfwYB2QH2AAABAMn/7AdeBbYAGQBDQCMXAA8GCRYSEhMJDxMDGhsWEUlZFgcWBxMYFAMTEgwDSVkMEwA/KwAYPz8zEjk5Ly8rERIBFzkRMxEzETMRMzMxMAEUFjMyNjURMxEUBiMiJjURIREjETMRIREzBPZuc3Bxpsi/w8j9J6qqAtmqAYWJeXmHAc3+Kb/Oy8YBM/1QBbb9kgJuAAABALD/7AaoBEgAGABNQCoFAhMKDQEWFhcNExcDGRoBFUZZDwEfAQILAwELAQsXAxgPFxUQCEZZEBYAPysAGD8/MxI5OS8vX15dKxESARc5ETMRMxEzETMzMTABESERMxEUFjMyEREzERQGIyImNTUhESMRAVYCUKZqd9Wmu8C6zf2wpgRI/jUBy/09iYUBDAE5/r3Kw8bJc/4SBEgAAAEAff/sBZoFywAcADpAHxYIGwICDxwIBB0eABxJWQAABQwME0lZDAQFGUlZBRMAPysAGD8rERIAORgvKxESARc5ETMRMzEwASEVEAAhIAARNBIkMzIWFwcmJiMgABEQADMgESEDZgI0/sz+yf67/pOzAVXqeO1TQlrWV/71/t4BC/cBtP5/AvBW/qH+sQGRAWDlAVS1MSeUJi7+xf7j/uP+wwHXAAABAHP/7ASwBFwAGQA6QB8SBxgCAgwZBwQaGwAZRlkAAAQKCg9GWQoQBBVGWQQWAD8rABg/KxESADkYLysREgEXOREzETMxMAEhFRAhIAAREAAhMhcHJiMiBhUUFjMyNjUhArIB/v3+/u7+1wFDASHUrzuops3lzMWpr/6qAj9D/fABJwEQAQ4BK1CDSt7Sz9+gnQAAAQAQ/+wE9AW2ABQAOUAdBRMKDQ0DEwAEFRYLCxABEAhJWRATBAABAElZAQMAPysRADMYPysREgA5GC8REgEXOREzETMxMBM1IRUhERQWMzIRETMRFAYjIiY1ERAEPP4vd3LoqNO9xs0FHZmZ/GiJewEAAc/+KcDNzsMDoAAAAQAp/+wEhwRGABQANkAcAhAHCgoAEBIEFRYBEhMSRlkICA0TDw0FRlkNFgA/KwAYPxI5LysRADMREgEXOREzETMxMAEhERQWMzIRETMRFAYjIiY1ESE1IQOB/qZtdtemvcDAyf6oA1gDuv3JiYMBBAFB/r3Kw8vEAj+MAAEAb//sBFgFywAmAEdAJhUgDAAkIwUbESMAIAYnKCMPEg8SSlkPDx0DHRhKWR0TAwlKWQMEAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzETMxMBM0JDMgFwcmJiMiBhUUFjMzFSMiBhUUFjMyNxUGISAkNTQ2NzUmJpwBCOEBAtFeabVljJ/RyNnV3ujKt+nHr/77/vT+28+8qrQEXKnGkHhENHtygJONjoqOjVyeTdzFl8AWCBmy//8AWv/sA4cEXAIGAYIAAP//AAD+dQVrBbYAJgG1AAAABwOAA/oAAP//ABD+dQRzBEgCJgHVAAAABwOBAwIAAP//AAD+oAUQBbwCJgAkAAAABwJnBOkAAP//AF7+oAPNBFoCJgBEAAAABwJnBHkAAP//AAAAAAUQB+ECJgAkAAABBwJmBPwBUgAIswITBSYAKzX//wBe/+wDzQaPAiYARAAAAQcCZgSmAAAACLMCKREmACs1//8AAAAABRAH0QImACQAAAEHA3cE5QFSAAq0AwIVBSYAKzU1//8AXv/sBEEGfwImAEQAAAEHA3cEkwAAAAq0AwIrESYAKzU1//8AAAAABRAH0QImACQAAAEHA3gE3QFSAAq0AwIVBSYAKzU1//8ALf/sA80GfwImAEQAAAEHA3gEkwAAAAq0AwIrESYAKzU1//8AAAAABRAISgImACQAAAEHA3kE2QFSAAq0AwIVBSYAKzU1//8AXv/sBBcG+AImAEQAAAEHA3kEnAAAAAq0AwIrESYAKzU1//8AAAAABRAIYgImACQAAAEHA3oE5QFSAAq0AwItBSYAKzU1//8AXv/sA80HEAImAEQAAAEHA3oEkQAAAAq0AwJDESYAKzU1//8AAP6gBRAHcwImACQAAAAnAmcE6QAAAQcBSwArAVIACLMDKQUmACs1//8AXv6gA80GIQImAEQAAAAnAmcEeQAAAQYBS9QAAAizAz4RJgArNf//AAAAAAUQCBMCJgAkAAABBwN7BOwBUgAKtAMCFwUmACs1Nf//AF7/7APNBsECJgBEAAABBwN7BJoAAAAKtAMCLREmACs1Nf//AAAAAAUQCBMCJgAkAAABBwN8BOkBUgAKtAMCFwUmACs1Nf//AF7/7APNBsECJgBEAAABBwN8BJgAAAAKtAMCLREmACs1Nf//AAAAAAUQCFgCJgAkAAABBwN9BOkBUgAKtAMCIQUmACs1Nf//AF7/7APNBwYCJgBEAAABBwN9BKAAAAAKtAMCNxEmACs1Nf//AAAAAAUQCF4CJgAkAAABBwN+BOMBUgAKtAMCJwUmACs1Nf//AF7/7APNBwwCJgBEAAABBwN+BJgAAAAKtAMCPREmACs1Nf//AAD+oAUQB0kCJgAkAAAAJwFOAC0BZAEHAmcE6QAAAAizAg8FJgArNf//AF7+oAPNBeUCJgBEAAAAJgFO2AABBwJnBHkAAAAIswIlESYAKzX//wDJ/qAD+AW2AiYAKAAAAAcCZwTBAAD//wBz/qAEEgRcAiYASAAAAAcCZwS4AAD//wDJAAAD+AfhAiYAKAAAAQcCZgTRAVIACLMBEAUmACs1//8Ac//sBBIGjwImAEgAAAEHAmYEyQAAAAizAh8RJgArNf//AMkAAAP4By8CJgAoAAABBwFS/+QBUgAIswEVBSYAKzX//wBz/+wEEgXdAiYASAAAAQYBUtAAAAizAiQRJgArNf//AMkAAARvB9ECJgAoAAABBwN3BMEBUgAKtAIBEgUmACs1Nf//AHP/7ARcBn8CJgBIAAABBwN3BK4AAAAKtAMCIREmACs1Nf//AF0AAAP4B9ECJgAoAAABBwN4BMMBUgAKtAIBEgUmACs1Nf//AEr/7AQSBn8CJgBIAAABBwN4BLAAAAAKtAMCIREmACs1Nf//AMkAAAQ5CEoCJgAoAAABBwN5BL4BUgAKtAIBEgUmACs1Nf//AHP/7AQdBvgCJgBIAAABBwN5BKIAAAAKtAMCIREmACs1Nf//AMkAAAP4CGICJgAoAAABBwN6BLgBUgAKtAIBKgUmACs1Nf//AHP/7AQSBxACJgBIAAABBwN6BKIAAAAKtAMCOREmACs1Nf//AMn+oAP4B3MCJgAoAAAAJwJnBL4AAAEHAUsAAgFSAAizAiUFJgArNf//AHP+oAQSBiECJgBIAAAAJwJnBLAAAAEGAUvxAAAIswM0ESYAKzX//wBUAAACVgfhAiYALAAAAQcCZgPJAVIACLMBEAUmACs1//8AewAAAeYGjwImAPMAAAEHAmYDcwAAAAizAQgRJgArNf//AFT+oAJWBbYCJgAsAAAABwJnA7QAAP//AJ3+oAFmBd8CJgBMAAAABwJnA2IAAP//AH3+oAW+Bc0CJgAyAAAABwJnBX8AAP//AHP+oARiBFwCJgBSAAAABwJnBMkAAP//AH3/7AW+B+ECJgAyAAABBwJmBY8BUgAIswIcBSYAKzX//wBz/+wEYgaPAiYAUgAAAQcCZgTZAAAACLMCHREmACs1//8Aff/sBb4H0QImADIAAAEHA3cFfQFSAAq0AwIeBSYAKzU1//8Ac//sBHUGfwImAFIAAAEHA3cExwAAAAq0AwIfESYAKzU1//8Aff/sBb4H0QImADIAAAEHA3gFfQFSAAq0AwIeBSYAKzU1//8AYf/sBGIGfwImAFIAAAEHA3gExwAAAAq0AwIfESYAKzU1//8Aff/sBb4ISgImADIAAAEHA3kFewFSAAq0AwIeBSYAKzU1//8Ac//sBGIG+AImAFIAAAEHA3kExwAAAAq0AwIfESYAKzU1//8Aff/sBb4IYgImADIAAAEHA3oFeQFSAAq0AwI2BSYAKzU1//8Ac//sBGIHEAImAFIAAAEHA3oExQAAAAq0AwI3ESYAKzU1//8Aff6gBb4HcwImADIAAAAnAmcFfwAAAQcBSwDBAVIACLMDMQUmACs1//8Ac/6gBGIGIQImAFIAAAAnAmcEzQAAAQYBSw4AAAizAzIRJgArNf//AH3/7AZkB3MCJgJfAAABBwB2ASsBUgAIswIrBSYAKzX//wBz/+wFGQYhAiYCYAAAAQYAdm0AAAizAisRJgArNf//AH3/7AZkB3MCJgJfAAABBwBDAIcBUgAIswIjBSYAKzX//wBz/+wFGQYhAiYCYAAAAQYAQ9QAAAizAiQRJgArNf//AH3/7AZkB+ECJgJfAAABBwJmBY8BUgAIswImBSYAKzX//wBz/+wFGQaPAiYCYAAAAQcCZgTZAAAACLMCJxEmACs1//8Aff/sBmQHLwImAl8AAAEHAVIAoAFSAAizAisFJgArNf//AHP/7AUZBd0CJgJgAAABBgFS9QAACLMCIxEmACs1//8Aff6gBmQGFAImAl8AAAAHAmcFewAA//8Ac/6gBRkE8AImAmAAAAAHAmcEyQAA//8Auv6gBRkFtgImADgAAAAHAmcFSgAA//8ApP6gBDkESAImAFgAAAAHAmcEuAAA//8Auv/sBRkH4QImADgAAAEHAmYFVAFSAAizARYFJgArNf//AKT/7AQ5Bo8CJgBYAAABBwJmBNUAAAAIswEZESYAKzX//wC6/+wGewdzAiYCYQAAAQcAdgDuAVIACLMBJQUmACs1//8ApP/sBZYGIQImAmIAAAEGAHZ5AAAIswEmESYAKzX//wC6/+wGewdzAiYCYQAAAQcAQwBaAVIACLMBHQUmACs1//8ApP/sBZYGIQImAmIAAAEGAEO7AAAIswEfESYAKzX//wC6/+wGewfhAiYCYQAAAQcCZgVgAVIACLMBIAUmACs1//8ApP/sBZYGjwImAmIAAAEHAmYE2wAAAAizASIRJgArNf//ALr/7AZ7By8CJgJhAAABBwFSAH8BUgAIswElBSYAKzX//wCk/+wFlgXdAiYCYgAAAQYBUv8AAAizAR4RJgArNf//ALr+oAZ7BhQCJgJhAAAABwJnBUwAAP//AKT+oAWWBPICJgJiAAAABwJnBLIAAP//AAD+oAR7BbYCJgA8AAAABwJnBJwAAP//AAL+FAQGBEgCJgBcAAAABwJnBZ7//f//AAAAAAR7B+ECJgA8AAABBwJmBKoBUgAIswENBSYAKzX//wAC/hQEBgaPAiYAXAAAAQcCZgRqAAAACLMBGhEmACs1//8AAAAABHsHLwImADwAAAEHAVL/wgFSAAizARIFJgArNf//AAL+FAQGBd0CJgBcAAABBgFSigAACLMBHxEmACs1//8Ac/7FBNMGFAImANMAAAAHAEIAtAAAAAL75QTZ/rQGIQAJABMAHkAMBAoODgAAFQ8GgAsBAC8zGs0yEQEzETMSOTkxMAEjJiYnNTMWFhcFIyYmJzUzFhYX/rRgNLEluhxjMf6cYDiuJbscYzEE2SrKPxU9rkQZLMg/FT2uRAAAAvxxBNn/rgZ/AA0AFQAoQBEVAAYRERcDBgoVChUKEcAGAQAvMxrMOTkvLxESOREBMxEzOTkxMAEjJicGByM1NzY3MxYXJzY3MxUGByP+015wY3JhXjVwNLBCl1BJNqxTeGAE2UtbZUEZPHtNXqbCW3AVbmAAAAL7mgTZ/tcGfwANABUAKkASBg4REQAAFwMGCg8KDwoTwAYBAC8zGsw5OS8vERI5EQEzETMSOTkxMAEjJicGByM1NzY3MxYXJSMmJzUzFhf+115hcmppXjVwNLBCl/3uX3hUrDRLBNlBZWBGFzx7TV6mrF5wFWxhAAL8cQTZ/3sG+AANAB8ANEAYEBMAExsDBgYWDg4hAwoGEgoSChkewAYBAC8zGswyOTkvLxESOREBMxEzMxIXOREzMTABIyYnBgcjNTc2NzMWFxMUBwcjJzY2NTQmIyIHNTYzMv7TXnBjcmFeNXA0sEKXqH8GUAo5PzkrLhoZN8ME2UtbZUEZPHtNXqYBe2cdUYMJICYlGQZQBgAC/GgE2f7nBxAAFwAlADpAGxgeCQkVFScbHiIeGREJAAUMIgAMDAAiAxXAGQAvGswXOS8vLxEzEMQzETMREjkRATMRMxI5OTEwASIuAiMiBgcjNjYzMh4CMzI2NzMGBhMjJicGByM1NzY3MxYX/i0lR0M/HCgqDlsNZUslSUM+GygqDFoLY15eYXJqaV41cDSwQpcGNR4lHjEyanEeJB4xMWhz/qRBZWBGFzx7TV6mAAL8eQTZ/scGwQAHABQAJEAPBwQKChISFgNABxEKgA4IAC8zGt0y1BrNEQEzETMSOTkxMAE2NzMVBgcjEyADMxYWMzI2NzMGBv1eUDGsVndgPv7sD2YJTGpiVghpC5UF9GhlFXJd/vwBBEg5QUB4jAAC/HkE2f7HBsEABwAUACRADwcECgoSEhYEQAERCoAOCAAvMxrdMtQazREBMxEzEjk5MTABIyYnNTMWFwMgAzMWFjMyNjczBgb90V53Vqw0SzX+7A9mCUxqYlYIaQuVBd1dchVsYf7lAQRIOUFAeIwAAvx5BNn+xwcGABEAHgAuQBUIAAAFDQMUFBwcIAsQBAQYGBsUgBIALxrNMjMROS/EMhEBMxEzEhc5ETMxMAEUBwcjJzY2NTQmIyIHNTYzMgMgAzMWFjMyNjczBgb+MX8GUgo5QjksJSQWPsCV/uwPZglMamJWCGkLlQZ5ZB0pWgkgJSUaBk4I/dMBBEg5QUB4jAAC/GgE2f7nBwwAFwAkADBAFRoiCQkVJgUMDB4eGBVAEQkAIRqAGAAvGt0y1sQzGs0RMxE5LzMRATMyETk5MTABIi4CIyIGByM2NjMyHgIzMjY3MwYGAyADMxYWMzI2NzMGBv4tJUdDPxwoKg5bDWRMJUlDPhsoKgxaC2Pd/uwPZglMamJWCGkLlQYzHiQeMDJocR4kHjExZ3L+pgEESDlBQHiMAAEAMf5CAW0AAAAPABpACwAFBQIKAxARDQgDAC/MMhESARc5ETMxMBc0JzMWFRQGIyInNRYzMjbfi3ueZmNBMiA2JTPuZ4d4hFtnEGwKMAAAAQAZ/nUBcQCaAAsAGEAJCgAGAAwNCAMAAC/MMhESATk5ETMxMCURECMiJzUWMzI1EQFx5Dg8KT1emv7f/vwYjBNkATAAAAEAGf51AXEAjwALABhACQoABgAMDQgDAAAvzDIREgE5OREzMTAlERAjIic1FjMyNREBceQ4PCk9Xo/+6v78GIwTZAElAP//ADQAAAJDBbYABwAU/3gAAAACAHP/7AQXBHMACwAXAChAFAwGEgAGABgZCRVLWQkmAw9NWQMZAD8rABg/KxESATk5ETMRMzEwARACIyICERASMzISARQWMzI2NTQmIyIGBBf33tn2+drY+f0Em46Nnp6PjZoCL/71/sgBNQEOAQ8BNf7L/vHQ6OrOzOzpAAABAC0AAAI3BF4ACgAmQBEJAQEACAALDAcEBwQBCRABGAA/PxI5OS8vERIBOTkRMxEzMTAhIxE0NwYHBycBMwI3oQhDPpZaAX+LAjHvjEMwcHIBIwABACkAAAPXBHMAGQAsQBgHEwATFw4BBRobEApLWRAmGBcBF0xZARgAPysRADMYPysREgEXOREzMTAhITUBPgI1NCYjIgYHJzYzMhYVFAYHBRchA9f8UgGRnXEsi3dYnFxawPLG2oK6/rkCAr6FAS93aFNBV2c9Sm2oqJZzu4DnBgAAAQBe/pUEGwR0ACcAR0AmAwQbABMHBwAEFiINBigpBBcWFxZLWRcXCiUlHktZJSYKEUtZCiUAPysAGD8rERIAORgvKxESADkREgEXOREzETMRMzEwARQGBxUWFhUUBCEiJic1FhYzIBEQISM1MzI2NTQmIyIGByc2NjMyFgPunZCwqv7e/vV0wVtf12ABe/5ekJKryJN+YKptVFrrgtXsAweMsh4IFrSS0eEjLJ4vMQEpAQqPl4ZrejRGcEdRwwAAAgAX/qgEZgReAAoAEgBCQCESBQkCAgsHAwADBQMTFAEFEgVNWQkSDg8PBxISAwcQAyQAPz8SOS8SOREzETMrEQAzERIBFzkRMzMzETMRMzEwJSMRIxEhNQEzETMhETQ3IwYHAQRm2aj9MgK+uNn+hgwKKUT+ORv+jQFzfQPG/EQBXNreVlz9ngAAAQCF/pUEHQRfABoAOkAfDwMZFAgUFwMEHBsAEUtZAAAGFRUYTFkVEAYMS1kGJQA/KwAYPysREgA5GC8rERIBFzkRMxEzMTABMgQVFAAjIic1FhYzMjY1ECEiBycTIRUhAzYCLecBCf7f/veCRtBlsMP+iV6gVjcC1/23JXMCJuXH4/7+T6AtM6adATIdNwKsmf5JFwD//wB1/+wELwXLAgYAGQAAAAEAXv6pBCsEXwAGAB9AEAEFBQACAwcIAwJMWQMQACQAPz8rERIBFzkRMzEwAQEhNSEVAQEdAl784wPN/ar+qQUdmYX6z///AGj/7AQpBcsCBgAbAAAAAgBq/pUEJQR0ABcAJQBBQCIbESIKCgAABBEDJicOHk1ZChQODgIUFBhLWRQmAgdNWQIlAD8rABg/KxESADkYLxI5KxESARc5ETMRMxEzMTABECEiJzUWMzISEyMGBiMiJjU0EjMyFhIBIgYVFBYzMjY2NTQmJgQl/Wh0RFBm8PULDDe2csLk/9CV33j+FI+ckJNbmVhSkwHv/KYUjxoBKQEzU1fo0OQBCJn+2wEwuKSQpUqARmmyZgD//wAdAAAFxAYfACcASQK2AAAABgBJAAAAAgBcAt0FqgXBACIAMwBaQC4sMDAuKiYmKAoAHBEFERYAKC4GNTQrMSQDLS8tKS8jIygcChQIAwMoKRkUFCkDAD8zLzMQzTIvMxI5OREzETMRMxESFzkREgEXOREzETMRMxEzETMRMzEwARQGIyInNRYzMjU0JiYnJiY1NDYzMhcHJiMiBhUUFhYXFhYBAyMXESMRMxMTMxEjETcjAwJIlXyRSmp3lBc2VXhRjm59XCJkUzxLEitfgVABpskIBne8w8u0fwYI0wOsYm0hbChkISghHyxbTFZpJ2MlLigdJBwkMlr+7AIvgf5SAtH90QIv/S8BpIn90///ABL+FARaBbYCJgA3AAAABwB6AT8AAP//AB/+FAKoBUYCJgBXAAAABwB6AMUAAAACAHH+FAQ3BFwADAAqAEdAJgoVGgMqKh4eJBUDKywhJ0ZZJCEbHA8aDxgSGAdGWRgQEgBGWRIWAD8rABg/KxESADk5GD8/MysREgEXOREzETMzETMxMCUyNjc1NCYjIgYVFBYFNDcjBiMiAhEQEjMyFzM3MxEUBiMiJzUWFjMyNjUCTKqXBJ6rkJmXAdsJC3Dm2e/z0997CxiD7PnylUvSdo6ld7fKK+LM4NDR2WskY6cBLQEKAQgBMaaS+6Ts7EaeKi6pkv//AHH+FAQ3BiECJgORAAABBgFLBgAACLMCOREmACs1//8Acf4UBDcF5QImA5EAAAEGAU4MAAAIswIrESYAKzX//wBx/hQENwXfAiYDkQAAAQcBTwFWAAAACLMCNBEmACs1//8Acf4UBDcGIQImA5EAAAEGAjp3AAAIswIvESYAKzUAAQDJAAABcwW2AAMAEbYABAUBAwASAD8/ERIBOTEwMxEzEcmqBbb6SgD//wAFAAABjgdzAiYDlgAAAQcAQ/58AVIACLMBBQUmACs1//8AswAAAjwHcwImA5YAAAEHAHb/KgFSAAizAQ0FJgArNf///8cAAAJpB3MCJgOWAAABBwFL/rsBUgAIswESBSYAKzX//wAFAAACOAclAiYDlgAAAQcAav7QAVIACrQCARkFJgArNTX///+rAAACkwcvAiYDlgAAAQcBUv6jAVIACLMBDQUmACs1////8wAAAksGtAImA5YAAAEHAU3+xgFSAAizAQcFJgArNf///+cAAAJTBzcCJgOWAAABBwFO/sIBUgAIswEEBSYAKzX//wBW/kIBogW2AiYDlgAAAAYBUTEA//8AuwAAAX8HMQImA5YAAAEHAU8AGQFSAAizAQ0FJgArNf//AMn+fwOjBbYAJgOWAAAABwAtAjsAAP///+QAAAIdBgoAJwOWAKoAAAEHAVT96P+XAAeyAQgAAD81AP//AMkAAAFzBbYCBgOWAAD//wAFAAACOAclAiYDlgAAAQcAav7QAVIACrQCARkFJgArNTX//wDJAAABcwW2AgYDlgAA//8ABQAAAjgHJQImA5YAAAEHAGr+0AFSAAq0AgEZBSYAKzU1//8AyQAAAXMFtgIGA5YAAP//AMkAAAFzBbYCBgOWAAD//wCZAAACBAfhAiYDlgAAAQcCZgORAVIACLMBCAUmACs1//8AuP6gAX8FtgImA5YAAAAHAmcDfQAAAAAAAQAAtjIAAUkGgAAADjYkAAUAJP9xAAUANwApAAUAOQApAAUAOgApAAUAPAAUAAUARP+uAAUARv+FAAUAR/+FAAUASP+FAAUASv/DAAUAUP/DAAUAUf/DAAUAUv+FAAUAU//DAAUAVP+FAAUAVf/DAAUAVv/DAAUAWP/DAAUAgv9xAAUAg/9xAAUAhP9xAAUAhf9xAAUAhv9xAAUAh/9xAAUAnwAUAAUAov+FAAUAo/+uAAUApP+uAAUApf+uAAUApv+uAAUAp/+uAAUAqP+uAAUAqf+FAAUAqv+FAAUAq/+FAAUArP+FAAUArf+FAAUAtP+FAAUAtf+FAAUAtv+FAAUAt/+FAAUAuP+FAAUAuv+FAAUAu//DAAUAvP/DAAUAvf/DAAUAvv/DAAUAwv9xAAUAw/+uAAUAxP9xAAUAxf+uAAUAxv9xAAUAx/+uAAUAyf+FAAUAy/+FAAUAzf+FAAUAz/+FAAUA0f+FAAUA0/+FAAUA1f+FAAUA1/+FAAUA2f+FAAUA2/+FAAUA3f+FAAUA3//DAAUA4f/DAAUA4//DAAUA5f/DAAUA+v/DAAUBBv/DAAUBCP/DAAUBDf/DAAUBD/+FAAUBEf+FAAUBE/+FAAUBFf+FAAUBF//DAAUBGf/DAAUBHf/DAAUBIf/DAAUBJAApAAUBJgApAAUBK//DAAUBLf/DAAUBL//DAAUBMf/DAAUBM//DAAUBNf/DAAUBNgApAAUBOAAUAAUBOgAUAAUBQ/9xAAUBRP+uAAUBRv+uAAUBSP+FAAUBSv/DAAUBVv9xAAUBX/9xAAUBYv9xAAUBaf9xAAUBef+uAAUBev/XAAUBe//XAAUBfv+uAAUBgf/DAAUBgv/XAAUBg//XAAUBhP/XAAUBh//XAAUBif/XAAUBjP+uAAUBjv/DAAUBj/+uAAUBkP+uAAUBk/+uAAUBmf+uAAUBpP+FAAUBqv9xAAUBrv+FAAUBtf+FAAUByv/XAAUBzv9xAAUBz/+FAAUB1f9xAAUB2P+FAAUB2/+FAAUB3v+FAAUB6v+FAAUB7f+FAAUB7v/DAAUB8v9xAAUB+gApAAUB/AApAAUB/gApAAUCAAAUAAUCV//DAAUCWP9xAAUCWf+uAAUCYP+FAAUCYv/DAAUCav+FAAUCcv9xAAUCc/9xAAUCff/sAAUCf/+FAAUChf+FAAUCh/+FAAUCif+FAAUCjf+FAAUCsv+FAAUCtP+FAAUCzv+FAAUCz/9xAAUC2f9xAAUC2v/XAAUC2/9xAAUC3P/XAAUC3f9xAAUC3v/XAAUC4P+FAAUC4v/XAAUC5P/XAAUC8P+FAAUC8v+FAAUC9P+FAAUDCf9xAAUDCv+FAAUDC/9xAAUDDP+FAAUDEf+FAAUDEv9xAAUDFv+FAAUDGv+FAAUDG/+FAAUDHP9xAAUDHf9xAAUDHv+uAAUDH/9xAAUDIP+uAAUDIf9xAAUDIv+uAAUDI/9xAAUDJf9xAAUDJv+uAAUDJ/9xAAUDKP+uAAUDKf9xAAUDKv+uAAUDK/9xAAUDLP+uAAUDLf9xAAUDLv+uAAUDL/9xAAUDMP+uAAUDMf9xAAUDMv+uAAUDM/9xAAUDNP+uAAUDNv+FAAUDOP+FAAUDOv+FAAUDPP+FAAUDQP+FAAUDQv+FAAUDRP+FAAUDSv+FAAUDTP+FAAUDTv+FAAUDUv+FAAUDVP+FAAUDVv+FAAUDWP+FAAUDWv+FAAUDXP+FAAUDXv+FAAUDYP+FAAUDYv/DAAUDZP/DAAUDZv/DAAUDaP/DAAUDav/DAAUDbP/DAAUDbv/DAAUDbwAUAAUDcQAUAAUDcwAUAAUDjwApAAoAJP9xAAoANwApAAoAOQApAAoAOgApAAoAPAAUAAoARP+uAAoARv+FAAoAR/+FAAoASP+FAAoASv/DAAoAUP/DAAoAUf/DAAoAUv+FAAoAU//DAAoAVP+FAAoAVf/DAAoAVv/DAAoAWP/DAAoAgv9xAAoAg/9xAAoAhP9xAAoAhf9xAAoAhv9xAAoAh/9xAAoAnwAUAAoAov+FAAoAo/+uAAoApP+uAAoApf+uAAoApv+uAAoAp/+uAAoAqP+uAAoAqf+FAAoAqv+FAAoAq/+FAAoArP+FAAoArf+FAAoAtP+FAAoAtf+FAAoAtv+FAAoAt/+FAAoAuP+FAAoAuv+FAAoAu//DAAoAvP/DAAoAvf/DAAoAvv/DAAoAwv9xAAoAw/+uAAoAxP9xAAoAxf+uAAoAxv9xAAoAx/+uAAoAyf+FAAoAy/+FAAoAzf+FAAoAz/+FAAoA0f+FAAoA0/+FAAoA1f+FAAoA1/+FAAoA2f+FAAoA2/+FAAoA3f+FAAoA3//DAAoA4f/DAAoA4//DAAoA5f/DAAoA+v/DAAoBBv/DAAoBCP/DAAoBDf/DAAoBD/+FAAoBEf+FAAoBE/+FAAoBFf+FAAoBF//DAAoBGf/DAAoBHf/DAAoBIf/DAAoBJAApAAoBJgApAAoBK//DAAoBLf/DAAoBL//DAAoBMf/DAAoBM//DAAoBNf/DAAoBNgApAAoBOAAUAAoBOgAUAAoBQ/9xAAoBRP+uAAoBRv+uAAoBSP+FAAoBSv/DAAoBVv9xAAoBX/9xAAoBYv9xAAoBaf9xAAoBef+uAAoBev/XAAoBe//XAAoBfv+uAAoBgf/DAAoBgv/XAAoBg//XAAoBhP/XAAoBh//XAAoBif/XAAoBjP+uAAoBjv/DAAoBj/+uAAoBkP+uAAoBk/+uAAoBmf+uAAoBpP+FAAoBqv9xAAoBrv+FAAoBtf+FAAoByv/XAAoBzv9xAAoBz/+FAAoB1f9xAAoB2P+FAAoB2/+FAAoB3v+FAAoB6v+FAAoB7f+FAAoB7v/DAAoB8v9xAAoB+gApAAoB/AApAAoB/gApAAoCAAAUAAoCV//DAAoCWP9xAAoCWf+uAAoCYP+FAAoCYv/DAAoCav+FAAoCcv9xAAoCc/9xAAoCff/sAAoCf/+FAAoChf+FAAoCh/+FAAoCif+FAAoCjf+FAAoCsv+FAAoCtP+FAAoCzv+FAAoCz/9xAAoC2f9xAAoC2v/XAAoC2/9xAAoC3P/XAAoC3f9xAAoC3v/XAAoC4P+FAAoC4v/XAAoC5P/XAAoC8P+FAAoC8v+FAAoC9P+FAAoDCf9xAAoDCv+FAAoDC/9xAAoDDP+FAAoDEf+FAAoDEv9xAAoDFv+FAAoDGv+FAAoDG/+FAAoDHP9xAAoDHf9xAAoDHv+uAAoDH/9xAAoDIP+uAAoDIf9xAAoDIv+uAAoDI/9xAAoDJf9xAAoDJv+uAAoDJ/9xAAoDKP+uAAoDKf9xAAoDKv+uAAoDK/9xAAoDLP+uAAoDLf9xAAoDLv+uAAoDL/9xAAoDMP+uAAoDMf9xAAoDMv+uAAoDM/9xAAoDNP+uAAoDNv+FAAoDOP+FAAoDOv+FAAoDPP+FAAoDQP+FAAoDQv+FAAoDRP+FAAoDSv+FAAoDTP+FAAoDTv+FAAoDUv+FAAoDVP+FAAoDVv+FAAoDWP+FAAoDWv+FAAoDXP+FAAoDXv+FAAoDYP+FAAoDYv/DAAoDZP/DAAoDZv/DAAoDaP/DAAoDav/DAAoDbP/DAAoDbv/DAAoDbwAUAAoDcQAUAAoDcwAUAAoDjwApAAsALQC4AA8AJv+aAA8AKv+aAA8AMv+aAA8ANP+aAA8AN/9xAA8AOP/XAA8AOf+FAA8AOv+FAA8APP+FAA8Aif+aAA8AlP+aAA8Alf+aAA8Alv+aAA8Al/+aAA8AmP+aAA8Amv+aAA8Am//XAA8AnP/XAA8Anf/XAA8Anv/XAA8An/+FAA8AyP+aAA8Ayv+aAA8AzP+aAA8Azv+aAA8A3v+aAA8A4P+aAA8A4v+aAA8A5P+aAA8BDv+aAA8BEP+aAA8BEv+aAA8BFP+aAA8BJP9xAA8BJv9xAA8BKv/XAA8BLP/XAA8BLv/XAA8BMP/XAA8BMv/XAA8BNP/XAA8BNv+FAA8BOP+FAA8BOv+FAA8BR/+aAA8BZv+uAA8Bbf+uAA8Bcf9xAA8Bcv+FAA8Bc/+aAA8Bdf+FAA8BeP+FAA8Bhf/XAA8Bnf9xAA8Bn/+aAA8Bpv9xAA8BuP+aAA8Bu/+aAA8BvP9xAA8Bvv+uAA8Bwf9cAA8BxP9xAA8B3P+aAA8B4f+FAA8B5P+aAA8B+v+FAA8B/P+FAA8B/v+FAA8CAP+FAA8CVP+FAA8CX/+aAA8CYf/XAA8CbP+aAA8CfP9cAA8Cfv+aAA8CgP+FAA8Cgv+FAA8ChP+aAA8Chv+aAA8CiP+aAA8Civ+aAA8CjP+aAA8Cqf9xAA8Cqv+aAA8Csf+aAA8Cs/+aAA8Ctf9xAA8Ctv+aAA8Ct/+FAA8Cuf+FAA8Cvf9xAA8Cvv+aAA8Cv/9cAA8CwP+FAA8Cwf9cAA8Cwv+FAA8Cxf+FAA8Cx/+FAA8C1P9cAA8C1f+FAA8C7/+aAA8C8f+aAA8C8/+aAA8C/f9cAA8C/v+FAA8DDf+FAA8DDv+aAA8DD/+FAA8DEP+aAA8DFf+aAA8DF/9xAA8DGP+aAA8DSf+aAA8DS/+aAA8DTf+aAA8DT/+aAA8DUf+aAA8DU/+aAA8DVf+aAA8DV/+aAA8DWf+aAA8DW/+aAA8DXf+aAA8DX/+aAA8DYf/XAA8DY//XAA8DZf/XAA8DZ//XAA8Daf/XAA8Da//XAA8Dbf/XAA8Db/+FAA8Dcf+FAA8Dc/+FAA8Dj/9xABAAN/+uABABJP+uABABJv+uABABcf+uABABnf+uABABpv+uABABvP+uABABxP+uABAB3P/XABAB5P/XABACqf+uABACqv/XABACtf+uABACtv/XABACvf+uABACvv/XABADF/+uABADGP/XABADj/+uABEAJv+aABEAKv+aABEAMv+aABEANP+aABEAN/9xABEAOP/XABEAOf+FABEAOv+FABEAPP+FABEAif+aABEAlP+aABEAlf+aABEAlv+aABEAl/+aABEAmP+aABEAmv+aABEAm//XABEAnP/XABEAnf/XABEAnv/XABEAn/+FABEAyP+aABEAyv+aABEAzP+aABEAzv+aABEA3v+aABEA4P+aABEA4v+aABEA5P+aABEBDv+aABEBEP+aABEBEv+aABEBFP+aABEBJP9xABEBJv9xABEBKv/XABEBLP/XABEBLv/XABEBMP/XABEBMv/XABEBNP/XABEBNv+FABEBOP+FABEBOv+FABEBR/+aABEBZv+uABEBbf+uABEBcf9xABEBcv+FABEBc/+aABEBdf+FABEBeP+FABEBhf/XABEBnf9xABEBn/+aABEBpv9xABEBuP+aABEBu/+aABEBvP9xABEBvv+uABEBwf9cABEBxP9xABEB3P+aABEB4f+FABEB5P+aABEB+v+FABEB/P+FABEB/v+FABECAP+FABECVP+FABECX/+aABECYf/XABECbP+aABECfP9cABECfv+aABECgP+FABECgv+FABEChP+aABEChv+aABECiP+aABECiv+aABECjP+aABECqf9xABECqv+aABECsf+aABECs/+aABECtf9xABECtv+aABECt/+FABECuf+FABECvf9xABECvv+aABECv/9cABECwP+FABECwf9cABECwv+FABECxf+FABECx/+FABEC1P9cABEC1f+FABEC7/+aABEC8f+aABEC8/+aABEC/f9cABEC/v+FABEDDf+FABEDDv+aABEDD/+FABEDEP+aABEDFf+aABEDF/9xABEDGP+aABEDSf+aABEDS/+aABEDTf+aABEDT/+aABEDUf+aABEDU/+aABEDVf+aABEDV/+aABEDWf+aABEDW/+aABEDXf+aABEDX/+aABEDYf/XABEDY//XABEDZf/XABEDZ//XABEDaf/XABEDa//XABEDbf/XABEDb/+FABEDcf+FABEDc/+FABEDj/9xACQABf9xACQACv9xACQAJv/XACQAKv/XACQALQEKACQAMv/XACQANP/XACQAN/9xACQAOf+uACQAOv+uACQAPP+FACQAif/XACQAlP/XACQAlf/XACQAlv/XACQAl//XACQAmP/XACQAmv/XACQAn/+FACQAyP/XACQAyv/XACQAzP/XACQAzv/XACQA3v/XACQA4P/XACQA4v/XACQA5P/XACQBDv/XACQBEP/XACQBEv/XACQBFP/XACQBJP9xACQBJv9xACQBNv+uACQBOP+FACQBOv+FACQBR//XACQB+v+uACQB/P+uACQB/v+uACQCAP+FACQCB/9xACQCC/9xACQCX//XACQDSf/XACQDS//XACQDTf/XACQDT//XACQDUf/XACQDU//XACQDVf/XACQDV//XACQDWf/XACQDW//XACQDXf/XACQDX//XACQDb/+FACQDcf+FACQDc/+FACQDj/9xACUAD/+uACUAEf+uACUAJP/XACUAN//DACUAOf/sACUAOv/sACUAO//XACUAPP/sACUAPf/sACUAgv/XACUAg//XACUAhP/XACUAhf/XACUAhv/XACUAh//XACUAn//sACUAwv/XACUAxP/XACUAxv/XACUBJP/DACUBJv/DACUBNv/sACUBOP/sACUBOv/sACUBO//sACUBPf/sACUBP//sACUBQ//XACUBoP/sACUB+v/sACUB/P/sACUB/v/sACUCAP/sACUCCP+uACUCDP+uACUCWP/XACUDHf/XACUDH//XACUDIf/XACUDI//XACUDJf/XACUDJ//XACUDKf/XACUDK//XACUDLf/XACUDL//XACUDMf/XACUDM//XACUDb//sACUDcf/sACUDc//sACUDj//DACYAJv/XACYAKv/XACYAMv/XACYANP/XACYAif/XACYAlP/XACYAlf/XACYAlv/XACYAl//XACYAmP/XACYAmv/XACYAyP/XACYAyv/XACYAzP/XACYAzv/XACYA3v/XACYA4P/XACYA4v/XACYA5P/XACYBDv/XACYBEP/XACYBEv/XACYBFP/XACYBR//XACYCX//XACYDSf/XACYDS//XACYDTf/XACYDT//XACYDUf/XACYDU//XACYDVf/XACYDV//XACYDWf/XACYDW//XACYDXf/XACYDX//XACcAD/+uACcAEf+uACcAJP/XACcAN//DACcAOf/sACcAOv/sACcAO//XACcAPP/sACcAPf/sACcAgv/XACcAg//XACcAhP/XACcAhf/XACcAhv/XACcAh//XACcAn//sACcAwv/XACcAxP/XACcAxv/XACcBJP/DACcBJv/DACcBNv/sACcBOP/sACcBOv/sACcBO//sACcBPf/sACcBP//sACcBQ//XACcBoP/sACcB+v/sACcB/P/sACcB/v/sACcCAP/sACcCCP+uACcCDP+uACcCWP/XACcDHf/XACcDH//XACcDIf/XACcDI//XACcDJf/XACcDJ//XACcDKf/XACcDK//XACcDLf/XACcDL//XACcDMf/XACcDM//XACcDb//sACcDcf/sACcDc//sACcDj//DACgALQB7ACkAD/+FACkAEf+FACkAIgApACkAJP/XACkAgv/XACkAg//XACkAhP/XACkAhf/XACkAhv/XACkAh//XACkAwv/XACkAxP/XACkAxv/XACkBQ//XACkCCP+FACkCDP+FACkCWP/XACkDHf/XACkDH//XACkDIf/XACkDI//XACkDJf/XACkDJ//XACkDKf/XACkDK//XACkDLf/XACkDL//XACkDMf/XACkDM//XAC4AJv/XAC4AKv/XAC4AMv/XAC4ANP/XAC4Aif/XAC4AlP/XAC4Alf/XAC4Alv/XAC4Al//XAC4AmP/XAC4Amv/XAC4AyP/XAC4Ayv/XAC4AzP/XAC4Azv/XAC4A3v/XAC4A4P/XAC4A4v/XAC4A5P/XAC4BDv/XAC4BEP/XAC4BEv/XAC4BFP/XAC4BR//XAC4CX//XAC4DSf/XAC4DS//XAC4DTf/XAC4DT//XAC4DUf/XAC4DU//XAC4DVf/XAC4DV//XAC4DWf/XAC4DW//XAC4DXf/XAC4DX//XAC8ABf9cAC8ACv9cAC8AJv/XAC8AKv/XAC8AMv/XAC8ANP/XAC8AN//XAC8AOP/sAC8AOf/XAC8AOv/XAC8APP/DAC8Aif/XAC8AlP/XAC8Alf/XAC8Alv/XAC8Al//XAC8AmP/XAC8Amv/XAC8Am//sAC8AnP/sAC8Anf/sAC8Anv/sAC8An//DAC8AyP/XAC8Ayv/XAC8AzP/XAC8Azv/XAC8A3v/XAC8A4P/XAC8A4v/XAC8A5P/XAC8BDv/XAC8BEP/XAC8BEv/XAC8BFP/XAC8BJP/XAC8BJv/XAC8BKv/sAC8BLP/sAC8BLv/sAC8BMP/sAC8BMv/sAC8BNP/sAC8BNv/XAC8BOP/DAC8BOv/DAC8BR//XAC8B+v/XAC8B/P/XAC8B/v/XAC8CAP/DAC8CB/9cAC8CC/9cAC8CX//XAC8CYf/sAC8DSf/XAC8DS//XAC8DTf/XAC8DT//XAC8DUf/XAC8DU//XAC8DVf/XAC8DV//XAC8DWf/XAC8DW//XAC8DXf/XAC8DX//XAC8DYf/sAC8DY//sAC8DZf/sAC8DZ//sAC8Daf/sAC8Da//sAC8Dbf/sAC8Db//DAC8Dcf/DAC8Dc//DAC8Dj//XADIAD/+uADIAEf+uADIAJP/XADIAN//DADIAOf/sADIAOv/sADIAO//XADIAPP/sADIAPf/sADIAgv/XADIAg//XADIAhP/XADIAhf/XADIAhv/XADIAh//XADIAn//sADIAwv/XADIAxP/XADIAxv/XADIBJP/DADIBJv/DADIBNv/sADIBOP/sADIBOv/sADIBO//sADIBPf/sADIBP//sADIBQ//XADIBoP/sADIB+v/sADIB/P/sADIB/v/sADICAP/sADICCP+uADICDP+uADICWP/XADIDHf/XADIDH//XADIDIf/XADIDI//XADIDJf/XADIDJ//XADIDKf/XADIDK//XADIDLf/XADIDL//XADIDMf/XADIDM//XADIDb//sADIDcf/sADIDc//sADIDj//DADMAD/72ADMAEf72ADMAJP+aADMAO//XADMAPf/sADMAgv+aADMAg/+aADMAhP+aADMAhf+aADMAhv+aADMAh/+aADMAwv+aADMAxP+aADMAxv+aADMBO//sADMBPf/sADMBP//sADMBQ/+aADMCCP72ADMCDP72ADMCWP+aADMDHf+aADMDH/+aADMDIf+aADMDI/+aADMDJf+aADMDJ/+aADMDKf+aADMDK/+aADMDLf+aADMDL/+aADMDMf+aADMDM/+aADQAD/+uADQAEf+uADQAJP/XADQAN//DADQAOf/sADQAOv/sADQAO//XADQAPP/sADQAPf/sADQAgv/XADQAg//XADQAhP/XADQAhf/XADQAhv/XADQAh//XADQAn//sADQAwv/XADQAxP/XADQAxv/XADQBJP/DADQBJv/DADQBNv/sADQBOP/sADQBOv/sADQBO//sADQBPf/sADQBP//sADQBQ//XADQBoP/sADQB+v/sADQB/P/sADQB/v/sADQCAP/sADQCCP+uADQCDP+uADQCWP/XADQDHf/XADQDH//XADQDIf/XADQDI//XADQDJf/XADQDJ//XADQDKf/XADQDK//XADQDLf/XADQDL//XADQDMf/XADQDM//XADQDb//sADQDcf/sADQDc//sADQDj//DADcAD/+FADcAEP+uADcAEf+FADcAIgApADcAJP9xADcAJv/XADcAKv/XADcAMv/XADcANP/XADcANwApADcARP9cADcARv9xADcAR/9xADcASP9xADcASv9xADcAUP+aADcAUf+aADcAUv9xADcAU/+aADcAVP9xADcAVf+aADcAVv+FADcAWP+aADcAWf/XADcAWv/XADcAW//XADcAXP/XADcAXf+uADcAgv9xADcAg/9xADcAhP9xADcAhf9xADcAhv9xADcAh/9xADcAif/XADcAlP/XADcAlf/XADcAlv/XADcAl//XADcAmP/XADcAmv/XADcAov9xADcAo/9cADcApP9cADcApf9cADcApv9cADcAp/9cADcAqP9cADcAqf9xADcAqv9xADcAq/9xADcArP9xADcArf9xADcAtP9xADcAtf9xADcAtv9xADcAt/9xADcAuP9xADcAuv9xADcAu/+aADcAvP+aADcAvf+aADcAvv+aADcAv//XADcAwv9xADcAw/9cADcAxP9xADcAxf9cADcAxv9xADcAx/9cADcAyP/XADcAyf9xADcAyv/XADcAy/9xADcAzP/XADcAzf9xADcAzv/XADcAz/9xADcA0f9xADcA0/9xADcA1f9xADcA1/9xADcA2f9xADcA2/9xADcA3f9xADcA3v/XADcA3/9xADcA4P/XADcA4f9xADcA4v/XADcA4/9xADcA5P/XADcA5f9xADcA+v+aADcBBv+aADcBCP+aADcBDf+aADcBDv/XADcBD/9xADcBEP/XADcBEf9xADcBEv/XADcBE/9xADcBFP/XADcBFf9xADcBF/+aADcBGf+aADcBHf+FADcBIf+FADcBJAApADcBJgApADcBK/+aADcBLf+aADcBL/+aADcBMf+aADcBM/+aADcBNf+aADcBN//XADcBPP+uADcBPv+uADcBQP+uADcBQ/9xADcBRP9cADcBRv9cADcBR//XADcBSP9xADcBSv+FADcB+//XADcB/f/XADcCAv+uADcCA/+uADcCBP+uADcCCP+FADcCDP+FADcCV/+aADcCWP9xADcCWf9cADcCX//XADcCYP9xADcCYv+aADcDHf9xADcDHv9cADcDH/9xADcDIP9cADcDIf9xADcDIv9cADcDI/9xADcDJf9xADcDJv9cADcDJ/9xADcDKP9cADcDKf9xADcDKv9cADcDK/9xADcDLP9cADcDLf9xADcDLv9cADcDL/9xADcDMP9cADcDMf9xADcDMv9cADcDM/9xADcDNP9cADcDNv9xADcDOP9xADcDOv9xADcDPP9xADcDQP9xADcDQv9xADcDRP9xADcDSf/XADcDSv9xADcDS//XADcDTP9xADcDTf/XADcDTv9xADcDT//XADcDUf/XADcDUv9xADcDU//XADcDVP9xADcDVf/XADcDVv9xADcDV//XADcDWP9xADcDWf/XADcDWv9xADcDW//XADcDXP9xADcDXf/XADcDXv9xADcDX//XADcDYP9xADcDYv+aADcDZP+aADcDZv+aADcDaP+aADcDav+aADcDbP+aADcDbv+aADcDcP/XADcDjwApADgAD//XADgAEf/XADgAJP/sADgAgv/sADgAg//sADgAhP/sADgAhf/sADgAhv/sADgAh//sADgAwv/sADgAxP/sADgAxv/sADgBQ//sADgCCP/XADgCDP/XADgCWP/sADgDHf/sADgDH//sADgDIf/sADgDI//sADgDJf/sADgDJ//sADgDKf/sADgDK//sADgDLf/sADgDL//sADgDMf/sADgDM//sADkAD/+aADkAEf+aADkAIgApADkAJP+uADkAJv/sADkAKv/sADkAMv/sADkANP/sADkARP/XADkARv/XADkAR//XADkASP/XADkASv/sADkAUP/sADkAUf/sADkAUv/XADkAU//sADkAVP/XADkAVf/sADkAVv/sADkAWP/sADkAgv+uADkAg/+uADkAhP+uADkAhf+uADkAhv+uADkAh/+uADkAif/sADkAlP/sADkAlf/sADkAlv/sADkAl//sADkAmP/sADkAmv/sADkAov/XADkAo//XADkApP/XADkApf/XADkApv/XADkAp//XADkAqP/XADkAqf/XADkAqv/XADkAq//XADkArP/XADkArf/XADkAtP/XADkAtf/XADkAtv/XADkAt//XADkAuP/XADkAuv/XADkAu//sADkAvP/sADkAvf/sADkAvv/sADkAwv+uADkAw//XADkAxP+uADkAxf/XADkAxv+uADkAx//XADkAyP/sADkAyf/XADkAyv/sADkAy//XADkAzP/sADkAzf/XADkAzv/sADkAz//XADkA0f/XADkA0//XADkA1f/XADkA1//XADkA2f/XADkA2//XADkA3f/XADkA3v/sADkA3//sADkA4P/sADkA4f/sADkA4v/sADkA4//sADkA5P/sADkA5f/sADkA+v/sADkBBv/sADkBCP/sADkBDf/sADkBDv/sADkBD//XADkBEP/sADkBEf/XADkBEv/sADkBE//XADkBFP/sADkBFf/XADkBF//sADkBGf/sADkBHf/sADkBIf/sADkBK//sADkBLf/sADkBL//sADkBMf/sADkBM//sADkBNf/sADkBQ/+uADkBRP/XADkBRv/XADkBR//sADkBSP/XADkBSv/sADkCCP+aADkCDP+aADkCV//sADkCWP+uADkCWf/XADkCX//sADkCYP/XADkCYv/sADkDHf+uADkDHv/XADkDH/+uADkDIP/XADkDIf+uADkDIv/XADkDI/+uADkDJf+uADkDJv/XADkDJ/+uADkDKP/XADkDKf+uADkDKv/XADkDK/+uADkDLP/XADkDLf+uADkDLv/XADkDL/+uADkDMP/XADkDMf+uADkDMv/XADkDM/+uADkDNP/XADkDNv/XADkDOP/XADkDOv/XADkDPP/XADkDQP/XADkDQv/XADkDRP/XADkDSf/sADkDSv/XADkDS//sADkDTP/XADkDTf/sADkDTv/XADkDT//sADkDUf/sADkDUv/XADkDU//sADkDVP/XADkDVf/sADkDVv/XADkDV//sADkDWP/XADkDWf/sADkDWv/XADkDW//sADkDXP/XADkDXf/sADkDXv/XADkDX//sADkDYP/XADkDYv/sADkDZP/sADkDZv/sADkDaP/sADkDav/sADkDbP/sADkDbv/sADoAD/+aADoAEf+aADoAIgApADoAJP+uADoAJv/sADoAKv/sADoAMv/sADoANP/sADoARP/XADoARv/XADoAR//XADoASP/XADoASv/sADoAUP/sADoAUf/sADoAUv/XADoAU//sADoAVP/XADoAVf/sADoAVv/sADoAWP/sADoAgv+uADoAg/+uADoAhP+uADoAhf+uADoAhv+uADoAh/+uADoAif/sADoAlP/sADoAlf/sADoAlv/sADoAl//sADoAmP/sADoAmv/sADoAov/XADoAo//XADoApP/XADoApf/XADoApv/XADoAp//XADoAqP/XADoAqf/XADoAqv/XADoAq//XADoArP/XADoArf/XADoAtP/XADoAtf/XADoAtv/XADoAt//XADoAuP/XADoAuv/XADoAu//sADoAvP/sADoAvf/sADoAvv/sADoAwv+uADoAw//XADoAxP+uADoAxf/XADoAxv+uADoAx//XADoAyP/sADoAyf/XADoAyv/sADoAy//XADoAzP/sADoAzf/XADoAzv/sADoAz//XADoA0f/XADoA0//XADoA1f/XADoA1//XADoA2f/XADoA2//XADoA3f/XADoA3v/sADoA3//sADoA4P/sADoA4f/sADoA4v/sADoA4//sADoA5P/sADoA5f/sADoA+v/sADoBBv/sADoBCP/sADoBDf/sADoBDv/sADoBD//XADoBEP/sADoBEf/XADoBEv/sADoBE//XADoBFP/sADoBFf/XADoBF//sADoBGf/sADoBHf/sADoBIf/sADoBK//sADoBLf/sADoBL//sADoBMf/sADoBM//sADoBNf/sADoBQ/+uADoBRP/XADoBRv/XADoBR//sADoBSP/XADoBSv/sADoCCP+aADoCDP+aADoCV//sADoCWP+uADoCWf/XADoCX//sADoCYP/XADoCYv/sADoDHf+uADoDHv/XADoDH/+uADoDIP/XADoDIf+uADoDIv/XADoDI/+uADoDJf+uADoDJv/XADoDJ/+uADoDKP/XADoDKf+uADoDKv/XADoDK/+uADoDLP/XADoDLf+uADoDLv/XADoDL/+uADoDMP/XADoDMf+uADoDMv/XADoDM/+uADoDNP/XADoDNv/XADoDOP/XADoDOv/XADoDPP/XADoDQP/XADoDQv/XADoDRP/XADoDSf/sADoDSv/XADoDS//sADoDTP/XADoDTf/sADoDTv/XADoDT//sADoDUf/sADoDUv/XADoDU//sADoDVP/XADoDVf/sADoDVv/XADoDV//sADoDWP/XADoDWf/sADoDWv/XADoDW//sADoDXP/XADoDXf/sADoDXv/XADoDX//sADoDYP/XADoDYv/sADoDZP/sADoDZv/sADoDaP/sADoDav/sADoDbP/sADoDbv/sADsAJv/XADsAKv/XADsAMv/XADsANP/XADsAif/XADsAlP/XADsAlf/XADsAlv/XADsAl//XADsAmP/XADsAmv/XADsAyP/XADsAyv/XADsAzP/XADsAzv/XADsA3v/XADsA4P/XADsA4v/XADsA5P/XADsBDv/XADsBEP/XADsBEv/XADsBFP/XADsBR//XADsCX//XADsDSf/XADsDS//XADsDTf/XADsDT//XADsDUf/XADsDU//XADsDVf/XADsDV//XADsDWf/XADsDW//XADsDXf/XADsDX//XADwAD/+FADwAEf+FADwAIgApADwAJP+FADwAJv/XADwAKv/XADwAMv/XADwANP/XADwARP+aADwARv+aADwAR/+aADwASP+aADwASv/XADwAUP/DADwAUf/DADwAUv+aADwAU//DADwAVP+aADwAVf/DADwAVv+uADwAWP/DADwAXf/XADwAgv+FADwAg/+FADwAhP+FADwAhf+FADwAhv+FADwAh/+FADwAif/XADwAlP/XADwAlf/XADwAlv/XADwAl//XADwAmP/XADwAmv/XADwAov+aADwAo/+aADwApP+aADwApf+aADwApv+aADwAp/+aADwAqP+aADwAqf+aADwAqv+aADwAq/+aADwArP+aADwArf+aADwAtP+aADwAtf+aADwAtv+aADwAt/+aADwAuP+aADwAuv+aADwAu//DADwAvP/DADwAvf/DADwAvv/DADwAwv+FADwAw/+aADwAxP+FADwAxf+aADwAxv+FADwAx/+aADwAyP/XADwAyf+aADwAyv/XADwAy/+aADwAzP/XADwAzf+aADwAzv/XADwAz/+aADwA0f+aADwA0/+aADwA1f+aADwA1/+aADwA2f+aADwA2/+aADwA3f+aADwA3v/XADwA3//XADwA4P/XADwA4f/XADwA4v/XADwA4//XADwA5P/XADwA5f/XADwA+v/DADwBBv/DADwBCP/DADwBDf/DADwBDv/XADwBD/+aADwBEP/XADwBEf+aADwBEv/XADwBE/+aADwBFP/XADwBFf+aADwBF//DADwBGf/DADwBHf+uADwBIf+uADwBK//DADwBLf/DADwBL//DADwBMf/DADwBM//DADwBNf/DADwBPP/XADwBPv/XADwBQP/XADwBQ/+FADwBRP+aADwBRv+aADwBR//XADwBSP+aADwBSv+uADwCCP+FADwCDP+FADwCV//DADwCWP+FADwCWf+aADwCX//XADwCYP+aADwCYv/DADwDHf+FADwDHv+aADwDH/+FADwDIP+aADwDIf+FADwDIv+aADwDI/+FADwDJf+FADwDJv+aADwDJ/+FADwDKP+aADwDKf+FADwDKv+aADwDK/+FADwDLP+aADwDLf+FADwDLv+aADwDL/+FADwDMP+aADwDMf+FADwDMv+aADwDM/+FADwDNP+aADwDNv+aADwDOP+aADwDOv+aADwDPP+aADwDQP+aADwDQv+aADwDRP+aADwDSf/XADwDSv+aADwDS//XADwDTP+aADwDTf/XADwDTv+aADwDT//XADwDUf/XADwDUv+aADwDU//XADwDVP+aADwDVf/XADwDVv+aADwDV//XADwDWP+aADwDWf/XADwDWv+aADwDW//XADwDXP+aADwDXf/XADwDXv+aADwDX//XADwDYP+aADwDYv/DADwDZP/DADwDZv/DADwDaP/DADwDav/DADwDbP/DADwDbv/DAD0AJv/sAD0AKv/sAD0AMv/sAD0ANP/sAD0Aif/sAD0AlP/sAD0Alf/sAD0Alv/sAD0Al//sAD0AmP/sAD0Amv/sAD0AyP/sAD0Ayv/sAD0AzP/sAD0Azv/sAD0A3v/sAD0A4P/sAD0A4v/sAD0A5P/sAD0BDv/sAD0BEP/sAD0BEv/sAD0BFP/sAD0BR//sAD0CX//sAD0DSf/sAD0DS//sAD0DTf/sAD0DT//sAD0DUf/sAD0DU//sAD0DVf/sAD0DV//sAD0DWf/sAD0DW//sAD0DXf/sAD0DX//sAD4ALQC4AEQABf/sAEQACv/sAEQCB//sAEQCC//sAEUABf/sAEUACv/sAEUAWf/XAEUAWv/XAEUAW//XAEUAXP/XAEUAXf/sAEUAv//XAEUBN//XAEUBPP/sAEUBPv/sAEUBQP/sAEUB+//XAEUB/f/XAEUCB//sAEUCC//sAEUDcP/XAEYABQApAEYACgApAEYCBwApAEYCCwApAEgABf/sAEgACv/sAEgAWf/XAEgAWv/XAEgAW//XAEgAXP/XAEgAXf/sAEgAv//XAEgBN//XAEgBPP/sAEgBPv/sAEgBQP/sAEgB+//XAEgB/f/XAEgCB//sAEgCC//sAEgDcP/XAEkABQB7AEkACgB7AEkCBwB7AEkCCwB7AEsABf/sAEsACv/sAEsCB//sAEsCC//sAE4ARv/XAE4AR//XAE4ASP/XAE4AUv/XAE4AVP/XAE4Aov/XAE4Aqf/XAE4Aqv/XAE4Aq//XAE4ArP/XAE4Arf/XAE4AtP/XAE4Atf/XAE4Atv/XAE4At//XAE4AuP/XAE4Auv/XAE4Ayf/XAE4Ay//XAE4Azf/XAE4Az//XAE4A0f/XAE4A0//XAE4A1f/XAE4A1//XAE4A2f/XAE4A2//XAE4A3f/XAE4BD//XAE4BEf/XAE4BE//XAE4BFf/XAE4BSP/XAE4CYP/XAE4DNv/XAE4DOP/XAE4DOv/XAE4DPP/XAE4DQP/XAE4DQv/XAE4DRP/XAE4DSv/XAE4DTP/XAE4DTv/XAE4DUv/XAE4DVP/XAE4DVv/XAE4DWP/XAE4DWv/XAE4DXP/XAE4DXv/XAE4DYP/XAFAABf/sAFAACv/sAFACB//sAFACC//sAFEABf/sAFEACv/sAFECB//sAFECC//sAFIABf/sAFIACv/sAFIAWf/XAFIAWv/XAFIAW//XAFIAXP/XAFIAXf/sAFIAv//XAFIBN//XAFIBPP/sAFIBPv/sAFIBQP/sAFIB+//XAFIB/f/XAFICB//sAFICC//sAFIDcP/XAFMABf/sAFMACv/sAFMAWf/XAFMAWv/XAFMAW//XAFMAXP/XAFMAXf/sAFMAv//XAFMBN//XAFMBPP/sAFMBPv/sAFMBQP/sAFMB+//XAFMB/f/XAFMCB//sAFMCC//sAFMDcP/XAFUABQBSAFUACgBSAFUARP/XAFUARv/XAFUAR//XAFUASP/XAFUASv/sAFUAUv/XAFUAVP/XAFUAov/XAFUAo//XAFUApP/XAFUApf/XAFUApv/XAFUAp//XAFUAqP/XAFUAqf/XAFUAqv/XAFUAq//XAFUArP/XAFUArf/XAFUAtP/XAFUAtf/XAFUAtv/XAFUAt//XAFUAuP/XAFUAuv/XAFUAw//XAFUAxf/XAFUAx//XAFUAyf/XAFUAy//XAFUAzf/XAFUAz//XAFUA0f/XAFUA0//XAFUA1f/XAFUA1//XAFUA2f/XAFUA2//XAFUA3f/XAFUA3//sAFUA4f/sAFUA4//sAFUA5f/sAFUBD//XAFUBEf/XAFUBE//XAFUBFf/XAFUBRP/XAFUBRv/XAFUBSP/XAFUCBwBSAFUCCwBSAFUCWf/XAFUCYP/XAFUDHv/XAFUDIP/XAFUDIv/XAFUDJv/XAFUDKP/XAFUDKv/XAFUDLP/XAFUDLv/XAFUDMP/XAFUDMv/XAFUDNP/XAFUDNv/XAFUDOP/XAFUDOv/XAFUDPP/XAFUDQP/XAFUDQv/XAFUDRP/XAFUDSv/XAFUDTP/XAFUDTv/XAFUDUv/XAFUDVP/XAFUDVv/XAFUDWP/XAFUDWv/XAFUDXP/XAFUDXv/XAFUDYP/XAFcABQApAFcACgApAFcCBwApAFcCCwApAFkABQBSAFkACgBSAFkAD/+uAFkAEf+uAFkAIgApAFkCBwBSAFkCCP+uAFkCCwBSAFkCDP+uAFoABQBSAFoACgBSAFoAD/+uAFoAEf+uAFoAIgApAFoCBwBSAFoCCP+uAFoCCwBSAFoCDP+uAFsARv/XAFsAR//XAFsASP/XAFsAUv/XAFsAVP/XAFsAov/XAFsAqf/XAFsAqv/XAFsAq//XAFsArP/XAFsArf/XAFsAtP/XAFsAtf/XAFsAtv/XAFsAt//XAFsAuP/XAFsAuv/XAFsAyf/XAFsAy//XAFsAzf/XAFsAz//XAFsA0f/XAFsA0//XAFsA1f/XAFsA1//XAFsA2f/XAFsA2//XAFsA3f/XAFsBD//XAFsBEf/XAFsBE//XAFsBFf/XAFsBSP/XAFsCYP/XAFsDNv/XAFsDOP/XAFsDOv/XAFsDPP/XAFsDQP/XAFsDQv/XAFsDRP/XAFsDSv/XAFsDTP/XAFsDTv/XAFsDUv/XAFsDVP/XAFsDVv/XAFsDWP/XAFsDWv/XAFsDXP/XAFsDXv/XAFsDYP/XAFwABQBSAFwACgBSAFwAD/+uAFwAEf+uAFwAIgApAFwCBwBSAFwCCP+uAFwCCwBSAFwCDP+uAF4ALQC4AIIABf9xAIIACv9xAIIAJv/XAIIAKv/XAIIALQEKAIIAMv/XAIIANP/XAIIAN/9xAIIAOf+uAIIAOv+uAIIAPP+FAIIAif/XAIIAlP/XAIIAlf/XAIIAlv/XAIIAl//XAIIAmP/XAIIAmv/XAIIAn/+FAIIAyP/XAIIAyv/XAIIAzP/XAIIAzv/XAIIA3v/XAIIA4P/XAIIA4v/XAIIA5P/XAIIBDv/XAIIBEP/XAIIBEv/XAIIBFP/XAIIBJP9xAIIBJv9xAIIBNv+uAIIBOP+FAIIBOv+FAIIBR//XAIIB+v+uAIIB/P+uAIIB/v+uAIICAP+FAIICB/9xAIICC/9xAIICX//XAIIDSf/XAIIDS//XAIIDTf/XAIIDT//XAIIDUf/XAIIDU//XAIIDVf/XAIIDV//XAIIDWf/XAIIDW//XAIIDXf/XAIIDX//XAIIDb/+FAIIDcf+FAIIDc/+FAIIDj/9xAIMABf9xAIMACv9xAIMAJv/XAIMAKv/XAIMALQEKAIMAMv/XAIMANP/XAIMAN/9xAIMAOf+uAIMAOv+uAIMAPP+FAIMAif/XAIMAlP/XAIMAlf/XAIMAlv/XAIMAl//XAIMAmP/XAIMAmv/XAIMAn/+FAIMAyP/XAIMAyv/XAIMAzP/XAIMAzv/XAIMA3v/XAIMA4P/XAIMA4v/XAIMA5P/XAIMBDv/XAIMBEP/XAIMBEv/XAIMBFP/XAIMBJP9xAIMBJv9xAIMBNv+uAIMBOP+FAIMBOv+FAIMBR//XAIMB+v+uAIMB/P+uAIMB/v+uAIMCAP+FAIMCB/9xAIMCC/9xAIMCX//XAIMDSf/XAIMDS//XAIMDTf/XAIMDT//XAIMDUf/XAIMDU//XAIMDVf/XAIMDV//XAIMDWf/XAIMDW//XAIMDXf/XAIMDX//XAIMDb/+FAIMDcf+FAIMDc/+FAIMDj/9xAIQABf9xAIQACv9xAIQAJv/XAIQAKv/XAIQALQEKAIQAMv/XAIQANP/XAIQAN/9xAIQAOf+uAIQAOv+uAIQAPP+FAIQAif/XAIQAlP/XAIQAlf/XAIQAlv/XAIQAl//XAIQAmP/XAIQAmv/XAIQAn/+FAIQAyP/XAIQAyv/XAIQAzP/XAIQAzv/XAIQA3v/XAIQA4P/XAIQA4v/XAIQA5P/XAIQBDv/XAIQBEP/XAIQBEv/XAIQBFP/XAIQBJP9xAIQBJv9xAIQBNv+uAIQBOP+FAIQBOv+FAIQBR//XAIQB+v+uAIQB/P+uAIQB/v+uAIQCAP+FAIQCB/9xAIQCC/9xAIQCX//XAIQDSf/XAIQDS//XAIQDTf/XAIQDT//XAIQDUf/XAIQDU//XAIQDVf/XAIQDV//XAIQDWf/XAIQDW//XAIQDXf/XAIQDX//XAIQDb/+FAIQDcf+FAIQDc/+FAIQDj/9xAIUABf9xAIUACv9xAIUAJv/XAIUAKv/XAIUALQEKAIUAMv/XAIUANP/XAIUAN/9xAIUAOf+uAIUAOv+uAIUAPP+FAIUAif/XAIUAlP/XAIUAlf/XAIUAlv/XAIUAl//XAIUAmP/XAIUAmv/XAIUAn/+FAIUAyP/XAIUAyv/XAIUAzP/XAIUAzv/XAIUA3v/XAIUA4P/XAIUA4v/XAIUA5P/XAIUBDv/XAIUBEP/XAIUBEv/XAIUBFP/XAIUBJP9xAIUBJv9xAIUBNv+uAIUBOP+FAIUBOv+FAIUBR//XAIUB+v+uAIUB/P+uAIUB/v+uAIUCAP+FAIUCB/9xAIUCC/9xAIUCX//XAIUDSf/XAIUDS//XAIUDTf/XAIUDT//XAIUDUf/XAIUDU//XAIUDVf/XAIUDV//XAIUDWf/XAIUDW//XAIUDXf/XAIUDX//XAIUDb/+FAIUDcf+FAIUDc/+FAIUDj/9xAIYABf9xAIYACv9xAIYAJv/XAIYAKv/XAIYALQEKAIYAMv/XAIYANP/XAIYAN/9xAIYAOf+uAIYAOv+uAIYAPP+FAIYAif/XAIYAlP/XAIYAlf/XAIYAlv/XAIYAl//XAIYAmP/XAIYAmv/XAIYAn/+FAIYAyP/XAIYAyv/XAIYAzP/XAIYAzv/XAIYA3v/XAIYA4P/XAIYA4v/XAIYA5P/XAIYBDv/XAIYBEP/XAIYBEv/XAIYBFP/XAIYBJP9xAIYBJv9xAIYBNv+uAIYBOP+FAIYBOv+FAIYBR//XAIYB+v+uAIYB/P+uAIYB/v+uAIYCAP+FAIYCB/9xAIYCC/9xAIYCX//XAIYDSf/XAIYDS//XAIYDTf/XAIYDT//XAIYDUf/XAIYDU//XAIYDVf/XAIYDV//XAIYDWf/XAIYDW//XAIYDXf/XAIYDX//XAIYDb/+FAIYDcf+FAIYDc/+FAIYDj/9xAIcABf9xAIcACv9xAIcAJv/XAIcAKv/XAIcALQEKAIcAMv/XAIcANP/XAIcAN/9xAIcAOf+uAIcAOv+uAIcAPP+FAIcAif/XAIcAlP/XAIcAlf/XAIcAlv/XAIcAl//XAIcAmP/XAIcAmv/XAIcAn/+FAIcAyP/XAIcAyv/XAIcAzP/XAIcAzv/XAIcA3v/XAIcA4P/XAIcA4v/XAIcA5P/XAIcBDv/XAIcBEP/XAIcBEv/XAIcBFP/XAIcBJP9xAIcBJv9xAIcBNv+uAIcBOP+FAIcBOv+FAIcBR//XAIcB+v+uAIcB/P+uAIcB/v+uAIcCAP+FAIcCB/9xAIcCC/9xAIcCX//XAIcDSf/XAIcDS//XAIcDTf/XAIcDT//XAIcDUf/XAIcDU//XAIcDVf/XAIcDV//XAIcDWf/XAIcDW//XAIcDXf/XAIcDX//XAIcDb/+FAIcDcf+FAIcDc/+FAIcDj/9xAIgALQB7AIkAJv/XAIkAKv/XAIkAMv/XAIkANP/XAIkAif/XAIkAlP/XAIkAlf/XAIkAlv/XAIkAl//XAIkAmP/XAIkAmv/XAIkAyP/XAIkAyv/XAIkAzP/XAIkAzv/XAIkA3v/XAIkA4P/XAIkA4v/XAIkA5P/XAIkBDv/XAIkBEP/XAIkBEv/XAIkBFP/XAIkBR//XAIkCX//XAIkDSf/XAIkDS//XAIkDTf/XAIkDT//XAIkDUf/XAIkDU//XAIkDVf/XAIkDV//XAIkDWf/XAIkDW//XAIkDXf/XAIkDX//XAIoALQB7AIsALQB7AIwALQB7AI0ALQB7AJIAD/+uAJIAEf+uAJIAJP/XAJIAN//DAJIAOf/sAJIAOv/sAJIAO//XAJIAPP/sAJIAPf/sAJIAgv/XAJIAg//XAJIAhP/XAJIAhf/XAJIAhv/XAJIAh//XAJIAn//sAJIAwv/XAJIAxP/XAJIAxv/XAJIBJP/DAJIBJv/DAJIBNv/sAJIBOP/sAJIBOv/sAJIBO//sAJIBPf/sAJIBP//sAJIBQ//XAJIBoP/sAJIB+v/sAJIB/P/sAJIB/v/sAJICAP/sAJICCP+uAJICDP+uAJICWP/XAJIDHf/XAJIDH//XAJIDIf/XAJIDI//XAJIDJf/XAJIDJ//XAJIDKf/XAJIDK//XAJIDLf/XAJIDL//XAJIDMf/XAJIDM//XAJIDb//sAJIDcf/sAJIDc//sAJIDj//DAJQAD/+uAJQAEf+uAJQAJP/XAJQAN//DAJQAOf/sAJQAOv/sAJQAO//XAJQAPP/sAJQAPf/sAJQAgv/XAJQAg//XAJQAhP/XAJQAhf/XAJQAhv/XAJQAh//XAJQAn//sAJQAwv/XAJQAxP/XAJQAxv/XAJQBJP/DAJQBJv/DAJQBNv/sAJQBOP/sAJQBOv/sAJQBO//sAJQBPf/sAJQBP//sAJQBQ//XAJQBoP/sAJQB+v/sAJQB/P/sAJQB/v/sAJQCAP/sAJQCCP+uAJQCDP+uAJQCWP/XAJQDHf/XAJQDH//XAJQDIf/XAJQDI//XAJQDJf/XAJQDJ//XAJQDKf/XAJQDK//XAJQDLf/XAJQDL//XAJQDMf/XAJQDM//XAJQDb//sAJQDcf/sAJQDc//sAJQDj//DAJUAD/+uAJUAEf+uAJUAJP/XAJUAN//DAJUAOf/sAJUAOv/sAJUAO//XAJUAPP/sAJUAPf/sAJUAgv/XAJUAg//XAJUAhP/XAJUAhf/XAJUAhv/XAJUAh//XAJUAn//sAJUAwv/XAJUAxP/XAJUAxv/XAJUBJP/DAJUBJv/DAJUBNv/sAJUBOP/sAJUBOv/sAJUBO//sAJUBPf/sAJUBP//sAJUBQ//XAJUBoP/sAJUB+v/sAJUB/P/sAJUB/v/sAJUCAP/sAJUCCP+uAJUCDP+uAJUCWP/XAJUDHf/XAJUDH//XAJUDIf/XAJUDI//XAJUDJf/XAJUDJ//XAJUDKf/XAJUDK//XAJUDLf/XAJUDL//XAJUDMf/XAJUDM//XAJUDb//sAJUDcf/sAJUDc//sAJUDj//DAJYAD/+uAJYAEf+uAJYAJP/XAJYAN//DAJYAOf/sAJYAOv/sAJYAO//XAJYAPP/sAJYAPf/sAJYAgv/XAJYAg//XAJYAhP/XAJYAhf/XAJYAhv/XAJYAh//XAJYAn//sAJYAwv/XAJYAxP/XAJYAxv/XAJYBJP/DAJYBJv/DAJYBNv/sAJYBOP/sAJYBOv/sAJYBO//sAJYBPf/sAJYBP//sAJYBQ//XAJYBoP/sAJYB+v/sAJYB/P/sAJYB/v/sAJYCAP/sAJYCCP+uAJYCDP+uAJYCWP/XAJYDHf/XAJYDH//XAJYDIf/XAJYDI//XAJYDJf/XAJYDJ//XAJYDKf/XAJYDK//XAJYDLf/XAJYDL//XAJYDMf/XAJYDM//XAJYDb//sAJYDcf/sAJYDc//sAJYDj//DAJcAD/+uAJcAEf+uAJcAJP/XAJcAN//DAJcAOf/sAJcAOv/sAJcAO//XAJcAPP/sAJcAPf/sAJcAgv/XAJcAg//XAJcAhP/XAJcAhf/XAJcAhv/XAJcAh//XAJcAn//sAJcAwv/XAJcAxP/XAJcAxv/XAJcBJP/DAJcBJv/DAJcBNv/sAJcBOP/sAJcBOv/sAJcBO//sAJcBPf/sAJcBP//sAJcBQ//XAJcBoP/sAJcB+v/sAJcB/P/sAJcB/v/sAJcCAP/sAJcCCP+uAJcCDP+uAJcCWP/XAJcDHf/XAJcDH//XAJcDIf/XAJcDI//XAJcDJf/XAJcDJ//XAJcDKf/XAJcDK//XAJcDLf/XAJcDL//XAJcDMf/XAJcDM//XAJcDb//sAJcDcf/sAJcDc//sAJcDj//DAJgAD/+uAJgAEf+uAJgAJP/XAJgAN//DAJgAOf/sAJgAOv/sAJgAO//XAJgAPP/sAJgAPf/sAJgAgv/XAJgAg//XAJgAhP/XAJgAhf/XAJgAhv/XAJgAh//XAJgAn//sAJgAwv/XAJgAxP/XAJgAxv/XAJgBJP/DAJgBJv/DAJgBNv/sAJgBOP/sAJgBOv/sAJgBO//sAJgBPf/sAJgBP//sAJgBQ//XAJgBoP/sAJgB+v/sAJgB/P/sAJgB/v/sAJgCAP/sAJgCCP+uAJgCDP+uAJgCWP/XAJgDHf/XAJgDH//XAJgDIf/XAJgDI//XAJgDJf/XAJgDJ//XAJgDKf/XAJgDK//XAJgDLf/XAJgDL//XAJgDMf/XAJgDM//XAJgDb//sAJgDcf/sAJgDc//sAJgDj//DAJoAD/+uAJoAEf+uAJoAJP/XAJoAN//DAJoAOf/sAJoAOv/sAJoAO//XAJoAPP/sAJoAPf/sAJoAgv/XAJoAg//XAJoAhP/XAJoAhf/XAJoAhv/XAJoAh//XAJoAn//sAJoAwv/XAJoAxP/XAJoAxv/XAJoBJP/DAJoBJv/DAJoBNv/sAJoBOP/sAJoBOv/sAJoBO//sAJoBPf/sAJoBP//sAJoBQ//XAJoBoP/sAJoB+v/sAJoB/P/sAJoB/v/sAJoCAP/sAJoCCP+uAJoCDP+uAJoCWP/XAJoDHf/XAJoDH//XAJoDIf/XAJoDI//XAJoDJf/XAJoDJ//XAJoDKf/XAJoDK//XAJoDLf/XAJoDL//XAJoDMf/XAJoDM//XAJoDb//sAJoDcf/sAJoDc//sAJoDj//DAJsAD//XAJsAEf/XAJsAJP/sAJsAgv/sAJsAg//sAJsAhP/sAJsAhf/sAJsAhv/sAJsAh//sAJsAwv/sAJsAxP/sAJsAxv/sAJsBQ//sAJsCCP/XAJsCDP/XAJsCWP/sAJsDHf/sAJsDH//sAJsDIf/sAJsDI//sAJsDJf/sAJsDJ//sAJsDKf/sAJsDK//sAJsDLf/sAJsDL//sAJsDMf/sAJsDM//sAJwAD//XAJwAEf/XAJwAJP/sAJwAgv/sAJwAg//sAJwAhP/sAJwAhf/sAJwAhv/sAJwAh//sAJwAwv/sAJwAxP/sAJwAxv/sAJwBQ//sAJwCCP/XAJwCDP/XAJwCWP/sAJwDHf/sAJwDH//sAJwDIf/sAJwDI//sAJwDJf/sAJwDJ//sAJwDKf/sAJwDK//sAJwDLf/sAJwDL//sAJwDMf/sAJwDM//sAJ0AD//XAJ0AEf/XAJ0AJP/sAJ0Agv/sAJ0Ag//sAJ0AhP/sAJ0Ahf/sAJ0Ahv/sAJ0Ah//sAJ0Awv/sAJ0AxP/sAJ0Axv/sAJ0BQ//sAJ0CCP/XAJ0CDP/XAJ0CWP/sAJ0DHf/sAJ0DH//sAJ0DIf/sAJ0DI//sAJ0DJf/sAJ0DJ//sAJ0DKf/sAJ0DK//sAJ0DLf/sAJ0DL//sAJ0DMf/sAJ0DM//sAJ4AD//XAJ4AEf/XAJ4AJP/sAJ4Agv/sAJ4Ag//sAJ4AhP/sAJ4Ahf/sAJ4Ahv/sAJ4Ah//sAJ4Awv/sAJ4AxP/sAJ4Axv/sAJ4BQ//sAJ4CCP/XAJ4CDP/XAJ4CWP/sAJ4DHf/sAJ4DH//sAJ4DIf/sAJ4DI//sAJ4DJf/sAJ4DJ//sAJ4DKf/sAJ4DK//sAJ4DLf/sAJ4DL//sAJ4DMf/sAJ4DM//sAJ8AD/+FAJ8AEf+FAJ8AIgApAJ8AJP+FAJ8AJv/XAJ8AKv/XAJ8AMv/XAJ8ANP/XAJ8ARP+aAJ8ARv+aAJ8AR/+aAJ8ASP+aAJ8ASv/XAJ8AUP/DAJ8AUf/DAJ8AUv+aAJ8AU//DAJ8AVP+aAJ8AVf/DAJ8AVv+uAJ8AWP/DAJ8AXf/XAJ8Agv+FAJ8Ag/+FAJ8AhP+FAJ8Ahf+FAJ8Ahv+FAJ8Ah/+FAJ8Aif/XAJ8AlP/XAJ8Alf/XAJ8Alv/XAJ8Al//XAJ8AmP/XAJ8Amv/XAJ8Aov+aAJ8Ao/+aAJ8ApP+aAJ8Apf+aAJ8Apv+aAJ8Ap/+aAJ8AqP+aAJ8Aqf+aAJ8Aqv+aAJ8Aq/+aAJ8ArP+aAJ8Arf+aAJ8AtP+aAJ8Atf+aAJ8Atv+aAJ8At/+aAJ8AuP+aAJ8Auv+aAJ8Au//DAJ8AvP/DAJ8Avf/DAJ8Avv/DAJ8Awv+FAJ8Aw/+aAJ8AxP+FAJ8Axf+aAJ8Axv+FAJ8Ax/+aAJ8AyP/XAJ8Ayf+aAJ8Ayv/XAJ8Ay/+aAJ8AzP/XAJ8Azf+aAJ8Azv/XAJ8Az/+aAJ8A0f+aAJ8A0/+aAJ8A1f+aAJ8A1/+aAJ8A2f+aAJ8A2/+aAJ8A3f+aAJ8A3v/XAJ8A3//XAJ8A4P/XAJ8A4f/XAJ8A4v/XAJ8A4//XAJ8A5P/XAJ8A5f/XAJ8A+v/DAJ8BBv/DAJ8BCP/DAJ8BDf/DAJ8BDv/XAJ8BD/+aAJ8BEP/XAJ8BEf+aAJ8BEv/XAJ8BE/+aAJ8BFP/XAJ8BFf+aAJ8BF//DAJ8BGf/DAJ8BHf+uAJ8BIf+uAJ8BK//DAJ8BLf/DAJ8BL//DAJ8BMf/DAJ8BM//DAJ8BNf/DAJ8BPP/XAJ8BPv/XAJ8BQP/XAJ8BQ/+FAJ8BRP+aAJ8BRv+aAJ8BR//XAJ8BSP+aAJ8BSv+uAJ8CCP+FAJ8CDP+FAJ8CV//DAJ8CWP+FAJ8CWf+aAJ8CX//XAJ8CYP+aAJ8CYv/DAJ8DHf+FAJ8DHv+aAJ8DH/+FAJ8DIP+aAJ8DIf+FAJ8DIv+aAJ8DI/+FAJ8DJf+FAJ8DJv+aAJ8DJ/+FAJ8DKP+aAJ8DKf+FAJ8DKv+aAJ8DK/+FAJ8DLP+aAJ8DLf+FAJ8DLv+aAJ8DL/+FAJ8DMP+aAJ8DMf+FAJ8DMv+aAJ8DM/+FAJ8DNP+aAJ8DNv+aAJ8DOP+aAJ8DOv+aAJ8DPP+aAJ8DQP+aAJ8DQv+aAJ8DRP+aAJ8DSf/XAJ8DSv+aAJ8DS//XAJ8DTP+aAJ8DTf/XAJ8DTv+aAJ8DT//XAJ8DUf/XAJ8DUv+aAJ8DU//XAJ8DVP+aAJ8DVf/XAJ8DVv+aAJ8DV//XAJ8DWP+aAJ8DWf/XAJ8DWv+aAJ8DW//XAJ8DXP+aAJ8DXf/XAJ8DXv+aAJ8DX//XAJ8DYP+aAJ8DYv/DAJ8DZP/DAJ8DZv/DAJ8DaP/DAJ8Dav/DAJ8DbP/DAJ8Dbv/DAKAAD/72AKAAEf72AKAAJP+aAKAAO//XAKAAPf/sAKAAgv+aAKAAg/+aAKAAhP+aAKAAhf+aAKAAhv+aAKAAh/+aAKAAwv+aAKAAxP+aAKAAxv+aAKABO//sAKABPf/sAKABP//sAKABQ/+aAKACCP72AKACDP72AKACWP+aAKADHf+aAKADH/+aAKADIf+aAKADI/+aAKADJf+aAKADJ/+aAKADKf+aAKADK/+aAKADLf+aAKADL/+aAKADMf+aAKADM/+aAKIABf/sAKIACv/sAKICB//sAKICC//sAKMABf/sAKMACv/sAKMCB//sAKMCC//sAKQABf/sAKQACv/sAKQCB//sAKQCC//sAKUABf/sAKUACv/sAKUCB//sAKUCC//sAKYABf/sAKYACv/sAKYCB//sAKYCC//sAKcABf/sAKcACv/sAKcCB//sAKcCC//sAKoABf/sAKoACv/sAKoAWf/XAKoAWv/XAKoAW//XAKoAXP/XAKoAXf/sAKoAv//XAKoBN//XAKoBPP/sAKoBPv/sAKoBQP/sAKoB+//XAKoB/f/XAKoCB//sAKoCC//sAKoDcP/XAKsABf/sAKsACv/sAKsAWf/XAKsAWv/XAKsAW//XAKsAXP/XAKsAXf/sAKsAv//XAKsBN//XAKsBPP/sAKsBPv/sAKsBQP/sAKsB+//XAKsB/f/XAKsCB//sAKsCC//sAKsDcP/XAKwABf/sAKwACv/sAKwAWf/XAKwAWv/XAKwAW//XAKwAXP/XAKwAXf/sAKwAv//XAKwBN//XAKwBPP/sAKwBPv/sAKwBQP/sAKwB+//XAKwB/f/XAKwCB//sAKwCC//sAKwDcP/XAK0ABf/sAK0ACv/sAK0AWf/XAK0AWv/XAK0AW//XAK0AXP/XAK0AXf/sAK0Av//XAK0BN//XAK0BPP/sAK0BPv/sAK0BQP/sAK0B+//XAK0B/f/XAK0CB//sAK0CC//sAK0DcP/XALIABf/sALIACv/sALIAWf/XALIAWv/XALIAW//XALIAXP/XALIAXf/sALIAv//XALIBN//XALIBPP/sALIBPv/sALIBQP/sALIB+//XALIB/f/XALICB//sALICC//sALIDcP/XALQABf/sALQACv/sALQAWf/XALQAWv/XALQAW//XALQAXP/XALQAXf/sALQAv//XALQBN//XALQBPP/sALQBPv/sALQBQP/sALQB+//XALQB/f/XALQCB//sALQCC//sALQDcP/XALUABf/sALUACv/sALUAWf/XALUAWv/XALUAW//XALUAXP/XALUAXf/sALUAv//XALUBN//XALUBPP/sALUBPv/sALUBQP/sALUB+//XALUB/f/XALUCB//sALUCC//sALUDcP/XALYABf/sALYACv/sALYAWf/XALYAWv/XALYAW//XALYAXP/XALYAXf/sALYAv//XALYBN//XALYBPP/sALYBPv/sALYBQP/sALYB+//XALYB/f/XALYCB//sALYCC//sALYDcP/XALgABf/XALgACv/XALgCB//XALgCC//XALoABf/sALoACv/sALoAWf/XALoAWv/XALoAW//XALoAXP/XALoAXf/sALoAv//XALoBN//XALoBPP/sALoBPv/sALoBQP/sALoB+//XALoB/f/XALoCB//sALoCC//sALoDcP/XAL8ABQBSAL8ACgBSAL8AD/+uAL8AEf+uAL8AIgApAL8CBwBSAL8CCP+uAL8CCwBSAL8CDP+uAMAABf/sAMAACv/sAMAAWf/XAMAAWv/XAMAAW//XAMAAXP/XAMAAXf/sAMAAv//XAMABN//XAMABPP/sAMABPv/sAMABQP/sAMAB+//XAMAB/f/XAMACB//sAMACC//sAMADcP/XAMEABQBSAMEACgBSAMEAD/+uAMEAEf+uAMEAIgApAMECBwBSAMECCP+uAMECCwBSAMECDP+uAMIABf9xAMIACv9xAMIAJv/XAMIAKv/XAMIALQEKAMIAMv/XAMIANP/XAMIAN/9xAMIAOf+uAMIAOv+uAMIAPP+FAMIAif/XAMIAlP/XAMIAlf/XAMIAlv/XAMIAl//XAMIAmP/XAMIAmv/XAMIAn/+FAMIAyP/XAMIAyv/XAMIAzP/XAMIAzv/XAMIA3v/XAMIA4P/XAMIA4v/XAMIA5P/XAMIBDv/XAMIBEP/XAMIBEv/XAMIBFP/XAMIBJP9xAMIBJv9xAMIBNv+uAMIBOP+FAMIBOv+FAMIBR//XAMIB+v+uAMIB/P+uAMIB/v+uAMICAP+FAMICB/9xAMICC/9xAMICX//XAMIDSf/XAMIDS//XAMIDTf/XAMIDT//XAMIDUf/XAMIDU//XAMIDVf/XAMIDV//XAMIDWf/XAMIDW//XAMIDXf/XAMIDX//XAMIDb/+FAMIDcf+FAMIDc/+FAMIDj/9xAMMABf/sAMMACv/sAMMCB//sAMMCC//sAMQABf9xAMQACv9xAMQAJv/XAMQAKv/XAMQALQEKAMQAMv/XAMQANP/XAMQAN/9xAMQAOf+uAMQAOv+uAMQAPP+FAMQAif/XAMQAlP/XAMQAlf/XAMQAlv/XAMQAl//XAMQAmP/XAMQAmv/XAMQAn/+FAMQAyP/XAMQAyv/XAMQAzP/XAMQAzv/XAMQA3v/XAMQA4P/XAMQA4v/XAMQA5P/XAMQBDv/XAMQBEP/XAMQBEv/XAMQBFP/XAMQBJP9xAMQBJv9xAMQBNv+uAMQBOP+FAMQBOv+FAMQBR//XAMQB+v+uAMQB/P+uAMQB/v+uAMQCAP+FAMQCB/9xAMQCC/9xAMQCX//XAMQDSf/XAMQDS//XAMQDTf/XAMQDT//XAMQDUf/XAMQDU//XAMQDVf/XAMQDV//XAMQDWf/XAMQDW//XAMQDXf/XAMQDX//XAMQDb/+FAMQDcf+FAMQDc/+FAMQDj/9xAMUABf/sAMUACv/sAMUCB//sAMUCC//sAMYABf9xAMYACv9xAMYAJv/XAMYAKv/XAMYALQEKAMYAMv/XAMYANP/XAMYAN/9xAMYAOf+uAMYAOv+uAMYAPP+FAMYAif/XAMYAlP/XAMYAlf/XAMYAlv/XAMYAl//XAMYAmP/XAMYAmv/XAMYAn/+FAMYAyP/XAMYAyv/XAMYAzP/XAMYAzv/XAMYA3v/XAMYA4P/XAMYA4v/XAMYA5P/XAMYBDv/XAMYBEP/XAMYBEv/XAMYBFP/XAMYBJP9xAMYBJv9xAMYBNv+uAMYBOP+FAMYBOv+FAMYBR//XAMYB+v+uAMYB/P+uAMYB/v+uAMYCAP+FAMYCB/9xAMYCC/9xAMYCX//XAMYDSf/XAMYDS//XAMYDTf/XAMYDT//XAMYDUf/XAMYDU//XAMYDVf/XAMYDV//XAMYDWf/XAMYDW//XAMYDXf/XAMYDX//XAMYDb/+FAMYDcf+FAMYDc/+FAMYDj/9xAMcABf/sAMcACv/sAMcCB//sAMcCC//sAMgAJv/XAMgAKv/XAMgAMv/XAMgANP/XAMgAif/XAMgAlP/XAMgAlf/XAMgAlv/XAMgAl//XAMgAmP/XAMgAmv/XAMgAyP/XAMgAyv/XAMgAzP/XAMgAzv/XAMgA3v/XAMgA4P/XAMgA4v/XAMgA5P/XAMgBDv/XAMgBEP/XAMgBEv/XAMgBFP/XAMgBR//XAMgCX//XAMgDSf/XAMgDS//XAMgDTf/XAMgDT//XAMgDUf/XAMgDU//XAMgDVf/XAMgDV//XAMgDWf/XAMgDW//XAMgDXf/XAMgDX//XAMoAJv/XAMoAKv/XAMoAMv/XAMoANP/XAMoAif/XAMoAlP/XAMoAlf/XAMoAlv/XAMoAl//XAMoAmP/XAMoAmv/XAMoAyP/XAMoAyv/XAMoAzP/XAMoAzv/XAMoA3v/XAMoA4P/XAMoA4v/XAMoA5P/XAMoBDv/XAMoBEP/XAMoBEv/XAMoBFP/XAMoBR//XAMoCX//XAMoDSf/XAMoDS//XAMoDTf/XAMoDT//XAMoDUf/XAMoDU//XAMoDVf/XAMoDV//XAMoDWf/XAMoDW//XAMoDXf/XAMoDX//XAMwAJv/XAMwAKv/XAMwAMv/XAMwANP/XAMwAif/XAMwAlP/XAMwAlf/XAMwAlv/XAMwAl//XAMwAmP/XAMwAmv/XAMwAyP/XAMwAyv/XAMwAzP/XAMwAzv/XAMwA3v/XAMwA4P/XAMwA4v/XAMwA5P/XAMwBDv/XAMwBEP/XAMwBEv/XAMwBFP/XAMwBR//XAMwCX//XAMwDSf/XAMwDS//XAMwDTf/XAMwDT//XAMwDUf/XAMwDU//XAMwDVf/XAMwDV//XAMwDWf/XAMwDW//XAMwDXf/XAMwDX//XAM4AJv/XAM4AKv/XAM4AMv/XAM4ANP/XAM4Aif/XAM4AlP/XAM4Alf/XAM4Alv/XAM4Al//XAM4AmP/XAM4Amv/XAM4AyP/XAM4Ayv/XAM4AzP/XAM4Azv/XAM4A3v/XAM4A4P/XAM4A4v/XAM4A5P/XAM4BDv/XAM4BEP/XAM4BEv/XAM4BFP/XAM4BR//XAM4CX//XAM4DSf/XAM4DS//XAM4DTf/XAM4DT//XAM4DUf/XAM4DU//XAM4DVf/XAM4DV//XAM4DWf/XAM4DW//XAM4DXf/XAM4DX//XANAAD/+uANAAEf+uANAAJP/XANAAN//DANAAOf/sANAAOv/sANAAO//XANAAPP/sANAAPf/sANAAgv/XANAAg//XANAAhP/XANAAhf/XANAAhv/XANAAh//XANAAn//sANAAwv/XANAAxP/XANAAxv/XANABJP/DANABJv/DANABNv/sANABOP/sANABOv/sANABO//sANABPf/sANABP//sANABQ//XANABoP/sANAB+v/sANAB/P/sANAB/v/sANACAP/sANACCP+uANACDP+uANACWP/XANADHf/XANADH//XANADIf/XANADI//XANADJf/XANADJ//XANADKf/XANADK//XANADLf/XANADL//XANADMf/XANADM//XANADb//sANADcf/sANADc//sANADj//DANEABQBSANEACgBSANEADACPANEAIgCkANEAQACPANEARQA9ANEASwA9ANEATgA9ANEATwA9ANEAYACPANEA5wA9ANEA6QB7ANECBwBSANECCwBSANIAD/+uANIAEf+uANIAJP/XANIAN//DANIAOf/sANIAOv/sANIAO//XANIAPP/sANIAPf/sANIAgv/XANIAg//XANIAhP/XANIAhf/XANIAhv/XANIAh//XANIAn//sANIAwv/XANIAxP/XANIAxv/XANIBJP/DANIBJv/DANIBNv/sANIBOP/sANIBOv/sANIBO//sANIBPf/sANIBP//sANIBQ//XANIBoP/sANIB+v/sANIB/P/sANIB/v/sANICAP/sANICCP+uANICDP+uANICWP/XANIDHf/XANIDH//XANIDIf/XANIDI//XANIDJf/XANIDJ//XANIDKf/XANIDK//XANIDLf/XANIDL//XANIDMf/XANIDM//XANIDb//sANIDcf/sANIDc//sANIDj//DANQALQB7ANUABf/sANUACv/sANUAWf/XANUAWv/XANUAW//XANUAXP/XANUAXf/sANUAv//XANUBN//XANUBPP/sANUBPv/sANUBQP/sANUB+//XANUB/f/XANUCB//sANUCC//sANUDcP/XANYALQB7ANcABf/sANcACv/sANcAWf/XANcAWv/XANcAW//XANcAXP/XANcAXf/sANcAv//XANcBN//XANcBPP/sANcBPv/sANcBQP/sANcB+//XANcB/f/XANcCB//sANcCC//sANcDcP/XANgALQB7ANkABf/sANkACv/sANkAWf/XANkAWv/XANkAW//XANkAXP/XANkAXf/sANkAv//XANkBN//XANkBPP/sANkBPv/sANkBQP/sANkB+//XANkB/f/XANkCB//sANkCC//sANkDcP/XANoALQB7ANsABf/sANsACv/sANsAWf/XANsAWv/XANsAW//XANsAXP/XANsAXf/sANsAv//XANsBN//XANsBPP/sANsBPv/sANsBQP/sANsB+//XANsB/f/XANsCB//sANsCC//sANsDcP/XANwALQB7AN0ABf/sAN0ACv/sAN0AWf/XAN0AWv/XAN0AW//XAN0AXP/XAN0AXf/sAN0Av//XAN0BN//XAN0BPP/sAN0BPv/sAN0BQP/sAN0B+//XAN0B/f/XAN0CB//sAN0CC//sAN0DcP/XAOcABf/sAOcACv/sAOcCB//sAOcCC//sAPgAJv/XAPgAKv/XAPgAMv/XAPgANP/XAPgAif/XAPgAlP/XAPgAlf/XAPgAlv/XAPgAl//XAPgAmP/XAPgAmv/XAPgAyP/XAPgAyv/XAPgAzP/XAPgAzv/XAPgA3v/XAPgA4P/XAPgA4v/XAPgA5P/XAPgBDv/XAPgBEP/XAPgBEv/XAPgBFP/XAPgBR//XAPgCX//XAPgDSf/XAPgDS//XAPgDTf/XAPgDT//XAPgDUf/XAPgDU//XAPgDVf/XAPgDV//XAPgDWf/XAPgDW//XAPgDXf/XAPgDX//XAPkARv/XAPkAR//XAPkASP/XAPkAUv/XAPkAVP/XAPkAov/XAPkAqf/XAPkAqv/XAPkAq//XAPkArP/XAPkArf/XAPkAtP/XAPkAtf/XAPkAtv/XAPkAt//XAPkAuP/XAPkAuv/XAPkAyf/XAPkAy//XAPkAzf/XAPkAz//XAPkA0f/XAPkA0//XAPkA1f/XAPkA1//XAPkA2f/XAPkA2//XAPkA3f/XAPkBD//XAPkBEf/XAPkBE//XAPkBFf/XAPkBSP/XAPkCYP/XAPkDNv/XAPkDOP/XAPkDOv/XAPkDPP/XAPkDQP/XAPkDQv/XAPkDRP/XAPkDSv/XAPkDTP/XAPkDTv/XAPkDUv/XAPkDVP/XAPkDVv/XAPkDWP/XAPkDWv/XAPkDXP/XAPkDXv/XAPkDYP/XAPoARv/XAPoAR//XAPoASP/XAPoAUv/XAPoAVP/XAPoAov/XAPoAqf/XAPoAqv/XAPoAq//XAPoArP/XAPoArf/XAPoAtP/XAPoAtf/XAPoAtv/XAPoAt//XAPoAuP/XAPoAuv/XAPoAyf/XAPoAy//XAPoAzf/XAPoAz//XAPoA0f/XAPoA0//XAPoA1f/XAPoA1//XAPoA2f/XAPoA2//XAPoA3f/XAPoBD//XAPoBEf/XAPoBE//XAPoBFf/XAPoBSP/XAPoCYP/XAPoDNv/XAPoDOP/XAPoDOv/XAPoDPP/XAPoDQP/XAPoDQv/XAPoDRP/XAPoDSv/XAPoDTP/XAPoDTv/XAPoDUv/XAPoDVP/XAPoDVv/XAPoDWP/XAPoDWv/XAPoDXP/XAPoDXv/XAPoDYP/XAPsABf9cAPsACv9cAPsAJv/XAPsAKv/XAPsAMv/XAPsANP/XAPsAN//XAPsAOP/sAPsAOf/XAPsAOv/XAPsAPP/DAPsAif/XAPsAlP/XAPsAlf/XAPsAlv/XAPsAl//XAPsAmP/XAPsAmv/XAPsAm//sAPsAnP/sAPsAnf/sAPsAnv/sAPsAn//DAPsAyP/XAPsAyv/XAPsAzP/XAPsAzv/XAPsA3v/XAPsA4P/XAPsA4v/XAPsA5P/XAPsBDv/XAPsBEP/XAPsBEv/XAPsBFP/XAPsBJP/XAPsBJv/XAPsBKv/sAPsBLP/sAPsBLv/sAPsBMP/sAPsBMv/sAPsBNP/sAPsBNv/XAPsBOP/DAPsBOv/DAPsBR//XAPsB+v/XAPsB/P/XAPsB/v/XAPsCAP/DAPsCB/9cAPsCC/9cAPsCX//XAPsCYf/sAPsDSf/XAPsDS//XAPsDTf/XAPsDT//XAPsDUf/XAPsDU//XAPsDVf/XAPsDV//XAPsDWf/XAPsDW//XAPsDXf/XAPsDX//XAPsDYf/sAPsDY//sAPsDZf/sAPsDZ//sAPsDaf/sAPsDa//sAPsDbf/sAPsDb//DAPsDcf/DAPsDc//DAPsDj//XAP0ABf9cAP0ACv9cAP0AJv/XAP0AKv/XAP0AMv/XAP0ANP/XAP0AN//XAP0AOP/sAP0AOf/XAP0AOv/XAP0APP/DAP0Aif/XAP0AlP/XAP0Alf/XAP0Alv/XAP0Al//XAP0AmP/XAP0Amv/XAP0Am//sAP0AnP/sAP0Anf/sAP0Anv/sAP0An//DAP0AyP/XAP0Ayv/XAP0AzP/XAP0Azv/XAP0A3v/XAP0A4P/XAP0A4v/XAP0A5P/XAP0BDv/XAP0BEP/XAP0BEv/XAP0BFP/XAP0BJP/XAP0BJv/XAP0BKv/sAP0BLP/sAP0BLv/sAP0BMP/sAP0BMv/sAP0BNP/sAP0BNv/XAP0BOP/DAP0BOv/DAP0BR//XAP0B+v/XAP0B/P/XAP0B/v/XAP0CAP/DAP0CB/9cAP0CC/9cAP0CX//XAP0CYf/sAP0DSf/XAP0DS//XAP0DTf/XAP0DT//XAP0DUf/XAP0DU//XAP0DVf/XAP0DV//XAP0DWf/XAP0DW//XAP0DXf/XAP0DX//XAP0DYf/sAP0DY//sAP0DZf/sAP0DZ//sAP0Daf/sAP0Da//sAP0Dbf/sAP0Db//DAP0Dcf/DAP0Dc//DAP0Dj//XAP8ABf9cAP8ACv9cAP8AJv/XAP8AKv/XAP8AMv/XAP8ANP/XAP8AN//XAP8AOP/sAP8AOf/XAP8AOv/XAP8APP/DAP8Aif/XAP8AlP/XAP8Alf/XAP8Alv/XAP8Al//XAP8AmP/XAP8Amv/XAP8Am//sAP8AnP/sAP8Anf/sAP8Anv/sAP8An//DAP8AyP/XAP8Ayv/XAP8AzP/XAP8Azv/XAP8A3v/XAP8A4P/XAP8A4v/XAP8A5P/XAP8BDv/XAP8BEP/XAP8BEv/XAP8BFP/XAP8BJP/XAP8BJv/XAP8BKv/sAP8BLP/sAP8BLv/sAP8BMP/sAP8BMv/sAP8BNP/sAP8BNv/XAP8BOP/DAP8BOv/DAP8BR//XAP8B+v/XAP8B/P/XAP8B/v/XAP8CAP/DAP8CB/9cAP8CC/9cAP8CX//XAP8CYf/sAP8DSf/XAP8DS//XAP8DTf/XAP8DT//XAP8DUf/XAP8DU//XAP8DVf/XAP8DV//XAP8DWf/XAP8DW//XAP8DXf/XAP8DX//XAP8DYf/sAP8DY//sAP8DZf/sAP8DZ//sAP8Daf/sAP8Da//sAP8Dbf/sAP8Db//DAP8Dcf/DAP8Dc//DAP8Dj//XAQAABQBSAQAACgBSAQAADACPAQAAIgCPAQAAQACPAQAARQA9AQAASwA9AQAATgA9AQAATwA9AQAAYACPAQAA5wA9AQAA6QCPAQACBwBSAQACCwBSAQEABf9cAQEACv9cAQEAJv/XAQEAKv/XAQEAMv/XAQEANP/XAQEAN//XAQEAOP/sAQEAOf/XAQEAOv/XAQEAPP/DAQEAif/XAQEAlP/XAQEAlf/XAQEAlv/XAQEAl//XAQEAmP/XAQEAmv/XAQEAm//sAQEAnP/sAQEAnf/sAQEAnv/sAQEAn//DAQEAyP/XAQEAyv/XAQEAzP/XAQEAzv/XAQEA3v/XAQEA4P/XAQEA4v/XAQEA5P/XAQEBDv/XAQEBEP/XAQEBEv/XAQEBFP/XAQEBJP/XAQEBJv/XAQEBKv/sAQEBLP/sAQEBLv/sAQEBMP/sAQEBMv/sAQEBNP/sAQEBNv/XAQEBOP/DAQEBOv/DAQEBR//XAQEB+v/XAQEB/P/XAQEB/v/XAQECAP/DAQECB/9cAQECC/9cAQECX//XAQECYf/sAQEDSf/XAQEDS//XAQEDTf/XAQEDT//XAQEDUf/XAQEDU//XAQEDVf/XAQEDV//XAQEDWf/XAQEDW//XAQEDXf/XAQEDX//XAQEDYf/sAQEDY//sAQEDZf/sAQEDZ//sAQEDaf/sAQEDa//sAQEDbf/sAQEDb//DAQEDcf/DAQEDc//DAQEDj//XAQMABf9cAQMACv9cAQMAJv/XAQMAKv/XAQMAMv/XAQMANP/XAQMAN//XAQMAOP/sAQMAOf/XAQMAOv/XAQMAPP/DAQMAif/XAQMAlP/XAQMAlf/XAQMAlv/XAQMAl//XAQMAmP/XAQMAmv/XAQMAm//sAQMAnP/sAQMAnf/sAQMAnv/sAQMAn//DAQMAyP/XAQMAyv/XAQMAzP/XAQMAzv/XAQMA3v/XAQMA4P/XAQMA4v/XAQMA5P/XAQMBDv/XAQMBEP/XAQMBEv/XAQMBFP/XAQMBJP/XAQMBJv/XAQMBKv/sAQMBLP/sAQMBLv/sAQMBMP/sAQMBMv/sAQMBNP/sAQMBNv/XAQMBOP/DAQMBOv/DAQMBR//XAQMB+v/XAQMB/P/XAQMB/v/XAQMCAP/DAQMCB/9cAQMCC/9cAQMCX//XAQMCYf/sAQMDSf/XAQMDS//XAQMDTf/XAQMDT//XAQMDUf/XAQMDU//XAQMDVf/XAQMDV//XAQMDWf/XAQMDW//XAQMDXf/XAQMDX//XAQMDYf/sAQMDY//sAQMDZf/sAQMDZ//sAQMDaf/sAQMDa//sAQMDbf/sAQMDb//DAQMDcf/DAQMDc//DAQMDj//XAQgABf/sAQgACv/sAQgCB//sAQgCC//sAQ4AD/+uAQ4AEf+uAQ4AJP/XAQ4AN//DAQ4AOf/sAQ4AOv/sAQ4AO//XAQ4APP/sAQ4APf/sAQ4Agv/XAQ4Ag//XAQ4AhP/XAQ4Ahf/XAQ4Ahv/XAQ4Ah//XAQ4An//sAQ4Awv/XAQ4AxP/XAQ4Axv/XAQ4BJP/DAQ4BJv/DAQ4BNv/sAQ4BOP/sAQ4BOv/sAQ4BO//sAQ4BPf/sAQ4BP//sAQ4BQ//XAQ4BoP/sAQ4B+v/sAQ4B/P/sAQ4B/v/sAQ4CAP/sAQ4CCP+uAQ4CDP+uAQ4CWP/XAQ4DHf/XAQ4DH//XAQ4DIf/XAQ4DI//XAQ4DJf/XAQ4DJ//XAQ4DKf/XAQ4DK//XAQ4DLf/XAQ4DL//XAQ4DMf/XAQ4DM//XAQ4Db//sAQ4Dcf/sAQ4Dc//sAQ4Dj//DARAAD/+uARAAEf+uARAAJP/XARAAN//DARAAOf/sARAAOv/sARAAO//XARAAPP/sARAAPf/sARAAgv/XARAAg//XARAAhP/XARAAhf/XARAAhv/XARAAh//XARAAn//sARAAwv/XARAAxP/XARAAxv/XARABJP/DARABJv/DARABNv/sARABOP/sARABOv/sARABO//sARABPf/sARABP//sARABQ//XARABoP/sARAB+v/sARAB/P/sARAB/v/sARACAP/sARACCP+uARACDP+uARACWP/XARADHf/XARADH//XARADIf/XARADI//XARADJf/XARADJ//XARADKf/XARADK//XARADLf/XARADL//XARADMf/XARADM//XARADb//sARADcf/sARADc//sARADj//DARIAD/+uARIAEf+uARIAJP/XARIAN//DARIAOf/sARIAOv/sARIAO//XARIAPP/sARIAPf/sARIAgv/XARIAg//XARIAhP/XARIAhf/XARIAhv/XARIAh//XARIAn//sARIAwv/XARIAxP/XARIAxv/XARIBJP/DARIBJv/DARIBNv/sARIBOP/sARIBOv/sARIBO//sARIBPf/sARIBP//sARIBQ//XARIBoP/sARIB+v/sARIB/P/sARIB/v/sARICAP/sARICCP+uARICDP+uARICWP/XARIDHf/XARIDH//XARIDIf/XARIDI//XARIDJf/XARIDJ//XARIDKf/XARIDK//XARIDLf/XARIDL//XARIDMf/XARIDM//XARIDb//sARIDcf/sARIDc//sARIDj//DARQALQB7ARcABQBSARcACgBSARcARP/XARcARv/XARcAR//XARcASP/XARcASv/sARcAUv/XARcAVP/XARcAov/XARcAo//XARcApP/XARcApf/XARcApv/XARcAp//XARcAqP/XARcAqf/XARcAqv/XARcAq//XARcArP/XARcArf/XARcAtP/XARcAtf/XARcAtv/XARcAt//XARcAuP/XARcAuv/XARcAw//XARcAxf/XARcAx//XARcAyf/XARcAy//XARcAzf/XARcAz//XARcA0f/XARcA0//XARcA1f/XARcA1//XARcA2f/XARcA2//XARcA3f/XARcA3//sARcA4f/sARcA4//sARcA5f/sARcBD//XARcBEf/XARcBE//XARcBFf/XARcBRP/XARcBRv/XARcBSP/XARcCBwBSARcCCwBSARcCWf/XARcCYP/XARcDHv/XARcDIP/XARcDIv/XARcDJv/XARcDKP/XARcDKv/XARcDLP/XARcDLv/XARcDMP/XARcDMv/XARcDNP/XARcDNv/XARcDOP/XARcDOv/XARcDPP/XARcDQP/XARcDQv/XARcDRP/XARcDSv/XARcDTP/XARcDTv/XARcDUv/XARcDVP/XARcDVv/XARcDWP/XARcDWv/XARcDXP/XARcDXv/XARcDYP/XARkABQBSARkACgBSARkARP/XARkARv/XARkAR//XARkASP/XARkASv/sARkAUv/XARkAVP/XARkAov/XARkAo//XARkApP/XARkApf/XARkApv/XARkAp//XARkAqP/XARkAqf/XARkAqv/XARkAq//XARkArP/XARkArf/XARkAtP/XARkAtf/XARkAtv/XARkAt//XARkAuP/XARkAuv/XARkAw//XARkAxf/XARkAx//XARkAyf/XARkAy//XARkAzf/XARkAz//XARkA0f/XARkA0//XARkA1f/XARkA1//XARkA2f/XARkA2//XARkA3f/XARkA3//sARkA4f/sARkA4//sARkA5f/sARkBD//XARkBEf/XARkBE//XARkBFf/XARkBRP/XARkBRv/XARkBSP/XARkCBwBSARkCCwBSARkCWf/XARkCYP/XARkDHv/XARkDIP/XARkDIv/XARkDJv/XARkDKP/XARkDKv/XARkDLP/XARkDLv/XARkDMP/XARkDMv/XARkDNP/XARkDNv/XARkDOP/XARkDOv/XARkDPP/XARkDQP/XARkDQv/XARkDRP/XARkDSv/XARkDTP/XARkDTv/XARkDUv/XARkDVP/XARkDVv/XARkDWP/XARkDWv/XARkDXP/XARkDXv/XARkDYP/XARsABQBSARsACgBSARsARP/XARsARv/XARsAR//XARsASP/XARsASv/sARsAUv/XARsAVP/XARsAov/XARsAo//XARsApP/XARsApf/XARsApv/XARsAp//XARsAqP/XARsAqf/XARsAqv/XARsAq//XARsArP/XARsArf/XARsAtP/XARsAtf/XARsAtv/XARsAt//XARsAuP/XARsAuv/XARsAw//XARsAxf/XARsAx//XARsAyf/XARsAy//XARsAzf/XARsAz//XARsA0f/XARsA0//XARsA1f/XARsA1//XARsA2f/XARsA2//XARsA3f/XARsA3//sARsA4f/sARsA4//sARsA5f/sARsBD//XARsBEf/XARsBE//XARsBFf/XARsBRP/XARsBRv/XARsBSP/XARsCBwBSARsCCwBSARsCWf/XARsCYP/XARsDHv/XARsDIP/XARsDIv/XARsDJv/XARsDKP/XARsDKv/XARsDLP/XARsDLv/XARsDMP/XARsDMv/XARsDNP/XARsDNv/XARsDOP/XARsDOv/XARsDPP/XARsDQP/XARsDQv/XARsDRP/XARsDSv/XARsDTP/XARsDTv/XARsDUv/XARsDVP/XARsDVv/XARsDWP/XARsDWv/XARsDXP/XARsDXv/XARsDYP/XASQAD/+FASQAEP+uASQAEf+FASQAIgApASQAJP9xASQAJv/XASQAKv/XASQAMv/XASQANP/XASQANwApASQARP9cASQARv9xASQAR/9xASQASP9xASQASv9xASQAUP+aASQAUf+aASQAUv9xASQAU/+aASQAVP9xASQAVf+aASQAVv+FASQAWP+aASQAWf/XASQAWv/XASQAW//XASQAXP/XASQAXf+uASQAgv9xASQAg/9xASQAhP9xASQAhf9xASQAhv9xASQAh/9xASQAif/XASQAlP/XASQAlf/XASQAlv/XASQAl//XASQAmP/XASQAmv/XASQAov9xASQAo/9cASQApP9cASQApf9cASQApv9cASQAp/9cASQAqP9cASQAqf9xASQAqv9xASQAq/9xASQArP9xASQArf9xASQAtP9xASQAtf9xASQAtv9xASQAt/9xASQAuP9xASQAuv9xASQAu/+aASQAvP+aASQAvf+aASQAvv+aASQAv//XASQAwv9xASQAw/9cASQAxP9xASQAxf9cASQAxv9xASQAx/9cASQAyP/XASQAyf9xASQAyv/XASQAy/9xASQAzP/XASQAzf9xASQAzv/XASQAz/9xASQA0f9xASQA0/9xASQA1f9xASQA1/9xASQA2f9xASQA2/9xASQA3f9xASQA3v/XASQA3/9xASQA4P/XASQA4f9xASQA4v/XASQA4/9xASQA5P/XASQA5f9xASQA+v+aASQBBv+aASQBCP+aASQBDf+aASQBDv/XASQBD/9xASQBEP/XASQBEf9xASQBEv/XASQBE/9xASQBFP/XASQBFf9xASQBF/+aASQBGf+aASQBHf+FASQBIf+FASQBJAApASQBJgApASQBK/+aASQBLf+aASQBL/+aASQBMf+aASQBM/+aASQBNf+aASQBN//XASQBPP+uASQBPv+uASQBQP+uASQBQ/9xASQBRP9cASQBRv9cASQBR//XASQBSP9xASQBSv+FASQB+//XASQB/f/XASQCAv+uASQCA/+uASQCBP+uASQCCP+FASQCDP+FASQCV/+aASQCWP9xASQCWf9cASQCX//XASQCYP9xASQCYv+aASQDHf9xASQDHv9cASQDH/9xASQDIP9cASQDIf9xASQDIv9cASQDI/9xASQDJf9xASQDJv9cASQDJ/9xASQDKP9cASQDKf9xASQDKv9cASQDK/9xASQDLP9cASQDLf9xASQDLv9cASQDL/9xASQDMP9cASQDMf9xASQDMv9cASQDM/9xASQDNP9cASQDNv9xASQDOP9xASQDOv9xASQDPP9xASQDQP9xASQDQv9xASQDRP9xASQDSf/XASQDSv9xASQDS//XASQDTP9xASQDTf/XASQDTv9xASQDT//XASQDUf/XASQDUv9xASQDU//XASQDVP9xASQDVf/XASQDVv9xASQDV//XASQDWP9xASQDWf/XASQDWv9xASQDW//XASQDXP9xASQDXf/XASQDXv9xASQDX//XASQDYP9xASQDYv+aASQDZP+aASQDZv+aASQDaP+aASQDav+aASQDbP+aASQDbv+aASQDcP/XASQDjwApASUABQApASUACgApASUCBwApASUCCwApASYAD/+FASYAEP+uASYAEf+FASYAIgApASYAJP9xASYAJv/XASYAKv/XASYAMv/XASYANP/XASYANwApASYARP9cASYARv9xASYAR/9xASYASP9xASYASv9xASYAUP+aASYAUf+aASYAUv9xASYAU/+aASYAVP9xASYAVf+aASYAVv+FASYAWP+aASYAWf/XASYAWv/XASYAW//XASYAXP/XASYAXf+uASYAgv9xASYAg/9xASYAhP9xASYAhf9xASYAhv9xASYAh/9xASYAif/XASYAlP/XASYAlf/XASYAlv/XASYAl//XASYAmP/XASYAmv/XASYAov9xASYAo/9cASYApP9cASYApf9cASYApv9cASYAp/9cASYAqP9cASYAqf9xASYAqv9xASYAq/9xASYArP9xASYArf9xASYAtP9xASYAtf9xASYAtv9xASYAt/9xASYAuP9xASYAuv9xASYAu/+aASYAvP+aASYAvf+aASYAvv+aASYAv//XASYAwv9xASYAw/9cASYAxP9xASYAxf9cASYAxv9xASYAx/9cASYAyP/XASYAyf9xASYAyv/XASYAy/9xASYAzP/XASYAzf9xASYAzv/XASYAz/9xASYA0f9xASYA0/9xASYA1f9xASYA1/9xASYA2f9xASYA2/9xASYA3f9xASYA3v/XASYA3/9xASYA4P/XASYA4f9xASYA4v/XASYA4/9xASYA5P/XASYA5f9xASYA+v+aASYBBv+aASYBCP+aASYBDf+aASYBDv/XASYBD/9xASYBEP/XASYBEf9xASYBEv/XASYBE/9xASYBFP/XASYBFf9xASYBF/+aASYBGf+aASYBHf+FASYBIf+FASYBJAApASYBJgApASYBK/+aASYBLf+aASYBL/+aASYBMf+aASYBM/+aASYBNf+aASYBN//XASYBPP+uASYBPv+uASYBQP+uASYBQ/9xASYBRP9cASYBRv9cASYBR//XASYBSP9xASYBSv+FASYB+//XASYB/f/XASYCAv+uASYCA/+uASYCBP+uASYCCP+FASYCDP+FASYCV/+aASYCWP9xASYCWf9cASYCX//XASYCYP9xASYCYv+aASYDHf9xASYDHv9cASYDH/9xASYDIP9cASYDIf9xASYDIv9cASYDI/9xASYDJf9xASYDJv9cASYDJ/9xASYDKP9cASYDKf9xASYDKv9cASYDK/9xASYDLP9cASYDLf9xASYDLv9cASYDL/9xASYDMP9cASYDMf9xASYDMv9cASYDM/9xASYDNP9cASYDNv9xASYDOP9xASYDOv9xASYDPP9xASYDQP9xASYDQv9xASYDRP9xASYDSf/XASYDSv9xASYDS//XASYDTP9xASYDTf/XASYDTv9xASYDT//XASYDUf/XASYDUv9xASYDU//XASYDVP9xASYDVf/XASYDVv9xASYDV//XASYDWP9xASYDWf/XASYDWv9xASYDW//XASYDXP9xASYDXf/XASYDXv9xASYDX//XASYDYP9xASYDYv+aASYDZP+aASYDZv+aASYDaP+aASYDav+aASYDbP+aASYDbv+aASYDcP/XASYDjwApAScABQApAScACgApAScCBwApAScCCwApASgAD/+FASgAEP+uASgAEf+FASgAIgApASgAJP9xASgAJv/XASgAKv/XASgAMv/XASgANP/XASgANwApASgARP9cASgARv9xASgAR/9xASgASP9xASgASv9xASgAUP+aASgAUf+aASgAUv9xASgAU/+aASgAVP9xASgAVf+aASgAVv+FASgAWP+aASgAWf/XASgAWv/XASgAW//XASgAXP/XASgAXf+uASgAgv9xASgAg/9xASgAhP9xASgAhf9xASgAhv9xASgAh/9xASgAif/XASgAlP/XASgAlf/XASgAlv/XASgAl//XASgAmP/XASgAmv/XASgAov9xASgAo/9cASgApP9cASgApf9cASgApv9cASgAp/9cASgAqP9cASgAqf9xASgAqv9xASgAq/9xASgArP9xASgArf9xASgAtP9xASgAtf9xASgAtv9xASgAt/9xASgAuP9xASgAuv9xASgAu/+aASgAvP+aASgAvf+aASgAvv+aASgAv//XASgAwv9xASgAw/9cASgAxP9xASgAxf9cASgAxv9xASgAx/9cASgAyP/XASgAyf9xASgAyv/XASgAy/9xASgAzP/XASgAzf9xASgAzv/XASgAz/9xASgA0f9xASgA0/9xASgA1f9xASgA1/9xASgA2f9xASgA2/9xASgA3f9xASgA3v/XASgA3/9xASgA4P/XASgA4f9xASgA4v/XASgA4/9xASgA5P/XASgA5f9xASgA+v+aASgBBv+aASgBCP+aASgBDf+aASgBDv/XASgBD/9xASgBEP/XASgBEf9xASgBEv/XASgBE/9xASgBFP/XASgBFf9xASgBF/+aASgBGf+aASgBHf+FASgBIf+FASgBJAApASgBJgApASgBK/+aASgBLf+aASgBL/+aASgBMf+aASgBM/+aASgBNf+aASgBN//XASgBPP+uASgBPv+uASgBQP+uASgBQ/9xASgBRP9cASgBRv9cASgBR//XASgBSP9xASgBSv+FASgB+//XASgB/f/XASgCAv+uASgCA/+uASgCBP+uASgCCP+FASgCDP+FASgCV/+aASgCWP9xASgCWf9cASgCX//XASgCYP9xASgCYv+aASgDHf9xASgDHv9cASgDH/9xASgDIP9cASgDIf9xASgDIv9cASgDI/9xASgDJf9xASgDJv9cASgDJ/9xASgDKP9cASgDKf9xASgDKv9cASgDK/9xASgDLP9cASgDLf9xASgDLv9cASgDL/9xASgDMP9cASgDMf9xASgDMv9cASgDM/9xASgDNP9cASgDNv9xASgDOP9xASgDOv9xASgDPP9xASgDQP9xASgDQv9xASgDRP9xASgDSf/XASgDSv9xASgDS//XASgDTP9xASgDTf/XASgDTv9xASgDT//XASgDUf/XASgDUv9xASgDU//XASgDVP9xASgDVf/XASgDVv9xASgDV//XASgDWP9xASgDWf/XASgDWv9xASgDW//XASgDXP9xASgDXf/XASgDXv9xASgDX//XASgDYP9xASgDYv+aASgDZP+aASgDZv+aASgDaP+aASgDav+aASgDbP+aASgDbv+aASgDcP/XASgDjwApASoAD//XASoAEf/XASoAJP/sASoAgv/sASoAg//sASoAhP/sASoAhf/sASoAhv/sASoAh//sASoAwv/sASoAxP/sASoAxv/sASoBQ//sASoCCP/XASoCDP/XASoCWP/sASoDHf/sASoDH//sASoDIf/sASoDI//sASoDJf/sASoDJ//sASoDKf/sASoDK//sASoDLf/sASoDL//sASoDMf/sASoDM//sASwAD//XASwAEf/XASwAJP/sASwAgv/sASwAg//sASwAhP/sASwAhf/sASwAhv/sASwAh//sASwAwv/sASwAxP/sASwAxv/sASwBQ//sASwCCP/XASwCDP/XASwCWP/sASwDHf/sASwDH//sASwDIf/sASwDI//sASwDJf/sASwDJ//sASwDKf/sASwDK//sASwDLf/sASwDL//sASwDMf/sASwDM//sAS4AD//XAS4AEf/XAS4AJP/sAS4Agv/sAS4Ag//sAS4AhP/sAS4Ahf/sAS4Ahv/sAS4Ah//sAS4Awv/sAS4AxP/sAS4Axv/sAS4BQ//sAS4CCP/XAS4CDP/XAS4CWP/sAS4DHf/sAS4DH//sAS4DIf/sAS4DI//sAS4DJf/sAS4DJ//sAS4DKf/sAS4DK//sAS4DLf/sAS4DL//sAS4DMf/sAS4DM//sATAAD//XATAAEf/XATAAJP/sATAAgv/sATAAg//sATAAhP/sATAAhf/sATAAhv/sATAAh//sATAAwv/sATAAxP/sATAAxv/sATABQ//sATACCP/XATACDP/XATACWP/sATADHf/sATADH//sATADIf/sATADI//sATADJf/sATADJ//sATADKf/sATADK//sATADLf/sATADL//sATADMf/sATADM//sATIAD//XATIAEf/XATIAJP/sATIAgv/sATIAg//sATIAhP/sATIAhf/sATIAhv/sATIAh//sATIAwv/sATIAxP/sATIAxv/sATIBQ//sATICCP/XATICDP/XATICWP/sATIDHf/sATIDH//sATIDIf/sATIDI//sATIDJf/sATIDJ//sATIDKf/sATIDK//sATIDLf/sATIDL//sATIDMf/sATIDM//sATQAD//XATQAEf/XATQAJP/sATQAgv/sATQAg//sATQAhP/sATQAhf/sATQAhv/sATQAh//sATQAwv/sATQAxP/sATQAxv/sATQBQ//sATQCCP/XATQCDP/XATQCWP/sATQDHf/sATQDH//sATQDIf/sATQDI//sATQDJf/sATQDJ//sATQDKf/sATQDK//sATQDLf/sATQDL//sATQDMf/sATQDM//sATYAD/+aATYAEf+aATYAIgApATYAJP+uATYAJv/sATYAKv/sATYAMv/sATYANP/sATYARP/XATYARv/XATYAR//XATYASP/XATYASv/sATYAUP/sATYAUf/sATYAUv/XATYAU//sATYAVP/XATYAVf/sATYAVv/sATYAWP/sATYAgv+uATYAg/+uATYAhP+uATYAhf+uATYAhv+uATYAh/+uATYAif/sATYAlP/sATYAlf/sATYAlv/sATYAl//sATYAmP/sATYAmv/sATYAov/XATYAo//XATYApP/XATYApf/XATYApv/XATYAp//XATYAqP/XATYAqf/XATYAqv/XATYAq//XATYArP/XATYArf/XATYAtP/XATYAtf/XATYAtv/XATYAt//XATYAuP/XATYAuv/XATYAu//sATYAvP/sATYAvf/sATYAvv/sATYAwv+uATYAw//XATYAxP+uATYAxf/XATYAxv+uATYAx//XATYAyP/sATYAyf/XATYAyv/sATYAy//XATYAzP/sATYAzf/XATYAzv/sATYAz//XATYA0f/XATYA0//XATYA1f/XATYA1//XATYA2f/XATYA2//XATYA3f/XATYA3v/sATYA3//sATYA4P/sATYA4f/sATYA4v/sATYA4//sATYA5P/sATYA5f/sATYA+v/sATYBBv/sATYBCP/sATYBDf/sATYBDv/sATYBD//XATYBEP/sATYBEf/XATYBEv/sATYBE//XATYBFP/sATYBFf/XATYBF//sATYBGf/sATYBHf/sATYBIf/sATYBK//sATYBLf/sATYBL//sATYBMf/sATYBM//sATYBNf/sATYBQ/+uATYBRP/XATYBRv/XATYBR//sATYBSP/XATYBSv/sATYCCP+aATYCDP+aATYCV//sATYCWP+uATYCWf/XATYCX//sATYCYP/XATYCYv/sATYDHf+uATYDHv/XATYDH/+uATYDIP/XATYDIf+uATYDIv/XATYDI/+uATYDJf+uATYDJv/XATYDJ/+uATYDKP/XATYDKf+uATYDKv/XATYDK/+uATYDLP/XATYDLf+uATYDLv/XATYDL/+uATYDMP/XATYDMf+uATYDMv/XATYDM/+uATYDNP/XATYDNv/XATYDOP/XATYDOv/XATYDPP/XATYDQP/XATYDQv/XATYDRP/XATYDSf/sATYDSv/XATYDS//sATYDTP/XATYDTf/sATYDTv/XATYDT//sATYDUf/sATYDUv/XATYDU//sATYDVP/XATYDVf/sATYDVv/XATYDV//sATYDWP/XATYDWf/sATYDWv/XATYDW//sATYDXP/XATYDXf/sATYDXv/XATYDX//sATYDYP/XATYDYv/sATYDZP/sATYDZv/sATYDaP/sATYDav/sATYDbP/sATYDbv/sATcABQBSATcACgBSATcAD/+uATcAEf+uATcAIgApATcCBwBSATcCCP+uATcCCwBSATcCDP+uATgAD/+FATgAEf+FATgAIgApATgAJP+FATgAJv/XATgAKv/XATgAMv/XATgANP/XATgARP+aATgARv+aATgAR/+aATgASP+aATgASv/XATgAUP/DATgAUf/DATgAUv+aATgAU//DATgAVP+aATgAVf/DATgAVv+uATgAWP/DATgAXf/XATgAgv+FATgAg/+FATgAhP+FATgAhf+FATgAhv+FATgAh/+FATgAif/XATgAlP/XATgAlf/XATgAlv/XATgAl//XATgAmP/XATgAmv/XATgAov+aATgAo/+aATgApP+aATgApf+aATgApv+aATgAp/+aATgAqP+aATgAqf+aATgAqv+aATgAq/+aATgArP+aATgArf+aATgAtP+aATgAtf+aATgAtv+aATgAt/+aATgAuP+aATgAuv+aATgAu//DATgAvP/DATgAvf/DATgAvv/DATgAwv+FATgAw/+aATgAxP+FATgAxf+aATgAxv+FATgAx/+aATgAyP/XATgAyf+aATgAyv/XATgAy/+aATgAzP/XATgAzf+aATgAzv/XATgAz/+aATgA0f+aATgA0/+aATgA1f+aATgA1/+aATgA2f+aATgA2/+aATgA3f+aATgA3v/XATgA3//XATgA4P/XATgA4f/XATgA4v/XATgA4//XATgA5P/XATgA5f/XATgA+v/DATgBBv/DATgBCP/DATgBDf/DATgBDv/XATgBD/+aATgBEP/XATgBEf+aATgBEv/XATgBE/+aATgBFP/XATgBFf+aATgBF//DATgBGf/DATgBHf+uATgBIf+uATgBK//DATgBLf/DATgBL//DATgBMf/DATgBM//DATgBNf/DATgBPP/XATgBPv/XATgBQP/XATgBQ/+FATgBRP+aATgBRv+aATgBR//XATgBSP+aATgBSv+uATgCCP+FATgCDP+FATgCV//DATgCWP+FATgCWf+aATgCX//XATgCYP+aATgCYv/DATgDHf+FATgDHv+aATgDH/+FATgDIP+aATgDIf+FATgDIv+aATgDI/+FATgDJf+FATgDJv+aATgDJ/+FATgDKP+aATgDKf+FATgDKv+aATgDK/+FATgDLP+aATgDLf+FATgDLv+aATgDL/+FATgDMP+aATgDMf+FATgDMv+aATgDM/+FATgDNP+aATgDNv+aATgDOP+aATgDOv+aATgDPP+aATgDQP+aATgDQv+aATgDRP+aATgDSf/XATgDSv+aATgDS//XATgDTP+aATgDTf/XATgDTv+aATgDT//XATgDUf/XATgDUv+aATgDU//XATgDVP+aATgDVf/XATgDVv+aATgDV//XATgDWP+aATgDWf/XATgDWv+aATgDW//XATgDXP+aATgDXf/XATgDXv+aATgDX//XATgDYP+aATgDYv/DATgDZP/DATgDZv/DATgDaP/DATgDav/DATgDbP/DATgDbv/DATkABQBSATkACgBSATkAD/+uATkAEf+uATkAIgApATkCBwBSATkCCP+uATkCCwBSATkCDP+uAToAD/+FAToAEf+FAToAIgApAToAJP+FAToAJv/XAToAKv/XAToAMv/XAToANP/XAToARP+aAToARv+aAToAR/+aAToASP+aAToASv/XAToAUP/DAToAUf/DAToAUv+aAToAU//DAToAVP+aAToAVf/DAToAVv+uAToAWP/DAToAXf/XAToAgv+FAToAg/+FAToAhP+FAToAhf+FAToAhv+FAToAh/+FAToAif/XAToAlP/XAToAlf/XAToAlv/XAToAl//XAToAmP/XAToAmv/XAToAov+aAToAo/+aAToApP+aAToApf+aAToApv+aAToAp/+aAToAqP+aAToAqf+aAToAqv+aAToAq/+aAToArP+aAToArf+aAToAtP+aAToAtf+aAToAtv+aAToAt/+aAToAuP+aAToAuv+aAToAu//DAToAvP/DAToAvf/DAToAvv/DAToAwv+FAToAw/+aAToAxP+FAToAxf+aAToAxv+FAToAx/+aAToAyP/XAToAyf+aAToAyv/XAToAy/+aAToAzP/XAToAzf+aAToAzv/XAToAz/+aAToA0f+aAToA0/+aAToA1f+aAToA1/+aAToA2f+aAToA2/+aAToA3f+aAToA3v/XAToA3//XAToA4P/XAToA4f/XAToA4v/XAToA4//XAToA5P/XAToA5f/XAToA+v/DAToBBv/DAToBCP/DAToBDf/DAToBDv/XAToBD/+aAToBEP/XAToBEf+aAToBEv/XAToBE/+aAToBFP/XAToBFf+aAToBF//DAToBGf/DAToBHf+uAToBIf+uAToBK//DAToBLf/DAToBL//DAToBMf/DAToBM//DAToBNf/DAToBPP/XAToBPv/XAToBQP/XAToBQ/+FAToBRP+aAToBRv+aAToBR//XAToBSP+aAToBSv+uAToCCP+FAToCDP+FAToCV//DAToCWP+FAToCWf+aAToCX//XAToCYP+aAToCYv/DAToDHf+FAToDHv+aAToDH/+FAToDIP+aAToDIf+FAToDIv+aAToDI/+FAToDJf+FAToDJv+aAToDJ/+FAToDKP+aAToDKf+FAToDKv+aAToDK/+FAToDLP+aAToDLf+FAToDLv+aAToDL/+FAToDMP+aAToDMf+FAToDMv+aAToDM/+FAToDNP+aAToDNv+aAToDOP+aAToDOv+aAToDPP+aAToDQP+aAToDQv+aAToDRP+aAToDSf/XAToDSv+aAToDS//XAToDTP+aAToDTf/XAToDTv+aAToDT//XAToDUf/XAToDUv+aAToDU//XAToDVP+aAToDVf/XAToDVv+aAToDV//XAToDWP+aAToDWf/XAToDWv+aAToDW//XAToDXP+aAToDXf/XAToDXv+aAToDX//XAToDYP+aAToDYv/DAToDZP/DAToDZv/DAToDaP/DAToDav/DAToDbP/DAToDbv/DATsAJv/sATsAKv/sATsAMv/sATsANP/sATsAif/sATsAlP/sATsAlf/sATsAlv/sATsAl//sATsAmP/sATsAmv/sATsAyP/sATsAyv/sATsAzP/sATsAzv/sATsA3v/sATsA4P/sATsA4v/sATsA5P/sATsBDv/sATsBEP/sATsBEv/sATsBFP/sATsBR//sATsCX//sATsDSf/sATsDS//sATsDTf/sATsDT//sATsDUf/sATsDU//sATsDVf/sATsDV//sATsDWf/sATsDW//sATsDXf/sATsDX//sAT0AJv/sAT0AKv/sAT0AMv/sAT0ANP/sAT0Aif/sAT0AlP/sAT0Alf/sAT0Alv/sAT0Al//sAT0AmP/sAT0Amv/sAT0AyP/sAT0Ayv/sAT0AzP/sAT0Azv/sAT0A3v/sAT0A4P/sAT0A4v/sAT0A5P/sAT0BDv/sAT0BEP/sAT0BEv/sAT0BFP/sAT0BR//sAT0CX//sAT0DSf/sAT0DS//sAT0DTf/sAT0DT//sAT0DUf/sAT0DU//sAT0DVf/sAT0DV//sAT0DWf/sAT0DW//sAT0DXf/sAT0DX//sAT8AJv/sAT8AKv/sAT8AMv/sAT8ANP/sAT8Aif/sAT8AlP/sAT8Alf/sAT8Alv/sAT8Al//sAT8AmP/sAT8Amv/sAT8AyP/sAT8Ayv/sAT8AzP/sAT8Azv/sAT8A3v/sAT8A4P/sAT8A4v/sAT8A5P/sAT8BDv/sAT8BEP/sAT8BEv/sAT8BFP/sAT8BR//sAT8CX//sAT8DSf/sAT8DS//sAT8DTf/sAT8DT//sAT8DUf/sAT8DU//sAT8DVf/sAT8DV//sAT8DWf/sAT8DW//sAT8DXf/sAT8DX//sAUMABf9xAUMACv9xAUMAJv/XAUMAKv/XAUMALQEKAUMAMv/XAUMANP/XAUMAN/9xAUMAOf+uAUMAOv+uAUMAPP+FAUMAif/XAUMAlP/XAUMAlf/XAUMAlv/XAUMAl//XAUMAmP/XAUMAmv/XAUMAn/+FAUMAyP/XAUMAyv/XAUMAzP/XAUMAzv/XAUMA3v/XAUMA4P/XAUMA4v/XAUMA5P/XAUMBDv/XAUMBEP/XAUMBEv/XAUMBFP/XAUMBJP9xAUMBJv9xAUMBNv+uAUMBOP+FAUMBOv+FAUMBR//XAUMB+v+uAUMB/P+uAUMB/v+uAUMCAP+FAUMCB/9xAUMCC/9xAUMCX//XAUMDSf/XAUMDS//XAUMDTf/XAUMDT//XAUMDUf/XAUMDU//XAUMDVf/XAUMDV//XAUMDWf/XAUMDW//XAUMDXf/XAUMDX//XAUMDb/+FAUMDcf+FAUMDc/+FAUMDj/9xAUQABf/sAUQACv/sAUQCB//sAUQCC//sAUUALQB7AUcAD/+uAUcAEf+uAUcAJP/XAUcAN//DAUcAOf/sAUcAOv/sAUcAO//XAUcAPP/sAUcAPf/sAUcAgv/XAUcAg//XAUcAhP/XAUcAhf/XAUcAhv/XAUcAh//XAUcAn//sAUcAwv/XAUcAxP/XAUcAxv/XAUcBJP/DAUcBJv/DAUcBNv/sAUcBOP/sAUcBOv/sAUcBO//sAUcBPf/sAUcBP//sAUcBQ//XAUcBoP/sAUcB+v/sAUcB/P/sAUcB/v/sAUcCAP/sAUcCCP+uAUcCDP+uAUcCWP/XAUcDHf/XAUcDH//XAUcDIf/XAUcDI//XAUcDJf/XAUcDJ//XAUcDKf/XAUcDK//XAUcDLf/XAUcDL//XAUcDMf/XAUcDM//XAUcDb//sAUcDcf/sAUcDc//sAUcDj//DAVYABf9xAVYACv9xAVYBZv/XAVYBbf/XAVYBcf9xAVYBcv+FAVYBc//XAVYBdf+uAVYBeP+FAVYCB/9xAVYCC/9xAVYCVP+FAVsAD/+uAVsAEf+uAVsBVv/XAVsBX//XAVsBYv/XAVsBZP/sAVsBaf/XAVsBcP/sAVsBcf/DAVsBcv/sAVsBdP/XAVsBdf/sAVsBeP/sAVsBiP/sAVsCCP+uAVsCDP+uAVsCVP/sAVwAD/+FAVwAEf+FAVwBVv+FAVwBX/+FAVwBYv+FAVwBZv/XAVwBaf+FAVwBbf/XAVwBc//DAVwBdv/sAVwBef+aAVwBev+uAVwBe//DAVwBfP/DAVwBff/DAVwBfv+aAVwBgf/DAVwBgv+uAVwBhP/DAVwBhv/DAVwBh//DAVwBif/DAVwBjP+aAVwBjv+aAVwBj/+aAVwBkP+aAVwBkv/DAVwBk/+aAVwBlf/DAVwBlv/DAVwBmP/DAVwBmf+aAVwBmv/DAVwBm//DAVwCCP+FAVwCDP+FAVwCIf/sAV0Bcf/XAV0Bcv/sAV0BeP/sAV0CVP/sAV4ABf/XAV4ACv/XAV4CB//XAV4CC//XAV8ABf9xAV8ACv9xAV8BZv/XAV8Bbf/XAV8Bcf9xAV8Bcv+FAV8Bc//XAV8Bdf+uAV8BeP+FAV8CB/9xAV8CC/9xAV8CVP+FAWAAD/+uAWAAEf+uAWABVv/XAWABX//XAWABYv/XAWABaf/XAWABdP/XAWACCP+uAWACDP+uAWEAD/+FAWEAEP+uAWEAEf+FAWEBVv9cAWEBX/9cAWEBYv9cAWEBZv/DAWEBaf9cAWEBbf/DAWEBc/+aAWEBdv/DAWEBef9xAWEBev+aAWEBe/+aAWEBfP+uAWEBff+aAWEBfv9xAWEBgP/XAWEBgf/DAWEBgv+aAWEBhP+aAWEBhv+uAWEBh/+aAWEBif+aAWEBiv/XAWEBjP9xAWEBjv+aAWEBj/9xAWEBkP9xAWEBkv+aAWEBk/9xAWEBlP/XAWEBlf+aAWEBlv+aAWEBmP+aAWEBmf9xAWEBmv+aAWEBm/+aAWECAv+uAWECA/+uAWECBP+uAWECCP+FAWECDP+FAWECIf/DAWECU//XAWIABf9xAWIACv9xAWIBZv/XAWIBbf/XAWIBcf9xAWIBcv+FAWIBc//XAWIBdf+uAWIBeP+FAWICB/9xAWICC/9xAWICVP+FAWQBZv/sAWQBbf/sAWQBc//DAWYAD/+uAWYAEf+uAWYBVv/XAWYBX//XAWYBYv/XAWYBZP/sAWYBaf/XAWYBcP/sAWYBcf/DAWYBcv/sAWYBdP/XAWYBdf/sAWYBeP/sAWYBiP/sAWYCCP+uAWYCDP+uAWYCVP/sAWgBZv/XAWgBbf/XAWgBc//DAWgBjf/sAWgBkf/sAWkABf9xAWkACv9xAWkBZv/XAWkBbf/XAWkBcf9xAWkBcv+FAWkBc//XAWkBdf+uAWkBeP+FAWkCB/9xAWkCC/9xAWkCVP+FAW0AD/+uAW0AEf+uAW0BVv/XAW0BX//XAW0BYv/XAW0BZP/sAW0Baf/XAW0BcP/sAW0Bcf/DAW0Bcv/sAW0BdP/XAW0Bdf/sAW0BeP/sAW0BiP/sAW0CCP+uAW0CDP+uAW0CVP/sAW8AD/72AW8AEf72AW8BVv+aAW8BX/+aAW8BYv+aAW8BZP/sAW8Baf+aAW8BdP/XAW8BiP/XAW8CCP72AW8CDP72AXEAD/+FAXEAEP+uAXEAEf+FAXEBVv9cAXEBX/9cAXEBYv9cAXEBZv/DAXEBaf9cAXEBbf/DAXEBc/+aAXEBdv/DAXEBef9xAXEBev+aAXEBe/+aAXEBfP+uAXEBff+aAXEBfv9xAXEBgP/XAXEBgf/DAXEBgv+aAXEBhP+aAXEBhv+uAXEBh/+aAXEBif+aAXEBiv/XAXEBjP9xAXEBjv+aAXEBj/9xAXEBkP9xAXEBkv+aAXEBk/9xAXEBlP/XAXEBlf+aAXEBlv+aAXEBmP+aAXEBmf9xAXEBmv+aAXEBm/+aAXECAv+uAXECA/+uAXECBP+uAXECCP+FAXECDP+FAXECIf/DAXECU//XAXIAD/+FAXIAEf+FAXIBVv+FAXIBX/+FAXIBYv+FAXIBZv/XAXIBaf+FAXIBbf/XAXIBc//DAXIBdv/sAXIBef+aAXIBev+uAXIBe//DAXIBfP/DAXIBff/DAXIBfv+aAXIBgf/DAXIBgv+uAXIBhP/DAXIBhv/DAXIBh//DAXIBif/DAXIBjP+aAXIBjv+aAXIBj/+aAXIBkP+aAXIBkv/DAXIBk/+aAXIBlf/DAXIBlv/DAXIBmP/DAXIBmf+aAXIBmv/DAXIBm//DAXICCP+FAXICDP+FAXICIf/sAXMAD/+aAXMAEf+aAXMBVv/XAXMBX//XAXMBYv/XAXMBZP/DAXMBaf/XAXMBcP/sAXMBcf+uAXMBcv/DAXMBdP/sAXMBeP/DAXMBiP/sAXMCCP+aAXMCDP+aAXMCVP/DAXQBZv/XAXQBbf/XAXQBc//DAXQBjf/sAXQBkf/sAXUAD/+FAXUAEf+FAXUBVv+uAXUBX/+uAXUBYv+uAXUBZv/sAXUBaf+uAXUBbf/sAXUCCP+FAXUCDP+FAXYBcf/XAXYBcv/sAXYBeP/sAXYCVP/sAXgAD/+FAXgAEf+FAXgBVv+FAXgBX/+FAXgBYv+FAXgBZv/XAXgBaf+FAXgBbf/XAXgBc//DAXgBdv/sAXgBef+aAXgBev+uAXgBe//DAXgBfP/DAXgBff/DAXgBfv+aAXgBgf/DAXgBgv+uAXgBhP/DAXgBhv/DAXgBh//DAXgBif/DAXgBjP+aAXgBjv+aAXgBj/+aAXgBkP+aAXgBkv/DAXgBk/+aAXgBlf/DAXgBlv/DAXgBmP/DAXgBmf+aAXgBmv/DAXgBm//DAXgCCP+FAXgCDP+FAXgCIf/sAXkBiAApAXsABf/sAXsACv/sAXsCB//sAXsCC//sAXwABf+uAXwACv+uAXwBjf/sAXwBkf/sAXwCB/+uAXwCC/+uAX4BiAApAYAAD/+uAYAAEf+uAYABiP/sAYACCP+uAYACDP+uAYMAEP+aAYMBef/XAYMBfv/XAYMBgf/XAYMBjP/XAYMBjf/XAYMBj//XAYMBkP/XAYMBkf/XAYMBk//XAYMBmf/XAYMCAv+aAYMCA/+aAYMCBP+aAYQABf/sAYQACv/sAYQCB//sAYQCC//sAYUAD//XAYUAEf/XAYUCCP/XAYUCDP/XAYYABf+uAYYACv+uAYYBjf/sAYYBkf/sAYYCB/+uAYYCC/+uAYcBef/XAYcBfv/XAYcBjP/XAYcBj//XAYcBkP/XAYcBk//XAYcBmf/XAYgABf+FAYgACv+FAYgBef/sAYgBfv/sAYgBgP/XAYgBiv/XAYgBjP/sAYgBjf/XAYgBj//sAYgBkP/sAYgBkf/XAYgBk//sAYgBmf/sAYgCB/+FAYgCC/+FAYoAD/+uAYoAEf+uAYoBiP/sAYoCCP+uAYoCDP+uAYwABf/sAYwACv/sAYwBgP/XAYwBiv/XAYwCB//sAYwCC//sAY4ABf/sAY4ACv/sAY4BgP/XAY4Biv/XAY4CB//sAY4CC//sAZAAD//sAZAAEf/sAZACCP/sAZACDP/sAZMABf/sAZMACv/sAZMBgP/XAZMBiv/XAZMCB//sAZMCC//sAZQAD//DAZQAEP/XAZQAEf/DAZQBef/XAZQBfv/XAZQBgf/XAZQBjP/XAZQBj//XAZQBkP/XAZQBk//XAZQBmf/XAZQCAv/XAZQCA//XAZQCBP/XAZQCCP/DAZQCDP/DAZcABf/XAZcACv/XAZcCB//XAZcCC//XAZkABf/sAZkACv/sAZkBgP/XAZkBiv/XAZkCB//sAZkCC//sAZ0ABf+uAZ0ACv+uAZ0Bnf+FAZ0Bpv+FAZ0BqP/XAZ0BvP+aAZ0Bvf/XAZ0Bwf+aAZ0BxP+FAZ0B3P/XAZ0B3f/XAZ0B4f/XAZ0B5P/XAZ0B9v/XAZ0CB/+uAZ0CC/+uAZ0Cbv+uAZ0CfP+aAZ0CgP+uAZ0Cgv+uAZ0Cl/+uAZ0Cm/+uAZ0Cp/+uAZ0Cqf+FAZ0Cqv/XAZ0Ctf+aAZ0Ctv/XAZ0Ct/+aAZ0CuP/XAZ0Cuf+aAZ0Cuv/XAZ0Cvf+FAZ0Cvv/XAZ0Cv/+aAZ0CwP/XAZ0Cwf+aAZ0Cwv/XAZ0C1P+aAZ0C1f/XAZ0C9//XAZ0C+P/XAZ0C+f/XAZ0C+v/XAZ0C+//XAZ0C/P/XAZ0C/f+aAZ0C/v/XAZ0DA/+uAZ0DDf+aAZ0DDv/DAZ0DD/+aAZ0DEP/DAZ0DF/+FAZ0DGP/XAZ4AD/+FAZ4AEP+uAZ4AEf+FAZ4Bn//XAZ4BpP+aAZ4Bqv9xAZ4Brv+aAZ4Btf+aAZ4BuP/XAZ4Bu//XAZ4BvAApAZ4Bvv+uAZ4BzP+aAZ4Bzf+aAZ4Bzv+FAZ4Bz/9xAZ4B0P/XAZ4B0f/XAZ4B0v+aAZ4B0/+aAZ4B1P+aAZ4B1f+FAZ4B1v+aAZ4B1/+aAZ4B2P9xAZ4B2f+aAZ4B2v+aAZ4B2/9xAZ4B3P+uAZ4B3f+uAZ4B3v9xAZ4B3//XAZ4B4P+aAZ4B4f+aAZ4B4v+aAZ4B4/+aAZ4B5P+uAZ4B5f+aAZ4B5v+aAZ4B5//XAZ4B6P+aAZ4B6f/DAZ4B6v9xAZ4B7P+aAZ4B7f9xAZ4B7v+FAZ4B8v+FAZ4B8/+aAZ4B9f+aAZ4B9v+uAZ4B9/+aAZ4B+f+aAZ4CAv+uAZ4CA/+uAZ4CBP+uAZ4CCP+FAZ4CDP+FAZ4Cav9xAZ4Ca/+aAZ4CbP/XAZ4Cbf/XAZ4Ccf+aAZ4Ccv9xAZ4Cc/+FAZ4Cdf+aAZ4Cd/+aAZ4Cef+aAZ4Cff+aAZ4Cfv/XAZ4Cf/9xAZ4Cgf/XAZ4Cg//XAZ4ChP/XAZ4Chf9xAZ4Chv/XAZ4Ch/9xAZ4CiP/XAZ4Cif9xAZ4Civ/XAZ4Ci//XAZ4CjP/XAZ4Cjf9xAZ4Clv+aAZ4Cmv+aAZ4Cnv+aAZ4CoP/XAZ4Cov/XAZ4CpP+aAZ4Cpv+aAZ4Cqv+uAZ4CrP+aAZ4Crv+aAZ4CsP+aAZ4Csf/XAZ4Csv9xAZ4Cs//XAZ4CtP9xAZ4CtQApAZ4Ctv+uAZ4CuP+uAZ4Cuv+uAZ4CvP/XAZ4Cvv+uAZ4CwP+aAZ4Cwv+aAZ4CxP+aAZ4Cxf+aAZ4Cxv9xAZ4Cx/+aAZ4CyP9xAZ4Cy//XAZ4Czf+aAZ4Czv+aAZ4Cz/+FAZ4C0f+aAZ4C0/+aAZ4C1f+aAZ4C1/+aAZ4C2f9xAZ4C2/9xAZ4C3f9xAZ4C4P9xAZ4C5v/XAZ4C6P/XAZ4C6v/DAZ4C7P+aAZ4C7v+aAZ4C7//XAZ4C8P9xAZ4C8f/XAZ4C8v9xAZ4C8//XAZ4C9P9xAZ4C9v/XAZ4C+P+uAZ4C+v+uAZ4C/P+uAZ4C/v+aAZ4DAP+aAZ4DAv+aAZ4DBv/XAZ4DCP/XAZ4DCf9xAZ4DCv9xAZ4DC/9xAZ4DDP9xAZ4DDv+aAZ4DEP+aAZ4DEf+aAZ4DEv+FAZ4DFP+aAZ4DFf/XAZ4DFv9xAZ4DGP+uAZ4DGv9xAZ4DG/+aAZ4DHP+FAZ8Bn//XAZ8BuP/XAZ8Bu//XAZ8Bvv/XAZ8B4f/XAZ8CbP/XAZ8Cfv/XAZ8ChP/XAZ8Chv/XAZ8CiP/XAZ8Civ/XAZ8CjP/XAZ8Csf/XAZ8Cs//XAZ8CwP/XAZ8Cwv/XAZ8Cxf/XAZ8Cx//XAZ8C1f/XAZ8C7//XAZ8C8f/XAZ8C8//XAZ8C/v/XAZ8DCf/XAZ8DC//XAZ8DDv/XAZ8DEP/XAZ8DFf/XAaADDv/XAaADEP/XAaQABf+uAaQACv+uAaQBnf+FAaQBpv+FAaQBqP/XAaQBvP+aAaQBvf/XAaQBwf+aAaQBxP+FAaQB3P/XAaQB3f/XAaQB4f/XAaQB5P/XAaQB9v/XAaQCB/+uAaQCC/+uAaQCbv+uAaQCfP+aAaQCgP+uAaQCgv+uAaQCl/+uAaQCm/+uAaQCp/+uAaQCqf+FAaQCqv/XAaQCtf+aAaQCtv/XAaQCt/+aAaQCuP/XAaQCuf+aAaQCuv/XAaQCvf+FAaQCvv/XAaQCv/+aAaQCwP/XAaQCwf+aAaQCwv/XAaQC1P+aAaQC1f/XAaQC9//XAaQC+P/XAaQC+f/XAaQC+v/XAaQC+//XAaQC/P/XAaQC/f+aAaQC/v/XAaQDA/+uAaQDDf+aAaQDDv/DAaQDD/+aAaQDEP/DAaQDF/+FAaQDGP/XAaUABf+uAaUACv+uAaUBnf+FAaUBpv+FAaUBqP/XAaUBvP+aAaUBvf/XAaUBwf+aAaUBxP+FAaUB3P/XAaUB3f/XAaUB4f/XAaUB5P/XAaUB9v/XAaUCB/+uAaUCC/+uAaUCbv+uAaUCfP+aAaUCgP+uAaUCgv+uAaUCl/+uAaUCm/+uAaUCp/+uAaUCqf+FAaUCqv/XAaUCtf+aAaUCtv/XAaUCt/+aAaUCuP/XAaUCuf+aAaUCuv/XAaUCvf+FAaUCvv/XAaUCv/+aAaUCwP/XAaUCwf+aAaUCwv/XAaUC1P+aAaUC1f/XAaUC9//XAaUC+P/XAaUC+f/XAaUC+v/XAaUC+//XAaUC/P/XAaUC/f+aAaUC/v/XAaUDA/+uAaUDDf+aAaUDDv/DAaUDD/+aAaUDEP/DAaUDF/+FAaUDGP/XAaYABf+uAaYACv+uAaYBnf+FAaYBpv+FAaYBqP/XAaYBvP+aAaYBvf/XAaYBwf+aAaYBxP+FAaYB3P/XAaYB3f/XAaYB4f/XAaYB5P/XAaYB9v/XAaYCB/+uAaYCC/+uAaYCbv+uAaYCfP+aAaYCgP+uAaYCgv+uAaYCl/+uAaYCm/+uAaYCp/+uAaYCqf+FAaYCqv/XAaYCtf+aAaYCtv/XAaYCt/+aAaYCuP/XAaYCuf+aAaYCuv/XAaYCvf+FAaYCvv/XAaYCv/+aAaYCwP/XAaYCwf+aAaYCwv/XAaYC1P+aAaYC1f/XAaYC9//XAaYC+P/XAaYC+f/XAaYC+v/XAaYC+//XAaYC/P/XAaYC/f+aAaYC/v/XAaYDA/+uAaYDDf+aAaYDDv/DAaYDD/+aAaYDEP/DAaYDF/+FAaYDGP/XAacBn//XAacBuP/XAacBu//XAacBvv/XAacBwf/XAacB4f/XAacCbP/XAacCfP/XAacCfv/XAacChP/XAacChv/XAacCiP/XAacCiv/XAacCjP/XAacCsf/XAacCs//XAacCv//XAacCwP/XAacCwf/XAacCwv/XAacCxf+aAacCx/+aAacC1P/XAacC1f/XAacC7//XAacC8f/XAacC8//XAacC/f/XAacC/v/XAacDCf/XAacDC//XAacDDv/XAacDEP/XAacDFf/XAacDGf/sAagAD/+FAagAEf+FAagBn//sAagBpP+aAagBqv9xAagBrv+aAagBtf+aAagBuP/sAagBu//sAagBvv/DAagByf/sAagBzv+uAagBz//XAagB1f+uAagB2P/XAagB2//XAagB3v/XAagB4f/XAagB6v/XAagB6wBmAagB7f/XAagB7v/sAagB8v+uAagB9ABmAagCCP+FAagCDP+FAagCav/XAagCbP/sAagCcv9xAagCc/+uAagCfv/sAagCf//XAagChP/sAagChf/XAagChv/sAagCh//XAagCiP/sAagCif/XAagCiv/sAagCjP/sAagCjf/XAagCmABmAagCqABmAagCsf/sAagCsv/XAagCs//sAagCtP/XAagCwP/XAagCwv/XAagCxf/XAagCxv/DAagCx//XAagCyP/DAagCzv+aAagCz/+uAagC1f/XAagC2f9xAagC2/9xAagC3f9xAagC4P/XAagC7//sAagC8P/XAagC8f/sAagC8v/XAagC8//sAagC9P/XAagC/v/XAagDCf9xAagDCv/XAagDC/9xAagDDP/XAagDEf+aAagDEv+uAagDFf/sAagDFv/XAagDGv/XAagDG/+aAagDHP+uAaoABf9xAaoACv9xAaoBnf+aAaoBpv+aAaoBvP9xAaoBvv/XAaoBwf+aAaoBxP+aAaoB3P/XAaoB4f/XAaoB5P/XAaoCB/9xAaoCC/9xAaoCbv/XAaoCfP+aAaoCgP+uAaoCgv+uAaoCl//XAaoCm//XAaoCp//XAaoCqf+aAaoCqv/XAaoCtf9xAaoCtv/XAaoCt/+FAaoCuf+FAaoCvf+aAaoCvv/XAaoCv/+aAaoCwP/XAaoCwf+aAaoCwv/XAaoCxf+aAaoCx/+aAaoC1P+aAaoC1f/XAaoC4f/XAaoC4//XAaoC/f+aAaoC/v/XAaoDA//XAaoDDf9xAaoDDv/XAaoDD/9xAaoDEP/XAaoDF/+aAaoDGP/XAasABf/XAasACv/XAasBqv/sAasBwf/XAasCB//XAasCC//XAasCcv/sAasCfP/XAasCv//XAasCwf/XAasCxf/XAasCx//XAasC1P/XAasC2f/sAasC2//sAasC3f/sAasC/f/XAawAD/+uAawAEf+uAawCCP+uAawCDP+uAawCgP/sAawCgv/sAawCt//sAawCuf/sAawDDf/XAawDD//XAa0AD/+FAa0AEP+uAa0AEf+FAa0Bn//XAa0BpP+aAa0Bqv9xAa0Brv+aAa0Btf+aAa0BuP/XAa0Bu//XAa0BvAApAa0Bvv+uAa0BzP+aAa0Bzf+aAa0Bzv+FAa0Bz/9xAa0B0P/XAa0B0f/XAa0B0v+aAa0B0/+aAa0B1P+aAa0B1f+FAa0B1v+aAa0B1/+aAa0B2P9xAa0B2f+aAa0B2v+aAa0B2/9xAa0B3P+uAa0B3f+uAa0B3v9xAa0B3//XAa0B4P+aAa0B4f+aAa0B4v+aAa0B4/+aAa0B5P+uAa0B5f+aAa0B5v+aAa0B5//XAa0B6P+aAa0B6f/DAa0B6v9xAa0B7P+aAa0B7f9xAa0B7v+FAa0B8v+FAa0B8/+aAa0B9f+aAa0B9v+uAa0B9/+aAa0B+f+aAa0CAv+uAa0CA/+uAa0CBP+uAa0CCP+FAa0CDP+FAa0Cav9xAa0Ca/+aAa0CbP/XAa0Cbf/XAa0Ccf+aAa0Ccv9xAa0Cc/+FAa0Cdf+aAa0Cd/+aAa0Cef+aAa0Cff+aAa0Cfv/XAa0Cf/9xAa0Cgf/XAa0Cg//XAa0ChP/XAa0Chf9xAa0Chv/XAa0Ch/9xAa0CiP/XAa0Cif9xAa0Civ/XAa0Ci//XAa0CjP/XAa0Cjf9xAa0Clv+aAa0Cmv+aAa0Cnv+aAa0CoP/XAa0Cov/XAa0CpP+aAa0Cpv+aAa0Cqv+uAa0CrP+aAa0Crv+aAa0CsP+aAa0Csf/XAa0Csv9xAa0Cs//XAa0CtP9xAa0CtQApAa0Ctv+uAa0CuP+uAa0Cuv+uAa0CvP/XAa0Cvv+uAa0CwP+aAa0Cwv+aAa0CxP+aAa0Cxf+aAa0Cxv9xAa0Cx/+aAa0CyP9xAa0Cy//XAa0Czf+aAa0Czv+aAa0Cz/+FAa0C0f+aAa0C0/+aAa0C1f+aAa0C1/+aAa0C2f9xAa0C2/9xAa0C3f9xAa0C4P9xAa0C5v/XAa0C6P/XAa0C6v/DAa0C7P+aAa0C7v+aAa0C7//XAa0C8P9xAa0C8f/XAa0C8v9xAa0C8//XAa0C9P9xAa0C9v/XAa0C+P+uAa0C+v+uAa0C/P+uAa0C/v+aAa0DAP+aAa0DAv+aAa0DBv/XAa0DCP/XAa0DCf9xAa0DCv9xAa0DC/9xAa0DDP9xAa0DDv+aAa0DEP+aAa0DEf+aAa0DEv+FAa0DFP+aAa0DFf/XAa0DFv9xAa0DGP+uAa0DGv9xAa0DG/+aAa0DHP+FAa4BowDhAa4C6gApAa4DDv/XAa4DEP/XAbABn//XAbABuP/XAbABu//XAbABvv/XAbABwf/XAbAB4f/XAbACbP/XAbACfP/XAbACfv/XAbAChP/XAbAChv/XAbACiP/XAbACiv/XAbACjP/XAbACsf/XAbACs//XAbACv//XAbACwP/XAbACwf/XAbACwv/XAbACxf+aAbACx/+aAbAC1P/XAbAC1f/XAbAC7//XAbAC8f/XAbAC8//XAbAC/f/XAbAC/v/XAbADCf/XAbADC//XAbADDv/XAbADEP/XAbADFf/XAbADGf/sAbEAD/+uAbEAEf+uAbECCP+uAbECDP+uAbECgP/sAbECgv/sAbECt//sAbECuf/sAbEDDf/XAbEDD//XAbQBn//XAbQBuP/XAbQBu//XAbQBvv/XAbQBwf/XAbQB4f/XAbQCbP/XAbQCfP/XAbQCfv/XAbQChP/XAbQChv/XAbQCiP/XAbQCiv/XAbQCjP/XAbQCsf/XAbQCs//XAbQCv//XAbQCwP/XAbQCwf/XAbQCwv/XAbQCxf+aAbQCx/+aAbQC1P/XAbQC1f/XAbQC7//XAbQC8f/XAbQC8//XAbQC/f/XAbQC/v/XAbQDCf/XAbQDC//XAbQDDv/XAbQDEP/XAbQDFf/XAbQDGf/sAbgAD/+uAbgAEf+uAbgBnf/sAbgBpP/XAbgBpv/sAbgBqP/XAbgBqv/XAbgBrv/XAbgBsP/XAbgBsf/sAbgBtf/XAbgBvP/DAbgBvf/XAbgBv//XAbgBwf/XAbgBxP/sAbgBx//sAbgBzv/sAbgB1f/sAbgB8v/sAbgCCP+uAbgCDP+uAbgCcv/XAbgCc//sAbgCev/sAbgCfP/XAbgCgP/sAbgCgv/sAbgCn//XAbgCof/sAbgCqf/sAbgCtf/DAbgCt//sAbgCuf/sAbgCu//XAbgCvf/sAbgCv//XAbgCwf/XAbgCyv/XAbgCzv/XAbgCz//sAbgC1P/XAbgC2f/XAbgC2//XAbgC3f/XAbgC5f/XAbgC5//sAbgC9f/sAbgC9//XAbgC+f/XAbgC+//XAbgC/f/XAbgDBf/XAbgDB//XAbgDDf/XAbgDD//XAbgDEf/XAbgDEv/sAbgDF//sAbgDG//XAbgDHP/sAboAD/72AboAEf72AboBpP+FAboBqv+aAboBrv+FAboBsP/XAboBtf+FAboBv//XAboBzv+aAboB1f+aAboB8v+aAboCCP72AboCDP72AboCcv+aAboCc/+aAboCdv/sAboCn//XAboCu//XAboCyv/XAboCzv+FAboCz/+aAboC2f+aAboC2/+aAboC3f+aAboC5f/XAboDBf/XAboDB//XAboDCf+uAboDC/+uAboDEf+FAboDEv+aAboDG/+FAboDHP+aAbsBn//XAbsBuP/XAbsBu//XAbsBvv/XAbsB4f/XAbsCbP/XAbsCfv/XAbsChP/XAbsChv/XAbsCiP/XAbsCiv/XAbsCjP/XAbsCsf/XAbsCs//XAbsCwP/XAbsCwv/XAbsCxf/XAbsCx//XAbsC1f/XAbsC7//XAbsC8f/XAbsC8//XAbsC/v/XAbsDCf/XAbsDC//XAbsDDv/XAbsDEP/XAbsDFf/XAbwAD/+FAbwAEP+uAbwAEf+FAbwBn//XAbwBpP+aAbwBqv9xAbwBrv+aAbwBtf+aAbwBuP/XAbwBu//XAbwBvAApAbwBvv+uAbwBzP+aAbwBzf+aAbwBzv+FAbwBz/9xAbwB0P/XAbwB0f/XAbwB0v+aAbwB0/+aAbwB1P+aAbwB1f+FAbwB1v+aAbwB1/+aAbwB2P9xAbwB2f+aAbwB2v+aAbwB2/9xAbwB3P+uAbwB3f+uAbwB3v9xAbwB3//XAbwB4P+aAbwB4f+aAbwB4v+aAbwB4/+aAbwB5P+uAbwB5f+aAbwB5v+aAbwB5//XAbwB6P+aAbwB6f/DAbwB6v9xAbwB7P+aAbwB7f9xAbwB7v+FAbwB8v+FAbwB8/+aAbwB9f+aAbwB9v+uAbwB9/+aAbwB+f+aAbwCAv+uAbwCA/+uAbwCBP+uAbwCCP+FAbwCDP+FAbwCav9xAbwCa/+aAbwCbP/XAbwCbf/XAbwCcf+aAbwCcv9xAbwCc/+FAbwCdf+aAbwCd/+aAbwCef+aAbwCff+aAbwCfv/XAbwCf/9xAbwCgf/XAbwCg//XAbwChP/XAbwChf9xAbwChv/XAbwCh/9xAbwCiP/XAbwCif9xAbwCiv/XAbwCi//XAbwCjP/XAbwCjf9xAbwClv+aAbwCmv+aAbwCnv+aAbwCoP/XAbwCov/XAbwCpP+aAbwCpv+aAbwCqv+uAbwCrP+aAbwCrv+aAbwCsP+aAbwCsf/XAbwCsv9xAbwCs//XAbwCtP9xAbwCtQApAbwCtv+uAbwCuP+uAbwCuv+uAbwCvP/XAbwCvv+uAbwCwP+aAbwCwv+aAbwCxP+aAbwCxf+aAbwCxv9xAbwCx/+aAbwCyP9xAbwCy//XAbwCzf+aAbwCzv+aAbwCz/+FAbwC0f+aAbwC0/+aAbwC1f+aAbwC1/+aAbwC2f9xAbwC2/9xAbwC3f9xAbwC4P9xAbwC5v/XAbwC6P/XAbwC6v/DAbwC7P+aAbwC7v+aAbwC7//XAbwC8P9xAbwC8f/XAbwC8v9xAbwC8//XAbwC9P9xAbwC9v/XAbwC+P+uAbwC+v+uAbwC/P+uAbwC/v+aAbwDAP+aAbwDAv+aAbwDBv/XAbwDCP/XAbwDCf9xAbwDCv9xAbwDC/9xAbwDDP9xAbwDDv+aAbwDEP+aAbwDEf+aAbwDEv+FAbwDFP+aAbwDFf/XAbwDFv9xAbwDGP+uAbwDGv9xAbwDG/+aAbwDHP+FAb0AD/+FAb0AEf+FAb0Bn//sAb0BpP+aAb0Bqv9xAb0Brv+aAb0Btf+aAb0BuP/sAb0Bu//sAb0Bvv/DAb0Byf/sAb0Bzv+uAb0Bz//XAb0B1f+uAb0B2P/XAb0B2//XAb0B3v/XAb0B4f/XAb0B6v/XAb0B6wBmAb0B7f/XAb0B7v/sAb0B8v+uAb0B9ABmAb0CCP+FAb0CDP+FAb0Cav/XAb0CbP/sAb0Ccv9xAb0Cc/+uAb0Cfv/sAb0Cf//XAb0ChP/sAb0Chf/XAb0Chv/sAb0Ch//XAb0CiP/sAb0Cif/XAb0Civ/sAb0CjP/sAb0Cjf/XAb0CmABmAb0CqABmAb0Csf/sAb0Csv/XAb0Cs//sAb0CtP/XAb0CwP/XAb0Cwv/XAb0Cxf/XAb0Cxv/DAb0Cx//XAb0CyP/DAb0Czv+aAb0Cz/+uAb0C1f/XAb0C2f9xAb0C2/9xAb0C3f9xAb0C4P/XAb0C7//sAb0C8P/XAb0C8f/sAb0C8v/XAb0C8//sAb0C9P/XAb0C/v/XAb0DCf9xAb0DCv/XAb0DC/9xAb0DDP/XAb0DEf+aAb0DEv+uAb0DFf/sAb0DFv/XAb0DGv/XAb0DG/+aAb0DHP+uAb4AD/+uAb4AEf+uAb4Bnf/XAb4BpP/XAb4Bpv/XAb4BqP/DAb4Bqv/XAb4Brv/XAb4BsP/XAb4Bsf/XAb4Btf/XAb4BvP/DAb4Bvf/DAb4Bv//XAb4BxP/XAb4Bx//XAb4Bzv/sAb4B1f/sAb4B8v/sAb4CCP+uAb4CDP+uAb4Ccv/XAb4Cc//sAb4Cev/XAb4CgP/sAb4Cgv/sAb4Cn//XAb4Cof/XAb4Cqf/XAb4Ctf/DAb4Ct//DAb4Cuf/DAb4Cu//XAb4Cvf/XAb4Cyv/XAb4Czv/XAb4Cz//sAb4C2f/XAb4C2//XAb4C3f/XAb4C5f/XAb4C5//XAb4C9f/XAb4C9//DAb4C+f/DAb4C+//DAb4DBf/XAb4DB//XAb4DDf/XAb4DD//XAb4DEf/XAb4DEv/sAb4DF//XAb4DG//XAb4DHP/sAb8Bn//XAb8BuP/XAb8Bu//XAb8Bvv/XAb8Bwf/XAb8B4f/XAb8CbP/XAb8CfP/XAb8Cfv/XAb8ChP/XAb8Chv/XAb8CiP/XAb8Civ/XAb8CjP/XAb8Csf/XAb8Cs//XAb8Cv//XAb8CwP/XAb8Cwf/XAb8Cwv/XAb8Cxf+aAb8Cx/+aAb8C1P/XAb8C1f/XAb8C7//XAb8C8f/XAb8C8//XAb8C/f/XAb8C/v/XAb8DCf/XAb8DC//XAb8DDv/XAb8DEP/XAb8DFf/XAb8DGf/sAcABowDhAcAC6gApAcADDv/XAcADEP/XAcMBowDhAcMC6gApAcMDDv/XAcMDEP/XAcQABf+uAcQACv+uAcQBnf+FAcQBpv+FAcQBqP/XAcQBvP+aAcQBvf/XAcQBwf+aAcQBxP+FAcQB3P/XAcQB3f/XAcQB4f/XAcQB5P/XAcQB9v/XAcQCB/+uAcQCC/+uAcQCbv+uAcQCfP+aAcQCgP+uAcQCgv+uAcQCl/+uAcQCm/+uAcQCp/+uAcQCqf+FAcQCqv/XAcQCtf+aAcQCtv/XAcQCt/+aAcQCuP/XAcQCuf+aAcQCuv/XAcQCvf+FAcQCvv/XAcQCv/+aAcQCwP/XAcQCwf+aAcQCwv/XAcQC1P+aAcQC1f/XAcQC9//XAcQC+P/XAcQC+f/XAcQC+v/XAcQC+//XAcQC/P/XAcQC/f+aAcQC/v/XAcQDA/+uAcQDDf+aAcQDDv/DAcQDD/+aAcQDEP/DAcQDF/+FAcQDGP/XAcYABf+uAcYACv+uAcYBnf+FAcYBpv+FAcYBqP/XAcYBvP+aAcYBvf/XAcYBwf+aAcYBxP+FAcYB3P/XAcYB3f/XAcYB4f/XAcYB5P/XAcYB9v/XAcYCB/+uAcYCC/+uAcYCbv+uAcYCfP+aAcYCgP+uAcYCgv+uAcYCl/+uAcYCm/+uAcYCp/+uAcYCqf+FAcYCqv/XAcYCtf+aAcYCtv/XAcYCt/+aAcYCuP/XAcYCuf+aAcYCuv/XAcYCvf+FAcYCvv/XAcYCv/+aAcYCwP/XAcYCwf+aAcYCwv/XAcYC1P+aAcYC1f/XAcYC9//XAcYC+P/XAcYC+f/XAcYC+v/XAcYC+//XAcYC/P/XAcYC/f+aAcYC/v/XAcYDA/+uAcYDDf+aAcYDDv/DAcYDD/+aAcYDEP/DAcYDF/+FAcYDGP/XAccAD/+uAccAEf+uAccBnf/sAccBpP/XAccBpv/sAccBqP/XAccBqv/XAccBrv/XAccBsP/XAccBsf/sAccBtf/XAccBvP/DAccBvf/XAccBv//XAccBwf/XAccBxP/sAccBx//sAccBzv/sAccB1f/sAccB8v/sAccCCP+uAccCDP+uAccCcv/XAccCc//sAccCev/sAccCfP/XAccCgP/sAccCgv/sAccCn//XAccCof/sAccCqf/sAccCtf/DAccCt//sAccCuf/sAccCu//XAccCvf/sAccCv//XAccCwf/XAccCyv/XAccCzv/XAccCz//sAccC1P/XAccC2f/XAccC2//XAccC3f/XAccC5f/XAccC5//sAccC9f/sAccC9//XAccC+f/XAccC+//XAccC/f/XAccDBf/XAccDB//XAccDDf/XAccDD//XAccDEf/XAccDEv/sAccDF//sAccDG//XAccDHP/sAcgAD/+uAcgAEf+uAcgBnf/sAcgBpP/XAcgBpv/sAcgBqP/XAcgBqv/XAcgBrv/XAcgBsP/XAcgBsf/sAcgBtf/XAcgBvP/DAcgBvf/XAcgBv//XAcgBwf/XAcgBxP/sAcgBx//sAcgBzv/sAcgB1f/sAcgB8v/sAcgCCP+uAcgCDP+uAcgCcv/XAcgCc//sAcgCev/sAcgCfP/XAcgCgP/sAcgCgv/sAcgCn//XAcgCof/sAcgCqf/sAcgCtf/DAcgCt//sAcgCuf/sAcgCu//XAcgCvf/sAcgCv//XAcgCwf/XAcgCyv/XAcgCzv/XAcgCz//sAcgC1P/XAcgC2f/XAcgC2//XAcgC3f/XAcgC5f/XAcgC5//sAcgC9f/sAcgC9//XAcgC+f/XAcgC+//XAcgC/f/XAcgDBf/XAcgDB//XAcgDDf/XAcgDD//XAcgDEf/XAcgDEv/sAcgDF//sAcgDG//XAcgDHP/sAcoABf/sAcoACv/sAcoCB//sAcoCC//sAcwB6QApAc0AD/+aAc0AEP/XAc0AEf+aAc0Bzv/DAc0Bz//sAc0B1f/DAc0B2P/sAc0B2//sAc0B3v/sAc0B6v/sAc0B7f/sAc0B8v/DAc0CAv/XAc0CA//XAc0CBP/XAc0CCP+aAc0CDP+aAc0Cav/sAc0Cc//DAc0Cf//sAc0Chf/sAc0Ch//sAc0Cif/sAc0Cjf/sAc0Csv/sAc0CtP/sAc0Cz//DAc0C4P/sAc0C8P/sAc0C8v/sAc0C9P/sAc0DCv/sAc0DDP/sAc0DEv/DAc0DFv/sAc0DGv/sAc0DHP/DAc4ABf/sAc4ACv/sAc4CB//sAc4CC//sAc8ABf/sAc8ACv/sAc8CB//sAc8CC//sAdABz//XAdAB2P/XAdAB2//XAdAB3v/XAdAB4f/XAdAB6v/XAdAB7f/XAdACav/XAdACf//XAdAChf/XAdACh//XAdACif/XAdACjf/XAdACsv/XAdACtP/XAdACwP/XAdACwv/XAdACxv/XAdACyP/XAdAC1f/XAdAC4P/XAdAC8P/XAdAC8v/XAdAC9P/XAdAC/v/XAdADCv/XAdADDP/XAdADFv/XAdADGv/XAdEB6QApAdQBz//XAdQB2P/XAdQB2//XAdQB3v/XAdQB4f/XAdQB6v/XAdQB7f/XAdQCav/XAdQCf//XAdQChf/XAdQCh//XAdQCif/XAdQCjf/XAdQCsv/XAdQCtP/XAdQCwP/XAdQCwv/XAdQCxv/XAdQCyP/XAdQC1f/XAdQC4P/XAdQC8P/XAdQC8v/XAdQC9P/XAdQC/v/XAdQDCv/XAdQDDP/XAdQDFv/XAdQDGv/XAdgABf/sAdgACv/sAdgB0P/XAdgB3P/sAdgB3f/sAdgB3//XAdgB4f/sAdgB5P/sAdgB9v/sAdgCB//sAdgCC//sAdgCoP/XAdgCqv/sAdgCtv/sAdgCvP/XAdgCvv/sAdgCwP/sAdgCwv/sAdgCy//XAdgC1f/sAdgC5v/XAdgC+P/sAdgC+v/sAdgC/P/sAdgC/v/sAdgDBv/XAdgDCP/XAdgDDv/sAdgDEP/sAdgDGP/sAdoABf/sAdoACv/sAdoB0P/XAdoB3P/sAdoB3f/sAdoB3//XAdoB4f/sAdoB5P/sAdoB9v/sAdoCB//sAdoCC//sAdoCoP/XAdoCqv/sAdoCtv/sAdoCvP/XAdoCvv/sAdoCwP/sAdoCwv/sAdoCy//XAdoC1f/sAdoC5v/XAdoC+P/sAdoC+v/sAdoC/P/sAdoC/v/sAdoDBv/XAdoDCP/XAdoDDv/sAdoDEP/sAdoDGP/sAdwAD/+aAdwAEP/XAdwAEf+aAdwBzv/DAdwBz//sAdwB1f/DAdwB2P/sAdwB2//sAdwB3v/sAdwB6v/sAdwB7f/sAdwB8v/DAdwCAv/XAdwCA//XAdwCBP/XAdwCCP+aAdwCDP+aAdwCav/sAdwCc//DAdwCf//sAdwChf/sAdwCh//sAdwCif/sAdwCjf/sAdwCsv/sAdwCtP/sAdwCz//DAdwC4P/sAdwC8P/sAdwC8v/sAdwC9P/sAdwDCv/sAdwDDP/sAdwDEv/DAdwDFv/sAdwDGv/sAdwDHP/DAd0AD/+uAd0AEf+uAd0Bzv/XAd0B1f/XAd0B8v/XAd0CCP+uAd0CDP+uAd0Cc//XAd0Cz//XAd0DEv/XAd0DHP/XAd4ABf/sAd4ACv/sAd4B0P/XAd4B3P/sAd4B3f/sAd4B3//XAd4B4f/sAd4B5P/sAd4B9v/sAd4CB//sAd4CC//sAd4CoP/XAd4Cqv/sAd4Ctv/sAd4CvP/XAd4Cvv/sAd4CwP/sAd4Cwv/sAd4Cy//XAd4C1f/sAd4C5v/XAd4C+P/sAd4C+v/sAd4C/P/sAd4C/v/sAd4DBv/XAd4DCP/XAd4DDv/sAd4DEP/sAd4DGP/sAd8Bz//XAd8B2P/XAd8B2//XAd8B3v/XAd8B4f/XAd8B6v/XAd8B7f/XAd8Cav/XAd8Cf//XAd8Chf/XAd8Ch//XAd8Cif/XAd8Cjf/XAd8Csv/XAd8CtP/XAd8CwP/XAd8Cwv/XAd8Cxv/XAd8CyP/XAd8C1f/XAd8C4P/XAd8C8P/XAd8C8v/XAd8C9P/XAd8C/v/XAd8DCv/XAd8DDP/XAd8DFv/XAd8DGv/XAeAABf/sAeAACv/sAeACB//sAeACC//sAeMABf/sAeMACv/sAeMCB//sAeMCC//sAeQABf+FAeQACv+FAeQB0P/XAeQB3P+aAeQB3f/DAeQB3//XAeQB4f+uAeQB5P+aAeQB9v/DAeQCB/+FAeQCC/+FAeQCbf/XAeQCgf/XAeQCg//XAeQCi//XAeQCoP/XAeQCqv+aAeQCtv+aAeQCuP/DAeQCuv/DAeQCvP/XAeQCvv+aAeQCwP+uAeQCwv+uAeQCxv/XAeQCyP/XAeQCy//XAeQC1f+uAeQC5v/XAeQC6v/XAeQC+P/DAeQC+v/DAeQC/P/DAeQC/v+uAeQDBv/XAeQDCP/XAeQDDv+aAeQDEP+aAeQDGP+aAeYABf+FAeYACv+FAeYB0P/XAeYB3P+aAeYB3f/DAeYB3//XAeYB4f+uAeYB5P+aAeYB9v/DAeYCB/+FAeYCC/+FAeYCbf/XAeYCgf/XAeYCg//XAeYCi//XAeYCoP/XAeYCqv+aAeYCtv+aAeYCuP/DAeYCuv/DAeYCvP/XAeYCvv+aAeYCwP+uAeYCwv+uAeYCxv/XAeYCyP/XAeYCy//XAeYC1f+uAeYC5v/XAeYC6v/XAeYC+P/DAeYC+v/DAeYC/P/DAeYC/v+uAeYDBv/XAeYDCP/XAeYDDv+aAeYDEP+aAeYDGP+aAecABf/sAecACv/sAecB0P/XAecB3P/sAecB3f/sAecB3//XAecB4f/sAecB5P/sAecB9v/sAecCB//sAecCC//sAecCoP/XAecCqv/sAecCtv/sAecCvP/XAecCvv/sAecCwP/sAecCwv/sAecCy//XAecC1f/sAecC5v/XAecC+P/sAecC+v/sAecC/P/sAecC/v/sAecDBv/XAecDCP/XAecDDv/sAecDEP/sAecDGP/sAegABf/sAegACv/sAegB0P/XAegB3P/sAegB3f/sAegB3//XAegB4f/sAegB5P/sAegB9v/sAegCB//sAegCC//sAegCoP/XAegCqv/sAegCtv/sAegCvP/XAegCvv/sAegCwP/sAegCwv/sAegCy//XAegC1f/sAegC5v/XAegC+P/sAegC+v/sAegC/P/sAegC/v/sAegDBv/XAegDCP/XAegDDv/sAegDEP/sAegDGP/sAeoABf/sAeoACv/sAeoCB//sAeoCC//sAesABf/sAesACv/sAesCB//sAesCC//sAesDDv/XAesDEP/XAewAD/+aAewAEP/XAewAEf+aAewBzv/DAewBz//sAewB1f/DAewB2P/sAewB2//sAewB3v/sAewB6v/sAewB7f/sAewB8v/DAewCAv/XAewCA//XAewCBP/XAewCCP+aAewCDP+aAewCav/sAewCc//DAewCf//sAewChf/sAewCh//sAewCif/sAewCjf/sAewCsv/sAewCtP/sAewCz//DAewC4P/sAewC8P/sAewC8v/sAewC9P/sAewDCv/sAewDDP/sAewDEv/DAewDFv/sAewDGv/sAewDHP/DAfIABf+FAfIACv+FAfIB0P/XAfIB3P+aAfIB3f/DAfIB3//XAfIB4f+uAfIB5P+aAfIB9v/DAfICB/+FAfICC/+FAfICbf/XAfICgf/XAfICg//XAfICi//XAfICoP/XAfICqv+aAfICtv+aAfICuP/DAfICuv/DAfICvP/XAfICvv+aAfICwP+uAfICwv+uAfICxv/XAfICyP/XAfICy//XAfIC1f+uAfIC5v/XAfIC6v/XAfIC+P/DAfIC+v/DAfIC/P/DAfIC/v+uAfIDBv/XAfIDCP/XAfIDDv+aAfIDEP+aAfIDGP+aAfMABf+FAfMACv+FAfMB0P/XAfMB3P+aAfMB3f/DAfMB3//XAfMB4f+uAfMB5P+aAfMB9v/DAfMCB/+FAfMCC/+FAfMCbf/XAfMCgf/XAfMCg//XAfMCi//XAfMCoP/XAfMCqv+aAfMCtv+aAfMCuP/DAfMCuv/DAfMCvP/XAfMCvv+aAfMCwP+uAfMCwv+uAfMCxv/XAfMCyP/XAfMCy//XAfMC1f+uAfMC5v/XAfMC6v/XAfMC+P/DAfMC+v/DAfMC/P/DAfMC/v+uAfMDBv/XAfMDCP/XAfMDDv+aAfMDEP+aAfMDGP+aAfQABf/sAfQACv/sAfQCB//sAfQCC//sAfQDDv/XAfQDEP/XAfUBz//XAfUB2P/XAfUB2//XAfUB3v/XAfUB4f/XAfUB6v/XAfUB7f/XAfUCav/XAfUCf//XAfUChf/XAfUCh//XAfUCif/XAfUCjf/XAfUCsv/XAfUCtP/XAfUCwP/XAfUCwv/XAfUCxv/XAfUCyP/XAfUC1f/XAfUC4P/XAfUC8P/XAfUC8v/XAfUC9P/XAfUC/v/XAfUDCv/XAfUDDP/XAfUDFv/XAfUDGv/XAfYAD/+uAfYAEf+uAfYBzv/XAfYB1f/XAfYB8v/XAfYCCP+uAfYCDP+uAfYCc//XAfYCz//XAfYDEv/XAfYDHP/XAfgAD/+FAfgAEP+uAfgAEf+FAfgBn//XAfgBpP+aAfgBqv9xAfgBrv+aAfgBtf+aAfgBuP/XAfgBu//XAfgBvAApAfgBvv+uAfgBzP+aAfgBzf+aAfgBzv+FAfgBz/9xAfgB0P/XAfgB0f/XAfgB0v+aAfgB0/+aAfgB1P+aAfgB1f+FAfgB1v+aAfgB1/+aAfgB2P9xAfgB2f+aAfgB2v+aAfgB2/9xAfgB3P+uAfgB3f+uAfgB3v9xAfgB3//XAfgB4P+aAfgB4f+aAfgB4v+aAfgB4/+aAfgB5P+uAfgB5f+aAfgB5v+aAfgB5//XAfgB6P+aAfgB6f/DAfgB6v9xAfgB7P+aAfgB7f9xAfgB7v+FAfgB8v+FAfgB8/+aAfgB9f+aAfgB9v+uAfgB9/+aAfgB+f+aAfgCAv+uAfgCA/+uAfgCBP+uAfgCCP+FAfgCDP+FAfgCav9xAfgCa/+aAfgCbP/XAfgCbf/XAfgCcf+aAfgCcv9xAfgCc/+FAfgCdf+aAfgCd/+aAfgCef+aAfgCff+aAfgCfv/XAfgCf/9xAfgCgf/XAfgCg//XAfgChP/XAfgChf9xAfgChv/XAfgCh/9xAfgCiP/XAfgCif9xAfgCiv/XAfgCi//XAfgCjP/XAfgCjf9xAfgClv+aAfgCmv+aAfgCnv+aAfgCoP/XAfgCov/XAfgCpP+aAfgCpv+aAfgCqv+uAfgCrP+aAfgCrv+aAfgCsP+aAfgCsf/XAfgCsv9xAfgCs//XAfgCtP9xAfgCtQApAfgCtv+uAfgCuP+uAfgCuv+uAfgCvP/XAfgCvv+uAfgCwP+aAfgCwv+aAfgCxP+aAfgCxf+aAfgCxv9xAfgCx/+aAfgCyP9xAfgCy//XAfgCzf+aAfgCzv+aAfgCz/+FAfgC0f+aAfgC0/+aAfgC1f+aAfgC1/+aAfgC2f9xAfgC2/9xAfgC3f9xAfgC4P9xAfgC5v/XAfgC6P/XAfgC6v/DAfgC7P+aAfgC7v+aAfgC7//XAfgC8P9xAfgC8f/XAfgC8v9xAfgC8//XAfgC9P9xAfgC9v/XAfgC+P+uAfgC+v+uAfgC/P+uAfgC/v+aAfgDAP+aAfgDAv+aAfgDBv/XAfgDCP/XAfgDCf9xAfgDCv9xAfgDC/9xAfgDDP9xAfgDDv+aAfgDEP+aAfgDEf+aAfgDEv+FAfgDFP+aAfgDFf/XAfgDFv9xAfgDGP+uAfgDGv9xAfgDG/+aAfgDHP+FAfkAD/+aAfkAEP/XAfkAEf+aAfkBzv/DAfkBz//sAfkB1f/DAfkB2P/sAfkB2//sAfkB3v/sAfkB6v/sAfkB7f/sAfkB8v/DAfkCAv/XAfkCA//XAfkCBP/XAfkCCP+aAfkCDP+aAfkCav/sAfkCc//DAfkCf//sAfkChf/sAfkCh//sAfkCif/sAfkCjf/sAfkCsv/sAfkCtP/sAfkCz//DAfkC4P/sAfkC8P/sAfkC8v/sAfkC9P/sAfkDCv/sAfkDDP/sAfkDEv/DAfkDFv/sAfkDGv/sAfkDHP/DAfoAD/+aAfoAEf+aAfoAIgApAfoAJP+uAfoAJv/sAfoAKv/sAfoAMv/sAfoANP/sAfoARP/XAfoARv/XAfoAR//XAfoASP/XAfoASv/sAfoAUP/sAfoAUf/sAfoAUv/XAfoAU//sAfoAVP/XAfoAVf/sAfoAVv/sAfoAWP/sAfoAgv+uAfoAg/+uAfoAhP+uAfoAhf+uAfoAhv+uAfoAh/+uAfoAif/sAfoAlP/sAfoAlf/sAfoAlv/sAfoAl//sAfoAmP/sAfoAmv/sAfoAov/XAfoAo//XAfoApP/XAfoApf/XAfoApv/XAfoAp//XAfoAqP/XAfoAqf/XAfoAqv/XAfoAq//XAfoArP/XAfoArf/XAfoAtP/XAfoAtf/XAfoAtv/XAfoAt//XAfoAuP/XAfoAuv/XAfoAu//sAfoAvP/sAfoAvf/sAfoAvv/sAfoAwv+uAfoAw//XAfoAxP+uAfoAxf/XAfoAxv+uAfoAx//XAfoAyP/sAfoAyf/XAfoAyv/sAfoAy//XAfoAzP/sAfoAzf/XAfoAzv/sAfoAz//XAfoA0f/XAfoA0//XAfoA1f/XAfoA1//XAfoA2f/XAfoA2//XAfoA3f/XAfoA3v/sAfoA3//sAfoA4P/sAfoA4f/sAfoA4v/sAfoA4//sAfoA5P/sAfoA5f/sAfoA+v/sAfoBBv/sAfoBCP/sAfoBDf/sAfoBDv/sAfoBD//XAfoBEP/sAfoBEf/XAfoBEv/sAfoBE//XAfoBFP/sAfoBFf/XAfoBF//sAfoBGf/sAfoBHf/sAfoBIf/sAfoBK//sAfoBLf/sAfoBL//sAfoBMf/sAfoBM//sAfoBNf/sAfoBQ/+uAfoBRP/XAfoBRv/XAfoBR//sAfoBSP/XAfoBSv/sAfoCCP+aAfoCDP+aAfoCV//sAfoCWP+uAfoCWf/XAfoCX//sAfoCYP/XAfoCYv/sAfoDHf+uAfoDHv/XAfoDH/+uAfoDIP/XAfoDIf+uAfoDIv/XAfoDI/+uAfoDJf+uAfoDJv/XAfoDJ/+uAfoDKP/XAfoDKf+uAfoDKv/XAfoDK/+uAfoDLP/XAfoDLf+uAfoDLv/XAfoDL/+uAfoDMP/XAfoDMf+uAfoDMv/XAfoDM/+uAfoDNP/XAfoDNv/XAfoDOP/XAfoDOv/XAfoDPP/XAfoDQP/XAfoDQv/XAfoDRP/XAfoDSf/sAfoDSv/XAfoDS//sAfoDTP/XAfoDTf/sAfoDTv/XAfoDT//sAfoDUf/sAfoDUv/XAfoDU//sAfoDVP/XAfoDVf/sAfoDVv/XAfoDV//sAfoDWP/XAfoDWf/sAfoDWv/XAfoDW//sAfoDXP/XAfoDXf/sAfoDXv/XAfoDX//sAfoDYP/XAfoDYv/sAfoDZP/sAfoDZv/sAfoDaP/sAfoDav/sAfoDbP/sAfoDbv/sAfsABQBSAfsACgBSAfsAD/+uAfsAEf+uAfsAIgApAfsCBwBSAfsCCP+uAfsCCwBSAfsCDP+uAfwAD/+aAfwAEf+aAfwAIgApAfwAJP+uAfwAJv/sAfwAKv/sAfwAMv/sAfwANP/sAfwARP/XAfwARv/XAfwAR//XAfwASP/XAfwASv/sAfwAUP/sAfwAUf/sAfwAUv/XAfwAU//sAfwAVP/XAfwAVf/sAfwAVv/sAfwAWP/sAfwAgv+uAfwAg/+uAfwAhP+uAfwAhf+uAfwAhv+uAfwAh/+uAfwAif/sAfwAlP/sAfwAlf/sAfwAlv/sAfwAl//sAfwAmP/sAfwAmv/sAfwAov/XAfwAo//XAfwApP/XAfwApf/XAfwApv/XAfwAp//XAfwAqP/XAfwAqf/XAfwAqv/XAfwAq//XAfwArP/XAfwArf/XAfwAtP/XAfwAtf/XAfwAtv/XAfwAt//XAfwAuP/XAfwAuv/XAfwAu//sAfwAvP/sAfwAvf/sAfwAvv/sAfwAwv+uAfwAw//XAfwAxP+uAfwAxf/XAfwAxv+uAfwAx//XAfwAyP/sAfwAyf/XAfwAyv/sAfwAy//XAfwAzP/sAfwAzf/XAfwAzv/sAfwAz//XAfwA0f/XAfwA0//XAfwA1f/XAfwA1//XAfwA2f/XAfwA2//XAfwA3f/XAfwA3v/sAfwA3//sAfwA4P/sAfwA4f/sAfwA4v/sAfwA4//sAfwA5P/sAfwA5f/sAfwA+v/sAfwBBv/sAfwBCP/sAfwBDf/sAfwBDv/sAfwBD//XAfwBEP/sAfwBEf/XAfwBEv/sAfwBE//XAfwBFP/sAfwBFf/XAfwBF//sAfwBGf/sAfwBHf/sAfwBIf/sAfwBK//sAfwBLf/sAfwBL//sAfwBMf/sAfwBM//sAfwBNf/sAfwBQ/+uAfwBRP/XAfwBRv/XAfwBR//sAfwBSP/XAfwBSv/sAfwCCP+aAfwCDP+aAfwCV//sAfwCWP+uAfwCWf/XAfwCX//sAfwCYP/XAfwCYv/sAfwDHf+uAfwDHv/XAfwDH/+uAfwDIP/XAfwDIf+uAfwDIv/XAfwDI/+uAfwDJf+uAfwDJv/XAfwDJ/+uAfwDKP/XAfwDKf+uAfwDKv/XAfwDK/+uAfwDLP/XAfwDLf+uAfwDLv/XAfwDL/+uAfwDMP/XAfwDMf+uAfwDMv/XAfwDM/+uAfwDNP/XAfwDNv/XAfwDOP/XAfwDOv/XAfwDPP/XAfwDQP/XAfwDQv/XAfwDRP/XAfwDSf/sAfwDSv/XAfwDS//sAfwDTP/XAfwDTf/sAfwDTv/XAfwDT//sAfwDUf/sAfwDUv/XAfwDU//sAfwDVP/XAfwDVf/sAfwDVv/XAfwDV//sAfwDWP/XAfwDWf/sAfwDWv/XAfwDW//sAfwDXP/XAfwDXf/sAfwDXv/XAfwDX//sAfwDYP/XAfwDYv/sAfwDZP/sAfwDZv/sAfwDaP/sAfwDav/sAfwDbP/sAfwDbv/sAf0ABQBSAf0ACgBSAf0AD/+uAf0AEf+uAf0AIgApAf0CBwBSAf0CCP+uAf0CCwBSAf0CDP+uAf4AD/+aAf4AEf+aAf4AIgApAf4AJP+uAf4AJv/sAf4AKv/sAf4AMv/sAf4ANP/sAf4ARP/XAf4ARv/XAf4AR//XAf4ASP/XAf4ASv/sAf4AUP/sAf4AUf/sAf4AUv/XAf4AU//sAf4AVP/XAf4AVf/sAf4AVv/sAf4AWP/sAf4Agv+uAf4Ag/+uAf4AhP+uAf4Ahf+uAf4Ahv+uAf4Ah/+uAf4Aif/sAf4AlP/sAf4Alf/sAf4Alv/sAf4Al//sAf4AmP/sAf4Amv/sAf4Aov/XAf4Ao//XAf4ApP/XAf4Apf/XAf4Apv/XAf4Ap//XAf4AqP/XAf4Aqf/XAf4Aqv/XAf4Aq//XAf4ArP/XAf4Arf/XAf4AtP/XAf4Atf/XAf4Atv/XAf4At//XAf4AuP/XAf4Auv/XAf4Au//sAf4AvP/sAf4Avf/sAf4Avv/sAf4Awv+uAf4Aw//XAf4AxP+uAf4Axf/XAf4Axv+uAf4Ax//XAf4AyP/sAf4Ayf/XAf4Ayv/sAf4Ay//XAf4AzP/sAf4Azf/XAf4Azv/sAf4Az//XAf4A0f/XAf4A0//XAf4A1f/XAf4A1//XAf4A2f/XAf4A2//XAf4A3f/XAf4A3v/sAf4A3//sAf4A4P/sAf4A4f/sAf4A4v/sAf4A4//sAf4A5P/sAf4A5f/sAf4A+v/sAf4BBv/sAf4BCP/sAf4BDf/sAf4BDv/sAf4BD//XAf4BEP/sAf4BEf/XAf4BEv/sAf4BE//XAf4BFP/sAf4BFf/XAf4BF//sAf4BGf/sAf4BHf/sAf4BIf/sAf4BK//sAf4BLf/sAf4BL//sAf4BMf/sAf4BM//sAf4BNf/sAf4BQ/+uAf4BRP/XAf4BRv/XAf4BR//sAf4BSP/XAf4BSv/sAf4CCP+aAf4CDP+aAf4CV//sAf4CWP+uAf4CWf/XAf4CX//sAf4CYP/XAf4CYv/sAf4DHf+uAf4DHv/XAf4DH/+uAf4DIP/XAf4DIf+uAf4DIv/XAf4DI/+uAf4DJf+uAf4DJv/XAf4DJ/+uAf4DKP/XAf4DKf+uAf4DKv/XAf4DK/+uAf4DLP/XAf4DLf+uAf4DLv/XAf4DL/+uAf4DMP/XAf4DMf+uAf4DMv/XAf4DM/+uAf4DNP/XAf4DNv/XAf4DOP/XAf4DOv/XAf4DPP/XAf4DQP/XAf4DQv/XAf4DRP/XAf4DSf/sAf4DSv/XAf4DS//sAf4DTP/XAf4DTf/sAf4DTv/XAf4DT//sAf4DUf/sAf4DUv/XAf4DU//sAf4DVP/XAf4DVf/sAf4DVv/XAf4DV//sAf4DWP/XAf4DWf/sAf4DWv/XAf4DW//sAf4DXP/XAf4DXf/sAf4DXv/XAf4DX//sAf4DYP/XAf4DYv/sAf4DZP/sAf4DZv/sAf4DaP/sAf4Dav/sAf4DbP/sAf4Dbv/sAf8ABQBSAf8ACgBSAf8AD/+uAf8AEf+uAf8AIgApAf8CBwBSAf8CCP+uAf8CCwBSAf8CDP+uAgAAD/+FAgAAEf+FAgAAIgApAgAAJP+FAgAAJv/XAgAAKv/XAgAAMv/XAgAANP/XAgAARP+aAgAARv+aAgAAR/+aAgAASP+aAgAASv/XAgAAUP/DAgAAUf/DAgAAUv+aAgAAU//DAgAAVP+aAgAAVf/DAgAAVv+uAgAAWP/DAgAAXf/XAgAAgv+FAgAAg/+FAgAAhP+FAgAAhf+FAgAAhv+FAgAAh/+FAgAAif/XAgAAlP/XAgAAlf/XAgAAlv/XAgAAl//XAgAAmP/XAgAAmv/XAgAAov+aAgAAo/+aAgAApP+aAgAApf+aAgAApv+aAgAAp/+aAgAAqP+aAgAAqf+aAgAAqv+aAgAAq/+aAgAArP+aAgAArf+aAgAAtP+aAgAAtf+aAgAAtv+aAgAAt/+aAgAAuP+aAgAAuv+aAgAAu//DAgAAvP/DAgAAvf/DAgAAvv/DAgAAwv+FAgAAw/+aAgAAxP+FAgAAxf+aAgAAxv+FAgAAx/+aAgAAyP/XAgAAyf+aAgAAyv/XAgAAy/+aAgAAzP/XAgAAzf+aAgAAzv/XAgAAz/+aAgAA0f+aAgAA0/+aAgAA1f+aAgAA1/+aAgAA2f+aAgAA2/+aAgAA3f+aAgAA3v/XAgAA3//XAgAA4P/XAgAA4f/XAgAA4v/XAgAA4//XAgAA5P/XAgAA5f/XAgAA+v/DAgABBv/DAgABCP/DAgABDf/DAgABDv/XAgABD/+aAgABEP/XAgABEf+aAgABEv/XAgABE/+aAgABFP/XAgABFf+aAgABF//DAgABGf/DAgABHf+uAgABIf+uAgABK//DAgABLf/DAgABL//DAgABMf/DAgABM//DAgABNf/DAgABPP/XAgABPv/XAgABQP/XAgABQ/+FAgABRP+aAgABRv+aAgABR//XAgABSP+aAgABSv+uAgACCP+FAgACDP+FAgACV//DAgACWP+FAgACWf+aAgACX//XAgACYP+aAgACYv/DAgADHf+FAgADHv+aAgADH/+FAgADIP+aAgADIf+FAgADIv+aAgADI/+FAgADJf+FAgADJv+aAgADJ/+FAgADKP+aAgADKf+FAgADKv+aAgADK/+FAgADLP+aAgADLf+FAgADLv+aAgADL/+FAgADMP+aAgADMf+FAgADMv+aAgADM/+FAgADNP+aAgADNv+aAgADOP+aAgADOv+aAgADPP+aAgADQP+aAgADQv+aAgADRP+aAgADSf/XAgADSv+aAgADS//XAgADTP+aAgADTf/XAgADTv+aAgADT//XAgADUf/XAgADUv+aAgADU//XAgADVP+aAgADVf/XAgADVv+aAgADV//XAgADWP+aAgADWf/XAgADWv+aAgADW//XAgADXP+aAgADXf/XAgADXv+aAgADX//XAgADYP+aAgADYv/DAgADZP/DAgADZv/DAgADaP/DAgADav/DAgADbP/DAgADbv/DAgEABQBSAgEACgBSAgEAD/+uAgEAEf+uAgEAIgApAgECBwBSAgECCP+uAgECCwBSAgECDP+uAgIAN/+uAgIBJP+uAgIBJv+uAgIBcf+uAgIBnf+uAgIBpv+uAgIBvP+uAgIBxP+uAgIB3P/XAgIB5P/XAgICqf+uAgICqv/XAgICtf+uAgICtv/XAgICvf+uAgICvv/XAgIDF/+uAgIDGP/XAgIDj/+uAgMAN/+uAgMBJP+uAgMBJv+uAgMBcf+uAgMBnf+uAgMBpv+uAgMBvP+uAgMBxP+uAgMB3P/XAgMB5P/XAgMCqf+uAgMCqv/XAgMCtf+uAgMCtv/XAgMCvf+uAgMCvv/XAgMDF/+uAgMDGP/XAgMDj/+uAgQAN/+uAgQBJP+uAgQBJv+uAgQBcf+uAgQBnf+uAgQBpv+uAgQBvP+uAgQBxP+uAgQB3P/XAgQB5P/XAgQCqf+uAgQCqv/XAgQCtf+uAgQCtv/XAgQCvf+uAgQCvv/XAgQDF/+uAgQDGP/XAgQDj/+uAgYAJP9xAgYANwApAgYAOQApAgYAOgApAgYAPAAUAgYARP+uAgYARv+FAgYAR/+FAgYASP+FAgYASv/DAgYAUP/DAgYAUf/DAgYAUv+FAgYAU//DAgYAVP+FAgYAVf/DAgYAVv/DAgYAWP/DAgYAgv9xAgYAg/9xAgYAhP9xAgYAhf9xAgYAhv9xAgYAh/9xAgYAnwAUAgYAov+FAgYAo/+uAgYApP+uAgYApf+uAgYApv+uAgYAp/+uAgYAqP+uAgYAqf+FAgYAqv+FAgYAq/+FAgYArP+FAgYArf+FAgYAtP+FAgYAtf+FAgYAtv+FAgYAt/+FAgYAuP+FAgYAuv+FAgYAu//DAgYAvP/DAgYAvf/DAgYAvv/DAgYAwv9xAgYAw/+uAgYAxP9xAgYAxf+uAgYAxv9xAgYAx/+uAgYAyf+FAgYAy/+FAgYAzf+FAgYAz/+FAgYA0f+FAgYA0/+FAgYA1f+FAgYA1/+FAgYA2f+FAgYA2/+FAgYA3f+FAgYA3//DAgYA4f/DAgYA4//DAgYA5f/DAgYA+v/DAgYBBv/DAgYBCP/DAgYBDf/DAgYBD/+FAgYBEf+FAgYBE/+FAgYBFf+FAgYBF//DAgYBGf/DAgYBHf/DAgYBIf/DAgYBJAApAgYBJgApAgYBK//DAgYBLf/DAgYBL//DAgYBMf/DAgYBM//DAgYBNf/DAgYBNgApAgYBOAAUAgYBOgAUAgYBQ/9xAgYBRP+uAgYBRv+uAgYBSP+FAgYBSv/DAgYBVv9xAgYBX/9xAgYBYv9xAgYBaf9xAgYBef+uAgYBev/XAgYBe//XAgYBfv+uAgYBgf/DAgYBgv/XAgYBg//XAgYBhP/XAgYBh//XAgYBif/XAgYBjP+uAgYBjv/DAgYBj/+uAgYBkP+uAgYBk/+uAgYBmf+uAgYBpP+FAgYBqv9xAgYBrv+FAgYBtf+FAgYByv/XAgYBzv9xAgYBz/+FAgYB1f9xAgYB2P+FAgYB2/+FAgYB3v+FAgYB6v+FAgYB7f+FAgYB7v/DAgYB8v9xAgYB+gApAgYB/AApAgYB/gApAgYCAAAUAgYCV//DAgYCWP9xAgYCWf+uAgYCYP+FAgYCYv/DAgYCav+FAgYCcv9xAgYCc/9xAgYCff/sAgYCf/+FAgYChf+FAgYCh/+FAgYCif+FAgYCjf+FAgYCsv+FAgYCtP+FAgYCzv+FAgYCz/9xAgYC2f9xAgYC2v/XAgYC2/9xAgYC3P/XAgYC3f9xAgYC3v/XAgYC4P+FAgYC4v/XAgYC5P/XAgYC8P+FAgYC8v+FAgYC9P+FAgYDCf9xAgYDCv+FAgYDC/9xAgYDDP+FAgYDEf+FAgYDEv9xAgYDFv+FAgYDGv+FAgYDG/+FAgYDHP9xAgYDHf9xAgYDHv+uAgYDH/9xAgYDIP+uAgYDIf9xAgYDIv+uAgYDI/9xAgYDJf9xAgYDJv+uAgYDJ/9xAgYDKP+uAgYDKf9xAgYDKv+uAgYDK/9xAgYDLP+uAgYDLf9xAgYDLv+uAgYDL/9xAgYDMP+uAgYDMf9xAgYDMv+uAgYDM/9xAgYDNP+uAgYDNv+FAgYDOP+FAgYDOv+FAgYDPP+FAgYDQP+FAgYDQv+FAgYDRP+FAgYDSv+FAgYDTP+FAgYDTv+FAgYDUv+FAgYDVP+FAgYDVv+FAgYDWP+FAgYDWv+FAgYDXP+FAgYDXv+FAgYDYP+FAgYDYv/DAgYDZP/DAgYDZv/DAgYDaP/DAgYDav/DAgYDbP/DAgYDbv/DAgYDbwAUAgYDcQAUAgYDcwAUAgYDjwApAgcAJP9xAgcANwApAgcAOQApAgcAOgApAgcAPAAUAgcARP+uAgcARv+FAgcAR/+FAgcASP+FAgcASv/DAgcAUP/DAgcAUf/DAgcAUv+FAgcAU//DAgcAVP+FAgcAVf/DAgcAVv/DAgcAWP/DAgcAgv9xAgcAg/9xAgcAhP9xAgcAhf9xAgcAhv9xAgcAh/9xAgcAnwAUAgcAov+FAgcAo/+uAgcApP+uAgcApf+uAgcApv+uAgcAp/+uAgcAqP+uAgcAqf+FAgcAqv+FAgcAq/+FAgcArP+FAgcArf+FAgcAtP+FAgcAtf+FAgcAtv+FAgcAt/+FAgcAuP+FAgcAuv+FAgcAu//DAgcAvP/DAgcAvf/DAgcAvv/DAgcAwv9xAgcAw/+uAgcAxP9xAgcAxf+uAgcAxv9xAgcAx/+uAgcAyf+FAgcAy/+FAgcAzf+FAgcAz/+FAgcA0f+FAgcA0/+FAgcA1f+FAgcA1/+FAgcA2f+FAgcA2/+FAgcA3f+FAgcA3//DAgcA4f/DAgcA4//DAgcA5f/DAgcA+v/DAgcBBv/DAgcBCP/DAgcBDf/DAgcBD/+FAgcBEf+FAgcBE/+FAgcBFf+FAgcBF//DAgcBGf/DAgcBHf/DAgcBIf/DAgcBJAApAgcBJgApAgcBK//DAgcBLf/DAgcBL//DAgcBMf/DAgcBM//DAgcBNf/DAgcBNgApAgcBOAAUAgcBOgAUAgcBQ/9xAgcBRP+uAgcBRv+uAgcBSP+FAgcBSv/DAgcBVv9xAgcBX/9xAgcBYv9xAgcBaf9xAgcBef+uAgcBev/XAgcBe//XAgcBfv+uAgcBgf/DAgcBgv/XAgcBg//XAgcBhP/XAgcBh//XAgcBif/XAgcBjP+uAgcBjv/DAgcBj/+uAgcBkP+uAgcBk/+uAgcBmf+uAgcBpP+FAgcBqv9xAgcBrv+FAgcBtf+FAgcByv/XAgcBzv9xAgcBz/+FAgcB1f9xAgcB2P+FAgcB2/+FAgcB3v+FAgcB6v+FAgcB7f+FAgcB7v/DAgcB8v9xAgcB+gApAgcB/AApAgcB/gApAgcCAAAUAgcCV//DAgcCWP9xAgcCWf+uAgcCYP+FAgcCYv/DAgcCav+FAgcCcv9xAgcCc/9xAgcCff/sAgcCf/+FAgcChf+FAgcCh/+FAgcCif+FAgcCjf+FAgcCsv+FAgcCtP+FAgcCzv+FAgcCz/9xAgcC2f9xAgcC2v/XAgcC2/9xAgcC3P/XAgcC3f9xAgcC3v/XAgcC4P+FAgcC4v/XAgcC5P/XAgcC8P+FAgcC8v+FAgcC9P+FAgcDCf9xAgcDCv+FAgcDC/9xAgcDDP+FAgcDEf+FAgcDEv9xAgcDFv+FAgcDGv+FAgcDG/+FAgcDHP9xAgcDHf9xAgcDHv+uAgcDH/9xAgcDIP+uAgcDIf9xAgcDIv+uAgcDI/9xAgcDJf9xAgcDJv+uAgcDJ/9xAgcDKP+uAgcDKf9xAgcDKv+uAgcDK/9xAgcDLP+uAgcDLf9xAgcDLv+uAgcDL/9xAgcDMP+uAgcDMf9xAgcDMv+uAgcDM/9xAgcDNP+uAgcDNv+FAgcDOP+FAgcDOv+FAgcDPP+FAgcDQP+FAgcDQv+FAgcDRP+FAgcDSv+FAgcDTP+FAgcDTv+FAgcDUv+FAgcDVP+FAgcDVv+FAgcDWP+FAgcDWv+FAgcDXP+FAgcDXv+FAgcDYP+FAgcDYv/DAgcDZP/DAgcDZv/DAgcDaP/DAgcDav/DAgcDbP/DAgcDbv/DAgcDbwAUAgcDcQAUAgcDcwAUAgcDjwApAggAJv+aAggAKv+aAggAMv+aAggANP+aAggAN/9xAggAOP/XAggAOf+FAggAOv+FAggAPP+FAggAif+aAggAlP+aAggAlf+aAggAlv+aAggAl/+aAggAmP+aAggAmv+aAggAm//XAggAnP/XAggAnf/XAggAnv/XAggAn/+FAggAyP+aAggAyv+aAggAzP+aAggAzv+aAggA3v+aAggA4P+aAggA4v+aAggA5P+aAggBDv+aAggBEP+aAggBEv+aAggBFP+aAggBJP9xAggBJv9xAggBKv/XAggBLP/XAggBLv/XAggBMP/XAggBMv/XAggBNP/XAggBNv+FAggBOP+FAggBOv+FAggBR/+aAggBZv+uAggBbf+uAggBcf9xAggBcv+FAggBc/+aAggBdf+FAggBeP+FAggBhf/XAggBnf9xAggBn/+aAggBpv9xAggBuP+aAggBu/+aAggBvP9xAggBvv+uAggBwf9cAggBxP9xAggB3P+aAggB4f+FAggB5P+aAggB+v+FAggB/P+FAggB/v+FAggCAP+FAggCVP+FAggCX/+aAggCYf/XAggCbP+aAggCfP9cAggCfv+aAggCgP+FAggCgv+FAggChP+aAggChv+aAggCiP+aAggCiv+aAggCjP+aAggCqf9xAggCqv+aAggCsf+aAggCs/+aAggCtf9xAggCtv+aAggCt/+FAggCuf+FAggCvf9xAggCvv+aAggCv/9cAggCwP+FAggCwf9cAggCwv+FAggCxf+FAggCx/+FAggC1P9cAggC1f+FAggC7/+aAggC8f+aAggC8/+aAggC/f9cAggC/v+FAggDDf+FAggDDv+aAggDD/+FAggDEP+aAggDFf+aAggDF/9xAggDGP+aAggDSf+aAggDS/+aAggDTf+aAggDT/+aAggDUf+aAggDU/+aAggDVf+aAggDV/+aAggDWf+aAggDW/+aAggDXf+aAggDX/+aAggDYf/XAggDY//XAggDZf/XAggDZ//XAggDaf/XAggDa//XAggDbf/XAggDb/+FAggDcf+FAggDc/+FAggDj/9xAgoAJP9xAgoANwApAgoAOQApAgoAOgApAgoAPAAUAgoARP+uAgoARv+FAgoAR/+FAgoASP+FAgoASv/DAgoAUP/DAgoAUf/DAgoAUv+FAgoAU//DAgoAVP+FAgoAVf/DAgoAVv/DAgoAWP/DAgoAgv9xAgoAg/9xAgoAhP9xAgoAhf9xAgoAhv9xAgoAh/9xAgoAnwAUAgoAov+FAgoAo/+uAgoApP+uAgoApf+uAgoApv+uAgoAp/+uAgoAqP+uAgoAqf+FAgoAqv+FAgoAq/+FAgoArP+FAgoArf+FAgoAtP+FAgoAtf+FAgoAtv+FAgoAt/+FAgoAuP+FAgoAuv+FAgoAu//DAgoAvP/DAgoAvf/DAgoAvv/DAgoAwv9xAgoAw/+uAgoAxP9xAgoAxf+uAgoAxv9xAgoAx/+uAgoAyf+FAgoAy/+FAgoAzf+FAgoAz/+FAgoA0f+FAgoA0/+FAgoA1f+FAgoA1/+FAgoA2f+FAgoA2/+FAgoA3f+FAgoA3//DAgoA4f/DAgoA4//DAgoA5f/DAgoA+v/DAgoBBv/DAgoBCP/DAgoBDf/DAgoBD/+FAgoBEf+FAgoBE/+FAgoBFf+FAgoBF//DAgoBGf/DAgoBHf/DAgoBIf/DAgoBJAApAgoBJgApAgoBK//DAgoBLf/DAgoBL//DAgoBMf/DAgoBM//DAgoBNf/DAgoBNgApAgoBOAAUAgoBOgAUAgoBQ/9xAgoBRP+uAgoBRv+uAgoBSP+FAgoBSv/DAgoBVv9xAgoBX/9xAgoBYv9xAgoBaf9xAgoBef+uAgoBev/XAgoBe//XAgoBfv+uAgoBgf/DAgoBgv/XAgoBg//XAgoBhP/XAgoBh//XAgoBif/XAgoBjP+uAgoBjv/DAgoBj/+uAgoBkP+uAgoBk/+uAgoBmf+uAgoBpP+FAgoBqv9xAgoBrv+FAgoBtf+FAgoByv/XAgoBzv9xAgoBz/+FAgoB1f9xAgoB2P+FAgoB2/+FAgoB3v+FAgoB6v+FAgoB7f+FAgoB7v/DAgoB8v9xAgoB+gApAgoB/AApAgoB/gApAgoCAAAUAgoCV//DAgoCWP9xAgoCWf+uAgoCYP+FAgoCYv/DAgoCav+FAgoCcv9xAgoCc/9xAgoCff/sAgoCf/+FAgoChf+FAgoCh/+FAgoCif+FAgoCjf+FAgoCsv+FAgoCtP+FAgoCzv+FAgoCz/9xAgoC2f9xAgoC2v/XAgoC2/9xAgoC3P/XAgoC3f9xAgoC3v/XAgoC4P+FAgoC4v/XAgoC5P/XAgoC8P+FAgoC8v+FAgoC9P+FAgoDCf9xAgoDCv+FAgoDC/9xAgoDDP+FAgoDEf+FAgoDEv9xAgoDFv+FAgoDGv+FAgoDG/+FAgoDHP9xAgoDHf9xAgoDHv+uAgoDH/9xAgoDIP+uAgoDIf9xAgoDIv+uAgoDI/9xAgoDJf9xAgoDJv+uAgoDJ/9xAgoDKP+uAgoDKf9xAgoDKv+uAgoDK/9xAgoDLP+uAgoDLf9xAgoDLv+uAgoDL/9xAgoDMP+uAgoDMf9xAgoDMv+uAgoDM/9xAgoDNP+uAgoDNv+FAgoDOP+FAgoDOv+FAgoDPP+FAgoDQP+FAgoDQv+FAgoDRP+FAgoDSv+FAgoDTP+FAgoDTv+FAgoDUv+FAgoDVP+FAgoDVv+FAgoDWP+FAgoDWv+FAgoDXP+FAgoDXv+FAgoDYP+FAgoDYv/DAgoDZP/DAgoDZv/DAgoDaP/DAgoDav/DAgoDbP/DAgoDbv/DAgoDbwAUAgoDcQAUAgoDcwAUAgoDjwApAgwAJv+aAgwAKv+aAgwAMv+aAgwANP+aAgwAN/9xAgwAOP/XAgwAOf+FAgwAOv+FAgwAPP+FAgwAif+aAgwAlP+aAgwAlf+aAgwAlv+aAgwAl/+aAgwAmP+aAgwAmv+aAgwAm//XAgwAnP/XAgwAnf/XAgwAnv/XAgwAn/+FAgwAyP+aAgwAyv+aAgwAzP+aAgwAzv+aAgwA3v+aAgwA4P+aAgwA4v+aAgwA5P+aAgwBDv+aAgwBEP+aAgwBEv+aAgwBFP+aAgwBJP9xAgwBJv9xAgwBKv/XAgwBLP/XAgwBLv/XAgwBMP/XAgwBMv/XAgwBNP/XAgwBNv+FAgwBOP+FAgwBOv+FAgwBR/+aAgwBZv+uAgwBbf+uAgwBcf9xAgwBcv+FAgwBc/+aAgwBdf+FAgwBeP+FAgwBhf/XAgwBnf9xAgwBn/+aAgwBpv9xAgwBuP+aAgwBu/+aAgwBvP9xAgwBvv+uAgwBwf9cAgwBxP9xAgwB3P+aAgwB4f+FAgwB5P+aAgwB+v+FAgwB/P+FAgwB/v+FAgwCAP+FAgwCVP+FAgwCX/+aAgwCYf/XAgwCbP+aAgwCfP9cAgwCfv+aAgwCgP+FAgwCgv+FAgwChP+aAgwChv+aAgwCiP+aAgwCiv+aAgwCjP+aAgwCqf9xAgwCqv+aAgwCsf+aAgwCs/+aAgwCtf9xAgwCtv+aAgwCt/+FAgwCuf+FAgwCvf9xAgwCvv+aAgwCv/9cAgwCwP+FAgwCwf9cAgwCwv+FAgwCxf+FAgwCx/+FAgwC1P9cAgwC1f+FAgwC7/+aAgwC8f+aAgwC8/+aAgwC/f9cAgwC/v+FAgwDDf+FAgwDDv+aAgwDD/+FAgwDEP+aAgwDFf+aAgwDF/9xAgwDGP+aAgwDSf+aAgwDS/+aAgwDTf+aAgwDT/+aAgwDUf+aAgwDU/+aAgwDVf+aAgwDV/+aAgwDWf+aAgwDW/+aAgwDXf+aAgwDX/+aAgwDYf/XAgwDY//XAgwDZf/XAgwDZ//XAgwDaf/XAgwDa//XAgwDbf/XAgwDb/+FAgwDcf+FAgwDc/+FAgwDj/9xAiEBcf/XAiEBcv/sAiEBeP/sAiECVP/sAlMAD//DAlMAEf/DAlMCCP/DAlMCDP/DAlQAD/+FAlQAEf+FAlQBVv+FAlQBX/+FAlQBYv+FAlQBZv/XAlQBaf+FAlQBbf/XAlQBc//DAlQBdv/sAlQBef+aAlQBev+uAlQBe//DAlQBfP/DAlQBff/DAlQBfv+aAlQBgf/DAlQBgv+uAlQBhP/DAlQBhv/DAlQBh//DAlQBif/DAlQBjP+aAlQBjv+aAlQBj/+aAlQBkP+aAlQBkv/DAlQBk/+aAlQBlf/DAlQBlv/DAlQBmP/DAlQBmf+aAlQBmv/DAlQBm//DAlQCCP+FAlQCDP+FAlQCIf/sAlgABf9xAlgACv9xAlgAJv/XAlgAKv/XAlgALQEKAlgAMv/XAlgANP/XAlgAN/9xAlgAOf+uAlgAOv+uAlgAPP+FAlgAif/XAlgAlP/XAlgAlf/XAlgAlv/XAlgAl//XAlgAmP/XAlgAmv/XAlgAn/+FAlgAyP/XAlgAyv/XAlgAzP/XAlgAzv/XAlgA3v/XAlgA4P/XAlgA4v/XAlgA5P/XAlgBDv/XAlgBEP/XAlgBEv/XAlgBFP/XAlgBJP9xAlgBJv9xAlgBNv+uAlgBOP+FAlgBOv+FAlgBR//XAlgB+v+uAlgB/P+uAlgB/v+uAlgCAP+FAlgCB/9xAlgCC/9xAlgCX//XAlgDSf/XAlgDS//XAlgDTf/XAlgDT//XAlgDUf/XAlgDU//XAlgDVf/XAlgDV//XAlgDWf/XAlgDW//XAlgDXf/XAlgDX//XAlgDb/+FAlgDcf+FAlgDc/+FAlgDj/9xAlkABf/sAlkACv/sAlkCB//sAlkCC//sAloAD/+uAloAEf+uAloBVv/XAloBX//XAloBYv/XAloBZP/sAloBaf/XAloBcP/sAloBcf/DAloBcv/sAloBdP/XAloBdf/sAloBeP/sAloBiP/sAloCCP+uAloCDP+uAloCVP/sAmAASQBSAmAAVwBSAmAAWQBmAmAAWgBmAmAAWwBmAmAAXABmAmAAvwBmAmABJQBSAmABJwBSAmABNwBmAmAB+wBmAmAB/QBmAmACNABSAmACNQBSAmACXQBSAmACXgBSAmADcABmAmADjQBSAmADkABSAmIASQBmAmIAVwBmAmIAWQBmAmIAWgBmAmIAWwBmAmIAXABmAmIAvwBmAmIBJQBmAmIBJwBmAmIBNwBmAmIB+wBmAmIB/QBmAmICNABmAmICNQBmAmICXQBmAmICXgBmAmIDcABmAmIDjQBmAmIDkABmAmoABf/sAmoACv/sAmoCB//sAmoCC//sAmwAD/+uAmwAEf+uAmwBnf/sAmwBpP/XAmwBpv/sAmwBqP/XAmwBqv/XAmwBrv/XAmwBsP/XAmwBsf/sAmwBtf/XAmwBvP/DAmwBvf/XAmwBv//XAmwBwf/XAmwBxP/sAmwBx//sAmwBzv/sAmwB1f/sAmwB8v/sAmwCCP+uAmwCDP+uAmwCcv/XAmwCc//sAmwCev/sAmwCfP/XAmwCgP/sAmwCgv/sAmwCn//XAmwCof/sAmwCqf/sAmwCtf/DAmwCt//sAmwCuf/sAmwCu//XAmwCvf/sAmwCv//XAmwCwf/XAmwCyv/XAmwCzv/XAmwCz//sAmwC1P/XAmwC2f/XAmwC2//XAmwC3f/XAmwC5f/XAmwC5//sAmwC9f/sAmwC9//XAmwC+f/XAmwC+//XAmwC/f/XAmwDBf/XAmwDB//XAmwDDf/XAmwDD//XAmwDEf/XAmwDEv/sAmwDF//sAmwDG//XAmwDHP/sAm0AD/+uAm0AEf+uAm0Bzv/XAm0B1f/XAm0B8v/XAm0CCP+uAm0CDP+uAm0Cc//XAm0Cz//XAm0DEv/XAm0DHP/XAm4ABf+uAm4ACv+uAm4Bnf/XAm4Bpv/XAm4BvP+uAm4Bwf+uAm4BxP/XAm4B3P/XAm4B5P/XAm4CB/+uAm4CC/+uAm4CfP+uAm4CgP/DAm4Cgv/DAm4Cqf/XAm4Cqv/XAm4Ctf+uAm4Ctv/XAm4Ct//DAm4Cuf/DAm4Cvf/XAm4Cvv/XAm4Cv/+uAm4Cwf+uAm4C1P+uAm4C/f+uAm4DDf+aAm4DD/+aAm4DF//XAm4DGP/XAm8ABf+FAm8ACv+FAm8B0P/XAm8B3P+aAm8B3f/DAm8B3//XAm8B4f+uAm8B5P+aAm8B9v/DAm8CB/+FAm8CC/+FAm8Cbf/XAm8Cgf/XAm8Cg//XAm8Ci//XAm8CoP/XAm8Cqv+aAm8Ctv+aAm8CuP/DAm8Cuv/DAm8CvP/XAm8Cvv+aAm8CwP+uAm8Cwv+uAm8Cxv/XAm8CyP/XAm8Cy//XAm8C1f+uAm8C5v/XAm8C6v/XAm8C+P/DAm8C+v/DAm8C/P/DAm8C/v+uAm8DBv/XAm8DCP/XAm8DDv+aAm8DEP+aAm8DGP+aAnABn//XAnABuP/XAnABu//XAnABvv/XAnAB4f/XAnACbP/XAnACfv/XAnAChP/XAnAChv/XAnACiP/XAnACiv/XAnACjP/XAnACsf/XAnACs//XAnACwP/XAnACwv/XAnACxf/XAnACx//XAnAC1f/XAnAC7//XAnAC8f/XAnAC8//XAnAC/v/XAnADCf/XAnADC//XAnADDv/XAnADEP/XAnADFf/XAnIABf9xAnIACv9xAnIBnf+aAnIBpv+aAnIBvP9xAnIBvv/XAnIBwf+aAnIBxP+aAnIB3P/XAnIB4f/XAnIB5P/XAnICB/9xAnICC/9xAnICbv/XAnICfP+aAnICgP+uAnICgv+uAnICl//XAnICm//XAnICp//XAnICqf+aAnICqv/XAnICtf9xAnICtv/XAnICt/+FAnICuf+FAnICvf+aAnICvv/XAnICv/+aAnICwP/XAnICwf+aAnICwv/XAnICxf+aAnICx/+aAnIC1P+aAnIC1f/XAnIC4f/XAnIC4//XAnIC/f+aAnIC/v/XAnIDA//XAnIDDf9xAnIDDv/XAnIDD/9xAnIDEP/XAnIDF/+aAnIDGP/XAnMABf9xAnMACv9xAnMBz//XAnMB2P/XAnMB2//XAnMB3P+aAnMB3f/DAnMB3v/XAnMB4f/DAnMB5P+aAnMB6v/XAnMB7f/XAnMB9v/DAnMCB/9xAnMCC/9xAnMCav/XAnMCbf/XAnMCff/sAnMCf//XAnMCgf/XAnMCg//XAnMChf/XAnMCh//XAnMCif/XAnMCi//XAnMCjf/XAnMCqv+aAnMCsv/XAnMCtP/XAnMCtv+aAnMCuP/XAnMCuv/XAnMCvv+aAnMCwP/DAnMCwv/DAnMCxv/XAnMCyP/XAnMC1f/DAnMC4P/XAnMC8P/XAnMC8v/XAnMC9P/XAnMC+P/DAnMC+v/DAnMC/P/DAnMC/v/DAnMDCv/XAnMDDP/XAnMDDv+FAnMDEP+FAnMDFv/XAnMDGP+aAnMDGv/XAnQABf9xAnQACv9xAnQBnf+aAnQBpv+aAnQBvP9xAnQBvv/XAnQBwf+aAnQBxP+aAnQB3P/XAnQB4f/XAnQB5P/XAnQCB/9xAnQCC/9xAnQCbv/XAnQCfP+aAnQCgP+uAnQCgv+uAnQCl//XAnQCm//XAnQCp//XAnQCqf+aAnQCqv/XAnQCtf9xAnQCtv/XAnQCt/+FAnQCuf+FAnQCvf+aAnQCvv/XAnQCv/+aAnQCwP/XAnQCwf+aAnQCwv/XAnQCxf+aAnQCx/+aAnQC1P+aAnQC1f/XAnQC4f/XAnQC4//XAnQC/f+aAnQC/v/XAnQDA//XAnQDDf9xAnQDDv/XAnQDD/9xAnQDEP/XAnQDF/+aAnQDGP/XAnUABf9xAnUACv9xAnUBz//XAnUB2P/XAnUB2//XAnUB3P+aAnUB3f/DAnUB3v/XAnUB4f/DAnUB5P+aAnUB6v/XAnUB7f/XAnUB9v/DAnUCB/9xAnUCC/9xAnUCav/XAnUCbf/XAnUCff/sAnUCf//XAnUCgf/XAnUCg//XAnUChf/XAnUCh//XAnUCif/XAnUCi//XAnUCjf/XAnUCqv+aAnUCsv/XAnUCtP/XAnUCtv+aAnUCuP/XAnUCuv/XAnUCvv+aAnUCwP/DAnUCwv/DAnUCxv/XAnUCyP/XAnUC1f/DAnUC4P/XAnUC8P/XAnUC8v/XAnUC9P/XAnUC+P/DAnUC+v/DAnUC/P/DAnUC/v/DAnUDCv/XAnUDDP/XAnUDDv+FAnUDEP+FAnUDFv/XAnUDGP+aAnUDGv/XAnYDDf/sAnYDD//sAngDDf/sAngDD//sAnoAD/+uAnoAEf+uAnoCCP+uAnoCDP+uAnoCgP/sAnoCgv/sAnoCt//sAnoCuf/sAnoDDf/XAnoDD//XAnwAD/9xAnwAEf9xAnwBpP/DAnwBqv+uAnwBrv/DAnwBtf/DAnwBzv/XAnwB1f/XAnwB8v/XAnwCCP9xAnwCDP9xAnwCcv+uAnwCc//XAnwCzv/DAnwCz//XAnwC2f+uAnwC2/+uAnwC3f+uAnwDCf+uAnwDC/+uAnwDEf/DAnwDEv/XAnwDG//DAnwDHP/XAn0ABf/sAn0ACv/sAn0B0P/XAn0B3P/sAn0B3f/sAn0B3//XAn0B4f/sAn0B5P/sAn0B9v/sAn0CB//sAn0CC//sAn0CoP/XAn0Cqv/sAn0Ctv/sAn0CvP/XAn0Cvv/sAn0CwP/sAn0Cwv/sAn0Cy//XAn0C1f/sAn0C5v/XAn0C+P/sAn0C+v/sAn0C/P/sAn0C/v/sAn0DBv/XAn0DCP/XAn0DDv/sAn0DEP/sAn0DGP/sAn4AD/+uAn4AEf+uAn4Bnf/sAn4BpP/XAn4Bpv/sAn4BqP/XAn4Bqv/XAn4Brv/XAn4BsP/XAn4Bsf/sAn4Btf/XAn4BvP/DAn4Bvf/XAn4Bv//XAn4Bwf/XAn4BxP/sAn4Bx//sAn4Bzv/sAn4B1f/sAn4B8v/sAn4CCP+uAn4CDP+uAn4Ccv/XAn4Cc//sAn4Cev/sAn4CfP/XAn4CgP/sAn4Cgv/sAn4Cn//XAn4Cof/sAn4Cqf/sAn4Ctf/DAn4Ct//sAn4Cuf/sAn4Cu//XAn4Cvf/sAn4Cv//XAn4Cwf/XAn4Cyv/XAn4Czv/XAn4Cz//sAn4C1P/XAn4C2f/XAn4C2//XAn4C3f/XAn4C5f/XAn4C5//sAn4C9f/sAn4C9//XAn4C+f/XAn4C+//XAn4C/f/XAn4DBf/XAn4DB//XAn4DDf/XAn4DD//XAn4DEf/XAn4DEv/sAn4DF//sAn4DG//XAn4DHP/sAn8ABf/sAn8ACv/sAn8B0P/XAn8B3P/sAn8B3f/sAn8B3//XAn8B4f/sAn8B5P/sAn8B9v/sAn8CB//sAn8CC//sAn8CoP/XAn8Cqv/sAn8Ctv/sAn8CvP/XAn8Cvv/sAn8CwP/sAn8Cwv/sAn8Cy//XAn8C1f/sAn8C5v/XAn8C+P/sAn8C+v/sAn8C/P/sAn8C/v/sAn8DBv/XAn8DCP/XAn8DDv/sAn8DEP/sAn8DGP/sAoAAD/+FAoAAEf+FAoABn//sAoABpP+aAoABqv9xAoABrv+aAoABtf+aAoABuP/sAoABu//sAoABvv/DAoAByf/sAoABzv+uAoABz//XAoAB1f+uAoAB2P/XAoAB2//XAoAB3v/XAoAB4f/XAoAB6v/XAoAB6wBmAoAB7f/XAoAB7v/sAoAB8v+uAoAB9ABmAoACCP+FAoACDP+FAoACav/XAoACbP/sAoACcv9xAoACc/+uAoACfv/sAoACf//XAoAChP/sAoAChf/XAoAChv/sAoACh//XAoACiP/sAoACif/XAoACiv/sAoACjP/sAoACjf/XAoACmABmAoACqABmAoACsf/sAoACsv/XAoACs//sAoACtP/XAoACwP/XAoACwv/XAoACxf/XAoACxv/DAoACx//XAoACyP/DAoACzv+aAoACz/+uAoAC1f/XAoAC2f9xAoAC2/9xAoAC3f9xAoAC4P/XAoAC7//sAoAC8P/XAoAC8f/sAoAC8v/XAoAC8//sAoAC9P/XAoAC/v/XAoADCf9xAoADCv/XAoADC/9xAoADDP/XAoADEf+aAoADEv+uAoADFf/sAoADFv/XAoADGv/XAoADG/+aAoADHP+uAoEAD/+uAoEAEf+uAoEBzv/XAoEB1f/XAoEB8v/XAoECCP+uAoECDP+uAoECc//XAoECz//XAoEDEv/XAoEDHP/XAoIAD/+FAoIAEf+FAoIBn//sAoIBpP+aAoIBqv9xAoIBrv+aAoIBtf+aAoIBuP/sAoIBu//sAoIBvv/DAoIByf/sAoIBzv+uAoIBz//XAoIB1f+uAoIB2P/XAoIB2//XAoIB3v/XAoIB4f/XAoIB6v/XAoIB6wBmAoIB7f/XAoIB7v/sAoIB8v+uAoIB9ABmAoICCP+FAoICDP+FAoICav/XAoICbP/sAoICcv9xAoICc/+uAoICfv/sAoICf//XAoIChP/sAoIChf/XAoIChv/sAoICh//XAoICiP/sAoICif/XAoICiv/sAoICjP/sAoICjf/XAoICmABmAoICqABmAoICsf/sAoICsv/XAoICs//sAoICtP/XAoICwP/XAoICwv/XAoICxf/XAoICxv/DAoICx//XAoICyP/DAoICzv+aAoICz/+uAoIC1f/XAoIC2f9xAoIC2/9xAoIC3f9xAoIC4P/XAoIC7//sAoIC8P/XAoIC8f/sAoIC8v/XAoIC8//sAoIC9P/XAoIC/v/XAoIDCf9xAoIDCv/XAoIDC/9xAoIDDP/XAoIDEf+aAoIDEv+uAoIDFf/sAoIDFv/XAoIDGv/XAoIDG/+aAoIDHP+uAoMAD/+uAoMAEf+uAoMBzv/XAoMB1f/XAoMB8v/XAoMCCP+uAoMCDP+uAoMCc//XAoMCz//XAoMDEv/XAoMDHP/XAoQAD/+uAoQAEf+uAoQBzv/XAoQB1f/XAoQB8v/XAoQCCP+uAoQCDP+uAoQCc//XAoQCz//XAoQDEv/XAoQDHP/XAoUAD/+uAoUAEf+uAoUBzv/XAoUB1f/XAoUB8v/XAoUCCP+uAoUCDP+uAoUCc//XAoUCz//XAoUDEv/XAoUDHP/XAoYAD/+uAoYAEf+uAoYBnf/sAoYBpP/XAoYBpv/sAoYBqP/XAoYBqv/XAoYBrv/XAoYBsP/XAoYBsf/sAoYBtf/XAoYBvP/DAoYBvf/XAoYBv//XAoYBwf/XAoYBxP/sAoYBx//sAoYBzv/sAoYB1f/sAoYB8v/sAoYCCP+uAoYCDP+uAoYCcv/XAoYCc//sAoYCev/sAoYCfP/XAoYCgP/sAoYCgv/sAoYCn//XAoYCof/sAoYCqf/sAoYCtf/DAoYCt//sAoYCuf/sAoYCu//XAoYCvf/sAoYCv//XAoYCwf/XAoYCyv/XAoYCzv/XAoYCz//sAoYC1P/XAoYC2f/XAoYC2//XAoYC3f/XAoYC5f/XAoYC5//sAoYC9f/sAoYC9//XAoYC+f/XAoYC+//XAoYC/f/XAoYDBf/XAoYDB//XAoYDDf/XAoYDD//XAoYDEf/XAoYDEv/sAoYDF//sAoYDG//XAoYDHP/sAocABf/sAocACv/sAocB0P/XAocB3P/sAocB3f/sAocB3//XAocB4f/sAocB5P/sAocB9v/sAocCB//sAocCC//sAocCoP/XAocCqv/sAocCtv/sAocCvP/XAocCvv/sAocCwP/sAocCwv/sAocCy//XAocC1f/sAocC5v/XAocC+P/sAocC+v/sAocC/P/sAocC/v/sAocDBv/XAocDCP/XAocDDv/sAocDEP/sAocDGP/sAogAD/+uAogAEf+uAogBnf/sAogBpP/XAogBpv/sAogBqP/XAogBqv/XAogBrv/XAogBsP/XAogBsf/sAogBtf/XAogBvP/DAogBvf/XAogBv//XAogBwf/XAogBxP/sAogBx//sAogBzv/sAogB1f/sAogB8v/sAogCCP+uAogCDP+uAogCcv/XAogCc//sAogCev/sAogCfP/XAogCgP/sAogCgv/sAogCn//XAogCof/sAogCqf/sAogCtf/DAogCt//sAogCuf/sAogCu//XAogCvf/sAogCv//XAogCwf/XAogCyv/XAogCzv/XAogCz//sAogC1P/XAogC2f/XAogC2//XAogC3f/XAogC5f/XAogC5//sAogC9f/sAogC9//XAogC+f/XAogC+//XAogC/f/XAogDBf/XAogDB//XAogDDf/XAogDD//XAogDEf/XAogDEv/sAogDF//sAogDG//XAogDHP/sAokABf/sAokACv/sAokB0P/XAokB3P/sAokB3f/sAokB3//XAokB4f/sAokB5P/sAokB9v/sAokCB//sAokCC//sAokCoP/XAokCqv/sAokCtv/sAokCvP/XAokCvv/sAokCwP/sAokCwv/sAokCy//XAokC1f/sAokC5v/XAokC+P/sAokC+v/sAokC/P/sAokC/v/sAokDBv/XAokDCP/XAokDDv/sAokDEP/sAokDGP/sAooAD/+uAooAEf+uAooBnf/sAooBpP/XAooBpv/sAooBqP/XAooBqv/XAooBrv/XAooBsP/XAooBsf/sAooBtf/XAooBvP/DAooBvf/XAooBv//XAooBwf/XAooBxP/sAooBx//sAooBzv/sAooB1f/sAooB8v/sAooCCP+uAooCDP+uAooCcv/XAooCc//sAooCev/sAooCfP/XAooCgP/sAooCgv/sAooCn//XAooCof/sAooCqf/sAooCtf/DAooCt//sAooCuf/sAooCu//XAooCvf/sAooCv//XAooCwf/XAooCyv/XAooCzv/XAooCz//sAooC1P/XAooC2f/XAooC2//XAooC3f/XAooC5f/XAooC5//sAooC9f/sAooC9//XAooC+f/XAooC+//XAooC/f/XAooDBf/XAooDB//XAooDDf/XAooDD//XAooDEf/XAooDEv/sAooDF//sAooDG//XAooDHP/sAosAD/+uAosAEf+uAosBzv/XAosB1f/XAosB8v/XAosCCP+uAosCDP+uAosCc//XAosCz//XAosDEv/XAosDHP/XAowBn//XAowBuP/XAowBu//XAowBvv/XAowB4f/XAowCbP/XAowCfv/XAowChP/XAowChv/XAowCiP/XAowCiv/XAowCjP/XAowCsf/XAowCs//XAowCwP/XAowCwv/XAowCxf/XAowCx//XAowC1f/XAowC7//XAowC8f/XAowC8//XAowC/v/XAowDCf/XAowDC//XAowDDv/XAowDEP/XAowDFf/XApUBowDhApUC6gApApUDDv/XApUDEP/XApYABf/sApYACv/sApYCB//sApYCC//sApcABf+uApcACv+uApcBnf/XApcBpv/XApcBvP+uApcBwf+uApcBxP/XApcB3P/XApcB5P/XApcCB/+uApcCC/+uApcCfP+uApcCgP/DApcCgv/DApcCqf/XApcCqv/XApcCtf+uApcCtv/XApcCt//DApcCuf/DApcCvf/XApcCvv/XApcCv/+uApcCwf+uApcC1P+uApcC/f+uApcDDf+aApcDD/+aApcDF//XApcDGP/XApgABf+FApgACv+FApgB0P/XApgB3P+aApgB3f/DApgB3//XApgB4f+uApgB5P+aApgB9v/DApgCB/+FApgCC/+FApgCbf/XApgCgf/XApgCg//XApgCi//XApgCoP/XApgCqv+aApgCtv+aApgCuP/DApgCuv/DApgCvP/XApgCvv+aApgCwP+uApgCwv+uApgCxv/XApgCyP/XApgCy//XApgC1f+uApgC5v/XApgC6v/XApgC+P/DApgC+v/DApgC/P/DApgC/v+uApgDBv/XApgDCP/XApgDDv+aApgDEP+aApgDGP+aApkAD/72ApkAEf72ApkBpP+FApkBqv+aApkBrv+FApkBsP/XApkBtf+FApkBv//XApkBzv+aApkB1f+aApkB8v+aApkCCP72ApkCDP72ApkCcv+aApkCc/+aApkCdv/sApkCn//XApkCu//XApkCyv/XApkCzv+FApkCz/+aApkC2f+aApkC2/+aApkC3f+aApkC5f/XApkDBf/XApkDB//XApkDCf+uApkDC/+uApkDEf+FApkDEv+aApkDG/+FApkDHP+aApoABf/sApoACv/sApoB0P/XApoB3P/sApoB3f/sApoB3//XApoB4f/sApoB5P/sApoB9v/sApoCB//sApoCC//sApoCoP/XApoCqv/sApoCtv/sApoCvP/XApoCvv/sApoCwP/sApoCwv/sApoCy//XApoC1f/sApoC5v/XApoC+P/sApoC+v/sApoC/P/sApoC/v/sApoDBv/XApoDCP/XApoDDv/sApoDEP/sApoDGP/sApsAD/+aApsAEP/XApsAEf+aApsBnQApApsBn//XApsBpP+uApsBpgApApsBqv+FApsBrv+uApsBtf+uApsBuP/XApsBu//XApsBvAApApsBvv/DApsBxAApApsBzP/DApsBzf/DApsBzv+aApsBz/+uApsB0P/XApsB0f/XApsB0v/DApsB0//DApsB1P/DApsB1f+aApsB1v/DApsB1//DApsB2P+uApsB2f/DApsB2v/DApsB2/+uApsB3v+uApsB3//XApsB4P/DApsB4f+aApsB4v/DApsB4//DApsB5f/DApsB5v/DApsB5//XApsB6P/DApsB6v+uApsB6wApApsB7P/DApsB7f+uApsB7v/DApsB8v+aApsB8//DApsB9AApApsB9f/DApsB9//DApsB+f/DApsCAv/XApsCA//XApsCBP/XApsCCP+aApsCDP+aApsCav+uApsCa//DApsCbP/XApsCcf/DApsCcv+FApsCc/+aApsCdf/DApsCd//XApsCef/DApsCff/DApsCfv/XApsCf/+uApsChP/XApsChf+uApsChv/XApsCh/+uApsCiP/XApsCif+uApsCiv/XApsCjP/XApsCjf+uApsClv/DApsCmAApApsCmv/DApsCnv/DApsCoP/XApsCov/XApsCpP/DApsCpv/DApsCqAApApsCqQApApsCrP/DApsCrv/DApsCsP/DApsCsf/XApsCsv+uApsCs//XApsCtP+uApsCtQApApsCvP/XApsCvQApApsCwP+aApsCwv+aApsCxP/DApsCxf/XApsCxv/DApsCx//XApsCyP/DApsCy//XApsCzf/DApsCzv+uApsCz/+aApsC0f/DApsC0//DApsC1f+aApsC1//DApsC2f+FApsC2/+FApsC3f+FApsC4P+uApsC5v/XApsC6P/XApsC7P/DApsC7v/DApsC7//XApsC8P+uApsC8f/XApsC8v+uApsC8//XApsC9P+uApsC9v/XApsC/v+aApsDAP/DApsDAv/DApsDBv/XApsDCP/XApsDCf+aApsDCv+uApsDC/+aApsDDP+uApsDDv/XApsDEP/XApsDEf+uApsDEv+aApsDFP/DApsDFf/XApsDFv+uApsDFwApApsDGv+uApsDG/+uApsDHP+aApwAD//DApwAEf/DApwBzv/DApwBz//XApwB1f/DApwB2P/XApwB2//XApwB3v/XApwB6v/XApwB7f/XApwB8v/DApwCCP/DApwCDP/DApwCav/XApwCc//DApwCf//XApwChf/XApwCh//XApwCif/XApwCjf/XApwCsv/XApwCtP/XApwCz//DApwC4P/XApwC8P/XApwC8v/XApwC9P/XApwDCv/XApwDDP/XApwDEv/DApwDFv/XApwDGv/XApwDHP/DAp0ABf/DAp0ACv/DAp0Bnf/DAp0BowBmAp0Bpv/DAp0BvP/DAp0Bwf+uAp0BxP/DAp0B3P/XAp0B4f/XAp0B5P/XAp0CB//DAp0CC//DAp0CfP+uAp0CgP/DAp0Cgv/DAp0Cqf/DAp0Cqv/XAp0Ctf/DAp0Ctv/XAp0Ct//XAp0Cuf/XAp0Cvf/DAp0Cvv/XAp0Cv/+uAp0CwP/XAp0Cwf+uAp0Cwv/XAp0C1P+uAp0C1f/XAp0C/f+uAp0C/v/XAp0DDf/XAp0DDv/DAp0DD//XAp0DEP/DAp0DF//DAp0DGP/XAp4ABf/DAp4ACv/DAp4CB//DAp4CC//DAp4DDv/XAp4DEP/XAp8Bn//XAp8BowDhAp8BuP/XAp8Bu//XAp8Bvv/DAp8B3P/XAp8B4f+uAp8B5P/XAp8CbP/XAp8CewA9Ap8Cff/sAp8Cfv/XAp8ChP/XAp8Chv/XAp8CiP/XAp8Civ/XAp8CjP/XAp8Cqv/XAp8Csf/XAp8Cs//XAp8Ctv/XAp8Cvv/XAp8CwP+uAp8Cwv+uAp8Cxf/DAp8Cxv/XAp8Cx//DAp8CyP/XAp8C1f+uAp8C7//XAp8C8f/XAp8C8//XAp8C/v+uAp8DDv/XAp8DEP/XAp8DFf/XAp8DGP/XAqABz//sAqAB2P/sAqAB2//sAqAB3v/sAqAB4f/sAqAB6v/sAqAB7f/sAqACav/sAqACf//sAqAChf/sAqACh//sAqACif/sAqACjf/sAqACsv/sAqACtP/sAqACwP/sAqACwv/sAqAC1f/sAqAC4P/sAqAC8P/sAqAC8v/sAqAC9P/sAqAC/v/sAqADCv/sAqADDP/sAqADDv/XAqADEP/XAqADFv/sAqADGv/sAqEAD/+uAqEAEf+uAqECCP+uAqECDP+uAqECgP/sAqECgv/sAqECt//sAqECuf/sAqEDDf/XAqEDD//XAqIB6QApAqMBn//XAqMBowDhAqMBuP/XAqMBu//XAqMBvv/DAqMB3P/XAqMB4f+uAqMB5P/XAqMCbP/XAqMCewA9AqMCff/sAqMCfv/XAqMChP/XAqMChv/XAqMCiP/XAqMCiv/XAqMCjP/XAqMCqv/XAqMCsf/XAqMCs//XAqMCtv/XAqMCvv/XAqMCwP+uAqMCwv+uAqMCxf/DAqMCxv/XAqMCx//DAqMCyP/XAqMC1f+uAqMC7//XAqMC8f/XAqMC8//XAqMC/v+uAqMDDv/XAqMDEP/XAqMDFf/XAqMDGP/XAqQBz//sAqQB2P/sAqQB2//sAqQB3v/sAqQB4f/sAqQB6v/sAqQB7f/sAqQCav/sAqQCf//sAqQChf/sAqQCh//sAqQCif/sAqQCjf/sAqQCsv/sAqQCtP/sAqQCwP/sAqQCwv/sAqQC1f/sAqQC4P/sAqQC8P/sAqQC8v/sAqQC9P/sAqQC/v/sAqQDCv/sAqQDDP/sAqQDDv/XAqQDEP/XAqQDFv/sAqQDGv/sAqUBn//XAqUBuP/XAqUBu//XAqUBvv/XAqUBwf/XAqUB4f/XAqUCbP/XAqUCfP/XAqUCfv/XAqUChP/XAqUChv/XAqUCiP/XAqUCiv/XAqUCjP/XAqUCsf/XAqUCs//XAqUCv//XAqUCwP/XAqUCwf/XAqUCwv/XAqUCxf+aAqUCx/+aAqUC1P/XAqUC1f/XAqUC7//XAqUC8f/XAqUC8//XAqUC/f/XAqUC/v/XAqUDCf/XAqUDC//XAqUDDv/XAqUDEP/XAqUDFf/XAqUDGf/sAqYBz//XAqYB2P/XAqYB2//XAqYB3v/XAqYB4f/XAqYB6v/XAqYB7f/XAqYCav/XAqYCf//XAqYChf/XAqYCh//XAqYCif/XAqYCjf/XAqYCsv/XAqYCtP/XAqYCwP/XAqYCwv/XAqYCxv/XAqYCyP/XAqYC1f/XAqYC4P/XAqYC8P/XAqYC8v/XAqYC9P/XAqYC/v/XAqYDCv/XAqYDDP/XAqYDFv/XAqYDGv/XAqcBn//XAqcBuP/XAqcBu//XAqcBvv/XAqcBwf/XAqcB4f/XAqcCbP/XAqcCfP/XAqcCfv/XAqcChP/XAqcChv/XAqcCiP/XAqcCiv/XAqcCjP/XAqcCsf/XAqcCs//XAqcCv//XAqcCwP/XAqcCwf/XAqcCwv/XAqcCxf+aAqcCx/+aAqcC1P/XAqcC1f/XAqcC7//XAqcC8f/XAqcC8//XAqcC/f/XAqcC/v/XAqcDCf/XAqcDC//XAqcDDv/XAqcDEP/XAqcDFf/XAqcDGf/sAqgBz//XAqgB2P/XAqgB2//XAqgB3v/XAqgB4f/XAqgB6v/XAqgB7f/XAqgCav/XAqgCf//XAqgChf/XAqgCh//XAqgCif/XAqgCjf/XAqgCsv/XAqgCtP/XAqgCwP/XAqgCwv/XAqgCxv/XAqgCyP/XAqgC1f/XAqgC4P/XAqgC8P/XAqgC8v/XAqgC9P/XAqgC/v/XAqgDCv/XAqgDDP/XAqgDFv/XAqgDGv/XAqkBn//XAqkBuP/XAqkBu//XAqkBvv/XAqkBwf/XAqkB4f/XAqkCbP/XAqkCfP/XAqkCfv/XAqkChP/XAqkChv/XAqkCiP/XAqkCiv/XAqkCjP/XAqkCsf/XAqkCs//XAqkCv//XAqkCwP/XAqkCwf/XAqkCwv/XAqkCxf+aAqkCx/+aAqkC1P/XAqkC1f/XAqkC7//XAqkC8f/XAqkC8//XAqkC/f/XAqkC/v/XAqkDCf/XAqkDC//XAqkDDv/XAqkDEP/XAqkDFf/XAqkDGf/sAqoBz//XAqoB2P/XAqoB2//XAqoB3v/XAqoB4f/XAqoB6v/XAqoB7f/XAqoCav/XAqoCf//XAqoChf/XAqoCh//XAqoCif/XAqoCjf/XAqoCsv/XAqoCtP/XAqoCwP/XAqoCwv/XAqoCxv/XAqoCyP/XAqoC1f/XAqoC4P/XAqoC8P/XAqoC8v/XAqoC9P/XAqoC/v/XAqoDCv/XAqoDDP/XAqoDFv/XAqoDGv/XAqsBowDhAqsC6gApAqsDDv/XAqsDEP/XAqwABf/sAqwACv/sAqwCB//sAqwCC//sAq0AD/+aAq0AEP/XAq0AEf+aAq0BnQApAq0Bn//XAq0BpP+uAq0BpgApAq0Bqv+FAq0Brv+uAq0Btf+uAq0BuP/XAq0Bu//XAq0BvAApAq0Bvv/DAq0BxAApAq0BzP/DAq0Bzf/DAq0Bzv+aAq0Bz/+uAq0B0P/XAq0B0f/XAq0B0v/DAq0B0//DAq0B1P/DAq0B1f+aAq0B1v/DAq0B1//DAq0B2P+uAq0B2f/DAq0B2v/DAq0B2/+uAq0B3v+uAq0B3//XAq0B4P/DAq0B4f+aAq0B4v/DAq0B4//DAq0B5f/DAq0B5v/DAq0B5//XAq0B6P/DAq0B6v+uAq0B6wApAq0B7P/DAq0B7f+uAq0B7v/DAq0B8v+aAq0B8//DAq0B9AApAq0B9f/DAq0B9//DAq0B+f/DAq0CAv/XAq0CA//XAq0CBP/XAq0CCP+aAq0CDP+aAq0Cav+uAq0Ca//DAq0CbP/XAq0Ccf/DAq0Ccv+FAq0Cc/+aAq0Cdf/DAq0Cd//XAq0Cef/DAq0Cff/DAq0Cfv/XAq0Cf/+uAq0ChP/XAq0Chf+uAq0Chv/XAq0Ch/+uAq0CiP/XAq0Cif+uAq0Civ/XAq0CjP/XAq0Cjf+uAq0Clv/DAq0CmAApAq0Cmv/DAq0Cnv/DAq0CoP/XAq0Cov/XAq0CpP/DAq0Cpv/DAq0CqAApAq0CqQApAq0CrP/DAq0Crv/DAq0CsP/DAq0Csf/XAq0Csv+uAq0Cs//XAq0CtP+uAq0CtQApAq0CvP/XAq0CvQApAq0CwP+aAq0Cwv+aAq0CxP/DAq0Cxf/XAq0Cxv/DAq0Cx//XAq0CyP/DAq0Cy//XAq0Czf/DAq0Czv+uAq0Cz/+aAq0C0f/DAq0C0//DAq0C1f+aAq0C1//DAq0C2f+FAq0C2/+FAq0C3f+FAq0C4P+uAq0C5v/XAq0C6P/XAq0C7P/DAq0C7v/DAq0C7//XAq0C8P+uAq0C8f/XAq0C8v+uAq0C8//XAq0C9P+uAq0C9v/XAq0C/v+aAq0DAP/DAq0DAv/DAq0DBv/XAq0DCP/XAq0DCf+aAq0DCv+uAq0DC/+aAq0DDP+uAq0DDv/XAq0DEP/XAq0DEf+uAq0DEv+aAq0DFP/DAq0DFf/XAq0DFv+uAq0DFwApAq0DGv+uAq0DG/+uAq0DHP+aAq4AD/+aAq4AEP/XAq4AEf+aAq4Bzv/DAq4Bz//sAq4B1f/DAq4B2P/sAq4B2//sAq4B3v/sAq4B6v/sAq4B7f/sAq4B8v/DAq4CAv/XAq4CA//XAq4CBP/XAq4CCP+aAq4CDP+aAq4Cav/sAq4Cc//DAq4Cf//sAq4Chf/sAq4Ch//sAq4Cif/sAq4Cjf/sAq4Csv/sAq4CtP/sAq4Cz//DAq4C4P/sAq4C8P/sAq4C8v/sAq4C9P/sAq4DCv/sAq4DDP/sAq4DEv/DAq4DFv/sAq4DGv/sAq4DHP/DAq8ABf9cAq8ACv9cAq8Bnf+aAq8BowBmAq8Bpv+aAq8BvP9IAq8Bwf+FAq8BxP+aAq8B3P+uAq8B4f/XAq8B5P+uAq8CB/9cAq8CC/9cAq8CfP+FAq8CgP9xAq8Cgv9xAq8Cqf+aAq8Cqv+uAq8Ctf9IAq8Ctv+uAq8Ct/+aAq8Cuf+aAq8Cvf+aAq8Cvv+uAq8Cv/+FAq8CwP/XAq8Cwf+FAq8Cwv/XAq8Cxf/DAq8Cxv/XAq8Cx//DAq8CyP/XAq8C1P+FAq8C1f/XAq8C/f+FAq8C/v/XAq8DDf9IAq8DDv+uAq8DD/9IAq8DEP+uAq8DF/+aAq8DGP+uArAABf9xArAACv9xArAB3P+aArAB4f/XArAB5P+aArACB/9xArACC/9xArACbf/XArACgf/XArACg//XArACi//XArACqv+aArACtv+aArACuP/XArACuv/XArACvv+aArACwP/XArACwv/XArACxv/XArACyP/XArAC1f/XArAC/v/XArADDv9xArADEP9xArADGP+aArEBnf/XArEBpv/XArEBvP/DArEBxP/XArECgP/sArECgv/sArECqf/XArECtf/DArECt//sArECuf/sArECvf/XArEDDf/XArEDD//XArEDF//XArIABf/sArIACv/sArIB0P/XArIB3P/sArIB3f/sArIB3//XArIB4f/sArIB5P/sArIB9v/sArICB//sArICC//sArICoP/XArICqv/sArICtv/sArICvP/XArICvv/sArICwP/sArICwv/sArICy//XArIC1f/sArIC5v/XArIC+P/sArIC+v/sArIC/P/sArIC/v/sArIDBv/XArIDCP/XArIDDv/sArIDEP/sArIDGP/sArMBn//XArMBuP/XArMBu//XArMBvv/XArMB4f/XArMCbP/XArMCfv/XArMChP/XArMChv/XArMCiP/XArMCiv/XArMCjP/XArMCsf/XArMCs//XArMCwP/XArMCwv/XArMCxf/XArMCx//XArMC1f/XArMC7//XArMC8f/XArMC8//XArMC/v/XArMDCf/XArMDC//XArMDDv/XArMDEP/XArMDFf/XArUAD/+FArUAEP+uArUAEf+FArUBn//XArUBpP+aArUBqv9xArUBrv+aArUBtf+aArUBuP/XArUBu//XArUBvAApArUBvv+uArUBzP+aArUBzf+aArUBzv+FArUBz/9xArUB0P/XArUB0f/XArUB0v+aArUB0/+aArUB1P+aArUB1f+FArUB1v+aArUB1/+aArUB2P9xArUB2f+aArUB2v+aArUB2/9xArUB3P+uArUB3f+uArUB3v9xArUB3//XArUB4P+aArUB4f+aArUB4v+aArUB4/+aArUB5P+uArUB5f+aArUB5v+aArUB5//XArUB6P+aArUB6f/DArUB6v9xArUB7P+aArUB7f9xArUB7v+FArUB8v+FArUB8/+aArUB9f+aArUB9v+uArUB9/+aArUB+f+aArUCAv+uArUCA/+uArUCBP+uArUCCP+FArUCDP+FArUCav9xArUCa/+aArUCbP/XArUCbf/XArUCcf+aArUCcv9xArUCc/+FArUCdf+aArUCd/+aArUCef+aArUCff+aArUCfv/XArUCf/9xArUCgf/XArUCg//XArUChP/XArUChf9xArUChv/XArUCh/9xArUCiP/XArUCif9xArUCiv/XArUCi//XArUCjP/XArUCjf9xArUClv+aArUCmv+aArUCnv+aArUCoP/XArUCov/XArUCpP+aArUCpv+aArUCqv+uArUCrP+aArUCrv+aArUCsP+aArUCsf/XArUCsv9xArUCs//XArUCtP9xArUCtQApArUCtv+uArUCuP+uArUCuv+uArUCvP/XArUCvv+uArUCwP+aArUCwv+aArUCxP+aArUCxf+aArUCxv9xArUCx/+aArUCyP9xArUCy//XArUCzf+aArUCzv+aArUCz/+FArUC0f+aArUC0/+aArUC1f+aArUC1/+aArUC2f9xArUC2/9xArUC3f9xArUC4P9xArUC5v/XArUC6P/XArUC6v/DArUC7P+aArUC7v+aArUC7//XArUC8P9xArUC8f/XArUC8v9xArUC8//XArUC9P9xArUC9v/XArUC+P+uArUC+v+uArUC/P+uArUC/v+aArUDAP+aArUDAv+aArUDBv/XArUDCP/XArUDCf9xArUDCv9xArUDC/9xArUDDP9xArUDDv+aArUDEP+aArUDEf+aArUDEv+FArUDFP+aArUDFf/XArUDFv9xArUDGP+uArUDGv9xArUDG/+aArUDHP+FArYAD/+aArYAEP/XArYAEf+aArYBzv/DArYBz//sArYB1f/DArYB2P/sArYB2//sArYB3v/sArYB6v/sArYB7f/sArYB8v/DArYCAv/XArYCA//XArYCBP/XArYCCP+aArYCDP+aArYCav/sArYCc//DArYCf//sArYChf/sArYCh//sArYCif/sArYCjf/sArYCsv/sArYCtP/sArYCz//DArYC4P/sArYC8P/sArYC8v/sArYC9P/sArYDCv/sArYDDP/sArYDEv/DArYDFv/sArYDGv/sArYDHP/DArcAD/+FArcAEf+FArcBn//XArcBpP+uArcBqv+FArcBrv+uArcBtf+uArcBuP/XArcBu//XArcBvv/DArcByv+uArcBzP/DArcBzf/DArcBzv+aArcBz/+aArcB0v/DArcB0//DArcB1P/DArcB1f+aArcB1v/DArcB1//DArcB2P+aArcB2f/DArcB2v/DArcB2/+aArcB3v+aArcB4P/DArcB4f+uArcB4v/DArcB4//DArcB5f/DArcB5v/DArcB6P/DArcB6f/XArcB6v+aArcB6wApArcB7P/DArcB7f+aArcB7v+uArcB8v+aArcB8//DArcB9AApArcB9f/DArcB9//DArcB+f/DArcCCP+FArcCDP+FArcCav+aArcCa//DArcCbP/XArcCcf/DArcCcv+FArcCc/+aArcCdf/DArcCd//XArcCef/DArcCff/XArcCfv/XArcCf/+aArcChP/XArcChf+aArcChv/XArcCh/+aArcCiP/XArcCif+aArcCiv/XArcCjP/XArcCjf+aArcClv/DArcCmAApArcCmv/DArcCnv/DArcCpP/DArcCpv/DArcCqAApArcCrP/DArcCrv/DArcCsP/DArcCsf/XArcCsv+aArcCs//XArcCtP+aArcCwP+uArcCwv+uArcCxP/DArcCxv+uArcCyP+uArcCzf/DArcCzv+uArcCz/+aArcC0f/DArcC0//DArcC1f+uArcC1//DArcC2f+FArcC2v+uArcC2/+FArcC3P+uArcC3f+FArcC3v+uArcC4P+aArcC4f/sArcC4v+uArcC4//sArcC5P+uArcC7P/DArcC7v/DArcC7//XArcC8P+aArcC8f/XArcC8v+aArcC8//XArcC9P+aArcC/v+uArcDAP/DArcDAv/DArcDCf+uArcDCv+aArcDC/+uArcDDP+aArcDDv/XArcDEP/XArcDEf+uArcDEv+aArcDFP/DArcDFf/XArcDFv+aArcDGf/sArcDGv+aArcDG/+uArcDHP+aArgAD/+uArgAEf+uArgBzv/sArgB1f/sArgB8v/sArgCCP+uArgCDP+uArgCc//sArgCz//sArgDEv/sArgDHP/sArkAD/+FArkAEf+FArkBn//XArkBpP+uArkBqv+FArkBrv+uArkBtf+uArkBuP/XArkBu//XArkBvv/DArkByv+uArkBzP/DArkBzf/DArkBzv+aArkBz/+aArkB0v/DArkB0//DArkB1P/DArkB1f+aArkB1v/DArkB1//DArkB2P+aArkB2f/DArkB2v/DArkB2/+aArkB3v+aArkB4P/DArkB4f+uArkB4v/DArkB4//DArkB5f/DArkB5v/DArkB6P/DArkB6f/XArkB6v+aArkB6wApArkB7P/DArkB7f+aArkB7v+uArkB8v+aArkB8//DArkB9AApArkB9f/DArkB9//DArkB+f/DArkCCP+FArkCDP+FArkCav+aArkCa//DArkCbP/XArkCcf/DArkCcv+FArkCc/+aArkCdf/DArkCd//XArkCef/DArkCff/XArkCfv/XArkCf/+aArkChP/XArkChf+aArkChv/XArkCh/+aArkCiP/XArkCif+aArkCiv/XArkCjP/XArkCjf+aArkClv/DArkCmAApArkCmv/DArkCnv/DArkCpP/DArkCpv/DArkCqAApArkCrP/DArkCrv/DArkCsP/DArkCsf/XArkCsv+aArkCs//XArkCtP+aArkCwP+uArkCwv+uArkCxP/DArkCxv+uArkCyP+uArkCzf/DArkCzv+uArkCz/+aArkC0f/DArkC0//DArkC1f+uArkC1//DArkC2f+FArkC2v+uArkC2/+FArkC3P+uArkC3f+FArkC3v+uArkC4P+aArkC4f/sArkC4v+uArkC4//sArkC5P+uArkC7P/DArkC7v/DArkC7//XArkC8P+aArkC8f/XArkC8v+aArkC8//XArkC9P+aArkC/v+uArkDAP/DArkDAv/DArkDCf+uArkDCv+aArkDC/+uArkDDP+aArkDDv/XArkDEP/XArkDEf+uArkDEv+aArkDFP/DArkDFf/XArkDFv+aArkDGf/sArkDGv+aArkDG/+uArkDHP+aAroAD/+uAroAEf+uAroBzv/sAroB1f/sAroB8v/sAroCCP+uAroCDP+uAroCc//sAroCz//sAroDEv/sAroDHP/sArsBn//XArsBowDhArsBuP/XArsBu//XArsBvv/DArsB3P/XArsB4f+uArsB5P/XArsCbP/XArsCewA9ArsCff/sArsCfv/XArsChP/XArsChv/XArsCiP/XArsCiv/XArsCjP/XArsCqv/XArsCsf/XArsCs//XArsCtv/XArsCvv/XArsCwP+uArsCwv+uArsCxf/DArsCxv/XArsCx//DArsCyP/XArsC1f+uArsC7//XArsC8f/XArsC8//XArsC/v+uArsDDv/XArsDEP/XArsDFf/XArsDGP/XArwBz//sArwB2P/sArwB2//sArwB3v/sArwB4f/sArwB6v/sArwB7f/sArwCav/sArwCf//sArwChf/sArwCh//sArwCif/sArwCjf/sArwCsv/sArwCtP/sArwCwP/sArwCwv/sArwC1f/sArwC4P/sArwC8P/sArwC8v/sArwC9P/sArwC/v/sArwDCv/sArwDDP/sArwDDv/XArwDEP/XArwDFv/sArwDGv/sAr0BowDhAr0C6gApAr0DDv/XAr0DEP/XAr4ABf/sAr4ACv/sAr4CB//sAr4CC//sAr8BowDhAr8C6gApAr8DDv/XAr8DEP/XAsAABf/sAsAACv/sAsACB//sAsACC//sAsMABf/DAsMACv/DAsMBnf/XAsMBpv/XAsMBvP+FAsMBwf+uAsMBxP/XAsMB3P/XAsMB3f/sAsMB4f/sAsMB5P/XAsMB9v/sAsMCB//DAsMCC//DAsMCfP+uAsMCgP/DAsMCgv/DAsMCqf/XAsMCqv/XAsMCtf+FAsMCtv/XAsMCt/+aAsMCuf+aAsMCvf/XAsMCvv/XAsMCv/+uAsMCwP/sAsMCwf+uAsMCwv/sAsMC1P+uAsMC1f/sAsMC+P/sAsMC+v/sAsMC/P/sAsMC/f+uAsMC/v/sAsMDDf+uAsMDDv/XAsMDD/+uAsMDEP/XAsMDF//XAsMDGP/XAsQABf+aAsQACv+aAsQB3P/XAsQB3f/XAsQB5P/XAsQB9v/XAsQCB/+aAsQCC/+aAsQCqv/XAsQCtv/XAsQCuP/XAsQCuv/XAsQCvv/XAsQC+P/XAsQC+v/XAsQC/P/XAsQDDv+uAsQDEP+uAsQDGP/XAsUBvP/XAsUCgP/sAsUCgv/sAsUCtf/XAsUCt//sAsUCuf/sAsUDDf/sAsUDD//sAsYABf/sAsYACv/sAsYCB//sAsYCC//sAscBvP/XAscCgP/sAscCgv/sAscCtf/XAscCt//sAscCuf/sAscDDf/sAscDD//sAsgABf/sAsgACv/sAsgCB//sAsgCC//sAsoBn//XAsoBuP/XAsoBu//XAsoBvv/XAsoBwf/XAsoB4f/XAsoCbP/XAsoCfP/XAsoCfv/XAsoChP/XAsoChv/XAsoCiP/XAsoCiv/XAsoCjP/XAsoCsf/XAsoCs//XAsoCv//XAsoCwP/XAsoCwf/XAsoCwv/XAsoCxf+aAsoCx/+aAsoC1P/XAsoC1f/XAsoC7//XAsoC8f/XAsoC8//XAsoC/f/XAsoC/v/XAsoDCf/XAsoDC//XAsoDDv/XAsoDEP/XAsoDFf/XAsoDGf/sAssBz//XAssB2P/XAssB2//XAssB3v/XAssB4f/XAssB6v/XAssB7f/XAssCav/XAssCf//XAssChf/XAssCh//XAssCif/XAssCjf/XAssCsv/XAssCtP/XAssCwP/XAssCwv/XAssCxv/XAssCyP/XAssC1f/XAssC4P/XAssC8P/XAssC8v/XAssC9P/XAssC/v/XAssDCv/XAssDDP/XAssDFv/XAssDGv/XAswABf/DAswACv/DAswBowBmAswBvP/XAswBvv/XAswBwf+uAswB3P/DAswB4f/XAswB5P/DAswCB//DAswCC//DAswCbf/sAswCfP+uAswCgP/XAswCgf/sAswCgv/XAswCg//sAswCi//sAswCqv/DAswCtf/XAswCtv/DAswCt//XAswCuP/sAswCuf/XAswCuv/sAswCvv/DAswCv/+uAswCwP/XAswCwf+uAswCwv/XAswCxf/DAswCxv/XAswCx//DAswCyP/XAswC1P+uAswC1f/XAswC/f+uAswC/v/XAswDDf/XAswDDv/DAswDD//XAswDEP/DAswDGP/DAs0B4f/XAs0CwP/XAs0Cwv/XAs0C1f/XAs0C/v/XAs4BowDhAs4C6gApAs4DDv/XAs4DEP/XAs8ABf/sAs8ACv/sAs8CB//sAs8CC//sAtIBowDhAtIC6gApAtIDDv/XAtIDEP/XAtMABf/sAtMACv/sAtMCB//sAtMCC//sAtYBowDhAtYC6gApAtYDDv/XAtYDEP/XAtcABf/sAtcACv/sAtcCB//sAtcCC//sAtkABf9xAtkACv9xAtkBnf+aAtkBpv+aAtkBvP9xAtkBvv/XAtkBwf+aAtkBxP+aAtkB3P/XAtkB4f/XAtkB5P/XAtkCB/9xAtkCC/9xAtkCbv/XAtkCfP+aAtkCgP+uAtkCgv+uAtkCl//XAtkCm//XAtkCp//XAtkCqf+aAtkCqv/XAtkCtf9xAtkCtv/XAtkCt/+FAtkCuf+FAtkCvf+aAtkCvv/XAtkCv/+aAtkCwP/XAtkCwf+aAtkCwv/XAtkCxf+aAtkCx/+aAtkC1P+aAtkC1f/XAtkC4f/XAtkC4//XAtkC/f+aAtkC/v/XAtkDA//XAtkDDf9xAtkDDv/XAtkDD/9xAtkDEP/XAtkDF/+aAtkDGP/XAtoABf/sAtoACv/sAtoCB//sAtoCC//sAtsABf9xAtsACv9xAtsBnf+aAtsBpv+aAtsBvP9xAtsBvv/XAtsBwf+aAtsBxP+aAtsB3P/XAtsB4f/XAtsB5P/XAtsCB/9xAtsCC/9xAtsCbv/XAtsCfP+aAtsCgP+uAtsCgv+uAtsCl//XAtsCm//XAtsCp//XAtsCqf+aAtsCqv/XAtsCtf9xAtsCtv/XAtsCt/+FAtsCuf+FAtsCvf+aAtsCvv/XAtsCv/+aAtsCwP/XAtsCwf+aAtsCwv/XAtsCxf+aAtsCx/+aAtsC1P+aAtsC1f/XAtsC4f/XAtsC4//XAtsC/f+aAtsC/v/XAtsDA//XAtsDDf9xAtsDDv/XAtsDD/9xAtsDEP/XAtsDF/+aAtsDGP/XAtwABf/sAtwACv/sAtwCB//sAtwCC//sAt4ABf/sAt4ACv/sAt4CB//sAt4CC//sAuAABf/sAuAACv/sAuACB//sAuACC//sAuEAD/+uAuEAEf+uAuEBnf/sAuEBpP/XAuEBpv/sAuEBqP/XAuEBqv/XAuEBrv/XAuEBsP/XAuEBsf/sAuEBtf/XAuEBvP/DAuEBvf/XAuEBv//XAuEBwf/XAuEBxP/sAuEBx//sAuEBzv/sAuEB1f/sAuEB8v/sAuECCP+uAuECDP+uAuECcv/XAuECc//sAuECev/sAuECfP/XAuECgP/sAuECgv/sAuECn//XAuECof/sAuECqf/sAuECtf/DAuECt//sAuECuf/sAuECu//XAuECvf/sAuECv//XAuECwf/XAuECyv/XAuECzv/XAuECz//sAuEC1P/XAuEC2f/XAuEC2//XAuEC3f/XAuEC5f/XAuEC5//sAuEC9f/sAuEC9//XAuEC+f/XAuEC+//XAuEC/f/XAuEDBf/XAuEDB//XAuEDDf/XAuEDD//XAuEDEf/XAuEDEv/sAuEDF//sAuEDG//XAuEDHP/sAuIABf/sAuIACv/sAuIB0P/XAuIB3P/sAuIB3f/sAuIB3//XAuIB4f/sAuIB5P/sAuIB9v/sAuICB//sAuICC//sAuICoP/XAuICqv/sAuICtv/sAuICvP/XAuICvv/sAuICwP/sAuICwv/sAuICy//XAuIC1f/sAuIC5v/XAuIC+P/sAuIC+v/sAuIC/P/sAuIC/v/sAuIDBv/XAuIDCP/XAuIDDv/sAuIDEP/sAuIDGP/sAuMAD/+uAuMAEf+uAuMBnf/sAuMBpP/XAuMBpv/sAuMBqP/XAuMBqv/XAuMBrv/XAuMBsP/XAuMBsf/sAuMBtf/XAuMBvP/DAuMBvf/XAuMBv//XAuMBwf/XAuMBxP/sAuMBx//sAuMBzv/sAuMB1f/sAuMB8v/sAuMCCP+uAuMCDP+uAuMCcv/XAuMCc//sAuMCev/sAuMCfP/XAuMCgP/sAuMCgv/sAuMCn//XAuMCof/sAuMCqf/sAuMCtf/DAuMCt//sAuMCuf/sAuMCu//XAuMCvf/sAuMCv//XAuMCwf/XAuMCyv/XAuMCzv/XAuMCz//sAuMC1P/XAuMC2f/XAuMC2//XAuMC3f/XAuMC5f/XAuMC5//sAuMC9f/sAuMC9//XAuMC+f/XAuMC+//XAuMC/f/XAuMDBf/XAuMDB//XAuMDDf/XAuMDD//XAuMDEf/XAuMDEv/sAuMDF//sAuMDG//XAuMDHP/sAuQABf/sAuQACv/sAuQB0P/XAuQB3P/sAuQB3f/sAuQB3//XAuQB4f/sAuQB5P/sAuQB9v/sAuQCB//sAuQCC//sAuQCoP/XAuQCqv/sAuQCtv/sAuQCvP/XAuQCvv/sAuQCwP/sAuQCwv/sAuQCy//XAuQC1f/sAuQC5v/XAuQC+P/sAuQC+v/sAuQC/P/sAuQC/v/sAuQDBv/XAuQDCP/XAuQDDv/sAuQDEP/sAuQDGP/sAuUBn//XAuUBuP/XAuUBu//XAuUBvv/XAuUBwf/XAuUB4f/XAuUCbP/XAuUCfP/XAuUCfv/XAuUChP/XAuUChv/XAuUCiP/XAuUCiv/XAuUCjP/XAuUCsf/XAuUCs//XAuUCv//XAuUCwP/XAuUCwf/XAuUCwv/XAuUCxf+aAuUCx/+aAuUC1P/XAuUC1f/XAuUC7//XAuUC8f/XAuUC8//XAuUC/f/XAuUC/v/XAuUDCf/XAuUDC//XAuUDDv/XAuUDEP/XAuUDFf/XAuUDGf/sAuYBz//XAuYB2P/XAuYB2//XAuYB3v/XAuYB4f/XAuYB6v/XAuYB7f/XAuYCav/XAuYCf//XAuYChf/XAuYCh//XAuYCif/XAuYCjf/XAuYCsv/XAuYCtP/XAuYCwP/XAuYCwv/XAuYCxv/XAuYCyP/XAuYC1f/XAuYC4P/XAuYC8P/XAuYC8v/XAuYC9P/XAuYC/v/XAuYDCv/XAuYDDP/XAuYDFv/XAuYDGv/XAucAD/+uAucAEf+uAucCCP+uAucCDP+uAucCgP/sAucCgv/sAucCt//sAucCuf/sAucDDf/XAucDD//XAugB6QApAukABf/sAukACv/sAukCB//sAukCC//sAukDDv/XAukDEP/XAu8AD/+uAu8AEf+uAu8Bnf/sAu8BpP/XAu8Bpv/sAu8BqP/XAu8Bqv/XAu8Brv/XAu8BsP/XAu8Bsf/sAu8Btf/XAu8BvP/DAu8Bvf/XAu8Bv//XAu8Bwf/XAu8BxP/sAu8Bx//sAu8Bzv/sAu8B1f/sAu8B8v/sAu8CCP+uAu8CDP+uAu8Ccv/XAu8Cc//sAu8Cev/sAu8CfP/XAu8CgP/sAu8Cgv/sAu8Cn//XAu8Cof/sAu8Cqf/sAu8Ctf/DAu8Ct//sAu8Cuf/sAu8Cu//XAu8Cvf/sAu8Cv//XAu8Cwf/XAu8Cyv/XAu8Czv/XAu8Cz//sAu8C1P/XAu8C2f/XAu8C2//XAu8C3f/XAu8C5f/XAu8C5//sAu8C9f/sAu8C9//XAu8C+f/XAu8C+//XAu8C/f/XAu8DBf/XAu8DB//XAu8DDf/XAu8DD//XAu8DEf/XAu8DEv/sAu8DF//sAu8DG//XAu8DHP/sAvAABf/sAvAACv/sAvAB0P/XAvAB3P/sAvAB3f/sAvAB3//XAvAB4f/sAvAB5P/sAvAB9v/sAvACB//sAvACC//sAvACoP/XAvACqv/sAvACtv/sAvACvP/XAvACvv/sAvACwP/sAvACwv/sAvACy//XAvAC1f/sAvAC5v/XAvAC+P/sAvAC+v/sAvAC/P/sAvAC/v/sAvADBv/XAvADCP/XAvADDv/sAvADEP/sAvADGP/sAvEAD/+uAvEAEf+uAvEBnf/sAvEBpP/XAvEBpv/sAvEBqP/XAvEBqv/XAvEBrv/XAvEBsP/XAvEBsf/sAvEBtf/XAvEBvP/DAvEBvf/XAvEBv//XAvEBwf/XAvEBxP/sAvEBx//sAvEBzv/sAvEB1f/sAvEB8v/sAvECCP+uAvECDP+uAvECcv/XAvECc//sAvECev/sAvECfP/XAvECgP/sAvECgv/sAvECn//XAvECof/sAvECqf/sAvECtf/DAvECt//sAvECuf/sAvECu//XAvECvf/sAvECv//XAvECwf/XAvECyv/XAvECzv/XAvECz//sAvEC1P/XAvEC2f/XAvEC2//XAvEC3f/XAvEC5f/XAvEC5//sAvEC9f/sAvEC9//XAvEC+f/XAvEC+//XAvEC/f/XAvEDBf/XAvEDB//XAvEDDf/XAvEDD//XAvEDEf/XAvEDEv/sAvEDF//sAvEDG//XAvEDHP/sAvIABf/sAvIACv/sAvIB0P/XAvIB3P/sAvIB3f/sAvIB3//XAvIB4f/sAvIB5P/sAvIB9v/sAvICB//sAvICC//sAvICoP/XAvICqv/sAvICtv/sAvICvP/XAvICvv/sAvICwP/sAvICwv/sAvICy//XAvIC1f/sAvIC5v/XAvIC+P/sAvIC+v/sAvIC/P/sAvIC/v/sAvIDBv/XAvIDCP/XAvIDDv/sAvIDEP/sAvIDGP/sAvMAD/+uAvMAEf+uAvMBnf/sAvMBpP/XAvMBpv/sAvMBqP/XAvMBqv/XAvMBrv/XAvMBsP/XAvMBsf/sAvMBtf/XAvMBvP/DAvMBvf/XAvMBv//XAvMBwf/XAvMBxP/sAvMBx//sAvMBzv/sAvMB1f/sAvMB8v/sAvMCCP+uAvMCDP+uAvMCcv/XAvMCc//sAvMCev/sAvMCfP/XAvMCgP/sAvMCgv/sAvMCn//XAvMCof/sAvMCqf/sAvMCtf/DAvMCt//sAvMCuf/sAvMCu//XAvMCvf/sAvMCv//XAvMCwf/XAvMCyv/XAvMCzv/XAvMCz//sAvMC1P/XAvMC2f/XAvMC2//XAvMC3f/XAvMC5f/XAvMC5//sAvMC9f/sAvMC9//XAvMC+f/XAvMC+//XAvMC/f/XAvMDBf/XAvMDB//XAvMDDf/XAvMDD//XAvMDEf/XAvMDEv/sAvMDF//sAvMDG//XAvMDHP/sAvQABf/sAvQACv/sAvQB0P/XAvQB3P/sAvQB3f/sAvQB3//XAvQB4f/sAvQB5P/sAvQB9v/sAvQCB//sAvQCC//sAvQCoP/XAvQCqv/sAvQCtv/sAvQCvP/XAvQCvv/sAvQCwP/sAvQCwv/sAvQCy//XAvQC1f/sAvQC5v/XAvQC+P/sAvQC+v/sAvQC/P/sAvQC/v/sAvQDBv/XAvQDCP/XAvQDDv/sAvQDEP/sAvQDGP/sAvUAD/+uAvUAEf+uAvUBnf/sAvUBpP/XAvUBpv/sAvUBqP/XAvUBqv/XAvUBrv/XAvUBsP/XAvUBsf/sAvUBtf/XAvUBvP/DAvUBvf/XAvUBv//XAvUBwf/XAvUBxP/sAvUBx//sAvUBzv/sAvUB1f/sAvUB8v/sAvUCCP+uAvUCDP+uAvUCcv/XAvUCc//sAvUCev/sAvUCfP/XAvUCgP/sAvUCgv/sAvUCn//XAvUCof/sAvUCqf/sAvUCtf/DAvUCt//sAvUCuf/sAvUCu//XAvUCvf/sAvUCv//XAvUCwf/XAvUCyv/XAvUCzv/XAvUCz//sAvUC1P/XAvUC2f/XAvUC2//XAvUC3f/XAvUC5f/XAvUC5//sAvUC9f/sAvUC9//XAvUC+f/XAvUC+//XAvUC/f/XAvUDBf/XAvUDB//XAvUDDf/XAvUDD//XAvUDEf/XAvUDEv/sAvUDF//sAvUDG//XAvUDHP/sAvYABf/sAvYACv/sAvYB0P/XAvYB3P/sAvYB3f/sAvYB3//XAvYB4f/sAvYB5P/sAvYB9v/sAvYCB//sAvYCC//sAvYCoP/XAvYCqv/sAvYCtv/sAvYCvP/XAvYCvv/sAvYCwP/sAvYCwv/sAvYCy//XAvYC1f/sAvYC5v/XAvYC+P/sAvYC+v/sAvYC/P/sAvYC/v/sAvYDBv/XAvYDCP/XAvYDDv/sAvYDEP/sAvYDGP/sAvcAD/+FAvcAEf+FAvcBn//sAvcBpP+aAvcBqv9xAvcBrv+aAvcBtf+aAvcBuP/sAvcBu//sAvcBvv/DAvcByf/sAvcBzv+uAvcBz//XAvcB1f+uAvcB2P/XAvcB2//XAvcB3v/XAvcB4f/XAvcB6v/XAvcB6wBmAvcB7f/XAvcB7v/sAvcB8v+uAvcB9ABmAvcCCP+FAvcCDP+FAvcCav/XAvcCbP/sAvcCcv9xAvcCc/+uAvcCfv/sAvcCf//XAvcChP/sAvcChf/XAvcChv/sAvcCh//XAvcCiP/sAvcCif/XAvcCiv/sAvcCjP/sAvcCjf/XAvcCmABmAvcCqABmAvcCsf/sAvcCsv/XAvcCs//sAvcCtP/XAvcCwP/XAvcCwv/XAvcCxf/XAvcCxv/DAvcCx//XAvcCyP/DAvcCzv+aAvcCz/+uAvcC1f/XAvcC2f9xAvcC2/9xAvcC3f9xAvcC4P/XAvcC7//sAvcC8P/XAvcC8f/sAvcC8v/XAvcC8//sAvcC9P/XAvcC/v/XAvcDCf9xAvcDCv/XAvcDC/9xAvcDDP/XAvcDEf+aAvcDEv+uAvcDFf/sAvcDFv/XAvcDGv/XAvcDG/+aAvcDHP+uAvgAD/+uAvgAEf+uAvgBzv/XAvgB1f/XAvgB8v/XAvgCCP+uAvgCDP+uAvgCc//XAvgCz//XAvgDEv/XAvgDHP/XAvkAD/+FAvkAEf+FAvkBn//sAvkBpP+aAvkBqv9xAvkBrv+aAvkBtf+aAvkBuP/sAvkBu//sAvkBvv/DAvkByf/sAvkBzv+uAvkBz//XAvkB1f+uAvkB2P/XAvkB2//XAvkB3v/XAvkB4f/XAvkB6v/XAvkB6wBmAvkB7f/XAvkB7v/sAvkB8v+uAvkB9ABmAvkCCP+FAvkCDP+FAvkCav/XAvkCbP/sAvkCcv9xAvkCc/+uAvkCfv/sAvkCf//XAvkChP/sAvkChf/XAvkChv/sAvkCh//XAvkCiP/sAvkCif/XAvkCiv/sAvkCjP/sAvkCjf/XAvkCmABmAvkCqABmAvkCsf/sAvkCsv/XAvkCs//sAvkCtP/XAvkCwP/XAvkCwv/XAvkCxf/XAvkCxv/DAvkCx//XAvkCyP/DAvkCzv+aAvkCz/+uAvkC1f/XAvkC2f9xAvkC2/9xAvkC3f9xAvkC4P/XAvkC7//sAvkC8P/XAvkC8f/sAvkC8v/XAvkC8//sAvkC9P/XAvkC/v/XAvkDCf9xAvkDCv/XAvkDC/9xAvkDDP/XAvkDEf+aAvkDEv+uAvkDFf/sAvkDFv/XAvkDGv/XAvkDG/+aAvkDHP+uAvoAD/+uAvoAEf+uAvoBzv/XAvoB1f/XAvoB8v/XAvoCCP+uAvoCDP+uAvoCc//XAvoCz//XAvoDEv/XAvoDHP/XAvsAD/+FAvsAEf+FAvsBn//sAvsBpP+aAvsBqv9xAvsBrv+aAvsBtf+aAvsBuP/sAvsBu//sAvsBvv/DAvsByf/sAvsBzv+uAvsBz//XAvsB1f+uAvsB2P/XAvsB2//XAvsB3v/XAvsB4f/XAvsB6v/XAvsB6wBmAvsB7f/XAvsB7v/sAvsB8v+uAvsB9ABmAvsCCP+FAvsCDP+FAvsCav/XAvsCbP/sAvsCcv9xAvsCc/+uAvsCfv/sAvsCf//XAvsChP/sAvsChf/XAvsChv/sAvsCh//XAvsCiP/sAvsCif/XAvsCiv/sAvsCjP/sAvsCjf/XAvsCmABmAvsCqABmAvsCsf/sAvsCsv/XAvsCs//sAvsCtP/XAvsCwP/XAvsCwv/XAvsCxf/XAvsCxv/DAvsCx//XAvsCyP/DAvsCzv+aAvsCz/+uAvsC1f/XAvsC2f9xAvsC2/9xAvsC3f9xAvsC4P/XAvsC7//sAvsC8P/XAvsC8f/sAvsC8v/XAvsC8//sAvsC9P/XAvsC/v/XAvsDCf9xAvsDCv/XAvsDC/9xAvsDDP/XAvsDEf+aAvsDEv+uAvsDFf/sAvsDFv/XAvsDGv/XAvsDG/+aAvsDHP+uAvwAD/+uAvwAEf+uAvwBzv/XAvwB1f/XAvwB8v/XAvwCCP+uAvwCDP+uAvwCc//XAvwCz//XAvwDEv/XAvwDHP/XAv8AD/+FAv8AEP+uAv8AEf+FAv8Bn//XAv8BpP+aAv8Bqv9xAv8Brv+aAv8Btf+aAv8BuP/XAv8Bu//XAv8BvAApAv8Bvv+uAv8BzP+aAv8Bzf+aAv8Bzv+FAv8Bz/9xAv8B0P/XAv8B0f/XAv8B0v+aAv8B0/+aAv8B1P+aAv8B1f+FAv8B1v+aAv8B1/+aAv8B2P9xAv8B2f+aAv8B2v+aAv8B2/9xAv8B3P+uAv8B3f+uAv8B3v9xAv8B3//XAv8B4P+aAv8B4f+aAv8B4v+aAv8B4/+aAv8B5P+uAv8B5f+aAv8B5v+aAv8B5//XAv8B6P+aAv8B6f/DAv8B6v9xAv8B7P+aAv8B7f9xAv8B7v+FAv8B8v+FAv8B8/+aAv8B9f+aAv8B9v+uAv8B9/+aAv8B+f+aAv8CAv+uAv8CA/+uAv8CBP+uAv8CCP+FAv8CDP+FAv8Cav9xAv8Ca/+aAv8CbP/XAv8Cbf/XAv8Ccf+aAv8Ccv9xAv8Cc/+FAv8Cdf+aAv8Cd/+aAv8Cef+aAv8Cff+aAv8Cfv/XAv8Cf/9xAv8Cgf/XAv8Cg//XAv8ChP/XAv8Chf9xAv8Chv/XAv8Ch/9xAv8CiP/XAv8Cif9xAv8Civ/XAv8Ci//XAv8CjP/XAv8Cjf9xAv8Clv+aAv8Cmv+aAv8Cnv+aAv8CoP/XAv8Cov/XAv8CpP+aAv8Cpv+aAv8Cqv+uAv8CrP+aAv8Crv+aAv8CsP+aAv8Csf/XAv8Csv9xAv8Cs//XAv8CtP9xAv8CtQApAv8Ctv+uAv8CuP+uAv8Cuv+uAv8CvP/XAv8Cvv+uAv8CwP+aAv8Cwv+aAv8CxP+aAv8Cxf+aAv8Cxv9xAv8Cx/+aAv8CyP9xAv8Cy//XAv8Czf+aAv8Czv+aAv8Cz/+FAv8C0f+aAv8C0/+aAv8C1f+aAv8C1/+aAv8C2f9xAv8C2/9xAv8C3f9xAv8C4P9xAv8C5v/XAv8C6P/XAv8C6v/DAv8C7P+aAv8C7v+aAv8C7//XAv8C8P9xAv8C8f/XAv8C8v9xAv8C8//XAv8C9P9xAv8C9v/XAv8C+P+uAv8C+v+uAv8C/P+uAv8C/v+aAv8DAP+aAv8DAv+aAv8DBv/XAv8DCP/XAv8DCf9xAv8DCv9xAv8DC/9xAv8DDP9xAv8DDv+aAv8DEP+aAv8DEf+aAv8DEv+FAv8DFP+aAv8DFf/XAv8DFv9xAv8DGP+uAv8DGv9xAv8DG/+aAv8DHP+FAwAAD/+aAwAAEP/XAwAAEf+aAwABzv/DAwABz//sAwAB1f/DAwAB2P/sAwAB2//sAwAB3v/sAwAB6v/sAwAB7f/sAwAB8v/DAwACAv/XAwACA//XAwACBP/XAwACCP+aAwACDP+aAwACav/sAwACc//DAwACf//sAwAChf/sAwACh//sAwACif/sAwACjf/sAwACsv/sAwACtP/sAwACz//DAwAC4P/sAwAC8P/sAwAC8v/sAwAC9P/sAwADCv/sAwADDP/sAwADEv/DAwADFv/sAwADGv/sAwADHP/DAwMAD/+aAwMAEP/XAwMAEf+aAwMBnQApAwMBn//XAwMBpP+uAwMBpgApAwMBqv+FAwMBrv+uAwMBtf+uAwMBuP/XAwMBu//XAwMBvAApAwMBvv/DAwMBxAApAwMBzP/DAwMBzf/DAwMBzv+aAwMBz/+uAwMB0P/XAwMB0f/XAwMB0v/DAwMB0//DAwMB1P/DAwMB1f+aAwMB1v/DAwMB1//DAwMB2P+uAwMB2f/DAwMB2v/DAwMB2/+uAwMB3v+uAwMB3//XAwMB4P/DAwMB4f+aAwMB4v/DAwMB4//DAwMB5f/DAwMB5v/DAwMB5//XAwMB6P/DAwMB6v+uAwMB6wApAwMB7P/DAwMB7f+uAwMB7v/DAwMB8v+aAwMB8//DAwMB9AApAwMB9f/DAwMB9//DAwMB+f/DAwMCAv/XAwMCA//XAwMCBP/XAwMCCP+aAwMCDP+aAwMCav+uAwMCa//DAwMCbP/XAwMCcf/DAwMCcv+FAwMCc/+aAwMCdf/DAwMCd//XAwMCef/DAwMCff/DAwMCfv/XAwMCf/+uAwMChP/XAwMChf+uAwMChv/XAwMCh/+uAwMCiP/XAwMCif+uAwMCiv/XAwMCjP/XAwMCjf+uAwMClv/DAwMCmAApAwMCmv/DAwMCnv/DAwMCoP/XAwMCov/XAwMCpP/DAwMCpv/DAwMCqAApAwMCqQApAwMCrP/DAwMCrv/DAwMCsP/DAwMCsf/XAwMCsv+uAwMCs//XAwMCtP+uAwMCtQApAwMCvP/XAwMCvQApAwMCwP+aAwMCwv+aAwMCxP/DAwMCxf/XAwMCxv/DAwMCx//XAwMCyP/DAwMCy//XAwMCzf/DAwMCzv+uAwMCz/+aAwMC0f/DAwMC0//DAwMC1f+aAwMC1//DAwMC2f+FAwMC2/+FAwMC3f+FAwMC4P+uAwMC5v/XAwMC6P/XAwMC7P/DAwMC7v/DAwMC7//XAwMC8P+uAwMC8f/XAwMC8v+uAwMC8//XAwMC9P+uAwMC9v/XAwMC/v+aAwMDAP/DAwMDAv/DAwMDBv/XAwMDCP/XAwMDCf+aAwMDCv+uAwMDC/+aAwMDDP+uAwMDDv/XAwMDEP/XAwMDEf+uAwMDEv+aAwMDFP/DAwMDFf/XAwMDFv+uAwMDFwApAwMDGv+uAwMDG/+uAwMDHP+aAwQAD//DAwQAEf/DAwQBzv/DAwQBz//XAwQB1f/DAwQB2P/XAwQB2//XAwQB3v/XAwQB6v/XAwQB7f/XAwQB8v/DAwQCCP/DAwQCDP/DAwQCav/XAwQCc//DAwQCf//XAwQChf/XAwQCh//XAwQCif/XAwQCjf/XAwQCsv/XAwQCtP/XAwQCz//DAwQC4P/XAwQC8P/XAwQC8v/XAwQC9P/XAwQDCv/XAwQDDP/XAwQDEv/DAwQDFv/XAwQDGv/XAwQDHP/DAwUBn//XAwUBowDhAwUBuP/XAwUBu//XAwUBvv/DAwUB3P/XAwUB4f+uAwUB5P/XAwUCbP/XAwUCewA9AwUCff/sAwUCfv/XAwUChP/XAwUChv/XAwUCiP/XAwUCiv/XAwUCjP/XAwUCqv/XAwUCsf/XAwUCs//XAwUCtv/XAwUCvv/XAwUCwP+uAwUCwv+uAwUCxf/DAwUCxv/XAwUCx//DAwUCyP/XAwUC1f+uAwUC7//XAwUC8f/XAwUC8//XAwUC/v+uAwUDDv/XAwUDEP/XAwUDFf/XAwUDGP/XAwYBz//sAwYB2P/sAwYB2//sAwYB3v/sAwYB4f/sAwYB6v/sAwYB7f/sAwYCav/sAwYCf//sAwYChf/sAwYCh//sAwYCif/sAwYCjf/sAwYCsv/sAwYCtP/sAwYCwP/sAwYCwv/sAwYC1f/sAwYC4P/sAwYC8P/sAwYC8v/sAwYC9P/sAwYC/v/sAwYDCv/sAwYDDP/sAwYDDv/XAwYDEP/XAwYDFv/sAwYDGv/sAwcBn//XAwcBuP/XAwcBu//XAwcBvv/XAwcBwf/XAwcB4f/XAwcCbP/XAwcCfP/XAwcCfv/XAwcChP/XAwcChv/XAwcCiP/XAwcCiv/XAwcCjP/XAwcCsf/XAwcCs//XAwcCv//XAwcCwP/XAwcCwf/XAwcCwv/XAwcCxf+aAwcCx/+aAwcC1P/XAwcC1f/XAwcC7//XAwcC8f/XAwcC8//XAwcC/f/XAwcC/v/XAwcDCf/XAwcDC//XAwcDDv/XAwcDEP/XAwcDFf/XAwcDGf/sAwgBz//sAwgB2P/sAwgB2//sAwgB3v/sAwgB4f/sAwgB6v/sAwgB7f/sAwgCav/sAwgCf//sAwgChf/sAwgCh//sAwgCif/sAwgCjf/sAwgCsv/sAwgCtP/sAwgCwP/sAwgCwv/sAwgC1f/sAwgC4P/sAwgC8P/sAwgC8v/sAwgC9P/sAwgC/v/sAwgDCv/sAwgDDP/sAwgDDv/XAwgDEP/XAwgDFv/sAwgDGv/sAwsABf+aAwsACv+aAwsBnf+uAwsBpv+uAwsBqP/DAwsBqv/DAwsBsP/DAwsBvP9xAwsBvf/DAwsBv//DAwsBwf/DAwsBxP+uAwsB0P/XAwsB3P/DAwsB3//XAwsB4f/XAwsB5P/DAwsCB/+aAwsCC/+aAwsCcv/DAwsCdv/XAwsCfP/DAwsCgP/DAwsCgv/DAwsCn//DAwsCoP/XAwsCqf+uAwsCqv/DAwsCtf9xAwsCtv/DAwsCt//DAwsCuf/DAwsCu//DAwsCvP/XAwsCvf+uAwsCvv/DAwsCv//DAwsCwP/XAwsCwf/DAwsCwv/XAwsCyv/DAwsCy//XAwsC1P/DAwsC1f/XAwsC2f/DAwsC2//DAwsC3f/DAwsC5f/DAwsC5v/XAwsC9//DAwsC+f/DAwsC+//DAwsC/f/DAwsC/v/XAwsDBf/DAwsDBv/XAwsDB//DAwsDCP/XAwsDDf/XAwsDDv/XAwsDD//XAwsDEP/XAwsDF/+uAwsDGP/DAwwABf+aAwwACv+aAwwB0P/XAwwB3P/DAwwB3f/XAwwB3//XAwwB4f/XAwwB5P/DAwwB9v/XAwwCB/+aAwwCC/+aAwwCoP/XAwwCqv/DAwwCtv/DAwwCvP/XAwwCvv/DAwwCwP/XAwwCwv/XAwwCy//XAwwC1f/XAwwC5v/XAwwC+P/XAwwC+v/XAwwC/P/XAwwC/v/XAwwDBv/XAwwDCP/XAwwDDv+aAwwDEP+aAwwDGP/DAw0ABf+aAw0ACv+aAw0Bnf+uAw0Bpv+uAw0BqP/DAw0Bqv/DAw0BsP/DAw0BvP9xAw0Bvf/DAw0Bv//DAw0Bwf/DAw0BxP+uAw0B0P/XAw0B3P/DAw0B3//XAw0B4f/XAw0B5P/DAw0CB/+aAw0CC/+aAw0Ccv/DAw0Cdv/XAw0CfP/DAw0CgP/DAw0Cgv/DAw0Cn//DAw0CoP/XAw0Cqf+uAw0Cqv/DAw0Ctf9xAw0Ctv/DAw0Ct//DAw0Cuf/DAw0Cu//DAw0CvP/XAw0Cvf+uAw0Cvv/DAw0Cv//DAw0CwP/XAw0Cwf/DAw0Cwv/XAw0Cyv/DAw0Cy//XAw0C1P/DAw0C1f/XAw0C2f/DAw0C2//DAw0C3f/DAw0C5f/DAw0C5v/XAw0C9//DAw0C+f/DAw0C+//DAw0C/f/DAw0C/v/XAw0DBf/DAw0DBv/XAw0DB//DAw0DCP/XAw0DDf/XAw0DDv/XAw0DD//XAw0DEP/XAw0DF/+uAw0DGP/DAw4ABf+aAw4ACv+aAw4B0P/XAw4B3P/DAw4B3f/XAw4B3//XAw4B4f/XAw4B5P/DAw4B9v/XAw4CB/+aAw4CC/+aAw4CoP/XAw4Cqv/DAw4Ctv/DAw4CvP/XAw4Cvv/DAw4CwP/XAw4Cwv/XAw4Cy//XAw4C1f/XAw4C5v/XAw4C+P/XAw4C+v/XAw4C/P/XAw4C/v/XAw4DBv/XAw4DCP/XAw4DDv+aAw4DEP+aAw4DGP/DAw8BowDhAw8C6gApAw8DDv/XAw8DEP/XAxAABf/sAxAACv/sAxACB//sAxACC//sAxEABf+aAxEACv+aAxEBnf+uAxEBpv+uAxEBqP/DAxEBqv/DAxEBsP/DAxEBvP9xAxEBvf/DAxEBv//DAxEBwf/DAxEBxP+uAxEB0P/XAxEB3P/DAxEB3//XAxEB4f/XAxEB5P/DAxECB/+aAxECC/+aAxECcv/DAxECdv/XAxECfP/DAxECgP/DAxECgv/DAxECn//DAxECoP/XAxECqf+uAxECqv/DAxECtf9xAxECtv/DAxECt//DAxECuf/DAxECu//DAxECvP/XAxECvf+uAxECvv/DAxECv//DAxECwP/XAxECwf/DAxECwv/XAxECyv/DAxECy//XAxEC1P/DAxEC1f/XAxEC2f/DAxEC2//DAxEC3f/DAxEC5f/DAxEC5v/XAxEC9//DAxEC+f/DAxEC+//DAxEC/f/DAxEC/v/XAxEDBf/DAxEDBv/XAxEDB//DAxEDCP/XAxEDDf/XAxEDDv/XAxEDD//XAxEDEP/XAxEDF/+uAxEDGP/DAxIABf+aAxIACv+aAxIB0P/XAxIB3P/DAxIB3f/XAxIB3//XAxIB4f/XAxIB5P/DAxIB9v/XAxICB/+aAxICC/+aAxICoP/XAxICqv/DAxICtv/DAxICvP/XAxICvv/DAxICwP/XAxICwv/XAxICy//XAxIC1f/XAxIC5v/XAxIC+P/XAxIC+v/XAxIC/P/XAxIC/v/XAxIDBv/XAxIDCP/XAxIDDv+aAxIDEP+aAxIDGP/DAxMABf+aAxMACv+aAxMBnf+uAxMBpv+uAxMBqP/DAxMBqv/DAxMBsP/DAxMBvP9xAxMBvf/DAxMBv//DAxMBwf/DAxMBxP+uAxMB0P/XAxMB3P/DAxMB3//XAxMB4f/XAxMB5P/DAxMCB/+aAxMCC/+aAxMCcv/DAxMCdv/XAxMCfP/DAxMCgP/DAxMCgv/DAxMCn//DAxMCoP/XAxMCqf+uAxMCqv/DAxMCtf9xAxMCtv/DAxMCt//DAxMCuf/DAxMCu//DAxMCvP/XAxMCvf+uAxMCvv/DAxMCv//DAxMCwP/XAxMCwf/DAxMCwv/XAxMCyv/DAxMCy//XAxMC1P/DAxMC1f/XAxMC2f/DAxMC2//DAxMC3f/DAxMC5f/DAxMC5v/XAxMC9//DAxMC+f/DAxMC+//DAxMC/f/DAxMC/v/XAxMDBf/DAxMDBv/XAxMDB//DAxMDCP/XAxMDDf/XAxMDDv/XAxMDD//XAxMDEP/XAxMDF/+uAxMDGP/DAxQABf+aAxQACv+aAxQB0P/XAxQB3P/DAxQB3f/XAxQB3//XAxQB4f/XAxQB5P/DAxQB9v/XAxQCB/+aAxQCC/+aAxQCoP/XAxQCqv/DAxQCtv/DAxQCvP/XAxQCvv/DAxQCwP/XAxQCwv/XAxQCy//XAxQC1f/XAxQC5v/XAxQC+P/XAxQC+v/XAxQC/P/XAxQC/v/XAxQDBv/XAxQDCP/XAxQDDv+aAxQDEP+aAxQDGP/DAxUAD/+uAxUAEf+uAxUBqv/sAxUBsP/XAxUBvP/XAxUBv//XAxUCCP+uAxUCDP+uAxUCcv/sAxUCgP/sAxUCgv/sAxUCn//XAxUCtf/XAxUCt//sAxUCuf/sAxUCu//XAxUCyv/XAxUC2f/sAxUC2//sAxUC3f/sAxUC5f/XAxUDBf/XAxUDB//XAxYABf/XAxYACv/XAxYB0P/sAxYB3f/sAxYB3//sAxYB9v/sAxYCB//XAxYCC//XAxYCoP/sAxYCvP/sAxYCy//sAxYC5v/sAxYC+P/sAxYC+v/sAxYC/P/sAxYDBv/sAxYDCP/sAxYDDv/XAxYDEP/XAxcABf+uAxcACv+uAxcBnf/DAxcBpv/DAxcBqv/XAxcBsP/XAxcBvP/DAxcBv//XAxcBwf/XAxcBxP/DAxcB3P/XAxcB5P/XAxcCB/+uAxcCC/+uAxcCcv/XAxcCfP/XAxcCgP/XAxcCgv/XAxcCn//XAxcCqf/DAxcCqv/XAxcCtf/DAxcCtv/XAxcCt//XAxcCuf/XAxcCu//XAxcCvf/DAxcCvv/XAxcCv//XAxcCwf/XAxcCyv/XAxcC1P/XAxcC2f/XAxcC2//XAxcC3f/XAxcC5f/XAxcC/f/XAxcDBf/XAxcDB//XAxcDDf/XAxcDD//XAxcDF//DAxcDGP/XAxgABf+aAxgACv+aAxgB0P/XAxgB3P/DAxgB3f/XAxgB3//XAxgB4f/XAxgB5P/DAxgB9v/XAxgCB/+aAxgCC/+aAxgCoP/XAxgCqv/DAxgCtv/DAxgCvP/XAxgCvv/DAxgCwP/XAxgCwv/XAxgCy//XAxgC1f/XAxgC5v/XAxgC+P/XAxgC+v/XAxgC/P/XAxgC/v/XAxgDBv/XAxgDCP/XAxgDDv+aAxgDEP+aAxgDGP/DAxkB4f/XAxkCwP/XAxkCwv/XAxkC1f/XAxkC/v/XAxsBowDhAxsC6gApAxsDDv/XAxsDEP/XAxwABf/sAxwACv/sAxwCB//sAxwCC//sAx0ABf9xAx0ACv9xAx0AJv/XAx0AKv/XAx0ALQEKAx0AMv/XAx0ANP/XAx0AN/9xAx0AOf+uAx0AOv+uAx0APP+FAx0Aif/XAx0AlP/XAx0Alf/XAx0Alv/XAx0Al//XAx0AmP/XAx0Amv/XAx0An/+FAx0AyP/XAx0Ayv/XAx0AzP/XAx0Azv/XAx0A3v/XAx0A4P/XAx0A4v/XAx0A5P/XAx0BDv/XAx0BEP/XAx0BEv/XAx0BFP/XAx0BJP9xAx0BJv9xAx0BNv+uAx0BOP+FAx0BOv+FAx0BR//XAx0B+v+uAx0B/P+uAx0B/v+uAx0CAP+FAx0CB/9xAx0CC/9xAx0CX//XAx0DSf/XAx0DS//XAx0DTf/XAx0DT//XAx0DUf/XAx0DU//XAx0DVf/XAx0DV//XAx0DWf/XAx0DW//XAx0DXf/XAx0DX//XAx0Db/+FAx0Dcf+FAx0Dc/+FAx0Dj/9xAx4ABf/sAx4ACv/sAx4CB//sAx4CC//sAx8ABf9xAx8ACv9xAx8AJv/XAx8AKv/XAx8ALQEKAx8AMv/XAx8ANP/XAx8AN/9xAx8AOf+uAx8AOv+uAx8APP+FAx8Aif/XAx8AlP/XAx8Alf/XAx8Alv/XAx8Al//XAx8AmP/XAx8Amv/XAx8An/+FAx8AyP/XAx8Ayv/XAx8AzP/XAx8Azv/XAx8A3v/XAx8A4P/XAx8A4v/XAx8A5P/XAx8BDv/XAx8BEP/XAx8BEv/XAx8BFP/XAx8BJP9xAx8BJv9xAx8BNv+uAx8BOP+FAx8BOv+FAx8BR//XAx8B+v+uAx8B/P+uAx8B/v+uAx8CAP+FAx8CB/9xAx8CC/9xAx8CX//XAx8DSf/XAx8DS//XAx8DTf/XAx8DT//XAx8DUf/XAx8DU//XAx8DVf/XAx8DV//XAx8DWf/XAx8DW//XAx8DXf/XAx8DX//XAx8Db/+FAx8Dcf+FAx8Dc/+FAx8Dj/9xAyAABf/sAyAACv/sAyACB//sAyACC//sAyEABf9xAyEACv9xAyEAJv/XAyEAKv/XAyEALQEKAyEAMv/XAyEANP/XAyEAN/9xAyEAOf+uAyEAOv+uAyEAPP+FAyEAif/XAyEAlP/XAyEAlf/XAyEAlv/XAyEAl//XAyEAmP/XAyEAmv/XAyEAn/+FAyEAyP/XAyEAyv/XAyEAzP/XAyEAzv/XAyEA3v/XAyEA4P/XAyEA4v/XAyEA5P/XAyEBDv/XAyEBEP/XAyEBEv/XAyEBFP/XAyEBJP9xAyEBJv9xAyEBNv+uAyEBOP+FAyEBOv+FAyEBR//XAyEB+v+uAyEB/P+uAyEB/v+uAyECAP+FAyECB/9xAyECC/9xAyECX//XAyEDSf/XAyEDS//XAyEDTf/XAyEDT//XAyEDUf/XAyEDU//XAyEDVf/XAyEDV//XAyEDWf/XAyEDW//XAyEDXf/XAyEDX//XAyEDb/+FAyEDcf+FAyEDc/+FAyEDj/9xAyIABf/sAyIACv/sAyICB//sAyICC//sAyMABf9xAyMACv9xAyMAJv/XAyMAKv/XAyMALQEKAyMAMv/XAyMANP/XAyMAN/9xAyMAOf+uAyMAOv+uAyMAPP+FAyMAif/XAyMAlP/XAyMAlf/XAyMAlv/XAyMAl//XAyMAmP/XAyMAmv/XAyMAn/+FAyMAyP/XAyMAyv/XAyMAzP/XAyMAzv/XAyMA3v/XAyMA4P/XAyMA4v/XAyMA5P/XAyMBDv/XAyMBEP/XAyMBEv/XAyMBFP/XAyMBJP9xAyMBJv9xAyMBNv+uAyMBOP+FAyMBOv+FAyMBR//XAyMB+v+uAyMB/P+uAyMB/v+uAyMCAP+FAyMCB/9xAyMCC/9xAyMCX//XAyMDSf/XAyMDS//XAyMDTf/XAyMDT//XAyMDUf/XAyMDU//XAyMDVf/XAyMDV//XAyMDWf/XAyMDW//XAyMDXf/XAyMDX//XAyMDb/+FAyMDcf+FAyMDc/+FAyMDj/9xAyQABf/sAyQACv/sAyQCB//sAyQCC//sAyUABf9xAyUACv9xAyUAJv/XAyUAKv/XAyUALQEKAyUAMv/XAyUANP/XAyUAN/9xAyUAOf+uAyUAOv+uAyUAPP+FAyUAif/XAyUAlP/XAyUAlf/XAyUAlv/XAyUAl//XAyUAmP/XAyUAmv/XAyUAn/+FAyUAyP/XAyUAyv/XAyUAzP/XAyUAzv/XAyUA3v/XAyUA4P/XAyUA4v/XAyUA5P/XAyUBDv/XAyUBEP/XAyUBEv/XAyUBFP/XAyUBJP9xAyUBJv9xAyUBNv+uAyUBOP+FAyUBOv+FAyUBR//XAyUB+v+uAyUB/P+uAyUB/v+uAyUCAP+FAyUCB/9xAyUCC/9xAyUCX//XAyUDSf/XAyUDS//XAyUDTf/XAyUDT//XAyUDUf/XAyUDU//XAyUDVf/XAyUDV//XAyUDWf/XAyUDW//XAyUDXf/XAyUDX//XAyUDb/+FAyUDcf+FAyUDc/+FAyUDj/9xAyYABf/sAyYACv/sAyYCB//sAyYCC//sAycABf9xAycACv9xAycAJv/XAycAKv/XAycALQEKAycAMv/XAycANP/XAycAN/9xAycAOf+uAycAOv+uAycAPP+FAycAif/XAycAlP/XAycAlf/XAycAlv/XAycAl//XAycAmP/XAycAmv/XAycAn/+FAycAyP/XAycAyv/XAycAzP/XAycAzv/XAycA3v/XAycA4P/XAycA4v/XAycA5P/XAycBDv/XAycBEP/XAycBEv/XAycBFP/XAycBJP9xAycBJv9xAycBNv+uAycBOP+FAycBOv+FAycBR//XAycB+v+uAycB/P+uAycB/v+uAycCAP+FAycCB/9xAycCC/9xAycCX//XAycDSf/XAycDS//XAycDTf/XAycDT//XAycDUf/XAycDU//XAycDVf/XAycDV//XAycDWf/XAycDW//XAycDXf/XAycDX//XAycDb/+FAycDcf+FAycDc/+FAycDj/9xAygABf/sAygACv/sAygCB//sAygCC//sAykABf9xAykACv9xAykAJv/XAykAKv/XAykALQEKAykAMv/XAykANP/XAykAN/9xAykAOf+uAykAOv+uAykAPP+FAykAif/XAykAlP/XAykAlf/XAykAlv/XAykAl//XAykAmP/XAykAmv/XAykAn/+FAykAyP/XAykAyv/XAykAzP/XAykAzv/XAykA3v/XAykA4P/XAykA4v/XAykA5P/XAykBDv/XAykBEP/XAykBEv/XAykBFP/XAykBJP9xAykBJv9xAykBNv+uAykBOP+FAykBOv+FAykBR//XAykB+v+uAykB/P+uAykB/v+uAykCAP+FAykCB/9xAykCC/9xAykCX//XAykDSf/XAykDS//XAykDTf/XAykDT//XAykDUf/XAykDU//XAykDVf/XAykDV//XAykDWf/XAykDW//XAykDXf/XAykDX//XAykDb/+FAykDcf+FAykDc/+FAykDj/9xAyoABf/sAyoACv/sAyoCB//sAyoCC//sAysABf9xAysACv9xAysAJv/XAysAKv/XAysALQEKAysAMv/XAysANP/XAysAN/9xAysAOf+uAysAOv+uAysAPP+FAysAif/XAysAlP/XAysAlf/XAysAlv/XAysAl//XAysAmP/XAysAmv/XAysAn/+FAysAyP/XAysAyv/XAysAzP/XAysAzv/XAysA3v/XAysA4P/XAysA4v/XAysA5P/XAysBDv/XAysBEP/XAysBEv/XAysBFP/XAysBJP9xAysBJv9xAysBNv+uAysBOP+FAysBOv+FAysBR//XAysB+v+uAysB/P+uAysB/v+uAysCAP+FAysCB/9xAysCC/9xAysCX//XAysDSf/XAysDS//XAysDTf/XAysDT//XAysDUf/XAysDU//XAysDVf/XAysDV//XAysDWf/XAysDW//XAysDXf/XAysDX//XAysDb/+FAysDcf+FAysDc/+FAysDj/9xAywABf/sAywACv/sAywCB//sAywCC//sAy0ABf9xAy0ACv9xAy0AJv/XAy0AKv/XAy0ALQEKAy0AMv/XAy0ANP/XAy0AN/9xAy0AOf+uAy0AOv+uAy0APP+FAy0Aif/XAy0AlP/XAy0Alf/XAy0Alv/XAy0Al//XAy0AmP/XAy0Amv/XAy0An/+FAy0AyP/XAy0Ayv/XAy0AzP/XAy0Azv/XAy0A3v/XAy0A4P/XAy0A4v/XAy0A5P/XAy0BDv/XAy0BEP/XAy0BEv/XAy0BFP/XAy0BJP9xAy0BJv9xAy0BNv+uAy0BOP+FAy0BOv+FAy0BR//XAy0B+v+uAy0B/P+uAy0B/v+uAy0CAP+FAy0CB/9xAy0CC/9xAy0CX//XAy0DSf/XAy0DS//XAy0DTf/XAy0DT//XAy0DUf/XAy0DU//XAy0DVf/XAy0DV//XAy0DWf/XAy0DW//XAy0DXf/XAy0DX//XAy0Db/+FAy0Dcf+FAy0Dc/+FAy0Dj/9xAy4ABf/sAy4ACv/sAy4CB//sAy4CC//sAy8ABf9xAy8ACv9xAy8AJv/XAy8AKv/XAy8ALQEKAy8AMv/XAy8ANP/XAy8AN/9xAy8AOf+uAy8AOv+uAy8APP+FAy8Aif/XAy8AlP/XAy8Alf/XAy8Alv/XAy8Al//XAy8AmP/XAy8Amv/XAy8An/+FAy8AyP/XAy8Ayv/XAy8AzP/XAy8Azv/XAy8A3v/XAy8A4P/XAy8A4v/XAy8A5P/XAy8BDv/XAy8BEP/XAy8BEv/XAy8BFP/XAy8BJP9xAy8BJv9xAy8BNv+uAy8BOP+FAy8BOv+FAy8BR//XAy8B+v+uAy8B/P+uAy8B/v+uAy8CAP+FAy8CB/9xAy8CC/9xAy8CX//XAy8DSf/XAy8DS//XAy8DTf/XAy8DT//XAy8DUf/XAy8DU//XAy8DVf/XAy8DV//XAy8DWf/XAy8DW//XAy8DXf/XAy8DX//XAy8Db/+FAy8Dcf+FAy8Dc/+FAy8Dj/9xAzAABf/sAzAACv/sAzACB//sAzACC//sAzEABf9xAzEACv9xAzEAJv/XAzEAKv/XAzEALQEKAzEAMv/XAzEANP/XAzEAN/9xAzEAOf+uAzEAOv+uAzEAPP+FAzEAif/XAzEAlP/XAzEAlf/XAzEAlv/XAzEAl//XAzEAmP/XAzEAmv/XAzEAn/+FAzEAyP/XAzEAyv/XAzEAzP/XAzEAzv/XAzEA3v/XAzEA4P/XAzEA4v/XAzEA5P/XAzEBDv/XAzEBEP/XAzEBEv/XAzEBFP/XAzEBJP9xAzEBJv9xAzEBNv+uAzEBOP+FAzEBOv+FAzEBR//XAzEB+v+uAzEB/P+uAzEB/v+uAzECAP+FAzECB/9xAzECC/9xAzECX//XAzEDSf/XAzEDS//XAzEDTf/XAzEDT//XAzEDUf/XAzEDU//XAzEDVf/XAzEDV//XAzEDWf/XAzEDW//XAzEDXf/XAzEDX//XAzEDb/+FAzEDcf+FAzEDc/+FAzEDj/9xAzIABf/sAzIACv/sAzICB//sAzICC//sAzMABf9xAzMACv9xAzMAJv/XAzMAKv/XAzMALQEKAzMAMv/XAzMANP/XAzMAN/9xAzMAOf+uAzMAOv+uAzMAPP+FAzMAif/XAzMAlP/XAzMAlf/XAzMAlv/XAzMAl//XAzMAmP/XAzMAmv/XAzMAn/+FAzMAyP/XAzMAyv/XAzMAzP/XAzMAzv/XAzMA3v/XAzMA4P/XAzMA4v/XAzMA5P/XAzMBDv/XAzMBEP/XAzMBEv/XAzMBFP/XAzMBJP9xAzMBJv9xAzMBNv+uAzMBOP+FAzMBOv+FAzMBR//XAzMB+v+uAzMB/P+uAzMB/v+uAzMCAP+FAzMCB/9xAzMCC/9xAzMCX//XAzMDSf/XAzMDS//XAzMDTf/XAzMDT//XAzMDUf/XAzMDU//XAzMDVf/XAzMDV//XAzMDWf/XAzMDW//XAzMDXf/XAzMDX//XAzMDb/+FAzMDcf+FAzMDc/+FAzMDj/9xAzQABf/sAzQACv/sAzQCB//sAzQCC//sAzUALQB7AzYABf/sAzYACv/sAzYAWf/XAzYAWv/XAzYAW//XAzYAXP/XAzYAXf/sAzYAv//XAzYBN//XAzYBPP/sAzYBPv/sAzYBQP/sAzYB+//XAzYB/f/XAzYCB//sAzYCC//sAzYDcP/XAzcALQB7AzgABf/sAzgACv/sAzgAWf/XAzgAWv/XAzgAW//XAzgAXP/XAzgAXf/sAzgAv//XAzgBN//XAzgBPP/sAzgBPv/sAzgBQP/sAzgB+//XAzgB/f/XAzgCB//sAzgCC//sAzgDcP/XAzkALQB7AzoABf/sAzoACv/sAzoAWf/XAzoAWv/XAzoAW//XAzoAXP/XAzoAXf/sAzoAv//XAzoBN//XAzoBPP/sAzoBPv/sAzoBQP/sAzoB+//XAzoB/f/XAzoCB//sAzoCC//sAzoDcP/XAzsALQB7AzwABf/sAzwACv/sAzwAWf/XAzwAWv/XAzwAW//XAzwAXP/XAzwAXf/sAzwAv//XAzwBN//XAzwBPP/sAzwBPv/sAzwBQP/sAzwB+//XAzwB/f/XAzwCB//sAzwCC//sAzwDcP/XAz0ALQB7Az4ABf/sAz4ACv/sAz4AWf/XAz4AWv/XAz4AW//XAz4AXP/XAz4AXf/sAz4Av//XAz4BN//XAz4BPP/sAz4BPv/sAz4BQP/sAz4B+//XAz4B/f/XAz4CB//sAz4CC//sAz4DcP/XAz8ALQB7A0AABf/sA0AACv/sA0AAWf/XA0AAWv/XA0AAW//XA0AAXP/XA0AAXf/sA0AAv//XA0ABN//XA0ABPP/sA0ABPv/sA0ABQP/sA0AB+//XA0AB/f/XA0ACB//sA0ACC//sA0ADcP/XA0EALQB7A0IABf/sA0IACv/sA0IAWf/XA0IAWv/XA0IAW//XA0IAXP/XA0IAXf/sA0IAv//XA0IBN//XA0IBPP/sA0IBPv/sA0IBQP/sA0IB+//XA0IB/f/XA0ICB//sA0ICC//sA0IDcP/XA0MALQB7A0QABf/sA0QACv/sA0QAWf/XA0QAWv/XA0QAW//XA0QAXP/XA0QAXf/sA0QAv//XA0QBN//XA0QBPP/sA0QBPv/sA0QBQP/sA0QB+//XA0QB/f/XA0QCB//sA0QCC//sA0QDcP/XA0kAD/+uA0kAEf+uA0kAJP/XA0kAN//DA0kAOf/sA0kAOv/sA0kAO//XA0kAPP/sA0kAPf/sA0kAgv/XA0kAg//XA0kAhP/XA0kAhf/XA0kAhv/XA0kAh//XA0kAn//sA0kAwv/XA0kAxP/XA0kAxv/XA0kBJP/DA0kBJv/DA0kBNv/sA0kBOP/sA0kBOv/sA0kBO//sA0kBPf/sA0kBP//sA0kBQ//XA0kBoP/sA0kB+v/sA0kB/P/sA0kB/v/sA0kCAP/sA0kCCP+uA0kCDP+uA0kCWP/XA0kDHf/XA0kDH//XA0kDIf/XA0kDI//XA0kDJf/XA0kDJ//XA0kDKf/XA0kDK//XA0kDLf/XA0kDL//XA0kDMf/XA0kDM//XA0kDb//sA0kDcf/sA0kDc//sA0kDj//DA0oABf/sA0oACv/sA0oAWf/XA0oAWv/XA0oAW//XA0oAXP/XA0oAXf/sA0oAv//XA0oBN//XA0oBPP/sA0oBPv/sA0oBQP/sA0oB+//XA0oB/f/XA0oCB//sA0oCC//sA0oDcP/XA0sAD/+uA0sAEf+uA0sAJP/XA0sAN//DA0sAOf/sA0sAOv/sA0sAO//XA0sAPP/sA0sAPf/sA0sAgv/XA0sAg//XA0sAhP/XA0sAhf/XA0sAhv/XA0sAh//XA0sAn//sA0sAwv/XA0sAxP/XA0sAxv/XA0sBJP/DA0sBJv/DA0sBNv/sA0sBOP/sA0sBOv/sA0sBO//sA0sBPf/sA0sBP//sA0sBQ//XA0sBoP/sA0sB+v/sA0sB/P/sA0sB/v/sA0sCAP/sA0sCCP+uA0sCDP+uA0sCWP/XA0sDHf/XA0sDH//XA0sDIf/XA0sDI//XA0sDJf/XA0sDJ//XA0sDKf/XA0sDK//XA0sDLf/XA0sDL//XA0sDMf/XA0sDM//XA0sDb//sA0sDcf/sA0sDc//sA0sDj//DA0wABf/sA0wACv/sA0wAWf/XA0wAWv/XA0wAW//XA0wAXP/XA0wAXf/sA0wAv//XA0wBN//XA0wBPP/sA0wBPv/sA0wBQP/sA0wB+//XA0wB/f/XA0wCB//sA0wCC//sA0wDcP/XA00AD/+uA00AEf+uA00AJP/XA00AN//DA00AOf/sA00AOv/sA00AO//XA00APP/sA00APf/sA00Agv/XA00Ag//XA00AhP/XA00Ahf/XA00Ahv/XA00Ah//XA00An//sA00Awv/XA00AxP/XA00Axv/XA00BJP/DA00BJv/DA00BNv/sA00BOP/sA00BOv/sA00BO//sA00BPf/sA00BP//sA00BQ//XA00BoP/sA00B+v/sA00B/P/sA00B/v/sA00CAP/sA00CCP+uA00CDP+uA00CWP/XA00DHf/XA00DH//XA00DIf/XA00DI//XA00DJf/XA00DJ//XA00DKf/XA00DK//XA00DLf/XA00DL//XA00DMf/XA00DM//XA00Db//sA00Dcf/sA00Dc//sA00Dj//DA08AD/+uA08AEf+uA08AJP/XA08AN//DA08AOf/sA08AOv/sA08AO//XA08APP/sA08APf/sA08Agv/XA08Ag//XA08AhP/XA08Ahf/XA08Ahv/XA08Ah//XA08An//sA08Awv/XA08AxP/XA08Axv/XA08BJP/DA08BJv/DA08BNv/sA08BOP/sA08BOv/sA08BO//sA08BPf/sA08BP//sA08BQ//XA08BoP/sA08B+v/sA08B/P/sA08B/v/sA08CAP/sA08CCP+uA08CDP+uA08CWP/XA08DHf/XA08DH//XA08DIf/XA08DI//XA08DJf/XA08DJ//XA08DKf/XA08DK//XA08DLf/XA08DL//XA08DMf/XA08DM//XA08Db//sA08Dcf/sA08Dc//sA08Dj//DA1EAD/+uA1EAEf+uA1EAJP/XA1EAN//DA1EAOf/sA1EAOv/sA1EAO//XA1EAPP/sA1EAPf/sA1EAgv/XA1EAg//XA1EAhP/XA1EAhf/XA1EAhv/XA1EAh//XA1EAn//sA1EAwv/XA1EAxP/XA1EAxv/XA1EBJP/DA1EBJv/DA1EBNv/sA1EBOP/sA1EBOv/sA1EBO//sA1EBPf/sA1EBP//sA1EBQ//XA1EBoP/sA1EB+v/sA1EB/P/sA1EB/v/sA1ECAP/sA1ECCP+uA1ECDP+uA1ECWP/XA1EDHf/XA1EDH//XA1EDIf/XA1EDI//XA1EDJf/XA1EDJ//XA1EDKf/XA1EDK//XA1EDLf/XA1EDL//XA1EDMf/XA1EDM//XA1EDb//sA1EDcf/sA1EDc//sA1EDj//DA1MAD/+uA1MAEf+uA1MAJP/XA1MAN//DA1MAOf/sA1MAOv/sA1MAO//XA1MAPP/sA1MAPf/sA1MAgv/XA1MAg//XA1MAhP/XA1MAhf/XA1MAhv/XA1MAh//XA1MAn//sA1MAwv/XA1MAxP/XA1MAxv/XA1MBJP/DA1MBJv/DA1MBNv/sA1MBOP/sA1MBOv/sA1MBO//sA1MBPf/sA1MBP//sA1MBQ//XA1MBoP/sA1MB+v/sA1MB/P/sA1MB/v/sA1MCAP/sA1MCCP+uA1MCDP+uA1MCWP/XA1MDHf/XA1MDH//XA1MDIf/XA1MDI//XA1MDJf/XA1MDJ//XA1MDKf/XA1MDK//XA1MDLf/XA1MDL//XA1MDMf/XA1MDM//XA1MDb//sA1MDcf/sA1MDc//sA1MDj//DA1UAD/+uA1UAEf+uA1UAJP/XA1UAN//DA1UAOf/sA1UAOv/sA1UAO//XA1UAPP/sA1UAPf/sA1UAgv/XA1UAg//XA1UAhP/XA1UAhf/XA1UAhv/XA1UAh//XA1UAn//sA1UAwv/XA1UAxP/XA1UAxv/XA1UBJP/DA1UBJv/DA1UBNv/sA1UBOP/sA1UBOv/sA1UBO//sA1UBPf/sA1UBP//sA1UBQ//XA1UBoP/sA1UB+v/sA1UB/P/sA1UB/v/sA1UCAP/sA1UCCP+uA1UCDP+uA1UCWP/XA1UDHf/XA1UDH//XA1UDIf/XA1UDI//XA1UDJf/XA1UDJ//XA1UDKf/XA1UDK//XA1UDLf/XA1UDL//XA1UDMf/XA1UDM//XA1UDb//sA1UDcf/sA1UDc//sA1UDj//DA1gASQBSA1gAVwBSA1gAWQBmA1gAWgBmA1gAWwBmA1gAXABmA1gAvwBmA1gBJQBSA1gBJwBSA1gBNwBmA1gB+wBmA1gB/QBmA1gCNABSA1gCNQBSA1gCXQBSA1gCXgBSA1gDcABmA1gDjQBSA1gDkABSA1oASQBSA1oAVwBSA1oAWQBmA1oAWgBmA1oAWwBmA1oAXABmA1oAvwBmA1oBJQBSA1oBJwBSA1oBNwBmA1oB+wBmA1oB/QBmA1oCNABSA1oCNQBSA1oCXQBSA1oCXgBSA1oDcABmA1oDjQBSA1oDkABSA1wASQBSA1wAVwBSA1wAWQBmA1wAWgBmA1wAWwBmA1wAXABmA1wAvwBmA1wBJQBSA1wBJwBSA1wBNwBmA1wB+wBmA1wB/QBmA1wCNABSA1wCNQBSA1wCXQBSA1wCXgBSA1wDcABmA1wDjQBSA1wDkABSA14ASQBSA14AVwBSA14AWQBmA14AWgBmA14AWwBmA14AXABmA14AvwBmA14BJQBSA14BJwBSA14BNwBmA14B+wBmA14B/QBmA14CNABSA14CNQBSA14CXQBSA14CXgBSA14DcABmA14DjQBSA14DkABSA2AASQBSA2AAVwBSA2AAWQBmA2AAWgBmA2AAWwBmA2AAXABmA2AAvwBmA2ABJQBSA2ABJwBSA2ABNwBmA2AB+wBmA2AB/QBmA2ACNABSA2ACNQBSA2ACXQBSA2ACXgBSA2ADcABmA2ADjQBSA2ADkABSA2EAD//XA2EAEf/XA2EAJP/sA2EAgv/sA2EAg//sA2EAhP/sA2EAhf/sA2EAhv/sA2EAh//sA2EAwv/sA2EAxP/sA2EAxv/sA2EBQ//sA2ECCP/XA2ECDP/XA2ECWP/sA2EDHf/sA2EDH//sA2EDIf/sA2EDI//sA2EDJf/sA2EDJ//sA2EDKf/sA2EDK//sA2EDLf/sA2EDL//sA2EDMf/sA2EDM//sA2YASQBmA2YAVwBmA2YAWQBmA2YAWgBmA2YAWwBmA2YAXABmA2YAvwBmA2YBJQBmA2YBJwBmA2YBNwBmA2YB+wBmA2YB/QBmA2YCNABmA2YCNQBmA2YCXQBmA2YCXgBmA2YDcABmA2YDjQBmA2YDkABmA2gASQBmA2gAVwBmA2gAWQBmA2gAWgBmA2gAWwBmA2gAXABmA2gAvwBmA2gBJQBmA2gBJwBmA2gBNwBmA2gB+wBmA2gB/QBmA2gCNABmA2gCNQBmA2gCXQBmA2gCXgBmA2gDcABmA2gDjQBmA2gDkABmA2oASQBmA2oAVwBmA2oAWQBmA2oAWgBmA2oAWwBmA2oAXABmA2oAvwBmA2oBJQBmA2oBJwBmA2oBNwBmA2oB+wBmA2oB/QBmA2oCNABmA2oCNQBmA2oCXQBmA2oCXgBmA2oDcABmA2oDjQBmA2oDkABmA2wASQBmA2wAVwBmA2wAWQBmA2wAWgBmA2wAWwBmA2wAXABmA2wAvwBmA2wBJQBmA2wBJwBmA2wBNwBmA2wB+wBmA2wB/QBmA2wCNABmA2wCNQBmA2wCXQBmA2wCXgBmA2wDcABmA2wDjQBmA2wDkABmA24ASQBmA24AVwBmA24AWQBmA24AWgBmA24AWwBmA24AXABmA24AvwBmA24BJQBmA24BJwBmA24BNwBmA24B+wBmA24B/QBmA24CNABmA24CNQBmA24CXQBmA24CXgBmA24DcABmA24DjQBmA24DkABmA28AD/+FA28AEf+FA28AIgApA28AJP+FA28AJv/XA28AKv/XA28AMv/XA28ANP/XA28ARP+aA28ARv+aA28AR/+aA28ASP+aA28ASv/XA28AUP/DA28AUf/DA28AUv+aA28AU//DA28AVP+aA28AVf/DA28AVv+uA28AWP/DA28AXf/XA28Agv+FA28Ag/+FA28AhP+FA28Ahf+FA28Ahv+FA28Ah/+FA28Aif/XA28AlP/XA28Alf/XA28Alv/XA28Al//XA28AmP/XA28Amv/XA28Aov+aA28Ao/+aA28ApP+aA28Apf+aA28Apv+aA28Ap/+aA28AqP+aA28Aqf+aA28Aqv+aA28Aq/+aA28ArP+aA28Arf+aA28AtP+aA28Atf+aA28Atv+aA28At/+aA28AuP+aA28Auv+aA28Au//DA28AvP/DA28Avf/DA28Avv/DA28Awv+FA28Aw/+aA28AxP+FA28Axf+aA28Axv+FA28Ax/+aA28AyP/XA28Ayf+aA28Ayv/XA28Ay/+aA28AzP/XA28Azf+aA28Azv/XA28Az/+aA28A0f+aA28A0/+aA28A1f+aA28A1/+aA28A2f+aA28A2/+aA28A3f+aA28A3v/XA28A3//XA28A4P/XA28A4f/XA28A4v/XA28A4//XA28A5P/XA28A5f/XA28A+v/DA28BBv/DA28BCP/DA28BDf/DA28BDv/XA28BD/+aA28BEP/XA28BEf+aA28BEv/XA28BE/+aA28BFP/XA28BFf+aA28BF//DA28BGf/DA28BHf+uA28BIf+uA28BK//DA28BLf/DA28BL//DA28BMf/DA28BM//DA28BNf/DA28BPP/XA28BPv/XA28BQP/XA28BQ/+FA28BRP+aA28BRv+aA28BR//XA28BSP+aA28BSv+uA28CCP+FA28CDP+FA28CV//DA28CWP+FA28CWf+aA28CX//XA28CYP+aA28CYv/DA28DHf+FA28DHv+aA28DH/+FA28DIP+aA28DIf+FA28DIv+aA28DI/+FA28DJf+FA28DJv+aA28DJ/+FA28DKP+aA28DKf+FA28DKv+aA28DK/+FA28DLP+aA28DLf+FA28DLv+aA28DL/+FA28DMP+aA28DMf+FA28DMv+aA28DM/+FA28DNP+aA28DNv+aA28DOP+aA28DOv+aA28DPP+aA28DQP+aA28DQv+aA28DRP+aA28DSf/XA28DSv+aA28DS//XA28DTP+aA28DTf/XA28DTv+aA28DT//XA28DUf/XA28DUv+aA28DU//XA28DVP+aA28DVf/XA28DVv+aA28DV//XA28DWP+aA28DWf/XA28DWv+aA28DW//XA28DXP+aA28DXf/XA28DXv+aA28DX//XA28DYP+aA28DYv/DA28DZP/DA28DZv/DA28DaP/DA28Dav/DA28DbP/DA28Dbv/DA3AABQBSA3AACgBSA3AAD/+uA3AAEf+uA3AAIgApA3ACBwBSA3ACCP+uA3ACCwBSA3ACDP+uA3EAD/+FA3EAEf+FA3EAIgApA3EAJP+FA3EAJv/XA3EAKv/XA3EAMv/XA3EANP/XA3EARP+aA3EARv+aA3EAR/+aA3EASP+aA3EASv/XA3EAUP/DA3EAUf/DA3EAUv+aA3EAU//DA3EAVP+aA3EAVf/DA3EAVv+uA3EAWP/DA3EAXf/XA3EAgv+FA3EAg/+FA3EAhP+FA3EAhf+FA3EAhv+FA3EAh/+FA3EAif/XA3EAlP/XA3EAlf/XA3EAlv/XA3EAl//XA3EAmP/XA3EAmv/XA3EAov+aA3EAo/+aA3EApP+aA3EApf+aA3EApv+aA3EAp/+aA3EAqP+aA3EAqf+aA3EAqv+aA3EAq/+aA3EArP+aA3EArf+aA3EAtP+aA3EAtf+aA3EAtv+aA3EAt/+aA3EAuP+aA3EAuv+aA3EAu//DA3EAvP/DA3EAvf/DA3EAvv/DA3EAwv+FA3EAw/+aA3EAxP+FA3EAxf+aA3EAxv+FA3EAx/+aA3EAyP/XA3EAyf+aA3EAyv/XA3EAy/+aA3EAzP/XA3EAzf+aA3EAzv/XA3EAz/+aA3EA0f+aA3EA0/+aA3EA1f+aA3EA1/+aA3EA2f+aA3EA2/+aA3EA3f+aA3EA3v/XA3EA3//XA3EA4P/XA3EA4f/XA3EA4v/XA3EA4//XA3EA5P/XA3EA5f/XA3EA+v/DA3EBBv/DA3EBCP/DA3EBDf/DA3EBDv/XA3EBD/+aA3EBEP/XA3EBEf+aA3EBEv/XA3EBE/+aA3EBFP/XA3EBFf+aA3EBF//DA3EBGf/DA3EBHf+uA3EBIf+uA3EBK//DA3EBLf/DA3EBL//DA3EBMf/DA3EBM//DA3EBNf/DA3EBPP/XA3EBPv/XA3EBQP/XA3EBQ/+FA3EBRP+aA3EBRv+aA3EBR//XA3EBSP+aA3EBSv+uA3ECCP+FA3ECDP+FA3ECV//DA3ECWP+FA3ECWf+aA3ECX//XA3ECYP+aA3ECYv/DA3EDHf+FA3EDHv+aA3EDH/+FA3EDIP+aA3EDIf+FA3EDIv+aA3EDI/+FA3EDJf+FA3EDJv+aA3EDJ/+FA3EDKP+aA3EDKf+FA3EDKv+aA3EDK/+FA3EDLP+aA3EDLf+FA3EDLv+aA3EDL/+FA3EDMP+aA3EDMf+FA3EDMv+aA3EDM/+FA3EDNP+aA3EDNv+aA3EDOP+aA3EDOv+aA3EDPP+aA3EDQP+aA3EDQv+aA3EDRP+aA3EDSf/XA3EDSv+aA3EDS//XA3EDTP+aA3EDTf/XA3EDTv+aA3EDT//XA3EDUf/XA3EDUv+aA3EDU//XA3EDVP+aA3EDVf/XA3EDVv+aA3EDV//XA3EDWP+aA3EDWf/XA3EDWv+aA3EDW//XA3EDXP+aA3EDXf/XA3EDXv+aA3EDX//XA3EDYP+aA3EDYv/DA3EDZP/DA3EDZv/DA3EDaP/DA3EDav/DA3EDbP/DA3EDbv/DA3IABQBSA3IACgBSA3IAD/+uA3IAEf+uA3IAIgApA3ICBwBSA3ICCP+uA3ICCwBSA3ICDP+uA3MAD/+FA3MAEf+FA3MAIgApA3MAJP+FA3MAJv/XA3MAKv/XA3MAMv/XA3MANP/XA3MARP+aA3MARv+aA3MAR/+aA3MASP+aA3MASv/XA3MAUP/DA3MAUf/DA3MAUv+aA3MAU//DA3MAVP+aA3MAVf/DA3MAVv+uA3MAWP/DA3MAXf/XA3MAgv+FA3MAg/+FA3MAhP+FA3MAhf+FA3MAhv+FA3MAh/+FA3MAif/XA3MAlP/XA3MAlf/XA3MAlv/XA3MAl//XA3MAmP/XA3MAmv/XA3MAov+aA3MAo/+aA3MApP+aA3MApf+aA3MApv+aA3MAp/+aA3MAqP+aA3MAqf+aA3MAqv+aA3MAq/+aA3MArP+aA3MArf+aA3MAtP+aA3MAtf+aA3MAtv+aA3MAt/+aA3MAuP+aA3MAuv+aA3MAu//DA3MAvP/DA3MAvf/DA3MAvv/DA3MAwv+FA3MAw/+aA3MAxP+FA3MAxf+aA3MAxv+FA3MAx/+aA3MAyP/XA3MAyf+aA3MAyv/XA3MAy/+aA3MAzP/XA3MAzf+aA3MAzv/XA3MAz/+aA3MA0f+aA3MA0/+aA3MA1f+aA3MA1/+aA3MA2f+aA3MA2/+aA3MA3f+aA3MA3v/XA3MA3//XA3MA4P/XA3MA4f/XA3MA4v/XA3MA4//XA3MA5P/XA3MA5f/XA3MA+v/DA3MBBv/DA3MBCP/DA3MBDf/DA3MBDv/XA3MBD/+aA3MBEP/XA3MBEf+aA3MBEv/XA3MBE/+aA3MBFP/XA3MBFf+aA3MBF//DA3MBGf/DA3MBHf+uA3MBIf+uA3MBK//DA3MBLf/DA3MBL//DA3MBMf/DA3MBM//DA3MBNf/DA3MBPP/XA3MBPv/XA3MBQP/XA3MBQ/+FA3MBRP+aA3MBRv+aA3MBR//XA3MBSP+aA3MBSv+uA3MCCP+FA3MCDP+FA3MCV//DA3MCWP+FA3MCWf+aA3MCX//XA3MCYP+aA3MCYv/DA3MDHf+FA3MDHv+aA3MDH/+FA3MDIP+aA3MDIf+FA3MDIv+aA3MDI/+FA3MDJf+FA3MDJv+aA3MDJ/+FA3MDKP+aA3MDKf+FA3MDKv+aA3MDK/+FA3MDLP+aA3MDLf+FA3MDLv+aA3MDL/+FA3MDMP+aA3MDMf+FA3MDMv+aA3MDM/+FA3MDNP+aA3MDNv+aA3MDOP+aA3MDOv+aA3MDPP+aA3MDQP+aA3MDQv+aA3MDRP+aA3MDSf/XA3MDSv+aA3MDS//XA3MDTP+aA3MDTf/XA3MDTv+aA3MDT//XA3MDUf/XA3MDUv+aA3MDU//XA3MDVP+aA3MDVf/XA3MDVv+aA3MDV//XA3MDWP+aA3MDWf/XA3MDWv+aA3MDW//XA3MDXP+aA3MDXf/XA3MDXv+aA3MDX//XA3MDYP+aA3MDYv/DA3MDZP/DA3MDZv/DA3MDaP/DA3MDav/DA3MDbP/DA3MDbv/DA3QABQBSA3QACgBSA3QAD/+uA3QAEf+uA3QAIgApA3QCBwBSA3QCCP+uA3QCCwBSA3QCDP+uA40ABQB7A40ACgB7A40CBwB7A40CCwB7A48AD/+FA48AEP+uA48AEf+FA48AIgApA48AJP9xA48AJv/XA48AKv/XA48AMv/XA48ANP/XA48ANwApA48ARP9cA48ARv9xA48AR/9xA48ASP9xA48ASv9xA48AUP+aA48AUf+aA48AUv9xA48AU/+aA48AVP9xA48AVf+aA48AVv+FA48AWP+aA48AWf/XA48AWv/XA48AW//XA48AXP/XA48AXf+uA48Agv9xA48Ag/9xA48AhP9xA48Ahf9xA48Ahv9xA48Ah/9xA48Aif/XA48AlP/XA48Alf/XA48Alv/XA48Al//XA48AmP/XA48Amv/XA48Aov9xA48Ao/9cA48ApP9cA48Apf9cA48Apv9cA48Ap/9cA48AqP9cA48Aqf9xA48Aqv9xA48Aq/9xA48ArP9xA48Arf9xA48AtP9xA48Atf9xA48Atv9xA48At/9xA48AuP9xA48Auv9xA48Au/+aA48AvP+aA48Avf+aA48Avv+aA48Av//XA48Awv9xA48Aw/9cA48AxP9xA48Axf9cA48Axv9xA48Ax/9cA48AyP/XA48Ayf9xA48Ayv/XA48Ay/9xA48AzP/XA48Azf9xA48Azv/XA48Az/9xA48A0f9xA48A0/9xA48A1f9xA48A1/9xA48A2f9xA48A2/9xA48A3f9xA48A3v/XA48A3/9xA48A4P/XA48A4f9xA48A4v/XA48A4/9xA48A5P/XA48A5f9xA48A+v+aA48BBv+aA48BCP+aA48BDf+aA48BDv/XA48BD/9xA48BEP/XA48BEf9xA48BEv/XA48BE/9xA48BFP/XA48BFf9xA48BF/+aA48BGf+aA48BHf+FA48BIf+FA48BJAApA48BJgApA48BK/+aA48BLf+aA48BL/+aA48BMf+aA48BM/+aA48BNf+aA48BN//XA48BPP+uA48BPv+uA48BQP+uA48BQ/9xA48BRP9cA48BRv9cA48BR//XA48BSP9xA48BSv+FA48B+//XA48B/f/XA48CAv+uA48CA/+uA48CBP+uA48CCP+FA48CDP+FA48CV/+aA48CWP9xA48CWf9cA48CX//XA48CYP9xA48CYv+aA48DHf9xA48DHv9cA48DH/9xA48DIP9cA48DIf9xA48DIv9cA48DI/9xA48DJf9xA48DJv9cA48DJ/9xA48DKP9cA48DKf9xA48DKv9cA48DK/9xA48DLP9cA48DLf9xA48DLv9cA48DL/9xA48DMP9cA48DMf9xA48DMv9cA48DM/9xA48DNP9cA48DNv9xA48DOP9xA48DOv9xA48DPP9xA48DQP9xA48DQv9xA48DRP9xA48DSf/XA48DSv9xA48DS//XA48DTP9xA48DTf/XA48DTv9xA48DT//XA48DUf/XA48DUv9xA48DU//XA48DVP9xA48DVf/XA48DVv9xA48DV//XA48DWP9xA48DWf/XA48DWv9xA48DW//XA48DXP9xA48DXf/XA48DXv9xA48DX//XA48DYP9xA48DYv+aA48DZP+aA48DZv+aA48DaP+aA48Dav+aA48DbP+aA48Dbv+aA48DcP/XA48DjwApA5AABQApA5AACgApA5ACBwApA5ACCwApAAAAAAAaAT4AAQAAAAAAAAA5AAAAAQAAAAAAAQAJADkAAQAAAAAAAgAHAEIAAQAAAAAAAwAeAEkAAQAAAAAABAAJADkAAQAAAAAABQAMAGcAAQAAAAAABgAIAHMAAQAAAAAABwBSAHsAAQAAAAAACAAUAM0AAQAAAAAACwAcAOEAAQAAAAAADAAuAP0AAQAAAAAADQAuASsAAQAAAAAADgAqAVkAAwABBAkAAAByAYMAAwABBAkAAQASAfUAAwABBAkAAgAOAgcAAwABBAkAAwA8AhUAAwABBAkABAASAfUAAwABBAkABQAYAlEAAwABBAkABgAQAmkAAwABBAkABwCkAnkAAwABBAkACAAoAx0AAwABBAkACwA4A0UAAwABBAkADABcA30AAwABBAkADQBcA9kAAwABBAkADgBUBDVEaWdpdGl6ZWQgZGF0YSBjb3B5cmlnaHQgqSAyMDEwLTIwMTEsIEdvb2dsZSBDb3Jwb3JhdGlvbi5PcGVuIFNhbnNSZWd1bGFyQXNjZW5kZXIgLSBPcGVuIFNhbnMgQnVpbGQgMTAwVmVyc2lvbiAxLjEwT3BlblNhbnNPcGVuIFNhbnMgaXMgYSB0cmFkZW1hcmsgb2YgR29vZ2xlIGFuZCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBjZXJ0YWluIGp1cmlzZGljdGlvbnMuQXNjZW5kZXIgQ29ycG9yYXRpb25odHRwOi8vd3d3LmFzY2VuZGVyY29ycC5jb20vaHR0cDovL3d3dy5hc2NlbmRlcmNvcnAuY29tL3R5cGVkZXNpZ25lcnMuaHRtbExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAARABpAGcAaQB0AGkAegBlAGQAIABkAGEAdABhACAAYwBvAHAAeQByAGkAZwBoAHQAIACpACAAMgAwADEAMAAtADIAMAAxADEALAAgAEcAbwBvAGcAbABlACAAQwBvAHIAcABvAHIAYQB0AGkAbwBuAC4ATwBwAGUAbgAgAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgBBAHMAYwBlAG4AZABlAHIAIAAtACAATwBwAGUAbgAgAFMAYQBuAHMAIABCAHUAaQBsAGQAIAAxADAAMABWAGUAcgBzAGkAbwBuACAAMQAuADEAMABPAHAAZQBuAFMAYQBuAHMATwBwAGUAbgAgAFMAYQBuAHMAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAgAGEAbgBkACAAbQBhAHkAIABiAGUAIAByAGUAZwBpAHMAdABlAHIAZQBkACAAaQBuACAAYwBlAHIAdABhAGkAbgAgAGoAdQByAGkAcwBkAGkAYwB0AGkAbwBuAHMALgBBAHMAYwBlAG4AZABlAHIAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcwBjAGUAbgBkAGUAcgBjAG8AcgBwAC4AYwBvAG0ALwBoAHQAdABwADoALwAvAHcAdwB3AC4AYQBzAGMAZQBuAGQAZQByAGMAbwByAHAALgBjAG8AbQAvAHQAeQBwAGUAZABlAHMAaQBnAG4AZQByAHMALgBoAHQAbQBsAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAAAIAAAAAAAD/ZgBmAAAAAAAAAAAAAAAAAAAAAAAAAAADqgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBKgEqQSqBKsHLm5vdGRlZgRudWxsEG5vbm1hcmtpbmdyZXR1cm4Fc3BhY2UGZXhjbGFtCHF1b3RlZGJsCm51bWJlcnNpZ24GZG9sbGFyB3BlcmNlbnQJYW1wZXJzYW5kC3F1b3Rlc2luZ2xlCXBhcmVubGVmdApwYXJlbnJpZ2h0CGFzdGVyaXNrBHBsdXMFY29tbWEGaHlwaGVuBnBlcmlvZAVzbGFzaAR6ZXJvA29uZQN0d28FdGhyZWUEZm91cgRmaXZlA3NpeAVzZXZlbgVlaWdodARuaW5lBWNvbG9uCXNlbWljb2xvbgRsZXNzBWVxdWFsB2dyZWF0ZXIIcXVlc3Rpb24CYXQBQQFCAUMBRAFFAUYBRwFIBUkuYWx0AUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgticmFja2V0bGVmdAliYWNrc2xhc2gMYnJhY2tldHJpZ2h0C2FzY2lpY2lyY3VtCnVuZGVyc2NvcmUFZ3JhdmUBYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6CWJyYWNlbGVmdANiYXIKYnJhY2VyaWdodAphc2NpaXRpbGRlEG5vbmJyZWFraW5nc3BhY2UKZXhjbGFtZG93bgRjZW50CHN0ZXJsaW5nCGN1cnJlbmN5A3llbglicm9rZW5iYXIHc2VjdGlvbghkaWVyZXNpcwljb3B5cmlnaHQLb3JkZmVtaW5pbmUNZ3VpbGxlbW90bGVmdApsb2dpY2Fsbm90B3VuaTAwQUQKcmVnaXN0ZXJlZAlvdmVyc2NvcmUGZGVncmVlCXBsdXNtaW51cwt0d29zdXBlcmlvcg10aHJlZXN1cGVyaW9yBWFjdXRlAm11CXBhcmFncmFwaA5wZXJpb2RjZW50ZXJlZAdjZWRpbGxhC29uZXN1cGVyaW9yDG9yZG1hc2N1bGluZQ5ndWlsbGVtb3RyaWdodApvbmVxdWFydGVyB29uZWhhbGYNdGhyZWVxdWFydGVycwxxdWVzdGlvbmRvd24GQWdyYXZlBkFhY3V0ZQtBY2lyY3VtZmxleAZBdGlsZGUJQWRpZXJlc2lzBUFyaW5nAkFFCENjZWRpbGxhBkVncmF2ZQZFYWN1dGULRWNpcmN1bWZsZXgJRWRpZXJlc2lzCklncmF2ZS5hbHQKSWFjdXRlLmFsdA9JY2lyY3VtZmxleC5hbHQNSWRpZXJlc2lzLmFsdANFdGgGTnRpbGRlBk9ncmF2ZQZPYWN1dGULT2NpcmN1bWZsZXgGT3RpbGRlCU9kaWVyZXNpcwhtdWx0aXBseQZPc2xhc2gGVWdyYXZlBlVhY3V0ZQtVY2lyY3VtZmxleAlVZGllcmVzaXMGWWFjdXRlBVRob3JuCmdlcm1hbmRibHMGYWdyYXZlBmFhY3V0ZQthY2lyY3VtZmxleAZhdGlsZGUJYWRpZXJlc2lzBWFyaW5nAmFlCGNjZWRpbGxhBmVncmF2ZQZlYWN1dGULZWNpcmN1bWZsZXgJZWRpZXJlc2lzBmlncmF2ZQZpYWN1dGULaWNpcmN1bWZsZXgJaWRpZXJlc2lzA2V0aAZudGlsZGUGb2dyYXZlBm9hY3V0ZQtvY2lyY3VtZmxleAZvdGlsZGUJb2RpZXJlc2lzBmRpdmlkZQZvc2xhc2gGdWdyYXZlBnVhY3V0ZQt1Y2lyY3VtZmxleAl1ZGllcmVzaXMGeWFjdXRlBXRob3JuCXlkaWVyZXNpcwdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGQ2FjdXRlBmNhY3V0ZQtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QGQ2Nhcm9uBmNjYXJvbgZEY2Fyb24GZGNhcm9uBkRjcm9hdAZkY3JvYXQHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BkdicmV2ZQZnYnJldmUER2RvdARnZG90DEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyCkl0aWxkZS5hbHQGaXRpbGRlC0ltYWNyb24uYWx0B2ltYWNyb24KSWJyZXZlLmFsdAZpYnJldmULSW9nb25lay5hbHQHaW9nb25law5JZG90YWNjZW50LmFsdAhkb3RsZXNzaQZJSi5hbHQCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAxrZ3JlZW5sYW5kaWMGTGFjdXRlBmxhY3V0ZQxMY29tbWFhY2NlbnQMbGNvbW1hYWNjZW50BkxjYXJvbgZsY2Fyb24ETGRvdARsZG90BkxzbGFzaAZsc2xhc2gGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUDRW5nA2VuZwdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQCT0UCb2UGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAhTY2VkaWxsYQhzY2VkaWxsYQZTY2Fyb24Gc2Nhcm9uDFRjb21tYWFjY2VudAx0Y29tbWFhY2NlbnQGVGNhcm9uBnRjYXJvbgRUYmFyBHRiYXIGVXRpbGRlBnV0aWxkZQdVbWFjcm9uB3VtYWNyb24GVWJyZXZlBnVicmV2ZQVVcmluZwV1cmluZw1VaHVuZ2FydW1sYXV0DXVodW5nYXJ1bWxhdXQHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4CVlkaWVyZXNpcwZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAZaY2Fyb24GemNhcm9uBWxvbmdzBmZsb3JpbgpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQKY2lyY3VtZmxleAVjYXJvbgZtYWNyb24FYnJldmUJZG90YWNjZW50BHJpbmcGb2dvbmVrBXRpbGRlDGh1bmdhcnVtbGF1dAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MJYW5vdGVsZWlhDEVwc2lsb250b25vcwhFdGF0b25vcw1Jb3RhdG9ub3MuYWx0DE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBUdhbW1hB3VuaTAzOTQHRXBzaWxvbgRaZXRhA0V0YQVUaGV0YQhJb3RhLmFsdAVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DUGhpA0NoaQNQc2kHdW5pMDNBORBJb3RhZGllcmVzaXMuYWx0D1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhB3VuaTAzQkMCbnUCeGkHb21pY3JvbgJwaQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQNYWZpaTEwMDU1LmFsdA1hZmlpMTAwNTYuYWx0CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4BldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGZW5kYXNoBmVtZGFzaAlhZmlpMDAyMDgNdW5kZXJzY29yZWRibAlxdW90ZWxlZnQKcXVvdGVyaWdodA5xdW90ZXNpbmdsYmFzZQ1xdW90ZXJldmVyc2VkDHF1b3RlZGJsbGVmdA1xdW90ZWRibHJpZ2h0DHF1b3RlZGJsYmFzZQZkYWdnZXIJZGFnZ2VyZGJsBmJ1bGxldAhlbGxpcHNpcwtwZXJ0aG91c2FuZAZtaW51dGUGc2Vjb25kDWd1aWxzaW5nbGxlZnQOZ3VpbHNpbmdscmlnaHQJZXhjbGFtZGJsCGZyYWN0aW9uCW5zdXBlcmlvcgVmcmFuYwlhZmlpMDg5NDEGcGVzZXRhBEV1cm8JYWZpaTYxMjQ4CWFmaWk2MTI4OQlhZmlpNjEzNTIJdHJhZGVtYXJrBU9tZWdhCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtwYXJ0aWFsZGlmZgVEZWx0YQdwcm9kdWN0CXN1bW1hdGlvbgVtaW51cwdyYWRpY2FsCGluZmluaXR5CGludGVncmFsC2FwcHJveGVxdWFsCG5vdGVxdWFsCWxlc3NlcXVhbAxncmVhdGVyZXF1YWwHbG96ZW5nZQd1bmlGQjAxB3VuaUZCMDINY3lyaWxsaWNicmV2ZQhkb3RsZXNzahBjYXJvbmNvbW1hYWNjZW50C2NvbW1hYWNjZW50EWNvbW1hYWNjZW50cm90YXRlDHplcm9zdXBlcmlvcgxmb3Vyc3VwZXJpb3IMZml2ZXN1cGVyaW9yC3NpeHN1cGVyaW9yDXNldmVuc3VwZXJpb3INZWlnaHRzdXBlcmlvcgxuaW5lc3VwZXJpb3IHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEIHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQHdW5pMDFGMAd1bmkwMkJDB3VuaTAzRDEHdW5pMDNEMgd1bmkwM0Q2B3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmkwMkYzCWRhc2lhb3hpYQd1bmlGQjAzB3VuaUZCMDQFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4HdW5pMDMwMAd1bmkwMzAxB3VuaTAzMDMEaG9vawhkb3RiZWxvdwd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NjAHdW5pMDQ2MQd1bmkwNDYyB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3MAd1bmkwNDcxB3VuaTA0NzIHdW5pMDQ3Mwd1bmkwNDc0B3VuaTA0NzUHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzgHdW5pMDQ3OQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhBB3VuaTA0OEIHdW5pMDQ4Qwd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNDk4B3VuaTA0OTkHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0OUMHdW5pMDQ5RAd1bmkwNDlFB3VuaTA0OUYHdW5pMDRBMAd1bmkwNEExB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBQwd1bmkwNEFEB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjQHdW5pMDRCNQd1bmkwNEI2B3VuaTA0QjcHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQgd1bmkwNEJDB3VuaTA0QkQHdW5pMDRCRQd1bmkwNEJGC3VuaTA0QzAuYWx0B3VuaTA0QzEHdW5pMDRDMgd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNQd1bmkwNEM2B3VuaTA0QzcHdW5pMDRDOAd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDQgd1bmkwNENDB3VuaTA0Q0QHdW5pMDRDRQt1bmkwNENGLmFsdAd1bmkwNEQwB3VuaTA0RDEHdW5pMDREMgd1bmkwNEQzB3VuaTA0RDQHdW5pMDRENQd1bmkwNEQ2B3VuaTA0RDcHdW5pMDREOAd1bmkwNEQ5B3VuaTA0REEHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTAHdW5pMDRFMQd1bmkwNEUyB3VuaTA0RTMHdW5pMDRFNAd1bmkwNEU1B3VuaTA0RTYHdW5pMDRFNwd1bmkwNEU4B3VuaTA0RTkHdW5pMDRFQQd1bmkwNEVCB3VuaTA0RUMHdW5pMDRFRAd1bmkwNEVFB3VuaTA0RUYHdW5pMDRGMAd1bmkwNEYxB3VuaTA0RjIHdW5pMDRGMwd1bmkwNEY0B3VuaTA0RjUHdW5pMDRGNgd1bmkwNEY3B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZBB3VuaTA0RkIHdW5pMDRGQwd1bmkwNEZEB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTAwB3VuaTA1MDEHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMDUxMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwt1bmkxRUM4LmFsdAd1bmkxRUM5C3VuaTFFQ0EuYWx0B3VuaTFFQ0IHdW5pMUVDQwd1bmkxRUNEB3VuaTFFQ0UHdW5pMUVDRgd1bmkxRUQwB3VuaTFFRDEHdW5pMUVEMgd1bmkxRUQzB3VuaTFFRDQHdW5pMUVENQd1bmkxRUQ2B3VuaTFFRDcHdW5pMUVEOAd1bmkxRUQ5B3VuaTFFREEHdW5pMUVEQgd1bmkxRURDB3VuaTFFREQHdW5pMUVERQd1bmkxRURGB3VuaTFFRTAHdW5pMUVFMQd1bmkxRUUyB3VuaTFFRTMHdW5pMUVFNAd1bmkxRUU1B3VuaTFFRTYHdW5pMUVFNwd1bmkxRUU4B3VuaTFFRTkHdW5pMUVFQQd1bmkxRUVCB3VuaTFFRUMHdW5pMUVFRAd1bmkxRUVFB3VuaTFFRUYHdW5pMUVGMAd1bmkxRUYxB3VuaTFFRjQHdW5pMUVGNQd1bmkxRUY2B3VuaTFFRjcHdW5pMUVGOAd1bmkxRUY5B3VuaTIwQUIHdW5pMDMwRhNjaXJjdW1mbGV4YWN1dGVjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWIOYnJldmVhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWINYnJldmVob29rY29tYg5icmV2ZXRpbGRlY29tYhBjeXJpbGxpY2hvb2tsZWZ0EWN5cmlsbGljYmlnaG9va1VDEWN5cmlsbGljYmlnaG9va0xDCG9uZS5wbnVtB3plcm8ub3MGb25lLm9zBnR3by5vcwh0aHJlZS5vcwdmb3VyLm9zB2ZpdmUub3MGc2l4Lm9zCHNldmVuLm9zCGVpZ2h0Lm9zB25pbmUub3MCZmYHdW5pMjEyMAhUY2VkaWxsYQh0Y2VkaWxsYQVnLmFsdA9nY2lyY3VtZmxleC5hbHQKZ2JyZXZlLmFsdAhnZG90LmFsdBBnY29tbWFhY2NlbnQuYWx0AUkGSWdyYXZlBklhY3V0ZQtJY2lyY3VtZmxleAlJZGllcmVzaXMGSXRpbGRlB0ltYWNyb24GSWJyZXZlB0lvZ29uZWsKSWRvdGFjY2VudAJJSglJb3RhdG9ub3MESW90YQxJb3RhZGllcmVzaXMJYWZpaTEwMDU1CWFmaWkxMDA1Ngd1bmkwNEMwB3VuaTA0Q0YHdW5pMUVDOAd1bmkxRUNBAAABAAMACAAKAA0AB///AA8AAQAAAAwAAAAWAAAAAgABAAADqQABAAQAAAABAAAAAAABAAAACgA0ADYAAWxhdG4ACAAQAAJNT0wgABZST00gABwAAP//AAAAAP//AAAAAP//AAAAAAAAAAEAAAAKAG4B5AABbGF0bgAIABAAAk1PTCAAKFJPTSAAQgAA//8ACQADAAgACwAAAA4AEQAUABcAGgAA//8ACgAEAAYACQAMAAEADwASABUAGAAbAAD//wAKAAUABwAKAA0AAgAQABMAFgAZABwAHWxpZ2EAsGxpZ2EAtmxpZ2EAvGxudW0AwmxudW0AyGxudW0AzmxvY2wA1GxvY2wA2m9udW0A4G9udW0A6G9udW0A8HBudW0A+HBudW0A/nBudW0BBHNhbHQBCnNhbHQBEnNhbHQBGnNzMDEBInNzMDEBKnNzMDEBMnNzMDIBOnNzMDIBQHNzMDIBRnNzMDMBTHNzMDMBUnNzMDMBWHRudW0BXnRudW0BZnRudW0BbgAAAAEACQAAAAEACQAAAAEACQAAAAEABwAAAAEABwAAAAEABwAAAAEACAAAAAEACAAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAEABAAAAAEABAAAAAEABAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAQAAAAEAAQAAAAEAAQAAAAIABQAGAAAAAgAFAAYAAAACAAUABgAKABYAHgAmAC4ANgA+AEYATgBWAF4AAQAAAAEAUAABAAAAAQB6AAEAAAABAKoAAQAAAAEAxgABAAAAAQDuAAEAAAABAPQAAQAAAAEBEAABAAAAAQEWAAEAAAABATIABAAAAAEBSAACABAABQORA5IDkwOUA5UAAgAFAEoASgAAAN8A3wABAOEA4QACAOMA4wADAOUA5QAEAAIALgAUACwAjgCPAJAAkQDqAOwA7gDwAPIA9AFaAWcBdwGhAaICyQLYA0UDRwACAAEDlgOpAAAAAgAaAAoDgwOEA4UDhgOHA4gDiQOKA4sDjAACAAEAEwAcAAAAAgAaAAoDgwOFA4YDhwOIA4kDigOLA4wDhAACAAMAEwATAAAAFQAcAAEDggOCAAkAAgAIAAEDggABAAEAFAACABoACgATABQAFQAWABcAGAAZABoAGwAcAAIAAQODA4wAAAACAAgAAQAUAAEAAQOCAAIAGgAKABMDggAVABYAFwAYABkAGgAbABwAAgABA4MDjAAAAAIADgAEA48DkAEgASEAAgACASQBJQAAAUkBSgACAAEANgABAAgABQAMABQAHAAiACgCXgADAEkATwJdAAMASQBMA40AAgBJAjUAAgBPAjQAAgBMAAEAAQBJAAAAAAABAAEAAQAAAAEAABVeAAAAFAAAAAAAABVWMIIVUgYJKoZIhvcNAQcCoIIVQzCCFT8CAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBRMCwGCisGAQQBgjcCARyiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+AD4APjAhMAkGBSsOAwIaBQAEFIK4uYCP2fVApm1usxVUQTaZ3tN9oIIRXTCCA3owggJioAMCAQICEDgl1/r4Ya+e9JDnJrXWWtUwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMB4XDTA3MDYxNTAwMDAwMFoXDTEyMDYxNDIzNTk1OVowXDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQDEytWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEcyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEtfJSFbyIhmApFkpbL0uRa4eR8zVUWDXq0TZeYk1SUTRxwntmHYnI3SrEagr2N9mYdJH2kq6wtXaW8alKY0VHLmsLkk5LK4zuWEqL1AfkGiz4gqpY2c1C8y3Add6Nq8eOHZpsTAiVHt7b72fhcsJJwp5gPOHivhajY3hpFHutLQIDAQABo4HEMIHBMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBsAwHgYDVR0RBBcwFaQTMBExDzANBgNVBAMTBlRTQTEtMjANBgkqhkiG9w0BAQUFAAOCAQEAUMVLyCSA3+QNJMLeGrGhAqGmgi0MgxWBNwqCDiywWhdhtdgF/ojb8ZGRs1YaQKbrkr44ObB1NnQ6mE/kN7qZicqVQh2wucegjVfg+tVkBEI1TgHRM6IXyE2qJ8fy4YZMAjhNg3jG/FPg6+AGh92klp5eDJjipb6/goXDYOHfrSjYx6VLZNrHG1u9rDkI1TgioTOLL4qa67wHIT9EQQkHtWUcJLxI00SA66HPyQK0FM9UxxajgFz5eT5dcn2IF54sQ6LKU859PfYqOrhPlAClbQqDXfleU/QYs1cPcMP79a2VoA4X3sQWgGDJDytuhgTx6/R4J9EFxe40W165STLyMzCCA8QwggMtoAMCAQICEEe/GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1waW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIzNTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8KfYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbVXV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/HtN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5oL6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpUwQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dDmhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMMVFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr+epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWdtdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIIE/DCCBGWgAwIBAgIQZVIm4bIuGOFZDymFrCLnXDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDkwNTIxMDAwMDAwWhcNMTkwNTIwMjM1OTU5WjCBtjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEwMC4GA1UEAxMnVmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAwOS0yIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmcdtGCqEElvVhd8Zslehg3V8ayncYOOi4n4iASJFQa6LYQhleTRnFBM+9IivdrysjU7Ho/DCfv8Ey5av4l8PTslHvbzWHuc9AG1xgq4gM6+J3RhZydNauXsgWFYeaPgFxASFSew4U00fytHIES53mYkZorNT7ofxTjIVJDhcvYZZnVquUlozzh5DaowqNssYEie16oUAamD1ziRMDkTlgM6fEBUtq3gLxuD3KgRUj4Cs9cr/SG2p1yjDwupphBQDjQuTafOyV4l1Iy88258KbwBXfwxh1rVjIVnWIgZoL818OoroyHnkPaD5ajtYHhee2CD/VcLXUENY1Rg1kMh7wIDAQABo4IB2zCCAdcwEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBnMGUGC2CGSAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwKgYIKwYBBQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFDbGFzczNDQTIwNDgtMS01NTAdBgNVHQ4EFgQUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwDQYJKoZIhvcNAQEFBQADgYEAiwPA3ZTYQaJhabAVqHjHMMaQPH5C9yS25INzFwR/BBCcoeL6gS/rwMpE53LgULZVECCDbpaS5JpRarQ3MdylLeuMAMcdT+dNMrqF+E6++mdVZfBqvnrKZDgaEBB4RXYx84Z6Aw9gwrNdnfaLZnaCG1nhg+W9SaU4VuXeQXcOWA8wggUTMIID+6ADAgECAhBm4/BnecoVFm1QU2+IGRqDMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MTAwLgYDVQQDEydWZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDA5LTIgQ0EwHhcNMTAwNzI5MDAwMDAwWhcNMTIwODA4MjM1OTU5WjCB0DELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcTBldvYnVybjEeMBwGA1UEChQVTW9ub3R5cGUgSW1hZ2luZyBJbmMuMT4wPAYDVQQLEzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNyb3NvZnQgU29mdHdhcmUgVmFsaWRhdGlvbiB2MjEYMBYGA1UECxQPVHlwZSBPcGVyYXRpb25zMR4wHAYDVQQDFBVNb25vdHlwZSBJbWFnaW5nIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJREoJVpfFUN0NsWjTI1ikwzq14goUzXKoc415ilQPAZSQsiHlNPwkOmyoupVu9uSAaoBRU5HmM7JBKQuZjPygg1fXLjR1f9ecuKSudAcC01Y3+ugM/Er9j798n8idjXpKDbCfKi8nvvzXXB92VQZCKdvX28rbhLzFhFDk3RWUxNAgMBAAGjggGDMIIBfzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3NjMy0yMDA5LTItY3JsLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vY3NjMy0yMDA5LTItYWlhLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jZXIwHwYDVR0jBBgwFoAUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwEQYJYIZIAYb4QgEBBAQDAgQQMBYGCisGAQQBgjcCARsECDAGAQEAAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQBO5iKH32dBFRfi0u5+Ds7CmdZjvfC1k+VqcmLh9dI8OO6oPQhfukeBgl9bS0n0HSD6D5MJ0B0ZVkQXoojz+42drvcNNd48DKxElGBFKpv+m29MO7E0Z3AQhv9aOVxa42yCqzV8ZUv9mG21FZRJnIhwEL49sWKVtNu01NronUGQfv59uaSS627yIorGdzZNiloLUwUx0ysor1LhjXprtXdEvQyt9F0lLOPNijA+SwOcecqmTq4LwswkBwvBlIL2EPG6kLabmthcPBPx6gIGGCdNPIlvM4rTht7pWDN1PeuTaeJEb04AbM/VhdpWppqmP8tMIWiQ8mC64egGXTkhEzLtMYIDZzCCA2MCAQEwgcswgbYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDkxMDAuBgNVBAMTJ1ZlcmlTaWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIwMDktMiBDQQIQZuPwZ3nKFRZtUFNviBkagzAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFEjj6tsXY4/GsRVXJyC3ZfQZU5UYMA0GCSqGSIb3DQEBAQUABIGARTu81Lrv2hu/YjveEuxKBoRFcUHJAv4uDpXzibFS9EHrbTIsSL8pkbyyL11kJDQuupa0tkpzl+D2n0H392i29YAGeEG+U5DAfnhSWxyqDiFC3L4JnDPTRlCQOwWZECtZaeyF2GPRLcMGljTtFKOc8vFUQNVHF6ALAB+MZu/ePhuhggF/MIIBewYJKoZIhvcNAQkGMYIBbDCCAWgCAQEwZzBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0ECEDgl1/r4Ya+e9JDnJrXWWtUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTExMDUwNTE2NTUxMFowIwYJKoZIhvcNAQkEMRYEFFQXCCsLve4aJw4fjfxTk/Q4VhAPMA0GCSqGSIb3DQEBAQUABIGAHcF3ia6bbyLja+VF2k6RQPCf7zsfJ0pWrDr9qJRqfPecwX97k2BOG8QrV5WUyxbhmmcz0SspE8jsvrxZsQOkKZnsHYiZJId3D5vKFPvU1ElMdA7IPS5vIMkDzejlD9AhObNWGdX7rL2sqTi9sNUMo9ljrbCVtGhYw+LXKf+RpMcAAA==&quot;);
+    }
+    </style>
+    <text
+       dominant-baseline="text-before-edge"
+       xml:space="preserve"
+       style="line-height:100%"
+       transform="matrix(1 0 0 1 -450.217418962382 156.7702497755372)"
+       alignment-baseline="before-edge"
+       letter-spacing="0"
+       font-style="normal"
+       font-weight="400"
+       font-family="Open Sans"
+       font-size="71"
+       y="1118.1"
+       x="1204.94"
+       id="f2HTZ4D4C"><tspan
+         id="tspan301"
+         text-anchor="middle"
+         dominant-baseline="text-before-edge"
+         alignment-baseline="before-edge"
+         dy="0em"
+         x="1204.94">Fondo Europeo de Desarrollo Regional</tspan></text>
+    <style
+       id="opensans400normal">
+    @font-face {
+    font-family: &quot;Open Sans&quot;;
+    font-weight: 400;
+    src: url(&quot;data:font/ttf;base64,AAEAAAATAQAABAAwRFNJR54SRB0AAzucAAAVdEdERUYAJgOvAAM3fAAAAB5HUE9TCzcPNwADN5wAAAA4R1NVQg4rPbcAAzfUAAADxk9TLzKhPp7JAAABuAAAAGBjbWFwKasvaAAAELQAAAQaY3Z0IA9NGKQAAB2QAAAAomZwZ21+YbYRAAAU0AAAB7RnYXNwABUAIwADN2wAAAAQZ2x5ZnQ4mUsAACWMAAEvtGhlYWT3duKmAAABPAAAADZoaGVhDcwJcwAAAXQAAAAkaG10eOg1PN0AAAIYAAAOmmtlcm5UKwl+AAFVQAABtjZsb2NhKRTc8QAAHjQAAAdWbWF4cAVDAgoAAAGYAAAAIG5hbWVzsIiFAAMLeAAABcdwb3N0AkPvbAADEUAAACYrcHJlcEO3lqQAAByEAAABCQABAAAAARmaIcf1X18PPPUACQgAAAAAAMk1MYsAAAAAyehMTPua/dUJoghiAAAACQACAAAAAAAAAAEAAAiN/agAAAms+5r+ewmiAAEAAAAAAAAAAAAAAAAAAAOjAAEAAAOqAIoAFgBWAAUAAgAQAC8AXAAAAQ4A+AADAAEAAwS2AZAABQAIBZoFMwAAAR8FmgUzAAAD0QBmAfEIAgILBgYDBQQCAgTgAALvQAAgWwAAACgAAAAAMUFTQwBAACD//QYf/hQAhAiNAlggAAGfAAAAAARIBbYAAAAgAAMEzQDBAAAAAAQUAAACFAAAAiMAmAM1AIUFKwAzBJMAgwaWAGgF1wBxAcUAhQJeAFICXgA9BGoAVgSTAGgB9gA/ApMAVAIhAJgC8AAUBJMAZgSTALwEkwBkBJMAXgSTACsEkwCFBJMAdQSTAF4EkwBoBJMAagIhAJgCIQA/BJMAaASTAHcEkwBoA28AGwcxAHkFEAAABS8AyQUMAH0F1QDJBHMAyQQhAMkF0wB9BecAyQKqAFQCI/9gBOkAyQQnAMkHOQDJBggAyQY7AH0E0QDJBjsAfQTyAMkEZABqBG0AEgXTALoEwwAAB2gAGwSeAAgEewAABJEAUgKiAKYC8AAXAqIAMwRWADEDlv/8BJ4BiQRzAF4E5wCwA88AcwTnAHMEfQBzArYAHQRiACcE6QCwAgYAogIG/5EEMwCwAgYAsAdxALAE6QCwBNUAcwTnALAE5wBzA0QAsAPRAGoC0wAfBOkApAQCAAAGOQAXBDEAJwQIAAIDvgBSAwgAPQRoAe4DCABIBJMAaAIUAAACIwCYBJMAvgSTAD8EkwB7BJMAHwRoAe4EIQB7BJ4BNQaoAGQC1QBGA/oAUgSTAGgCkwBUBqgAZAQA//oDbQB/BJMAaALHADECxwAhBJ4BiQT0ALAFPQBxAiEAmAHRACUCxwBMAwAAQgP6AFAGPQBLBj0ALgY9ABoDbwAzBRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABvz//gUMAH0EcwDJBHMAyQRzAMkEcwDJAqoAPAKqAFQCqv//AqoAPAXHAC8GCADJBjsAfQY7AH0GOwB9BjsAfQY7AH0EkwCFBjsAfQXTALoF0wC6BdMAugXTALoEewAABOMAyQT6ALAEcwBeBHMAXgRzAF4EcwBeBHMAXgRzAF4G3QBeA88AcwR9AHMEfQBzBH0AcwR9AHMCBv/aAgYAqQIG/7MCBv/sBMUAcQTpALAE1QBzBNUAcwTVAHME1QBzBNUAcwSTAGgE1QBzBOkApATpAKQE6QCkBOkApAQIAAIE5wCwBAgAAgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUMAH0DzwBzBQwAfQPPAHMFDAB9A88AcwUMAH0DzwBzBdUAyQTnAHMFxwAvBOcAcwRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMF0wB9BGIAJwXTAH0EYgAnBdMAfQRiACcF0wB9BGIAJwXnAMkE6QCwBecAAATpABQCqv/iAgb/kAKqACoCBv/aAqoAHgIG/8wCqgBUAgYANQKqAFQCBgCwBM0AVAQMAKICI/9gAgb/kQTpAMkEMwCwBCUAsAQnAMkCBgCjBCcAyQIGAFkEJwDJAgYAsAQnAMkCgwCwBC8AHQIX//wGCADJBOkAsAYIAMkE6QCwBggAyQTpALAFcwABBggAyQTpALAGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMHYgB9B4kAcQTyAMkDRACwBPIAyQNEAGAE8gDJA0QAggRkAGoD0QBqBGQAagPRAGoEZABqA9EAagRkAGoD0QBqBG0AEgLTAB8EbQASAtMAHwRtABIC0wAfBdMAugTpAKQF0wC6BOkApAXTALoE6QCkBdMAugTpAKQF0wC6BOkApAXTALoE6QCkB2gAGwY5ABcEewAABAgAAgR7AAAEkQBSA74AUgSRAFIDvgBSBJEAUgO+AFICjwCwBJ4AwwUUAAAEcwBeBvz//gbdAF4GOwB9BNUAcwRkAGoD0QBqBLwBDAS8AQwEsgEtBLwBJQIGAKIEngFvAZMAJQS8AQgEngDnBJ4B/ASeARsFEAAAAiEAmATy/9QGff/UA5j/5AaB/+QFhf/UBoH/5AK2/+kFEAAABS8AyQQpAMkEkwAnBHMAyQSRAFIF5wDJBjsAfQKqAFQE6QDJBNMAAAc5AMkGCADJBG0ASAY7AH0F1QDJBNEAyQSJAEoEbQASBHsAAAZiAGoEngAIBl4AbQZCAFACqgA8BHsAAATjAHMDzQBaBOkAsAK2AKgE3wCkBOMAcwUGALAEGQAKBKQAcQPNAFoD3QBzBOkAsAS8AHMCtgCoBCUAsARG//IE9ACwBFYAAAPNAHEE1QBzBTMAGQTVAKYD2wBzBOcAcwPJABIE3wCkBb4AcwRe/+wGBgCkBi8AcwK2AAkE3wCkBNUAcwTfAKQGLwBzBHMAyQXfABIEKQDJBR0AfQRkAGoCqgBUAqoAPAIj/2AHbwAAB6AAyQXfABIE5QDJBPgAGwXVAMkFEAAABOcAyQUvAMkEKQDJBXcADgRzAMkGwQACBKYASgYZAMsGGQDLBOUAyQWiAAAHOQDJBecAyQY7AH0F1QDJBNEAyQUMAH0EbQASBPgAGwZiAGoEngAIBeUAyQWPAKoIQgDJCEQAyQWBABIG0wDJBSUAyQUKAD0IZgDJBRcAMwRzAF4ExQB3BI0AsANtALAEkwApBH0AcwXjAAQD3QBEBRIAsAUSALAEJwCwBJEAEAXhALAFEgCwBNUAcwT4ALAE5wCwA88AcwO8ACkECAACBbgAcQQxACcFAgCwBN0AnAcfALAHLQCwBY8AKQYpALAEvACwA/AAOQamALAEcQAlBH0AcwTpABQDbQCwA/AAcwPRAGoCBgCiAgb/7AIG/5EGsgAQBxcAsATpABQEJwCwBAgAAgT4ALAENwDJA20AsAdoABsGOQAXB2gAGwY5ABcHaAAbBjkAFwR7AAAECAACBAAAUggAAFIIAABSA0r//AFcABkBXAAZAfYAPwFcABkCzQAZAs0AGQM9ABkEBAB7BBQAewMCAKQGRgCYCZ4AZAHFAIUDJQCFAm8AUgJvAFAD4wCYAQr+eQMnAG0EkwBiBJMARAYbAJoEuAA/BpgAjQQpAHcIJwDJBjUAJQZCAFAE9ABmBj0ARwY9ACAGPQBHBj0AagSmAGYEkwAnBekAyQUMAEwEkwBoBGQAJQWkAHcDEgAMBJMAYgSTAGgEkwBoBJMAaASqAG8EvAAdBLwAHQSeANsCBv+RBAABiQQAAXEEAAGBAscAJwLHABQCxwA7AscAKQLHADkCxwAzAscAIwQAAAAIAAAABAAAAAgAAAACqgAAAgAAAAFWAAAEeQAAAiEAAAGaAAAAzQAAAAAAAAAAAAAIAABUCAAAVAIG/5EBXAAZBPoACgSFAAAGuAASBzkAyQdxALAFEAAABHMAXgZS/t8CqgB1AzMAmAd1AB0HdQAdBj0AfQTfAHMGJQC6BVIApAAA/FMAAP0NAAD8GQAA/QgAAP07BHMAyQYZAMsEfQBzBRIAsAgXAIUGjQAABWYAFwUOABcHWgDJBeMAsAVtAAAEgwAKB14AyQYhALAFxQAUBSMADAfLAMkGxQCwBKgAPwPdABkGXgBtBgYApAY9AH0E1QBzBQIAAAQMAAAFAgAABAwAAAmsAH0IfQBzBo0AfQVCAHMH/gB9BncAcwffAF4GjQAABR0AfQPnAHME3wBqBHUAywSeAPgEngHfBJ4B4QfpACkHpgApBikAyQUlALAE5wAvBLwAFATjAMkE5wCwBDcALwNtABIFIwDJBDMAsAcfAAIGPQAEBKYASgPdAEQFSgDJBFwAsATpAMkERACwBOkALwQjABQFgwAQBOwAKQX4AMkFLwCwBoEAyQXjALAIiQDJBuwAsAY7AH0FHwBzBQwAfQPPAHMEbQAQA7wAKQR7AAAEAgAABHsAAAQCAAAE9AAIBFYAJwbXABAFvAApBYkAqgTfAJwFjwCqBM0AnAWPAMkErgCwBrQAPQVGADMGtAA9BUYAMwKqAFQGwQACBeMABAWDAMkEZACwBaYAAASTABAF0QDJBO4AsAX2AMkFOQCwBY8AqgTdAJwHOwDJBeMAsAKqAFQFEAAABHMAXgUQAAAEcwBeBvz//gbdAF4EcwDJBH0AcwXXAHUEeQBmBdcAdQR5AGYGwQACBeMABASmAEoD3QBEBKoASgPpABsGGQDLBRIAsAYZAMsFEgCwBjsAfQTVAHMGPQB9BNUAcwY9AH0E1QBzBQoAPQPwADkE+AAbBAgAAgT4ABsECAACBPgAGwQIAAIFjwCqBN0AnAQ3AMkDbQCwBtMAyQYpALAENwAvA20AEgT4AAgEUgAnBJ4ABgQxACcE5wCDBOcAcwcxAIMHKwBzBzsATgZqAFAFAABOBC8AUAfZAAAGzwAQCBkAyQdOALAGDAB9BR8AcwWuABAFLQApBKoAbwPNAFoFmgAABJEAEAUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUQAAAEcwAtBRAAAARzAF4FEAAABHMAXgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAXQR9AEoEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMCqgBUAgYAewKqAFQCBgCdBjsAfQTVAHMGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAGEGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMGPQB9BN8AcwY9AH0E3wBzBj0AfQTfAHMGPQB9BN8AcwY9AH0E3wBzBdMAugTpAKQF0wC6BOkApAYlALoFUgCkBiUAugVSAKQGJQC6BVIApAYlALoFUgCkBiUAugVSAKQEewAABAgAAgR7AAAECAACBHsAAAQIAAIE5wBzAAD75QAA/HEAAPuaAAD8cQAA/GgAAPx5AAD8eQAA/HkAAPxoAaQAMQGkABkBpAAZAy0ANASJAHMC9AAtBBQAKQSTAF4EjwAXBJMAhQSTAHUEkwBeBJMAaASTAGoFbQAdBloAXARtABIC0wAfBOcAcQTnAHEE5wBxBOcAcQTnAHECOwDJAjsABQI7ALMCO//HAjsABQI7/6sCO//zAjv/5wI7AFYCOwC7BF4AyQLl/+QCOwDJAAUAyQAFAMkAyQCZALgAAAAAAAEAAwABAAAADAAEBA4AAACwAIAABgAwAEgASQB+AMsAzwEnATIBYQF/AZIBoQGwAfAB/wIbAjcCvALHAskC3QLzAwEDAwMJAw8DIwOKA4wDoQOqA84D0gPWBA0ETwRfBIYEkQS/BM8FEx4BHj8ehR7HHsoe8R75H00gCyAVIB4gIiAmIDAgMyA6IDwgRCBwIHkgfyCkIKcgrCEFIRMhFiEgISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK+wT+///9//8AAAAgAEkASgCgAMwA0AEoATMBYgGSAaABrwHwAfoCGAI3ArwCxgLJAtgC8wMAAwMDCQMPAyMDhAOMA44DowOrA9ED1gQABA4EUARgBIgEkgTABNAeAB4+HoAeoB7IHsse8h9NIAAgEyAXICAgJiAwIDIgOSA8IEQgcCB0IH8goyCnIKshBSETIRYhICEiISYhLiFbIgIiBiIPIhEiGiIeIisiSCJgImQlyvsA/v///P///+MAAP/j/8IAAP/CAAD/wgAA/7AAvwCyAGH/SQAAAAD/lv6F/oT+dv9o/2P/Yv9dAGf/RAAA/c8AAAAA/c3+gv5/AAD9mgAA/gwAAP4JAAD+CeRY5BjjeuR9AADkfQAA4w3iQuHv4e7h7eHq4eHh4OHb4drh0+HL4cjhmeF24XQAAOEY4QvhCeJu4P7g++D04MjgJeAi4BrgGeAS4A/gA9/n39DfzdxpAAADTwJTAAEAAACuAAAAAACqAAAArgAAAMAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADqARAAAAAAAAABGAAAATAAAAFMAAABXAAAAAAAAAAAAAABcAAAAXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAAAAAAAOWA5cDmAOZA5oDmwDrA5wA7QOdAO8DngDxA58A8wOgA48DkAEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUkBSgEkASUBVAFVAVYBVwFYAVkDoQFcAV0BXgFfAWABYQFiAWMBZAFlAWYDogFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgOjAmgBnAGdAZ4BnwGgA6QDpQGjAaQBpQGmAacCaQJqAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AmsB9gH3ApMClAKVApYClwKYApkCmgH4AfkDpgLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcDpwOoA0YDqQIAAgEDbwNwA3EDcgNzA3QDdQIcA40CNAI1Al0CXgAAQEdbWllYVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1MTAvLi0sKCcmJSQjIiEfGBQREA8ODQsKCQgHBgUEAwIBACwgsAFgRbADJSARRmEjRSNhSC0sIEUYaEQtLEUjRmCwIGEgsEZgsAQmI0hILSxFI0YjYbAgYCCwJmGwIGGwBCYjSEgtLEUjRmCwQGEgsGZgsAQmI0hILSxFI0YjYbBAYCCwJmGwQGGwBCYjSEgtLAEQIDwAPC0sIEUjILDNRCMguAFaUVgjILCNRCNZILDtUVgjILBNRCNZILAEJlFYIyCwDUQjWSEhLSwgIEUYaEQgsAFgIEWwRnZoikVgRC0sAbELCkMjQ2UKLSwAsQoLQyNDCy0sALAoI3CxASg+AbAoI3CxAihFOrECAAgNLSwgRbADJUVhZLBQUVhFRBshIVktLEmwDiNELSwgRbAAQ2BELSwBsAZDsAdDZQotLCBpsEBhsACLILEswIqMuBAAYmArDGQjZGFcWLADYVktLIoDRYqKh7ARK7ApI0SwKXrkGC0sRWWwLCNERbArI0QtLEtSWEVEGyEhWS0sS1FYRUQbISFZLSwBsAUlECMgivUAsAFgI+3sLSwBsAUlECMgivUAsAFhI+3sLSwBsAYlEPUA7ewtLLACQ7ABUlghISEhIRtGI0ZgiopGIyBGimCKYbj/gGIjIBAjirEMDIpwRWAgsABQWLABYbj/uosbsEaMWbAQYGgBOlktLCBFsAMlRlJLsBNRW1iwAiVGIGhhsAMlsAMlPyMhOBshEVktLCBFsAMlRlBYsAIlRiBoYbADJbADJT8jITgbIRFZLSwAsAdDsAZDCy0sISEMZCNki7hAAGItLCGwgFFYDGQjZIu4IABiG7IAQC8rWbACYC0sIbDAUVgMZCNki7gVVWIbsgCALytZsAJgLSwMZCNki7hAAGJgIyEtLEtTWIqwBCVJZCNFabBAi2GwgGKwIGFqsA4jRCMQsA72GyEjihIRIDkvWS0sS1NYILADJUlkaSCwBSawBiVJZCNhsIBisCBharAOI0SwBCYQsA72ihCwDiNEsA72sA4jRLAO7RuKsAQmERIgOSMgOS8vWS0sRSNFYCNFYCNFYCN2aBiwgGIgLSywSCstLCBFsABUWLBARCBFsEBhRBshIVktLEWxMC9FI0VhYLABYGlELSxLUViwLyNwsBQjQhshIVktLEtRWCCwAyVFaVNYRBshIVkbISFZLSxFsBRDsABgY7ABYGlELSywL0VELSxFIyBFimBELSxFI0VgRC0sSyNRWLkAM//gsTQgG7MzADQAWURELSywFkNYsAMmRYpYZGawH2AbZLAgYGYgWBshsEBZsAFhWSNYZVmwKSNEIxCwKeAbISEhISFZLSywAkNUWEtTI0tRWlg4GyEhWRshISEhWS0ssBZDWLAEJUVksCBgZiBYGyGwQFmwAWEjWBtlWbApI0SwBSWwCCUIIFgCGwNZsAQlELAFJSBGsAQlI0I8sAQlsAclCLAHJRCwBiUgRrAEJbABYCNCPCBYARsAWbAEJRCwBSWwKeCwKSBFZUSwByUQsAYlsCngsAUlsAglCCBYAhsDWbAFJbADJUNIsAQlsAclCLAGJbADJbABYENIGyFZISEhISEhIS0sArAEJSAgRrAEJSNCsAUlCLADJUVIISEhIS0sArADJSCwBCUIsAIlQ0ghISEtLEUjIEUYILAAUCBYI2UjWSNoILBAUFghsEBZI1hlWYpgRC0sS1MjS1FaWCBFimBEGyEhWS0sS1RYIEWKYEQbISFZLSxLUyNLUVpYOBshIVktLLAAIUtUWDgbISFZLSywAkNUWLBGKxshISEhWS0ssAJDVFiwRysbISEhWS0ssAJDVFiwSCsbISEhIVktLLACQ1RYsEkrGyEhIVktLCCKCCNLU4pLUVpYIzgbISFZLSwAsAIlSbAAU1ggsEA4ERshWS0sAUYjRmAjRmEjIBAgRophuP+AYoqxQECKcEVgaDotLCCKI0lkiiNTWDwbIVktLEtSWH0belktLLASAEsBS1RCLSyxAgBCsSMBiFGxQAGIU1pYuRAAACCIVFiyAgECQ2BCWbEkAYhRWLkgAABAiFRYsgICAkNgQrEkAYhUWLICIAJDYEIASwFLUliyAggCQ2BCWRu5QAAAgIhUWLICBAJDYEJZuUAAAIBjuAEAiFRYsgIIAkNgQlm5QAABAGO4AgCIVFiyAhACQ2BCWbEmAYhRWLlAAAIAY7gEAIhUWLICQAJDYEJZuUAABABjuAgAiFRYsgKAAkNgQllZWVlZWbEAAkNUWEAKBUAIQAlADAINAhuxAQJDVFiyBUAIugEAAAkBALMMAQ0BG7GAAkNSWLIFQAi4AYCxCUAbsgVACLoBgAAJAUBZuUAAAICIVblAAAIAY7gEAIhVWlizDAANARuzDAANAVlZWUJCQkJCLSxFGGgjS1FYIyBFIGSwQFBYfFloimBZRC0ssAAWsAIlsAIlAbABIz4AsAIjPrEBAgYMsAojZUKwCyNCAbABIz8AsAIjP7EBAgYMsAYjZUKwByNCsAEWAS0ssICwAkNQsAGwAkNUW1ghIxCwIBrJG4oQ7VktLLBZKy0sihDlLUCZCSFIIFUgAR5VH0gDVR8eAQ8ePx6vHgNNSyYfTEszH0tGJR8mNBBVJTMkVRkT/x8HBP8fBgP/H0pJMx9JRiUfEzMSVQUBA1UEMwNVHwMBDwM/A68DA0dGGR/rRgEjMyJVHDMbVRYzFVURAQ9VEDMPVQ8PTw8CHw/PDwIPD/8PAgYCAQBVATMAVW8AfwCvAO8ABBAAAYAWAQUBuAGQsVRTKytLuAf/UkuwCVBbsAGIsCVTsAGIsEBRWrAGiLAAVVpbWLEBAY5ZhY2NAEIdS7AyU1iwIB1ZS7BkU1iwEB2xFgBCWXNzKytec3R1KysrKyt0K3N0KysrKysrKysrKysrK3N0KysrGF4AAAAGFAAXAE4FtgAXAHUFtgXNAAAAAAAAAAAAAAAAAAAESAAUAJEAAP/sAAAAAP/sAAAAAP/sAAD+FP/sAAAFtgAT/JT/7f6F/+r+qf/sABj+vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACLAIEA3QCYAI8AjgCZAIgAgQEPAIoAAAAAAB8AHwAfAB8AUQB3AP8BewHsAmoCgwKuAtkDFQNBA18DdAOWA68D8QQaBFsEuQT7BUYFowXFBjQGkQbHBvsHGwdEB2QHuwhBCIAI2wkZCVUJigm4CggKOQpsCpQKwwrhCx8LVgucC9kMLAx5DMwM8A0kDUsNjw2/DeYOEg42Dk8Ocg6TDqkOyA8kD3kPtBAHEFQQlBEoEWYRlBHSEhASJxJ/ErkS+hNPE6MT1hQoFGgUpRTMFRcVRxWAFawV7hYGFksWhRaFFrYXARdTF6EX9RgaGJUYyxlHGZQZzxntGfUafxqVGs0a2RsTG2MbghvBG/EcExxFHGwcpRzdHPMdCB0eHXsdjB2dHa4dvx3RHd0eKx43HkgeWR5qHnwejR6eHq8ewR8ZHyofOx9MH10fbh+AH64gGSAqIDsgTCBeIG8gsSEYISghOCFIIVghaSF6IgUiESIhIjEiQSJSImMidCKFIpci/yMPIx8jLyM/I08jYCOmJAwkHCQsJDwkTSRdJLQkxSTWJOYk9yUHJRMlHyUwJUAlUSVhJXIlgyWUJaQltSXGJc4mOiZLJlsmbCZ8Jo0mniaqJrYmxybXJugm+CcJJxknKic7J0cnVydoJ3knySgiKDMoRChVKGYodyiIKJMoniivKMYo0ijeKO8pACkMKRcpTCldKW4peSmFKZYppimyKb4p+CotKj4qTipaKmUqdiqGKpcq3isnKzgrSCtZK2kreyuMK+8saSx6LIoslSyhLLIswyzULOQs9S0FLREtHS0uLT4tSS1ULWUtdS2yLgQuFS4lLjYuRi5XLmcueS6KLpwurS65LsUu1i7nLvgvCC8aLysvOy9ML10vbi9+L6Uv+DB3MRYxJzE4MUkxWTFkMW8xmDHBMdcx/zIfMlQyezK0MuYzBTNOM18zZzN4M4oznDOtM78z0DPjM+sz8zQSNBo0IjQqNDI0izSTNJs0wTTJNNE1BjUONTI1OjVxNXk1gTXoNfA2PDaQNqI2tDbENtQ25Db1Nwc3azfQOAY4ZzjFORI5TDmmOdI52josOjQ6XzrKOtI7EDtcO6g77TwlPF08uj0QPV89uT3LPdw97D38Pg0+Hz5vPoA+yj7SPto+7D70P1M/pj/lP/ZAB0A3QD9AhkCOQJZA30DnQSxBiUHBQdJCAUI8QkRCTEJUQlxCZEJsQnRCs0K7QsNC9EMrQ1tDlUPbRCNEYUSvRQ9FVkVeRbpGFUY0RnxGhEbKRyNHW0drR5tH0UgUSElIUUh1SH1IhUiqSLJJE0kbSUxJg0m0Se9KNEp9SrhLCEtlS6lLukwlTDVMg0yLTJNMpUytTQZNWE1gTXBNgE2xTdZN/U4OTh5OL05ATlJOZE51ToZOm06wTrhO2k73TxVPHU86T2lPmk+0T/JQWlB6UIpRJFEsUTRRV1F7UYdRoFHTUhhShlL4U25T1FQsVKBU9FT8VUtVYlV5VZBVp1YKVj5WY1aXVq5W0lcyV2JX41gsWD5YUFh9WIlYlVi8WONZAlkhWUBZdVm3WfxaTVpuWtNbJ1snWydbJ1snWydbJ1snWydbJ1snWydbJ1snXHFczFzdXOVdbF2nXgteHF4tXjleRV5XXoxew17TXuNfQF+XX+BgMWA6YENgTGB6YJlgqmC7YMtg22FOYZlh7WI7Ypti/mM/Y4Bj1mQsZI9k9GVpZeBmjGcwZzhnQGedZ/ZoL2hnaHloi2kBaQ1pgGnzap1rO2vRbDpsfWy/bQNtM21gbYZtrG6QbxtvgW/fcDFwgnDXcUNxe3G0cgZyVXKocvtzB3MTc1BzjHPNdBB0WHSsdOZ1HnVddaJ13XYddnN2xndCd7l3xXfReAJ4NHg8eG94rXjxeTB5cXmueex6MHpzer97C3tDe3p76HxLfMF9LX01fUZ9V32sffx+RH6Hfsx/FX9Vf5Z/2oAegG+AvYDFgNaA5oD4gQmBEYEZgSqBOoGLgdqB7IH9gg+CIYIzgkSCkILaguuC+4MNgx6DMINBg0mDUYNjg3SDhoOXg6iDuIPKg9uD7YP+hBCEIYRMhHeEiYSbhKeEsoS+hMqFEIVWhZSFnIX2hmSGyYcnh4GH1IgriHmIxIkTiWaJsInvii2KioqSip6Kqoq2isKK04rkivaLCIsaiyyLPotQi2KLdIuJi52Lr4vBi9OL5Yv3jAmMG4wtjEKMVoxijG6Mf4yQjKGMsYzDjNWM54z5jQuNHY0vjUGNVo1qjXuNjI2YjaSNsI28jc2N3o3wjgKOFI4mjjiOSo5cjm6Og46XjqiOuI7JjtmO6o77jwyPHI8ojzSPQI9Mj12Pbo9/j4+PoI+wj8GP0o/jj/OP/5ALkBeQI5A0kEWQVpBmkHKQppDhkR2RapHCkfqSMpJ7ks2S9ZMYkzuTRJODk62T7pROlJOU3pTmlQmVEZVulXqV9pYClg6WcZaBlpGWopaylseW2JbplvqXDJcdly6XP5dKl1uXZ5d5l4GXk5ebl62XtZe9l86X2gAAAAIAwQAABAoFtgADAAcAFbcEAwUCBAMHAAAvMi8zAS8zLzMxMBMhESE3IREhwQNJ/LdoAnn9hwW2+kpoBOYAAgCY/+MBiQW2AAMADgArQBQDCQkCBAQPEAEBDAIMBk9ZDBYCAwA/PysREgA5GC8REgE5ETMzETMxMAEjAzMDNDMyFhUUBiMiJgFGaTPP4Xg6P0A5NEQBkwQj+rSIRkJARz8AAAIAhQOmArAFtgADAAcAH0ANAAMHBAMECAkGAgcDAwA/M80yERIBOTkRMxEzMTABAyMDIQMjAwE/KGkpAispaCkFtv3wAhD98AIQAAACADMAAAT2BbYAGwAfAJlAVQgfHBUEFAkRDAwJEg8OCwQKExMUFh0eBwQGFwQBABkEGAUFBhQGCiEDGhcDGAoYICEIBAwNDE5ZHAENHwAQERBOWRkVEU8NAU8RAQ0RDREFFxMDCgUALzM/MxI5OS8vXV0RMzMrEQAzMxEzMysRADMzERIBOTkRFzMREjk5ETMREhc5ERIXOREzERIXOTIyETMREhc5MTABAyEVIQMjEyEDIxMhNSETITUhEzMDIRMzAyEVASETIQPVQgEb/s1UiVT+0VKIUP76AR9E/usBK1KLUgExVIZUAQj85QEvQv7RA4P+rIH+UgGu/lIBroEBVH8BtP5MAbT+TH/+rAFUAAMAg/+JBAwGEgAgACYALQBmQDUnESUdFwQEKhQNBSEAABkFEQkFLi8lDQYNTVkDBiQOKg5MWR0qKxwUHE1ZFyoUBhQGFAUWBQAvLxI5OS8vEjkyKxEAMxEzKxEAMxEzKxEAMxESARc5ETMRMzMzMxEzMzMRMzEwARQGBxUjNSImJzUWFjMRJiY1NDY3NTMVFhcHJicRHgIHNCYnETYBFBYXEQYGBAzMt4Fw0kNT2VnNpcungbirNJWanZxKqlmA2f3dWm9jZgHBiLEX6N8jH5wlLwG4QayIg6gStrQFRYM7C/5OMl97ZUhZLP57HgMHTFwpAYMQXQAABQBo/+wGLQXLAAkAFQAhAC0AMQBFQCQAEAUKFigcIiIuKAowEAYyMwMNHysNKw0rMDEGMBgZJRkHEwcAPzM/Mz8/Ejk5Ly8RMxEzERIBFzkRMxEzETMRMzEwExQWMzIRECMiBgUUBiMiJjU0NjMyFgEUFjMyNjU0JiMiBgUUBiMiJjU0NjMyFgEBIwHySlOkpFNKAcqZlIyblZKRnAGmSlRUUFBUVEoBy5mUjpmVko6f/v781ZMDKwQCqqoBVAFSqKrk6e7f4+bu/Nurqaetq6Wlq+Pp7t7j5usDIPpKBbYAAAMAcf/sBdMFzQALABUANQBRQDATFgAdBiMqKy4rLSMOJhkdFgk2NzMMSVkzEw8nLQ4wBS8DGSYDKiogLxIgCUpZIAQAPysAGD8SOS8XORIXOT8rERIBFzkRMxEzETMRMzEwARQWFzY2NTQmIyIGEzI3AQ4CFRQWJTQ2Ny4CNTQ2MzIWFRQGBwE2NjczAgcBIycGBiMiJgGeSFeBZWdWWW+b8Z/+S29cLJv+uYu0VT0kxK+iuoidAZc4QxeoRIkBK+W5dvSW1+0Ek0V9WEt/U01hYPudmgGoRFlmQXWJ+oLIZl9iajmWqKeVa7Vd/nk+p2P+4pT+3bJqXNQAAAEAhQOmAT8FtgADABS3AAMDBAUCAwMAP80REgE5ETMxMAEDIwMBPyhpKQW2/fACEAAAAQBS/rwCIQW2AA0AHEAMBwAKBAAEDg8LJwMDAD8/ERIBOTkRMxEzMTATEBI3MwYCFRQSFyMmAlKbkqKQkZSLoJOaAjEBCQHOrsH+MvTw/ja9qgHGAAABAD3+vAIMBbYADQAcQAwECgcACgAODwoDBCcAPz8REgE5OREzETMxMAEQAgcjNhI1NAInMxYSAgybkqCLlJGQopOaAjH++f46qLwBy/D0Ac7Br/4xAAEAVgJ/BA4GFAAOADBAGwMFBAEHDQoJCwkPEAQKAQ0CDAwNCgcEBggOAAA/xDIXOREzETMRMxESARc5MTABAyUXBRMHAwMnEyU3BQMCkSsBjhr+g/issKCw8v6HHQGHKwYU/nVvth/+ul4Bav6WXgFGH7ZvAYsAAAEAaADjBCkEwwALAChAEwAEBAkFBQwNAwcIB1BZAA8IAQgAL10zKxEAMxESATkRMzMRMzEwASEVIREjESE1IREzAo0BnP5ki/5mAZqLAxeK/lYBqooBrAABAD/++AFtAO4ACAARtQUACQoFAAAvzRESATk5MTAlFwYCByM2EjcBXg8aYjV9G0EN7hdk/vdyaAEyXAABAFQB2QI/AnEAAwARtQIABQQAAQAvMxESATk5MTATNSEVVAHrAdmYmAABAJj/4wGJAPIACwAYQAsGAAAMDQkDT1kJFgA/KxESATkRMzEwNzQ2MzIWFRQGIyImmD05OkFCOTNDakNFRUNBRj8AAAEAFAAAAtsFtgADABO3AgAEBQMDAhIAPz8REgE5OTEwAQEjAQLb/d+mAiEFtvpKBbYAAgBm/+wELQXNAAsAFwAoQBQSAAwGAAYZGAkVS1kJBwMPS1kDGQA/KwAYPysREgE5OREzETMxMAEQAiMiAhEQEjMyEgEQEjMyEhEQAiMiAgQt7/bs9u707vf84ZakppWVpqSWAt3+hf6KAX8BcgF+AXL+fv6S/sH+3QEnATsBOwEl/t8AAQC8AAACywW2AAoAJEAQCQABCAELDAQJBwcBCQYBGAA/PxI5LxI5ERIBOTkRMzMxMCEjETQ3BgYHJwEzAsuiCBU01FgBg4wEEoJ0FS6scgErAAEAZAAABCUFywAZACtAFxgBBxMAEw4BBBobEApLWRAHARhMWQEYAD8rABg/KxESARc5ETMRMzEwISE1AT4CNTQmIyIGByc2MzIWFRQCBwEVIQQl/D8BgbBwOI5+W6NkWMruzuqc1v7AAvCPAYOymJBTdYk8T3Go07KL/vDQ/scIAAABAF7/7AQbBcsAJwBDQCQbABMHBwADFiINBigpAxcWFxZLWRcXCiUlHktZJQcKEUtZChkAPysAGD8rERIAORgvKxESADkREgEXOREzETMxMAEUBgcVFhYVFAQhIiYnNRYWMyARECEjNTMyNjU0JiMiBgcnNjYzMhYD7p2QsKr+3v71dMFbX9dgAXv+XpCSq8iTfmCqbVRa64LV7ARejLIeCBa0ktHhIyyeLzEBKQEKj5eGa3o0RnBHUcMAAAIAKwAABGoFvgAKABIAPEAeEgUJAgILBwMAAwUDExQBBRIFTFkJDwcSEgMHBgMYAD8/EjkvEjkzKxEAMxESARc5ETMzMxEzETMxMAEjESMRITUBMxEzIRE0NyMGBwEEatmf/TkCtrDZ/ogKCDAq/jcBUP6wAVCRA938KQHmj7RgP/12AAEAhf/sBB0FtgAaADpAHw8DGRQIFBcDBBwbABFLWQAABhUVGExZFQYGDEtZBhkAPysAGD8rERIAORgvKxESARc5ETMRMzEwATIEFRQAIyInNRYWMzI2NRAhIgcnEyEVIQM2Ai3nAQn+3/73gkbQZbDD/olfn1Y3Atf9tyVzA33lx+P+/k+gLTOmnQEyHTcCrJn+SRcAAAIAdf/sBC8FywAWACQAREAjGhELISEAAAYRAyYlDAsOHU1ZCw4OFAMUF0tZFBkDCE1ZAwcAPysAGD8rERIAORgvOSsRADMREgEXOREzETMRMzEwExAAITIXFSYjIgIDMzYzMhYVFAIjIgAFMjY1NCYjIgYGFRQWFnUBTwFIcUFNY+v4DAxu7sXj+dTj/vYB646dkpFalllQkwJxAa8BqxOPGf7b/sas7szk/vsBVcizqZGmSoJGZ7JoAAEAXgAABCsFtgAGAB9AEAEFBQACAwcIAwJMWQMGABgAPz8rERIBFzkRMzEwIQEhNSEVAQEdAl784wPN/aoFHZmF+s8AAwBo/+wEKQXLABYAIgAuAE1AKRcPJhQsAx0JCQMGERQPBi8wBhEpICkgS1kpKQwADBpNWQwZACNNWQAHAD8rABg/KxESADkYLysREgA5ORESARc5ETMRMxEzETMxMAEyFhUUBgcWFhUUBiMiJjU0JSYmNTQ2AxQWMzI2NTQmJwYGASIGFRQWFzY2NTQmAkjI6oaTspb+3er8ATKKeOt3p5eVppzClYYBOn2Odp+Pd5EFy7qkbLJJVbt7ttnNvPuMTrVwn737pniGjHphl0dAmwNneGRchEI8ilxldwAAAgBq/+wEJQXLABcAJQBBQCIbESIKCgAABBEDJicOHk1ZCxQODgIUFBhLWRQHAgdNWQIZAD8rABg/KxESADkYLxI5KxESARc5ETMRMxEzMTABECEiJzUWMzISEyMGBiMiJjU0EjMyFhIBIgYVFBYzMjY2NTQmJgQl/Wh0RFBm8PULDDe2csLk/9CV33j+FI+ckJNbmVhSkwNG/KYUjxoBKQEzU1fo0OQBCJn+2wEwuKSQpUqARmmyZgAAAgCY/+MBiQRkAAsAFQAoQBQQBgYMAAAWFw4TT1kOEAkDT1kJFgA/KwAYPysREgE5ETMzETMxMDc0NjMyFhUUBiMiJhE0MzIVFAYjIiaYPTk6QUI5M0N2e0I5M0NqQ0VFQ0FGPwO7h4dBRj8AAgA//vgBhQRkAAgAEgAiQBABDQ0FCQkUEwsQT1kLEAUAAC/NPysREgE5ETMzETMxMCUXBgIHIzYSNwM0MzIVFAYjIiYBXg8aYjV9G0ENFXd7Qjk6Pe4XZP73cmgBMlwC74eHQUZGAAABAGgA8gQpBNkABgAVQAkEAAUBBAcIAwAALy8REgEXOTEwJQE1ARUBAQQp/D8DwfzyAw7yAaZiAd+V/o3+uAAAAgB3AcEEGQPjAAMABwAqQBUHAgQAAgAJCAQFUFkEAQBQWQ8BAQEAL10rABgvKxESATk5ETMRMzEwEzUhFQE1IRV3A6L8XgOiA1qJif5niYkAAAEAaADyBCkE2QAGABVACQUBAgAEBwgGAwAvLxESARc5MTATAQE1ARUBaAMP/PEDwfw/AYkBRgF1lf4hYv5aAAACABv/4wM5BcsAGwAmADlAHSEcGwAHExMAHA4EJygAACQQJB5PWSQWEApJWRAEAD8rABg/KxESADkYLxESARc5ETMRMxEzMTABNTQ2NzY2NTQmIyIGByc2MzIWFRQGBgcGBhUVAzQzMhYVFAYjIiYBIUhiiEeDe0+WYTu9zr/UJ0x+ZUGyeDo/QDk0RAGTNnWXVHN0UmZvJTGHY7yrSW9jblZyXyH+14hGQkBHPwACAHn/Rga4BbQANQA/AEVAIiMuNg47BxQbAAApFA4uBUBBGDg4BD0IEQsRCxErHzIDJisALzM/MxI5OS8vEjkyMzMRMxESARc5ETMRMzMRMxEzMTABFAYGIyImJyMGBiMiJjU0NjMyFhcDFRQzMjY1NAIkIyIEAhUQACEyNxUGIyAAERASJCEyBBIBFDMyExMmIyIGBrhYoGhWdgsIKJVmlqnswESsRRmFW3KU/u+x3/62rgFCAS/S4sD0/pX+b9YBjAEA1wFPt/v2w88SDkhVgpMC2Y7sgmhRV2LNsMz/GRb+Khay16y1ARCTuf6p4f7P/rhWhVQBjwFmAQQBlt+1/rP+pP4BOQEFFLQAAgAAAAAFEAW8AAcADgA5QB4CDgsIAQUAAwAHAwQHBBAPDgJJWQsFDg4EBQMABBIAPzM/EjkvEjkrERIBOTkRMxEzERIXOTEwIQMhAyMBMwEBAyYnBgcDBGC2/ba0rAJCjwI//mWqISMWKawB0f4vBbz6RAJqAcVWfWBz/jsAAwDJAAAEvgW2AA4AFwAgAElAJhMEHQoPGRkOCgQHDgQhIggPGA8YSlkPDw4ADhlKWQ4SABdKWQADAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzETMRMzEwEyEgBBUUBgcVBBEUBCMhEyEyNjU0JiMjEREhMjY1NCYjyQGdASMBBJGLAU3+9+7+AqoBGLSesMD6ATGxs7e7BbauvIKpGQo5/tvE3ANEcYZ7bf2R/d2JkoiAAAABAH3/7ATPBcsAFgAmQBQDDhQJDgMXGBIASVkSBAsGSVkLEwA/KwAYPysREgEXOREzMTABIgAREAAzMjcVBiMgABE0EiQzMhcHJgM78f7pAQ35mcSY3/69/qGpAT/Y5qxIpgUz/r/+6f7h/sc3lTkBiAFp4gFUuFSSTgAAAgDJAAAFWAW2AAgAEQAoQBQOBAkABAASEwUNSlkFAwQOSlkEEgA/KwAYPysREgE5OREzETMxMAEQACEhESEgAAMQACEjETMgAAVY/nf+j/5rAcABVQF6tP7h/uX3zwEwATIC6f6W/oEFtv6G/qcBHgEi+3ABKwAAAQDJAAAD+AW2AAsAOkAfBgoKAQQACAEEDA0GCUlZBgYBAgIFSVkCAwEKSVkBEgA/KwAYPysREgA5GC8rERIBFzkRMxEzMTAhIREhFSERIRUhESED+PzRAy/9ewJe/aIChQW2l/4plv3mAAEAyQAAA/gFtgAJADJAGgYAAAEDCAEDCgsGCUlZBgYBAgIFSVkCAwESAD8/KxESADkYLysREgEXOREzETMxMCEjESEVIREhFSEBc6oDL/17Al79ogW2l/3plwAAAQB9/+wFPQXLABsAOkAfFAgZAgIOGwgEHB0AG0lZAAAFDAwRSVkMBAUXSVkFEwA/KwAYPysREgA5GC8rERIBFzkRMxEzMTABIREGBiMgABE0EiQzMhcHJiMgABEQACEyNxEhA0wB8XTwnv60/o63AVjn6spCxrf+9f7UASEBGJiR/rkC/v05JSYBiwFk5AFXtVaWVP7C/ub+2P7OIwHCAAEAyQAABR8FtgALADNAGQkBAQAIBAQFAAUNDAgDSVkICAUKBgMBBRIAPzM/MxI5LysREgE5OREzETMRMxEzMTAhIxEhESMRMxEhETMFH6r8/qqqAwKqArD9UAW2/ZICbgAAAQBUAAACVgW2AAsAN0AcBQEKAwgAAAMBAwwNCQQGBEpZBgMKAwEDSlkBEgA/KxEAMxg/KxEAMxESARc5ETMRMxEzMTAhITU3ESc1IRUHERcCVv3+rKwCAqysYiMEqiViYiX7ViMAAf9g/n8BaAW2AA0AHUANCwgIDg8JAwAFSVkAIgA/KwAYPxESATkRMzEwAyInNRYzMjY1ETMRFAYMXjZHTWNnqsD+fxuRFHhxBbb6WL7RAAABAMkAAATpBbYACwAqQBUIBAQFBQILCgAFDQwCCAUJBgMBBRIAPzM/MxI5ORESARc5ETMRMzEwISMBBxEjETMRATMBBOnI/euZqqoCl8n9tALFiP3DBbb9KwLV/YUAAQDJAAAD+AW2AAUAH0AOAwAABAYHAQMAA0lZABIAPysAGD8REgE5OREzMTAzETMRIRXJqgKFBbb65JoAAQDJAAAGcQW2ABMAMkAYCAUFBgsODg0GDRQVAQoRAwYLBwMOAAYSAD8zMz8zEhc5ERIBOTkRMxEzETMRMzEwIQEjFhURIxEhATMBMxEjETQ3IwEDUP4QCA6dAQABzwgB0/6qDgj+DAUQmtT8XgW2+0oEtvpKA66ivvryAAEAyQAABT8FtgAQAC5AFQkGBgcBDw8ABwAREgsDBw8IAwEHEgA/Mz8zEjk5ERIBOTkRMxEzETMRMzEwISMBIxYVESMRMwEzJgI3ETMFP8L84QgQncADHQgCDgKfBMvYtPzBBbb7OhsBJT8DRwAAAgB9/+wFvgXNAAsAFwAoQBQSAAwGAAYZGAkVSVkJBAMPSVkDEwA/KwAYPysREgE5OREzETMxMAEQACEgABEQACEgAAEQEjMyEhEQAiMiAgW+/p3+xP69/qEBYAFEATsBYvtz/fHz+Pfy8/0C3f6h/m4BiwFoAWUBif5w/qD+1/7NATIBKgEnATH+zQACAMkAAARoBbYACQASADRAGgoFBQYOAAYAExQKBEpZCgoGBwcSSlkHAwYSAD8/KxESADkYLysREgE5OREzETMRMzEwARQEISMRIxEhIAEzMjY1NCYjIwRo/tH+5qyqAXsCJP0LmeLKvsm+BAze7/3BBbb9G5KhkY4AAAIAff6kBb4FzQAPABsANEAbEAoWAAAEAwoEHB0DDQcNGUlZDQQHE0lZBQcTAD/GKwAYPysREgA5ERIBFzkRMxEzMTABEAIHASMBByAAERAAISAAARASMzISERACIyICBb7izgFc9/7jN/69/qEBYAFEATsBYvtz/fHz+Pfy8/0C3f7n/oxC/pYBSgIBiwFoAWUBif5w/qD+1/7NATIBKgEnATH+zQACAMkAAATPBbYADAAVAEhAJQ0BAQIMCREHCwoKBwkCBBYXCQ0ADQBKWQ0NAgMDFUlZAwMLAhIAPzM/KxESADkYLysREgA5ERIBFzkRMxEzETMRMxEzMTABESMRISAEFRAFASMBJTMyNjU0JiMjAXOqAZEBDQEB/toBjcn+nv7P6bSoq73dAmD9oAW2zs/+3mb9bwJgko+PkYAAAQBq/+wEAgXLACQANEAbHhMMAAAYEwUEJSYMHgMWFhtJWRYEAwlJWQMTAD8rABg/KxESADk5ERIBFzkRMxEzMTABFAQjICc1FhYzMjY1NCYmJyYmNTQ2MzIXByYjIgYVFBYWFxYWBAL+6PD+/Ixa1GiqrD2Pksyv/tHatzW1q4eYOIWJ5q0BhcHYQ6QmLIFzTGFSNEnIoanIUJRMdGdMYVExUrwAAAEAEgAABFoFtgAHACRAEgABBQEDAwgJBwMEA0lZBAMBEgA/PysRADMREgEXOREzMTAhIxEhNSEVIQKLqv4xBEj+MQUfl5cAAAEAuv/sBRkFtgARACVAERABCgcBBxMSEQgDBA1JWQQTAD8rABg/MxESATk5ETMRMzEwAREUACEgADURMxEUFjMyNjURBRn+0v74/vj+36rIwrnIBbb8Tvr+4gEg/AOu/Ea3xMW4A7gAAQAAAAAEwwW2AAoAGkALAQQMCwgDAAQDAxIAPz8zEjkREgE5OTEwATMBIwEzARYXNjcEDLf98aj99LQBUDoiJDoFtvpKBbb8TqOaoqEAAQAbAAAHTAW2ABkAJEAQGQobGhUODgUJGBEKAwEJEgA/Mz8zMxI5OREzERIBOTkxMCEjASYmJwYHASMBMxMWFzY3ATMBFhc2NxMzBcWo/tkVNAEWMP7iqP57tOcwFhs1AQa0ARMwIRM15rQD00HGFISd/DMFtvx5vpq3rwN5/H+bw47MA4UAAAEACAAABJYFtgALACNAEgQGBQsKAAYNDAIIBAkGAwEEEgA/Mz8zEjk5ERIBFzkxMCEjAQEjAQEzAQEzAQSWwf53/nC0Aeb+O7wBawFutf47AoP9fQL8Arr9vQJD/UwAAAEAAAAABHsFtgAIACBADwQFAgUHAwkKAAUBBwMFEgA/PzMSORESARc5ETMxMAEBMwERIxEBMwI9AYa4/his/hm6AtsC2/yB/ckCLwOHAAEAUgAABD8FtgAJACtAFwgBAwcABwQBBAoLBQRJWQUDAQhJWQESAD8rABg/KxESARc5ETMRMzEwISE1ASE1IRUBIQQ//BMDCP0QA7/8+AMehQSYmYX7aQABAKb+vAJvBbYABwAgQA4GAQQAAQAICQUCAwYBJwA/Mz8zERIBOTkRMxEzMTABIREhFSERIQJv/jcByf7fASH+vAb6jfohAAABABcAAALdBbYAAwATtwMBBAUDAwISAD8/ERIBOTkxMBMBIwG6AiOm/eAFtvpKBbYAAAEAM/68AfwFtgAHACBADgMAAQYABggJAAcnAwQDAD8zPzMREgE5OREzETMxMBchESE1IREhMwEh/t8Byf43tgXfjfkGAAABADECJwQjBcEABgAYQAkAAwcIBQIABAIALy8zEjkREgE5OTEwEwEzASMBATEBsmMB3Zj+jP6yAicDmvxmAun9FwAB//z+xQOa/0gAAwARtQAFAQQBAgAvMxEBMxEzMTABITUhA5r8YgOe/sWDAAEBiQTZAxIGIQAJABO2AAQLCgaAAQAvGs0REgE5OTEwASMmJic1MxYWFwMSbkGyKMsgciwE2TTAPxVFtTUAAgBe/+wDzQRaABkAJABHQCUiCAseHhkZEggDJSYBAgseR1kCCwsAFRUPRlkVEAUaRlkFFgAVAD8/KwAYPysREgA5GC85KxEAMxESARc5ETMRMxEzMTAhJyMGBiMiJjUQJTc1NCYjIgcnNjYzMhYVESUyNjU1BwYGFRQWA1IhCFKjeqO5AhO6b3qJrTNRwWHEvf4Om7Gmxq9tnGdJqJsBTBAGRIF7VH8sMq7A/RR1qpljBwdtc1peAAIAsP/sBHUGFAATAB8AREAiChcXDw8MHQMMAyAhDQAMFRIRChEGAAYaRlkGFgAURlkAEAA/KwAYPysREgA5OREzGD8/ERIBOTkRMxEzETMRMzEwATISERACIyImJyMHIxEzERQHMzYXIgYVFBYzMjY1NCYCrtjv8dZrsTwMI3emCAh0zKqWmqqZlpYEWv7Z/vL+8v7VT1KNBhT+hn9lpIvD5+fH39HW0gAAAQBz/+wDiwRcABYAJkAUDwMDFQkDGBcGDUZZBhAAEkZZABYAPysAGD8rERIBFzkRMzEwBSIAERAAMzIWFwcmJiMgERQWMzI3FQYCZu7++wEJ9U+eLTM3gjL+sqOgiZBuFAElAQwBEwEsIheNFh3+VsrYO5M5AAIAc//sBDcGFAASAB8AQkAhHQYXAA4OEQYRICESFQ8AAAEBDAMJCRpGWQkQAxNGWQMWAD8rABg/KxESADk5ETMYPz8REgE5OREzETMzETMxMCUjBiMiAhEQEjMyFzMnJxEzESMlMjY1NTQmIyIGFRQWA5oJc+XX7/DW33cNBwSmh/6eqpmbqpKbmpOnASYBDwEPASyiT00Bvvnsd7nOI+nH48/S1gACAHP/7AQSBFwAEwAaADtAHxgKFwsDAxEKAxwbFwtGWRcXAAYGFEZZBhAADkZZABYAPysAGD8rERIAORgvKxESARc5ETMzETMxMAUiABEQADMyEhUVIRYWMzI3FQYGAyIGByE0JgJ/8/7nAQXczvD9DQW5qLGtWJ2chJ0OAj2MFAEoAQcBCQE4/vHeacHISpQmIQPlrJidpwAAAQAdAAADDgYfABQAOUAdFAwMEwICBwMFAxUWCg9GWQoAAQUHBUZZEwcPAxUAPz8zKxEAMxg/KxESATk5ETMzETMzEjkxMAEhESMRIzU3NRAhMhcHJiMiBhUVIQKe/ummxMQBYVd1K2BEXloBFwPH/DkDx0s8PQGUI4UffYpHAAADACf+FAQxBFwAKgA3AEEAbkA+Kxk4JQwfPQUxEwETBQIqIhwfJRkKQkMcDzUPNUZZCDtHWQoiCCoPCA8IFioqAkdZKg8oP0dZKBAWLkdZFhsAPysAGD8rABg/KxESADk5GC8vERI5OSsrERIAORESARc5ETMRMxEzETMRMzEwARUHFhYVFAYjIicGFRQWMzMyFhUUBCEiJjU0NjcmJjU0NjcmJjU0NjMyFwEUFjMyNjU0JiMjIgYTFBYzMjU0IyIGBDHLHCzcwDErakpawrK//tz+6NfpgHQqOUBFVWvYxlZF/hGWjNHJbpjHcX5agnTz9nV+BEhpGCNxR6HACDhVLSuWj7a/oJJkkhoTUDU8WiojqGy0wxT7AFlcfWtZRWwDPHN27Pd+AAEAsAAABEQGFAAWADNAGQ4MCAgJABYJFhcYDgkSEgRGWRIQCgAACRUAPzM/PysREgA5ERIBOTkRMxEzETMzMTAhETQmIyIGFREjETMRFAczNjYzMhYVEQOeeoKtn6amCAoxtXTJyQLFhoS81v3DBhT+KVU4T1u/0P01AAACAKIAAAFmBd8AAwAPACNAEQoAAAQBARARDQdIWQ0CDwEVAD8/zisREgE5ETMzETMxMCEjETMDNDYzMhYVFAYjIiYBVqamtDgqKDo6KCo4BEgBKTk1Njg4NzcAAAL/kf4UAWYF3wAMABgALEAWEwsLDQgIGRoWEEhZFkAJDwAFRlkAGwA/KwAYPxrOKxESATkRMzMRMzEwEyInNRYzMjY1ETMREAM0NjMyFhUUBiMiJitfO0VDTkmmtDgqKDo6KCo4/hQZhxRVVwT8+xD+vAddOTU2ODg3NwABALAAAAQdBhQAEAA2QBsQDgoKCwsIBgQFCAQREgwAABAQCAgDBwsVAw8APz8zEjkvOREzPxESARc5ETkRMxEzMzEwATY3ATMBASMBBxEjETMRFAcBVCtYAWLF/kQB28n+fX2kpAgCMT1jAXf+Lf2LAgZs/mYGFPzHN3MAAQCwAAABVgYUAAMAFkAJAAEBBAUCAAEVAD8/ERIBOREzMTAhIxEzAVampgYUAAEAsAAABssEXAAjAEZAIxURERIICQAjCRIjAyQlHBYVFRIZBA0ZDUZZHxkQEw8JABIVAD8zMz8/MysRADMREjkYLzMzERIBFzkRMxEzETMRMzEwIRE0JiMiBhURIxE0JiMiBhURIxEzFzM2NjMgFzM2NjMyFhURBiVwdpuUpnB3nJGmhxsIL6tqAQFPCDG6d7q5AsmDg7K5/ZwCyYODu9X9wQRIllBaulZkv9L9NQAAAQCwAAAERARcABQAMUAYABQMCAgJFAkWFQwJEBAERlkQEAoPAAkVAD8zPz8rERIAORESATk5ETMRMxEzMTAhETQmIyIGFREjETMXMzY2MzIWFREDnnqCrKCmhxsIM7hxxsgCxYaEutb9wQRIllFZv9L9NQACAHP/7ARiBFwADAAYAChAFBMADQcABxoZChZGWQoQAxBGWQMWAD8rABg/KxESATk5ETMRMzEwARAAIyImAjUQADMyAAEUFjMyNjU0JiMiBgRi/vLuk+R8AQzu5gEP/L2oo6OpqaWjpgIl/vT+04oBAq0BDAEr/s7++9Lc29PR2dYAAgCw/hQEdQRcABQAIQA/QCAZCwQHBwgfEggSIiMECwAPDxVGWQ8QCQ8IGwAcRlkAFgA/KwAYPz8/KxESADk5ERIBOTkRMxEzETMzMzEwBSImJyMWFREjETMXMzY2MzISERACAyIGBxUUFjMyNjU0JgKua7E8DAymhxcIQKpu2u3x7qiWApqqjqGhFE9SYFb+PQY0llpQ/tb+8/7y/tUD47rLJefH5srN2wACAHP+FAQ3BFwADAAfAERAIgoQHRYDGhoZEBkgIRobFw8dHh4WDRMTB0ZZExANAEZZDRYAPysAGD8rERIAOTkRMxg/PxESATk5ETMRMzMzETMxMCUyNjc1NCYjIgYVFBYXIgIREBIzMhczNzMRIxE0NyMGAk6mmAWcqZKbmX3U7vDW4XkJGIOmCw1zd7LTJebK48/P2YsBKgELAQ0BLqqW+cwB1WRGpwABALAAAAMnBFwAEAAqQBQNCQkKCgIREgsPDQAKFQAFRlkAEAA/KwAYPxI5PxESATk5ETMRMzEwATIXByYjIgYVESMRMxczNjYCpEk6F0Q0hb2miRMIPawEXAyaD9ih/bQESMtrdAABAGr/7ANzBFwAJAA2QBweEwwAABgFEwQlJgweAxYWG0ZZFhAGAwlGWQMWAD8rABgvPysREgA5ORESARc5ETMRMzEwARQGIyInNRYWMzI2NTQmJy4CNTQ2MzIXByYjIgYVFBYWFxYWA3Pkztp6T7VUgoxvoZmBP9q+sak7pYZ2eC1kjsOJASuZpkWaKC5TVUBbPjlVbEuGm0iHREpBLD44NUeQAAEAH//sAqgFRgAWADRAGxAUFAkLCRIDBBgXChMQE0dZDkAQDwcARlkHFgA/KwAYPxrNKxEAMxESARc5ETMRMzEwJTI2NxUGBiMgEREjNTc3MxUhFSERFBYCEixSGBtpKv7CnZ1GYAE+/sJedQ0Hfw0RAU8CjFBF6v6B/XtjagAAAQCk/+wEOQRIABQANEAZARMHDAwKEwoVFgwNDRAIFA8QBEZZEBYLFQA/PysAGD8zEjkRMxESATk5ETMRMxEzMTABERQWMzI2NREzESMnIwYGIyImNREBTHqCrJ+miRgJM7V0yMcESP05hoS81QJA+7iTUVa+0QLNAAABAAAAAAQCBEgACwAYQAoBCgwNBQkBDwAVAD8/MzkREgE5OTEwIQEzExYXMzYSEzMBAaD+YLLsUA4IC3XMsv5gBEj9duRENQFNAjD7uAABABcAAAYjBEgAHAAsQBQJGx0eFxYODQMEDQQIGhIJDwAIFQA/Mz8zMxI5OREzETMzMxESATk5MTAhAyYnIwYHAyMBMxISFzM2NjcTMxMWFzM2NhMzAQQvyRM0CCgez8D+1a5qbwgICzESybTEOBQIBCO/rP7RAoM70a9f/X8ESP5j/lBLObU1AnX9i6x1JJYC3Pu4AAABACcAAAQIBEgACwAiQBEHBQYAAQUMDQkDAQgLFQQBDwA/Mz8zEjk5ERIBFzkxMAEBMwEBMwEBIwEBIwG4/oO9ASEBILv+gwGRvP7N/sq8AjECF/5cAaT96f3PAbz+RAABAAL+FAQGBEgAFQAkQBIJDwADFhcEDQANEkZZDRsIAA8APzI/KxESADkREgEXOTEwEzMTFhczNjYTMwEGBiMiJzUWMzI3NwKy8E8TCA1T5rL+KUa7iExKN0SrST0ESP2P1l8z9wJ8+yC5mxGFDMCcAAABAFIAAANtBEgACQArQBcIAQMHAAcEAQQKCwUER1kFDwEIR1kBFQA/KwAYPysREgEXOREzETMxMCEhNQEhNSEVASEDbfzlAlb9zwLn/bICXXEDVoGB/LoAAQA9/rwCwQW2ABwALEAVGRoaCxcAAA8HFAMDBwsDHR4TAwQnAD8/ERIBFzkRMxEzMxEzETMRMzEwJRQWFxUmJjURNCYjNTY2NRE0NjMVBhURFAcVFhUB23VxvtB+eIJ02Lbm398MZlwCjAKqmgEvaFmNAlxgATKbrIsGwf7Z1ycMJ9cAAQHu/hACewYUAAMAFkAJAgMDBAUDGwAAAD8/ERIBOREzMTABMxEjAe6NjQYU9/wAAQBI/rwCywW2AB0ALEAVFQUKEhICGQAdHQ4OGQUDHh8VJwYDAD8/ERIBFzkRMxEzETMzETMRMzEwASY1ETQnNTIWFREUFhcVIgYVERQGBzU2NjURNDY3Agrf47jTdoJ6fs2+b3RucQI/J9cBJ8EGi66Z/s5hWwKNWWj+0ZmrAowCXGYBKXJ4FAAAAQBoAlAEKQNUABcAJEARAw8YGRIMUFkDEg8GBgBQWQYALysAEBjEL8QrERIBOTkxMAEiBgc1NjMyFhcWFjMyNjcVBiMiJicmJgFSNX82ZJBEcVlCYi82gDZmjkh+SEtaAslDNpdtHCYcG0A5lm4hICAYAAACAJj+iwGJBF4AAwAOACtAFAIEBAMJCQ8QAAADDAwGT1kMEAMiAD8/KxESADkYLxESATkRMzMRMzEwEzMTIxMUIyImNTQ2MzIW22kzz+F5PDw/OTNGAqz73wVMh0dAP0hAAAEAvv/sA9sFywAbAD5AHhYIDQMDCgQAEBAECAMcHRkFAhMKDQINAg0ECwcEGQA/PxI5OS8vETMzETMzERIBFzkRMxEzMxEzETMxMCUGBxUjNSYCNRAlNTMVFhYXByYjIgYVFBYzMjcDy2mThcvBAYyHS44xMYVtrKKfp42O8DYGyM4gARH6Afw+rKQDIReMM9PZ1Ms7AAEAPwAABEQFyQAdAEhAJhgTCQ0NGhYRAgsWEwUeHwwYGRhOWQkZGRMAExBMWRMYAAVLWQAHAD8rABg/KxESADkYLzMrEQAzERIBFzkRMzMRMxEzMTABMhcHJiMiBhURIRUhFRQGByEVITU2NTUjNTMRNDYCqr6qPZqPe30Bpv5aQUoDG/v7zcbG4AXJVIVNfIz+2X/dZIgsmo0v9N9/ATyyzQAAAgB7AQYEFwSgABsAJwAgQA0cACIOAA4oKR8VFSUHAC8zMy8zERIBOTkRMxEzMTATNDcnNxc2MzIXNxcHFhUUBxcHJwYjIicHJzcmNxQWMzI2NTQmIyIGuEqHXodogn9miV+GSkqDXIlmf4Zkh1yFSoGddHSeoHJ0nQLTemuMXIVJSYVcinF2g2eHXIVHSYVciGt8cKCfcXKipAAAAQAfAAAEcQW2ABYAVkAuEg4HCwsQDAUJAgkDDBQOFQcXGAoODgcPBhISAwATFQ8THxMCDxMPEwwBFQYMGAA/PzMSOTkvL10REjkyMhEzETMzETMREgEXOREzETMzETMRMzEwAQEzASEVIRUhFSERIxEhNSE1ITUhATMCSAF7rv5gAQb+wwE9/sOk/sQBPP7EAQD+ZbIC3wLX/P5/qn/+9AEMf6p/AwIAAgHu/hACewYUAAMABwAkQBACBgYDBwcICQQDBAMHGwAAAD8/OTkvLxESATkRMzMRMzEwATMRIxEzESMB7o2NjY0GFPz4/g389wACAHv/+AOWBh0AMQA9AENAJjIAEwYqHjgZGR4MBgAjBj4/FQM7NhwtBiEJISdHWSEVCRBHWQkAAD8rABg/KxESABc5ERIBFzkRMxEzETMRMzEwEzQ2NyYmNTQ2MzIWFwcmJiMiBhUUFhcWFhUUBgcWFRQGIyInNRYWMzI2NTQmJicuAjcUFhcXNjU0JicGBotWTkpUz8Ven2E1YodMdHR7mrqWUkqZ6tTagE7CUoaNMGxzjoZCkoSnMYmTuURVAylWiSUob1V5ix0ngycbO0A8VDdEl2tajSlRkoyZQZQlLUxHLjo6KzRacmJNaT0TUG9TcDkTZAACATUFDgNoBdMACwAXAB5ADAYADBIAEhgZDwMVCQAvM80yERIBOTkRMxEzMTABNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYBNTUlJjc3JiU1AX01JSU3NyUlNQVxNC4uNDIxMTI0Li40MjExAAADAGT/7AZEBcsAFgAmADYARkAnJxcDDy8fHxQJDxcFNzgGDAASDwwfDAIAEhASAgwSDBIbKyMTMxsEAD8zPzMSOTkvL11dETMRMxESARc5ETMRMxEzMTABIgYVFBYzMjcVBgYjIiY1NDYzMhcHJgE0EiQzMgQSFRQCBCMiJAI3FBIEMzIkEjU0AiQjIgQCA319h3+DVn0wZUbC0N2/gHY6bPyXyAFeysgBXsrC/qLQz/6iw2muAS2srgEqr67+17Cu/tavBCOumqiiLXwUHPHY0fY8djP+uMgBXsrI/qLKxf6m0M8BWsat/tOtrgEpsK4BKq+u/tcAAAIARgMUAnEFxwAWAB8AN0AcFwYbCgEBFhYQBgMgIRwKChIZFgADEAMCAw0SHwA/M9RdxDMSOS8zERIBFzkRMxEzMxEzMTABJwYjIiY1NDY3NzU0IyIHJzYzMhYVESUUMzI1NQcGBgIUGFyMX2+apXWUZGgrcoWCif5QcMlicGcDIVRhY2ZmaQYEJ4UzYDhpef48vGS0MQQEOQACAFIAdQOqA74ABgANAClAEwMGCg0CBAsJCQQNBgQODwwFCAEALzMvMxESARc5ETMRMxEzETMxMBMBFwEBBwElARcBAQcBUgFWd/7fASF3/qoBiwFYdf7hAR91/qgCJwGXRf6i/qFHAZcbAZdF/qL+oUcBlwAAAQBoAQgEKQMXAAUAG0AMAgEEAQYHBQRQWQUCAC8vKxESATk5ETMxMAERIxEhNQQpifzIAxf98QGFigD//wBUAdkCPwJxAgYAEAAAAAQAZP/sBkQFywAIABYAJgA2AF1AMycXABEREgQJLx8fDQkMEhcGNzgMEBAAAA4TDhIIEw8SHxICABMQEwISExITGysjEzMbBAA/Mz8zEjk5Ly9dXREzETMREjkvMxEzERIBFzkRMxEzETMRMxEzMTABMzI2NTQmIyMFFAYHEyMDIxEjESEyFgE0EiQzMgQSFRQCBCMiJAI3FBIEMzIkEjU0AiQjIgQCAtNsUGFWXWoBslVN7qjPh5QBBaab+9/IAV7KyAFeysL+otDP/qLDaa4BLayuASqvrv7XsK7+1q8C+lNAS0GIUHse/nUBYv6eA3uC/sXIAV7KyP6iysX+ptDPAVrGrf7Tra4BKbCuASqvrv7XAAH/+gYUBAYGkwADABG1AAUBBAECAC8zEQEzETMxMAEhNSEEBvv0BAwGFH8AAgB/A1wC7gXLAAwAGAAhQA4NABMGAAYZGhAKwBYDBAA/MxrMMhESATk5ETMRMzEwEzQ2MzIWFRQGBiMiJjcUFjMyNjU0JiMiBn+1goK2UpJUgrVzdVFQc3FSU3MEk4K2tYNUj1S0g1JycVNUcXIA//8AaAABBCkEwwImAA4AAAAHAisAAP10AAEAMQJKAo0FyQAYACNAEQcTFwEBDhMABBoZChAfFwEgAD8zPzMREgEXOREzETMxMAEhNTc+AjU0JiMiBgcnNjMyFhUUBgcHIQKN/aTsWVIhUD80YkVCg5iEk1mTrgG4Akpo5lZhTDZERSYyWG+CcFCXiqUAAQAhAjkCjQXJACMAOUAiDwUFAAMSHgoGJCUSXRNtEwJMEwELExsTAhMTCBohHw0IIQA/Mz8zEjkvXV1dMxESARc5ETMxMAEUBgcWFRQGIyInNRYzMjU0IyM1MzI2NTQmIyIGByc2NjMyFgJzUkSwuKiYdJN70+d1d2djUENCcDhFP4xeiJ0E51BnFy+igI84e0SikWtPRD1EKyNaLTZ3AAEBiQTZAxIGIQAJABO2CQQKCwSACQAvGs0REgE5OTEwATY2NzMVBgYHIwGJMG8gyiyuQG8E8j6wQRVBvjQAAQCw/hQERARIABYANUAaBQoKCBAAExMUCBQYFwYVDxQbDQJGWQ0WCRUAPz8rABg/PzMREgE5OREzETMzETMRMzEwARAzMjY1ETMRIycjBiMiJyMWFREjETMBVv6rn6aIGgpv5ZZYCgqmpgF9/vq91AJA+7iTp1xUoP7ABjQAAQBx/vwEYAYUAA8AJ0ASBAUBAAAFCwMQEQgIBQMPBQEFAC8zPzMSOS8REgEXOREzETMxMAEjESMRIxEGIyImNRA2MyEEYHLVcz5U2Mva6AIt/vwGsPlQAzMS+vsBBP4AAQCYAkwBiQNaAAsAF0AKBgAADQwDCU9ZAwAvKxESATkRMzEwEzQ2MzIWFRQGIyImmD44OkFCOTNDAtNCRUVCQUY/AAABACX+FAG0AAAAEgAkQBARDgsAAA4FAxMUDhERCAMQAC/MMjkvMxESARc5ETMRMzEwARQGIyInNRYzMjY1NCYnNzMHFgG0mZYzLS07T1FPbVhuN7T+32FqCWoIKDYrNRGycycAAQBMAkoB4QW2AAoAIEAOAgADAwoMCwkJAyAGAB4APzI/OS8REgE5OREzMzEwATMRIxE0NwYGBycBUo+FBhY2h0MFtvyUAkNbWhYtX2AAAgBCAxQCvgXHAAsAFwAlQBIMBhIABgAYGQ8AAxADAgMVCR8APzPEXTIREgE5OREzETMxMAEUBiMiJjU0NjMyFgUUFjMyNjU0JiMiBgK+q5aSqaiXmKX9/ltoaVxcaWdcBG+kt7qho7W2onp6enp7dnYAAgBQAHUDqAO+AAYADQAjQBELCQQCAAMHAgoJBg4PDAUIAQAvMy8zERIBFzkRMxEzMTABAScBATcBBQEnAQE3AQOo/qh1AR/+4XUBWP51/qh1AR/+4XUBWAIM/mlHAV8BXkX+aRv+aUcBXwFeRf5p//8ASwAABdEFtgAnAhcCgwAAACYAe/8AAQcCPAMd/bcACbMDAhIYAD81NQD//wAuAAAF2wW2ACcCFwI/AAAAJgB74gABBwB0A079twAHsgIQGAA/NQD//wAaAAAGIQXJACYAdfkAACcCFwLfAAABBwI8A239twAJswMCKxgAPzU1AAACADP+dwNUBF4AHQAoAEFAIggUHiMBHA8cIxQEKSoAHQEMAx0dESYmIE9ZJhARC0lZESMAPysAGD8rERIAORgvX15dERIBFzkRMxEzETMxMAEVFAYHDgIVFBYzMjY3FwYjIiY1ND4CNzY2NTUTFCMiJjU0NjMyFgJOS2F5PRmEelCWYjvFxr7YI0BZNmVBtHk7PkI3M0YCrDN6lFRqS004ZHEmMIdguqpGaVlSL1h0XR8BK4dFQkBHQP//AAAAAAUQB3MCJgAkAAABBwBD/8IBUgAIswIQBSYAKzX//wAAAAAFEAdzAiYAJAAAAQcAdgCFAVIACLMCGAUmACs1//8AAAAABRAHcwImACQAAAEHAUsAIwFSAAizAh0FJgArNf//AAAAAAUQBy8CJgAkAAABBwFSAAQBUgAIswIYBSYAKzX//wAAAAAFEAclAiYAJAAAAQcAagA3AVIACrQDAiQFJgArNTX//wAAAAAFEAcGAiYAJAAAAAcBUAA5AIEAAv/+AAAGgQW2AA8AEwBOQCwKDg4RAQAIDAEQBQUVBRQJEwYTSVkQA0lZCg1JWRAKEAoBBgMFEgEOSVkBEgA/KwAYPz8SOTkvLysrKxEAMxEBMxESFzkRMzMRMzEwISERIQMjASEVIREhFSERIQEhESMGgf0S/f7jsAK6A8n9vAId/eMCRPtUAb52AdH+LwW2l/4plv3mAdICtQD//wB9/hQEzwXLAiYAJgAAAAcAegICAAD//wDJAAAD+AdzAiYAKAAAAQcAQ/+3AVIACLMBDQUmACs1//8AyQAAA/gHcwImACgAAAEHAHYAPwFSAAizARUFJgArNf//AMkAAAP4B3MCJgAoAAABBwFL//sBUgAIswEaBSYAKzX//wDJAAAD+AclAiYAKAAAAQcAagASAVIACrQCASEFJgArNTX//wA8AAACVgdzAiYALAAAAQcAQ/6zAVIACLMBDQUmACs1//8AVAAAAnMHcwImACwAAAEHAHb/YQFSAAizARUFJgArNf////8AAAKhB3MCJgAsAAABBwFL/vMBUgAIswEaBSYAKzX//wA8AAACbwclAiYALAAAAQcAav8HAVIACrQCASEFJgArNTUAAgAvAAAFSAW2AAwAFwBXQDIRFRUIBA0AABMEBgQYGRQGBwZJWREPBz8HrwfPB98HBQsDBwcECQkQSlkJAwQVSlkEEgA/KwAYPysREgA5GC9fXl0zKxEAMxESARc5ETMRMzMRMzEwARAAISERIzUzESEgAAMQISMRIRUhETMgBUj+d/6P/nuamgGyAVEBfLX9x+cBe/6FvgJiAun+lv6BAomWApf+if6kAkD9/Jb+Cv//AMkAAAU/By8CJgAxAAABBwFSAJMBUgAIswEaBSYAKzX//wB9/+wFvgdzAiYAMgAAAQcAQwB5AVIACLMCGQUmACs1//8Aff/sBb4HcwImADIAAAEHAHYBCgFSAAizAiEFJgArNf//AH3/7AW+B3MCJgAyAAABBwFLALQBUgAIswImBSYAKzX//wB9/+wFvgcvAiYAMgAAAQcBUgCaAVIACLMCIQUmACs1//8Aff/sBb4HJQImADIAAAEHAGoA1QFSAAq0AwItBSYAKzU1AAEAhQEQBAwEmAALABlACQcJAwEJAQwNCAAZLxESATk5ETMRMzEwARcBAQcBAScBATcBA6xg/qABXmD+nv6kZQFe/qBkAWEEmGP+nv6gYwFf/qFjAWABYGX+nQAAAwB9/8MFvgX2ABMAGwAjAE5ALBYfFx4EHBQcChQAABIPBQgKBiQlFh4hGQ0hSVkPEggFBAMQDQQDGUlZBgMTAD/GKwAYP8YSFzkrERIAOTkREgEXOREzETMREhc5MTABEAAhIicHJzcmERAAITIXNxcHFgMQJwEWMzISARAXASYjIgIFvv6d/sTrlGV4bLIBYAFE0Z1heGrAtG79YHOw8/j8J2UCnWqo8/0C3f6h/m5kjU+axgFtAWUBiV6HUJTK/pUBEJr8TFIBMgEq/vqaA69J/s0A//8Auv/sBRkHcwImADgAAAEHAEMARgFSAAizARMFJgArNf//ALr/7AUZB3MCJgA4AAABBwB2AM8BUgAIswEbBSYAKzX//wC6/+wFGQdzAiYAOAAAAQcBSwB9AVIACLMBIAUmACs1//8Auv/sBRkHJQImADgAAAEHAGoAmAFSAAq0AgEnBSYAKzU1//8AAAAABHsHcwImADwAAAEHAHYAMQFSAAizARIFJgArNQACAMkAAAR5BbYADAAVADZAHA0JBQUGEQAGABYXDQRKWQkVSlkNCQ0JBgcDBhIAPz8SOTkvLysrERIBOTkRMxEzETMzMTABFAQhIxEjETMRMyAEATMyNjU0JiMjBHn+0f7huKqq1wEZARb8+qjiyr7KzAMQ4+7+wQW2/wDP/eqPpJWKAAABALD/7AScBh8AMABBQCIpKgUdIwAXDAwAHREqBTEyEhIqLi4mRlkuACoVDxVGWQ8WAD8rABg/PysREgA5GC8REgEXOREzETMRMxEzMTABFAcGBhUUFhYXFhYVFAYjIic1FhYzMjU0JicmJjU0Njc2NjU0JiMgFREjETQ2MzIWBBmPWDgbR06MZsKzvGs/nEjXU25/YEVHS0CIf/7sptzezuEE8odzRkMhICo5M1+dZaCrRZonL7ZLa0ZSe1Q/ajU5WjVQVd/7TASysrud//8AXv/sA80GIQImAEQAAAEGAEOOAAAIswImESYAKzX//wBe/+wDzQYhAiYARAAAAQYAdisAAAizAi4RJgArNf//AF7/7APNBiECJgBEAAABBgFL2AAACLMCMxEmACs1//8AXv/sA80F3QImAEQAAAEGAVK9AAAIswIuESYAKzX//wBe/+wDzQXTAiYARAAAAQYAauIAAAq0AwI6ESYAKzU1//8AXv/sA80GhQImAEQAAAEGAVD3AAAKtAMCKBEmACs1NQADAF7/7AZzBFwAKQA0ADsAYUAzKgAkETA4GRkEMDkYGB8wCwAFPD0bLSctRlkZMQQxR1k4JCcRBAQOIicWNQgOCEZZFA4QAD8zKxEAMxg/MxI5LzkSOTMrEQAzKxEAMxESARc5ETMRMzMRMxI5OREzMTATNDY3NzU0JiMiByc2NjMyFhc2NjMyEhUVIRIhMjY3FQYGIyAnBgYjIiY3FBYzMjY1NQcGBgEiBgchNCZe+P64dHeQozRKx2KCpSk1q27A6P1DCAE6W51UVpVl/t99UcWGo7mua1iRqJ66pAO9eYsLAgeAAS+hswgGRIF7VH8pNVdfWGD+9d5r/nUjJ5QmIel/aqqXX1mpmmMHCG0CMqaenKgA//8Ac/4UA4sEXAImAEYAAAAHAHoBRgAA//8Ac//sBBIGIQImAEgAAAEGAEO1AAAIswIcESYAKzX//wBz/+wEEgYhAiYASAAAAQYAdk4AAAizAiQRJgArNf//AHP/7AQSBiECJgBIAAABBgFL9wAACLMCKREmACs1//8Ac//sBBIF0wImAEgAAAEGAGoKAAAKtAMCMBEmACs1Nf///9oAAAFjBiECJgDzAAABBwBD/lEAAAAIswEFESYAKzX//wCpAAACMgYhAiYA8wAAAQcAdv8gAAAACLMBDREmACs1////swAAAlUGIQImAPMAAAEHAUv+pwAAAAizARIRJgArNf///+wAAAIfBdMCJgDzAAABBwBq/rcAAAAKtAIBGREmACs1NQACAHH/7ARiBiEAGwAmAEpAKyEGDBwcAAAYGRYOERMQBgknKAkfRlkLAxYRGQ4PBRQJCQMXFAEDJEZZAxYAPysAGD8zEjkvEhc5EjkrERIBFzkRMxEzETMxMAEQACMiADU0ADMyFzcmJwUnNyYnNxYXNxcHFhIDNCYjIBEUFjMyNgRi/vv33v7pAQfc4mQIOc3+8UnpXF5FnGbuTM+Ypai0nP6vr6KvoQIz/uf+0gEN4uYBBnkE1r+bbIU+MXVJS4prd4/+cv7ok6r+mKe3yQD//wCwAAAERAXdAiYAUQAAAQYBUg4AAAizAR4RJgArNf//AHP/7ARiBiECJgBSAAABBgBD1AAACLMCGhEmACs1//8Ac//sBGIGIQImAFIAAAEGAHZWAAAIswIiESYAKzX//wBz/+wEYgYhAiYAUgAAAQYBSw4AAAizAicRJgArNf//AHP/7ARiBd0CJgBSAAABBgFS8QAACLMCIhEmACs1//8Ac//sBGIF0wImAFIAAAEGAGobAAAKtAMCLhEmACs1NQADAGgA/AQpBKgAAwAPABsAM0AYFgoKEAQCBAEDHB0ZExMBBw0NAQEAUFkBAC8rEQAzGC8zETMvMxESARc5ETMzETMxMBM1IRUBNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiZoA8H9rjs2NDo7MzQ9OzY0OjszND0CjYqK/ug8PT86OUA/AvQ8PT86OUA/AAMAc/+8BGIEhwATABsAIwBLQCkXHxwUFAocAAASDwUICgYkJRYeIRkNGUZZDxIIBQQDEA0QAyFGWQYDFgA/xisAGD/GEhc5KxESADk5ERIBFzkRMxEzERI5OTEwARAAIyInByc3JhEQADMyFzcXBxYFFBcBJiMiBgU0JwEWMzI2BGL+8u6acFRyXoEBDO6adFR1YX/8vTUB0Utyo6YClzP+L0dxo6kCJf70/tNFdU6DmAEAAQwBK0x3TIWY+atmAoY11tSkZP19M9sA//8ApP/sBDkGIQImAFgAAAEGAEPEAAAIswEWESYAKzX//wCk/+wEOQYhAiYAWAAAAQYAdnEAAAizAR4RJgArNf//AKT/7AQ5BiECJgBYAAABBgFLEgAACLMBIxEmACs1//8ApP/sBDkF0wImAFgAAAEGAGohAAAKtAIBKhEmACs1Nf//AAL+FAQGBiECJgBcAAABBgB2EgAACLMBHxEmACs1AAIAsP4UBHUGFAAWACIAPkAfIAYbFBAQEQYRJCMSABEbDBYJAwkeRlkJFgMXRlkDEAA/KwAYPysREgA5ORg/PxESATk5ETMRMzMRMzEwATY2MzISERACIyInIxcWFREjETMRFAclIgYHFRQWMyARNCYBWEKqatfw8dbeegwECKamBgFIqJgCmqoBL5QDtFlP/tT+9f70/tOhIk0//jUIAP4uNFobuMkp58cBsNfR//8AAv4UBAYF0wImAFwAAAEGAGq1AAAKtAIBKxEmACs1Nf//AAAAAAUQBrQCJgAkAAABBwFNAD8BUgAIswISBSYAKzX//wBe/+wDzQViAiYARAAAAQYBTfUAAAizAigRJgArNf//AAAAAAUQBzcCJgAkAAABBwFOACsBUgAIswIPBSYAKzX//wBe/+wDzQXlAiYARAAAAQYBTuQAAAizAiURJgArNf//AAD+QgURBbwCJgAkAAAABwFRA6AAAP//AF7+QgQABFoCJgBEAAAABwFRAo8AAP//AH3/7ATPB3MCJgAmAAABBwB2AQgBUgAIswEgBSYAKzX//wBz/+wDiwYhAiYARgAAAQYAdkQAAAizASARJgArNf//AH3/7ATPB3MCJgAmAAABBwFLAKwBUgAIswElBSYAKzX//wBz/+wDiwYhAiYARgAAAQYBS9QAAAizASURJgArNf//AH3/7ATPBzECJgAmAAABBwFPAhsBUgAIswEgBSYAKzX//wBz/+wDiwXfAiYARgAAAQcBTwFQAAAACLMBIBEmACs1//8Aff/sBM8HcwImACYAAAEHAUwAwQFSAAizASIFJgArNf//AHP/7AOhBiECJgBGAAABBgFM8wAACLMBIhEmACs1//8AyQAABVgHcwImACcAAAEHAUwAWAFSAAizAh0FJgArNf//AHP/7AWBBhQCJgBHAAABBwI4AwwAAAAHsgIjAAA/NQD//wAvAAAFSAW2AgYAkgAAAAIAc//sBNMGFAAaACcAZEA3JQYSDgAeHhUZFhkQBgQoKRoVGBAREEdZFQ8RHxEvEQMJAxERCRMAAQwDCQkiRlkJEAMbRlkDFgA/KwAYPysREgA5ORg/EjkvX15dMysRADMYPxESARc5ETMzETMzMxEzMTAlIwYjIgIREBIzMhczJjU1ITUhNTMVMxUjESMlMjY1NTQmIyIGFRQWA5oJc+XX7/DW33cNC/5AAcCmnJyH/p6qmZuqkpuak6cBJgEPAQ8BLKJTSYWBuLiB+yV3uc4j6cfjz9LW//8AyQAAA/gGtAImACgAAAEHAU0AEgFSAAizAQ8FJgArNf//AHP/7AQSBWICJgBIAAABBgFNCgAACLMCHhEmACs1//8AyQAAA/gHNwImACgAAAEHAU4AEAFSAAizAQwFJgArNf//AHP/7AQSBeUCJgBIAAABBgFO+wAACLMCGxEmACs1//8AyQAAA/gHFAImACgAAAEHAU8BbwE1AAizARUFJgArNf//AHP/7AQSBd8CJgBIAAABBwFPAVQAAAAIswIkESYAKzX//wDJ/kID+AW2AiYAKAAAAAcBUQJzAAD//wBz/mEEEgRcAiYASAAAAAcBUQJmAB///wDJAAAD+AdzAiYAKAAAAQcBTAAQAVIACLMBFwUmACs1//8Ac//sBBIGIQImAEgAAAEGAUz7AAAIswImESYAKzX//wB9/+wFPQdzAiYAKgAAAQcBSwDpAVIACLMBKgUmACs1//8AJ/4UBDEGIQImAEoAAAEGAUvKAAAIswNQESYAKzX//wB9/+wFPQc3AiYAKgAAAQcBTgEAAVIACLMBHAUmACs1//8AJ/4UBDEF5QImAEoAAAEGAU7OAAAIswNCESYAKzX//wB9/+wFPQcxAiYAKgAAAQcBTwJkAVIACLMBJQUmACs1//8AJ/4UBDEF3wImAEoAAAEHAU8BHwAAAAizA0sRJgArNf//AH3+OwU9BcsCJgAqAAAABwI5AScAAP//ACf+FAQxBiECJgBKAAABBgI6RAAACLMDRhEmACs1//8AyQAABR8HcwImACsAAAEHAUsAlgFSAAizARoFJgArNf//ALAAAAREB6oCJgBLAAABBwFLAB8BiQAIswElAiYAKzUAAgAAAAAF5wW2ABMAFwBUQCwXAw8PABAUBAwMBwsICxASBBgZFw5JWRYKEhMSSlkHAxMXExcTAQwQEgUBAwA/Mz8zEjk5Ly8RMzMrEQAzMysREgEXOREzMxEzMxEzMxEzMzEwEzUzFSE1MxUzFSMRIxEhESMRIzUBNSEVyaoDAqrIyKr8/qrJBHX8/gS++Pj4+I37zwKw/VAEMY3+iunpAAEAFAAABEQGFAAeAFlAMhYUEAgIDQkAHh4SCQsEHyAXFhoERlkTCwwLR1kQDA8MHwwvDAMWGgwMGhYDCQ4AAAkVAD8zPxIXOS8vL10RMysRADMrEQAzERIBFzkRMxEzMxEzMzMxMCERNCYjIgYVESMRIzUzNTMVIRUhFRQHMzY2MzIWFREDnnqCrp6mnJymAcH+PwgKMbV0yckCnoaEutX95wTbf7q6f8RUOE9bv9L9XP///+IAAALKBy8CJgAsAAABBwFS/toBUgAIswEVBSYAKzX///+QAAACeAXdAiYA8wAAAQcBUv6IAAAACLMBDREmACs1//8AKgAAAoIGtAImACwAAAEHAU3+/QFSAAizAQ8FJgArNf///9oAAAIyBWICJgDzAAABBwFN/q0AAAAIswEHESYAKzX//wAeAAACigc3AiYALAAAAQcBTv75AVIACLMBDAUmACs1////zAAAAjgF5QImAPMAAAEHAU7+pwAAAAizAQQRJgArNf//AFT+QgJWBbYCJgAsAAAABgFRaAD//wA1/kIBgQXfAiYATAAAAAYBURAA//8AVAAAAlYHMQImACwAAAEHAU8AUAFSAAizARUFJgArNQABALAAAAFWBEgAAwAWQAkAAQEFBAIPARUAPz8REgE5ETMxMCEjETMBVqamBEj//wBU/n8EEAW2ACYALAAAAAcALQKoAAD//wCi/hQDbAXfACYATAAAAAcATQIGAAD///9g/n8CZQdzAiYALQAAAQcBS/63AVIACLMBHAUmACs1////kf4UAk8GIQImAjcAAAEHAUv+oQAAAAizARsRJgArNf//AMn+OwTpBbYCJgAuAAAABwI5AIkAAP//ALD+OwQdBhQCJgBOAAAABgI5KwAAAQCwAAAEGwRGAA0AL0AZDQsHBwgDAQIFCAUODwINBQYECAAJDwQIFQA/Mz8zEhc5ERIBFzkRMxEzMzEwATMBASMBBxEjETMRFAcDL8/+YgG7yf6Xh7KyDARG/h79nAH4cf55BEb+5aZx//8AyQAAA/gHcwImAC8AAAEHAHb/YwFSAAizAQ8FJgArNf//AKMAAAIsB6wCJgBPAAABBwB2/xoBiwAIswENAiYAKzX//wDJ/jsD+AW2AiYALwAAAAYCOTEA//8AWf47AVcGFAImAE8AAAAHAjn+6AAA//8AyQAAA/gFtwImAC8AAAEHAjgBHf+jAAeyAQkDAD81AP//ALAAAAKgBhQCJgBPAAABBgI4KwAAB7IBBwAAPzUA//8AyQAAA/gFtgImAC8AAAAHAU8CBP1n//8AsAAAAqgGFAAmAE8AAAAHAU8BQv04AAEAHQAAA/gFtgANAD1AIQcLCwQADAkAAwQPDgkHBAoDAQYIAggCCAAFAwALSVkAEgA/KwAYPxI5OS8vEhc5ERIBFzkRMzMRMzEwMxEHJzcRMxElFwURIRXJaUOsqgEpQ/6UAoUB/DtyZQMe/UauedP+PJoAAf/8AAACJwYUAAsAN0AcAAQECQUFDAINCAwAAgkDCAYGAQcBBwEFCgAFFQA/PxI5OS8vEhc5EQEzETMSOREzMxEzMTABNxcHESMRByc3ETMBVolI0aZuRrSmA2BecI39PwJUSHF3AyAA//8AyQAABT8HcwImADEAAAEHAHYBAgFSAAizARoFJgArNf//ALAAAAREBiECJgBRAAABBgB2eQAACLMBHhEmACs1//8Ayf47BT8FtgImADEAAAAHAjkAzQAA//8AsP47BEQEXAImAFEAAAAGAjlWAP//AMkAAAU/B3MCJgAxAAABBwFMAKYBUgAIswEcBSYAKzX//wCwAAAERAYhAiYAUQAAAQYBTB8AAAizASARJgArNf//AAEAAATLBbYAJwBRAIcAAAEGAgfoAAAHsgEcAwA/NQAAAQDJ/n8FPwW2ABkAOEAcEA0NDggUFBcXAg4DGhsSCg4VDwMOEgAFSVkAIgA/KwAYPz8zEjk5ERIBFzkRMxEzETMRMzEwASInNRYzMjY1ASMSFREjETMBMyY1ETMRFAYDyWI2R1NpavzACBCdwAMdCA6fwf5/G5EUem8Ey/74nvzbBbb7TpXgAz36WMPMAAEAsP4UBEQEXAAdADhAHhMPDxAHGxsCEAMeHxcLRlkXEBMQEQ8QFQAFRlkAGwA/KwAYPz8SOT8rERIBFzkRMxEzETMxMAEiJzUWMzI1ETQmIyIGFREjETMXMzY2MzIWFREUBgMlVjc8Pox6gqygpocbCjS0bsvHjP4UGYcUrAN5hoS61v3BBEiWUli/0vyNmqr//wB9/+wFvga0AiYAMgAAAQcBTQDHAVIACLMCGwUmACs1//8Ac//sBGIFYgImAFIAAAEGAU0SAAAIswIcESYAKzX//wB9/+wFvgc3AiYAMgAAAQcBTgDBAVIACLMCGAUmACs1//8Ac//sBGIF5QImAFIAAAEGAU4OAAAIswIZESYAKzX//wB9/+wFvgdzAiYAMgAAAQcBUwEUAVIACrQDAisFJgArNTX//wBz/+wEYgYhAiYAUgAAAQYBU1oAAAq0AwIsESYAKzU1AAIAff/sBucFzQAUAB8AU0AuGAYPExMdAA0RHQYFICEPEklZDw8ACwsOSVkLAwkVSVkJBAMbSVkDEgATSVkAEgA/KwAYPysAGD8rABg/KxESADkYLysREgEXOREzETMRMzEwISEGIyAAERAAITIXIRUhESEVIREhASIAERAAMzI3ESYG5/0AZlz+uf6fAVwBQGZaAw79swIn/dkCTfxE+f7/AQH3cFdXFAGJAWoBaAGGF5f+KZb95gSd/s/+2f7X/s0hBHUeAAMAcf/sBx8EWgAeACoAMQBVQC0fCA4CFhYlLxUVHCUIBDIzKygLKEZZLhZGWQIFDgsuLgURCxAYIgUiRlkABRYAPzMrEQAzGD8zEjkvEjkSOSsrEQAzERIBFzkRMxEzEjk5ETMxMAUgJwYGIyIAERAAMzIWFzY2MzISFRUhEiEyNjcVBgYBFBYzMjY1NCYjIgYlIgYHITQmBZb+230+0Ynf/vQBBuuDzT46wH7J7v0nCAFKXqFXWJj7IZino5mbpaaVBEd/kQwCIIQU63R3ATEBCAEJASx3cnB5/vfiaf53IyeUJyACOdPb1dHd1djYpJ6epP//AMkAAATPB3MCJgA1AAABBwB2AHkBUgAIswIfBSYAKzX//wCwAAADJwYhAiYAVQAAAQYAdtwAAAizARoRJgArNf//AMn+OwTPBbYCJgA1AAAABgI5fQD//wBg/jsDJwRcAiYAVQAAAAcCOf7vAAD//wDJAAAEzwdzAiYANQAAAQcBTAAbAVIACLMCIQUmACs1//8AggAAAycGIQImAFUAAAEHAUz/dgAAAAizARwRJgArNf//AGr/7AQCB3MCJgA2AAABBwB2AFABUgAIswEuBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYAduoAAAizAS4RJgArNf//AGr/7AQCB3MCJgA2AAABBwFL/+oBUgAIswEzBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYBS5cAAAizATMRJgArNf//AGr+FAQCBcsCJgA2AAAABwB6AScAAP//AGr+FANzBFwCJgBWAAAABwB6ANUAAP//AGr/7AQCB3MCJgA2AAABBwFM/+QBUgAIswEwBSYAKzX//wBq/+wDcwYhAiYAVgAAAQYBTJkAAAizATARJgArNf//ABL+OwRaBbYCJgA3AAAABgI5GQD//wAf/jsCqAVGAiYAVwAAAAYCOYIA//8AEgAABFoHcwImADcAAAEHAUz/3AFSAAizARMFJgArNf//AB//7ALXBhQCJgBXAAABBgI4YgAAB7IBGgAAPzUAAAEAEgAABFoFtgAPAD9AIQcLCwAMBAkMDgIFEBEKDg8OSlkHDw8DDBIGAgMCSVkDAwA/KxEAMxg/EjkvMysRADMREgEXOREzMxEzMTABESE1IRUhESEVIREjESE1AeH+MQRI/jEBNv7Kqv7HAy8B8JeX/hCN/V4Coo0AAQAf/+wCqAVGABwATEApFxMbGwwIAhUZCAoOBh0eDhYTFkdZGgoLCkdZFwsLBhFAEw8GAEZZBhYAPysAGD8azRI5LzMrEQAzKxEAMxESARc5ETMzETMzMTAlMjcVBgYjIBE1IzUzESM1NzczFSEVIREhFSEVFAIXVTwgair+yI2NnZ1GYAE+/sIBLf7TdRR/DhABXP6BAQBQRer+gf8AgfTdAP//ALr/7AUZBy8CJgA4AAABBwFSAG8BUgAIswEbBSYAKzX//wCk/+wEOQXdAiYAWAAAAQYBUvcAAAizAR4RJgArNf//ALr/7AUZBrQCJgA4AAABBwFNAJEBUgAIswEVBSYAKzX//wCk/+wEOQViAiYAWAAAAQYBTRkAAAizARgRJgArNf//ALr/7AUZBzcCJgA4AAABBwFOAIsBUgAIswESBSYAKzX//wCk/+wEOQXlAiYAWAAAAQYBThIAAAizARURJgArNf//ALr/7AUZB9cCJgA4AAABBwFQAJwBUgAKtAIBFQUmACs1Nf//AKT/7AQ5BoUCJgBYAAABBgFQIwAACrQCARgRJgArNTX//wC6/+wFGQdzAiYAOAAAAQcBUwDhAVIACrQCASUFJgArNTX//wCk/+wEOQYhAiYAWAAAAQYBU2gAAAq0AgEoESYAKzU1//8Auv5CBRkFtgImADgAAAAHAVECIQAA//8ApP5CBGUESAImAFgAAAAHAVEC9AAA//8AGwAAB0wHcwImADoAAAEHAUsBVAFSAAizASgFJgArNf//ABcAAAYjBiECJgBaAAABBwFLAMEAAAAIswErESYAKzX//wAAAAAEewdzAiYAPAAAAQcBS//gAVIACLMBFwUmACs1//8AAv4UBAYGIQImAFwAAAEGAUutAAAIswEkESYAKzX//wAAAAAEewclAiYAPAAAAQcAav/xAVIACrQCAR4FJgArNTX//wBSAAAEPwdzAiYAPQAAAQcAdgBCAVIACLMBEwUmACs1//8AUgAAA20GIQImAF0AAAEGAHboAAAIswETESYAKzX//wBSAAAEPwcxAiYAPQAAAQcBTwFEAVIACLMBEwUmACs1//8AUgAAA20F3wImAF0AAAEHAU8A3wAAAAizARMRJgArNf//AFIAAAQ/B3MCJgA9AAABBwFM/+0BUgAIswEVBSYAKzX//wBSAAADbQYhAiYAXQAAAQYBTIYAAAizARURJgArNQABALAAAALbBh8ADAAdQA4AAQENBg4ECUZZBAABFQA/PysRATMSOREzMTAhIxEQITIXByYjIgYVAVamAWdgZCtXSWFZBJwBgyWFHnt6AAABAMP+FAQXBcsAIABEQCQaHh4MCBIcCAoCBSEiHQoMCkZZGgwMEAAQFkZZEAQABUZZABsAPysAGD8rERIAORgvMysRADMREgEXOREzMxEzMTABIic1FjMyNjURIzU3NTQ2MzIXBwcmIyIGFRUhFSERFAYBSEVARj1fTd7eorZVeBYVZjxiUAEa/uqe/hQTixJmcQPNSzyLw7IrQEEgaXyVgfw3uK8ABAAAAAAFFAeqABAAGAAiAC4AYUA0EQUEGAYUBwQDBwgjACkLCAsJIhQCAB0DCTAvJg4sAgkYBklZCRQOGCIOGBgOIgMIHAQIEgA/My8SFzkvLy8REjk5KxEAMzMRMxESARc5ETMRMxEzETMREjk5ETk5MTABFAcBIwMhAyMBJjU0NjMyFhMDJicGBgcDEzY2NzMVBgYHIxM0JiMiBhUUFjMyNgNoaAIUrrD9nqauAhRqemNkfRuyGS8OMAmxmDFmF8sgqEJv00IzM0I8OTVABZaFOPsnAZH+bwTXNIhlcnX8NgGwOpEwhxj+VASFO5UqEC6hLf71OTw8OTc9PQAFAF7/7APNB6oACQAkAC8AOwBHAGdANy0SQjY8MCkVFQskJAYwADYdEgdISQkJBD85RTMRCwwVKUdZDBUVDyAgGUZZIBAPJUZZDxYKFQQALz8/KwAYPysREgA5GC85KxEAMxg/M8QyETkvERIBFzkRMzMRMxEzETMRMzEwATU2NjchFQYGBwEnIwYGIyImNRAlNzU0JiMiBgcnNjYzMhYVESUyNjU1BwYGFRQWARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AdcuahYBBBWkgAECIQhSo3qjuQIZtHeFYKdHN1TQZdHJ/g6bsabGr20BqntmZXl5ZWV8bUEzM0I8OTRABtkQKngfDBhpRPknnGdJqJsBTBAGRIJ6NCB/KzOuwP0UdaqZYwcHbXNaXgU9Ynd0Y2Jzd144PT04OD09AP////4AAAaBB3MCJgCIAAABBwB2AkwBUgAIswIdBSYAKzX//wBe/+wGcwYhAiYAqAAAAQcAdgGFAAAACLMDRREmACs1//8Aff/DBb4HcwImAJoAAAEHAHYBGQFSAAizAy0FJgArNf//AHP/vARiBiECJgC6AAABBgB2VgAACLMDLREmACs1//8Aav47BAIFywImADYAAAAGAjkGAP//AGr+OwNzBFwCJgBWAAAABgI5uQAAAQEMBNkDrgYhAA4AGEAJBwAQDwsEgA4JAC8zGs0yERIBOTkxMAE2NjczFhYXFSMmJwYHIwEMf2YXphZtfXdYhYhTcwTwiIApKoWCFzeDhjQAAAEBDATZA64GIQAOABhACQYAEA8FAYADCwAvMxrNMhESATk5MTABMxYXNjczFQcGByMmJicBDHNyaYJbd0KQLqYXZn8GIUpzgjsZRJRXKX6IAAABAS0E2QOFBWIAAwARtQABBAUAAwAvMxESATk5MTABIRUhAS0CWP2oBWKJAAEBJQTZA5EF5QAOABhACQwDEA8LBIAIAAAvMhrMMhESATk5MTABIiYnMx4CMzI2NzMGBgJWjJwJaAYpSVVlYApoCqcE2YmDMTgaQEN+jgAAAQCiBQIBZgXfAAsAE7YGAAAMDQMJAC/NERIBOREzMTATNDYzMhYVFAYjIiaiOCooOjooKjgFcTk1Njg4NzcAAAIBbwTZAy0GhQALABcAHkAMEgYMAAYAGBkPCRUDAC8zzDIREgE5OREzETMxMAEUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgMte2ZleHlkZXxsQjMzQjw5NEEFsmJ3dWJic3deOD09ODg9PQABACX+QgFxAAAADwAYQAoACQQNCQMQEQIHAC8zERIBFzkRMzEwFxQzMjcVBiMiNTQ2NzMGBrJeKjdBPM9WSHhERe5eDW0SvEaHNUJtAAABAQgE2QPwBd0AFwAkQA8JFRgZEQAFDAAMAAwVgAkALxrMOTkvLxEzETMREgE5OTEwASIuAiMiBgcjNjYzMh4CMzI2NzMGBgMUK1JPSSIyMw5iDXNbLlZOSCAxMA9jDXEE2yUtJTw9eYklLSU7PnmJAAACAOcE2QO2BiEACQATABtADA4FEwkEFBUNBIATCQAvMxrNMhESARc5MTATNjY3MxUGBgcjJTY2NzMVBgYHI+ckbh+6Jas6YQFlMWUauiWrOmAE8jC6RRU/xDAZRLE6FT/EMAAAAQH8BNkDEAZzAAkAE7YEAAsKBIAJAC8azRESATk5MTABNjY3MxUGBgcjAfwbNQy4Em0xZAT2SONSF0rtTAADARsFDgODBrQACAAUACAAK0AUDwkVGxsDCAkEISIYDAgMCAwDHhIALzPMOTkvLxEzERIBFzkRMxEzMTABNjczFQYGByMnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAEEfvSF5M1DlNCYpMTcjJjQBtDQmKTE3IyY0BYWphhRDsz0ENC40LjIxMTI0LjQuMjEx//8AAAAABRAGCgImACQAAAEHAVT+IP+XAAeyAhIAAD81AP//AJgCTAGJA1oCBgB5AAD////UAAAEdQYKACYAKH0AAQcBVP3Y/5cAB7IBEAAAPzUA////1AAABbUGCgAnACsAlgAAAQcBVP3Y/5cAB7IBEAAAPzUA////5AAAA0QGCgAnACwA7gAAAQcBVP3o/5cAB7IBEAAAPzUA////5P/sBgIGCgAmADJEAAEHAVT96P+XAAeyAhwAAD81AP///9QAAAWFBgoAJwA8AQoAAAEHAVT92P+XAAeyAQ0AAD81AP///+QAAAYzBgoAJgF2PwABBwFU/ej/lwAHsgEjAAA/NQD////p/+wCkwa0AiYBhgAAAQcBVf7OAAAADLUDAgEuESYAKzU1Nf//AAAAAAUQBbwCBgAkAAD//wDJAAAEvgW2AgYAJQAAAAEAyQAAA/gFtgAFAB1ADgMEBAAGBwUCSVkFAwQSAD8/KxESATk5ETMxMAEVIREjEQP4/XuqBbaZ+uMFtgD//wAnAAAEbQW2AgYCKAAA//8AyQAAA/gFtgIGACgAAP//AFIAAAQ/BbYCBgA9AAD//wDJAAAFHwW2AgYAKwAAAAMAff/sBb4FzQADAA8AGwA/QCACAxAWEAoWBAoEHB0AA0lZAAAHDQ0ZSVkNBAcTSVkHEwA/KwAYPysREgA5GC8rERIBOTkRMxEzERI5OTEwASEVISUQACEgABEQACEgAAEQEjMyEhEQAiMiAgHjAnX9iwPb/p3+xP69/qEBYAFEATsBYvtz+vTz+Pfy9fsDM5U//qH+bgGLAWgBZQGJ/nD+oP7Y/swBMAEsASoBLv7OAP//AFQAAAJWBbYCBgAsAAD//wDJAAAE6QW2AgYALgAAAAEAAAAABNMFtgAKABpACwgADAsECAkDAQgSAD8zPxI5ERIBOTkxMCEjASYnBgcBIwEzBNO2/rZXFiFH/ri2AhCxA6D8WovJ/F4Ftv//AMkAAAZxBbYCBgAwAAD//wDJAAAFPwW2AgYAMQAAAAMASAAABCUFtgADAAcACwA0QB0KBwMCBggGDQwAA0lZAAAKBAoLSVkKEgQHSVkEAwA/KwAYPysREgA5GC8rERIBFzkxMBMhFSEDIRUhARUhNcMC5/0ZUgOL/HUDtPwjA0iWAwSX+3mYmP//AH3/7AW+Bc0CBgAyAAAAAQDJAAAFDAW2AAcAI0ARAQAEBQAFCQgGA0lZBgMBBRIAPzM/KxESATk5ETMRMzEwISMRIREjESEFDKr9EaoEQwUf+uEFtgD//wDJAAAEaAW2AgYAMwAAAAEASgAABFwFtgAMADVAHAgKCgAJAgsGAwIABQ0OBwgECElZBAMACklZABIAPysAGD8rEQAzERIBFzkRMxEzETMxMDM1AQE1IRUhJwEBIRVKAeH+KwPL/VxgAcz+HwNUjQJvAiuPmQL93/2amAD//wASAAAEWgW2AgYANwAA//8AAAAABHsFtgIGADwAAAADAGr/7AX4BcsAGQAiACsAUEApJxQaAg0NKxkOHgcHDhQDLC0MEBoqECpKWSIkGCRKWQIYEBgQGA4TAAQAPz85OS8vETMrEQAzKxEAMxEzERIBFzkRMxEzMzMRMzMRMzEwATMVMzIWFhUUAgQjIxUjNSMiJAI1NDY2MzMTMzI2NTQmKwMiBhUUFjMzAtusRqv7hZX+/bAprC2w/v6Sh/yrQ6wZyd/OuTqsObbR3soYBcu0iPifpv79guHhhAEEoZ74i/xF28O50tS3xdkA//8ACAAABJYFtgIGADsAAAABAG0AAAXyBbYAHQA+QB8KBxEAAA4BFRgYAQcDHh8dAw0DSVkRDQ0BFg8IAwESAD8/MzMSOS8zKxEAMxESARc5ETMRMzMRMxEzMTAhIxEjIiYmNREzERQWMzMRMxEzMjY1ETMRFAYEIyMDg6otsP+Qrs/UG6od08+wkP79ry0Bvnr3pAHj/iG8yQNk/JzGuwHj/h+l93sAAAEAUAAABfQFzQAfADlAIAMNHRMYExYZBwoNCAggIRAASVkQBBoWBgkICUlZGQgSAD8zKxEAMzMzGD8rERIBFzkRMxEzMTABIgIVFBIXFSE1ISYCNRAAISAAERQCByEVITU2EjU0AgMh7vqttP22AWyXoAFiAToBOwFinpcBa/22t6n5BTX+//3h/rOEhZh2AV7LATYBYP6l/sfP/qZ4mIWGAU7e/AEC//8APAAAAm8HJQImACwAAAEHAGr/BwFSAAq0AgEhBSYAKzU1//8AAAAABHsHJQImADwAAAEHAGr/7wFSAAq0AgEeBSYAKzU1//8Ac//sBMcGcwImAX4AAAEGAVQdAAAIswI0ESYAKzX//wBa/+wDhwZzAiYBggAAAQYBVMgAAAizAS8RJgArNf//ALD+FAREBnMCJgGEAAABBgFUOwAACLMBHhEmACs1//8AqP/sApMGcwImAYYAAAEHAVT+xAAAAAizARkRJgArNf//AKT/7ARxBrQCJgGSAAABBgFVOwAADLUDAgE0ESYAKzU1NQACAHP/7ATHBFwACwAqAEdAJAkPJxUEBB0iHQ8DKywYDycoKBYMEhIHRlkSEB8ADABGWSQMFgA/MysRADMYPysREgA5OREzGD8REgEXOREzETMzETMxMCUyNjU1NCYjIBEUFhciAhEQEjMyFhczNjczBgYVERQzMjcVBiMiJicjBgYCUKmWmKn+0ZOF1u704XmhNgwYKYEVHFQdIS5BUVkSDTund8PaD+XH/lDU1IsBKQEMARIBKVRUXDhC9nT+SXIKdxpRVlZRAAIAsP4UBKgGHwATACkATEAoGA8PECcDHggIAwUiEAUqKxAbIyJGWQ4jDiMLAAsbRlkLFgAURlkAAAA/KwAYPysREgA5ORgvLysAGD8REgEXOREzETMRMxEzMTABMhYVEAUVBBEUBCMiJicRIxE0NhciBhURFhYzMjY1NCYjIzUzMjY1NCYCk9z5/scBef747m2gT6b95J6dXaFWq62+sXBcm6KcBh/Qt/7aMwgq/pHR4R8m/eMGNOH2jKyl/IkxJZadnaSOk4l7hQABAAr+FAQOBEgAEgAhQBAPBAEFBBMUCgkJAQ4FDwEbAD8/MxI5LzMREgEXOTEwASM0EjcBMxMWFzM+AhMzAQYCAhS0QCv+P6zwXhMIBSkr6qz+azA1/hRgASZyBDz9uOtnHo6BAm3703z+3AACAHH/7ARgBhIAHgAqADtAICUcEAMfFhYJAAMcBSssEAAiAxkGGShGWRkWBg1GWQYAAD8rABg/KxESABc5ERIBFzkRMxEzETMxMAEmJjU0NjMyFhcHJiYjIgYVFBYXFhYVFAAjIiQ1NBIBNCYnBgYVFBYzMjYCIYx0wqRnvX5IcJ9RVWFrp9Kx/vDs4/7w4gJhe43Ov7KToq4DqE6fY4KYLT+HPixPQkdvW3PxpOv++PjSsQEF/nOAt0o12aCQq7oAAAEAWv/sA4cEXAAlAE1AKwQQIxcdCwETFxAGJicUJQIlAkZZDyUfJQILAyUlDRoaIUZZGhANB0ZZDRYAPysAGD8rERIAORgvX15dKxESADkREgEXOREzETMxMAEVIyAVFBYzMjY3FQYjIiY1NDY3NSYmNTQ2MzIWFwcmJiMiFRQhAsuU/smTklSmZInd0vFugmJr4MBhpWQ/XoJP+gE9AoGNw1piJy+US6mUYoMpCxx/XIWeIS2FKhyirAAAAQBz/m8DoAYUACAAMEAYBxkeExMODgMAGQQhIhEjHgMAAQBGWQEAAD8rEQAzMxg/ERIBFzkRMxEzETMxMBM1IRUGAAIVFBYWFxYWFRQHIzY1NCYnJiY1ND4CNwYhsALw1/7gijt9rJWIf6Z9b4/LvDtwyfIo/vEFh42BtP69/t+mYnZJJR9tW5WkoWs4PRok28Jy0MPl2ggAAAEAsP4UBEQEXAAUAC9AGAAUDAgICRQJFhUQBEZZEBAMCQoPCRUAGwA/Pz8SOT8rERIBOTkRMxEzETMxMAERNCYjIgYVESMRMxczNjYzMhYVEQOeeoKsoKaHGwgzuHHGyP4UBLGGhLrW/cEESJZRWb/S+0kAAwBz/+wESgYrAAsAEgAZAElAJxYQEAYXDw8ABgAaGxYQRlkPFr8WAgsDFhYDCQkTRlkJAQMMRlkDFgA/KwAYPysREgA5GC9fXl0rERIBOTkRMxEzETMRMzEwARACIyICERASMzISATISEyESEhMiAgMhAgIESvT68Pn19PT6/hKknAb9eQSWp6GWCgKFC5gDDP5q/nYBkwGNAZcBiP5r++EBMQEz/tD+zAUp/uH+5wEZAR8AAQCo/+wCkwRIAA8AH0AOAQ4HDhEQDw8LBEZZCxYAPysAGD8REgE5OREzMTABERQWMzI2NxUGBiMiJjURAU5JVyVlGx9pMqCRBEj8+mhlDQd/DRGoqQML//8AsAAABBsERgIGAPoAAAAB//L/7ARGBiEAIgAzQBsIARUDJAAAIxgTRlkYFh4fHwALCwZGWQsBABUAPz8rERIAOREzGD8rEQEzERIXOTEwIwEnLgIjIgc1NjMyFhYXARYWMzI3FQYjIiYnAyYnIwYHAw4B2ToeMkMxOjlEP1t5WDYBaxMqIxshMD1KUx2cVBYJHFj+BDeiVUYkDYURPIKY/AwxMwp5GExTAbTwYHTR/bYA//8AsP4UBEQESAIGAHcAAAABAAAAAAQCBEgADgAcQAwJCgoAEA8FDhUJAA8APzI/ORESATk5ETMxMBEzExYWFzM2EhEzEAIHI6zbGlMQCLGfps/hugRI/bJD7j6vAb0BUf6V/gThAAEAcf5vA6AGFAAxAElAJwQZLR8dHBMMDCgAHB8lGQcyMxwwATABR1kwMBAmKSUmJUZZJgAQIwA/PysRADMREjkYLysREgA5ERIBFzkRMxEzETMRMzEwASMiBhUUHgIXFhYVFAYHIzY2NTQmJyYmNTQ2NzUmNTQ2NwYjIzUhFSMiBgYVFBYzMwNWsrDVMl+HVI6HNkOcNUJzj8jHnoDZi6aAc0QCujOC4H+nr6oC8rKOUGI9JBIdblpBlWNHkzQ3PRkiyLCM0icMQNl1njIMjYNQkF9zbP//AHP/7ARiBFwCBgBSAAAAAQAZ/+wE9ARIABUANkAdCgsHExADEwsNBRYXEgkNDw1GWQ8PCxUFAEZZBRYAPysAGD8/KxEAMzMREgEXOREzETMxMCUyNxUGIyI1ESERIxEjNTchFSMRFBYEfSYwK1Tb/iOm3Y8ETNUzdRKDGP0C0fxGA7pKRI79PEo3AAIApv4UBGIEXAAQABwANkAbFQkJChoACgAdHgYDDg4RRlkOEAobAxdGWQMWAD8rABg/PysREgA5ERIBOTkRMxEzETMxMAEQACMiJyMWFREjERASMzISJSIGFREWMzI2NTQmBGL/AOmzeAgIqPvq2/z+IZ6XerefmJACJf7x/tZePdT+2wQfAQoBH/7Ros/R/q5m0N7W1AAAAQBz/m8DogRcACAALkAXDgcAFRUHGwMiIQQSEhgLGB5GWRgQCyMAPz8rERIAOREzERIBFzkRMxEzMTABFBYWFxYWFRQGByM2NjU0JiYnJiY1EAAzMhYXByYjIgYBHzuPoJSDNkOcNkMzbmHMwwEU+E+eNjWCcrCqAgqHhFAiIGtaQphfRpQyKC8mEiX+2wEeATYhGI0z2gACAHP/7AS2BEgADQAZADBAGRQADgcHDAALBBsaDBcJF0ZZCQ8EEUZZBBYAPysAGD8rEQAzERIBFzkRMxEzMTABFAYGIyIANRAhIRUhFgEUFjMyNjUQJyMiBgRge+Wa6/74AlAB8/74svy/qqGfq65B3sgB/J3xggEg/gI+jqf+98LRxbYBDrrQAAABABL/5wOTBEgAEwAsQBcDDwAJDxEEFBUCERMRRlkTDwwFRlkMFgA/KwAYPysRADMREgEXOREzMTABFSERFDMyNjcVBgYjIiY1ESE1NwOT/lDNL2IbI28wtar+15QESI79lt8NB30PEqqqAn9KRAAAAQCk/+wEcQRIABUAJUARDBMGAxMDFxYPBA8ACUZZABYAPysAGD8zERIBOTkRMxEzMTAFIiYRETMRFBYzMjY1NCYnMxYWFRAAAnPn6KaemaehHCKmJBz+/hT6AQoCWP2wwMPu+4LgiJDWjP7C/tQAAAIAc/4UBUwEXAAYACIAQUAjCgQgGBgMABkTEwAHBAQjJBAcRlkQEAYPIAwBDEZZFwEWABsAPz8zKxEAMxg/PysREgEXOREzETMzETMRMzEwAREkABEQNxcGBhUQBRE0NjMyEhUUAgYHEQE0JiMiBhURNjYCg/78/vTPg1lRAWimlbTaiPilAXl8ZklOs8b+FAHaCwEjAQ8BKP1adeB8/nUjAmy7vv7b+rL++5AI/iYEJ7nbeHL9khDsAAH/7P4UBFAETgAgADlAIQ4HCAUVGB4HIhchBRgIFQQGFxsRDEZZERsGDwAcRlkADwA/KwAYPz8rABg/Ehc5EQEzEhc5MTATMhYWFxMBMwETFhYzMjcVBiMiJicDASMBAyYmIyIHNTayNk4+LJEBPrT+VL4wUj8tLTw7c407lv6WsgHQrCZGKyUbMQROK1tw/o8CYfz8/hx6SgiBD3afAYP9aANEAbxjUAuBEQABAKT+FAWHBhIAGgA9QB8WEwEODhkPBAoKDxMDGxwaAAcUDwEZEBlGWQ0QFg8bAD8/MysRADMYPzM/ERIBFzkRMxEzMxEzETMxMAERNjY1NCYnMxIVEAAFESMRJAARETMRFBYXEQNavMsaJaY//uP+8KT++P72prS4BhL6aQ/nzHjrqP7w9P7s/s4Q/iYB2gkBIgEQAh/928PaDQWZAAEAc//sBbwESAAnAD1AHgoDJhMTEBkgIBADAygpJhERABwGDxYNAA1GWSMAFgA/MisRADMYPzMSOS85ERIBFzkRMxEzEjkRMzEwBSICNTQSNzMGBhUUFjMyNjURMxEUFjMyNjU0AiczFhIVFAIjIicjBgH0tss3RKxEOXhrXmmhal1reDdFrEE5y7bcRAlBFAEo/pwBAZmc/53B2I99ATf+yYCM2MGXAQSdkv75nfz+1ra2//8ACf/sApMF0wImAYYAAAEHAGr+1AAAAAq0AgElESYAKzU1//8ApP/sBHEF0wImAZIAAAEGAGo5AAAKtAIBKxEmACs1Nf//AHP/7ARiBnMCJgBSAAABBgFUIQAACLMCIhEmACs1//8ApP/sBHEGcwImAZIAAAEGAVQnAAAIswEfESYAKzX//wBz/+wFvAZzAiYBlgAAAQcBVADJAAAACLMBMREmACs1//8AyQAAA/gHJQImACgAAAEHAGoAJwFSAAq0AgEhBSYAKzU1AAEAEv/sBUIFtgAdAEZAJhYODg8IGxsUAg8RBR4fFg1JWRYWDxIVERIRSVkSAw8SAAVJWQATAD8rABg/PysRADMREjkYLysREgEXOREzETMRMzEwBSInNRYzMjY1NTQmIyERIxEhNSEVIREhMhYVFRQGA89gNjdbZWiDjP6Dqv6wA7f+QwGMzd3EFBaWE3xwg4Bx/RsFH5eX/l6/so++0///AMkAAAP4B3MCJgFhAAABBwB2AFoBUgAIswEPBSYAKzUAAQB9/+wE4wXNABgAOEAeBgMRFgwFEQQZGgMGSVkDAw4UFABJWRQEDglJWQ4TAD8rABg/KxESADkYLysREgEXOREzMzEwASIEByEVIRIAMzI3FQYjIAAREAAhMhcHJgNC4v7zHgLT/SkKAQv5osmh4v60/qIBeQFO7bJHqQUz+vGW/u7+4zeVOQGEAW0BXwGRWJRS//8Aav/sBAIFywIGADYAAP//AFQAAAJWBbYCBgAsAAD//wA8AAACbwclAiYALAAAAQcAav8HAVIACrQCASEFJgArNTX///9g/n8BaAW2AgYALQAAAAIAAP/pByMFtgAaACMAR0AmGBsbBB8AAAQNAyQlGCNJWRgYCxYWBklZFgMLEEpZCxIEG0pZBBIAPysAGD8rABg/KxESADkYLysREgEXOREzETMRMzEwARQEISERIQICBgYjIic1FjMyPgISEyERMyABMzI2NTQmIyMHI/7t/vz+uf6TOVRQi2tFQDI/MEErN0RBAqZ6Ajr9TIXGt8DcZgGqztwFH/5I/fb7eRmPGj5n+gG+AeL9kP1Ni4yKfAACAMkAAAdUBbYAEQAaAEpAJgsHBwgPEhIMBBYAAAQIAxscGgYLBklZDwsLBA0JAwgSBBJKWQQSAD8rABg/PzMSOS8zKxEAMxESARc5ETMRMzMRMxEzETMxMAEUBCEhESERIxEzESERMxEzIAEzMjY1NCYjIwdU/vD++/63/X2qqgKDrHkCOf1OhcS5wdtmAarO3AKw/VAFtv2SAm79kP1Ni4yJfQAAAQASAAAFQgW2ABMAOkAfAAwMDQYFBRINDwQUFRMPEA9JWQALSVkAAA0QAwYNEgA/Mz8SOS8rKxEAMxESARc5ETMRMxEzMTABITIWFREjETQmIyERIxEhNSEVIQIMAZDN2ap9jP59qv6wA/b+BAN9vLX99AH2fnH9GwUfl5f//wDJAAAE5QdzAiYBtAAAAQcAdgCiAVIACLMBFAUmACs1//8AG//sBPgHXgImAb0AAAEHAjYARAFSAAizARcFJgArNQABAMn+gwUMBbYACwAwQBgIBQIDCQAAAwUDDA0KBgMFCElZAQUSAyIAPz8zKwAYPzMREgEXOREzETMRMzEwISERIxEhETMRIREzBQz+L7D+PqoC76r+gwF9Bbb65AUcAP//AAAAAAUQBbwCBgAkAAAAAgDJAAAEfQW2AA0AFgA9QCASAAkODgQEBwADGBcJFklZCQkEBQUISVkFAwQOSlkEEgA/KwAYPysREgA5GC8rERIBFzkRMxEzETMxMAEUBCEhESEVIREzMhYWATMyNjU0JiMjBH3+/f77/lQDXv1M48HydPz2776tsNvPAara0AW2l/4nWa7+VIKVjngA//8AyQAABL4FtgIGACUAAP//AMkAAAP4BbYCBgFhAAAAAgAO/oMFSgW2AA0AEwBDQCQEBRMHEAoODAEAAAwKBwUFFBUKEElZCgMBBSITDAYDBklZAxIAPysRADMzGD8zPysREgEXOREzETMRMxEzETMxMAEjESERIxEzEhITIREzIREhBgIHBUqi/AiicZrbDAKRuf6d/rMSzon+gwF9/oMCFwEDAuYBM/rkBIPy/VnqAP//AMkAAAP4BbYCBgAoAAAAAQACAAAGvAW2ABEAPEAfBg0NAw4KCQgBDgARBxITDwwJBgMAAAEOCxESBwQBAwA/MzM/MzMSOREzMzMzMxESARc5ETMzETMxMAEBMwERMxEBMwEBIwERIxEBIwJW/cG+AjmkAjq+/cACUsT9uqT9u8cC8ALG/TwCxP08AsT9PP0OAuX9GwLl/RsAAQBK/+wENQXLACgAQ0AkHAATBwcAAxcjDAYpKgMYFxgXSlkYGAomJh9KWSYEChBKWQoTAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzMTABFAYHFRYWFRQEISInNRYWMzI2NTQmIyM1MzI2NTQmIyIGByc2NjMyFgQZt6G3vf7O/un/o2DfZ8bL4d/a0c3hoolusnVUZfuH4f8EYJC0GAgZtJHN5U+eLjKWjYaKj5OEa4AySnJLTcUAAQDLAAAFUgW2AA8ANEAYDgICDwYJCQgPCBARBQQMDQQNCQ8SBgADAD8yPzM5OREzETMREgE5OREzETMRMxEzMTATMxEUBzMBMxEjETQ3IwEjy58OCAM0uqARCfzLugW2/NPhtgTE+koDJcnd+zUA//8AywAABVIHXgImAbIAAAEHAjYA4QFSAAizARAFJgArNQABAMkAAATlBbYACgAtQBYHAwMEAAkKBAQLDAoHAgcECAUDAQQSAD8zPzMSOTkRMxESARc5ETMRMzEwISMBESMRMxEBMwEE5c79XKqqApPD/XkC5f0bBbb9PALE/ToAAQAA/+cE2QW2ABMALUAYAxIBAAASCgMUFRIDSVkSAwgNSlkIEwESAD8/KwAYPysREgEXOREzETMxMCEjESEHAgIGJyInNRYzMjY2EhMhBNmq/iUfPV2Yfko7Njs1Tz1dOAMSBR/w/iH+Ra4CGY8aV9cCWQG4//8AyQAABnEFtgIGADAAAP//AMkAAAUfBbYCBgArAAD//wB9/+wFvgXNAgYAMgAA//8AyQAABQwFtgIGAW4AAP//AMkAAARoBbYCBgAzAAD//wB9/+wEzwXLAgYAJgAA//8AEgAABFoFtgIGADcAAAABABv/7AT4BbYAFgAqQBUSCAIJBBcYDg0IDQARCQMABUlZABMAPysAGD8zEjk5ETMREgEXOTEwBSInNRYzMjY3ATMBFhczNjcBMwEOAgElb1RdYG6FQv3HvAGwGQ4IHAsBZ7T+LVSHqRQepitliwRB/MExL1QWAzX76ruqT///AGr/7AX4BcsCBgFzAAD//wAIAAAElgW2AgYAOwAAAAEAyf6DBbgFtgALADJAGQgFCQADAgIABQMMDQoGAwAIBQhJWQUSAyIAPz8rEQAzGD8zERIBFzkRMxEzETMxMCUzESMRIREzESERMwUMrKH7sqoC76qa/ekBfQW2+uQFHAAAAQCqAAAExwW2ABMALUAWCwgRAQEACAAUFQUOSVkFBQESCQMBEgA/PzMSOS8rERIBOTkRMxEzETMxMCEjEQYGIyImNREzERQWMzI2NxEzBMeqlcZqz9+qf49hsamqAlw1J76zAkX9z3l0HTcCygABAMkAAAd5BbYACwAxQBgEAQgFCQAABQEDDA0KBgIDCAQBBElZARIAPysRADMYPzMzERIBFzkRMxEzETMxMCEhETMRIREzESERMwd5+VCqAliqAlisBbb65AUc+uQFHAABAMn+gwgEBbYADwA7QB4DAAcECAsODQ0LBAAEEBEOIgkFAQMLBwMAA0lZABIAPysRADMzGD8zMz8REgEXOREzETMRMxEzMTAzETMRIREzESERMxEzESMRyaoCR6wCSKqsogW2+uQFHPrkBRz65P3pAX0AAAIAEgAABRcFtgAMABUAPUAgCQ0NBBEAAAQGAxYXCRVJWQkJBAcHBklZBwMEDUpZBBIAPysAGD8rERIAORgvKxESARc5ETMRMxEzMTABFAQjIREhNSERMyAEATMyNjU0JiMjBRf+/fn+R/6wAfr0AQUBEvz1/LWpr8vgAarO3AUfl/2Qzf4ai4yIfgAAAwDJAAAGCgW2AAoAEwAXAD9AIAMLCwAPBxUUFAcAAxgZFRIDE0lZAwMAFgEDAAtKWQASAD8rABg/MxI5LysAGD8REgEXOREzETMRMxEzMTAzETMRMyAEFRQEIyUzMjY1NCYjIwEjETPJqu8BBQES/v35/vb3taqzyNsEl6qqBbb9kM3PztyRjYyJe/1SBbYAAgDJAAAEugW2AAoAEgAyQBkHCwsEDgAEABMUBxJJWQcHBAUDBAtKWQQSAD8rABg/EjkvKxESATk5ETMRMxEzMTABFAQjIREzESEgBAEhIBE0JiMhBLr+8fv+GaoBIwELARn8uQErAWy7zv7yAarL3wW2/ZDT/iABF4d/AAEAPf/sBIkFywAaADpAHxgVFQkJFg8DBBscFxZJWRcXDAUMEklZDBMFAElZBQQAPysAGD8rERIAORgvKxESARc5ETMRMzEwASIHJzYzMgQSFRAAISInNRYWMyAAEyE1ISYAAdOsokis7NkBOaL+lP6q45xTrGMBDwEUCP0xAs0W/vEFM0yQVLD+ut3+iP5sOZUVIgEhARCY5QECAAIAyf/sB+cFzQASAB4AR0AmDAgICRMNBhkAAAYJAx8gEBxJWRAEDAdJWQwMCQoDCRIDFklZAxMAPysAGD8/EjkvKwAYPysREgEXOREzETMzETMRMzEwARAAISAAAyERIxEzESESACEgAAEQEjMyEhEQAiMiAgfn/qv+0P7T/qsL/p6qqgFkFwFRAR8BMwFW+6Du5+rt6+jp8ALd/p7+cQFvAVX9UAW2/ZIBNwFO/m/+of7Y/swBMgEqASoBLv7PAAIAMwAABE4FtgANABUAPUAgFQwMCxIGAgYDCwQXFgAUSlkDCQAAAgkJD0pZCQMMAhIAPzM/KxESADkYLxI5KxESARc5ETMRMxEzMTABASMBJiY1NCQhIREjEREjIgYVECEzAnv+gckBmqGSAQ8BEwGSquO3vgF73QJi/Z4CfzPPnsTT+koCYgLBfo7+3f//AF7/7APNBFoCBgBEAAAAAgB3/+wEVAYhABcAIgA7QB4aEiALAAAGEgMkIwwLDxxGWQsPDxUFFRhGWRUWBQEAPz8rERIAORgvOSsRADMREgEXOREzMxEzMTATEBI3JDcXBAcGBgczNjYzMhIVEAAjIgAFIBEQISIGBgcQEnfU5gEe2h/+pZWRkQcMPsRryuL++urn/voB/AEx/utMjXUgpgKRAWgBkzI9JpI6IiH21FRg/vro/v/+3wFi1wGFAXM/aDf++f7tAAMAsAAABEwESAAOABYAHwBJQCYcFBQLFwAPBwcAAwsEICEEHBMcE0ZZHBwLDAwbRlkMDwsURlkLFQA/KwAYPysREgA5GC8rERIAORESARc5ETMRMxEzETMxMAEUBgcVFhYVFAYjIREhIAM0JiMhESEgAzQmIyERITI2BCl7b4yB4dj+HQHhAZiDh5z+0wExAR8fe33+xwEZmn4DNWtvEwkTfm+ZpgRI/QJZUf6XAppQQ/7LTAAAAQCwAAADRARIAAUAHUAOAgMAAwcGBAFGWQQPAxUAPz8rERIBOTkRMzEwASERIxEhA0T+EqYClAO6/EYESAACACn+hQRoBEgADQATAENAJAQFEwcQCg4MAQAADAoHBQUUFQoQR1kKDwEFIhMMBgMGRlkDFQA/KxEAMzMYPzM/KxESARc5ETMRMxEzETMRMzEwASMRIREjETM2EhMhETMhESMGAgcEaKH9AqBWhpgDAiud/sP2DZFs/oUBe/6FAgq2AeoBGfxHAzbe/jmRAP//AHP/7AQSBFwCBgBIAAAAAQAEAAAF3wRGABEAPEAfAgkJEQoGBAUKDg8NBxMSEQsIBQIODg0DAA8PCgcNFQA/MzM/MzMSOREzMzMzMxESARc5ETMzETMxMAEzEQEzAQEjAREjEQEjAQEzAQKkmQHFtv42AfHA/h6Z/h+/AfD+N7YBwwRG/e0CE/3t/c0CK/3VAiv91QIzAhP97QABAET/7AN/BFwAIgBNQCsCDR4TEw0PIQgYBiMkECIhIiFGWQ8iHyICCwMiIhYKFhtGWRYWCgRGWQoQAD8rABg/KxESADkYL19eXSsREgA5ERIBFzkRMxEzMTABIDU0IyIGByc2MzIWFRQHFRYWFRQGIyInNRYzMjY1NCEjNQGBATf8TX5mO6rJvdrNfnT12O2Bt7uQk/7JmAKBrKIcKodMm4a4OQgliWeYqUeYVmNdv40AAQCwAAAEYgRIAA0ANEAZCAQHBwYLAwMMBgwPDgMKDAQNDwwVBxUEDwA/Pz8/ERI5ORESATk5ETMRMxEzETMzMTABEQcHATMRIxE3NwEjEQFMBwMCUc+bAwX9sM8ESP1JtjkDpvu4Ap6EgvxcBEgA//8AsAAABGIGDAImAdIAAAEGAjY9AAAIswEOESYAKzUAAQCwAAAEDARIAAoALUAWCgYGBwMBAgcEDAsCCgUKBwAIDwQHFQA/Mz8zEjk5ETMREgEXOREzETMxMAEzAQEjAREjETMRAy+2/icCAML+DKamBEj97/3JAiv91QRI/esAAQAQ//ID4QRIABAALUAYAQADDwoPAAMSEQ8DRlkPDwcMR1kHFgEVAD8/KwAYPysREgEXOREzETMxMCEjESECAgYjIic1FjMyEhMhA+Go/rcbYJl2NiAWHHOIIwKBA7r+nP5ewgx7BgHmAe8AAQCwAAAFLwRGABQANUAZAwYGBRIPDxAFEBYVBw4ADgsDEQ8GEBULFQA/PzM/MxI5OREzERIBOTkRMxEzETMRMzEwJTc3ATMRIxEHBwEjASYnESMRMwEWAukfKwEp05MUOv7li/7lNRSUywEfK6BddgLT+7oDiTqZ/UoCuIZL/HcERv1JbgABALAAAARiBEgACwA5QB4CBgYFAQkJCgUKDQwBCEZZLwE/AQIBAQoDCw8GChUAPzM/MxI5L10rERIBOTkRMxEzETMRMzEwAREhETMRIxEhESMRAVYCZqam/ZqmBEj+NQHL+7gB7v4SBEj//wBz/+wEYgRcAgYAUgAAAAEAsAAABEgESAAHACNAEQABBQQBBAgJAgdGWQIPBQEVAD8zPysREgE5OREzETMxMCEjESERIxEhAVamA5io/bYESPu4A7gA//8AsP4UBHUEXAIGAFMAAP//AHP/7AOLBFwCBgBGAAAAAQApAAADkwRIAAcAJEASAgMAAwUDCAkBBQYFRlkGDwMVAD8/KxEAMxESARc5ETMxMAEhESMRITUhA5P+nKb+oANqA7r8RgO6jv//AAL+FAQGBEgCBgBcAAAAAwBx/hQFRgYUABEAGAAeAExAJxIJHA8EBBUMBRkAAAUJAx8gDQAbFgwWRlkPDBAcFQYVRlkDBhYFGwA/PzMrEQAzGD8zKxEAMxg/ERIBFzkRMxEzMzMRMzMRMzEwARQABxEjESYANTQANxEzERYABRQWFxEGBgUQJRE2NgVG/uX+pPj+4AEf/577AR772bDAubcDe/6Tvq8CJfn+2RX+JAHcEwEu9PkBJhQBvP5EF/7U8MDaEgNUEc/IAX8n/K4T2v//ACcAAAQIBEgCBgBbAAAAAQCw/oUE3QRIAAsAMkAZBgMHCgEAAAoDAwwNCAQPCgYDBkZZAxUBIgA/PysRADMYPzMREgEXOREzETMRMzEwASMRIREzESERMxEzBN2m/HmmAkamm/6FAXsESPxHA7n8RwABAJwAAAQtBEgAEgAtQBYGCgoJAREJERQTAw5GWQMDCgcSDwoVAD8/MxI5LysREgE5OREzETMRMzEwAREUMzI2NxEzESMRBgYjIiY1EQFC21umaaamabNxpLoESP5wwDhDAdX7uAHwSDuskwGcAAEAsAAABm8ESAALADFAGAgFAAkBBAQJBQMMDQoCBg8ACAUIRlkFFQA/KxEAMxg/MzMREgEXOREzETMRMzEwJSERMxEhETMRIREzA+EB5qj6QaYB5aaPA7n7uARI/EcDuQAAAQCw/ocHCgRGAA8AO0AeDAkADQEEBwYGBA0JBBARDgIKDwQADAkMRlkJFQciAD8/KxEAMzMYPzMzERIBFzkRMxEzETMRMzEwJSERMxEzESMRIREzESERMwPhAeamnaj6TqYB5aaPA7f8Sf34AXkERvxJA7cAAAIAKQAABR0ESAAMABQAPUAgABISCA0EBAgKAxUWABFGWQAACAsLCkZZCw8IEkZZCBUAPysAGD8rERIAORgvKxESARc5ETMRMxEzMTABITIWFRQGIyERITUhATQmIyERISACLQE54Nff3P4l/qICBAJMfJ3+zQE5ARMCg5qbpqgDuo78/F1T/pcAAAMAsAAABXkESAAKAA4AFgA/QCAAEBAIBBMMCwsTCAMXGAwVAA9GWQAACA0JDwgQRlkIFQA/KwAYPzMSOS8rABg/ERIBFzkRMxEzETMRMzEwASEyFhUUBiMhETMBIxEzAREhIDU0JiMBVgEr0cnVz/45pgQjpqb73QEZAQh6kwKDm5qlqQRI+7gESP2s/pe5XFQAAgCwAAAETARIAAkAEgAyQBkPAwALCwcDBxQTAApGWQAABwgPBwtGWQcVAD8rABg/EjkvKxESATk5ETMRMxEzMTABISARFAYjIREzEREhMjY1NCYjAVYBUgGk29P+EqYBQISMgZQCg/7LoqwESP2s/pdcXVtVAAEAOf/sA30EXAAaAERAJgwJCRgYChICBBscCwpGWQ8LHwsCCwMLCwAVFQ9GWRUQAAZGWQAWAD8rABg/KxESADkYL19eXSsREgEXOREzETMxMAUiJzUWFjMyNjchNSEmJiMiByc2NjMgABEQAAFWp3Y8jFuuvQr91QIpEKmhZ5cvN6RQAQABCv7fFDmTFyS6uY2soDaMGiP+2/7s/vP+1gACALD/7AYzBFwAEgAeAFFALQwICAkTDQYZAAAGCQMfIBAcRlkQEAwHRlkPDB8MAgsDDAwJCg8JFQMWRlkDFgA/KwAYPz8SOS9fXl0rABg/KxESARc5ETMRMzMRMxEzMTABEAAjIgInIREjETMRITY2MzIAARQWMzI2NTQmIyIGBjP+/+DV+g7+4aamASEU/M/cAQH87pKhnpWSoaGSAiX+8/7UAQv3/hIESP415Pv+z/7609vV2dLY2AACACUAAAPBBEgADQAUAD1AIBELCwoOBQEFAgoEFhUNEEZZAggNDQEICBNGWQgPCwEVAD8zPysREgA5GC8SOSsREgEXOREzETMRMzEwMyMBJiY1NDYzIREjESEBFCEhESEi58IBO3+HyrUB6Kb+6/72ARQBC/7T8gHPHKF6lqz7uAG2AU6+AXL//wBz/+wEEgXTAiYASAAAAQYAaggAAAq0AwIwESYAKzU1AAEAFP4UBEQGFAAnAGZAOh0bFw8PFBAHJSUZAhASBSgpHh0hC0ZZGhITEkdZFxMPEx8TLxMDCQMdIRMTIR0DEBUAEBUABUZZABsAPysAGD8/Ehc5Ly8vX15dETMrEQAzKxEAMxESARc5ETMRMzMRMzMzMTABIic1FjMyNRE0JiMiBhURIxEjNTM1MxUhFSEVFAczNjYzMhYVERQGAy9PNDo3gXqCrZ2onJymAZH+bwgKMbV0ycmJ/hQZiRSqA1KGhLzT/ecE23+6un/EVDhPW7/S/Lacqv//ALAAAANEBiECJgHNAAABBgB28QAACLMBDxEmACs1AAEAc//sA6oEXAAZAERAJg8SEgMJGBEDBBobDxJGWQ8PHw8CCwMPDwAGBgxGWQYQABVGWQAWAD8rABg/KxESADkYL19eXSsREgEXOREzETMxMAUiABEQADMyFhcHJiMiBgchFSEWFjMyNxUGAnn4/vIBE/tSnjkxj22kqhACKf3VCaqnjJd0FAEjARABEwEqIBmNM6Opjb61O5M5//8Aav/sA3MEXAIGAFYAAP//AKIAAAFmBd8CBgBMAAD////sAAACHwXTAiYA8wAAAQcAav63AAAACrQCARkRJgArNTX///+R/hQBZgXfAgYATQAAAAIAEP/yBkIESAAVAB0ATEApCRQAGxsHFgQEBxQOBB4fABpGWQAADBQUCUZZFA8MEUdZDBUHG0ZZBxUAPysAGD8rABg/KxESADkYLysREgEXOREzETMRMxEzMTABMzIWFRAhIREhAgIjIic1FjMyEhMhATQmIyMRMyADsPTTy/5L/mX+/ii1qzggFhxziCMCUAHsfZ7n7QEVAoObmv6yA7r9+v4+DHsGAeYB7/z8W1X+lwACALAAAAakBEYAEQAZAEpAJg8LCwwBExMQCBYFBQgMAxobEgoPCkZZAQ8PCBENDwwVCBNGWQgVAD8rABg/PzMSOS8zKxEAMxESARc5ETMRMzMRMxEzETMxMAERITIWFRAhIREhESMRMxEhERMRMyA1NCYjBAABANnL/k7+YP4KrKwB+qbwARSAmQRG/juZmv6yAe7+EgRG/jcByf2u/pe5XFQA//8AFAAABEQGFAIGAOkAAP//ALAAAAQMBiECJgHUAAABBgB2MwAACLMBFBEmACs1//8AAv4UBAYGDAImAFwAAAEGAja3AAAIswEWESYAKzUAAQCw/ocERgRGAAsAMkAZBAEKCwUICAsBAwwNCyIGAg8JAQEERlkBFQA/KxEAMxg/Mz8REgEXOREzETMRMzEwISERMxEhETMRIREjAi/+gaYCSqb+j6YERvxJA7f7uv6HAAABAMkAAAQIBuMABwAjQBEAAwUGAwYJCAcESVkBBwMGEgA/P8YrERIBOTkRMxEzMTABETMRIREjEQNmov1rqgW2AS3+OvrjBbYAAAEAsAAAA0QFiQAHACdAEgUAAgMAAwkIBgQEAUdZBA8DFQA/PysAGBDGERIBOTkRMxEzMTABIREjESERMwNE/hKmAe6mA8f8OQRIAUEA//8AGwAAB0wHcwImADoAAAEHAEMBFwFSAAizARsFJgArNf//ABcAAAYjBiECJgBaAAABBgBDcwAACLMBHhEmACs1//8AGwAAB0wHcwImADoAAAEHAHYBsAFSAAizASMFJgArNf//ABcAAAYjBiECJgBaAAABBwB2ARsAAAAIswEmESYAKzX//wAbAAAHTAclAiYAOgAAAQcAagFkAVIACrQCAS8FJgArNTX//wAXAAAGIwXTAiYAWgAAAQcAagDPAAAACrQCATIRJgArNTX//wAAAAAEewdzAiYAPAAAAQcAQ/+UAVIACLMBCgUmACs1//8AAv4UBAYGIQImAFwAAAEHAEP/YQAAAAizARcRJgArNQABAFIB2QOuAnEAAwARtQACBAUAAQAvMxESATk5MTATNSEVUgNcAdmYmAABAFIB2QeuAnEAAwARtQACBAUAAQAvMxESATk5MTATNSEVUgdcAdmYmP//AFIB2QeuAnECBgIDAAAAAv/8/jEDTv/TAAMABwAcQAsEAAkFAQEIBQYCAQAvMy8zEQEzETMRMzIxMAEhNSE1ITUhA078rgNS/K4DUv4xi4yLAAABABkDwQFEBbYABwAStgEFCAkABAMAP80REgE5OTEwEyc2EjczBgclDBZiOHtCJQPBFloBDHn+9wAAAQAZA8EBRAW2AAcAErYFAQgJBQcDAD/GERIBOTkxMAEXBgIHIxI3ATUPGmI1ekYgBbYWZP73cgEd2AD//wA//vgBbQDuAgYADwAAAAEAGQPBAUYFtgAHABK2AgYJCAMHAwA/zRESATk5MTATFhcjJgInN98lQnstbRgOBbb7+l4BHGUWAAACABkDwQK0BbYABwAPABpADAQBDQkEEBEACAMMAwA/M80yERIBFzkxMAEnNhMzBgIHISc2EjczBgcBlg84enseOw391wwWYjh7QiUDwRbXAQhz/t9hFloBDHn+9wAAAgAZA8ECtAW2AAcAEAAaQAwJDQEFBBESDQUQBwMAPzPGMhESARc5MTABFwYCByMSNyEXBgIHIzYSNwE1DxpiNXpGIAInDhhgOH0aQg0FthZk/vdyAR3YFlv+9npkATRdAP//ABn++QK0AO4BBwILAAD7OAAgtwEAB0ANDUgHuP/AswwMSAe4/8CzCQlIBwARKysrNTUAAQB7AAADiQYUAAsAQ0AhCQICCAMKAQEHBAAEAwUEDA0ABQULBgYHCAABBAQKBwMSAD8uMzMRMz8SOS8zMxEzERIBFzkRMzMRMxEzMxEzMTABJRMjEwU1BQMzAyUDif6gMcQx/rQBTDHEMQFgA+cf+/oEBh+qHgGh/l8eAAEAewAAA5oGFAAVAHVAOgwHFRAEBA8KBRQRAAMDDgsJBhMBAQYFBwQWFwEICAIHAwYGAAkUCwsRDhMMDBIJDg0HDQcNBQ8ABRIAPz8SOTkvLxI5OTIyETMRMzMRMxEzMxEzETMzETMREgEXOREzETMzMzMRMzMzETMzMxEzMxEzMTABJRUlEyMTBTUFAxMFNQUDMwMlFSUTAjkBYf6fMcYx/qYBWisr/qYBWjHGMQFh/p8rAecfqB3+hQF7HagfASsBGx+oHgF8/oQeqB/+5QABAKQB9AJeA+MACwATtgYAAAwNCQMAL80REgE5ETMxMBM0NjMyFhUUBiMiJqRxbGl0c2prcgLseX58e3eBgwD//wCY/+MFrgDyACYAEQAAACcAEQISAAAABwARBCUAAAAHAGT/7Ak7BcsACQAUABgAJAAvADsARgBbQDAAEAUKMEI2PBkrHyUlKzwVQgoXEAhHSBwzMyg/GQMNIjk5LUQNRA1EFxgGFxgHEgcAPzM/PxI5OS8vETMzETMRMz8zMxEzERIBFzkRMxEzETMRMxEzETMxMBMUFjMyERAjIgYFFAYjIiY1ECEyFiUBIwEBFBYzMjY1NCYjIgYFFAYjIiY1ECEyFgUUFjMyNjU0JiMiBgUUBiMiJjUQITIW7FNdtLRdUwHtoZyVowE4mKUCafzVlAMrAqBTXVtZWVtdUwHtopuUowE3lqf7OFFdW1lZW11RAeuim5WjATiWpwQCqqoBVAFSqKrm5+7fAcnw2/pKBbb8Aqupp62rpaWr5ubv3QHJ7N2rqaetq6Wlq+bm7t4ByewA//8AhQOmAT8FtgIGAAoAAP//AIUDpgKwBbYABgAFAAAAAQBSAHUCHwO+AAYAGkAKBAIDBgIGCAcFAQAvLxESATk5ETMRMzEwEwEXAQEHAVIBVnf+3wEhd/6qAicBl0X+ov6hRwGXAAEAUAB1Ah0DvgAGABpACgMABAIAAggHBQEALy8REgE5OREzETMxMAEBJwEBNwECHf6odQEf/uF1AVgCDP5pRwFfAV5F/mkA//8AmP/jA0oFtgAmAAQAAAAHAAQBwQAAAAH+eQAAAo8FtgADABO3AAUCBAMDAhIAPz8RATMRMzEwAQEjAQKP/HmPA4cFtvpKBbYAAQBtAyECwwXHABIAJkARABIMCAgJEgkUEwQPHwAJCh8AP80yPzMREgE5OREzETMRMzEwARE0JiMiBhURIxEzFzM2MyAVEQJMTlByW3RgDgpLkQECAyEBpFRHaXr+pAKZWGX6/lQAAQBiAAAEIwW2ABEAS0AoDgAEBAkFCxACBQcFEhMDBwgHTlkACA4RTFkIDggOBQoKDUxZCgYFGAA/PysREgA5ORgvLysRADMrEQAzERIBFzkRMzMRMzMxMAEhFSERIxEjNTMRIRUhESEVIQG4ATT+zKawsAMR/ZUCRP28AYuB/vYBCoEEK5f96ZcAAQBEAAAESAXJACUAcEBADQkRESIeGgsPFQIPGhwgFwcmJxAcHRxOWQ0dDCAhIE5ZCSEPIR8hPyFPIQQJAx0hHSEXABcUTFkXGAAFS1kABwA/KwAYPysREgA5ORgvL19eXREzKxEAMxEzKxEAMxESARc5ETMRMzMzETMzMTABMhcHJiMiBhUVIRUhFSEVIRUUBgchFSE1NjU1IzUzNSM1MzU0NgKwyZ48mJN6fgGk/lwBpP5cQUoDG/v8zsjIyMjgBclQg0eHgbqBpoEhZIgsmo0w8yOBpoHPss0AAAMAmv/sBdEFtgAWACEAKgBgQDciHBwdJhcQFBQNCQISCRcLHQYrLBsiS1kQE05ZAxsLEA4OEAsbAwUdHh4qS1keBh0YBgBNWQYZAD8rABg/PysREgAXORgvLy8vLysrERIBFzkRMzMRMxEzETMRMzEwJTI2NxUGIyImNREjNTc3MxUzFSMRFBYBFAQhIxEjESEgFgEzMjY1NCYjIwVOIlYLPG5tgZ2dPmLd3TT+kf7r/vZApQEGAQD+/aE0yLmst1J1DgR9HoiKAc9QRb/Tgf5HTVIDl+Pq/cEFttP97pGikY4AAAEAP//sBIkFywAmAHFAPx0XHxYWGgsCBwcaJBEEChoXBicoCxcYF05ZCBgFHR4dTlkCHg8eHx4vHgMJAxgeGB4TIiIATFkiBxMOTFkTGQA/KwAYPysREgA5ORgvL19eXREzKxEAMxEzKxEAMxESARc5ETMRMzMRMxEzETMxMAEgAyEVIQcVFyEVIRYWMzI3FQYjIgADIzUzJzU3IzUzEgAzMhcHJgMb/sFPAf799AICAc/+QSXLqpyZkqvt/t8uppgCApikJwEk7cmlR6YFNf5tgTlALYG0xUKWQQENAQGBKixQgQEFASRhi1YABACN//gGCgXBAAMADwAXACsARUAkJRsgKhAKFAQEAAoqAhsGLC0jHgYSBxgWDScYDRgNGAIDBgIYAD8/Ejk5Ly8RMxEzPzM/MxESARc5ETMRMxEzETMxMAEBIwEBFAYjIiY1NDYzMhYFFDMyNTQjIiUiJjU0NjMyFwcmIyIVFDMyNxUGBR/81ZQDKwF/qZSLqqeUjar+FbKwsLL9yqa2vKtoWCFRUODcYlpOBbb6SgW2+5ift7mdnri6nO7u69uxoaizI2cf7ushZSUAAgB3/+wDnAXLABwAJAA9QB8jGhoPCR0WAxYJDAQlJiMPDRkKBQwTAgwCDAYfEwAGAC8zLzMSOTkvLxESFzkREgEXOREzETMzETMxMCUyNzMGBiMiJjU1Bgc1NjcRNDYzMhYVFAIHERQWEzQjIgYVESQCfa4SXwiZjpagYGBOcpaHdYfOr1Kuf0M+AQBv1aaytanzIxZxFSYB8oqfoYq5/tBK/uVoewQrwlZs/kuJAAAEAMkAAAfDBbYADwAbACcAKwBfQDEJBgYHAQ0NABwWIhAQKygWAAcGLC0fEyUZCygTAxkIExkTGSgIKClKWSgSDggDAQcSAD8zPzM/KxESADk5GC8vERI5ERI5ETMRMxESARc5ETMRMxEzETMRMxEzMTAhIwEjEhURIxEzATMmNREzARQGIyImNTQ2MzIWBRQWMzI2NTQmIyIGAzUhFQTHu/1MCBCXwgKqCA6YAvyhk4uioZOLov4iUV1bT09bXFJWAgAEy/7gbPzBBbb7OvWKA0f8t6O4u6CjtbudcnZ1c3NwcP0gh4cAAgAlAuUFhQW2AAcAGABPQCcAAQ8MDA0RFBQTEw0GAQMFGRoXFgkKChEODgQHAwMEEAgIFA0BBAMAP8QyMjkvMxEzETMRMxEzMxEzMzMREgEXOREzETMRMxEzETMxMAEjESM1IRUjAQMjFxEjETMTEzMRIxE3IwMBcXvRAh/TAljJCAZ3u8TLtH8GCNMC5QJnamr9mQIvgf5SAtH90QIv/S8BpIn90wD//wBQAAAF9AXNAgYBdgAAAAIAZv/dBIsESAAXAB8ANEAaHw4OBBgMDBUEAyAhDRQvHz8fAh8fERwIEQAALzIvMxI5L105MxESARc5ETMRMxEzMTAFIiYCNTQ2NjMyFhIVIREWFjMyNjcXBgYTESYmIyIHEQJ5nfGFivSVmPOH/MUxplKDt1FIYtmTMqNYrXojkwEFnav/jI7+/aX+nDVGaYEpm3wCiwEVNUJ1/un//wBH/+wF8wW2ACcCFwJcAAAAJgB7+wABBwJAA2D9swALtAQDAhkZAD81NTUA//8AIP/sBggFyQAnAhcCogAAACcCQAN1/bMBBgB1/wAAC7QBAwIOGQA/NTU1AP//AEf/7AYEBbYAJwIXApwAAAAmAj0MAAEHAkADcf2zAAu0BAMCLBkAPzU1NQD//wBq/+wGAAW2ACcCFwJGAAAAJwJAA239swEGAj8xAAALtAEDAg4ZAD81NTUAAAIAZv/sBDUFxwAaACgAQUAiJgcfDw8AABQHAykqCyJHWQ4ECwsYBBgRRlkYAwQbRlkEFgA/KwAYPysREgA5GC8SOSsREgEXOREzETMRMzEwARACBCMiJjU0EjYzMhYXNxAhIgYHNTY2MzISATI2EjcmJiMiBgYVFBYENaf+7K2su4jol2GSKwT+5j6QMC+bStLY/aJfpngWGYBQZaVlZQOm/vr+NenJwKkBM6FdS1oBlSwhnxcl/uz7xpABA5ZhbIT6gHaCAAIAJwAABG0FtgAFAAwAKEATCQUKBAUEDg0GBQEFCUlZBRIBAwA/PysREgA5ERIBOTkRMxEzMTA3ATMBFSEBBgcBIQEmJwHPpgHR+7oCIT0o/vwC0f7+RGgFTvqwZgT04Xn8/gL5ygAAAQDJ/hAFIQW2AAcAI0ARAAcDBAcECQgFAklZBQMABBsAPzM/KxESATk5ETMRMzEwAREhESMRIREEd/z8qgRY/hAHDfjzB6b4WgABAEz+EATdBbYACwAxQBoHCQkDAAgCCgYCAAQMDQQHSVkEAwAJSVkAGwA/KwAYPysREgEXOREzETMzETMxMBM1AQE1IRUhAQEhFUwCd/2ZBED8sAJD/aQDqv4QawOcAzNsl/z8/I2YAAEAaAKNBCkDFwADABVACQIABQQBAFBZAQAvKxESATk5MTATNSEVaAPBAo2KigABACX/8gS8BpgACAAcQAsICgMJAwYEBAEIAQAvLxI5LzkzEQEzETMxMAUjASM1IRMBMwJvf/7ptAEh6wICiQ4DDof9VAW9AAADAHcBkwUtBAwAFQAhAC0AM0AYHwwrAAAlGQwELi8iHBwRBgkTDygWFgMJAC8zMxEzLzMSOTkzETMREgEXOREzETMxMAEUBiMiJicGBiMiJjU0NjMyFzYzMhYBMjY3JiYjIgYVFBYBIgYHFhYzMjY1NCYFLaeAXZlBPJlYg6iog7V6fLmFovx9Qm02Mm1ITGRhAqFCbTczbkdMZGUCz4O5anRoca2OhrPb16/+u1tkYV1pV1NqAXlcYmFea1RVaQABAAz+FAL4BhQAFAAcQAwIEgISDQMVFhALBQAALzIvMxESARc5ETMxMAEyFxUmIyIVERQGIyInNRYzMjUREAJ9TywxPrClo0o7PTq2BhQQiRbz+uGwuxOHFvMFHwFqAAACAGIBhwQtBB8AFwAvAHBAQCgPGwMPAzEwJx4eGFBZDx4fHi8eAwkDHipAKiRQWRsqQA8GBgBQWQ8GHwYvBgMJAwYSQBIMUFkDABIQEiASAxIAL13EKwAaGBDNX15dKwAQGMQa3sQrABoYEM1fXl0rABAYxBESATk5ETMRMzEwASIGBzU2MzIWFxYWMzI2NxUGIyImJyYmAyIGBzU2MzIWFxYWMzI2NxUGIyImJyYmAVA2fzlslENwWE1bLTWANmWZQ29YSVsxOYA1apZFdFJFXzE3gTNkmkV2T1RVAgBAOZZuHCUhGUI5l20dJR4ZAZZENZVtICIdGkI3lm4gISIYAAABAGgApgQpBQIAEwBGQCYFARALCwkKDgQAEwEIFBUNBQYFUFkKCA8GAQkDBg4CAQJQWRIRAQAvM8QrEQAzGC9fXl3GMysRADMREgEXOREzETMxMAEhNSETITUhExcHIRUhAyEVIQMnAX3+6wFUf/4tAhOHfW0BF/6qgQHX/emDfQHBiQEQiQEfOeaJ/vCJ/uU3//8AaAABBCkE2QImAB8AAAEHAisAAP10AAmzAQAHEgA/NTUA//8AaAABBCkE2QImACEAAAEHAisAAP10AAmzAQAHEgA/NTUAAAIAbwAABD0FwwAFAAkAIEANCAAGAwADCgsJBwIFAgAvLxI5ORESATk5ETMRMzEwEwEzAQEjCQNvAcJIAcT+PEgBYv7D/sMBPQLfAuT9HP0hAuECE/3t/ewA//8AHQAABBwGHwAmAEkAAAAHAEwCtgAA//8AHQAABAwGHwAmAEkAAAAHAE8CtgAAAAEA2wTZA74GDAANABhACQsDDw4KBIAHAAAvMhrMMhESATk5MTABIiYnMxYWMzI2NzMGBgJIuaoKnAlbcWdjC50MsgTZj6RoUlhinpUAAAH/kf4UAVYESAAMAB1ADQsICA4NCQ8ABUZZABsAPysAGD8REgE5ETMxMBMiJzUWMzI2NREzERArXztFQ05Jpv4UGYcUVVcE/PsQ/rwAAAEBiQTNAnUGFAAJABO2CQQKCwSACQAvGs0REgE5OTEwATY2NzMVBgYHIwGJEycKqAtYL1oE5TenURIzvEYAAQFx/jsCb/+DAAkAE7YJBAoLCYAEAC8azRESATk5MTABNjY3MxUGBgcjAXEcMweoC2I3Wv5UQLo1EjPBQgABAYEE2QJ/BiEACQATtgkECgsJgAQALxrNERIBOTkxMAEGBgcjNTY2NzMCfx01BqYOYzFcBgg9wTETPb85AAIAJwI5Ap4FxwALABUAIEAOBgwAEQwRFxYJEx8DDiEAPzM/MxESATk5ETMRMzEwExQWMzI2NTQmIyIGBRAhIiY1ECEyFrBSXl5WVl5eUgHu/sSenQE7np4EAKimpauqpKWp/jfs3QHF6AACABQCSgK0BbwACgAUADxAHxQFCwcDAwkCAAIFAxUWAQUFCQ8UHxQCFBQDDgcfAyAAPz8zEjkvXTMzETMREgEXOREzMxEzMxEzMTABIxUjNSE1ATMRMyE1NDcOAwcHArR9kf5uAZiLff7yBgUYHh4LqAMUysplAkP9zcOGSwwnLS0R9gABADsCNwKJBaoAHQArQBUQAxwXCRcaAwQfHhMAAAYbGB4NBiEAPzM/MxI5LzMREgEXOREzETMxMAEyFhUUBiMiJic1FhYzMjY1NCYjIgYHJxMhFSEHNgFIkbCqpkqLKTiMNl9ubWY5TB87IQHv/oMUPgRoj3uMmx8XgyImU1lOWBEIKQGgaOYMAAACACkCOQKiBccAFwAjADZAHBsSIQsAAAYSAyUkHgsVAA8QDwIPDwMYFSEIAx8APzM/MxI5L10SOTMREgEXOREzMxEzMTATEDYzMhcVJiMiBgczNjYzMhYVFAYjIiYFMjY1NCYjIgYVFBYp29tKMTRTjZYKCB1xVX2Upo2ZrQFEUWNYVlVwagPDAQX/D3ISmaYrO5R+kKTSY11jT1taO1l8AAABADkCSgKPBbYABgAcQA0BBQUAAgMHCAIDHgAgAD8/MxESARc5ETMxMBMBITUhFQGiAV7+OQJW/qACSgL4dF788gADADMCOQKTBccAFQAiAC0AP0AiFg0mEysDHAcHAwUQEw0GLi8FECAgCykbKQIpKRkKISMAHwA/Mj8zOS9dMxI5ORESARc5ETMRMxEzETMxMAEyFhUUBxYVFAYjIiY1NDY3JiY1NDYDFBYzMjY1NCYnJwYGEyIGFRQWFzY1NCYBZHyXlLClipKfSVVKOZ01VFZaVF1RHEhGrERLRFGMTgXHdmiCTEqecYmAdEV0Li5dRGZ+/WY8SUk8P08cCiJUAe88OS9HITZhOTwAAgAjAjkCnAXJABYAIgA8QB8aESAKAAAFEQMjJB0OCgsLFA8OHw4CDg4DFxQfCAMhAD8zPzMSOS9dEjkRMxEzERIBFzkRMzMRMzEwARAGIyInNRYzIBMjBgYjIiY1NDYzMhYlIgYVFBYzMjY1NCYCnNrUUzExXQEUFQojdEGDmamImLD+uFFfVVdUc2cERv7y/w90FAFGMzSSg4ilyltfV1FfVT5hcgAAFgBU/oEHwQXuAAUACwARABcAGwAfACMAJwArAC8AMwA3ADsAPwBDAEcAUwBbAGsAdAB8AIkA+ECHQUA9PDEwDwUADFROWEh2a3BgemeFhkVEKSglJBQKCRcXhgYSOxt/Z2A4GDcvazQsSCMfIBwDEU4MGYqLCgAqQlpRhlx0XClBRj5kdXVsRT2CfVZLa3ZrJjIlMRUNAEIBQT5cPWwNMTIDawxcbGtrbFwDAS0sHRwZGBMSDww5ODU0ISAHBgQBAC8zMzMzMzMzMzMvMzMzMzMzMzMzEhc5Ly8vERIXORE5Ejk5ETk5ETMRMxEzETMQxDLEMhEzETMSOREzETMRMxDExDIRMxEzERIBFzkRMzMzMzMzMzMzETMRMxEzETMRMxEzETMzMzMzMzMzMzEwExEhFSMVJTUhESM1AREzFTMVITUzNTMRITUhFSE1IRUBNSEVASMRMxEjETMBNSEVASMRMwE1IRUzNSEVASMRMzUjETMBIxEzBRQGIyImNTQ2MzIWBRQzMjU0IyIlMzIWFRQGBxUWFhUUBiMjEzMyNjU0JiMjFRUzMjY1NCMBIic1FjMyNREzERQGVAEvwAXOATBt+QBvwAUOw239SQER++EBDv7yAQ4Et21tbW37wgEQ/DBvbwLAARB3ARH6qG9vb28G/m1t+5+Hf3+Hh39+iP5zh4eHhwHhrG1wLiw9Lm1ez3tCLiQqLztKMSVaAV40HCsZVn1pBL4BMG/BwW/+0MH5AgEvwm1twv7RbW1tbQb+b2/6qAEOAgIBD/o7bW0BpgEOBEpvb29v/C8BEHkBD/1oARBJkZyckZKbmpPFxcRhQ1MxQggIDkQ1UVkBYiIgIh3jmislSv76CmYIVgGS/nJfYwAAAwBU/sEHqgYUAAMAHgAqAC5AGQELFyUEHh8RAwkrLCgeFA4iHg4OHiIDAgAALy8XOS8vLxEzETMREgEXOTEwCQMFNTQ2NzY2NTQmIyIGBxc2MzIWFRQGBwYGFRUDFBYzMjY1NCYjIgYD/gOs/FT8VgPrLEFnSbulT7pHUqBaPz4xSFQ7G0dGQklIQ0hFBhT8VvxXA6n7LzJBMVJ+WIeaOCqyUDovNUs2RHBKO/7tP0hJPkBJSP///5H+FAJXBiECJgI3AAABBwFM/qkAAAAIswEYESYAKzX//wAZA8EBRAW2AgYCBwAAAAIACv/sBN8GKwAtADYAZkA5GwcXCzQlLh8fKwItAiULBxIGNzgUDkdZACEuIUdZKy4PLh8uAgkDFC4ULgUoKDFGWSgBBR1GWQUWAD8rABg/KxESADk5GC8vX15dETMrEQAzKxESARc5ETMzETMRMxEzETMxMAEWFRAAISARNDc2NTQmIyIGByc2MzIWFRQHBhUUMyARNCcmJCY1NDYzMgATMxUlJgIjIgYVFAQEVgT+4P79/ncQDyQgGTYPIVNfWF0PEOkBdwTf/smgtqjQAQAqj/7HHLd7XWEBEwNOLkH+n/5uAVg5e3oXLyMPCXYnXV0jg4Q6zwJwPywCabyDkKP+zf7XgYHTAQBfS42aAAEAAAAABHsFwwAVAChAFBESBxIUAxYXABIUAxISBQpKWQUEAD8rABg/PxI5ERIBFzkRMzEwARISNjYzMhcVJiMiDgMHESMRATMCOXqNTVw6MCgaHyg7VnxlH6z+I7oCzQEjATdsMA+HBjih/OxV/eMCLwOHAAACABL/7AZ3BEgAFAApAExAJxgDEiEhHicNCg0eAwYFKisTHx8ACBULBggGRlkIDyQbABtGWRAAFgA/MisRADMYPysRADMzERI5GC85ERIBFzkRMxEzEjkRMzEwBSImNTQTITU3IRUjFhUUBiMiJyMGAQYCFRQWMzI2NTUzFRQWMzI2NTQnAim6x4f+444F1/p1yLndRAhE/s8/Qmx1XWyia111bW8U5/DwAQdKRI78+/DntrYDzoT+/meuqI99vLx6kqmt/u8A//8AyQAABnEHdQImADAAAAEHAHYBnAFUAAizAR0FJgArNf//ALAAAAbLBiECJgBQAAABBwB2Ac0AAAAIswEtESYAKzX//wAA/dUFEAW8AiYAJAAAAAcCWwE1AAD//wBe/dUDzQRaAiYARAAAAAcCWwDHAAD///7f/+wF0gXNACYAMhQAAQcCXP5HAAAACbMDAhoDAD81NQAAAgB1/dUCNf+DAAsAFwAeQAwSBgwABgAYGRUDDwkALzPMMhESATk5ETMRMzEwARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AjV9ZmV4eGVlfm5CMzNCPDk1QP6uYXh1YmJ1dmE5PDw5OD09AAIAmARoAs8FxQAIABcAHkAODgkDCAwTCQUYGQILCBUAL8TcxhESARc5ETMxMAE2NzMVBgYHIyU0NxUGFRQeAhUUIyImAbBGHL0pdzFO/ujteR8lH103QwSHtXoUTqw5dqM9SCk1FBMQGhxKRAD//wAdAAAG0wYfACcASQKwAAAAJgBJAAAABwBMBW0AAP//AB0AAAbDBh8AJwBJArAAAAAmAEkAAAAHAE8FbQAAAAIAff/sBmQGFAAVACEAPEAfFgYPEREcAAAUCwYEIiMUCwMJCR9JWQ8JBAMZSVkDEwA/KwAYP8YrERIAOTkREgEXOREzMxEzETMxMAEQACEgABEQACEgFz4CNTMXBgYHFgEQEjMyEhEQAiMiAgW8/p3+xv69/qEBYQFDAUWzMjobtg4dg2hg+3X69PP29fLz/QLd/p7+cQGJAWoBaAGG1wxDZmkWm60nsP7+/tb+zgExASsBJwEx/tEAAAIAc//sBRkE8AAWACIAPEAfFwcQEhIdAAAVDAcEIyQVDAMKCiBGWRAKEAMaRlkDFgA/KwAYP8YrERIAOTkREgEXOREzMxEzETMxMAEQACMiJgI1EAAzMhc+AjUzFwYGBxYFFBYzMjY1NCYjIgYEYv7y7pPkfAEM7tmJMzoatA8feWZH/L2era+dn6+tnAIl/vT+04oBAq0BDAErjQ9BY24XnK8mirnT29vT0tjYAAEAuv/sBnsGFAAbADNAGAUHBwELFBELER0cCgEOGwUSAw4XSVkOEwA/KwAYP8YzEjk5ERIBOTkRMxEzMxEzMTABFT4CNTMXBgYHERAAISAANREzERQWMzI2NREFGTpGH7UOIayV/uH++P70/tSqzMa4wQW2xgg+cG4WtrgZ/Y3+/v7qAR/9A678RrfEwbwDuAAAAQCk/+wFlgTyAB0AREAiARwNDw8TFAcHChMcEx4fFRYKEhYDFA0IHQ8ZBEZZGRYUFQA/PysAGD8zxhIXOREzERIBOTkRMzMRMxEzETMRMzEwAREUFjMyNjURMxU2NjUzFwYGBxEjJyMGBiMiJjURAUx6gqyfplJKsg8gsI2JGAk0tW/LyARG/TuGhLzVAj55C4CaF7q/Dvysk1JVvtECywD///xTBNn93AYhAAcAQ/rKAAD///0NBNn+lgYhAAcAdvuEAAD///wZBNn/AQXdAAcBUvsRAAAAAf0IBLj+cwaPABEAHkAMAgUFDQ0IAAATCxAEAC/MMhEBMxEzMxI5ETMxMAEUBwcjJzY2NTQmIyIHNTYzIP5zpgppDFZOQ0k+ICZFAQAF14wicbAOMisrKQZkCgAB/Tv+oP4C/30ACwARtQYAAA0JAwAvzREBMxEzMTAFNDYzMhYVFAYjIib9OzsqKDo6KCo78jk2Njk3NzcA//8AyQAAA/gHcwImACgAAAEHAEP/2AFSAAizAQ0FJgArNf//AMsAAAVSB3MCJgGyAAABBwBDAGgBUgAIswERBSYAKzX//wBz/+wEEgYhAiYASAAAAQYAQ7cAAAizAhwRJgArNf//ALAAAARiBiECJgHSAAABBgBD3AAACLMBDxEmACs1AAEAhf/sB5EFyQAxAEVAJCIWKicvCQkEJxsWBTIzAB8ZH0lZECgoEwYZBCwlEyVJWQwTEwA/MysRADMYPzMSOS85KxEAMxESARc5ETMRMxEzMTABIgYHJzYzMgAREAAjIiYnIwYGIyAAERASMzIXByYmIyICERASMzI3ETMRFjMyEhEQAgWkPF4tRX6W5AEB/uX/bKxTCFCpa/8A/uX/5Jl8Ri1dPJOlz7uLZqpmjrvOpQUvKR+SUP6I/q3+jf5hLTMyLgGbAXcBUwF4UJIfKf7X/vb+0/6yTAHJ/jdMAUsBMAELASgAAQAAAAAGHQRIAB0AKEAWFwANDgUFHh8bFQ0AEgoEBBYOBQ8EFQA/PzMzEhc5PxESARc5MTABBgYDIwEzExYXMzY2EwMzABYXMzYSETMQAgcjAyYDJwoUs9X+f6z2IC4IE0qOrLIBCS0KCK2ZpsPbtn0hAckaM/6EBEj9SV29NaMBJAHV/P+QLLgBswFS/pb+B+UBWlwAAgAXAAAE/AYUABEAGgBMQCgIBBISAQ8WCwsGDwAEGxwHEQARSVkEAAgaSVkACAAIDwIADxJKWQ8SAD8rABg/Ejk5Ly8rEQAzKxEAMxESARc5ETMRMzMRMzMxMBMhETMRIRUhETMgERQEISERIQEzMjY1NCYjIxcBP6wBov5eyQIx/vf++/5o/sEB69XAtbratgT6ARr+5pT+4P5k0NoEZvwriZCKegAAAgAXAAAEnAUnABEAGQBHQCYEABMTDwsWBwcCCw0EGhsDDQ4NRlkEEkZZBAQLEAAODwsTRlkLFQA/KwAYPzPGEjkvKysRADMREgEXOREzETMzETMzMTABIRUhESEgERQGIyERIzUzNTMRESEgNTQmIwGoAVj+qAE/AbXf3P4h6+umATEBH4ecBEiM/sX+zaaoA7yM3/zN/pe5XFQAAQDJ/+wHIQXLACAASkApFxMTFAYYHQwFGBEUBiEiGwBJWRsEBhIXEklZAxcXFBUDFBIOCUlZDhMAPysAGD8/EjkvMysRADMYPysREgEXOREzETMRMzEwASIEByEVIRIAMzI3FQYjIAADIREjETMRIRIAJTIXByYmBY/j/vwfAr/9PQgBCfeawpje/sH+pQj+oqqqAWQeAXEBMNW2SGSdBTP68Zb+7/7iN5U5AXABVP1QBbb9kgEzAU4CXJIwJgAAAQCw/+wFnARcACEAWUAyFhkZCgMJBQUGECAYAwYFIiMNE0ZZDRAZBAkERlkWDwkfCQILAwkJBgcPBhUAHEZZABYAPysAGD8/EjkvX15dMysRADMYPysREgEXOREzETMRMzMRMzEwBSIAJyERIxEzESE2JDMyFhcHJiMiBgchFSEWFjMyNjcVBgR36/70C/7hpqYBIRgBDd9RmjYyimWjpxACGP3mCamkPXdibhQBCvj+EgRI/jPr9iAZjTOkqo28tRYlkzkAAgAAAAAFbQW2AAsAEgA0QBsCAwcMAw0KBRQTAQUMBUlZEAgMDAcIAwsDBxIAPzMzPxI5LxI5KxEAMxESARc5ETMxMAEjESMRIwEjATMBIwEhJyYnBgcDmJSclf7fsgJongJnt/1cAUxSOB4YQAKq/VYCqv1WBbb6SgM/z5BkYqQAAAIACgAABHkESAALABIANUAcBQYKDAYNAwEGFBMECAwIRlkRCwwMCgsPBgIKFQA/MzM/EjkvEjkrEQAzERIBFzkRMzEwAQEjAyMRIxEjAyMBAyEmJicjBgKoAdGsz3GXc82sAdEhAQ8rOCIJHARI+7gB6f4XAen+FwRI/i1simpcAAACAMkAAAdeBbYAEwAaAEZAJQ4KCgsCAxIVAxQIBwsHGxwFAQkOCUlZFBgMDg4LEAwDEwcDCxIAPzMzMz8zEjkvEjkzKxEAMzMREgEXOREzETMRMzEwASMRIxEjASMBIREjETMRIQEzASMBIQImJwYGBYWPmpP+47oBIv5fqqoB4QEGngJmvP1mAT52HAwTIwKw/VACsP1QArD9UAW2/ZICbvpKA0gBNVYvQ2gAAgCwAAAGFARIABMAGQBNQCsRDQ0OBQYBGQYYCwoOBxobCAQMEQxGWRgVEy8RPxECEREOEw8PDwoGAg4VAD8zMzM/PxI5L10SOTMrEQAzMxESARc5ETMRMxEzMTABASMDIxEjESMDIxMhESMRMxEhExcjBgYHIQRGAc6q0HGYbtGs0f7fpqYBXsVoCAogWQEMBEj7uAHu/hIB7v4SAe7+EgRI/jMBzXMiX9kAAAIAFAAABa4FtgAfACIAS0AoIAEPECEeHh0QAgEHBiQjHgEhHx8hSVkOEh0SSlkiAh0dGB8DEAgYEgA/MzM/EjkvMzMrEQAzKxESADk5ERIBFzkRMxEzETMxMAEVAR4CFxMjAy4CIyMRIxEjIgYGBwMjEz4CNwE1BSEBBSn+WnaaZDKFrokjRGVZG6oaW2NBIIe5iC9jlXb+ZQO+/QoBewW2hf4RBkiLpP47AclvYCb9QgK+J19v/jcBxZ+OSQcB74WZ/jkAAAIADAAABRQESAAgACMATkAqIQEPECIfGB8eEAIBBwclJB8BIiAgIkZZEQ4SHhJHWSMCHh4YIA8QCBgVAD8zMz8SOS8zMysRADMzKxESADk5ERIBFzkRMxEzETMxMAEVAR4DEyMDLgIjIxEjESMiBgYHAyMTPgM3ATUFIQEEi/6uV29JMZushSI6VEwKmQtLUjgnh6qDGDBJblf+sQMg/bQBJQRIaf6gBzBQaf5xAVBXRxz99gIKGkBe/q4BUD1pTzIIAWBpjP7BAAACAMkAAAfFBbYAJAAnAGFANSEdHR4mIw8QAiclAQcBJxAiGyMYHgkpKCMBJCYkJklZEg4cIRxJWScCISEeJAMfAxgQCB4SAD8zMzM/PxI5LzMzKxEAMzMrERIAOTkREgEXOREzETMRMxEzETMRMzEwARUBHgIXEyMDLgIjIxEjESMiBgYHAyMTNjchESMRMxEhATUFIQEHPf5deJllLYioih9GaV8YrBleZEIhh7KHNzj+UqqqAtf+aAPB/QoBewW2hf4OBkiQnP47AcloYyj9RAK8KF9s/jcBvrg6/VAFtv2SAemFmf43AAACALAAAAa6BEgAJAAnAGdAOiEdHR4mIw8QAiclAQcBJxAiGyMYHgkpKCMBJCYkJkZZEg4cIRxGWScCLyE/IQIhIR4kDx8PGBAIHhUAPzMzMz8/EjkvXTMzKxEAMzMrERIAOTkREgEXOREzETMRMxEzETMRMzEwARUBHgMTIwMuAiMjESMRIyIGBgcDIxM2NyERIxEzESEBNQUhAQYx/q5Yb0kwm6yFIjpWSgqaCktUNyaHqoMvJf7NpqYCNf6wAyH9tAElBEhp/p4HMU5p/nIBUFZGHP34AggbP1z+rgFQeCj+EARI/jUBYmmM/scAAQA//k4ENQbRAEsAhEBNABMhPxlGRgo/N0M8KhwtKBMLTE1JFkpZSRM5NDEPLh8uLy4DCQMuKkBDHRwdHEpZHR0QPCoqJEpZKgQKCUlZChAQA0lZECMMB0lZDCIAPysAGD8rABgQxisAGD8rEQAzEjkYLysREgA5GhgQ3V9eXTnEMj8rERIBFzkRMxEzETMxMBcUFjMyNzYzMhcVJiMiBwYjIiY1NDY3NjY1ECEjNTMyNjU0JiMiBgcnNjcmJyc1MxYXNjYzMhcVJiMiBgcWFhUUBgcVFhYVFAQFBgbwV1lheHhGm0dQoERpaWmzuNnozLX+QNrRzeGiiWq7blaovjl1MXtcg1yDQDIwGCssbzCywb+qusv+5f7mioaJNzIHBiemMwUFfYV+gQkIio0BDI+ThGuAN0VychxCeTQbO4hzVg5xClJHF72PjLgaCBiykNDVCQU3AAABABn+ewN/BU4ARgCDQE4XKTYLLhAQIAsDDgg+MkA8KQtHSEQ+QQAFR1kAD0EfQS9BAwkDQT4mGkZZIx1GWQ4zMjMyRlkmIzMzIyYDID4+OEZZCD4QICITLEdZExYAPysAGD8/MysREgAXORgvLy8rERIAOSsrABgQ1F9eXcQrERIAORESARc5ETMRMxEzMTABMhcVJiMiBgcWFhUUBxUWFRQGBw4CFRQWMzI3NzIXFSYmIwcGIyImNTQ2NyQ1NCYjIzUzIDU0IyIGByc2NyYnNTMWFzY2AvgzLRgpL2cteozT+PLhXW0wS1lWeq99JxVUN7OCXJCfvrQBTpyflHcBN/xKj1g7fH5cZ3tLjFiGBU4PcApPPhyKa7g5CEfKlKgDAhcqLDErBQUnjxMYBQV3cHR9AwS+YVqNrKIiJIc3D3ViGzSJblX//wBtAAAF8gW2AgYBdQAA//8ApP4UBYcGEgIGAZUAAAADAH3/7AW+Bc0ACwASABkAR0AlFhAQBhcPDwAGABobFhBJWQ8WAQsDFhYDCQkTSVkJBAMMSVkDEwA/KwAYPysREgA5GC9fXl0rERIBOTkRMxEzETMRMzEwARAAISAAERAAISAAATISEyESEhMiAgMhJgIFvv6d/sT+vf6hAWABRAE7AWL9YeX3DfwrDfno4PsTA9MR9ALd/qH+bgGLAWgBZQGJ/nD8RAERAQz+9f7uBLT+/v8A/gEEAAADAHP/7ARiBFwADAATABoASUAnFxERBxgQEAAHABscFxFGWQ8XHxcCCwMXFwMKChRGWQoQAw1GWQMWAD8rABg/KxESADkYL19eXSsREgE5OREzETMRMxEzMTABEAAjIiYCNRAAMzIAATI2NyEWFhMiBgchJiYEYv7y7pPkfAEM7uYBD/4InqQK/WkJoKCcng0Ckw+hAiX+9P7TigECrQEMASv+zv1NuL+6vQNYraeorAAAAQAAAAAFSAXDABUAIEAQBhYTFxEASlkRBAoFBgMFEgA/PxI5PysRATMSOTEwASIGBwEjATMBFhc2NxM+AjMyFxUmBOE7Tjn+uMX97rQBUkgjIEaiO1RuWSpPOAU3Z7X75QW2/FbHj5DfAga/mEETjRQAAQAAAAAEPQRSABYAHkAPARcPGA0SR1kNEAUBDwAVAD8/OT8rEQEzEjkxMCEBMxMSFzM2ExM+AjMyFxUmIyIGBwMBlv5qruFkEwgXUmAlR1tULR4dJi86HPgESP2b/vRkdgELATV6ezQKfwhUXPzf//8AAAAABUgHcwImAoAAAAEHA3YE1wFSAAq0AgEhBSYAKzU1//8AAAAABD0GIQImAoEAAAEHA3YEZAAAAAq0AgEiESYAKzU1AAMAff4UCaIFzQALABcALgBEQCYMBhIAIS4nGAAGBi8wJSpKWSUbHRwcAyAYDwkVSVkJBAMPSVkDEwA/KwAYPysAGD8zEjkRMz8rERIBFzkRMxEzMTABEAAhIAAREAAhIAABEBIzMhIREAIjIgIlMxMWFzM2NhMzAQYGIyInNRYzMjY3NwVU/rn+3P7X/r0BQwEsASMBRfvd39na3dzY2uEEb7D2ThQIC1PksP4rRbyITEo3Ql51Iz0C3f6g/m8BiwFoAWYBiP5w/qD+1/7NATEBKwEpAS/+0kH9i89mLPsCg/sgtp4RhQxnWZz//wBz/hQIewRcACYAUgAAAAcAXAR1AAAAAgB9/4cGEAYtABMAKABRQCoUCiYNBxEiIgMcHwAAHAcXCgUpKiQiJg0mSVkRDw0DHBoXBxdJWQUDBxIAPzMzKxEAMzMYPzMzKxEAMzMREgEXOREzETMzETMRMzMRMzEwARAABQYjIickABEQACU2MzIXBAABFBIXNjYzMhc2EjU0AicGIyInBgIGEP7R/vgad3wU/vT+0QErARAUfHkWAQwBLfshyr0RSTZuH73Kyr0fbnEfvcoC3f7S/nMsb28pAYoBNgExAYUsbGws/nP+1fT+zykwJlYpATH09AEvJ1hWJ/7TAAACAHP/kwTPBLQAFwAtAFBAKhgMDwkrGyUVAyMAAAMgGwkMBi4vKCUrDytGWRUSDxAgHhsJG0ZZBgMJFQA/MzMrEQAzMxg/MzMrEQAzMxESARc5ETMRMzMRMxEzETMxMAEUAgcGBiMiJicmAjU0Ejc2NjMyFhcWEgUUFhc2NjMyFzY2NRAlBgYjIiYnBgYEz+DMCUA4OT0Jy+Xg0Ag+OThACcri/FB9iQw8NWcYhnz+/A09MzU8DIl9AiXp/t8lNi0rOCQBJuXpASAkOCorOSb+3OGx0h8qIkof0q8BYD4qICAsH9EAAAMAff/sB38IOwAVAEUAVABVQC5DNx8rKwEmRktQSDwMNwpVVhUCAgcHEAxSQEg6IkA6QElZKDoEHBY0FklZLjQTAD8zKxEAMxg/MysRADMYENYa3NTNMhI5LzMREgEXOREzETMxMAEVIyIuAiMiBhUVIzU0NjMyHgIzATI2NxYWMzISERACIyIGByc2MzIAERAAISImJwYGIyAAERAAMzIXByYmIyICERASARQHNTY1NC4CNTQzMhYFohFUjnhmKy88fXRwOnB3hU79KFirPTerXbzSpZM8XytGeZrkAQH+4P79aKpMS6du/vz+4wEB5Jp5RitePJSl0gKA7XgfJB9cOEMHx3kkKyQ0MxAcZ24kLCT4ukI/OUgBTgEtAQsBKCsfklL+iP6t/oz+YigwLSsBnQF1AVUBdlKSHyv+2f70/tH+tAZooj1IKTUUEhEaHElEAAADAHP/7AYEBwYAKgA/AE4AXEAzEwccKCgsIkBFDUpCNgcKT1AyOj8tLTZMQgpAHxAKEEZZAhdGWQIEJQoQGhUEFUZZAAQWAD8zKxEAMxg/MxI5KysRADMaGBDe3NQyETPNMhESARc5ETMRMzEwBSInBiMiAhEQEjMyFhcHJiMiBhUQITI3FhYzIBE0JiMiByc2NjMyEhEQAgMVIyIuAiMiFRUjNTQ2MzIeAjMFFAc1NjU0LgI1NDMyFgQrlF5cj+H6z7o+dyg5WUd0bQExe3A+b0MBLW5zR1k5KHc+u873URBUj3hlK2t9c3A6cXaDTv7w7nceJB5cOEMUQUEBIwEOARcBKCAZizPW1v5eUComAaLW1jOLGSD+1/7q/vX+2galeCQqJGYRH2RvJSsl3aE+SCg4FBERGRtKRAAAAgBe/+wHfwcEAA0AQABfQDQwJDk2PhcXARI2KQwkB0FCDi0nLUlZHjc3IScFCQkNQAkPSA0HAwtAFCcEOzMhM0lZGiETAD8zKxEAMxg/MxreMjLNKzIRMxESOS85KxEAMxESARc5ETMRMxEzMTABFQcjJyMHIycjByMnNQEiBgcnNjMyEhEQACEiJicjBgYjIAAREAAzMhcHJiYjIgIREBIzMjY3ETMRFjMyEhEQAgWLUCAyujEhMbwvIVADQzxdLUZ8meT//uL+/XSsTAlOrHD+/P7jAQHlln5GLV08k6XSvkGCM6pmkbzUpQcEG6xnZ2dnrBv+KykfklD+iP6t/ov+YzAwMS8BoAFyAVUBdlCSHyn+1/72/tH+tCYmAcn+N0wBSgExAQsBKAAAAgAAAAAGHQWkAA0AKgA/QCQkAQ4aGwwSByssKBUOHxYDERIFCQkNQAkPSA0HAwsjGxIPERUAPz8zM94yMs0rMhEzERIXOT8REgEXOTEwARUHIycjByMnIwcjJzUBBwMjATMTFhczNjYTAzMAFhczNhIRMxACByMDJgS2Uh4yvDEfMbwyHlABrCeq1f5/rPYnKQgMI7qssgEJLQoIrZmmw9u2fSEFpBusZ2dnZ6wb/CVf/pYESP1Jb6sjUQGIAdX8/5AsuAGzAVL+lv4H5QFaXAAAAQB9/hQE4wXLABcALUAYAw8JChUKDwMYGRMASVkTBAwGSVkMEwobAD8/KwAYPysREgEXOREzETMxMAEiABEQACEyNxEjESMgABE0EiQzMhcHJgNI9f7gAQoBAm85qhT+tf6frwFI2O2qR6sFM/7A/uj+2v7UF/10AdgBhAFt4AFWuFSSTgABAHP+FAOiBFwAGAAvQBgPAxcWCRYDAxkaFxsGDEZZBhAAEkZZABYAPysAGD8rABg/ERIBFzkRMxEzMTAFIgAREAAzMhYXByYjIgYVFBYzMjY3ESMRAnX+/vwBEftPpDAxjmixq6urNVA5phQBHwESARQBKyIXjTPN3dzIERr9bgHYAAABAGr//AR1BQYAEwAvQCEEAggDBgARBwoQDRIMDg4VFBMAAxEGDwUQBw0KCQwLARIAP80XORESARc5MTABAycTJTcFEyU3BRMXAwUHJQMFBwICtnm2/uFCASHN/t9DASG5drgBIUT+4cwBHkEBOf7DQwFCpnOoAWSmdagBPUP+wKZzpv6eqHMAAQDLBJEDrAW0ABMAHkAMAAYKEAYQFBUDAA0JAC8zMzIREgE5OREzETMxMAEGBiMiJjU0NjMhNjYzMhYVFAYjAYcGKjAzKSo2AcEGKy8zLSw2BPAtMjI1NSkuMDEzOCgAAQD4BOUD2wXXABMAHEALBxIVFAASEgwEgAkALxrMMjMRMxESATk5MTABMjc2MzIWFRUjNTQjIg4CIyM1AQR4lpVRb3R9aitmeY5UEAViOzpvZB8RZiQrJHkAAQHfBNcCzQY1AA4AGEAKCgAMBQADDxADDQAvzBESARc5ETMxMAE0NjMyFRQOAhUUFxUmAd9DOFweJB537gW4OEVMGxkQEhQ2KEpAAAEB4QTXAs8GNQAOABhACgUAAAoCAw8QDAIAL8wREgEXOREzMTABFAc1NjU0LgI1NDMyFgLP7nceJB5cOEMFuKFASig2FBIQGRtMRQAIACn+wQfBBZEADAAaACgANgBEAFIAXwBtAIBASV8oRFoiPgwaBxRSNm1MMGcQbm8ABzpISEFPRUQ+TFZjY1xqZl9abR4sLCUzLyIoAzYQFwdPTGptMzYXFzYzbWpMTwcICQ0UAwkALzMvMxIXOS8vLy8vLy8vETMRFzMRMzMRMxEzMzMRMzMRMxEzMzMRMzMRMxEzERIBFzkxMAEmJiMiBgcjNjMyFhcDJiYjIgYHIzY2MzIWFwEmJiMiBgcjNjYzMhYXISYmIyIGByM2NjMyFhcBJiYjIgYHIzY2MzIWFyEmJiMiBgcjNjYzMhYXASYmIyIGByM2MzIWFyEmJiMiBgcjNjYzMhYXBG8FPEVOMgVLC8VdcQdPBTxFTjIFSwVkZ1xzBgH0BTxETjIFTAVlZ1xzBvsvBTxETjIFTAVlZ1xzBgQxBTxETjIFTAVlZ1xzBvsvBTxETjIFTAVlZ1xzBgTwBTxETjMFSwvGXHMG+b4FPEROMgVMBWVnXHMGBM8sLCkvwmVd+fIsLCkvWWlmXAEWLSsnMVppZl0tKycxWmlmXQPbLSsnMVppZl0tKycxWmlmXf4ZLCwoMMJoWi0rJzFaaGZcAAAIACn+fwd9BdMABwAPABcAHwAnAC4ANQA+ADRAJRUXJSA+OgUBKSwfHDI1CQ0QP0A7KwcuNhkVHREvJw8kMw4FDAUALy8SFzkREgEXOTEwBRcGBgcjNjcDJzY2NzMGBwE3FhYXFSYnBQcmJic1FhcBNzY2NxcGBwEHBgcnNjcDJyYnNxYXARcWFhcHJiYnBDcLEUYkYTUROwsTSR9hNBICIw5HyEHdgftoDkK/T92BA6YCQ75DRbF4/OoCm6lFsXgrEVJFQ3tMA2oRJ1oWQx+CJiMOQr9P3YEEmA5HyEHcgv4WCxNJH2E1ETsLEUYkYTURAaoQJ1gZRG5Y/JUQWT9EblgC3gKMt0bGY/zpAkXCPEYywzQAAAIAyf6DBggHXgAUACIAWUAvDQoMBw4OCRMCAhQUGCAJCgUkIxQSBgUREgUSDgAOCUlZDhIMIh8PGAEYHBUHAAMAPzLeMs1dMj8/KxESADk5ETMRMxg/ERIBFzkRMxEzETMRMzMRMzEwEzMRFAcHMwEzETMDIxMjETQ3IwEjASImJzMWFjMyNjczBgbJoQoECAM0uLiPxZygEwn8yboCQ7qoCpsKXW5pYwmeDLUFtvzRds5TBMb64v3rAX0DJa/3+zUGK4+kbE5dXZ+UAAIAsP6HBRIGDAARAB8AT0AqCgcJBAsLBg8BARAQFR0GBwUhIAMOEBEPCwZGWQsQFQkiHA8VARUZEgQPAD/eMs1dMj8/MysAGD8SOTkREgEXOREzETMRMxEzMxEzMTABERQHATMRMwMjEyMRNDcBIxElIiYnMxYWMzI2NzMGBgFMCgJRz7CBrH2bCP2uzQHsuaoKnAdadGdkCp0MsgRI/WqIiAOm/Ef9+AF5AqCeaPxaBEiRj6RmVFpgnpUAAgAvAAAEfQW2ABEAGQBNQCkIBBISAQ8VCwsGDxEEGhsIGUlZBxEAEUlZBAAIAAgADwIPEkpZDxICAwA/PysREgA5ORgvLxEzKxEAMysREgEXOREzETMzETMzMTATMzUzFSEVIREzIBEUBCEhESMBMyARNCYjIy+aqgFW/qrAAkr+7P7x/m+aAUTdAXu4ydcE/Lq6lv7g/mTS2ARm/CsBGYSAAAACABQAAARMBhQAEgAaAEtAKAQAFBQQDBcICAIMDgQbHAQTRlkDDg8OR1kADwQPBA8MEQAMFEZZDBUAPysAGD8SOTkvLxEzKxEAMysREgEXOREzETMzETMzMTABIRUhESEyFhUUBiMhESM1MzUzEREhIDU0JiMBVgEn/tkBQN/X4N3+IZycpgExAR+EnwUfgf3lmpukqgSegfX74P6XuVxUAAACAMkAAAR5BbYADwAcAEhAKRAKCgsYAAAEBQMWBhUTFAsKHR4WExwQDBxKWQkQSlkGAwwJCQsMAwsSAD8/EjkvEjk5KysREgA5ORESARc5ETMRMxEzMTABFAYHFwcnBiMjESMRISAEATMyNyc3FzY1NCYjIwR5c2x4ZJVmiLiqAYkBEgEV/PqmV0xsbIx/wsrIBAx/yTmdVMAb/cEFttf98gqNUrBIspGOAAIAsP4UBHUEXAAYACkAVUAxHQsEBwcIJxISFRYUJRciJCMICiorJSIZIA8ZRlkMCwsEFBcEAA8QCQ8IGwAgRlkAFgA/KwAYPz8/Ehc5ETMrERIAOTkREgEXOREzETMRMzMzMTAFIiYnIxYVESMRMxczNjYzMhIREAcXBycGAyIGBxUUFjMyNyc3FzY1NCYCrmuxPAwMpocZCECpbdrtt3Nkg0dtqJYCmqovKXlqgWWWFE9SlCL+PQY0llpQ/tb+8/6ukZxQrhgD47rLJefHDJ5Qqmf519EAAAEALwAABAgFtgANADxAHwMHBwwIAAUICgQODwYKCwpJWQMLCwgNDQJJWQ0DCBIAPz8rERIAORgvMysRADMREgEXOREzMxEzMTABFSERIRUhESMRIzUzEQQI/WsBqP5YqpqaBbaZ/gKW/XcCiZYClwABABIAAANCBEgADQA8QB8CBgYLBwAEBwkEDg8FCQoJR1kCCgoHDAwBRlkMDwcVAD8/KxESADkYLzMrEQAzERIBFzkRMzMRMzEwASERIRUhESMRIzUzESEDQv4UAVr+pqaengKSA7z+qH/+GwHlfwHkAAABAMn+AATbBbYAGwBBQCMJAwMEGQ4OBxQEBBwdERdJWREcCwBJWQsLBAUFCElZBQMEEgA/PysREgA5GC8rABg/KxESARc5ETMRMxEzMTABIgcRIxEhFSERNjMgABEQACEiJic1FjMgETQAAjFkWqoDSf1hWnkBQAFV/uL+/VN9RnuJAX//AAKPDP19BbaZ/fwK/q3+xv7F/qUVHJgxAf71AQQAAAEAsP4KA/oESAAbAEFAIwgZFA4ODw8CEhkEHRwWC0ZZFhYPEBATRlkQDw8VAAVGWQAbAD8rABg/PysREgA5GC8rERIBFzkRMxEzETMxMAEiJzUWMzI2NTQmIyIHESMRIRUhETYzIAAREAICRpFldHuFiLK1RUqmApr+DFI7ARABB+T+CjyVP8rX39AR/iUESI7+twz+5f7Z/vX+2gAAAQAC/oMG+AW2ABUATUApBhERAxINDAwICRIAARUHFhcSFRITEAkGAwAADwEPCklZDxINIgcEAQMAPzMzPz8rERIAOREzMzMzMxg/MxESARc5ETMRMzMRMzEwAQEzAREzEQEzAQEzESMRIwERIxEBIwJW/cG+AjmkAjq+/cAB2rSiXv26pP27xwLwAsb9PALE/TwCxP08/aj96QF9AuX9GwLl/RsAAAEABP6HBh8ESAAVAEtAKAINDRUOCQgIBAUOEhMRBxYXFQ8MBQISEgsDABMPDhEVCwZGWQsVCSIAPz8rABg/Mz8zMxI5ETMzMzMzERIBFzkRMxEzMxEzMTABMxEBMwEBMxEjESMBESMRASMBATMBAqSZAcW2/jYBcMGiXv4emf4fvwHw/je2AcMESP3tAhP97f5a/fgBeQIt/dMCLf3TAjUCE/3tAP//AEr+QgQ1BcsCJgGxAAAABwN/AVgAAP//AET+QgN/BFwCJgHRAAAABwN/AQgAAAABAMn+gwUrBbYADwA7QCAMCAgJAwICDg8GCQUQEQ8MBgMFDQoDCRIFAElZBRIDIgA/PysAGD8/MxIXORESARc5ETMRMxEzMTAlMxEjESMBBxEjETMRATMBBH+somb96ZmqqgKXyf20mv3pAX0CxYj9wwW2/SsC1f2FAAEAsP6FBD0ESAAOADpAHw4KCgsGBQUBAgsEDxACDgkDCAAMDwsVCANGWQgVBiIAPz8rABg/PzMSFzkREgEXOREzETMRMzEwATMBATMRIxEjAREjETMRAy+2/icBf7KfVP4MpqYESP3v/lj99gF7Aiv91QRI/esAAAEAyQAABOkFtgASADhAHgYCAgMKEREHEg4MEgMEExQICgYAEBIGAwsEAw8DEgA/Mz8zEhc5ERIBFzkRMzMRMxEzETMxMAEHESMRMxE3ETMVATMBASMBESMB8H2qqn19AZvL/bQCYsj+TH0CqGv9wwW2/SWLAV3TAcb9hfzFAlz+zwABALAAAAQ7BEgAEwA6QB8GAgIDDgoSEgcTDwwTAwQUFQgKBgEREwYDCwQPEAMVAD8zPzMSFzkREgEXOREzMxEzMxEzETMxMAEnESMRMxE3ETMVATMBFQEjARUjAc13pqZ3gwEOtv48AevC/tWBAbJ5/dUESP3reQFKzQEf/iVr/f4BO90AAAEALwAABOkFtgATAEdAJggEEBABEQsODAoGDhETBhQVBxMAE0lZBAsIDgMRAAACDRESCQIDAD8zPzMSOS8SFzkzKxEAMxESARc5ETMRMzMRMzMxMBMzNTMVMxUjEQEzAQEjAQcRIxEjL5qq3d0Clcv9tAJizv3xmaqaBQSyspf+bgLb/YX8xQLFhv3BBG0AAAEAFAAABBsGFAAZAE1AKwoIBBYWARcSEAYRFxkGGhsUCg8TFxUHGQAZR1kEDwAfAC8AAwAAAg8PAgAAPz8SOS9dMysRADMYPzMSOTkREgEXOREzMxEzMzMxMBMzNTMVIRUhEQcHMzc2NgEzAQEjAQcRIxEjFJykAX3+gwMDCBI3KAFwx/5EAdnH/n19pJwFWrq6f/3oWzcYSjABhf4t/YsCBGr+ZgTbAAEAEAAABYMFtgANADVAGwIKCgsFCAYECAsEDg8IAgAHCxIDAwANSVkAAwA/KwAYPz8zEjk5ERIBFzkRMxEzETMxMBMhEQEzAQEjAQcRIxEhEAH8ApbL/bQCYsn97Jqq/q4Ftv0lAtv9hfzFAsWI/cMFHQAAAQApAAAE4wRIAAwANUAbBQEBCQkKDAoEBgQODQgCAAcKFQMPAAxGWQAPAD8rABg/PzMSOTkREgEXOREzETMRMzEwEyERATMBASMBESMRISkCAgHbtv4nAgDC/gqk/qIESP3rAhX97f3LAiv91QO8AAEAyf6DBcEFtgAPAERAJAwICAkNBQUAAwICAAkDEBEMB0lZDAwFDgoDCRIFAElZBRIDIgA/PysAGD8/MxI5LysREgEXOREzETMRMxEzETMxMCUzESMRIxEhESMRMxEhETMFH6Kiqvz+qqoDAqqa/ekBfQKw/VAFtv2SAm4AAAEAsP6HBPgESAAPAE5AKwENDQ4CCgoFCAcHBQ4DEBEBDEZZDwEfAQILAwEBCgMPDw4VCgVGWQoVCCIAPz8rABg/PzMSOS9fXl0rERIBFzkRMxEzETMRMxEzMTABESERMxEzESMRIxEhESMRAVYCZqaWppb9mqYESP41Acv8R/34AXkB7v4SBEgAAAEAyQAABm8FtgANAD9AIQoGBgcLAwMCAAIHAw4PCgVJWQoKBwwMAUlZDAMIAwMHEgA/Mz8/KxESADkYLysREgEXOREzETMRMxEzMTABIREjESERIxEzESERIQZv/rCs/QCqqgMAAfwFHfrjArD9UAW2/ZICbgABALAAAAXBBEgADQBJQCcBCwsMAggIBwQHDAMODw0PAQpGWQ8BHwECCwMBAQMIDBUDBkZZAw8APysAGD8zEjkvX15dKwAYPxESARc5ETMRMxEzETMxMAERIREhFSERIxEhESMRAVYCZgIF/qGm/ZqmBEj+NQHLjPxEAe7+EgRIAAEAyf4ACB0FtgAdAEdAJgQFCAAAARcNDRIBBQQeHxAVSVkQHAoaSVkKCgUGBgNJWQYDAQUSAD8zPysREgA5GC8rABg/KxESARc5ETMRMxEzETMxMCEjESERIxEhETYzIAAREAAhIic1FjMgETQCIyIGBwTZqv1EqgQQRH0BMgFR/uX+/px7hn8BeuboKn8YBR364wW2/WEM/qj+yP7H/qYxmDEB/vIBBQcFAAABALD+CgaoBEgAHABHQCYREhUNDQ4HGhoCDhIEHR4XCkZZFxcSExMQRlkTDw4SFQAFRlkAGwA/KwAYPzM/KxESADkYLysREgEXOREzETMRMxEzMTABIic1FjMyETQmIyIHESMRIREjESERNjMyABEQAgUXg2FtbPCmrENIqP3fpgNvS0L2AQbR/go8lT8Bod/QFf4pA7j8SARI/icO/tf+5/70/tsAAgB9/6wF4QXNACgANABQQCwbES8jKQAIAAMWICMRBzU2JixKWQwyJiYOFBQZSVkUBAoFSVkKDg4eSVkOEwA/KwAYEMQrABg/KxESADkYLzk5KxESARc5ETMRMxEzMTABFAIHFjMyNxUGIyInBiMgABEQACEyFwcmIyAREBIzMjcmAjU0EjMyEgM0JiMiBhUUFhc2NgW4inRCWk49OFuylGaQ/sr+oQFJATp/XC9UWv4z/+s2LlZcxq+1wbBnXV5nXVNmcwKmtf7LVh4WmRlkJAGJAVYBeAGKI5Ec/Z7+4P7OCmcBHKD0AQr+9v7+sczJsIz+VUP/AAACAHP/xwTTBFwACgA1AFBALB4TACYGLDQsLxgkJhMHNjcpCEdZDQMpKQ8WFhtGWRYQCzFGWQsPDyFGWQ8WAD8rABgQxCsAGD8rERIAORgvOTkrERIBFzkRMxEzETMxMAEUFhc2NjU0IyIGASInBiMiJiY1EBIzMhcHJiMiBhUUFjMyNjcmNTQ2MzIWFRQGBxYzMjcVBgLuRD9EU4dISwFmk4Jge5XievjjW00lNk+ckaqkJTUGi6iXlJ1rXjRDQjEnAfJeoTUsnm7rff1jTSiL/qQBEwEwFooT0efO0gkDlOGtwb2xfdFAGg6JDgD//wB9/kIEzwXLAiYAJgAAAAcDfwIlAAD//wBz/kIDiwRcAiYARgAAAAcDfwGDAAAAAQAQ/oMEWgW2AAsAMkAbBgsICQMJCwEEDA0LBklZCxIJIgUBAgFJWQIDAD8rEQAzGD8/KxESARc5ETMRMzEwASE1IRUhETMRIxEjAd/+MQRK/jGioqwFHZmZ+3396QF9AAABACn+hwORBEgACwA0QBsGCwgJAwkLAQQMDQkiBQECAUZZAg8LBkZZCxUAPysAGD8rEQAzGD8REgEXOREzETMxMAEhNSEVIREzESMRIwGJ/qADaP6elqaWA7yMjPzT/fgBeQD//wAAAAAEewW2AgYAPAAAAAEAAP4UBAIESAANAClAFAABDAEDAw4PCAcNBwILAw8CFQEbAD8/PzMSOTkRMxESARc5ETMxMAEjEQEzExYXMzY3EzMBAlSm/lKs7FMTCCFG6az+Uv4UAegETP2b3mGKtQJl+7QAAAEAAAAABHsFtgAQADpAHgQICA0JAgYJCw8FERIHCwwLSVkEAA8MDAkBDwMJEgA/PzMSOS8SOTMrEQAzERIBFzkRMzMRMzEwAQEzARUhFSERIxEhNSE1ATMCPQGGuP4YASv+1az+0wEt/hm6AtsC2/yBO5j+nAFkmDMDhwABAAD+FAQCBEgAEwA8QB8RAQEGAhATAgQHBRQVDAsLBQ8HDwAEBQRHWREFFQIbAD8/MysRADMYPzMSOREzERIBFzkRMzMRMzEwBREjESE1IQEzExYXMzY3EzMBIRUCVKb+6gEU/lSs7FMTCCFG6az+VAESgf6VAWuBBEj9m95hirUCZfu4gQAAAQAI/oME1QW2AA8AN0AgAwICDg8MBgkKCAgQEQwPCQYEBQ0KAwgSBQBJWQUSAyIAPz8rABg/PzMSFzkREgEXOREzMTAlMxEjESMBASMBATMBATMBBDOiol7+d/5wtAHm/ju8AWsBbrX+O5r96QF9AoP9fQL8Arr9vQJD/UwAAQAn/oUENwRIAA8AOUAhCgkJBQYDDQABDwgQEQ8VAwYADQQMAQwHRlkMFQoiBAEPAD8zPz8rERIAFzkYPxESARc5ETMxMAEBMwEBMwEBMxEjESMBASMBuP6DvQEhASC7/oMBK5WmRf7N/sq8AjECF/5cAaT96f5e/fYBewG8/kQAAAEAEP6DBqgFtgAPAEBAIgwFAA0DAgINCgUHBRARDgMLBwgHSVkIAwAMBQxJWQUSAyIAPz8rEQAzGD8rEQAzGD8REgEXOREzETMRMzEwJTMRIxEhESE1IRUhESERMwX+qqL7tP5WBC/+JQLwqpr96QF9BR2Zmft9BRwAAQAp/ocFmARGAA8AP0AiAgsGAwkICAMACw0FEBEBDQ4NRlkODwYCCwJGWQsVCSIEDwA/Pz8rEQAzGD8rEQAzERIBFzkRMxEzETMxMAEhESERMxEzESMRIREhNSEDef6XAkamnKb8eP6/A1ADuvzVA7f8Sf34AXkDuowAAAEAqv6DBWgFtgAXADtAHxUABQMCDwwCBQwDGBkSCUlZEhIFFg0DBQBJWQUSAyIAPz8rABg/MxI5LysREgEXOREzETMRMzMxMCUzESMRIxEGBiMiJjURMxEUFjMyNjcRMwTHoaGqlcZqz9+qf49hsamqmv3pAX0CXDUnvrMCRf3PeXQdNwLKAAABAJz+hQTDBEgAFgA7QB8BFQkGDgwLCw4VAxcYAxJGWQMDDgcWDw4JRlkOFQwiAD8/KwAYPzMSOS8rERIBFzkRMxEzMxEzMTABERQzMjY3ETMRMxEjESMRBgYjIiY1EQFC21umaaaWppZps3GkugRI/nDAOEMB1fxH/fYBewHwSDuskwGcAAEAqgAABMcFtgAWAEpAJgUCCxUVCBYNEREQEBYCAxcYFAAIAElZCwgWCAkJCBYDAxESDgMDAD8zPxIXOS8vLxEzKxEAMxESARc5ETMRMxEzMxEzETMxMAEgEREzERQWMxEzETY3ETMRIxEGBxEjAnX+NaqHmn2Go6ysqIF9AgABcQJF/c93dgFc/qoNPALP+koCWEER/s8AAQCcAAAEHQRIABcASkAmARYGEBADEQgMDAsLERYDGBkPEwMTRlkGAxEDBAQDEQMMCRcPDBUAPz8zEhc5Ly8vETMrEQAzERIBFzkRMxEzETMzETMRMzEwAREUFxEzETY3ETMRIxEGBxUjNSMiJjURAULId3GFpqaAdncWoLgESP5wugYBLf7dGFkB1fu4AfBbGvjqqpUBnAABAMkAAATlBbYAEgAvQBcCERESCQgIEhQTBA1JWQISBAQJEhIAAwA/PzM5LxI5KxESATk5ETMRMxEzMTATMxEkMzIWFREjETQmIyIGBxEjyaoBAMTP36p/j2u6laoFtv2kXL+x/boCMXh2IjL9NQAAAQCwAAAEQgRIABIAL0AXABILBwcIEggUEw4DRlkLDg4ICQ8ACBUAPzM/EjkvOSsREgE5OREzETMRMzEwIRE0IyIGBxEjETMRNjYzMhYVEQOa2Vicd6amX7pyo74BjcExSv4tBEj+DkU+qJf+ZgACAD3/7AY/Bc0AIAAnAFFAKgUDACQREQgeJRAQGB4ABCgpER4HHklZJAcCBwIbDBsUSVkbEwwhSVkMBAA/KwAYPysREgA5ORgvLzMrEQAzERIBFzkRMxEzMxEzETMzMTATNDczBhUUMzM3EgAhIAARFSESADMyNjcVBgYjIAADIiYBIgIHIRAmPRuRFHEiBR0BTQEXASkBKPvcDgEF92XKjXLdgv7G/qMTjpsDr9HwEANuywOHSTYyPGcrASoBR/6F/o9F/vj+7x8rnCceAWQBTHYCI/71+QEJ+wAAAgAz/+wE3QRaAB8AJgBMQCgKCAUWDSQVFR0NAwUFJygWAwwDRlkjDAcMBwARESBGWREQABlGWQAWAD8rABg/KxESADk5GC8vMysRADMREgEXOREzETMRMzMxMAUiACckNTQ3MwYVFDMzNzY2MzISFRUhFhYzMjY3FQYGAyIGByE0JgNK8/7sBv72GY0UahUGIvq3z/H9DAasrWWfYlidoIaXDgI9jBQBHvwE3UUyLztnI8rg/vfiacbDICqUJiED46SenaUAAgA9/oMGPwXNACIAKQBdQDELCQYmFxcOAyEiJxYWHiIDBgUqKyIiIBMXAw0DSVkmDQgNCAASEiNJWRIEABpKWQATAD8rABg/KxESADk5GC8vMysRADMYPz8REgEXOREzETMRMzMRMxEzMzEwBSQAAyImNTQ3MwYVFDMzNxIAISAAERUhEgAzMjY3FQYHESMTIgIHIRAmA6D+/v7bE46bG5EUcSIFHQFNARcBKQEo+9wOAQX3ZcqNsOumTNHwEANuywwdAVoBMXZ1STYyPGcrASoBR/6F/o9F/vj+7x8rnD4F/pUGsv71+QEJ+wACADP+hwTdBFoAIQAoAFhALwoIBRYNICEmFRUdIQ0DBQYpKiEiHxYWAwwDRlklDAcMBwARESJGWREQABlGWQAVAD8rABg/KxESADk5GC8vMysRADMYPz8REgEXOREzETMRMxEzMzEwBSYCJyQ1NDczBhUUMzM3NjYzMhIVFSEWFjMyNjcVBgcRIxMiBgchNCYC1b/TBv72GY0UahUGIvq3z/H9DAasrWWfYo6lpkSGlw4CPYwKHwER4ATdRTIvO2cjyuD+9+JpxsMgKpRBBP6ZBUiknp2lAP//AFQAAAJWBbYCBgAsAAD//wACAAAGvAdgAiYBsAAAAQcCNgEQAVQACLMBEgUmACs1//8ABAAABd8GDAImAdAAAAEHAjYApAAAAAizARIRJgArNQABAMn+AAUZBbYAHABCQCUHAwMEGg4OCQoUBAUdHhEXSVkRHAcCSVkLAEpZBwsLBAgFAwQSAD8/MxI5LzkrKwAYPysREgEXOREzETMRMzEwASIHESMRMxEBMwE3IAAREAAhIiYnNRYzMhI1NCQCXoxfqqoCic39hRoBTwFi/tn+9VJ8RnqYu8j+6wJ7H/2kBbb9PALE/VQC/rv+z/7G/qQUHZgxAQ3x6P0AAAEAsP4KBCEESAAcAEJAJQQAAAEXChAKBgcBBR0eDhRGWQ4bBBxHWQcaRlkEBwcBBQIPARUAPz8zEjkvOSsrABg/KxESARc5ETMRMxEzMTAhIxEzEQEzAQQSERQGBiMiJzUWFjMyNjU0JiMiBwFUpKQB47f+NwEA/G7MhYhfLmxHh5i7vlJcBEj9+gIG/h4E/uT+9bH8hDyRGSbZyNPPGAABAAD+gwWRBbYAFwA5QB8DAAUEAQEFDgMYGRYHSVkWAwwRSlkMEgUASVkFEgMiAD8/KwAYPysAGD8rERIBFzkRMxEzMzEwJTMDIxMjESEHAgIGJyInNRYzMjY2EhMhBNm4j8Wcqv4lHz1dmH5KOzY7NU89XTgDEpr96QF9BR/w/iH+Ra4CGY8aV9cCWQG4AAABABD+hwSPBEYAFAA5QB8DAAUEAQEFDQMVFhMHRlkTDwsQR1kLFQUARlkFFQMiAD8/KwAYPysAGD8rERIBFzkRMxEzMzEwJTMDIxMjESECAgYjIic1FjMyEhMhA9+wgax9pv61HF6YdjocFhxxiSICgY/9+AF5A7j+mP5kwAp/BgHZAfYAAAEAyf4ABR8FtgAVAD1AIBIODg8TCwsAAAYPAxYXEg1JWRISDxQQAw8SAwlJWQMcAD8rABg/PzMSOS8rERIBFzkRMxEzETMRMzEwJRAAISImJzUWMyARESERIxEzESERMwUf/ub++1J6TXuHAYz8/qqqAwKqlv7C/qgTHpYxAfcCI/1QBbb9kgJuAAEAsP4KBGIESAAVAEdAJw8LCwwQCAgTEwIMAxYXDwpGWQ8PHw8CCwMPDwwRDQ8MFQAFRlkAGwA/KwAYPz8zEjkvX15dKxESARc5ETMRMxEzETMxMAEiJzUWMzI2NREhESMRMxEhETMREAIC04Rdb2Z9dv2cpqYCZKjP/go6lT3GzwG9/hIESP41Acv76/70/uMAAQDJ/oMF1wW2AA8AREAkDAgICQ0DAAUEAQEFCQMQEQwHSVkMDAUOCgMJEgUASVkFEgMiAD8/KwAYPz8zEjkvKxESARc5ETMRMzMzETMRMzEwJTMDIxMjESERIxEzESERMwUfuJHFnqr8/qqqAwKqmv3pAX0CsP1QBbb9kgJuAAABALD+hwUSBEYADwBEQCQBDQ0OCAUCCgkGBgoOAxARAQxGWQEBCgMPDw4VCgVGWQoVCCIAPz8rABg/PzMSOS8rERIBFzkRMxEzMzMRMxEzMTABESERMxEzAyMTIxEhESMRAVYCZqawgax9pv2apgRG/jcByfxJ/fgBeQHu/hIERgAAAQCq/oMExwW2ABcAPUAgDwwCAxUFBQAAAwwDGBkSCUlZEhIBFg0DAyIBBElZARIAPysAGD8/MxI5LysREgEXOREzETMRMxEzMTAhIxEjETMRBgYjIiY1ETMRFBYzMjY3ETMEx6qiopXGas/fqn+PYbGpqv6DAhcBwjUnvrMCRf3PeXQdNwLKAAEAnP6FBC0ESAAWAD1AIAEVCwwGDg4JCQwVAxcYAxJGWQMDCgcWDwwiCg1GWQoVAD8rABg/PzMSOS8rERIBFzkRMxEzETMRMzEwAREUMzI2NxEzESMRIxEzEQYGIyImNREBQttbpmmmlaaVabNxpLoESP5wwDhDAdX7uP6FAgoBYUg7rJMBnAABAMn+gwcpBbYAGABIQCUJBgYHEQ4MExIPDxMHAxkaFxYCCwITCBMOSVkTEhEiDAgDAAcSAD8zPzM/PysREgA5OREzMxESARc5ETMRMzMzETMRMzEwIQEjFxYVESMRIQEzATMRMwMjEyMRNDcjAQNQ/hAIBwedAQAB0QgB0f64j8eeqg4I/gwFEH/AL/xeBbb7SgS2+uT96QF9A66E3PryAAABALD+hwXfBEYAGAA/QCATFAgFCgkGBgoUAxkaCxIAEg8DFQ8UFQoFRlkKDxUIIgA/PzMrABg/PzMSOTkRMxESARc5ETMRMzMRMzEwJTc3ATMRMwMjEyMRBwcBIwEmJxEjETMBFgLpHysBKdOwgax9kxQ6/uWL/uU1FJTLASktoF12AtP8Sf34AXkDiTqZ/UoCuIZL/HcERv0tbv//AFQAAAJWBbYCBgAsAAD//wAAAAAFEAdeAiYAJAAAAQcCNgA5AVIACLMCDwUmACs1//8AXv/sA80GDAImAEQAAAEGAjboAAAIswIlESYAKzX//wAAAAAFEAclAiYAJAAAAQcAagA9AVIACrQDAiQFJgArNTX//wBe/+wDzQXTAiYARAAAAQYAavMAAAq0AwI6ESYAKzU1/////gAABoEFtgIGAIgAAP//AF7/7AZzBFwCBgCoAAD//wDJAAAD+AdeAiYAKAAAAQcCNgAQAVIACLMBDAUmACs1//8Ac//sBBIGDAImAEgAAAEGAjYMAAAIswIbESYAKzUAAgB1/+wFWAXNABIAGQA9QCAXDhAWFgkJAg4DGhsPF0lZDw8MBgwTSVkMEwYASVkGBAA/KwAYPysREgA5GC8rERIBFzkRMxEzETMxMAEiBzU2NjMgABEQACEgETUhAgADMhI3IRAWApjj4nPShgFLAW/+pv7L/awELxH++cPS+RD8h8wFNUyeJiD+cf6b/qL+cQLrRgEKAQ77TgEN9/74/AAAAgBm/+wEBgRcABQAGwA7QB8ZCRgLAwMRCQMcHQoZRlkKCgYABhVGWQYWAA5GWQAQAD8rABg/KxESADkYLysREgEXOREzMxEzMTABMgAREAAjIgI1NSEmJiMiBgc1NjYTMjY3IRQWAfr1ARf+/drQ8wL0BbOmYqVfWaKahZoM/cONBFz+1P77/vj+yQEM4WnMuyEpkygi/BulnJ2kAP//AHX/7AVYByUCJgLhAAABBwBqAJMBUgAKtAMCLwUmACs1Nf//AGb/7AQGBdMCJgLiAAABBgBq6gAACrQDAjERJgArNTX//wACAAAGvAclAiYBsAAAAQcAagEQAVIACrQCAScFJgArNTX//wAEAAAF3wXTAiYB0AAAAQcAagCiAAAACrQCAScRJgArNTX//wBK/+wENQclAiYBsQAAAQcAav/zAVIACrQCAT4FJgArNTX//wBE/+wDfwXTAiYB0QAAAQYAapQAAAq0AgE4ESYAKzU1AAEASv/sBDcFtgAZAEBAIwATFRkPAwMZExYIBRobGRYXFklZABJKWQAABhcDBgxKWQYTAD8rABg/EjkvKysRADMREgEXOREzETMRMzEwAQQEFRQEISAnNRYWMzI2NTQmIyM1ASE1IRUB/AEXAST+zf7q/v+jYN5qx8rh34wB7v1OA4cDPwnTwc7oT54uMpmQhoqNAd6ZiwAAAQAb/hQDpgRIABkAQEAjABMVGQ8EBBkTFgkFGhsZFhcWRlkAEkdZAAAHFw8HDEZZBxsAPysAGD8SOS8rKxEAMxESARc5ETMRMxEzMTABHgIVFAAjIic1FjMyNjU0JiMjNQEhNSEVAayV5n/+2O/qirfIocXWynkBxf2JAzgBzwdyyoje/u5Gmla+oKSqcgH+jnsA//8AywAABVIGtAImAbIAAAEHAU0AtAFSAAizARMFJgArNf//ALAAAARiBWICJgHSAAABBgFNMQAACLMBEREmACs1//8AywAABVIHJQImAbIAAAEHAGoAvgFSAAq0AgElBSYAKzU1//8AsAAABGIF0wImAdIAAAEGAGo9AAAKtAIBIxEmACs1Nf//AH3/7AW+ByUCJgAyAAABBwBqANEBUgAKtAMCLQUmACs1Nf//AHP/7ARiBdMCJgBSAAABBgBqHQAACrQDAi4RJgArNTX//wB9/+wFvgXNAgYCfgAA//8Ac//sBGIEXAIGAn8AAP//AH3/7AW+ByUCJgJ+AAABBwBqANEBUgAKtAQDLwUmACs1Nf//AHP/7ARiBdMCJgJ/AAABBgBqGwAACrQEAzARJgArNTX//wA9/+wEiQclAiYBxwAAAQcAav/tAVIACrQCATAFJgArNTX//wA5/+wDfQXTAiYB5wAAAQYAao4AAAq0AgEwESYAKzU1//8AG//sBPgGtAImAb0AAAEHAU0ALwFSAAizARoFJgArNf//AAL+FAQGBWICJgBcAAABBgFNrQAACLMBGREmACs1//8AG//sBPgHJQImAb0AAAEHAGoAOwFSAAq0AgEsBSYAKzU1//8AAv4UBAYF0wImAFwAAAEGAGq3AAAKtAIBKxEmACs1Nf//ABv/7AT4B3MCJgG9AAABBwFTAI0BUgAKtAIBKgUmACs1Nf//AAL+FAQGBiECJgBcAAABBgFTBAAACrQCASkRJgArNTX//wCqAAAExwclAiYBwQAAAQcAagBqAVIACrQCASkFJgArNTX//wCcAAAELQXTAiYB4QAAAQYAahcAAAq0AgEoESYAKzU1AAEAyf6DBAgFtgAJAC1AGAQJBgcBBwkDCgsJBElZCRIHIgADSVkAAwA/KwAYPz8rERIBFzkRMxEzMTATIRUhETMRIxEjyQM//WuhoaoFtpn7ff3pAX0AAQCw/ocDQgRGAAkALUAYBAkGBwEHCQMKCwkERlkJFQciAANGWQAPAD8rABg/PysREgEXOREzETMxMBMhFSERMxEjESOwApL+FJamlgRGjPzV/fgBef//AMkAAAYKByUCJgHFAAABBwBqARsBUgAKtAQDLQUmACs1Nf//ALAAAAV5BdMCJgHlAAABBwBqAMUAAAAKtAQDLBEmACs1Nf//AC/+dQQIBbYCJgKbAAAABwOAAJMAAP//ABL+dQNCBEgCJgKcAAAABgOBdQD//wAI/nUEyQW2ACYAOwAAAAcDgANYAAD//wAn/nUENARIACYAWwAAAAcDgQLDAAAAAQAGAAAElgW2ABEAO0AiDwIRARANBAoHCQYLDBMSChEAEUlZBw0PBAAAAgwPEgUCAwA/Mz8zEjkvORI5MysRADMREgEXOTEwEyEBMwEBMwEhFSEBIwEBIwEhfwEz/ne8AWsBbLf+cAE8/roBvcH+d/5wtgG//roDVAJi/bsCRf2emP1EAoP9fQK8AAABACcAAAQIBEgAEQA7QCIPAhEBEA0ECgcJBgsMExIKEQARR1kHDQ8EAAACDA8VBQIPAD8zPzMSOS85EjkzKxEAMxESARc5MTATIQEzAQEzASEVIQEjAQEjASF1ARL+tL0BIQEgu/6yARj+4gFovP7N/sq8AWb+6AJ3AdH+XAGk/i+B/goBvP5EAfYAAAIAgwAABDcFtgAKABMANEAaBBMTBw8ABwAVFAMMSVkDAwgFCBJKWQgSBQMAPz8rERIAORgvKxESATk5ETMRMxEzMTATNCQhMxEzESEgJAEjIgYVFBYzM4MBJAEgxqr+Y/71/vQDCrrewrbL2QGk1M4CcPpK1QHbfI6PhP//AHP/7AQ3BhQCBgBHAAAAAgCD/+wGdwW2ABkAIwBGQCQeAxgKCgcjDxISIwMDJCUGG0lZGAYQBhAACAMMIAAgSlkVABMAPzIrEQAzGD8SOTkvLzkrERIBFzkRMxEzMxI5ETMxMAUiJjU0JCEzETMRFDMyNjURMxEUBiMiJicGEyMiBhUQITI2NQJO4ukBKgEikarmZHmqz7h2nzNxKZfUwgEhf40S0dDZ3gJw+7fse24B5v4Yrs5SWqoCwIuW/vR3cAAAAgBz/+wGhwYUACIALgBRQCksEwwgIB0aJgMGBiYTAy8wHgANEBoWBAQQFhYqRlkWEAAjECNGWQkQFgA/MysRADMYPysREgA5GC8SORI5PxESARc5ETMRMzMzEjkRMzEwJTI2NREzERQGIyImJyMGBiMiAhEQEjMyFhczJiY1ETMRFBYhMjY1NTQmIyARFBYE/nZrqMi9gZ4rCEu5gdDo589qnz8MAgimbf25opKUov7ii3eEiAE5/r3IxVtxcVsBKQEMAQwBL01VEXAbAb77jKCJuc4j58n+TtbSAAEATv/sBoEFywAqAEtAKAYTKBkfIiIWGRMBDQYrLBcCAQIBSlkCIAIgJRAlHElZJRMQCUpZEAQAPysAGD8rERIAOTkYLy8rERIAORESARc5ETMRMxEzMTABIzUzMjY1NCYjIgYHJzY2MzIWFRQGBxUEExYWMzI2NREzERQGIyImJyYmAa7JwcDVmoBnsWdUXfaC1vWynAFiBgJsfHdwqNK9ytACAs0CrI+ThGx/N0VySFDEp423Gggz/tGWf3mHAc3+KcbH0ciWkQABAFD/7AXFBFwAJQBLQCgSHgokAgUFJB4gDhgGJichDw4PDkZZDwMPAwgbGxRGWRsQCABGWQgWAD8rABg/KxESADk5GC8vKxESADkREgEXOREzETMRMzEwJTIRETMRFAYjIAMmJiMjNTMgNTQjIgYHJzY2MzIWFRQHFRYWFxYEQt2mu8T+hhAFjZSMbwEh8kuHTTlVo2i408BjewUJdwEMATn+vcrDAU1jWI2soiQihygkm4a4OQgUemrTAAEATv6DBNEFywAjAEpAKBkaHiMhICAWGiMEEAYkJRoFBAUESlkFBSMTIx5JWSMSISITDEpZEwQAPysAGD8/KxESADkYLysREgA5ERIBFzkRMxEzETMxMAE0JiMjNTMyNjU0JiMiBgcnNjYzMhYVFAYHFRYWFREzESMRIwOD5eLZ0c3hpIdpw2lUYf6E3P29o7jDrKKsAZyFi4+ThGuAOkJySk7Ep4y3GQgZs5T+/v3pAX0AAAEAUP6HBBAEWgAeAEpAKAcSGR4cGxsVHhIDDQYgHxUEAwQDRlkEBB4PHhlGWR4VHCIPCkZZDxAAPysAGD8/KxESADkYLysREgA5ERIBFzkRMxEzETMxMAE0ISM1MyA1NCYjIgcnNjMyFhUUBxUWFhUVMxEjESMC1f7LlnUBOYV3mZY9ocu/1ct+cJ2mlQEtx42sUlBGh0qah7Y5CyWJZpz9+AF5AAABAAD/6QchBbYAIwA6QB0UIxodHSMJAyQlGxsHEhIBSVkSAxcMBwxKWSAHEwA/MysRADMYPysREgA5GC8REgEXOREzETMxMAEhBwICBgYjIic1FjMyNjYSEhMhERQWMzI2NREzERQGIyImNQQM/kgfK0xTgmRFQDI/MUAsOEo3Au9vc3BxqM28xMgFH/D+rv5E0mYZjxo+aAECAekBrvvPiXl5hwHN/inBzMzFAAABABD/7AYpBEYAHQA6QB0ADgUICA4WAx8eBgYUHBwQRlkcDwMZFBlHWQsUFgA/MysRADMYPysREgA5GC8REgEXOREzETMxMAEUFjMyEREzERQGIyImNREhAgIGIyInNRYzMhITIQPPaHfVpru+vMv+xRxemHY6HBYccYkiAnEBg4mDAQoBO/69ysPEywI9/pj+ZMAKfwYB2QH2AAABAMn/7AdeBbYAGQBDQCMXAA8GCRYSEhMJDxMDGhsWEUlZFgcWBxMYFAMTEgwDSVkMEwA/KwAYPz8zEjk5Ly8rERIBFzkRMxEzETMRMzMxMAEUFjMyNjURMxEUBiMiJjURIREjETMRIREzBPZuc3Bxpsi/w8j9J6qqAtmqAYWJeXmHAc3+Kb/Oy8YBM/1QBbb9kgJuAAABALD/7AaoBEgAGABNQCoFAhMKDQEWFhcNExcDGRoBFUZZDwEfAQILAwELAQsXAxgPFxUQCEZZEBYAPysAGD8/MxI5OS8vX15dKxESARc5ETMRMxEzETMzMTABESERMxEUFjMyEREzERQGIyImNTUhESMRAVYCUKZqd9Wmu8C6zf2wpgRI/jUBy/09iYUBDAE5/r3Kw8bJc/4SBEgAAAEAff/sBZoFywAcADpAHxYIGwICDxwIBB0eABxJWQAABQwME0lZDAQFGUlZBRMAPysAGD8rERIAORgvKxESARc5ETMRMzEwASEVEAAhIAARNBIkMzIWFwcmJiMgABEQADMgESEDZgI0/sz+yf67/pOzAVXqeO1TQlrWV/71/t4BC/cBtP5/AvBW/qH+sQGRAWDlAVS1MSeUJi7+xf7j/uP+wwHXAAABAHP/7ASwBFwAGQA6QB8SBxgCAgwZBwQaGwAZRlkAAAQKCg9GWQoQBBVGWQQWAD8rABg/KxESADkYLysREgEXOREzETMxMAEhFRAhIAAREAAhMhcHJiMiBhUUFjMyNjUhArIB/v3+/u7+1wFDASHUrzuops3lzMWpr/6qAj9D/fABJwEQAQ4BK1CDSt7Sz9+gnQAAAQAQ/+wE9AW2ABQAOUAdBRMKDQ0DEwAEFRYLCxABEAhJWRATBAABAElZAQMAPysRADMYPysREgA5GC8REgEXOREzETMxMBM1IRUhERQWMzIRETMRFAYjIiY1ERAEPP4vd3LoqNO9xs0FHZmZ/GiJewEAAc/+KcDNzsMDoAAAAQAp/+wEhwRGABQANkAcAhAHCgoAEBIEFRYBEhMSRlkICA0TDw0FRlkNFgA/KwAYPxI5LysRADMREgEXOREzETMxMAEhERQWMzIRETMRFAYjIiY1ESE1IQOB/qZtdtemvcDAyf6oA1gDuv3JiYMBBAFB/r3Kw8vEAj+MAAEAb//sBFgFywAmAEdAJhUgDAAkIwUbESMAIAYnKCMPEg8SSlkPDx0DHRhKWR0TAwlKWQMEAD8rABg/KxESADkYLysREgA5ERIBFzkRMxEzETMxMBM0JDMgFwcmJiMiBhUUFjMzFSMiBhUUFjMyNxUGISAkNTQ2NzUmJpwBCOEBAtFeabVljJ/RyNnV3ujKt+nHr/77/vT+28+8qrQEXKnGkHhENHtygJONjoqOjVyeTdzFl8AWCBmy//8AWv/sA4cEXAIGAYIAAP//AAD+dQVrBbYAJgG1AAAABwOAA/oAAP//ABD+dQRzBEgCJgHVAAAABwOBAwIAAP//AAD+oAUQBbwCJgAkAAAABwJnBOkAAP//AF7+oAPNBFoCJgBEAAAABwJnBHkAAP//AAAAAAUQB+ECJgAkAAABBwJmBPwBUgAIswITBSYAKzX//wBe/+wDzQaPAiYARAAAAQcCZgSmAAAACLMCKREmACs1//8AAAAABRAH0QImACQAAAEHA3cE5QFSAAq0AwIVBSYAKzU1//8AXv/sBEEGfwImAEQAAAEHA3cEkwAAAAq0AwIrESYAKzU1//8AAAAABRAH0QImACQAAAEHA3gE3QFSAAq0AwIVBSYAKzU1//8ALf/sA80GfwImAEQAAAEHA3gEkwAAAAq0AwIrESYAKzU1//8AAAAABRAISgImACQAAAEHA3kE2QFSAAq0AwIVBSYAKzU1//8AXv/sBBcG+AImAEQAAAEHA3kEnAAAAAq0AwIrESYAKzU1//8AAAAABRAIYgImACQAAAEHA3oE5QFSAAq0AwItBSYAKzU1//8AXv/sA80HEAImAEQAAAEHA3oEkQAAAAq0AwJDESYAKzU1//8AAP6gBRAHcwImACQAAAAnAmcE6QAAAQcBSwArAVIACLMDKQUmACs1//8AXv6gA80GIQImAEQAAAAnAmcEeQAAAQYBS9QAAAizAz4RJgArNf//AAAAAAUQCBMCJgAkAAABBwN7BOwBUgAKtAMCFwUmACs1Nf//AF7/7APNBsECJgBEAAABBwN7BJoAAAAKtAMCLREmACs1Nf//AAAAAAUQCBMCJgAkAAABBwN8BOkBUgAKtAMCFwUmACs1Nf//AF7/7APNBsECJgBEAAABBwN8BJgAAAAKtAMCLREmACs1Nf//AAAAAAUQCFgCJgAkAAABBwN9BOkBUgAKtAMCIQUmACs1Nf//AF7/7APNBwYCJgBEAAABBwN9BKAAAAAKtAMCNxEmACs1Nf//AAAAAAUQCF4CJgAkAAABBwN+BOMBUgAKtAMCJwUmACs1Nf//AF7/7APNBwwCJgBEAAABBwN+BJgAAAAKtAMCPREmACs1Nf//AAD+oAUQB0kCJgAkAAAAJwFOAC0BZAEHAmcE6QAAAAizAg8FJgArNf//AF7+oAPNBeUCJgBEAAAAJgFO2AABBwJnBHkAAAAIswIlESYAKzX//wDJ/qAD+AW2AiYAKAAAAAcCZwTBAAD//wBz/qAEEgRcAiYASAAAAAcCZwS4AAD//wDJAAAD+AfhAiYAKAAAAQcCZgTRAVIACLMBEAUmACs1//8Ac//sBBIGjwImAEgAAAEHAmYEyQAAAAizAh8RJgArNf//AMkAAAP4By8CJgAoAAABBwFS/+QBUgAIswEVBSYAKzX//wBz/+wEEgXdAiYASAAAAQYBUtAAAAizAiQRJgArNf//AMkAAARvB9ECJgAoAAABBwN3BMEBUgAKtAIBEgUmACs1Nf//AHP/7ARcBn8CJgBIAAABBwN3BK4AAAAKtAMCIREmACs1Nf//AF0AAAP4B9ECJgAoAAABBwN4BMMBUgAKtAIBEgUmACs1Nf//AEr/7AQSBn8CJgBIAAABBwN4BLAAAAAKtAMCIREmACs1Nf//AMkAAAQ5CEoCJgAoAAABBwN5BL4BUgAKtAIBEgUmACs1Nf//AHP/7AQdBvgCJgBIAAABBwN5BKIAAAAKtAMCIREmACs1Nf//AMkAAAP4CGICJgAoAAABBwN6BLgBUgAKtAIBKgUmACs1Nf//AHP/7AQSBxACJgBIAAABBwN6BKIAAAAKtAMCOREmACs1Nf//AMn+oAP4B3MCJgAoAAAAJwJnBL4AAAEHAUsAAgFSAAizAiUFJgArNf//AHP+oAQSBiECJgBIAAAAJwJnBLAAAAEGAUvxAAAIswM0ESYAKzX//wBUAAACVgfhAiYALAAAAQcCZgPJAVIACLMBEAUmACs1//8AewAAAeYGjwImAPMAAAEHAmYDcwAAAAizAQgRJgArNf//AFT+oAJWBbYCJgAsAAAABwJnA7QAAP//AJ3+oAFmBd8CJgBMAAAABwJnA2IAAP//AH3+oAW+Bc0CJgAyAAAABwJnBX8AAP//AHP+oARiBFwCJgBSAAAABwJnBMkAAP//AH3/7AW+B+ECJgAyAAABBwJmBY8BUgAIswIcBSYAKzX//wBz/+wEYgaPAiYAUgAAAQcCZgTZAAAACLMCHREmACs1//8Aff/sBb4H0QImADIAAAEHA3cFfQFSAAq0AwIeBSYAKzU1//8Ac//sBHUGfwImAFIAAAEHA3cExwAAAAq0AwIfESYAKzU1//8Aff/sBb4H0QImADIAAAEHA3gFfQFSAAq0AwIeBSYAKzU1//8AYf/sBGIGfwImAFIAAAEHA3gExwAAAAq0AwIfESYAKzU1//8Aff/sBb4ISgImADIAAAEHA3kFewFSAAq0AwIeBSYAKzU1//8Ac//sBGIG+AImAFIAAAEHA3kExwAAAAq0AwIfESYAKzU1//8Aff/sBb4IYgImADIAAAEHA3oFeQFSAAq0AwI2BSYAKzU1//8Ac//sBGIHEAImAFIAAAEHA3oExQAAAAq0AwI3ESYAKzU1//8Aff6gBb4HcwImADIAAAAnAmcFfwAAAQcBSwDBAVIACLMDMQUmACs1//8Ac/6gBGIGIQImAFIAAAAnAmcEzQAAAQYBSw4AAAizAzIRJgArNf//AH3/7AZkB3MCJgJfAAABBwB2ASsBUgAIswIrBSYAKzX//wBz/+wFGQYhAiYCYAAAAQYAdm0AAAizAisRJgArNf//AH3/7AZkB3MCJgJfAAABBwBDAIcBUgAIswIjBSYAKzX//wBz/+wFGQYhAiYCYAAAAQYAQ9QAAAizAiQRJgArNf//AH3/7AZkB+ECJgJfAAABBwJmBY8BUgAIswImBSYAKzX//wBz/+wFGQaPAiYCYAAAAQcCZgTZAAAACLMCJxEmACs1//8Aff/sBmQHLwImAl8AAAEHAVIAoAFSAAizAisFJgArNf//AHP/7AUZBd0CJgJgAAABBgFS9QAACLMCIxEmACs1//8Aff6gBmQGFAImAl8AAAAHAmcFewAA//8Ac/6gBRkE8AImAmAAAAAHAmcEyQAA//8Auv6gBRkFtgImADgAAAAHAmcFSgAA//8ApP6gBDkESAImAFgAAAAHAmcEuAAA//8Auv/sBRkH4QImADgAAAEHAmYFVAFSAAizARYFJgArNf//AKT/7AQ5Bo8CJgBYAAABBwJmBNUAAAAIswEZESYAKzX//wC6/+wGewdzAiYCYQAAAQcAdgDuAVIACLMBJQUmACs1//8ApP/sBZYGIQImAmIAAAEGAHZ5AAAIswEmESYAKzX//wC6/+wGewdzAiYCYQAAAQcAQwBaAVIACLMBHQUmACs1//8ApP/sBZYGIQImAmIAAAEGAEO7AAAIswEfESYAKzX//wC6/+wGewfhAiYCYQAAAQcCZgVgAVIACLMBIAUmACs1//8ApP/sBZYGjwImAmIAAAEHAmYE2wAAAAizASIRJgArNf//ALr/7AZ7By8CJgJhAAABBwFSAH8BUgAIswElBSYAKzX//wCk/+wFlgXdAiYCYgAAAQYBUv8AAAizAR4RJgArNf//ALr+oAZ7BhQCJgJhAAAABwJnBUwAAP//AKT+oAWWBPICJgJiAAAABwJnBLIAAP//AAD+oAR7BbYCJgA8AAAABwJnBJwAAP//AAL+FAQGBEgCJgBcAAAABwJnBZ7//f//AAAAAAR7B+ECJgA8AAABBwJmBKoBUgAIswENBSYAKzX//wAC/hQEBgaPAiYAXAAAAQcCZgRqAAAACLMBGhEmACs1//8AAAAABHsHLwImADwAAAEHAVL/wgFSAAizARIFJgArNf//AAL+FAQGBd0CJgBcAAABBgFSigAACLMBHxEmACs1//8Ac/7FBNMGFAImANMAAAAHAEIAtAAAAAL75QTZ/rQGIQAJABMAHkAMBAoODgAAFQ8GgAsBAC8zGs0yEQEzETMSOTkxMAEjJiYnNTMWFhcFIyYmJzUzFhYX/rRgNLEluhxjMf6cYDiuJbscYzEE2SrKPxU9rkQZLMg/FT2uRAAAAvxxBNn/rgZ/AA0AFQAoQBEVAAYRERcDBgoVChUKEcAGAQAvMxrMOTkvLxESOREBMxEzOTkxMAEjJicGByM1NzY3MxYXJzY3MxUGByP+015wY3JhXjVwNLBCl1BJNqxTeGAE2UtbZUEZPHtNXqbCW3AVbmAAAAL7mgTZ/tcGfwANABUAKkASBg4REQAAFwMGCg8KDwoTwAYBAC8zGsw5OS8vERI5EQEzETMSOTkxMAEjJicGByM1NzY3MxYXJSMmJzUzFhf+115hcmppXjVwNLBCl/3uX3hUrDRLBNlBZWBGFzx7TV6mrF5wFWxhAAL8cQTZ/3sG+AANAB8ANEAYEBMAExsDBgYWDg4hAwoGEgoSChkewAYBAC8zGswyOTkvLxESOREBMxEzMxIXOREzMTABIyYnBgcjNTc2NzMWFxMUBwcjJzY2NTQmIyIHNTYzMv7TXnBjcmFeNXA0sEKXqH8GUAo5PzkrLhoZN8ME2UtbZUEZPHtNXqYBe2cdUYMJICYlGQZQBgAC/GgE2f7nBxAAFwAlADpAGxgeCQkVFScbHiIeGREJAAUMIgAMDAAiAxXAGQAvGswXOS8vLxEzEMQzETMREjkRATMRMxI5OTEwASIuAiMiBgcjNjYzMh4CMzI2NzMGBhMjJicGByM1NzY3MxYX/i0lR0M/HCgqDlsNZUslSUM+GygqDFoLY15eYXJqaV41cDSwQpcGNR4lHjEyanEeJB4xMWhz/qRBZWBGFzx7TV6mAAL8eQTZ/scGwQAHABQAJEAPBwQKChISFgNABxEKgA4IAC8zGt0y1BrNEQEzETMSOTkxMAE2NzMVBgcjEyADMxYWMzI2NzMGBv1eUDGsVndgPv7sD2YJTGpiVghpC5UF9GhlFXJd/vwBBEg5QUB4jAAC/HkE2f7HBsEABwAUACRADwcECgoSEhYEQAERCoAOCAAvMxrdMtQazREBMxEzEjk5MTABIyYnNTMWFwMgAzMWFjMyNjczBgb90V53Vqw0SzX+7A9mCUxqYlYIaQuVBd1dchVsYf7lAQRIOUFAeIwAAvx5BNn+xwcGABEAHgAuQBUIAAAFDQMUFBwcIAsQBAQYGBsUgBIALxrNMjMROS/EMhEBMxEzEhc5ETMxMAEUBwcjJzY2NTQmIyIHNTYzMgMgAzMWFjMyNjczBgb+MX8GUgo5QjksJSQWPsCV/uwPZglMamJWCGkLlQZ5ZB0pWgkgJSUaBk4I/dMBBEg5QUB4jAAC/GgE2f7nBwwAFwAkADBAFRoiCQkVJgUMDB4eGBVAEQkAIRqAGAAvGt0y1sQzGs0RMxE5LzMRATMyETk5MTABIi4CIyIGByM2NjMyHgIzMjY3MwYGAyADMxYWMzI2NzMGBv4tJUdDPxwoKg5bDWRMJUlDPhsoKgxaC2Pd/uwPZglMamJWCGkLlQYzHiQeMDJocR4kHjExZ3L+pgEESDlBQHiMAAEAMf5CAW0AAAAPABpACwAFBQIKAxARDQgDAC/MMhESARc5ETMxMBc0JzMWFRQGIyInNRYzMjbfi3ueZmNBMiA2JTPuZ4d4hFtnEGwKMAAAAQAZ/nUBcQCaAAsAGEAJCgAGAAwNCAMAAC/MMhESATk5ETMxMCURECMiJzUWMzI1EQFx5Dg8KT1emv7f/vwYjBNkATAAAAEAGf51AXEAjwALABhACQoABgAMDQgDAAAvzDIREgE5OREzMTAlERAjIic1FjMyNREBceQ4PCk9Xo/+6v78GIwTZAElAP//ADQAAAJDBbYABwAU/3gAAAACAHP/7AQXBHMACwAXAChAFAwGEgAGABgZCRVLWQkmAw9NWQMZAD8rABg/KxESATk5ETMRMzEwARACIyICERASMzISARQWMzI2NTQmIyIGBBf33tn2+drY+f0Em46Nnp6PjZoCL/71/sgBNQEOAQ8BNf7L/vHQ6OrOzOzpAAABAC0AAAI3BF4ACgAmQBEJAQEACAALDAcEBwQBCRABGAA/PxI5OS8vERIBOTkRMxEzMTAhIxE0NwYHBycBMwI3oQhDPpZaAX+LAjHvjEMwcHIBIwABACkAAAPXBHMAGQAsQBgHEwATFw4BBRobEApLWRAmGBcBF0xZARgAPysRADMYPysREgEXOREzMTAhITUBPgI1NCYjIgYHJzYzMhYVFAYHBRchA9f8UgGRnXEsi3dYnFxawPLG2oK6/rkCAr6FAS93aFNBV2c9Sm2oqJZzu4DnBgAAAQBe/pUEGwR0ACcAR0AmAwQbABMHBwAEFiINBigpBBcWFxZLWRcXCiUlHktZJSYKEUtZCiUAPysAGD8rERIAORgvKxESADkREgEXOREzETMRMzEwARQGBxUWFhUUBCEiJic1FhYzIBEQISM1MzI2NTQmIyIGByc2NjMyFgPunZCwqv7e/vV0wVtf12ABe/5ekJKryJN+YKptVFrrgtXsAweMsh4IFrSS0eEjLJ4vMQEpAQqPl4ZrejRGcEdRwwAAAgAX/qgEZgReAAoAEgBCQCESBQkCAgsHAwADBQMTFAEFEgVNWQkSDg8PBxISAwcQAyQAPz8SOS8SOREzETMrEQAzERIBFzkRMzMzETMRMzEwJSMRIxEhNQEzETMhETQ3IwYHAQRm2aj9MgK+uNn+hgwKKUT+ORv+jQFzfQPG/EQBXNreVlz9ngAAAQCF/pUEHQRfABoAOkAfDwMZFAgUFwMEHBsAEUtZAAAGFRUYTFkVEAYMS1kGJQA/KwAYPysREgA5GC8rERIBFzkRMxEzMTABMgQVFAAjIic1FhYzMjY1ECEiBycTIRUhAzYCLecBCf7f/veCRtBlsMP+iV6gVjcC1/23JXMCJuXH4/7+T6AtM6adATIdNwKsmf5JFwD//wB1/+wELwXLAgYAGQAAAAEAXv6pBCsEXwAGAB9AEAEFBQACAwcIAwJMWQMQACQAPz8rERIBFzkRMzEwAQEhNSEVAQEdAl784wPN/ar+qQUdmYX6z///AGj/7AQpBcsCBgAbAAAAAgBq/pUEJQR0ABcAJQBBQCIbESIKCgAABBEDJicOHk1ZChQODgIUFBhLWRQmAgdNWQIlAD8rABg/KxESADkYLxI5KxESARc5ETMRMxEzMTABECEiJzUWMzISEyMGBiMiJjU0EjMyFhIBIgYVFBYzMjY2NTQmJgQl/Wh0RFBm8PULDDe2csLk/9CV33j+FI+ckJNbmVhSkwHv/KYUjxoBKQEzU1fo0OQBCJn+2wEwuKSQpUqARmmyZgD//wAdAAAFxAYfACcASQK2AAAABgBJAAAAAgBcAt0FqgXBACIAMwBaQC4sMDAuKiYmKAoAHBEFERYAKC4GNTQrMSQDLS8tKS8jIygcChQIAwMoKRkUFCkDAD8zLzMQzTIvMxI5OREzETMRMxESFzkREgEXOREzETMRMxEzETMRMzEwARQGIyInNRYzMjU0JiYnJiY1NDYzMhcHJiMiBhUUFhYXFhYBAyMXESMRMxMTMxEjETcjAwJIlXyRSmp3lBc2VXhRjm59XCJkUzxLEitfgVABpskIBne8w8u0fwYI0wOsYm0hbChkISghHyxbTFZpJ2MlLigdJBwkMlr+7AIvgf5SAtH90QIv/S8BpIn90///ABL+FARaBbYCJgA3AAAABwB6AT8AAP//AB/+FAKoBUYCJgBXAAAABwB6AMUAAAACAHH+FAQ3BFwADAAqAEdAJgoVGgMqKh4eJBUDKywhJ0ZZJCEbHA8aDxgSGAdGWRgQEgBGWRIWAD8rABg/KxESADk5GD8/MysREgEXOREzETMzETMxMCUyNjc1NCYjIgYVFBYFNDcjBiMiAhEQEjMyFzM3MxEUBiMiJzUWFjMyNjUCTKqXBJ6rkJmXAdsJC3Dm2e/z0997CxiD7PnylUvSdo6ld7fKK+LM4NDR2WskY6cBLQEKAQgBMaaS+6Ts7EaeKi6pkv//AHH+FAQ3BiECJgORAAABBgFLBgAACLMCOREmACs1//8Acf4UBDcF5QImA5EAAAEGAU4MAAAIswIrESYAKzX//wBx/hQENwXfAiYDkQAAAQcBTwFWAAAACLMCNBEmACs1//8Acf4UBDcGIQImA5EAAAEGAjp3AAAIswIvESYAKzUAAQDJAAABcwW2AAMAEbYABAUBAwASAD8/ERIBOTEwMxEzEcmqBbb6SgD//wAFAAABjgdzAiYDlgAAAQcAQ/58AVIACLMBBQUmACs1//8AswAAAjwHcwImA5YAAAEHAHb/KgFSAAizAQ0FJgArNf///8cAAAJpB3MCJgOWAAABBwFL/rsBUgAIswESBSYAKzX//wAFAAACOAclAiYDlgAAAQcAav7QAVIACrQCARkFJgArNTX///+rAAACkwcvAiYDlgAAAQcBUv6jAVIACLMBDQUmACs1////8wAAAksGtAImA5YAAAEHAU3+xgFSAAizAQcFJgArNf///+cAAAJTBzcCJgOWAAABBwFO/sIBUgAIswEEBSYAKzX//wBW/kIBogW2AiYDlgAAAAYBUTEA//8AuwAAAX8HMQImA5YAAAEHAU8AGQFSAAizAQ0FJgArNf//AMn+fwOjBbYAJgOWAAAABwAtAjsAAP///+QAAAIdBgoAJwOWAKoAAAEHAVT96P+XAAeyAQgAAD81AP//AMkAAAFzBbYCBgOWAAD//wAFAAACOAclAiYDlgAAAQcAav7QAVIACrQCARkFJgArNTX//wDJAAABcwW2AgYDlgAA//8ABQAAAjgHJQImA5YAAAEHAGr+0AFSAAq0AgEZBSYAKzU1//8AyQAAAXMFtgIGA5YAAP//AMkAAAFzBbYCBgOWAAD//wCZAAACBAfhAiYDlgAAAQcCZgORAVIACLMBCAUmACs1//8AuP6gAX8FtgImA5YAAAAHAmcDfQAAAAAAAQAAtjIAAUkGgAAADjYkAAUAJP9xAAUANwApAAUAOQApAAUAOgApAAUAPAAUAAUARP+uAAUARv+FAAUAR/+FAAUASP+FAAUASv/DAAUAUP/DAAUAUf/DAAUAUv+FAAUAU//DAAUAVP+FAAUAVf/DAAUAVv/DAAUAWP/DAAUAgv9xAAUAg/9xAAUAhP9xAAUAhf9xAAUAhv9xAAUAh/9xAAUAnwAUAAUAov+FAAUAo/+uAAUApP+uAAUApf+uAAUApv+uAAUAp/+uAAUAqP+uAAUAqf+FAAUAqv+FAAUAq/+FAAUArP+FAAUArf+FAAUAtP+FAAUAtf+FAAUAtv+FAAUAt/+FAAUAuP+FAAUAuv+FAAUAu//DAAUAvP/DAAUAvf/DAAUAvv/DAAUAwv9xAAUAw/+uAAUAxP9xAAUAxf+uAAUAxv9xAAUAx/+uAAUAyf+FAAUAy/+FAAUAzf+FAAUAz/+FAAUA0f+FAAUA0/+FAAUA1f+FAAUA1/+FAAUA2f+FAAUA2/+FAAUA3f+FAAUA3//DAAUA4f/DAAUA4//DAAUA5f/DAAUA+v/DAAUBBv/DAAUBCP/DAAUBDf/DAAUBD/+FAAUBEf+FAAUBE/+FAAUBFf+FAAUBF//DAAUBGf/DAAUBHf/DAAUBIf/DAAUBJAApAAUBJgApAAUBK//DAAUBLf/DAAUBL//DAAUBMf/DAAUBM//DAAUBNf/DAAUBNgApAAUBOAAUAAUBOgAUAAUBQ/9xAAUBRP+uAAUBRv+uAAUBSP+FAAUBSv/DAAUBVv9xAAUBX/9xAAUBYv9xAAUBaf9xAAUBef+uAAUBev/XAAUBe//XAAUBfv+uAAUBgf/DAAUBgv/XAAUBg//XAAUBhP/XAAUBh//XAAUBif/XAAUBjP+uAAUBjv/DAAUBj/+uAAUBkP+uAAUBk/+uAAUBmf+uAAUBpP+FAAUBqv9xAAUBrv+FAAUBtf+FAAUByv/XAAUBzv9xAAUBz/+FAAUB1f9xAAUB2P+FAAUB2/+FAAUB3v+FAAUB6v+FAAUB7f+FAAUB7v/DAAUB8v9xAAUB+gApAAUB/AApAAUB/gApAAUCAAAUAAUCV//DAAUCWP9xAAUCWf+uAAUCYP+FAAUCYv/DAAUCav+FAAUCcv9xAAUCc/9xAAUCff/sAAUCf/+FAAUChf+FAAUCh/+FAAUCif+FAAUCjf+FAAUCsv+FAAUCtP+FAAUCzv+FAAUCz/9xAAUC2f9xAAUC2v/XAAUC2/9xAAUC3P/XAAUC3f9xAAUC3v/XAAUC4P+FAAUC4v/XAAUC5P/XAAUC8P+FAAUC8v+FAAUC9P+FAAUDCf9xAAUDCv+FAAUDC/9xAAUDDP+FAAUDEf+FAAUDEv9xAAUDFv+FAAUDGv+FAAUDG/+FAAUDHP9xAAUDHf9xAAUDHv+uAAUDH/9xAAUDIP+uAAUDIf9xAAUDIv+uAAUDI/9xAAUDJf9xAAUDJv+uAAUDJ/9xAAUDKP+uAAUDKf9xAAUDKv+uAAUDK/9xAAUDLP+uAAUDLf9xAAUDLv+uAAUDL/9xAAUDMP+uAAUDMf9xAAUDMv+uAAUDM/9xAAUDNP+uAAUDNv+FAAUDOP+FAAUDOv+FAAUDPP+FAAUDQP+FAAUDQv+FAAUDRP+FAAUDSv+FAAUDTP+FAAUDTv+FAAUDUv+FAAUDVP+FAAUDVv+FAAUDWP+FAAUDWv+FAAUDXP+FAAUDXv+FAAUDYP+FAAUDYv/DAAUDZP/DAAUDZv/DAAUDaP/DAAUDav/DAAUDbP/DAAUDbv/DAAUDbwAUAAUDcQAUAAUDcwAUAAUDjwApAAoAJP9xAAoANwApAAoAOQApAAoAOgApAAoAPAAUAAoARP+uAAoARv+FAAoAR/+FAAoASP+FAAoASv/DAAoAUP/DAAoAUf/DAAoAUv+FAAoAU//DAAoAVP+FAAoAVf/DAAoAVv/DAAoAWP/DAAoAgv9xAAoAg/9xAAoAhP9xAAoAhf9xAAoAhv9xAAoAh/9xAAoAnwAUAAoAov+FAAoAo/+uAAoApP+uAAoApf+uAAoApv+uAAoAp/+uAAoAqP+uAAoAqf+FAAoAqv+FAAoAq/+FAAoArP+FAAoArf+FAAoAtP+FAAoAtf+FAAoAtv+FAAoAt/+FAAoAuP+FAAoAuv+FAAoAu//DAAoAvP/DAAoAvf/DAAoAvv/DAAoAwv9xAAoAw/+uAAoAxP9xAAoAxf+uAAoAxv9xAAoAx/+uAAoAyf+FAAoAy/+FAAoAzf+FAAoAz/+FAAoA0f+FAAoA0/+FAAoA1f+FAAoA1/+FAAoA2f+FAAoA2/+FAAoA3f+FAAoA3//DAAoA4f/DAAoA4//DAAoA5f/DAAoA+v/DAAoBBv/DAAoBCP/DAAoBDf/DAAoBD/+FAAoBEf+FAAoBE/+FAAoBFf+FAAoBF//DAAoBGf/DAAoBHf/DAAoBIf/DAAoBJAApAAoBJgApAAoBK//DAAoBLf/DAAoBL//DAAoBMf/DAAoBM//DAAoBNf/DAAoBNgApAAoBOAAUAAoBOgAUAAoBQ/9xAAoBRP+uAAoBRv+uAAoBSP+FAAoBSv/DAAoBVv9xAAoBX/9xAAoBYv9xAAoBaf9xAAoBef+uAAoBev/XAAoBe//XAAoBfv+uAAoBgf/DAAoBgv/XAAoBg//XAAoBhP/XAAoBh//XAAoBif/XAAoBjP+uAAoBjv/DAAoBj/+uAAoBkP+uAAoBk/+uAAoBmf+uAAoBpP+FAAoBqv9xAAoBrv+FAAoBtf+FAAoByv/XAAoBzv9xAAoBz/+FAAoB1f9xAAoB2P+FAAoB2/+FAAoB3v+FAAoB6v+FAAoB7f+FAAoB7v/DAAoB8v9xAAoB+gApAAoB/AApAAoB/gApAAoCAAAUAAoCV//DAAoCWP9xAAoCWf+uAAoCYP+FAAoCYv/DAAoCav+FAAoCcv9xAAoCc/9xAAoCff/sAAoCf/+FAAoChf+FAAoCh/+FAAoCif+FAAoCjf+FAAoCsv+FAAoCtP+FAAoCzv+FAAoCz/9xAAoC2f9xAAoC2v/XAAoC2/9xAAoC3P/XAAoC3f9xAAoC3v/XAAoC4P+FAAoC4v/XAAoC5P/XAAoC8P+FAAoC8v+FAAoC9P+FAAoDCf9xAAoDCv+FAAoDC/9xAAoDDP+FAAoDEf+FAAoDEv9xAAoDFv+FAAoDGv+FAAoDG/+FAAoDHP9xAAoDHf9xAAoDHv+uAAoDH/9xAAoDIP+uAAoDIf9xAAoDIv+uAAoDI/9xAAoDJf9xAAoDJv+uAAoDJ/9xAAoDKP+uAAoDKf9xAAoDKv+uAAoDK/9xAAoDLP+uAAoDLf9xAAoDLv+uAAoDL/9xAAoDMP+uAAoDMf9xAAoDMv+uAAoDM/9xAAoDNP+uAAoDNv+FAAoDOP+FAAoDOv+FAAoDPP+FAAoDQP+FAAoDQv+FAAoDRP+FAAoDSv+FAAoDTP+FAAoDTv+FAAoDUv+FAAoDVP+FAAoDVv+FAAoDWP+FAAoDWv+FAAoDXP+FAAoDXv+FAAoDYP+FAAoDYv/DAAoDZP/DAAoDZv/DAAoDaP/DAAoDav/DAAoDbP/DAAoDbv/DAAoDbwAUAAoDcQAUAAoDcwAUAAoDjwApAAsALQC4AA8AJv+aAA8AKv+aAA8AMv+aAA8ANP+aAA8AN/9xAA8AOP/XAA8AOf+FAA8AOv+FAA8APP+FAA8Aif+aAA8AlP+aAA8Alf+aAA8Alv+aAA8Al/+aAA8AmP+aAA8Amv+aAA8Am//XAA8AnP/XAA8Anf/XAA8Anv/XAA8An/+FAA8AyP+aAA8Ayv+aAA8AzP+aAA8Azv+aAA8A3v+aAA8A4P+aAA8A4v+aAA8A5P+aAA8BDv+aAA8BEP+aAA8BEv+aAA8BFP+aAA8BJP9xAA8BJv9xAA8BKv/XAA8BLP/XAA8BLv/XAA8BMP/XAA8BMv/XAA8BNP/XAA8BNv+FAA8BOP+FAA8BOv+FAA8BR/+aAA8BZv+uAA8Bbf+uAA8Bcf9xAA8Bcv+FAA8Bc/+aAA8Bdf+FAA8BeP+FAA8Bhf/XAA8Bnf9xAA8Bn/+aAA8Bpv9xAA8BuP+aAA8Bu/+aAA8BvP9xAA8Bvv+uAA8Bwf9cAA8BxP9xAA8B3P+aAA8B4f+FAA8B5P+aAA8B+v+FAA8B/P+FAA8B/v+FAA8CAP+FAA8CVP+FAA8CX/+aAA8CYf/XAA8CbP+aAA8CfP9cAA8Cfv+aAA8CgP+FAA8Cgv+FAA8ChP+aAA8Chv+aAA8CiP+aAA8Civ+aAA8CjP+aAA8Cqf9xAA8Cqv+aAA8Csf+aAA8Cs/+aAA8Ctf9xAA8Ctv+aAA8Ct/+FAA8Cuf+FAA8Cvf9xAA8Cvv+aAA8Cv/9cAA8CwP+FAA8Cwf9cAA8Cwv+FAA8Cxf+FAA8Cx/+FAA8C1P9cAA8C1f+FAA8C7/+aAA8C8f+aAA8C8/+aAA8C/f9cAA8C/v+FAA8DDf+FAA8DDv+aAA8DD/+FAA8DEP+aAA8DFf+aAA8DF/9xAA8DGP+aAA8DSf+aAA8DS/+aAA8DTf+aAA8DT/+aAA8DUf+aAA8DU/+aAA8DVf+aAA8DV/+aAA8DWf+aAA8DW/+aAA8DXf+aAA8DX/+aAA8DYf/XAA8DY//XAA8DZf/XAA8DZ//XAA8Daf/XAA8Da//XAA8Dbf/XAA8Db/+FAA8Dcf+FAA8Dc/+FAA8Dj/9xABAAN/+uABABJP+uABABJv+uABABcf+uABABnf+uABABpv+uABABvP+uABABxP+uABAB3P/XABAB5P/XABACqf+uABACqv/XABACtf+uABACtv/XABACvf+uABACvv/XABADF/+uABADGP/XABADj/+uABEAJv+aABEAKv+aABEAMv+aABEANP+aABEAN/9xABEAOP/XABEAOf+FABEAOv+FABEAPP+FABEAif+aABEAlP+aABEAlf+aABEAlv+aABEAl/+aABEAmP+aABEAmv+aABEAm//XABEAnP/XABEAnf/XABEAnv/XABEAn/+FABEAyP+aABEAyv+aABEAzP+aABEAzv+aABEA3v+aABEA4P+aABEA4v+aABEA5P+aABEBDv+aABEBEP+aABEBEv+aABEBFP+aABEBJP9xABEBJv9xABEBKv/XABEBLP/XABEBLv/XABEBMP/XABEBMv/XABEBNP/XABEBNv+FABEBOP+FABEBOv+FABEBR/+aABEBZv+uABEBbf+uABEBcf9xABEBcv+FABEBc/+aABEBdf+FABEBeP+FABEBhf/XABEBnf9xABEBn/+aABEBpv9xABEBuP+aABEBu/+aABEBvP9xABEBvv+uABEBwf9cABEBxP9xABEB3P+aABEB4f+FABEB5P+aABEB+v+FABEB/P+FABEB/v+FABECAP+FABECVP+FABECX/+aABECYf/XABECbP+aABECfP9cABECfv+aABECgP+FABECgv+FABEChP+aABEChv+aABECiP+aABECiv+aABECjP+aABECqf9xABECqv+aABECsf+aABECs/+aABECtf9xABECtv+aABECt/+FABECuf+FABECvf9xABECvv+aABECv/9cABECwP+FABECwf9cABECwv+FABECxf+FABECx/+FABEC1P9cABEC1f+FABEC7/+aABEC8f+aABEC8/+aABEC/f9cABEC/v+FABEDDf+FABEDDv+aABEDD/+FABEDEP+aABEDFf+aABEDF/9xABEDGP+aABEDSf+aABEDS/+aABEDTf+aABEDT/+aABEDUf+aABEDU/+aABEDVf+aABEDV/+aABEDWf+aABEDW/+aABEDXf+aABEDX/+aABEDYf/XABEDY//XABEDZf/XABEDZ//XABEDaf/XABEDa//XABEDbf/XABEDb/+FABEDcf+FABEDc/+FABEDj/9xACQABf9xACQACv9xACQAJv/XACQAKv/XACQALQEKACQAMv/XACQANP/XACQAN/9xACQAOf+uACQAOv+uACQAPP+FACQAif/XACQAlP/XACQAlf/XACQAlv/XACQAl//XACQAmP/XACQAmv/XACQAn/+FACQAyP/XACQAyv/XACQAzP/XACQAzv/XACQA3v/XACQA4P/XACQA4v/XACQA5P/XACQBDv/XACQBEP/XACQBEv/XACQBFP/XACQBJP9xACQBJv9xACQBNv+uACQBOP+FACQBOv+FACQBR//XACQB+v+uACQB/P+uACQB/v+uACQCAP+FACQCB/9xACQCC/9xACQCX//XACQDSf/XACQDS//XACQDTf/XACQDT//XACQDUf/XACQDU//XACQDVf/XACQDV//XACQDWf/XACQDW//XACQDXf/XACQDX//XACQDb/+FACQDcf+FACQDc/+FACQDj/9xACUAD/+uACUAEf+uACUAJP/XACUAN//DACUAOf/sACUAOv/sACUAO//XACUAPP/sACUAPf/sACUAgv/XACUAg//XACUAhP/XACUAhf/XACUAhv/XACUAh//XACUAn//sACUAwv/XACUAxP/XACUAxv/XACUBJP/DACUBJv/DACUBNv/sACUBOP/sACUBOv/sACUBO//sACUBPf/sACUBP//sACUBQ//XACUBoP/sACUB+v/sACUB/P/sACUB/v/sACUCAP/sACUCCP+uACUCDP+uACUCWP/XACUDHf/XACUDH//XACUDIf/XACUDI//XACUDJf/XACUDJ//XACUDKf/XACUDK//XACUDLf/XACUDL//XACUDMf/XACUDM//XACUDb//sACUDcf/sACUDc//sACUDj//DACYAJv/XACYAKv/XACYAMv/XACYANP/XACYAif/XACYAlP/XACYAlf/XACYAlv/XACYAl//XACYAmP/XACYAmv/XACYAyP/XACYAyv/XACYAzP/XACYAzv/XACYA3v/XACYA4P/XACYA4v/XACYA5P/XACYBDv/XACYBEP/XACYBEv/XACYBFP/XACYBR//XACYCX//XACYDSf/XACYDS//XACYDTf/XACYDT//XACYDUf/XACYDU//XACYDVf/XACYDV//XACYDWf/XACYDW//XACYDXf/XACYDX//XACcAD/+uACcAEf+uACcAJP/XACcAN//DACcAOf/sACcAOv/sACcAO//XACcAPP/sACcAPf/sACcAgv/XACcAg//XACcAhP/XACcAhf/XACcAhv/XACcAh//XACcAn//sACcAwv/XACcAxP/XACcAxv/XACcBJP/DACcBJv/DACcBNv/sACcBOP/sACcBOv/sACcBO//sACcBPf/sACcBP//sACcBQ//XACcBoP/sACcB+v/sACcB/P/sACcB/v/sACcCAP/sACcCCP+uACcCDP+uACcCWP/XACcDHf/XACcDH//XACcDIf/XACcDI//XACcDJf/XACcDJ//XACcDKf/XACcDK//XACcDLf/XACcDL//XACcDMf/XACcDM//XACcDb//sACcDcf/sACcDc//sACcDj//DACgALQB7ACkAD/+FACkAEf+FACkAIgApACkAJP/XACkAgv/XACkAg//XACkAhP/XACkAhf/XACkAhv/XACkAh//XACkAwv/XACkAxP/XACkAxv/XACkBQ//XACkCCP+FACkCDP+FACkCWP/XACkDHf/XACkDH//XACkDIf/XACkDI//XACkDJf/XACkDJ//XACkDKf/XACkDK//XACkDLf/XACkDL//XACkDMf/XACkDM//XAC4AJv/XAC4AKv/XAC4AMv/XAC4ANP/XAC4Aif/XAC4AlP/XAC4Alf/XAC4Alv/XAC4Al//XAC4AmP/XAC4Amv/XAC4AyP/XAC4Ayv/XAC4AzP/XAC4Azv/XAC4A3v/XAC4A4P/XAC4A4v/XAC4A5P/XAC4BDv/XAC4BEP/XAC4BEv/XAC4BFP/XAC4BR//XAC4CX//XAC4DSf/XAC4DS//XAC4DTf/XAC4DT//XAC4DUf/XAC4DU//XAC4DVf/XAC4DV//XAC4DWf/XAC4DW//XAC4DXf/XAC4DX//XAC8ABf9cAC8ACv9cAC8AJv/XAC8AKv/XAC8AMv/XAC8ANP/XAC8AN//XAC8AOP/sAC8AOf/XAC8AOv/XAC8APP/DAC8Aif/XAC8AlP/XAC8Alf/XAC8Alv/XAC8Al//XAC8AmP/XAC8Amv/XAC8Am//sAC8AnP/sAC8Anf/sAC8Anv/sAC8An//DAC8AyP/XAC8Ayv/XAC8AzP/XAC8Azv/XAC8A3v/XAC8A4P/XAC8A4v/XAC8A5P/XAC8BDv/XAC8BEP/XAC8BEv/XAC8BFP/XAC8BJP/XAC8BJv/XAC8BKv/sAC8BLP/sAC8BLv/sAC8BMP/sAC8BMv/sAC8BNP/sAC8BNv/XAC8BOP/DAC8BOv/DAC8BR//XAC8B+v/XAC8B/P/XAC8B/v/XAC8CAP/DAC8CB/9cAC8CC/9cAC8CX//XAC8CYf/sAC8DSf/XAC8DS//XAC8DTf/XAC8DT//XAC8DUf/XAC8DU//XAC8DVf/XAC8DV//XAC8DWf/XAC8DW//XAC8DXf/XAC8DX//XAC8DYf/sAC8DY//sAC8DZf/sAC8DZ//sAC8Daf/sAC8Da//sAC8Dbf/sAC8Db//DAC8Dcf/DAC8Dc//DAC8Dj//XADIAD/+uADIAEf+uADIAJP/XADIAN//DADIAOf/sADIAOv/sADIAO//XADIAPP/sADIAPf/sADIAgv/XADIAg//XADIAhP/XADIAhf/XADIAhv/XADIAh//XADIAn//sADIAwv/XADIAxP/XADIAxv/XADIBJP/DADIBJv/DADIBNv/sADIBOP/sADIBOv/sADIBO//sADIBPf/sADIBP//sADIBQ//XADIBoP/sADIB+v/sADIB/P/sADIB/v/sADICAP/sADICCP+uADICDP+uADICWP/XADIDHf/XADIDH//XADIDIf/XADIDI//XADIDJf/XADIDJ//XADIDKf/XADIDK//XADIDLf/XADIDL//XADIDMf/XADIDM//XADIDb//sADIDcf/sADIDc//sADIDj//DADMAD/72ADMAEf72ADMAJP+aADMAO//XADMAPf/sADMAgv+aADMAg/+aADMAhP+aADMAhf+aADMAhv+aADMAh/+aADMAwv+aADMAxP+aADMAxv+aADMBO//sADMBPf/sADMBP//sADMBQ/+aADMCCP72ADMCDP72ADMCWP+aADMDHf+aADMDH/+aADMDIf+aADMDI/+aADMDJf+aADMDJ/+aADMDKf+aADMDK/+aADMDLf+aADMDL/+aADMDMf+aADMDM/+aADQAD/+uADQAEf+uADQAJP/XADQAN//DADQAOf/sADQAOv/sADQAO//XADQAPP/sADQAPf/sADQAgv/XADQAg//XADQAhP/XADQAhf/XADQAhv/XADQAh//XADQAn//sADQAwv/XADQAxP/XADQAxv/XADQBJP/DADQBJv/DADQBNv/sADQBOP/sADQBOv/sADQBO//sADQBPf/sADQBP//sADQBQ//XADQBoP/sADQB+v/sADQB/P/sADQB/v/sADQCAP/sADQCCP+uADQCDP+uADQCWP/XADQDHf/XADQDH//XADQDIf/XADQDI//XADQDJf/XADQDJ//XADQDKf/XADQDK//XADQDLf/XADQDL//XADQDMf/XADQDM//XADQDb//sADQDcf/sADQDc//sADQDj//DADcAD/+FADcAEP+uADcAEf+FADcAIgApADcAJP9xADcAJv/XADcAKv/XADcAMv/XADcANP/XADcANwApADcARP9cADcARv9xADcAR/9xADcASP9xADcASv9xADcAUP+aADcAUf+aADcAUv9xADcAU/+aADcAVP9xADcAVf+aADcAVv+FADcAWP+aADcAWf/XADcAWv/XADcAW//XADcAXP/XADcAXf+uADcAgv9xADcAg/9xADcAhP9xADcAhf9xADcAhv9xADcAh/9xADcAif/XADcAlP/XADcAlf/XADcAlv/XADcAl//XADcAmP/XADcAmv/XADcAov9xADcAo/9cADcApP9cADcApf9cADcApv9cADcAp/9cADcAqP9cADcAqf9xADcAqv9xADcAq/9xADcArP9xADcArf9xADcAtP9xADcAtf9xADcAtv9xADcAt/9xADcAuP9xADcAuv9xADcAu/+aADcAvP+aADcAvf+aADcAvv+aADcAv//XADcAwv9xADcAw/9cADcAxP9xADcAxf9cADcAxv9xADcAx/9cADcAyP/XADcAyf9xADcAyv/XADcAy/9xADcAzP/XADcAzf9xADcAzv/XADcAz/9xADcA0f9xADcA0/9xADcA1f9xADcA1/9xADcA2f9xADcA2/9xADcA3f9xADcA3v/XADcA3/9xADcA4P/XADcA4f9xADcA4v/XADcA4/9xADcA5P/XADcA5f9xADcA+v+aADcBBv+aADcBCP+aADcBDf+aADcBDv/XADcBD/9xADcBEP/XADcBEf9xADcBEv/XADcBE/9xADcBFP/XADcBFf9xADcBF/+aADcBGf+aADcBHf+FADcBIf+FADcBJAApADcBJgApADcBK/+aADcBLf+aADcBL/+aADcBMf+aADcBM/+aADcBNf+aADcBN//XADcBPP+uADcBPv+uADcBQP+uADcBQ/9xADcBRP9cADcBRv9cADcBR//XADcBSP9xADcBSv+FADcB+//XADcB/f/XADcCAv+uADcCA/+uADcCBP+uADcCCP+FADcCDP+FADcCV/+aADcCWP9xADcCWf9cADcCX//XADcCYP9xADcCYv+aADcDHf9xADcDHv9cADcDH/9xADcDIP9cADcDIf9xADcDIv9cADcDI/9xADcDJf9xADcDJv9cADcDJ/9xADcDKP9cADcDKf9xADcDKv9cADcDK/9xADcDLP9cADcDLf9xADcDLv9cADcDL/9xADcDMP9cADcDMf9xADcDMv9cADcDM/9xADcDNP9cADcDNv9xADcDOP9xADcDOv9xADcDPP9xADcDQP9xADcDQv9xADcDRP9xADcDSf/XADcDSv9xADcDS//XADcDTP9xADcDTf/XADcDTv9xADcDT//XADcDUf/XADcDUv9xADcDU//XADcDVP9xADcDVf/XADcDVv9xADcDV//XADcDWP9xADcDWf/XADcDWv9xADcDW//XADcDXP9xADcDXf/XADcDXv9xADcDX//XADcDYP9xADcDYv+aADcDZP+aADcDZv+aADcDaP+aADcDav+aADcDbP+aADcDbv+aADcDcP/XADcDjwApADgAD//XADgAEf/XADgAJP/sADgAgv/sADgAg//sADgAhP/sADgAhf/sADgAhv/sADgAh//sADgAwv/sADgAxP/sADgAxv/sADgBQ//sADgCCP/XADgCDP/XADgCWP/sADgDHf/sADgDH//sADgDIf/sADgDI//sADgDJf/sADgDJ//sADgDKf/sADgDK//sADgDLf/sADgDL//sADgDMf/sADgDM//sADkAD/+aADkAEf+aADkAIgApADkAJP+uADkAJv/sADkAKv/sADkAMv/sADkANP/sADkARP/XADkARv/XADkAR//XADkASP/XADkASv/sADkAUP/sADkAUf/sADkAUv/XADkAU//sADkAVP/XADkAVf/sADkAVv/sADkAWP/sADkAgv+uADkAg/+uADkAhP+uADkAhf+uADkAhv+uADkAh/+uADkAif/sADkAlP/sADkAlf/sADkAlv/sADkAl//sADkAmP/sADkAmv/sADkAov/XADkAo//XADkApP/XADkApf/XADkApv/XADkAp//XADkAqP/XADkAqf/XADkAqv/XADkAq//XADkArP/XADkArf/XADkAtP/XADkAtf/XADkAtv/XADkAt//XADkAuP/XADkAuv/XADkAu//sADkAvP/sADkAvf/sADkAvv/sADkAwv+uADkAw//XADkAxP+uADkAxf/XADkAxv+uADkAx//XADkAyP/sADkAyf/XADkAyv/sADkAy//XADkAzP/sADkAzf/XADkAzv/sADkAz//XADkA0f/XADkA0//XADkA1f/XADkA1//XADkA2f/XADkA2//XADkA3f/XADkA3v/sADkA3//sADkA4P/sADkA4f/sADkA4v/sADkA4//sADkA5P/sADkA5f/sADkA+v/sADkBBv/sADkBCP/sADkBDf/sADkBDv/sADkBD//XADkBEP/sADkBEf/XADkBEv/sADkBE//XADkBFP/sADkBFf/XADkBF//sADkBGf/sADkBHf/sADkBIf/sADkBK//sADkBLf/sADkBL//sADkBMf/sADkBM//sADkBNf/sADkBQ/+uADkBRP/XADkBRv/XADkBR//sADkBSP/XADkBSv/sADkCCP+aADkCDP+aADkCV//sADkCWP+uADkCWf/XADkCX//sADkCYP/XADkCYv/sADkDHf+uADkDHv/XADkDH/+uADkDIP/XADkDIf+uADkDIv/XADkDI/+uADkDJf+uADkDJv/XADkDJ/+uADkDKP/XADkDKf+uADkDKv/XADkDK/+uADkDLP/XADkDLf+uADkDLv/XADkDL/+uADkDMP/XADkDMf+uADkDMv/XADkDM/+uADkDNP/XADkDNv/XADkDOP/XADkDOv/XADkDPP/XADkDQP/XADkDQv/XADkDRP/XADkDSf/sADkDSv/XADkDS//sADkDTP/XADkDTf/sADkDTv/XADkDT//sADkDUf/sADkDUv/XADkDU//sADkDVP/XADkDVf/sADkDVv/XADkDV//sADkDWP/XADkDWf/sADkDWv/XADkDW//sADkDXP/XADkDXf/sADkDXv/XADkDX//sADkDYP/XADkDYv/sADkDZP/sADkDZv/sADkDaP/sADkDav/sADkDbP/sADkDbv/sADoAD/+aADoAEf+aADoAIgApADoAJP+uADoAJv/sADoAKv/sADoAMv/sADoANP/sADoARP/XADoARv/XADoAR//XADoASP/XADoASv/sADoAUP/sADoAUf/sADoAUv/XADoAU//sADoAVP/XADoAVf/sADoAVv/sADoAWP/sADoAgv+uADoAg/+uADoAhP+uADoAhf+uADoAhv+uADoAh/+uADoAif/sADoAlP/sADoAlf/sADoAlv/sADoAl//sADoAmP/sADoAmv/sADoAov/XADoAo//XADoApP/XADoApf/XADoApv/XADoAp//XADoAqP/XADoAqf/XADoAqv/XADoAq//XADoArP/XADoArf/XADoAtP/XADoAtf/XADoAtv/XADoAt//XADoAuP/XADoAuv/XADoAu//sADoAvP/sADoAvf/sADoAvv/sADoAwv+uADoAw//XADoAxP+uADoAxf/XADoAxv+uADoAx//XADoAyP/sADoAyf/XADoAyv/sADoAy//XADoAzP/sADoAzf/XADoAzv/sADoAz//XADoA0f/XADoA0//XADoA1f/XADoA1//XADoA2f/XADoA2//XADoA3f/XADoA3v/sADoA3//sADoA4P/sADoA4f/sADoA4v/sADoA4//sADoA5P/sADoA5f/sADoA+v/sADoBBv/sADoBCP/sADoBDf/sADoBDv/sADoBD//XADoBEP/sADoBEf/XADoBEv/sADoBE//XADoBFP/sADoBFf/XADoBF//sADoBGf/sADoBHf/sADoBIf/sADoBK//sADoBLf/sADoBL//sADoBMf/sADoBM//sADoBNf/sADoBQ/+uADoBRP/XADoBRv/XADoBR//sADoBSP/XADoBSv/sADoCCP+aADoCDP+aADoCV//sADoCWP+uADoCWf/XADoCX//sADoCYP/XADoCYv/sADoDHf+uADoDHv/XADoDH/+uADoDIP/XADoDIf+uADoDIv/XADoDI/+uADoDJf+uADoDJv/XADoDJ/+uADoDKP/XADoDKf+uADoDKv/XADoDK/+uADoDLP/XADoDLf+uADoDLv/XADoDL/+uADoDMP/XADoDMf+uADoDMv/XADoDM/+uADoDNP/XADoDNv/XADoDOP/XADoDOv/XADoDPP/XADoDQP/XADoDQv/XADoDRP/XADoDSf/sADoDSv/XADoDS//sADoDTP/XADoDTf/sADoDTv/XADoDT//sADoDUf/sADoDUv/XADoDU//sADoDVP/XADoDVf/sADoDVv/XADoDV//sADoDWP/XADoDWf/sADoDWv/XADoDW//sADoDXP/XADoDXf/sADoDXv/XADoDX//sADoDYP/XADoDYv/sADoDZP/sADoDZv/sADoDaP/sADoDav/sADoDbP/sADoDbv/sADsAJv/XADsAKv/XADsAMv/XADsANP/XADsAif/XADsAlP/XADsAlf/XADsAlv/XADsAl//XADsAmP/XADsAmv/XADsAyP/XADsAyv/XADsAzP/XADsAzv/XADsA3v/XADsA4P/XADsA4v/XADsA5P/XADsBDv/XADsBEP/XADsBEv/XADsBFP/XADsBR//XADsCX//XADsDSf/XADsDS//XADsDTf/XADsDT//XADsDUf/XADsDU//XADsDVf/XADsDV//XADsDWf/XADsDW//XADsDXf/XADsDX//XADwAD/+FADwAEf+FADwAIgApADwAJP+FADwAJv/XADwAKv/XADwAMv/XADwANP/XADwARP+aADwARv+aADwAR/+aADwASP+aADwASv/XADwAUP/DADwAUf/DADwAUv+aADwAU//DADwAVP+aADwAVf/DADwAVv+uADwAWP/DADwAXf/XADwAgv+FADwAg/+FADwAhP+FADwAhf+FADwAhv+FADwAh/+FADwAif/XADwAlP/XADwAlf/XADwAlv/XADwAl//XADwAmP/XADwAmv/XADwAov+aADwAo/+aADwApP+aADwApf+aADwApv+aADwAp/+aADwAqP+aADwAqf+aADwAqv+aADwAq/+aADwArP+aADwArf+aADwAtP+aADwAtf+aADwAtv+aADwAt/+aADwAuP+aADwAuv+aADwAu//DADwAvP/DADwAvf/DADwAvv/DADwAwv+FADwAw/+aADwAxP+FADwAxf+aADwAxv+FADwAx/+aADwAyP/XADwAyf+aADwAyv/XADwAy/+aADwAzP/XADwAzf+aADwAzv/XADwAz/+aADwA0f+aADwA0/+aADwA1f+aADwA1/+aADwA2f+aADwA2/+aADwA3f+aADwA3v/XADwA3//XADwA4P/XADwA4f/XADwA4v/XADwA4//XADwA5P/XADwA5f/XADwA+v/DADwBBv/DADwBCP/DADwBDf/DADwBDv/XADwBD/+aADwBEP/XADwBEf+aADwBEv/XADwBE/+aADwBFP/XADwBFf+aADwBF//DADwBGf/DADwBHf+uADwBIf+uADwBK//DADwBLf/DADwBL//DADwBMf/DADwBM//DADwBNf/DADwBPP/XADwBPv/XADwBQP/XADwBQ/+FADwBRP+aADwBRv+aADwBR//XADwBSP+aADwBSv+uADwCCP+FADwCDP+FADwCV//DADwCWP+FADwCWf+aADwCX//XADwCYP+aADwCYv/DADwDHf+FADwDHv+aADwDH/+FADwDIP+aADwDIf+FADwDIv+aADwDI/+FADwDJf+FADwDJv+aADwDJ/+FADwDKP+aADwDKf+FADwDKv+aADwDK/+FADwDLP+aADwDLf+FADwDLv+aADwDL/+FADwDMP+aADwDMf+FADwDMv+aADwDM/+FADwDNP+aADwDNv+aADwDOP+aADwDOv+aADwDPP+aADwDQP+aADwDQv+aADwDRP+aADwDSf/XADwDSv+aADwDS//XADwDTP+aADwDTf/XADwDTv+aADwDT//XADwDUf/XADwDUv+aADwDU//XADwDVP+aADwDVf/XADwDVv+aADwDV//XADwDWP+aADwDWf/XADwDWv+aADwDW//XADwDXP+aADwDXf/XADwDXv+aADwDX//XADwDYP+aADwDYv/DADwDZP/DADwDZv/DADwDaP/DADwDav/DADwDbP/DADwDbv/DAD0AJv/sAD0AKv/sAD0AMv/sAD0ANP/sAD0Aif/sAD0AlP/sAD0Alf/sAD0Alv/sAD0Al//sAD0AmP/sAD0Amv/sAD0AyP/sAD0Ayv/sAD0AzP/sAD0Azv/sAD0A3v/sAD0A4P/sAD0A4v/sAD0A5P/sAD0BDv/sAD0BEP/sAD0BEv/sAD0BFP/sAD0BR//sAD0CX//sAD0DSf/sAD0DS//sAD0DTf/sAD0DT//sAD0DUf/sAD0DU//sAD0DVf/sAD0DV//sAD0DWf/sAD0DW//sAD0DXf/sAD0DX//sAD4ALQC4AEQABf/sAEQACv/sAEQCB//sAEQCC//sAEUABf/sAEUACv/sAEUAWf/XAEUAWv/XAEUAW//XAEUAXP/XAEUAXf/sAEUAv//XAEUBN//XAEUBPP/sAEUBPv/sAEUBQP/sAEUB+//XAEUB/f/XAEUCB//sAEUCC//sAEUDcP/XAEYABQApAEYACgApAEYCBwApAEYCCwApAEgABf/sAEgACv/sAEgAWf/XAEgAWv/XAEgAW//XAEgAXP/XAEgAXf/sAEgAv//XAEgBN//XAEgBPP/sAEgBPv/sAEgBQP/sAEgB+//XAEgB/f/XAEgCB//sAEgCC//sAEgDcP/XAEkABQB7AEkACgB7AEkCBwB7AEkCCwB7AEsABf/sAEsACv/sAEsCB//sAEsCC//sAE4ARv/XAE4AR//XAE4ASP/XAE4AUv/XAE4AVP/XAE4Aov/XAE4Aqf/XAE4Aqv/XAE4Aq//XAE4ArP/XAE4Arf/XAE4AtP/XAE4Atf/XAE4Atv/XAE4At//XAE4AuP/XAE4Auv/XAE4Ayf/XAE4Ay//XAE4Azf/XAE4Az//XAE4A0f/XAE4A0//XAE4A1f/XAE4A1//XAE4A2f/XAE4A2//XAE4A3f/XAE4BD//XAE4BEf/XAE4BE//XAE4BFf/XAE4BSP/XAE4CYP/XAE4DNv/XAE4DOP/XAE4DOv/XAE4DPP/XAE4DQP/XAE4DQv/XAE4DRP/XAE4DSv/XAE4DTP/XAE4DTv/XAE4DUv/XAE4DVP/XAE4DVv/XAE4DWP/XAE4DWv/XAE4DXP/XAE4DXv/XAE4DYP/XAFAABf/sAFAACv/sAFACB//sAFACC//sAFEABf/sAFEACv/sAFECB//sAFECC//sAFIABf/sAFIACv/sAFIAWf/XAFIAWv/XAFIAW//XAFIAXP/XAFIAXf/sAFIAv//XAFIBN//XAFIBPP/sAFIBPv/sAFIBQP/sAFIB+//XAFIB/f/XAFICB//sAFICC//sAFIDcP/XAFMABf/sAFMACv/sAFMAWf/XAFMAWv/XAFMAW//XAFMAXP/XAFMAXf/sAFMAv//XAFMBN//XAFMBPP/sAFMBPv/sAFMBQP/sAFMB+//XAFMB/f/XAFMCB//sAFMCC//sAFMDcP/XAFUABQBSAFUACgBSAFUARP/XAFUARv/XAFUAR//XAFUASP/XAFUASv/sAFUAUv/XAFUAVP/XAFUAov/XAFUAo//XAFUApP/XAFUApf/XAFUApv/XAFUAp//XAFUAqP/XAFUAqf/XAFUAqv/XAFUAq//XAFUArP/XAFUArf/XAFUAtP/XAFUAtf/XAFUAtv/XAFUAt//XAFUAuP/XAFUAuv/XAFUAw//XAFUAxf/XAFUAx//XAFUAyf/XAFUAy//XAFUAzf/XAFUAz//XAFUA0f/XAFUA0//XAFUA1f/XAFUA1//XAFUA2f/XAFUA2//XAFUA3f/XAFUA3//sAFUA4f/sAFUA4//sAFUA5f/sAFUBD//XAFUBEf/XAFUBE//XAFUBFf/XAFUBRP/XAFUBRv/XAFUBSP/XAFUCBwBSAFUCCwBSAFUCWf/XAFUCYP/XAFUDHv/XAFUDIP/XAFUDIv/XAFUDJv/XAFUDKP/XAFUDKv/XAFUDLP/XAFUDLv/XAFUDMP/XAFUDMv/XAFUDNP/XAFUDNv/XAFUDOP/XAFUDOv/XAFUDPP/XAFUDQP/XAFUDQv/XAFUDRP/XAFUDSv/XAFUDTP/XAFUDTv/XAFUDUv/XAFUDVP/XAFUDVv/XAFUDWP/XAFUDWv/XAFUDXP/XAFUDXv/XAFUDYP/XAFcABQApAFcACgApAFcCBwApAFcCCwApAFkABQBSAFkACgBSAFkAD/+uAFkAEf+uAFkAIgApAFkCBwBSAFkCCP+uAFkCCwBSAFkCDP+uAFoABQBSAFoACgBSAFoAD/+uAFoAEf+uAFoAIgApAFoCBwBSAFoCCP+uAFoCCwBSAFoCDP+uAFsARv/XAFsAR//XAFsASP/XAFsAUv/XAFsAVP/XAFsAov/XAFsAqf/XAFsAqv/XAFsAq//XAFsArP/XAFsArf/XAFsAtP/XAFsAtf/XAFsAtv/XAFsAt//XAFsAuP/XAFsAuv/XAFsAyf/XAFsAy//XAFsAzf/XAFsAz//XAFsA0f/XAFsA0//XAFsA1f/XAFsA1//XAFsA2f/XAFsA2//XAFsA3f/XAFsBD//XAFsBEf/XAFsBE//XAFsBFf/XAFsBSP/XAFsCYP/XAFsDNv/XAFsDOP/XAFsDOv/XAFsDPP/XAFsDQP/XAFsDQv/XAFsDRP/XAFsDSv/XAFsDTP/XAFsDTv/XAFsDUv/XAFsDVP/XAFsDVv/XAFsDWP/XAFsDWv/XAFsDXP/XAFsDXv/XAFsDYP/XAFwABQBSAFwACgBSAFwAD/+uAFwAEf+uAFwAIgApAFwCBwBSAFwCCP+uAFwCCwBSAFwCDP+uAF4ALQC4AIIABf9xAIIACv9xAIIAJv/XAIIAKv/XAIIALQEKAIIAMv/XAIIANP/XAIIAN/9xAIIAOf+uAIIAOv+uAIIAPP+FAIIAif/XAIIAlP/XAIIAlf/XAIIAlv/XAIIAl//XAIIAmP/XAIIAmv/XAIIAn/+FAIIAyP/XAIIAyv/XAIIAzP/XAIIAzv/XAIIA3v/XAIIA4P/XAIIA4v/XAIIA5P/XAIIBDv/XAIIBEP/XAIIBEv/XAIIBFP/XAIIBJP9xAIIBJv9xAIIBNv+uAIIBOP+FAIIBOv+FAIIBR//XAIIB+v+uAIIB/P+uAIIB/v+uAIICAP+FAIICB/9xAIICC/9xAIICX//XAIIDSf/XAIIDS//XAIIDTf/XAIIDT//XAIIDUf/XAIIDU//XAIIDVf/XAIIDV//XAIIDWf/XAIIDW//XAIIDXf/XAIIDX//XAIIDb/+FAIIDcf+FAIIDc/+FAIIDj/9xAIMABf9xAIMACv9xAIMAJv/XAIMAKv/XAIMALQEKAIMAMv/XAIMANP/XAIMAN/9xAIMAOf+uAIMAOv+uAIMAPP+FAIMAif/XAIMAlP/XAIMAlf/XAIMAlv/XAIMAl//XAIMAmP/XAIMAmv/XAIMAn/+FAIMAyP/XAIMAyv/XAIMAzP/XAIMAzv/XAIMA3v/XAIMA4P/XAIMA4v/XAIMA5P/XAIMBDv/XAIMBEP/XAIMBEv/XAIMBFP/XAIMBJP9xAIMBJv9xAIMBNv+uAIMBOP+FAIMBOv+FAIMBR//XAIMB+v+uAIMB/P+uAIMB/v+uAIMCAP+FAIMCB/9xAIMCC/9xAIMCX//XAIMDSf/XAIMDS//XAIMDTf/XAIMDT//XAIMDUf/XAIMDU//XAIMDVf/XAIMDV//XAIMDWf/XAIMDW//XAIMDXf/XAIMDX//XAIMDb/+FAIMDcf+FAIMDc/+FAIMDj/9xAIQABf9xAIQACv9xAIQAJv/XAIQAKv/XAIQALQEKAIQAMv/XAIQANP/XAIQAN/9xAIQAOf+uAIQAOv+uAIQAPP+FAIQAif/XAIQAlP/XAIQAlf/XAIQAlv/XAIQAl//XAIQAmP/XAIQAmv/XAIQAn/+FAIQAyP/XAIQAyv/XAIQAzP/XAIQAzv/XAIQA3v/XAIQA4P/XAIQA4v/XAIQA5P/XAIQBDv/XAIQBEP/XAIQBEv/XAIQBFP/XAIQBJP9xAIQBJv9xAIQBNv+uAIQBOP+FAIQBOv+FAIQBR//XAIQB+v+uAIQB/P+uAIQB/v+uAIQCAP+FAIQCB/9xAIQCC/9xAIQCX//XAIQDSf/XAIQDS//XAIQDTf/XAIQDT//XAIQDUf/XAIQDU//XAIQDVf/XAIQDV//XAIQDWf/XAIQDW//XAIQDXf/XAIQDX//XAIQDb/+FAIQDcf+FAIQDc/+FAIQDj/9xAIUABf9xAIUACv9xAIUAJv/XAIUAKv/XAIUALQEKAIUAMv/XAIUANP/XAIUAN/9xAIUAOf+uAIUAOv+uAIUAPP+FAIUAif/XAIUAlP/XAIUAlf/XAIUAlv/XAIUAl//XAIUAmP/XAIUAmv/XAIUAn/+FAIUAyP/XAIUAyv/XAIUAzP/XAIUAzv/XAIUA3v/XAIUA4P/XAIUA4v/XAIUA5P/XAIUBDv/XAIUBEP/XAIUBEv/XAIUBFP/XAIUBJP9xAIUBJv9xAIUBNv+uAIUBOP+FAIUBOv+FAIUBR//XAIUB+v+uAIUB/P+uAIUB/v+uAIUCAP+FAIUCB/9xAIUCC/9xAIUCX//XAIUDSf/XAIUDS//XAIUDTf/XAIUDT//XAIUDUf/XAIUDU//XAIUDVf/XAIUDV//XAIUDWf/XAIUDW//XAIUDXf/XAIUDX//XAIUDb/+FAIUDcf+FAIUDc/+FAIUDj/9xAIYABf9xAIYACv9xAIYAJv/XAIYAKv/XAIYALQEKAIYAMv/XAIYANP/XAIYAN/9xAIYAOf+uAIYAOv+uAIYAPP+FAIYAif/XAIYAlP/XAIYAlf/XAIYAlv/XAIYAl//XAIYAmP/XAIYAmv/XAIYAn/+FAIYAyP/XAIYAyv/XAIYAzP/XAIYAzv/XAIYA3v/XAIYA4P/XAIYA4v/XAIYA5P/XAIYBDv/XAIYBEP/XAIYBEv/XAIYBFP/XAIYBJP9xAIYBJv9xAIYBNv+uAIYBOP+FAIYBOv+FAIYBR//XAIYB+v+uAIYB/P+uAIYB/v+uAIYCAP+FAIYCB/9xAIYCC/9xAIYCX//XAIYDSf/XAIYDS//XAIYDTf/XAIYDT//XAIYDUf/XAIYDU//XAIYDVf/XAIYDV//XAIYDWf/XAIYDW//XAIYDXf/XAIYDX//XAIYDb/+FAIYDcf+FAIYDc/+FAIYDj/9xAIcABf9xAIcACv9xAIcAJv/XAIcAKv/XAIcALQEKAIcAMv/XAIcANP/XAIcAN/9xAIcAOf+uAIcAOv+uAIcAPP+FAIcAif/XAIcAlP/XAIcAlf/XAIcAlv/XAIcAl//XAIcAmP/XAIcAmv/XAIcAn/+FAIcAyP/XAIcAyv/XAIcAzP/XAIcAzv/XAIcA3v/XAIcA4P/XAIcA4v/XAIcA5P/XAIcBDv/XAIcBEP/XAIcBEv/XAIcBFP/XAIcBJP9xAIcBJv9xAIcBNv+uAIcBOP+FAIcBOv+FAIcBR//XAIcB+v+uAIcB/P+uAIcB/v+uAIcCAP+FAIcCB/9xAIcCC/9xAIcCX//XAIcDSf/XAIcDS//XAIcDTf/XAIcDT//XAIcDUf/XAIcDU//XAIcDVf/XAIcDV//XAIcDWf/XAIcDW//XAIcDXf/XAIcDX//XAIcDb/+FAIcDcf+FAIcDc/+FAIcDj/9xAIgALQB7AIkAJv/XAIkAKv/XAIkAMv/XAIkANP/XAIkAif/XAIkAlP/XAIkAlf/XAIkAlv/XAIkAl//XAIkAmP/XAIkAmv/XAIkAyP/XAIkAyv/XAIkAzP/XAIkAzv/XAIkA3v/XAIkA4P/XAIkA4v/XAIkA5P/XAIkBDv/XAIkBEP/XAIkBEv/XAIkBFP/XAIkBR//XAIkCX//XAIkDSf/XAIkDS//XAIkDTf/XAIkDT//XAIkDUf/XAIkDU//XAIkDVf/XAIkDV//XAIkDWf/XAIkDW//XAIkDXf/XAIkDX//XAIoALQB7AIsALQB7AIwALQB7AI0ALQB7AJIAD/+uAJIAEf+uAJIAJP/XAJIAN//DAJIAOf/sAJIAOv/sAJIAO//XAJIAPP/sAJIAPf/sAJIAgv/XAJIAg//XAJIAhP/XAJIAhf/XAJIAhv/XAJIAh//XAJIAn//sAJIAwv/XAJIAxP/XAJIAxv/XAJIBJP/DAJIBJv/DAJIBNv/sAJIBOP/sAJIBOv/sAJIBO//sAJIBPf/sAJIBP//sAJIBQ//XAJIBoP/sAJIB+v/sAJIB/P/sAJIB/v/sAJICAP/sAJICCP+uAJICDP+uAJICWP/XAJIDHf/XAJIDH//XAJIDIf/XAJIDI//XAJIDJf/XAJIDJ//XAJIDKf/XAJIDK//XAJIDLf/XAJIDL//XAJIDMf/XAJIDM//XAJIDb//sAJIDcf/sAJIDc//sAJIDj//DAJQAD/+uAJQAEf+uAJQAJP/XAJQAN//DAJQAOf/sAJQAOv/sAJQAO//XAJQAPP/sAJQAPf/sAJQAgv/XAJQAg//XAJQAhP/XAJQAhf/XAJQAhv/XAJQAh//XAJQAn//sAJQAwv/XAJQAxP/XAJQAxv/XAJQBJP/DAJQBJv/DAJQBNv/sAJQBOP/sAJQBOv/sAJQBO//sAJQBPf/sAJQBP//sAJQBQ//XAJQBoP/sAJQB+v/sAJQB/P/sAJQB/v/sAJQCAP/sAJQCCP+uAJQCDP+uAJQCWP/XAJQDHf/XAJQDH//XAJQDIf/XAJQDI//XAJQDJf/XAJQDJ//XAJQDKf/XAJQDK//XAJQDLf/XAJQDL//XAJQDMf/XAJQDM//XAJQDb//sAJQDcf/sAJQDc//sAJQDj//DAJUAD/+uAJUAEf+uAJUAJP/XAJUAN//DAJUAOf/sAJUAOv/sAJUAO//XAJUAPP/sAJUAPf/sAJUAgv/XAJUAg//XAJUAhP/XAJUAhf/XAJUAhv/XAJUAh//XAJUAn//sAJUAwv/XAJUAxP/XAJUAxv/XAJUBJP/DAJUBJv/DAJUBNv/sAJUBOP/sAJUBOv/sAJUBO//sAJUBPf/sAJUBP//sAJUBQ//XAJUBoP/sAJUB+v/sAJUB/P/sAJUB/v/sAJUCAP/sAJUCCP+uAJUCDP+uAJUCWP/XAJUDHf/XAJUDH//XAJUDIf/XAJUDI//XAJUDJf/XAJUDJ//XAJUDKf/XAJUDK//XAJUDLf/XAJUDL//XAJUDMf/XAJUDM//XAJUDb//sAJUDcf/sAJUDc//sAJUDj//DAJYAD/+uAJYAEf+uAJYAJP/XAJYAN//DAJYAOf/sAJYAOv/sAJYAO//XAJYAPP/sAJYAPf/sAJYAgv/XAJYAg//XAJYAhP/XAJYAhf/XAJYAhv/XAJYAh//XAJYAn//sAJYAwv/XAJYAxP/XAJYAxv/XAJYBJP/DAJYBJv/DAJYBNv/sAJYBOP/sAJYBOv/sAJYBO//sAJYBPf/sAJYBP//sAJYBQ//XAJYBoP/sAJYB+v/sAJYB/P/sAJYB/v/sAJYCAP/sAJYCCP+uAJYCDP+uAJYCWP/XAJYDHf/XAJYDH//XAJYDIf/XAJYDI//XAJYDJf/XAJYDJ//XAJYDKf/XAJYDK//XAJYDLf/XAJYDL//XAJYDMf/XAJYDM//XAJYDb//sAJYDcf/sAJYDc//sAJYDj//DAJcAD/+uAJcAEf+uAJcAJP/XAJcAN//DAJcAOf/sAJcAOv/sAJcAO//XAJcAPP/sAJcAPf/sAJcAgv/XAJcAg//XAJcAhP/XAJcAhf/XAJcAhv/XAJcAh//XAJcAn//sAJcAwv/XAJcAxP/XAJcAxv/XAJcBJP/DAJcBJv/DAJcBNv/sAJcBOP/sAJcBOv/sAJcBO//sAJcBPf/sAJcBP//sAJcBQ//XAJcBoP/sAJcB+v/sAJcB/P/sAJcB/v/sAJcCAP/sAJcCCP+uAJcCDP+uAJcCWP/XAJcDHf/XAJcDH//XAJcDIf/XAJcDI//XAJcDJf/XAJcDJ//XAJcDKf/XAJcDK//XAJcDLf/XAJcDL//XAJcDMf/XAJcDM//XAJcDb//sAJcDcf/sAJcDc//sAJcDj//DAJgAD/+uAJgAEf+uAJgAJP/XAJgAN//DAJgAOf/sAJgAOv/sAJgAO//XAJgAPP/sAJgAPf/sAJgAgv/XAJgAg//XAJgAhP/XAJgAhf/XAJgAhv/XAJgAh//XAJgAn//sAJgAwv/XAJgAxP/XAJgAxv/XAJgBJP/DAJgBJv/DAJgBNv/sAJgBOP/sAJgBOv/sAJgBO//sAJgBPf/sAJgBP//sAJgBQ//XAJgBoP/sAJgB+v/sAJgB/P/sAJgB/v/sAJgCAP/sAJgCCP+uAJgCDP+uAJgCWP/XAJgDHf/XAJgDH//XAJgDIf/XAJgDI//XAJgDJf/XAJgDJ//XAJgDKf/XAJgDK//XAJgDLf/XAJgDL//XAJgDMf/XAJgDM//XAJgDb//sAJgDcf/sAJgDc//sAJgDj//DAJoAD/+uAJoAEf+uAJoAJP/XAJoAN//DAJoAOf/sAJoAOv/sAJoAO//XAJoAPP/sAJoAPf/sAJoAgv/XAJoAg//XAJoAhP/XAJoAhf/XAJoAhv/XAJoAh//XAJoAn//sAJoAwv/XAJoAxP/XAJoAxv/XAJoBJP/DAJoBJv/DAJoBNv/sAJoBOP/sAJoBOv/sAJoBO//sAJoBPf/sAJoBP//sAJoBQ//XAJoBoP/sAJoB+v/sAJoB/P/sAJoB/v/sAJoCAP/sAJoCCP+uAJoCDP+uAJoCWP/XAJoDHf/XAJoDH//XAJoDIf/XAJoDI//XAJoDJf/XAJoDJ//XAJoDKf/XAJoDK//XAJoDLf/XAJoDL//XAJoDMf/XAJoDM//XAJoDb//sAJoDcf/sAJoDc//sAJoDj//DAJsAD//XAJsAEf/XAJsAJP/sAJsAgv/sAJsAg//sAJsAhP/sAJsAhf/sAJsAhv/sAJsAh//sAJsAwv/sAJsAxP/sAJsAxv/sAJsBQ//sAJsCCP/XAJsCDP/XAJsCWP/sAJsDHf/sAJsDH//sAJsDIf/sAJsDI//sAJsDJf/sAJsDJ//sAJsDKf/sAJsDK//sAJsDLf/sAJsDL//sAJsDMf/sAJsDM//sAJwAD//XAJwAEf/XAJwAJP/sAJwAgv/sAJwAg//sAJwAhP/sAJwAhf/sAJwAhv/sAJwAh//sAJwAwv/sAJwAxP/sAJwAxv/sAJwBQ//sAJwCCP/XAJwCDP/XAJwCWP/sAJwDHf/sAJwDH//sAJwDIf/sAJwDI//sAJwDJf/sAJwDJ//sAJwDKf/sAJwDK//sAJwDLf/sAJwDL//sAJwDMf/sAJwDM//sAJ0AD//XAJ0AEf/XAJ0AJP/sAJ0Agv/sAJ0Ag//sAJ0AhP/sAJ0Ahf/sAJ0Ahv/sAJ0Ah//sAJ0Awv/sAJ0AxP/sAJ0Axv/sAJ0BQ//sAJ0CCP/XAJ0CDP/XAJ0CWP/sAJ0DHf/sAJ0DH//sAJ0DIf/sAJ0DI//sAJ0DJf/sAJ0DJ//sAJ0DKf/sAJ0DK//sAJ0DLf/sAJ0DL//sAJ0DMf/sAJ0DM//sAJ4AD//XAJ4AEf/XAJ4AJP/sAJ4Agv/sAJ4Ag//sAJ4AhP/sAJ4Ahf/sAJ4Ahv/sAJ4Ah//sAJ4Awv/sAJ4AxP/sAJ4Axv/sAJ4BQ//sAJ4CCP/XAJ4CDP/XAJ4CWP/sAJ4DHf/sAJ4DH//sAJ4DIf/sAJ4DI//sAJ4DJf/sAJ4DJ//sAJ4DKf/sAJ4DK//sAJ4DLf/sAJ4DL//sAJ4DMf/sAJ4DM//sAJ8AD/+FAJ8AEf+FAJ8AIgApAJ8AJP+FAJ8AJv/XAJ8AKv/XAJ8AMv/XAJ8ANP/XAJ8ARP+aAJ8ARv+aAJ8AR/+aAJ8ASP+aAJ8ASv/XAJ8AUP/DAJ8AUf/DAJ8AUv+aAJ8AU//DAJ8AVP+aAJ8AVf/DAJ8AVv+uAJ8AWP/DAJ8AXf/XAJ8Agv+FAJ8Ag/+FAJ8AhP+FAJ8Ahf+FAJ8Ahv+FAJ8Ah/+FAJ8Aif/XAJ8AlP/XAJ8Alf/XAJ8Alv/XAJ8Al//XAJ8AmP/XAJ8Amv/XAJ8Aov+aAJ8Ao/+aAJ8ApP+aAJ8Apf+aAJ8Apv+aAJ8Ap/+aAJ8AqP+aAJ8Aqf+aAJ8Aqv+aAJ8Aq/+aAJ8ArP+aAJ8Arf+aAJ8AtP+aAJ8Atf+aAJ8Atv+aAJ8At/+aAJ8AuP+aAJ8Auv+aAJ8Au//DAJ8AvP/DAJ8Avf/DAJ8Avv/DAJ8Awv+FAJ8Aw/+aAJ8AxP+FAJ8Axf+aAJ8Axv+FAJ8Ax/+aAJ8AyP/XAJ8Ayf+aAJ8Ayv/XAJ8Ay/+aAJ8AzP/XAJ8Azf+aAJ8Azv/XAJ8Az/+aAJ8A0f+aAJ8A0/+aAJ8A1f+aAJ8A1/+aAJ8A2f+aAJ8A2/+aAJ8A3f+aAJ8A3v/XAJ8A3//XAJ8A4P/XAJ8A4f/XAJ8A4v/XAJ8A4//XAJ8A5P/XAJ8A5f/XAJ8A+v/DAJ8BBv/DAJ8BCP/DAJ8BDf/DAJ8BDv/XAJ8BD/+aAJ8BEP/XAJ8BEf+aAJ8BEv/XAJ8BE/+aAJ8BFP/XAJ8BFf+aAJ8BF//DAJ8BGf/DAJ8BHf+uAJ8BIf+uAJ8BK//DAJ8BLf/DAJ8BL//DAJ8BMf/DAJ8BM//DAJ8BNf/DAJ8BPP/XAJ8BPv/XAJ8BQP/XAJ8BQ/+FAJ8BRP+aAJ8BRv+aAJ8BR//XAJ8BSP+aAJ8BSv+uAJ8CCP+FAJ8CDP+FAJ8CV//DAJ8CWP+FAJ8CWf+aAJ8CX//XAJ8CYP+aAJ8CYv/DAJ8DHf+FAJ8DHv+aAJ8DH/+FAJ8DIP+aAJ8DIf+FAJ8DIv+aAJ8DI/+FAJ8DJf+FAJ8DJv+aAJ8DJ/+FAJ8DKP+aAJ8DKf+FAJ8DKv+aAJ8DK/+FAJ8DLP+aAJ8DLf+FAJ8DLv+aAJ8DL/+FAJ8DMP+aAJ8DMf+FAJ8DMv+aAJ8DM/+FAJ8DNP+aAJ8DNv+aAJ8DOP+aAJ8DOv+aAJ8DPP+aAJ8DQP+aAJ8DQv+aAJ8DRP+aAJ8DSf/XAJ8DSv+aAJ8DS//XAJ8DTP+aAJ8DTf/XAJ8DTv+aAJ8DT//XAJ8DUf/XAJ8DUv+aAJ8DU//XAJ8DVP+aAJ8DVf/XAJ8DVv+aAJ8DV//XAJ8DWP+aAJ8DWf/XAJ8DWv+aAJ8DW//XAJ8DXP+aAJ8DXf/XAJ8DXv+aAJ8DX//XAJ8DYP+aAJ8DYv/DAJ8DZP/DAJ8DZv/DAJ8DaP/DAJ8Dav/DAJ8DbP/DAJ8Dbv/DAKAAD/72AKAAEf72AKAAJP+aAKAAO//XAKAAPf/sAKAAgv+aAKAAg/+aAKAAhP+aAKAAhf+aAKAAhv+aAKAAh/+aAKAAwv+aAKAAxP+aAKAAxv+aAKABO//sAKABPf/sAKABP//sAKABQ/+aAKACCP72AKACDP72AKACWP+aAKADHf+aAKADH/+aAKADIf+aAKADI/+aAKADJf+aAKADJ/+aAKADKf+aAKADK/+aAKADLf+aAKADL/+aAKADMf+aAKADM/+aAKIABf/sAKIACv/sAKICB//sAKICC//sAKMABf/sAKMACv/sAKMCB//sAKMCC//sAKQABf/sAKQACv/sAKQCB//sAKQCC//sAKUABf/sAKUACv/sAKUCB//sAKUCC//sAKYABf/sAKYACv/sAKYCB//sAKYCC//sAKcABf/sAKcACv/sAKcCB//sAKcCC//sAKoABf/sAKoACv/sAKoAWf/XAKoAWv/XAKoAW//XAKoAXP/XAKoAXf/sAKoAv//XAKoBN//XAKoBPP/sAKoBPv/sAKoBQP/sAKoB+//XAKoB/f/XAKoCB//sAKoCC//sAKoDcP/XAKsABf/sAKsACv/sAKsAWf/XAKsAWv/XAKsAW//XAKsAXP/XAKsAXf/sAKsAv//XAKsBN//XAKsBPP/sAKsBPv/sAKsBQP/sAKsB+//XAKsB/f/XAKsCB//sAKsCC//sAKsDcP/XAKwABf/sAKwACv/sAKwAWf/XAKwAWv/XAKwAW//XAKwAXP/XAKwAXf/sAKwAv//XAKwBN//XAKwBPP/sAKwBPv/sAKwBQP/sAKwB+//XAKwB/f/XAKwCB//sAKwCC//sAKwDcP/XAK0ABf/sAK0ACv/sAK0AWf/XAK0AWv/XAK0AW//XAK0AXP/XAK0AXf/sAK0Av//XAK0BN//XAK0BPP/sAK0BPv/sAK0BQP/sAK0B+//XAK0B/f/XAK0CB//sAK0CC//sAK0DcP/XALIABf/sALIACv/sALIAWf/XALIAWv/XALIAW//XALIAXP/XALIAXf/sALIAv//XALIBN//XALIBPP/sALIBPv/sALIBQP/sALIB+//XALIB/f/XALICB//sALICC//sALIDcP/XALQABf/sALQACv/sALQAWf/XALQAWv/XALQAW//XALQAXP/XALQAXf/sALQAv//XALQBN//XALQBPP/sALQBPv/sALQBQP/sALQB+//XALQB/f/XALQCB//sALQCC//sALQDcP/XALUABf/sALUACv/sALUAWf/XALUAWv/XALUAW//XALUAXP/XALUAXf/sALUAv//XALUBN//XALUBPP/sALUBPv/sALUBQP/sALUB+//XALUB/f/XALUCB//sALUCC//sALUDcP/XALYABf/sALYACv/sALYAWf/XALYAWv/XALYAW//XALYAXP/XALYAXf/sALYAv//XALYBN//XALYBPP/sALYBPv/sALYBQP/sALYB+//XALYB/f/XALYCB//sALYCC//sALYDcP/XALgABf/XALgACv/XALgCB//XALgCC//XALoABf/sALoACv/sALoAWf/XALoAWv/XALoAW//XALoAXP/XALoAXf/sALoAv//XALoBN//XALoBPP/sALoBPv/sALoBQP/sALoB+//XALoB/f/XALoCB//sALoCC//sALoDcP/XAL8ABQBSAL8ACgBSAL8AD/+uAL8AEf+uAL8AIgApAL8CBwBSAL8CCP+uAL8CCwBSAL8CDP+uAMAABf/sAMAACv/sAMAAWf/XAMAAWv/XAMAAW//XAMAAXP/XAMAAXf/sAMAAv//XAMABN//XAMABPP/sAMABPv/sAMABQP/sAMAB+//XAMAB/f/XAMACB//sAMACC//sAMADcP/XAMEABQBSAMEACgBSAMEAD/+uAMEAEf+uAMEAIgApAMECBwBSAMECCP+uAMECCwBSAMECDP+uAMIABf9xAMIACv9xAMIAJv/XAMIAKv/XAMIALQEKAMIAMv/XAMIANP/XAMIAN/9xAMIAOf+uAMIAOv+uAMIAPP+FAMIAif/XAMIAlP/XAMIAlf/XAMIAlv/XAMIAl//XAMIAmP/XAMIAmv/XAMIAn/+FAMIAyP/XAMIAyv/XAMIAzP/XAMIAzv/XAMIA3v/XAMIA4P/XAMIA4v/XAMIA5P/XAMIBDv/XAMIBEP/XAMIBEv/XAMIBFP/XAMIBJP9xAMIBJv9xAMIBNv+uAMIBOP+FAMIBOv+FAMIBR//XAMIB+v+uAMIB/P+uAMIB/v+uAMICAP+FAMICB/9xAMICC/9xAMICX//XAMIDSf/XAMIDS//XAMIDTf/XAMIDT//XAMIDUf/XAMIDU//XAMIDVf/XAMIDV//XAMIDWf/XAMIDW//XAMIDXf/XAMIDX//XAMIDb/+FAMIDcf+FAMIDc/+FAMIDj/9xAMMABf/sAMMACv/sAMMCB//sAMMCC//sAMQABf9xAMQACv9xAMQAJv/XAMQAKv/XAMQALQEKAMQAMv/XAMQANP/XAMQAN/9xAMQAOf+uAMQAOv+uAMQAPP+FAMQAif/XAMQAlP/XAMQAlf/XAMQAlv/XAMQAl//XAMQAmP/XAMQAmv/XAMQAn/+FAMQAyP/XAMQAyv/XAMQAzP/XAMQAzv/XAMQA3v/XAMQA4P/XAMQA4v/XAMQA5P/XAMQBDv/XAMQBEP/XAMQBEv/XAMQBFP/XAMQBJP9xAMQBJv9xAMQBNv+uAMQBOP+FAMQBOv+FAMQBR//XAMQB+v+uAMQB/P+uAMQB/v+uAMQCAP+FAMQCB/9xAMQCC/9xAMQCX//XAMQDSf/XAMQDS//XAMQDTf/XAMQDT//XAMQDUf/XAMQDU//XAMQDVf/XAMQDV//XAMQDWf/XAMQDW//XAMQDXf/XAMQDX//XAMQDb/+FAMQDcf+FAMQDc/+FAMQDj/9xAMUABf/sAMUACv/sAMUCB//sAMUCC//sAMYABf9xAMYACv9xAMYAJv/XAMYAKv/XAMYALQEKAMYAMv/XAMYANP/XAMYAN/9xAMYAOf+uAMYAOv+uAMYAPP+FAMYAif/XAMYAlP/XAMYAlf/XAMYAlv/XAMYAl//XAMYAmP/XAMYAmv/XAMYAn/+FAMYAyP/XAMYAyv/XAMYAzP/XAMYAzv/XAMYA3v/XAMYA4P/XAMYA4v/XAMYA5P/XAMYBDv/XAMYBEP/XAMYBEv/XAMYBFP/XAMYBJP9xAMYBJv9xAMYBNv+uAMYBOP+FAMYBOv+FAMYBR//XAMYB+v+uAMYB/P+uAMYB/v+uAMYCAP+FAMYCB/9xAMYCC/9xAMYCX//XAMYDSf/XAMYDS//XAMYDTf/XAMYDT//XAMYDUf/XAMYDU//XAMYDVf/XAMYDV//XAMYDWf/XAMYDW//XAMYDXf/XAMYDX//XAMYDb/+FAMYDcf+FAMYDc/+FAMYDj/9xAMcABf/sAMcACv/sAMcCB//sAMcCC//sAMgAJv/XAMgAKv/XAMgAMv/XAMgANP/XAMgAif/XAMgAlP/XAMgAlf/XAMgAlv/XAMgAl//XAMgAmP/XAMgAmv/XAMgAyP/XAMgAyv/XAMgAzP/XAMgAzv/XAMgA3v/XAMgA4P/XAMgA4v/XAMgA5P/XAMgBDv/XAMgBEP/XAMgBEv/XAMgBFP/XAMgBR//XAMgCX//XAMgDSf/XAMgDS//XAMgDTf/XAMgDT//XAMgDUf/XAMgDU//XAMgDVf/XAMgDV//XAMgDWf/XAMgDW//XAMgDXf/XAMgDX//XAMoAJv/XAMoAKv/XAMoAMv/XAMoANP/XAMoAif/XAMoAlP/XAMoAlf/XAMoAlv/XAMoAl//XAMoAmP/XAMoAmv/XAMoAyP/XAMoAyv/XAMoAzP/XAMoAzv/XAMoA3v/XAMoA4P/XAMoA4v/XAMoA5P/XAMoBDv/XAMoBEP/XAMoBEv/XAMoBFP/XAMoBR//XAMoCX//XAMoDSf/XAMoDS//XAMoDTf/XAMoDT//XAMoDUf/XAMoDU//XAMoDVf/XAMoDV//XAMoDWf/XAMoDW//XAMoDXf/XAMoDX//XAMwAJv/XAMwAKv/XAMwAMv/XAMwANP/XAMwAif/XAMwAlP/XAMwAlf/XAMwAlv/XAMwAl//XAMwAmP/XAMwAmv/XAMwAyP/XAMwAyv/XAMwAzP/XAMwAzv/XAMwA3v/XAMwA4P/XAMwA4v/XAMwA5P/XAMwBDv/XAMwBEP/XAMwBEv/XAMwBFP/XAMwBR//XAMwCX//XAMwDSf/XAMwDS//XAMwDTf/XAMwDT//XAMwDUf/XAMwDU//XAMwDVf/XAMwDV//XAMwDWf/XAMwDW//XAMwDXf/XAMwDX//XAM4AJv/XAM4AKv/XAM4AMv/XAM4ANP/XAM4Aif/XAM4AlP/XAM4Alf/XAM4Alv/XAM4Al//XAM4AmP/XAM4Amv/XAM4AyP/XAM4Ayv/XAM4AzP/XAM4Azv/XAM4A3v/XAM4A4P/XAM4A4v/XAM4A5P/XAM4BDv/XAM4BEP/XAM4BEv/XAM4BFP/XAM4BR//XAM4CX//XAM4DSf/XAM4DS//XAM4DTf/XAM4DT//XAM4DUf/XAM4DU//XAM4DVf/XAM4DV//XAM4DWf/XAM4DW//XAM4DXf/XAM4DX//XANAAD/+uANAAEf+uANAAJP/XANAAN//DANAAOf/sANAAOv/sANAAO//XANAAPP/sANAAPf/sANAAgv/XANAAg//XANAAhP/XANAAhf/XANAAhv/XANAAh//XANAAn//sANAAwv/XANAAxP/XANAAxv/XANABJP/DANABJv/DANABNv/sANABOP/sANABOv/sANABO//sANABPf/sANABP//sANABQ//XANABoP/sANAB+v/sANAB/P/sANAB/v/sANACAP/sANACCP+uANACDP+uANACWP/XANADHf/XANADH//XANADIf/XANADI//XANADJf/XANADJ//XANADKf/XANADK//XANADLf/XANADL//XANADMf/XANADM//XANADb//sANADcf/sANADc//sANADj//DANEABQBSANEACgBSANEADACPANEAIgCkANEAQACPANEARQA9ANEASwA9ANEATgA9ANEATwA9ANEAYACPANEA5wA9ANEA6QB7ANECBwBSANECCwBSANIAD/+uANIAEf+uANIAJP/XANIAN//DANIAOf/sANIAOv/sANIAO//XANIAPP/sANIAPf/sANIAgv/XANIAg//XANIAhP/XANIAhf/XANIAhv/XANIAh//XANIAn//sANIAwv/XANIAxP/XANIAxv/XANIBJP/DANIBJv/DANIBNv/sANIBOP/sANIBOv/sANIBO//sANIBPf/sANIBP//sANIBQ//XANIBoP/sANIB+v/sANIB/P/sANIB/v/sANICAP/sANICCP+uANICDP+uANICWP/XANIDHf/XANIDH//XANIDIf/XANIDI//XANIDJf/XANIDJ//XANIDKf/XANIDK//XANIDLf/XANIDL//XANIDMf/XANIDM//XANIDb//sANIDcf/sANIDc//sANIDj//DANQALQB7ANUABf/sANUACv/sANUAWf/XANUAWv/XANUAW//XANUAXP/XANUAXf/sANUAv//XANUBN//XANUBPP/sANUBPv/sANUBQP/sANUB+//XANUB/f/XANUCB//sANUCC//sANUDcP/XANYALQB7ANcABf/sANcACv/sANcAWf/XANcAWv/XANcAW//XANcAXP/XANcAXf/sANcAv//XANcBN//XANcBPP/sANcBPv/sANcBQP/sANcB+//XANcB/f/XANcCB//sANcCC//sANcDcP/XANgALQB7ANkABf/sANkACv/sANkAWf/XANkAWv/XANkAW//XANkAXP/XANkAXf/sANkAv//XANkBN//XANkBPP/sANkBPv/sANkBQP/sANkB+//XANkB/f/XANkCB//sANkCC//sANkDcP/XANoALQB7ANsABf/sANsACv/sANsAWf/XANsAWv/XANsAW//XANsAXP/XANsAXf/sANsAv//XANsBN//XANsBPP/sANsBPv/sANsBQP/sANsB+//XANsB/f/XANsCB//sANsCC//sANsDcP/XANwALQB7AN0ABf/sAN0ACv/sAN0AWf/XAN0AWv/XAN0AW//XAN0AXP/XAN0AXf/sAN0Av//XAN0BN//XAN0BPP/sAN0BPv/sAN0BQP/sAN0B+//XAN0B/f/XAN0CB//sAN0CC//sAN0DcP/XAOcABf/sAOcACv/sAOcCB//sAOcCC//sAPgAJv/XAPgAKv/XAPgAMv/XAPgANP/XAPgAif/XAPgAlP/XAPgAlf/XAPgAlv/XAPgAl//XAPgAmP/XAPgAmv/XAPgAyP/XAPgAyv/XAPgAzP/XAPgAzv/XAPgA3v/XAPgA4P/XAPgA4v/XAPgA5P/XAPgBDv/XAPgBEP/XAPgBEv/XAPgBFP/XAPgBR//XAPgCX//XAPgDSf/XAPgDS//XAPgDTf/XAPgDT//XAPgDUf/XAPgDU//XAPgDVf/XAPgDV//XAPgDWf/XAPgDW//XAPgDXf/XAPgDX//XAPkARv/XAPkAR//XAPkASP/XAPkAUv/XAPkAVP/XAPkAov/XAPkAqf/XAPkAqv/XAPkAq//XAPkArP/XAPkArf/XAPkAtP/XAPkAtf/XAPkAtv/XAPkAt//XAPkAuP/XAPkAuv/XAPkAyf/XAPkAy//XAPkAzf/XAPkAz//XAPkA0f/XAPkA0//XAPkA1f/XAPkA1//XAPkA2f/XAPkA2//XAPkA3f/XAPkBD//XAPkBEf/XAPkBE//XAPkBFf/XAPkBSP/XAPkCYP/XAPkDNv/XAPkDOP/XAPkDOv/XAPkDPP/XAPkDQP/XAPkDQv/XAPkDRP/XAPkDSv/XAPkDTP/XAPkDTv/XAPkDUv/XAPkDVP/XAPkDVv/XAPkDWP/XAPkDWv/XAPkDXP/XAPkDXv/XAPkDYP/XAPoARv/XAPoAR//XAPoASP/XAPoAUv/XAPoAVP/XAPoAov/XAPoAqf/XAPoAqv/XAPoAq//XAPoArP/XAPoArf/XAPoAtP/XAPoAtf/XAPoAtv/XAPoAt//XAPoAuP/XAPoAuv/XAPoAyf/XAPoAy//XAPoAzf/XAPoAz//XAPoA0f/XAPoA0//XAPoA1f/XAPoA1//XAPoA2f/XAPoA2//XAPoA3f/XAPoBD//XAPoBEf/XAPoBE//XAPoBFf/XAPoBSP/XAPoCYP/XAPoDNv/XAPoDOP/XAPoDOv/XAPoDPP/XAPoDQP/XAPoDQv/XAPoDRP/XAPoDSv/XAPoDTP/XAPoDTv/XAPoDUv/XAPoDVP/XAPoDVv/XAPoDWP/XAPoDWv/XAPoDXP/XAPoDXv/XAPoDYP/XAPsABf9cAPsACv9cAPsAJv/XAPsAKv/XAPsAMv/XAPsANP/XAPsAN//XAPsAOP/sAPsAOf/XAPsAOv/XAPsAPP/DAPsAif/XAPsAlP/XAPsAlf/XAPsAlv/XAPsAl//XAPsAmP/XAPsAmv/XAPsAm//sAPsAnP/sAPsAnf/sAPsAnv/sAPsAn//DAPsAyP/XAPsAyv/XAPsAzP/XAPsAzv/XAPsA3v/XAPsA4P/XAPsA4v/XAPsA5P/XAPsBDv/XAPsBEP/XAPsBEv/XAPsBFP/XAPsBJP/XAPsBJv/XAPsBKv/sAPsBLP/sAPsBLv/sAPsBMP/sAPsBMv/sAPsBNP/sAPsBNv/XAPsBOP/DAPsBOv/DAPsBR//XAPsB+v/XAPsB/P/XAPsB/v/XAPsCAP/DAPsCB/9cAPsCC/9cAPsCX//XAPsCYf/sAPsDSf/XAPsDS//XAPsDTf/XAPsDT//XAPsDUf/XAPsDU//XAPsDVf/XAPsDV//XAPsDWf/XAPsDW//XAPsDXf/XAPsDX//XAPsDYf/sAPsDY//sAPsDZf/sAPsDZ//sAPsDaf/sAPsDa//sAPsDbf/sAPsDb//DAPsDcf/DAPsDc//DAPsDj//XAP0ABf9cAP0ACv9cAP0AJv/XAP0AKv/XAP0AMv/XAP0ANP/XAP0AN//XAP0AOP/sAP0AOf/XAP0AOv/XAP0APP/DAP0Aif/XAP0AlP/XAP0Alf/XAP0Alv/XAP0Al//XAP0AmP/XAP0Amv/XAP0Am//sAP0AnP/sAP0Anf/sAP0Anv/sAP0An//DAP0AyP/XAP0Ayv/XAP0AzP/XAP0Azv/XAP0A3v/XAP0A4P/XAP0A4v/XAP0A5P/XAP0BDv/XAP0BEP/XAP0BEv/XAP0BFP/XAP0BJP/XAP0BJv/XAP0BKv/sAP0BLP/sAP0BLv/sAP0BMP/sAP0BMv/sAP0BNP/sAP0BNv/XAP0BOP/DAP0BOv/DAP0BR//XAP0B+v/XAP0B/P/XAP0B/v/XAP0CAP/DAP0CB/9cAP0CC/9cAP0CX//XAP0CYf/sAP0DSf/XAP0DS//XAP0DTf/XAP0DT//XAP0DUf/XAP0DU//XAP0DVf/XAP0DV//XAP0DWf/XAP0DW//XAP0DXf/XAP0DX//XAP0DYf/sAP0DY//sAP0DZf/sAP0DZ//sAP0Daf/sAP0Da//sAP0Dbf/sAP0Db//DAP0Dcf/DAP0Dc//DAP0Dj//XAP8ABf9cAP8ACv9cAP8AJv/XAP8AKv/XAP8AMv/XAP8ANP/XAP8AN//XAP8AOP/sAP8AOf/XAP8AOv/XAP8APP/DAP8Aif/XAP8AlP/XAP8Alf/XAP8Alv/XAP8Al//XAP8AmP/XAP8Amv/XAP8Am//sAP8AnP/sAP8Anf/sAP8Anv/sAP8An//DAP8AyP/XAP8Ayv/XAP8AzP/XAP8Azv/XAP8A3v/XAP8A4P/XAP8A4v/XAP8A5P/XAP8BDv/XAP8BEP/XAP8BEv/XAP8BFP/XAP8BJP/XAP8BJv/XAP8BKv/sAP8BLP/sAP8BLv/sAP8BMP/sAP8BMv/sAP8BNP/sAP8BNv/XAP8BOP/DAP8BOv/DAP8BR//XAP8B+v/XAP8B/P/XAP8B/v/XAP8CAP/DAP8CB/9cAP8CC/9cAP8CX//XAP8CYf/sAP8DSf/XAP8DS//XAP8DTf/XAP8DT//XAP8DUf/XAP8DU//XAP8DVf/XAP8DV//XAP8DWf/XAP8DW//XAP8DXf/XAP8DX//XAP8DYf/sAP8DY//sAP8DZf/sAP8DZ//sAP8Daf/sAP8Da//sAP8Dbf/sAP8Db//DAP8Dcf/DAP8Dc//DAP8Dj//XAQAABQBSAQAACgBSAQAADACPAQAAIgCPAQAAQACPAQAARQA9AQAASwA9AQAATgA9AQAATwA9AQAAYACPAQAA5wA9AQAA6QCPAQACBwBSAQACCwBSAQEABf9cAQEACv9cAQEAJv/XAQEAKv/XAQEAMv/XAQEANP/XAQEAN//XAQEAOP/sAQEAOf/XAQEAOv/XAQEAPP/DAQEAif/XAQEAlP/XAQEAlf/XAQEAlv/XAQEAl//XAQEAmP/XAQEAmv/XAQEAm//sAQEAnP/sAQEAnf/sAQEAnv/sAQEAn//DAQEAyP/XAQEAyv/XAQEAzP/XAQEAzv/XAQEA3v/XAQEA4P/XAQEA4v/XAQEA5P/XAQEBDv/XAQEBEP/XAQEBEv/XAQEBFP/XAQEBJP/XAQEBJv/XAQEBKv/sAQEBLP/sAQEBLv/sAQEBMP/sAQEBMv/sAQEBNP/sAQEBNv/XAQEBOP/DAQEBOv/DAQEBR//XAQEB+v/XAQEB/P/XAQEB/v/XAQECAP/DAQECB/9cAQECC/9cAQECX//XAQECYf/sAQEDSf/XAQEDS//XAQEDTf/XAQEDT//XAQEDUf/XAQEDU//XAQEDVf/XAQEDV//XAQEDWf/XAQEDW//XAQEDXf/XAQEDX//XAQEDYf/sAQEDY//sAQEDZf/sAQEDZ//sAQEDaf/sAQEDa//sAQEDbf/sAQEDb//DAQEDcf/DAQEDc//DAQEDj//XAQMABf9cAQMACv9cAQMAJv/XAQMAKv/XAQMAMv/XAQMANP/XAQMAN//XAQMAOP/sAQMAOf/XAQMAOv/XAQMAPP/DAQMAif/XAQMAlP/XAQMAlf/XAQMAlv/XAQMAl//XAQMAmP/XAQMAmv/XAQMAm//sAQMAnP/sAQMAnf/sAQMAnv/sAQMAn//DAQMAyP/XAQMAyv/XAQMAzP/XAQMAzv/XAQMA3v/XAQMA4P/XAQMA4v/XAQMA5P/XAQMBDv/XAQMBEP/XAQMBEv/XAQMBFP/XAQMBJP/XAQMBJv/XAQMBKv/sAQMBLP/sAQMBLv/sAQMBMP/sAQMBMv/sAQMBNP/sAQMBNv/XAQMBOP/DAQMBOv/DAQMBR//XAQMB+v/XAQMB/P/XAQMB/v/XAQMCAP/DAQMCB/9cAQMCC/9cAQMCX//XAQMCYf/sAQMDSf/XAQMDS//XAQMDTf/XAQMDT//XAQMDUf/XAQMDU//XAQMDVf/XAQMDV//XAQMDWf/XAQMDW//XAQMDXf/XAQMDX//XAQMDYf/sAQMDY//sAQMDZf/sAQMDZ//sAQMDaf/sAQMDa//sAQMDbf/sAQMDb//DAQMDcf/DAQMDc//DAQMDj//XAQgABf/sAQgACv/sAQgCB//sAQgCC//sAQ4AD/+uAQ4AEf+uAQ4AJP/XAQ4AN//DAQ4AOf/sAQ4AOv/sAQ4AO//XAQ4APP/sAQ4APf/sAQ4Agv/XAQ4Ag//XAQ4AhP/XAQ4Ahf/XAQ4Ahv/XAQ4Ah//XAQ4An//sAQ4Awv/XAQ4AxP/XAQ4Axv/XAQ4BJP/DAQ4BJv/DAQ4BNv/sAQ4BOP/sAQ4BOv/sAQ4BO//sAQ4BPf/sAQ4BP//sAQ4BQ//XAQ4BoP/sAQ4B+v/sAQ4B/P/sAQ4B/v/sAQ4CAP/sAQ4CCP+uAQ4CDP+uAQ4CWP/XAQ4DHf/XAQ4DH//XAQ4DIf/XAQ4DI//XAQ4DJf/XAQ4DJ//XAQ4DKf/XAQ4DK//XAQ4DLf/XAQ4DL//XAQ4DMf/XAQ4DM//XAQ4Db//sAQ4Dcf/sAQ4Dc//sAQ4Dj//DARAAD/+uARAAEf+uARAAJP/XARAAN//DARAAOf/sARAAOv/sARAAO//XARAAPP/sARAAPf/sARAAgv/XARAAg//XARAAhP/XARAAhf/XARAAhv/XARAAh//XARAAn//sARAAwv/XARAAxP/XARAAxv/XARABJP/DARABJv/DARABNv/sARABOP/sARABOv/sARABO//sARABPf/sARABP//sARABQ//XARABoP/sARAB+v/sARAB/P/sARAB/v/sARACAP/sARACCP+uARACDP+uARACWP/XARADHf/XARADH//XARADIf/XARADI//XARADJf/XARADJ//XARADKf/XARADK//XARADLf/XARADL//XARADMf/XARADM//XARADb//sARADcf/sARADc//sARADj//DARIAD/+uARIAEf+uARIAJP/XARIAN//DARIAOf/sARIAOv/sARIAO//XARIAPP/sARIAPf/sARIAgv/XARIAg//XARIAhP/XARIAhf/XARIAhv/XARIAh//XARIAn//sARIAwv/XARIAxP/XARIAxv/XARIBJP/DARIBJv/DARIBNv/sARIBOP/sARIBOv/sARIBO//sARIBPf/sARIBP//sARIBQ//XARIBoP/sARIB+v/sARIB/P/sARIB/v/sARICAP/sARICCP+uARICDP+uARICWP/XARIDHf/XARIDH//XARIDIf/XARIDI//XARIDJf/XARIDJ//XARIDKf/XARIDK//XARIDLf/XARIDL//XARIDMf/XARIDM//XARIDb//sARIDcf/sARIDc//sARIDj//DARQALQB7ARcABQBSARcACgBSARcARP/XARcARv/XARcAR//XARcASP/XARcASv/sARcAUv/XARcAVP/XARcAov/XARcAo//XARcApP/XARcApf/XARcApv/XARcAp//XARcAqP/XARcAqf/XARcAqv/XARcAq//XARcArP/XARcArf/XARcAtP/XARcAtf/XARcAtv/XARcAt//XARcAuP/XARcAuv/XARcAw//XARcAxf/XARcAx//XARcAyf/XARcAy//XARcAzf/XARcAz//XARcA0f/XARcA0//XARcA1f/XARcA1//XARcA2f/XARcA2//XARcA3f/XARcA3//sARcA4f/sARcA4//sARcA5f/sARcBD//XARcBEf/XARcBE//XARcBFf/XARcBRP/XARcBRv/XARcBSP/XARcCBwBSARcCCwBSARcCWf/XARcCYP/XARcDHv/XARcDIP/XARcDIv/XARcDJv/XARcDKP/XARcDKv/XARcDLP/XARcDLv/XARcDMP/XARcDMv/XARcDNP/XARcDNv/XARcDOP/XARcDOv/XARcDPP/XARcDQP/XARcDQv/XARcDRP/XARcDSv/XARcDTP/XARcDTv/XARcDUv/XARcDVP/XARcDVv/XARcDWP/XARcDWv/XARcDXP/XARcDXv/XARcDYP/XARkABQBSARkACgBSARkARP/XARkARv/XARkAR//XARkASP/XARkASv/sARkAUv/XARkAVP/XARkAov/XARkAo//XARkApP/XARkApf/XARkApv/XARkAp//XARkAqP/XARkAqf/XARkAqv/XARkAq//XARkArP/XARkArf/XARkAtP/XARkAtf/XARkAtv/XARkAt//XARkAuP/XARkAuv/XARkAw//XARkAxf/XARkAx//XARkAyf/XARkAy//XARkAzf/XARkAz//XARkA0f/XARkA0//XARkA1f/XARkA1//XARkA2f/XARkA2//XARkA3f/XARkA3//sARkA4f/sARkA4//sARkA5f/sARkBD//XARkBEf/XARkBE//XARkBFf/XARkBRP/XARkBRv/XARkBSP/XARkCBwBSARkCCwBSARkCWf/XARkCYP/XARkDHv/XARkDIP/XARkDIv/XARkDJv/XARkDKP/XARkDKv/XARkDLP/XARkDLv/XARkDMP/XARkDMv/XARkDNP/XARkDNv/XARkDOP/XARkDOv/XARkDPP/XARkDQP/XARkDQv/XARkDRP/XARkDSv/XARkDTP/XARkDTv/XARkDUv/XARkDVP/XARkDVv/XARkDWP/XARkDWv/XARkDXP/XARkDXv/XARkDYP/XARsABQBSARsACgBSARsARP/XARsARv/XARsAR//XARsASP/XARsASv/sARsAUv/XARsAVP/XARsAov/XARsAo//XARsApP/XARsApf/XARsApv/XARsAp//XARsAqP/XARsAqf/XARsAqv/XARsAq//XARsArP/XARsArf/XARsAtP/XARsAtf/XARsAtv/XARsAt//XARsAuP/XARsAuv/XARsAw//XARsAxf/XARsAx//XARsAyf/XARsAy//XARsAzf/XARsAz//XARsA0f/XARsA0//XARsA1f/XARsA1//XARsA2f/XARsA2//XARsA3f/XARsA3//sARsA4f/sARsA4//sARsA5f/sARsBD//XARsBEf/XARsBE//XARsBFf/XARsBRP/XARsBRv/XARsBSP/XARsCBwBSARsCCwBSARsCWf/XARsCYP/XARsDHv/XARsDIP/XARsDIv/XARsDJv/XARsDKP/XARsDKv/XARsDLP/XARsDLv/XARsDMP/XARsDMv/XARsDNP/XARsDNv/XARsDOP/XARsDOv/XARsDPP/XARsDQP/XARsDQv/XARsDRP/XARsDSv/XARsDTP/XARsDTv/XARsDUv/XARsDVP/XARsDVv/XARsDWP/XARsDWv/XARsDXP/XARsDXv/XARsDYP/XASQAD/+FASQAEP+uASQAEf+FASQAIgApASQAJP9xASQAJv/XASQAKv/XASQAMv/XASQANP/XASQANwApASQARP9cASQARv9xASQAR/9xASQASP9xASQASv9xASQAUP+aASQAUf+aASQAUv9xASQAU/+aASQAVP9xASQAVf+aASQAVv+FASQAWP+aASQAWf/XASQAWv/XASQAW//XASQAXP/XASQAXf+uASQAgv9xASQAg/9xASQAhP9xASQAhf9xASQAhv9xASQAh/9xASQAif/XASQAlP/XASQAlf/XASQAlv/XASQAl//XASQAmP/XASQAmv/XASQAov9xASQAo/9cASQApP9cASQApf9cASQApv9cASQAp/9cASQAqP9cASQAqf9xASQAqv9xASQAq/9xASQArP9xASQArf9xASQAtP9xASQAtf9xASQAtv9xASQAt/9xASQAuP9xASQAuv9xASQAu/+aASQAvP+aASQAvf+aASQAvv+aASQAv//XASQAwv9xASQAw/9cASQAxP9xASQAxf9cASQAxv9xASQAx/9cASQAyP/XASQAyf9xASQAyv/XASQAy/9xASQAzP/XASQAzf9xASQAzv/XASQAz/9xASQA0f9xASQA0/9xASQA1f9xASQA1/9xASQA2f9xASQA2/9xASQA3f9xASQA3v/XASQA3/9xASQA4P/XASQA4f9xASQA4v/XASQA4/9xASQA5P/XASQA5f9xASQA+v+aASQBBv+aASQBCP+aASQBDf+aASQBDv/XASQBD/9xASQBEP/XASQBEf9xASQBEv/XASQBE/9xASQBFP/XASQBFf9xASQBF/+aASQBGf+aASQBHf+FASQBIf+FASQBJAApASQBJgApASQBK/+aASQBLf+aASQBL/+aASQBMf+aASQBM/+aASQBNf+aASQBN//XASQBPP+uASQBPv+uASQBQP+uASQBQ/9xASQBRP9cASQBRv9cASQBR//XASQBSP9xASQBSv+FASQB+//XASQB/f/XASQCAv+uASQCA/+uASQCBP+uASQCCP+FASQCDP+FASQCV/+aASQCWP9xASQCWf9cASQCX//XASQCYP9xASQCYv+aASQDHf9xASQDHv9cASQDH/9xASQDIP9cASQDIf9xASQDIv9cASQDI/9xASQDJf9xASQDJv9cASQDJ/9xASQDKP9cASQDKf9xASQDKv9cASQDK/9xASQDLP9cASQDLf9xASQDLv9cASQDL/9xASQDMP9cASQDMf9xASQDMv9cASQDM/9xASQDNP9cASQDNv9xASQDOP9xASQDOv9xASQDPP9xASQDQP9xASQDQv9xASQDRP9xASQDSf/XASQDSv9xASQDS//XASQDTP9xASQDTf/XASQDTv9xASQDT//XASQDUf/XASQDUv9xASQDU//XASQDVP9xASQDVf/XASQDVv9xASQDV//XASQDWP9xASQDWf/XASQDWv9xASQDW//XASQDXP9xASQDXf/XASQDXv9xASQDX//XASQDYP9xASQDYv+aASQDZP+aASQDZv+aASQDaP+aASQDav+aASQDbP+aASQDbv+aASQDcP/XASQDjwApASUABQApASUACgApASUCBwApASUCCwApASYAD/+FASYAEP+uASYAEf+FASYAIgApASYAJP9xASYAJv/XASYAKv/XASYAMv/XASYANP/XASYANwApASYARP9cASYARv9xASYAR/9xASYASP9xASYASv9xASYAUP+aASYAUf+aASYAUv9xASYAU/+aASYAVP9xASYAVf+aASYAVv+FASYAWP+aASYAWf/XASYAWv/XASYAW//XASYAXP/XASYAXf+uASYAgv9xASYAg/9xASYAhP9xASYAhf9xASYAhv9xASYAh/9xASYAif/XASYAlP/XASYAlf/XASYAlv/XASYAl//XASYAmP/XASYAmv/XASYAov9xASYAo/9cASYApP9cASYApf9cASYApv9cASYAp/9cASYAqP9cASYAqf9xASYAqv9xASYAq/9xASYArP9xASYArf9xASYAtP9xASYAtf9xASYAtv9xASYAt/9xASYAuP9xASYAuv9xASYAu/+aASYAvP+aASYAvf+aASYAvv+aASYAv//XASYAwv9xASYAw/9cASYAxP9xASYAxf9cASYAxv9xASYAx/9cASYAyP/XASYAyf9xASYAyv/XASYAy/9xASYAzP/XASYAzf9xASYAzv/XASYAz/9xASYA0f9xASYA0/9xASYA1f9xASYA1/9xASYA2f9xASYA2/9xASYA3f9xASYA3v/XASYA3/9xASYA4P/XASYA4f9xASYA4v/XASYA4/9xASYA5P/XASYA5f9xASYA+v+aASYBBv+aASYBCP+aASYBDf+aASYBDv/XASYBD/9xASYBEP/XASYBEf9xASYBEv/XASYBE/9xASYBFP/XASYBFf9xASYBF/+aASYBGf+aASYBHf+FASYBIf+FASYBJAApASYBJgApASYBK/+aASYBLf+aASYBL/+aASYBMf+aASYBM/+aASYBNf+aASYBN//XASYBPP+uASYBPv+uASYBQP+uASYBQ/9xASYBRP9cASYBRv9cASYBR//XASYBSP9xASYBSv+FASYB+//XASYB/f/XASYCAv+uASYCA/+uASYCBP+uASYCCP+FASYCDP+FASYCV/+aASYCWP9xASYCWf9cASYCX//XASYCYP9xASYCYv+aASYDHf9xASYDHv9cASYDH/9xASYDIP9cASYDIf9xASYDIv9cASYDI/9xASYDJf9xASYDJv9cASYDJ/9xASYDKP9cASYDKf9xASYDKv9cASYDK/9xASYDLP9cASYDLf9xASYDLv9cASYDL/9xASYDMP9cASYDMf9xASYDMv9cASYDM/9xASYDNP9cASYDNv9xASYDOP9xASYDOv9xASYDPP9xASYDQP9xASYDQv9xASYDRP9xASYDSf/XASYDSv9xASYDS//XASYDTP9xASYDTf/XASYDTv9xASYDT//XASYDUf/XASYDUv9xASYDU//XASYDVP9xASYDVf/XASYDVv9xASYDV//XASYDWP9xASYDWf/XASYDWv9xASYDW//XASYDXP9xASYDXf/XASYDXv9xASYDX//XASYDYP9xASYDYv+aASYDZP+aASYDZv+aASYDaP+aASYDav+aASYDbP+aASYDbv+aASYDcP/XASYDjwApAScABQApAScACgApAScCBwApAScCCwApASgAD/+FASgAEP+uASgAEf+FASgAIgApASgAJP9xASgAJv/XASgAKv/XASgAMv/XASgANP/XASgANwApASgARP9cASgARv9xASgAR/9xASgASP9xASgASv9xASgAUP+aASgAUf+aASgAUv9xASgAU/+aASgAVP9xASgAVf+aASgAVv+FASgAWP+aASgAWf/XASgAWv/XASgAW//XASgAXP/XASgAXf+uASgAgv9xASgAg/9xASgAhP9xASgAhf9xASgAhv9xASgAh/9xASgAif/XASgAlP/XASgAlf/XASgAlv/XASgAl//XASgAmP/XASgAmv/XASgAov9xASgAo/9cASgApP9cASgApf9cASgApv9cASgAp/9cASgAqP9cASgAqf9xASgAqv9xASgAq/9xASgArP9xASgArf9xASgAtP9xASgAtf9xASgAtv9xASgAt/9xASgAuP9xASgAuv9xASgAu/+aASgAvP+aASgAvf+aASgAvv+aASgAv//XASgAwv9xASgAw/9cASgAxP9xASgAxf9cASgAxv9xASgAx/9cASgAyP/XASgAyf9xASgAyv/XASgAy/9xASgAzP/XASgAzf9xASgAzv/XASgAz/9xASgA0f9xASgA0/9xASgA1f9xASgA1/9xASgA2f9xASgA2/9xASgA3f9xASgA3v/XASgA3/9xASgA4P/XASgA4f9xASgA4v/XASgA4/9xASgA5P/XASgA5f9xASgA+v+aASgBBv+aASgBCP+aASgBDf+aASgBDv/XASgBD/9xASgBEP/XASgBEf9xASgBEv/XASgBE/9xASgBFP/XASgBFf9xASgBF/+aASgBGf+aASgBHf+FASgBIf+FASgBJAApASgBJgApASgBK/+aASgBLf+aASgBL/+aASgBMf+aASgBM/+aASgBNf+aASgBN//XASgBPP+uASgBPv+uASgBQP+uASgBQ/9xASgBRP9cASgBRv9cASgBR//XASgBSP9xASgBSv+FASgB+//XASgB/f/XASgCAv+uASgCA/+uASgCBP+uASgCCP+FASgCDP+FASgCV/+aASgCWP9xASgCWf9cASgCX//XASgCYP9xASgCYv+aASgDHf9xASgDHv9cASgDH/9xASgDIP9cASgDIf9xASgDIv9cASgDI/9xASgDJf9xASgDJv9cASgDJ/9xASgDKP9cASgDKf9xASgDKv9cASgDK/9xASgDLP9cASgDLf9xASgDLv9cASgDL/9xASgDMP9cASgDMf9xASgDMv9cASgDM/9xASgDNP9cASgDNv9xASgDOP9xASgDOv9xASgDPP9xASgDQP9xASgDQv9xASgDRP9xASgDSf/XASgDSv9xASgDS//XASgDTP9xASgDTf/XASgDTv9xASgDT//XASgDUf/XASgDUv9xASgDU//XASgDVP9xASgDVf/XASgDVv9xASgDV//XASgDWP9xASgDWf/XASgDWv9xASgDW//XASgDXP9xASgDXf/XASgDXv9xASgDX//XASgDYP9xASgDYv+aASgDZP+aASgDZv+aASgDaP+aASgDav+aASgDbP+aASgDbv+aASgDcP/XASgDjwApASoAD//XASoAEf/XASoAJP/sASoAgv/sASoAg//sASoAhP/sASoAhf/sASoAhv/sASoAh//sASoAwv/sASoAxP/sASoAxv/sASoBQ//sASoCCP/XASoCDP/XASoCWP/sASoDHf/sASoDH//sASoDIf/sASoDI//sASoDJf/sASoDJ//sASoDKf/sASoDK//sASoDLf/sASoDL//sASoDMf/sASoDM//sASwAD//XASwAEf/XASwAJP/sASwAgv/sASwAg//sASwAhP/sASwAhf/sASwAhv/sASwAh//sASwAwv/sASwAxP/sASwAxv/sASwBQ//sASwCCP/XASwCDP/XASwCWP/sASwDHf/sASwDH//sASwDIf/sASwDI//sASwDJf/sASwDJ//sASwDKf/sASwDK//sASwDLf/sASwDL//sASwDMf/sASwDM//sAS4AD//XAS4AEf/XAS4AJP/sAS4Agv/sAS4Ag//sAS4AhP/sAS4Ahf/sAS4Ahv/sAS4Ah//sAS4Awv/sAS4AxP/sAS4Axv/sAS4BQ//sAS4CCP/XAS4CDP/XAS4CWP/sAS4DHf/sAS4DH//sAS4DIf/sAS4DI//sAS4DJf/sAS4DJ//sAS4DKf/sAS4DK//sAS4DLf/sAS4DL//sAS4DMf/sAS4DM//sATAAD//XATAAEf/XATAAJP/sATAAgv/sATAAg//sATAAhP/sATAAhf/sATAAhv/sATAAh//sATAAwv/sATAAxP/sATAAxv/sATABQ//sATACCP/XATACDP/XATACWP/sATADHf/sATADH//sATADIf/sATADI//sATADJf/sATADJ//sATADKf/sATADK//sATADLf/sATADL//sATADMf/sATADM//sATIAD//XATIAEf/XATIAJP/sATIAgv/sATIAg//sATIAhP/sATIAhf/sATIAhv/sATIAh//sATIAwv/sATIAxP/sATIAxv/sATIBQ//sATICCP/XATICDP/XATICWP/sATIDHf/sATIDH//sATIDIf/sATIDI//sATIDJf/sATIDJ//sATIDKf/sATIDK//sATIDLf/sATIDL//sATIDMf/sATIDM//sATQAD//XATQAEf/XATQAJP/sATQAgv/sATQAg//sATQAhP/sATQAhf/sATQAhv/sATQAh//sATQAwv/sATQAxP/sATQAxv/sATQBQ//sATQCCP/XATQCDP/XATQCWP/sATQDHf/sATQDH//sATQDIf/sATQDI//sATQDJf/sATQDJ//sATQDKf/sATQDK//sATQDLf/sATQDL//sATQDMf/sATQDM//sATYAD/+aATYAEf+aATYAIgApATYAJP+uATYAJv/sATYAKv/sATYAMv/sATYANP/sATYARP/XATYARv/XATYAR//XATYASP/XATYASv/sATYAUP/sATYAUf/sATYAUv/XATYAU//sATYAVP/XATYAVf/sATYAVv/sATYAWP/sATYAgv+uATYAg/+uATYAhP+uATYAhf+uATYAhv+uATYAh/+uATYAif/sATYAlP/sATYAlf/sATYAlv/sATYAl//sATYAmP/sATYAmv/sATYAov/XATYAo//XATYApP/XATYApf/XATYApv/XATYAp//XATYAqP/XATYAqf/XATYAqv/XATYAq//XATYArP/XATYArf/XATYAtP/XATYAtf/XATYAtv/XATYAt//XATYAuP/XATYAuv/XATYAu//sATYAvP/sATYAvf/sATYAvv/sATYAwv+uATYAw//XATYAxP+uATYAxf/XATYAxv+uATYAx//XATYAyP/sATYAyf/XATYAyv/sATYAy//XATYAzP/sATYAzf/XATYAzv/sATYAz//XATYA0f/XATYA0//XATYA1f/XATYA1//XATYA2f/XATYA2//XATYA3f/XATYA3v/sATYA3//sATYA4P/sATYA4f/sATYA4v/sATYA4//sATYA5P/sATYA5f/sATYA+v/sATYBBv/sATYBCP/sATYBDf/sATYBDv/sATYBD//XATYBEP/sATYBEf/XATYBEv/sATYBE//XATYBFP/sATYBFf/XATYBF//sATYBGf/sATYBHf/sATYBIf/sATYBK//sATYBLf/sATYBL//sATYBMf/sATYBM//sATYBNf/sATYBQ/+uATYBRP/XATYBRv/XATYBR//sATYBSP/XATYBSv/sATYCCP+aATYCDP+aATYCV//sATYCWP+uATYCWf/XATYCX//sATYCYP/XATYCYv/sATYDHf+uATYDHv/XATYDH/+uATYDIP/XATYDIf+uATYDIv/XATYDI/+uATYDJf+uATYDJv/XATYDJ/+uATYDKP/XATYDKf+uATYDKv/XATYDK/+uATYDLP/XATYDLf+uATYDLv/XATYDL/+uATYDMP/XATYDMf+uATYDMv/XATYDM/+uATYDNP/XATYDNv/XATYDOP/XATYDOv/XATYDPP/XATYDQP/XATYDQv/XATYDRP/XATYDSf/sATYDSv/XATYDS//sATYDTP/XATYDTf/sATYDTv/XATYDT//sATYDUf/sATYDUv/XATYDU//sATYDVP/XATYDVf/sATYDVv/XATYDV//sATYDWP/XATYDWf/sATYDWv/XATYDW//sATYDXP/XATYDXf/sATYDXv/XATYDX//sATYDYP/XATYDYv/sATYDZP/sATYDZv/sATYDaP/sATYDav/sATYDbP/sATYDbv/sATcABQBSATcACgBSATcAD/+uATcAEf+uATcAIgApATcCBwBSATcCCP+uATcCCwBSATcCDP+uATgAD/+FATgAEf+FATgAIgApATgAJP+FATgAJv/XATgAKv/XATgAMv/XATgANP/XATgARP+aATgARv+aATgAR/+aATgASP+aATgASv/XATgAUP/DATgAUf/DATgAUv+aATgAU//DATgAVP+aATgAVf/DATgAVv+uATgAWP/DATgAXf/XATgAgv+FATgAg/+FATgAhP+FATgAhf+FATgAhv+FATgAh/+FATgAif/XATgAlP/XATgAlf/XATgAlv/XATgAl//XATgAmP/XATgAmv/XATgAov+aATgAo/+aATgApP+aATgApf+aATgApv+aATgAp/+aATgAqP+aATgAqf+aATgAqv+aATgAq/+aATgArP+aATgArf+aATgAtP+aATgAtf+aATgAtv+aATgAt/+aATgAuP+aATgAuv+aATgAu//DATgAvP/DATgAvf/DATgAvv/DATgAwv+FATgAw/+aATgAxP+FATgAxf+aATgAxv+FATgAx/+aATgAyP/XATgAyf+aATgAyv/XATgAy/+aATgAzP/XATgAzf+aATgAzv/XATgAz/+aATgA0f+aATgA0/+aATgA1f+aATgA1/+aATgA2f+aATgA2/+aATgA3f+aATgA3v/XATgA3//XATgA4P/XATgA4f/XATgA4v/XATgA4//XATgA5P/XATgA5f/XATgA+v/DATgBBv/DATgBCP/DATgBDf/DATgBDv/XATgBD/+aATgBEP/XATgBEf+aATgBEv/XATgBE/+aATgBFP/XATgBFf+aATgBF//DATgBGf/DATgBHf+uATgBIf+uATgBK//DATgBLf/DATgBL//DATgBMf/DATgBM//DATgBNf/DATgBPP/XATgBPv/XATgBQP/XATgBQ/+FATgBRP+aATgBRv+aATgBR//XATgBSP+aATgBSv+uATgCCP+FATgCDP+FATgCV//DATgCWP+FATgCWf+aATgCX//XATgCYP+aATgCYv/DATgDHf+FATgDHv+aATgDH/+FATgDIP+aATgDIf+FATgDIv+aATgDI/+FATgDJf+FATgDJv+aATgDJ/+FATgDKP+aATgDKf+FATgDKv+aATgDK/+FATgDLP+aATgDLf+FATgDLv+aATgDL/+FATgDMP+aATgDMf+FATgDMv+aATgDM/+FATgDNP+aATgDNv+aATgDOP+aATgDOv+aATgDPP+aATgDQP+aATgDQv+aATgDRP+aATgDSf/XATgDSv+aATgDS//XATgDTP+aATgDTf/XATgDTv+aATgDT//XATgDUf/XATgDUv+aATgDU//XATgDVP+aATgDVf/XATgDVv+aATgDV//XATgDWP+aATgDWf/XATgDWv+aATgDW//XATgDXP+aATgDXf/XATgDXv+aATgDX//XATgDYP+aATgDYv/DATgDZP/DATgDZv/DATgDaP/DATgDav/DATgDbP/DATgDbv/DATkABQBSATkACgBSATkAD/+uATkAEf+uATkAIgApATkCBwBSATkCCP+uATkCCwBSATkCDP+uAToAD/+FAToAEf+FAToAIgApAToAJP+FAToAJv/XAToAKv/XAToAMv/XAToANP/XAToARP+aAToARv+aAToAR/+aAToASP+aAToASv/XAToAUP/DAToAUf/DAToAUv+aAToAU//DAToAVP+aAToAVf/DAToAVv+uAToAWP/DAToAXf/XAToAgv+FAToAg/+FAToAhP+FAToAhf+FAToAhv+FAToAh/+FAToAif/XAToAlP/XAToAlf/XAToAlv/XAToAl//XAToAmP/XAToAmv/XAToAov+aAToAo/+aAToApP+aAToApf+aAToApv+aAToAp/+aAToAqP+aAToAqf+aAToAqv+aAToAq/+aAToArP+aAToArf+aAToAtP+aAToAtf+aAToAtv+aAToAt/+aAToAuP+aAToAuv+aAToAu//DAToAvP/DAToAvf/DAToAvv/DAToAwv+FAToAw/+aAToAxP+FAToAxf+aAToAxv+FAToAx/+aAToAyP/XAToAyf+aAToAyv/XAToAy/+aAToAzP/XAToAzf+aAToAzv/XAToAz/+aAToA0f+aAToA0/+aAToA1f+aAToA1/+aAToA2f+aAToA2/+aAToA3f+aAToA3v/XAToA3//XAToA4P/XAToA4f/XAToA4v/XAToA4//XAToA5P/XAToA5f/XAToA+v/DAToBBv/DAToBCP/DAToBDf/DAToBDv/XAToBD/+aAToBEP/XAToBEf+aAToBEv/XAToBE/+aAToBFP/XAToBFf+aAToBF//DAToBGf/DAToBHf+uAToBIf+uAToBK//DAToBLf/DAToBL//DAToBMf/DAToBM//DAToBNf/DAToBPP/XAToBPv/XAToBQP/XAToBQ/+FAToBRP+aAToBRv+aAToBR//XAToBSP+aAToBSv+uAToCCP+FAToCDP+FAToCV//DAToCWP+FAToCWf+aAToCX//XAToCYP+aAToCYv/DAToDHf+FAToDHv+aAToDH/+FAToDIP+aAToDIf+FAToDIv+aAToDI/+FAToDJf+FAToDJv+aAToDJ/+FAToDKP+aAToDKf+FAToDKv+aAToDK/+FAToDLP+aAToDLf+FAToDLv+aAToDL/+FAToDMP+aAToDMf+FAToDMv+aAToDM/+FAToDNP+aAToDNv+aAToDOP+aAToDOv+aAToDPP+aAToDQP+aAToDQv+aAToDRP+aAToDSf/XAToDSv+aAToDS//XAToDTP+aAToDTf/XAToDTv+aAToDT//XAToDUf/XAToDUv+aAToDU//XAToDVP+aAToDVf/XAToDVv+aAToDV//XAToDWP+aAToDWf/XAToDWv+aAToDW//XAToDXP+aAToDXf/XAToDXv+aAToDX//XAToDYP+aAToDYv/DAToDZP/DAToDZv/DAToDaP/DAToDav/DAToDbP/DAToDbv/DATsAJv/sATsAKv/sATsAMv/sATsANP/sATsAif/sATsAlP/sATsAlf/sATsAlv/sATsAl//sATsAmP/sATsAmv/sATsAyP/sATsAyv/sATsAzP/sATsAzv/sATsA3v/sATsA4P/sATsA4v/sATsA5P/sATsBDv/sATsBEP/sATsBEv/sATsBFP/sATsBR//sATsCX//sATsDSf/sATsDS//sATsDTf/sATsDT//sATsDUf/sATsDU//sATsDVf/sATsDV//sATsDWf/sATsDW//sATsDXf/sATsDX//sAT0AJv/sAT0AKv/sAT0AMv/sAT0ANP/sAT0Aif/sAT0AlP/sAT0Alf/sAT0Alv/sAT0Al//sAT0AmP/sAT0Amv/sAT0AyP/sAT0Ayv/sAT0AzP/sAT0Azv/sAT0A3v/sAT0A4P/sAT0A4v/sAT0A5P/sAT0BDv/sAT0BEP/sAT0BEv/sAT0BFP/sAT0BR//sAT0CX//sAT0DSf/sAT0DS//sAT0DTf/sAT0DT//sAT0DUf/sAT0DU//sAT0DVf/sAT0DV//sAT0DWf/sAT0DW//sAT0DXf/sAT0DX//sAT8AJv/sAT8AKv/sAT8AMv/sAT8ANP/sAT8Aif/sAT8AlP/sAT8Alf/sAT8Alv/sAT8Al//sAT8AmP/sAT8Amv/sAT8AyP/sAT8Ayv/sAT8AzP/sAT8Azv/sAT8A3v/sAT8A4P/sAT8A4v/sAT8A5P/sAT8BDv/sAT8BEP/sAT8BEv/sAT8BFP/sAT8BR//sAT8CX//sAT8DSf/sAT8DS//sAT8DTf/sAT8DT//sAT8DUf/sAT8DU//sAT8DVf/sAT8DV//sAT8DWf/sAT8DW//sAT8DXf/sAT8DX//sAUMABf9xAUMACv9xAUMAJv/XAUMAKv/XAUMALQEKAUMAMv/XAUMANP/XAUMAN/9xAUMAOf+uAUMAOv+uAUMAPP+FAUMAif/XAUMAlP/XAUMAlf/XAUMAlv/XAUMAl//XAUMAmP/XAUMAmv/XAUMAn/+FAUMAyP/XAUMAyv/XAUMAzP/XAUMAzv/XAUMA3v/XAUMA4P/XAUMA4v/XAUMA5P/XAUMBDv/XAUMBEP/XAUMBEv/XAUMBFP/XAUMBJP9xAUMBJv9xAUMBNv+uAUMBOP+FAUMBOv+FAUMBR//XAUMB+v+uAUMB/P+uAUMB/v+uAUMCAP+FAUMCB/9xAUMCC/9xAUMCX//XAUMDSf/XAUMDS//XAUMDTf/XAUMDT//XAUMDUf/XAUMDU//XAUMDVf/XAUMDV//XAUMDWf/XAUMDW//XAUMDXf/XAUMDX//XAUMDb/+FAUMDcf+FAUMDc/+FAUMDj/9xAUQABf/sAUQACv/sAUQCB//sAUQCC//sAUUALQB7AUcAD/+uAUcAEf+uAUcAJP/XAUcAN//DAUcAOf/sAUcAOv/sAUcAO//XAUcAPP/sAUcAPf/sAUcAgv/XAUcAg//XAUcAhP/XAUcAhf/XAUcAhv/XAUcAh//XAUcAn//sAUcAwv/XAUcAxP/XAUcAxv/XAUcBJP/DAUcBJv/DAUcBNv/sAUcBOP/sAUcBOv/sAUcBO//sAUcBPf/sAUcBP//sAUcBQ//XAUcBoP/sAUcB+v/sAUcB/P/sAUcB/v/sAUcCAP/sAUcCCP+uAUcCDP+uAUcCWP/XAUcDHf/XAUcDH//XAUcDIf/XAUcDI//XAUcDJf/XAUcDJ//XAUcDKf/XAUcDK//XAUcDLf/XAUcDL//XAUcDMf/XAUcDM//XAUcDb//sAUcDcf/sAUcDc//sAUcDj//DAVYABf9xAVYACv9xAVYBZv/XAVYBbf/XAVYBcf9xAVYBcv+FAVYBc//XAVYBdf+uAVYBeP+FAVYCB/9xAVYCC/9xAVYCVP+FAVsAD/+uAVsAEf+uAVsBVv/XAVsBX//XAVsBYv/XAVsBZP/sAVsBaf/XAVsBcP/sAVsBcf/DAVsBcv/sAVsBdP/XAVsBdf/sAVsBeP/sAVsBiP/sAVsCCP+uAVsCDP+uAVsCVP/sAVwAD/+FAVwAEf+FAVwBVv+FAVwBX/+FAVwBYv+FAVwBZv/XAVwBaf+FAVwBbf/XAVwBc//DAVwBdv/sAVwBef+aAVwBev+uAVwBe//DAVwBfP/DAVwBff/DAVwBfv+aAVwBgf/DAVwBgv+uAVwBhP/DAVwBhv/DAVwBh//DAVwBif/DAVwBjP+aAVwBjv+aAVwBj/+aAVwBkP+aAVwBkv/DAVwBk/+aAVwBlf/DAVwBlv/DAVwBmP/DAVwBmf+aAVwBmv/DAVwBm//DAVwCCP+FAVwCDP+FAVwCIf/sAV0Bcf/XAV0Bcv/sAV0BeP/sAV0CVP/sAV4ABf/XAV4ACv/XAV4CB//XAV4CC//XAV8ABf9xAV8ACv9xAV8BZv/XAV8Bbf/XAV8Bcf9xAV8Bcv+FAV8Bc//XAV8Bdf+uAV8BeP+FAV8CB/9xAV8CC/9xAV8CVP+FAWAAD/+uAWAAEf+uAWABVv/XAWABX//XAWABYv/XAWABaf/XAWABdP/XAWACCP+uAWACDP+uAWEAD/+FAWEAEP+uAWEAEf+FAWEBVv9cAWEBX/9cAWEBYv9cAWEBZv/DAWEBaf9cAWEBbf/DAWEBc/+aAWEBdv/DAWEBef9xAWEBev+aAWEBe/+aAWEBfP+uAWEBff+aAWEBfv9xAWEBgP/XAWEBgf/DAWEBgv+aAWEBhP+aAWEBhv+uAWEBh/+aAWEBif+aAWEBiv/XAWEBjP9xAWEBjv+aAWEBj/9xAWEBkP9xAWEBkv+aAWEBk/9xAWEBlP/XAWEBlf+aAWEBlv+aAWEBmP+aAWEBmf9xAWEBmv+aAWEBm/+aAWECAv+uAWECA/+uAWECBP+uAWECCP+FAWECDP+FAWECIf/DAWECU//XAWIABf9xAWIACv9xAWIBZv/XAWIBbf/XAWIBcf9xAWIBcv+FAWIBc//XAWIBdf+uAWIBeP+FAWICB/9xAWICC/9xAWICVP+FAWQBZv/sAWQBbf/sAWQBc//DAWYAD/+uAWYAEf+uAWYBVv/XAWYBX//XAWYBYv/XAWYBZP/sAWYBaf/XAWYBcP/sAWYBcf/DAWYBcv/sAWYBdP/XAWYBdf/sAWYBeP/sAWYBiP/sAWYCCP+uAWYCDP+uAWYCVP/sAWgBZv/XAWgBbf/XAWgBc//DAWgBjf/sAWgBkf/sAWkABf9xAWkACv9xAWkBZv/XAWkBbf/XAWkBcf9xAWkBcv+FAWkBc//XAWkBdf+uAWkBeP+FAWkCB/9xAWkCC/9xAWkCVP+FAW0AD/+uAW0AEf+uAW0BVv/XAW0BX//XAW0BYv/XAW0BZP/sAW0Baf/XAW0BcP/sAW0Bcf/DAW0Bcv/sAW0BdP/XAW0Bdf/sAW0BeP/sAW0BiP/sAW0CCP+uAW0CDP+uAW0CVP/sAW8AD/72AW8AEf72AW8BVv+aAW8BX/+aAW8BYv+aAW8BZP/sAW8Baf+aAW8BdP/XAW8BiP/XAW8CCP72AW8CDP72AXEAD/+FAXEAEP+uAXEAEf+FAXEBVv9cAXEBX/9cAXEBYv9cAXEBZv/DAXEBaf9cAXEBbf/DAXEBc/+aAXEBdv/DAXEBef9xAXEBev+aAXEBe/+aAXEBfP+uAXEBff+aAXEBfv9xAXEBgP/XAXEBgf/DAXEBgv+aAXEBhP+aAXEBhv+uAXEBh/+aAXEBif+aAXEBiv/XAXEBjP9xAXEBjv+aAXEBj/9xAXEBkP9xAXEBkv+aAXEBk/9xAXEBlP/XAXEBlf+aAXEBlv+aAXEBmP+aAXEBmf9xAXEBmv+aAXEBm/+aAXECAv+uAXECA/+uAXECBP+uAXECCP+FAXECDP+FAXECIf/DAXECU//XAXIAD/+FAXIAEf+FAXIBVv+FAXIBX/+FAXIBYv+FAXIBZv/XAXIBaf+FAXIBbf/XAXIBc//DAXIBdv/sAXIBef+aAXIBev+uAXIBe//DAXIBfP/DAXIBff/DAXIBfv+aAXIBgf/DAXIBgv+uAXIBhP/DAXIBhv/DAXIBh//DAXIBif/DAXIBjP+aAXIBjv+aAXIBj/+aAXIBkP+aAXIBkv/DAXIBk/+aAXIBlf/DAXIBlv/DAXIBmP/DAXIBmf+aAXIBmv/DAXIBm//DAXICCP+FAXICDP+FAXICIf/sAXMAD/+aAXMAEf+aAXMBVv/XAXMBX//XAXMBYv/XAXMBZP/DAXMBaf/XAXMBcP/sAXMBcf+uAXMBcv/DAXMBdP/sAXMBeP/DAXMBiP/sAXMCCP+aAXMCDP+aAXMCVP/DAXQBZv/XAXQBbf/XAXQBc//DAXQBjf/sAXQBkf/sAXUAD/+FAXUAEf+FAXUBVv+uAXUBX/+uAXUBYv+uAXUBZv/sAXUBaf+uAXUBbf/sAXUCCP+FAXUCDP+FAXYBcf/XAXYBcv/sAXYBeP/sAXYCVP/sAXgAD/+FAXgAEf+FAXgBVv+FAXgBX/+FAXgBYv+FAXgBZv/XAXgBaf+FAXgBbf/XAXgBc//DAXgBdv/sAXgBef+aAXgBev+uAXgBe//DAXgBfP/DAXgBff/DAXgBfv+aAXgBgf/DAXgBgv+uAXgBhP/DAXgBhv/DAXgBh//DAXgBif/DAXgBjP+aAXgBjv+aAXgBj/+aAXgBkP+aAXgBkv/DAXgBk/+aAXgBlf/DAXgBlv/DAXgBmP/DAXgBmf+aAXgBmv/DAXgBm//DAXgCCP+FAXgCDP+FAXgCIf/sAXkBiAApAXsABf/sAXsACv/sAXsCB//sAXsCC//sAXwABf+uAXwACv+uAXwBjf/sAXwBkf/sAXwCB/+uAXwCC/+uAX4BiAApAYAAD/+uAYAAEf+uAYABiP/sAYACCP+uAYACDP+uAYMAEP+aAYMBef/XAYMBfv/XAYMBgf/XAYMBjP/XAYMBjf/XAYMBj//XAYMBkP/XAYMBkf/XAYMBk//XAYMBmf/XAYMCAv+aAYMCA/+aAYMCBP+aAYQABf/sAYQACv/sAYQCB//sAYQCC//sAYUAD//XAYUAEf/XAYUCCP/XAYUCDP/XAYYABf+uAYYACv+uAYYBjf/sAYYBkf/sAYYCB/+uAYYCC/+uAYcBef/XAYcBfv/XAYcBjP/XAYcBj//XAYcBkP/XAYcBk//XAYcBmf/XAYgABf+FAYgACv+FAYgBef/sAYgBfv/sAYgBgP/XAYgBiv/XAYgBjP/sAYgBjf/XAYgBj//sAYgBkP/sAYgBkf/XAYgBk//sAYgBmf/sAYgCB/+FAYgCC/+FAYoAD/+uAYoAEf+uAYoBiP/sAYoCCP+uAYoCDP+uAYwABf/sAYwACv/sAYwBgP/XAYwBiv/XAYwCB//sAYwCC//sAY4ABf/sAY4ACv/sAY4BgP/XAY4Biv/XAY4CB//sAY4CC//sAZAAD//sAZAAEf/sAZACCP/sAZACDP/sAZMABf/sAZMACv/sAZMBgP/XAZMBiv/XAZMCB//sAZMCC//sAZQAD//DAZQAEP/XAZQAEf/DAZQBef/XAZQBfv/XAZQBgf/XAZQBjP/XAZQBj//XAZQBkP/XAZQBk//XAZQBmf/XAZQCAv/XAZQCA//XAZQCBP/XAZQCCP/DAZQCDP/DAZcABf/XAZcACv/XAZcCB//XAZcCC//XAZkABf/sAZkACv/sAZkBgP/XAZkBiv/XAZkCB//sAZkCC//sAZ0ABf+uAZ0ACv+uAZ0Bnf+FAZ0Bpv+FAZ0BqP/XAZ0BvP+aAZ0Bvf/XAZ0Bwf+aAZ0BxP+FAZ0B3P/XAZ0B3f/XAZ0B4f/XAZ0B5P/XAZ0B9v/XAZ0CB/+uAZ0CC/+uAZ0Cbv+uAZ0CfP+aAZ0CgP+uAZ0Cgv+uAZ0Cl/+uAZ0Cm/+uAZ0Cp/+uAZ0Cqf+FAZ0Cqv/XAZ0Ctf+aAZ0Ctv/XAZ0Ct/+aAZ0CuP/XAZ0Cuf+aAZ0Cuv/XAZ0Cvf+FAZ0Cvv/XAZ0Cv/+aAZ0CwP/XAZ0Cwf+aAZ0Cwv/XAZ0C1P+aAZ0C1f/XAZ0C9//XAZ0C+P/XAZ0C+f/XAZ0C+v/XAZ0C+//XAZ0C/P/XAZ0C/f+aAZ0C/v/XAZ0DA/+uAZ0DDf+aAZ0DDv/DAZ0DD/+aAZ0DEP/DAZ0DF/+FAZ0DGP/XAZ4AD/+FAZ4AEP+uAZ4AEf+FAZ4Bn//XAZ4BpP+aAZ4Bqv9xAZ4Brv+aAZ4Btf+aAZ4BuP/XAZ4Bu//XAZ4BvAApAZ4Bvv+uAZ4BzP+aAZ4Bzf+aAZ4Bzv+FAZ4Bz/9xAZ4B0P/XAZ4B0f/XAZ4B0v+aAZ4B0/+aAZ4B1P+aAZ4B1f+FAZ4B1v+aAZ4B1/+aAZ4B2P9xAZ4B2f+aAZ4B2v+aAZ4B2/9xAZ4B3P+uAZ4B3f+uAZ4B3v9xAZ4B3//XAZ4B4P+aAZ4B4f+aAZ4B4v+aAZ4B4/+aAZ4B5P+uAZ4B5f+aAZ4B5v+aAZ4B5//XAZ4B6P+aAZ4B6f/DAZ4B6v9xAZ4B7P+aAZ4B7f9xAZ4B7v+FAZ4B8v+FAZ4B8/+aAZ4B9f+aAZ4B9v+uAZ4B9/+aAZ4B+f+aAZ4CAv+uAZ4CA/+uAZ4CBP+uAZ4CCP+FAZ4CDP+FAZ4Cav9xAZ4Ca/+aAZ4CbP/XAZ4Cbf/XAZ4Ccf+aAZ4Ccv9xAZ4Cc/+FAZ4Cdf+aAZ4Cd/+aAZ4Cef+aAZ4Cff+aAZ4Cfv/XAZ4Cf/9xAZ4Cgf/XAZ4Cg//XAZ4ChP/XAZ4Chf9xAZ4Chv/XAZ4Ch/9xAZ4CiP/XAZ4Cif9xAZ4Civ/XAZ4Ci//XAZ4CjP/XAZ4Cjf9xAZ4Clv+aAZ4Cmv+aAZ4Cnv+aAZ4CoP/XAZ4Cov/XAZ4CpP+aAZ4Cpv+aAZ4Cqv+uAZ4CrP+aAZ4Crv+aAZ4CsP+aAZ4Csf/XAZ4Csv9xAZ4Cs//XAZ4CtP9xAZ4CtQApAZ4Ctv+uAZ4CuP+uAZ4Cuv+uAZ4CvP/XAZ4Cvv+uAZ4CwP+aAZ4Cwv+aAZ4CxP+aAZ4Cxf+aAZ4Cxv9xAZ4Cx/+aAZ4CyP9xAZ4Cy//XAZ4Czf+aAZ4Czv+aAZ4Cz/+FAZ4C0f+aAZ4C0/+aAZ4C1f+aAZ4C1/+aAZ4C2f9xAZ4C2/9xAZ4C3f9xAZ4C4P9xAZ4C5v/XAZ4C6P/XAZ4C6v/DAZ4C7P+aAZ4C7v+aAZ4C7//XAZ4C8P9xAZ4C8f/XAZ4C8v9xAZ4C8//XAZ4C9P9xAZ4C9v/XAZ4C+P+uAZ4C+v+uAZ4C/P+uAZ4C/v+aAZ4DAP+aAZ4DAv+aAZ4DBv/XAZ4DCP/XAZ4DCf9xAZ4DCv9xAZ4DC/9xAZ4DDP9xAZ4DDv+aAZ4DEP+aAZ4DEf+aAZ4DEv+FAZ4DFP+aAZ4DFf/XAZ4DFv9xAZ4DGP+uAZ4DGv9xAZ4DG/+aAZ4DHP+FAZ8Bn//XAZ8BuP/XAZ8Bu//XAZ8Bvv/XAZ8B4f/XAZ8CbP/XAZ8Cfv/XAZ8ChP/XAZ8Chv/XAZ8CiP/XAZ8Civ/XAZ8CjP/XAZ8Csf/XAZ8Cs//XAZ8CwP/XAZ8Cwv/XAZ8Cxf/XAZ8Cx//XAZ8C1f/XAZ8C7//XAZ8C8f/XAZ8C8//XAZ8C/v/XAZ8DCf/XAZ8DC//XAZ8DDv/XAZ8DEP/XAZ8DFf/XAaADDv/XAaADEP/XAaQABf+uAaQACv+uAaQBnf+FAaQBpv+FAaQBqP/XAaQBvP+aAaQBvf/XAaQBwf+aAaQBxP+FAaQB3P/XAaQB3f/XAaQB4f/XAaQB5P/XAaQB9v/XAaQCB/+uAaQCC/+uAaQCbv+uAaQCfP+aAaQCgP+uAaQCgv+uAaQCl/+uAaQCm/+uAaQCp/+uAaQCqf+FAaQCqv/XAaQCtf+aAaQCtv/XAaQCt/+aAaQCuP/XAaQCuf+aAaQCuv/XAaQCvf+FAaQCvv/XAaQCv/+aAaQCwP/XAaQCwf+aAaQCwv/XAaQC1P+aAaQC1f/XAaQC9//XAaQC+P/XAaQC+f/XAaQC+v/XAaQC+//XAaQC/P/XAaQC/f+aAaQC/v/XAaQDA/+uAaQDDf+aAaQDDv/DAaQDD/+aAaQDEP/DAaQDF/+FAaQDGP/XAaUABf+uAaUACv+uAaUBnf+FAaUBpv+FAaUBqP/XAaUBvP+aAaUBvf/XAaUBwf+aAaUBxP+FAaUB3P/XAaUB3f/XAaUB4f/XAaUB5P/XAaUB9v/XAaUCB/+uAaUCC/+uAaUCbv+uAaUCfP+aAaUCgP+uAaUCgv+uAaUCl/+uAaUCm/+uAaUCp/+uAaUCqf+FAaUCqv/XAaUCtf+aAaUCtv/XAaUCt/+aAaUCuP/XAaUCuf+aAaUCuv/XAaUCvf+FAaUCvv/XAaUCv/+aAaUCwP/XAaUCwf+aAaUCwv/XAaUC1P+aAaUC1f/XAaUC9//XAaUC+P/XAaUC+f/XAaUC+v/XAaUC+//XAaUC/P/XAaUC/f+aAaUC/v/XAaUDA/+uAaUDDf+aAaUDDv/DAaUDD/+aAaUDEP/DAaUDF/+FAaUDGP/XAaYABf+uAaYACv+uAaYBnf+FAaYBpv+FAaYBqP/XAaYBvP+aAaYBvf/XAaYBwf+aAaYBxP+FAaYB3P/XAaYB3f/XAaYB4f/XAaYB5P/XAaYB9v/XAaYCB/+uAaYCC/+uAaYCbv+uAaYCfP+aAaYCgP+uAaYCgv+uAaYCl/+uAaYCm/+uAaYCp/+uAaYCqf+FAaYCqv/XAaYCtf+aAaYCtv/XAaYCt/+aAaYCuP/XAaYCuf+aAaYCuv/XAaYCvf+FAaYCvv/XAaYCv/+aAaYCwP/XAaYCwf+aAaYCwv/XAaYC1P+aAaYC1f/XAaYC9//XAaYC+P/XAaYC+f/XAaYC+v/XAaYC+//XAaYC/P/XAaYC/f+aAaYC/v/XAaYDA/+uAaYDDf+aAaYDDv/DAaYDD/+aAaYDEP/DAaYDF/+FAaYDGP/XAacBn//XAacBuP/XAacBu//XAacBvv/XAacBwf/XAacB4f/XAacCbP/XAacCfP/XAacCfv/XAacChP/XAacChv/XAacCiP/XAacCiv/XAacCjP/XAacCsf/XAacCs//XAacCv//XAacCwP/XAacCwf/XAacCwv/XAacCxf+aAacCx/+aAacC1P/XAacC1f/XAacC7//XAacC8f/XAacC8//XAacC/f/XAacC/v/XAacDCf/XAacDC//XAacDDv/XAacDEP/XAacDFf/XAacDGf/sAagAD/+FAagAEf+FAagBn//sAagBpP+aAagBqv9xAagBrv+aAagBtf+aAagBuP/sAagBu//sAagBvv/DAagByf/sAagBzv+uAagBz//XAagB1f+uAagB2P/XAagB2//XAagB3v/XAagB4f/XAagB6v/XAagB6wBmAagB7f/XAagB7v/sAagB8v+uAagB9ABmAagCCP+FAagCDP+FAagCav/XAagCbP/sAagCcv9xAagCc/+uAagCfv/sAagCf//XAagChP/sAagChf/XAagChv/sAagCh//XAagCiP/sAagCif/XAagCiv/sAagCjP/sAagCjf/XAagCmABmAagCqABmAagCsf/sAagCsv/XAagCs//sAagCtP/XAagCwP/XAagCwv/XAagCxf/XAagCxv/DAagCx//XAagCyP/DAagCzv+aAagCz/+uAagC1f/XAagC2f9xAagC2/9xAagC3f9xAagC4P/XAagC7//sAagC8P/XAagC8f/sAagC8v/XAagC8//sAagC9P/XAagC/v/XAagDCf9xAagDCv/XAagDC/9xAagDDP/XAagDEf+aAagDEv+uAagDFf/sAagDFv/XAagDGv/XAagDG/+aAagDHP+uAaoABf9xAaoACv9xAaoBnf+aAaoBpv+aAaoBvP9xAaoBvv/XAaoBwf+aAaoBxP+aAaoB3P/XAaoB4f/XAaoB5P/XAaoCB/9xAaoCC/9xAaoCbv/XAaoCfP+aAaoCgP+uAaoCgv+uAaoCl//XAaoCm//XAaoCp//XAaoCqf+aAaoCqv/XAaoCtf9xAaoCtv/XAaoCt/+FAaoCuf+FAaoCvf+aAaoCvv/XAaoCv/+aAaoCwP/XAaoCwf+aAaoCwv/XAaoCxf+aAaoCx/+aAaoC1P+aAaoC1f/XAaoC4f/XAaoC4//XAaoC/f+aAaoC/v/XAaoDA//XAaoDDf9xAaoDDv/XAaoDD/9xAaoDEP/XAaoDF/+aAaoDGP/XAasABf/XAasACv/XAasBqv/sAasBwf/XAasCB//XAasCC//XAasCcv/sAasCfP/XAasCv//XAasCwf/XAasCxf/XAasCx//XAasC1P/XAasC2f/sAasC2//sAasC3f/sAasC/f/XAawAD/+uAawAEf+uAawCCP+uAawCDP+uAawCgP/sAawCgv/sAawCt//sAawCuf/sAawDDf/XAawDD//XAa0AD/+FAa0AEP+uAa0AEf+FAa0Bn//XAa0BpP+aAa0Bqv9xAa0Brv+aAa0Btf+aAa0BuP/XAa0Bu//XAa0BvAApAa0Bvv+uAa0BzP+aAa0Bzf+aAa0Bzv+FAa0Bz/9xAa0B0P/XAa0B0f/XAa0B0v+aAa0B0/+aAa0B1P+aAa0B1f+FAa0B1v+aAa0B1/+aAa0B2P9xAa0B2f+aAa0B2v+aAa0B2/9xAa0B3P+uAa0B3f+uAa0B3v9xAa0B3//XAa0B4P+aAa0B4f+aAa0B4v+aAa0B4/+aAa0B5P+uAa0B5f+aAa0B5v+aAa0B5//XAa0B6P+aAa0B6f/DAa0B6v9xAa0B7P+aAa0B7f9xAa0B7v+FAa0B8v+FAa0B8/+aAa0B9f+aAa0B9v+uAa0B9/+aAa0B+f+aAa0CAv+uAa0CA/+uAa0CBP+uAa0CCP+FAa0CDP+FAa0Cav9xAa0Ca/+aAa0CbP/XAa0Cbf/XAa0Ccf+aAa0Ccv9xAa0Cc/+FAa0Cdf+aAa0Cd/+aAa0Cef+aAa0Cff+aAa0Cfv/XAa0Cf/9xAa0Cgf/XAa0Cg//XAa0ChP/XAa0Chf9xAa0Chv/XAa0Ch/9xAa0CiP/XAa0Cif9xAa0Civ/XAa0Ci//XAa0CjP/XAa0Cjf9xAa0Clv+aAa0Cmv+aAa0Cnv+aAa0CoP/XAa0Cov/XAa0CpP+aAa0Cpv+aAa0Cqv+uAa0CrP+aAa0Crv+aAa0CsP+aAa0Csf/XAa0Csv9xAa0Cs//XAa0CtP9xAa0CtQApAa0Ctv+uAa0CuP+uAa0Cuv+uAa0CvP/XAa0Cvv+uAa0CwP+aAa0Cwv+aAa0CxP+aAa0Cxf+aAa0Cxv9xAa0Cx/+aAa0CyP9xAa0Cy//XAa0Czf+aAa0Czv+aAa0Cz/+FAa0C0f+aAa0C0/+aAa0C1f+aAa0C1/+aAa0C2f9xAa0C2/9xAa0C3f9xAa0C4P9xAa0C5v/XAa0C6P/XAa0C6v/DAa0C7P+aAa0C7v+aAa0C7//XAa0C8P9xAa0C8f/XAa0C8v9xAa0C8//XAa0C9P9xAa0C9v/XAa0C+P+uAa0C+v+uAa0C/P+uAa0C/v+aAa0DAP+aAa0DAv+aAa0DBv/XAa0DCP/XAa0DCf9xAa0DCv9xAa0DC/9xAa0DDP9xAa0DDv+aAa0DEP+aAa0DEf+aAa0DEv+FAa0DFP+aAa0DFf/XAa0DFv9xAa0DGP+uAa0DGv9xAa0DG/+aAa0DHP+FAa4BowDhAa4C6gApAa4DDv/XAa4DEP/XAbABn//XAbABuP/XAbABu//XAbABvv/XAbABwf/XAbAB4f/XAbACbP/XAbACfP/XAbACfv/XAbAChP/XAbAChv/XAbACiP/XAbACiv/XAbACjP/XAbACsf/XAbACs//XAbACv//XAbACwP/XAbACwf/XAbACwv/XAbACxf+aAbACx/+aAbAC1P/XAbAC1f/XAbAC7//XAbAC8f/XAbAC8//XAbAC/f/XAbAC/v/XAbADCf/XAbADC//XAbADDv/XAbADEP/XAbADFf/XAbADGf/sAbEAD/+uAbEAEf+uAbECCP+uAbECDP+uAbECgP/sAbECgv/sAbECt//sAbECuf/sAbEDDf/XAbEDD//XAbQBn//XAbQBuP/XAbQBu//XAbQBvv/XAbQBwf/XAbQB4f/XAbQCbP/XAbQCfP/XAbQCfv/XAbQChP/XAbQChv/XAbQCiP/XAbQCiv/XAbQCjP/XAbQCsf/XAbQCs//XAbQCv//XAbQCwP/XAbQCwf/XAbQCwv/XAbQCxf+aAbQCx/+aAbQC1P/XAbQC1f/XAbQC7//XAbQC8f/XAbQC8//XAbQC/f/XAbQC/v/XAbQDCf/XAbQDC//XAbQDDv/XAbQDEP/XAbQDFf/XAbQDGf/sAbgAD/+uAbgAEf+uAbgBnf/sAbgBpP/XAbgBpv/sAbgBqP/XAbgBqv/XAbgBrv/XAbgBsP/XAbgBsf/sAbgBtf/XAbgBvP/DAbgBvf/XAbgBv//XAbgBwf/XAbgBxP/sAbgBx//sAbgBzv/sAbgB1f/sAbgB8v/sAbgCCP+uAbgCDP+uAbgCcv/XAbgCc//sAbgCev/sAbgCfP/XAbgCgP/sAbgCgv/sAbgCn//XAbgCof/sAbgCqf/sAbgCtf/DAbgCt//sAbgCuf/sAbgCu//XAbgCvf/sAbgCv//XAbgCwf/XAbgCyv/XAbgCzv/XAbgCz//sAbgC1P/XAbgC2f/XAbgC2//XAbgC3f/XAbgC5f/XAbgC5//sAbgC9f/sAbgC9//XAbgC+f/XAbgC+//XAbgC/f/XAbgDBf/XAbgDB//XAbgDDf/XAbgDD//XAbgDEf/XAbgDEv/sAbgDF//sAbgDG//XAbgDHP/sAboAD/72AboAEf72AboBpP+FAboBqv+aAboBrv+FAboBsP/XAboBtf+FAboBv//XAboBzv+aAboB1f+aAboB8v+aAboCCP72AboCDP72AboCcv+aAboCc/+aAboCdv/sAboCn//XAboCu//XAboCyv/XAboCzv+FAboCz/+aAboC2f+aAboC2/+aAboC3f+aAboC5f/XAboDBf/XAboDB//XAboDCf+uAboDC/+uAboDEf+FAboDEv+aAboDG/+FAboDHP+aAbsBn//XAbsBuP/XAbsBu//XAbsBvv/XAbsB4f/XAbsCbP/XAbsCfv/XAbsChP/XAbsChv/XAbsCiP/XAbsCiv/XAbsCjP/XAbsCsf/XAbsCs//XAbsCwP/XAbsCwv/XAbsCxf/XAbsCx//XAbsC1f/XAbsC7//XAbsC8f/XAbsC8//XAbsC/v/XAbsDCf/XAbsDC//XAbsDDv/XAbsDEP/XAbsDFf/XAbwAD/+FAbwAEP+uAbwAEf+FAbwBn//XAbwBpP+aAbwBqv9xAbwBrv+aAbwBtf+aAbwBuP/XAbwBu//XAbwBvAApAbwBvv+uAbwBzP+aAbwBzf+aAbwBzv+FAbwBz/9xAbwB0P/XAbwB0f/XAbwB0v+aAbwB0/+aAbwB1P+aAbwB1f+FAbwB1v+aAbwB1/+aAbwB2P9xAbwB2f+aAbwB2v+aAbwB2/9xAbwB3P+uAbwB3f+uAbwB3v9xAbwB3//XAbwB4P+aAbwB4f+aAbwB4v+aAbwB4/+aAbwB5P+uAbwB5f+aAbwB5v+aAbwB5//XAbwB6P+aAbwB6f/DAbwB6v9xAbwB7P+aAbwB7f9xAbwB7v+FAbwB8v+FAbwB8/+aAbwB9f+aAbwB9v+uAbwB9/+aAbwB+f+aAbwCAv+uAbwCA/+uAbwCBP+uAbwCCP+FAbwCDP+FAbwCav9xAbwCa/+aAbwCbP/XAbwCbf/XAbwCcf+aAbwCcv9xAbwCc/+FAbwCdf+aAbwCd/+aAbwCef+aAbwCff+aAbwCfv/XAbwCf/9xAbwCgf/XAbwCg//XAbwChP/XAbwChf9xAbwChv/XAbwCh/9xAbwCiP/XAbwCif9xAbwCiv/XAbwCi//XAbwCjP/XAbwCjf9xAbwClv+aAbwCmv+aAbwCnv+aAbwCoP/XAbwCov/XAbwCpP+aAbwCpv+aAbwCqv+uAbwCrP+aAbwCrv+aAbwCsP+aAbwCsf/XAbwCsv9xAbwCs//XAbwCtP9xAbwCtQApAbwCtv+uAbwCuP+uAbwCuv+uAbwCvP/XAbwCvv+uAbwCwP+aAbwCwv+aAbwCxP+aAbwCxf+aAbwCxv9xAbwCx/+aAbwCyP9xAbwCy//XAbwCzf+aAbwCzv+aAbwCz/+FAbwC0f+aAbwC0/+aAbwC1f+aAbwC1/+aAbwC2f9xAbwC2/9xAbwC3f9xAbwC4P9xAbwC5v/XAbwC6P/XAbwC6v/DAbwC7P+aAbwC7v+aAbwC7//XAbwC8P9xAbwC8f/XAbwC8v9xAbwC8//XAbwC9P9xAbwC9v/XAbwC+P+uAbwC+v+uAbwC/P+uAbwC/v+aAbwDAP+aAbwDAv+aAbwDBv/XAbwDCP/XAbwDCf9xAbwDCv9xAbwDC/9xAbwDDP9xAbwDDv+aAbwDEP+aAbwDEf+aAbwDEv+FAbwDFP+aAbwDFf/XAbwDFv9xAbwDGP+uAbwDGv9xAbwDG/+aAbwDHP+FAb0AD/+FAb0AEf+FAb0Bn//sAb0BpP+aAb0Bqv9xAb0Brv+aAb0Btf+aAb0BuP/sAb0Bu//sAb0Bvv/DAb0Byf/sAb0Bzv+uAb0Bz//XAb0B1f+uAb0B2P/XAb0B2//XAb0B3v/XAb0B4f/XAb0B6v/XAb0B6wBmAb0B7f/XAb0B7v/sAb0B8v+uAb0B9ABmAb0CCP+FAb0CDP+FAb0Cav/XAb0CbP/sAb0Ccv9xAb0Cc/+uAb0Cfv/sAb0Cf//XAb0ChP/sAb0Chf/XAb0Chv/sAb0Ch//XAb0CiP/sAb0Cif/XAb0Civ/sAb0CjP/sAb0Cjf/XAb0CmABmAb0CqABmAb0Csf/sAb0Csv/XAb0Cs//sAb0CtP/XAb0CwP/XAb0Cwv/XAb0Cxf/XAb0Cxv/DAb0Cx//XAb0CyP/DAb0Czv+aAb0Cz/+uAb0C1f/XAb0C2f9xAb0C2/9xAb0C3f9xAb0C4P/XAb0C7//sAb0C8P/XAb0C8f/sAb0C8v/XAb0C8//sAb0C9P/XAb0C/v/XAb0DCf9xAb0DCv/XAb0DC/9xAb0DDP/XAb0DEf+aAb0DEv+uAb0DFf/sAb0DFv/XAb0DGv/XAb0DG/+aAb0DHP+uAb4AD/+uAb4AEf+uAb4Bnf/XAb4BpP/XAb4Bpv/XAb4BqP/DAb4Bqv/XAb4Brv/XAb4BsP/XAb4Bsf/XAb4Btf/XAb4BvP/DAb4Bvf/DAb4Bv//XAb4BxP/XAb4Bx//XAb4Bzv/sAb4B1f/sAb4B8v/sAb4CCP+uAb4CDP+uAb4Ccv/XAb4Cc//sAb4Cev/XAb4CgP/sAb4Cgv/sAb4Cn//XAb4Cof/XAb4Cqf/XAb4Ctf/DAb4Ct//DAb4Cuf/DAb4Cu//XAb4Cvf/XAb4Cyv/XAb4Czv/XAb4Cz//sAb4C2f/XAb4C2//XAb4C3f/XAb4C5f/XAb4C5//XAb4C9f/XAb4C9//DAb4C+f/DAb4C+//DAb4DBf/XAb4DB//XAb4DDf/XAb4DD//XAb4DEf/XAb4DEv/sAb4DF//XAb4DG//XAb4DHP/sAb8Bn//XAb8BuP/XAb8Bu//XAb8Bvv/XAb8Bwf/XAb8B4f/XAb8CbP/XAb8CfP/XAb8Cfv/XAb8ChP/XAb8Chv/XAb8CiP/XAb8Civ/XAb8CjP/XAb8Csf/XAb8Cs//XAb8Cv//XAb8CwP/XAb8Cwf/XAb8Cwv/XAb8Cxf+aAb8Cx/+aAb8C1P/XAb8C1f/XAb8C7//XAb8C8f/XAb8C8//XAb8C/f/XAb8C/v/XAb8DCf/XAb8DC//XAb8DDv/XAb8DEP/XAb8DFf/XAb8DGf/sAcABowDhAcAC6gApAcADDv/XAcADEP/XAcMBowDhAcMC6gApAcMDDv/XAcMDEP/XAcQABf+uAcQACv+uAcQBnf+FAcQBpv+FAcQBqP/XAcQBvP+aAcQBvf/XAcQBwf+aAcQBxP+FAcQB3P/XAcQB3f/XAcQB4f/XAcQB5P/XAcQB9v/XAcQCB/+uAcQCC/+uAcQCbv+uAcQCfP+aAcQCgP+uAcQCgv+uAcQCl/+uAcQCm/+uAcQCp/+uAcQCqf+FAcQCqv/XAcQCtf+aAcQCtv/XAcQCt/+aAcQCuP/XAcQCuf+aAcQCuv/XAcQCvf+FAcQCvv/XAcQCv/+aAcQCwP/XAcQCwf+aAcQCwv/XAcQC1P+aAcQC1f/XAcQC9//XAcQC+P/XAcQC+f/XAcQC+v/XAcQC+//XAcQC/P/XAcQC/f+aAcQC/v/XAcQDA/+uAcQDDf+aAcQDDv/DAcQDD/+aAcQDEP/DAcQDF/+FAcQDGP/XAcYABf+uAcYACv+uAcYBnf+FAcYBpv+FAcYBqP/XAcYBvP+aAcYBvf/XAcYBwf+aAcYBxP+FAcYB3P/XAcYB3f/XAcYB4f/XAcYB5P/XAcYB9v/XAcYCB/+uAcYCC/+uAcYCbv+uAcYCfP+aAcYCgP+uAcYCgv+uAcYCl/+uAcYCm/+uAcYCp/+uAcYCqf+FAcYCqv/XAcYCtf+aAcYCtv/XAcYCt/+aAcYCuP/XAcYCuf+aAcYCuv/XAcYCvf+FAcYCvv/XAcYCv/+aAcYCwP/XAcYCwf+aAcYCwv/XAcYC1P+aAcYC1f/XAcYC9//XAcYC+P/XAcYC+f/XAcYC+v/XAcYC+//XAcYC/P/XAcYC/f+aAcYC/v/XAcYDA/+uAcYDDf+aAcYDDv/DAcYDD/+aAcYDEP/DAcYDF/+FAcYDGP/XAccAD/+uAccAEf+uAccBnf/sAccBpP/XAccBpv/sAccBqP/XAccBqv/XAccBrv/XAccBsP/XAccBsf/sAccBtf/XAccBvP/DAccBvf/XAccBv//XAccBwf/XAccBxP/sAccBx//sAccBzv/sAccB1f/sAccB8v/sAccCCP+uAccCDP+uAccCcv/XAccCc//sAccCev/sAccCfP/XAccCgP/sAccCgv/sAccCn//XAccCof/sAccCqf/sAccCtf/DAccCt//sAccCuf/sAccCu//XAccCvf/sAccCv//XAccCwf/XAccCyv/XAccCzv/XAccCz//sAccC1P/XAccC2f/XAccC2//XAccC3f/XAccC5f/XAccC5//sAccC9f/sAccC9//XAccC+f/XAccC+//XAccC/f/XAccDBf/XAccDB//XAccDDf/XAccDD//XAccDEf/XAccDEv/sAccDF//sAccDG//XAccDHP/sAcgAD/+uAcgAEf+uAcgBnf/sAcgBpP/XAcgBpv/sAcgBqP/XAcgBqv/XAcgBrv/XAcgBsP/XAcgBsf/sAcgBtf/XAcgBvP/DAcgBvf/XAcgBv//XAcgBwf/XAcgBxP/sAcgBx//sAcgBzv/sAcgB1f/sAcgB8v/sAcgCCP+uAcgCDP+uAcgCcv/XAcgCc//sAcgCev/sAcgCfP/XAcgCgP/sAcgCgv/sAcgCn//XAcgCof/sAcgCqf/sAcgCtf/DAcgCt//sAcgCuf/sAcgCu//XAcgCvf/sAcgCv//XAcgCwf/XAcgCyv/XAcgCzv/XAcgCz//sAcgC1P/XAcgC2f/XAcgC2//XAcgC3f/XAcgC5f/XAcgC5//sAcgC9f/sAcgC9//XAcgC+f/XAcgC+//XAcgC/f/XAcgDBf/XAcgDB//XAcgDDf/XAcgDD//XAcgDEf/XAcgDEv/sAcgDF//sAcgDG//XAcgDHP/sAcoABf/sAcoACv/sAcoCB//sAcoCC//sAcwB6QApAc0AD/+aAc0AEP/XAc0AEf+aAc0Bzv/DAc0Bz//sAc0B1f/DAc0B2P/sAc0B2//sAc0B3v/sAc0B6v/sAc0B7f/sAc0B8v/DAc0CAv/XAc0CA//XAc0CBP/XAc0CCP+aAc0CDP+aAc0Cav/sAc0Cc//DAc0Cf//sAc0Chf/sAc0Ch//sAc0Cif/sAc0Cjf/sAc0Csv/sAc0CtP/sAc0Cz//DAc0C4P/sAc0C8P/sAc0C8v/sAc0C9P/sAc0DCv/sAc0DDP/sAc0DEv/DAc0DFv/sAc0DGv/sAc0DHP/DAc4ABf/sAc4ACv/sAc4CB//sAc4CC//sAc8ABf/sAc8ACv/sAc8CB//sAc8CC//sAdABz//XAdAB2P/XAdAB2//XAdAB3v/XAdAB4f/XAdAB6v/XAdAB7f/XAdACav/XAdACf//XAdAChf/XAdACh//XAdACif/XAdACjf/XAdACsv/XAdACtP/XAdACwP/XAdACwv/XAdACxv/XAdACyP/XAdAC1f/XAdAC4P/XAdAC8P/XAdAC8v/XAdAC9P/XAdAC/v/XAdADCv/XAdADDP/XAdADFv/XAdADGv/XAdEB6QApAdQBz//XAdQB2P/XAdQB2//XAdQB3v/XAdQB4f/XAdQB6v/XAdQB7f/XAdQCav/XAdQCf//XAdQChf/XAdQCh//XAdQCif/XAdQCjf/XAdQCsv/XAdQCtP/XAdQCwP/XAdQCwv/XAdQCxv/XAdQCyP/XAdQC1f/XAdQC4P/XAdQC8P/XAdQC8v/XAdQC9P/XAdQC/v/XAdQDCv/XAdQDDP/XAdQDFv/XAdQDGv/XAdgABf/sAdgACv/sAdgB0P/XAdgB3P/sAdgB3f/sAdgB3//XAdgB4f/sAdgB5P/sAdgB9v/sAdgCB//sAdgCC//sAdgCoP/XAdgCqv/sAdgCtv/sAdgCvP/XAdgCvv/sAdgCwP/sAdgCwv/sAdgCy//XAdgC1f/sAdgC5v/XAdgC+P/sAdgC+v/sAdgC/P/sAdgC/v/sAdgDBv/XAdgDCP/XAdgDDv/sAdgDEP/sAdgDGP/sAdoABf/sAdoACv/sAdoB0P/XAdoB3P/sAdoB3f/sAdoB3//XAdoB4f/sAdoB5P/sAdoB9v/sAdoCB//sAdoCC//sAdoCoP/XAdoCqv/sAdoCtv/sAdoCvP/XAdoCvv/sAdoCwP/sAdoCwv/sAdoCy//XAdoC1f/sAdoC5v/XAdoC+P/sAdoC+v/sAdoC/P/sAdoC/v/sAdoDBv/XAdoDCP/XAdoDDv/sAdoDEP/sAdoDGP/sAdwAD/+aAdwAEP/XAdwAEf+aAdwBzv/DAdwBz//sAdwB1f/DAdwB2P/sAdwB2//sAdwB3v/sAdwB6v/sAdwB7f/sAdwB8v/DAdwCAv/XAdwCA//XAdwCBP/XAdwCCP+aAdwCDP+aAdwCav/sAdwCc//DAdwCf//sAdwChf/sAdwCh//sAdwCif/sAdwCjf/sAdwCsv/sAdwCtP/sAdwCz//DAdwC4P/sAdwC8P/sAdwC8v/sAdwC9P/sAdwDCv/sAdwDDP/sAdwDEv/DAdwDFv/sAdwDGv/sAdwDHP/DAd0AD/+uAd0AEf+uAd0Bzv/XAd0B1f/XAd0B8v/XAd0CCP+uAd0CDP+uAd0Cc//XAd0Cz//XAd0DEv/XAd0DHP/XAd4ABf/sAd4ACv/sAd4B0P/XAd4B3P/sAd4B3f/sAd4B3//XAd4B4f/sAd4B5P/sAd4B9v/sAd4CB//sAd4CC//sAd4CoP/XAd4Cqv/sAd4Ctv/sAd4CvP/XAd4Cvv/sAd4CwP/sAd4Cwv/sAd4Cy//XAd4C1f/sAd4C5v/XAd4C+P/sAd4C+v/sAd4C/P/sAd4C/v/sAd4DBv/XAd4DCP/XAd4DDv/sAd4DEP/sAd4DGP/sAd8Bz//XAd8B2P/XAd8B2//XAd8B3v/XAd8B4f/XAd8B6v/XAd8B7f/XAd8Cav/XAd8Cf//XAd8Chf/XAd8Ch//XAd8Cif/XAd8Cjf/XAd8Csv/XAd8CtP/XAd8CwP/XAd8Cwv/XAd8Cxv/XAd8CyP/XAd8C1f/XAd8C4P/XAd8C8P/XAd8C8v/XAd8C9P/XAd8C/v/XAd8DCv/XAd8DDP/XAd8DFv/XAd8DGv/XAeAABf/sAeAACv/sAeACB//sAeACC//sAeMABf/sAeMACv/sAeMCB//sAeMCC//sAeQABf+FAeQACv+FAeQB0P/XAeQB3P+aAeQB3f/DAeQB3//XAeQB4f+uAeQB5P+aAeQB9v/DAeQCB/+FAeQCC/+FAeQCbf/XAeQCgf/XAeQCg//XAeQCi//XAeQCoP/XAeQCqv+aAeQCtv+aAeQCuP/DAeQCuv/DAeQCvP/XAeQCvv+aAeQCwP+uAeQCwv+uAeQCxv/XAeQCyP/XAeQCy//XAeQC1f+uAeQC5v/XAeQC6v/XAeQC+P/DAeQC+v/DAeQC/P/DAeQC/v+uAeQDBv/XAeQDCP/XAeQDDv+aAeQDEP+aAeQDGP+aAeYABf+FAeYACv+FAeYB0P/XAeYB3P+aAeYB3f/DAeYB3//XAeYB4f+uAeYB5P+aAeYB9v/DAeYCB/+FAeYCC/+FAeYCbf/XAeYCgf/XAeYCg//XAeYCi//XAeYCoP/XAeYCqv+aAeYCtv+aAeYCuP/DAeYCuv/DAeYCvP/XAeYCvv+aAeYCwP+uAeYCwv+uAeYCxv/XAeYCyP/XAeYCy//XAeYC1f+uAeYC5v/XAeYC6v/XAeYC+P/DAeYC+v/DAeYC/P/DAeYC/v+uAeYDBv/XAeYDCP/XAeYDDv+aAeYDEP+aAeYDGP+aAecABf/sAecACv/sAecB0P/XAecB3P/sAecB3f/sAecB3//XAecB4f/sAecB5P/sAecB9v/sAecCB//sAecCC//sAecCoP/XAecCqv/sAecCtv/sAecCvP/XAecCvv/sAecCwP/sAecCwv/sAecCy//XAecC1f/sAecC5v/XAecC+P/sAecC+v/sAecC/P/sAecC/v/sAecDBv/XAecDCP/XAecDDv/sAecDEP/sAecDGP/sAegABf/sAegACv/sAegB0P/XAegB3P/sAegB3f/sAegB3//XAegB4f/sAegB5P/sAegB9v/sAegCB//sAegCC//sAegCoP/XAegCqv/sAegCtv/sAegCvP/XAegCvv/sAegCwP/sAegCwv/sAegCy//XAegC1f/sAegC5v/XAegC+P/sAegC+v/sAegC/P/sAegC/v/sAegDBv/XAegDCP/XAegDDv/sAegDEP/sAegDGP/sAeoABf/sAeoACv/sAeoCB//sAeoCC//sAesABf/sAesACv/sAesCB//sAesCC//sAesDDv/XAesDEP/XAewAD/+aAewAEP/XAewAEf+aAewBzv/DAewBz//sAewB1f/DAewB2P/sAewB2//sAewB3v/sAewB6v/sAewB7f/sAewB8v/DAewCAv/XAewCA//XAewCBP/XAewCCP+aAewCDP+aAewCav/sAewCc//DAewCf//sAewChf/sAewCh//sAewCif/sAewCjf/sAewCsv/sAewCtP/sAewCz//DAewC4P/sAewC8P/sAewC8v/sAewC9P/sAewDCv/sAewDDP/sAewDEv/DAewDFv/sAewDGv/sAewDHP/DAfIABf+FAfIACv+FAfIB0P/XAfIB3P+aAfIB3f/DAfIB3//XAfIB4f+uAfIB5P+aAfIB9v/DAfICB/+FAfICC/+FAfICbf/XAfICgf/XAfICg//XAfICi//XAfICoP/XAfICqv+aAfICtv+aAfICuP/DAfICuv/DAfICvP/XAfICvv+aAfICwP+uAfICwv+uAfICxv/XAfICyP/XAfICy//XAfIC1f+uAfIC5v/XAfIC6v/XAfIC+P/DAfIC+v/DAfIC/P/DAfIC/v+uAfIDBv/XAfIDCP/XAfIDDv+aAfIDEP+aAfIDGP+aAfMABf+FAfMACv+FAfMB0P/XAfMB3P+aAfMB3f/DAfMB3//XAfMB4f+uAfMB5P+aAfMB9v/DAfMCB/+FAfMCC/+FAfMCbf/XAfMCgf/XAfMCg//XAfMCi//XAfMCoP/XAfMCqv+aAfMCtv+aAfMCuP/DAfMCuv/DAfMCvP/XAfMCvv+aAfMCwP+uAfMCwv+uAfMCxv/XAfMCyP/XAfMCy//XAfMC1f+uAfMC5v/XAfMC6v/XAfMC+P/DAfMC+v/DAfMC/P/DAfMC/v+uAfMDBv/XAfMDCP/XAfMDDv+aAfMDEP+aAfMDGP+aAfQABf/sAfQACv/sAfQCB//sAfQCC//sAfQDDv/XAfQDEP/XAfUBz//XAfUB2P/XAfUB2//XAfUB3v/XAfUB4f/XAfUB6v/XAfUB7f/XAfUCav/XAfUCf//XAfUChf/XAfUCh//XAfUCif/XAfUCjf/XAfUCsv/XAfUCtP/XAfUCwP/XAfUCwv/XAfUCxv/XAfUCyP/XAfUC1f/XAfUC4P/XAfUC8P/XAfUC8v/XAfUC9P/XAfUC/v/XAfUDCv/XAfUDDP/XAfUDFv/XAfUDGv/XAfYAD/+uAfYAEf+uAfYBzv/XAfYB1f/XAfYB8v/XAfYCCP+uAfYCDP+uAfYCc//XAfYCz//XAfYDEv/XAfYDHP/XAfgAD/+FAfgAEP+uAfgAEf+FAfgBn//XAfgBpP+aAfgBqv9xAfgBrv+aAfgBtf+aAfgBuP/XAfgBu//XAfgBvAApAfgBvv+uAfgBzP+aAfgBzf+aAfgBzv+FAfgBz/9xAfgB0P/XAfgB0f/XAfgB0v+aAfgB0/+aAfgB1P+aAfgB1f+FAfgB1v+aAfgB1/+aAfgB2P9xAfgB2f+aAfgB2v+aAfgB2/9xAfgB3P+uAfgB3f+uAfgB3v9xAfgB3//XAfgB4P+aAfgB4f+aAfgB4v+aAfgB4/+aAfgB5P+uAfgB5f+aAfgB5v+aAfgB5//XAfgB6P+aAfgB6f/DAfgB6v9xAfgB7P+aAfgB7f9xAfgB7v+FAfgB8v+FAfgB8/+aAfgB9f+aAfgB9v+uAfgB9/+aAfgB+f+aAfgCAv+uAfgCA/+uAfgCBP+uAfgCCP+FAfgCDP+FAfgCav9xAfgCa/+aAfgCbP/XAfgCbf/XAfgCcf+aAfgCcv9xAfgCc/+FAfgCdf+aAfgCd/+aAfgCef+aAfgCff+aAfgCfv/XAfgCf/9xAfgCgf/XAfgCg//XAfgChP/XAfgChf9xAfgChv/XAfgCh/9xAfgCiP/XAfgCif9xAfgCiv/XAfgCi//XAfgCjP/XAfgCjf9xAfgClv+aAfgCmv+aAfgCnv+aAfgCoP/XAfgCov/XAfgCpP+aAfgCpv+aAfgCqv+uAfgCrP+aAfgCrv+aAfgCsP+aAfgCsf/XAfgCsv9xAfgCs//XAfgCtP9xAfgCtQApAfgCtv+uAfgCuP+uAfgCuv+uAfgCvP/XAfgCvv+uAfgCwP+aAfgCwv+aAfgCxP+aAfgCxf+aAfgCxv9xAfgCx/+aAfgCyP9xAfgCy//XAfgCzf+aAfgCzv+aAfgCz/+FAfgC0f+aAfgC0/+aAfgC1f+aAfgC1/+aAfgC2f9xAfgC2/9xAfgC3f9xAfgC4P9xAfgC5v/XAfgC6P/XAfgC6v/DAfgC7P+aAfgC7v+aAfgC7//XAfgC8P9xAfgC8f/XAfgC8v9xAfgC8//XAfgC9P9xAfgC9v/XAfgC+P+uAfgC+v+uAfgC/P+uAfgC/v+aAfgDAP+aAfgDAv+aAfgDBv/XAfgDCP/XAfgDCf9xAfgDCv9xAfgDC/9xAfgDDP9xAfgDDv+aAfgDEP+aAfgDEf+aAfgDEv+FAfgDFP+aAfgDFf/XAfgDFv9xAfgDGP+uAfgDGv9xAfgDG/+aAfgDHP+FAfkAD/+aAfkAEP/XAfkAEf+aAfkBzv/DAfkBz//sAfkB1f/DAfkB2P/sAfkB2//sAfkB3v/sAfkB6v/sAfkB7f/sAfkB8v/DAfkCAv/XAfkCA//XAfkCBP/XAfkCCP+aAfkCDP+aAfkCav/sAfkCc//DAfkCf//sAfkChf/sAfkCh//sAfkCif/sAfkCjf/sAfkCsv/sAfkCtP/sAfkCz//DAfkC4P/sAfkC8P/sAfkC8v/sAfkC9P/sAfkDCv/sAfkDDP/sAfkDEv/DAfkDFv/sAfkDGv/sAfkDHP/DAfoAD/+aAfoAEf+aAfoAIgApAfoAJP+uAfoAJv/sAfoAKv/sAfoAMv/sAfoANP/sAfoARP/XAfoARv/XAfoAR//XAfoASP/XAfoASv/sAfoAUP/sAfoAUf/sAfoAUv/XAfoAU//sAfoAVP/XAfoAVf/sAfoAVv/sAfoAWP/sAfoAgv+uAfoAg/+uAfoAhP+uAfoAhf+uAfoAhv+uAfoAh/+uAfoAif/sAfoAlP/sAfoAlf/sAfoAlv/sAfoAl//sAfoAmP/sAfoAmv/sAfoAov/XAfoAo//XAfoApP/XAfoApf/XAfoApv/XAfoAp//XAfoAqP/XAfoAqf/XAfoAqv/XAfoAq//XAfoArP/XAfoArf/XAfoAtP/XAfoAtf/XAfoAtv/XAfoAt//XAfoAuP/XAfoAuv/XAfoAu//sAfoAvP/sAfoAvf/sAfoAvv/sAfoAwv+uAfoAw//XAfoAxP+uAfoAxf/XAfoAxv+uAfoAx//XAfoAyP/sAfoAyf/XAfoAyv/sAfoAy//XAfoAzP/sAfoAzf/XAfoAzv/sAfoAz//XAfoA0f/XAfoA0//XAfoA1f/XAfoA1//XAfoA2f/XAfoA2//XAfoA3f/XAfoA3v/sAfoA3//sAfoA4P/sAfoA4f/sAfoA4v/sAfoA4//sAfoA5P/sAfoA5f/sAfoA+v/sAfoBBv/sAfoBCP/sAfoBDf/sAfoBDv/sAfoBD//XAfoBEP/sAfoBEf/XAfoBEv/sAfoBE//XAfoBFP/sAfoBFf/XAfoBF//sAfoBGf/sAfoBHf/sAfoBIf/sAfoBK//sAfoBLf/sAfoBL//sAfoBMf/sAfoBM//sAfoBNf/sAfoBQ/+uAfoBRP/XAfoBRv/XAfoBR//sAfoBSP/XAfoBSv/sAfoCCP+aAfoCDP+aAfoCV//sAfoCWP+uAfoCWf/XAfoCX//sAfoCYP/XAfoCYv/sAfoDHf+uAfoDHv/XAfoDH/+uAfoDIP/XAfoDIf+uAfoDIv/XAfoDI/+uAfoDJf+uAfoDJv/XAfoDJ/+uAfoDKP/XAfoDKf+uAfoDKv/XAfoDK/+uAfoDLP/XAfoDLf+uAfoDLv/XAfoDL/+uAfoDMP/XAfoDMf+uAfoDMv/XAfoDM/+uAfoDNP/XAfoDNv/XAfoDOP/XAfoDOv/XAfoDPP/XAfoDQP/XAfoDQv/XAfoDRP/XAfoDSf/sAfoDSv/XAfoDS//sAfoDTP/XAfoDTf/sAfoDTv/XAfoDT//sAfoDUf/sAfoDUv/XAfoDU//sAfoDVP/XAfoDVf/sAfoDVv/XAfoDV//sAfoDWP/XAfoDWf/sAfoDWv/XAfoDW//sAfoDXP/XAfoDXf/sAfoDXv/XAfoDX//sAfoDYP/XAfoDYv/sAfoDZP/sAfoDZv/sAfoDaP/sAfoDav/sAfoDbP/sAfoDbv/sAfsABQBSAfsACgBSAfsAD/+uAfsAEf+uAfsAIgApAfsCBwBSAfsCCP+uAfsCCwBSAfsCDP+uAfwAD/+aAfwAEf+aAfwAIgApAfwAJP+uAfwAJv/sAfwAKv/sAfwAMv/sAfwANP/sAfwARP/XAfwARv/XAfwAR//XAfwASP/XAfwASv/sAfwAUP/sAfwAUf/sAfwAUv/XAfwAU//sAfwAVP/XAfwAVf/sAfwAVv/sAfwAWP/sAfwAgv+uAfwAg/+uAfwAhP+uAfwAhf+uAfwAhv+uAfwAh/+uAfwAif/sAfwAlP/sAfwAlf/sAfwAlv/sAfwAl//sAfwAmP/sAfwAmv/sAfwAov/XAfwAo//XAfwApP/XAfwApf/XAfwApv/XAfwAp//XAfwAqP/XAfwAqf/XAfwAqv/XAfwAq//XAfwArP/XAfwArf/XAfwAtP/XAfwAtf/XAfwAtv/XAfwAt//XAfwAuP/XAfwAuv/XAfwAu//sAfwAvP/sAfwAvf/sAfwAvv/sAfwAwv+uAfwAw//XAfwAxP+uAfwAxf/XAfwAxv+uAfwAx//XAfwAyP/sAfwAyf/XAfwAyv/sAfwAy//XAfwAzP/sAfwAzf/XAfwAzv/sAfwAz//XAfwA0f/XAfwA0//XAfwA1f/XAfwA1//XAfwA2f/XAfwA2//XAfwA3f/XAfwA3v/sAfwA3//sAfwA4P/sAfwA4f/sAfwA4v/sAfwA4//sAfwA5P/sAfwA5f/sAfwA+v/sAfwBBv/sAfwBCP/sAfwBDf/sAfwBDv/sAfwBD//XAfwBEP/sAfwBEf/XAfwBEv/sAfwBE//XAfwBFP/sAfwBFf/XAfwBF//sAfwBGf/sAfwBHf/sAfwBIf/sAfwBK//sAfwBLf/sAfwBL//sAfwBMf/sAfwBM//sAfwBNf/sAfwBQ/+uAfwBRP/XAfwBRv/XAfwBR//sAfwBSP/XAfwBSv/sAfwCCP+aAfwCDP+aAfwCV//sAfwCWP+uAfwCWf/XAfwCX//sAfwCYP/XAfwCYv/sAfwDHf+uAfwDHv/XAfwDH/+uAfwDIP/XAfwDIf+uAfwDIv/XAfwDI/+uAfwDJf+uAfwDJv/XAfwDJ/+uAfwDKP/XAfwDKf+uAfwDKv/XAfwDK/+uAfwDLP/XAfwDLf+uAfwDLv/XAfwDL/+uAfwDMP/XAfwDMf+uAfwDMv/XAfwDM/+uAfwDNP/XAfwDNv/XAfwDOP/XAfwDOv/XAfwDPP/XAfwDQP/XAfwDQv/XAfwDRP/XAfwDSf/sAfwDSv/XAfwDS//sAfwDTP/XAfwDTf/sAfwDTv/XAfwDT//sAfwDUf/sAfwDUv/XAfwDU//sAfwDVP/XAfwDVf/sAfwDVv/XAfwDV//sAfwDWP/XAfwDWf/sAfwDWv/XAfwDW//sAfwDXP/XAfwDXf/sAfwDXv/XAfwDX//sAfwDYP/XAfwDYv/sAfwDZP/sAfwDZv/sAfwDaP/sAfwDav/sAfwDbP/sAfwDbv/sAf0ABQBSAf0ACgBSAf0AD/+uAf0AEf+uAf0AIgApAf0CBwBSAf0CCP+uAf0CCwBSAf0CDP+uAf4AD/+aAf4AEf+aAf4AIgApAf4AJP+uAf4AJv/sAf4AKv/sAf4AMv/sAf4ANP/sAf4ARP/XAf4ARv/XAf4AR//XAf4ASP/XAf4ASv/sAf4AUP/sAf4AUf/sAf4AUv/XAf4AU//sAf4AVP/XAf4AVf/sAf4AVv/sAf4AWP/sAf4Agv+uAf4Ag/+uAf4AhP+uAf4Ahf+uAf4Ahv+uAf4Ah/+uAf4Aif/sAf4AlP/sAf4Alf/sAf4Alv/sAf4Al//sAf4AmP/sAf4Amv/sAf4Aov/XAf4Ao//XAf4ApP/XAf4Apf/XAf4Apv/XAf4Ap//XAf4AqP/XAf4Aqf/XAf4Aqv/XAf4Aq//XAf4ArP/XAf4Arf/XAf4AtP/XAf4Atf/XAf4Atv/XAf4At//XAf4AuP/XAf4Auv/XAf4Au//sAf4AvP/sAf4Avf/sAf4Avv/sAf4Awv+uAf4Aw//XAf4AxP+uAf4Axf/XAf4Axv+uAf4Ax//XAf4AyP/sAf4Ayf/XAf4Ayv/sAf4Ay//XAf4AzP/sAf4Azf/XAf4Azv/sAf4Az//XAf4A0f/XAf4A0//XAf4A1f/XAf4A1//XAf4A2f/XAf4A2//XAf4A3f/XAf4A3v/sAf4A3//sAf4A4P/sAf4A4f/sAf4A4v/sAf4A4//sAf4A5P/sAf4A5f/sAf4A+v/sAf4BBv/sAf4BCP/sAf4BDf/sAf4BDv/sAf4BD//XAf4BEP/sAf4BEf/XAf4BEv/sAf4BE//XAf4BFP/sAf4BFf/XAf4BF//sAf4BGf/sAf4BHf/sAf4BIf/sAf4BK//sAf4BLf/sAf4BL//sAf4BMf/sAf4BM//sAf4BNf/sAf4BQ/+uAf4BRP/XAf4BRv/XAf4BR//sAf4BSP/XAf4BSv/sAf4CCP+aAf4CDP+aAf4CV//sAf4CWP+uAf4CWf/XAf4CX//sAf4CYP/XAf4CYv/sAf4DHf+uAf4DHv/XAf4DH/+uAf4DIP/XAf4DIf+uAf4DIv/XAf4DI/+uAf4DJf+uAf4DJv/XAf4DJ/+uAf4DKP/XAf4DKf+uAf4DKv/XAf4DK/+uAf4DLP/XAf4DLf+uAf4DLv/XAf4DL/+uAf4DMP/XAf4DMf+uAf4DMv/XAf4DM/+uAf4DNP/XAf4DNv/XAf4DOP/XAf4DOv/XAf4DPP/XAf4DQP/XAf4DQv/XAf4DRP/XAf4DSf/sAf4DSv/XAf4DS//sAf4DTP/XAf4DTf/sAf4DTv/XAf4DT//sAf4DUf/sAf4DUv/XAf4DU//sAf4DVP/XAf4DVf/sAf4DVv/XAf4DV//sAf4DWP/XAf4DWf/sAf4DWv/XAf4DW//sAf4DXP/XAf4DXf/sAf4DXv/XAf4DX//sAf4DYP/XAf4DYv/sAf4DZP/sAf4DZv/sAf4DaP/sAf4Dav/sAf4DbP/sAf4Dbv/sAf8ABQBSAf8ACgBSAf8AD/+uAf8AEf+uAf8AIgApAf8CBwBSAf8CCP+uAf8CCwBSAf8CDP+uAgAAD/+FAgAAEf+FAgAAIgApAgAAJP+FAgAAJv/XAgAAKv/XAgAAMv/XAgAANP/XAgAARP+aAgAARv+aAgAAR/+aAgAASP+aAgAASv/XAgAAUP/DAgAAUf/DAgAAUv+aAgAAU//DAgAAVP+aAgAAVf/DAgAAVv+uAgAAWP/DAgAAXf/XAgAAgv+FAgAAg/+FAgAAhP+FAgAAhf+FAgAAhv+FAgAAh/+FAgAAif/XAgAAlP/XAgAAlf/XAgAAlv/XAgAAl//XAgAAmP/XAgAAmv/XAgAAov+aAgAAo/+aAgAApP+aAgAApf+aAgAApv+aAgAAp/+aAgAAqP+aAgAAqf+aAgAAqv+aAgAAq/+aAgAArP+aAgAArf+aAgAAtP+aAgAAtf+aAgAAtv+aAgAAt/+aAgAAuP+aAgAAuv+aAgAAu//DAgAAvP/DAgAAvf/DAgAAvv/DAgAAwv+FAgAAw/+aAgAAxP+FAgAAxf+aAgAAxv+FAgAAx/+aAgAAyP/XAgAAyf+aAgAAyv/XAgAAy/+aAgAAzP/XAgAAzf+aAgAAzv/XAgAAz/+aAgAA0f+aAgAA0/+aAgAA1f+aAgAA1/+aAgAA2f+aAgAA2/+aAgAA3f+aAgAA3v/XAgAA3//XAgAA4P/XAgAA4f/XAgAA4v/XAgAA4//XAgAA5P/XAgAA5f/XAgAA+v/DAgABBv/DAgABCP/DAgABDf/DAgABDv/XAgABD/+aAgABEP/XAgABEf+aAgABEv/XAgABE/+aAgABFP/XAgABFf+aAgABF//DAgABGf/DAgABHf+uAgABIf+uAgABK//DAgABLf/DAgABL//DAgABMf/DAgABM//DAgABNf/DAgABPP/XAgABPv/XAgABQP/XAgABQ/+FAgABRP+aAgABRv+aAgABR//XAgABSP+aAgABSv+uAgACCP+FAgACDP+FAgACV//DAgACWP+FAgACWf+aAgACX//XAgACYP+aAgACYv/DAgADHf+FAgADHv+aAgADH/+FAgADIP+aAgADIf+FAgADIv+aAgADI/+FAgADJf+FAgADJv+aAgADJ/+FAgADKP+aAgADKf+FAgADKv+aAgADK/+FAgADLP+aAgADLf+FAgADLv+aAgADL/+FAgADMP+aAgADMf+FAgADMv+aAgADM/+FAgADNP+aAgADNv+aAgADOP+aAgADOv+aAgADPP+aAgADQP+aAgADQv+aAgADRP+aAgADSf/XAgADSv+aAgADS//XAgADTP+aAgADTf/XAgADTv+aAgADT//XAgADUf/XAgADUv+aAgADU//XAgADVP+aAgADVf/XAgADVv+aAgADV//XAgADWP+aAgADWf/XAgADWv+aAgADW//XAgADXP+aAgADXf/XAgADXv+aAgADX//XAgADYP+aAgADYv/DAgADZP/DAgADZv/DAgADaP/DAgADav/DAgADbP/DAgADbv/DAgEABQBSAgEACgBSAgEAD/+uAgEAEf+uAgEAIgApAgECBwBSAgECCP+uAgECCwBSAgECDP+uAgIAN/+uAgIBJP+uAgIBJv+uAgIBcf+uAgIBnf+uAgIBpv+uAgIBvP+uAgIBxP+uAgIB3P/XAgIB5P/XAgICqf+uAgICqv/XAgICtf+uAgICtv/XAgICvf+uAgICvv/XAgIDF/+uAgIDGP/XAgIDj/+uAgMAN/+uAgMBJP+uAgMBJv+uAgMBcf+uAgMBnf+uAgMBpv+uAgMBvP+uAgMBxP+uAgMB3P/XAgMB5P/XAgMCqf+uAgMCqv/XAgMCtf+uAgMCtv/XAgMCvf+uAgMCvv/XAgMDF/+uAgMDGP/XAgMDj/+uAgQAN/+uAgQBJP+uAgQBJv+uAgQBcf+uAgQBnf+uAgQBpv+uAgQBvP+uAgQBxP+uAgQB3P/XAgQB5P/XAgQCqf+uAgQCqv/XAgQCtf+uAgQCtv/XAgQCvf+uAgQCvv/XAgQDF/+uAgQDGP/XAgQDj/+uAgYAJP9xAgYANwApAgYAOQApAgYAOgApAgYAPAAUAgYARP+uAgYARv+FAgYAR/+FAgYASP+FAgYASv/DAgYAUP/DAgYAUf/DAgYAUv+FAgYAU//DAgYAVP+FAgYAVf/DAgYAVv/DAgYAWP/DAgYAgv9xAgYAg/9xAgYAhP9xAgYAhf9xAgYAhv9xAgYAh/9xAgYAnwAUAgYAov+FAgYAo/+uAgYApP+uAgYApf+uAgYApv+uAgYAp/+uAgYAqP+uAgYAqf+FAgYAqv+FAgYAq/+FAgYArP+FAgYArf+FAgYAtP+FAgYAtf+FAgYAtv+FAgYAt/+FAgYAuP+FAgYAuv+FAgYAu//DAgYAvP/DAgYAvf/DAgYAvv/DAgYAwv9xAgYAw/+uAgYAxP9xAgYAxf+uAgYAxv9xAgYAx/+uAgYAyf+FAgYAy/+FAgYAzf+FAgYAz/+FAgYA0f+FAgYA0/+FAgYA1f+FAgYA1/+FAgYA2f+FAgYA2/+FAgYA3f+FAgYA3//DAgYA4f/DAgYA4//DAgYA5f/DAgYA+v/DAgYBBv/DAgYBCP/DAgYBDf/DAgYBD/+FAgYBEf+FAgYBE/+FAgYBFf+FAgYBF//DAgYBGf/DAgYBHf/DAgYBIf/DAgYBJAApAgYBJgApAgYBK//DAgYBLf/DAgYBL//DAgYBMf/DAgYBM//DAgYBNf/DAgYBNgApAgYBOAAUAgYBOgAUAgYBQ/9xAgYBRP+uAgYBRv+uAgYBSP+FAgYBSv/DAgYBVv9xAgYBX/9xAgYBYv9xAgYBaf9xAgYBef+uAgYBev/XAgYBe//XAgYBfv+uAgYBgf/DAgYBgv/XAgYBg//XAgYBhP/XAgYBh//XAgYBif/XAgYBjP+uAgYBjv/DAgYBj/+uAgYBkP+uAgYBk/+uAgYBmf+uAgYBpP+FAgYBqv9xAgYBrv+FAgYBtf+FAgYByv/XAgYBzv9xAgYBz/+FAgYB1f9xAgYB2P+FAgYB2/+FAgYB3v+FAgYB6v+FAgYB7f+FAgYB7v/DAgYB8v9xAgYB+gApAgYB/AApAgYB/gApAgYCAAAUAgYCV//DAgYCWP9xAgYCWf+uAgYCYP+FAgYCYv/DAgYCav+FAgYCcv9xAgYCc/9xAgYCff/sAgYCf/+FAgYChf+FAgYCh/+FAgYCif+FAgYCjf+FAgYCsv+FAgYCtP+FAgYCzv+FAgYCz/9xAgYC2f9xAgYC2v/XAgYC2/9xAgYC3P/XAgYC3f9xAgYC3v/XAgYC4P+FAgYC4v/XAgYC5P/XAgYC8P+FAgYC8v+FAgYC9P+FAgYDCf9xAgYDCv+FAgYDC/9xAgYDDP+FAgYDEf+FAgYDEv9xAgYDFv+FAgYDGv+FAgYDG/+FAgYDHP9xAgYDHf9xAgYDHv+uAgYDH/9xAgYDIP+uAgYDIf9xAgYDIv+uAgYDI/9xAgYDJf9xAgYDJv+uAgYDJ/9xAgYDKP+uAgYDKf9xAgYDKv+uAgYDK/9xAgYDLP+uAgYDLf9xAgYDLv+uAgYDL/9xAgYDMP+uAgYDMf9xAgYDMv+uAgYDM/9xAgYDNP+uAgYDNv+FAgYDOP+FAgYDOv+FAgYDPP+FAgYDQP+FAgYDQv+FAgYDRP+FAgYDSv+FAgYDTP+FAgYDTv+FAgYDUv+FAgYDVP+FAgYDVv+FAgYDWP+FAgYDWv+FAgYDXP+FAgYDXv+FAgYDYP+FAgYDYv/DAgYDZP/DAgYDZv/DAgYDaP/DAgYDav/DAgYDbP/DAgYDbv/DAgYDbwAUAgYDcQAUAgYDcwAUAgYDjwApAgcAJP9xAgcANwApAgcAOQApAgcAOgApAgcAPAAUAgcARP+uAgcARv+FAgcAR/+FAgcASP+FAgcASv/DAgcAUP/DAgcAUf/DAgcAUv+FAgcAU//DAgcAVP+FAgcAVf/DAgcAVv/DAgcAWP/DAgcAgv9xAgcAg/9xAgcAhP9xAgcAhf9xAgcAhv9xAgcAh/9xAgcAnwAUAgcAov+FAgcAo/+uAgcApP+uAgcApf+uAgcApv+uAgcAp/+uAgcAqP+uAgcAqf+FAgcAqv+FAgcAq/+FAgcArP+FAgcArf+FAgcAtP+FAgcAtf+FAgcAtv+FAgcAt/+FAgcAuP+FAgcAuv+FAgcAu//DAgcAvP/DAgcAvf/DAgcAvv/DAgcAwv9xAgcAw/+uAgcAxP9xAgcAxf+uAgcAxv9xAgcAx/+uAgcAyf+FAgcAy/+FAgcAzf+FAgcAz/+FAgcA0f+FAgcA0/+FAgcA1f+FAgcA1/+FAgcA2f+FAgcA2/+FAgcA3f+FAgcA3//DAgcA4f/DAgcA4//DAgcA5f/DAgcA+v/DAgcBBv/DAgcBCP/DAgcBDf/DAgcBD/+FAgcBEf+FAgcBE/+FAgcBFf+FAgcBF//DAgcBGf/DAgcBHf/DAgcBIf/DAgcBJAApAgcBJgApAgcBK//DAgcBLf/DAgcBL//DAgcBMf/DAgcBM//DAgcBNf/DAgcBNgApAgcBOAAUAgcBOgAUAgcBQ/9xAgcBRP+uAgcBRv+uAgcBSP+FAgcBSv/DAgcBVv9xAgcBX/9xAgcBYv9xAgcBaf9xAgcBef+uAgcBev/XAgcBe//XAgcBfv+uAgcBgf/DAgcBgv/XAgcBg//XAgcBhP/XAgcBh//XAgcBif/XAgcBjP+uAgcBjv/DAgcBj/+uAgcBkP+uAgcBk/+uAgcBmf+uAgcBpP+FAgcBqv9xAgcBrv+FAgcBtf+FAgcByv/XAgcBzv9xAgcBz/+FAgcB1f9xAgcB2P+FAgcB2/+FAgcB3v+FAgcB6v+FAgcB7f+FAgcB7v/DAgcB8v9xAgcB+gApAgcB/AApAgcB/gApAgcCAAAUAgcCV//DAgcCWP9xAgcCWf+uAgcCYP+FAgcCYv/DAgcCav+FAgcCcv9xAgcCc/9xAgcCff/sAgcCf/+FAgcChf+FAgcCh/+FAgcCif+FAgcCjf+FAgcCsv+FAgcCtP+FAgcCzv+FAgcCz/9xAgcC2f9xAgcC2v/XAgcC2/9xAgcC3P/XAgcC3f9xAgcC3v/XAgcC4P+FAgcC4v/XAgcC5P/XAgcC8P+FAgcC8v+FAgcC9P+FAgcDCf9xAgcDCv+FAgcDC/9xAgcDDP+FAgcDEf+FAgcDEv9xAgcDFv+FAgcDGv+FAgcDG/+FAgcDHP9xAgcDHf9xAgcDHv+uAgcDH/9xAgcDIP+uAgcDIf9xAgcDIv+uAgcDI/9xAgcDJf9xAgcDJv+uAgcDJ/9xAgcDKP+uAgcDKf9xAgcDKv+uAgcDK/9xAgcDLP+uAgcDLf9xAgcDLv+uAgcDL/9xAgcDMP+uAgcDMf9xAgcDMv+uAgcDM/9xAgcDNP+uAgcDNv+FAgcDOP+FAgcDOv+FAgcDPP+FAgcDQP+FAgcDQv+FAgcDRP+FAgcDSv+FAgcDTP+FAgcDTv+FAgcDUv+FAgcDVP+FAgcDVv+FAgcDWP+FAgcDWv+FAgcDXP+FAgcDXv+FAgcDYP+FAgcDYv/DAgcDZP/DAgcDZv/DAgcDaP/DAgcDav/DAgcDbP/DAgcDbv/DAgcDbwAUAgcDcQAUAgcDcwAUAgcDjwApAggAJv+aAggAKv+aAggAMv+aAggANP+aAggAN/9xAggAOP/XAggAOf+FAggAOv+FAggAPP+FAggAif+aAggAlP+aAggAlf+aAggAlv+aAggAl/+aAggAmP+aAggAmv+aAggAm//XAggAnP/XAggAnf/XAggAnv/XAggAn/+FAggAyP+aAggAyv+aAggAzP+aAggAzv+aAggA3v+aAggA4P+aAggA4v+aAggA5P+aAggBDv+aAggBEP+aAggBEv+aAggBFP+aAggBJP9xAggBJv9xAggBKv/XAggBLP/XAggBLv/XAggBMP/XAggBMv/XAggBNP/XAggBNv+FAggBOP+FAggBOv+FAggBR/+aAggBZv+uAggBbf+uAggBcf9xAggBcv+FAggBc/+aAggBdf+FAggBeP+FAggBhf/XAggBnf9xAggBn/+aAggBpv9xAggBuP+aAggBu/+aAggBvP9xAggBvv+uAggBwf9cAggBxP9xAggB3P+aAggB4f+FAggB5P+aAggB+v+FAggB/P+FAggB/v+FAggCAP+FAggCVP+FAggCX/+aAggCYf/XAggCbP+aAggCfP9cAggCfv+aAggCgP+FAggCgv+FAggChP+aAggChv+aAggCiP+aAggCiv+aAggCjP+aAggCqf9xAggCqv+aAggCsf+aAggCs/+aAggCtf9xAggCtv+aAggCt/+FAggCuf+FAggCvf9xAggCvv+aAggCv/9cAggCwP+FAggCwf9cAggCwv+FAggCxf+FAggCx/+FAggC1P9cAggC1f+FAggC7/+aAggC8f+aAggC8/+aAggC/f9cAggC/v+FAggDDf+FAggDDv+aAggDD/+FAggDEP+aAggDFf+aAggDF/9xAggDGP+aAggDSf+aAggDS/+aAggDTf+aAggDT/+aAggDUf+aAggDU/+aAggDVf+aAggDV/+aAggDWf+aAggDW/+aAggDXf+aAggDX/+aAggDYf/XAggDY//XAggDZf/XAggDZ//XAggDaf/XAggDa//XAggDbf/XAggDb/+FAggDcf+FAggDc/+FAggDj/9xAgoAJP9xAgoANwApAgoAOQApAgoAOgApAgoAPAAUAgoARP+uAgoARv+FAgoAR/+FAgoASP+FAgoASv/DAgoAUP/DAgoAUf/DAgoAUv+FAgoAU//DAgoAVP+FAgoAVf/DAgoAVv/DAgoAWP/DAgoAgv9xAgoAg/9xAgoAhP9xAgoAhf9xAgoAhv9xAgoAh/9xAgoAnwAUAgoAov+FAgoAo/+uAgoApP+uAgoApf+uAgoApv+uAgoAp/+uAgoAqP+uAgoAqf+FAgoAqv+FAgoAq/+FAgoArP+FAgoArf+FAgoAtP+FAgoAtf+FAgoAtv+FAgoAt/+FAgoAuP+FAgoAuv+FAgoAu//DAgoAvP/DAgoAvf/DAgoAvv/DAgoAwv9xAgoAw/+uAgoAxP9xAgoAxf+uAgoAxv9xAgoAx/+uAgoAyf+FAgoAy/+FAgoAzf+FAgoAz/+FAgoA0f+FAgoA0/+FAgoA1f+FAgoA1/+FAgoA2f+FAgoA2/+FAgoA3f+FAgoA3//DAgoA4f/DAgoA4//DAgoA5f/DAgoA+v/DAgoBBv/DAgoBCP/DAgoBDf/DAgoBD/+FAgoBEf+FAgoBE/+FAgoBFf+FAgoBF//DAgoBGf/DAgoBHf/DAgoBIf/DAgoBJAApAgoBJgApAgoBK//DAgoBLf/DAgoBL//DAgoBMf/DAgoBM//DAgoBNf/DAgoBNgApAgoBOAAUAgoBOgAUAgoBQ/9xAgoBRP+uAgoBRv+uAgoBSP+FAgoBSv/DAgoBVv9xAgoBX/9xAgoBYv9xAgoBaf9xAgoBef+uAgoBev/XAgoBe//XAgoBfv+uAgoBgf/DAgoBgv/XAgoBg//XAgoBhP/XAgoBh//XAgoBif/XAgoBjP+uAgoBjv/DAgoBj/+uAgoBkP+uAgoBk/+uAgoBmf+uAgoBpP+FAgoBqv9xAgoBrv+FAgoBtf+FAgoByv/XAgoBzv9xAgoBz/+FAgoB1f9xAgoB2P+FAgoB2/+FAgoB3v+FAgoB6v+FAgoB7f+FAgoB7v/DAgoB8v9xAgoB+gApAgoB/AApAgoB/gApAgoCAAAUAgoCV//DAgoCWP9xAgoCWf+uAgoCYP+FAgoCYv/DAgoCav+FAgoCcv9xAgoCc/9xAgoCff/sAgoCf/+FAgoChf+FAgoCh/+FAgoCif+FAgoCjf+FAgoCsv+FAgoCtP+FAgoCzv+FAgoCz/9xAgoC2f9xAgoC2v/XAgoC2/9xAgoC3P/XAgoC3f9xAgoC3v/XAgoC4P+FAgoC4v/XAgoC5P/XAgoC8P+FAgoC8v+FAgoC9P+FAgoDCf9xAgoDCv+FAgoDC/9xAgoDDP+FAgoDEf+FAgoDEv9xAgoDFv+FAgoDGv+FAgoDG/+FAgoDHP9xAgoDHf9xAgoDHv+uAgoDH/9xAgoDIP+uAgoDIf9xAgoDIv+uAgoDI/9xAgoDJf9xAgoDJv+uAgoDJ/9xAgoDKP+uAgoDKf9xAgoDKv+uAgoDK/9xAgoDLP+uAgoDLf9xAgoDLv+uAgoDL/9xAgoDMP+uAgoDMf9xAgoDMv+uAgoDM/9xAgoDNP+uAgoDNv+FAgoDOP+FAgoDOv+FAgoDPP+FAgoDQP+FAgoDQv+FAgoDRP+FAgoDSv+FAgoDTP+FAgoDTv+FAgoDUv+FAgoDVP+FAgoDVv+FAgoDWP+FAgoDWv+FAgoDXP+FAgoDXv+FAgoDYP+FAgoDYv/DAgoDZP/DAgoDZv/DAgoDaP/DAgoDav/DAgoDbP/DAgoDbv/DAgoDbwAUAgoDcQAUAgoDcwAUAgoDjwApAgwAJv+aAgwAKv+aAgwAMv+aAgwANP+aAgwAN/9xAgwAOP/XAgwAOf+FAgwAOv+FAgwAPP+FAgwAif+aAgwAlP+aAgwAlf+aAgwAlv+aAgwAl/+aAgwAmP+aAgwAmv+aAgwAm//XAgwAnP/XAgwAnf/XAgwAnv/XAgwAn/+FAgwAyP+aAgwAyv+aAgwAzP+aAgwAzv+aAgwA3v+aAgwA4P+aAgwA4v+aAgwA5P+aAgwBDv+aAgwBEP+aAgwBEv+aAgwBFP+aAgwBJP9xAgwBJv9xAgwBKv/XAgwBLP/XAgwBLv/XAgwBMP/XAgwBMv/XAgwBNP/XAgwBNv+FAgwBOP+FAgwBOv+FAgwBR/+aAgwBZv+uAgwBbf+uAgwBcf9xAgwBcv+FAgwBc/+aAgwBdf+FAgwBeP+FAgwBhf/XAgwBnf9xAgwBn/+aAgwBpv9xAgwBuP+aAgwBu/+aAgwBvP9xAgwBvv+uAgwBwf9cAgwBxP9xAgwB3P+aAgwB4f+FAgwB5P+aAgwB+v+FAgwB/P+FAgwB/v+FAgwCAP+FAgwCVP+FAgwCX/+aAgwCYf/XAgwCbP+aAgwCfP9cAgwCfv+aAgwCgP+FAgwCgv+FAgwChP+aAgwChv+aAgwCiP+aAgwCiv+aAgwCjP+aAgwCqf9xAgwCqv+aAgwCsf+aAgwCs/+aAgwCtf9xAgwCtv+aAgwCt/+FAgwCuf+FAgwCvf9xAgwCvv+aAgwCv/9cAgwCwP+FAgwCwf9cAgwCwv+FAgwCxf+FAgwCx/+FAgwC1P9cAgwC1f+FAgwC7/+aAgwC8f+aAgwC8/+aAgwC/f9cAgwC/v+FAgwDDf+FAgwDDv+aAgwDD/+FAgwDEP+aAgwDFf+aAgwDF/9xAgwDGP+aAgwDSf+aAgwDS/+aAgwDTf+aAgwDT/+aAgwDUf+aAgwDU/+aAgwDVf+aAgwDV/+aAgwDWf+aAgwDW/+aAgwDXf+aAgwDX/+aAgwDYf/XAgwDY//XAgwDZf/XAgwDZ//XAgwDaf/XAgwDa//XAgwDbf/XAgwDb/+FAgwDcf+FAgwDc/+FAgwDj/9xAiEBcf/XAiEBcv/sAiEBeP/sAiECVP/sAlMAD//DAlMAEf/DAlMCCP/DAlMCDP/DAlQAD/+FAlQAEf+FAlQBVv+FAlQBX/+FAlQBYv+FAlQBZv/XAlQBaf+FAlQBbf/XAlQBc//DAlQBdv/sAlQBef+aAlQBev+uAlQBe//DAlQBfP/DAlQBff/DAlQBfv+aAlQBgf/DAlQBgv+uAlQBhP/DAlQBhv/DAlQBh//DAlQBif/DAlQBjP+aAlQBjv+aAlQBj/+aAlQBkP+aAlQBkv/DAlQBk/+aAlQBlf/DAlQBlv/DAlQBmP/DAlQBmf+aAlQBmv/DAlQBm//DAlQCCP+FAlQCDP+FAlQCIf/sAlgABf9xAlgACv9xAlgAJv/XAlgAKv/XAlgALQEKAlgAMv/XAlgANP/XAlgAN/9xAlgAOf+uAlgAOv+uAlgAPP+FAlgAif/XAlgAlP/XAlgAlf/XAlgAlv/XAlgAl//XAlgAmP/XAlgAmv/XAlgAn/+FAlgAyP/XAlgAyv/XAlgAzP/XAlgAzv/XAlgA3v/XAlgA4P/XAlgA4v/XAlgA5P/XAlgBDv/XAlgBEP/XAlgBEv/XAlgBFP/XAlgBJP9xAlgBJv9xAlgBNv+uAlgBOP+FAlgBOv+FAlgBR//XAlgB+v+uAlgB/P+uAlgB/v+uAlgCAP+FAlgCB/9xAlgCC/9xAlgCX//XAlgDSf/XAlgDS//XAlgDTf/XAlgDT//XAlgDUf/XAlgDU//XAlgDVf/XAlgDV//XAlgDWf/XAlgDW//XAlgDXf/XAlgDX//XAlgDb/+FAlgDcf+FAlgDc/+FAlgDj/9xAlkABf/sAlkACv/sAlkCB//sAlkCC//sAloAD/+uAloAEf+uAloBVv/XAloBX//XAloBYv/XAloBZP/sAloBaf/XAloBcP/sAloBcf/DAloBcv/sAloBdP/XAloBdf/sAloBeP/sAloBiP/sAloCCP+uAloCDP+uAloCVP/sAmAASQBSAmAAVwBSAmAAWQBmAmAAWgBmAmAAWwBmAmAAXABmAmAAvwBmAmABJQBSAmABJwBSAmABNwBmAmAB+wBmAmAB/QBmAmACNABSAmACNQBSAmACXQBSAmACXgBSAmADcABmAmADjQBSAmADkABSAmIASQBmAmIAVwBmAmIAWQBmAmIAWgBmAmIAWwBmAmIAXABmAmIAvwBmAmIBJQBmAmIBJwBmAmIBNwBmAmIB+wBmAmIB/QBmAmICNABmAmICNQBmAmICXQBmAmICXgBmAmIDcABmAmIDjQBmAmIDkABmAmoABf/sAmoACv/sAmoCB//sAmoCC//sAmwAD/+uAmwAEf+uAmwBnf/sAmwBpP/XAmwBpv/sAmwBqP/XAmwBqv/XAmwBrv/XAmwBsP/XAmwBsf/sAmwBtf/XAmwBvP/DAmwBvf/XAmwBv//XAmwBwf/XAmwBxP/sAmwBx//sAmwBzv/sAmwB1f/sAmwB8v/sAmwCCP+uAmwCDP+uAmwCcv/XAmwCc//sAmwCev/sAmwCfP/XAmwCgP/sAmwCgv/sAmwCn//XAmwCof/sAmwCqf/sAmwCtf/DAmwCt//sAmwCuf/sAmwCu//XAmwCvf/sAmwCv//XAmwCwf/XAmwCyv/XAmwCzv/XAmwCz//sAmwC1P/XAmwC2f/XAmwC2//XAmwC3f/XAmwC5f/XAmwC5//sAmwC9f/sAmwC9//XAmwC+f/XAmwC+//XAmwC/f/XAmwDBf/XAmwDB//XAmwDDf/XAmwDD//XAmwDEf/XAmwDEv/sAmwDF//sAmwDG//XAmwDHP/sAm0AD/+uAm0AEf+uAm0Bzv/XAm0B1f/XAm0B8v/XAm0CCP+uAm0CDP+uAm0Cc//XAm0Cz//XAm0DEv/XAm0DHP/XAm4ABf+uAm4ACv+uAm4Bnf/XAm4Bpv/XAm4BvP+uAm4Bwf+uAm4BxP/XAm4B3P/XAm4B5P/XAm4CB/+uAm4CC/+uAm4CfP+uAm4CgP/DAm4Cgv/DAm4Cqf/XAm4Cqv/XAm4Ctf+uAm4Ctv/XAm4Ct//DAm4Cuf/DAm4Cvf/XAm4Cvv/XAm4Cv/+uAm4Cwf+uAm4C1P+uAm4C/f+uAm4DDf+aAm4DD/+aAm4DF//XAm4DGP/XAm8ABf+FAm8ACv+FAm8B0P/XAm8B3P+aAm8B3f/DAm8B3//XAm8B4f+uAm8B5P+aAm8B9v/DAm8CB/+FAm8CC/+FAm8Cbf/XAm8Cgf/XAm8Cg//XAm8Ci//XAm8CoP/XAm8Cqv+aAm8Ctv+aAm8CuP/DAm8Cuv/DAm8CvP/XAm8Cvv+aAm8CwP+uAm8Cwv+uAm8Cxv/XAm8CyP/XAm8Cy//XAm8C1f+uAm8C5v/XAm8C6v/XAm8C+P/DAm8C+v/DAm8C/P/DAm8C/v+uAm8DBv/XAm8DCP/XAm8DDv+aAm8DEP+aAm8DGP+aAnABn//XAnABuP/XAnABu//XAnABvv/XAnAB4f/XAnACbP/XAnACfv/XAnAChP/XAnAChv/XAnACiP/XAnACiv/XAnACjP/XAnACsf/XAnACs//XAnACwP/XAnACwv/XAnACxf/XAnACx//XAnAC1f/XAnAC7//XAnAC8f/XAnAC8//XAnAC/v/XAnADCf/XAnADC//XAnADDv/XAnADEP/XAnADFf/XAnIABf9xAnIACv9xAnIBnf+aAnIBpv+aAnIBvP9xAnIBvv/XAnIBwf+aAnIBxP+aAnIB3P/XAnIB4f/XAnIB5P/XAnICB/9xAnICC/9xAnICbv/XAnICfP+aAnICgP+uAnICgv+uAnICl//XAnICm//XAnICp//XAnICqf+aAnICqv/XAnICtf9xAnICtv/XAnICt/+FAnICuf+FAnICvf+aAnICvv/XAnICv/+aAnICwP/XAnICwf+aAnICwv/XAnICxf+aAnICx/+aAnIC1P+aAnIC1f/XAnIC4f/XAnIC4//XAnIC/f+aAnIC/v/XAnIDA//XAnIDDf9xAnIDDv/XAnIDD/9xAnIDEP/XAnIDF/+aAnIDGP/XAnMABf9xAnMACv9xAnMBz//XAnMB2P/XAnMB2//XAnMB3P+aAnMB3f/DAnMB3v/XAnMB4f/DAnMB5P+aAnMB6v/XAnMB7f/XAnMB9v/DAnMCB/9xAnMCC/9xAnMCav/XAnMCbf/XAnMCff/sAnMCf//XAnMCgf/XAnMCg//XAnMChf/XAnMCh//XAnMCif/XAnMCi//XAnMCjf/XAnMCqv+aAnMCsv/XAnMCtP/XAnMCtv+aAnMCuP/XAnMCuv/XAnMCvv+aAnMCwP/DAnMCwv/DAnMCxv/XAnMCyP/XAnMC1f/DAnMC4P/XAnMC8P/XAnMC8v/XAnMC9P/XAnMC+P/DAnMC+v/DAnMC/P/DAnMC/v/DAnMDCv/XAnMDDP/XAnMDDv+FAnMDEP+FAnMDFv/XAnMDGP+aAnMDGv/XAnQABf9xAnQACv9xAnQBnf+aAnQBpv+aAnQBvP9xAnQBvv/XAnQBwf+aAnQBxP+aAnQB3P/XAnQB4f/XAnQB5P/XAnQCB/9xAnQCC/9xAnQCbv/XAnQCfP+aAnQCgP+uAnQCgv+uAnQCl//XAnQCm//XAnQCp//XAnQCqf+aAnQCqv/XAnQCtf9xAnQCtv/XAnQCt/+FAnQCuf+FAnQCvf+aAnQCvv/XAnQCv/+aAnQCwP/XAnQCwf+aAnQCwv/XAnQCxf+aAnQCx/+aAnQC1P+aAnQC1f/XAnQC4f/XAnQC4//XAnQC/f+aAnQC/v/XAnQDA//XAnQDDf9xAnQDDv/XAnQDD/9xAnQDEP/XAnQDF/+aAnQDGP/XAnUABf9xAnUACv9xAnUBz//XAnUB2P/XAnUB2//XAnUB3P+aAnUB3f/DAnUB3v/XAnUB4f/DAnUB5P+aAnUB6v/XAnUB7f/XAnUB9v/DAnUCB/9xAnUCC/9xAnUCav/XAnUCbf/XAnUCff/sAnUCf//XAnUCgf/XAnUCg//XAnUChf/XAnUCh//XAnUCif/XAnUCi//XAnUCjf/XAnUCqv+aAnUCsv/XAnUCtP/XAnUCtv+aAnUCuP/XAnUCuv/XAnUCvv+aAnUCwP/DAnUCwv/DAnUCxv/XAnUCyP/XAnUC1f/DAnUC4P/XAnUC8P/XAnUC8v/XAnUC9P/XAnUC+P/DAnUC+v/DAnUC/P/DAnUC/v/DAnUDCv/XAnUDDP/XAnUDDv+FAnUDEP+FAnUDFv/XAnUDGP+aAnUDGv/XAnYDDf/sAnYDD//sAngDDf/sAngDD//sAnoAD/+uAnoAEf+uAnoCCP+uAnoCDP+uAnoCgP/sAnoCgv/sAnoCt//sAnoCuf/sAnoDDf/XAnoDD//XAnwAD/9xAnwAEf9xAnwBpP/DAnwBqv+uAnwBrv/DAnwBtf/DAnwBzv/XAnwB1f/XAnwB8v/XAnwCCP9xAnwCDP9xAnwCcv+uAnwCc//XAnwCzv/DAnwCz//XAnwC2f+uAnwC2/+uAnwC3f+uAnwDCf+uAnwDC/+uAnwDEf/DAnwDEv/XAnwDG//DAnwDHP/XAn0ABf/sAn0ACv/sAn0B0P/XAn0B3P/sAn0B3f/sAn0B3//XAn0B4f/sAn0B5P/sAn0B9v/sAn0CB//sAn0CC//sAn0CoP/XAn0Cqv/sAn0Ctv/sAn0CvP/XAn0Cvv/sAn0CwP/sAn0Cwv/sAn0Cy//XAn0C1f/sAn0C5v/XAn0C+P/sAn0C+v/sAn0C/P/sAn0C/v/sAn0DBv/XAn0DCP/XAn0DDv/sAn0DEP/sAn0DGP/sAn4AD/+uAn4AEf+uAn4Bnf/sAn4BpP/XAn4Bpv/sAn4BqP/XAn4Bqv/XAn4Brv/XAn4BsP/XAn4Bsf/sAn4Btf/XAn4BvP/DAn4Bvf/XAn4Bv//XAn4Bwf/XAn4BxP/sAn4Bx//sAn4Bzv/sAn4B1f/sAn4B8v/sAn4CCP+uAn4CDP+uAn4Ccv/XAn4Cc//sAn4Cev/sAn4CfP/XAn4CgP/sAn4Cgv/sAn4Cn//XAn4Cof/sAn4Cqf/sAn4Ctf/DAn4Ct//sAn4Cuf/sAn4Cu//XAn4Cvf/sAn4Cv//XAn4Cwf/XAn4Cyv/XAn4Czv/XAn4Cz//sAn4C1P/XAn4C2f/XAn4C2//XAn4C3f/XAn4C5f/XAn4C5//sAn4C9f/sAn4C9//XAn4C+f/XAn4C+//XAn4C/f/XAn4DBf/XAn4DB//XAn4DDf/XAn4DD//XAn4DEf/XAn4DEv/sAn4DF//sAn4DG//XAn4DHP/sAn8ABf/sAn8ACv/sAn8B0P/XAn8B3P/sAn8B3f/sAn8B3//XAn8B4f/sAn8B5P/sAn8B9v/sAn8CB//sAn8CC//sAn8CoP/XAn8Cqv/sAn8Ctv/sAn8CvP/XAn8Cvv/sAn8CwP/sAn8Cwv/sAn8Cy//XAn8C1f/sAn8C5v/XAn8C+P/sAn8C+v/sAn8C/P/sAn8C/v/sAn8DBv/XAn8DCP/XAn8DDv/sAn8DEP/sAn8DGP/sAoAAD/+FAoAAEf+FAoABn//sAoABpP+aAoABqv9xAoABrv+aAoABtf+aAoABuP/sAoABu//sAoABvv/DAoAByf/sAoABzv+uAoABz//XAoAB1f+uAoAB2P/XAoAB2//XAoAB3v/XAoAB4f/XAoAB6v/XAoAB6wBmAoAB7f/XAoAB7v/sAoAB8v+uAoAB9ABmAoACCP+FAoACDP+FAoACav/XAoACbP/sAoACcv9xAoACc/+uAoACfv/sAoACf//XAoAChP/sAoAChf/XAoAChv/sAoACh//XAoACiP/sAoACif/XAoACiv/sAoACjP/sAoACjf/XAoACmABmAoACqABmAoACsf/sAoACsv/XAoACs//sAoACtP/XAoACwP/XAoACwv/XAoACxf/XAoACxv/DAoACx//XAoACyP/DAoACzv+aAoACz/+uAoAC1f/XAoAC2f9xAoAC2/9xAoAC3f9xAoAC4P/XAoAC7//sAoAC8P/XAoAC8f/sAoAC8v/XAoAC8//sAoAC9P/XAoAC/v/XAoADCf9xAoADCv/XAoADC/9xAoADDP/XAoADEf+aAoADEv+uAoADFf/sAoADFv/XAoADGv/XAoADG/+aAoADHP+uAoEAD/+uAoEAEf+uAoEBzv/XAoEB1f/XAoEB8v/XAoECCP+uAoECDP+uAoECc//XAoECz//XAoEDEv/XAoEDHP/XAoIAD/+FAoIAEf+FAoIBn//sAoIBpP+aAoIBqv9xAoIBrv+aAoIBtf+aAoIBuP/sAoIBu//sAoIBvv/DAoIByf/sAoIBzv+uAoIBz//XAoIB1f+uAoIB2P/XAoIB2//XAoIB3v/XAoIB4f/XAoIB6v/XAoIB6wBmAoIB7f/XAoIB7v/sAoIB8v+uAoIB9ABmAoICCP+FAoICDP+FAoICav/XAoICbP/sAoICcv9xAoICc/+uAoICfv/sAoICf//XAoIChP/sAoIChf/XAoIChv/sAoICh//XAoICiP/sAoICif/XAoICiv/sAoICjP/sAoICjf/XAoICmABmAoICqABmAoICsf/sAoICsv/XAoICs//sAoICtP/XAoICwP/XAoICwv/XAoICxf/XAoICxv/DAoICx//XAoICyP/DAoICzv+aAoICz/+uAoIC1f/XAoIC2f9xAoIC2/9xAoIC3f9xAoIC4P/XAoIC7//sAoIC8P/XAoIC8f/sAoIC8v/XAoIC8//sAoIC9P/XAoIC/v/XAoIDCf9xAoIDCv/XAoIDC/9xAoIDDP/XAoIDEf+aAoIDEv+uAoIDFf/sAoIDFv/XAoIDGv/XAoIDG/+aAoIDHP+uAoMAD/+uAoMAEf+uAoMBzv/XAoMB1f/XAoMB8v/XAoMCCP+uAoMCDP+uAoMCc//XAoMCz//XAoMDEv/XAoMDHP/XAoQAD/+uAoQAEf+uAoQBzv/XAoQB1f/XAoQB8v/XAoQCCP+uAoQCDP+uAoQCc//XAoQCz//XAoQDEv/XAoQDHP/XAoUAD/+uAoUAEf+uAoUBzv/XAoUB1f/XAoUB8v/XAoUCCP+uAoUCDP+uAoUCc//XAoUCz//XAoUDEv/XAoUDHP/XAoYAD/+uAoYAEf+uAoYBnf/sAoYBpP/XAoYBpv/sAoYBqP/XAoYBqv/XAoYBrv/XAoYBsP/XAoYBsf/sAoYBtf/XAoYBvP/DAoYBvf/XAoYBv//XAoYBwf/XAoYBxP/sAoYBx//sAoYBzv/sAoYB1f/sAoYB8v/sAoYCCP+uAoYCDP+uAoYCcv/XAoYCc//sAoYCev/sAoYCfP/XAoYCgP/sAoYCgv/sAoYCn//XAoYCof/sAoYCqf/sAoYCtf/DAoYCt//sAoYCuf/sAoYCu//XAoYCvf/sAoYCv//XAoYCwf/XAoYCyv/XAoYCzv/XAoYCz//sAoYC1P/XAoYC2f/XAoYC2//XAoYC3f/XAoYC5f/XAoYC5//sAoYC9f/sAoYC9//XAoYC+f/XAoYC+//XAoYC/f/XAoYDBf/XAoYDB//XAoYDDf/XAoYDD//XAoYDEf/XAoYDEv/sAoYDF//sAoYDG//XAoYDHP/sAocABf/sAocACv/sAocB0P/XAocB3P/sAocB3f/sAocB3//XAocB4f/sAocB5P/sAocB9v/sAocCB//sAocCC//sAocCoP/XAocCqv/sAocCtv/sAocCvP/XAocCvv/sAocCwP/sAocCwv/sAocCy//XAocC1f/sAocC5v/XAocC+P/sAocC+v/sAocC/P/sAocC/v/sAocDBv/XAocDCP/XAocDDv/sAocDEP/sAocDGP/sAogAD/+uAogAEf+uAogBnf/sAogBpP/XAogBpv/sAogBqP/XAogBqv/XAogBrv/XAogBsP/XAogBsf/sAogBtf/XAogBvP/DAogBvf/XAogBv//XAogBwf/XAogBxP/sAogBx//sAogBzv/sAogB1f/sAogB8v/sAogCCP+uAogCDP+uAogCcv/XAogCc//sAogCev/sAogCfP/XAogCgP/sAogCgv/sAogCn//XAogCof/sAogCqf/sAogCtf/DAogCt//sAogCuf/sAogCu//XAogCvf/sAogCv//XAogCwf/XAogCyv/XAogCzv/XAogCz//sAogC1P/XAogC2f/XAogC2//XAogC3f/XAogC5f/XAogC5//sAogC9f/sAogC9//XAogC+f/XAogC+//XAogC/f/XAogDBf/XAogDB//XAogDDf/XAogDD//XAogDEf/XAogDEv/sAogDF//sAogDG//XAogDHP/sAokABf/sAokACv/sAokB0P/XAokB3P/sAokB3f/sAokB3//XAokB4f/sAokB5P/sAokB9v/sAokCB//sAokCC//sAokCoP/XAokCqv/sAokCtv/sAokCvP/XAokCvv/sAokCwP/sAokCwv/sAokCy//XAokC1f/sAokC5v/XAokC+P/sAokC+v/sAokC/P/sAokC/v/sAokDBv/XAokDCP/XAokDDv/sAokDEP/sAokDGP/sAooAD/+uAooAEf+uAooBnf/sAooBpP/XAooBpv/sAooBqP/XAooBqv/XAooBrv/XAooBsP/XAooBsf/sAooBtf/XAooBvP/DAooBvf/XAooBv//XAooBwf/XAooBxP/sAooBx//sAooBzv/sAooB1f/sAooB8v/sAooCCP+uAooCDP+uAooCcv/XAooCc//sAooCev/sAooCfP/XAooCgP/sAooCgv/sAooCn//XAooCof/sAooCqf/sAooCtf/DAooCt//sAooCuf/sAooCu//XAooCvf/sAooCv//XAooCwf/XAooCyv/XAooCzv/XAooCz//sAooC1P/XAooC2f/XAooC2//XAooC3f/XAooC5f/XAooC5//sAooC9f/sAooC9//XAooC+f/XAooC+//XAooC/f/XAooDBf/XAooDB//XAooDDf/XAooDD//XAooDEf/XAooDEv/sAooDF//sAooDG//XAooDHP/sAosAD/+uAosAEf+uAosBzv/XAosB1f/XAosB8v/XAosCCP+uAosCDP+uAosCc//XAosCz//XAosDEv/XAosDHP/XAowBn//XAowBuP/XAowBu//XAowBvv/XAowB4f/XAowCbP/XAowCfv/XAowChP/XAowChv/XAowCiP/XAowCiv/XAowCjP/XAowCsf/XAowCs//XAowCwP/XAowCwv/XAowCxf/XAowCx//XAowC1f/XAowC7//XAowC8f/XAowC8//XAowC/v/XAowDCf/XAowDC//XAowDDv/XAowDEP/XAowDFf/XApUBowDhApUC6gApApUDDv/XApUDEP/XApYABf/sApYACv/sApYCB//sApYCC//sApcABf+uApcACv+uApcBnf/XApcBpv/XApcBvP+uApcBwf+uApcBxP/XApcB3P/XApcB5P/XApcCB/+uApcCC/+uApcCfP+uApcCgP/DApcCgv/DApcCqf/XApcCqv/XApcCtf+uApcCtv/XApcCt//DApcCuf/DApcCvf/XApcCvv/XApcCv/+uApcCwf+uApcC1P+uApcC/f+uApcDDf+aApcDD/+aApcDF//XApcDGP/XApgABf+FApgACv+FApgB0P/XApgB3P+aApgB3f/DApgB3//XApgB4f+uApgB5P+aApgB9v/DApgCB/+FApgCC/+FApgCbf/XApgCgf/XApgCg//XApgCi//XApgCoP/XApgCqv+aApgCtv+aApgCuP/DApgCuv/DApgCvP/XApgCvv+aApgCwP+uApgCwv+uApgCxv/XApgCyP/XApgCy//XApgC1f+uApgC5v/XApgC6v/XApgC+P/DApgC+v/DApgC/P/DApgC/v+uApgDBv/XApgDCP/XApgDDv+aApgDEP+aApgDGP+aApkAD/72ApkAEf72ApkBpP+FApkBqv+aApkBrv+FApkBsP/XApkBtf+FApkBv//XApkBzv+aApkB1f+aApkB8v+aApkCCP72ApkCDP72ApkCcv+aApkCc/+aApkCdv/sApkCn//XApkCu//XApkCyv/XApkCzv+FApkCz/+aApkC2f+aApkC2/+aApkC3f+aApkC5f/XApkDBf/XApkDB//XApkDCf+uApkDC/+uApkDEf+FApkDEv+aApkDG/+FApkDHP+aApoABf/sApoACv/sApoB0P/XApoB3P/sApoB3f/sApoB3//XApoB4f/sApoB5P/sApoB9v/sApoCB//sApoCC//sApoCoP/XApoCqv/sApoCtv/sApoCvP/XApoCvv/sApoCwP/sApoCwv/sApoCy//XApoC1f/sApoC5v/XApoC+P/sApoC+v/sApoC/P/sApoC/v/sApoDBv/XApoDCP/XApoDDv/sApoDEP/sApoDGP/sApsAD/+aApsAEP/XApsAEf+aApsBnQApApsBn//XApsBpP+uApsBpgApApsBqv+FApsBrv+uApsBtf+uApsBuP/XApsBu//XApsBvAApApsBvv/DApsBxAApApsBzP/DApsBzf/DApsBzv+aApsBz/+uApsB0P/XApsB0f/XApsB0v/DApsB0//DApsB1P/DApsB1f+aApsB1v/DApsB1//DApsB2P+uApsB2f/DApsB2v/DApsB2/+uApsB3v+uApsB3//XApsB4P/DApsB4f+aApsB4v/DApsB4//DApsB5f/DApsB5v/DApsB5//XApsB6P/DApsB6v+uApsB6wApApsB7P/DApsB7f+uApsB7v/DApsB8v+aApsB8//DApsB9AApApsB9f/DApsB9//DApsB+f/DApsCAv/XApsCA//XApsCBP/XApsCCP+aApsCDP+aApsCav+uApsCa//DApsCbP/XApsCcf/DApsCcv+FApsCc/+aApsCdf/DApsCd//XApsCef/DApsCff/DApsCfv/XApsCf/+uApsChP/XApsChf+uApsChv/XApsCh/+uApsCiP/XApsCif+uApsCiv/XApsCjP/XApsCjf+uApsClv/DApsCmAApApsCmv/DApsCnv/DApsCoP/XApsCov/XApsCpP/DApsCpv/DApsCqAApApsCqQApApsCrP/DApsCrv/DApsCsP/DApsCsf/XApsCsv+uApsCs//XApsCtP+uApsCtQApApsCvP/XApsCvQApApsCwP+aApsCwv+aApsCxP/DApsCxf/XApsCxv/DApsCx//XApsCyP/DApsCy//XApsCzf/DApsCzv+uApsCz/+aApsC0f/DApsC0//DApsC1f+aApsC1//DApsC2f+FApsC2/+FApsC3f+FApsC4P+uApsC5v/XApsC6P/XApsC7P/DApsC7v/DApsC7//XApsC8P+uApsC8f/XApsC8v+uApsC8//XApsC9P+uApsC9v/XApsC/v+aApsDAP/DApsDAv/DApsDBv/XApsDCP/XApsDCf+aApsDCv+uApsDC/+aApsDDP+uApsDDv/XApsDEP/XApsDEf+uApsDEv+aApsDFP/DApsDFf/XApsDFv+uApsDFwApApsDGv+uApsDG/+uApsDHP+aApwAD//DApwAEf/DApwBzv/DApwBz//XApwB1f/DApwB2P/XApwB2//XApwB3v/XApwB6v/XApwB7f/XApwB8v/DApwCCP/DApwCDP/DApwCav/XApwCc//DApwCf//XApwChf/XApwCh//XApwCif/XApwCjf/XApwCsv/XApwCtP/XApwCz//DApwC4P/XApwC8P/XApwC8v/XApwC9P/XApwDCv/XApwDDP/XApwDEv/DApwDFv/XApwDGv/XApwDHP/DAp0ABf/DAp0ACv/DAp0Bnf/DAp0BowBmAp0Bpv/DAp0BvP/DAp0Bwf+uAp0BxP/DAp0B3P/XAp0B4f/XAp0B5P/XAp0CB//DAp0CC//DAp0CfP+uAp0CgP/DAp0Cgv/DAp0Cqf/DAp0Cqv/XAp0Ctf/DAp0Ctv/XAp0Ct//XAp0Cuf/XAp0Cvf/DAp0Cvv/XAp0Cv/+uAp0CwP/XAp0Cwf+uAp0Cwv/XAp0C1P+uAp0C1f/XAp0C/f+uAp0C/v/XAp0DDf/XAp0DDv/DAp0DD//XAp0DEP/DAp0DF//DAp0DGP/XAp4ABf/DAp4ACv/DAp4CB//DAp4CC//DAp4DDv/XAp4DEP/XAp8Bn//XAp8BowDhAp8BuP/XAp8Bu//XAp8Bvv/DAp8B3P/XAp8B4f+uAp8B5P/XAp8CbP/XAp8CewA9Ap8Cff/sAp8Cfv/XAp8ChP/XAp8Chv/XAp8CiP/XAp8Civ/XAp8CjP/XAp8Cqv/XAp8Csf/XAp8Cs//XAp8Ctv/XAp8Cvv/XAp8CwP+uAp8Cwv+uAp8Cxf/DAp8Cxv/XAp8Cx//DAp8CyP/XAp8C1f+uAp8C7//XAp8C8f/XAp8C8//XAp8C/v+uAp8DDv/XAp8DEP/XAp8DFf/XAp8DGP/XAqABz//sAqAB2P/sAqAB2//sAqAB3v/sAqAB4f/sAqAB6v/sAqAB7f/sAqACav/sAqACf//sAqAChf/sAqACh//sAqACif/sAqACjf/sAqACsv/sAqACtP/sAqACwP/sAqACwv/sAqAC1f/sAqAC4P/sAqAC8P/sAqAC8v/sAqAC9P/sAqAC/v/sAqADCv/sAqADDP/sAqADDv/XAqADEP/XAqADFv/sAqADGv/sAqEAD/+uAqEAEf+uAqECCP+uAqECDP+uAqECgP/sAqECgv/sAqECt//sAqECuf/sAqEDDf/XAqEDD//XAqIB6QApAqMBn//XAqMBowDhAqMBuP/XAqMBu//XAqMBvv/DAqMB3P/XAqMB4f+uAqMB5P/XAqMCbP/XAqMCewA9AqMCff/sAqMCfv/XAqMChP/XAqMChv/XAqMCiP/XAqMCiv/XAqMCjP/XAqMCqv/XAqMCsf/XAqMCs//XAqMCtv/XAqMCvv/XAqMCwP+uAqMCwv+uAqMCxf/DAqMCxv/XAqMCx//DAqMCyP/XAqMC1f+uAqMC7//XAqMC8f/XAqMC8//XAqMC/v+uAqMDDv/XAqMDEP/XAqMDFf/XAqMDGP/XAqQBz//sAqQB2P/sAqQB2//sAqQB3v/sAqQB4f/sAqQB6v/sAqQB7f/sAqQCav/sAqQCf//sAqQChf/sAqQCh//sAqQCif/sAqQCjf/sAqQCsv/sAqQCtP/sAqQCwP/sAqQCwv/sAqQC1f/sAqQC4P/sAqQC8P/sAqQC8v/sAqQC9P/sAqQC/v/sAqQDCv/sAqQDDP/sAqQDDv/XAqQDEP/XAqQDFv/sAqQDGv/sAqUBn//XAqUBuP/XAqUBu//XAqUBvv/XAqUBwf/XAqUB4f/XAqUCbP/XAqUCfP/XAqUCfv/XAqUChP/XAqUChv/XAqUCiP/XAqUCiv/XAqUCjP/XAqUCsf/XAqUCs//XAqUCv//XAqUCwP/XAqUCwf/XAqUCwv/XAqUCxf+aAqUCx/+aAqUC1P/XAqUC1f/XAqUC7//XAqUC8f/XAqUC8//XAqUC/f/XAqUC/v/XAqUDCf/XAqUDC//XAqUDDv/XAqUDEP/XAqUDFf/XAqUDGf/sAqYBz//XAqYB2P/XAqYB2//XAqYB3v/XAqYB4f/XAqYB6v/XAqYB7f/XAqYCav/XAqYCf//XAqYChf/XAqYCh//XAqYCif/XAqYCjf/XAqYCsv/XAqYCtP/XAqYCwP/XAqYCwv/XAqYCxv/XAqYCyP/XAqYC1f/XAqYC4P/XAqYC8P/XAqYC8v/XAqYC9P/XAqYC/v/XAqYDCv/XAqYDDP/XAqYDFv/XAqYDGv/XAqcBn//XAqcBuP/XAqcBu//XAqcBvv/XAqcBwf/XAqcB4f/XAqcCbP/XAqcCfP/XAqcCfv/XAqcChP/XAqcChv/XAqcCiP/XAqcCiv/XAqcCjP/XAqcCsf/XAqcCs//XAqcCv//XAqcCwP/XAqcCwf/XAqcCwv/XAqcCxf+aAqcCx/+aAqcC1P/XAqcC1f/XAqcC7//XAqcC8f/XAqcC8//XAqcC/f/XAqcC/v/XAqcDCf/XAqcDC//XAqcDDv/XAqcDEP/XAqcDFf/XAqcDGf/sAqgBz//XAqgB2P/XAqgB2//XAqgB3v/XAqgB4f/XAqgB6v/XAqgB7f/XAqgCav/XAqgCf//XAqgChf/XAqgCh//XAqgCif/XAqgCjf/XAqgCsv/XAqgCtP/XAqgCwP/XAqgCwv/XAqgCxv/XAqgCyP/XAqgC1f/XAqgC4P/XAqgC8P/XAqgC8v/XAqgC9P/XAqgC/v/XAqgDCv/XAqgDDP/XAqgDFv/XAqgDGv/XAqkBn//XAqkBuP/XAqkBu//XAqkBvv/XAqkBwf/XAqkB4f/XAqkCbP/XAqkCfP/XAqkCfv/XAqkChP/XAqkChv/XAqkCiP/XAqkCiv/XAqkCjP/XAqkCsf/XAqkCs//XAqkCv//XAqkCwP/XAqkCwf/XAqkCwv/XAqkCxf+aAqkCx/+aAqkC1P/XAqkC1f/XAqkC7//XAqkC8f/XAqkC8//XAqkC/f/XAqkC/v/XAqkDCf/XAqkDC//XAqkDDv/XAqkDEP/XAqkDFf/XAqkDGf/sAqoBz//XAqoB2P/XAqoB2//XAqoB3v/XAqoB4f/XAqoB6v/XAqoB7f/XAqoCav/XAqoCf//XAqoChf/XAqoCh//XAqoCif/XAqoCjf/XAqoCsv/XAqoCtP/XAqoCwP/XAqoCwv/XAqoCxv/XAqoCyP/XAqoC1f/XAqoC4P/XAqoC8P/XAqoC8v/XAqoC9P/XAqoC/v/XAqoDCv/XAqoDDP/XAqoDFv/XAqoDGv/XAqsBowDhAqsC6gApAqsDDv/XAqsDEP/XAqwABf/sAqwACv/sAqwCB//sAqwCC//sAq0AD/+aAq0AEP/XAq0AEf+aAq0BnQApAq0Bn//XAq0BpP+uAq0BpgApAq0Bqv+FAq0Brv+uAq0Btf+uAq0BuP/XAq0Bu//XAq0BvAApAq0Bvv/DAq0BxAApAq0BzP/DAq0Bzf/DAq0Bzv+aAq0Bz/+uAq0B0P/XAq0B0f/XAq0B0v/DAq0B0//DAq0B1P/DAq0B1f+aAq0B1v/DAq0B1//DAq0B2P+uAq0B2f/DAq0B2v/DAq0B2/+uAq0B3v+uAq0B3//XAq0B4P/DAq0B4f+aAq0B4v/DAq0B4//DAq0B5f/DAq0B5v/DAq0B5//XAq0B6P/DAq0B6v+uAq0B6wApAq0B7P/DAq0B7f+uAq0B7v/DAq0B8v+aAq0B8//DAq0B9AApAq0B9f/DAq0B9//DAq0B+f/DAq0CAv/XAq0CA//XAq0CBP/XAq0CCP+aAq0CDP+aAq0Cav+uAq0Ca//DAq0CbP/XAq0Ccf/DAq0Ccv+FAq0Cc/+aAq0Cdf/DAq0Cd//XAq0Cef/DAq0Cff/DAq0Cfv/XAq0Cf/+uAq0ChP/XAq0Chf+uAq0Chv/XAq0Ch/+uAq0CiP/XAq0Cif+uAq0Civ/XAq0CjP/XAq0Cjf+uAq0Clv/DAq0CmAApAq0Cmv/DAq0Cnv/DAq0CoP/XAq0Cov/XAq0CpP/DAq0Cpv/DAq0CqAApAq0CqQApAq0CrP/DAq0Crv/DAq0CsP/DAq0Csf/XAq0Csv+uAq0Cs//XAq0CtP+uAq0CtQApAq0CvP/XAq0CvQApAq0CwP+aAq0Cwv+aAq0CxP/DAq0Cxf/XAq0Cxv/DAq0Cx//XAq0CyP/DAq0Cy//XAq0Czf/DAq0Czv+uAq0Cz/+aAq0C0f/DAq0C0//DAq0C1f+aAq0C1//DAq0C2f+FAq0C2/+FAq0C3f+FAq0C4P+uAq0C5v/XAq0C6P/XAq0C7P/DAq0C7v/DAq0C7//XAq0C8P+uAq0C8f/XAq0C8v+uAq0C8//XAq0C9P+uAq0C9v/XAq0C/v+aAq0DAP/DAq0DAv/DAq0DBv/XAq0DCP/XAq0DCf+aAq0DCv+uAq0DC/+aAq0DDP+uAq0DDv/XAq0DEP/XAq0DEf+uAq0DEv+aAq0DFP/DAq0DFf/XAq0DFv+uAq0DFwApAq0DGv+uAq0DG/+uAq0DHP+aAq4AD/+aAq4AEP/XAq4AEf+aAq4Bzv/DAq4Bz//sAq4B1f/DAq4B2P/sAq4B2//sAq4B3v/sAq4B6v/sAq4B7f/sAq4B8v/DAq4CAv/XAq4CA//XAq4CBP/XAq4CCP+aAq4CDP+aAq4Cav/sAq4Cc//DAq4Cf//sAq4Chf/sAq4Ch//sAq4Cif/sAq4Cjf/sAq4Csv/sAq4CtP/sAq4Cz//DAq4C4P/sAq4C8P/sAq4C8v/sAq4C9P/sAq4DCv/sAq4DDP/sAq4DEv/DAq4DFv/sAq4DGv/sAq4DHP/DAq8ABf9cAq8ACv9cAq8Bnf+aAq8BowBmAq8Bpv+aAq8BvP9IAq8Bwf+FAq8BxP+aAq8B3P+uAq8B4f/XAq8B5P+uAq8CB/9cAq8CC/9cAq8CfP+FAq8CgP9xAq8Cgv9xAq8Cqf+aAq8Cqv+uAq8Ctf9IAq8Ctv+uAq8Ct/+aAq8Cuf+aAq8Cvf+aAq8Cvv+uAq8Cv/+FAq8CwP/XAq8Cwf+FAq8Cwv/XAq8Cxf/DAq8Cxv/XAq8Cx//DAq8CyP/XAq8C1P+FAq8C1f/XAq8C/f+FAq8C/v/XAq8DDf9IAq8DDv+uAq8DD/9IAq8DEP+uAq8DF/+aAq8DGP+uArAABf9xArAACv9xArAB3P+aArAB4f/XArAB5P+aArACB/9xArACC/9xArACbf/XArACgf/XArACg//XArACi//XArACqv+aArACtv+aArACuP/XArACuv/XArACvv+aArACwP/XArACwv/XArACxv/XArACyP/XArAC1f/XArAC/v/XArADDv9xArADEP9xArADGP+aArEBnf/XArEBpv/XArEBvP/DArEBxP/XArECgP/sArECgv/sArECqf/XArECtf/DArECt//sArECuf/sArECvf/XArEDDf/XArEDD//XArEDF//XArIABf/sArIACv/sArIB0P/XArIB3P/sArIB3f/sArIB3//XArIB4f/sArIB5P/sArIB9v/sArICB//sArICC//sArICoP/XArICqv/sArICtv/sArICvP/XArICvv/sArICwP/sArICwv/sArICy//XArIC1f/sArIC5v/XArIC+P/sArIC+v/sArIC/P/sArIC/v/sArIDBv/XArIDCP/XArIDDv/sArIDEP/sArIDGP/sArMBn//XArMBuP/XArMBu//XArMBvv/XArMB4f/XArMCbP/XArMCfv/XArMChP/XArMChv/XArMCiP/XArMCiv/XArMCjP/XArMCsf/XArMCs//XArMCwP/XArMCwv/XArMCxf/XArMCx//XArMC1f/XArMC7//XArMC8f/XArMC8//XArMC/v/XArMDCf/XArMDC//XArMDDv/XArMDEP/XArMDFf/XArUAD/+FArUAEP+uArUAEf+FArUBn//XArUBpP+aArUBqv9xArUBrv+aArUBtf+aArUBuP/XArUBu//XArUBvAApArUBvv+uArUBzP+aArUBzf+aArUBzv+FArUBz/9xArUB0P/XArUB0f/XArUB0v+aArUB0/+aArUB1P+aArUB1f+FArUB1v+aArUB1/+aArUB2P9xArUB2f+aArUB2v+aArUB2/9xArUB3P+uArUB3f+uArUB3v9xArUB3//XArUB4P+aArUB4f+aArUB4v+aArUB4/+aArUB5P+uArUB5f+aArUB5v+aArUB5//XArUB6P+aArUB6f/DArUB6v9xArUB7P+aArUB7f9xArUB7v+FArUB8v+FArUB8/+aArUB9f+aArUB9v+uArUB9/+aArUB+f+aArUCAv+uArUCA/+uArUCBP+uArUCCP+FArUCDP+FArUCav9xArUCa/+aArUCbP/XArUCbf/XArUCcf+aArUCcv9xArUCc/+FArUCdf+aArUCd/+aArUCef+aArUCff+aArUCfv/XArUCf/9xArUCgf/XArUCg//XArUChP/XArUChf9xArUChv/XArUCh/9xArUCiP/XArUCif9xArUCiv/XArUCi//XArUCjP/XArUCjf9xArUClv+aArUCmv+aArUCnv+aArUCoP/XArUCov/XArUCpP+aArUCpv+aArUCqv+uArUCrP+aArUCrv+aArUCsP+aArUCsf/XArUCsv9xArUCs//XArUCtP9xArUCtQApArUCtv+uArUCuP+uArUCuv+uArUCvP/XArUCvv+uArUCwP+aArUCwv+aArUCxP+aArUCxf+aArUCxv9xArUCx/+aArUCyP9xArUCy//XArUCzf+aArUCzv+aArUCz/+FArUC0f+aArUC0/+aArUC1f+aArUC1/+aArUC2f9xArUC2/9xArUC3f9xArUC4P9xArUC5v/XArUC6P/XArUC6v/DArUC7P+aArUC7v+aArUC7//XArUC8P9xArUC8f/XArUC8v9xArUC8//XArUC9P9xArUC9v/XArUC+P+uArUC+v+uArUC/P+uArUC/v+aArUDAP+aArUDAv+aArUDBv/XArUDCP/XArUDCf9xArUDCv9xArUDC/9xArUDDP9xArUDDv+aArUDEP+aArUDEf+aArUDEv+FArUDFP+aArUDFf/XArUDFv9xArUDGP+uArUDGv9xArUDG/+aArUDHP+FArYAD/+aArYAEP/XArYAEf+aArYBzv/DArYBz//sArYB1f/DArYB2P/sArYB2//sArYB3v/sArYB6v/sArYB7f/sArYB8v/DArYCAv/XArYCA//XArYCBP/XArYCCP+aArYCDP+aArYCav/sArYCc//DArYCf//sArYChf/sArYCh//sArYCif/sArYCjf/sArYCsv/sArYCtP/sArYCz//DArYC4P/sArYC8P/sArYC8v/sArYC9P/sArYDCv/sArYDDP/sArYDEv/DArYDFv/sArYDGv/sArYDHP/DArcAD/+FArcAEf+FArcBn//XArcBpP+uArcBqv+FArcBrv+uArcBtf+uArcBuP/XArcBu//XArcBvv/DArcByv+uArcBzP/DArcBzf/DArcBzv+aArcBz/+aArcB0v/DArcB0//DArcB1P/DArcB1f+aArcB1v/DArcB1//DArcB2P+aArcB2f/DArcB2v/DArcB2/+aArcB3v+aArcB4P/DArcB4f+uArcB4v/DArcB4//DArcB5f/DArcB5v/DArcB6P/DArcB6f/XArcB6v+aArcB6wApArcB7P/DArcB7f+aArcB7v+uArcB8v+aArcB8//DArcB9AApArcB9f/DArcB9//DArcB+f/DArcCCP+FArcCDP+FArcCav+aArcCa//DArcCbP/XArcCcf/DArcCcv+FArcCc/+aArcCdf/DArcCd//XArcCef/DArcCff/XArcCfv/XArcCf/+aArcChP/XArcChf+aArcChv/XArcCh/+aArcCiP/XArcCif+aArcCiv/XArcCjP/XArcCjf+aArcClv/DArcCmAApArcCmv/DArcCnv/DArcCpP/DArcCpv/DArcCqAApArcCrP/DArcCrv/DArcCsP/DArcCsf/XArcCsv+aArcCs//XArcCtP+aArcCwP+uArcCwv+uArcCxP/DArcCxv+uArcCyP+uArcCzf/DArcCzv+uArcCz/+aArcC0f/DArcC0//DArcC1f+uArcC1//DArcC2f+FArcC2v+uArcC2/+FArcC3P+uArcC3f+FArcC3v+uArcC4P+aArcC4f/sArcC4v+uArcC4//sArcC5P+uArcC7P/DArcC7v/DArcC7//XArcC8P+aArcC8f/XArcC8v+aArcC8//XArcC9P+aArcC/v+uArcDAP/DArcDAv/DArcDCf+uArcDCv+aArcDC/+uArcDDP+aArcDDv/XArcDEP/XArcDEf+uArcDEv+aArcDFP/DArcDFf/XArcDFv+aArcDGf/sArcDGv+aArcDG/+uArcDHP+aArgAD/+uArgAEf+uArgBzv/sArgB1f/sArgB8v/sArgCCP+uArgCDP+uArgCc//sArgCz//sArgDEv/sArgDHP/sArkAD/+FArkAEf+FArkBn//XArkBpP+uArkBqv+FArkBrv+uArkBtf+uArkBuP/XArkBu//XArkBvv/DArkByv+uArkBzP/DArkBzf/DArkBzv+aArkBz/+aArkB0v/DArkB0//DArkB1P/DArkB1f+aArkB1v/DArkB1//DArkB2P+aArkB2f/DArkB2v/DArkB2/+aArkB3v+aArkB4P/DArkB4f+uArkB4v/DArkB4//DArkB5f/DArkB5v/DArkB6P/DArkB6f/XArkB6v+aArkB6wApArkB7P/DArkB7f+aArkB7v+uArkB8v+aArkB8//DArkB9AApArkB9f/DArkB9//DArkB+f/DArkCCP+FArkCDP+FArkCav+aArkCa//DArkCbP/XArkCcf/DArkCcv+FArkCc/+aArkCdf/DArkCd//XArkCef/DArkCff/XArkCfv/XArkCf/+aArkChP/XArkChf+aArkChv/XArkCh/+aArkCiP/XArkCif+aArkCiv/XArkCjP/XArkCjf+aArkClv/DArkCmAApArkCmv/DArkCnv/DArkCpP/DArkCpv/DArkCqAApArkCrP/DArkCrv/DArkCsP/DArkCsf/XArkCsv+aArkCs//XArkCtP+aArkCwP+uArkCwv+uArkCxP/DArkCxv+uArkCyP+uArkCzf/DArkCzv+uArkCz/+aArkC0f/DArkC0//DArkC1f+uArkC1//DArkC2f+FArkC2v+uArkC2/+FArkC3P+uArkC3f+FArkC3v+uArkC4P+aArkC4f/sArkC4v+uArkC4//sArkC5P+uArkC7P/DArkC7v/DArkC7//XArkC8P+aArkC8f/XArkC8v+aArkC8//XArkC9P+aArkC/v+uArkDAP/DArkDAv/DArkDCf+uArkDCv+aArkDC/+uArkDDP+aArkDDv/XArkDEP/XArkDEf+uArkDEv+aArkDFP/DArkDFf/XArkDFv+aArkDGf/sArkDGv+aArkDG/+uArkDHP+aAroAD/+uAroAEf+uAroBzv/sAroB1f/sAroB8v/sAroCCP+uAroCDP+uAroCc//sAroCz//sAroDEv/sAroDHP/sArsBn//XArsBowDhArsBuP/XArsBu//XArsBvv/DArsB3P/XArsB4f+uArsB5P/XArsCbP/XArsCewA9ArsCff/sArsCfv/XArsChP/XArsChv/XArsCiP/XArsCiv/XArsCjP/XArsCqv/XArsCsf/XArsCs//XArsCtv/XArsCvv/XArsCwP+uArsCwv+uArsCxf/DArsCxv/XArsCx//DArsCyP/XArsC1f+uArsC7//XArsC8f/XArsC8//XArsC/v+uArsDDv/XArsDEP/XArsDFf/XArsDGP/XArwBz//sArwB2P/sArwB2//sArwB3v/sArwB4f/sArwB6v/sArwB7f/sArwCav/sArwCf//sArwChf/sArwCh//sArwCif/sArwCjf/sArwCsv/sArwCtP/sArwCwP/sArwCwv/sArwC1f/sArwC4P/sArwC8P/sArwC8v/sArwC9P/sArwC/v/sArwDCv/sArwDDP/sArwDDv/XArwDEP/XArwDFv/sArwDGv/sAr0BowDhAr0C6gApAr0DDv/XAr0DEP/XAr4ABf/sAr4ACv/sAr4CB//sAr4CC//sAr8BowDhAr8C6gApAr8DDv/XAr8DEP/XAsAABf/sAsAACv/sAsACB//sAsACC//sAsMABf/DAsMACv/DAsMBnf/XAsMBpv/XAsMBvP+FAsMBwf+uAsMBxP/XAsMB3P/XAsMB3f/sAsMB4f/sAsMB5P/XAsMB9v/sAsMCB//DAsMCC//DAsMCfP+uAsMCgP/DAsMCgv/DAsMCqf/XAsMCqv/XAsMCtf+FAsMCtv/XAsMCt/+aAsMCuf+aAsMCvf/XAsMCvv/XAsMCv/+uAsMCwP/sAsMCwf+uAsMCwv/sAsMC1P+uAsMC1f/sAsMC+P/sAsMC+v/sAsMC/P/sAsMC/f+uAsMC/v/sAsMDDf+uAsMDDv/XAsMDD/+uAsMDEP/XAsMDF//XAsMDGP/XAsQABf+aAsQACv+aAsQB3P/XAsQB3f/XAsQB5P/XAsQB9v/XAsQCB/+aAsQCC/+aAsQCqv/XAsQCtv/XAsQCuP/XAsQCuv/XAsQCvv/XAsQC+P/XAsQC+v/XAsQC/P/XAsQDDv+uAsQDEP+uAsQDGP/XAsUBvP/XAsUCgP/sAsUCgv/sAsUCtf/XAsUCt//sAsUCuf/sAsUDDf/sAsUDD//sAsYABf/sAsYACv/sAsYCB//sAsYCC//sAscBvP/XAscCgP/sAscCgv/sAscCtf/XAscCt//sAscCuf/sAscDDf/sAscDD//sAsgABf/sAsgACv/sAsgCB//sAsgCC//sAsoBn//XAsoBuP/XAsoBu//XAsoBvv/XAsoBwf/XAsoB4f/XAsoCbP/XAsoCfP/XAsoCfv/XAsoChP/XAsoChv/XAsoCiP/XAsoCiv/XAsoCjP/XAsoCsf/XAsoCs//XAsoCv//XAsoCwP/XAsoCwf/XAsoCwv/XAsoCxf+aAsoCx/+aAsoC1P/XAsoC1f/XAsoC7//XAsoC8f/XAsoC8//XAsoC/f/XAsoC/v/XAsoDCf/XAsoDC//XAsoDDv/XAsoDEP/XAsoDFf/XAsoDGf/sAssBz//XAssB2P/XAssB2//XAssB3v/XAssB4f/XAssB6v/XAssB7f/XAssCav/XAssCf//XAssChf/XAssCh//XAssCif/XAssCjf/XAssCsv/XAssCtP/XAssCwP/XAssCwv/XAssCxv/XAssCyP/XAssC1f/XAssC4P/XAssC8P/XAssC8v/XAssC9P/XAssC/v/XAssDCv/XAssDDP/XAssDFv/XAssDGv/XAswABf/DAswACv/DAswBowBmAswBvP/XAswBvv/XAswBwf+uAswB3P/DAswB4f/XAswB5P/DAswCB//DAswCC//DAswCbf/sAswCfP+uAswCgP/XAswCgf/sAswCgv/XAswCg//sAswCi//sAswCqv/DAswCtf/XAswCtv/DAswCt//XAswCuP/sAswCuf/XAswCuv/sAswCvv/DAswCv/+uAswCwP/XAswCwf+uAswCwv/XAswCxf/DAswCxv/XAswCx//DAswCyP/XAswC1P+uAswC1f/XAswC/f+uAswC/v/XAswDDf/XAswDDv/DAswDD//XAswDEP/DAswDGP/DAs0B4f/XAs0CwP/XAs0Cwv/XAs0C1f/XAs0C/v/XAs4BowDhAs4C6gApAs4DDv/XAs4DEP/XAs8ABf/sAs8ACv/sAs8CB//sAs8CC//sAtIBowDhAtIC6gApAtIDDv/XAtIDEP/XAtMABf/sAtMACv/sAtMCB//sAtMCC//sAtYBowDhAtYC6gApAtYDDv/XAtYDEP/XAtcABf/sAtcACv/sAtcCB//sAtcCC//sAtkABf9xAtkACv9xAtkBnf+aAtkBpv+aAtkBvP9xAtkBvv/XAtkBwf+aAtkBxP+aAtkB3P/XAtkB4f/XAtkB5P/XAtkCB/9xAtkCC/9xAtkCbv/XAtkCfP+aAtkCgP+uAtkCgv+uAtkCl//XAtkCm//XAtkCp//XAtkCqf+aAtkCqv/XAtkCtf9xAtkCtv/XAtkCt/+FAtkCuf+FAtkCvf+aAtkCvv/XAtkCv/+aAtkCwP/XAtkCwf+aAtkCwv/XAtkCxf+aAtkCx/+aAtkC1P+aAtkC1f/XAtkC4f/XAtkC4//XAtkC/f+aAtkC/v/XAtkDA//XAtkDDf9xAtkDDv/XAtkDD/9xAtkDEP/XAtkDF/+aAtkDGP/XAtoABf/sAtoACv/sAtoCB//sAtoCC//sAtsABf9xAtsACv9xAtsBnf+aAtsBpv+aAtsBvP9xAtsBvv/XAtsBwf+aAtsBxP+aAtsB3P/XAtsB4f/XAtsB5P/XAtsCB/9xAtsCC/9xAtsCbv/XAtsCfP+aAtsCgP+uAtsCgv+uAtsCl//XAtsCm//XAtsCp//XAtsCqf+aAtsCqv/XAtsCtf9xAtsCtv/XAtsCt/+FAtsCuf+FAtsCvf+aAtsCvv/XAtsCv/+aAtsCwP/XAtsCwf+aAtsCwv/XAtsCxf+aAtsCx/+aAtsC1P+aAtsC1f/XAtsC4f/XAtsC4//XAtsC/f+aAtsC/v/XAtsDA//XAtsDDf9xAtsDDv/XAtsDD/9xAtsDEP/XAtsDF/+aAtsDGP/XAtwABf/sAtwACv/sAtwCB//sAtwCC//sAt4ABf/sAt4ACv/sAt4CB//sAt4CC//sAuAABf/sAuAACv/sAuACB//sAuACC//sAuEAD/+uAuEAEf+uAuEBnf/sAuEBpP/XAuEBpv/sAuEBqP/XAuEBqv/XAuEBrv/XAuEBsP/XAuEBsf/sAuEBtf/XAuEBvP/DAuEBvf/XAuEBv//XAuEBwf/XAuEBxP/sAuEBx//sAuEBzv/sAuEB1f/sAuEB8v/sAuECCP+uAuECDP+uAuECcv/XAuECc//sAuECev/sAuECfP/XAuECgP/sAuECgv/sAuECn//XAuECof/sAuECqf/sAuECtf/DAuECt//sAuECuf/sAuECu//XAuECvf/sAuECv//XAuECwf/XAuECyv/XAuECzv/XAuECz//sAuEC1P/XAuEC2f/XAuEC2//XAuEC3f/XAuEC5f/XAuEC5//sAuEC9f/sAuEC9//XAuEC+f/XAuEC+//XAuEC/f/XAuEDBf/XAuEDB//XAuEDDf/XAuEDD//XAuEDEf/XAuEDEv/sAuEDF//sAuEDG//XAuEDHP/sAuIABf/sAuIACv/sAuIB0P/XAuIB3P/sAuIB3f/sAuIB3//XAuIB4f/sAuIB5P/sAuIB9v/sAuICB//sAuICC//sAuICoP/XAuICqv/sAuICtv/sAuICvP/XAuICvv/sAuICwP/sAuICwv/sAuICy//XAuIC1f/sAuIC5v/XAuIC+P/sAuIC+v/sAuIC/P/sAuIC/v/sAuIDBv/XAuIDCP/XAuIDDv/sAuIDEP/sAuIDGP/sAuMAD/+uAuMAEf+uAuMBnf/sAuMBpP/XAuMBpv/sAuMBqP/XAuMBqv/XAuMBrv/XAuMBsP/XAuMBsf/sAuMBtf/XAuMBvP/DAuMBvf/XAuMBv//XAuMBwf/XAuMBxP/sAuMBx//sAuMBzv/sAuMB1f/sAuMB8v/sAuMCCP+uAuMCDP+uAuMCcv/XAuMCc//sAuMCev/sAuMCfP/XAuMCgP/sAuMCgv/sAuMCn//XAuMCof/sAuMCqf/sAuMCtf/DAuMCt//sAuMCuf/sAuMCu//XAuMCvf/sAuMCv//XAuMCwf/XAuMCyv/XAuMCzv/XAuMCz//sAuMC1P/XAuMC2f/XAuMC2//XAuMC3f/XAuMC5f/XAuMC5//sAuMC9f/sAuMC9//XAuMC+f/XAuMC+//XAuMC/f/XAuMDBf/XAuMDB//XAuMDDf/XAuMDD//XAuMDEf/XAuMDEv/sAuMDF//sAuMDG//XAuMDHP/sAuQABf/sAuQACv/sAuQB0P/XAuQB3P/sAuQB3f/sAuQB3//XAuQB4f/sAuQB5P/sAuQB9v/sAuQCB//sAuQCC//sAuQCoP/XAuQCqv/sAuQCtv/sAuQCvP/XAuQCvv/sAuQCwP/sAuQCwv/sAuQCy//XAuQC1f/sAuQC5v/XAuQC+P/sAuQC+v/sAuQC/P/sAuQC/v/sAuQDBv/XAuQDCP/XAuQDDv/sAuQDEP/sAuQDGP/sAuUBn//XAuUBuP/XAuUBu//XAuUBvv/XAuUBwf/XAuUB4f/XAuUCbP/XAuUCfP/XAuUCfv/XAuUChP/XAuUChv/XAuUCiP/XAuUCiv/XAuUCjP/XAuUCsf/XAuUCs//XAuUCv//XAuUCwP/XAuUCwf/XAuUCwv/XAuUCxf+aAuUCx/+aAuUC1P/XAuUC1f/XAuUC7//XAuUC8f/XAuUC8//XAuUC/f/XAuUC/v/XAuUDCf/XAuUDC//XAuUDDv/XAuUDEP/XAuUDFf/XAuUDGf/sAuYBz//XAuYB2P/XAuYB2//XAuYB3v/XAuYB4f/XAuYB6v/XAuYB7f/XAuYCav/XAuYCf//XAuYChf/XAuYCh//XAuYCif/XAuYCjf/XAuYCsv/XAuYCtP/XAuYCwP/XAuYCwv/XAuYCxv/XAuYCyP/XAuYC1f/XAuYC4P/XAuYC8P/XAuYC8v/XAuYC9P/XAuYC/v/XAuYDCv/XAuYDDP/XAuYDFv/XAuYDGv/XAucAD/+uAucAEf+uAucCCP+uAucCDP+uAucCgP/sAucCgv/sAucCt//sAucCuf/sAucDDf/XAucDD//XAugB6QApAukABf/sAukACv/sAukCB//sAukCC//sAukDDv/XAukDEP/XAu8AD/+uAu8AEf+uAu8Bnf/sAu8BpP/XAu8Bpv/sAu8BqP/XAu8Bqv/XAu8Brv/XAu8BsP/XAu8Bsf/sAu8Btf/XAu8BvP/DAu8Bvf/XAu8Bv//XAu8Bwf/XAu8BxP/sAu8Bx//sAu8Bzv/sAu8B1f/sAu8B8v/sAu8CCP+uAu8CDP+uAu8Ccv/XAu8Cc//sAu8Cev/sAu8CfP/XAu8CgP/sAu8Cgv/sAu8Cn//XAu8Cof/sAu8Cqf/sAu8Ctf/DAu8Ct//sAu8Cuf/sAu8Cu//XAu8Cvf/sAu8Cv//XAu8Cwf/XAu8Cyv/XAu8Czv/XAu8Cz//sAu8C1P/XAu8C2f/XAu8C2//XAu8C3f/XAu8C5f/XAu8C5//sAu8C9f/sAu8C9//XAu8C+f/XAu8C+//XAu8C/f/XAu8DBf/XAu8DB//XAu8DDf/XAu8DD//XAu8DEf/XAu8DEv/sAu8DF//sAu8DG//XAu8DHP/sAvAABf/sAvAACv/sAvAB0P/XAvAB3P/sAvAB3f/sAvAB3//XAvAB4f/sAvAB5P/sAvAB9v/sAvACB//sAvACC//sAvACoP/XAvACqv/sAvACtv/sAvACvP/XAvACvv/sAvACwP/sAvACwv/sAvACy//XAvAC1f/sAvAC5v/XAvAC+P/sAvAC+v/sAvAC/P/sAvAC/v/sAvADBv/XAvADCP/XAvADDv/sAvADEP/sAvADGP/sAvEAD/+uAvEAEf+uAvEBnf/sAvEBpP/XAvEBpv/sAvEBqP/XAvEBqv/XAvEBrv/XAvEBsP/XAvEBsf/sAvEBtf/XAvEBvP/DAvEBvf/XAvEBv//XAvEBwf/XAvEBxP/sAvEBx//sAvEBzv/sAvEB1f/sAvEB8v/sAvECCP+uAvECDP+uAvECcv/XAvECc//sAvECev/sAvECfP/XAvECgP/sAvECgv/sAvECn//XAvECof/sAvECqf/sAvECtf/DAvECt//sAvECuf/sAvECu//XAvECvf/sAvECv//XAvECwf/XAvECyv/XAvECzv/XAvECz//sAvEC1P/XAvEC2f/XAvEC2//XAvEC3f/XAvEC5f/XAvEC5//sAvEC9f/sAvEC9//XAvEC+f/XAvEC+//XAvEC/f/XAvEDBf/XAvEDB//XAvEDDf/XAvEDD//XAvEDEf/XAvEDEv/sAvEDF//sAvEDG//XAvEDHP/sAvIABf/sAvIACv/sAvIB0P/XAvIB3P/sAvIB3f/sAvIB3//XAvIB4f/sAvIB5P/sAvIB9v/sAvICB//sAvICC//sAvICoP/XAvICqv/sAvICtv/sAvICvP/XAvICvv/sAvICwP/sAvICwv/sAvICy//XAvIC1f/sAvIC5v/XAvIC+P/sAvIC+v/sAvIC/P/sAvIC/v/sAvIDBv/XAvIDCP/XAvIDDv/sAvIDEP/sAvIDGP/sAvMAD/+uAvMAEf+uAvMBnf/sAvMBpP/XAvMBpv/sAvMBqP/XAvMBqv/XAvMBrv/XAvMBsP/XAvMBsf/sAvMBtf/XAvMBvP/DAvMBvf/XAvMBv//XAvMBwf/XAvMBxP/sAvMBx//sAvMBzv/sAvMB1f/sAvMB8v/sAvMCCP+uAvMCDP+uAvMCcv/XAvMCc//sAvMCev/sAvMCfP/XAvMCgP/sAvMCgv/sAvMCn//XAvMCof/sAvMCqf/sAvMCtf/DAvMCt//sAvMCuf/sAvMCu//XAvMCvf/sAvMCv//XAvMCwf/XAvMCyv/XAvMCzv/XAvMCz//sAvMC1P/XAvMC2f/XAvMC2//XAvMC3f/XAvMC5f/XAvMC5//sAvMC9f/sAvMC9//XAvMC+f/XAvMC+//XAvMC/f/XAvMDBf/XAvMDB//XAvMDDf/XAvMDD//XAvMDEf/XAvMDEv/sAvMDF//sAvMDG//XAvMDHP/sAvQABf/sAvQACv/sAvQB0P/XAvQB3P/sAvQB3f/sAvQB3//XAvQB4f/sAvQB5P/sAvQB9v/sAvQCB//sAvQCC//sAvQCoP/XAvQCqv/sAvQCtv/sAvQCvP/XAvQCvv/sAvQCwP/sAvQCwv/sAvQCy//XAvQC1f/sAvQC5v/XAvQC+P/sAvQC+v/sAvQC/P/sAvQC/v/sAvQDBv/XAvQDCP/XAvQDDv/sAvQDEP/sAvQDGP/sAvUAD/+uAvUAEf+uAvUBnf/sAvUBpP/XAvUBpv/sAvUBqP/XAvUBqv/XAvUBrv/XAvUBsP/XAvUBsf/sAvUBtf/XAvUBvP/DAvUBvf/XAvUBv//XAvUBwf/XAvUBxP/sAvUBx//sAvUBzv/sAvUB1f/sAvUB8v/sAvUCCP+uAvUCDP+uAvUCcv/XAvUCc//sAvUCev/sAvUCfP/XAvUCgP/sAvUCgv/sAvUCn//XAvUCof/sAvUCqf/sAvUCtf/DAvUCt//sAvUCuf/sAvUCu//XAvUCvf/sAvUCv//XAvUCwf/XAvUCyv/XAvUCzv/XAvUCz//sAvUC1P/XAvUC2f/XAvUC2//XAvUC3f/XAvUC5f/XAvUC5//sAvUC9f/sAvUC9//XAvUC+f/XAvUC+//XAvUC/f/XAvUDBf/XAvUDB//XAvUDDf/XAvUDD//XAvUDEf/XAvUDEv/sAvUDF//sAvUDG//XAvUDHP/sAvYABf/sAvYACv/sAvYB0P/XAvYB3P/sAvYB3f/sAvYB3//XAvYB4f/sAvYB5P/sAvYB9v/sAvYCB//sAvYCC//sAvYCoP/XAvYCqv/sAvYCtv/sAvYCvP/XAvYCvv/sAvYCwP/sAvYCwv/sAvYCy//XAvYC1f/sAvYC5v/XAvYC+P/sAvYC+v/sAvYC/P/sAvYC/v/sAvYDBv/XAvYDCP/XAvYDDv/sAvYDEP/sAvYDGP/sAvcAD/+FAvcAEf+FAvcBn//sAvcBpP+aAvcBqv9xAvcBrv+aAvcBtf+aAvcBuP/sAvcBu//sAvcBvv/DAvcByf/sAvcBzv+uAvcBz//XAvcB1f+uAvcB2P/XAvcB2//XAvcB3v/XAvcB4f/XAvcB6v/XAvcB6wBmAvcB7f/XAvcB7v/sAvcB8v+uAvcB9ABmAvcCCP+FAvcCDP+FAvcCav/XAvcCbP/sAvcCcv9xAvcCc/+uAvcCfv/sAvcCf//XAvcChP/sAvcChf/XAvcChv/sAvcCh//XAvcCiP/sAvcCif/XAvcCiv/sAvcCjP/sAvcCjf/XAvcCmABmAvcCqABmAvcCsf/sAvcCsv/XAvcCs//sAvcCtP/XAvcCwP/XAvcCwv/XAvcCxf/XAvcCxv/DAvcCx//XAvcCyP/DAvcCzv+aAvcCz/+uAvcC1f/XAvcC2f9xAvcC2/9xAvcC3f9xAvcC4P/XAvcC7//sAvcC8P/XAvcC8f/sAvcC8v/XAvcC8//sAvcC9P/XAvcC/v/XAvcDCf9xAvcDCv/XAvcDC/9xAvcDDP/XAvcDEf+aAvcDEv+uAvcDFf/sAvcDFv/XAvcDGv/XAvcDG/+aAvcDHP+uAvgAD/+uAvgAEf+uAvgBzv/XAvgB1f/XAvgB8v/XAvgCCP+uAvgCDP+uAvgCc//XAvgCz//XAvgDEv/XAvgDHP/XAvkAD/+FAvkAEf+FAvkBn//sAvkBpP+aAvkBqv9xAvkBrv+aAvkBtf+aAvkBuP/sAvkBu//sAvkBvv/DAvkByf/sAvkBzv+uAvkBz//XAvkB1f+uAvkB2P/XAvkB2//XAvkB3v/XAvkB4f/XAvkB6v/XAvkB6wBmAvkB7f/XAvkB7v/sAvkB8v+uAvkB9ABmAvkCCP+FAvkCDP+FAvkCav/XAvkCbP/sAvkCcv9xAvkCc/+uAvkCfv/sAvkCf//XAvkChP/sAvkChf/XAvkChv/sAvkCh//XAvkCiP/sAvkCif/XAvkCiv/sAvkCjP/sAvkCjf/XAvkCmABmAvkCqABmAvkCsf/sAvkCsv/XAvkCs//sAvkCtP/XAvkCwP/XAvkCwv/XAvkCxf/XAvkCxv/DAvkCx//XAvkCyP/DAvkCzv+aAvkCz/+uAvkC1f/XAvkC2f9xAvkC2/9xAvkC3f9xAvkC4P/XAvkC7//sAvkC8P/XAvkC8f/sAvkC8v/XAvkC8//sAvkC9P/XAvkC/v/XAvkDCf9xAvkDCv/XAvkDC/9xAvkDDP/XAvkDEf+aAvkDEv+uAvkDFf/sAvkDFv/XAvkDGv/XAvkDG/+aAvkDHP+uAvoAD/+uAvoAEf+uAvoBzv/XAvoB1f/XAvoB8v/XAvoCCP+uAvoCDP+uAvoCc//XAvoCz//XAvoDEv/XAvoDHP/XAvsAD/+FAvsAEf+FAvsBn//sAvsBpP+aAvsBqv9xAvsBrv+aAvsBtf+aAvsBuP/sAvsBu//sAvsBvv/DAvsByf/sAvsBzv+uAvsBz//XAvsB1f+uAvsB2P/XAvsB2//XAvsB3v/XAvsB4f/XAvsB6v/XAvsB6wBmAvsB7f/XAvsB7v/sAvsB8v+uAvsB9ABmAvsCCP+FAvsCDP+FAvsCav/XAvsCbP/sAvsCcv9xAvsCc/+uAvsCfv/sAvsCf//XAvsChP/sAvsChf/XAvsChv/sAvsCh//XAvsCiP/sAvsCif/XAvsCiv/sAvsCjP/sAvsCjf/XAvsCmABmAvsCqABmAvsCsf/sAvsCsv/XAvsCs//sAvsCtP/XAvsCwP/XAvsCwv/XAvsCxf/XAvsCxv/DAvsCx//XAvsCyP/DAvsCzv+aAvsCz/+uAvsC1f/XAvsC2f9xAvsC2/9xAvsC3f9xAvsC4P/XAvsC7//sAvsC8P/XAvsC8f/sAvsC8v/XAvsC8//sAvsC9P/XAvsC/v/XAvsDCf9xAvsDCv/XAvsDC/9xAvsDDP/XAvsDEf+aAvsDEv+uAvsDFf/sAvsDFv/XAvsDGv/XAvsDG/+aAvsDHP+uAvwAD/+uAvwAEf+uAvwBzv/XAvwB1f/XAvwB8v/XAvwCCP+uAvwCDP+uAvwCc//XAvwCz//XAvwDEv/XAvwDHP/XAv8AD/+FAv8AEP+uAv8AEf+FAv8Bn//XAv8BpP+aAv8Bqv9xAv8Brv+aAv8Btf+aAv8BuP/XAv8Bu//XAv8BvAApAv8Bvv+uAv8BzP+aAv8Bzf+aAv8Bzv+FAv8Bz/9xAv8B0P/XAv8B0f/XAv8B0v+aAv8B0/+aAv8B1P+aAv8B1f+FAv8B1v+aAv8B1/+aAv8B2P9xAv8B2f+aAv8B2v+aAv8B2/9xAv8B3P+uAv8B3f+uAv8B3v9xAv8B3//XAv8B4P+aAv8B4f+aAv8B4v+aAv8B4/+aAv8B5P+uAv8B5f+aAv8B5v+aAv8B5//XAv8B6P+aAv8B6f/DAv8B6v9xAv8B7P+aAv8B7f9xAv8B7v+FAv8B8v+FAv8B8/+aAv8B9f+aAv8B9v+uAv8B9/+aAv8B+f+aAv8CAv+uAv8CA/+uAv8CBP+uAv8CCP+FAv8CDP+FAv8Cav9xAv8Ca/+aAv8CbP/XAv8Cbf/XAv8Ccf+aAv8Ccv9xAv8Cc/+FAv8Cdf+aAv8Cd/+aAv8Cef+aAv8Cff+aAv8Cfv/XAv8Cf/9xAv8Cgf/XAv8Cg//XAv8ChP/XAv8Chf9xAv8Chv/XAv8Ch/9xAv8CiP/XAv8Cif9xAv8Civ/XAv8Ci//XAv8CjP/XAv8Cjf9xAv8Clv+aAv8Cmv+aAv8Cnv+aAv8CoP/XAv8Cov/XAv8CpP+aAv8Cpv+aAv8Cqv+uAv8CrP+aAv8Crv+aAv8CsP+aAv8Csf/XAv8Csv9xAv8Cs//XAv8CtP9xAv8CtQApAv8Ctv+uAv8CuP+uAv8Cuv+uAv8CvP/XAv8Cvv+uAv8CwP+aAv8Cwv+aAv8CxP+aAv8Cxf+aAv8Cxv9xAv8Cx/+aAv8CyP9xAv8Cy//XAv8Czf+aAv8Czv+aAv8Cz/+FAv8C0f+aAv8C0/+aAv8C1f+aAv8C1/+aAv8C2f9xAv8C2/9xAv8C3f9xAv8C4P9xAv8C5v/XAv8C6P/XAv8C6v/DAv8C7P+aAv8C7v+aAv8C7//XAv8C8P9xAv8C8f/XAv8C8v9xAv8C8//XAv8C9P9xAv8C9v/XAv8C+P+uAv8C+v+uAv8C/P+uAv8C/v+aAv8DAP+aAv8DAv+aAv8DBv/XAv8DCP/XAv8DCf9xAv8DCv9xAv8DC/9xAv8DDP9xAv8DDv+aAv8DEP+aAv8DEf+aAv8DEv+FAv8DFP+aAv8DFf/XAv8DFv9xAv8DGP+uAv8DGv9xAv8DG/+aAv8DHP+FAwAAD/+aAwAAEP/XAwAAEf+aAwABzv/DAwABz//sAwAB1f/DAwAB2P/sAwAB2//sAwAB3v/sAwAB6v/sAwAB7f/sAwAB8v/DAwACAv/XAwACA//XAwACBP/XAwACCP+aAwACDP+aAwACav/sAwACc//DAwACf//sAwAChf/sAwACh//sAwACif/sAwACjf/sAwACsv/sAwACtP/sAwACz//DAwAC4P/sAwAC8P/sAwAC8v/sAwAC9P/sAwADCv/sAwADDP/sAwADEv/DAwADFv/sAwADGv/sAwADHP/DAwMAD/+aAwMAEP/XAwMAEf+aAwMBnQApAwMBn//XAwMBpP+uAwMBpgApAwMBqv+FAwMBrv+uAwMBtf+uAwMBuP/XAwMBu//XAwMBvAApAwMBvv/DAwMBxAApAwMBzP/DAwMBzf/DAwMBzv+aAwMBz/+uAwMB0P/XAwMB0f/XAwMB0v/DAwMB0//DAwMB1P/DAwMB1f+aAwMB1v/DAwMB1//DAwMB2P+uAwMB2f/DAwMB2v/DAwMB2/+uAwMB3v+uAwMB3//XAwMB4P/DAwMB4f+aAwMB4v/DAwMB4//DAwMB5f/DAwMB5v/DAwMB5//XAwMB6P/DAwMB6v+uAwMB6wApAwMB7P/DAwMB7f+uAwMB7v/DAwMB8v+aAwMB8//DAwMB9AApAwMB9f/DAwMB9//DAwMB+f/DAwMCAv/XAwMCA//XAwMCBP/XAwMCCP+aAwMCDP+aAwMCav+uAwMCa//DAwMCbP/XAwMCcf/DAwMCcv+FAwMCc/+aAwMCdf/DAwMCd//XAwMCef/DAwMCff/DAwMCfv/XAwMCf/+uAwMChP/XAwMChf+uAwMChv/XAwMCh/+uAwMCiP/XAwMCif+uAwMCiv/XAwMCjP/XAwMCjf+uAwMClv/DAwMCmAApAwMCmv/DAwMCnv/DAwMCoP/XAwMCov/XAwMCpP/DAwMCpv/DAwMCqAApAwMCqQApAwMCrP/DAwMCrv/DAwMCsP/DAwMCsf/XAwMCsv+uAwMCs//XAwMCtP+uAwMCtQApAwMCvP/XAwMCvQApAwMCwP+aAwMCwv+aAwMCxP/DAwMCxf/XAwMCxv/DAwMCx//XAwMCyP/DAwMCy//XAwMCzf/DAwMCzv+uAwMCz/+aAwMC0f/DAwMC0//DAwMC1f+aAwMC1//DAwMC2f+FAwMC2/+FAwMC3f+FAwMC4P+uAwMC5v/XAwMC6P/XAwMC7P/DAwMC7v/DAwMC7//XAwMC8P+uAwMC8f/XAwMC8v+uAwMC8//XAwMC9P+uAwMC9v/XAwMC/v+aAwMDAP/DAwMDAv/DAwMDBv/XAwMDCP/XAwMDCf+aAwMDCv+uAwMDC/+aAwMDDP+uAwMDDv/XAwMDEP/XAwMDEf+uAwMDEv+aAwMDFP/DAwMDFf/XAwMDFv+uAwMDFwApAwMDGv+uAwMDG/+uAwMDHP+aAwQAD//DAwQAEf/DAwQBzv/DAwQBz//XAwQB1f/DAwQB2P/XAwQB2//XAwQB3v/XAwQB6v/XAwQB7f/XAwQB8v/DAwQCCP/DAwQCDP/DAwQCav/XAwQCc//DAwQCf//XAwQChf/XAwQCh//XAwQCif/XAwQCjf/XAwQCsv/XAwQCtP/XAwQCz//DAwQC4P/XAwQC8P/XAwQC8v/XAwQC9P/XAwQDCv/XAwQDDP/XAwQDEv/DAwQDFv/XAwQDGv/XAwQDHP/DAwUBn//XAwUBowDhAwUBuP/XAwUBu//XAwUBvv/DAwUB3P/XAwUB4f+uAwUB5P/XAwUCbP/XAwUCewA9AwUCff/sAwUCfv/XAwUChP/XAwUChv/XAwUCiP/XAwUCiv/XAwUCjP/XAwUCqv/XAwUCsf/XAwUCs//XAwUCtv/XAwUCvv/XAwUCwP+uAwUCwv+uAwUCxf/DAwUCxv/XAwUCx//DAwUCyP/XAwUC1f+uAwUC7//XAwUC8f/XAwUC8//XAwUC/v+uAwUDDv/XAwUDEP/XAwUDFf/XAwUDGP/XAwYBz//sAwYB2P/sAwYB2//sAwYB3v/sAwYB4f/sAwYB6v/sAwYB7f/sAwYCav/sAwYCf//sAwYChf/sAwYCh//sAwYCif/sAwYCjf/sAwYCsv/sAwYCtP/sAwYCwP/sAwYCwv/sAwYC1f/sAwYC4P/sAwYC8P/sAwYC8v/sAwYC9P/sAwYC/v/sAwYDCv/sAwYDDP/sAwYDDv/XAwYDEP/XAwYDFv/sAwYDGv/sAwcBn//XAwcBuP/XAwcBu//XAwcBvv/XAwcBwf/XAwcB4f/XAwcCbP/XAwcCfP/XAwcCfv/XAwcChP/XAwcChv/XAwcCiP/XAwcCiv/XAwcCjP/XAwcCsf/XAwcCs//XAwcCv//XAwcCwP/XAwcCwf/XAwcCwv/XAwcCxf+aAwcCx/+aAwcC1P/XAwcC1f/XAwcC7//XAwcC8f/XAwcC8//XAwcC/f/XAwcC/v/XAwcDCf/XAwcDC//XAwcDDv/XAwcDEP/XAwcDFf/XAwcDGf/sAwgBz//sAwgB2P/sAwgB2//sAwgB3v/sAwgB4f/sAwgB6v/sAwgB7f/sAwgCav/sAwgCf//sAwgChf/sAwgCh//sAwgCif/sAwgCjf/sAwgCsv/sAwgCtP/sAwgCwP/sAwgCwv/sAwgC1f/sAwgC4P/sAwgC8P/sAwgC8v/sAwgC9P/sAwgC/v/sAwgDCv/sAwgDDP/sAwgDDv/XAwgDEP/XAwgDFv/sAwgDGv/sAwsABf+aAwsACv+aAwsBnf+uAwsBpv+uAwsBqP/DAwsBqv/DAwsBsP/DAwsBvP9xAwsBvf/DAwsBv//DAwsBwf/DAwsBxP+uAwsB0P/XAwsB3P/DAwsB3//XAwsB4f/XAwsB5P/DAwsCB/+aAwsCC/+aAwsCcv/DAwsCdv/XAwsCfP/DAwsCgP/DAwsCgv/DAwsCn//DAwsCoP/XAwsCqf+uAwsCqv/DAwsCtf9xAwsCtv/DAwsCt//DAwsCuf/DAwsCu//DAwsCvP/XAwsCvf+uAwsCvv/DAwsCv//DAwsCwP/XAwsCwf/DAwsCwv/XAwsCyv/DAwsCy//XAwsC1P/DAwsC1f/XAwsC2f/DAwsC2//DAwsC3f/DAwsC5f/DAwsC5v/XAwsC9//DAwsC+f/DAwsC+//DAwsC/f/DAwsC/v/XAwsDBf/DAwsDBv/XAwsDB//DAwsDCP/XAwsDDf/XAwsDDv/XAwsDD//XAwsDEP/XAwsDF/+uAwsDGP/DAwwABf+aAwwACv+aAwwB0P/XAwwB3P/DAwwB3f/XAwwB3//XAwwB4f/XAwwB5P/DAwwB9v/XAwwCB/+aAwwCC/+aAwwCoP/XAwwCqv/DAwwCtv/DAwwCvP/XAwwCvv/DAwwCwP/XAwwCwv/XAwwCy//XAwwC1f/XAwwC5v/XAwwC+P/XAwwC+v/XAwwC/P/XAwwC/v/XAwwDBv/XAwwDCP/XAwwDDv+aAwwDEP+aAwwDGP/DAw0ABf+aAw0ACv+aAw0Bnf+uAw0Bpv+uAw0BqP/DAw0Bqv/DAw0BsP/DAw0BvP9xAw0Bvf/DAw0Bv//DAw0Bwf/DAw0BxP+uAw0B0P/XAw0B3P/DAw0B3//XAw0B4f/XAw0B5P/DAw0CB/+aAw0CC/+aAw0Ccv/DAw0Cdv/XAw0CfP/DAw0CgP/DAw0Cgv/DAw0Cn//DAw0CoP/XAw0Cqf+uAw0Cqv/DAw0Ctf9xAw0Ctv/DAw0Ct//DAw0Cuf/DAw0Cu//DAw0CvP/XAw0Cvf+uAw0Cvv/DAw0Cv//DAw0CwP/XAw0Cwf/DAw0Cwv/XAw0Cyv/DAw0Cy//XAw0C1P/DAw0C1f/XAw0C2f/DAw0C2//DAw0C3f/DAw0C5f/DAw0C5v/XAw0C9//DAw0C+f/DAw0C+//DAw0C/f/DAw0C/v/XAw0DBf/DAw0DBv/XAw0DB//DAw0DCP/XAw0DDf/XAw0DDv/XAw0DD//XAw0DEP/XAw0DF/+uAw0DGP/DAw4ABf+aAw4ACv+aAw4B0P/XAw4B3P/DAw4B3f/XAw4B3//XAw4B4f/XAw4B5P/DAw4B9v/XAw4CB/+aAw4CC/+aAw4CoP/XAw4Cqv/DAw4Ctv/DAw4CvP/XAw4Cvv/DAw4CwP/XAw4Cwv/XAw4Cy//XAw4C1f/XAw4C5v/XAw4C+P/XAw4C+v/XAw4C/P/XAw4C/v/XAw4DBv/XAw4DCP/XAw4DDv+aAw4DEP+aAw4DGP/DAw8BowDhAw8C6gApAw8DDv/XAw8DEP/XAxAABf/sAxAACv/sAxACB//sAxACC//sAxEABf+aAxEACv+aAxEBnf+uAxEBpv+uAxEBqP/DAxEBqv/DAxEBsP/DAxEBvP9xAxEBvf/DAxEBv//DAxEBwf/DAxEBxP+uAxEB0P/XAxEB3P/DAxEB3//XAxEB4f/XAxEB5P/DAxECB/+aAxECC/+aAxECcv/DAxECdv/XAxECfP/DAxECgP/DAxECgv/DAxECn//DAxECoP/XAxECqf+uAxECqv/DAxECtf9xAxECtv/DAxECt//DAxECuf/DAxECu//DAxECvP/XAxECvf+uAxECvv/DAxECv//DAxECwP/XAxECwf/DAxECwv/XAxECyv/DAxECy//XAxEC1P/DAxEC1f/XAxEC2f/DAxEC2//DAxEC3f/DAxEC5f/DAxEC5v/XAxEC9//DAxEC+f/DAxEC+//DAxEC/f/DAxEC/v/XAxEDBf/DAxEDBv/XAxEDB//DAxEDCP/XAxEDDf/XAxEDDv/XAxEDD//XAxEDEP/XAxEDF/+uAxEDGP/DAxIABf+aAxIACv+aAxIB0P/XAxIB3P/DAxIB3f/XAxIB3//XAxIB4f/XAxIB5P/DAxIB9v/XAxICB/+aAxICC/+aAxICoP/XAxICqv/DAxICtv/DAxICvP/XAxICvv/DAxICwP/XAxICwv/XAxICy//XAxIC1f/XAxIC5v/XAxIC+P/XAxIC+v/XAxIC/P/XAxIC/v/XAxIDBv/XAxIDCP/XAxIDDv+aAxIDEP+aAxIDGP/DAxMABf+aAxMACv+aAxMBnf+uAxMBpv+uAxMBqP/DAxMBqv/DAxMBsP/DAxMBvP9xAxMBvf/DAxMBv//DAxMBwf/DAxMBxP+uAxMB0P/XAxMB3P/DAxMB3//XAxMB4f/XAxMB5P/DAxMCB/+aAxMCC/+aAxMCcv/DAxMCdv/XAxMCfP/DAxMCgP/DAxMCgv/DAxMCn//DAxMCoP/XAxMCqf+uAxMCqv/DAxMCtf9xAxMCtv/DAxMCt//DAxMCuf/DAxMCu//DAxMCvP/XAxMCvf+uAxMCvv/DAxMCv//DAxMCwP/XAxMCwf/DAxMCwv/XAxMCyv/DAxMCy//XAxMC1P/DAxMC1f/XAxMC2f/DAxMC2//DAxMC3f/DAxMC5f/DAxMC5v/XAxMC9//DAxMC+f/DAxMC+//DAxMC/f/DAxMC/v/XAxMDBf/DAxMDBv/XAxMDB//DAxMDCP/XAxMDDf/XAxMDDv/XAxMDD//XAxMDEP/XAxMDF/+uAxMDGP/DAxQABf+aAxQACv+aAxQB0P/XAxQB3P/DAxQB3f/XAxQB3//XAxQB4f/XAxQB5P/DAxQB9v/XAxQCB/+aAxQCC/+aAxQCoP/XAxQCqv/DAxQCtv/DAxQCvP/XAxQCvv/DAxQCwP/XAxQCwv/XAxQCy//XAxQC1f/XAxQC5v/XAxQC+P/XAxQC+v/XAxQC/P/XAxQC/v/XAxQDBv/XAxQDCP/XAxQDDv+aAxQDEP+aAxQDGP/DAxUAD/+uAxUAEf+uAxUBqv/sAxUBsP/XAxUBvP/XAxUBv//XAxUCCP+uAxUCDP+uAxUCcv/sAxUCgP/sAxUCgv/sAxUCn//XAxUCtf/XAxUCt//sAxUCuf/sAxUCu//XAxUCyv/XAxUC2f/sAxUC2//sAxUC3f/sAxUC5f/XAxUDBf/XAxUDB//XAxYABf/XAxYACv/XAxYB0P/sAxYB3f/sAxYB3//sAxYB9v/sAxYCB//XAxYCC//XAxYCoP/sAxYCvP/sAxYCy//sAxYC5v/sAxYC+P/sAxYC+v/sAxYC/P/sAxYDBv/sAxYDCP/sAxYDDv/XAxYDEP/XAxcABf+uAxcACv+uAxcBnf/DAxcBpv/DAxcBqv/XAxcBsP/XAxcBvP/DAxcBv//XAxcBwf/XAxcBxP/DAxcB3P/XAxcB5P/XAxcCB/+uAxcCC/+uAxcCcv/XAxcCfP/XAxcCgP/XAxcCgv/XAxcCn//XAxcCqf/DAxcCqv/XAxcCtf/DAxcCtv/XAxcCt//XAxcCuf/XAxcCu//XAxcCvf/DAxcCvv/XAxcCv//XAxcCwf/XAxcCyv/XAxcC1P/XAxcC2f/XAxcC2//XAxcC3f/XAxcC5f/XAxcC/f/XAxcDBf/XAxcDB//XAxcDDf/XAxcDD//XAxcDF//DAxcDGP/XAxgABf+aAxgACv+aAxgB0P/XAxgB3P/DAxgB3f/XAxgB3//XAxgB4f/XAxgB5P/DAxgB9v/XAxgCB/+aAxgCC/+aAxgCoP/XAxgCqv/DAxgCtv/DAxgCvP/XAxgCvv/DAxgCwP/XAxgCwv/XAxgCy//XAxgC1f/XAxgC5v/XAxgC+P/XAxgC+v/XAxgC/P/XAxgC/v/XAxgDBv/XAxgDCP/XAxgDDv+aAxgDEP+aAxgDGP/DAxkB4f/XAxkCwP/XAxkCwv/XAxkC1f/XAxkC/v/XAxsBowDhAxsC6gApAxsDDv/XAxsDEP/XAxwABf/sAxwACv/sAxwCB//sAxwCC//sAx0ABf9xAx0ACv9xAx0AJv/XAx0AKv/XAx0ALQEKAx0AMv/XAx0ANP/XAx0AN/9xAx0AOf+uAx0AOv+uAx0APP+FAx0Aif/XAx0AlP/XAx0Alf/XAx0Alv/XAx0Al//XAx0AmP/XAx0Amv/XAx0An/+FAx0AyP/XAx0Ayv/XAx0AzP/XAx0Azv/XAx0A3v/XAx0A4P/XAx0A4v/XAx0A5P/XAx0BDv/XAx0BEP/XAx0BEv/XAx0BFP/XAx0BJP9xAx0BJv9xAx0BNv+uAx0BOP+FAx0BOv+FAx0BR//XAx0B+v+uAx0B/P+uAx0B/v+uAx0CAP+FAx0CB/9xAx0CC/9xAx0CX//XAx0DSf/XAx0DS//XAx0DTf/XAx0DT//XAx0DUf/XAx0DU//XAx0DVf/XAx0DV//XAx0DWf/XAx0DW//XAx0DXf/XAx0DX//XAx0Db/+FAx0Dcf+FAx0Dc/+FAx0Dj/9xAx4ABf/sAx4ACv/sAx4CB//sAx4CC//sAx8ABf9xAx8ACv9xAx8AJv/XAx8AKv/XAx8ALQEKAx8AMv/XAx8ANP/XAx8AN/9xAx8AOf+uAx8AOv+uAx8APP+FAx8Aif/XAx8AlP/XAx8Alf/XAx8Alv/XAx8Al//XAx8AmP/XAx8Amv/XAx8An/+FAx8AyP/XAx8Ayv/XAx8AzP/XAx8Azv/XAx8A3v/XAx8A4P/XAx8A4v/XAx8A5P/XAx8BDv/XAx8BEP/XAx8BEv/XAx8BFP/XAx8BJP9xAx8BJv9xAx8BNv+uAx8BOP+FAx8BOv+FAx8BR//XAx8B+v+uAx8B/P+uAx8B/v+uAx8CAP+FAx8CB/9xAx8CC/9xAx8CX//XAx8DSf/XAx8DS//XAx8DTf/XAx8DT//XAx8DUf/XAx8DU//XAx8DVf/XAx8DV//XAx8DWf/XAx8DW//XAx8DXf/XAx8DX//XAx8Db/+FAx8Dcf+FAx8Dc/+FAx8Dj/9xAyAABf/sAyAACv/sAyACB//sAyACC//sAyEABf9xAyEACv9xAyEAJv/XAyEAKv/XAyEALQEKAyEAMv/XAyEANP/XAyEAN/9xAyEAOf+uAyEAOv+uAyEAPP+FAyEAif/XAyEAlP/XAyEAlf/XAyEAlv/XAyEAl//XAyEAmP/XAyEAmv/XAyEAn/+FAyEAyP/XAyEAyv/XAyEAzP/XAyEAzv/XAyEA3v/XAyEA4P/XAyEA4v/XAyEA5P/XAyEBDv/XAyEBEP/XAyEBEv/XAyEBFP/XAyEBJP9xAyEBJv9xAyEBNv+uAyEBOP+FAyEBOv+FAyEBR//XAyEB+v+uAyEB/P+uAyEB/v+uAyECAP+FAyECB/9xAyECC/9xAyECX//XAyEDSf/XAyEDS//XAyEDTf/XAyEDT//XAyEDUf/XAyEDU//XAyEDVf/XAyEDV//XAyEDWf/XAyEDW//XAyEDXf/XAyEDX//XAyEDb/+FAyEDcf+FAyEDc/+FAyEDj/9xAyIABf/sAyIACv/sAyICB//sAyICC//sAyMABf9xAyMACv9xAyMAJv/XAyMAKv/XAyMALQEKAyMAMv/XAyMANP/XAyMAN/9xAyMAOf+uAyMAOv+uAyMAPP+FAyMAif/XAyMAlP/XAyMAlf/XAyMAlv/XAyMAl//XAyMAmP/XAyMAmv/XAyMAn/+FAyMAyP/XAyMAyv/XAyMAzP/XAyMAzv/XAyMA3v/XAyMA4P/XAyMA4v/XAyMA5P/XAyMBDv/XAyMBEP/XAyMBEv/XAyMBFP/XAyMBJP9xAyMBJv9xAyMBNv+uAyMBOP+FAyMBOv+FAyMBR//XAyMB+v+uAyMB/P+uAyMB/v+uAyMCAP+FAyMCB/9xAyMCC/9xAyMCX//XAyMDSf/XAyMDS//XAyMDTf/XAyMDT//XAyMDUf/XAyMDU//XAyMDVf/XAyMDV//XAyMDWf/XAyMDW//XAyMDXf/XAyMDX//XAyMDb/+FAyMDcf+FAyMDc/+FAyMDj/9xAyQABf/sAyQACv/sAyQCB//sAyQCC//sAyUABf9xAyUACv9xAyUAJv/XAyUAKv/XAyUALQEKAyUAMv/XAyUANP/XAyUAN/9xAyUAOf+uAyUAOv+uAyUAPP+FAyUAif/XAyUAlP/XAyUAlf/XAyUAlv/XAyUAl//XAyUAmP/XAyUAmv/XAyUAn/+FAyUAyP/XAyUAyv/XAyUAzP/XAyUAzv/XAyUA3v/XAyUA4P/XAyUA4v/XAyUA5P/XAyUBDv/XAyUBEP/XAyUBEv/XAyUBFP/XAyUBJP9xAyUBJv9xAyUBNv+uAyUBOP+FAyUBOv+FAyUBR//XAyUB+v+uAyUB/P+uAyUB/v+uAyUCAP+FAyUCB/9xAyUCC/9xAyUCX//XAyUDSf/XAyUDS//XAyUDTf/XAyUDT//XAyUDUf/XAyUDU//XAyUDVf/XAyUDV//XAyUDWf/XAyUDW//XAyUDXf/XAyUDX//XAyUDb/+FAyUDcf+FAyUDc/+FAyUDj/9xAyYABf/sAyYACv/sAyYCB//sAyYCC//sAycABf9xAycACv9xAycAJv/XAycAKv/XAycALQEKAycAMv/XAycANP/XAycAN/9xAycAOf+uAycAOv+uAycAPP+FAycAif/XAycAlP/XAycAlf/XAycAlv/XAycAl//XAycAmP/XAycAmv/XAycAn/+FAycAyP/XAycAyv/XAycAzP/XAycAzv/XAycA3v/XAycA4P/XAycA4v/XAycA5P/XAycBDv/XAycBEP/XAycBEv/XAycBFP/XAycBJP9xAycBJv9xAycBNv+uAycBOP+FAycBOv+FAycBR//XAycB+v+uAycB/P+uAycB/v+uAycCAP+FAycCB/9xAycCC/9xAycCX//XAycDSf/XAycDS//XAycDTf/XAycDT//XAycDUf/XAycDU//XAycDVf/XAycDV//XAycDWf/XAycDW//XAycDXf/XAycDX//XAycDb/+FAycDcf+FAycDc/+FAycDj/9xAygABf/sAygACv/sAygCB//sAygCC//sAykABf9xAykACv9xAykAJv/XAykAKv/XAykALQEKAykAMv/XAykANP/XAykAN/9xAykAOf+uAykAOv+uAykAPP+FAykAif/XAykAlP/XAykAlf/XAykAlv/XAykAl//XAykAmP/XAykAmv/XAykAn/+FAykAyP/XAykAyv/XAykAzP/XAykAzv/XAykA3v/XAykA4P/XAykA4v/XAykA5P/XAykBDv/XAykBEP/XAykBEv/XAykBFP/XAykBJP9xAykBJv9xAykBNv+uAykBOP+FAykBOv+FAykBR//XAykB+v+uAykB/P+uAykB/v+uAykCAP+FAykCB/9xAykCC/9xAykCX//XAykDSf/XAykDS//XAykDTf/XAykDT//XAykDUf/XAykDU//XAykDVf/XAykDV//XAykDWf/XAykDW//XAykDXf/XAykDX//XAykDb/+FAykDcf+FAykDc/+FAykDj/9xAyoABf/sAyoACv/sAyoCB//sAyoCC//sAysABf9xAysACv9xAysAJv/XAysAKv/XAysALQEKAysAMv/XAysANP/XAysAN/9xAysAOf+uAysAOv+uAysAPP+FAysAif/XAysAlP/XAysAlf/XAysAlv/XAysAl//XAysAmP/XAysAmv/XAysAn/+FAysAyP/XAysAyv/XAysAzP/XAysAzv/XAysA3v/XAysA4P/XAysA4v/XAysA5P/XAysBDv/XAysBEP/XAysBEv/XAysBFP/XAysBJP9xAysBJv9xAysBNv+uAysBOP+FAysBOv+FAysBR//XAysB+v+uAysB/P+uAysB/v+uAysCAP+FAysCB/9xAysCC/9xAysCX//XAysDSf/XAysDS//XAysDTf/XAysDT//XAysDUf/XAysDU//XAysDVf/XAysDV//XAysDWf/XAysDW//XAysDXf/XAysDX//XAysDb/+FAysDcf+FAysDc/+FAysDj/9xAywABf/sAywACv/sAywCB//sAywCC//sAy0ABf9xAy0ACv9xAy0AJv/XAy0AKv/XAy0ALQEKAy0AMv/XAy0ANP/XAy0AN/9xAy0AOf+uAy0AOv+uAy0APP+FAy0Aif/XAy0AlP/XAy0Alf/XAy0Alv/XAy0Al//XAy0AmP/XAy0Amv/XAy0An/+FAy0AyP/XAy0Ayv/XAy0AzP/XAy0Azv/XAy0A3v/XAy0A4P/XAy0A4v/XAy0A5P/XAy0BDv/XAy0BEP/XAy0BEv/XAy0BFP/XAy0BJP9xAy0BJv9xAy0BNv+uAy0BOP+FAy0BOv+FAy0BR//XAy0B+v+uAy0B/P+uAy0B/v+uAy0CAP+FAy0CB/9xAy0CC/9xAy0CX//XAy0DSf/XAy0DS//XAy0DTf/XAy0DT//XAy0DUf/XAy0DU//XAy0DVf/XAy0DV//XAy0DWf/XAy0DW//XAy0DXf/XAy0DX//XAy0Db/+FAy0Dcf+FAy0Dc/+FAy0Dj/9xAy4ABf/sAy4ACv/sAy4CB//sAy4CC//sAy8ABf9xAy8ACv9xAy8AJv/XAy8AKv/XAy8ALQEKAy8AMv/XAy8ANP/XAy8AN/9xAy8AOf+uAy8AOv+uAy8APP+FAy8Aif/XAy8AlP/XAy8Alf/XAy8Alv/XAy8Al//XAy8AmP/XAy8Amv/XAy8An/+FAy8AyP/XAy8Ayv/XAy8AzP/XAy8Azv/XAy8A3v/XAy8A4P/XAy8A4v/XAy8A5P/XAy8BDv/XAy8BEP/XAy8BEv/XAy8BFP/XAy8BJP9xAy8BJv9xAy8BNv+uAy8BOP+FAy8BOv+FAy8BR//XAy8B+v+uAy8B/P+uAy8B/v+uAy8CAP+FAy8CB/9xAy8CC/9xAy8CX//XAy8DSf/XAy8DS//XAy8DTf/XAy8DT//XAy8DUf/XAy8DU//XAy8DVf/XAy8DV//XAy8DWf/XAy8DW//XAy8DXf/XAy8DX//XAy8Db/+FAy8Dcf+FAy8Dc/+FAy8Dj/9xAzAABf/sAzAACv/sAzACB//sAzACC//sAzEABf9xAzEACv9xAzEAJv/XAzEAKv/XAzEALQEKAzEAMv/XAzEANP/XAzEAN/9xAzEAOf+uAzEAOv+uAzEAPP+FAzEAif/XAzEAlP/XAzEAlf/XAzEAlv/XAzEAl//XAzEAmP/XAzEAmv/XAzEAn/+FAzEAyP/XAzEAyv/XAzEAzP/XAzEAzv/XAzEA3v/XAzEA4P/XAzEA4v/XAzEA5P/XAzEBDv/XAzEBEP/XAzEBEv/XAzEBFP/XAzEBJP9xAzEBJv9xAzEBNv+uAzEBOP+FAzEBOv+FAzEBR//XAzEB+v+uAzEB/P+uAzEB/v+uAzECAP+FAzECB/9xAzECC/9xAzECX//XAzEDSf/XAzEDS//XAzEDTf/XAzEDT//XAzEDUf/XAzEDU//XAzEDVf/XAzEDV//XAzEDWf/XAzEDW//XAzEDXf/XAzEDX//XAzEDb/+FAzEDcf+FAzEDc/+FAzEDj/9xAzIABf/sAzIACv/sAzICB//sAzICC//sAzMABf9xAzMACv9xAzMAJv/XAzMAKv/XAzMALQEKAzMAMv/XAzMANP/XAzMAN/9xAzMAOf+uAzMAOv+uAzMAPP+FAzMAif/XAzMAlP/XAzMAlf/XAzMAlv/XAzMAl//XAzMAmP/XAzMAmv/XAzMAn/+FAzMAyP/XAzMAyv/XAzMAzP/XAzMAzv/XAzMA3v/XAzMA4P/XAzMA4v/XAzMA5P/XAzMBDv/XAzMBEP/XAzMBEv/XAzMBFP/XAzMBJP9xAzMBJv9xAzMBNv+uAzMBOP+FAzMBOv+FAzMBR//XAzMB+v+uAzMB/P+uAzMB/v+uAzMCAP+FAzMCB/9xAzMCC/9xAzMCX//XAzMDSf/XAzMDS//XAzMDTf/XAzMDT//XAzMDUf/XAzMDU//XAzMDVf/XAzMDV//XAzMDWf/XAzMDW//XAzMDXf/XAzMDX//XAzMDb/+FAzMDcf+FAzMDc/+FAzMDj/9xAzQABf/sAzQACv/sAzQCB//sAzQCC//sAzUALQB7AzYABf/sAzYACv/sAzYAWf/XAzYAWv/XAzYAW//XAzYAXP/XAzYAXf/sAzYAv//XAzYBN//XAzYBPP/sAzYBPv/sAzYBQP/sAzYB+//XAzYB/f/XAzYCB//sAzYCC//sAzYDcP/XAzcALQB7AzgABf/sAzgACv/sAzgAWf/XAzgAWv/XAzgAW//XAzgAXP/XAzgAXf/sAzgAv//XAzgBN//XAzgBPP/sAzgBPv/sAzgBQP/sAzgB+//XAzgB/f/XAzgCB//sAzgCC//sAzgDcP/XAzkALQB7AzoABf/sAzoACv/sAzoAWf/XAzoAWv/XAzoAW//XAzoAXP/XAzoAXf/sAzoAv//XAzoBN//XAzoBPP/sAzoBPv/sAzoBQP/sAzoB+//XAzoB/f/XAzoCB//sAzoCC//sAzoDcP/XAzsALQB7AzwABf/sAzwACv/sAzwAWf/XAzwAWv/XAzwAW//XAzwAXP/XAzwAXf/sAzwAv//XAzwBN//XAzwBPP/sAzwBPv/sAzwBQP/sAzwB+//XAzwB/f/XAzwCB//sAzwCC//sAzwDcP/XAz0ALQB7Az4ABf/sAz4ACv/sAz4AWf/XAz4AWv/XAz4AW//XAz4AXP/XAz4AXf/sAz4Av//XAz4BN//XAz4BPP/sAz4BPv/sAz4BQP/sAz4B+//XAz4B/f/XAz4CB//sAz4CC//sAz4DcP/XAz8ALQB7A0AABf/sA0AACv/sA0AAWf/XA0AAWv/XA0AAW//XA0AAXP/XA0AAXf/sA0AAv//XA0ABN//XA0ABPP/sA0ABPv/sA0ABQP/sA0AB+//XA0AB/f/XA0ACB//sA0ACC//sA0ADcP/XA0EALQB7A0IABf/sA0IACv/sA0IAWf/XA0IAWv/XA0IAW//XA0IAXP/XA0IAXf/sA0IAv//XA0IBN//XA0IBPP/sA0IBPv/sA0IBQP/sA0IB+//XA0IB/f/XA0ICB//sA0ICC//sA0IDcP/XA0MALQB7A0QABf/sA0QACv/sA0QAWf/XA0QAWv/XA0QAW//XA0QAXP/XA0QAXf/sA0QAv//XA0QBN//XA0QBPP/sA0QBPv/sA0QBQP/sA0QB+//XA0QB/f/XA0QCB//sA0QCC//sA0QDcP/XA0kAD/+uA0kAEf+uA0kAJP/XA0kAN//DA0kAOf/sA0kAOv/sA0kAO//XA0kAPP/sA0kAPf/sA0kAgv/XA0kAg//XA0kAhP/XA0kAhf/XA0kAhv/XA0kAh//XA0kAn//sA0kAwv/XA0kAxP/XA0kAxv/XA0kBJP/DA0kBJv/DA0kBNv/sA0kBOP/sA0kBOv/sA0kBO//sA0kBPf/sA0kBP//sA0kBQ//XA0kBoP/sA0kB+v/sA0kB/P/sA0kB/v/sA0kCAP/sA0kCCP+uA0kCDP+uA0kCWP/XA0kDHf/XA0kDH//XA0kDIf/XA0kDI//XA0kDJf/XA0kDJ//XA0kDKf/XA0kDK//XA0kDLf/XA0kDL//XA0kDMf/XA0kDM//XA0kDb//sA0kDcf/sA0kDc//sA0kDj//DA0oABf/sA0oACv/sA0oAWf/XA0oAWv/XA0oAW//XA0oAXP/XA0oAXf/sA0oAv//XA0oBN//XA0oBPP/sA0oBPv/sA0oBQP/sA0oB+//XA0oB/f/XA0oCB//sA0oCC//sA0oDcP/XA0sAD/+uA0sAEf+uA0sAJP/XA0sAN//DA0sAOf/sA0sAOv/sA0sAO//XA0sAPP/sA0sAPf/sA0sAgv/XA0sAg//XA0sAhP/XA0sAhf/XA0sAhv/XA0sAh//XA0sAn//sA0sAwv/XA0sAxP/XA0sAxv/XA0sBJP/DA0sBJv/DA0sBNv/sA0sBOP/sA0sBOv/sA0sBO//sA0sBPf/sA0sBP//sA0sBQ//XA0sBoP/sA0sB+v/sA0sB/P/sA0sB/v/sA0sCAP/sA0sCCP+uA0sCDP+uA0sCWP/XA0sDHf/XA0sDH//XA0sDIf/XA0sDI//XA0sDJf/XA0sDJ//XA0sDKf/XA0sDK//XA0sDLf/XA0sDL//XA0sDMf/XA0sDM//XA0sDb//sA0sDcf/sA0sDc//sA0sDj//DA0wABf/sA0wACv/sA0wAWf/XA0wAWv/XA0wAW//XA0wAXP/XA0wAXf/sA0wAv//XA0wBN//XA0wBPP/sA0wBPv/sA0wBQP/sA0wB+//XA0wB/f/XA0wCB//sA0wCC//sA0wDcP/XA00AD/+uA00AEf+uA00AJP/XA00AN//DA00AOf/sA00AOv/sA00AO//XA00APP/sA00APf/sA00Agv/XA00Ag//XA00AhP/XA00Ahf/XA00Ahv/XA00Ah//XA00An//sA00Awv/XA00AxP/XA00Axv/XA00BJP/DA00BJv/DA00BNv/sA00BOP/sA00BOv/sA00BO//sA00BPf/sA00BP//sA00BQ//XA00BoP/sA00B+v/sA00B/P/sA00B/v/sA00CAP/sA00CCP+uA00CDP+uA00CWP/XA00DHf/XA00DH//XA00DIf/XA00DI//XA00DJf/XA00DJ//XA00DKf/XA00DK//XA00DLf/XA00DL//XA00DMf/XA00DM//XA00Db//sA00Dcf/sA00Dc//sA00Dj//DA08AD/+uA08AEf+uA08AJP/XA08AN//DA08AOf/sA08AOv/sA08AO//XA08APP/sA08APf/sA08Agv/XA08Ag//XA08AhP/XA08Ahf/XA08Ahv/XA08Ah//XA08An//sA08Awv/XA08AxP/XA08Axv/XA08BJP/DA08BJv/DA08BNv/sA08BOP/sA08BOv/sA08BO//sA08BPf/sA08BP//sA08BQ//XA08BoP/sA08B+v/sA08B/P/sA08B/v/sA08CAP/sA08CCP+uA08CDP+uA08CWP/XA08DHf/XA08DH//XA08DIf/XA08DI//XA08DJf/XA08DJ//XA08DKf/XA08DK//XA08DLf/XA08DL//XA08DMf/XA08DM//XA08Db//sA08Dcf/sA08Dc//sA08Dj//DA1EAD/+uA1EAEf+uA1EAJP/XA1EAN//DA1EAOf/sA1EAOv/sA1EAO//XA1EAPP/sA1EAPf/sA1EAgv/XA1EAg//XA1EAhP/XA1EAhf/XA1EAhv/XA1EAh//XA1EAn//sA1EAwv/XA1EAxP/XA1EAxv/XA1EBJP/DA1EBJv/DA1EBNv/sA1EBOP/sA1EBOv/sA1EBO//sA1EBPf/sA1EBP//sA1EBQ//XA1EBoP/sA1EB+v/sA1EB/P/sA1EB/v/sA1ECAP/sA1ECCP+uA1ECDP+uA1ECWP/XA1EDHf/XA1EDH//XA1EDIf/XA1EDI//XA1EDJf/XA1EDJ//XA1EDKf/XA1EDK//XA1EDLf/XA1EDL//XA1EDMf/XA1EDM//XA1EDb//sA1EDcf/sA1EDc//sA1EDj//DA1MAD/+uA1MAEf+uA1MAJP/XA1MAN//DA1MAOf/sA1MAOv/sA1MAO//XA1MAPP/sA1MAPf/sA1MAgv/XA1MAg//XA1MAhP/XA1MAhf/XA1MAhv/XA1MAh//XA1MAn//sA1MAwv/XA1MAxP/XA1MAxv/XA1MBJP/DA1MBJv/DA1MBNv/sA1MBOP/sA1MBOv/sA1MBO//sA1MBPf/sA1MBP//sA1MBQ//XA1MBoP/sA1MB+v/sA1MB/P/sA1MB/v/sA1MCAP/sA1MCCP+uA1MCDP+uA1MCWP/XA1MDHf/XA1MDH//XA1MDIf/XA1MDI//XA1MDJf/XA1MDJ//XA1MDKf/XA1MDK//XA1MDLf/XA1MDL//XA1MDMf/XA1MDM//XA1MDb//sA1MDcf/sA1MDc//sA1MDj//DA1UAD/+uA1UAEf+uA1UAJP/XA1UAN//DA1UAOf/sA1UAOv/sA1UAO//XA1UAPP/sA1UAPf/sA1UAgv/XA1UAg//XA1UAhP/XA1UAhf/XA1UAhv/XA1UAh//XA1UAn//sA1UAwv/XA1UAxP/XA1UAxv/XA1UBJP/DA1UBJv/DA1UBNv/sA1UBOP/sA1UBOv/sA1UBO//sA1UBPf/sA1UBP//sA1UBQ//XA1UBoP/sA1UB+v/sA1UB/P/sA1UB/v/sA1UCAP/sA1UCCP+uA1UCDP+uA1UCWP/XA1UDHf/XA1UDH//XA1UDIf/XA1UDI//XA1UDJf/XA1UDJ//XA1UDKf/XA1UDK//XA1UDLf/XA1UDL//XA1UDMf/XA1UDM//XA1UDb//sA1UDcf/sA1UDc//sA1UDj//DA1gASQBSA1gAVwBSA1gAWQBmA1gAWgBmA1gAWwBmA1gAXABmA1gAvwBmA1gBJQBSA1gBJwBSA1gBNwBmA1gB+wBmA1gB/QBmA1gCNABSA1gCNQBSA1gCXQBSA1gCXgBSA1gDcABmA1gDjQBSA1gDkABSA1oASQBSA1oAVwBSA1oAWQBmA1oAWgBmA1oAWwBmA1oAXABmA1oAvwBmA1oBJQBSA1oBJwBSA1oBNwBmA1oB+wBmA1oB/QBmA1oCNABSA1oCNQBSA1oCXQBSA1oCXgBSA1oDcABmA1oDjQBSA1oDkABSA1wASQBSA1wAVwBSA1wAWQBmA1wAWgBmA1wAWwBmA1wAXABmA1wAvwBmA1wBJQBSA1wBJwBSA1wBNwBmA1wB+wBmA1wB/QBmA1wCNABSA1wCNQBSA1wCXQBSA1wCXgBSA1wDcABmA1wDjQBSA1wDkABSA14ASQBSA14AVwBSA14AWQBmA14AWgBmA14AWwBmA14AXABmA14AvwBmA14BJQBSA14BJwBSA14BNwBmA14B+wBmA14B/QBmA14CNABSA14CNQBSA14CXQBSA14CXgBSA14DcABmA14DjQBSA14DkABSA2AASQBSA2AAVwBSA2AAWQBmA2AAWgBmA2AAWwBmA2AAXABmA2AAvwBmA2ABJQBSA2ABJwBSA2ABNwBmA2AB+wBmA2AB/QBmA2ACNABSA2ACNQBSA2ACXQBSA2ACXgBSA2ADcABmA2ADjQBSA2ADkABSA2EAD//XA2EAEf/XA2EAJP/sA2EAgv/sA2EAg//sA2EAhP/sA2EAhf/sA2EAhv/sA2EAh//sA2EAwv/sA2EAxP/sA2EAxv/sA2EBQ//sA2ECCP/XA2ECDP/XA2ECWP/sA2EDHf/sA2EDH//sA2EDIf/sA2EDI//sA2EDJf/sA2EDJ//sA2EDKf/sA2EDK//sA2EDLf/sA2EDL//sA2EDMf/sA2EDM//sA2YASQBmA2YAVwBmA2YAWQBmA2YAWgBmA2YAWwBmA2YAXABmA2YAvwBmA2YBJQBmA2YBJwBmA2YBNwBmA2YB+wBmA2YB/QBmA2YCNABmA2YCNQBmA2YCXQBmA2YCXgBmA2YDcABmA2YDjQBmA2YDkABmA2gASQBmA2gAVwBmA2gAWQBmA2gAWgBmA2gAWwBmA2gAXABmA2gAvwBmA2gBJQBmA2gBJwBmA2gBNwBmA2gB+wBmA2gB/QBmA2gCNABmA2gCNQBmA2gCXQBmA2gCXgBmA2gDcABmA2gDjQBmA2gDkABmA2oASQBmA2oAVwBmA2oAWQBmA2oAWgBmA2oAWwBmA2oAXABmA2oAvwBmA2oBJQBmA2oBJwBmA2oBNwBmA2oB+wBmA2oB/QBmA2oCNABmA2oCNQBmA2oCXQBmA2oCXgBmA2oDcABmA2oDjQBmA2oDkABmA2wASQBmA2wAVwBmA2wAWQBmA2wAWgBmA2wAWwBmA2wAXABmA2wAvwBmA2wBJQBmA2wBJwBmA2wBNwBmA2wB+wBmA2wB/QBmA2wCNABmA2wCNQBmA2wCXQBmA2wCXgBmA2wDcABmA2wDjQBmA2wDkABmA24ASQBmA24AVwBmA24AWQBmA24AWgBmA24AWwBmA24AXABmA24AvwBmA24BJQBmA24BJwBmA24BNwBmA24B+wBmA24B/QBmA24CNABmA24CNQBmA24CXQBmA24CXgBmA24DcABmA24DjQBmA24DkABmA28AD/+FA28AEf+FA28AIgApA28AJP+FA28AJv/XA28AKv/XA28AMv/XA28ANP/XA28ARP+aA28ARv+aA28AR/+aA28ASP+aA28ASv/XA28AUP/DA28AUf/DA28AUv+aA28AU//DA28AVP+aA28AVf/DA28AVv+uA28AWP/DA28AXf/XA28Agv+FA28Ag/+FA28AhP+FA28Ahf+FA28Ahv+FA28Ah/+FA28Aif/XA28AlP/XA28Alf/XA28Alv/XA28Al//XA28AmP/XA28Amv/XA28Aov+aA28Ao/+aA28ApP+aA28Apf+aA28Apv+aA28Ap/+aA28AqP+aA28Aqf+aA28Aqv+aA28Aq/+aA28ArP+aA28Arf+aA28AtP+aA28Atf+aA28Atv+aA28At/+aA28AuP+aA28Auv+aA28Au//DA28AvP/DA28Avf/DA28Avv/DA28Awv+FA28Aw/+aA28AxP+FA28Axf+aA28Axv+FA28Ax/+aA28AyP/XA28Ayf+aA28Ayv/XA28Ay/+aA28AzP/XA28Azf+aA28Azv/XA28Az/+aA28A0f+aA28A0/+aA28A1f+aA28A1/+aA28A2f+aA28A2/+aA28A3f+aA28A3v/XA28A3//XA28A4P/XA28A4f/XA28A4v/XA28A4//XA28A5P/XA28A5f/XA28A+v/DA28BBv/DA28BCP/DA28BDf/DA28BDv/XA28BD/+aA28BEP/XA28BEf+aA28BEv/XA28BE/+aA28BFP/XA28BFf+aA28BF//DA28BGf/DA28BHf+uA28BIf+uA28BK//DA28BLf/DA28BL//DA28BMf/DA28BM//DA28BNf/DA28BPP/XA28BPv/XA28BQP/XA28BQ/+FA28BRP+aA28BRv+aA28BR//XA28BSP+aA28BSv+uA28CCP+FA28CDP+FA28CV//DA28CWP+FA28CWf+aA28CX//XA28CYP+aA28CYv/DA28DHf+FA28DHv+aA28DH/+FA28DIP+aA28DIf+FA28DIv+aA28DI/+FA28DJf+FA28DJv+aA28DJ/+FA28DKP+aA28DKf+FA28DKv+aA28DK/+FA28DLP+aA28DLf+FA28DLv+aA28DL/+FA28DMP+aA28DMf+FA28DMv+aA28DM/+FA28DNP+aA28DNv+aA28DOP+aA28DOv+aA28DPP+aA28DQP+aA28DQv+aA28DRP+aA28DSf/XA28DSv+aA28DS//XA28DTP+aA28DTf/XA28DTv+aA28DT//XA28DUf/XA28DUv+aA28DU//XA28DVP+aA28DVf/XA28DVv+aA28DV//XA28DWP+aA28DWf/XA28DWv+aA28DW//XA28DXP+aA28DXf/XA28DXv+aA28DX//XA28DYP+aA28DYv/DA28DZP/DA28DZv/DA28DaP/DA28Dav/DA28DbP/DA28Dbv/DA3AABQBSA3AACgBSA3AAD/+uA3AAEf+uA3AAIgApA3ACBwBSA3ACCP+uA3ACCwBSA3ACDP+uA3EAD/+FA3EAEf+FA3EAIgApA3EAJP+FA3EAJv/XA3EAKv/XA3EAMv/XA3EANP/XA3EARP+aA3EARv+aA3EAR/+aA3EASP+aA3EASv/XA3EAUP/DA3EAUf/DA3EAUv+aA3EAU//DA3EAVP+aA3EAVf/DA3EAVv+uA3EAWP/DA3EAXf/XA3EAgv+FA3EAg/+FA3EAhP+FA3EAhf+FA3EAhv+FA3EAh/+FA3EAif/XA3EAlP/XA3EAlf/XA3EAlv/XA3EAl//XA3EAmP/XA3EAmv/XA3EAov+aA3EAo/+aA3EApP+aA3EApf+aA3EApv+aA3EAp/+aA3EAqP+aA3EAqf+aA3EAqv+aA3EAq/+aA3EArP+aA3EArf+aA3EAtP+aA3EAtf+aA3EAtv+aA3EAt/+aA3EAuP+aA3EAuv+aA3EAu//DA3EAvP/DA3EAvf/DA3EAvv/DA3EAwv+FA3EAw/+aA3EAxP+FA3EAxf+aA3EAxv+FA3EAx/+aA3EAyP/XA3EAyf+aA3EAyv/XA3EAy/+aA3EAzP/XA3EAzf+aA3EAzv/XA3EAz/+aA3EA0f+aA3EA0/+aA3EA1f+aA3EA1/+aA3EA2f+aA3EA2/+aA3EA3f+aA3EA3v/XA3EA3//XA3EA4P/XA3EA4f/XA3EA4v/XA3EA4//XA3EA5P/XA3EA5f/XA3EA+v/DA3EBBv/DA3EBCP/DA3EBDf/DA3EBDv/XA3EBD/+aA3EBEP/XA3EBEf+aA3EBEv/XA3EBE/+aA3EBFP/XA3EBFf+aA3EBF//DA3EBGf/DA3EBHf+uA3EBIf+uA3EBK//DA3EBLf/DA3EBL//DA3EBMf/DA3EBM//DA3EBNf/DA3EBPP/XA3EBPv/XA3EBQP/XA3EBQ/+FA3EBRP+aA3EBRv+aA3EBR//XA3EBSP+aA3EBSv+uA3ECCP+FA3ECDP+FA3ECV//DA3ECWP+FA3ECWf+aA3ECX//XA3ECYP+aA3ECYv/DA3EDHf+FA3EDHv+aA3EDH/+FA3EDIP+aA3EDIf+FA3EDIv+aA3EDI/+FA3EDJf+FA3EDJv+aA3EDJ/+FA3EDKP+aA3EDKf+FA3EDKv+aA3EDK/+FA3EDLP+aA3EDLf+FA3EDLv+aA3EDL/+FA3EDMP+aA3EDMf+FA3EDMv+aA3EDM/+FA3EDNP+aA3EDNv+aA3EDOP+aA3EDOv+aA3EDPP+aA3EDQP+aA3EDQv+aA3EDRP+aA3EDSf/XA3EDSv+aA3EDS//XA3EDTP+aA3EDTf/XA3EDTv+aA3EDT//XA3EDUf/XA3EDUv+aA3EDU//XA3EDVP+aA3EDVf/XA3EDVv+aA3EDV//XA3EDWP+aA3EDWf/XA3EDWv+aA3EDW//XA3EDXP+aA3EDXf/XA3EDXv+aA3EDX//XA3EDYP+aA3EDYv/DA3EDZP/DA3EDZv/DA3EDaP/DA3EDav/DA3EDbP/DA3EDbv/DA3IABQBSA3IACgBSA3IAD/+uA3IAEf+uA3IAIgApA3ICBwBSA3ICCP+uA3ICCwBSA3ICDP+uA3MAD/+FA3MAEf+FA3MAIgApA3MAJP+FA3MAJv/XA3MAKv/XA3MAMv/XA3MANP/XA3MARP+aA3MARv+aA3MAR/+aA3MASP+aA3MASv/XA3MAUP/DA3MAUf/DA3MAUv+aA3MAU//DA3MAVP+aA3MAVf/DA3MAVv+uA3MAWP/DA3MAXf/XA3MAgv+FA3MAg/+FA3MAhP+FA3MAhf+FA3MAhv+FA3MAh/+FA3MAif/XA3MAlP/XA3MAlf/XA3MAlv/XA3MAl//XA3MAmP/XA3MAmv/XA3MAov+aA3MAo/+aA3MApP+aA3MApf+aA3MApv+aA3MAp/+aA3MAqP+aA3MAqf+aA3MAqv+aA3MAq/+aA3MArP+aA3MArf+aA3MAtP+aA3MAtf+aA3MAtv+aA3MAt/+aA3MAuP+aA3MAuv+aA3MAu//DA3MAvP/DA3MAvf/DA3MAvv/DA3MAwv+FA3MAw/+aA3MAxP+FA3MAxf+aA3MAxv+FA3MAx/+aA3MAyP/XA3MAyf+aA3MAyv/XA3MAy/+aA3MAzP/XA3MAzf+aA3MAzv/XA3MAz/+aA3MA0f+aA3MA0/+aA3MA1f+aA3MA1/+aA3MA2f+aA3MA2/+aA3MA3f+aA3MA3v/XA3MA3//XA3MA4P/XA3MA4f/XA3MA4v/XA3MA4//XA3MA5P/XA3MA5f/XA3MA+v/DA3MBBv/DA3MBCP/DA3MBDf/DA3MBDv/XA3MBD/+aA3MBEP/XA3MBEf+aA3MBEv/XA3MBE/+aA3MBFP/XA3MBFf+aA3MBF//DA3MBGf/DA3MBHf+uA3MBIf+uA3MBK//DA3MBLf/DA3MBL//DA3MBMf/DA3MBM//DA3MBNf/DA3MBPP/XA3MBPv/XA3MBQP/XA3MBQ/+FA3MBRP+aA3MBRv+aA3MBR//XA3MBSP+aA3MBSv+uA3MCCP+FA3MCDP+FA3MCV//DA3MCWP+FA3MCWf+aA3MCX//XA3MCYP+aA3MCYv/DA3MDHf+FA3MDHv+aA3MDH/+FA3MDIP+aA3MDIf+FA3MDIv+aA3MDI/+FA3MDJf+FA3MDJv+aA3MDJ/+FA3MDKP+aA3MDKf+FA3MDKv+aA3MDK/+FA3MDLP+aA3MDLf+FA3MDLv+aA3MDL/+FA3MDMP+aA3MDMf+FA3MDMv+aA3MDM/+FA3MDNP+aA3MDNv+aA3MDOP+aA3MDOv+aA3MDPP+aA3MDQP+aA3MDQv+aA3MDRP+aA3MDSf/XA3MDSv+aA3MDS//XA3MDTP+aA3MDTf/XA3MDTv+aA3MDT//XA3MDUf/XA3MDUv+aA3MDU//XA3MDVP+aA3MDVf/XA3MDVv+aA3MDV//XA3MDWP+aA3MDWf/XA3MDWv+aA3MDW//XA3MDXP+aA3MDXf/XA3MDXv+aA3MDX//XA3MDYP+aA3MDYv/DA3MDZP/DA3MDZv/DA3MDaP/DA3MDav/DA3MDbP/DA3MDbv/DA3QABQBSA3QACgBSA3QAD/+uA3QAEf+uA3QAIgApA3QCBwBSA3QCCP+uA3QCCwBSA3QCDP+uA40ABQB7A40ACgB7A40CBwB7A40CCwB7A48AD/+FA48AEP+uA48AEf+FA48AIgApA48AJP9xA48AJv/XA48AKv/XA48AMv/XA48ANP/XA48ANwApA48ARP9cA48ARv9xA48AR/9xA48ASP9xA48ASv9xA48AUP+aA48AUf+aA48AUv9xA48AU/+aA48AVP9xA48AVf+aA48AVv+FA48AWP+aA48AWf/XA48AWv/XA48AW//XA48AXP/XA48AXf+uA48Agv9xA48Ag/9xA48AhP9xA48Ahf9xA48Ahv9xA48Ah/9xA48Aif/XA48AlP/XA48Alf/XA48Alv/XA48Al//XA48AmP/XA48Amv/XA48Aov9xA48Ao/9cA48ApP9cA48Apf9cA48Apv9cA48Ap/9cA48AqP9cA48Aqf9xA48Aqv9xA48Aq/9xA48ArP9xA48Arf9xA48AtP9xA48Atf9xA48Atv9xA48At/9xA48AuP9xA48Auv9xA48Au/+aA48AvP+aA48Avf+aA48Avv+aA48Av//XA48Awv9xA48Aw/9cA48AxP9xA48Axf9cA48Axv9xA48Ax/9cA48AyP/XA48Ayf9xA48Ayv/XA48Ay/9xA48AzP/XA48Azf9xA48Azv/XA48Az/9xA48A0f9xA48A0/9xA48A1f9xA48A1/9xA48A2f9xA48A2/9xA48A3f9xA48A3v/XA48A3/9xA48A4P/XA48A4f9xA48A4v/XA48A4/9xA48A5P/XA48A5f9xA48A+v+aA48BBv+aA48BCP+aA48BDf+aA48BDv/XA48BD/9xA48BEP/XA48BEf9xA48BEv/XA48BE/9xA48BFP/XA48BFf9xA48BF/+aA48BGf+aA48BHf+FA48BIf+FA48BJAApA48BJgApA48BK/+aA48BLf+aA48BL/+aA48BMf+aA48BM/+aA48BNf+aA48BN//XA48BPP+uA48BPv+uA48BQP+uA48BQ/9xA48BRP9cA48BRv9cA48BR//XA48BSP9xA48BSv+FA48B+//XA48B/f/XA48CAv+uA48CA/+uA48CBP+uA48CCP+FA48CDP+FA48CV/+aA48CWP9xA48CWf9cA48CX//XA48CYP9xA48CYv+aA48DHf9xA48DHv9cA48DH/9xA48DIP9cA48DIf9xA48DIv9cA48DI/9xA48DJf9xA48DJv9cA48DJ/9xA48DKP9cA48DKf9xA48DKv9cA48DK/9xA48DLP9cA48DLf9xA48DLv9cA48DL/9xA48DMP9cA48DMf9xA48DMv9cA48DM/9xA48DNP9cA48DNv9xA48DOP9xA48DOv9xA48DPP9xA48DQP9xA48DQv9xA48DRP9xA48DSf/XA48DSv9xA48DS//XA48DTP9xA48DTf/XA48DTv9xA48DT//XA48DUf/XA48DUv9xA48DU//XA48DVP9xA48DVf/XA48DVv9xA48DV//XA48DWP9xA48DWf/XA48DWv9xA48DW//XA48DXP9xA48DXf/XA48DXv9xA48DX//XA48DYP9xA48DYv+aA48DZP+aA48DZv+aA48DaP+aA48Dav+aA48DbP+aA48Dbv+aA48DcP/XA48DjwApA5AABQApA5AACgApA5ACBwApA5ACCwApAAAAAAAaAT4AAQAAAAAAAAA5AAAAAQAAAAAAAQAJADkAAQAAAAAAAgAHAEIAAQAAAAAAAwAeAEkAAQAAAAAABAAJADkAAQAAAAAABQAMAGcAAQAAAAAABgAIAHMAAQAAAAAABwBSAHsAAQAAAAAACAAUAM0AAQAAAAAACwAcAOEAAQAAAAAADAAuAP0AAQAAAAAADQAuASsAAQAAAAAADgAqAVkAAwABBAkAAAByAYMAAwABBAkAAQASAfUAAwABBAkAAgAOAgcAAwABBAkAAwA8AhUAAwABBAkABAASAfUAAwABBAkABQAYAlEAAwABBAkABgAQAmkAAwABBAkABwCkAnkAAwABBAkACAAoAx0AAwABBAkACwA4A0UAAwABBAkADABcA30AAwABBAkADQBcA9kAAwABBAkADgBUBDVEaWdpdGl6ZWQgZGF0YSBjb3B5cmlnaHQgqSAyMDEwLTIwMTEsIEdvb2dsZSBDb3Jwb3JhdGlvbi5PcGVuIFNhbnNSZWd1bGFyQXNjZW5kZXIgLSBPcGVuIFNhbnMgQnVpbGQgMTAwVmVyc2lvbiAxLjEwT3BlblNhbnNPcGVuIFNhbnMgaXMgYSB0cmFkZW1hcmsgb2YgR29vZ2xlIGFuZCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBjZXJ0YWluIGp1cmlzZGljdGlvbnMuQXNjZW5kZXIgQ29ycG9yYXRpb25odHRwOi8vd3d3LmFzY2VuZGVyY29ycC5jb20vaHR0cDovL3d3dy5hc2NlbmRlcmNvcnAuY29tL3R5cGVkZXNpZ25lcnMuaHRtbExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAARABpAGcAaQB0AGkAegBlAGQAIABkAGEAdABhACAAYwBvAHAAeQByAGkAZwBoAHQAIACpACAAMgAwADEAMAAtADIAMAAxADEALAAgAEcAbwBvAGcAbABlACAAQwBvAHIAcABvAHIAYQB0AGkAbwBuAC4ATwBwAGUAbgAgAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgBBAHMAYwBlAG4AZABlAHIAIAAtACAATwBwAGUAbgAgAFMAYQBuAHMAIABCAHUAaQBsAGQAIAAxADAAMABWAGUAcgBzAGkAbwBuACAAMQAuADEAMABPAHAAZQBuAFMAYQBuAHMATwBwAGUAbgAgAFMAYQBuAHMAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAgAGEAbgBkACAAbQBhAHkAIABiAGUAIAByAGUAZwBpAHMAdABlAHIAZQBkACAAaQBuACAAYwBlAHIAdABhAGkAbgAgAGoAdQByAGkAcwBkAGkAYwB0AGkAbwBuAHMALgBBAHMAYwBlAG4AZABlAHIAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcwBjAGUAbgBkAGUAcgBjAG8AcgBwAC4AYwBvAG0ALwBoAHQAdABwADoALwAvAHcAdwB3AC4AYQBzAGMAZQBuAGQAZQByAGMAbwByAHAALgBjAG8AbQAvAHQAeQBwAGUAZABlAHMAaQBnAG4AZQByAHMALgBoAHQAbQBsAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAAAIAAAAAAAD/ZgBmAAAAAAAAAAAAAAAAAAAAAAAAAAADqgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBKgEqQSqBKsHLm5vdGRlZgRudWxsEG5vbm1hcmtpbmdyZXR1cm4Fc3BhY2UGZXhjbGFtCHF1b3RlZGJsCm51bWJlcnNpZ24GZG9sbGFyB3BlcmNlbnQJYW1wZXJzYW5kC3F1b3Rlc2luZ2xlCXBhcmVubGVmdApwYXJlbnJpZ2h0CGFzdGVyaXNrBHBsdXMFY29tbWEGaHlwaGVuBnBlcmlvZAVzbGFzaAR6ZXJvA29uZQN0d28FdGhyZWUEZm91cgRmaXZlA3NpeAVzZXZlbgVlaWdodARuaW5lBWNvbG9uCXNlbWljb2xvbgRsZXNzBWVxdWFsB2dyZWF0ZXIIcXVlc3Rpb24CYXQBQQFCAUMBRAFFAUYBRwFIBUkuYWx0AUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgticmFja2V0bGVmdAliYWNrc2xhc2gMYnJhY2tldHJpZ2h0C2FzY2lpY2lyY3VtCnVuZGVyc2NvcmUFZ3JhdmUBYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6CWJyYWNlbGVmdANiYXIKYnJhY2VyaWdodAphc2NpaXRpbGRlEG5vbmJyZWFraW5nc3BhY2UKZXhjbGFtZG93bgRjZW50CHN0ZXJsaW5nCGN1cnJlbmN5A3llbglicm9rZW5iYXIHc2VjdGlvbghkaWVyZXNpcwljb3B5cmlnaHQLb3JkZmVtaW5pbmUNZ3VpbGxlbW90bGVmdApsb2dpY2Fsbm90B3VuaTAwQUQKcmVnaXN0ZXJlZAlvdmVyc2NvcmUGZGVncmVlCXBsdXNtaW51cwt0d29zdXBlcmlvcg10aHJlZXN1cGVyaW9yBWFjdXRlAm11CXBhcmFncmFwaA5wZXJpb2RjZW50ZXJlZAdjZWRpbGxhC29uZXN1cGVyaW9yDG9yZG1hc2N1bGluZQ5ndWlsbGVtb3RyaWdodApvbmVxdWFydGVyB29uZWhhbGYNdGhyZWVxdWFydGVycwxxdWVzdGlvbmRvd24GQWdyYXZlBkFhY3V0ZQtBY2lyY3VtZmxleAZBdGlsZGUJQWRpZXJlc2lzBUFyaW5nAkFFCENjZWRpbGxhBkVncmF2ZQZFYWN1dGULRWNpcmN1bWZsZXgJRWRpZXJlc2lzCklncmF2ZS5hbHQKSWFjdXRlLmFsdA9JY2lyY3VtZmxleC5hbHQNSWRpZXJlc2lzLmFsdANFdGgGTnRpbGRlBk9ncmF2ZQZPYWN1dGULT2NpcmN1bWZsZXgGT3RpbGRlCU9kaWVyZXNpcwhtdWx0aXBseQZPc2xhc2gGVWdyYXZlBlVhY3V0ZQtVY2lyY3VtZmxleAlVZGllcmVzaXMGWWFjdXRlBVRob3JuCmdlcm1hbmRibHMGYWdyYXZlBmFhY3V0ZQthY2lyY3VtZmxleAZhdGlsZGUJYWRpZXJlc2lzBWFyaW5nAmFlCGNjZWRpbGxhBmVncmF2ZQZlYWN1dGULZWNpcmN1bWZsZXgJZWRpZXJlc2lzBmlncmF2ZQZpYWN1dGULaWNpcmN1bWZsZXgJaWRpZXJlc2lzA2V0aAZudGlsZGUGb2dyYXZlBm9hY3V0ZQtvY2lyY3VtZmxleAZvdGlsZGUJb2RpZXJlc2lzBmRpdmlkZQZvc2xhc2gGdWdyYXZlBnVhY3V0ZQt1Y2lyY3VtZmxleAl1ZGllcmVzaXMGeWFjdXRlBXRob3JuCXlkaWVyZXNpcwdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGQ2FjdXRlBmNhY3V0ZQtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QGQ2Nhcm9uBmNjYXJvbgZEY2Fyb24GZGNhcm9uBkRjcm9hdAZkY3JvYXQHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BkdicmV2ZQZnYnJldmUER2RvdARnZG90DEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyCkl0aWxkZS5hbHQGaXRpbGRlC0ltYWNyb24uYWx0B2ltYWNyb24KSWJyZXZlLmFsdAZpYnJldmULSW9nb25lay5hbHQHaW9nb25law5JZG90YWNjZW50LmFsdAhkb3RsZXNzaQZJSi5hbHQCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAxrZ3JlZW5sYW5kaWMGTGFjdXRlBmxhY3V0ZQxMY29tbWFhY2NlbnQMbGNvbW1hYWNjZW50BkxjYXJvbgZsY2Fyb24ETGRvdARsZG90BkxzbGFzaAZsc2xhc2gGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUDRW5nA2VuZwdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQCT0UCb2UGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAhTY2VkaWxsYQhzY2VkaWxsYQZTY2Fyb24Gc2Nhcm9uDFRjb21tYWFjY2VudAx0Y29tbWFhY2NlbnQGVGNhcm9uBnRjYXJvbgRUYmFyBHRiYXIGVXRpbGRlBnV0aWxkZQdVbWFjcm9uB3VtYWNyb24GVWJyZXZlBnVicmV2ZQVVcmluZwV1cmluZw1VaHVuZ2FydW1sYXV0DXVodW5nYXJ1bWxhdXQHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4CVlkaWVyZXNpcwZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAZaY2Fyb24GemNhcm9uBWxvbmdzBmZsb3JpbgpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQKY2lyY3VtZmxleAVjYXJvbgZtYWNyb24FYnJldmUJZG90YWNjZW50BHJpbmcGb2dvbmVrBXRpbGRlDGh1bmdhcnVtbGF1dAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MJYW5vdGVsZWlhDEVwc2lsb250b25vcwhFdGF0b25vcw1Jb3RhdG9ub3MuYWx0DE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBUdhbW1hB3VuaTAzOTQHRXBzaWxvbgRaZXRhA0V0YQVUaGV0YQhJb3RhLmFsdAVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DUGhpA0NoaQNQc2kHdW5pMDNBORBJb3RhZGllcmVzaXMuYWx0D1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhB3VuaTAzQkMCbnUCeGkHb21pY3JvbgJwaQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQNYWZpaTEwMDU1LmFsdA1hZmlpMTAwNTYuYWx0CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4BldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGZW5kYXNoBmVtZGFzaAlhZmlpMDAyMDgNdW5kZXJzY29yZWRibAlxdW90ZWxlZnQKcXVvdGVyaWdodA5xdW90ZXNpbmdsYmFzZQ1xdW90ZXJldmVyc2VkDHF1b3RlZGJsbGVmdA1xdW90ZWRibHJpZ2h0DHF1b3RlZGJsYmFzZQZkYWdnZXIJZGFnZ2VyZGJsBmJ1bGxldAhlbGxpcHNpcwtwZXJ0aG91c2FuZAZtaW51dGUGc2Vjb25kDWd1aWxzaW5nbGxlZnQOZ3VpbHNpbmdscmlnaHQJZXhjbGFtZGJsCGZyYWN0aW9uCW5zdXBlcmlvcgVmcmFuYwlhZmlpMDg5NDEGcGVzZXRhBEV1cm8JYWZpaTYxMjQ4CWFmaWk2MTI4OQlhZmlpNjEzNTIJdHJhZGVtYXJrBU9tZWdhCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtwYXJ0aWFsZGlmZgVEZWx0YQdwcm9kdWN0CXN1bW1hdGlvbgVtaW51cwdyYWRpY2FsCGluZmluaXR5CGludGVncmFsC2FwcHJveGVxdWFsCG5vdGVxdWFsCWxlc3NlcXVhbAxncmVhdGVyZXF1YWwHbG96ZW5nZQd1bmlGQjAxB3VuaUZCMDINY3lyaWxsaWNicmV2ZQhkb3RsZXNzahBjYXJvbmNvbW1hYWNjZW50C2NvbW1hYWNjZW50EWNvbW1hYWNjZW50cm90YXRlDHplcm9zdXBlcmlvcgxmb3Vyc3VwZXJpb3IMZml2ZXN1cGVyaW9yC3NpeHN1cGVyaW9yDXNldmVuc3VwZXJpb3INZWlnaHRzdXBlcmlvcgxuaW5lc3VwZXJpb3IHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEIHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQHdW5pMDFGMAd1bmkwMkJDB3VuaTAzRDEHdW5pMDNEMgd1bmkwM0Q2B3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmkwMkYzCWRhc2lhb3hpYQd1bmlGQjAzB3VuaUZCMDQFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4HdW5pMDMwMAd1bmkwMzAxB3VuaTAzMDMEaG9vawhkb3RiZWxvdwd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NjAHdW5pMDQ2MQd1bmkwNDYyB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3MAd1bmkwNDcxB3VuaTA0NzIHdW5pMDQ3Mwd1bmkwNDc0B3VuaTA0NzUHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzgHdW5pMDQ3OQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhBB3VuaTA0OEIHdW5pMDQ4Qwd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNDk4B3VuaTA0OTkHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0OUMHdW5pMDQ5RAd1bmkwNDlFB3VuaTA0OUYHdW5pMDRBMAd1bmkwNEExB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBQwd1bmkwNEFEB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjQHdW5pMDRCNQd1bmkwNEI2B3VuaTA0QjcHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQgd1bmkwNEJDB3VuaTA0QkQHdW5pMDRCRQd1bmkwNEJGC3VuaTA0QzAuYWx0B3VuaTA0QzEHdW5pMDRDMgd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNQd1bmkwNEM2B3VuaTA0QzcHdW5pMDRDOAd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDQgd1bmkwNENDB3VuaTA0Q0QHdW5pMDRDRQt1bmkwNENGLmFsdAd1bmkwNEQwB3VuaTA0RDEHdW5pMDREMgd1bmkwNEQzB3VuaTA0RDQHdW5pMDRENQd1bmkwNEQ2B3VuaTA0RDcHdW5pMDREOAd1bmkwNEQ5B3VuaTA0REEHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTAHdW5pMDRFMQd1bmkwNEUyB3VuaTA0RTMHdW5pMDRFNAd1bmkwNEU1B3VuaTA0RTYHdW5pMDRFNwd1bmkwNEU4B3VuaTA0RTkHdW5pMDRFQQd1bmkwNEVCB3VuaTA0RUMHdW5pMDRFRAd1bmkwNEVFB3VuaTA0RUYHdW5pMDRGMAd1bmkwNEYxB3VuaTA0RjIHdW5pMDRGMwd1bmkwNEY0B3VuaTA0RjUHdW5pMDRGNgd1bmkwNEY3B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZBB3VuaTA0RkIHdW5pMDRGQwd1bmkwNEZEB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTAwB3VuaTA1MDEHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMDUxMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwt1bmkxRUM4LmFsdAd1bmkxRUM5C3VuaTFFQ0EuYWx0B3VuaTFFQ0IHdW5pMUVDQwd1bmkxRUNEB3VuaTFFQ0UHdW5pMUVDRgd1bmkxRUQwB3VuaTFFRDEHdW5pMUVEMgd1bmkxRUQzB3VuaTFFRDQHdW5pMUVENQd1bmkxRUQ2B3VuaTFFRDcHdW5pMUVEOAd1bmkxRUQ5B3VuaTFFREEHdW5pMUVEQgd1bmkxRURDB3VuaTFFREQHdW5pMUVERQd1bmkxRURGB3VuaTFFRTAHdW5pMUVFMQd1bmkxRUUyB3VuaTFFRTMHdW5pMUVFNAd1bmkxRUU1B3VuaTFFRTYHdW5pMUVFNwd1bmkxRUU4B3VuaTFFRTkHdW5pMUVFQQd1bmkxRUVCB3VuaTFFRUMHdW5pMUVFRAd1bmkxRUVFB3VuaTFFRUYHdW5pMUVGMAd1bmkxRUYxB3VuaTFFRjQHdW5pMUVGNQd1bmkxRUY2B3VuaTFFRjcHdW5pMUVGOAd1bmkxRUY5B3VuaTIwQUIHdW5pMDMwRhNjaXJjdW1mbGV4YWN1dGVjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWIOYnJldmVhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWINYnJldmVob29rY29tYg5icmV2ZXRpbGRlY29tYhBjeXJpbGxpY2hvb2tsZWZ0EWN5cmlsbGljYmlnaG9va1VDEWN5cmlsbGljYmlnaG9va0xDCG9uZS5wbnVtB3plcm8ub3MGb25lLm9zBnR3by5vcwh0aHJlZS5vcwdmb3VyLm9zB2ZpdmUub3MGc2l4Lm9zCHNldmVuLm9zCGVpZ2h0Lm9zB25pbmUub3MCZmYHdW5pMjEyMAhUY2VkaWxsYQh0Y2VkaWxsYQVnLmFsdA9nY2lyY3VtZmxleC5hbHQKZ2JyZXZlLmFsdAhnZG90LmFsdBBnY29tbWFhY2NlbnQuYWx0AUkGSWdyYXZlBklhY3V0ZQtJY2lyY3VtZmxleAlJZGllcmVzaXMGSXRpbGRlB0ltYWNyb24GSWJyZXZlB0lvZ29uZWsKSWRvdGFjY2VudAJJSglJb3RhdG9ub3MESW90YQxJb3RhZGllcmVzaXMJYWZpaTEwMDU1CWFmaWkxMDA1Ngd1bmkwNEMwB3VuaTA0Q0YHdW5pMUVDOAd1bmkxRUNBAAABAAMACAAKAA0AB///AA8AAQAAAAwAAAAWAAAAAgABAAADqQABAAQAAAABAAAAAAABAAAACgA0ADYAAWxhdG4ACAAQAAJNT0wgABZST00gABwAAP//AAAAAP//AAAAAP//AAAAAAAAAAEAAAAKAG4B5AABbGF0bgAIABAAAk1PTCAAKFJPTSAAQgAA//8ACQADAAgACwAAAA4AEQAUABcAGgAA//8ACgAEAAYACQAMAAEADwASABUAGAAbAAD//wAKAAUABwAKAA0AAgAQABMAFgAZABwAHWxpZ2EAsGxpZ2EAtmxpZ2EAvGxudW0AwmxudW0AyGxudW0AzmxvY2wA1GxvY2wA2m9udW0A4G9udW0A6G9udW0A8HBudW0A+HBudW0A/nBudW0BBHNhbHQBCnNhbHQBEnNhbHQBGnNzMDEBInNzMDEBKnNzMDEBMnNzMDIBOnNzMDIBQHNzMDIBRnNzMDMBTHNzMDMBUnNzMDMBWHRudW0BXnRudW0BZnRudW0BbgAAAAEACQAAAAEACQAAAAEACQAAAAEABwAAAAEABwAAAAEABwAAAAEACAAAAAEACAAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAEABAAAAAEABAAAAAEABAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAQAAAAEAAQAAAAEAAQAAAAIABQAGAAAAAgAFAAYAAAACAAUABgAKABYAHgAmAC4ANgA+AEYATgBWAF4AAQAAAAEAUAABAAAAAQB6AAEAAAABAKoAAQAAAAEAxgABAAAAAQDuAAEAAAABAPQAAQAAAAEBEAABAAAAAQEWAAEAAAABATIABAAAAAEBSAACABAABQORA5IDkwOUA5UAAgAFAEoASgAAAN8A3wABAOEA4QACAOMA4wADAOUA5QAEAAIALgAUACwAjgCPAJAAkQDqAOwA7gDwAPIA9AFaAWcBdwGhAaICyQLYA0UDRwACAAEDlgOpAAAAAgAaAAoDgwOEA4UDhgOHA4gDiQOKA4sDjAACAAEAEwAcAAAAAgAaAAoDgwOFA4YDhwOIA4kDigOLA4wDhAACAAMAEwATAAAAFQAcAAEDggOCAAkAAgAIAAEDggABAAEAFAACABoACgATABQAFQAWABcAGAAZABoAGwAcAAIAAQODA4wAAAACAAgAAQAUAAEAAQOCAAIAGgAKABMDggAVABYAFwAYABkAGgAbABwAAgABA4MDjAAAAAIADgAEA48DkAEgASEAAgACASQBJQAAAUkBSgACAAEANgABAAgABQAMABQAHAAiACgCXgADAEkATwJdAAMASQBMA40AAgBJAjUAAgBPAjQAAgBMAAEAAQBJAAAAAAABAAEAAQAAAAEAABVeAAAAFAAAAAAAABVWMIIVUgYJKoZIhvcNAQcCoIIVQzCCFT8CAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBRMCwGCisGAQQBgjcCARyiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+AD4APjAhMAkGBSsOAwIaBQAEFIK4uYCP2fVApm1usxVUQTaZ3tN9oIIRXTCCA3owggJioAMCAQICEDgl1/r4Ya+e9JDnJrXWWtUwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMB4XDTA3MDYxNTAwMDAwMFoXDTEyMDYxNDIzNTk1OVowXDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQDEytWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEcyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEtfJSFbyIhmApFkpbL0uRa4eR8zVUWDXq0TZeYk1SUTRxwntmHYnI3SrEagr2N9mYdJH2kq6wtXaW8alKY0VHLmsLkk5LK4zuWEqL1AfkGiz4gqpY2c1C8y3Add6Nq8eOHZpsTAiVHt7b72fhcsJJwp5gPOHivhajY3hpFHutLQIDAQABo4HEMIHBMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBsAwHgYDVR0RBBcwFaQTMBExDzANBgNVBAMTBlRTQTEtMjANBgkqhkiG9w0BAQUFAAOCAQEAUMVLyCSA3+QNJMLeGrGhAqGmgi0MgxWBNwqCDiywWhdhtdgF/ojb8ZGRs1YaQKbrkr44ObB1NnQ6mE/kN7qZicqVQh2wucegjVfg+tVkBEI1TgHRM6IXyE2qJ8fy4YZMAjhNg3jG/FPg6+AGh92klp5eDJjipb6/goXDYOHfrSjYx6VLZNrHG1u9rDkI1TgioTOLL4qa67wHIT9EQQkHtWUcJLxI00SA66HPyQK0FM9UxxajgFz5eT5dcn2IF54sQ6LKU859PfYqOrhPlAClbQqDXfleU/QYs1cPcMP79a2VoA4X3sQWgGDJDytuhgTx6/R4J9EFxe40W165STLyMzCCA8QwggMtoAMCAQICEEe/GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1waW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIzNTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8KfYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbVXV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/HtN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5oL6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpUwQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dDmhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMMVFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr+epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWdtdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIIE/DCCBGWgAwIBAgIQZVIm4bIuGOFZDymFrCLnXDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDkwNTIxMDAwMDAwWhcNMTkwNTIwMjM1OTU5WjCBtjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEwMC4GA1UEAxMnVmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAwOS0yIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmcdtGCqEElvVhd8Zslehg3V8ayncYOOi4n4iASJFQa6LYQhleTRnFBM+9IivdrysjU7Ho/DCfv8Ey5av4l8PTslHvbzWHuc9AG1xgq4gM6+J3RhZydNauXsgWFYeaPgFxASFSew4U00fytHIES53mYkZorNT7ofxTjIVJDhcvYZZnVquUlozzh5DaowqNssYEie16oUAamD1ziRMDkTlgM6fEBUtq3gLxuD3KgRUj4Cs9cr/SG2p1yjDwupphBQDjQuTafOyV4l1Iy88258KbwBXfwxh1rVjIVnWIgZoL818OoroyHnkPaD5ajtYHhee2CD/VcLXUENY1Rg1kMh7wIDAQABo4IB2zCCAdcwEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBnMGUGC2CGSAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwKgYIKwYBBQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFDbGFzczNDQTIwNDgtMS01NTAdBgNVHQ4EFgQUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwDQYJKoZIhvcNAQEFBQADgYEAiwPA3ZTYQaJhabAVqHjHMMaQPH5C9yS25INzFwR/BBCcoeL6gS/rwMpE53LgULZVECCDbpaS5JpRarQ3MdylLeuMAMcdT+dNMrqF+E6++mdVZfBqvnrKZDgaEBB4RXYx84Z6Aw9gwrNdnfaLZnaCG1nhg+W9SaU4VuXeQXcOWA8wggUTMIID+6ADAgECAhBm4/BnecoVFm1QU2+IGRqDMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MTAwLgYDVQQDEydWZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDA5LTIgQ0EwHhcNMTAwNzI5MDAwMDAwWhcNMTIwODA4MjM1OTU5WjCB0DELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcTBldvYnVybjEeMBwGA1UEChQVTW9ub3R5cGUgSW1hZ2luZyBJbmMuMT4wPAYDVQQLEzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNyb3NvZnQgU29mdHdhcmUgVmFsaWRhdGlvbiB2MjEYMBYGA1UECxQPVHlwZSBPcGVyYXRpb25zMR4wHAYDVQQDFBVNb25vdHlwZSBJbWFnaW5nIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJREoJVpfFUN0NsWjTI1ikwzq14goUzXKoc415ilQPAZSQsiHlNPwkOmyoupVu9uSAaoBRU5HmM7JBKQuZjPygg1fXLjR1f9ecuKSudAcC01Y3+ugM/Er9j798n8idjXpKDbCfKi8nvvzXXB92VQZCKdvX28rbhLzFhFDk3RWUxNAgMBAAGjggGDMIIBfzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3NjMy0yMDA5LTItY3JsLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vY3NjMy0yMDA5LTItYWlhLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jZXIwHwYDVR0jBBgwFoAUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwEQYJYIZIAYb4QgEBBAQDAgQQMBYGCisGAQQBgjcCARsECDAGAQEAAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQBO5iKH32dBFRfi0u5+Ds7CmdZjvfC1k+VqcmLh9dI8OO6oPQhfukeBgl9bS0n0HSD6D5MJ0B0ZVkQXoojz+42drvcNNd48DKxElGBFKpv+m29MO7E0Z3AQhv9aOVxa42yCqzV8ZUv9mG21FZRJnIhwEL49sWKVtNu01NronUGQfv59uaSS627yIorGdzZNiloLUwUx0ysor1LhjXprtXdEvQyt9F0lLOPNijA+SwOcecqmTq4LwswkBwvBlIL2EPG6kLabmthcPBPx6gIGGCdNPIlvM4rTht7pWDN1PeuTaeJEb04AbM/VhdpWppqmP8tMIWiQ8mC64egGXTkhEzLtMYIDZzCCA2MCAQEwgcswgbYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDkxMDAuBgNVBAMTJ1ZlcmlTaWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIwMDktMiBDQQIQZuPwZ3nKFRZtUFNviBkagzAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFEjj6tsXY4/GsRVXJyC3ZfQZU5UYMA0GCSqGSIb3DQEBAQUABIGARTu81Lrv2hu/YjveEuxKBoRFcUHJAv4uDpXzibFS9EHrbTIsSL8pkbyyL11kJDQuupa0tkpzl+D2n0H392i29YAGeEG+U5DAfnhSWxyqDiFC3L4JnDPTRlCQOwWZECtZaeyF2GPRLcMGljTtFKOc8vFUQNVHF6ALAB+MZu/ePhuhggF/MIIBewYJKoZIhvcNAQkGMYIBbDCCAWgCAQEwZzBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0ECEDgl1/r4Ya+e9JDnJrXWWtUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTExMDUwNTE2NTUxMFowIwYJKoZIhvcNAQkEMRYEFFQXCCsLve4aJw4fjfxTk/Q4VhAPMA0GCSqGSIb3DQEBAQUABIGAHcF3ia6bbyLja+VF2k6RQPCf7zsfJ0pWrDr9qJRqfPecwX97k2BOG8QrV5WUyxbhmmcz0SspE8jsvrxZsQOkKZnsHYiZJId3D5vKFPvU1ElMdA7IPS5vIMkDzejlD9AhObNWGdX7rL2sqTi9sNUMo9ljrbCVtGhYw+LXKf+RpMcAAA==&quot;);
+    }
+    </style>
+    <text
+       dominant-baseline="text-before-edge"
+       xml:space="preserve"
+       style="line-height:100%"
+       transform="matrix(0.9999947536344509 0.003239244290578247 -0.003239244290578247 0.9999947536344509 -282.99412752398837 290.32977242141243)"
+       alignment-baseline="before-edge"
+       letter-spacing="0"
+       font-style="normal"
+       font-weight="400"
+       font-family="Open Sans"
+       font-size="70"
+       y="1118.1"
+       x="1037.9"
+       id="a75q7dz7a"><tspan
+         id="tspan305"
+         text-anchor="middle"
+         dominant-baseline="text-before-edge"
+         alignment-baseline="before-edge"
+         dy="0em"
+         x="1037.9">Una manera de hacer Europa</tspan></text>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="400"
+     inkscape:cy="572.90789"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="703"
+     inkscape:window-x="1366"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata99">
+    <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
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g314"
+       transform="matrix(0.26458333,0,0,0.26458333,-121.57811,-59.559034)">
+      <g
+         id="g312"
+         clip-path="url(#clipcGGasTEwZ)"
+         style="opacity:1">
+        <image
+           id="image310"
+           transform="scale(2.2195412)"
+           height="452.51001"
+           width="678.47998"
+           y="0"
+           x="0"
+           xlink:href="data:image/jpeg;base64,/9j/4Q05RXhpZgAATU0AKgAAAAgADAEAAAMAAAABCTsAAAEBAAMAAAABBigAAAECAAMAAAADAAAAngEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAApAEbAAUAAAABAAAArAEoAAMAAAABAAIAAAExAAIAAAAkAAAAtAEyAAIAAAAUAAAA2IdpAAQAAAABAAAA7AAAASQACAAIAAgAC3GwAAAnEAALcbAAACcQQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkAMjAxNTowNzowNiAwOToxNzowOQAABJAAAAcAAAAEMDIyMaABAAMAAAAB//8AAKACAAQAAAABAAAJO6ADAAQAAAABAAAGKAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAFyARsABQAAAAEAAAF6ASgAAwAAAAEAAgAAAgEABAAAAAEAAAGCAgIABAAAAAEAAAuvAAAAAAAAAEgAAAABAAAASAAAAAH/2P/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAawCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A4lJJJdK5SkkkklKSSSSUpJJJJSkklOip999WPUJtue2utvi55DGf9JyBIAJOgAsnwSASaHVgkpW1vpusosEWVOcx7fBzTseP84KKQIIBGoOoUQQaPRSSSSKFJJJJKUkkkkpSSSSSn//Q4lJJJdK5SkkkklKSSSSUpb3QPqxb1QG82UuxvSsHtsl7Li1zMdt1Qiyvbb+l/c2MWE9j2EB7S0kBwBES1w3sd/Vew7lf6b1zN6VTYzALabrntdZeQHOLa/5uhrX+xte9z32/6RU/iEeayctKPJTjDPKhGc/5sRl88uKPqj6PklD3GbAcccn64ExHQb2gz+n39Pv+z5D6nXAfpGVPFmw/uWOZ7W2fyFp/VbqePgZNlmb6JxKWOuG+pr7vV9raWYT/AOdbc9/8v0vT32fo/wCcWTmZAysu3J9NtRvcbHVsnaHO91myfzHWbnNb+Ygp2XlvvPKexzPzZIAZTACJjKXz+3/OcEo/LCXFNEcgx5eOA0ifTf7Xb+tPUsfOymWYXojEuY279HU1l3qnc29ua+PVdeyzd+f6Xp+nZ+k/nFm9P6df1G/7PjPqbeR7GWvFe8/u1F/tc/8AkKsj4WSMTLpyvTbcaHCxlb52l7fdVv2/SYyza/Z+elj5Y8tyns8t82KBGIzAlxyj8nu/zfHKX6cv1ajkGTLx5BpI+qv2Ot9YPqzb0si8WVNxvTrDd1kWPtDGMyG1U62P3Xbrf3GMesJaHUut5vVKam55bbdQ5xrvADXbX/Tpe1gDHM3ta+r/AEaosY95IY0uLWlxgTDWjc939VrUOQjzWPlox52cZ543GU4fzcox9MJcUvVLih6pyn7ac5xyyfqQRE9DuxSSSVthUkkkkpSSSSSn/9HiUkkl0rlKSSSSUpXejsxruoU42TjOy2ZL21BjHmt4LyG+pW9vt9v7tn/QVJOHFpkEg6iRpoRDv+imZYGeOcBIxMokCUTKEoy6S4scoT/xZroS4ZA1dHZ6363M6I3FpycKluU4j7E3JrtJqq9AD02PZWf0t/pfzXqO+gz/AAi5FIEgFoMNMSBwY+j/AJu5JV/h/JnlOXGA5Z5+EmsmWUpT4T8salKcYcHyfq+CDJnzDLPiERDT5YqSSSVthUkkkkpS6/6pN6G7DuvzaWYjnD7A7Jstd6d3rj9Kytlh/Q3ens9X0/3/APBLkEiSQAdQJgHgT9L/ADlT+Icn98wHB7s8HEQfcxSlGdDcemUYz4v9Zxs3L5vanxcInptJudXbj19Qux8fFOGzHe6o1ue6x5LCWufY9/t93/B+xU05JJkkk8SdeNAmVnFAwxxgSZGIAMpGU5SP73Fklkyf482OcuKRNVZ2UkkknrVJJJJKf//S4lJJJdK5SkkkklKXX9H+rnS8zoObkV5T3Mu2zc+iH45xz69zfTZZZ6+9h/wL1yCtVdT6hS7FdTkPrODP2YNMBm4l9vs+i/1nO/Tep/O/zb/0ao/EuW5nmMUYctn+7TjOOQyqMhL2v1uOPqhk/wAvjxf4HHx+/wDzGSfl8mPHImcOMEGP+N6UF4xxa4Yz32Uj6FljQxzh+8a2us2f56gl8o8hwkroFACya6n5j58LCdSeikkkkUKSSSSUpExxjG1oynvqpP07K2h7m/yvTc6vf/noacGCDAMGYIkaeIQkLBFkWNx8w8uLiSDRBOr13Xfq50zB6JhZFuTY1tALBYyiX5Dr3HJq3MfZX9n2N3/zv5n8tcgrNvUs+45JuvfZ9tIOTuMh5aQ+txafa11W39Fs/m2fov5pVlS+G8tzPL4ZQ5nP95ySnLJx1GIj7v62cfTCH+Xnl/wP8z/MY5eYyY8kgccOAAAf4vpUkkkrzCpJJJJT/9PiUkkl0rlKSSSSUpWcDBsz7xjU2VV2u/mxc/0w8/6NjyNnqfyVWRcW8Y+TVkGttvovFgrf9FxadzBZH5m/6bUzLx+3P29MnCeDr6/0f3f+kuhw8Q4vlvV2uv8A1Xf0xleQLaWU+jWHh74e+8NDchtFUOfbvs/SLAWh1Hrud1ShlfUC2+2qx1lV8Br2teP0tEMhjqXObW9n59exUWMfYdrGlxAc4ga6NBse7+wxrnqt8PhzePlhHnZxyZo3xTh/N8EfllxS9XyfPKfAyZzilkvCCInp14mKSSSuMKkkkklKXQdB+q7+p1W5BtpfUaLBUGWS9uQRGOzIr2h9Wx/vWC9j63bXtLXQ10HQw4Cxjv7bHNer/Tuu5/S6HVdPLabLLW2W3wHOcGCKqPf7W0t/SPd+fZ6ip/EIc3k5cjkpxhmkRwzn/N8B+aXFH1fL8nBx/wDds3LnFHJeYExA268TWzsKzByDj22VWWt/nBS/1A0/6N7wAz1P6qromTc2/ItvbW2oWvL/AE2fRaXHc5rP5G76CGrOLj9uPuG50OPp6/0v3v8ApMc+HiPD8t6KSSST1qkkkklP/9TiUkkl0rlKSSSSUpJJJJSl1n1Q/Ygouys+ivGdTGN9sstcK7DkB7H1elYdjLvS/nPT/wAF/olyaUkgA8CSB21+l+RVOf5P73y8sHuzw8ZF5MUpRnw/px9Moxn7kP1f63jx/wBRlwZfanx8In/VkG/1yvGo6ldiY2KcNmM91W1z3WOftP8AOvdYdvvb7q/T/M/0ij03pGd1G6ltNFrqLLW1WZDGFzGSW73WPHtZ6bHb/cqRJPJmABr4DQLS6F1b9kZNuW0OssNTmVVBxbW57iA12VH06qW77Nn+l/0f00s0eYxcmY4D7vMQgIwOUyn7uX5blPLOU/VP9LJknwJiYTzXP0wJs1pUUPUek53T7bW30WMpZa6qu97C1j9pdtdW9w2v3sbv9qJ0KrFyOpU4eVinLZlOFcNe6tzJPuua6s7XNrZufY2z8z9xP13qv7Xy68wh1dhqayyouLmMe2Wu+yz9Cm1uyzZ/pfU+n9NZwJHBiQQY8DoQlijzGXkxHOfZ5icDGRxGUPZy94zxZIzlwT/zeSHuKlLHDNcPVAG9f0o/4T1f1wPRXU05eBTXkuyJo+2V2uNdZxwysVejWdjrvS2bHWez0f8ASrlEpMEToYJHaRx+VJLkOT+6cvHB7k83BdTyylOfB/k4+qUuD24fq/1XBj/1aM+X3ZmfCIX0iFJJJK2xKSSSSUpJJJJT/9XiUk+n+spaf6yulcpZJPp/rKWn+spKWST6f6ylp/rKSlkk+n+spaf6ykpZJPp/rKWn+spKWST6f6ylp/rKSlkk+n+spaf6ykpZJPp/rKWn+spKWST6f6ylp/rKSlkk+n+spaf6ykp//9n/7RUKUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAA8cAVoAAxslRxwCAAACAAAAOEJJTQQlAAAAAAAQzc/6fajHvgkFcHaurwXDTjhCSU0EOgAAAAABCwAAABAAAAABAAAAAAALcHJpbnRPdXRwdXQAAAAFAAAAAFBzdFNib29sAQAAAABJbnRlZW51bQAAAABJbnRlAAAAAENscm0AAAAPcHJpbnRTaXh0ZWVuQml0Ym9vbAAAAAALcHJpbnRlck5hbWVURVhUAAAAFABPAFAAVgBNAFcAUwBQAFIAVAAwADEALQBPAFAAUABSAFQAMgA4AAAAAAAPcHJpbnRQcm9vZlNldHVwT2JqYwAAAAwAUAByAG8AbwBmACAAUwBlAHQAdQBwAAAAAAAKcHJvb2ZTZXR1cAAAAAEAAAAAQmx0bmVudW0AAAAMYnVpbHRpblByb29mAAAACXByb29mQ01ZSwA4QklNBDsAAAAAAi0AAAAQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABcAAAAAQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENib29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAAAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb+AAAAAAAAAAAABHcm4gZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG/gAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAAAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFLAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA+0AAAAAABAASwAAAAEAAgBLAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANZAAAABgAAAAAAAAAAAAAGKAAACTsAAAASAGYAbABhAGcAXwBlAHUAcgBvAHAAYQBfAHIAZwBiAC0ASABSAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAk7AAAGKAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAGKAAAAABSZ2h0bG9uZwAACTsAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAABigAAAAAUmdodGxvbmcAAAk7AAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQRAAAAAAABAQA4QklNBBQAAAAAAAQAAAABOEJJTQQMAAAAAAvLAAAAAQAAAKAAAABrAAAB4AAAyKAAAAuvABgAAf/Y/+0ADEFkb2JlX0NNAAL/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABrAKADASIAAhEBAxEB/90ABAAK/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwDiUkkl0rlKSSSSUpJJJJSkkkklKSSU6Kn331Y9Qm257a62+LnkMZ/0nIEgAk6ACyfBIBJodWCSlbW+m6yiwRZU5zHt8HNOx4/zgopAggEag6hRBBo9FJJJIoUkkkkpSSSSSlJJJJKf/9DiUkkl0rlKSSSSUpJJJJSlvdA+rFvVAbzZS7G9Kwe2yXsuLXMx23VCLK9tv6X9zYxYT2PYQHtLSQHAERLXDex39V7DuV/pvXM3pVNjMAtpuue11l5Ac4tr/m6Gtf7G173Pfb/pFT+IR5rJy0o8lOMM8qEZz/mxGXzy4o+qPo+SUPcZsBxxyfrgTEdBvaDP6ff0+/7PkPqdcB+kZU8WbD+5Y5ntbZ/IWn9Vup4+Bk2WZvonEpY64b6mvu9X2tpZhP8A51tz3/y/S9PfZ+j/AJxZOZkDKy7cn021G9xsdWydoc73WbJ/MdZuc1v5iCnZeW+88p7HM/NkgBlMAImMpfP7f85wSj8sJcU0RyDHl44DSJ9N/tdv609Sx87KZZheiMS5jbv0dTWXeqdzb25r49V17LN35/pen6dn6T+cWb0/p1/Ub/s+M+pt5HsZa8V7z+7UX+1z/wCQqyPhZIxMunK9NtxocLGVvnaXt91W/b9JjLNr9n56WPljy3Kezy3zYoEYjMCXHKPye7/N8cpfpy/VqOQZMvHkGkj6q/Y631g+rNvSyLxZU3G9OsN3WRY+0MYzIbVTrY/ddut/cYx6wlodS63m9Upqbnltt1DnGu8ANdtf9Ol7WAMcze1r6v8ARqixj3khjS4taXGBMNaNz3f1WtQ5CPNY+WjHnZxnnjcZTh/NyjH0wlxS9UuKHqnKftpznHLJ+pBET0O7FJJJW2FSSSSSlJJJJKf/0eJSSSXSuUpJJJJSld6OzGu6hTjZOM7LZkvbUGMea3gvIb6lb2+32/u2f9BUk4cWmQSDqJGmhEO/6KZlgZ45wEjEyiQJRMoSjLpLixyhP/FmuhLhkDV0dnrfrczojcWnJwqW5TiPsTcmu0mqr0APTY9lZ/S3+l/Neo76DP8ACLkUgSAWgw0xIHBj6P8Am7klX+H8meU5cYDlnn4SayZZSlPhPyxqUpxhwfJ+r4IMmfMMs+IRENPlipJJJW2FSSSSSlLr/qk3obsO6/NpZiOcPsDsmy13p3euP0rK2WH9Dd6ez1fT/f8A8EuQSJJAB1AmAeBP0v8AOVP4hyf3zAcHuzwcRB9zFKUZ0Nx6ZRjPi/1nGzcvm9qfFwiem0m51duPX1C7Hx8U4bMd7qjW57rHksJa59j3+33f8H7FTTkkmSSTxJ140CZWcUDDHGBJkYgAykZTlI/vcWSWTJ/jzY5y4pE1VnZSSSSetUkkkkp//9LiUkkl0rlKSSSSUpdf0f6udLzOg5uRXlPcy7bNz6IfjnHPr3N9Nllnr72H/AvXIK1V1PqFLsV1OQ+s4M/Zg0wGbiX2+z6L/Wc79N6n87/Nv/Rqj8S5bmeYxRhy2f7tOM45DKoyEva/W44+qGT/AC+PF/gcfH7/APMZJ+XyY8ciZw4wQY/43pQXjHFrhjPfZSPoWWNDHOH7xra6zZ/nqCXyjyHCSugUALJrqfmPnwsJ1J6KSSSRQpJJJJSkTHGMbWjKe+qk/TsraHub/K9Nzq9/+ehpwYIMAwZgiRp4hCQsEWRY3HzDy4uJINEE6vXdd+rnTMHomFkW5NjW0AsFjKJfkOvccmrcx9lf2fY3f/O/mfy1yCs29Sz7jkm699n20g5O4yHlpD63Fp9rXVbf0Wz+bZ+i/mlWVL4by3M8vhlDmc/3nJKcsnHUYiPu/rZx9MIf5eeX/A/zP8xjl5jJjySBxw4AAB/i+lSSSSvMKkkkklP/0+JSSSXSuUpJJJJSlZwMGzPvGNTZVXa7+bFz/TDz/o2PI2ep/JVZFxbxj5NWQa22+i8WCt/0XFp3MFkfmb/ptTMvH7c/b0ycJ4Ovr/R/d/6S6HDxDi+W9Xa6/wDVd/TGV5AtpZT6NYeHvh77w0NyG0VQ59u+z9IsBaHUeu53VKGV9QLb7arHWVXwGva14/S0QyGOpc5tb2fn17FRYx9h2saXEBziBro0Gx7v7DGueq3w+HN4+WEednHJmjfFOH83wR+WXFL1fJ88p8DJnOKWS8IIienXiYpJJK4wqSSSSUpdB0H6rv6nVbkG2l9RosFQZZL25BEY7MivaH1bH+9YL2Prdte0tdDXQdDDgLGO/tsc16v9O67n9LodV08tpsstbZbfAc5wYIqo9/tbS39I9359nqKn8QhzeTlyOSnGGaRHDOf83wH5pcUfV8vycHH/AN2zcucUcl5gTEDbrxNbOwrMHIOPbZVZa3+cFL/UDT/o3vADPU/qquiZNzb8i29tbaha8v8ATZ9Fpcdzms/kbvoIas4uP24+4bnQ4+nr/S/e/wCkxz4eI8Py3opJJJPWqSSSSU//1OJSSSXSuUpJJJJSkkkklKXWfVD9iCi7Kz6K8Z1MY32yy1wrsOQHsfV6Vh2Mu9L+c9P/AAX+iXJpSSADwJIHbX6X5FU5/k/vfLywe7PDxkXkxSlGfD+nH0yjGfuQ/V/rePH/AFGXBl9qfHwif9WQb/XK8ajqV2JjYpw2Yz3VbXPdY5+0/wA691h2+9vur9P8z/SKPTekZ3UbqW00WuostbVZkMYXMZJbvdY8e1npsdv9ypEk8mYAGvgNAtLoXVv2Rk25bQ6yw1OZVUHFtbnuIDXZUfTqpbvs2f6X/R/TSzR5jFyZjgPu8xCAjA5TKfu5fluU8s5T9U/0smSfAmJhPNc/TAmzWlRQ9R6TndPttbfRYyllrqq73sLWP2l211b3Da/exu/2onQqsXI6lTh5WKctmU4Vw17q3Mk+65rqztc2tm59jbPzP3E/Xeq/tfLrzCHV2GprLKi4uYx7Za77LP0KbW7LNn+l9T6f01nAkcGJBBjwOhCWKPMZeTEc59nmJwMZHEZQ9nL3jPFkjOXBP/N5Ie4qUscM1w9UAb1/Sj/hPV/XA9FdTTl4FNeS7Imj7ZXa411nHDKxV6NZ2Ou9LZsdZ7PR/wBKuUSkwROhgkdpHH5UkuQ5P7py8cHuTzcF1PLKU58H+Tj6pS4Pbh+r/VcGP/Voz5fdmZ8IhfSIUkkkrbEpJJJJSkkkklP/1eJST6f6ylp/rK6Vylkk+n+spaf6ykpZJPp/rKWn+spKWST6f6ylp/rKSlkk+n+spaf6ykpZJPp/rKWn+spKWST6f6ylp/rKSlkk+n+spaf6ykpZJPp/rKWn+spKWST6f6ylp/rKSn//2QA4QklNBCEAAAAAAF0AAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAAXAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBDACAAMgAwADEANAAAAAEAOEJJTQQGAAAAAAAHAAgAAQABAQD/4Q83aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNCA3OS4xNTY3OTcsIDIwMTQvMDgvMjAtMDk6NTM6MDIgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBJbGx1c3RyYXRvciBDQyAyMDE0IChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNS0wNy0wNlQwOToxNjoxMyswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTUtMDctMDZUMDk6MTc6MDkrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTUtMDctMDZUMDk6MTc6MDkrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgeG1wTU06UmVuZGl0aW9uQ2xhc3M9InByb29mOnBkZiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpjNTllMmJmYS0wNzRjLTRiN2ItYmMzZi0xNmM0N2FlMWQzZWMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2ZlOThkODktM2RiZS00ZWE3LWJmNDYtNmYyMTQyN2MzZjAyIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InV1aWQ6NDg2MGMwNzEtYmZhMi1iNTQxLWEzZjAtZTM0MzRhNTBhMjQxIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InV1aWQ6YzU1ZjZlZjQtNzUzYS1iZTQxLWFhNzctZjY0YTNmNmMxN2MzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjQ4NjBjMDcxLWJmYTItYjU0MS1hM2YwLWUzNDM0YTUwYTI0MSIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjQ4NjBjMDcxLWJmYTItYjU0MS1hM2YwLWUzNDM0YTUwYTI0MSIgc3RSZWY6cmVuZGl0aW9uQ2xhc3M9InByb29mOnBkZiIvPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNTllMmJmYS0wNzRjLTRiN2ItYmMzZi0xNmM0N2FlMWQzZWMiIHN0RXZ0OndoZW49IjIwMTUtMDctMDZUMDk6MTY6MTMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIElsbHVzdHJhdG9yIENDIDIwMTQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjdmZTk4ZDg5LTNkYmUtNGVhNy1iZjQ2LTZmMjE0MjdjM2YwMiIgc3RFdnQ6d2hlbj0iMjAxNS0wNy0wNlQwOToxNzowOSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMjEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/7gAOQWRvYmUAZEAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgEBAQEBAQICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAwMDAQEBAQEBAQIBAQIDAgICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCAYoCTsDAREAAhEBAxEB/90ABAEo/8QA4AABAQACAgMBAQEAAAAAAAAAAAoICQYHBAULAwIBAQEAAgIDAQEBAQAAAAAAAAAACQoHCAUGCwQDAgEQAQABBAIAAwYEAQgHBwMCBwACAQMEBQYHERIIIRPTlhcJIhQVVjFBMtUWl1gZGiMkVeanGGhRYULSM9RXQyUmcVKDNXI0RFQKEQEAAgIBAgQCBQYGDAsGAQ0AAQIDBAURBiESBwgxE0HRFBUJUSKSU5NUYTIjlBkKQlJi0jPUlRZWVxgacUPTJKXV5Wam5heBgjREVWdyc4NkJZY1kWOERaOkhf/aAAwDAQACEQMRAD8Al6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdw8D6S5r2J1v3V2nx/Epe4t0VpOH7nmV6kLly/GPNuW2OJ6XHx7dulfb4zycq7Kta+S1j3JVp5aSlHCPqL6/dhemXqn2F6QdyZpx8v6h7XJavGV61rSZ4rjcvI7V72mfh0rg18dY/j5tnFSJ801pfufAdj833F21zfdXH082rwOPXybM+Mz/znYrgxxER/wAN8lp+imO09OkTMdPM3OmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABW/9qj0majY/bu53qOa4fuZ+rS1zi5sbl7HpHMweHX9Zd4HxS5ClaxlWtuVnK3GFcpKlafmYTjWlfCqlr+MT7zea438Tnt3muws/nj0YtxVcEVv1xZeTpnx8vyET8YiLxl1+N2qTExP2TJS8WjrCXj2oekuns+3Tf0+ap0nu77VN5mv51deaW1cE/l8JrfYxz18Pm1mJj4pP+Vca3PC+T8k4dyPElr+Q8T3244zvcCVfx4W50WwuavaYk60/jW3ftThX/8ARcm7P7r4LvztLi++O188bPG8zqa29qZo+GXV28NNjXyR/BfFkpaP+FExyvGbvCcps8NyNJx7GplyYctJ+NcmK80vX/3bVmP/AGPQOyOOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy/gPC932RznhfXnG7NMjkXO+V8f4borEq1pG7uOTba1ptbGdf5I1vXoeav8lPa6X6j9+cD6W+nnPepvdV5xcZ27x27ye3ePjXW0dbJtZ5iPpmMeK3SPpnpDmO3+E3u5Oe0+3eMr5tjfz4dfFH5cmbJXHSJ/g81o6vog9b8F0nV3XvButuNW62eP8B4lx3h2lhOMI3K6zjmqtajEne8nhStycLVJ3JfxlOta18a1eZB6peofP+rfqX3B6qd1Wi/Jdx8ju8ntTEzNfn72xk2cla9fGKVtkmtI/saRWsdIhYq7Z4DQ7W7e0e2uMjpr8fr4dfH+XyYcdcdZn+GYr1mfpmZlHT95PpX6S+tXlnIcHCjice7o0Wn7P1tbEfDHpuMyE9FzC3KdI0pW/c2eFf2F6PjWtKZcJVr+Ki8P+Bj69/8ArP7DeG7Z5HYnNyfYe3s8Dn88/n/Zsc12+MtEdZn5VNHaw6eKfCJnTvWI/MmUN3vN7I/zR9a9vkdekU1+bxY92nSPD5luuLYj/wDFbNitltHj/hYn6WqVMY1OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt2+yv0lHtP1ka3meyw/zHHukOLbfn96d23KWLc5PmeXi/EsOdY+2l6F7Mv7Ox/CnjhV8a+ykZQp/jzevl/SH2M7fYnE5/lcn6gchrcPWKz0yRoYuu/yWWOvhOO2PWxaGb4z5d+IiPGbV3A9lHY8d0+s2Lmdmnm1+CwZNuev8Wc9umDXrP8AdRbJbNT6OuCes/RNl6iymfaM/vv9JXOaenHhHc+txq3tl0tzT8nubsbNK1tcM7H9xpczIvXoUrL/AEe3x9NbhGX4aUvXK+NK+yVhH+ruevmPsP3R9wehPK5opq9+cX83WrNv43KcJ83axUrWfD8/js3J3vMfnTODHHSY8a6Je/Psiea9ONHvPVp1y8Ls+XJMR8Nbc8uO0zP8GxTXiInw/PtPWJ+Mky6CiNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFeX2LulP6ielvkPbWwwo2N13fzjMysHKrDy3r3COBVucY0du5SVKSp4bSu9ux9vhWFyEqfx8a0oP6wp69f+ovu+4z0Z4zYnJoen/FYseXH161ryvL+Tf27V6TMeOhHE47eHmrkxZKz8OkTAexPsn7g9K9nu3YpFc/O7NrVt9M62r5sGKJ+n/D/arR9E1tWY/h3ZoDG77p31BdUa/vTpDtTqDZTt2bHYfB+Q8Zx8q5/N1+1ztfOml21K+Ffbh5scfKj4xrTzW6eNK09jOXtr9ZOS9vXr/2d628VE3yds8tpb18dfjm18Oav2rX+MeGzqzm17dJifLknpMT4x0z1C7Swd99jct2dtdIryOrmwxaf7C9qT8rJ9PjjyeS8eE+NfhL55u31Wx0W12ej2+Jdwdtp9hm6raYN/y0vYWx12VLEzcS97utaee3chKEvCtaeNP4vTM4XmOM7i4bU7g4TNXZ097Di2NfLXr5cuHNSuTFkr1iJ8t6WraOsRPSfGFd3b1NjQ28ujuUnHlw3tjvWfjW9Jmtqz/DFomJeuco+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe745x/b8t5DouK8fw7ux33Jtzq+P6TX2KVlez9vuc6Gu1uHZjT21ldvXIQjT+WtXA909y8L2Z2zyPeHcmeurx3E6uxubWa3hXDrauK+fPltP0Vx4qWvP8EPv43jtzluR1+J4+k5NjayUw4qR8bZMlopSsfw2taIj/hfQ76V6z1nTHUPWXU2nlbu6/rrg/GeH28q3ajZ/ULui1NrAy9rctx/+plXoXMm7X+NZzlWvtq8yf159V+W9dvWvuz1m5uJps90ctv8lbHNvN8mu3s5M2PXrP8Aaa+O1MGOPhFMdYjwhYm7J7Y1eyuz+M7S0564+N1cGvFojp55xY60teY/LktE3t+W1pl2exG7UAiH+7V0jDpX1tdm1wMSmLx7tWGD3DoowhKMKy5lcuw5V4VrSkf/AOeYu0lGMPZGEoU9n8F/n8F/1+t69ewXtSOSzTm5Ps6cvbW3MzEz04yMc8f9Pm//AHTn4+s2t42yVyT4/FB17uex47J9b+TnXp5NfloryOL/APqJt8/+D/4qmeYiPhWataSVlrKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbSPs+dJV7h9bHBttm40r/Hum9dsu29vWvhCH6hoZW9Xw+3C5L2UuR3OZg5VIUpWsoWLnh4UpWUYh/xvPXyPRD2E9w8LoZYx8n31nwdua3xmfk7cZM/JWmsePktxmtt682mYrXJsYuvWZittqPZ12P8A55etuht56+bX4al9/J+Tz4vLTXjr+WNjJiydPjNcdunwmYtdUJU24ADQJ9+/pWnIen+qe+NdhUnsut+W5XCeR37NulLteLc5xqZOuy8274e21ibLBtWLVPH2Tz5eFK+ataWR/wCrkevc9s+uHePt35XP5dXunjsfK6VLW/N+8OJvNM+PFX6Mmzo7eTNknp44+Or1mPLWJj79/fZH3h2bxPfmtTrl43YtrZpiPH5G1HWlrT/a482Kta/ktnn8spVVwtFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYn2Gek48U6D7E7x2OH7va9t80hx7R5NyFZVnw3ry3PEpkYtyX82l/b5ezs3qRp4Sri26yrWsaUjTV/rFnr5bvH3H9se37i8/m0+y+Mnc26RPTpyfNTTLNMkR/GnFxuvoZMU28axuZYrERa03lo9hHY8cT6f8AI98bNOmXl9n5WKZ+nW1ImvWs/R5tjJnraI+Pyq9ZnpERvhV12+4ADHz1XdOWfUD6cO5unZ2bV7M5vwLdYOg9/wC79zY5dgWabnhebd8/hTy4+2xsK/KnjSvhD2SjX8VNmPZ1645/bX7o+xPW+l7Uwdv8vq5tzydfNfjstvs3KYq9PHzZuOz7WKPC3Sb+NbR+bOOvVfsyvqF6b812baOt97VyVxdfhGxWPma1p6/RTYpjtPw+Hxj4vnyZGPfxL9/FyrF7Gysa9PHycbIhOzfxr9mdbd6xfs3KUlCcJUrGUZUpWlaVpWni9LLW2dbd1se5p5K5cOWtb0vS0Wpeloi1b0tWZratqzE1tEzExMTE9FerJjy4stsWWs1tWZi1ZiYmJiekxMT4xMT4TE+MS/B9D8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/1pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkn6ZfVj3Z6SucW+b9Pcpu6338rMORcS2n5jYcK5jg2ZeamDybQxuW43fLSsqWcmzO1k2PNKti/arKVa6r+6/2a+gfvP9P7dg+t/D12pxxadLkdfyYeU4zLaP8Lo7k0vbH1mKzkwZK5dTY8tI2NfLFaxGTPTH1a739I+djm+zdr5fmmPna9+t9bYrH9jmxeaIt9PlvWa5adZ+XevWetfnoj+5L0l6y9ZjaPEyLXXnc+Lh1vbrq3fbHHnkZ9bFutzK2PBdpOlqm2xIxjWdyMbUMmxSkq3rEbdI3rlJX3+fhY+vnsX5bL3Bt47dzdiZcvl1e4NPDeKYfPaK48HLa8Tknjtm1pilJtkyauxM1jBsWyzfDjmE9D/cr2R6z61dHDb7u5qleuTRy3iZt0jra+rk/N+0Y4iJmYitctI6+fHFel7bFkX7Y8AAAAAAAAAAAAAAAB0j356iuoPTLwPM7E7k5hg8W0Vj3lnX4s/Nl73kmzharctaXjOkseN/MyrnhT8FuPkt0r7y9O1ZjO5HYD25e2P1s91/qJg9MfQ3hMvMcjk8ts146Y9TRwTaK22t/av0xa2vT+2vPnyWj5WDHmzWpit0Xv71G7Q9MeAv3H3nuU1MFesUj+NlzX6dYxYccfnZMk/kiOlY/OvatIm0SL+uz7pfbvq6v7Pg/FY53VfRHv5WrPDMHNpXkHMcezd/1fN7C2+JWlL1J+FLlNVjy/KWq+FJyy7luORW6n+Hj+EJ6LeyrBqeoPeM4u7/AFF8kWtyeXF/zPjL2rHnxcNrZImcc16zSeQzR9szV81qV08eW+tEQvrx7qe7vV++XguJi/FcD16RrVt/K7MRPhbbyV/jdf43yKT8qk9ImctqxkasEv7VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsR7+9F+f1D6JPSf6k5YmTDZdtZ/Kqc589Zys4mLyen9YOnpWIy8K+XL0uFmZNyXhSlJThGla+ysoxvbd77uO9a/f36ze1iueltTsvDx/3T06RbLk0P+Z9yxfp4TOvym1rYKV6zaa472mI8a12M9QfRXY7P9EO0vUqaTGTl75/tXX4Vrn/luO6fwX1seS8z8OtoiOvxnXck5a5gAAAAAAAAAAAAAAAAAAAAPZanbbXQ7PX7rRbPYaXc6nMx9hq9vqc3J12z1ufiXaXsXPwM/DlC7ZvW5xpO3dtzpKNaUrStK0cXzPC8P3HxOzwHcGph39DcxXw7GtsYqZ8GfDkrNcmLNhy1tjy471ma3petq2rMxaJiX06m5t8ftY97Ry3wZsVovjyY7TS9L1nrW1L1mLVtWfGLRMTE+MSpB9Bn3qvZpuqvWRm+z/Qa3Q97YuF/3e7xsfs3V6+3/wD02/1nDtf/ALZZln/1sxVr/EV/AY/+O9YvYzg/t8+32lky/wDvZL8FsZr/APDf7s2cn9tXRzf4DRSS+gfvZ/wPafrLf8lMXKVr/wCysbuOkf8ABH2jHX8k5qfx8ykHU7fVb/Wa7daLaa/daXbYePn6vb6nOxtjq9ngZVul7Fztfn4cp2r1m5CtJ27tudYypWlaVrSqrXzPC8x27y2zwPcGpm0N/Ty3w7GtsYr4M+DNjtNcmLNhy1rkxZKWia3petbVtExaImEk2pt6m/rY97Qy0z4c1YvjyY7Rel6WjrW1L1ma2raPGLRMxMeMS9i4l9YAAAAAAAAAAAADVN67fupdSekuzteB8JrrO1e+oWruPTieFm1ucY4PlzjWFrI7E22BPxhdhWlJ/o+NOmXOlKUuyxIXLd+sxn4eH4PnrV7zs+n6id+RsdnenNrVv945cXTe5XHExNqcLr5q9L47x1r9556TpY7dZxV3cmLJrxqd68e6ztD0kpl4HhfJy3PxEx9nrbrh1bfRO3krPWLRPj9npMZrR0804a2reZHO9/UJ276leeZ3Y/cfMNhy3kGV57WFavSpj6bj2sldrds6TjOlseFjCxLVZey1ZhSs5eNy7K5dlO5K6d7dvbT6Le1T061/S/0O4PDw3GYulstqx59rdzxWK22t7av1zbWzeI8cmS0xSvTFhriw0pjrER376h93+pfP5O4+89y+3s26xWJ8MeGnXrGLDjj8zFjj+1rHWZ62vNrza09LM8OkAAAAAAAAAAAAAAAAAAAAAMp/RT0bT1HeqTpjqPKw7mZoeQcww8/mNqHv4RrwjjVufJeYWrmRjyhKzW9r8S/jWrvnpWl25bpHxlWNK6g+/f3BT7XPaF33606eeMHI8bxuTDxlp8kzHK71q6PG2rS8WjL8rc2MOfJj8tonDiyTbpSLWjK3ol2L/wCpPqpwvaGWk319jYrfYjxj/muGJzbETaJia+bFjtStusdL2r08ZiJ699QvVGw6K7y7X6h2UbtbvX3OuQ8cxb13xrLO0+HsJV0G1pWUY1rHMwZY+VCtY0rWNyla0pX2Ml+2X1k433De3zs31t4ya+TuXidLdyVr8MWzkw1jc156TMRbW265te0RMxFscxEzHjPXfUTtLP2H31y3Z+zE+bjtrNhrM/2WOt5+Vk+jwyYppePCPC0eEOmmc3SwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2h0p1ltO6O3us+pdNOVnY9i8341xC1lRhS5TX2t5tbWDl7S5brWnjbxbMrmTc/7IQqxJ69+rPE+g/on3Z6z85WL63a/Fb3JWxzPl+dbU18mXHr1n6L7GWtMFP7vJV2rsjtfa717w4ztHSnpk5LZw68W6dfJGXJWtrz/AAY6zN5/grK2D16enPT9o+hftDqLjWqs2Z8F6+w+Qdb4FiEp3cHYdU4dvb6PV66EaV/0mVh4d3Ux8aeHlyJU/D/OpQh/Dn90HOekP4hHaPrV3VuWvXuHmMunzea8xFcuHuHLfW29jPMzH5mvs7NOQt0nr59as9LfxbTbevnpxp91ehXKdocZh6ToalcunSI6zW+hWMmLHT+G+PHbBH8GSfh8YhPehygfAAAAAAAAAAAAAAAAAAAAAAAbFfRF9yXu30abTG0eJfu9hdMZWXW7uurN9sci3jYNMi7W5lbHg2znS7XU5cpVlO5GFqeNfrWVb1iVysbtuML3+/hY+gfvp4nL3Bt469s994sfl1e4NPDSb5vJWK48HLa8TjjkdatYilJtkx7WvEVjBsVxRfDk2O9EPcp3v6MbVdHDaeR4W1uuTRy3mIr1nra+rk/O+z5JmZmYitsV56+fHNul619+mb1Z9JerXhMOZ9PcphsZY1uxTkXEtpSxr+acOzb9K0jg8l0UblytvxlGVLWTZuXce95ZVsXrlKVrSkt7sPZn6++zDv8At2H638ROr82bzpcjrzbNxfJ4qTHXNo7c0pGTpE1nJgy0xbWDzVjYwYptETMH6YerfY/q5wcc32btRk8sR87Xv0ps69p/sc2LrPl+E+W9Ztiv0nyXtESyVapsnAAAAAAAAAAONcv5jxTr/jW55lzfkWn4nxXj+Fdz91v9/n42s1Otw7MfGd7JzMqUYR9vhGNPHxlKtIxpWVaUr2zsnsfvD1I7q0exuwOM2eZ5jkstcOrp6eG+fYz5bfCmPFji1rfTNp6dK1ibWmKxMxxPMcxxXb/G5uZ5zZx6mpr1m+XNlvFMdKx8Zta0xEfkj6ZnpEdZmITB+vT7z/I+wKbrqr0kZW14bwq5+Y1257iu2r2r5pyrHlWVi9b4XhZEaX9LhXKfihnXPJsJ0rGsYYMoypctsfh0fgR9r+m/2D1h96OHX53n6+TPq9s1tXPxfH3jy3rblMtLTi5TapPhbUp5+MxzW0WvyFb1nHF76+e9Tku4Pn9q+kV8mloz1pk5GYmmznjxiY1qzEW1scx4xlnpsWiY6RgmJi2gG9evZN67kZF27fyb925ev371yV29evXZee5du3J+NZTlWtaylWta1rXxqskYMGDUwU1dWlcePHWK0pWIrWtax0rWtY6RWtYiIiIiIiI6R4I/L3tmtOTJM2m0zMzM9ZmZ8ZmZnxmZn4y/F+z8wAAAAAAAAAAAAAAAAAAAAAFE32Buk/1HmfdHqE2eNKuPxnS67qzit6dPNj3dpyO/b5Hyy9al/JexMXE1tqlaV8fJmTp/KrFf1kP18+7Oxuw/bRxWWPm8ttZ+4OQrE9L119Kl9Hjq28fHHsZ9jevMTHT5mjSfoSM/h/dkfaea5v1D2aT5dXFTRwTPwnJmmM2xMfktjpjw1/8Aw5ph1b9+HpOfEPUTwTuzX41Y6juPhcNVt8iFn2V5n1z7rUX5378KeFPe6jI1ELMZ/ir7i75ayjGtIZd/q7Pr5Tvf2x9w+gfI5ond7G5SdjWpNvH7r5v5mxSKUnxn5fJYeRvltT82v2nDFora8Tfqvv07Htw/qLod769OmHmdb5eSen/zOn5cczMx/ba99eKxPjPy7dJmI6V0VrDDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbtPsXdKR576pORdtbHCuXtP0fwjLy8DJ93SdizzXntL3GdLbvVnSsfGuspvLsP5aTtwlTw8PFAb/WFfXu3p17ROL9GOMzxj3vUDlcePNTzdL24vh5x7+1avTx/+Onisdv7GceS9Z6+bo3e9ifZEc96qbPd2xSbYeD1rWpPTwjZ2vNgxRP0f4GNm0fTFqxMfBXhKMZxrGVKSjKlYyjKlKxlGtPCtK0r/IpRVtalotWZiYnrEx8Yn8sJf5iJjpL5/wB61Olf+Xv1T929T2MSuFpuPc42WZxSxSHkhDhfJYx5Pw23brSnhL3etzMa1OsfCnmhKnhTwrSnpK+wz14j3L+0DsD1k2M3z97k+KwYuQv16zPKaM20OTtP0x597Wz5Kxbx8l6T1tExaa+/rZ2V/wCnnqrznaWOnkw6+ze2COnhGtm6Z9eI+iemHJSs9PDzRMeHTpGLjbpioAAAAAAAAAAAAAAAAAAAAAAB2V1P2/2V0ZzbU9i9Tcx3HCOY6afmxNvp70Y+9sSrSt/A2eDkRnj5uJdpSlL+Hl2blm7T2ThKjFfrN6JelHuE7C3PTD1l4PW7g4Pejpk1tmsz5bRE+XNgy0mmfW2MfWZxbOvkxZ8U+OPJWXZu0u8e5+xecw9x9o7uTR3MM/m5Mc/GPppesxNMmO39ljyVtS0eFqyrD9Bv3d+tPUdTS9Z9310/VHd2RWzr8DLlkTxOvexM2dKW7P6Bn585fpuwvS/BTV5t6VLk/LTFyL07n5e3TW/EV/BS9Vfa7O/6regEbPeXYGOLZs2OKRk5nhcUeNvtmHFWv27Txx+dO/q4q2xU807etgx4vtOWWj0E933bHqRGDtnvj5fE85bpSluvl1Nu30fKvaZ+TltPh8jJaYtPSMWS9rfLruYQVN0QAAAAAAAGHHq69cvRfo14tTadk7uuz5lssK9kcR6x4/dxsjmHJrkJStWciWPOVIYOv95Ssbuxy/LbpSM42qX70aWZbzeyn8Pv3B++fu/7n9LNCNTg9TLWnJc9uVvTjNGJ6WtTzxWbbe58uYtj0tfzZbeals1tfBac9cL+sHrp2L6M8V9q7kz/ADd3LWZ19LDMW2M0/CJ8sz0xYvN4WzZOlY6WikXvEUmPr1i+vLvP1ncmrmc82v8AV7gGszL1/ifVfHcrKtcT0UKSrHGzNjSdYy2mzpbr5bmxy4+NK1nTHt41mfuaXdfY9+HR7e/Yn2n9i9O9P7z7k28Va8j3Du48duR256RN8WDpE10NGbx1ppa9ukxXHO1l289PnzDv6yevffXrRynzuey/ZuPxWmdfQw2tGDFH0Wv16TnzdPCc2SOvWbRjripPkjCZvuwgAAAAAAAAAAAAAAAAAAAAAAAAui+170nTo30U9OaXKwq4XI+caq52tyqk4+7yLu15/SO21kcu141rC7j6imswrkJeEqVseEqUl40p56/4uHr5b3B+/bvnntTYjY4vt/Zjt7j+k9aV1+H82tnnHb+yx5+R+3bVLR1raNjrWbV6Wmdj2t9kf5i+iXDaeXH5Njexzv5+vhM5Nvpkp5o+i1Nf5OKYnxiaeMRPWHVf3kOkadueizl3IcHErkcj6W3Or7R1VbUaVuy1ODKel5jYuXPDxpYhrM3Iz7kfZSssS3Wv81mD8Db1+n0W9+XCdtchmjHxffmtscBseafzY2M3l2uMvFesROW2/q4dSk/GK7mSI/jS6r7y+x47u9FNzkcFPNs8Jkx71OkePy6dcWxHX+1jBkvltH0zir+RFivkIUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmH2VulJdW+jbV8z2WDTG5D3dyncc9v3Lkawy48ZwpU4xxHEu1pXy1tSs4l/ZY/h7fLm1rWvjXyxos/jyevdfV73z7nYvF7HzeM7A0Nbh6RWeuOd/LE7/ACWSv0xkrl2cWjm6+Hm0IiI6R5rTP+yjsie1vRnFzezTy7HOZ8m3Mz/G+TX+Q16z/czXHbNT+DP4/kjbqhTbgJevv8dKS1nOumPUDrcOtMTlWh2PWHKsm1b8tm3ueM5E+QcWvZM6U8K38vEzM+1Gta+Pu8KlP4Rotx/1b317ry3p7337a+VzxObh9vDz3H47W62tq71K6fIVxx8Yxa2zraeS0fD5m/M/G0otvxAOyZ1ed4X1C1qfmbeK+jntEeEZMMzmwTafptkx5MtY+ny4Ij6ITvrN6OkAAAAAAAAAAAAAAAAAAAAAAAABSN9m/wBd3qI5/wBlaj0sc6972hwfE4tyDfYPN95scmfMuuNLx3Bp+VxsrZ3qXJbTW3Mu5h67HsZVaXseuRD3eRXHtQxqVY/xyvw7vbH6a+lW77vvT3y9o9wZ+Q09PNxWphpHGc3tbuWfmXx4Kzjjj92mtTZ3c2XBE4Nqutk+ZrRs5r7UyVezT159Ru4e5sPpVzvXldCmDLlps5bzOxp4sNY8sWvPmnPhtktjw0rfpfHOSvlyfLpGJS+qkpNQAAAAAGtP7o/q27W9IHQeo5l1PxvVZ285nyynBP647mn5/D4DlZ2mytrg7a3x6VutrNyLscXIjjfmp0x7dyEa3rWRGVLMpWfwifZb6O+9z3HbvYvrJyuxr8fwXHfe/wB2av8AJZeYx4trX18uvbci8X1cOO2xhnP8ik7OXFe0YMutak5q6ye6b1e7r9HuwMPNdpa1Mmfdz/ZftGT86upa2K+SuSMXSYyXtGO8U88/LraseeuSJ8kxZ8553zLszle65z2Bybc8w5dyHMnnbnkO/wA69sNnn5M/ClPeX79a1pbtx8Ldm1ClLdqFI27cYwjGNL4vp96d9i+lHZ2h6femvE6vB8LxmKMWrp6eGmHBipHx6UpEdb3nrfJkt5smXJa2TJe+S1rTCnzvPc13Py2fne4drLubmzabZM2W03vaf4Zn4REeFax0rWsRWsRWIhxJ3Rw4AAAAAAAAAAAAAAAAAAAAAAADID0rdOZPqB9RnTnT1i1O9j835zpsDd+Tz+exxTBu13HMc2Huq0lWuPqsbMv0pSVPGsP50f51NbfeD646vts9r/fPrfsXimXt/idnNq9enS/IZaxrcZinzeHTNyGfVxT1i3Tz/wAW0/mzkP0o7Ny+oPqPw3ZuOszXe2sdcvTr1jBWfmbFvDx/MwUyW+j4fGPi+g9j4+PiY9nFxbNnGxcazax8bGx7UbOPjY9mNLdmxYs26UjCEI0pGMY0pSlKUpSng80nZ2djd2Mm5uZLZcuW1r3ve02ve9pm1r3taZta1rTM2tMzMzMzM9VhfHjphpXFirFa1iIrWIiIiIjpEREeEREeERHhEPT8q4zpeacX5Jw7keJHYce5ZotxxnfYEvZDO02919zV7TDnX/suWLs4V/7qub7P7q53sTu3i++O18863JcNt629qZo+OLa1M1NjXyR/DTLjpaP+B8fK8bo83xWzw3JUjJr7eLJhy0n4Wx5aTS9f/eraY/8Aa+d9271zuOoO0+xerN/Ccdv15zTknD86c4eT81c4/truthm26RrWNbd+NuN+1KNZRlCcZRrWNaVr6bvop6ocJ62ekPbHq/25MTo9zcXo8liiJ6+Su5r4884rdYiYvhtecWStoi1b0tW0RaJiK63d/be52d3TyXavIRPzuO2c2vaZjp1nFktTzR/BeIi1ZjrE1mJiZiXXTKDrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzXrjgm77Q7B4P1txq3S7v+fct49w7SwlGcrX6nyPa2tRhzveT20txndpK5L+FI0rWvso6F6peofAekfpp3B6qd1WmnGdt8bu8ntTExFvkaOvk2cla9fCb2rjmtI/srzWsdZlznbXA73dHcWj21xsddjkNjDr4/yefNkrjrM/wRNusz9ERMvoicC4ZpeueDcN6+41Z9xx7gvFeP8AENHY/DStrUcb1NrT66E6R9njS1Zh4+H8avMf9Re+ue9T/UHnPUrunJ83k+4eQ3OS27+M+bZ3tjJs55jr49JyZbdP4FivgOF0u2+C0u3uNr5dbQwYtfFH5MeHHXHSP0aw5Y6U5hr3+6P0jPvT0UdvafAxa5fI+Ca6z2xxe3CEbt2mw4BSe021rGtVp4yu5Gnrs8SzGFaSrO7GlPN/MlJh+EV6/Y/b179eyed5HNGHi+4c9u3t+Zma1+TzHl19e17delceHko0NnJa8TSuPDaZ8vTz112903Y899+iPMaWCnn2dCkb+Dw6z59TrfJER8ZtfX+fjrEeM2vER1+EwxPQiQUgAAAAAAAAAAAAAAAAAAAAAAAAKf8A7A3SP6bwzuj1C7PEpG9yjca7q3il+cawvQ1XHbUORctv2a1p+KxlZWVrbVJUr4e8w50/jT2VI/6yD6/RyvffYntn4nNM4+I1s3P8jSJ61nY3bW0uOpbx/Ny6+vr7uTpMdfl72O3wlKN+H/2POtwvNeom3T87ayU0deZjx+XhiM2xMflrfJfDXr/bYbR9CiZWJSMgAAAAAMOfX70pT1AekLvHr3Hw7mdv68NzeV8RsWLdLmZd5fweUeV8fwsP2eNJ5l/EpgSrT21t35x/lbyfhv8Ar1Ptt97Hp96nbOeNfjo5PFx/JWvby468bysTx25ly/CJrrYtmdusT4Rk16W+NYYZ9wHZP/qB6P8AOdu46Tkz/Z7Z9eIjradjW6bGKtfyTktj+VP9zktH0oIHo3IBgAAAAAAAAAAAAAAAAAAAAAAAAG/b7CPSn9ZO6O1O9dhY82B1lxDE4foJ3Ifhnyjn9+c8vMxrn/7sXWa/IsXI/wAPDNjVXB/rGvr1/mt6Edn+3njMnTZ7s5LJye5ET4xocPStceK8f2uxvbmHLSf7bQvCQD2CdkTyXevK9+bNeuPi9euvi6/r9uZm1qz+XHhxXraPyZ4VXqdaV8BH/wDfI6U+nvqu1PaOvwo2NH3lwvA29+/bt+7tXeacJhb4tyS1G3CNIUrTBppcm7KlfGdy/OUqeatZSu4/1fX17/8AUv2b7vpDyexOXkPT7lM2tSlp81q8Xys35DRtNpmbdPtc8pgpWY6Uxa9KUnyxFaw7e+jsj/N71Zxd1a9Irg53WrkmY8InZ1vLgzREfD/BfZr2n4zbJMz4z1nS0nhaUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuC+yd0lb7P8AWDj882eLS/oejuJbbm1a3rXvsW7yrb0/qrxXFueNPCNy3+ay9lYlX20nh0rT20Qi/j4+vuX0l9kOT064rNOPkfUHktfi/wA23lyV4/W//WHIZK/Tal/s+tpZq/Cce9MT4T47i+yLsmvc/rFXn9qnmwcFr5NnxjrWc+T+QwVn8kx58mas/RbDErI1GdM0A8fLxMXPxMrAzcezl4Wbj3sTMxcmEbuPk4uTbrZyMa/alStJQnCtYyjWlaVpWtKvs0t3b43cw8hoZbYc+C9cmPJSZrfHkpaLUvS0dJratoi1ZiesTETD8M2LFnx2wZ6xel4mtqzHWLVmOkxMT4TExPSYn4w+e96o+nb/AKf/AFEdw9OXY3o43BOdbrVaWd+Vyt7J4vkX/wBT4lnXPffi8+Rq7+Hfl41r7Z+yUqeEq+lz7RPXDX9yXtj7H9cMU1nL3FxOrsbUV8sVpv0p8jksVfL4eXDv4dnFHSI8KR1rWetYrz+qfZt/T31E5ns20dK6G1kpj69etsEz59e09fHrfBfHafj8fjPxnoNsax+AAAAAAAAAAAAAAAAAAAAAAA/r2yrSMaVlKVaUjGlK1rWta+FKUpT+Nav5tatKza0xERHWZn4RH5ZK1mZ6Qv8APRN0nL08elbpLqfJx64u64/wrCz+V2bkKwuWuY8pvXOVcvx51l+KXuNjm5Ni3KXhXyQhTwjSlI082/37+vlfc17wu/vWbVyxm0OT5TLh4+0T1rbjOPrTj+NvHTwj5ulq4Mt4r1j5mS89bTM2mwR6I9kT6d+lPB9p5a+XPr61b546eMbOeZz7ET9M+XNkvWJnx8tYjpHwjKdp+yuAAAAAAAgV9eHScfT56t+7+s8TCrr9Dhcyy9/xHHpCtLFvh3MbcOVcbx8W5StYzhi4uXDDlKlfGk7U4ypSUZRp6Pn4dfr3PuU9l3p/6rbmxGzyOfjMenyV5n8+3J8Za3H718kT0mts+fWtsxEx4481LVmaWraYAPXrsiPT31c5ztnDj+Xr02LZtePojX2IjPhrWfpilMkY5n+2pMT0mJiMRG6zD4AAAAAAAAAAAAAAAAAAAAAAAC3D7RvSkemvRJ1tk5mHcxOQ9tXdh2/vvfW6Qnctcrpbx+Jyt1rTze7losTV3Yxr7KTnOtP53toH/jT+vdvXX3991a2jnjNxnZlcPben5bdaxbjvPfkYn+x88ctsb+OZjxmmPHWZny+E4HtD7J/zL9D+MyZqTTY5eb8hl6x4zGfpGv8Aw9J1aYLRH5bWmPi2aonWz4DT597PpK52d6Pr/PNZjVv77o7luq5p42rPvsq7xXc//ivKsW34U8Y27f5rD2N+VPZSGHWtfZT2TefgHevmP0l97uP065XNGPjvUHjtji/zreXHXkNb/wDWHH5LfRa9/s+zpYa/Gcm9ER4z46ce9zsi3dHo7bn9Wnmz8FsY9nwjracGT+Qz1j8kR58ea0/RXDMo3V5ZDOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAfY26U+nvpR2/aWwwpY+87y5tnbbHv3Lfu7t7hXCJ3OL8btThOPm8Pz9N1k25Vr4Tt34SjTy180qSP9YK9ev8A1L95Gl6RcZsRl4/0+4rDrXpWfNWvKcrFOQ3rRaJmvX7JPF4L1iOtMuvel580TWsw/sW7J/ze9J83dWxSa5+d2bZImfCZ1tbzYMMTHx/wv2m9Z+E1yRMeE9Z3SoG27AACUv79nScOMd2dYd6azE91g9pcRyuKcivWrMfLPlfX161HEzcy9T2+8ydVnYmPajKnthhV8K18K+Fxr+rm+vWTuz0D7u9vXK5/Pn7Q5LHyGlW1p6xx/M1vOTFirP8AxeDf1NjNkmPhffr5ojzRMxO+/rsmvF97cV31q06U5XXtgzTEeHz9SY8trT/bXwZcdKxP0YJ6fCemg5Y4aBAAAAAAAAAAAAAAAAAAAAAAAM2/t19IS7/9Y3SfCMjGrk8e1nKLPPOYeylcenGOAx/rPmYubX+NLWdex7Gt8Y08fNkx8Kx/nU0F/E99f6+2/wBjvf3f+rmjFye3oW4jjfH8+d/l5+wYsmL6JyamPNm3uk+Hl1bdYt/FtnD25djz6g+snCcHlpNtbFnja2PyfI1f5e1bf3OW1KYfDx65Y+Hxi8p506e8AB6/a7XV6LWbDdbvZYGn02owcjZbXbbTNx9frNZrsKxXIzM/Pz8uULVmxatxlcu3bk6RhGlZSrSlK1cpxHD8v3Dy2twXAaube3t3Ljwa+vr4r5s+fNltFMWHDhx1tky5cl7RTHjpW172mK1iZmIfJtberoauTd3ctcOHDW18mTJaKUpSsTNr3vaYrWtYiZtaZiIiJmZ6NEneH31upuB9w6fiPVfA8ztjrDT7OeH2D2DjbCWnyNlb9ti9XrHXZkIwy4Yk/C5TKz52bWXWMrVn3dqdvOrYf9AP6vJ6z+onofvd7er/AHFj7N7t3sFcvDcNfDGzTBPhev39nxWtbXtsV/M+z6dM+bSi9cuf5mamTQjQ/vn34do8D3lh4btTQty3F4bzXb24v8ubx8J+xUtERkik+PnyzSmbpNaeWk1zzuF6K9QHUnqS4Fgdj9Ocx13LuN5daY+XHHlXH2+g2dIUuX9JybS5FI5GDmWqVpWtm/CnnhWN21W5ZnbuShD9wvtt9aPax6ibHpd65cHn4XlMEefHN4i+tuYJma02tHap1w7eteYmIy4b28l4vhyxjz48mKm4vYnqD2j6lcBj7l7M3abmtfwt08MmK/TrOLNjnpfFkj+1vEdYmL1m1LVtPczBDuwACZT7/vSkcXedH+oXWYflht8La9S8uy4W6W4UztXO5yvg9bk4ey5evWbu7hKU/CVIY1uNKyjSlIWxv6tx69Tt8D6ge2blc8zbSy6/cfG45t1n5WeKcdyvlifGmPFlx8VaK161nJtZbTFbTM5Iw/xAuyIxbvB+outTwzVycfsWiOkeanXPq9fy2tW2zEzPj5cdY8Yj82cVaMRuAAAAAAAAAAAAAAAAAAAAAAAO2+huqtp3h3T1d1Fp43fznYXOOPcYnftUpOWvwNjsYW9xtp0r/wCDDw/f5d32VrSFuXhStfYwv7jPWLiPb96Ed3etXNzX5HbPFbu/FLeEZs2HDadbWj+72tn5WvTxiJvlrEzEeMdw7C7U2u+u9eK7O0+vn5HZw4JmP7Cl7xGTJP8ABjx+bJb+Cs+EvocabUa3j2o1Wh0uHY12n0mtwdPqsDHjWmPg63XY0cTBw7EZ1rWkLVqEYRpWta+FKPMs5zmeV7k5rc7i53Pba3d/Pl2djNfxvlz58lsuXLeYiI82TJa1rdIjxmfBYk0tPW4/Txcfp0jHhwUrjx0j4VpSsVrWP4K1iIj+CHsnEPrAcK7I4LpO0evec9bclt1vcf59xLkXDt1CEYSuU1nI9Vd1GXOz5/GlLkIXazty/jGdKVp4Vo7/AOlvqHz/AKSepfb/AKqdq2inJducjpcnqzMzFfn6Oxj2cdbdPGaWtjit4/sqTas9YlwXc3AaHdPb2921ycddfkNfNr5Py+TNjtjtMfwxFusT9ExEvnec94Zuuuuccy6+5JZ/K8h4NyrkHD95Y8JUpZ2/G9te02wtxpKlK+FLtmdKeP8AI9OD05764H1Q9PuC9S+1snzeM7h4/T5LUv4T5tbe18ezgmenh1nHlr1/hV1Of4Xd7b53d7f5KvTY0M+XXyx+TJhyWx3j9KsuJO5uIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGf/pk+3T2/6uOK5HJ+muw+jNnf1k/dch4juOb7vU834xOVysce5vOPS09ycbF+lPHHy7M7uNdrSUIXq3Ld2EI3Pdj+J/6Jey7vHF2l659s92amPbjzaXJa3FauxxW/ERE3jU3Y5KlbZcXXpm1stcW1i/Nvkw1x5MV8mwfpj7ce8fV3ibcp2ZyPGZbYp6ZtfJs5cezgnr0j5uH7PMxW39hkrNsdvGK3m1bVrkz/AIFfrX/2p0j897/+hGp3+8L+wv8Ac+6v8k6f/WrJ3+wj62/reM/nWb/Fj/Ar9a/+1Okfnvf/ANCH+8L+wv8Ac+6v8k6f/Wp/sI+tv63jP51m/wAWP8Cv1r/7U6R+e9//AEIf7wv7C/3Pur/JOn/1qf7CPrb+t4z+dZv8WP8AAr9a/wDtTpH573/9CH+8L+wv9z7q/wAk6f8A1qf7CPrb+t4z+dZv8WP8Cv1r/wC1Okfnvf8A9CH+8L+wv9z7q/yTp/8AWp/sI+tv63jP51m/xY/wK/Wv/tTpH573/wDQh/vC/sL/AHPur/JOn/1qf7CPrb+t4z+dZv8AFj/Ar9a/+1Okfnvf/wBCH+8L+wv9z7q/yTp/9an+wj62/reM/nWb/FlY/UHXGo6e6q656q0VIV1PXfCuN8OwrsYUhLLhx/U2tbPPvU/jW5kTtyv3ZV8aynOUq1rWtaqanrZ6pc163esPdHrD3F/8b3Pyu9yeWsz1jHO5s5M8Yaz9GPDW9cWOsdK1x0rWsRERCWjs/tvU7O7V43tTQiPk8drYdes9OnmjFjrSbz/dXmJtafjNpmZ8ZdjMWOzAAMB/uP8ApO3XrD9New624fc0eN2Do+W8Z5lwXL5FlX9fqIbPXZE9VucfO2OJZyLtq3d1Obn0h5bM6SvUtUlSlPxxkc/C395fBeyD3Uavqp3vTby9tb/Hb3Gctj0sdM2zODNSuxrXw4cmXDjyXx8hq6c282Wk1wTmmszP5l8Ae5L0l3fWP01ydtcPOOvI4M+HZ1bZrTTHF6TOPJF71re1Ytgy5enSs9bxTrER4xPV/gV+tf8A2p0j897/APoRZi/3hf2F/ufdX+SdP/rVHh/sI+tv63jP51m/xY/wK/Wv/tTpH573/wDQh/vC/sL/AHPur/JOn/1qf7CPrb+t4z+dZv8AFj/Ar9a/+1Okfnvf/wBCH+8L+wv9z7q/yTp/9an+wj62/reM/nWb/Fj/AAK/Wv8A7U6R+e9//Qh/vC/sL/c+6v8AJOn/ANan+wj62/reM/nWb/Fj/Ar9a/8AtTpH573/APQh/vC/sL/c+6v8k6f/AFqf7CPrb+t4z+dZv8WP8Cv1r/7U6R+e9/8A0If7wv7C/wBz7q/yTp/9an+wj62/reM/nWb/ABY/wK/Wv/tTpH573/8AQh/vC/sL/c+6v8k6f/Wp/sI+tv63jP51m/xZgV6nvSjzD0n8jwuF9ic86n33NciMruw4n17yja8l3PG8atqN2xf5PC7rsWxhSvUlGtmxcv8Av5xrS5S17utJpGfaV7yOyPeV2tsd+emHbncPHcDimK4eR5nQ19DV3r+aa3poTXd2Mu1GKazGXNTF9npaJxzm+bE0YC9UfSfmPSXkqcL3HyGhsb1vG+vqZ758mGOkTE5+uGlcfm6x5aWt8yY/O8nl/OYuNu2KwAAAAAAAAAAAAAAFLX2A+kKws92+ozZYvhK/LX9O8Rya0lGXurVcfmPOq0pL2SjKVdDGE4/yxux8f40VT/6yN6/Rk2OwPa/xWbrGOM3cvJUjpMea3zuN4n4eMWrX73tes/2OTDbp4xKTP8PzsaaY+c9SNmn8aacdr2/gjybG1/7Jn7LETH01vCktVdSWAMePUl6pel/SjwS9z3uPldjS4t339nj/AB/DpHO5by/ZWoUn+l8Y0MJRuX7lKyhS7elWFixSUZ5F61CvmbO+1n2h+u/vH9RKenPodw19/NTyW3NzLM4eO43BaZj7Rv7cxNMNOlbTjxVi+zsTS1NbBmyR5GOPUr1T7K9J+BnuDvLbjBSesYsVfz8+xeI/iYMUT1vPjHmtPTHjiYnJelfFH/64vuU90+srZZXHpXr/AF30ljZlJ6fq/S59yVva0x8j32HtOe7O1S3Xa5Uaxhct2ZRji48oxrZs+9pO/cu3/h+fhV+hHsY4rD3NXHXufv7Nj8uzz21hrE6/np5cmvw+vabxoa8xa9L5Ytbc2a2tXPn+TNNfFD165+5fvX1l2b8d5p47g6W649LFef5TpPWuTbyR0nPk6xExWYjDjmImlPPE5La4UozWx3r6fvUf3D6YOeYnYnTXL83jO6tUt4+0wfblce5Rq4XPeT0nKdHdrSxm4s6+NaRuUpO1Pwu2J2r0YXI69+5T2t+iHu19Os3ph658Ji5bQtNr6+X/AAe7obEx0ja4/brHzdXYr4RM0mceanXDsY82C18Vu+envqT3j6Xc/TuPszctq5o6Rkr/ABsOenXrOLPin83JSfoifzqT+fjtS8RaK8vQt9z/AKd9X+JgcO3k8LrDvWGNCOXwHaZ8I6zll6zZrdyc7rna5MqVzIeFJXZ6674ZlmNJ18l+zblk1pPfiF/hI+uHsj3dnvjt+uXu308teZx8xr4pnPx1bW8uPDzevjiY1rdZrjru4+ujntNI8+vny11azAehHui7O9YcOPht2a8Xz3T87UyWjybExHW19O9p/lI6RNpw26ZqRFvDJSs5Z2fIkm0YDBP7lHSv139F/dfFMTClnch49x2XY3Eo2bfvMz+sHX8/6x/l8GHhXxvZuHZy9dGNKeNaZFaUrStaSpIh+Fb69f7O/vt7B7x3NiNfjOT3Y4TkZtPlx/Y+Yj7D8zNPWOmPV2cmtu2nr0rOtFpi0RNZwL7luyf8/fRbnOIw08+xr4ftmvEeNvm6k/O8tI8etsmOuTDEfT8yYjpPjEIz0QkDQAAAAAAAAAAAAAADknE9Dj8o5Jp+PZXJOPcQs7fNt4MuScsvbPH43qZ3qVpZv7jK0+Lm37NmU/LblejjThbrKk7tYWozuR6x3n3Fs9o9rb3c2nxW7zeTSxTljR46uvfe2Ir081NbHs7GrhyZYr1vGKc9L5PLNMUZM1qY78lxGhj5PksPHZdnDp1zWivztib1w45n4Tktjx5b1r16RNopMV69bTWsWtG2XVfZB9YW91mu3Wk5N0DuNPtsLG2Wq22q7H2+w1mz12bZpkYefr8/E007V6zdtyjctXbc6xnGtJRrWlaVQx8v+P8A+yHt7ltnguf4nvDR3tLLkwbGvscJrYc+DNitNMuHNhycnXJiy471mmTHetb0tE1tETEw231PY56xb2tj3dHa4nNhzVrfHkx7mS9L0tETW9L11pratomJraJmJiYmJ6PP/wACv1r/AO1Okfnvf/0I47/eF/YX+591f5J0/wDrV9H+wj62/reM/nWb/Fj/AAK/Wv8A7U6R+e9//Qh/vC/sL/c+6v8AJOn/ANan+wj62/reM/nWb/Fj/Ar9a/8AtTpH573/APQh/vC/sL/c+6v8k6f/AFqf7CPrb+t4z+dZv8WP8Cv1r/7U6R+e9/8A0If7wv7C/wBz7q/yTp/9an+wj62/reM/nWb/ABY/wK/Wv/tTpH573/8AQh/vC/sL/c+6v8k6f/Wp/sI+tv63jP51m/xZ+GX9jH1t42Pdu2cnpjPuW6UrDExee7WORfr5qRrG1LO1Fm1StPHxr57saeFP+3wpX6dP+sIewXZ2qYM+LufXpafHJk4jXmlfCZ62jFyOXJ4/D83Haesx1iI6zH55fYp6346TfHfjskx/Y12skTP/AAebXrX/APjaGeH2zPta94+nL1JWe6O+tfxHF13D+HciscHtaDk1jfZkuZcitQ4/PLvWca3Gluza1N/ZwrWVfGs7tvy09la0jt/Fh/F69v3ui9rF/Qj26bPJZtrm+T0r8rbc0LaeKOM0rW3Ix1te9pvkychh0bxFY6Rjw5PNP50ROevbH7V++fTj1LjvXv7Hr0x6evmjWjFnjLb7RmiMU2mIiIitcF80eP8AZWr0+EqJFYpIwAAAm99fH2hu8e+PU/zvuLo/L61weJ9gWNHu9pgcp5HtNLnYvL7ert6zkVyxi4euzIytZdzHjnSuVu0rW7fu08sY0p42mPw4/wAa/wBvnt29pfbvof7gMHObHM9tW29XXzcfo6+1iycbbYvn0q3yZd3WtXJr0zW1IpGOYjDr4Z89rWt0jY9fvaB3z376ob/ePY99LHqchGLLemfNkx2rsRSKZpitcOSJreaRlmfN1m97+EREMNP8Cv1r/wC1Okfnvf8A9CN5v94X9hf7n3V/knT/AOtWGP8AYR9bf1vGfzrN/ix/gV+tf/anSPz3v/6EP94X9hf7n3V/knT/AOtT/YR9bf1vGfzrN/ix/gV+tf8A2p0j897/APoQ/wB4X9hf7n3V/knT/wCtT/YR9bf1vGfzrN/ix/gV+tf/AGp0j897/wDoQ/3hf2F/ufdX+SdP/rU/2EfW39bxn86zf4sf4FfrX/2p0j897/8AoQ/3hf2F/ufdX+SdP/rU/wBhH1t/W8Z/Os3+LH+BX61/9qdI/Pe//oQ/3hf2F/ufdX+SdP8A61P9hH1t/W8Z/Os3+LPRcn+yp6suFcf23K+X8x9PfGeMaHCu7Hdb/e9lbfV6jV4Ninjdys7PzNNC3ahStaU8ZSp41rSlPGtaUdh7T/Hq9mffncml2d2VwfefLctyOWuDV09Tg9bY2djLf+LjxYcXJ2ve0+M9KxPSImZ6REy+DlPZL6t8Lx+bluY3eI1dbXrN8mXLu5KY6Vj42te2tFYj/hn+D4tTW81tjT7jZarF3Oq5Fja7OycOzvdJ+pfo+2t492tqOfrK7jGw8r3FylPNbrfxbU60rSsoRr7Ezfb/ACmxzfB6nMbmjscZl2sVMttTb+R9p1pvWLThz/Zs+zrxlx9fLeMOxmpFomK5LR4tSd7Wx6m7l1MWbHs1x3tWMuLz/LyRE9PPT5lMd/Lb4189KW6fGsPUuYfGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdg9Ydqdh9Mc00/YfV3LdxwvmGiv0u6/d6XJrYvUhWUZXsLMszpK1k4t7wpG/iZNudm7H8NyEo+xjX1b9H/TL137D3vTL1d4XW57g+Rr5c2rtY/PXr0mK5cVo6ZMGxi6zbDsYL48+G35+LJW3i7D2v3X3F2VzeHuLtXcyaO7gnrTLjt0np9NbR41vS3TpfHeLUvHhaswq09Bf3guvO/66Xq71A103Vvcl6mPr9XyGt6mF152JmeWluzHDysqVaajZ35eMfyGVcrYvTpSmNke8uwxIU5/xGPwRvU322xv+rvttjZ7v7GpN82xpRX5vNcLi6zNpy48cdeS0MUdJ+169I2MGPrO3rRiw5N28sPoH7xO3vUH5Ha3qFOPiuZt0pTN18unuW8Ijy2tP/N89p/4q8zjvbp8rJ5r1w13YID27oAAAAAAAAAAAAAAD0+/5BoeKaTbcl5RutVxzjujwcjZ7re7zYYuq0+p12Jbrcys/ZbLOnbs2LNuNKyncuTpGlKeNaud7b7a7i7x5/T7V7R0NjlOT5DLTBq6mphybGzsZ8lorjw4MGKt8mXJe0xFaUra1p8Ih8HIchocTo5eU5TPTW1sFZvky5b1x48dKx1te97TFa1iPGZmYiE03rz+9Rn7mO76o9HWXlajV3PzOs3vemRj3Mbc59qta2L9nrTW5cYzwrcqUlGm4yoUya0lWWLZxpwt5UrWH4dX4DPH8HOh6x++DDj3duvy8+p2nS9b62G0fnUtzufHaa7V4npM8br2+zRNYruZtrHfLqVjP9e/evn3Yz9pejl5w4p81MvKTE1yXj4TGlS0ROKJjrH2i8fM8euKmK1a5ZnXzs7O2edmbPZ5mVsdlscrJzthsM7JvZednZ2XelkZeZmZeRKVy7du3JSncuTlWUpVrWta1rWqzxx3HcfxHH4OJ4nBj1dTVx0w4cOGlceLDix1imPFix0itMePHSsUpSkRWtYitYiIiEcufPn2s99nZvbJkyWm172mbWta09bWtaes2taZmZmZmZmes+Lw32vxAAAAAAAAAAAAAAAXs/b76Pl6fPSB0n17mYlcPkU+KWOX8wtXbVbOXb5Xzi7LlW4wc7x9tbmDXLjrvGv/AIMeNP5HnMfiVe4CvuX97Pf3qZo5oz8ZXkb8bxtq282OeO4mteP1suL6Iptxr23ekf2ezefpT6+3rsafTz0e4Pt7LTybM4I2NiJjpaNjamc+Stv4cU3jD/wY4ZmNFGamon15/di6u9LkNz1z1d+ldqd72YX8LI1ljKlf4Z19n0p5PPzXZYMqVv5dqXtrp8S7S7SsaxyLuL4x88134dX4NXq97vMmj6n+rf2js/07yTTLTYvjinKczh+PTi8GWsxi18kR0jktmlsPS0X1cO50t5NP/Xz3Z9q+lkZu2+1vJy3PViazSLddbUt8OuzesxNslZ/+Xx2i/WJjJfF4dZJe5O7O0fUBzvadk9vcx2vNeX7Xy27mw2MrcMfAwrU5Tx9TpNZixt42DhWaznW1iYlq3ajWUpUj5pSlW6H6GegnpF7bfTvU9K/RTg9fgeE0+tow4Imb5storF9naz5Jvn29rJFaxk2NjJkzWitazfyUpWsRneXe3dXqDz2XuXvDcvu7mXwm95iIpWJmYx4qViKYsdes+XHjrWsTMz06zMz1UzC6mAA8rCzczW5mJsddl5OBscDJsZuDnYV+5i5mDmYtyN/Gy8TJsSjctXLVyMZ27kJUrGtKVpWlaPk39DS5TSzcZyeGmzrbNL4suLLSuTFlxZKzTJjyY7xNL470ma3paJraszW0TEzD9sGfNq5qbOteceTHMWraszW1bVnrW1bR0mLRMRMTExMTHWFEvoI+9LsNDHSdTesLOzdzqI+41ui7yhZvZ2819vxpZxrXZOFj0ldzrUY+yW3x4SyaUpSWTayJSuZEaxX4jX4D3Hdw23/Wb2Q6+LR3befPt9pzauLVzT42vbg8t5rj1Mlp8Y43Naur4zXUy61K49W0i/oD71djQjB2l6x3tmwx0pi5SIm2WkeERG7WIm2WsfTsUicvh1y1yTNskUv6HkGj5TptZyPjO41fIeP7rCx9jp93pc7F2mp2mvyYUuY2br9hhSnavWrka0rC5bnWNafwqqk9xdudwdo87t9r916OfjOS0Mt8Gzq7WHJr7Gvmxz5b4s2HLWuTFkpMdLUvWLRPxhJpob+jyuli5LjM1NjXz1i+PLivW+PJS0da2peszW1ZjxiYmYl7OcIXYTt3IRuWrkZRuW5RjOEoTj5ZQnGXjStK0r4VpX2Vo4nHkyYclcuK01tWYmJiekxMeMTEx4xMT4xMfB9dqxaJraImJjpMT9L5+3rF6Xuenv1P919Rww5YOq4rzrbT4vYlWsq/1K30o8i4TP3lfHzVrqsvD89aVr4T81P40q9J/wBjfrvj9y3tJ7B9ab542Nzl+J1437x4f/rTUidLlI6fREchr7Pljw608s/CYV8fWXsqfTz1Q5vtGtJx4tTayTgj/wDRsvTNreP0/wAhkx9f4esMZ21rGIAAAAAAAAAAAAAADYx6IPuTd1ejTZ4uhx797sLpbJza3tz1fu8+7Cxr/wAze95m7Pg20uRuy1eXWtZTnbjCeNelWVb1itysbsIvvf8AfhXeg3vn4nN3FsY69s9+YsXl1uf1cNZtm8lfLiwctrxNI39eIita3tam3grWtcGeMUWw32Q9Dvcr3t6MbVNDHaeR4S1uuTRy3mIp1nra+rees4Mk+MzEROK8zM3pNpi8V+emb1YdJ+rXg1vnHT3KbWzjjxxock4psqWcDmfDNhkwrOOt5PoaXJytVrWM42smzO7i36wnXHv3YwlWlJX3Xezb189mPqBbsD1w4e2pOXzzo8hg82bjOTw0t0nNobfkpXJERNbZMGSuLb14vSNnXw2vWJmE9MvVjsj1b4KOd7N24yxWKxmwX6U2da9o6+TPi6zNfhMVvWbYsnltOPJeImWSLVhksAAAAAAAAAAAAAABiZ6sPWj0b6O+H/1i7T5FS7yHY4t+5xHrrSXMfM5ty+/DzQjLX6ucqe4w4zp5L+xyqwxrVfweeV2Vu1Pc/wBm/sP9wXvg73/zY9H+MmvG6uSleS5rai+PiuNpbpM/O2IrPzdmaT5sWlrxk2ssfnxjrhrkzY8Q+rPrV2L6OcP94917MTsZYmdfTxTFtnYmOv8AEp1jy44mOls1/Ljr8PNN5rS0fXrO+4L3l6z9/OHLc/8Aql1fr82eRxfqbjuZkU47r/dSlHE2fIMmdIXNts6W5eEszJhGEK1n+VsY0JzhW7p7FPw1Pb57Eu265OzNb767u2cUY9/uLdx0+25vNETkwadI81OO0ZvHWNbBa2TJEU+17G3fHS8Q8etHuF769aeQmvLZPsfF47+bBoYbT8mnTr5b5beE7GaI+OS8RWs9flY8UWms4JJD2BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbqPQX933sX09V0vV/fc9x2n0tYjj6/Wbmtz892J13h240s41vU5mZch+qayzSnl/T8u5S7ah5aYt+Nu1HFuQNfiMfglemHuWjf9W/bjXW7Q78yTfNn1fL8rheayzM2vOxjx0tOhv5Znr9s16ThzZPNO3r2yZbbeLdn0D94Xcfp58jtjv+cnK8JXpSmTr5tzTrHSKxS1pj5+CseHyck+elenyskVrGK1XHVvbPXPdvCdR2L1VzDTc34bvLXnwd1pMil+3C9GEZ38DYY0qRvYmXYrKkcnDyrdu/Zl+G7bjL2KcXq96N+qHoH39u+mHrFwm12/znH26ZdXax+S01mZimbDeJnFsa2XyzbBs698mvnp+fiyXr4pYO1e7e3O+ODw9xdp7mLe0s8da5MVusdfDrS8T0tjyV69L47xW9J8LVifB2Kxe7MAAAAAAAAAAAAxa9VHrE6R9IHCq8s7Z5HG3s86xkS4nwTTVx83mvM8vHj4Sx9JqZTh5bMZVjS/nZM7WNZ8aUndpOUIT3A9oHsf8AX/3td+x2Z6M8XN9TXtSOR5fZ8+Li+Lx3+F9vZituuS1YmcWpgrl2s/S048M0pkvTFHqr6ydjej3CTy3duz0y3ifkauPpbZ2bR9GLH1jpWJ6ebLea4qdYi1/NNazH761PuJ95es7c3sHkGbLhPUmFnVyePdT8dzsj9FhSzd8+FsuWZvhbnuNhClI1jfyLcbNmXmri4+P57nnu4ewz8MT2++xPg8fI9t68c/3pnxeTd7i3cVPtU+avTLg47F1vXjdO0zMTiw3vnzV8sbezs+TH5IefWz3F99etO7bX5C86PEUv1w6GG0/L8J/NvsW8J2M0eHS14ilJ6zix4/NbrgCkia+gAAAAAAAAAAAAAAAMtPQv0dX1Eeq7pTq7Jw65mh2fMcTd8xtVjStmfC+I25cp5TYv3J0rGFMjDxLuJblKlaVu3bcaUlKVI10x/EJ9wMe2L2bd++rmrnjByOrxuTU4y3WfNHKclNdDj70iPzrfI2dimzeKzExiw5LTatazaMuehXY0eo3q1wnauSnn18uxXLsR9H2bXic+eJmfCPPjx2xxM/2V6x0mZiJvI5pzbiXXXF9zzXnnJNLxDiXHsOefu+Rch2GNrNVrsaFaQpPJy8qsY0lKVY27cKVrKc6xhCkpypSvnV9idh96+p/duj2F6d8Vtc3zPJ5Yw6ulp4b59jPkmJnpTHjibTFaxN72npTHStsl5rStrRPZzXNcR27xebm+e2cenqa9fNkzZbxTHSv5ZtaYjxnpER8bWmKxEzMQlz9fH3l+VdoR3fVHpTydtwXry9S9rt52rche1XPuY2PCtnIx+LQjKl3Sa6741rS/7M+9Hy+3Cp72zct1/hyfgWdoekdtD1l94uLW7h7nxzXNqdvRNNjiONv4WpfkJmJpyu7TwicPjxuC/n8N+flZ8UWnr97z+V7pjP2n6UWyaHHW60y709ce1sR8JjBHXrrYbf2/hsXjp44Y81LaEpzncnO5cnK5O5KU5znKspznKvmlOcpe2ta19ta19tarGePHjw464sVYrWsREREdIiI8IiIjwiIjwiI+DQW1pvM2tPWZ8Zmfpfw/R/AAAAADYN6JPuL92+jDc2dZp8qfOenc7Prlcj6n3mfct63z3p+OXtOH7OUL09RsJUrWs7lm3Oxfr4Vyce9KNuVuNT38/hgegfvu4LJy3N4o7e7418Py9LuLUxVnP0rHTHr8ngi2OvJadekRWmS9NnXjrGps4K3y0y7DeiHuP739Ft2urp2nf4bJfzZtDLaYp4z+dk179LTr5Z+maxOO8/4XHeYrNbA/S96uek/V1wmPMuouTQzcnBt4seVcN2lLeDzHhmfkwrO3g8g0/mlWkJ1pONjMsSuY1/yT9zenWE6RpGe7f2Wevfsq9QJ7E9a+JnBjzzknj+T1/Nl4zk8NJ6Tl09ny1ibViazl1stcW3r+enzsNIvjm8xHpd6udk+r/B/fXZ+1F7U8vz9e/SuxrXtH8XLj6z4T0mK5KzbFfpPkvM1tEaCvv7dKfo/ZHTvf2swqQw+bccz+ueU5NiHljTf8RyK7fQZObLy0817Lwc2/Yty81a1t4NI1pGkY+ax9/VwfXr789Lu+Pbfy2x5s/A7uHm9Cl56z9j5Kka25jxePhj19vVw5bx0iPmchNom03t5dAPf/ANk/Y+5OG9QNWnSm9hvp55j4fN15+Zhtb8tsmLLesT1n83B08OkdZ61mBHgAAAAAAAAAAAAAAAA7M6j7i7M6J5vquxup+Y7nhXL9POlcbaajI93HJxvPG5f1m2wbtJ4+bh3qxjS/h5dq5ZuUpSk4V8KMUetPod6Ue4f0/wBz0v8AWbg9bn+E3o/P19mnWcd+kxTPr5azXNq7OLzTOLZ18mPPimZmmSvWXaO0O8u5+xObxdx9o7uTR3MM+F8c/wAaOsTNMlZ60yY7dI82PJW1LfTWVZHoL+7j1p6lKaXrPueup6r7xv0x8DBu3L08bgXYudKnkhXjWdmSlXX512VKU/Ss27XzyrGmLfvylWzbpo/iL/gs+q/tWtv+q/oT9o7w9PsfnzZaxWMnL8Lijxn7dhxVr9s1MceP3hq44+XStp3NfXpSM2WWn0E93fbHqZGDtjvX5fE87bpSs9fLq7lvh/I3tM/Ky2n/AIjJafNMxGLJkmfJXcigybnAAAAAAAAAAAAANGvrz+8dwTpWW46t9NV3Tdm9q2PfYG45xWcNh11wLL8tYXbOJesS8u82VmvslZsTph2J18L167dt3sSlg38On8Dj1E9fK6Pq77qqbXafZ2Ty5tbiuk4ea5fH4TW2St483FaOWPGMuWs7uekTODBhxZcO7Oinr57yuB7JnN2r6aTi5Tlq9aZNnrF9PVt8Jisx4bOav01rPyaT4Xve1b4UrXYfY/O+2eYbrn3ZPKd1zPmPIcmWXtt/vcyeZnZM6+y3Zt+PhCzYtR8LePjWIQtWoUjbtQhCMY0uEemXpd6d+i/ZGh6b+lfD6vA8HxlIx6+nqY4x4qR/ZWn42y5ck9b5s+W182bJNsmbJfJa1pin7j7k57u7mM/cHc23k3d3YnzZMuW02tafoiPorWseFKViKUrEVpWKxEOEu+uDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk76XfV33b6Rebx5h1Hya5iYuZcsx5Rwva++z+GcxwrMvw43INLScI1uQpWtLGZYlbybPjKlq7GM5xlqX7uPZT6Be9bsGex/WriYzZsEWnQ5TX8uLlOMy2jxyae15bTFLTETl1stcurn8tZy4bWpjtTKPpb6v98ekPORzPaG1NK3mPn62TrbW2Kx/Y5cfWPGPHy5KzXLTrPlvETaJr/wDRL9xzpL1najH1Oqyo8D7jwsGuTyDqjfZ1q5sLkcez7zN2fDNpKNqG3wIeEqylatwybNKVrk41qFbdy5ST9/P4XXr97FeayczzOKe4uxs+XyafcOnitGGs3t5cWvyev5sl+N3LfmxWuS+TVz2tFdXazXrlx4phfRH3Idj+tOpXU1LRoczSnXLoZbRN56R1tk1r9KxsYo8es1iuSkR1yY6VmtrbCUZrYkAAAAAAAAABpJ9eP3huvOhqbnrH08z0nancFn8xrdpyb39M/rrr7Mt1rayI5GRhypTcbKzLzQ/JY12NizcpX8zerO1PEnPt+HX+CB6m+4udD1a9zNdrs/si8Uz4NHyfJ5rmcUx5qTSmWszxujljpb7Vnx22M+KY+y4IplpuY9HvXr3jdvdg/O7X9Opx8rzEdaXzdfPp6lo8J6zWf+cZqz1j5dLRjpb/AAl5ms4bSm9l9odg9x8z3PYXaHLt1zbmW+v1v7PfbvJrkZNynmrW1i4tqFI2sbGs0r5MfExrduxZh4QtW4QpSNLi3pT6R+mnob2Lo+mfpHwurwHBcdTyYNTUx+SlfCPNkyWmbZM+fJMebNs575NjPfrkzZL3mbTFD3N3R3D3nzebuLuncyb27sT1vly262n8lax4VpSvwpjpFaUr+bStaxEOBMjOvgAAAAAAAAAAAAAAAANt/wBsDvLov0hWO6vVB27sY7TleJocTrDqDrjSXLGXzDlW13F6HIOW51rDuypDX4ePbxtXYubbK8IUhfyLVr3t7wx7sLf4t3t+9wnvX2ewvaP6K6s6nDZtzJz3cnN7Vb4+M4/X1q20+OxWyVibbmzmtn5DLTjsHmyWya+tly/KwddnDt37XO+uxPSDHzfqj3hk+bt0xV0eP08UxbYz3yTGXYtFZ8MWOkUwVnPfpWK3yVr5r/yd8ZvWJ68O8fWdyiubz7bfoPANZnXcniHVXHsjIt8T49Dy1s42Zn0l5Z7PZ0tSrS5ssyNZUrO5HHt41ifuI7X+x38Oz2++xLtL7B6c6f3l3Jt4q05LuHdx0tyO5PWLXxYunmroaPniJppa0xWYpittZdvYx/aLYy9ZPXrvn1p5T5/P5fs/H4rzbX0MNpjBh+iLW+E583Tr5s2SOvWbRjrix2+XGFLfVhEAAAAAAAB2T1R272T0dzfUdj9T8w3PCOZaSfjhbnTX4xlcsSnG5ka3Y4d6M8fMw79YxpkYWXauWLtKeW5blT2MW+sfor6V+4HsDd9LvWXg9buDgt+OmXW2aTMVvEWimfBlrNc2ts4vNacO1r5MWxhtM2xZKT4uy9p939zdi85h7k7T3Mmju4J/NyY56dY6xM0vWetMmO3SPPjyVtjvHhasw3b9t/cH65+4H6JOxOn+3cHU9cepPguHr+zuEXoSnb4L2DueCSll7iPFb2ZKVzB22Xpbm2w7OoyL0q3bt2H5S/kTnXFhAR6L/hpeqP4a3v77Y9bvRbY2O6fSvuHLm4LlazETy3DavLxGPWnkK461ptcfrcpTjtnJyWHFWMOHDk+2a+tTHG3feDu/3Ddt+4T0Q5Hs7u+mPje5dCtN3Wn4au3k1etsnyJtMzjz5NadjHXXvaZte9flZMk2+VWf9ZJR9AAAAAAAAAAAAAAAAAAN5PoM+8bzvpKmo6u9St7d9n9U2aWNfpua+eWw7E4Di0l7u1DJvX/x7zW2qeyljIufm7EPZYvXbdu1iK+v4i34HPp369zu+rvtUx6vaXeN5vm2eL6Rh4XmMnTracdaR5OK3sk+M5cNPsWxk8c+DDly5d1vT6Ce8rn+yPk9repdsvKcTXpTHs9fPualfoi0z47OGv8Aa3n51K/xL2rWuFVN132PwTtrh+l591ryvTc04dyDGhlanf6LMhmYWTGvsuWJ1p4Ts37UvG3kY1+ELtqdJW7sITjKNKe/qb6Xeonox3vv+m/qpw+1wPOcZecexp7eOceWk/2No+NcuLJHS+HPitfDmxzXJhyXx2raZWO3e5OB7t4fB3B2zt4t3S2K+bHlxWi1bR9MT9NbVnwvS0Relomt6xaJhzZj9zwAAAAAAAADrHt3uTrPojg+17G7Z5lqOE8Q08afmdptb0qXMrJlGUrGt1WDYjPIzMu94VpZxMW1cuzrSvlhWlK+GW/RX0N9V/cT6gafpd6M8Hs8/wA3vT+Zg16x0x44mIvn2M15rh1dbH1icuxsZMeHH1jzXiZiJ6t3f3l2x2FweXuTu7cx6Onhjxvkn+NafhTHSOt8mS3T83Hjra9voiekpN/Xp93Dsz1L123WvTVNx1T0derfws3y5MMXn3YmFOnup05Rn4FyccHAuRrWldTh3pUnSsqZV/IjKNq1cv8Aw6fwWfSn2qV0vVX11+zd5eoGPyZcUTScnD8LlifNH2DFmpW23t0t0n7w2sVJx2is6mvr2rbNliU9ffd53N6mfO7Z7L+ZxPBW61t4+Xb3Kz4T8+1JmMWKY/4jHaYtEz83JkiYrXTgnIaaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHtdLu9zxvb67f8e2ux0W90+Zj7HU7nUZuVrtprNhi3KXsXNwM7ElC7au250pKFy3KlaVp40q4fnuB4LurhdrtvubTwcjx+9ivg2dXZxUz6+fDkrNcmLNhyVtjyY71ma2pes1tE9Jh9ejvbvG7mLkOOzXwZ8NovjyY7TS9L1nrW1L1mLVtE+MTExMSpN9BX3qLGZXTdT+sfLs4mTWljWaDvbFxqW8TIr4UtY2P2frMWNKWZVrSsa7rEhS3XxhXLsW6UvZsqr/4jH4DWxpfb/WT2OYLZsX5+fc7SvfzZKR1m2S/A58k9clYj86OL2bzljpeNPYyTbBo1ks9A/exjzRg7T9ZbxS/hTFyla9Kz8IrG7SsdKz9H2nHHl+Hzsdel800aa3aa3d6/A3Gn2ODt9RtcPHz9XttZl4+frtjgZlqN/Ez8HOxZSt3rN23KM7d23KsZRrSsa1pVV55XieV4Hk9jhOc1sulu6eW+HPr58d8OfBmx2mmTFmxZIrkx5Md4mt6XrW1LRNbRExMJHtba1t3Xx7mlkpmw5axel6Wi9L0tHWtqWrM1tW0TExaJmJiesT0ee4t9QAAAAADrrtXtrrjpDhG37G7W5fp+EcN0duk87d7rJratyvzpKuNr8DFtUnfysu/Wko4+Hi27l67KnltwlX2Mo+j3oz6pevvf2l6YejnCbPP87yEzGLV1aea0Vjp582bJaa4tfXxRMWzbOe+PBhr+dkyVjxda7r7t7b7H4PN3H3ZuY9HSwR+dkyT0jrPwpSsdbZMlunSmOlbXvPhWsylA9eP3fOy/URTddZdFy2/VHS1+uTgbHZ2r9cHsTsPAnWtu5DdbDCnL9M116NPCWtwrtZ3YSnDKyLtq5XHhcm/Dr/BM9K/bJ9h9V/cNGt3l35jimbBgtT5vC8LmiPNWdXDlpH2/dxWnrG7tU+XhyVpfT1sOXHGzeJn1594PcvqJ87tnsScnE8LbrS94ny7m3T4TGS9Zn5GG0fHDjt5r1ma5cl62nHGl5O20rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZZ+k/1od5ejvmH9Yuq+RTucf2OTYucu663dzIy+E8usW/CEpbLVxnH3OZG3HyWNji1hk2qfgpOVqVy1PTL3kew/2+++Dsj/ADY9X+MivJ6tL143mtWKY+V429usx8nYms/N1pvPmy6WxGTVyz+fOOuauPNjy56TetXfXo5zH3j2rszOvktE7Gnlmba2xEdP49OseXJER0rmp5clfh5ppNqWsE9GH3BejfWdoIW+KbD+qPaOvwqZPKOpuRZePTkOBS1CMcvZcfyY0hb22tpOXhHMxoRnClYfmrGNOcIVpF++v8NT3B+xLuS2TvPW++u0dnLOPQ7i0sd/sWbzTM48G5SfNfjt6aR1nWz2tjyTF/smxt0x3vExHot7hexPWrQivEZPsfKY6ebPoZrR86nTp5r4reEbGGJ+GSkRasdPm48U2is53I7mewAAAAAAGuT1vfcp6T9G2uy+PXsiz2J3VkYXvdR1fothbjc1dcmxS7ibHne1txux1OLKkoXIWpwllXoSjKzYlarK9CUX2A/hWevfvm5PD3Lgx27Y7CxZfLs8/t4bTXPFLzXLg4jXtOO3IbFZrel8lbV09e9bVz7FcsVw5NbvXL3L9kejOvfjr2jkebtXrj0cVo606x1rfayRFowUmJiYrMTlyRMTTHNet6yB+pb1Wd2erLnFznHcfK7+2njyyIcd4vgUvYHDeHYORKNZ6/i+gpcnbsRlGNul7IuSnk3/ACRlkXrso0rS7V7VPZz6B+zT0/r6f+h3DU0oyRSd3fzeXNyfJ5aRPTNv7nkrfLMTa84sNIx6uv5711sGGtprMPfqZ6sd7+rfOzzneW3OaY6xhwU601tes/2GDF1mK9ekRa8zbJk6ROS95iJY4to2NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXj9ijjfPcD0q8q5VyjkvIc/inJ+xc/D644ztM+/l6TQaXjWLTE3W047j3/AB/Lxz9pfy7OTatVpbrPEpcpGk53KypR/wBYa7q9OeR94fD9n9o8Vp63McRwmHLze/gw0x7W5tb2Scmrg3b06fPtp6GLWyYMmSJyRj3ZxzacdMday/8AsQ4zn9f0o2uV5XZy5NTa3L108F7TbHixYaxXLfDE/wASMue2St61/N82HzdPNa0zu0QEt4AAAAAAEnv37OMdgan1AdYck2nJOQbTrPl/AL39UNDm5uTPj/GeV8bz6YPNMXS67x9xbuZGPf1GXkX6R97OV3yyr5LdvwuVf1czuz025n23d3drcTxWlqd18JzFfvLcxYqRub3Hb2GcvF32s3T5t6Yc2LktfDi6/Jx1w+ekRky5ZmJb39cX3DqeoHF8ltbOXLxm5qT9nxWtPycOfDfy7MY6fxYm9La+S9unntN+k/m1q0OLFDQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2l0jrOfbvuHrDQ9Wbna8e7G5BzrjHH+F7zS52ZrNlquQb3b2tTrs7Hz8CsLtqlud6krk4yp4QpLx/D4sQ+v3Lem/b/AKId29x+sGjr8n2vxvE7+5ymptYsWfBsaeprZNnNivhzRbHkm9cXSlbRPXJ5fL+d0dr7H1e4N7vHi9HtTNfW5LY2sGHWy4rWpfHmy5K46Wi9Ji1ek26zMT/F69fDq+iLrcW7g67Awr+bkbG/h4WLi3s/L8n5vPu49iNmeZle6pSPvLsqVnPy0pTxrXwpSjzHeU28PIcns7+vgpq48+XJkrhx9fl4a3vNoxY/NM28mOJileszPliOszKxXrYrYMGPBkvOS1K1rN7dPNaYiIm1unSOtvjPSOnWXnONfSAAAAA4d2Hpd7yXgPOOOcX3uXxbk2/4fybS8e5NgXKWc7ju92ulv4Oo3uHdrGflvYmRct5FuXkl4ShSvhX+DvPppz3b3anqP2/3P3bx2Pl+J43ktHa3dDNXzYt3U19rFl2dTLXzV82PZw0vhvXzV61vMeaPi4TuHR3+T7f3uO4vPbV2djXzY8Oes9LYcuTHauPLWek9LY7zF4npPSY+EvnW8spyaPKeR2+aXtrf5ha323tcrvb3Lv5+6u8jtZ9yG7nts3Jncu3cmuTS57+5cnKUp+atZVrXxenn2ZbtS/Z/FX7Epr4+Evqa1uPrqY6YdWulbDS2rGtix1pTHgjBNPlUpSta4/LWtYiOiuby8cnXldmvNze25GXJGectpvlnNF5jLOS1pmbX8/m81pmZm3WZmXHXZnGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlYeJlZ+VjYOFj3svNzsiziYmLj25XcnJysm5Szj42PahSspznOtIxjGla1rWlKPl3d3U43Ty8hv5a4dfBS2TJkvMVpjx0rNr3vaekVrWsTa0zPSIiZl+2HDl2MtcGGs3veYrWsR1m1pnpEREeMzMz0iPpl9CX0xdO4fp/wDT51D05iW7Nu5wPg2l1W3lj1pKzl8mu436jy3ZW5R9nhl7S9mZPsrWnjP2VeaB7s/XDe9yXuV729cN21rV7j5ba2daLx0tj0K3+Tx2Cevj/wA30MWtg8ek/wAn4x1WG/S/s7D6fenvD9mYoiJ0NXFjyTHwtnmPPsXj/wDKZ7ZL/wDvO9muzvwAAAAADUL96ro+vafo7z+c63Drkcj6M5NrOd2ZWo0lk3eLbKX9WeYYkayp4UtQtZOPs79aVpXy4VPCtf5spsvwGPcDHo/74Nb0+5TPGLi/ULRz8TeLTMY67+CPt3G5J6fHJbJgzaOLwmPNvz1iP41dPfex2N/nX6OZOd1qebZ4LPTajp/GnBf+R2K//hit6ZrfDwwf+yY1F6BDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3E/ZJ6Sudler+12Jm4srvH+jOJ7fld27Ox73EnyrkWPc4jxbAu1rStI3PJk7DY2JfxpPC8ae2iDz8fb18x+lXslt6ZaGaKcl6hcjrcdWsW8uSOP0b05HkM1fptTzYNPSyx8JpvdJ8JbleyHsm3cvrFHceenXX4HXyZ5mY61nPmidfBSfyT0vlzVn8uHqscUcEyoAAAAAACI/7uPSkumvW52TkYmHbxOPdtWdf2/ofdWqwt3LnLK3Mflkp1pTy+8rvcXaXZRp/CE4Vr/OX8vwWPXuvrp7BO1dbdzzm5Psy2btvc81utorx3kvx0R/ZeSOJ2NDHEz4TfHkrEz5fCD73edkT2X64cnkw0imvy8U5DF0jwmc/WNj+DrO1TPaY/Jasz8WspLA1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbE/tXdJw7v9bXUesz8P85x3r7Myu2+Sxlapfsxw+Be7z9JHKs3Pwys3t3PVYt2M/GNYXa0rSXj5axi/jB+vd/QD2Dd68rx2f5HKdy4sfbmjMW8lpy8v58W3OO0fnVyYuKpyGfHNelovhiYmvTzRsb7U+yf8+fW/iNbPTz63HWtyGbw6x5dXpbF5o+E1tszgpaJ8Ji09Yn4Tck8+dOkAAAAAAA4h2BwnR9lcE5n13yax+Z47zriu/4hvLHs81zU8j1d3UZ8YVl/Cfur0qwl/GlfCtPbR3j02797g9K/UPgvU3tPJ8nlO3uQ0+S1L/RXY0tjHs4Zn8tfmY6+aPhNesT4S4XuHhNDubgd3t3lK+bW38GXXyx+XHmx2x36fw+W09J+ifF877sbg266x7B5x1vyKEbfIOAcu5HwzdUt0lS1+qcZ297TZ0rPn8K1hW7ZlKFf5Y1pX+V6b3pd6hcD6temvb/qn2vabcb3JxulyerM9PN9n3tbHtYot08IvFMsRePotEx9Cur3JwW72x3Dvdt8lEfaOP2M2tk6fDz4Mlsdun8EzWZj8sdHCnfHCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALB/se9Iz659Juw7O2WNXH3fenMs/fWJzhG3frw3h8rnFeNWbsK08/hLLht8u1KVfCVrIhKMfCvmnSH/rAfr9T1R95mt6T8XmjJoennGYdO8RMzX7z5KKchvWrPXy+GvbjtfJFY61y62St7TaPLSYv2M9kW7c9JMndGzTy5+e2b5YmY6T9m1+uDDE/T/hI2MlZnwmuSsxHSes7nkErdQAAAAAABoO+/Z0nPk3SnV/emsxPe53V3L8rinI71mzWs48V7Bs26YmbmXqez3eLtMHFx7Ua09k82vhWnjXxsdf1cz17x9p+vnd3t65bP5Nfu/jcfIaVbWjpPIcNa85MWKs/8Zn0NvYzZJj400K+aJ8sTGgPv67ItyfZHFd96tOuTiti2DNMR4/I24jy2tP8Aa0z4sdKxP0556fGespa4wieAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSP2Cela6frnuPv7Z4UoZnNeR6/rri2TfhWMqaDiONTc8hycLxj+KzlZ2bj2LkvNWlbmDWNKUrGXmqH/1j717+/PVLsf24cTsRbBwOlm5vfpSesfbOSvOtp48vj4ZNfU1c2WkdIn5fIRaZtF6+WU/2Adk/Yu2+Z7/ANqkxfezU08Ez+q14+ZmtX8tcmXLSsz1n87B08Ok9aFFZ1IgAA1OevP7qvVPpNtbbr3gNNd2n37CzdsT41jZUp8U4DlTp5bWR2BtMKVJVvwrX3kdNiTpkzpHwv3MKFy1dnMx+HT+Dx6x+8zLp+pnqNOfs/04tat43r44jkOYxxPW1OH18sdPk26eSeT2Kzq0m3XXx798WbDTUn17913afpLTN252/wCTlefiJj5MW64NS30Tt5Kz188fGNbHPzZiP5S2CLUvaefqr7rvrC677q2vcG87DzuxsPlOZYrzHrfk96VOC7DUY85e41fG9VjR93op48JypiZOstwrGXhXIjlQrdt3LM3rD+Dh7IPU70E0/RHt/trF2vn4fFf7s5zQrE8th2bxXz597YvPn5ema1azsYN696zXrGrfUvXFlxR3dq+7H1j7c72y9473I25Km3aPtGnnn/mt8cTPSmHHXw1ZpEz8u+GKz18ckZazatqsPSB65+jvWZxSu0663H6TzXVYdm/zDrDfXrNjl3Gbk/LbuZMLVPCOw19bkqRtbLDpK1Wsowu0sX61sxp1+9v8Pj3A+xbvGOI9T9H7ZwO5ltTjee062vxu/WOs1pNvG2nueSs2yaOzNcseW98M59eK57Svej3rr2L60cV9q7czfJ3sVYnY0ssxGxgnwiZiPCMuHrPSubH1r4xF4pfrSMy2irNIACN772XSMOsPWDf55rMWNjQ95cT1fNI+5txtY9vlemjTivK8WEafzp3Py2Hsr8//ABTzJV/j4ry/4B3r9k9WvZFj9OOVzTk5H095HY4v863mvbj9qZ5Dj8kz9FKfP2dLFX+xx6NY+HRDN73ex69r+sNu4Nevl1+dwU2fCOkRnx/yGesfwz5Mea0/TbNLT2m7acgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOScP4ruudct4twjjmP+e5FzLkel4pocPxlT83uuQ7O1qNXjeMaVr/pL963D2UrX2/wq6t3v3jwPp52Xy/f/dOX5HGcHpbXIbmXw/k9XSwZNnYyeMxH5mLHe3jMR4eMx8XJ8NxW7z3L6vB8bXz7G5mxYMVf7bJmvXHSv0/G1oj4S+iB1N11puour+vOrOPU/wDsvXnDeN8N106w8lzJxuPam1q45l+layrW7frbreuyrWtazlKta1rWtXmSes3qfzvrX6tdzer3c3/x/c3J73J5469Ypfd2cmxOKnhERjxReMeOIiIrSlaxEREQsUdp9uaXZ/a3Hdrcf/gOO1sOvSfpmMOOtPNP91by+a09ZmZmZmZl2Cxi7IA4lznnfDOs+KbnnPYPJtLw/iHH8OWfuuQb/Ox9drcHHt08KVnev1pSU7kq0t2rMKVuXZ1jbtxlOUY17t6fenffPqv3joen3ptxO1znNcnljFq6enhvmz5bz8elKRPSlI63yZLeXHix1tkyXpjra0cNzvPcL2xxOfne4NrFp6etWbZM2W0UpWP4Zn4zM+Fax1ta0xWsTaYhLL69/vJcy7dluerPS5lbnr3rC5S/r9x2RX8xqewuc4/j5LsNJWFY3dJrblPH+Ffz1+Hl95PFjK7jSt8/hy/gZdjei1dH1f8Ad5h1u5u7aTXNrcH+ZscNxV/jWdrrFsfK71J6fHrx+C/mjHTbtXFtVis9ffeZzPd05u1PSu+TjuLnrTJueOPb2Y+E/K6TFtbDb9veOnmnFE2xTzH0D/ee5Bwn9F6m9XObsuW8SpKxr9H3V5cjZ8w45ar/AKK1Z57jwpO7t8SP4f8A7jbpXOt0pKt6mb5qVtdH/Eb/AAJe3O/vt/rN7KdfBwvNTF8232v1pg43dt/Gtbh7z5cfG7NvH/mV5rx+SZrGC2h5Jrm5r0B96e/wnyO0/V/Jfb0+sUxcl432MMfCI248bbGOPD+Wjrnr4zeM/XrSnfi/KeNc349p+W8P32o5TxfkGFa2Wj5BodhjbTT7XAyKeazl4OwwpTtXbcvbTzQlWlK0rSvtpWipd3d2h3V2B3Nvdl98cds8Ry/G5bYNvT3MOTX2dfNSelsebDlrXJjvH5LVjwmJjwmJSgcVyvGc5x2Hl+G2Me1q7FIvizYr1yY8lJ+FqXrM1tE/lif4Hv3WXJAOg/VJ07Y9QPp37j6cuQtSyedcF3Wr0s79bNLONynGsfqnEM69W/8AhpDH2mPh35eNaeyHslGvhKmyHtF9cdn22+5zsf1xwzaMXbvLauxtRXzTa+he/wAjksVfL4+bNoZtnFHSJ8bx1raOtZx96p9m4/UH075ns20RN9/VyUxdenSueI8+vaevh0pnpjtPw+Hxj4x8+DMxMrAysnBzce9iZuDkXsTLxci3K1k42VjXK2cjGyLU6UlCcJ0rGUZUpWlaVpV6XGlu6nJaeLkNDLXNr56VyY8lJi1MmO9YtS9LR1i1bVmLVmJ6TExMK8+bDl18tsGas0vSZrasx0mtonpMTE+MTEx0mPol4r6n4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/cITuThbtwlcnclGEIQjWU5zlXyxhCMfbWta+ylKe2tX55MmPDjtly2itaxMzMz0iIjxmZmfCIiPGZn4P7rWbzFax1mfCIj6X0CfRv0tT09el/pTqS7iwwttxbgurucosW/Csac033m5HzKVLnjWsqfqmXl0jWtf5tKUp4UpSlPNh98nrxb3L+7bv31oxZpz6fL8tsRoXn/6XqeXS4uOnSPL/wAw19fzR0/jTaZ6zMzNg30a7Kj089LuE7QtTyZtXVpOeI/ecvXNs/8AD/L5MnSfydP+Bky1PZPcd5ZyzjHBOObnmHNOQaji3FePYN3ZbzkG/wA7H1eo1WBY8PeZWdn5coW7caVrSNPNLxrWtI08ZVpSvaezuzO7fUPunR7I7E43Z5jmOTy1wamlp4b7GzsZr/xceLDjra97dImZ6R4VibT0rEzHF8ty3GcFxubmOZ2Mepq69JvlzZb1pjx1j42te0xER9HjPjPSI8ZTA+vb7zvI+ey3fVHpIzNnw/hMvzGt3Xcc7d7W8x5VZlGtjIs8Jxb8I3tNhTp41hnz8ufcpWlYRwqxrS5bZ/Dl/An7X9Oq6HrJ70cGDm+ejyZ9XtmJrn4zj7R0vS3KZK2nFye1WfC2pXzcdjmLRktvxaPlReevvvT5Ln5z9pekV76ejPWmTkek02M8eMTGtWYi2vjn6Ms9Ni3hNYwdJ80/127cyLly9euTvXr053Lt25OU7l25OVZzuXJzrWta1rWta1rWta1qsmYsWLWxVwYKxSlIita1iIrWsR0itYjpERER0iI8IjwhH1e973m95mbTPWZnxmZn4zM/TMvzfo/hy3g3O+ZdZ8r0vOev+Tbnh/LuPZkM7Tch0Gde1+zwMmHjSvu79itK1t3I+Nu9anStu7CsrdyMoSlGvS/UH077F9V+zt/0+9SuJ1ec4Xk8U4trT3MNM2DLSfh1peJ6XpPS+PJXy5MWStcmO9Mla2jmOC57mu2OWwc729tZdPc1rRbHmxWml6z/AATHxiY8LVnrW1ZmtomszCpr0EfeS4b25TT9WeqTK0/XvZ1ytnA0/ZNKY+p695xfrTyW4byU5RtaPZXPZ/Hwwb8/NW3PFlK1jSqDfiNfgZ98+i1t71g9omHZ7m7SpFs2zwf5+xzPFU+Np1ekWycro0jr8OvIYKeWMlNutcu1WVP0C95nD93Vw9q+ql8fHcpPSmPc8Mepsz8I+b1mK62a37C89fLOKZrine7GUZxpKNaSjKlJRlGtKxlGtPGlaVp/Iru2ralpraJiYnpMT8Yn8kt8omJjrD/X8P6aXPvj9Jw7C9J+r7TwcWV7e9F8zwNvdvW7Vb12HDeb3bPFeS48IwpWVKfnZabKuTpXwjbx51lTw/FGeD+r7+vlvTP3lbfpFyGaMfHeoXGZtatbW8tZ5Piq5eQ0bzMz5Zn7LHJ69K9PNfLs0rSes+W+lHvn7IjuL0mxd04KTbY4HZpkmYjrP2fZmuDNER8f8J9nyWn4RXHMz4eMR+ruSHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtg+zT0fHtz1n8Z5NscSmRxzpPR7Ts7P8AfWqTxrm9xqw0PDcbz1/m37ewzLeys/y1/Jy/7ENv46PuAv6LexLle0+LzTi5Tv7b1+Bw+W3S9dS/m2+Tv0/ssV9PWvo5foj7dTr8W2nsx7Gju71p1eU2aebW4TFfdv1jrWcsdMWtXr9Foy5IzV//ACMrRVD9NWAww9YXrr6O9GXFf1HsLb/rXOtrg3cnhvVugv2bvLeSzjKtmzlZEJUlDW66l2Mo3dlmUpb8IXI2I5F+NLEt7/ZF+Hn7gPfX3f8AdfpnpfYe3tPLWnJ8/uUtXjtGJiLWx0n8227u+Sazj0dabZPz8d9i+tr2nYrhT1j9d+xvRfivtPcWb52/lrNtfRxTE7Gb4xFp+MYcPWJi2bJ0r4WjHGTJEY5jy9Xvrj7w9ZXKv1XsXdV1XC9Zm3sjh/WGiyMi1xDjNuUa2rWRKxLwlnZ/u61jd2OXSt2vmnG1SzZlSzG777Jvw+vb97F+zvuf0w0ftnPbeKtOS57bpS3Jb8xMWtSLR1jU0/PEWx6WvNcUeWls1s+es57Q5esHrr3z6z8t9r7jzfK0sVpnX0sUzGvgj4RPT45cvTwtmydbT1mKRSk+SMNm8zDADO30X/cD7w9F/IYU4pny5d1fssumRyjqXkOfk/1c2EpV8MjZ8fvxpclqdnWHs/OY1usLtaQplWcmFuEIx4e+38Nb0A99vbM27x1o4Tu7VxeTQ7i0sNPtuGI8aYNynWleR0Yt4/Zs94viibzp59W+TJe2e/Rb3C98ei3IxHE5J3OLyW659DNa3yb9fjfDPjOvm6f8ZSJi3SvzaZYrWIsM9KfrI6Q9YPDKco6o5FSu41+Pjy5dwHc+6wuacNy7/wCClnbayMpRu2JypWNjPxZ3ca7/ADY3KXI3LcKQXvF9jPr/AOyLvqe0fWPjJ+w7N7xx3Mavmy8XyeOvj5tbPNazjzVr45dTYri2sX8a2KcVseXJMX6Ues3Y/rFw33r2ps/y2OI+0amTpXZ1rT9GSnWfNSZ/i5cc2x2+EW80WrXKxpyyyAhm+6V0jXov1rdvanExfyvHewNja7b4t4UlC3c13P7lzY7iFi3X2RtY+6htcO1GNaxpCzGlPL/Nj6EH4Q3uAj3C+wjsrmN3N87lO2sNu3OQ8YmYz8PFMGtN5jxtkzcXbj9nJa0Rab57TPm/j2gp91HY3+YnrbzGrhp5dbkLRyGD8k025tfJ0j6K02Yz46xHhEUjp0+Ea80mTXYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1fba6Ur3x6z+k+J5OFDN49x/klvsblsMi1W7h/1e6/j/WSeLsLdPHxs52XZxNdWlaeFa5EaV8I1rWkef4qPr1X27exPv7vLUzzg5Pk9GeE46aW8uX7ZzE/YYyYbeHTJq6+XY3Ynr1iNa0162iInPHtp7Invz1p4TiclIvr6+aNzY6x1r8nU/lpraPprlyVx4f+HJHXw6ru3ncp52Jfqy9afR3o54f/AFi7S5BS9yHY492fEuudFcxcvm/Lr0ZSt0ua/WXbkfcYcJxrTI2OVWGPbrTyeed6Vuzc3Q9mnsP9wPvi74/zY9IeNnHxmrescjze3XJj4rjaz0t0zZ60t83ZtWYnDpa8ZNnL18/kpgrlzY8RerXrT2N6N8N95d1bHm2ckTOvp4prbZ2Jjw/MpMx5ccT4XzXmuOvw6zea0tHn6y/X53j6zuRynzLZV4x1vrM25kcU6p4/l5EeN6rwlKGPn7q7XyT2uypCvhLNyo0pCtZ0xrWPCcoVu+exb8N72/exPteKdjascv3Vt4opyHcO5jpO9sdYib4dWv51eP0ZvHWNXBaZv0pO1m2cmOmSIcvWj3Ad8+tXJebmcv2XjMVpnBoYbT8mn5L5J8Jz5unhOS8dK9Z+VTHW01nBpIMwUAAAA3Eegn7tnZvpjlqOte4P1jtfoq1XGwsK3dyfzfPOucOFY2oV4jsM+5SOZr7Vv8NNNmXY24UjCmJfxYxnbvQf/iM/gv8ApP7sq7vqt6I/ZuzfUK8Xy5Zrj+XxHN5Z62n7xw4aTOtuZL+M8nrY73vNrzua+3e1MuDcj0C93Pc/pfOHtnvH5nLcDHStYm3m2tOseEfZ73mIyYqx4fZsloisRX5OTFEWres/qLuTrPvfg+q7G6m5lqObcQ3Ea/ltpqr0q3MXJjGMr+t2uDfjDIw8uz40pexMq1buwrWnmhSlaeNMj1q9DfVf27eoG56Xes3B7PAc3oz+fg2Kx0yY5mYpn181Jth2tbJ0mcWxr5MmHJ0ny3mYmIlu7Q7y7Y794PF3J2juY97TzR4Xxz/FtHxpkpPS+PJXr+djyVrev0xHWHldtdc6Xt/q/sLqvkUaV0nYfDeQ8P2MvLScsaxvtVd11M7Hp40rS7YlcjfsypWlYzhGUa0rSlXx+jHqhz3ol6uds+sHbEzHIds8npclgjr0i99PYx5/lX8J6480UnFkrMTW2O9q2iazMT+nd3bej3j2tyPavJR/IcjrZte89OsxGXHanmj+6pMxas+ExaImJiYfO95Vxrc8L5PyTh3I8SWv5DxPfbjjO9wJV/HhbnRbC5q9piTrT+Nbd+1OFf8A9Hpv9n918F352lxffHa+eNnjeZ1Nbe1M0fDLq7eGmxr5I/gviyUtH/Crrcrxm7wnKbPDcjScexqZcmHLSfjXJivNL1/921Zj/wBj0DsjjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFb32JekY8J9NnMO59hiyt7fuvml3G1d+cKf6ThXXUr+h18rMpU8aVntr26pc8K+EqQtV9tY+ylv/AFh719t397quD9CuNzRfS7C4ut9ikT/F5TmoxbmaLRE9J8vHYuLmnX86s5MseEW8ZdvYd2RHB+me53psU6Zub2Zik/l1tPzYqdP+HYts9enhMVr+RvGlKMI1lKtIxjSspSlWlIxjSnjWta1/kV+K1te0VrEzMz0iI+Mz+SG88zER1lob9e/3leJdUV3nVPpYydRz7sqxS9rt12fKFjacB4TleFbN61x2FfGzvNlZr+Klynm19qflpOuXKl3HhYr/AA5fwL+8/WWmh6xe7/Fs9t9q5PJn1eBiba/Mcrj8LVtuz4ZeK0sseHk/N5LNTzTSulW2HZvoR6/e83iO05z9p+lVsfIcnXrTJuz0yamtbxiYwx412s1fj18dek9Os5pi+OJa+bc45h2Tyrdc359yXc8v5dyLMlnbrkPIc7I2W12OTKFLcZX8rJlWvltwjG1atx/BbhGNu3GMIxjS3n2B6f8AZHpZ2foen/pxxWrwnCcZijFq6Wnhpg18NImbTFMdIiPNe02vkvPW+XJa+TJa2S9rTFhzfO8z3Jyufne4NrLubmzbzZc2W83yXt8PG09Z6RERWsR0itYitYisREcTdxcQAAA571p2h2D05zPTdhdX8u3XCeZaG/S/rN9pMmuPk26ealbuLlWp0layca9SnkyMTJt3LF6HjC7bnCtY1xz6rekfpp65di73pn6ucLq8/wAFyNPJn1NvH56W8J8uTHaJrkwZ8cz5sOzgvj2MF+mTDkpeItHYO2e6O4ezObw9xdrbmTR3deetMuK3S0flraPGt6W+F8d4tS9fzb1tWZhVz6B/u/dfeoGml6u9QE9L1f3Rflj6zUb6lyWF192Plz/0ePbwMjKlKmo2l6X4K4GVdrYv3PL+Vv8AvL0MO3Th/Eb/AASvUr21fb/V322V2u7uxMcXz7Op0jLzPCYo8bzlpjiJ5HQxx+d9r18cbGvi832zX+Vhvu5ZYvQH3hdv+oXyO1fUKcXF81aYpjy9fLqblp8I8trTP2fPb4fKvbyXt0+VfzXjDXdegRbup5Pv7dI/q3Aum/UFrMTzZfEN9n9Z8qu2rdZXLmj5VYlvOM5ORd/8NnDzcPMsU/krPOjRZq/q4Hr99zepHfPtp5bL0w85qYed4+trdKxt8feupvY6R/ZZNnV2dbLP5MfH2n8qOz8QDsf7X2/w3qHq1/P08t9LPMR4zizxOXDa0/RXHkx5Kx/dZ4S6rdCLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTR9gPpK5i6fu71EbLGrGu1ytb1HxLJnZ8k64mujZ5bza5C5Onmnau3rmltxlDwj57FyNaylHwhU+/rIvr5j2+c7A9snFZusaePP3HyNIt1iMmf5nHcXFqx4VyY8VOUvMW63+Xs4rRFa263k6/D87Hti0+c9RdmnT51qcfrzMdJ8tPLn2ZiZ+NbWtrREx4ebHaJ6zH5vf3r1+8PwLov8AXOrPTld0vZvb9j8zrdty6s47HrvrzOj/AKK/bpexpUjudpYrWtPyti5+VsXaeGTduTtXcOWt34cv4IPqN7hvu/1f90FNrtPsjJ5M+tx3ScHM81in86k+W9fNxmhljpP2jLT7XsYZ66uLHjy4t2uQPX33j8B2J8/tX03nFynMV60ybHXz6mpb4T4xPTYz1+HkrPysd/DLa1q2wzKh2L2Rz3trl+57A7L5Zuua8y5BkVyNtyDf5tzNz8mVKeWzYt1l+Czj2YUpax8axGFmzbpG3ahC3GMaXEvTD0s9OfRbsfR9NvSjhtXgOD42nk19PTxRixUifG17dPzsubLbrkzZ8tr58+W1subJfJa1pii7j7l5/u/mc3P9zbeXe3difNky5bTa0/RER9FaVj82lKxFKViK0rWsREcIZAcEAAAAAAyT9Mvqx7s9JXOLfN+nuU3db7+VmHIuJbT8xsOFcxwbMvNTB5NoY3LcbvlpWVLOTZnaybHmlWxftVlKtdV/df7NfQP3n+n9uwfW/h67U44tOlyOv5MPKcZltH+F0dyaXtj6zFZyYMlcupseWkbGvlitYjJnpj6td7+kfOxzfZu18vzTHzte/W+tsVj+xzYvNEW+ny3rNctOs/LvXrPWwL0Rfcg6U9Zmps6fAvw6/wC5MLChe3/Vm+zrE8vK91bpLK2vCNnKlum2wKV8az8luGTY8P8AT48IVt3btI33+/hb+vXsV5rJzXI457k7G2Ms10+4NTDeMePzW6Y9flcEeeeO25jp5fNfJq7HX/m2zkyRlxYph/Q/3JdketGnXT17Rx/M469cujlvHmt0j87JrX8I2MUfT0iuWn/GY61mtrTjfeU6Uj1L61OV8i1+HTF493RotP2fge5t0hjU3OXSeh5ha88aeEr9zZYV/YXqV9tPzca19kqLRv4GHr3b1m9hvEdscnnnNyfYe3s8Dm81ut51cfl2+Nt0nxjFTR2sWnin4T9jvEeNZRu+87smO0vWvb5HXp5Nfm8WPep0j835luuLYjr/AG1s2K2a30/y0T9MNUaY1qcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9nptPsuQbjVaDT4l3P2282WDp9Xg2KVlezNls8qGFg4lmNP4yuXbkYRp/LWried5vi+2eD3O5OczV19Lj8GbZ2Mtp6VxYMGO2XLktP0Vpjpa0z+SH16Wps8jt4eP0qTkzZ71x46x8bXvaK1rH8M2mIj/hXz6fZdOehH0vcD1HYfMNHw3gnUvB+PcVyN1mXJxub/AHuDrY02E9RrLca5Obn7PLjk5ccXFsyuzlOcqW6RjLy+cRzfF+uX4iHu37i5v0y4Pb5zuLvPld3kKauKsTGnqZc8zhjZzzMYNXT0NecGvOxny1xUrTHW2SbWr5p+9PZ7M9BvS7Q0+49zHpaHEa2HBOS0z/K5a0/PnHSI8+TLmyRfJFKVm0za0xWIiekw3r2+7P2d6oZbjrXqau26r6HvRvYGdhW8mFjm3YuJKtYXJ8v2WFKv5XBuQ8Y/o+Hd93KMpUy7uVSsIWrav4cv4MnpN7SK6Pqp6zfZ+8PUTHNc2LLak34rhMkeMRxuDLEfaNuluk/eWzjjLS1azp4dSYvkzRfevvu27n9UZzds9o/M4rgbda2rExGzuV+E/aL1mfJitHh9nx2mtomfnXyxMVpp+TcNOgAAAAAAG7n0E/eE550P+jdW+oie67N6es+6wNVymM5bHsPr7H9lvHhbv5dyn6vq7NPZXEvz/M2Yf/216cLcMScA34jP4Ifpz7ift3q77Yq6vaffF/Nm2OPmIwcLzN/G15mmOk/du/l+MbGKs6ufJ/8AFYaXy5N2m8XoF7xee7BjD2r6izl5Th46Upn6+fc1K/COk2n/AJxgr+rtPzaV/wAHe0Vrhmhf1D8c6/8AXP6LeztJ1dyPSc/0fY/As7Z9fbvRZdrKxMjmPHZw5HxPHuzn5bmLft7bDx8bOxr0Ld+z43bN6EJ0lClZv2y90epP4e/vw7S5/wBXOL2u2+Q7W5fFg5nU28dseSnGbsW0uRvWI60z4r8fs58+rnxWya+fphz4cmTHNLzIf6i8Z2/66+inKaXa2zj5DByWpa+plxWi1Z2cMxm14n6aWjPjpTLS0VyU/OpetbRMIMfbGtYypWMo1rSUa0rStK0r4VpWlf4Vo9Futq3rFqzExMdYmPhMflhAdasxPSX8v6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn1vPX12XqPS7wL0kdM1yusOuNLos6PYu/wBdl1tc57O5JyfZX99y2zn7nD8tcPTe+ypYVjDx6+9v4tqMcu9OzcriW44e3/w4fSrmvdz3H70fXWMfdvdO/uYp4TTz4/NxPA6Ohgw6nHWw62XzRs8n8rXrtZdnNHydfbzXvp4KZsUbmXYDe9f+5tP0t4/0h7M83F8bgxW+2ZaW6bW7mz3vlzxfJXp8vW815x1x0/PyYqxGW80tOGuAqR5r+AAAAAAAAA9rpd3ueN7fXb/j212Oi3unzMfY6nc6jNytdtNZsMW5S9i5uBnYkoXbV23OlJQuW5UrStPGlXD89wPBd1cLtdt9zaeDkeP3sV8Gzq7OKmfXz4clZrkxZsOStseTHeszW1L1mtonpMPr0d7d43cxchx2a+DPhtF8eTHaaXpes9a2pesxatonxiYmJiWaXqR9cHMvVj011Zw7unU2N32v0/vdnb0PbGF+Xwr/ACfg3I9XC1uNVzDVWYRhPZWcvB1tyxm49YwvQ97721C9SV7I0P8Aaz+H/wBjezT107w759B92+h2b3vqYLbfb2Xz5aaHLaWxa2rscbsWta1dLJr7e9TLq5vNkwZPk/KzZME1w6ua/Un1y5n1Z7L4rhe9MMZ+W4fLeMW/XpWc+rmxxGTHsY4iInNXJiw2rlp0revn81K363yYMJCGCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeXpu7Q450j3bwDt7k3FLvOMbrfa3eX6jiscq1gWNpy/TYF7J4TLP2F2F2tnFxdvTCzMiduzcnWFmsIRpKVJx1891HpD3P6/egXcnon2nzFe38vdOvXjdnkJx2zW1+N2c2PHysYcNbU+bnz8dO1q4a3y4scZM9b5LzSk0v3v007q43sjvjj+7+T1Pt1ONvOxjweaKRk2MdLW1vPeYny0psfLyXmK2tNaTWsdZiY956l/VZ3V6s+d3ud9w8ou7S7alft8d4xrqXsHhvDddenSX6XxfQ1uXI2I1pGEbuRdncyb/AJYyyL92dKScB7UfZ16DezP07x+nnojxFdSt4pO7yGfy5uT5PNWOnz9/bilLZbdZtOPDjri1dfz2rra+Glpq+71N9V+9fVrnrc73jtTlmJmMOCnWmtrUmf4mDF1mKx8Ite02y5OkTkveY6scW0TGwAAAAAAAADLP0netDvD0c8x/rL1Zv/faDZX7MuX9ebueTl8K5fjWqUhSWy1lu5CtnLtx9mNscWUMi17YeeVmVy1c0y95nsR9v/vj7G/zV9X+N8nJalLRxvNakUx8pxt7eP8AIZ7UtGXWvbxz6WeMmtl8L+SmemLNjy56S+tXfPo1zX3n2rsddfLMfaNPL5ra2xEeH59ImPLkiP4mak1yV+HWaTalume5eWcW552r2DzjhXHsriXGOZcs3HKtZxXLybGbPjNOQ5ktvl8fxszHjGl7Hw7927j4l2sISnYhblOEJ1lGmdfQvs3vD059HO2vT7v3k8fNctwXH63H5+Qx0vjje+xY41se5fHebTjz7OHHjzbGOLXpTYvlrjvekVvPS+9OW4ruDuzked4XXtp6u7nyZ6YLTFpw/OtOS2KLR0i1Md7Wpjt0ibUis2iJmYjrJlh1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHn4Ot2G0vXcfW4Gbsb9nC2GyvWMHFv5d6zr9TgXNntc67bxqSrGxjY1m7kZF2tKRt2oTuTrSMa1px/I8pxfEYabPK7OLVx5MuHBW+bJTHW2bYy0wa+GtrzWJy58+THhw44mb5ct6Y6Ra9qxP0a+vs7V5x6uO2S1a3vMVrNpimOs3yXmIiZitKVte9vhWtZtMxETLwHIPnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe9hxrfXON5PL4arMrxjD3mDxrI3fk8MC3vtlgZG0wtV76tfxXp4+LfveWNK+EY+MvDzR8evZO6e3MXdWLsm25ijl8+pl3qavm/lraeDNh18ux5fox1zbGHH5p6ea1+levlt5eQrxm/bjLczXFb7LTLXDOXp+ZGW9L3rj6/wBtNMd7dI+ER49OsdfROwuPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb2vsmel/Tdy7v1H845vrPzfDbfVe16QxZXY/+tn9tYN3G5Vka65GtPLfxNRjyx51r4eEM+nh419sa8P4+Xu3530M4D0t9PuwNv5HO27g1+6skVn+Lh7dy48nH0zRMeOLY5LNXNWI+N+Ot16RHS2+Xsi9LdLvLe7l53nMXn0o0cnGV6/TbfraueaT/AG2PXrNJ/JGxHTx+Glrsbg266x7B5x1vyKEbfIOAcu5HwzdUt0lS1+qcZ297TZ0rPn8K1hW7ZlKFf5Y1pX+VPF6XeoXA+rXpr2/6p9r2m3G9ycbpcnqzPTzfZ97Wx7WKLdPCLxTLEXj6LRMfQ0o7k4Ld7Y7h3u2+SiPtHH7GbWydPh58GS2O3T+CZrMx+WOjhTvjhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKHCfRLTO+ybySt7VVl2FyOWb6udb5cet/Lh+g2KR01jFp5a3Ln5rheLe/L2oeFKXc2dYUl5pe8qsd/e/meP8Ax7+K+RuRHbXFxi9OM/W8Uxz9rvM7Vsn53kp9n7nz4/nZL9Zth0KReaxWvy5L+F9Efn+yLZ8+LryOz5u4KeHW0fKiPlxXw80/M42lvJWPhfPbp16z5pr1qdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXCfaf6Rl0n6JOrbObiUxeQ9nwy+4eRU8lYTnc5xbtXON+9jKlJUnDRY+pt3Iy9tJ0nR5/X4yXr9X189/Xd+xoZpzcZ2lOPtrS8esRXipyV3vLMTNZrblsvI3pavhbHak+Kcr2mdjz2R6I8VTPTybPKRbkc38M7UVnD1+nrGrXBExPwtEp/fvY9JW+sPWDkc81mLSxoe8eJanm1K2bXucW1yrUU/qryrFt+FPCVy5+VxNlflT21nmVrX21WS/wDvX3L6teyHH6dcrmnJyPp9yWxxf51vNktx+z/wDrDj8lvprSn2jZ0sNfhGPRiI8I8I+ve72TXtj1itz+rTy4Od18ez4R0rGfH/IZ6x+WZ8mPNafptmmWn1N006AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdodKdZbTujt7rPqXTTlZ2PYvN+NcQtZUYUuU19rebW1g5e0uW61p428WzK5k3P+yEKsSevfqzxPoP6J92es/OVi+t2vxW9yVscz5fnW1NfJlx69Z+i+xlrTBT+7yVdq7I7X2u9e8OM7R0p6ZOS2cOvFunXyRlyVra8/wAGOszef4Ky+hnqeK6DScU1nCdfrMa1xbUcewuK4Omnbjdw4aDA1sdRjaydqfjGVumPCNqsa08Kx9lXmYc13h3Hz/eO339yW3kty+7u5eQy7MWmuWdzNnts3zxaPGuSc1pyRaJ6xbxhYh1OK4/R4nFweviiNXDirgrjmOtYxUpGOtOk/GvkiK9PyPn6+qHp/I6B9Q3cXT1+zfs4/BOeb3U6WuTKsr+VxW7lV2PD9jdlKta1rlaq9h5PtlWv4/bWtfa9KD2ket+t7kfbN2P64a96Xy9xcRqbG18uIimPkK4/k8lhrEREdNfkMWzg8IiP5PwiI8FfP1R7Oyen3qJzPZt6zFdDay48Xm+NsE28+vefj/HwWx3+M/xnQzYp0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdz+nbqbM73716n6gwq3rdewud8e45nZViFZXdfpcvPhPkG1jCP8fymDHJypf8AdCrBHue9Z9D27+3jvP1u3orb/NniN3dxY7zEVzbWPDaNPXmZ+H2nbtgwR/Dkh3b057Szd+d98R2dh6x947WHDa0eM0xWvHzsn/5vFF7z/BV9C/V6zX6bW63TarEsa/V6nBxNZrcHFhS1jYWvwMeOLh4mPbj7I27duMYQjT+FKUo8zfluW5LnuV2ec5nPfZ293Lkz582SfNky5s15yZcl7T42ve9rWtM/GZmVh/W1sGlrY9PUpGPFhrWlKVjpWtKxFa1iPoisRERH5Iaafvk9KfUL0o6jtLX4UsjedG82wdtkX7dv3l2zwrm87fF+SWoQhHzeH5+ulybkqV8IW7E5Sp5aeaM6P9X19ev/AE095G76RcnsRi4/1B4rNrUpafLW3KcVF+Q0bTaZivX7JHKYKVmOt8uxSlJ80xW2mPvp7J/zh9J8PdWvSbZ+C2a5JmPGY1tny4M0RHx/wv2a9p+EVxzM+EdYj/XbkPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdp9i7pOPPfVFyPtrY4sr2o6P4Vk5eBerbrOzb5pz6N7jOlhdrKlY//wAtju7sPb5qThCUf5ta0gM/rCvr3b059o3F+i/F5opu+oHKY8eavm6WtxfDzi3tqaxExb/463FUt4eWcd8lbfxoid3/AGJdkxz/AKpbPd+zSbYeC1rWpPTwjZ2/Nhx9fo/wMbMx9MWisx8FeKlAmASj/fr6UrxnvHrHvPW4du1q+0eHXuK7+/Yt18Z8v6/vxhbzM67T2Unk6nNwcexStfGscOfh7Irj39XN9e692e37u32+cpnm+32hydeQ06Xt8ON5mkzbFhr/AGuDkNXbzZZjwi+/Tr42RN+/nsmeL744vvvWpEYuV15wZZiPjsakx0tefy3wZcVK/ljBb8jQksaNBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb1/sOdKf1v9Q/Pu6tjhVu6vp7hVdTpMq5Dyws807Eld1Vm7YuTpXzVtafG29q7GFaVj+Yt1lWlJUpKvJ/WKPXv/Mr2zdt+gnF7Hk2++OV+07WOJ6zbi+FjHsWresT1rF+Sz8dkx2tHS/2bLFYmaWmm+HsK7J++PUPkO99mnXFw2t8vFb8mzueakTE/T016bFbRHjHzKzPhMRNZymQlvdc9v9cajuHqrsbqre0hTU9icK5Jw7NuyhScsSHINTd1sM+zT+NLmPO5G/alTwrGcIypWlaUqyn6J+qXNeiPrD2v6w9u/wDxvbHK6PJ4qxPSMk6ezjzzhtP0481aWxZKz1rbHe1bRMTMOs94dt6nePavJdqb8R8nkdbNr2np18sZcdqReP7qkzFqz8YtETHjD53/ACrjW54XyfknDuR4ktfyHie+3HGd7gSr+PC3Oi2FzV7TEnWn8a279qcK/wD6PTb7P7r4LvztLi++O188bPG8zqa29qZo+GXV28NNjXyR/BfFkpaP+FXX5XjN3hOU2eG5Gk49jUy5MOWk/GuTFeaXr/7tqzH/ALHoHZHHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALMfsr9KfS30a6rmewwPyvIu7uUbnnuTcuU8Mv+rWFP+rPEMWdY0pT3MrOJe2Nintr4Zta1r7fLGiz+PJ69/8Aq97593sXjdj53F9gaGtw+Otf8H9uyx9v5LJH0/Mrl2celm+EebRiIjw895ofZT2R/mt6M4eZ2Mfk2ecz5Nu0z/G+TWfka9Z/uZrjtmp8fDNMzPj0jbohTbfNY33dukrncvok7Eytfi1yuQdR5ev7f08IWa3LlcXitu9i8upW5GnmjCGjy9lkVpSlaVnahSVKU/FGWj8FP18x+hXv67Y1eSzfK43vTHm7a2Zm3SvzOQnHk47wn821rcrraOGJnpNaZsk1mZ/Ntq77v+ybd6eiHI5denm2OHtTkMfSOs+XBFq7Hj8YiNbJmv8AwzSvX8sRJr9SEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWqfZ06Tl1D6KeG7vYYf5TkPc+42na+z95CPv6anbRt6jhsKXP41s3dThYmdah/CNcmdaU8ZSrWhh+OJ6+V9bPfrzvA8bn+dxnYmtr9vYOk/mfaNab7PJz5fhGSnI7WxqXt8bV1McTPlrWImy9m3ZE9n+ielvbFPJsc1kyb9+vx+Xk8uPXjr/azr48eWsfCJy2+mZ67UUPja0BFh943pCvUPrS5fv8AAxfccc7q1Os7T1dYUlKzHb7GU9NzKxK5L+N6e1w8nPuQp/NhlW/5K0Xy/wADf1/j1s9h3Cdt8jm+ZynYezn7f2InpFp1sPl2uMvFY+GOvH7OHUpb+yvp5fpiUJ3vL7Gjs/1s2+QwU8utzeOm9Tp8PmX649mOv9tOfHfLMfRGWv5WqlMO1RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc1644Ju+0OweD9bcat0u7/n3LePcO0sJRnK1+p8j2trUYc73k9tLcZ3aSuS/hSNK1r7KOheqXqHwHpH6adweqndVppxnbfG7vJ7UxMRb5Gjr5NnJWvXwm9q45rSP7K81rHWZc521wO93R3Fo9tcbHXY5DYw6+P8AJ582SuOsz/BE26zP0REy+iJwPhum684Pw7gHHLFMbj/BuLcf4jpLEbcLdLOq45qrOn19ukLdKRpWlqzDx8KUp4vMe9RO+Od9Tu/+c9Se6Mk5eS7g39zktu8zM+bY3tjJs5p62mZnrky26dZmeixVwPD6XbvB6fb/AB1fLr6ODFr4o8I6Y8OOuOkeHh/FrHwcsdLcy9VvNNreR6Xbce3WLDO0+91ew0u2wrvj7vM1u0xZ4OfjXPJ7fC5auThXwrSvhVzPb/O8r2xz2l3LwWadfe47Yw7Wvlr082LPr5K5cWSvXw60yUraOvh1h8e9pa3I6Wbjt2kZMOxS+PJWfhal6zW1Z/gmszD55He/Vey6P7m7Q6h29btzM675xyLiscq7SFJ7HA1eyuWdVt6UhSlPLmYvucqHsp+G5TxpSvsp6aft39YeJ9wPoT2j618LFa4O5+K0uQnHXr0wZtjBS2xrT16z5tbY+br38Z/Oxz0taPGa7ffvam12N3pynZ+51m/HbObB5p/s60vMY8nh9GTH5bx4R4Wjwj4OpmZnUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2V091tt+4u1+uOqdD+Dbdh8143w7DyJQrK3hy3+2ta6ewv0j/wDSx4Tlfu1/khCVf5GLPXD1U4X0N9G+6fWPuGPNp9scVvcnlp16TljT18mauGn/APMz3pXDjj6b3rH0uzdm9tbnefdfG9p6Phl5HZw69Z+ivzclaTef7mkTNrfkiJl9D7i3G9Rw3jPHeIcexaYOg4rodRxvSYMZVlHD02k19vV6zFpOvtr7uxahDxr/AB8HmSd3d0833z3Xyne3cuadjkeY29ne28sx0nLs7ea+fPkmI+Hny5LW6fR1WKOK47U4bjNbh+Pp8vX1MWPDir/a48VIpSv/ALK1iHvXW3IgNFf34ekrfL/TvwTu3Axoy2/TnNI6rb5ELPhWPDexvdarInkX4UrWtLW3x9Tbsxn+GPv7tY1jKVaTsNf1dn18ydk+5zuH0C5HNMaXfPFzsa1Jt4fenCfM2KRSk+EfM43NyN8tqfnW+zYYtFq0iaaH+/XsivL+nWh3vr065uG2fl5J6f8Ay255cczMx/a7FNeKxPhHzLdJiZ6WkuXOESAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcP9krpOXZfrAs9g5+PK5oOjOJbbl853I1ljXeU8gsz4lxfAu1p4eWdI5WdsLNf/AN+Gg/8Ax9fXyvpT7I7+mnHZYryXqFyOtxsRE9L14/TtXkd/LX8tZtg1NPJH9puy3H9kPZNu5/WKO4c9euvwWvk2Jnp1ic+WJ18FZ/h6Xy5a/wAOFY8o2pmAAEjn32OkocG9THEe4tbiUs6ru7hVuO0uwhKlLvNeu6WOP7S5KtKeWnn1V7SeFPHxrKNyVf8AtXUP6vH6/X9QvalzXodyuacm52Bylp16zMfm8XzXzdzXrEdfNPl5DHynWf4taWxVj4dEQvvv7Ijg/U3T7y1aeXDzetHnn8uzp+XFefyeOC2t0+mZi0tHqwE0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuo+xr0nb7C9Vm47S2WH7/TdGcLzdvi3Z2qXrEeac2pc4rx21ejP8NK/ka7rJtSrStY3bEJRpStKSjA5/WDfXq/pn7OtH0h4vP8ve9QuUxa2SsW8t54vivl8hu2rMeMx9rji8GSvWIti2L1tM1ma23X9i/ZEdxeq+burap5sHBa1slZ6dYjZ2fNgwxP0f4L7Tes+MxbHEx4x1iv1SQTEAAOmvUP1Ngd69GdsdQbGNr3XYPBeQcdxb13wpbwNxlYEpaDa0rKkqUlh50cfKhWsa0pK3StaVp7GdfbL6ycl7efcH2b628XNvP21y2lu5K1+OXWx5qxua89JiZrs6ls2vaImJmuSYiYnxjpXqJ2nr999jct2dsxHl5HVzYazP9jktSflZPp8ceWKXjwnxrHhL552z1ufpdjsNPtcS/r9pqs7K1uywMqErWThZ+DfljZmJkWpe2M7dyMoTjX20rStHpmcTyvG89xWtznDZ6bOnu4sefBmxz5seXDmpGTFkpaPC1L0tW1Zj4xMSrvbWtsaWzk09uk48uG1qXpaOlq3rM1tWY+iazExMflh4DkXzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBPscdIx679J+y7Tz8Wtne97cyztzauzhS3frw3hF+/xPjeNdhKlJ0p+ejucu1KVaUnayISjTy1pKdI3+sD+v1vU33l6vpBx+b5nHennGYdW1YnzVjk+Vpi5HevWYny/wDwtuM18lY8aZdbJW8+aJpSYn2M9jx256S5e6s9PLsc9s3yRMx0n7NrTbBhiY+P+EjYyVmfCa5KzEdJ6zuhQPt1gAGpn7znScO1fRhyPleFh/mOR9J8h03Y2vlas0nlXNHK9/VnmGLS7Wv4bEMLNrsr9P5fyUP5aUTN/gT+vd/R333cX2dv5/l8X39p7XCZotbpjjbiv27jcnl/ssttrVjRxfk+33+iZaj+9Lsivdvors8rgp5tng8uPcp0jracXX5OxXr9FYxZfnW/L8mv5EYC9uhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbfSm/6g49zzWZXefAd92F1xkeGJvdVxPkt/ivKtdauXY1rudBm+3Hv37EaSrTDy6Rt36V8nvrFa0vRwt69duetvcvp1tant67j1O2e6cf8pqZ+R0Kchx+a1a2/wCbbmLwzYsWW01j7TrzbLgmPmfI2axOG/cOyOQ7O4/nsWXvrj8vI8bb83LTBnnBnpEzH8pit/Etasdf5PJ0rf8Ai+fHPS8U39FfbK+1z6kuCYXYvTe05vy7j2V5bOZHH7I2OPuePbKsPPd0vJtLkWaZGBmW6e2tnIt088Kxu2q3LM4XJVNvcN+LF+Lt7WPUPY9MPXHU4rhOTw9bYpvwmC+tuYOvSu1o7VMk4NvWv8Iy4b28l4thyxjz48mKknnYnti9rXqVwOPuPszLs7mtfwtEbl4yYr9Os482KaxfFkj+1vEdY6XrNqWrae5/8Ef0K/7B7L/tF2HwWCv6ff8AEL/+o8H/AJFw/wDKO6/7D/oR+77v88v/AHp/gj+hX/YPZf8AaLsPgn9Pv+IX/wDUeD/yLh/5Q/2H/Qj933f55f8AvT/BH9Cv+wey/wC0XYfBP6ff8Qv/AOo8H/kXD/yh/sP+hH7vu/zy/wDen+CP6Ff9g9l/2i7D4J/T7/iF/wD1Hg/8i4f+UP8AYf8AQj933f55f+9P8Ef0K/7B7L/tF2HwT+n3/EL/APqPB/5Fw/8AKH+w/wChH7vu/wA8v/en+CP6Ff8AYPZf9ouw+Cf0+/4hf/1Hg/8AIuH/AJQ/2H/Qj933f55f+9Zpel30f9J+kDj3J+N9M6jca/D5hucXeb7K3u5v73Z5WRg4NMDBx6Zl+MKxsWY1uSt2qU8KTu3JeP4vZod7uPe169+9rufie6/Xfd1tnPwmrk1NTHqatNTBjx5cs5st/lUm0Tly28lb5JnrNMWKvT8zxzX6Xej3ZPo7x21xnZeHJjpuZa5ctsuSct7WrXyVjzTEdK1jrMV+ibWn6WUTUVlMAABq/wCx/tCei7tHnvMuyOR8b5tY5Fzvke35Zv4aXm+drNXPd77Nnstrk4mvhblS1G7fuXLtbca+FKyr5aUp4UpLh6XfjZe+70j9OOD9Lu1uV4rJxfbujrcdpztcVhz541dTFXBr0yZpvWck48NKY4vaPNNax5pmeszq33J7PvRXunuDd7k5PW2a7G/myZ8vy9m9KTly2m+Sa06TFYteZt0jwiZnp0jwcL/wR/Qr/sHsv+0XYfBd7/p9/wAQv/6jwf8AkXD/AMo4X/Yf9CP3fd/nl/70/wAEf0K/7B7L/tF2HwT+n3/EL/8AqPB/5Fw/8of7D/oR+77v88v/AHp/gj+hX/YPZf8AaLsPgn9Pv+IX/wDUeD/yLh/5Q/2H/Qj933f55f8AvT/BH9Cv+wey/wC0XYfBP6ff8Qv/AOo8H/kXD/yh/sP+hH7vu/zy/wDen+CP6Ff9g9l/2i7D4J/T7/iF/wD1Hg/8i4f+UP8AYf8AQj933f55f+9P8Ef0K/7B7L/tF2HwT+n3/EL/APqPB/5Fw/8AKH+w/wChH7vu/wA8v/etSvrv6m+176VbW26+640XN+2O+LcbmNc0OL2hsb3D+B5VfG377nm2wLfjPKtyp4/o2JcpkV8PDIuYdJW5zmf/AA7fWf8AFw94eXT9SvVHkeK7N9OrTGSu5k4DBXkuXx+E+XidfNbpXBePD7z2KTrR1662LdtXJSmo3r12l7XPSmmbt7tvX2eW5+Ims4q71519W3w67WSkdZvWfH7NjmMk9OmS2GJra2jhYIaLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM5PRp3F6UuC8hrxf1aenbTdp8E3OdGcOe6zZ8r1/OOETvUjbnO5rdNscXF2muj5aznYpat5duspzt3r1Iwxqx9e+f0O94vqF21/nb7MvU7a7Q7i0cUxPEZ8HHZuK5WK+a0RXPs6WfY4/dt1itc3zMmnkilMeTDgm19qM6+jXePpRwXI/dfq325j5XQzW8Nql9im1rdekeNMeamPPhjp1mvlrlr1m1b3iK4lQ3XX29vtiducO03YHWnTfAObcN5Bj/mdTyDQcz57m4OTGNfJesXPJt6Ts37M6VtZGLfhC9ZuUlbuwhcjKNKjnqf+Jd+LR6Ld8b3pt6r988zwHOcbfybGnucZxGLLSZ8a3r143y5cOWvTJhz4rXwZ8Vq5cOS+O1bTKP257efa/3fw2HuDtnhdTe0tiPNjy4tnbtWfomJ/wCcda3rP5t6WiL0tE1vWtomI5t/hW+gH+7fxn5m7C/ph0D+mB/Ei/1pb38x4b/q1z3+yn7ff9GsP7fb/wAYP8K30A/3b+M/M3YX9MH9MD+JF/rS3v5jw3/Vp/sp+33/AEaw/t9v/GD/AArfQD/dv4z8zdhf0wf0wP4kX+tLe/mPDf8AVp/sp+33/RrD+32/8YP8K30A/wB2/jPzN2F/TB/TA/iRf60t7+Y8N/1af7Kft9/0aw/t9v8Axg/wrfQD/dv4z8zdhf0wf0wP4kX+tLe/mPDf9Wn+yn7ff9GsP7fb/wAYP8K30A/3b+M/M3YX9MH9MD+JF/rS3v5jw3/Vp/sp+33/AEaw/t9v/GGbfCOFcV634hxvgXB9Li8d4hxDT4Og45pMKt6WNrNTrbFMfExbdzJnO7crSNKea5duTnOVaznKUq1rXQbv/v3u/wBUe9uV9Ru/9/JynN83s5dzd28vljJn2M95vkyTWlaY6dbT+bTHSmOlelMdK0rWsZu4PhOK7b4fW4Dg8FdbT08dcWHFXr5aY6R0rWJmZtPSI8ZtM2tPWbTMzMuVOmuXAAej5LxzR8x45yDiHJ9bj7njfKdLtOOcg0+X564m10e8wLms22tyqQlSVbd+xduWp+WVK+Fa+FaOxdq90dwdj90cb3r2ntX0eV4fa193T2cfT5mvt6mamfXz4+sTHnxZsdMlesTHmrHWJjwcdyfG6XM8bscRymKM2rt4smHNjt/FyYstZpkpbp0npalprPSfhLBb/Ct9AP8Adv4z8zdhf0wkJ/pgfxIv9aW9/MeG/wCrWC/9lP2+/wCjWH9vt/4wf4VvoB/u38Z+Zuwv6YP6YH8SL/WlvfzHhv8Aq0/2U/b7/o1h/b7f+MH+Fb6Af7t/GfmbsL+mD+mB/Ei/1pb38x4b/q0/2U/b7/o1h/b7f+MH+Fb6Af7t/GfmbsL+mD+mB/Ei/wBaW9/MeG/6tP8AZT9vv+jWH9vt/wCMH+Fb6Af7t/GfmbsL+mD+mB/Ei/1pb38x4b/q0/2U/b7/AKNYf2+3/jB/hW+gH+7fxn5m7C/pg/pgfxIv9aW9/MeG/wCrT/ZT9vv+jWH9vt/4w4tzX7cn20ut+Lbrm/PelOB8R4jx3BnsN3yHf8153rtVrsWEqRpO/k5O5jTzTlWNu1bj4zuTrGEIynKMa9v7D/FD/FY9Ue79DsD067+5fmua5TLGHV0tPi+Jz7GfJPWelMdOMmelaxN8l56Ux462yZLVpW1o4nm/bf7Zu2+Jz85z/Caunqa1ZvlzZdnapSlY+mbTsfGZ6RWI8bWmK1iZmITF+truH0ccr3M+Eej708aXgfENVn+fN7X22w5nkct5fPGlWMbWh0O72V+xrdZOvjPz5VmeZkU93WscKlLlm5bP9g3od74+zuDr3/73vU3a7i5rcw9MXb2vh4ynHcbGTxm25t6ujhzb2/WOlfLr5celr2+ZEW3pnFmxRget3eXo1y25PB+jvbuLQ08Vvzt/JfZnY2Jr9GLFkzXphwTPWet62zZI8vWMPS1La/ElLXoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd39CeovuD0zc7w+w+m+Y7Diu8s1s2tliwrTK0PJdbbu+eem5NpL/jYzcWf4qeW5Hz26195Znau0jcjgD3He2D0R92Hp5n9M/XPg8PMcfeLWwZJ/k9vRz2r5Y2tDap0y6uxXwnzUt5MsR8rPjzYbXxW712B6jd4+mPPU7i7N3b6meOkXr/GxZqRPWcefFP5uSk+PhMdazPmpal4i0V1ehX7pfT/AKurGt4Ryj8l1X3xKzG1d4RsM2UtFzHItRrW/m9ebrK8vv6ypH3ktVk1pl2qVrG3+bt2p5NaVP4hn4Qvrb7Ktja7/wC0fm94enXmm1eVw4um3xlLTHkxczq4+vyukz5K8hgi2lmmK2yfY8uWmrEvfoR7p+z/AFex4uE5Ty8Xz3TpOte38lsTEeNtTJb+N16eacF+manWYr86tZyNpiIJtUAAAAAAAAAAAAAA4rzXm3EOuOLbrm/PeSafiPEOO4VzYbvkO/zrOu1WuxrdaQ89/JyZRp5pSrG3atx8Z3J1jCEZTlGNe5dh9g96+qPd+h2B6dcVs81zXKZYw6ulp4r59jPknrPSmOkTPStYm+S89KY8dbZMlq0ra0cPznN8P23xWfnOf2cenqa1ZvlzZbRSlKx9M2n6ZnpFYjxtaYrWJmYhLn68/vNcs7QhuOq/Slk7fgPXt732Due1pRydR2By7H8ZW52uLR/De0eBdp+L33hTYXaeX8WHT3tm5bp/Dp/Ap7N9JL6PrB7x8Ot3H3NTy5dbt6Jx7PD8bfwtFuQn87Fy25SfD5X53G4p835u9Pys2KLT1796HL90xm7U9J7ZOP4+etcm/wDnY9vYj6YwR4W1cVvj5vDYtHTxwx5qW0JznO5Ody5OVydyUpznOVZTnOVfNKc5S9ta1r7a1r7a1WM8ePHhx1xYqxWtYiIiI6RER4RERHhERHhER8Gg1rTeZtaesz4zM/S/h+j+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWXpR9aHefo75dXkPVPI5T0OxyLNzlnXm9llZ3B+XWbfhDzbLUwnCtnLhCNI2Njiyt5Nun4KXK2pXLU9M/eP7Efb374Oyo7Z9YuLivI6tLV47mtSKYuV421us9MGxNLfM17WnzZdLYrl1cs/nzjrmrjy48uek/rV336Ocx949p7PXXyTE7Gnl621tiI6fx8cTHlyREdK5sc1yVjw800m1bWA+jD7hPRvrO0VuzxbYU4f2ngYVMrk3UvIcyzTkGFS3H/Wdjx3NpS3b3GujKlf9axY0uWqVh+asY0pwjKkd77Pw0fcH7Eu4rZ+79b777Q2cvk0e4tLFf7HlmZ/MwbuPre/G7sxMfyGe04stov8AY9jarjyWrMN6L+4bsX1q0IpxWT7HyuOvXNoZrR82vT43w26RGxh6/wBnSItWOnzceKbVic8kdTPoAAAAAAAAAAAAADCz1heu/oz0Z8Yrndgbim855ssK5kcS6r49k413l3IJV81vHzMy1Ksqa3W1uxlG5ssuPk/DONiGRej7mu+nsi/Du9wfvq7s+7/TbRnj+3dXLWnI9wbuO9eN04/Nm+PHaOk729FLRamjrTOT8/HbYvrYL/PrhL1i9eexfRfi/tHcOb5/IZazOvo4bROxm+MRa0eMYcPWJic2SIr4WjHGS8eSY+fV/wCufvP1mcp/U+xd1XU8J1ebdyOIdXaC/fscQ41Dwlbs5V2xXwrsNj7uc4XNnmUldrSU4WqWLFaWY3dfZN+Ht7fPYt2h91emGhG7z+3irTkuf3KUvyW9P5trY638Y09Lz1ramjrTXDE0pfNOxsVnPaHX1g9du+vWflftPcef5OjitM6+jimY18PxiLTHhOXN0mYnNk638ZinkpMUjDNvSwuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH74+RfxL9jKxb97Gysa9DIxsnHnOzfxr9mdLlm/YvW60lCcJUpKMo1pWlaUrSvi+fZ1tbd1smnuY65cOWtqXpesWpelomtqXraJratqzMWrMTExMxMdH648mXFlrlxWmtqzE1tEzExMT1iYmPGJifGJjxiVBXoN+9Hv+F/o3VXq8y9hyviVv3GBpe6LNjI2PMOP2qf6O1a57h2KSubfFjHy0/ULEK50KUlW9HNlPzWq1P4iv4EHbnff271i9lGHDw3M28+ba7XtemHjdy38a1uIy3mtON2LT5p+x5bRx+SZrXBfQrTy5ZCPQP3rchwvye1PV+99vUjpTHyURN9jDHwiNqsdbbGOPD+VrHz69Jm8Z5t1rTpxXlfGec8e1HLuGcg0/KeLb/Ct7HS8h4/sMTa6ba4F78NvK1+xwZztXIVrSsa1hKvhWlaV8K0rRUy7v7O7r9Pu5t3srvrjdnh+X43LbDtaW5gya+zr5a/HHmw5a1yY7dJielqx1rMWjrExMyf8AF8txnO8dh5fhtjHt6mxWL4s2K9cmPJWfhal6zNbR9HhPx6x8YcgdYcmAAAAAAAAAAAws9YXrv6M9GfGK53YG4pvOebLCuZHEuq+PZONd5dyCVfNbx8zMtSrKmt1tbsZRubLLj5PwzjYhkXo+5rvp7Ivw7vcH76u7Pu/020Z4/t3Vy1pyPcG7jvXjdOPzZvjx2jpO9vRS0Wpo60zk/Px22L62C/z64S9YvXnsX0X4v7R3Dm+fyGWszr6OG0TsZvjEWtHjGHD1iYnNkiK+FoxxkvHkmPj1e+ubvT1l8opsux93+l8L1eZcyeI9Ycfu38bh3G6VpK1Zyp4s60ln7D3c5xubLM892tJzha9zYrSzG7v7J/w9vb17F+0Z4v0u0PtnPbmKKcjz25Wl+T3vGtrY4vEeXT0/PWtqaOt5MPWlL5vn7ETntDr6weuvfXrPyn2nuTP8rSxWmdfRwzNdfD8Yi0x8cubpMxObJ1v4zWnkpMUjDRvOwuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA91x3ke/4jvdTyfiu72vHOR6LNx9npd9o8/K1W31Wfiy95j5uv2GDOF21chWnjGcJUrRwPc/bHbfe3b252l3hoa/KcXyOK+Da1NvDj2NbYw5I8t8WbDlrbHkx2jwmt6zE/kffx3I8hw+/h5Tis99bZwXi+PLivamTHes9YtS9Zi1bRPwmJiVM3oO+9RqeSU03VXrDzMLj+/lXF12k7xsY1jA47uLkpe6tQ7H1+JSFnWXq1rGldpi244cqV82RaxIwnfuVQfxFfwGuZ7Wne9YfZBgy8lxsRfPtdqXvfNu61YjzWnhM2SbZN7FEdZjQz3tvRMeXWy7lslMGOTf0F96+pyfye1fWS9dfYnpTFycViuHJM+ERuUrEVw269P5ekRhnr1yVwxWb2ocw8zD2OHi7HXZWNn6/PxrGbg52FftZWHm4eVajfxcvEyrEpW7tu7blGdu5CVYyjWlaVrSqsvvaO9xW9m4zk8N9bZ1r3xZcWWlseXFlx2mmTHkx3iL0yUvE1vS0RatomtoiYmEiGDPh2cNNnWvGTHkiLVtWYtW1bR1rato6xNZiYmJiZiYnrDyXwvpAAAAAAAAAAfndu2se1cvXrluzZs253Lt25ONu3at241nO5cnOtI0pSNK1rWtaUpSj98OHLsZa4MFZve8xWtaxM2taZ6RWsR1mZmZ6REeMz4Q/K960rN7zEREdZmfCIiPjMz9EQ0CevP7z3GevI7fqv0k5ep5tzeFL+Bue37kLWz4TxO/SVbN2zw7Fuxra3ebH8UqZkq1wLVaQrGmd5pwtWQ/w6vwJe6/U2dL1f96GHY4Dt6Zpm1e26zbByvI06eatuSyVmMnFatvCJ1qxXkssTeLTx/lx3yx/evXvT4vt353anpFfHvb0da5OQmIvrYJ+Exr1mJrs5Y8Z+ZPXXrPTp8/ratZf+Ycx5X2DyXccy5zyPcct5XyDMnn7rkHINjk7XbbLKuUpSt3KzcuU5y8KUpCEfHwhGlIxpSNKUpbc7I7G7N9Ne1NHsX0+4vV4XhuNxRh1dLTw49fWwY48fLjxY61rXrMza09PNe82veZtaZmLvmea5fuHlM3Nc5s5dzb2LTfJmy3tfJe0/Ta1pmZ8PCI+ERERERERDjLtjigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnH6NvX33l6MeRUucL2UuUdb7HNt5PKup+Q5l+vGdx4+EL+dqL0Y3Lmp2NY+ymdiQrSdaQpk2sm3CNtH575/w3vb777O2Jx9+akcR3Vq4px8f3FpYqfb9bp40xbNOtKcjpRbxnU2LRNItknVzauTJbLOdPRj3Ad9ei/I+bhMv2rjclvNn0M1p+Rk/LbHPS04M3T/jccePSvzaZK1iqwT0letrov1j8S/XesN/XD5Rrcazc5b1tv52MLmnFL86+SU8nBjOscvCnP8A9DY4crlidK0jOtq/S5Zt0ived7BPcL7He8/83/VvjfncRtXtHHc5pxfLxfIUjxiKZZrFtfarX/C6WzXHsUmJvSuXXnHnyTE+knrf2L6y8R9u7X2PJtYoidjTy9K7OCZ8PGvWYyY5n+Lmxzak9YiZrki1K5fNJWYgAAAAAAAH53btrHtXL165bs2bNudy7duTjbt2rduNZzuXJzrSNKUjSta1rWlKUo/fDhy7GWuDBWb3vMVrWsTNrWmekVrEdZmZmekRHjM+EPyvetKze8xERHWZnwiIj4zM/RENBHrx+8/xbrum56t9JWXqecc6jS/r9z25dt29pwbil+tJWL1vh+PPxtbvPt1/FDLl5tdbrSNaUzqVnbt2P/w7PwJO7/U62j6v+87Ds9v9vTNM2t25W1sHLcjXwvWeSvH8pxepePzba9fLyeWs3iZ4+Yx5MmgHr370uK7cjN2r6R3x72/HWmTkJiL6uCfGJjXj+Ls5Y+MZJ669Z6f4fratZe+Ycx5X2DyXccy5zyPcct5XyDMnn7rkHINjk7XbbLKuUpSt3KzcuU5y8KUpCEfHwhGlIxpSNKUpbg7I7G7N9Ne1NHsX0+4vV4XhuNxRh1dLTw49fWwY48fLjxY61rXrMza09PNe82veZtaZmLnmea5fuHlM3Nc5s5dzb2LTfJmy3tfJe0/Ta1pmZ8PCI+ERERERERDjLtjigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzn0Mfc97k9HuXg8Q208ns7o25lw/O9f7XYSjsOMWb1zxy8/rzcZFJ/kp0rWt2WvuUriX5eb8Ni7clk0iZ/EI/CU9DPe9p7He3Cxj7S9Qq45+VzOvhicO/atf5PDzOtSafaqz0jHXdpMbuCnl/O2MOKurbaD0K90Pefo5mx8Pt+blOCm352pkv+fgiZ/OvqZJ6/Ln+ynDPXDeevhjvackV3enf1N9MeqbguNz/prl+LyHW+Fm1udPkUjg8p4psrtulyWn5ToLkq3cXIjXzUjL8di9SlbmPevWaxuSpSe5v2n+uvtC9Q8vpt66cJk4zb/Otq7NOuXQ5HBW3SNnj9usRj2MNvCZr+ZnwTaMW1hwZotirL76dep3ZfqpwNe4ey9yuzj8IyY5/Nz695jrOPPimfNjvHj0nxpfp5sd706Wnv5rcyEAAAAAAAA6X719QXUXps4Jm9i9ycz1nEeO43mtYkMmXv91yDZUj57Wl4zpMfxyc/LufxpZx7dfJCkrt2tuzCdyOePbz7a/Wr3T+oev6Yeh3BZ+b5TN0tlmkeTW08HXpba3tq/TBqa1PhOXNevnvNcOKMmfJjxX6T356h9oemvBZO4+892mnr08KxM9cmW/TrGPDijrfLkn+1pE9I63tNaVtaJHfXZ91Tt31Z3NrwLhNNh1T0Pcu38f8AqnhZkYco5zhxueFm/wBh7bBnWMrcqRpP9IxZ/lYVr4XZ5krdu9S6b+Hj+Dx6LezHHp+o3f04e8fUWla3+8cuLrocTlmPzqcNr5axauSszNPvLYr9ryRHmw00aZMuC0Q/rx7re7vVy2XgOD8/E8BMzHyK2/l9qvXwnbyVnpNZ+P2fHPyqzPS85prW8apExrU4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMuA9g836t5bpud9dco3PDuYcfyaZmo5BoM27g7DDu+FYzjG5br4Tt3I1rbvWblJW7sKyhcjKEqxr0f1H9NOwPV/sze9O/U/iNXneD5LH8vZ09zFXLhy1+MT5beNMlLRF8WWk1y4skVyY70vWto5rt/uDm+1eWw8/27tZdLc1582PLitNb1n6fGPjWY8LVnrW1ZmtomJmFUn2/PvC8a712HGOmPUZj4PC+4txma/QcX5prMeuPwrsjb5t2OFrsDMxY+NdRt8q5K3bt2qebDyL1a0syxZTs4tafH4lH4Ifdft547lvXX2v5MvPdj6OPNub/F57+flOE1sVZy5s2PJPSOS43XpW975J8u7q4K1nPXbrTNuRKx7ffeNxnfexq9leo1a6XM5rUw4NmkdNbcyWny0pav8A8vsZJmIivjhy3mfJOKbUxN56vY3tAAAAAAdTd2939Z+nfrnedq9tckscZ4foqWoX8qVm9l5ufsMqtYYGm0+vxqSvZWXkzp5LNm3Gv8KznWFuE5xzR6B+gHqt7m/VDj/R/wBGeKvy3N8jNppji1ceLDhx9JzbOzmyTXHg1sFZ82TLeY/saUi+W9KW6h3v3x2z6d9t5+6+7tmNXT14jrbpNrXvbwpjx0r1tfJefCtYj8szMVi1okS9dv3WO2/VjPacB4L+pdUdDXq3Me5xXDy4w5TzrFpWsIXewNvgyrSVica+NdPi3K4ka1/08syULV2F1j8PD8Hb0W9mtNP1I9Q/kd5eotIrevIZMczx/E5PCZrw+tlrExlraOkcnsUjcmI/5vTSpky4rxB+vPuv7u9WrZe3uB8/E8BMzE4K2iM+1X8u3krP8WY/+Xxz8qJ/jzmmtbRqgTJNSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbfSvefanp553rOx+oOY7XhvKNbKMZX8C75sDb4PnpO9p+Qam/SWNn4V3wp7zGyrc4VrSM6UpcjCUcL+vXt69Hfc16d7fpd62cHr85xG1EzFMtembWy9Jiuzp7NOmfU2sfWfJn170yeWbUtNsd70t3Dsnvvuv0757F3J2fu309rF9NZ60yV69Zx5sc9aZcdvppeJr16THS0RMWA/bq+5Txz1s4edwfkHFsrhnd3EuOf1h5PrtXjZmbwfeabGzcbU5PIeObW7W5cxPHKyrMZ6zPnW5Ck4+5v5cY3Z26R34nv4VfdHsH3tbv/ALa5inPdgc1u/YtDPsXxYuV1Nq+LPsU0t3XrFKbPTBgyTTf1K1xZJx2+fraVrYaZZh/bj7l+N9b8OTg9/UnS5zTw/Oz0pFrauXHFqY5zYbz1nH+fesTgyzNq+aPJkzRF7V2kohm1AAAAAADW39wn7iHFvQ9xvS6zG4tnc37b51rdjmcJ0OTZzdfxLDx8K7TDvb7k+/jGlLlmxenH/wC3YM65N2tKRnPEt3IZCU/8ND8MfvD8QLune5bZ5fFwHZfb2fBi5XcpbFm5HLfLWctdTQ05tM0yZcVZ/wCe7Va6uHrNqU3MmK+s1p9w/uK4n0N43Dq01b73L79L21sUxamvWtZ8s5c+Xp41raY/kcUzlv4RM4q2rkR299+ovuD1M87zOw+5OY7DlW8vVvWtbizrTF0PGtbcu+eGm4zpLHhYwsWH4aeW3Hz3K095endu1lcleE9uPtg9Efaf6eYPTP0M4PDw/H0its+SP5Tb3s9a+Wdrf2r9cu1sW8Z817eTFE/KwY8OGtMVYcO//UbvH1O56/cXeW7fbzz1ilf4uLDSZ6xjwYo/Nx0jw8IjraY817XvM2npBn90UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbY/sz9IS7a9Z3G+U5+JW/xvpLRbXsvYTnarPFub63Smg4bh1u/wAI34Z+ZHZWafxrTCn/ANlUNP46fuAr6MexPle0OOzRj5Tv/b1+DwxW3TJGpMzucnliv9litqa06WWfhWd7H9Mw209l/Y893etWtyuenm1uDxZN2/WPzZyx0xa1ev0WjLkjNX8vybfkWhKIaasAAAAABi/60elLfqG9LfdfU0MWuXteRcI2WXxe1bt1uXa8y43KPJ+HRt+WlZU8+zw8W3c8lPNWEpxp4+bwrtx7EfXrJ7Zvd32F6zXy/J0+L5XBj37TPSv3XvRbQ5Pr1mKz5dHZz3p5vzYyVpaenl6xiv1q7Jp6h+lnN9oxXz5dnWvbBHTrP2nD0z6/T6fHNjpE9PGazMfS+f57Y1rGVKxlGtaSjWlaVpWlfCtK0r/CtHpMVtW9YtWYmJjrEx8Jj8sK+lqzE9Jfy/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVdfYW6Rpxfo7svvXZYkobPtXl9ni2gu3YUr/APiHX1udu9lYdytKVjHJ2uZnWL1KVrStcO3Wv81Th/rGHr7Pd3uC7U9vPF5otqdncbbf3K1n/wDuXM2rauPJHXxnBx+tqZcUzHWsb2SI8LJY/YN2P919i8n33s06ZeW2IwYpmP8A5fUiYm1Z/JfPky1tH0zhr+RvrVy2/gAAAAADSZ99HpSXPPS3xztrXYVu9uOkOb42VnZNLdZ3rPCuf1s8a3VuzW3Stf8A+Z00d2fj7KQhOVfDwT6/1ev17r6de7vlPRjk8849L1A4rJjw083SluU4eMm/q2t18P8A4GeVx1/spyZKVjr5ujR/32dkf5welet3drUi2bgtmtrz08Y1try4MsR9P+GjWtP0RWszPwSGrrqIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVw/Ym6Prwb018t7m2WHWzuO7uZXLWqvTjGlbnB+u5X9DrJwrKnmj7zbXt156eyk4wtS9vhSqlp/WG/cBHqD7quF9C+KzxfR7A4yttisTP5vK81GLbzxPT823k47Hxfl+M0vfNXw6zCXf2H9jfcXppud57NOmbnNmYxzP062n5sVJj6Y657bPX6JiKT+RvEV+G9AAAAAAACDz7jvSUeg/WX3bwvBw6YXHNtyWvP+I24QrHE/q5z6zHk9jDwIy8Je5wMjIydZTze3xxpe2VPCVfRP8AwufXy3uO9i/YPfXIZ/n8ppaMcPyUzPXJ9t4e06Fsubp4fM28OHBvz08PLtVnpWetawKe5HsiOwfWfnOFwU8mtmzfa9fp4V+TtxGeK0/ucV73wx1+nFPjPxnB1IGwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8rDxMrPysbBwse9l5udkWcTExce3K7k5OVk3KWcfGx7UKVlOc51pGMY0rWta0pR8u7u6nG6eXkN/LXDr4KWyZMl5itMeOlZte97T0ita1ibWmZ6RETMv2w4cuxlrgw1m97zFa1iOs2tM9IiIjxmZmekR9MvoTemTpzD9P3p/wCo+nMOOPSfAuD6XUba7jV8bGdya5j/AKhy3aWq+H8MzaX8zK//AIjzPvdh647/ALlPcl3r65b1rzXuPldrZ165PC+LRrf5PHa9v4dbQxa2D/8ANrDfph2bh9PfT3h+zMMR14/Wx48k1+Fs0x59i8f/AJTPbJf/AN53q14d+AAAAAAdY909aavubqPsvqjdVtQ13YnB+TcQvZF23W7HBnvNTdwMXZwjT21ni3p28m3WNaVpOEa0rStKMt+hHqty/oX609qesnBRa212xyujyVaVt5ZyxqbGPNkwTPjHk2Mdb4bxMTE0yWiYmJl1XvTtnV7z7Q5PtLd6Ri5HWza8zMdfLOXHalbxH5aWmL1+mJrEx4vnh8j4/t+Jch3vFeQYd3Xb7jO52nH93r79KxvYG302dPXbLDvRr7aStXrc4Sp/JWj02e1u5eF7z7Z47vDtvPXa47ltXX3NXNXxrm1trFTPgy1n6a5MV63j+CVdnkuO3OJ5HY4nkKTj2NXJfDlpPxrkx2ml6z/DW1Zif+B6Rzz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7bRaTacl3en45pMO7sN1yDa6/SajAsUjW9nbTa5cMHAw7NK+ys7t2cIR/76uG7h5/iO1OB3u6O4M9dbQ43XzbWzmt/Fxa+vjtmzZLf3NMdLWn+CH2aGjtcnvYeN0aTkzbF6YsdI+Nr5LRWlY/htaYiP+F9DTobqnV9G9L9X9QaetmeF13wjQcYnk2IyjDZbDXYELe43MqTpGvnzcz3+Xc8Y0/Hcl7Kfwp5l/uJ9YuW9wXrt3d62c55o2O5+V3N+Md5iZwYc+a1tbWjpMx5dXW+Vr08Z/MxV/Ot8ZsR9g9qavY3ZXF9n6fSacdrYcHmj4XvSkRkyf8OTJ5sk+EeNp8I+DtthZ3AAB0P3d6nehfTjZ41e7r7N43wGXL9tj6fjuLtb9+7n7G/dvxsXs6OuwLd6/bwcas41zdjdtwxcelY++uwrOFJbGegXtM9xfuiz8rg9Be097uSOE1r7O7k16Vrhw0rW164pzZr48V9vPFbRq6WO99vZmtvkYckUyTXoHe/qf2F6b01r978ph4+dzJGPDXJMze8zMRNvJSLWjFTrHzM1ojFj6x571m1evdOt2mt3evwNxp9jg7fUbXDx8/V7bWZePn67Y4GZajfxM/BzsWUrd6zdtyjO3dtyrGUa0rGtaVYH5XieV4Hk9jhOc1sulu6eW+HPr58d8OfBmx2mmTFmxZIrkx5Md4mt6XrW1LRNbRExMO6621rbuvj3NLJTNhy1i9L0tF6XpaOtbUtWZratomJi0TMTE9Yno89xb6gAE3f3/ek4Xdf0h6iNdif6bFydn1ByvLt2qTncxsqF7l/B6XLkfbGNqdveRrWVK0rW7ClKxr7J2mv6tz693xcp6ge2TlM/8nmpg7k47HNukRfHOLjeV8tZ8JtkpfiZiKzExXDeZi0eNI1vxAuyYtr8F6ia1PzqWvx+xbp8a2i2xrdZ+iKzG1Hj1jreI6xPxmeWuEZIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYr9qvpGHeXrZ6n1+fixyuO9d5WT29yWErdL1v8nwKdrM0du/Yn+Gdq9u7uqxr0J/hrC5LxpL+bWML8YX1+v7ffYN3nyfHZZw8p3PTH23ozFvLb5vLxkx7dq3j86uTFxWPkM2O1fzoyYqdJr/ABq7He1PseO+vW7iNbPWL6/GzbkM0THWPLqzW2KJj4TW2zbBS0T4eW09Yn4Tcg8+pOiAAAwP2f3KvR1qO97Pp8zu29VDlk/e4eXyelLf021XJLWTTHjxDZ84ncji29hLxrXxp440J0rYu5NvJ8LFZFOJ/Cr98XN+3e/uV0Oy9i3DR5cuPQ8fvzY0bUm88lg4qKTsX06+HhPl28lLRsYdXJqddiMB7fuX9HNPv2vp5m5ekbc9a2zeH2PHmien2e+118kZp/8AbirMTjvkrl/MZ3xlGcaSjWkoypSUZRrSsZRrTxpWlafyI7rVtS01tExMT0mJ+MT+SWeomJjrD/X8P6AARUfeI6Tr1D62OcbrBwY4nHO5NXqu1dPW1GsrM9lt4T1PM4zu+2lb9zc4ebm3IeysY5NutaeEo1lfU/A+9fK+tfsI7f4LkNic3Kdi59jt7Z80/nRg1prs8ZMV8JjFTjNnV1aW8YtbVyxE+atq1hL95HZM9n+tu9u4Mfk1uapj38fT4efJ1x7Pj/bTsY8mW0fGIy18OkxM6sUvzVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzv7RHSEe6PWx17l5+JTK451Bi53cG7pO1Sdr81xe7axeIQpcn+GlyO8y9bkRjWla1hZueWnsrKMS/wCNd6/29CfYR3No8dmnDyne2TD23q9LdLfL365MnJTMR+dNLcVr7uCbeFa5M+LzTPmiltofaD2P/np628dm2KebW4et+Qy9Y8PNgmtdfx+HWNnJhvEeMzWlunwmYtqUFU3wADS/69vu8ddenOu46w6Mrpu0+67FL+Bstl76ud1713mQrWFy3u8zBuQrsdlar7P03EuUhanSVMq/buQrj3J3fw5fwUfU/wB0FdH1a9wf2ns/sLJNcuDB5flczzWKfzq21cWWlo0tHJHj9u2aTfNSa209fLjyRs49KvXz3fduem85u1uxfl8rzdetb36+bU07fCYy2rMfOzV/U458tJiYy3ravy7Sf9pdsdjd2c22/YvavMNzzfmW8u+fO3W7yq37sbEJyuWNfgY8aRs4mJYpKscbDxbduxZh+C1bhH2Lk/pD6Nel/oH2DpemHo7wmr2/wfH16YtXVx+Ss2mIi+bNeZnLsbOXyxbPs7F8mxnv+flyXt4ome6u7e4++Oczdxd2bmTe3c89bZMtus9PHpSkR0rjx169KY6RWlI8K1iPBnD6HPuYd0ejfY4nGrt3I7I6QyMrzbXrTdZ96k9FC/frdy9n17tb3nrrMmspTuXMXyyw8isp1uWY3pxybcfv4gn4UfoT75eMzd1YKU7V7/xY+mvzurhr025pTy48HM69fL9uwdIrSmfzU3dataRiz2wUtq5c5+hnuZ709GdqnGXmeS4K1v5TSy3nriiZ62vqZJ6/Jv1mZmnScOSZt5qReYyVr+9OXqf6Y9VXBbPPem+WWN5gRpYtbzRZdLeDyziOyvWveV1HKtDWc54t6nhKkLkZTsXqRrPHvXrfhOtJT3Qe0r119nvqHk9OPXPhr8dszN7am3j65eO5LBW3l+08ftxWtM+KetZtSYx7GCbVps4MGXrjiYT039UOyvVfga9wdm7cbGPwjLit0rn17zHX5efF1maW+PSYm2O/SbY73r+cyBa0MiAMOfX70pT1AekLvHr3Hw7mdv68NzeV8RsWLdLmZd5fweUeV8fwsP2eNJ5l/EpgSrT21t35x/lbyfhv+vU+233sen3qds541+Ojk8XH8la9vLjrxvKxPHbmXL8Imuti2Z26xPhGTXpb41hhn3Adk/8AqB6P8527jpOTP9ntn14iOtp2NbpsYq1/JOS2P5U/3OS0fSggejcgGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVK/YL6Rppute3/UBs8Ssc7nHJMLrni929GlJx47w/HjuN/l4c/D22szYZtmxPxrX8eB4UpTwrWVQz+seevtuc9VuyvbbxWaJ1+39HLze/Ws9Ynd5K862njyR18Mmtp6uTNTpEfyfI9Zm3WIrKh7AeyI0u2eY9QNqnTJvZq6eCZjxjDrxGTLav8Ac5MuWtZ/utf4R9NCCtAkPAcD7L7P6/6c4Xuew+zuWafhfDOP49cjab7d5PucazSvjSzjY1q3SV3Iyb0vC3j4mNbuX7060t2rc5ypGuR/Sr0l9SfXDvvQ9M/SThtnnud5O/k19PVp58lv7a97TNceHBjr+fm2M98eDBji2TNkpjra0de7m7o7e7O4XP3F3Rt49HS1465MuWelY/JWIjra97T4Ux0i1726VpW1piEo3r2+8B2H6gP1nq70+z3PVvTV73uv2nIfeywOxOxMSvjDJhmZWJOX6Rq73j5fyOLcrfvW6V/NX/d3p4du47+HN+CN6ae277D6u+5Sur3f31Ty5tfS8vzuF4XJ4TScWPJWPvLfxfH7XsUjXwZJj7Jr/NwY97JE96++8TuH1A+d2t6eTl4rhbdaXzdfJublfhMWtWf+b4LfD5VLfMvX/C5PLe2Guk9Pc0ibivQV923s70yV0/WvcH6v2v0VZ/L4GDbnkRyee9c4UJUhCvE9jnzjHNwLUK+Wmnzb0YQpGEcS/iwjK3dg+/EY/Bd9JvdjG96q+iH2bs31DyefNlmKTj4jm8sxMz944cNZnV28l/GeT1cdr5LWyW3NbbvemXDuR6Ce7nuf0x+T2x3j8zluBr0rWJnzbWnWPD+QveY+birHh9nyWiKxFYw5MURNb1m9RdydZ978H1XY3U3MtRzbiG4jX8ttNVelW5i5MYxlf1u1wb8YZGHl2fGlL2JlWrd2Fa080KUrTxpk+tXob6r+3b1A3PS71m4PZ4Dm9Gfz8GxWOmTHMzFM+vmpNsO1rZOkzi2NfJkw5Ok+W8zExEt3aHeXbHfvB4u5O0dzHvaeaPC+Of4to+NMlJ6Xx5K9fzseStb1+mI6w7OYkdpAaJvvx9KS5f6e+Ad2a3Dhc2XT/NK6je5MbdY3LfDexY2tXK9fvQp+KNrb42qtWoT9ka5NysaxrKVJ2Hv6ut69x2V7l+5PQPlM801e9+L+06lJt1rbk+FnJsRWtZ/izk43PyOTJavjaNXHFotFa2x6G+/XsieY9POP731scTl4bZ+Xlt08Y1tzy0mZn6YrsUwVrE+EfMtMTEzMWkzXNESQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABV19hfpCnF+jeyO99li+TZ9r8utcY4/euUjOv9T+voXLN7KxZeHjGmTtszOsXo/y1w7df5KKb/8AWL/X+e7/AHB9q+3nis3m1OzeNtv7lY6x/wDrLmZpauPJHwtODjtbUy4rf2Mb2WI+MpZPYN2N91di8n31s06ZeW2IwYpn931ImJtWfo8+fJlraPp+TWfyN9aua37cK7D7F4L1Pw/d9gdk8p03DOG8cxZZm45BvcuGHg4lrx8tu1Dx8Z3b96dY2sfGswndvXJRt2oTuSjGvf8A0z9MPUH1l744/wBNvSziNnned5TJGLW09THOTLkt8bWn4Vx4sdYnJmz5bUw4MVbZc2SmOtrRwXcPcfBdpcNn7g7l28elpa1fNky5beWtY+ER+W1rT0rSlYm97TFaVm0xEyq+vf7xHO+7q7rqz025G5616lu1yddt+Zxnd1vYPYOFKNbF21Zu2q0uabWX6ePjj2ZUy78K0pfu2oTu4q4X+HL+B76eegMaHq97qMet3V3nSKZ9bi5iufhuGyxMWra1bRNOT38U9P5bJWdPBk6zr4s2THi3EUnr77yOd74+f2p6a2ycZxE+amTZ8abe3X4TETHjrYLf2tZ+bevhktStrYmjlYIaMAAO2el+8e1PT1zvW9kdQcx23DOV63zWvzevuQuYW0wJypcyNPvtVk0ni52FdrGNbmLlWp26yjGdI0nCEo4Z9ePb76P+5n072/S31t4PX53h9r875eaJjLr5oiYps6exSa59Taxxa0U2NfJjyRW16Tacd70t2/srvnuv0757F3J2fuX0tvF4eak9a3pMxM48uOetMuO3SOtMlbV6xFunmiJit70Hfde6q9VVrVde9lfpXVHfU7VnGt6TIy/y/DefZn/pyu8C2mwuSnDKuS/F+i5lyt+lJUpj3c2kbs7dLf8AEU/Bv9YvZ7l3fUv0r+0d4+nVbWvO1TH5+T4fF/GivL6+GkVtgpH5v3nrUrrWms22cOjN8VMkuvoJ7se1PVemHt3uTycTz9oivypt01tu3w66t7zMxeZ8fs2SZyR1iMd80Ra1dtyFtt2AgV9eHScfT56t+7+s8TCrr9Dhcyy9/wARx6QrSxb4dzG3DlXG8fFuUrWM4YuLlww5SpXxpO1OMqUlGUaej5+HX69z7lPZd6f+q25sRs8jn4zHp8leZ/PtyfGWtx+9fJE9JrbPn1rbMRMeOPNS1Zmlq2mAD167Ij099XOc7Zw4/l69Ni2bXj6I19iIz4a1n6YpTJGOZ/tqTE9JiYjERusw+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/uEJ3Jwt24SuTuSjCEIRrKc5yr5YwhGPtrWtfZSlPbWr88mTHhx2y5bRWtYmZmZ6RER4zMzPhERHjMz8H91rN5itY6zPhER9L6B/o+6Utenb0z9M9P/l7WPsuI8K1v9ZqWa+aF3me7rLkPNL8J/xrCe1ysututfbSHlp/ClKPNb97nr3m9znuu769bvmWyavNcpn+webwmvGavl0+LpMfCLV4/X1ovEeE380/GZlYP9HuyKenXplwvZ3liuTT1qfO6fCdnL1zbMxP0xOfJk6fwdIZJtVWTWB/rR+4N0h6L+PXLfKM6PMO09hg1yeLdSaDOsQ3+wpcpWGLsuQ5nluw1GslOPhXMyLcpzpSf5WxkyhOMZFPYf8Ahqev/vt7mrk7R154Ps/Wy/L5DuPcxXnTw+XpOTBpY/NjtyO9FZ6xrYb1x45mn2vY1aZKXtgP1q9wvY/otx8xyuT7ZyuSvmwaGK0fNv16+W+a3S0a+Hr/AMZeJtaIn5WPLNZiI9fVZ6yO7/WDzSXKe1+Q1rp8DIyJcS4DpvfYXC+G4l/8NbWo1kpSldvyj4Uv5+VO7k3f5srlLcbduF3r2dexr0A9kPYkdo+jnGR9u2aUjkeY2vLl5Tk8lfHzbOeK1jHhrbxxamvXFq4v41cU5bZMuSHT1X9Zu+PWPmvvXuzZ/kccz9n1MfWutrVn6MdOs+a8x/Gy5Jtkt8Jt5YrWuKjcRicABkn6ZfVj3Z6SucW+b9Pcpu6338rMORcS2n5jYcK5jg2ZeamDybQxuW43fLSsqWcmzO1k2PNKti/arKVa6r+6/wBmvoH7z/T+3YPrfw9dqccWnS5HX8mHlOMy2j/C6O5NL2x9Zis5MGSuXU2PLSNjXyxWsRkz0x9Wu9/SPnY5vs3a+X5pj52vfrfW2Kx/Y5sXmiLfT5b1muWnWfl3r1nrYF6IvuQdKeszU2dPgX4df9yYWFC9v+rN9nWJ5eV7q3SWVteEbOVLdNtgUr41n5LcMmx4f6fHhCtu7dpG+/38Lf169ivNZOa5HHPcnY2xlmun3BqYbxjx+a3THr8rgjzzx23MdPL5r5NXY6/822cmSMuLFMP6H+5Lsj1o066evaOP5nHXrl0ct481ukfnZNa/hGxij6ekVy0/4zHWs1tbYgjHbGOmPUV1Ph97dEdt9P5vuI07C4HyPjmDkZEPPZ1+6y9dKXHdvKHjTxrh58cbLj/326M8e2P1m3vbx7h+zPW7Q88z2zy+lvZaUnpbNq481Y3daJ+iNrUtn17f3OWejpPqL2jh787D5fs/P0j7x1c2Gs28YpltSfk5P/zeWKZI/hrD56Gz1ufpdjsNPtcS/r9pqs7K1uywMqErWThZ+DfljZmJkWpe2M7dyMoTjX20rStHpk8TyvG89xWtznDZ6bOnu4sefBmxz5seXDmpGTFkpaPC1L0tW1Zj4xMSrv7WtsaWzk09uk48uG1qXpaOlq3rM1tWY+iazExMflh4DkXzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHl4WHlbHMxMDBsXcrMz8mxh4eLZjW5eycrKuxsY9i1Cn8ZTnWkY0/lrV8e/vafF6Obk+QyVw6+vS+XLktPStMeOs3ve0/RWtYm0z9EQ/bDhzbOamvgrN75Jitax4za1p6RER+WZnpD6Evpk6cw/T96f+o+nMOOPSfAuD6XUba7jV8bGdya5j/qHLdpar4fwzNpfzMr/wDiPNA92Hrjv+5T3Jd6+uW9a817j5Xa2deuTwvi0a3+Tx2vb+HW0MWtg/8Azaw36Ydm4fT3094fszDEdeP1sePJNfhbNMefYvH/AOUz2yX/APedKesn189G+jDjkrvNtj/WXsbZYMsrifVPHsrHryfdebzW8bP2t2VLkdVrJXYVjPYZUK+NIzpj2cm7Ctpnv2M/hxe4H32d0Rh7A1funtfVyxj5HuHdx3+wavTyzkw69YmluQ3opaLV08Fo8vmxztZ9XFkjM6T6y+v3Y3otxvm5zL9q5LLWbYNDDaPn5PjFb5J8YwYZmOk5bxPXpb5dMtqzRHl6s/Wp3j6x+X05B2jv/wAvxvV5ORc4d1zo5XsThvEMe75oUrhYEq1rk5koV8uRssuU8i5SvkpKFiNuzbu/ezH2Ge372OdkT216Rcd8zldulI5Pm9uK5OT5K9ek9MuaIiMGrW0dcOjrRj1scx55pk2LZc+SHL1c9bO+fWXmfvHunP5dbFMzr6eLrXW14n+1p163yTHhfNkm2S3wia0itK4jt0mIQAAAH6WrtzHuW71m5OzeszhctXbc5QuWrkJUnC5bnCtK0rStKVpWlaVpWj88uLFs4rYM9YvS8TW1bRE1tWY6TW0T1iYmJ6TE+Ex4S/ul70vF6TMWiesTHhMTHwmJ+iYb9fQR95rk3W0dL1P6scva824FZpZ1+k7bjHI23OeJWI0pasWeX2Y+a/u8C34UrXLj5s+1GkvH874wt264P4jX4FXanqnbf9ZPZph1+A7jv5s2125M01uJ5G/ja9uNtPlxcXt3+Ea8+XjctvLETodMmTLIB6A+9Dk+2vkdp+rV8m9x8dKYuQ8cm1rx8IjYjxts4o/WR12Kx16/P/NrWofiHMeKdgca03MuEci0/LOK8gwrWfpd/oM/G2ep2WHej4wvY2ZiylCXt8Yyp4+MZUrGVKSpWlKjfe3Y/eHpv3Vvdjd/8Zs8NzHG5bYdrT3MN8Gxgy1+NMmLJFbV+iaz06WrMWrM1mJmUbh+Y4ruDjcPM8Hs49vU2KxfFmxXi+O9Z+E1tWZifyT9MT1iekxMJuPv+dKfld70h6htbhRjZ2+DtOpOW5luHu4/n9ZK7yvhPvqQp4Tu3rF3dQrOVfN5Me3H2xjSkbTf9W49e/tfb/qB7ZuV2Jm+ll1+4+OxTPWfk54x8fyvl6z1rjxZcfF2itY8vzNnJefLa0zeNj8QLsmcW/wfqJrUiIy0vx+xaPD8+k2z63X8trVtsx1nx8uOseMRHScZaLRugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8PtqdJQ769Z/S/FNhi0yuOcc331I5Zbu26XseWk6/h/WKGHm2ZeyVnNzbWHrrlP8AsyPb7Edv4q/r9k9ufsS777w4/NOHlOU1PuPjprby5I2+Yn7FOXFaP4uTV1cmzu0n8ut4ePRnz2zdj17+9aeE4nPWL62tl+2Z4mOtZxakfOito+muXLXHhn+DIuuyMjHxMe9lZV6zjYuNZu5GTk5F2NnHxsezGty9fv3rlaRhCEaVlKUq0pSlK1rXweeTra2xu7GPT08dsuXLatKUpWbXve0xWtKVrE2ta1piK1iJmZmIiOqd7JkphpbLltFa1iZtaZiIiIjrMzM+EREeMzPhEJ8vXx95/R8N/WupvSHna/lHK4SyNdvu6pWsbZcS0E4/6K9Y6+x7vmtbbKjLzU/UrsJYMKUpKxHMpOly1ZZ/Dj/Aj7h76+wes3vX183EcNaKZ9TtaLXwcluRP51b8zevlycdrzHSfsOO1eQydZrsW0ZxzjzR6ev/AL1NDhvn9pej2Sm1txM0y8l0i+vin4TGpE9a7GTr1/lrROCvSJxxm83mpMZyXk/I+ab/AG3K+W73bcm5Nvs27sN1v97nZG02+1zr9fG7lZ2fmSncuTr4Up4ylXw8KUp7KUotm9p9pdr9h9t6XZ3ZXHa3E8Tx2KuDV09TDj19bXxU/i48WHFWtKVjxnpWI6zMzPWZmUYPKcpyfN8hm5bmM+Ta2di03yZct7XyXtPxta9pm0z/AMM/Dw+D0LsTjgAAAHtdLu9zxvb67f8AHtrsdFvdPmY+x1O51Gbla7aazYYtyl7FzcDOxJQu2rtudKShctypWlaeNKuH57geC7q4Xa7b7m08HI8fvYr4NnV2cVM+vnw5KzXJizYclbY8mO9ZmtqXrNbRPSYfXo727xu5i5Djs18GfDaL48mO00vS9Z61tS9Zi1bRPjExMTEqU/QP96XF2H6L1L6xs+xr82kbGt4/3tasUtYOZLxpaxsbs7X4cKRxrlfZD9axoUtV8YyzLVqkb2ZKqv8AiN/gO7nGfb/Wb2O619nX63z7naVr+bNij+NkycDmyW82ekeNvuvPec0dLV0c2abYdKsl/oD71sWx8jtD1lyRjv0imLlIjpW0/Ctd2lY6Un6PtNI8nwnNSkRfNNGWBn4O0wcTZ6zLxNjrtjiY2fr9hgZNnMwdhg5lmORiZuFl48pW7tq7blGdu5CVYyjWlaVrStKqvnIcfyHEchn4nlsGTV2tXJfDmw5qWx5cOXHaaZMWXHeK3x5Md6zS9LxFq2ia2iJiYSOYc2DawU2da9cmLJWLUvWYtW1bR1rato6xatomJiYmYmJ6x4IjvuzdJ16W9bnaNMTBphcd7Trhdv8AHvLCsYXo8yrclyicaU8Y0rTfY+2pSFPDwh5a+FKVpRfw/Bk9e6+vHsE7R+27E5+T7QjL23u9Z62rPGeT7vifhM9eIzcf1tPXrfzx1tMTKEH3b9k27L9cOV+TTya/K+XkMPT4T9p6/Pn+dUz+H0R08I6w1rJU2s4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbEPtZdL4/dfrV6pw9tZtXeL9b38zuDlUr8YzxbWv6+pDYaf85C5/o62Lu5nq8e/72tIVt3JUr5v5soyPxfvXbZ9BvYX3jucNe1OX7ppi7a4+KTMZLZuZ8+HZ+VNfz/m04ym/mxfLib/ADMdZr5fG9di/ar2Vj719bOJxbVYnV4ybcjn6x1rFNTpfH5uvh5bbM4KW83h5bT16/Cdy/r2+85xvrum66n9JWXq+Zc7hTJ1277fuQs7LhfD8mM6492zw7DyIysbvOt181aZlzza+3KkK0jneacLUF34cv4E/dXqdOh6ye8/Dn4Lt200z6vbcWtg5TkscxF625LJS1cvF6l/CJ1qeXks1ZvE24/y48mXc/1996XGdufP7T9I703d+PNTLyExF9bXt8JjXrMTXZyx4z8yeuvSYjpGfratZfOWcu5Rzzkm45jzXkO45XyrkObPY7vkXINhlbTcbXNuUpGWRn5+ZKdy5LwjGMfNLwpGlIx8I0pSluDszsvtH067W0ex+wuM1uG4bjMUYdTS08OPX1tfFXrMUxYcVa0pHWZtPSOtrWta0za0zMXHL8tyvP8AJZuY5vYybe3sWm+XNlvbJkyWn6bXtMzM9OkR1+ERER4RDjbtDjAAAAAAAGbvo49e3ePox5NDJ4Ps/wCsnXeyzreRy7qnkOTerxjfQ9lvIzNZdpS5c1Wyrb8KW9hiQrWtYwpkWsm1D3NdAvfL+HL7f/fZ2pOr3/qfdXc+ritj47uHTx1+36k+NqY89etKchpeeZm+nsWjpFsk62bVzX+dGcfRr19759FuT+ZwWX7Tx2W8W2NDLafkZfom1J6TODN0+GXHHjMV+bTLSPIof7y7u6Q+6D6AO68HqTYVr2ZwriVns291luKWrfPeI8k4Jfpvp2LOvhWUc3H2GNay9Zi7HDrOzcplUtyrZyPPZt1kfb76Bev/AOEj+JJ2FyHrPrRHanPcjbgq87rea3Eclo8vWdOL2zTETq5tPPk197Y0tn5efFOpOStc2t5M+WRTvnvfsf3R+37m8HaOT/8AWelrxuzpZOkbWvm1ZjLMRT4ZKZaVyYcebH5qW+b5ZmmTrSsga7Wh6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFfZ52fUXpi6i769aHevJ9fxDR5uywemuEX8ulbm63s9XjWOY8t1HFtLapLK2V/Mv3tPGEMWFYwriX53ZRt2rs7Van8b/AIr1q92nrZ6c+xL288Tm5vkMGDN3PytMfhq6kbF8vGcds8htWmNfSxa2LHyVr3z2i143NemKtsmbDjzSE+zjZ7Q9MO0Of9ae/NqmngvevHa028cmXyRXY2MeDHHW+a2S1teIikTEfKvNpitL2piX67vuodt+re/s+C8M/U+q+hpXbliPEMPO8nIub4kLvjZyuxNpgS8t23OkY3KajHnXEty8PeSy524X6bn/AId34P8A6L+y7X1PUPvv5HeHqLFa3nksuLrpcVkmv52PhcGWvmpevWaTyWatdzLXrOOmnjyZNecS+vXuq7u9XMmXgeF8/E8B1mPs9bfy21Xr4W3L1npMT4T9npM4qz/GnNatbtVKYdqgAAAAAAAA2Zehj7m3cXo72GBxXYzyeyui72X5tn11tM3y5nHo5F3zZW16+3GRSdcG9Sta3Z4M/HDyK1nSULN65+atxQ/iE/hN+hvvg43Y7w4uuPtT1Cx4/wCQ5rXxdcW7NK9MevzOtSaxtYpiIx1269N3WiKTW+bDjnUybO+hPue7y9G9nHxOzNuT4K1vz9O9vzsMWn86+pknr8q0fxpxT1w5J69a0vb5tc/Pu08s6c9Y3pl6d9XPQ/IcHktjrnlV7gfP8D3UcLmHE9Z2DiUzNXr+b6W5Wt3ElhbPX1x7HmrK1dlmyu4ty/Yn72scH4MXZvrj7Hfdl3x7KvcTxmXisndHH15fh83mnLxvI5+GyTjz5uK2YiMexXa0d352XyxXNhro1w7mLX2KfJjP/u35fs31k9MeG9XuwtmmzXjc86u3Tp5djXpt181KbOPxtjnHmw+SvXrS85pvitkx286dFZ9RxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzTjfYfNuH6LmPG+Lck2eg03YOtxNJzPG1V2GHd5HpMLJrmW9Fsc6zGl+WDO9WNzIw43aWb8oW63oXK2rfk6H3T6Zdg979w8H3V3fxWDkt7trPk2uLybFZy10tvLjjFbbw4rTOGNumOJph2Zxzn163yxgyY4zZfPznG9w85w+ju8bxWzfXw8jSuLZrjnyzmxVt5oxXtEeecU26TfHFopkmKzetvJXpwt3xwYAAAAAAAAADmPAuwOa9W8s1HOevOT7fiHLdFfrkare6TLuYmZj1nGtq/Yl4eML1i9blK1kY16M7V63KVu7CduUo16N6j+mvYPq92bu+nnqbxOtzfC8jTybGptY4yYr9Ji1Lx8LY8uK8VyYc+K1M2DLWuXDkpkrW0c32/3DznavL4ee7c2smnt689aZcVvLaOsdJifotW0TNb0tE0vWZres1mYnid25K9cuXZ0hSV2dy5Klu1bsW6SnOspUt2bMYwhHxr7IwjSlKeylKUd0xYq4cVcOOZmtIisea1r26RHSPNa0za0/ltaZtM+MzMz1cPa02tNp6dZnr4RER4/kiOkRH8ERER9D8n6v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe2zN7utjrtPp8/b7PO1PHrWbZ0Orys/JyNfpbWyzJbHYw1WHdlW3YpfyJSvXqWo0886+aXjX2uG0e3uB4zlN7nON0sGDd5O2K25nx4qUzbVsGKMOGdjLWsXzThw1jFi+Za3y8ceWvSPB9mbf3tnWw6exmvfFrxaMVLWtNMcXtN7xjrM9Kee8za3liPNbxnrL1LmXxgAAAAAAAAAPca7f7zUYW612q3Gz12v5LgWdTyLAws3JxsLeavG2djc4+v3GLalS3k2bWZi42Xbt3oypC9at3Y0pOEZU4PlO2+3ub3+P5TmNHBtbXE5rbGlmy4qXy6me+DLrXza2S1ZvgyX1s+fXvfHNbXwZsuK0zjyXrP26/Ib2ngz62pmvjx7VIx5qVtNa5aReuSKZKxPS9YyUpkiLRMRelbR+dWJj07nHxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Xl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYXVHXm47b7P696t4/GVd12JzTjPDNbP3dbkcfK5JuLWphmX408PC1YpdrevTlWkYwjKUq0jStaY19ZPU3g/Rb0l7m9Xe5Zj7B2xxe9ymeOvlm+PR1smxOKk+PXJl+X8rHWIm18l61rW1piJ7D2n27u9390cd2tx3+H5HZw61J6dYi2bJXH5p/ua+bzWmekRWJmZiImWcf3UvTLpPTF6qdjxzhms/Suu+Z8M4nzLhWJGluUMTFjg14vvsOd2zSEa3P1PW5eTKPkjWkL9utaeEqSlH1+D37sOf92ns91u5u+9v7Z3NwXJ8jxnKZJ6xOS85vt+plitptaMf2Hd18FZ81om+vliJiazWudfdZ6Y6Ppf6rZOP4TF8rjt3W19jWr4dKx5PkZa9YiI83zsOS8x0iYi9fDxiZ1tJT2tIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvj0w9P5Xf3qF6e6ex7F6/Z53zrR6nc/lpyt3sXi9rJ/UeXbCE4VpWlcXVWMzJ8Y+FfCHs9rXX3b+t+p7b/AGz97+t+1krjydu8Rt7Gt54i1b79qfI43DMT4T8/kMutg6T4fynj4O/+lvZ2Xv8A9Q+G7Nx1m1d/axY8nTwmMEW8+xeJjx/MwVyX8P7Vl192zofC6I9Z/ObWi12Pq+I9oavUdrcawcLHhj4mLTkUr2t5NjW4WqUhSv6zhbG9GEaUrG3dt0rT20lLSv8ABf8AcVv+4f2JdvZe4dq+5zXaOfZ7e3suW83yZPsXy8+je0263n/9V7Wlim8zaL5cWWYnwmtcve7nsHB2J6078aGOMWpytMe/hrWIitfneamasdPCP+c4s1ukRHStq+H0zrNSvNYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZ+x/0p9RvVtl9l7HA/M6Ho3hmx5DbyblPPj2uZcttz4rxnHu25eys64t3bZdmtf5s8aMqfipGtILP6wF69T6Yey/B6U8XsfK5H1B5PBp2pHhe3GcdNeQ371t8Yr9opx2tkiP4+PatSfzbWid0PY32R/nH6uZO5tjH5tfgte+WJn4Rs7HXBgiY/L8udjJX8lsUTHjENln35ekYct6D687x12LSe26j5lLQbvIhCVJU4d2HC1hVv5NyFK+b3G2xdZasxn4Uj+Zu1jWlZVjOKb+rqev2Tsz3H9ze37k83l0u9eMjc1aTMTH3nws3yxWlZmPL83jtjeyZZp1m32TDFqzFYtTZr379kRy/p/wAd3zrU65eH2flZZiP/AJbc6V6zMfHy7GPDWsT4R823SYmekydLliJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvs+wr0nLlHeXZneexxIz1fVnDrXFtDevWo+NOX9g3pQu5eFdnH+djarCzrF+ka0rSOZDx9kvCtcz+sY+vlO0vb92n7euLzTXc7w5K3Ibla2/8A7bw1azXHlrEx+bn5Da1cuLzRMTbRydPGvWN+/YN2RPK988n33s0icXFa8YMUzH/zG3M9bVn8tMGPLW3TxiM1folmb9+rpOHJ+jusu9NbiTubTqzmN7iu+vWrVa+HEewLMY2cvOuwp/NxtrhYVixSVaUpLNn4e2XhXRX+rnevlu0vcD3Z7euUzRXU7w4yvIadbW//ALlw1rTbHirMx+dn4/a2suXyxMzXRx9fCvWM0e/nsiOV7F4zvvWpM5eK2JwZZiP/AJfbiOlrT+SmfHirXr4ROa30ylGXHUTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYr9kTpOXW3pEudi7LEjY3vefMdpymF2Vr3eV/VDjU5cT4xiZHjTzVhW/Y2WfYrWtaVt5cZU8PNXxo8/j9+vdfVT3rV9MOLzTk4/0943X4+axbrj+8t6I5HfyU8ekWjFm0dTL0iJjJp2rbr5Y6TJex7sme2fSCe49mkVz87sXzxPTpb7Ph64MFZ+np5qZstfo8uaJj4tkXqS6hwu+uhO2+ns63Yn/X/gu+0Wtu5FIys4HIZ4dcjjG1n56eFK4eytYuVGtf4Vt0qiz9rHrXv+3P3Gdl+t+ha8f5t8tp7eetOsWy6cZYpv68dPHps6V9jXtEfGuWYbKepXaGDv/sDl+zc8RP3hq5cVJt8K5prNsGT/APN5ox5I/hrD56edg5mszsvW7HGu4efr8rIwc7DyIVtZGLmYl6VjJxr9ufhWM4TjKMo19tK0rR6YvHcho8rx+DleMy1z62zjplxZKT5qZMWSsXx3paPCa3rMWrMfGJiVeDPgzauxfW2KzTJjtNbVmOk1tWelqzH0TExMTH5XiPtfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtm+0H0pTp30S9e5+Xi+45B3Bm7Lt7dSnarC5LF5LS1g8RjC7KnmlalpMPXZEaeFI0neuVjSvmrOVBz8bP16v64e/rubjdTL8zjeyMWDtvViLdY+Zozky8jM1j82Mkcrs7uG0+NppgxReYmsUpN37PuyY7N9D+Oz56+XY5m1+QyeHj5c3lrr+M+M1nWx4bx9ETe3T49ZzG9T/T2N396eu4ensixZv3+d8E3mr035i5CFnG5Rax/1HiGwuTnXwpTF2tnDyfGVfD8Ht9jRz2k+t+37b/cx2R636uS2OnbvL6mxs+SJta+ha/yOSwxEeM/P4/Ls4OkeP8AKeHizN6o9nYu/wD075ns29YtO/q5cePr4RGeK+fXvMz4fmZ647+P9q+e7mYmVgZWTg5uPexM3ByL2Jl4uRblaycbKxrlbORjZFqdKShOE6VjKMqUrStK0q9LzS3dTktPFyGhlrm189K5MeSkxamTHesWpelo6xatqzFqzE9JiYmFeTNhy6+W2DNWaXpM1tWY6TW0T0mJifGJiY6TH0S8V9T8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByfhXEdvz7mXEuB8ds0yeQc15NoeJaPHlWtI5G45HtbWn1lmtY0rWlJ370I+yla+11Pv3vTg/TfsbmvUPufJOLjeB0Nzkdu8fGmto6+TZz2jrMR+bixXnxmPh8XK8HxO73BzWpwXH182xvZ8Wvij8uTNkrjpH/ttaIfRE6v6/0vVHW3AeseOx8ui6+4bxvhuqlW3G1O9g8b1FrU2Mm/CNZeN27G1727Ksq1lOUpVrWta1r5j/AKt+pHPesfqn3H6s90T15HuXk97k9iPNNorl3tnJs3pSZiP5PHOTyY4iIitK1rWtYiIixT2t2/pdp9t8f2vx3+A47Xw62Pw6TNcOOuOLT/dW8vmtPWZmZmZmZ8XOmOXYUO33W+k59J+tztjGxsT8px7srKxu3+NSjarZtX8fnMrmTyGVmFfZSFreWtrYjSFfDywp7I+Plj6Bv4OXr3j9e/YL2bs7ef53JdqUv23vRNvNat+JilNLzT/Gm2TicnH5bTaOvmyW8bdPPaDH3Ydk27I9b+Xx4qeTW5Oa8hh8OkTXa62zdI+HSu1XPWOnh0rHhHwjXGlFa3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO1Ojur9p3X3F1j1Lp43/zvYfOOOcUpex4UnPBxdvtLeNstrOlaSpS3h41buVdlWNaRhblKtK0ow/7gfVziPQX0O7t9aOcmn2ftjit7kPLeekZcmtgvfBrx41mb7OeMevjrFom18laxMTMS7Z2L2ttd7958X2lp9fPyOzhwdY+Na5LxW+T4T4Y6ea9p6T0rWZ6eD6Hmi0mr4zpNNxzR4dvX6Xj+q12k1GDZpWlnB1eqxIYGvw7VK+NfLbtW4Qp/3UeZP3Dz/L918/vd0dwZ7bO/yWxm2tnNb+Nl2NjJbNmyW/ur5L2tP8MrE2ho6vGaOHjdKkY8Ovjpix0j4VpjrFaVj+CtYiI/4HtXCvtQ0/dO6Ul0h62e3tZi4cMPj3YGwsdtcYjat1s2bmv59K5n7mmNYp+GFuzure1xbcYfhpG1Ty0jT8EfQc/CA9eq+v8A7BuyeU2885+T7aw37c35tbzWjNxEUw63nv8AxrXy8Xfj9i9r/nzbNPmm0/n2gr91fZE9j+t3Ma2OkU1uRvHIYOkdImm11vk6R8IiuzGfHER4dKR06fCNeCTZroAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbavsw9KU7W9Z/H+V7HCnk8f6U43uOx8uc7dJ4UuQVpDjfEMW9cr/C7DLza7GxSlaVrXDlX+bGVKww/jt+vU+j3sT5Hs3jM8YuS7+3tbhMcRbpljTibb3JZK1+nHbX1Y0s0zExEb1Y8LWrMbcey3sivdnrTr8ts0m2vweHJuW8PzfneGHXrM/RaMmT51Pyzhn6IlZ2olppwE+X38+kJbzrLqLv8A1eLKeXwLked17yq5apSta8d5jZ/UtFnZdZfwt4mwwrmPDy1pWs8+njStPCsbLX9XF9f69v8Aqz3r7beXzRXB3HpYuZ4+tp8PtvGW+Rt4sfT45NnT2qZrdY6fL46Ziaz1i8efv+7G+39r8P6g6tJm/H5rameY/U7MefFa39zjzY5pHT+y2PhP0SzrfCKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABu8+xV0lLnXqe5R3Bn4dbuk6R4VkywcmUKSha5r2DG9xzT26ef2V/+1W95OtaeNYypbr7PGlUAf8AWGfX2vp97S+I9EeNz+Tf7/5WnzscT0m3FcNOLd2Z8PGP/wBYX4qsRPSLVnJHj0mG8XsR7I+/fU/a7x2KdcPB61vJb8mzt+bDj/8A8EbM/wAE+X8qulSpS+gJ5/v7dJXNz17056gNXi1nf4Xv9j1vyu5Zs+e5XScts13PG83Kuxp+GziZ2FlY8fH2VuZ0afxr7bM39XA9facH6md8+27ls0Vx89p4Ob4+trdI+1cdb7NvYsdf7LLsau1gzT08YxcfefhHhHb7/wDsi2527w3qDrU620ct9PPMR4/K2I+Zhtaforjy470j+6zxH0pcluxFkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXL9ijpOvB/TLy3uHY4MbG37s5vfpq8iUa+8yeEde++4/qq0rOv4fHbXd57KUpSUaQl41p5fCld/WG/XyvqD7seG9EeL2JyaXYPFU+fjifzacrzPy9zY+Hx6cfTivjM+W05K9Kz5usvPsP7IngvTDb7x2aeXNzmzPkt9M62p5sOP/AIP5e2z/AMMeWfHwbwFf5vMAxr9YXSln1D+mXufqGWPbyNjyvhOzrxmNylawt8y0fl5Dwy/WUPGVKR2uLiVn5fbWHmj7fHwbV+yL16ze2T3Y9ietkZJxavDcrg+3TX424zb82lylI6+Ezbj9jYinm8Iv5beHTqxj6xdk09RPTHmuz/LFsm3rX+T1+jZxdM2tP5ekZ8ePr08ZjrH0vn4zhO3Odu5CVuduUoThONYzhONfLKE4y9tK0r7K0r7aVelHjyY82OuXFaLVtETExPWJifGJiY8JiY8YmPir42rNJmto6THhMT9D+H6P4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWZ/Zb6Rj1Z6NdNzPPxqWeRd38l23P8y5chKOVb47iXf6scQwJ1rSlK2pY+Jd2Vjw8fZm1rWvt8saKv48Hr9b1g98+/2Lx+acnF+n+jrcPiisxOO27kr9v5LLHjMxkjNs00cvXp46FYivh5rTReyrseO1fRjDzWenl2edzZNu0zH50Yaz8jXrP9zNMds1fj4Z58fojbkhXbegMYfWd0lH1E+l7unqK3jUytvybhefk8Vt/gpP+unHZx5Lw2lLkv5kZ7PExbd2VK0r7uU6fwrVtv7FfX2/ti92/YfrVkyzh0uJ5TDTkJ8en3XuxbR5Pwj+NNdHZz3xxPWPm1pbp1iGLfWjsf8A9RfS3m+0a182ba1rzgj/APScPTNreP0RObHSLT/azMfS+f17Y1rGVKxlGtaSjWlaVpWlfCtK0r/CtHpM1tW9YtWYmJjrEx8Jj8sK+VqzE9Jfy/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe10mm2fI91qOPabFuZu43u0wNNqsK14e9zNltMuOBg4tvzeFPNcuzhCnjWlPGriOf53iu1+B3e5edzRr6PHYM21sZbdfLiwa+O2XLkt08elMdLWnp49IfXoaOzyW7h47SpOTNsXpjx1j42ve0VrWP4ZtMQ+hv0R1XrOjumOruodTW1PD674Px3i0sqzS5S3sc/V663Z222rSdKV82Zle+yp/hpTzXK+EY09lPMs9w/rBy3uB9du7vWvmotXP3Pyu7yEY7dOuDDsZ7219aOnWPLra/wArXp4z+bjjra0+M2Jewu1Nbsbsri+0NPxpx2thweaP7O1KRGTJ4/Tkyea8+EeNp8I+Dtlhd28ABCN9yjpSnQ/rQ7r4nhYVMLjvIORV7G4nC1bpZxP0DsC3TklcXAt0pTws4WbezNdCnh4Urj1pTxpSla+iJ+FX6939xHsR7C7x3s/z+T4zS+5ORm1vNk+18Pb7D8zNbx65drVxa27aevWftMTPSZmIgZ9y/ZMdhetHN8Vgp5NfYzfbNfpHSvytuPneWkfRXFktkwx/+TYJpDmBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHN+tuCbrtDsLg3W3HIe833PuXcd4Zp6ShK5COx5JtbWoxLt2Mfb5ITvUncr40pSNK1rWlKeLoPqp6icF6RemXcPqn3Rby8d23xu7yez4xEzh0dbJs5K1mev59q45rSOkzNpiIiZmIc52zwO73T3FodtcdHXY5DYw6+Pw6/n5slcdZn+CJt1n8kRMvoicH4fpOvOF8R4BxnGphcc4RxnQ8S0OJSMaUx9Px3V2tTrbP4KUj+GzZhSvhSnjV5jvqB3vz/AKmd9816j915fn8pz+/t8jt5PH8/Z3djJs57eMzP52XJaY6zPh9KxZwXDaXbvCafAcZXya2jgxa+Kv8Aa48NK46R4fkrWHKnTXLgAIPfuPdJQ6C9ZXdnDMHFpicc2/JJc/4jbtwlDFhx3n1mnJ7GDg0nSla2sDIv5Otj4+Ptxq08ZeHmr6J/4XHr7f3G+xfsHvrkM05uU0tGOH5GbTE5J3eHtOhbLl6TMfM28OHBvT8PDaifLXr5YgU9yPZEdges/N8Lgp5NfNm+168RHSvyduPnxWv9zive+GP4cc+M/Fg4kDYLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHk4scaeTYjm3cjHw5X7UMu/i49vLyLONW5Sl+7j4t27ZjdnGPjWFuV63SVaUpWcKV81Pl27bVNXLfRpTJnitpx0yXnHS14ifJW+SuPLbHS1ukWvXFkmsTNox3mPLP64vlWy1rlma0mY801iLWivXxmKzasWmI8YibViZ8JtHxbrvT19oThnqi4Hjdh9Nes3h3JNRL3Fjca2fVuzxOScU2l617yel5Vo572t7DyY+EvL5vG3dpT3li5etVjclAn7l/xs++faP6i5fTT1y9CeT4rdjz21s8c/gyaPIa9beWNrj9uOJjHs4LeHXp5cuG0/K2cWHNFsdd3PTv2e8L6p8BXuLs3vXX2cPhGSn2G9c2C8x1+VnxTtebHePHp161vEebHa9Ji097f5e/mX95/jP9lu0/ptrv8A7y52P/qj3v8A9oNf/qp3z+jx5f8A0pw/zC/+NH+Xv5l/ef4z/ZbtP6bP95c7H/1R73/7Qa//AFUf0ePL/wClOH+YX/xo/wAvfzL+8/xn+y3af02f7y52P/qj3v8A9oNf/qo/o8eX/wBKcP8AML/40f5e/mX95/jP9lu0/ps/3lzsf/VHvf8A7Qa//VR/R48v/pTh/mF/8aP8vfzL+8/xn+y3af02f7y52P8A6o97/wDaDX/6qP6PHl/9KcP8wv8A408PYf8A/Pp2HbsxlqvUpwvNyK3Ixna2HXu81tmNnyVrK7G/j7LLrWVK+WlIVt0pWla181PClK8jxv8AWWPTLLnmvL+lXKYMflnpbDzOpntNusdIml9HXiK9PNM288zExEeWYmZr8+x+Hr3FWsTqdza17fTF9TLSOnj49YzZJ69enh0j6Z6+HSe6PSv9krlfSnqC6t7d7C7b4RzPjXXPJLfLZca0/H91jZ+x3enxbmVxa5DJ2MvdQji7OmJmTrKNa1jarCNKVlSUcDe7/wDH07O9fPbX3f6K+mfZfK8FyvdGjbjo3tnd1b4cOrs5MePkKzjw1+ZedjQnZ1qxFqxW2aL2ma1mlu7elPsi5bsj1C4ru7uLl9bd1uNzRsfJx4ctbXy462tgmLXnyxFM/wAvJPWJ6xTpHSZ6xQ4rJpFAAAGqD7if2zaeuTl3XHONF2PretORcM47t+KbrK2HFMjkv9YNJe2cNvx+xbnjZ2FWx+Rv3dlKtJUnSf5n2eTyV88yf4Yn4r1/w++y+6fT/uDtbP3XxfO7utyGrjw8jTR+xbVcFtbcvaMmptRl+14sejXrHy5x/ZfHz+ePJqV7jPbHHrny/G85o8nj4zY0sOTBktfBOb52ObxkxRHly4/L8q1s0+Pm83zf7Hp465v8vfzL+8/xn+y3af02lB/3lzsf/VHvf/tBr/8AVTXL+jx5f/SnD/ML/wCNH+Xv5l/ef4z/AGW7T+mz/eXOx/8AVHvf/tBr/wDVR/R48v8A6U4f5hf/ABo/y9/Mv7z/ABn+y3af02f7y52P/qj3v/2g1/8Aqo/o8eX/ANKcP8wv/jR/l7+Zf3n+M/2W7T+mz/eXOx/9Ue9/+0Gv/wBVH9Hjy/8ApTh/mF/8aP8AL38y/vP8Z/st2n9Nn+8udj/6o97/APaDX/6qP6PHl/8ASnD/ADC/+NH+Xv5l/ef4z/ZbtP6bP95c7H/1R73/AO0Gv/1Uf0ePL/6U4f5hf/GnH+VfYcyuCcc3PMOa+r7gXFuK8ewbuz3nId915l6vU6rX2KU95k52dl76Nu3DxrSNPNL21rSNPGVaUr2Xs7+sVanqH3To9kdieiPL8xzHJ5a4NTS0+ax7GzsZr/xceLDj4i1726RMz0jwrE2npWJmOO5b2FZOB43Ny/Nd46upq69ZvlzZdO1MeOsfG1r22oiI+jxnxnpEeMtF/Zeh4Nxjme40PXfPMnszi2svSxsLm17ieRwuxvblqtYXsvWaLPy8vJji1r4VsXMqtq7ONfGdi1X2VsKelPcfqD3b2Lo9xep3btO0+X26fMy8VTkacpfUraImuPPt4tbWwW2Ijwy0wRmw0tHSmxljxjRTufQ4Li+azaHbu/PJ6uKfLXZnXnWjLMfG1MVsmS8Y5/sZv5LzHjOOvwcCZFdeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeZrq4Ec/BrtbeXe1kcvGlsbWvvWcbOuYFL1K5kMK/kwu24XpW/NS3O5bnGkq0rKMqUrSvxcnHI247Yrw9sVNycd/kWzVtfDXN5Z+VOWlLUvbHF/LN60vS1q9YraszEx9GvOvGxSduLTi81fPFJiLzTrHmiszFoi3Tr5ZmJiJ6TMTHg34elr7XPow9XvCqcv6j9VHZGRnYNrGpyvg244xxHA5vwvMyYeaONv9NG9P8A0UpRlGxnY07uLfrGdLV6UrdyMK43u8/F199vso79nsn1p9H+Exa+xa/3fyutv8lm4rlMVJ6Tk09qcdP5SsTWcurnrh3MEXpbNgpTJitffz0s9rXot6wcJ98dod17lr44r8/WyYNeuzrWt8K5cfmn82fGK5aTfFfpMUvM1tEZQf5fjp7+8H2V8scX/wDM1H/3lD1u/wBWnBfz/f8A71lH+j37O/0h3f2GD6z/AC/HT394Psr5Y4v/AOY/3lD1u/1acF/P9/8AvT+j37O/0h3f2GD6z/L8dPf3g+yvlji//mP95Q9bv9WnBfz/AH/70/o9+zv9Id39hg+s/wAvx09/eD7K+WOL/wDmP95Q9bv9WnBfz/f/AL0/o9+zv9Id39hg+s/y/HT394Psr5Y4v/5j/eUPW7/VpwX8/wB/+9P6Pfs7/SHd/YYPrP8AL8dPf3g+yvlji/8A5j/eUPW7/VpwX8/3/wC9P6Pfs7/SHd/YYPrd/wDpg+zj1L6aO7+F93YXaPMudbPg1zb5Wo0G+0miwtXLZbLSZGlsbDIu4VZXKzxaZMr9ilPZS7GEv/C1w92/45HrR7r/AEA570B3u0OM7e1O4Y1sezuae1t5diMGDaw7V8NK5YikV2JwVxZZ+nDbJT+ylkD0u9mvaPpj3xpd74OV2d/LoTktjxZcWKtPPfFfFF5mvj1p55tX8l4rP0NxSDpuUAAA1pet/wC2Z1n63OacO59yPnPJOAci4pxnI4lfy+O6rUbCu80/6pc2+qs5tdj5ZRriXsjNrb8ta0rS/Lx8PLTxlb9gH4r/AKr+wPsTnfTjtbt/R7k4vmd+nI0x7uxs4fsmz9nrrbFsXyOsW+04sOrF/NEdJ169JnzT01j9cvbH2x64c3pc/wAlvZuP2dTBOvNsNMd/m4/POTHFvP8AD5dr5OnT4/Mn8jCP/L8dPf3g+yvlji//AJm/P+8oet3+rTgv5/v/AN6wj/R79nf6Q7v7DB9Z/l+Onv7wfZXyxxf/AMx/vKHrd/q04L+f7/8Aen9Hv2d/pDu/sMH1n+X46e/vB9lfLHF//Mf7yh63f6tOC/n+/wD3p/R79nf6Q7v7DB9Z/l+Onv7wfZXyxxf/AMx/vKHrd/q04L+f7/8Aen9Hv2d/pDu/sMH1n+X46e/vB9lfLHF//Mf7yh63f6tOC/n+/wD3p/R79nf6Q7v7DB9Z/l+Onv7wfZXyxxf/AMx/vKHrd/q04L+f7/8Aen9Hv2d/pDu/sMH1ur+4fsxelDoTgu07H7b9WXNOF8R1NKQu7DZ8c4x77NzLkJTx9VpdfZlLIzc29SMvc4mLbndnSkq0j5YyrTLvoj+Oz7yfcd6hafpb6L+jPF89zW741w4N3f8ALixRMRfY2c1orh1dbF5o+ZsZ748VOtYm3mtWJ6t3j7LPSXsDgsvcnd/d2zpaeH43vhwdbWnr0x46R1vkyW6T5cdK2tPSZiOkTMT09hW+vrPMN1Y6tyOW53A8fLrY4/secWNTh8n2WJbp5f1DZ67SVuY2LK7WlZRxrd+95KeFK3Z18fCzJ6Z5fUvP2Rx+x6v4uO1+4smOL7mHibbGTQwZLePycGbaiufYjHHSts98WD5lus1w0r06x3dxV7epzGfH2nbYvoVt0w32ox1z3rH9nemLrSk2nxikWv5Y+N5lwl31wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F0d352z6cud6/sbp3mOz4fyXC8LV+WJKORq93r6zpO9puRafI82NnYdytKVlYyLcqUlSNyHkuwhOODvcD7cfRn3Renez6X+uHB4Ob4rP1tSMkTTY1c3SYrs6WzSa59TZp16Rlw3rNqzbHki+K98du59jd/d3em/PY+5Ozd2+ns4/CfL40y069Zx5sc9aZcc/TW8TET0tXpaK2itz0H/AHXOp/VZZ1XX/YldX1R3zOFrGt8eysuceJc+yYw8LuVwPb51fGF+5KlZ102XcrkRpKlMe7mxhduQpd/iJfg5esvs6zbnqR6Z/P7y9Oqza87uPFE8jw9Jt1rj5fWxR+dhrExWOT1qRq3mszs4tC18WLJLn6C+7DtL1Ypi7e7h8nE8/MRWMNrdNfbt08bauS3wvM+P2bJPzI69Mds8Ra1ds6GJtyAAAAAAAAAAAAAAAw/9XHrd6N9G/Ef1zsze0zuVbLGv3OIdbaC5jZXMeVZEPGELlrCnKlMTBpOnlv7LLlCzDwrGHvb1YWZ7u+y72Ce4L3yd6f5v+k/H/Z+H1L0jkuc3K3x8Zx9J6TMWyxWZ2duaz1xaWvF8+TwteMWCMmfHhz1d9b+xvRriPt3c+fz7eWJnX0sUxbZzzH0xXr0x4onwtmydKV+Eea/lpaPv1kevrvL1n8i97zjZU411zrc+7mcT6o49lXo8Z0lfxW8bO212VIXNrsqWq1jLPyoUpGsrlMazjW7krS7p7Gfw4fb77Ee2Pldgas8t3Tt4a4+R7h3cdft+18LXxa9Ym9OP0ZvEWrqa9pm0VxztZ9vLirmQ7es3r/3361cj15vL9l43Feba+hhtPyMfxitsk+E580VnpOXJHh1t8qmKtpoweSAsGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwur+1exOluaajsPqzl+64TzLRXKz1+70eVLHv+6nWn5jAzLNfG1k4l+lPJkYmTCdm7DxhchKNa0Y09XPR30x9eewt70y9X+E1ef4PkK9M2rtY4vTzR18mXFaOmTBsYpnzYdjBfHnw36XxZKWiJdi7X7r7j7J5zD3H2puZdHdwT1plxW6T0n41tHjW+O0eF8d4tS8eFqzHgqz9Bf3guvO/66Xq71A103Vvcl6mPr9XyGt6mF152JmeWluzHDysqVaajZ35eMfyGVcrYvTpSmNke8uwxIU6PxGPwRvU322xv+rvttjZ7v7GpN82xpRX5vNcLi6zNpy48cdeS0MUdJ+169I2MGPrO3rRiw5N28sHoH7xO3vUH5Ha3qFOPiuZt0pTN18unuW8Ijy2tP/N89p/4q8zjvbp8rJ5r1w13YID27oAAAAAAAAAAAAAADW164fuX9K+jnX5nGrV3H7I7tv4tJ6vrLSbG1CmllftUuY2x5/t7NLsdXY8so3beNWEsu/GsK27MbM65FuVH8P78KT1698nJYO6cmO/a3YGPJ02Od2sNp+1RS01yYeH1rTjnfzeatsd88Wppa1q3jLntmpGtk1o9c/c32T6Na9+NraOT5y1fzNLFeP5PrHWt9vJHm+RTpMWinSc2SJia0ikzkrIT6lPVN3T6r+d3uedx8rv7nItSyLfHuN4VLmBxDhutyJ0lXV8W0NJyt49usYW43b86zyL9YRnk3r1ynnXZPat7QfQf2bendPTr0O4emjjvFLbu9l8uXkuTz0iYjY5Db8tb5r9bXnHirGPW1ovemrgwY58iH71L9VO9vVnnp5/vLbnNaJtGHDXrXX1qTMfyeDF1mKR4RFrTNsmTyxOW97R1Y6tnWOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfpau3Me5bvWbk7N6zOFy1dtzlC5auQlScLlucK0rStK0pWlaVpWlaPzy4sWzitgz1i9LxNbVtETW1ZjpNbRPWJiYnpMT4THhL+6XvS8XpMxaJ6xMeExMfCYn6Jhvv9Bf3muV9ZR03VXqvydvz3r+1+X1+k7Wtxu7Tn3EMekfcWrPK4V8bu8wIfhlXJ8a7C1Hz1rXO8bVm3XI/EY/Ap7O9Vp3vWL2b4tbt3uS/nzbXbszXX4jkrzM3tbjreGPidy/50Rg6Rxma3y4iOP6Zc2Xfz0D96PLdsRh7U9WbZN/j46Uxb8db7WvHwiM8fxtrFHhPn8dikeaeuf82laiOFc24h2PxbS834FyTT8u4hyLCt7DSch0GdZ2Oq2ONcrWHnsZONKVPNGVJW7tuXhO3OkoTjGcZRpUa787B719Lu79/sD1F4rZ4XmuLyzh2tLcxXwbGDJHSel8d4ielqzF8d460yY7VyY7WpatplI4Pm+H7k4rBznAbOPc1NmsXxZsVovS9Z+mLR9MT1i0T41tE1tETEw5U6a5gAAAAAAAAAAB/kpRhGspVpGMaVlKUq0pGMaU8a1rWv8j+61te0VrEzMz0iI+Mz+SH8zMRHWWiL16feU4Z1HTc9W+lzJ0/YfZ1quTrdx2Pcja2nXnCMmlK2LtNHSMq295srNfGsa0rXAtTpGtyWX4XcaliH8On8DDvv1pto+rvu7xbPbHad4x59bhIm2vzPK08L1+19Yi/FaOSOkW69ORzUm8Y6aXXFtToZ6+e83he0Pndq+llsfI8pHmpk3J6X1NWfhPyuk9NrNWfh/wDL0npNpzdLYktHPewObdo8s3XOuxOU7vmXL+QZU8zcch5Dn3thscy9OvhCFbt6taQtW4+FuxYt0jatQpG3ahCEYxpb29OfTbsH0i7M0fTz0x4jV4LhOMxxi1tPTw1w4cdY+M+WsRN8l563y5rzbLmyWtly3vkta0xX8/3DzfdPL5ue7j2su7ubFvNky5bze9p/4Z+FYjwrWvStKxFaxFYiI4e7w4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuo9Bf3fexfT1XS9X99z3HafS1iOPr9Zua3Pz3YnXeHbjSzjW9TmZlyH6prLNKeX9Py7lLtqHlpi3427UcW5A1+Ix+CV6Ye5aN/1b9uNdbtDvzJN82fV8vyuF5rLMza87GPHS06G/lmev2zXpOHNk807evbJltt4t2fQP3hdx+nnyO2O/5ycrwlelKZOvm3NOsdIrFLWmPn4Kx4fJyT56V6fKyRWsYrVcdW9s9c928J1HYvVXMNNzfhu8tefB3WkyKX7cL0YRnfwNhjSpG9iZdisqRycPKt279mX4btuMvYpxer3o36oegff276YesXCbXb/Ocfbpl1drH5LTWZmKZsN4mcWxrZfLNsGzr3ya+en5+LJevilg7V7t7c744PD3F2nuYt7Szx1rkxW6x18OtLxPS2PJXr0vjvFb0nwtWJ8HYrF7swAAAAAAAAAAD1W73em41qNlyDkW212i0emwsnZbfc7jNxtdqtZgYlut7Kzs/Py5QtWrVuFKyncuSpSnh41q5rgeA53urmtXtvtjTz8jyG9lpg1tXWxXz7GfNktFceLDhx1tkyZL2mK1pSs2tM9Ih8W9vaXGaeXkORy0wa+Gs3yZMlopSlKx1ta97TFa1iPGZmYiITX+vP71OTnU3PVHo5zLuFhVpf12970ysW5ZzsmNfw5GP1lq82NJY8fDxh+sZlr3laVlXEs2qxtZcrUv4dX4DOrx32H1i98eGufP8AmZ9TtLHki2HHPxpfndjFaa5rfC33brZPlR0rXcz5otm0qxp+vfvYy7Hzu1PRq80p40y8pasxe30TGlS0RNI+j7Rkr5p6zOKlJimaZzdlsthudhm7bb5+btNpssrIz9lstjk5GdsM/Oy7tb+VmZuZk1ncu3bk6yncuXJVlKta1rWtarQfF8XxnB8br8Nwuti09PUx0w4MGDHTFhw4sdYpjxYsWOK0x46ViK0pSsVrWIisREdEcOzs7O5sX29zJbLmy2m173tNr3taetrWtaZm1rTMzMzMzM+MvBcg+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZn+j71095ejLlEtj11uKbfhG1zbWTzHq/kF29f4jyWkYRs3cuzbj4z1+xpbjGNvZYflufgtwvxyLEa2JaJ+9z8PT2+e+vtGOM9TdGdHuDTxWpxvP6da05LRnrNq47WnpXd0pvNpvpbPmxfn5L69tbYtGxXNXo96799ei3K/aO3c3ztHLaLbGjmmZ183h0m0R8cObpERXNj6W/NrF4yY48k2B+j3139GeszjFM7r/AHFNHzzW4VvI5b1XyHJxrXLuPyp5beRmYdqNY02WtpdlGNvZYkfJ+KEb8Me9L3NKRvvd/Du9wfsV7s+7/UnRnkO3drLanHdwaWO9uN3I/OmmPJaes6O9NKza+jszGT8zJbXvs4KfPtMR6O+vPYvrRxf2jt7N8jkMVYnY0c1ojYw/CJtWPCM2HrMRGbHE18axkjHefJGabQtm0AAAAAAAAB1R3P3f1b6fOCbXsjt7mOq4bxTVRrGuZsLtZ5myzawlKxqNFq8ek8jOzb1I191i4tqdytKSl5aQjKVMzehXoB6ve5T1E0/Sz0V4PY53mdyesY8NYjHgxRMRfZ29i81wamrj6x8zY2MmPFWZrXzTe1a26j3p3v2t6fcDl7l7v3KaWpij+Nefzr26dYx4qR1vlyW6T5cdK2tPSZ6dImYkt9eP3Z+0/VF+tdbdWR2nVHRWTLIwczXWcmFvm/YWBKVbfn5ltcKtaY2Het0r5tNhXa2q0nKGVey4+Slu5z+HX+DH6Q+0adD1U9YJwd5eoeKKZcea2ObcVwuaI83TjNfLETn2cdv4vJ7WOM1ZpS+pg0reeckSHr17tu6vVP53bfanzOJ4G3WtqRaI2dunw/5zes/mY7R8dfHaaTEzGW+aPL5dQabNp6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyd9Lvq77t9IvN48w6j5NcxMXMuWY8o4XtffZ/DOY4VmX4cbkGlpOEa3IUrWljMsSt5NnxlS1djGc4y1L93Hsp9Avet2DPY/rVxMZs2CLTocpr+XFynGZbR45NPa8tpilpiJy62WuXVz+Ws5cNrUx2plH0t9X++PSHnI5ntDamlbzHz9bJ1trbFY/scuPrHjHj5clZrlp1ny3iJtE1/8Aol+450l6ztRj6nVZUeB9x4WDXJ5B1Rvs61c2FyOPZ95m7Phm0lG1Db4EPCVZStW4ZNmlK1yca1Ctu5cpJ+/n8Lr1+9ivNZOZ5nFPcXY2fL5NPuHTxWjDWb28uLX5PX82S/G7lvzYrXJfJq57WiurtZr1y48Uwvoj7kOx/WnUrqalo0OZpTrl0Mtom89I62ya1+lY2MUePWaxXJSI65MdKzW1thKM1sSAAAAAAAAAxh9UXq86R9InCa8v7d5Paxc3NtZP9VuE6qtjO5rzLLx6Upcx9DpKzhWtq3WUKZGbflbxrHmjS7djKduM9uPaN7J/X/3q9+x2X6K8RbNg17U+8OV2Ivi4vjMd+vS+5teW0RkvEWnDq4q5drY8t5w4b1pktTFnqn6wdj+kHC/fHd21FL3ifka2PpbZ2bR8YxYusT5YmY8+S01xU6x57xNqxMf3rY+4x3h6zdxf1e4zJ8F6ew82l/QdT6DOuy1c52LlJ4205hnxjbnuM6NYxlCd+EbFitPHGsWZSuTuXbvYR+F97f8A2KcLj5fg8Edw9758Xk3O4dzFX58Resxk1+MwzN68bqWibVtXFa2zsVnpt7OatcVMUPPrd7ju+PWjctq7t50OGpbri0MVp8k9J61vsX6VnYyx0iYm0Rjxz/gsdJm1ra+UljXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAco4ZzXl3XXKdNzXgnJNzxHlnHsyGfpeQ8ez8nWbbW5UKVhW5jZmLWMqUnGUrdyFa1jONZQnSUJVpXqPffYXZXqf2lvdheonFavN8LyeKcO1pbmGmfXz45mJ6Xx5ImszW0Relo6Xx3rXJS1b1raOW4Xm+Y7c5TDzfA7OTT3Ne3mx5sV5pkpb8sWrMT4x1iY+FqzNZiYmYVB+gr7znGex66Xqn1Y5Op4Rzy5Gxr9L25ahZ1fB+W36UjZs2eXY8fC1pdhdrTzSyoeXAuyrL2YXhbt3Kj/4jH4E/dnpbG/6xezXFs9wduV8+ba7ctNtjleOp1m1rcbeeuTlNPHHhGvbzclhpFfHf65MuOUf0D96XF9y/I7U9W7Y9HfnpTHyERFNXYn4RGxH8XWy2+M3jpr3nr4YPza237WrtrItW71m5bvWb1uFy1dtzjct3bdyNJwuW5wrWNaVjWlaVpWtK0qrhZsOXXy2wZ6zS9Jmtq2iYtW0T0mtonpMTEx0mJ8Ynwlv7S9b1i9JiYmOsTHjExPwmJ+mJfo/B+oAAAAADWl65PubdMejvX53F8K5j9ld5XcWv6X1xp863TF4/dyLVJ4+y7D29nzU1+PSMqXIYcIzy79KxpC3btTrk25W/wAPr8J31298PJa/d29S/avp9jyf845vZxT8zcrS0xkwcNrW8s7maZiaW2bTTS15i83y5c2ONXLrH66e53sr0b18nF4Zjk+dtX8zTx2jy4pmOtb7eSOvyadJ80Y4ic2Tw6VrS05ayFeo31P90+qrnV7nncvLsne5sJZMNFocWlzC4lxDX5Vyk66nimgjOdvFs08sKTuVrO/erCM8i9euUrOt2H2ve0j0I9nnp9j9OvQzhacdgtFJ29zJ5cvI8lmpWY+0chueWt9jJ1m00pEY9fB57U1cGDFMY4h/9R/VHvX1X523P957k7F46xixV6119ekz1+XgxdZilfCImfzsl+kTkve35zHxssx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9rpd3ueN7fXb/j212Oi3unzMfY6nc6jNytdtNZsMW5S9i5uBnYkoXbV23OlJQuW5UrStPGlXD89wPBd1cLtdt9zaeDkeP3sV8Gzq7OKmfXz4clZrkxZsOStseTHeszW1L1mtonpMPr0d7d43cxchx2a+DPhtF8eTHaaXpes9a2pesxatonxiYmJiVJfoM+9TYy66bqj1i5VvFyfDG1mg72xMWNrGv1r5bONY7P1mNSkbUv40lusOFLdfGNcrHh4XsyVV78Rb8BnPpfb/AFl9juG2XF+fn3O0sl5tkp8bXvwOe8zbJX4THF7NpyR0vGns5OuDRrJZ6Ce9emaMHaXrJeK38KYuUrHSs/CIjdpHhWfy7OOPL8Pm469L5po21u01u71+BuNPscHb6ja4ePn6vbazLx8/XbHAzLUb+Jn4OdiylbvWbtuUZ27tuVYyjWlY1rSqr1yvE8rwPJ7HCc5rZdLd08t8OfXz474c+DNjtNMmLNiyRXJjyY7xNb0vWtqWia2iJiYSPa21rbuvj3NLJTNhy1i9L0tF6XpaOtbUtWZratomJi0TMTE9Yno89xb6gAAAAAGlP15feB669P8A+s9Y9AT0vavctj8xr9nvY3a53XfXmbH8F6Ofm4ko022xtV9n5HDu0s2Z0rTKv0uWp4s56/w6vwR/VD3KfYfVr3IV2uz+xcnkzYNTyxi5rmsU+NZw4slbfd2lk+P2vZx/Pz45rbU17YstNymknr37xO2/T2M3a/p9OPluar1pfL182nqW+Exe1Zj7Rmr8PlY7eSlusZckWrOK0pHaHavYndPNNv2H2ny/dc25lvblJ7Dd7zKlkX/dQrX8vgYdmnhaxsSxSvkx8TGhCzah4QtwjGlKLjnpH6O+mPoN2Fo+mXpBwmrwHB8fXph1dXHFKeaenny5bT1yZ9jLMebNsZ75M+a/W+XJe0zKJ3ujuvuPvbnM3cfde5l3t3PPW+XLbrPSPhWseFaY6x4Ux0itKR4VrEeDr1kt10AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfpatXMi5bs2bc7169OFu1atwlO5duTlSELduEKVrWta1pSlKUrWtavzy5cWtitnz2ilKRNrWtMRWtYjrNrTPSIiIjrMz4RHjL+6Uve8UpEzaZ6REeMzM/CIj6Zl9CD0p9U5XR3pu6T6nz7t+9teEdc8a1O8nk5NzIr/WKWBHN5FbsXLspVjYhnXciGNbpWtLdqkLcfwxo80X3h+ser7gfdL396y8fSmPT7g5ve2dSKUin/ADKM1sWlN4rEROW2rjw2z36ROTNOTJb860rDPpR2nl7F9NuD7S2Jm2bR08OPLMzNv5byRbNETMz+bGW14pHXpWkVrHhEMgWtbIYAAAAACAr1ydR5fR/q27566ypZl3H1/YO33elyc+d2/l5fGuZTpzDjd/Jyr0pyv3fyWdYjevVlWs7tJ1r4S8Y09Ir8Pn1p0vcD7L/Tn1O1IxUybPDa2rtUwxWmPHvcZE8bvUpjrFYxY/tWpltixRERTFakV616Wmv366doZuxfV3n+3M02muPbyZcdrTM2th2OmxhmbTMza3ystYtbr42iZnpPWIxPbkMSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPc8f0W05RvtJxnS4ss3dci2+t0WowoVp58vabfMhr9fi2619lK3LtyEKf99XB9y9w8R2j25yHdncGWNfQ4vWz7ezln4Y9fWxWzZsk/wUx0taf+B9nH6G1yu/g4zQrN82zkpix1j42vktFKV/8AbaYh9DzpLq/VdKdQdZ9R6Wtu5ruu+Ecc4nbyYW/dfqF/S6q3iZ21nD+S5mZEbuVd/wC2dyVXmT+vnq3zHr162d1+tHPRNdrufld3kbY5t5vk02ti+TFr1n+01sU0wY/yUx1j6FijsjtfU7J7Q4ztHR8cfG62HXi0R08846RW2SY/LktFr2/urS7QYhdrAAAAAfnOELsJ27kI3LVyMo3LcoxnCUJx8soTjLxpWlaV8K0r7K0ftjyZMOSuXFaa2rMTExPSYmPGJiY8YmJ8YmPg/i1YtE1tETEx0mJ+l8/r1mdJ19O/qh7q6htWPy2p4vzXPvcYteMpUjw3kVuHJ+GwrOX86cdXm4kLlaVrTz0lT+R6TXsV9fI9zntH7C9a82T5u7y/F4ab9vCOvJ6Vr6HJz0j4Vtv62xakT0n5dqT9Kvn60dkf+nXqnzfZ9K+XDq7N5wR/+jZojPreP0zGDJji391EwxjbZMXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfP2yelad6etPpfjuXhSzeO8S3kuz+V08nnx7en4BCm+w7WfDwlStjK2cNfr7ka08K0yPLWtPHxRxfiyevX+z17De++59LYjByfNakcDx/j0vbZ5mZ1MtsU9YmMuvo23Nykx41nW80RPTo2A9sXZH+fXrZwvHZ6TfW08v23P4dYjHqfytYt8fzcmaMOKY+n5nT6V1jzyk74AAAAAACXz7/XSlNZzfpb1A6zCuUscq0u16w5Xk2rdI41va8Zvy5BxK7kTpT238vEzNjajWtfH3eFGn8IrcP9W99e55XsHvz218tnicnD7Wvz3HY7W63tr71Y0+RrSPow62xraWSYiOnzd+8/GyLf8AEB7JjW5zhPULVpPl28V9HYtEfmxkwz87XmZ+m+THkzV//DgiPoTurOKOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtF+z70nHuL1tcD2eww65PHundfsu3NrWtqtbFNlx6drA4dD38qVhG5Dc5eBlwjX8UoWLnl8PLWUYivxufXy/of7B+4uJ43NGLku+M2DtzX/O/O+RuxkzcnPkiYtbHbjNbb1rWj82l9nF5uvmittp/Z32R/nl63aG1sUm2vw1L8hk8PDz4ZrTX8fhFo2cmLJEfGYx26fCZi2BQiTcAAAAAAAJc/v7dIw0/YXTvqB1eLCGPzTQ5/W/K7lmEYRpvOJ3q7njeblTp7Z3svCzMnHpX+S3gwp/2Ldn9XB9fsnN+mnfHts5fNNsvA7eHnOPi1us/ZORrGrvYscf2OPX2tbBmmPpychefj1RZe/8A7Hrp9w8N6hatYiu7ivp55iOn8rrz8zDa0/TbJiyXp/BXBEfkTzLMyO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFPH2BOk/yPFu7PUJssCkb/INrrOquJ5tynu7kdZo7Vvk3MvcRl7ZWcnJyNTDz/wAPPiTjSvjGVKVLP6yJ69/eHeHYPto4rY64+N18/cPI4q+NZz7dr6PGeefhXJhwYeRv5P43y9yl5jy2pMyhfh+9kfI4rnPUPax/nbF6aGvafj5MURm2en5a3vfXjr8PNimPjE9KLVYBI6AAA8fFysbMsQysTIsZeNc81beRj3oX7Fz3c6wnWF2zWsa+EqVjXwr7K0rR9e1qbWjsW1d3FfDlr081L1mlo6xEx1raImOsTEx1jxiYn4S/DFlxZscZcNovWfhNZiYn6PCY8Pj4PIfI/cABr5+6J0p9cfRP3HpcPB/Pci4PqrXa3FYxp5r9rZ8BrLbbSmJCntneyNP+qYVuFPGsq36UjSsq0okt/CN9ev8AZ99+/Y3Pbux9n4zuDYt29yEz4Utg5jy6+v8AMt8K48PJfYNq95/NrXBM2mKxMtePdJ2T/nz6JczpYcfzNnRpG/g/LF9TrkyeWPptfX+fjrEeMzfpHihgehKgnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVh/YY6TpxToTsbvDY4NbW17a5rDj2iybsaS97wzry1PEpk4dyta1hG9uMvZ2L0aUp5q4lusq18sfLTW/rFvr5bvH3Hdr+3/i9iL6fZfFzubdKz08vKc1auSaZI/spxcbraGXFaZnyxuZYrFfNbzS0ewjsj7p7A5LvjYx9MvL7PycVp+nW1ImvmrP0RbYyZ62iPjOKvXr0jpviV1m+4ADxsvLxMDEys7OysfBwcHHvZebm5d6GNiYuJjQreyMvLyL1aQt27cKVnOc60pGlK1rWlKPs09Pc5Hcxcdx2K+xsbF648WLHW18mTJe0Vpjx0rE2ve9pita1ibWtMRETMvwzZsWDFbY2LRSlIm1rWmK1rWsdZtaZ6REREdZmfCI8Zek4jzLiXYHHdZy/g3J9BzLiu6szyNRyTjG3wN7o9lZhdlj3p4O11ly5ZueS5CdufknWsZxlGXhKlaU7B3p2N3n6b9z7fZPqFxO5wfMaFops6O/rZtTbwWmsXrGXXz0x5aealq3r5qx5qWrevWtomfg4jmeI5/jsXMcDtYt3Uz+OPNgyUy4rxEzEzW9JtW3SYmJ6T4TExPjEuSOpuWAAa8fum9Jx7w9E3b2txsSWVyHr3X2e3eL+7t1v3obHgMbmw3EMexClZzu39Nc2uJajDwlWd2nh4/zZSb/hB+vl/b97+eyeW2s3yeM7lzW7c3+tvJWcHMTTDrTe8zFa48PJ14/ZyWt+bFMNuvl/jV1z91PZEd9eiPMamKk32OOpHIYOkdZi+pE3ydI+M2vrTnx1iPHrePj8Jhoeg2gsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/1pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfr6HOlP+Xz0n9IdXZGFHB3mo4VgbfltjyeF2HNOWTnynldu/clGk7lbGdmXsaEp0pWlu3CPhSMaRp5vH4gXr1/tL+8jv/1e1didnj93lc2txt+vWs8Xx8V4/jrUrEzWkZdTWxZ7VrPScuXJfra1rWmwL6GdkT6e+k3Cdq5KRjz4damTYj6ftOfrnzxM+Ez5cuS1ImfHy1rHhEREZYNNGWgHDOwOw+D9U8R3PPexuUafh3DuPYsszcch3uVHDwMSzT8MYUlL8Vy7dl4W7Ni1Gd27OsbduEpypGvfPTf0z7/9YO9dD059L+I2ec5zk8kYtbT1Mc5c2S0+Mz0j82mOlet8ubJamLDji2TLelK2tHB9wdxcH2pw+fn+49rHpaetXzZMuW0VpWPo/hm0z4VrWJte0xWsTaYhK569vvG847n/AFrqv0z3911v1Tdrk63cc9809d2D2DhVpWzdhgyh4XdHrL3jX/RWp/nb8PL767jwuXsNcE/Dl/A49P8A0JjQ9YPdfj1e6e8aRTPrcR0jNw3DZYmLVnNE9actv4vD+UyV+wa+SbfIxbN8eDdiKj1895XOd6fP7U9MbZON4mfNTJteNNvbr8Jiv06uC39rWfn3r089sdbXwsOfRJ9xruz0Ybizq9Xk3ee9O5uXK/yDqbfbC9b11ud+7W5k7bhmzlC9LT58qylK5O1anj3618cnHuzjauWt4/f3+F36B++3g8nL8vir253zr44pp9xamGts1opXy49flMEWxV5LUiIrFK5MlNnWiOmrs4aWzYs2G/Q/3H97+iu7XV1LTyHDXt1y6GW8xSOs9bZNa/S06+WfGZmtZx5Ov8rjvaKWpYN6Y/Vr0l6t+EQ5p1ByeGfcxbeLHk3EdpG3gcy4bn5EPPTA5FpfPKsfGVJRtZVid3GveWXub1zyy8KRXuz9mHr57LvUC3YfrbxE61c03nR5HBNs3GcnhpPT52lteWsW6RNZya+WuLbweasZ8GObV6zE+l/q32R6u8HHN9nbUZJpEfO179KbGveY/iZsfWen0xW9Ztiv0nyXt0npks1RZOAfhkY+Pl497FyrNnJxcmzdx8nGyLUb2Pk496Nbd6xfs3KVjOE41rGUZUrStK1pWng+rW2djS2Me5p5LYsuK1b0vS01vS9Zi1b0tWYtW1bRE1tExMTETE9X5ZMdM1LYstYtW0TFqzETExMdJiYnwmJjwmJ8Jh8+H1U9OZPp+9RncfT1+1Ozj8I5zucDSefz+e/xTOu03HDs2fva1lSuRqsnDv1pWVfCs/50v51fS29n3rjq+5P2v9jet+veL5e4OJ1s2106dKchirOtyeKPL4dMPIYNrFHSK9fJ/FrP5sV6PVfs3L6feo/M9m5KzFdHayVxdevWcFp+Zr28fH8/BfHb6fj8Z+LH9skx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8vBwczZ52JrddjXczP2GVj4ODh48K3cjKzMu9GxjY1i3DxrKc5yjGMae2ta0o+LkeQ0eK4/PyvJ5a4NbWx3y5cl58tMeLHWb5L3tPhFaVibWmfhETL98GDNtbFNbXrN8mS0VrWI6za1p6VrEfTMzMREflfQs9NvUOF0L0J1J09g27EP6gcF0Oi2V3HpGNnP5DDDpkcn2sPJTwrXM2V3KypVp/GtytXmde6f1r3/AHGe4zvT1v37Xn/OTltzbwVv1m2LTnLNNDXnr49NbSpr69Yn4VxRCw/6a9oYOwOwOI7NwREfd+rixXmvwtmisWz5P/zmacmSf4bS7ua/u8gOje//AFG9QemPgWZ2J3Hy7B4zpbNLtrWYPjHJ5ByfZ27dLkNNxfSwrS7m5UvGnjGFKQt0r7y9O1apK5HYT23e1/1s92fqNg9MfQ7hcvLb+Ty2z5fHHp6GCZ6Ttb+1MTj1devSfzrzN8to+Xgx5c1q47dD9QfUfs70v4G/cfeW5XVwR1ilf42XPeI6/LwYonzZLz4eEeFY/OvatIm0SHeu37oPb/rAy9hwvQVzesOhreXX8nwTW5so7jltjHuefEz+x9riypHLl5qUvQ1lmtMOxLyeNMm9ZhlVuvfh4fhH+iXsj09bvvuWMXdvqLbH/KcvnxROtxtr1mMmHhNfJXrrx5ZnFffy9d7PX5nltq4M99SIgfXn3Sd4esWXJwnHzbi+Ai35urS38psRE/m33MlZ/lJ6x5owV6YaT5esZb0jLPRno99dPePox5T+pde7f9a4Ntc6zk8y6t39+9d4nyaFI0s3sqxCNJS12xpajGNrZYdKXPwW4345FiNbEtg/e9+Hp7f/AH19n/dfqZpfYe4dPFanGc/p0rXkdGZmbVx3n82u7peebTk0dmbY/wA/JfXvrbFo2K9F9HfXfvn0Y5T7T27m+do5bxbY0cszOvm+ETaPjOHN0iIrmx9LeFYyRkxxOObDfSD65Oj/AFlcU/VOu91TU8z1mFZyOXdYb7Ix7XLuMznKlq5kwsx8sc7X+8rSNrY4lK26+aEbtLN6VbMaQXva/D69wPsW7y+5/U/Q+2cDt5bU43ntSl7cbvxETatJtPWdTc8kTbJpbE1yx5b2w2z4KxntMZ6PeunY/rPxX2vtzN8rdxVidjSyzEbGCfhM9PhlxdfCubH1rPWIvFLz5IzJaLs0APHy8TFz8TKwM3Hs5eFm497EzMXJhG7j5OLk262cjGv2pUrSUJwrWMo1pWlaVrSr7NLd2+N3MPIaGW2HPgvXJjyUma3x5KWi1L0tHSa2raItWYnrExEw/DNixZ8dsGesXpeJrasx1i1ZjpMTE+ExMT0mJ+MPnt+qHp/I6B9Q3cXT1+zfs4/BOeb3U6WuTKsr+VxW7lV2PD9jdlKta1rlaq9h5PtlWv4/bWtfa9Lz2ket+t7kfbN2P64a96Xy9xcRqbG18uIimPkK4/k8lhrEREdNfkMWzg8IiP5PwiI8Feb1R7Oyen3qJzPZt6zFdDay48Xm+NsE28+vefj/AB8Fsd/jP8Z0M2KdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmn9vTpSvfvrE6P4Jk4Vc3Q4vLcbmvL4St1ni14twSNeVbXEzq/8AhtZtcW3rvH2eM8iEaVpWtKtDvxM/Xuvtx9j/AKgeoernjByWbjr8Vxsxbpk+8OXmOPwZMP8AbZNWM993p4/ma17TExWYZr9u/ZM9/wDrJwXBZKefXpsV2diOnWvyNX+XvW/5K5fJGH/hyRHxlek855PoAwl9Y/r06O9GPGa5nOtpTkfYOxxZ3uJ9U8fzMWfK93KXjbs5uxrLzR1et83jSewy4eWtIzjj28m9D3Nd+/Y5+HT7gvfX3Z9h9PNP7r7a1MkV5HuHdx5I47Ujwm2LD08s7+95Zia6evbzVm2O2zl1cN4zRg71k9fOxfRfi/nc7l+08hlrM4NDDavz8v5LX+MYMPX45skdJ6WjHXJePIj09W/rb7x9ZHLv13s3e/kuLazJv3OIdb6GeRi8N4rYuVrGFyzhTlWWXnShXy39ll1nen41jCtqzSFmF332W+wP2++xvsv/ADf9J+P+0cxt0pHJc5uVpk5PkLx0mYtlisRrakWjri0teKYMfha8Zc85M+SHP1e9b++fWXl/t3c2fyauKZnX0sUzXWwRP0xXr1yZZjwtmydb2+EeWnlpXD9u0w6A7M6m7f7L6L5xqOxuqOYbfhXMNLd95ibTU36QpfsSlSV/XbTBvUlYzMS94UjfxMq1cs3KeycK0Yp9Z/RD0p9wvp/u+l/rLwmtz3B79emTX2KdZpeImKZ9fLWa5tbZxdZnDs6+THnxW8aXrLs/aPePc3YnO4e4+09zJo7mCfzcmOfjH00vWetMmO3wtjvW1LR4WrKsr0Efdv629S1NP1n3NXTdVd43IWMLCu3cmmFwLsbNrTyQrxnPz51/IbC7Ly0pqcu7KtyVY0xL1+Uq2bVM38Rr8Fz1V9qdt71W9C42e8fT6k3y5a1x/N5fhMXxn7fhw1j7Xp446zPI62OsY6VtO5g1qVjNllr9Avd12z6mRh7Y70+XxPOzEVrM28uruW+H8he8/wAlltP/AMvktM2mYjFfJMzSu49Bq3NASqffv6Unx7uTqvvjW4dYazsjiOTwnkN6zZl7uPK+CZP5jAy8/I/hS5mavPs49mPs8YYE60/hVcP/AKuR6907m9Du8fbrymfzbfa3JU5XSra3jPH8tTyZseKn6vW39TLmy2+i/I0ifjCKL399k247vPie/denTFyWvOtmmI8Pn6tvNS1p/tsmDLWlY/Jrz+RoFWQ0foAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY79qTpSXdnrc6nxsvDrl8e61ycrt/ktfdyu27OPwatvJ47K9DwrGsLm9u6mxOM6+FYTl/H+bWLn8Y717r6C+wPvLa088YeT7rpj7b0fzvLa9+W89N2Kz/Gi1OJx8jlrNfGL0r41/jRsj7TuyJ739b+Jx5aefX4ybchm8OsRGr0nD1+jpO1bXrMT4dLT8fhNxDz805wDVn67fuldRekTF2XCOK1wO1O+a40oY/CcHNrXQcMyLsPDHzuxdvhyrWxWHj72Opx5VzLtKRpcriWrtvJS/fh4fhD+tnvW29Xv7u/53aHpzF4m/K5sX/POTpWfz8XCa2SOmXzdPlzyOaI0cMzaccbubDk1Gqnrx7p+z/SDHl4PivJyvP9JiNalv5LWmfhbcyV/i9P40YKT868REW+TS9cqRDvn1CduepXnmd2N3JzDP5XyHKpOxg2rvlxdLx7V+8rcsaXjOkx6Ux8HEt+PjS3ZhSs51ldvSuXpzuSute3T2zeivtS9Otf0v8AQ3g8PDcZimL5bV65Nrd2OkRba3tq/XNtbF+n8fJaa46eXDgpiwUx4qRB9++ond/qbz9+5O89y+3sW8KxP5uPDTr1jFhxx0pixx+SsdbT1vebXm1p6VZ6dHAct4NzvmXWfK9Lznr/AJNueH8u49mQztNyHQZ17X7PAyYeNK+7v2K0rW3cj4271qdK27sKyt3IyhKUa9L9QfTvsX1X7O3/AE+9SuJ1ec4Xk8U4trT3MNM2DLSfh1peJ6XpPS+PJXy5MWStcmO9Mla2jmOC57mu2OWwc729tZdPc1rRbHmxWml6z/BMfGJjwtWetbVma2iazMKnPQR95Hh3b9dL1V6ob+o697QvVxtbpexoRs6rr7nGT4Us2obv3kqW9Hs71fDxpWtMG/OsvdSxKytY1agX4jX4GffHojG/6w+0fHs9zdo0i+fa4W3m2OZ4mnWbWnV8tZvyuhijr0mOvIYMcV+bXciubbiVP0C95nDd4/I7U9UbY+O5S3lpj3I6Y9Tan4R8zrPTWz2n/wDMXt18s4pmmKd7cZRnGko1pKMqUlGUa0rGUa08aVpWn8ivDatqWmtomJiekxPxifyS3yiYmOsP9fw/pKT9+vpSPGO7ur+89ZhUta/tLh+TxTkGRZt08s+WdfXrccbMzbtP4XMjVZ2Hj2qSr7YYUvD+bVcb/q5vr3buz0C7u9vfK55vs9oclTkNKlreMcdzNbzfFir/AGmDkNXZzZJj4X369f40Inff32RHGd78X31rU6Y+V17YM0xHx2NSY8trT+W+DLjpX8sYJ6fCWhBY3aBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKP2Auk5Vud4eonZ4fhCkNZ0/xHMlCkvNOVbPL+dUt+b+Hl8NDGMo/x8bkfH2Voqs/1kf19r5PT/2x8Vn/ADpnP3LyWOJ+ER83jeJ69Py9eXm1Z+HTFbp4xKS38PzsiYnnfUXZp9FOP17fo7G1/wDw/wCaxEx+W0KUJzhahO5cnG3atxlK5clKMIRhCPmlOcpeFKUpSnjWtfZSiqzjx5M2SuLFWbWtMRERHWZmfCIiI8ZmZ8IiPikvtaKxNrTEREdZmfoaDvXv95ni/Wv6z1R6TczU845/D8zrt721chZ2vBuIX/bjXLXELdfGzvNhbr4zjlV82utVpDw/PeNy1asdfhyfgVd3eq0aPrH7y8Gz2923b5ebU7diba/LclTwvW3JW6Rk4rTvHSs68eTk81Zv1+7/AC4s2bQH1995/F9s/O7T9JL49/kI81Mu/wBIyauvPjExrx/F2c0fGL+OtSfL/h+tqUl15hzHlfYPJdxzLnPI9xy3lfIMyefuuQcg2OTtdtssq5SlK3crNy5TnLwpSkIR8fCEaUjGlI0pSlubsjsbs3017U0exfT7i9XheG43FGHV0tPDj19bBjjx8uPFjrWteszNrT0817za95m1pmYtuZ5rl+4eUzc1zmzl3NvYtN8mbLe18l7T9NrWmZnw8Ij4REREREREOMu2OKAAAf17Y1pKNaxlGtKxlStaVpWlfGlaVp/CtH82rW9ZraImJjpMT8Jj8klbTE9Yb1vQP94/mfTldL1V6n8jddi9W25Y+v0/YlJX9r2DwLFr/obUNt72tbm81dn2V8spVzrFvz+5nlRhZxKV5vxHPwNuxvXD7f6xe0jFq9sd32i+bZ4XpTX4bl8n8a063liMfFb+Xx/OiPu/Yy+T51NO18+7bfD0B95fM9nfI7T9UbZOR4qJimPc8cm3q1+ERk69bbWCvh4TPz8devknLEUwxU7wPn/Cu0OJaTnfXnJ9LzHh/IsOOdpuQ6DOs5+uzbEpeSUI3bNfGF23OkrV+xcpG7auRlbuwhcjKNKgPqL6cd9+kfee/wCnfqZxG1wfN8XknFtaW5ithz4rx4xM1tH52O9ZjJiy0m2LNitTLivfHetplU4DuDhO6eIwc927tY93T2a+bHmxWi9LR9PjHwtWetbVnpalomtoi0TEYBfds6Rl3V6JOy5a/Erlci6png9waGMIRlOMOGwuw5V4VrTzeH6Fk7ScYw9spxhT2pIfwX/X6noN7+u1I5LNGHjO8Yy9tbczMxHXk5xzx/0+X/8Ae2Dj6za3hXHbJPh8Wv8A7ueyJ729EOTnXp59jiZryOL/APp4t8/+H/4W+eYiPjaKoh1/hB2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqb+wZ0nLR9W9u997TBjDM59ybA4DxfJvQr76PHOF2K7De5WHKlfD3GZsM6Fi54+33mB/ClKeMqgf9Y89e6dwer3ZPty4jYm2DtvQzcxyFKz+b9t5S8YdTHkj4/N1tLVtmp08Pl8j8ZmelZVfYF2RPH9q8x39tU6X5DPTUwTPx+TrR58tq/wBzkzZYpP0+bX+j6d9/IuRcf4hotryjlW71XG+N6HByNnu99vM/F1Wo1OuxYe8yM3YZ+bKFq1ahSnjKc5Uork9sdsdyd69w6faXZ+hscpynI5aYNXU1MOTY2djNkny0xYcOKtsmTJafCK0rMz+Rv1yHI8fxGhm5Tls+PW1sFJvky5b1pjx0rHWbXvaYrWsR8ZmYhMt69/vRbXlH611P6Ps7O49x6sr+u33d87FzC5DvLP8A6V/H67wcuMbutxpR81P1TIhHMn4+OPbxKwjeuWwfw5PwIeG7T+wesvvd18XJcn0pn1O1K3jLp6lv41L81lx2mm7nrPSfsGG9tKnTps5NyL2wYoxfX73q7fKfP7S9Hcl9fX6zTLycxNc2WPhMadbR5sNJ8f5e8Rmnr1x1xTEXtPPlZWTm5OTm5uTkZWZlZF3Ky8vKuzyMnJycidbt/IyL92spznOcqynOVa1rWta1r4rNGpqauhq4tHRxUwYMFK48ePHWKUx0pEVpSlKxFa0rWIrWtYiKxEREREI78uXLmy2y5bTe95m1rWmZta0z1mZmfGZmfGZnxmfGXjPpfkAAAA3F+gn7tvZfpl/Rusu4qbftXorH91g4MZZFMvn/AF1hx8LdmnFM/YXIwzdfZhTy00+ZdjGEaQpiX8aEJWrsHf4jX4LnpT7r/t3qx6HfZuzvUPL5suXpT5fD81lnrNp5DDhx2tq7mS3508lrY7WyWm87mvtXvXNh3K9Avd13N6YfI7Y7y+Zy3A16Vr4+bb06/CPkXvaIyYax4fZ8loisdIxZMcVml6z+pe4etO9OD6jsbqfmGo5rw/d26Sxdpqb9ZTxr9I0lf121wb1IX8PLs1lSN/EyrVu9br7Jwopk+s/oj6re3r1A3fS71l4TZ4Hm9C3TJr7FOkXpMzFM+vlrNsOzrZekzh2dfJkwZa+NL2hLb2l3j2z33wWHuTtPcx72nnj83Jjn4T9NL1npfHkr8LY71res+FqwwT+7r0rLuX0R9j5OBh1y+Q9SZGt7e0lI26yuQscVjdxuXSrOPjKkIaLK2d+saUrSs7cPHw8PNGQ78FX16r6F+/vtbV5DPGDjO9KZ+29vrbpWb8h5L8bHSfzZtbltfQxRM9JimXJ5Znr5bYH93vZE96eiHJZMNPPscRNOQxdI8emDrGx/D0jVyZ7dPhM1r1+HWIkV+xCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFu3pVudW/b++3/ANR5ndnJ9PwHGs8UhzPlmRsq+Xb7TmnPpXOY3+N6/V48a5Ox2eNavw11vGxbVy5WGL408bduU6UCPeFj9XfxJvxJe9dH0E4nZ7kzZOQni+Opg8dfBxfDxTjKb2bYvMYNLQz5MNt2+fYyYsUZNzpMxkyVxzOJ6U27V9vvt94fP3vtY+PpXBGzsTf/AAl9nb82xOGlIjz5s9K3jDFMdbWmuL+1rNk/Pr0+692n6qrm2686z/Vuquhbtb2Le0lvJhY5nz/F83h73nWz19yULWLOlPGmmw7srFPGVMi9meFutuyl+HR+Db6Q+z3Dp+pvqx9n7x9RqRXJXatjm/F8Pk6dfLxODNStsmxWZ6TyezjrsT5azq4dLrljLHx69+7Lur1Vtm7d7Y+ZxXAT1rOOLRGzt1/LtXpMxWkx/wDL47TTxn5l835s11HppWoQAAAAAADMX0ieuHvH0a8rruett1TZcR2mXYu8v6z5Beysjh3J7MPLbuZFcW3KlcLYRt08tjZYvhdhWkY3KXrNJWZ6Pe9b8P72+++fs37k9U9CdTmtTHavG87p1x05LQtPWa0+Zasxtac3nzZdLY82K/W1sU4M81z0zL6QeuPfPozy/wBs7bz/ADdPLaJ2NLLNp188eETPlieuPL08K5qdLR4RaL060mv30o+tn0++urgWxxeLZVnA5Lc02Rgdg9Pcqv40OTavC2GPXA2UrVq1WMdnqrtLlbcNhiUrGsZwjfhjX5VsRpJe8j2De5T8PT1G1dru/DbY4qu1TNw3cvH0yTo7GXDeM2DzWtE20eQxzSL20tnpeLUvfXvta9Y2LTC+k/rf6e+u3AZcXFXjHtTjmu3x2ea/OpW8eS/SInpmwW69IzY/DpaIyVx5JmkRP+oHqXZdEd39qdPbWt2eR17zjf8AG8fKu08s9jqsLOn+hbiNKUj+HNwZY+XDxjSvluU8aU/gvve2r1n4v3Ee3/s/1v4jy1x9zcVp718dfGMGxlxV+163xn87V2oza9vGY82KekzHihI9Q+0dnsPvjluztrrNuO2cuGLT/Z462n5WT6PDJimmSPCPC0eEOnWcHTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH6WrVzIuW7Nm3O9evThbtWrcJTuXbk5UhC3bhCla1rWtaUpSlK1rWr88uXFrYrZ89opSkTa1rTEVrWI6za0z0iIiI6zM+ER4y/ulL3vFKRM2mekRHjMzPwiI+mZW46btfo/7X/ow6Z4f2/v8fX7/AI5wDDt2eC6H8pmcx5vzzPjXf81hxrS1nb81n9WzMmt3PyZ28ezScPf3oznCk6BvOejnuA/Fu99vfXe/onxt9njuV5jLa3LbnzMXGcVxGGY0+Lne2vLfy5I47WwRj1MFcu1mmmT7PgtTHeaTg6XdnY/tc9FuF4fu/YjHsa2rWI1cXltsbO1f+V2Yw4+tetftGS/my3muOnmr57xNoiZh/Wr9xDu71n7y9h7/ADLnCepcHNjk8c6m0GwyZ6W1OxOtcTa8qzPLart9jGlfw5F+1C1arWv5axZ806ztrewr8Mj0B9ifb9N3tzBHP96bGKabvcW5hpG1aLxHzNfj8XXJHHaVp+OHFkvmzRFftWxn8mOKReetnuK739ad6cPIXnR4jHbrh0MV5nHHT+LfPb82djNH0XtWKU8fl46dbdcAkkDX4AAAAAABkt6ZPVl3Z6SucWua9Qcou6+F+5j05LxLZe+z+G8xwLE61pgcl0lJwpc8IynG1k2ZW8mx5pVsXrda1rXVX3ZezL0E96Hp/fsL1t4iuzbFW/2HkcHlxcnxma8R/LaO15bTTrMVnJgyVy6ufy1jPgyRERGTPTH1c739Iudjm+z9r5cWmPna9+ttbZrH9hmxdYifCZit6zXJTrM0vWZlXn6PPuCdAeu/iObwu9bxuJdmZ+h2OBzXpfkudC/f2epycGWNucnie1rGxHca6dmdyN2tqFvJsR8a5GPahW3cuUnve/8Ahq+5H8O/vTX77w2vzXamvt4c3F90aOKaUwbGPLW+tj5HB5stuN3a5K0nHGS2TVz28sa2zmvGXFimB9HPcJ6f+vPE34S8RqcnkxXrs8bmt1m+O1Zrktgv0rGxhmszFvLFctI6/Mx0rNbWjR756q2nR/dPaPUW4jd/Ode845DxiF+7SkJbDA12xnb0+2hSn/gzMP3GXa9lK1hcj40pX2L0ftz9YuI9wPoR2j61cJNfkdzcVpb80r4xhzZsNZ2daf7vV2fm69/GYi+K0RMx4zDF372ptdi968r2dudfPx2zmwRM/wBnSl5jHkj+DJj8uSv8Fo8IdSM0OngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7/i+1wtFybju82Wnx+Q67TbzUbXP0GXclYxN5ha7YW8vK0+VfjGdYW8q3CVmc6QlWlJVr4V/g693dw2/3F2pynb/Fb1+M2t7U2dfDuY6xfJqZc2G+PHs46TasWvgvaMtazasWtSI80der7+K28GjyetvbWGNnHhy48l8Vp6Vy1peLWx2npPSLxE1mek9In4S7m9R/qi7n9VfOr/Pe4uWZO7zISyLei4/iyu4fE+H67IlSVdXxbReeVvFteEYUuXK1nfvVjGeRdu3KeZgf2te0X0J9nXp3j9OfQ/hqaGG0Unc3MkVycjyWakTH2jkNvy1vnydbWmlIimvrxe1NbDhxz5HdvUn1S709WOetz/eW3Oe0TMYsVetcGvSZ/wAHgxdZilfCPNbxveYi2S97eLHpsyx0AAAAAAAAA5Vwrm3L+uOU6Xm/A+SbjiPLuO5tvYaTkGhzr+u2mty4UrDz4+TjyjXwlGsrd23KtYThWUJxlCUo16f372D2V6o9ob/YHqLxWtzXC8pinDtaW5ipn18+Oek9L47xMda2iL47x0vjyVrkx2retbRy3B83y/bfK4Oc4DZyae5rWi+LNitNL0tH0xaPomOsWifC1ZmtomJmHZ3qK7/5T6mOwrXa3Pddp8fn+w4vxvRc03elx6YNnmW24xg/omDyrM1tulLePlXdbZwcXIt2PC1WVj3luFqM6WreJvbD7bu0Pah6Z39HPTna2cvbetv723xertX+bbjNbfy/asvH4s8zOTPr493Lt58N83XNFdj5eW+W+Oc2TtPqN6gcr6m9wx3Zz+LHXkMmDDi2cuOPLGzkwV+VXPakfm0vbDXFS9a/mdcfmrFYtFK9DtiXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKuD8szuBcz4nzjWYWr2Oz4dyTSco1mDusa9mafK2Gg2VraYVnaYdi5ZldsSu2oUu2qXY+ePjGtfCtXT/AFA7M4/1G7E5n0+5bPn1dTnNHa0M+XVvXFs48O5gvr5ba+S9MlceaMeS3y8k47eS3S0R1iHLcHy2fgOa1Od1aUyZdLNiz0rlibY7XxXjJWL1iazak2rHmr5o6x1jr4vd9pdsdjd2c22/YvavMNzzfmW8u+fO3W7yq37sbEJyuWNfgY8aRs4mJYpKscbDxbduxZh+C1bhH2OB9IfRr0v9A+wdL0w9HeE1e3+D4+vTFq6uPyVm0xEXzZrzM5djZy+WLZ9nYvk2M9/z8uS9vF93dXdvcffHOZu4u7NzJvbueetsmW3Wenj0pSI6Vx469elMdIrSkeFaxHg66ZOdbAAAAAAAAAe20e83XGdxrOQ8c2+z0G/0mdj7PT7vS52TrNtqtjh3aX8TP12ww5QvWb1ucaSt3Lc6SjWnjStKuG7g7d4Huzg9vtjunSwclxu/ivg2dXaxUz6+xgy1mmTDmw5a2x5cd6zNb0vW1bRMxMTD7NHkN7i93FyPG5r6+xgvW+PLjtamTHes9a3pesxatqz4xMTExPwdh90d0867+5rPsfsvK1+15zm6Pj+l3/I8TXWdbm8onxvVW9Hrt1v4YtaWbmfXDs4+Pev2rVulyNqEpQ9555zxl6Eeg/p77buwK+lvpRhzafb2Db3NrT0sme2fFoRvbF9vNq6dsnXLTTjZy5s2LFkyZbY7Zsla3+X5KU7F3r3tz3qDzk9y9zXpl3r48WPLmrSKWzzhpGKmXLFfzZy/LrSlrVrWLRSszHm6zPUzMzqIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Xl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZRelT0w8p9U3K+xOL8VlkRyuA9Mdj9qTtY1il2/tc3imqpa41x3HrLxjS5sdtk4OL4eFZVtyuVjSlY+aOo3vE92vaHtA7O7Y7u7vik4u5O5+E7fi2S/lpr4uQ2Jtvbt+nSZppcdg28/XrFfmVxRaZi3kvlT0p9MOV9VeV5Hi+K6+bj+O3N7pWOs3tgxxGHDH8ObPfFT6Z8s2mOnTrGLrblisAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlHr/TByrYekLkfq1hW/Ljuj7r0vU9dfGzGkfyOXxq5tNpyW9cl+L3NvOv6rXW608KVu3p0/FWNfJqLyXu27P473t8Z7MckUjk+Q7W2u4fnTaevzce9jwa+hWI8PmX1MXIbt4nraMWDHb82Lx58qa/pfyux6PbPq5WZ+z4OSx6Hk6f2NsNr3zzPx8tctsGGPo817R4zE9MXG3TFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVv9hPpWnGej+zu9Nlh3LWz7R5jZ4poL9+3TwnxDr7HlS9mYNytPHyZO2zc7Hv0pXwrLCh4/wA1Tj/rGXr3PdvuB7S9vfF54vqdocZbkNylLfDkuZvE1xZq/wBtg4/V1M2KZ8Ypv36eFksfsG7Iji+xuU772aTGXldiMGKZj46+pE9bUn8l8+XLS35ZwV/I0A+u3pOXp89WneHWdjC/IaHC5pn8g4fj241pjQ4ZzKkeV8Wxsa541pOmLiZlvDnKlfZctTjWlJRrGlkj8O718r7lfZf6f+q2xsTs8jn4vDp8le0/n25TjOvH798keE1nPs619mtZjxxZsdom1bVtMffrz2RPp76uc521jx/LwU2b5teI/ixrbHTPgrWfpimPJXHM/wBtS0T0mJiMRm6jEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2ngHousQ+13jelLI11nG5TyrpHL2WxtZVuPjj9vchhXsPFuZ0rlaVnTX8glj2oSlKlaWseEaeSkY0jQX9SPfdsX/Fyy+8fW2rZeI4furHgw2xz/H7b0pjhclcUViYr9s4aubJaKxaJy7OS0+ebWm03vb/AKLUj2uV9J8mOK7W3xtr3i0fxeQzf87rNuvTr8rbmlYmZj83HWI8sRHSJ3Ix7+Jfv4uVYvY2VjXp4+TjZEJ2b+NfszrbvWL9m5SkoThKlYyjKlK0rStK08V+DW2dbd1se5p5K5cOWtb0vS0Wpeloi1b0tWZratqzE1tEzExMTE9EI+THlxZbYstZraszFqzExMTE9JiYnxiYnwmJ8Yl+D6H5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5WHiZWflY2DhY97Lzc7Is4mJi49uV3JycrJuUs4+Nj2oUrKc5zrSMYxpWta1pSj5d3d1ON08vIb+WuHXwUtkyZLzFaY8dKza972npFa1rE2tMz0iImZfthw5djLXBhrN73mK1rEdZtaZ6RERHjMzM9Ij6ZfQh9LvT2P0B6eenunrNqxZyOCcD0Wq3csaUZWMrlV7GpseYbG1KNa08uVtb+Zk+yVafj9la/xeaJ7t/W/Z9yHuZ749cNi974u4uX29jV+ZExfHx9cnyeNw2iYieuvx+LWweMRP8n4xE+Cwz6W9n09PvTvhuzaVrFtDVxY8vl+Fs818+xePj/Hz2yX+M/xmgr7/XSM8TkXSfqI1uLSmPudbn9R8syIQ8kYbHU3b/LOFzu+WnhO7kWL+5tynLwlS3jW4+MoxpSFj7+rd+v1d3trv72x8pmn5mjnw9ycdSZ6zOHYrh47lIr1nrXHhzYuMvFa9afM28t+lbWmb6AfiBdkTh5Dg/UbWp+bmpfj9iYjpHnxzfY1pn6JteltmJmfHy4qx4xEeWclaHRvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMx/QD0rH1Aer3o/rvLw6Z2glzDG5Vy6xdt0uYt3ifCLU+WbzDzfGnhS3mWsP8hStf4zvxjT21o0b/Ek9ere272S+oHqdp551+SjjcnH8batvLkryPK2rx2plxdOkzfWybP2vpHwpr3tPhWWZ/b92RHqB6wcF27mp8zX+0Vz7ETHWs6+tE7GWtvyRkrj+V/w5Ij4yveecin4Qt/c+6Rn0V61e5NJjYksXj3ONz9V+KVpGFuzPU9hTnudjaxLcKUpCxibX9SwLUaU8KRsU8PY9Cz8JL1+p7hfYX2N3BtZoy8n2/rf5vch4za1djhoprYbZLTMzbLscd9h3MlpnrNtmZnxQR+6LseexPWzmNHHTy629k+34PDpE49uZyXisR8K48/zsVY+iMbX8kma+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsN+1n0jLvL1sdQavKxqZPHuvtlPt3lFJwrdtQ13X9y1stPHIsypWNyzkbmeqw7sJ/hrC9KkqSp+GUZf4vnr7X2+ewjvbltPNOHk+5sEdt6HSfLac3M1vg2Zpbr5qZMPF15DZx2p+fXJgrNZrP59divat2RPffrdw+rlp59bjrzyGfw6xFNSa3xxMfCa32ZwY7RPhNbz16/CbmHnwp1WBP3M+k7fe/os7o49YxY5PIOJaCfaPE6xs+/yYbvryMt/kY2DbpSta3s3X28/Ww8Pb/rNfBI3+FB6+ZPbx78Ow+59jNOLjea3I4DketvJSdXmZrp0vlt8Ixau7fU3rdfD/msTLAHuc7Ip356Kc3x2Onm2NPFO9g8Otoy6nXLMVj+2yYYy4Y//ACiFB6G6B8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSJ9gLpSd3Y93+ojY4n+hxMXWdQcUy52qyjcycudjl3N6W7kvCMZWrdvRxpWNK1rS7Olaxp7J1Z/wCsjevdMXGen/tk4vP+fmvn7k5HHFukxTHGXjeK81Y8ZrkvflpmLTERbDSYi0+NJJ/w/uyJtn531E2afm0rTj9e3T42tNdjZ6T9E1iNWPDrPS8x1iPjTCqipOE6/wB/npKmw4f0v6htbjUrk8a3Gw6q5XehSUrtzVchtXOS8SvXKfwjaxcrF2lqsv5Z5cKf9izz/VvPX2eM74789s/K5Z+Vyuth7g4+s9IrXY0rU0eRrE/G2TYwbGjeK/Rj0slvyo5PxAOyPtPDcJ6h61fztbJfRzz9M480Wza8z+StL0zV6/22asJgltlF2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVD/YH6St6zgfcvqD2WLH89yrf4PV3F7tyz7u/Z0vGMe3yDk2Ri3a+2dnNzM3BtS8PZS5g1p/GnsqOf1kD18y8r6idi+2ris0/Z+G08vP79a261ttb98mloUyV/scurrau3kr18fl8hE/CY6yk/h/8AZNdXgOa9Q9mv8pt5a6OCZjxjFgrXNnms/TXJkyYqz/dYJ/IoeVkEiz87tq1kWrlm9bt3rN63O3dtXIRuW7tu5GsJ27kJ0rGtKxrWlaVpWlaVfvhzZdfLXPgtNL0mLVtWZi1bRPWLVmOkxMTHWJjxifGH5XpW9ZpeImJjpMT4xMT8YmPpiXz7PV10zP0+epjunqCOPfxddw7nW2s8chlUrS9Ph21lHfcMyLla/wA6tzVZWHcrKnsrWtfB6VPsp9dae5b2o9h+ttstcu1znE61t6aT+bHJ68TqcpSPyRTkNfZpET4xEREq9/q/2Xb089Teb7Ois1xae1kjDE/GdfJ0y60z/wDiwXxz1/hY4tomNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4P24OkZdBejXpXhubiyxOR7rjkewuXW7tKRyYci59OvJb2DmRjSkaXMHGv42tl4eNPDHp7ZV8ZV87T8Uj1/r7kPfR3731x+aM3F6G7PDcbNZ6450uHj7DXLjmfGce3mxZ96Ovj12Z8Kx0rE9Xtt7GnsD0Z4Thc9Jps5sP2vYif40ZtufnTW391ipamGen6v4z8ZzkR8M6sVPW/0lD1DelTuzqy3i0y9zuOF5224nGln3t7+ufFJR5RxO3YrGlZwrez8OxjXJW/xe6uXI+EqSrGW43sC9fL+2X3h9her+XNOHR0eUw6/Iz5vLX7r5CLaHIzfr+bb5Wps5c9K3/NjLix261msXriX1x7Hr6ielHOdq1p582bWvk146dZ+04OmfXiPpjzZcdaTMePltaOkxMxMAr0jFfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9e2VaRjSspSrSkY0pWta1rXwpSlKfxrV/NrVpWbWmIiI6zM/CI/LJWszPSH0AfRZ0r/y9+ljpHqi9hywdxx7g2szeV4840pchzXkvm5PzKFyXljKVLezzMq1brKnjSEIRr4eHhTzavfj6829y3u+7/wDWTDnjY0eT5bPi4+8T+bPF6Pl0OMmI6zEefQ1tfJeKz5ZyXvaOvm6zYK9E+yo9PPSrg+0r0+Xm19Wls8fTGzm659mJ+membJesdfHyxEfQyiaiMqgJYfv5dJy0Xa3UnfeswaW9fz/i2ZwLk2TYjXy05NwrJ/UNPl50pf8A1cvXZtbFry+zyYFfGlK08ZXAP6uJ6917h9He9fbly2xNtntvfxcxoUtPj9g5SnydnHiiP+L1t3VjNk6+PzORjpMxPSsVPv8AeyJ0O6+I7+1adMfIYLameY+HztafPjtb+6yYcvkr0/sdf6Ppn4WUkewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJv0bdK/8w3qh6V6ivY9cnU8p5vrrvKLVKXPbw7j8J8l5lSkrftjKusw8qFuVfClJVj41ane+j16/wBmb2j9++tODJGLd4jis1dC3h4cnuTXR4yelv40Rv7Ova8R1maVt0jwZP8ARjsn/wBRPVHhO0L182Ha2aTnjx/+Gw9c2x8PhM4MeSIn4eaYfQGhCFqELduEbdq3GMbduMYwhGEI+WMIRj4UpSlKeFKU9lKPNkyZMmbJbLltNrWmZmZnrMzPjMzM+MzM+MzPxWDa1isRWsRERHSIj6H6Pxf2Agv+4d0pToL1i94cEw8KeHx7L5Xe5rxGHu/d41OM87tR5Vr8TArSlPNYwp5V3XRr7a0ljyjWtZUrV6L/AOGT69X9x/se9P8A1D3s8Z+Tw8dXiuRnzdcn2/iLW4/Nkzf2uXargx7sx4R5dmtqxFbRCA33FdkV7A9ZOc4HDSaa9887OvHTpX5O1EZ6Vp+WuKb2wx/DjmJ8YlhU3zYSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGbv25+kpd9+sjpLhd/D/Oce1PKsfn/ADCE4UniV4xwH/8AJ83Dz6fx9zn3sexrK+Ht8cmPhWP86mgX4oPr5T24+xrv/vvVz/I5Ld4+/D8bMT0yfb+Y/wCYYsuH6PmamPNm346+Hl1bTMW/i2zj7ceyJ7/9ZuD4XLTz6+HPG3sdfGvyNT+XtW/9zltSmGenj1yx4x8YvIedUnuAAa3vuwdIy7s9EnaVnCxKZXIesIYncPHaeSs5wucHt3bnJPdRjSsqznosjbW7cY+2s6wolN/Bt9fq+gfv67Q2N/NOHjO7Zydtbvj0ia8rOOuj5pmYrFa8ti4697W8K463nwa1e7Psee9/RHlaYKefZ4uK8jh/gnVi05un09Z1bZ4iI+NphD29AVBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoX+wT0nDc9i9x9/bTE82Pwnj2s654revWaTtS3fL79dxyTLw7la/gv4eFg41iVf5befKn8tVZz+sfevd+D9MexvbfxOfy5ef3c/N8hWtulo1ONp9m0ceSv9li2draz5q/ky8dWfjEJEPYB2RTc7j5r1B2qda6OKmngmY8Pm7E/MzWrP0Wx4sVKz/c7EwqOVEEp4ACav7/vSlfN0f6iNbgU8tabTqDl2dCNfZKlb3LuCRn5a+2lafr1KzrSnh4Qj418Y0par/q3Hr3Xp6ge2PldievXX7k43FM+HT+T43lpjr//AMiYrE+P8pbpHS0zGd+IJ2TbrwXqLrU/t+P2LfpbGrE//wC11n/8MdfgmuWp0aIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdh9bdT9l9x7+7xbqvg/JOwOSWcC9tbmi4rrMjcbWmuxrkLeRm0wcSkrkrcK3IUnKMa0p408fBjL1U9ZvSn0N7cp3h6w9waPbXFZM1deu3yGemtrznvFrUxfNyTFIveKWmtZmJt5Z6dZdj7a7S7m7y354ntTRzchs1pN5xYKTkyeSsxE28tes9ImY6zEeHXxd7/8g3rW/us93/2e8i+C13/pHvYX/re7U/yzp/8AKO9/7P8A62/6K8n/ADTL/en/ACDetb+6z3f/AGe8i+Cf0j3sL/1vdqf5Z0/+UP8AZ/8AW3/RXk/5pl/vT/kG9a391nu/+z3kXwT+ke9hf+t7tT/LOn/yh/s/+tv+ivJ/zTL/AHp/yDetb+6z3f8A2e8i+Cf0j3sL/wBb3an+WdP/AJQ/2f8A1t/0V5P+aZf70/5BvWt/dZ7v/s95F8E/pHvYX/re7U/yzp/8of7P/rb/AKK8n/NMv96f8g3rW/us93/2e8i+Cf0j3sL/ANb3an+WdP8A5Q/2f/W3/RXk/wCaZf70/wCQb1rf3We7/wCz3kXwT+ke9hf+t7tT/LOn/wAof7P/AK2/6K8n/NMv963w/ZN9G/ZnS+57n7h7o675N15ybP1un634Vq+XajN0u2u6TIyY8l5jsYYWdGMq2L1+xqLVm9GnhWdm/Hx9laK7H49/vl9KPXjg+xPRD0I7n0O5uJ1s2zzfKbHHbOLa167VaW0eNwTlxWtWM2LFl5LJlxzPWKZ9e/TxiW+3sj9Gu5+y97mu8O9OOz8dtZKY9PWpsY7Ysk4pmM2xfy2iJmlrV161tH00vH0SoKVqUhYADwNprNfudbstNtcSxsNXtsHL1mywcqFLuNm6/Px5YuZiZFuXslbuW5ShONf40rWjk+J5bkuB5XW5zhs99bb0suPPgzY58uTFmw3jJiyUtHjW9L1rasx8JiJfLs62Dd1smnt0jJizVtS9LR1ralomtqzH0xaJmJj8koZe2vtv+rXhPaHYXEuJen/tzmXFOO8x5FqeMcs0vC9xstZyXjeFtbtjRbvDzsW3K3OOViUtXq0pKtY1lWNfbStHoPejH4pfsv799I+2e9O9PUntzguZ5TjNLZ5Djtrk9bBn0d7Lr47berkxZL1vWcGxOTHHWI81axaPzbRKCzu722ernCd08jxHEdvchu6mts5seDYx62S9M2GuS0YstbViYmL4/LbwnwmZifGHXv8AyDetb+6z3f8A2e8i+CyZ/SPewv8A1vdqf5Z0/wDlHW/9n/1t/wBFeT/mmX+9P+Qb1rf3We7/AOz3kXwT+ke9hf8Are7U/wAs6f8Ayh/s/wDrb/oryf8ANMv96f8AIN61v7rPd/8AZ7yL4J/SPewv/W92p/lnT/5Q/wBn/wBbf9FeT/mmX+9P+Qb1rf3We7/7PeRfBP6R72F/63u1P8s6f/KH+z/62/6K8n/NMv8Aen/IN61v7rPd/wDZ7yL4J/SPewv/AFvdqf5Z0/8AlD/Z/wDW3/RXk/5pl/vT/kG9a391nu/+z3kXwT+ke9hf+t7tT/LOn/yh/s/+tv8Aoryf80y/3rwdn6GfWJpNdn7jc+mzuLU6jVYeTsNntdnwjc4Gu12Bh2ZX8vOzs7Ktwt2bNq3GU7l25KkYxpWsq0pRyHE/iD+x/nuU1+E4L1V7a3d3cy0w4NfByutmz582S0Ux4sOLHe2TJkyXmK0pStrXtMVrEzMQ/La9C/WPS1sm5u9s8jhw4qze9762SlKUrHW1r2tEVrWsRMzaZiIiOsz0YptxWJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHefWfpm9QXc+lyuRdTdO9g9jaPAz56zO2nDeObDfYmFsrdqGRPBzLuvhc91d93chcpC54VrGVJUp4VpVr36r+7D20+hXPYe1/Wbvjh+1+R2MMbGLX5Pdw6mTLgm1qRlxVzWr8zH56Wp56dYi9bVmYtEw732x6Y+ofemnfke0eH2+SwY7zjtfXw3y1reIifLaaRPlt0mJ6T0npMT8Jdj/APIN61v7rPd/9nvIvgsXf0j3sL/1vdqf5Z0/+Udj/wBn/wBbf9FeT/mmX+9P+Qb1rf3We7/7PeRfBP6R72F/63u1P8s6f/KH+z/62/6K8n/NMv8Aen/IN61v7rPd/wDZ7yL4J/SPewv/AFvdqf5Z0/8AlD/Z/wDW3/RXk/5pl/vT/kG9a391nu/+z3kXwT+ke9hf+t7tT/LOn/yh/s/+tv8Aoryf80y/3p/yDetb+6z3f/Z7yL4J/SPewv8A1vdqf5Z0/wDlD/Z/9bf9FeT/AJpl/vT/AJBvWt/dZ7v/ALPeRfBP6R72F/63u1P8s6f/ACh/s/8Arb/oryf80y/3p/yDetb+6z3f/Z7yL4J/SPewv/W92p/lnT/5Q/2f/W3/AEV5P+aZf71XV9sX0+bX03+jrrfh/KNLlcf55ya7t+xOfavOx5Yuww+Q8ry6TwcDZYk/CdrKw9RY1mDk27n4o3bE6VpH+ZGlT+LN7leH90nvg7q747R36cl27xNdbheH2MV4yYculx+PplzYMkfm5MGzyOXf28F6fm2xZ6TE2/j2l99sPp7t+m3o5xnDcpgnX39mcm5t0tHlvXNnt+bS9Z8a3x69cGK8T4xak9enwjYCjYbCAAMMPuC9E5fqN9IncvW2m11dny2vHo8s4Pi2bNL2fkcv4Xlw5NqtZq6VpXwv7GmPc1ca+zxpkyjWsaVrWm934avuI0/a971uxfVTndqNThY3J47lclreXDTjeUx30djPn8Y64dKc9N+0ePS2pW0RaaxWcKe4XsPN6kekHNdtaWP5u38n5+tWI62nY1rRmx0p/d5vJOCP4Msx1jr1Rx/8g3rW/us93/2e8i+CvH/0j3sL/wBb3an+WdP/AJRDT/s/+tv+ivJ/zTL/AHp/yDetb+6z3f8A2e8i+Cf0j3sL/wBb3an+WdP/AJQ/2f8A1t/0V5P+aZf70/5BvWt/dZ7v/s95F8E/pHvYX/re7U/yzp/8of7P/rb/AKK8n/NMv96f8g3rW/us93/2e8i+Cf0j3sL/ANb3an+WdP8A5Q/2f/W3/RXk/wCaZf70/wCQb1rf3We7/wCz3kXwT+ke9hf+t7tT/LOn/wAof7P/AK2/6K8n/NMv96f8g3rW/us93/2e8i+Cf0j3sL/1vdqf5Z0/+UP9n/1t/wBFeT/mmX+9P+Qb1rf3We7/AOz3kXwT+ke9hf8Are7U/wAs6f8Ayh/s/wDrb/oryf8ANMv964F2R6W/UX09x6nLO0+lexuveNSzsbWQ3fLuMbLRa65scukpY+BZyc+EKTvTpCco24eMqxjKXh4RrWmSPS33ee1/1v7mnsz0f794TublYxXzzqcbv4NvPXBjmsXzWphtaa46zatZvbpXzWrXr5rVieA7k9LPUfs7jvvfuvhNzjtXzRSMuxgvipN7dfLSLXiIm0xEzER1npEz8Il0E2NdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7zjnJOQ8P3uq5RxPebbjXI9Fm2djpd9os/K1W31Wfjy81nN1+ywpwu2bka/wnCVKuA7p7V7Z747d3O0e8uP1+V4rkcVsG1p7eHHsa2xhvHS2PNhy1tjyUt9NbVmPhPxh9/G8nyPDb+LlOJz5NXZwWi+PLivbHkx3j4Wpesxasx+WJhTP6DPvTajk0NP1V6w83B4/yL/Q4Ok7xtWcfA43urkqxt2bPYmuxYQs6zIrX+O1xoxw50r437WJS3K9dqffiLfgOc32nbe9YvZDgy8nxf52ba7Uta+be1Yjra1uFzZLWy7+Hp8OPz2tvUmOmvm3ZyVwYZOPQT3rafJxh7T9Yr019nwpj5OIimHL9ERuUrEVwX//AJ9IjDP/ABlMPlm96GcTLxM/Exc7BysfOwc7Hs5eFm4l6GTiZWJkwpex8vEyLNawuW7kK0nCcK1pKlaVpWtKqzO5p7nHbmXjuRxX19jXvbHlxZK2pkx5KWmt8eSloi1L0tE1tW0RatomJiJhIjhzYs+Kuxr2i9LxFq2rMWrato6xasx1iYmJ6xMeEx4w8l8b9wAAAAAAAAAAAAAAGOvqV9VHSvpO4Lc533Hyqzp7F+mTa45xvAjDO5dzLZY9qk56rjGijKM786VlbjdyLkreNY88JZN+zCVJNofat7P/AF495fqFX089DuHtvZMfy7bu9lmcPG8ZgvaYjY39ua2rir0receGkZNrY+Xeurr571mrG3qX6q9k+k3BTz3ee3GGtvNGHDX8/Y2L1jr5MGLrE2nxiLXma4sfmicl6VnqkF9cX3LO6vWRssvjtL2R1x0lj5cZ6jrDS585/q35e558fa893FmNqWzya1pG5DHrGOJYrGFbVmt6Msi5dm/D9/Cn9B/Y1xWHue2OndPf+XHMbPPbWGI+zeeOl9fiNa1sldDB0maWzxa27sxa8Zs8YbU1sUPvrn7me9vWXYvxsWnjeDrbrj0sd+vzOk9YvtZIis579ekxTpGHHMR5KeeJyW1vJS2tYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvLoH1G9w+mPneL2F01zHP4tu4UtY+0w4SrkaDk2shc97LS8o0d2vuM3FlX20hdj5rcvC5Znbuxjcjr77kPa76Ie7P08y+mfrnweHl+PtNr6+WY8m5oZ5r5Y2tDbrHzdXYiPCbY58uWnXFnplw2vjt3r0+9R+8vS/nq9xdmbl9TPHSL1/jYs9Inr8vPin83LSfyWjrWfzqTW8RaK6vQp90jp/1d4ut4VyiuB1Z3z7mlq9wbYZ1a6PmN61D/S5/Xe5y/L+Y89P9JLVX5UzLVPNSH5q1ank1pVfiHfhD+tvso29rv3tKM3eHp15vNXlsOL/nXG1tP5uHmtXH1+T5f4kchhidHNPkm86ebNTUiXv0J903Z/rBix8Jynk4rn+nSdW9v5LYmPjbUyW6efr8ZwWn51PHy/NpScraSiEbVAAAAAAAAAAAAAAAANa/rj+5l0t6OMDN4xauWeyu8L+JSer620ufbja0UsmzW7ibPsLb2vPTW4/hWNyGJSM8y/GVutuzGzOuTblU/D7/AAofXj3x8jg7tz0v2r6f48vTY53axW823FLeXJg4bWt5Z3s3WLUtsTNNHXtXJGTPfPjjVyaz+ufub7K9Gte/F1mOS521fzNLHaOmLzR1rfbyR1jDTp0mMfSc2SJrNaRS05ayFepH1Sd0eq7nd3nvcfK7+6y7Xv7Gg4/hxlg8T4hrLs6T/S+MaKMq28e3WkYUu3pVnfv1jGeReu3KeZdj9rHtC9CPZx6d09OvQ7hqaGG/ktubmWYzcjyWesTH2jf25iL5r9bWnHirFNbXi9qa2DDjnyIfvUr1T719WOenn+89uc946xixV/Mwa9Jn+JgxRPSkeEea09cmSYicl728WO7ZtjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbP/Qz90Pub0gZWBw7dzy+0ei636RyeAbfPn+p8Us3rlJZGb13ucrzVwpUr43Ja275sK7Ws60t2L12WTSJP8Qj8I70K97Ops98dv1xdoeoUV605jWwx8jkbViYpi5rVpFY2omOlK7uPy72KsY4nJsYMVdWdovQr3Sd6ej+THw27NuV4Lr46mS8+fBEz4208k9fl/lnDbrhtM2mK472nJFd3p79SnTnqi4Hi9hdM8uxOS6iXubG41s6RxOScU2l2172Wm5Vo51rdw8mPhLy+bxtXY095YuXrVY3JUpPcv7VvXD2jeomX0z9c+FycVux57a2eOuTR5DXrbyxtcftxEY9nBbw69PLlw2n5Wziw5otjrL96d+pfZ3qnwFe4+zdyuzh8IyU/i5sF5jr8rPimfNjvHj069a3iPNjtekxae+Gujv4AAAAAAAAAAAADTr68/u39YemiO3626blp+2O87NL+Fme6ya5fAeusyMK25S5VstfcpXOz7c6+FdPhXoyhWM6ZeRizjG1dnF/Dp/Bb9WvddfS9U/XGNnsz0+v5MuKbY/l8xzWOZ6xHH4M1ZjU1MlfGOS2sdq3rbHbT1tul75cOmvr57u+2PTKM3bXZvy+X52OtbdLebU07f8A8+9Jj5uWs+H2fHaJiYtGbJimIreTXuDufs7vvnW07H7b5htua8u21aQu7HaXo+6wsO3Os8bV6fX2KQsYWHZ80vc4mLbhahWsq0j5pSrW5h6JehHpL7cvT3T9LfRbg9bgeF0o61w4K/nZcsxEX2NnNabZtrZy+WPmbGe+TLfpWJt5a1iIlO8e9e6O/wDncvcvd+5k3dzN8b3nwrWOvTHjpHSmPHXrPlx0rWsdZmI6zMz1cy66qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/fHyL+JfsZWLfvY2VjXoZGNk4852b+Nfszpcs37F63WkoThKlJRlGtK0rSlaV8Xz7Otrbutk09zHXLhy1tS9L1i1L0tE1tS9bRNbVtWZi1ZiYmJmJjo/XHky4stcuK01tWYmtomYmJiesTEx4xMT4xMeMSoM9Bn3o95wuOn6q9XmXs+VcVt+6wNJ3RYsXtly3Q2qVjas2Oe4Nilbu2xYR/jsbEZZ0PCtb0M2s/PbrT/AIi/4EHb/fV971i9k2HBw/MW82ba7XteuDjty3ja1+Hy3mMfH7Fp+GlltXj79YjDk0a0+XlkK9A/etvcNGHtP1hvfb1I6UxclETfYxR8IjbrHW2fHEf8dWJzx0/Prmm3mrTlxXlfGec8e1HLuGcg0/KeLb/Ct7HS8h4/sMTa6ba4F78NvK1+xwZztXIVrSsa1hKvhWlaV8K0rRU07v7O7r9Pu5t3srvrjdnh+X43LbDtaW5gya+zr5a/HHmw5a1yY7dJielqx1rMWjrExMye8Xy3Gc7x2Hl+G2Me3qbFYvizYr1yY8lZ+FqXrM1tH0eE/HrHxhyB1hyYAAAAAAAAAAAD1O832k4xptpyLkm31mh0GkwcnZ7nd7nPxtZqdVrsO1W/lZ+x2GZKFqzZtwjWU7lydI0pTxrVznAdvc93Zzmp2x2tpZ+S5Hfy0wa2rq4r59jYz5bRTHhw4cVbZMuS95itKUra1pmIiJl8O9v6PGaWXkeSzU19fBW18mXJatMeOlY62ve9pita1jxmZmIiPims9ev3p8vZV3PU/o6zL2Br60v63f8Ae1/HuWNjmxnGtrKxutNZmQjPFhT+bTc5UPfVrWVcSzZrG1lztT/hz/gN6XFxoesvviwV2NmJpn1O0qXrfBimJi2O/O58VrV2LT8Z4vBb5ERFY3M+eL5tKkaXr77182zGftL0bvOPH40y8pMTF7fGLV0qWiJpH0fabx558ZxUp0pmmdHZbLYbnYZu22+fm7TabLKyM/ZbLY5ORnbDPzsu7W/lZmbmZNZ3Lt25Osp3LlyVZSrWta1rWqz/AMXxfGcHxuvw3C62LT09THTDgwYMdMWHDix1imPFixY4rTHjpWIrSlKxWtYiKxER0Rx7Ozs7mxfb3MlsubLabXve02ve1p62ta1pmbWtMzMzMzMz4y8FyD5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3B0l3x2z6ded4HY3T3Mtpw3lODSlm7ewpwu6/ca6V2N2/puQanJpPGzsO7WEazx8m3OHmpGcfLchCccJev3t19Gvc/wCnmz6Yet/Ba/OcTsT5q1yxNc2tmis1rs6ezSa59TZpFrRXNgvS/ltbHabY73pbuPZHfvdnpxz2PuTs7dvpbVPCZr40yU6xM482O3WmXHaYjrS9ZjrEWjpaImK2vQj917qb1V2tV192N+l9T98XLdnGhocrN93w/nuXSNIVv8D2+fLxhk3Z1rKmly51yI0rSNi7mUjcuQpdfiIfg3+s3s7y7nqV6Y/aO8/Tqs2yTuY8Xm5LiMfWZinL62GOlsGOv5v3pr1jWtMTbYw6M3x47y6eg3uy7S9Vq4e3u4/JxHPT0rGK1umvtW+HXVyXnrF7T4/Zskzkjr0x2zRFrRtrQvtugAAAAAAAAAHCexOx+CdS8P3XPuyuV6bhfDuP408rbb/e5kMPCxo09luxCtfGd6/dl4W8fGsQnduzrG3ahOcoxrkD0y9LvUT1n730PTf0r4fa57nOTvGPX09THOTLef7K0/CuLFjjrfNny2phw44tkzZKY62tHA9xdycD2lw+fuDubbxaWlr182TLltFa1j6Ij6bWtPhSlYm97TFaVm0xCV716feO5x3RTc9Weme9ues+qr/5nXbnnUpTwOwuf4co1t3reDK1+PR6y741/wBFZufnb8KR99dsQuXsStwL8Of8Df0/9B50fV/3X01e6+8aeTPq8TERm4bh8sTFq2yxb8zlt7H0j8/JT7Dr5Jt8nDs3x4N2IqvXz3lc73r87tT0ynJxnEz1pk2v4m3t1+ExXp46uG35Kz87JXp57462vhaM/bKtZSrWUpVrWUq1rWta1r41rWtf41qsHVrWlYrWIiIjpER8Ij8kNE7WmZ6y/l/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzl9G3r+7z9GPIPHhmzrynrbY5sMrlHU/Is3JrxjaznWMcnY6W7GlyWp2UrcaR/PYtutJ+EKZNnJhbhbpHz75vw2/b377O25jvvUjh+6tXFOPQ7i0sVPt+vEdZph2qzNK8jo1vabfZNi8TTzZJ1c+rkyXyTnX0Z9wPffotyHXhcv2vjMlvNn0M1rfIv16ea+OfGcGaYjp82kT5ulfm0yVrFYsE9JXrZ6M9ZHEpb3q/fVxeT6vFtXuYdb76VnE5pxK7cnS1W5lYEJVhl4UrlaUsbHDlcsT80YTlav0nYhSL95/sH9wfsb70jt71b46M3E7eS1eN5zTi+Ti+RrETby48s1i2vtVpEzl0tmuPYp5bXpXLrzj2MkxHpF63di+s3E/b+1tjybWKsTsaeXpXZ15nw62r1mL4pn+LmxzbHPWIma5PNSuXjSdmIAAAAAAAAABi76pfWB0d6QuFz5b23yeGPsc2xkV4rwXTyx8/m/M8uxD24+h00pwrS1GXhG/nZM7WLZrWMbt6M524z279onsj9wPvX78jsv0V4mcutgtT7w5bZ8+HiuMx3nwvubUUvHzJjrbFqYK5tzPFb2w4L0x5LUxV6p+sXY/o/wAJ9793bUVyXifkauPpfZ2bR9GLF1j82J8LZbzTFSZiL3ibViY/vWt9xTu/1nbm/rt5mS4R1Fg5tMjj3VOgzb9dT5se5WWFteXZ34JbbYRp4VjdvQjZs1pWuNj2ayuSndw9hH4YXoB7E+Dx8pwGCO4O9tjF5N3uHcxU+0dL1iMuvxuL86vHadp6xNMdr7GeJiNrZz1rjrjh59bvcb3x60bttbfvOjw9LdcOhitPy/CfzcmxbwnYzR9FrRGOk/4LHSZtNtfqSdr2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf3Cc7c4XLc5W525RnCcJVjOE4180ZwlH20rSvtpWntpV+eTHjzY7YstYtW0TExMdYmJ8JiYnwmJjwmJ+L+62mkxas9JjxiY+hvt9Bv3muXdZfo3VXqtydrz3r61+X12l7WjG9tOfcQx6eWxat8qj+K7vMC3GnmrkV8dhbp561lmUrbtW65f4i34FPZnqv8Ab/WH2c4tftzuW/nzbXb0zXBw/JX8b2tx8+FOK27z4Rh8OMyz5IiujMZc2Xfv0E96HL9s/I7V9WLX3+PjpTHv+N9vXjwiIz/G21ir8fP47FfHxzfm0rUXwrm3EOx+LaXm/AuSafl3EORYVvYaTkOgzrOx1Wxxrlaw89jJxpSp5oypK3dty8J250lCcYzjKNKi/fnYPevpd3fv9geovFbPC81xeWcO1pbmK+DYwZI6T0vjvET0tWYvjvHWmTHauTHa1LVtMpPB83w/cnFYOc4DZx7mps1i+LNitF6XrP0xaPpiesWifGtomtoiYmHKnTXMAAAAAAAMFPWb9wTo30Ycfu05bso8t7Q2ODPJ4r1Lx/Nxpck2XnpWGLseQX6+eGo1lZ/xzcqFZ3KUuflLGVctzt0kP9in4a/uD99vctZ7L1fubtLWyxTkO4t3FeNHB08cmHTp1pbkt6K/DV17RTHa2P7ZsamPLTJOBfWn3B9i+i3HTXl8sbfKZKebBoYbR86/X+LfLPjGvhmf+MvHW0Rb5VMtqzWI+/Vl60+8vWNy+nIe1OQUtce1uTeucR670Ur+HwriNm7Gtrza/WznOt/MnCvhf2GVK5fueNY0nCzSFqF3P2Z+w32/exzsn/Nr0g435nJ7eOteS5rbimTlOStWfN0zZ4rWMOtW3jh0teuPWx9IvNL55yZskO/q16199esnL/ePdWx5dbFMzr6eLrXW14nw/MpMzNskx4WzZJtkt8OsUitK4kt0GIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMuA9g836t5bpud9dco3PDuYcfyaZmo5BoM27g7DDu+FYzjG5br4Tt3I1rbvWblJW7sKyhcjKEqxr0f1H9NOwPV/sze9O/U/iNXneD5LH8vZ09zFXLhy1+MT5beNMlLRF8WWk1y4skVyY70vWto5rt/uDm+1eWw8/wBu7WXS3NefNjy4rTW9Z+nxj41mPC1Z61tWZraJiZhU16C/vKcK7fpp+rfVFkaXrfs65SxgafsWNber675zk+PurUdxW7KlvRbK5Ssa1pOX5G/Ok627mLKVnFrUE/EX/Ax799EZ3fV32j49runtKs3zbPCz5tjmuJp081p1vLHn5bRx+MRNK/eGDH5Iy49ytM25EqXoJ7zeE7x+T2r6o2xcbyk9KY9zwpp7U/CIydZ6aua3h8Z+Re3Xy2xTNMU72IyjONJRrSUZUpKMo1pWMo1p40rStP5FeO1bUtNbRMTE9JifjE/klvjExMdYf6/h/QAAAAAADSd69PvB9edA/rXV/p9lqO0u5LNcnW7TkPvfzfXnXWbHzWr0cvJxpUpuNnYl4U/I4tymPanWv5nI95aniTnw/Dp/BF9Tfch9g9XPcpGz2h2Nk8mfX0vL8vmuaxT0tWcWO8T926OWJmftexSdnNSI+y63y81N3HpD69+8Ttz0/nP2v6ffL5Xma9aXzdfNqadvGJ81o/8AiM1Z/wCKpPy6T/hMnmpOG0pnZ/anYfc/NNx2H2jy3cc05hvb9buw3e6ya371YUlKVnCw7MKRtY2LZ8axsYmNbhZtR/DbhGPsXGPST0f9MvQjsPR9MvSLhdbgeD46vlw6urj8levSItly2nrkz7GXpFs2xnvkz5rfn5clreKJ/ujuvuLvXm83cXdW5k3t3PPW+XJbrPT6K1jwrSlevSmOkVpSPCtYh18yU68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbSvtO94eofhnqp6w6i6l5Nenwrs/l9i32HwbbwubPiuVxnW4ctty7kmNrpzjTE2eLqsO/cxs7GnbuTnbtWb1btitbMohfxlvb/wC2Xvr2fd2+tfrNxNK892lxt54Xltaa4OQx7+fLXX43Rvmitp2dDY5DZxUzameuXHSmXNnwRhzxGeu1PtL759ReF9VuL7Q7S2pnR5TYiNvVydb4LYKVnJsZq0mY+Xnpgx2mmWk1tM1pS/np+ZNrahOm2AAAAAAYW/cI7H7j6h9Ivb3ZPRWVr8DnfEtXrs+uxzdbDa5Oq47e3GPgcl3OmxMnzY1czBxL1zMhPLt3bUYWrkq25ypGjfL8NH0t9D/Wz3q9k+lnuFw5tnt7mdjNh+Rizzr02N2utmzaOrtZKdM/2ba2MdNa9de+LNe+XHWMuOs3swl7he5O8uz/AEh5juTsS9Me/qUpfz2pGS2PDOSlM2THW35nzMWO05InJFqRWtpmtp6QhK5LyfkfNN/tuV8t3u25NybfZt3Ybrf73OyNpt9rnX6+N3Kzs/MlO5cnXwpTxlKvh4UpT2UpR6H3afaXa/Yfbel2d2Vx2txPE8dirg1dPUw49fW18VP4uPFhxVrSlY8Z6ViOszMz1mZlA9ynKcnzfIZuW5jPk2tnYtN8mXLe18l7T8bWvaZtM/8ADPw8Pg9C7E44AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABT79ifu/1C9hR7P615dye9yro/qzi2g/q7/WC3ez9/xfk/INpOGk49od9cl7yuqrgYWxlcwb9bsceUMamN7i3K5C7Um/rDfoB7ZfTO/aXqn2VxFeH9QO79/c+2/Y5ri09/Q09es7W5t6la+SOQjb2tKtNvFGK2zXJtTt/aclcV8MonsQ759Re4q8p21y+1O3wfFYMXyfndbZcGfLeYxYsWWZ6zg+VjzTOK3mjHNcXyvl1m0XooVhkjYAAAAADQf98vvD1C9U8L6t4l11ye9xPqntWzy7T852PHbGTg8mz9rp44ty1xrYcljcrWxrs7DypypjYsbVy/7jJhfuXLFfdLHP9Xx9v/tn9Yu/O7+8/U/ia8z3j2dbjdricG7emXQw6+zOxW29h0Zp0zbups69Kzn2LZcWv9o1b6+LFsR85oF76e+fUPtThOK4ntzanU4nlo2Me1fDFq575Mfy5jDfNE/m4cuO8z5McVtf5eSL2tjnyJSlxlE6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUKfYJ6U/WOyO4u/tnhUnh8J45gdc8Wyb8PNGu/wCXZFNvv8nCl5a+W9iYOFYsXJealaW86saUlSUvLWf/AKx969fcfpd2P7b+J2PLn57dzc3v0pPSfsfG0nW08eXx8cext7WbLSOkx8zj4tM1mlfNIf7AOyftncnM+oG1TrTRw008Ez8Pm7E/MzWr+S2PFipWZ6x+bn6ePWelSKoalQAAAAAAcY5txLUc/wCG8u4JyKzXK0HNuMb7iW9xqVpSWRp+Saq7p9nZjWVK0pWVm9OPjWlae12/sLvPnPTfvnhfUPtjJGLkuB39PkdS8/Cmzo7GPZwWnpMT+blxUnwmPh8XFc5xGl3Bwu3wPIV82vvYcuvlj8uPNjtjvH/traYfO97R6/3fU/ZXPesOSQrHfdfcv5Fw3a191OzC9mce2t3VXcqxCfjX3V6tv3tmVK1pKEoyjWtK0rX03vSL1K4D1l9LO3PVrtW3m47uXjdLk9f86LTXFu6+PYrjvMRH8pi+Z8vJWYia5K2ratbRMRXV7p7e3u0u5OQ7X5OOmxx+xm18nh0ibYclqTaI/tbeXzVnrMTWYmJmJ6uBsiuvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALRfs0dIz6k9F3GeS7LElj8h7r3237PzY3rdYZFnR5FIcf4fj0l/4rN3X4VvZWa0/wD9ySiD+Oh6/Y/Wj338v2txeWMvG9hamvwOKa2iaW28c33OSv0+jJj3NrJo5I//AEKvw6Jq/Zh2RPaPorq8ns1muxzeXJu26x0mMVumLXj+GtsOKuav/wCWltgQ1ttAAAAAAGtj7snSMO6/RJ2hTFxY5PIeq4YvcPHZVhKU7UuFW7s+T+TyUrKvn0V/axjGnsrOsK1/h40lT/Bn9fb+gnv67RnbzTi4zvCcnbW7HWIi0cpOONDr5piseXlsXH2tafGMcZIj+N0nWj3a9jx3v6IcrGGnm2OKivI4f4Ps0W+f8PHx1bZ4iP7by9fgiBX/ANBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXKfat6U+iHol6i1ubhVwuR9g4eV25yeM7dbN2edz2UM7RUyLEqUlC7Y0dvU4t2M/xUnal40j/ADI+fP8AjA+vdfcB7+u9uV0M8Z+L7ay4+3NCYt5qxi4iLYdvyXj822PLyt+R2Mdq/mzjzV6Tb+PadH2qdkT2P6IcPrZ6eTZ5GtuQz+HSZttdLYusfGLV1owY7RPj5qT8PhGxFGK2OAAAAAAAR3fe86Ql1t6uLHZmBiytcf724jruSUvUjSGPTmHFLNrinKMGxCn8v5e1q867X+WeXKq8J+AD6/V9VPZdk9KeQzRfkvTzks+j5fjf7t5G2TkNDLefyfOychq44/scenWEN3vj7Gntr1dr3Pr0mNfntembr9H2jXiuDPWP/crgy2n6bZpaa05zTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2J1L1zu+3+0OverOORrLd9h8z47w/XTrCtyGNf3+1ta389kU8aUpZsRuVv3pVrGkYQlKVaUpWtMZes/qjwPol6R9zer/dExGh2zxm7yWeOvSb009fJn+VTwnrkzTSMWOsRNrZL1rWJtMRPY+0e293vDunju1OOj+X5HZw69J6dYicuStPNP9zSJm1p8IisTMzEQ+h/xLi+n4RxTjPC+PY/5TQcQ49peMaPF/B/qun0Gtt6rWY1Pd0jH8FizCP4Y0p7PZSn8HmRd6d2833/AN48t333Ll+dyXN7u1v7eTx/lNncz32M9/GbT+dlyWt42mfHxmZ8ViniOL0+C4nV4Xjq+TX08WPBir/a48VK46R4REeFaxHhEf8AA5E6u5MAAAAAB4G01mv3Ot2Wm2uJY2Gr22Dl6zZYOVCl3Gzdfn48sXMxMi3L2St3LcpQnGv8aVrRyfE8tyXA8rrc5w2e+tt6WXHnwZsc+XJizYbxkxZKWjxrel61tWY+ExEvl2dbBu62TT26RkxZq2pelo61tS0TW1Zj6YtEzEx+SXz0PUT1NmdEd69sdQZtb1yvXvO+Q8cwcq/Csbuw0uJnznx/ayhL+H5vBljZUf8AunR6ZHth9Z9D3Ee3jsz1u0YrX/ObiNLdy46TE1w7WTDWNzXiY+P2bbrnwT/DjlXg9Ru0s3YfffL9nZus/d21mw1tPhN8Vbz8nJ/+cxTS8fwWdMM7ukgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHe/pi6ey+/vUH1B07i2bt6HO+daPU7etqU4XMbjNrJpseW7GNbdYyp+V1djMya+WtK+EPZWlfa1292nrfpe2720d7+t+5etL9u8TtbGt5oia5N+1Pk8dhmJiY/wCcb+XWweMTHXJ4xMeDv3pd2dm9QPUPh+zsVZmN/axY8nT41wRPn2L+HSfzMFcl/CYn834voTYmJi4GJi4GFj2cTCwseziYeLjQjax8bFxrdLOPjWLUaUpGEIUpGMaUpSlKUpR5oW7u7fJbmbkN/LbNnz3tkyZLzNr5Ml7Ta972nrNrWtM2tMz1mZmZWGsOLFgx1wYKxSlIitaxHSK1iOkRER4RERHSIj4Q8h8b9wHouS8m47wzQbflXLd7qeNca0GDf2e6328zsbWanV6/Gj57+Zn5+XKNu3bjT+MpVpTxrSn8a0dk7U7V7n767j0uz+zOP2OV5bkctMGrqauK+fY2M156Ux4cOOtr3vaforE+HWZ8ImXHcnyfHcLx+bleXz01tXXpN8uXLaKY8dK/G1rWmIrEflmU2nrB++TyC1y7E4t6PdfqocZ47ucTK3fZXNtFLP8A69RwMmlzI0ei4zmVtzxNTk0pW3fzL1beddhKv5f8jKFLty097I/6vr23m7Kzd3+97Z2J5bk9XJj1eD4rbjD90zmp0pt7e9jjJXY5HBMxfFrYoycfhvWPtM79b2w4o1vWL30chTmKcV6O48f2XWy1tk3NnF5/tUVnrOLFht5Zx694/Ntkt5c94n+T+RMRe20H0Nfcx6Z9ZGuxONZFzG627wxcastp1pudhalb30se1W7k7Tr3a36W6bLH8kZXbmJ5I5eNSM/eWp2YRybsSP4gv4Ufrt7GuUzd1a9MndXp/lv/AM353VwWidSL2itNfmdevn+w5vNNcdNjzW0tqbY/lZqZ721MW0PoV7m+y/WbWpxl5jjOdrH5+lkvHTL0jrN9TJPT51OkTa2PpGbHEW81JpWMttk6KtsyAA02/e76Qr2T6R7PZGuxffb/AKK5fruTynCkp35cP5Rct8V5Ti2bcafwpfu6zOuy/wDDaxJ1/h4pzvwA/X+PSr3p39LOUzfL431D43NoRE9IpHJaEX5Dj8lrT9M4se/qY6/2WXcpHx6NMffF2N/nL6RR3JrU82xwOxTP1+M/Z88xgz1iP4LWw5bT9FcUyjsXhENwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdD9jnpGXYnqx2Paefi0vaLonhufubV2cPe2Y8y5xYv8AE+N49y3Knk8fyUtzl2pS9sLuNCUaealJQgh/rA/r9X0y9mur6QcdmnHyHqHyeHVtWJ8tp4zir4uR3r1mJ83/AMVXjNfJWPC+LZyVvPlmaX3W9jHY/wDnH6tZe6dinm1+B1r5ImY6x9p2YtgwxMfD/BzsZKzPjFsdZiOsdYsEUi0xIADov1BepDp70wcDyuxO5eX4XGdNbrcsarAp4ZfIOUbWEPeQ0vFtHbr7/NypU8KyjClIW4eN2/O1ZjO5HYb21+1v1v8Adr6i4fTH0M4TLy2/by32Mv8Ag9LQ15npO1yG3aPlauvXxiJvM5M1+mHXx5s9qYrdD9QvUjs30u4C/cfee5XVwR1jHX+Nmz36dYxYMUfnZLz9MR+bSPz8lqUibROLs/vz9wy73s8m1PXHHoen7F97qpdY5crUOY7TXTyaXIcny+bQhcrY20Y0/wBHjWbVcGMK1szt3rlKZdLRnE/1dH0Rp7d79qcz3Tu29Scvl2I57HFp4zXzRSYnQx8XNsfzuOmZ/Pz5cleQvkiM9MmDFM6Uxu7Pv47xnv2vJ6nG4o7er1p9it0jYvSZ/wAPbZiLeTYiPhStZwRWZpat7dMyiT01+qfpf1X8Es886c5TY3Fi1TGt8i41m+7weXcN2ORCsqazlOirOU8e5WULkbV+FZ49+kJTxr163TzKxvup9oPrx7NvUS/p1648PfRyXm9tLexebLxvJ4KTETscft+WtM1OlqTkxWjHs603pTawYMk+RIt6Z+qvZPqxwMc/2btxmrEVjNht0rsa15if5PPi6zNJ8Jitom2PJ5ZnFe9Y6simr7JAACTX78nSMeH+oLr7u/W4tbeu7j4bLTb2/CFJUnzLrf8AL6y5k5FyHsh77T5Wps2Yz9svy12sa1pGVIXMv6ut6+2729tncvoByubzbXY3JxtalJnpMcZzfzs8UpWZ/O+VyWvyOTLavhX7Xhi0Vm1ZvEl79eyI4f1B4/vjXp0xczrzjyz0+Ozp+WkzM/R5tfJgrWJ8Z+VaYmYiYjRIsQNDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvt+wp0pXk3ePZ3eeyw7d3V9XcOs8V0F+/br4w5f2BflC5mYN2vsrPG1OFnY9+lK+NI5kPH2SVy/6xl6917T9v3aXt84vPNNvu/k7chuUpb48bw1ImuLNX+1z8htambFM+E30L9PGrfv2DdkzynfHKd97NInFxWvGDFMx8NjbmetqT+WmDFlpb8kZ6/lVcKcKWQBiv6qvWL0h6PuFf1s7Z5FSO02Fq/TiXA9J7jO5rzLKsey5Z02qnO3SFiFa0pkZ+XO1jWvGkZ3feTt27m4fs99jvr973e/f8zPRjjOuprWp948vtefFxfGY7/C21sRW82y3iJ+Tqa9M21m6WtTF8rHly48T+q3rL2P6O8H97d27PTLkifs+rj6W2dm0fRjxzMdKx/Z5bzXFTwibea1a2jz9aP3Bu7/AFocglb5RnV4f1Zrs+WXxXqXj+ddloddWNawxtlyLO8lq5t9lSHsrl5MI27daz/K4+NG5OErvnsP/DS9v/sR7crm7Q145zvDawxj5DuLcxVjbzRPScmDSxebJTjdGbeMa+C9suWIx/bNnbvix3rDn61e4bvn1q5Ca8rk+x8Vjv5sGhitPyqdP4t81ulZ2M0R/wAZeIrWZt8rHii1onA5ImwI9hrNlstLscDcabYZ2p22rzMbYavaazMv4Gx12fh3Y38TOwM7FlG5ZvWpxjO3dtypKMqUrGtK08XHctxXFc9xexwfO62Ld0tzFfDn18+OmbBnw5KzTJizYskWx5MeSkzW9L1tW9ZmtomJmH06u1s6Wzj3NLJbDmxWi9L0tNL0vWetbUtWYtW1ZiJi0TExMdYnqo69BP3pZ4/6N1N6xs65es0pj6zj/etnHncyLdfGlnHx+zsDGjWs4+HhGu6xoVlTwpLLtS8buXGrj+I1+A5TYnf9ZvY9rxS/W+fc7SteK0nwm178DmyWiKz16zHF57RWes10s1emHStJF6A+9acfyO0vWO8zX82mLlIjrMfREbtKx1mPo+00jr8JzUnrfNFJeq2ur3us1+60mywNxptvg4+y1W21ebj7DWbPXZtimRh5+Bn4kp2r1i7blG5au251jONaSjWtK0qqwcvw/L9vcts8Fz+rm0d7Sy5MGxr7GK+HPgzYrTTLhzYcla5MWXHes0yY71relomtoiYmElOrt6u/q493Sy1zYc1a3x5MdovS9LRE1vS9Zmtq2iYmtomYmJiYno9g4t9bgvaHX+l7X62591jyKPm0XYPDeScN2sqW43Z2cHkmou6m/k2ISrHwu2o3fe2pUlSsZxjKlaVpStMjeknqRz3o56p9uerPa89OR7a5PR5PXjzTWLZdHZx7NKXmIn+TyTj8mSJiYtS1q2raJmJ693T2/pd2dt8h2vyP+A5HXza2Tw6zFc2O2ObR/dV83mrPWJiYiYmJ8XzvOb8R3XAOZ8t4FyTH/Kci4Ryff8R3+L+L/Vt1xra3tNtcf8dKV/Bfs3I+2lK+z+D03+wO9eB9SuxOE9Ru1snzuM5/Q0+S08nh+fq72vj2te/hMx+diy0t4TMePhKutznD7vb3NbnAclXybGjny6+Wv9rkw5LY7x/7LVmHF3bXFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIvsmdJXOsfR9Y55s8atjfd48t2vNPG7Z9zlWuK6b/8AFeK4tzxp4yt3PyuZsbEq+ysMylaeyvto0/j4+vmP1a97uT064rNGTjvT7jtfi/zbebHbkNn/APWHIZK/RW9PtGtpZq/GMmjMT4x4TMeyPsi3a/o7Xn9qnlz87sZNnxjpaMGP+QwVn8sT5Mmas/TXNEtwaENuOA1V+u77pvUvpIxtnwbh1Nf2n3z7i5ascRw8zzcb4VlTj5bWV2JtcGdJ25Q/9SmpxpUyrtKUjcliQuQvphvw7vwgvWj3pbOp6g98fO7Q9OvPW1uSy4+m9ymOJ62x8Lr5azW9bfxJ5HPX7HimZtiru5Md9dqh68+6rtH0ix5eC4bycrz/AEmI16264da30W3L1nrWY+PyKT823TpacNbRkSK97eoHtr1J8+2HZHcXL9hyzkeb5rOLHIn7jT8f1VJyuY+i4zprPhYwcK1Wtaxs2IU886yu3a3L1y5cndX9u/tr9F/at6ca3pZ6H8Jh4bi8HS2SaR59nd2PLFb7e/tW65tvayREROXLafJSK4cNceDHjxUiF789Qe7vUruDJ3L3juX29m/hWJ8MeGnXrGLBjj8zFjr18K1iOszN7za9rWnphnV0l2n053V2h0BzrV9kdRcx23CuXamvu7ew1l2NcbPwpXY3sjUbvWZEZ42dhXpQhW9h5dq5anWMa1h5oxrTEPrj6C+kfuR9PNz0t9a+D1ue4XcjrOHPWYvhyxW1abOrnpNc+ptY4vaMWzr5MeakWtFb+W1ontnZne3dPp/z2LuXs/dyaW5i+F6T4Xr1iZx5aT1plxWmI82PJW1J6RMx1iJitn0F/dk6u9UlNP1v2lTU9U973qWcPF1t3Kna4X2Fm0jGErnDNnnSrXHzL0/5umy70r1a1pTGvZfhP3dLv8Rb8Gj1d9of271S9I52O8fTrHNsmTPXHFuU4bF1mfLyeDFEfO1sdfjyetjrgiIm21h0+uP5kufoL7te1vVT5PbXdXk4nn7RFa0m0xrbdvh11r2/iZLT8NbJabz1iMV8v53l28oT24ADVp94bpGHb/op5vusTFpf5H0zstZ2vp7kIz97TXaak9XzC1K7bpWtLUdPmZmXONaVjWePbrLw8tJxl9/BC9fb+iPv17f4LezfL4vvrBn7e2YmY8vztrybHGWitpiJyTyWtq61bRMXrj2csV6+aaX1V94vY8d4+iW9u4aebZ4W9N/H4ePkx9abEdY8fLGvkyZJj4TbHWZ6dImIpV9VCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW2/aJ6Tn036JOusnPxPynIe28rY9v7qM7VY3a43Ko2sbiNazn+KUZ6LF1t+NPClKSuz8KV8aylQT/Gq9e6eunv77o1uOz/ADuN7Lpg7b1Zi0TWL8fOS/I+EfmxavLbG9imeszauKnmmOkUrN/7QuyZ7M9EONybFPJscvN+QyeHSfLn8tdfxnxmJ1ceG30RE2npH0zs4RMtoGlT17fd9689PlN11d0Fc0vaPc9mmTrtrvY3aZ3X3XGdCVbN+GxyMWVKbXZ2K0rT8hi3KWbM6VplXqTtyxZz1fhy/gl+pvuWnQ9XPcdXZ7R7EvNM2DUmvyuZ5vFMRak4MeSszx+hljpP2zPSc+fHMTqYJx5abePST1994Xbvp58/tfsCcfK81HmpfL182pp2jwmL2rP8vnrP/FUnyUt1+beLVnFaUPs3tHsLuXme47D7R5buObcy31732z3u7yKXcm5SHss4uNZsxjZxse1T8FjFxrduzah4Qt24RpSi5B6T+kXpn6F9iaPpl6R8LrcBwXHV8uDU1aeWlev8bJktabZc+fJP52bYz3yZ81+t8uS95mUTnc3dXcXefN5u4u6dzJvbuxPW+XLPWZ/JWsR0rSlfhTHSK0pHhWsR4OAskOvAAANjvoc+5P3N6M9nj8ft3b3YfSmbm++3XWG6zpwjq65F3z5e24HtblLktXl18053LNIyxMitZVvWfe1hftxc/iB/hWehPvp4nL3Lele2O/sGLy6vPauKJnY8lfLj1+X16zSN/XiIrWmWbV3Nataxgz/Ji+vl2R9DPcv3r6M7NeOrM8jwl7dcmlktP5nWetsmrknrODJ8ZmvScWSZnz08/TJWv/01+qbpj1YcCsc96d5TZ3GNapj2uQcczqWsHlvDdnfhWdNVyjRVnOdi5WsZ0tXoSnj36QlPGvXrdPOpI+6n2heu3s39Rcnpx64cPbRy2m9tPdxdcvHcngpMR9o0Nvy1rmp0ms5MVox7OvN602sGDJPkTDemnqr2X6s8DXuHs3a+dSOkZsNuldjXvMf4PPi6zNJ8J8tom2PJ0m2O96+LIlrCyQjG+9B0hTqj1l7vmGuxfc8d7v45quxcStukaY1vkVqkuOcwxI0/ne9uZWJHZXvHxp45tPCv/hjex/Ai9f59Y/Yvodk8nm+Zyfp/u7HC5PNM+e2lbpvcbkn6Pl019m2ji6dJ6aE9a/2VoW/en2PHafrPn5nWp5dfnMOPcr0+EZo/kdiv5fNN8cZrfw5vCfojUmmhaiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYcA4TvOyud8M6741Z/Nci51ynQcQ0WP7aRu7bke1tajXxnWn8I+9ux80v4Up41r7KOk+pPf3Aelfp5zvqd3Xk+Txfb3H7nJbd/prr6Wvk2c0x+W3y8dvLHxm3SI8Zcx29wm93Lz2l25xdfNs7+fFr4o/LkzZK46df4PNaOs/RHi+iF11wbTdZ9f8H6447CVvQcD4lx3humjOMIS/TONaizp8Kd2NulKeeVuzGU60p7ZVrV5j/qd6gc76sepPcHqj3NaLcl3HyO7ye1MTMx8/e2cmzlis2mZ8sXyzFes+FYiFivtzg9Htjt/R7c4yOmvx+vh18fw6+TDjrjr16eHWYrEz/C9tyXk3HeGaDb8q5bvdTxrjWgwb+z3W+3mdjazU6vX40fPfzM/Py5Rt27cafxlKtKeNaU/jWjh+1O1e5++u49Ls/szj9jleW5HLTBq6mrivn2NjNeelMeHDjra972n6KxPh1mfCJl9fJ8nx3C8fm5Xl89NbV16TfLly2imPHSvxta1piKxH5ZlMf6+PvQbrmFN11N6Qc3YcZ4vWV/A3nd0rd/Xcp5BZ/8ASu4/X2DkRhe1WLKnm/8Aud+Mc6dK0rZt4VYe8u2yPw5PwIuC7J+wesvvZ18PLcv0pm1O1YtTNoaVv41b8zlpa2LkNis9P+Y4rW0Mc1mM+TejJ8vDGF6/e9Td5n5/aXo/e+rq9Zpl5PpNM+aPhMalbRFsGOfH+WtEZ7dY8lcPl8157sjIv5d+/lZV+9k5WTenkZOTkTnev5N+9Oty9fv3rlaynOcq1lKUq1rWta1rXxWXtbW1tLWx6enjriw4q1pSlKxWlKViK1pStYita1rERWsRERERER0R55MmXLltly2m1rTM2tMzMzMz1mZmfGZmfGZnxmX4PofkAA/uE525wuW5ytztyjOE4SrGcJxr5ozhKPtpWlfbStPbSr88mPHmx2xZaxatomJiY6xMT4TExPhMTHhMT8X91tNJi1Z6THjEx9DfZ6B/vLcr6u/ReqPVXl7fnfXViOPrdF2lCF3a884bZjWlmza5RCtfe7vX2/Z4361rn2Y0l4VzKe7swrmfiN/gXdn+rn2/1k9neHW7e7nv58+32/M11+I5O0/nWtoT0jHxW5fx6YeleOz3msTGjPzc+Tfn0B95/LdrRg7T9V75N/jYiKYt6InJta8fCIz/ANls4Y/t/HYpHX/DR5aVqN4XzbiXYvF9NzXgfJNLy/iXIcOGfpORce2GNs9VscadawrPGy8Wso1lGVJW7kK1pKE6ShOkZxrSlRTvvsPvX0w7t3uwvUTitrhOZ4zLOHa0tzDfBsYMkRE9L48kRaItWYvS0daZKWrkpNqWraZTOF5riO4uLw83wOzj3NTYr5sebFeL471/LFqzMeE9YmPjW0TWYiYmHnck47qOW8d33FOQYdrY6Lk2l2nHt1r71Iys5+o3WDc12ywrsK+PjG7ZuThKn/ZVx/a/cvNdmdzcd3h23ntq8jxO1r7mrmr4Ww7OrlpnwZaz9FseWlbx/DD6OS47T5jj9jieQpGTBtYr4ctJ+FseSs0vWf4LVtMT/wAL54ndXWez6Y7d7N6m3Ep3dh11znk3Dr2VK1Wz+oW9Dt7uBi7S3bl/C3lWYW8m1WnsrCca09lXpseg3qvxPrt6Kdp+s3CRFNbujidDkq44t5vk229bHmya9p/t9fJa+DJHxi+O0T4wrsd7dsbPZXeHJ9pbk9cnG7WfXm0x088YslqVvEfkyViL1/LW0S6wZadWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbfQ/VO17x7n6v6h03vo5vYnN+P8Xlk2IxnLXa/Z7CFvb7iVLlK08mFiUv5dz8NfCFuXsr/CuGPcV6xcT7fPQnu71s53yzr9scVub8Y7zMRnzYMNra2tHSYnzbWz8rXp4x+flr+dX4x27sHtTa76704vs/T6xfkdnDg80fGlL3iMmT/gx4/NknwnwrPhPwfQA5fzPrDoHre7yTmfIdB1z1pwLSYWFLYbTKph6rVarXY0MDV6vDhKsrt+9WMbePiYliNy/enWFq1C5clGNfNr7K7E9Wvcd6p4+1uxeN3O6O6+49rLl+Tr4/m7GxsZ72zbGxlmPLjxY4ta+bY2Mtsevgx+fLmyY8VbWiwTzHNdr+n/bVuS5nYxcbxnH4q18+S3lpjx0iK0pWPG1rTERTHjrFr3t0rStrTETLB69vvCc+72lu+rfTpe3XWXT138xrdpyuly5rOxOw8StK2MmM7+Lc82o1V+laxph2Zfmb9v8A/ubsIXbmHC4B+HL+CF6ce3mmh6ve5/Hq92d8U8mfX47pXPwvDZI6XxzFMlOnJchhmImdnLX7Lgy//CYcl8WPdvFX6/e8bn++7Z+1fTi2Xi+HnrS+x1mm5t18Yt41nrr4Lx4fLrPzb1/wt6xa2GNIafto4AAAAAA7V6b7s7R9P/O9X2T1DzHa8K5fqvNbt7DXStzx8/CuzjPI1O71mVG5jZ2FerCFbuJl2rlqVYxlWPmjGVMPeufoJ6Re5L072/Sv1r4PX57hNzpacOeJi+HLWLRTZ1c+OaZ9Taxxa0Y9jXyY81YtasX8l71t2zs3vbur0+57F3L2fuX0tzF4RekxMXrMxM48tLRNMuO3SPNjyVtWZiJ6dYiYra9Bn3YurvVHDTdc9o/pXVfe96FjCx9ZfypWOGdg59aeTz8K2WdKtbGXdl7aafLu1u1rKkce7leEvJS8/EV/Bq9XvaHk3vU/0k+0d4eneOb5b7FMcX5ThsPx6cpgxViMuvjiek8lrUrh6Vm+1h0+tfPLn6B+7PtX1TjD233T5OJ560RWKTbprbdvh11r2mZrktP/AMvktN+sxGO+Xx6dd/fT6Qjzv0w8a7iwMWNzddHczxp7DI8Je8jwjsK7Y4ztrcaR9sq02sdJcp4+yMKXa+zxqyZ/V6fX63p37teV9EOSzTXQ9QeMyRhp18J5Xhq5t7WtPXwiJ4+3K08PG97Yo8ekOue+3saOe9L9bvLXpE5uC2Kzefp+zbc0w5I/h/l41p/grFpSKLrCIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt9+yl0nLs/1j4HOs/Ejf490dxXc84yJ37dLuLd5Lt7EuKcTw5UrSvhehPLydnjy9nhLC8fHxpSlYS/x7PXyvpL7Hdn0847NOPk/UHkNbiqRS3lyV0da8cjyOWPGOuO1NfBo5o8etN/y9OkzNdw/ZL2RPc/rJj57PSLa/BYMmzPWOtZzZInBr1/8AxROS+ak+HScHXr1jpNQPqp9YvR/pA4Z/WvtrkdLe0z7OV/VLgmmpazuaczzMePjLH0uqrKNIWI18I38/KnaxrVaxjO7S5O3CdSL2fex71/8Ae335/mb6McX59TWtT7x5ba82Li+MxXnwvtbHltNsto6zi1NeubbzRFrY8M46ZclJRfVX1k7H9HuE+9u7tnplyRP2fVx9LbOzaPox4+sdKxPhbLeaYqdYi1/NatbR6+tP7hXd/rQ38rXJs2XDOqtfmVyOM9S8fz789Dhyty/1fZ8mzawsz3GxpSlP9ayLcbVqvm/K4+PSdyk7vPsO/DO9AfYj25XP2pgjnu8dnH5N/uPcw0jbyxMfn4NHF5sleN0pnr/IYb3y5Y8v2vZ2px4ppDp61e4fvn1p5CacledLisduuDQxXmcVenwvmt0rOxm6f2d6xWvj8rHji1onAtIwwEAAAAAAzW9Hfrw7x9GPKKZvAdt+vcA2edayeX9VchyMi5xPkMPLSzk5mBSPmnrNnW1GlLeyw40lWsLcci3k2Ie4loV74vw7Pb777e0vsHqNp/dvcmpitTje4dLHSvI6c9ZtTFl6+Wu/o+eZm+lszNYi+W2rl1NjJ9orm70b9eu+fRblPn8Bl+0cflvFtjQzWmcGb6JtX4zgzdOnlzY469YrGSuXHX5c2Hekb1vdG+sniX611pvK6/lmtxoXeW9Z8gvYuLzPi92tY27l+5hW51pmYEpypSxssSs7M6SjG57m/wCexCkD70/YD7g/Y13l9weq3H/aeG2rzXjud065MnF79fG0UrltWJ1tytYmc2jsRTPSa2vj+dr/AC9jJMX6ReuPYnrNxP23tnP8vbxRE7GllmtdnBPwmZrEzGTFMz+bmx9aT1iLeTJ5qVnR++l0lHgXqh4327rsWVrT95cLx8nPvUhSFq5zXgELHGt5G3SFKU8K6yejuS/lrOdyVf4+Kz9/V6fX23qN7R+V9FeTzRfe9PuUvTDXr1tXi+YnLvasz1nr4b1eVpH9jXHTHWPh0Ry++zsiOA9Udbu/Wp5cPOa0TefonZ1PLhy9Po/wM60z9M2m0y0kp9WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnn9vjvjqf0udvb/1Cdl4WfyTc9f8G3mJ1VwjUWJx2HI+wOWWv6vwyb+1vW542Bg4msubKOZk3a1uRrfte4s35eMEdP4l3t29Zvd36J8b7afSjPh4rQ7k5bUydwcrs2icGlw3HW+2TSuvW9c+3t7G/TStrYMcVxWjXy/aM+vTpdnz29d+dp+lfeGx6h9y0vs5uP1ctdHVxx+fm29iPldZyTE0xYseCc0ZL262jz18lMk9auv/AFY+tDvD1jcx/rL2nv8A3Og1t+9LiHXmknk4nCuIY12lYVlrdZcuTrey7kfZk7HKlPIu+yHnjZjbtW8k+zP2I+3/ANjnY3+avpBxvn5LbpWOS5rbimTlOSvXx/l89aVjFrUt44NLBGPWxeN/JfPfLmydf9WvWrvn1l5r7z7q2Omvimfs+ni81dbXifD8ykzPmyTH8fNebZLfDrFIrSuJjc1iMAAAAAAAB/cJztzhctzlbnblGcJwlWM4TjXzRnCUfbStK+2lae2lX55MePNjtiy1i1bRMTEx1iYnwmJifCYmPCYn4v7raaTFqz0mPGJj6G5706/dH2fIOoeY+kz1lZmx5x1V2Dwvd8D1XcN2xkb3nvXstzrZYOp2fJ7FayvbzD12RWzmW8mnm2NitusqVzfC1ZtwS+5/8IjiO2/Wzg/eZ7F8GDt/vDtrlNTl9jtqt6anEczGtnrm2MGhbpXHxOzu4Yya18E+XjNiMsVmNDrmz5d0vTn3TbXIdn7npL60XvvcVyOtl1cfIzE5drU+ZSaY7548bbWPDfy5Iv47NJr1j5/5lK6Y7sKW7ty3ScLtITnCly1WVYTpGVY0nCsqRr4V/jTxpT2fyJ2cOScuKuWazSbRE+W3TzV6x16W6TMdY+E9JmOv0y0svTy2mvWJ6T06x8J/hj+B+T9X8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANs/pC9e3FvQ16Y+da3rPS2eYepXufls83Nz9rg3rPDut+IcZwZafitd3Kdbd3a7Gt+/s87GwseVMeNvJhK/epKEse/DL72Pw5O8PxB/dp29yvqvv24P0p7E46MWLDr5a25Pm+S38sbPIfZYiL4+P0ow4tDVz7Was7Nsmrkpr4LVvXZ19uPSD194n0L9Lt/W7XwRudzc1sTa18lZjX09fBWceD5nwtnzee2fLTHSflxXJWcl4ms4762ez+1Ow+5+abjsPtHlu45pzDe363dhu91k1v3qwpKUrOFh2YUjaxsWz41jYxMa3Czaj+G3CMfYlQ9JPR/0y9COw9H0y9IuF1uB4Pjq+XDq6uPyV69Ii2XLaeuTPsZekWzbGe+TPmt+flyWt4taO6O6+4u9ebzdxd1bmTe3c89b5clus9PorWPCtKV69KY6RWlI8K1iHXzJTrwAAAAAAADmXAeweb9W8t03O+uuUbnh3MOP5NMzUcg0Gbdwdhh3fCsZxjct18J27ka1t3rNykrd2FZQuRlCVY16P6j+mnYHq/2ZvenfqfxGrzvB8lj+Xs6e5irlw5a/GJ8tvGmSloi+LLSa5cWSK5Md6XrW0c12/3BzfavLYef7d2sulua8+bHlxWmt6z9PjHxrMeFqz1raszW0TEzDaJ6lfuDce9bnpHxeC936nF4z6j+o+T6LlXCuWaTAv8A9Wu0NZk0/qzyzUzxcaM46fY3MXKhtb9qfhh35YP+gu485WsKcRPtW/DT7m9gnvTy+oXoDu5OW9Le9dDb4/lOO2s1Pt3AZ6f8/wCO2YyXtWeS0qZ9e3H4sleu9r15D/nGHZx1zb1NpfUv3C8d63+kVeB74w11e5OHz4s+tnxUn5O9S38hsY/LET9nzTS8Z7VnphvOD+TvjtNMM6iU1zUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt77k9Ev9R/tX+n/wBQsNLGHNczsTa875tmxteXItdd9w4uNo+GXMrJlSkruPbjqOP3ca1L8Nu7s8iVun+luSnCb6G+/r/1A/GC9SfbNffm3AYOF1+I4vFNutLc121fPt8pGOkTNaZr25HmcefJH5+bFxWrXLPTDipj3B7y9EPuP2qdv+olcERvW277Wzbp4xp8jFMWtNrfGaRGvqWpWfCltrJNf49ptqETZNPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzT7Tvps0nqU9VuFqOaamG5694JwnlnMeYa/Ihcpj7GF/CpxLQ6/wB/SnhG7+f2djMhGvtlDGuVp7I1RPfjLe6juD2r+zjY5nsTdnR7l7i5XjuM43NSY+ZhmmWeR283lmes4/sejl1r2+Fb7WKJ8bQ2e9pfppoepXqxTU5rDGbjtDW2NnYpP8W/Wv2fFTr9Fvm5q5Ij6YxW/JLBHt7rjb9P9qdjdV76kq7frvmvJeH512UK245Vzj+3va2GfZp/LbyI2437UqVrSUJxlGtaVpVIj6JeqPC+tvo92v6w9u9PsXc/FaPJ4qxPWccbmtjzzhtP0ZMNr2xZKz0tXJS1bRExMMDd4dt7fZ/dXJdqb3X53HbObXtPTp5pxZLUi8f3N4iLVn4TWYmPCXXLKDrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2f0r1ns+5+3esuptPKdrYdi854zw6zlRtVvfp9vfbe1gZW0uW4/xt4tmdzJu1r7KQhKtfZRiX159V+J9CfRTuz1m5uIvrdr8Tv8lbHNvL862prZM2PXrP8Ab7GStMGOPjN8lYjxl2nsntjZ717w4ztLTnpk5Lawa8WiOvkjLkrS15j8mOsze35K1mV5fefQPHuzvS/2B6c9RgYWv0+46ryuB8PxrkIVwdHmabTRscEv0hKlaUhr8zGwr0fCnjT3VK08K0pWnnUe3z3Idy+kvu37b90HM7GXZ3tHuDHy/JZKzPzdvFs7Vr8tTrExM23NbPtYrePSfmzE9YmYme3vv0+4/uj0u5D0408dceDNoW1des/xcVseOI1Z/wCDFkpitH5PL4Pn4Z2DmazOy9bsca7h5+vysjBzsPIhW1kYuZiXpWMnGv25+FYzhOMoyjX20rStHpScdyGjyvH4OV4zLXPrbOOmXFkpPmpkxZKxfHelo8Jresxasx8YmJV8M+DNq7F9bYrNMmO01tWY6TW1Z6WrMfRMTExMfleI+1+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs/7D3ScOIenjnndmww/d7fuHmstRp8m5apWs+F9dwu6vHu4t+XjKlLu4ydvavRjSlK1x7dZVlWNKQpkf1if17v3t7m+3fQTjc/m0ux+LjZ2aRb4cpzU49i9clI8JnHxuDjsmK1us1jZyxWKxaZvLd7C+yI4f053+99inTNzOz8vHMx8dbT82OJrP91sX2K2iPCfl169ZiOmtX75HSn099V2p7R1+FGxo+8uF4G3v37dv3dq7zThMLfFuSWo24RpClaYNNLk3ZUr4zuX5ylTzVrKUq39X19e/wD1L9m+76Q8nsTl5D0+5TNrUpafNavF8rN+Q0bTaZm3T7XPKYKVmOlMWvSlJ8sRWus/vo7I/wA3vVnF3Vr0iuDndauSZjwidnW8uDNER8P8F9mvafjNskzPjPWdLSeFpSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbs/sXdKU596puRds7HClf0vSHB8zLwcqsPNZs8359S5xnR2rsZUrGvjrI727H20rSduEqfw8aQG/1hT17/APTr2g8Z6M8bsRj3/UDlcWPLj69LW4riPJv7dq9JifDfnicdvDy2x5clZ+PSd3vYn2R9/eqmz3dsUm2Dgta1q2+iNna82DFE/R/gPtVo+mLVrMfwV5KT6YFDl91fpOXSHrc7aw8bHrj6DsrLs9xcbrWErcbuJz69ey9/7q37aRt2t5a22NapCvhSFqPhSP8ANj6CP4O3r5X1+9gnZm9t5Yycl2pjv2zvePmmuTh648en5p+M3ycTk47Nkm3503y26zb+NaC/3X9kT2P64cvgxV8uvydo5HD4dOtdubWy9I+HSu1XYpXp4dKx8PhGudKC1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAefrNbn7rY6/T6rEv7DabXOxdbrcDFhK7k5ufnX442HiY9qPtlO5clGEI09ta1pRx3LcrxvA8Vs85zOemtp6WLJnz5sk+XHiw4aTky5L2nwrSlK2taZ+ERMvp1dbY3dnHp6lJyZc1q0pSsdbWvaYrWsR9M2mYiI/LL6GPp46mweiei+p+n8ClqseveCcd45m38elI28/dYmvhPkG28KUpTxzM6WTlT8PCnmuV8KU/g8zT3N+s3Ie4f3Cd5+tvJTbzdy8tu7uKl/42HVyZrRp6/0+GtqVwa9eszPlxR1mZ8ViH067Swdidi8R2fr9OnHauHDaY+F8laR83J/w5Ms3yT/AA2lrh+9n0lc7O9H1/nmsxq3990dy3Vc08bVn32Vd4ruf/xXlWLb8KeMbdv81h7G/KnspDDrWvsp7JRvwDvXzH6S+93H6dcrmjHx3qDx2xxf51vLjryGt/8ArDj8lvote/2fZ0sNfjOTeiI8Z8dbfe52Rbuj0dtz+rTzZ+C2Mez4R1tODJ/IZ6x+SI8+PNaforhmUbq8shnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFl/2Vuk5dWejfW802eH+X5D3hyncc/vzu26Ry7fGcLy8X4jiSrD2Vszs4d/Z2P418M2vjX20jGi3+PN6+U9XvfLt9icTn+bxnp/x+tw9YrPXHO/l67/JZY6+MZK5NnFoZvhHm0IiI8JtaZ/2T9kT2r6NYuZ2aeXY5zPk256/xowV6YNes/wBzNcds1Pp6Z56z9EbdkKLcBPf9/TpGm5616g9QGsxKyzuD8kzeueUXbMaVnLjvMMeW40GXmT8PZaw9hhXrEPCtPx5/hWlfGlY2X/6uH6+24P1W719tvK5ojX7g0cXN6FbT0iN3jbxrbmPHHXxybOntY81+sT/J8d1ia9Ji0eHv+7Ijd7Z4f1A1adcmjmtp55iPGcOxE5MVrf3OPLitWP7rY+E/RLUt5orwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGyf7TXSUu6vW31dTLw/zfHerZZncHI6yhSULMeGStS4vWdJfhl5t9f1UZRr4+MKzr4V8KorfxmPXyvoP7Be7p08/yeT7wjF21pRE9JtPKReN/p08Y6cRh5CYtHwv5I6x1hsv7SeyZ729b+K+bTz63FebkM35I+zdPkfweO1fBEx+Tr+Rb88/9OQ4V2RwXSdo9e85625Lbre4/z7iXIuHbqEIwlcprOR6q7qMudnz+NKXIQu1nbl/GM6UrTwrR3/0t9Q+f9JPUvt/1U7VtFOS7c5HS5PVmZmK/P0djHs4626eM0tbHFbx/ZUm1Z6xLgu5uA0O6e3t7trk466/Ia+bXyfl8mbHbHaY/hiLdYn6JiJfO+59wvd9b855p15ySzTH5FwTlfIOG72xGtaxtbjjO2u6bZRhX+WNL1mflr/LT2vTf9OO/OB9UvTzgfU3tW85eM7i47S5PUvPxtrb2tj2sEzH0TOPLXrH0T1hXV7g4Te7b57c7d5Ovl2NDPm18sfkyYclsd4j+DzVno4g7o4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc1654NuuzuweD9b8dhG5yDn/LuOcM0tLlJVtfqnJtvZ02DK95PGtIUu3oynX+SNK1/kdD9UfULgfSX017g9U+6LTXje2+N3eT2pjp5vs+jrZNrLFevhN5pimKR9NpiPpc323wW73P3Do9t8bEfaOQ2MOtj6/Dz58lcdev8ABE2iZ/JHV9EHgHC9J1vwThfXnG7Msfj3BeK8e4dorEv59rUcZ1NnTa6Mq1/jKlqzDzV/lr41eZB6kd+c96peofPepvdV4y8n3FyO7ye3ePhbZ3tnJtZ5iPoicmW3SPojpCxX2/wul21wWl27xlfLraGDDr4o/Jjw4646RP8AD5ax1cvdIcyxo9YvS1v1C+mHurqOmJTN2fKODbWfGLNfJ405noaU5FwudJSrHwpHaYmJ5vxU8Y+ala+FatrvY9675PbP7tOwvWm2acGpw/La8b9vH/8Ade3M6XKR0iJ69eP2Nny+E9L+W0R1iGMPWTsqvqH6Yc32j5PPl29XJ8iP/wBJxdM2tP7fHj6+MeHWPpfP0nCduc7dyErc7cpQnCcaxnCca+WUJxl7aVpX2VpX20q9KDHkx5sdcuK0WraImJiesTE+MTEx4TEx4xMfFXytWaTNbR0mPCYn6H8P0fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqk+wd0jXj3Una/fe0xPLm9j8owuEcZu3YSpdjxngtiWVts3EnSnh7rM2WdLHuU8a1rPX09lKU8ZU+f6xx6+17m9aOzfbnxGaba/a2hl5XfrWfzZ3+WtXHr4skdf8JraOpGak9IiMfIz42mZisrPsD7Hnju0OX7+2qdL8lnrq4JmPH5OrE2yWrP9rkzZZpP91r/AEfTQCrZpBgEaH3qOko9WesjZcz1uH+X493fxbUc/sztW5RxbfJ8PzcX5bhwrL21vTvYdjZ3/wCNPHNp4V9tYxvTfgM+vl/V72M6nYnLZ/m8n6f8hs8PaLT1yToZem/xuWenhGOuPZy6GH4T5dCYmPCLWhg96/Y8dres2Xmdanl1+dwY9uOn8WM9euDYrH91Nsdc1/o6546T9EaiU1jT8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuC+yd0nHs71iY3Otlh/mNF0dxHb82rcuWaXcS5yrbUpxTimHd8f5t2H5vM2WPL+SeFSv8aUQjfj3+vd/SX2QZfT3is/y+S9QeS1uK6Vt5ckcfrdeQ5DJX8uO32fW0c1fpx78x8JluL7I+yK90esdee2aebX4LXybPjHWs58n8hgrP5LR8zJmpP0WwLI1GZM0AAhF+5R0p9B/Wf3XxPEwo4PHuQcjl2NxKFmHu8P9A7Ah/WSmNgw8I+FnCy72Xrox8PClcetKVrSlJV9EX8K317/2iPYl2D3ju7E7HJ8ZpRwnIzafNk+2cPP2H5maes9cm1rY9bdtPXraNmLTFZmaxAz7luyP8w/WnnOJw0imtsZvtmvEeFflbcfO8tI8OlceS2TDEfR8uYjrHjOCiQ1gYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+lq1cyLluzZtzvXr04W7Vq3CU7l25OVIQt24QpWta1rWlKUpSta1q/PLlxa2K2fPaKUpE2ta0xFa1iOs2tM9IiIiOszPhEeMv7pS97xSkTNpnpER4zMz8IiPpmX0GfSX0tY9PHpu6b6ct2bNrN4XwnV4/Ia2KQjayOX7SNd5zPNh7vx8Y3ttlZl2P4q18JU8ZV/jXzUPeb68bPua90vfPrjlva+DnuV2L6fnmZtTjcExqcXinr0nri4/BrY7eFY81Z6Vr8IsKeknZOP069NeG7NiIi+lrUrm6dOk7F+uXZtHT6LZ75LR4z4T8Z+LIhrAyQA0mffR6U/r36W+Pdta/Cjf3XSHOMPKzsqkPNes8I57W3xjeW7dI0rKvjtKaK7L2+FIW5yr/AA8aT5/1ev16/wDTr3fcn6M8nsTj0PUDisuPFj69K25XiPPv6lrdZiPDQnlsdfDzWyZcdY+PSdIPfZ2T9/8ApXrd269Itn4LZra1vpjW2vLgyxH0/wCH+y2n6IrW0z/BIauvofwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV//AGNek69e+lHcdpbHClj7vvLm+dtsa/KErV65wrhFbnFuOWbsZ/ir/r9N3k2p18KTtX4SjTwr5p0kv6wX69V9S/eRo+kHF5/maHp7xWLWyVi3mrXlOV8nIb1qzH5v/wAHPF4MlY62pl1slbz5o8lJh/Yt2TPbvpNm7q2aeXPzuzbJWZjpM62t1wYYmPj/AIX7Tes/Ca5KzEdPGd0yBpuwAAnC+/50lcytP0j6iNbjVlXVZWy6j5bkws+edMTYxvct4TcnchTzQtWr1vdW5Sn4x89+3GlYyl4TtI/1br18x6nOd/8Atk5XN0jcx4O4+OpNukTkwfL47lIrWfC2TJivxd4ivS/y9bLaYtWvWkbX4gfY9sunwfqLrU6/Jtfj9iYjrPlv5s+tMzHwrW1dmJmfDzZKxHSZ/OmXWwUYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPz7Y3SdO9fWp0zx3OxJZXHeI7qfaHKae6rdx46nr+FN7gY+bDwrGtjL2kNfgXaS8KVpf8PHxrSlY3/wAWf17t7efYb313NoZow8nzerHAcf8AneW87HMzOplvinrExl19C25uY5r1mLa/m6dImY2B9sHZFe+/W3hePz0m+tp5Z3s/h1j5ep/K1i0fDy5M8YcVuvhMZOi6l55qd4AB1h3V1nrO5+oezeptxK3a1/YvB+TcPuZVy1G9+n3d7qbuBibW3bl/9TFvTt5Nqv8AGk4RrT20Zc9BvVflvQn1r7T9ZuEib7Pa/LaHJVxxby/OrqbOPNk17T/abGOt8GSPhNMlonwl1XvbtjV717P5PtLcnpj5LVz682mOvknLjtSt4j8uO0xev5LViXzxOR8f2/EuQ73ivIMO7rt9xnc7Tj+719+lY3sDb6bOnrtlh3o19tJWr1ucJU/krR6bHa3cvC959s8d3h23nrtcdy2rr7mrmr41za21ipnwZaz9NcmK9bx/BKuzyXHbnE8jscTyFJx7Grkvhy0n41yY7TS9Z/hrasxP/A9I558AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFPRR6NujPV9lQ4dsvVlTpruC7kXLeu685J1BY3OHyfHpOtbM+G8u/rXr7WdfpHy1u4F3EsZFK1lWzav2oTu0jE9+3vm9wfsm1J754r0ZnvrsilKzm5rR7kvrZdC/SPNHJ8d/m9uZNTD5usY9umxs6sxFYzZdfNemGdjfRL0Z7E9YMscNs92/cvMTMxTUzcfGSuePonW2Pt+KuW/Tp5sVsePLE9fJXJWs3jZ9/l5P8Aq+/4A/77Ikf95o/+yn/jD/ys2j/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2kf5eT/q+/4A/77H+80f8A2U/8Yf8AlY/o7f8Avh/0T/2koM6g610vTfVnXXU/HZyvaXrrhnHeG4GVctRs5GwtaDV29dLZZNqMpUpeypW5ZF7wlXxnOXtr/FWp9bPVXnvXP1g7n9ZO56xTf7o5Pd5PNjrabUw23NjJnjBjtMVmceCt4w4vCP5OlY6R8EhPZ/bOl2b2px3aXHTNsPG6+HXpaY6TaMWOtPPaPH868xN7eM/nWnxdjsWOzAAMb/Vt6cdL6r+guddGbrdz4xDltvUX9Zym3qo7q/xzdaHdY+81m1t6qWRie/pSdj3N61TKtVnanch7yPm8W1Hsw90PPezf3H9ve4PgdCOXtwttmmfj7bE6td3V29XNqZ9e2xGHY+TM0zfMx5PkZox5seO847eXoxn6uenOl6s9gb/Yu7nnVjcjHNM8Y/mzhyYstMtLxj8+PzeNPLavnp5qWtHmjr1aPP8ALyf9X3/AH/fZYB/3mj/7Kf8AjD/ys0c/o7f++H/RP/aR/l5P+r7/AIA/77H+80f/AGU/8Yf+Vj+jt/74f9E/9pH+Xk/6vv8AgD/vsf7zR/8AZT/xh/5WP6O3/vh/0T/2kf5eT/q+/wCAP++x/vNH/wBlP/GH/lY/o7f++H/RP/aR/l5P+r7/AIA/77H+80f/AGU/8Yf+Vj+jt/74f9E/9pH+Xk/6vv8AgD/vsf7zR/8AZT/xh/5WP6O3/vh/0T/2kf5eT/q+/wCAP++x/vNH/wBlP/GH/lY/o7f++H/RP/aTTp6u/T50Z6ceVU4F1t6mqeobmOtzb2Ly6mg6yxuMcO4xPGjKF3X15fb5Lt45uwhd8IXcXExZWrVaTjdyIXoVspxfZV7l/cH7ou0P/Ub1T9J59M+C2sVcnGzuc9ff5Pfi/Sa5vu2eC462rp2xzN8efY2K5c3WlsOtkwZIzxpr6v8Ap52J6b8t9wdtdz/5xbmK012Pk6UYNfBMeE0+0Ru7EZMsW8LUx0mtPzovkres0YcN5GGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO+ttPwDf8AMdNp+zub7nrnhude/L7Tmei4THsHL0XvKeWzm3+L02epuZGPCVaVyK4+VK9CFKytWL86Utyx56p856k9t9jb3Nekvb+r3RzuvTz6/GbfKTw2Pb6eNsVOQnQ5GmHNavhhjNgrgvkmK5djXpM5a8/21p9vchzWHU7o3svG6WSel9nFrfa7YuvwtOD5+va9In+P5LzeK9ZrS9ulZ318F+xHwzs3imm511765dJzLiHIcWOZp+Q8f6QsbLV51msqwuUhkY/N60jctTpK1fszpS5auRlbuRjOMo0rneon9Yh779Ju8t/099TPb7tcFzfGZJxbOlud1XwZ8VukTHWl+1Y60vWYyYstfNjzY7Uy4r3x3rad+eB9hvC90cTg5ztzvrHu6exXzY82HjIvS0fCekxyfhMT1ras9LVtE1tEWiYjln+Xk/6vv+AP++zpX+80f/ZT/wAYf+VnMf0dv/fD/on/ALSP8vJ/1ff8Af8AfY/3mj/7Kf8AjD/ysf0dv/fD/on/ALSP8vJ/1ff8Af8AfY/3mj/7Kf8AjD/ysf0dv/fD/on/ALSP8vJ/1ff8Af8AfY/3mj/7Kf8AjD/ysf0dv/fD/on/ALSP8vJ/1ff8Af8AfY/3mj/7Kf8AjD/ysf0dv/fD/on/ALSP8vJ/1ff8Af8AfY/3mj/7Kf8AjD/ysf0dv/fD/on/ALSbDvt+fbN0XoW5J2LzC92j9WOS840em41rtjXgdOD/ANWdHiZ9zabrCt2v1ncfmvz9+OBcnKsrXu/ysaUpPz1rGM38Sn8V7uD8QrtXtjsjB2h/mZxXb+3tb2fB97/e327by4aa+rlm33ZxvyPseG25SsRXN8z7ZaZmnkiLbEe3v2y6PoTyfJcxflfvfa3sWPDS/wBl+y/JxVvN8lYj7Tsef5t4xTM9aeX5UeE9fDaKiIbTgAAND/qW+yFpO++9uy+5OPeoOvW+F2PyK5yvJ4fXqKPK6a3d7PFt3eSZVN5Dk2spepm7D8zn+FcKFYVve7rW5WPvJWJ/an+P7z/ty9vHanoX3J6ax3TsdraUcfj5L/OOeP8An6uDJkro451J4Lf+V9l0/kanWNrJGSMEZIrji/y6aE+pnsd0e/u/OT704/uL7tx8lmnPbX+7/n+TLetZzW+b9tweb5uXz5f8HXy+fy9bdPNPRn+Xk/6vv+AP++zYL/eaP/sp/wCMP/Kzo39Hb/3w/wCif+0j/Lyf9X3/AAB/32P95o/+yn/jD/ysf0dv/fD/AKJ/7SP8vJ/1ff8AAH/fY/3mj/7Kf+MP/Kx/R2/98P8Aon/tI/y8n/V9/wAAf99j/eaP/sp/4w/8rH9Hb/3w/wCif+0j/Lyf9X3/AAB/32P95o/+yn/jD/ysf0dv/fD/AKJ/7SP8vJ/1ff8AAH/fY/3mj/7Kf+MP/Kx/R2/98P8Aon/tJjl6l/tJ9J+k3g9zm/cProsaqF+ORHjvFsDoGzn8y5jnY8aVnr+MaD+vMLl+tJSt0vZFyUMax54yyL1qMqVrtH7VPxovXz3l+oFfT/0O9vd92cc0nd383eFsPGcZivM9M2/uf5qWpiiYrecWGkZNrY8l662DNas1jG/qb7ReyPSTg55zvLvuMMWiYw4KcVF9nYtH9hgxfecTbp1iLXma48fWJyXpExLSFkRsRv344ty9exY37kce9kY8Ma/dseetLNy9jW7l2Nuco+FZQjdnSNa1pScqU8az/wCtbZvrY7blK4801rN60vOSlb9I81aXtTHa9Yt1it5x45tHSZpWZ8saN5IxRltGOZtXrPlmYiszHXwmaxNoiZj4xFrRE+HWfi8d+78wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfvj5F/Ev2MrFv3sbKxr0MjGycec7N/Gv2Z0uWb9i9brSUJwlSkoyjWlaVpStK+L59nW1t3Wyae5jrlw5a2pel6xal6Wia2petomtq2rMxasxMTEzEx0frjyZcWWuXFaa2rMTW0TMTExPWJiY8YmJ8YmPGJUD+gv70XIOD003VPq7y9py/iMa4uu0nc9q1e2XMOOWKRpj2rfPcW1SV3c4kI0jKWxtRlsIU81bsc6U6VtVrvxF/wIe2+/7b3rF7KcODhOatGTPt9r2tXBxm7fxva3EZLdMfGbF56xGlkmvG360rhtx9aTGWQf0D96vIcHGHtT1fvk3NSPLTFyURN9jDHwiNqsdbbGOI6TOasTsR0mbxnm0TWnXifLOMc745puYcL5BqOU8V5Dg2tlo+QaDOx9pqNrgX/H3eVg5+JKdu5GtaVjXyy8aVpWNfCVK0pUv7x7M7t9PO6d7sjvvjdnh+Y4zLbBt6W5hvr7Ovmp/Gx5cOStb0t0mJjrHjWYtHWsxMyf8Ty3Gc7xuHmOG2Me3q7FIvizYr1vjyVn4WreszEx9HhPhPWJ8YcidWcoAAAAAAAAAAAAAA667V7a646Q4Rt+xu1uX6fhHDdHbpPO3e6ya2rcr86Srja/AxbVJ38rLv1pKOPh4tu5euyp5bcJV9jKPo96M+qXr739pemHo5wmzz/O8hMxi1dWnmtFY6efNmyWmuLX18UTFs2znvjwYa/nZMlY8XWu6+7e2+x+Dzdx92bmPR0sEfnZMk9I6z8KUrHW2TJbp0pjpW17z4VrMpQPXj93zsv1EU3XWXRctv1R0tfrk4Gx2dq/XB7E7DwJ1rbuQ3Wwwpy/TNdejTwlrcK7Wd2Epwysi7auVx4XJvw6/wAEz0r9sn2H1X9w0a3eXfmOKZsGC1Pm8LwuaI81Z1cOWkfb93Faesbu1T5eHJWl9PWw5ccbN4mfXn3g9y+onzu2exJycTwtutL3ifLubdPhMZL1mfkYbR8cOO3mvWZrlyXraccaXk7bSsAAAAAAAAAAAAAAAAAAAAB2TxHqjmnN+E9pdgcf11MrjPT2l45veb5kpzpPCw+VcqxuIaeGNatwn7yc8nJpOVJVjGNq1dnWX4aRlizvb1k7E7A797Q9Nu5NmcPLd8bW7qcViiI6ZcvH8fn5LZm9rWr5KVwYPJWYi9rZsuHHFfz5tXs3D9p81znCcr3Bx2OLavDY8OXZt1nrWufPTXx9IiJ6zN79Z69Iilb26+HSetmU3WQAAAAAAAAAAAAAAAAAAAAGYnpI9cHevo25T+r9ab39Q4hssyF/lnWXIL2Rl8M5PDy0s3cieFbnSWFn0txjSzscOsbtKxhG576xSViej/vT/D99vXvl7O+5fVbjvs3N6uKacdz2lXHj5TQnrNq0jLNZrtac3mZyaWzF8Nove+L5GxNNimZfSL1y779GeV+19s7HzNPJaJ2NLNNra2ePhM+WJiceXpEeXNj8t46RFvPj60mwb0devTov1ncajlcF2teO9ga7Chkcs6r5Hk49vleiuRpGGRma6sK0hs9b7yVKWthix8PCsKZFrGvS9zGkR74fw5/cH7E+6p1PUTTjk+2trLNOO7g0qXtx+3E+aaYs3XrbQ3vJEzk09ievWt51s21hr8+0xPo56+dietHGfM4HL9m5HHWJz6Ga1Yz4vhFrU6dIz4es9K5scfCY+ZXFefJGbbQRnEAAAAAAAAAAAAAABpv9ef3c+s/TXXc9adMU0/a3eOP7/BzpUv3MngPXmdD8E6cmzsCcK5+dbr4xrqsG9GsJUlTKyLE40tXJzPw6vwV/Vf3V/YfVb11nZ7N9P8vky4o8tacxzWKfGPsGHLW0aepeOkxyG1itGSs1nU1tml5zYtMvXv3eds+mfzu2uy/l8tztetbeM21NS30/PvWYnLlifD5GK0eWYmMuTHMRS0m/bncfZve/ONr2N21zHb825huJU/MbTbXo1hjY0ZSlj63VYOPGGPhYdrzVpZxMW1btQpWvlhTxr43LfRX0N9J/bt6f6fpd6M8HrcBwmjH5mDXrPXJkmIi+fYzXm2ba2cnSJy7GxkyZsnSPNeYiIiJbu7vPufvznMvcnd25k3tzNPjfJP8AFrHwpjpHSmPHXr+bjx1rSv0RHWXWTLLqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnF6N/X53p6MeQxucJ2v9ZuuNjnW8nlXVHIsq/Pi+4jWtI5ObqL0aXJ6nZShTyxz8SFaSrSH5mzk27cbSPz3yfhv+3v32dszj791PununVxWx8f3DpY6Rv63hM0xbNZmlOR0ov421Ni0TWLZPsufUy5LZWdPRr3A99ei/I+fg8v2rjclotn0M1p+Rk/trY58ZwZpjwjLjjxmK/NplrWKrBPST62+jPWRxGO86y31MLlWuxbNzmHWu+uWMXmXE8mfhCcr+HSVY5mFKXssbLDrOxOlaRnW1fpcsW6RnvQ9gvuC9jnes9v+rHHTn4fayWrxvOalb5OM5GkeMRTLMddbarX/C6OzGPYxzE3pGbXnHsZJh/SP1v7G9ZeH+39s7Hk2sdYnY0ssxXZ15nw8a/DJimf4ubH5qW6xE+TJ5qVy/aRsyAAAAAAAAAAAANePra+4/0h6M9VkajPyrXYPcmVh++0fVWg2Ni3m4/vbdJ42x5vtYRvR0+FKlaShW7ank36VpWxj3IUnctyb+wX8Lb1+99PM4ub4zFbtrsbDl8u33DuYbziv5ZmMmDi9ebYrcltVmJraMeTHq4JiY2dnFecePJrr63+5Lsb0Y1LaW1aOQ5m9euLQxXiLR1jrW+zk6WjXxz1iY81bZLx/g8dq+a1Y/8A1O+rbu71b81lzPuDlN3YWsS5lR4xxDWUu4HDOGYOVOlZ4PG9J55UhWtIwjey78ruTfpCHv71zyx8Lt3tL9l/oF7Lewo7F9EeIrrXzVx/b+Sz+XNyfJ5ccTEZd3a8tZtETa9seviri1Neb3+z4MXnt5oePU/1d749Xecnme8dqclaTb5GvTrTW1q2/scOLrMR1iIi2S02y36R5726R0xobWsYgAAAAAAAAAAAAAAAAAAAAAKr/tSekPUcr+3h3Fi8rwoYmV6tv646mGwycak7mJxPj+BkcN4XsqY040l7zC2/6rs8Wda+FaTtThTw8JSp2/jG+9fmuzvxNeyNvszYnNi9F/u3YnDS/SuTkdzNh5PlMHniZr5Nrjvu/Q2KxHWs482O89etayve0/0g0+W9u/M4+XpFLd3/AGjH55jxrgxUvra1+k+PXHsfPz45+nzUtHh4zLTyDRbTi++3fGd1iywt1x3b7LRbfCnWnnxNpqMyev2GLcrT2Vrbu25wr/30W9u2u4eI7u7c4/uzt/LGxocprYNvWyx8Mmvs4q5sOSP4L471tH/Cit5DQ2uK38/Gb9Zpm1sl8WSs/Gt8dppev/stEw9M5x8YAAAAAAAAAAAAAAAAAAAADknE+Xco4HyTT8x4VyHccU5Vx7NhsdJyLj+wytXuNVm26VjHIwM/DlC5bl4SlGXll4VjWsZeMa1pXq/efZfaPqL2tvdj9+8Zrczw3J4pw7eluYcexrbGK3SZplw5a2peOsRaOsda2rW1Zi1YmOT4jluV4DksPMcJsZNTb17RfFmxXtjyY7R9Nb1mJienWJ6fGJmJ8JlT56DPvQ8d59XR9U+rfJ1nD+a3a4+t0/clm1Y1fC+T35UjYsW+bYVmMbOmzLkvCs861SOBOsq1lDBjGnnqTfiK/gRdz+m8ch6xey7Fn5zgKRfPs9s2tfPymhSJm154rLabZeU1qV8K6uTzcljrWIpfkL3mccofoJ70+O7g+R2p6uWpp709KY+RiIprZ5+Efaax0rrZJn45a9Ne0zPWuCIjzb/7F+zlWbOTjXrV/Hv2rd+xfsXIXbN+zdh57d21ch40lGVK0rGVK1pWlfGitvnwZ9TPfV2qWx5Mdprelomtq2rPS1bVnpNbVmJiYmImJjpKQSl65axkxzFq2iJiYnrExPjExMeExMfCX7PmfqAAAAAAAAAAA4R2L2TwLqPh+57A7L5ZpOE8N4/j/mdryDkGbDCwcaMq+WzYt+bxnfyL0/C1j4tiE7165WNu1CdyUY1yF6YelnqN6098aPpt6UcNtc/znJX8mvp6eKcuW8x42vbp+biw4q9cmbPltTBgxVtlzZKY62tHAdx9ycD2hw2buHubbxaOlrx5smXLaK1j6IiPpte0/m0pWJve0xWlbWmImVj15/eM593X+s9Xemy/uusep73v9ftuaUnPW9i89xK/gu27F+zWs9Lrrvt8bOPcpl34ey/dtW7l3FrcH/Dq/A49OfQP7D6ue6rHq92d5Y/Jm1uL6Rn4XiMnxra9Lx5OU3cfh0y5qTp4Mn52vhy5ceHciKf1795XP97/ADu1vTS2Xi+Jt1pk2f4m5tV+ExEx462G39rSfnXr4XvWtr4mjhYJaLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMOBdgc26u5Zpeddd8p3fDeX8fyoZmn5Dx7Pva/Y4d6FfCcKXbNaUnauR8bd+xcpK1dhWVu7CcJSjXo/qN6bdg+rvZm96eep3EavO8JyeOcWzp7mGubDkrPwny2iZpkpPS+LNSa5cOStcuK9Mla2jmuA7h5vtbl8PPdubWXS3Ne3mx5cV5pes/8MfGsx4WrbrW9ZmtomszE1Meg37y3C+3I6Tqz1R39R132fcpjazVdkRpZ1nXnOcmtfc2v1yM6xt6LY3fGPm81fyF2fnlbniea1iqg/wCIr+Bh356K23/V72jY9nuftKvzM+xwk+bPzPE4/wCNb7L0ib8tpY/zvL0j7xw4/JXJTd8ubbSpegnvO4Tu6MHa3qlbHx3KT5aY9yOlNTat8I+Z9Grmt4dev/N726zW2HrXE3uRlGcaSjWkoypSUZRrSsZRrTxpWlafyK8Fq2paa2iYmJ6TE/GJ/JLfGJiY6w/1/D+gAAAAAAAHgbLaa3Sa/P3G42ODqNRqsPIz9pttnl4+BrtdgYdqV/Lz87OypRt2bNq3GU7l25KkYxpWsq0pRynFcTyvPcnr8Jwetl3d3cy0w4NfBjvmz582S0Ux4sOLHFsmTJkvMVpSlbWvaYrWJmYh8uzta2lr5NzdyUw4cVZve97RSlKVjra17WmK1rWImZtMxERHWZ6JxPXl96mOPTc9U+jnLtXr3+n12+71ysSl2zap/MyLHWWrzY1jOX8YfrGZarClPNXEsyrW1lxtF/h1fgMX2vsPrH748NseP8zPqdpY8nltb6aX53YxW81K/C33brXi8z5Y3M9YjNpXjd9fPexXHObtP0ZvFp8aZeUtXrEfRMaVLR0mfo+0ZKzHxnFSZmmaJuNxutxyLa7Hfch2uz3u822Zf2G23O5z8rabXaZ+VP3uTm7HY5sp3r965KtZXLt2dZSrXxrWtVp3g+B4PtfhtXt3trSwcdx+liph19XVw49fX18OOIrjxYcOKtMeLHSsRWlKVrWsREREQjX3d3c5Lbyb/IZr7GfNab5MmS1r5L3tPW1r3tM2taZ8ZtaZmZ+MvVuWfIAAAAAAAAAAAAAAAAAAAAAA9/xXjW55pyfjfDuOYkthyHlm+0/GdFgRr+PN3O92FvV6vEhWv8K3L92EKf8A6ut94d18F2H2lynfHdGeNbjeG1Nne280/DFq6mG+xsZJ/gpix3tP/A5HiuM3eb5TW4bjqTk2NvLjw4qR8bZMt4pSv/vWtEf+19EDqDrjUdPdVdc9VaKkK6nrvhXG+HYV2MKQllw4/qbWtnn3qfxrcyJ25X7sq+NZTnKVa1rWtXmSetnqlzXrd6w90esPcX/xvc/K73J5azPWMc7mzkzxhrP0Y8Nb1xY6x0rXHStaxERELFHZ/bep2d2rxvamhEfJ47Ww69Z6dPNGLHWk3n+6vMTa0/GbTMz4yjk+8B0pTp/1s8+2WBhzxePdw4Gt7c1MvJSlmew5FK7g8zpS/D8Mrk91iZ+VOPhSUY37fmpWkozneM/BI9e7et3sG7c4rkc8ZuT7HzZ+3NiPN+dGHSimbjPzJ/OrSvF7Opr1t40vbXyeWYmtqUhr94fZEdm+t/IbOvSaa3M1pyGPw8PPm81djx+EzOzjy5Jj4xGSvX4xM6u0ubVoAAAAAAAAAAAAAAAAAAAAAABtY9Cf3Uu3fSXe1fBOa12fa3Q0LtrHrxHNzaT5LwfElOkbuR13ts6Xhbt26eM/0fJnTEnWlaWpYk7ly/WHb8Q/8Hz0V952Dc9ROwowdneotq2v944sXTR5XJETNac1r4a9b5Lz0r954KTu469Jy13ceLHrxth6De6vu70kvi4Hm/mctwETEfZ7W65tWv0zqZLT0isR4/Z7zGG09fLOG1rXmuPof1CdRepXgeD2L05zHX8s4/k+7s59qzL8vuuPbOVql69peTaW/wCF/Cy7dK+21ejSk4+Fy1K5alC5Klh7ifbT61e1T1F2PS/1x4PNw3J4utsVrR59XdwRaa12tHap1w7WteY8MmO0zS3XFmrizUvjrLv2F6h9oepfAY+4+zNym3r26RaI8MmG/TrOLNjn8/Fkj+1tHjHS1JtSa2nupgV3gAAAAAAAABgb6z/uE9G+jHRXLPKdhTmHaefhVyuM9S8ezLNeQZtLkf8AVtjyLNrS5b0+ulKtP9ayo1uXaUn+VsZMoTjGRX2J/ho+4P329xVz9oa33J2hrZfJvdxbuK/2PFMT+fg0sfWl+S3YiJ/kMFoxYrTT7ZsatcmO1sBetHuG7F9FdCacrk+2crkr1w6GG0fNt1+F81ukxr4ev9neJtaOvyseWa2iI+/VZ6zO8vWDzD+sna3I5foevyci7xLr7SzyMLhPD7F/xt1jqtVOcveZMrfhC/sMmVzJu0pSMrlLcYW4XdPZz7Ffb77IuyP81vRzi4+8NqlK8jzO1FMvK8lenj12NiK18mCt+tsWngrj1cMzNq45yWvkvDv6setHfPrHzH3l3Zsz8jHMzr6mPrXW14n9Xj6z5rzHhbLebZLfCbeWK1jFBuSxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3z0Hfdn7T9Lv6L1t2nHadr9FY0sfBw9deyYXOb9e4EZUt+fhu1za0pk4dm3Wnl02bdpapSEYYt7Ej56XITPxFPwY/SH3czv+qno/ODs31DyxfLkzVxzXiuazTHm6cnr4omcGzkt/G5PVxzmtN7328G7byTj3C9Bfdt3V6WfJ7b7r+Zy3A16VrSbROzqU+H/Nr2n8/HWPhr5LRSIiIxXwx5vNWn013d1Z6geDavsfqHmWp5rxPaU8kc7W3JRytfmRhSd7VbzV5NLeVg5lqlY1uYuXZt3Y0rGXl8soyrTE9c/QL1f9tnqFt+l3rZwWxwPM6k9ZxZ6xOPNimZiuxqbGOb4NvWyTE+TY1smTFaYtXzeetqxLf2Z3v2r6g8Fi7j7Q3ce7qZf7KkzFqW+M48uO0RfFkr1jzY8la2iJienSYme1mG3bgAAAAAGOHqW9VnSnpO4Pc5v3Fyuxqo5EciHHeL6/3OdzLmOfjxpWev4xoPeQnfrSs7cb2RclDGseeMsi9ajKla7Se1T2devfvL7/AK9geh3DX3bY5pO7v5vNh4zjMV5npm39zyWpiiYrecWGkZNrY8l662DNas1jGnqZ6r9keknBTzfee3GGLRMYcFOltnYtH9hgxdYm3TrEWvM1x4+sTkvSJiUgvrf+5R3X6ytjlcfu37/XXSmPlwu6jq3SbCdy1svy92N3F2XOttahZltcmk4wu27M4RxceVI1s2aXaSvXLtXsA/Cr9BfYvxeHuXFjp3P37lxzXZ5/awxFsHnrNcmDida1slePwTW1sd8lbW3NmlrVz55xTXBjh89cvcv3t6zbV+OtaeO4StuuPRxXmYv0mJrfayRFZz36xForMRixzETSnmib21xpRGtwAAAAAAAAAAAAAAAAAAAAAAADar9nLpOnb3rU4fvc/Gpf490vp9p2ts/eeaNue11lbel4fZjcp/8AWt7XNxc6Ef8AxQxrn8lKoefxx/X2fRT2F8327x2WcfJ9+bOv2/g6dJtGvn8+1yVpj9Xfj9XPqWt/Y328f0zDa72adj/53+tunyGxXza/CY8m9fr8JyU6Y9eIn+2jPlpliPpjFZagoZpsWhn78/ScuV9Ddb94azBpd2PUvM7vHt/k24+Wdrh/Ylu1iQycq5SvhOFjbYeusWoypWsZZc6xrTzT81i3+rpevlezvcV3T7f+V2PJq96cZXc08dp6xbk+FtfJNMcf2NsvHbO7lyTEx5q6dItFvLTy6D+/fsmeV7B43vnXx9cnEbM4cto+Ma+3Fa+a0/TFdjHhrWJ+E5Z6dOs9ZQFyVEwAAAAAAAAAAAAAAAAAAAAAAAA7v6D9RPb3pm55h9i9N8wzuK76x7qzsMa35crR8l1kLtLt3Scm0t/xsZmLc8K+MLkfPbrX3lmdq9GFyOAfcb7Y/RL3YenWf0x9cuExcxx2TzWw3nrj29HPNZrXa0NqnTLrbFP7ak+TJWPlZ8ebDa+K3eOwfUbu/wBMuep3H2ZuX1NivSLx/GxZqdes4s2OfzcmOfyTHWs/nUtW8RaK5/Qp90zqD1b42t4Ry79P6p73ras49zhefny/QOaZMIUpezevNxmeHvZTlTz11OTP83apWsbdcu3bnkKVn4hv4Qnrb7LNra7+7M+d3j6dea168phxR9s4ykz+bi5nWx9flxWJ8scjgr9iyzEWyRpZMtNZL36Ee6ns/wBXceLg+X8vFc90iJ1r2/ktm3TxtqZLfxuvx+z3n51evSs5q1tkbT0PzawAAAAAB42Xl4mBiZWdnZWPg4ODj3svNzcu9DGxMXExoVvZGXl5F6tIW7duFKznOdaUjSla1rSlH2aenucjuYuO47FfY2Ni9ceLFjra+TJkvaK0x46VibXve0xWtaxNrWmIiJmX4Zs2LBitsbFopSkTa1rTFa1rWOs2tM9IiIiOszPhEeMp4/Xj96jU8bpueqvR5mYXIN/GuVrt33jfxrGfx3T3Iy91dh1xr8uk7OzvUrSVKbTKtyw40p5se1lxnC/bs1fh1fgNcz3TOj6w+9/Bl43jZimfV7Upe+Hd2azHmrPN5sc1yaOKY6TOhgvXemZ8uzl07Y74Mkdvr1719TjPndq+jd67GxHWmXk5rFsOOY8JjTpaJrmt16/y94nDHTrjrmi0XrMzyLke/wCXb3bcn5Vu9ryPke9zcjZ7rfbzPytrt9rn5UveZGbsNhnTndu3J1r4ynOVa1Wvu2O2O2+ye3tPtLs/Q1+L4vjsVMGrqamHHr62vhxx5aYsOHFWuPHjrHhFaViI/IjI5HkeQ5jfzcpyue+zs57zfJly3tfJkvaes2ve0za1pn4zMzL0rnnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYf2FumMrifQnZndWyhk2b3bvNMbR6K3Ocq49/i/W1rIwqbPHt09njd2mfs8W5WtK1/1WP8ACimv/WMPXbU7z9x3anoNxdqXp2TxeTb27REeeu/zlsOX5F5+PTHx+poZ6RExH/PLdYmY8JaPYP2Vl4jsDk+9dmJi3MbNcWKJn82cGlF6+eI+HW2fLnpP/wCShviV1W+4AAAAACYP7/nTNzA5l0l39g2b8sTkWj2vVnJJ0pP8pjbPj2TPk3Frkq+HlpezMfN2cK+2lZQxI+yvhWtLbX9W69dcfIdjd/8Atv5C9YzcZt6/cGjHh8zJg3cdNDkKx4+acetm1dG0eExF923WY80RMXP4gfZd8HM8H3/rxM12MWTRzT4+Wt8Npz4J/J5slMmaP+DDH5E6yzwjmAAAAAAAAAAAAAAAAAAAAAAAAAVnfYb6UjxD088+7s2GHS3t+4ebz1GkyZ26Srd4V11C5q8e9j3pe2NLu4ydxavQh7JflrVZVlWNKQplf1ij17t3t7m+3PQTjM830ux+KjZ2scW6RXlOammxet6x4W+XxmDjcmK1vzq/as0VisWm2SW72FdkRxHp3yHe+zTpl5nZ+Xjt0+Otp9aRMT9Hm2L7FbRHhPy6zMzMRFd66vE3xdHepbqHF786A7e6dyY2Pe8/4JvtHq72X5ZY+FyOWHLL4ts7tJ0rTwxNlbxcmlfDxpWHjStK+FWwntT9bNv24+5Dsn1v1Zv5O2+X09vYrjmYvl0oyRj5DBXpMf8AxGjk2MHTr0mMkxMTEzE9E9Tez8Xf3p9zHZuTp15DVy4sc2+Fc3l82C8//k81cd//AHXz1s7BzNZnZet2ONdw8/X5WRg52HkQrayMXMxL0rGTjX7c/CsZwnGUZRr7aVpWj0weO5DR5Xj8HK8Zlrn1tnHTLiyUnzUyYslYvjvS0eE1vWYtWY+MTEq8WfBm1di+tsVmmTHaa2rMdJras9LVmPomJiYmPyvEfa/AAAAAAAAAAAAAAAAAAAAAAAABl36DumMnvz1c9GddW4ZFdbf5vruS8mvY05WJ43E+FeblvIqxy4eHuZ3cbDnjWLvj40vXbdI0rKsY10o/EU9dtT24+yz1C9T8tqRt4+KzaOjW8RaL8jynTjtL+Tnr82uPPs1z5cfwnBiyzaa1i1ozB6CdlZe/vV7gu3KxPyrbNM2aYnpMYNb/AJxm/O/sZtTHNK2/t7V6dZmIm+p5wif8AAAAABj/AOqjqOXfXpx7n6hsVpTYc56/3+s0UpzrG3a5NZxf1Hi16/WkoeNu3srGLO5GsqUrClaVrSlWyns/9aq+3T3Q9ietmfrOt2/zOnsbcRHW1tC2SMPIVr4W6XvpZditJ8szW81tETMMeeqvaH+fvpvzXZ9f8Jv6mXHin4RGeK+fBM+MeEZq0mY6x1iJh8+HIx7+Jfv4uVYvY2VjXp4+TjZEJ2b+NfszrbvWL9m5SkoThKlYyjKlK0rStK08Xpba2zrbutj3NPJXLhy1rel6Wi1L0tEWrelqzNbVtWYmtomYmJiYnor0ZMeXFltiy1mtqzMWrMTExMT0mJifGJifCYnxiX4PofkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHl4WHlbHMxMDBsXcrMz8mxh4eLZjW5eycrKuxsY9i1Cn8ZTnWkY0/lrV8e/vafF6Obk+QyVw6+vS+XLktPStMeOs3ve0/RWtYm0z9EQ/bDhzbOamvgrN75Jitax4za1p6RER+WZnpD6Evpk6cw/T96f8AqPpzDjj0nwLg+l1G2u41fGxncmuY/wCoct2lqvh/DM2l/Myv/wCI80D3YeuO/wC5T3Jd6+uW9a817j5Xa2deuTwvi0a3+Tx2vb+HW0MWtg//ADaw36Ydm4fT3094fszDEdeP1sePJNfhbNMefYvH/wCUz2yX/wDed6teHfgAAAAAGvz7oXSdO8vRT3HpcXCrm8j4Pqrfa3FaQj7zItbXgFJbbZxxLXjSs7uRqK7PCtwj4yrW/wCEaVl4UrJV+Ef6+W9vnv27G57b2I1+L7g2Z7e5DrPSltfmPLrYJyW/sceDkfsO1e09K1jX62mteto1490nZH+fXolzOnix+fY0ccb+Dp4zGTU65L+WPptfX+diiI8Zm/hEz0hC69ChBOAAAAAAAAAAAAAAAAAAAAAAAA8/Wa3P3Wx1+n1WJf2G02udi63W4GLCV3Jzc/OvxxsPEx7UfbKdy5KMIRp7a1rSjjuW5XjeB4rZ5zmc9NbT0sWTPnzZJ8uPFhw0nJlyXtPhWlKVta0z8IiZfTq62xu7OPT1KTky5rVpSlY62te0xWtYj6ZtMxER+WX0L/Tr1Ph9E9EdSdP4XuJU694HxzjmdkY8PJZ2G6xNdGXItvGHjXwrmZ8snLl/33KvM29znrNve4f3D95+t2/54nubl93exUvPW2HVyZrRpa0z9MaupXBr1/ucUdViD067Rw9h9h8R2fg6T93auHDaa+EXy1pHzsn/AOcyzfJP8NpdzsDu7AIcPuqdJx6Q9bXbeBh49Mfj/Y2Xj9v8bhGFLUK4nPp3M3ewtWY/hjbs7u1tce1GPspC3HwpH+bT0FPwefXu3r/7BOzOR3ss5eT7Xx37b3pmfNMZOIjHi1JtafG18nFZOPzZLW/OnJlt1m38a0F3uu7I/wAxvW/l9fDXy6/JWjkMPh0/N25tbL0j4RFdmuelYjw8tY+HwjXSk+a4gAAAAAAAAAAAAAAAAAAAAAAAKNPsCdISzOR91eorZYvjj6TXYHUnE8iVJStz2W3nZ5XzS5b8aeWNzHx7OmhGVPGXkybkfw0rXz1ev6yJ6/Ro9sdhe2His3TJv5s3cfI0iYiYwa0ZeP4uJ/srY82bLydrVnpXz6mK351ojySQfh/dj/O5Hm/UbZp+bgrTj9efo8+Sa59n+CLUpXXiJ8Z6ZbR4RPjTiqZJPwAAAAAAELn3P+kpdF+tbuPSY2H+U49zfbx7W4pWMKW7F3U9gSnt9hbxLVPZCzi7b9SwbcKeFKUsUpSlKeFHoV/hIevlfcH7Cuxue28/z+T7f1p7e5DrPmvXY4aK62Cclp8bZM/HfYdu9p8ZtsTNpm3WZgk90fZE9i+tvM6OKnk197J9vwfRE49vrkvFY+itNj52KsfCIx+Hg1+pJ2vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsV+1X0jDvL1s9T6/PxY5XHeu8rJ7e5LCVul63+T4FO1maO3fsT/AAztXt3d1WNehP8ADWFyXjSX82sYX4wvr9f2++wbvPk+Oyzh5TuemPtvRmLeW3zeXjJj27VvH51cmLisfIZsdq/nRkxU6TX+NXY72p9jx3163cRrZ6xfX42bchmiY6x5dWa2xRMfCa22bYKWifDy2nrE/CbkHn1J0QAAHrre31N7aZWks7TX3d1gYeHn5+ot52NPaYeBsLl2zgZ+XgRlW7bs352L8LN2cKRnW3Oka1rCXhy2XheYwcTh5/NqZqaOxlyYcWzbFeMGXNhrjtmxY801+XfJirlxWyUrabUrlxzaIi9evyU29TJtX0aZaTmx1re2OLRN60vNopa1OvmitpraK2mOlpraImekvYuJfWAA/DIx8fLx72LlWbOTi5Nm7j5ONkWo3sfJx70a271i/ZuUrGcJxrWMoypWlaVrStPB9Wts7GlsY9zTyWxZcVq3pelprel6zFq3pasxatq2iJraJiYmImJ6vyyY6ZqWxZaxatomLVmImJiY6TExPhMTHhMT4TD58vqs6cv+n/1HdzdPSs3bOHwfnm7wND7/AN576/xHOu03HDM67561r5sjU5OFflTxrSlZ+yUqfir6WXs69ccHuU9rnYnrfS9b5+4OI1c255OnlpyOKv2blMVenh5cPI4NrFHhXrFPGtZ/NivR6sdmX9PvUjmuzbRMU0drJXF1+M69p+ZrWnr9N9e+O0/H4/Gfix7bLMeAAAAAAAAAAAAAAAAAAAAAAANkf2nuk/rV62+q7WZjSydB1fdye4eQVjGkqWocGu2r3Ga3KV8aeWe9v6m3cjL2VhKVEWX4yvr3/wCgnsE7wzaWWMXJd3Vx9s6fWek2nlq5K73Tp4xavEYuRvSY+GStJ+DZX2l9kf57euHFVy1m2vxXm5HL/BGrNZw9fo6TtWwRMT8azK4J5/ScoABPZ9/fpSm4636d7+1uFOebwvkmw655NkWLdJylx/l2NLcaDKzp+HjGziZ2FfsW6+NKe8z/AAr41lHwsw/1cH17twfqn3x7b+UzxXX5/Rw83oUvbp03ONvGtuY8UfC2TZ1NrFlvHjPy+O80dIrbrHf7/uyK7nbXDeoGtSZvo5raeeYj/idis5MVrT9FceXFasf3WfpPxjpLat4osAAAAAAAAAAAAAAAAAAAAAAAAF2P2zekYdEei7pjjeRixx+Qcs0Me0OVy93S1eubzsGkd/j4+dCn/wBbC188DWzr41r/AKtR5434rvr9f3E++/vvunWyzl4zhtyeB46PNNqRqcNM6d74pn/i9rcpt71Y8P8A4qU8Ptj7Hr2F6K8LxmSsV2NvF9t2PDpM5dvpliLf3WPDOLDP/wCTZ6I5mfgAHrtrt9VosC/tN3s9fptXi+6/M7LaZuNr8DG9/eji2ff5uXKFuHnuThbj5pU8ZVpGntrSjluH4bmO4ORx8PwGpm3tvN5vl4NfFfNmv5K2vbyY8dbXt5aVte3lrPStbWnpETL5Nvb1dDXtt72WmHFTp5r5LVpSOsxEdbWmIjrMxEdZ8ZmI+MvYuJfWAAAnd+/10pXZcJ6W9QWswrdb/FdztOr+WZNu3WWRd1PJbMuQ8Su350p7LGJlYmytUrWv/qZsafxks5/1b317jie/u/PbZy2eYx8xq6/PcdjtbpSuxo2jT5GtI+nNs6+zpZJiI6/K0Lz8Ko5/xAOyJ2eD4T1C1aR5tTLfR2LRH50480fO15mfopjyY81f/wAWeI+lL4tvouAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSf2Cuko6frXuHv8A2WJWOdzbkuF1xxi9etVhKHHuIY0dzv8AMwp1pTz2czPzrNi5XzVp7zX1p4UrSvmqG/1j318tznqp2R7buKzROtwGjl5vfrS3WJ3eSyW1tPFljr+bk1tTUy5qR0ifl8lEzNotHllQ9gHZEaXbPM+oOzSYyb2aungmY/4nXrGTLas/TXJly1pPjP52v08Ok9aElZ9IeA/Oc4WoTuXJxt2rcZSuXJSjCEYQj5pTnKXhSlKUp41rX2Uo/bHjyZslcWKs2taYiIiOszM+ERER4zMz4REfF/FrRWJtaYiIjrMz9DQh6+PvMcV6zju+qPSjm6nnPYMY3tfue2vLjbfgXD78qVtXrfE4eMrO72Nv2yjkV82utS8lfHNr72zbsbfhyfgWd4erE6HrH7yMGx292zaa5tXt3rfW5fkqx0tWeRnpXJxWlk8InD+byeanniI0I+VnyaBev3vQ4ntmM/anpNfHvcjHWmTf/NyauvPwmMHxrs5q/GL+OvSen+H/ADqVnB4r6l++eGdvXO++P9p8wxu28rPu7DZc1ydpe2Oy3c8iVK5OFv7ew97ZzcO7GEITwcq3OxWEYw93SMI0paR7x9qXtz789Eq+3LuTs/jcvZeHDXDg4vHr1wYNWKRPky6dsPy8urs0m1r12sF8exF7XvOWbXvNo3OJ9Te/uE7xnv8A4/ldivL2vN77Nsk3vl69OtcsX81cuOekROK9bY+kRHl6RHSqr0F/dr6y9TcdP1p3B+kdU963o4+FiW7+TTD4F2LnTr7iH9UNhn3JSxM+7PwpTT5l2s5ylCmJfypVnbtU8vxGPwYPVn2nW3vVT0TjY7x9PKTfLktWnzOX4XFHW0/eWHDSsbOnjr1meT1sdcdK1vbc19SsUyZpW/QP3c9r+qEYe2e8fl8Tz09K1iZ8uruWnwj7Pe9pnHltP/y+S02mZiMN8szNabh0H7cgABKr9+/pWvHu4uqe+NbhVhruyOJZXC+R5Fm3WtqnKeCZNMjXZebd8PZdy9ZnWrFqnj7YYEvCn4a1rcN/q5Pr3Xub0Q7x9u3K5/Ntdrcjj5XSpa3533fy1Jpnx4q/Tj1t7UyZsk9PDJyNesz5qxEUfv8AOyZ47vLie/NanTFyWvbWzTEeHz9WetLWn+2yYcta1/LXBP5JaBFkVH4AAAAAAAAAAAAAAAAAAAAAAAqd+wZ0nHRdVdt997PBrDYc+5RhcB4zk3o0pOnGOF436hucnBlGvttZmxzqWLvm9vnwKeFKUp4yqA/1jr17t3D6xdl+3LidiLa3behl5jfpWfD7fyl/k62PLE/8ZraWrObH08Pl8jPWZmelZVvYF2TGh2py/f21Tpk5DPXUwTPx+TrR58lq/wBzkzZfJbr/AGWv9H00EK1aQkABjP6x+l4eoT0wd2dSQw6Z215Twbaz4tYnWkfDmmgjTkfCp+8l4eWlNriYnnrStPwVlT+Fatr/AGOeu+T20e7bsH1pvnnX0+I5bXjfvHj/APqvbmdLlI6fTM8fsbPljx6X8s/GIYw9Zeyo9Q/S7m+0K0jJl2tXJOCP/wBJxdM2t4/R/L48fX+DrD5+s4TtznbuQlbnblKE4TjWM4TjXyyhOMvbStK+ytK+2lXpP48mPNjrlxWi1bRExMT1iYnxiYmPCYmPGJj4q+VqzSZraOkx4TE/Q/h+j+AAAAAAAAAAAAAAAAAAAAAAGSPpC6Wn6hvUz0v09K1dv67mHONZb5HGz5vew4dpvPyHmd63Knj4ThqsTMnCtfZ5qU8WrXvZ9eKe2b2od+et1clce1wnFZ50Zt/Fnk9ry6XF1tH01tyGxrVtEePlmejJPo92Tb1F9TeE7Pms2xbmzSM3T4xr4+ubZmP4YwY8kx/D0fQQtWrWPat2bNu3Zs2bcLdq1bhG3btW7caQhbtwhSkaUpGlKUpSlKUpR5rObNl2Mts+e03veZta1pmbWtM9ZtaZ6zMzM9ZmfGZ8ZWEaUrSsUpERER0iI8IiI+ERH0RD9H4P1AYn+q71ndHejzh9OSdqchpLebHHvz4n15o54uZzbl9+zLyV/StVduW/d4sJ+Eb+wyZW8e1WvlrOt2ULc9y/Zx7FPcF73+9/81PR3jJjj9W9I5HmduMmLiuNrbxj7RsVpfz7Fq9Zw6eCuTZyx1tGOMVcmWmI/Vn1p7F9HOH+8+7NnrnyRM6+pimttnYmPD8zHMx5aRPhfLea46/CbTaa1mPT1nfcB7x9aHIpf1v2FeKdY63PnlcU6m49mZFON6usPG3i7Le360tz22zjb8aVzcqFI26yuUxbOLbuTt1u+exL8Nj2/exHtiP8ytb757t2sMY+R7i3MVPtux16WyYNSnW9eO0JvHWNXXtN8kVxTuZ9vJipkiHT1p9wffHrTyM/fGT7JxeK82waGG0/Jp9Fb5Z8J2M/T/jbxEVmbfKpira1Zy79A/3eexPTt+i9Xd8z3PaXSePGxrtVta3Pz/YPXGHb/wBHj29RmZlyNdprLMa+T9Ny7tLli3SFMS9C3api3NKfxG/wT/TH3Ofb/V326V1e0O/sk3z7Gv5fk8NzeWfzrzs4sVLfYN/LP5323Xx/Kz5ZvbdwZMua25iy96A+8DuP06+R2v39OXleErEUx5Ovm29OseERjtaY+fgrHh8nJbzUrERhvWtIxWq+6u7W677r4VqOw+rOX6bm3Dd5arPA3ekyo5GPW5ClPzOBmWa0pdxcqxWvkyMTJhC9an4wuQjKngpuerfo76neg/fu96Zer/CbXAc7x9umbV2sc0v5Z6+TLitEzjz6+WI82HYwXyYM1Ol8WS9ZiUs3a3dnbne3CYe4u1dzFvaWeOtMuK3WOsfGto8LUyVnwvjvFb0nwtWJ8HYTGLsYDFv1r9Ky9QnpW7u6nx8WOZuuQ8I2GbxTHparcnc5jxmcOUcQtW/LXzR97scPGsylHxrSE5eyVK1jXb72FevVfbR7wOwPWTZzTg0eM5XDi5C/m8sRxm9FtDkrW6+Fvl6WznyVrbpE3pX86sxFq4p9bOyf/UT0q5ztPFTz5tjWvbBHTrM7OGYz68R9MebNjpWZj6Jnwn4TAB7Y1rGVKxlGtaSjWlaVpWlfCtK0r/CtHpJVtW9YtWYmJjrEx8Jj8sK+1qzE9Jfy/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf3CE7k4W7cJXJ3JRhCEI1lOc5V8sYQjH21rWvspSntrV+eTJjw47ZctorWsTMzM9IiI8ZmZnwiIjxmZ+D+61m8xWsdZnwiI+l9Az0d9K2vTz6Y+l+o/y0cTZcV4Nq5cmhCnsnzLe0lyLmdzx/jWktpl5fk8a1rSHlp/ClHmu+9/15ze5j3Zd+etfzfnavMcrsRoTP0cZqdNLi69PhE14/X1vN0iIm/mt8ZlYP8ARzsqnp36YcJ2hNfLk1Nanzo//ScvXNsz/wC3PkydP4OkfQyWapsmuqe5u7OrvT7wLa9ldu8v1fDeJamlITzthcnPK2OdO3K5j6fSazHpPIzs29SE62cTFtzuSpGUvL5ISlHMnoV6B+rvuV9RdP0q9FeEz87zW7PWMWGIjHhxRNa32dvPea4dTVxTavzNjYvjxVm1a+ab3pW3Ue9O9+1/T3gcvc3eG5TS08Ph5rz+de0xM1x4qR1vly26T5cdK2tMRM9OkTMSS+vT7sPaXqlubfrrrH9W6q6IuzvYd7VY+Z+X5l2Bg18bXn5vscCdY2sS7HxrXTYtyVnwrWORdyvCFYXQ/wAOn8Gv0i9oNNL1P9W/s3ePqJSKZKbF8fn4zhsv8bpxWDNWLZNjHbpEcnsUrn61i2th0+t4vEZ69+7Tur1Vtm7c7W+ZxPAzM1mkW6bO3X4ddm9J6Vx2j/5fHM08emS+XpHTUUmraggP69sa0lGtYyjWlYypWtK0rSvjStK0/hWj+bVres1tETEx0mJ+Ex+SStpiesN73oK+8nzHqSum6s9UmVuOwusbVLGu1PZMKXtr2BwfGjClnHt7qM6yu7zXWqUp5qyrXOtQ81YSyqRt49K7v4jH4GXY/rRG/wCr/tExa3bPdd5vm2eDny6/D8reZm151Zjpj4rdyTPhERHH5r+WMlNSbZNmd9fQP3m8z2jODtX1Utk5HjI6Ux7njk29aPCI+b/ZbOGv09euekdfLOXpXGqa4Pzrh3ZfFNJzrgHJdNy/iHI8KGw0nIdBnWdhrNhjSlWE62sixWtKTtzpK1etTpSdu5GVu5GM4yjSoN6genve/pT3lyHp76kcVs8JzfF5Zw7WluYrYc+HJERMRalojrW9Zrkx5K+bHlx2plxWvjvW0ypcFznDdy8Tg53t/Zx7mns18+LNitF6Xr8PCY+mJia2rPS1bRNbRFomI5W6U5hrT+7V0nLun0S9mVwMT85yLqqeB3BoKRhSU4Q4bC7HldY1p7fZosnaypGPj5pxhTwr7ErP4MPr7X0H9/faccjn+RxneEZu2tyZnpEzyc454/r9H/73wcfE2n+LS156x4tZPdx2T/nt6Icp9np59niZryGL8sfZ/N8/+H/4W+eYiPjMQiGX+UHYAAAAAAAAAAAAAADJz0v+qPmfpd5xHk2i4/w/nPHNjPGtcs4Bz3j+r3/HuR4GPPx8LFzYWL17X5kaSl7jPw6xnGvhG5G9Z81mep3u49onYvu59P57T7i5Lku3uV1YyW47mOI3NjT3dLNeOn59cOXHj3da0xHzdTZi2O0dbYrYM/kz0yh6W+qfNelnOfemhr6+/rZJrGxqbWKmXDmpE/RN62thyR4+XLj6Wj4Wi9OtJrs9HvqH9FXrM4xTO4B1/wBZ6PnmtwYZPLOq+Q8O4da5doJU8tvIy8O3HFjTZa2lyUY29liRrD8UI34Y96XuaUpve77ZPfn7Fe7Pu/1J7k5zkO3dvLanHdwaXJ8nbjdyPzppjyWnPM6O9NKza+jszGT8zJbXvs4KfPtL56O+onon60cX9o7e4/TwchirE7Gjm19eNjD8Im1Y8kRmw9ZiIzY4mvjWMkY7z5IzS+i/T3/xN1n8i8X/APaNDf8A129bv9Muc/ytv/4wzb/mV2b/APSdP+a4P7w+i/T3/wATdZ/IvF//AGh/67et3+mXOf5W3/8AGD/Mrs3/AOk6f81wf3h9F+nv/ibrP5F4v/7Q/wDXb1u/0y5z/K2//jB/mV2b/wDSdP8AmuD+8Pov09/8TdZ/IvF//aH/AK7et3+mXOf5W3/8YP8AMrs3/wCk6f8ANcH94fRfp7/4m6z+ReL/APtD/wBdvW7/AEy5z/K2/wD4wf5ldm//AEnT/muD+8Pov09/8TdZ/IvF/wD2h/67et3+mXOf5W3/APGD/Mrs3/6Tp/zXB/eObabR6Tjmusajj2o1eh1OLW7LH1elwMTV6/Glfu1yb9bGDhQt24eec5Tn5Y08ZVrWvtrWrofOc/zvc/J5OZ7l3c/I7mWKxfPs5smfNeKVilIvly2ve3lpWtK9bT5a1isdIiIc1p6Olx+vXT4/DTBir18tMdK0pHWZmelaxFY6zMzPSPGZmfi9q4V9gAADri5051FfuXL17qvre9ev3J3bt27wfjNy7du3Jeedy5OeLWta1rWta1rWta1qypi9cPWrXxVwa/eHN0pSIrWteV34rWsR0itYjPERERHSIjwiPCHWZ7N7QtM5L8VpzMz1mZ1sEzMz8ZmfJ4zL8/ov09/8TdZ/IvF//aP6/wDXb1u/0y5z/K2//jB/mV2b/wDSdP8AmuD+8Pov09/8TdZ/IvF//aH/AK7et3+mXOf5W3/8YP8AMrs3/wCk6f8ANcH94fRfp7/4m6z+ReL/APtD/wBdvW7/AEy5z/K2/wD4wf5ldm//AEnT/muD+8Pov09/8TdZ/IvF/wD2h/67et3+mXOf5W3/APGD/Mrs3/6Tp/zXB/eH0X6e/wDibrP5F4v/AO0P/Xb1u/0y5z/K2/8A4wf5ldm//SdP+a4P7x132ngelfpLhO37G7V4v03wjhujtebN3W64bxaxbndrCU7GBr8WOJK9l5l/y1jjYeLbuX70vw2rcpexk/0g5H3f+vnf2l6YejvL9zdwc5yFumLV1eT5C9orExF82a87EYtfWxeaLZ9nYvj18FPz8uSlfF1runD6VdkcJm7i7s1eO0dLBHW2TLr4Ijr49KUiMc2yZLdOlMdIte8+FazPglL9eH3G9N39c2vW3p96t4j1N09W5dxM3f2eGcY1vY3YGP8AzZ/n87X2K11OuufyYOHereuw8fzN+sLksWFxf8Oz8Lvnfbhj0/VT3K938j3n3vEVyYdO3J7+fhOHv8Y+Tiy5Yjkd2n07ezjjBhv0+y68ZMddvJFB69e5DS9QLZe2vTzitfiOG6zW+WNfBTc26/T57Vr/AM3wz+qx2894/wALkmtpxV1OplmpQAAAAAAAAAAAAAACgr7BnScN72j2935tMPz4vAOM4HAOLXr0K1ty5Hza/LYb3Mwpx/hewtfgwx7nmrSnk2HspKtfGFan+seevl+3fSPsn24cRn8ubuTezcxyFaz+dGlxdIw6mLLE/wDF7W5t3zU6RM/M43xmsREXkK9gXY8b/dPMd/7VOtOPw01MEz8PnbMzfLav91jw4opPX+x2PhP0VNqgaVUBpH9en3hOAdDU3PWHp2uaXs/uC1+Y1225P7ymw6968yqRrC77zJxZ0juNnZlXwph49ymPanSv5m9KdueLOfj8Of8ABD9SfcXOj6ue5qu12l2RfyZtfQ8s4eZ5nH1i1fLTJXrxujkjxnZzU+05scx9lw1pkpuU0e9e/eL2/wBgxm7X9O5xcpzEdaXz9fPqalvhPWaz02M1Z/4uk/Lpb/C3mazitKZ2P2Xz/t7mO67A7N5ZvObcy3+RLJ2u/wB/mTy8y9Wlf9DjY8a+FvHxrNK+7xsTHhCxYt0jbs24W4xjS4z6W+lPpv6JdjaPpr6TcLq8BwXG0imvp6eKMeOv9te8+N82fLP5+fYzWyZ8+SbZc2TJkta0xP8Acnc/cHeHMZu4e6NvLvbuxPW+XLbzWn8lY+ilKx4Ux0itKV6VpWtYiHBWQXAgMpvSv6w+7/SBzWPLepuSVta3Ov49eWcE3Fb+bwrmeJjV/Dj7zUQnHwuwjWVLGdjTtZNnxrS3dpCU4T1C94Hsf9APe12FPZvrNxcX29el447l9byYuU4vJf431Nma2647WiJy6meuXVz9KzkwzemO9Mq+lXrJ3z6Pc1HL9o7MxiyTHz9XJ1trbNY+jLj6x0tEdfLlpNctOsxW/lm1ZsH9FX3DOkvWhorWLx3LpwztjX4EMrk/VG+zbMtxje6jSOXsuMZ3hbhttdSX/wDkWLcbtqlY/mbFisoUlSH9+f4Zvr77Ee4r7fdGCed7N2c049DuHTxWjWyeaf5PBv4ut7cduzX/AInLe+LLaLfZdjYil5rMT6J+4jsf1p0Ixcbf7Fy2Onmz6GW0fMr0/jXw26RGxhif7OsRasdPm48czHXPhHE2BAQb/cY6Sl0J6yO7eF2MP8nx7bcqyOf8PhCFIYlOMc+//J8LDwKfx9zgXsi/rKePt8caXjWX86voq/hfevlPcd7GuwO+9rP8/ktLj6cPyUzPXJ9v4f8A5hly5vo+Zt48OHfnp4eXarMRX+LWBH3HdkT2B6zc5wuKnk182edvX6eFfkbf8vWtP7nFa98MdfHrinxn4zhE39YOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdn21+lKd8etDpTiebhUzeO8f5FTsblkLtul7E/QOv7deSUxc+3WlfGzm5tnD106eHhWuRSlfCla1pHj+Kp6939u/sR797x0c/yOT5PS+5OOmtvLk+18xb7D8zDbw6ZdXVy7O7WevWPs0zHWYiJzz7aOyY799aOE4rPTz6+vm+2bHWOtflakfO8t4+muXJXHhn/wDKLuXndp5muD1yfcr6Z9GmtyuPe9x+xe7srFjPUdYabYW7ctRHIsxvY2157tbUbsdXi+ScLlrHlCWXk0lGtmzSzKeRalL/AA+/wqvXb3z8th7m8l+1+wMOSY2ee2sMzGz5LTXJr8Rr2nHO/seatqZM0Wrp6tq3jPn+dWmtl1q9c/ct2V6MatuO6xyXOXr1x6OO8R8vrHWuTayRFvkU6TFq0mJy5ImPJTyTOSsgPqR9UndHqu53d573Hyu/usu17+xoOP4cZYPE+Iay7Ok/0vjGijKtvHt1pGFLt6VZ379YxnkXrtynmXbPax7QvQj2cendPTr0O4amhhv5Lbm5lmM3I8lnrEx9o39uYi+a/W1px4qxTW14vamtgw458iHv1K9U+9fVjnp5/vPbnPeOsYsVfzMGvSZ/iYMUT0pHhHmtPXJkmInJe9vFju2bY5AAAAZmekD1zd4+jTlddt11uP1Xhe1zLN/mPWG+vXr/ABHk1uHlhPJt2aeMtfsKW40ja2WHSN2lIxhdpesUlZlov72vw+Pb776ezo4j1P0fsfPaeK1ON57TrWnJaFp6zWk28K7mn57TbJo7M2xT5r3wzg2Jrnrmj0e9de+fRjlvtPbmb52jltE7GllmZ188eETMR4zizdI6VzY+lvCIvF6daTYZ6P8A109G+sziktl13uP0fm+rxIZHL+reQX8axy/jcqSjZu5VqzCtI7DXVuShG1ssOkrVfPCF6li/WViNIH3t/h6+4L2K94fdPqdo/buA28s043n9Ol78bvR0tauO15ibae7FK2nJo7Plyx5Ml8FtjXiuxeY30d9duxfWjivtXbmb5O9irE7GjlmI2MPwibRHwy4esxFc2PrXxrF4x5JnHGX201mv3Ot2Wm2uJY2Gr22Dl6zZYOVCl3Gzdfn48sXMxMi3L2St3LcpQnGv8aVrRpNxPLclwPK63OcNnvrbellx58GbHPlyYs2G8ZMWSlo8a3petbVmPhMRLMGzrYN3Wyae3SMmLNW1L0tHWtqWia2rMfTFomYmPyS+eX6gepdl0R3f2p09ta3Z5HXvON/xvHyrtPLPY6rCzp/oW4jSlI/hzcGWPlw8Y0r5blPGlP4PTP8AbV6z8X7iPb/2f638R5a4+5uK096+OvjGDYy4q/a9b4z+dq7UZte3jMebFPSZjxV3fUPtHZ7D745bs7a6zbjtnLhi0/2eOtp+Vk+jwyYppkjwjwtHhDp1nB0wAAAAAAAAAAAAAAByfhvM+W9ecn03M+C8j3HEuWcezbew0nIdBn39btdbmW/GlLmNl41YypStK1hONa1jOFZQnSUZVpXqXfPYnZnqb2lvdieoXF63NcNyeK2Ha09zDTPr58dvjW+PJE1npMRalo6WpeK3pNb1raOV4XmuW7d5TDzfA7OTU29a0XxZsV5pkpaPprasxPj8Jj4TEzExMTMKg/QX953jPY36L1V6ssrVcK53c/L67S9t2LVvWcI5Zk18uPYt8vxrdKW9Ln3a/illw8uvuSrKtaYNKQt3Kj/4i34E3dvpd9v9YfZpi2Of7dr58+125e05+V46n5172428/n8pp44/Nrr283J4qxSInkJnJkxyjegfvS4vuT5Hanq3amjvz0pj5CIimtsT4REbFY/N1stvjOSOmvaev+A6Vrbfvau2si1bvWblu9ZvW4XLV23ONy3dt3I0nC5bnCtY1pWNaVpWla0rSquDmw5dfLbBnrNL0ma2raJi1bRPSa2iekxMTHSYnxifCW/9L1vWL0mJiY6xMeMTE/CYn6Yl+j8H6gAAAAAAAAAAAANe/ra+430l6MdPe1W1yYc87jzsL3/H+p9Dn2YbG1S9Y97ibTmmyjS7HT4EvNCsJ3bc8i/SvjjY96Ebs7UmPsG/C99fPfbzePl+GxT252Pr5fJudxbmG04LeW3lya/F4JnHbktyvS0WrjvTW15r029rBe2LHl129b/cf2R6LadtXatG/wAzevXFoYrxF46x1rk2b9LRr4p8Ok2i2TJE9cWO8Ra1ZAfVF6ve7/V3zWvL+3eUXcvDwrmR/VbhWprfweFcNxMitKTxuP6StycY3blIwpkZt+VzJv8AljS7dlGFuMLtftG9k3oB7Kuwo7L9FuIrhz7FafeHK7EUy8pyeSnXpfc2vLWZx0mbTh1cVcWrr+a84cNLXyWvD36per/fHrBzf3x3ftTelJn5Gtj611tas/GMWLrMeaYiPPktNst+kee8xWsRjA22YtAAAAAAAAAAAAAAAAXE/aj6Th0n6I+p8fJxPyvIOzMbI7f5LKdqlm7fyOcxt5HHpXYe2VJW9Fa1ViVJ18fNCXsj4+Wnn5/jG+veT189/XeW1q5/ncb2pkp23oxFvNWtOJm9N3yz/FmuTlsnIZazWOnlyV8bdPPac32odkV7I9EOIx5aeTY5OLchm8Okzba6Ww9Y+PWurXBWevj1rPhHwjN7s3tLr3pnhe47D7R5bp+E8M0Vml7Z7zd5FbWPbrPxpZxcaxajO9k5N2v4LGLjW7l67PwhbtzlWlGgfpP6Repnrp33o+mfpHwuzz/O8jby4NTVp5r26fxsmS1priwYMcfnZtjPfHgw063y5KUiZZv7n7p7d7L4XN3D3TuY9HS1463y5Z6RH5K1iOtr3t8KY6Ra958K1mfBKL69vu/dheoOm66u6BluOrul79MnWbbe+9jh9g9kYM61t3Y5+VjVrXU6y9H8P6fi3a3r0KyplX627s8S3cd/Dl/BK9M/bXOh6u+5GNbu/vvHNM+tqeX5nDcJliItWcOO8RHI7+K3532zYxxgwZIrOnrxlw03ckT3r97wu4vUP5/avp9OTi+Ft5qZMvXy7e5X4T5rV/8Ah8Fo8PlUt5716xlyTW84a6Uk9bSQAAAB7rjvI9/xHe6nk/Fd3teOcj0Wbj7PS77R5+Vqtvqs/Fl7zHzdfsMGcLtq5CtPGM4SpWjge5+2O2+9u3tztLvDQ1+U4vkcV8G1qbeHHsa2xhyR5b4s2HLW2PJjtHhNb1mJ/I+/juR5Dh9/DynFZ762zgvF8eXFe1MmO9Z6xal6zFq2ifhMTEqbfQR96PU8rrpOpfWBm4HHuSTrY1+i7whZx9fxreXp1pZxsbsXX4kIWdZkylWlP1XHjHClSvjkW8OluV+7U5/Eb/Ah5ns6N/1n9keDNyfFV82bb7Um1829qVjra9+FzZLWy7+CK+P3fmtbfp5emtl3rZKYMMnfoD71dTlpwdpesV6a21PSmLk4iKYcs/CK7dKxFcF5n/j6RGCev8pXDFZvehbFysbOxsfNwsixl4eXYtZWJl4t23kY2TjZFulzHyMfIt1lCcJwlSUJxrWlaVpWla0qrObeptaG1l0d7FfDsYb2x5MeSs0vjvSZrel6WiLVvW0TW1bRE1mJiYiYSH4suLPirlxWi9LxFq2rMTW1ZjrExMeExMeMTHhMeMJv/v8AvSkrmJ0f6h9bh2/9VvbTqHlmZC3Wt6VvJpe5dwaNycP/AKduUN7GspeykrkKU9svBaT/AKtx691xbvqB7ZeUzz/LV1+5OOxTb82LY5x8by0xE/2d624mYivjNcWS0x0r1RtfiB9jzfDwXqLrUj8yb8fsW6ePS3m2NXr/AARMbUTM/TasfSmiWtEZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABS59hbqfXca4n3/6nuWXMLT6yVcLrTScg2t+xq8DW6LQY8OZdh52ZsM2UbccSs7ml82RWcbcK412kpVrGvkql/wBYw9ZOT7q7z9N/aX2bXLvbcRl53a09al8+XPt7l7cZwuHHhxRa9tiK05Ty4orbLkrt4ZpWItHzJNfYL2lrcZxHcHqhys1w4p8uliy5JilaYsURs7d7Xt0iMczOt1t1itZxX6zPSfL43r3+9N4U3fU3o4z6V8aZGr5B3texq+NPbWxk43WOvzYU9vslCm7ybdfZWs8K14+5zH1/hy/gOTM6HrN749aY6TTY0+0q5I8fCL4789mxW/4LTxeC8T1iKb+Xp8/Rn8fX33r9Pn9o+jWT+2pl5Sa/+y1dKlo/4Y+03j8s4a/xMyb3abTa7zZ7DdbvY5+43G3zcnZbXbbTMyNhtNnsc29LJzM/YZ+XKd29evXJSuXbt2dZTlWspVrWtarS/EcPxHbvE63BcBq4dHR0sWPBr6+viphwYMOKsUxYcOHHWuPFix0rFMeOla0pWIrWIiIhGzt7e1v7WTd3cts2fNa18mTJab3ve0zNr3vaZta1pmZtaZmZmZmZ6vXOSfMAAAAAA5bwfnPMetOV6TnPAOS7jiHL+N5sNhpORaHOva/Z6/KtxrCcrORYrTxhOEpWr1qfjC7blK3cjKEpRr031A9Pex/Vbs3kPT31I4rW5vhOUxTh2tLcxVzYM2OZiYi1LRPS1LRXJjyV8uTFkrTLitTJSto5fgud5ntnlsHPdv7OTT3Na3nxZsVppelvh4TH0TEzW1Z61tWZraJrMxNSnoJ+8rxDtj9D6q9U2TqOAdl3qY+s0/ZsaWNXwLnOXX/RWYb+EYxsaLYXfCnmnKUcC7OsvdyxKytY8qhP4jX4GHe3oz94esPtCxbHcnalPPn2eCmbZ+X4nH/GtOnMzbLy2nj8elYi3I4McV+ZXciubarKh6B+83h+7YwdqeqlsfH8nPlpj3fCmrtW+EfNjwrq5rfTMzGve3XyzhmaY5wQ++90nXiHqI4L3frcev6N3PwuGs22VCFZ258y66hZ1ORcu34eylLunyNRCzGXhWXuLtY1lSNaQkU/q7fr5XvX2x9w+gHK5f8An3YnKTn1scz0mOM5qcuzStaT4z8vksPJWy2jrFftGGtorNom+Bffn2RPD+ouh3zrV/kea1opktEdY+06flxzMz8I82vfXisT4z8u8xMxE9NFqwo0SAAAAAAAAAAAAAAAAAbYPQj91btz0n3dTwDnctj2r0LauWcaPGM3Lpc5RwPE81ITv8A2+ZL2WLcPxfo2VP8AK1rT/QSxJzu3Jw2fiI/g7+i/vJxbvqT6dRg7O9RbxbJO/ixzGhy+TpMxTmNbFHjmvbw+88FPtdYn/nFd2mPFiptp6De67u/0mvi7e57z8twETFYwWt1z6tfCJnUyW/sIjx+z3n5U9P5OcM2taa4Oi+/+pPUjwTB7G6d5lrOXccy/d2cumLc9zttDtPdRvXtHyXS3vDIwc23GVJSsZEI1lGsblus7U4XJUtvcH7bvWj2s+omz6XeuHB5+E5XB1tj+ZHm1tzB5prXb0dmvXDt6t5iYrmw2tFbxbFkjHmx5MdJduxfUHtL1K4DH3H2bu03Na/hbyz0yYr9ImcWbHP5+LJXrHWt4jrExavmpatp7lYJd1AAAAAAAAAAeBstprdJr8/cbjY4Oo1Gqw8jP2m22eXj4Gu12Bh2pX8vPzs7KlG3Zs2rcZTuXbkqRjGlayrSlHKcVxPK89yevwnB62Xd3dzLTDg18GO+bPnzZLRTHiw4scWyZMmS8xWlKVta9pitYmZiHy7O1raWvk3N3JTDhxVm973tFKUpWOtrXtaYrWtYiZm0zEREdZnonL9en3p8fEpuup/RxmW8rL/1jWch70ysWNzDsfg93kWOsNflUrS9cpXxh+s5lr3dPCVcSxcpKzmRtB/hz/gNbO9Oj6ye+TBbBg/Mz6faWPJNct/GLUvz2bHPXFTp+d92a1/m260jd2MU1z6N44fXz3sY8Pzu0vRq8Xv40zcpavWtfomNGlv40/R9pyV8sdJnDS3WmaJst1u9zyTb7Hf8AIdrsd7vdxmZGx2252+blbHabPYZVyt7Kzc/Oy5Tu3btydayncuSrWta+NarUfA8DwXavC6vbfbOng47j9HFTBrautipg18GHHWK48WHDjrXHjx0rEVrSlYrWI6RCNPe3t3ktzLyHI5r58+a03yZMlpve97T1ta97TNrWmfGZmZmZeqcw+QAAAAAAAAAAAAAAAB3f6bOo83vnvzqPp7Dt5E48/wCd6DRbO5i+NL+Fx25m0yOUbSFY0rWlMPW28rKlXwr4Ut1q1/8AdT616Ptz9uHevrfu3pWe2+I3NvBGTp5Mu7GKcehrzEzHX7TvX19eI6x1tliPpd59NOz83f3f/D9n4YmfvDaxYrzX41w+aLZ7/wD5vDGS8/wVWc+sT19dCehviWLp9vcs8l7ElprVvhHTXGMrHsbaeBj435bWZe9yvLdtabUx8kbccm/bncnGkvyuPk1t3Iwooex/8OD3G/iC955ua4StuK7YjZtble59/He+vGW9/Pnx6mPzUvyfIT5rXnBivTFjtav2zZ1Yy47Xmj9Y/X/sH0L4mmnuzGzyU44jW47BaIyTWI8tLZbdJjWwR0iIvaJtaIn5WPLNbREgHqq9Y/eHrA5pXlXbXI6y1WDevf1U4Fpa5GDwjh2Ld/DW1ptRO5Pz3509l/Pyp3cm7TwjK77uFu3C7d7PvY57fvZH2JHaHo1xcRu7Fa/ePMbXky8ryeSvj5tnZilYphrPji1NeuHUw+NqYfm3y5ckPXqt6y98+sPNfendmz1xY5n5Gri611tes/RjxzM9bzH8bLeb5b+ETfyxWtcVm4LFAAAAAAADaX6EvukdvekPJ1vCeU/n+0uhpZFuGRwnYZvjvuHY92Xhk53XG3y5VpYpHxpdlqciVcO7WkqQ/KXb08mkQn4h/wCEN6J+9bV2u/uz/k9oeosUmacrhxf8z5O9Y/Mxc3rY465fN0+XHI4YjewxNZyRu4cOPUbV+g/um7x9IMuLg+V8/K8B1iJ1r2/ldaJ+NtPJb+L0/jTgvPybzExX5N72yqJ/URuupPuLegPuOfR3JcDnEcriV7kmgxMe1ct8k0XPuDyt8v1nF9xpL/lycHYZM8SuB5bkKUnav1uWpXbFyM51iPbLwXrP+GD+I/2PT3AcVm7f+TyNdHcyXtFtHb4flovxuff1tqvXBt6eCux9r81LebHl1ox5q4djHfHSRf1F3e0vcb6AczPY2zXe8+vObFWImM2Lb1emxTBkxT0viy3nH8rpaOlq5PNWb47Ra0Rq/kg9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRvKPVH2vyHorg3ptwdvTi3TPCYZeXe4hx6t3Dt805Lst1e5BseUc7zvNW9sr/AOZveGJjXZUxcW3asUtWaXbdb09Xe0faJ6Odte4XuH3UcjpTzHffPzjx15Ld8uWeL0cGri0sGhxGHpGLRxfIxf8AOM+Os7e3lzbE5s84ssYKZI5T1T7r5HsXQ9NMGb7JwujFrTr4etY2c18ts18+1br5s1vPb+TpaflYq0xxSkWrN5xybRMbgAAAAAAAAAMjeReqHtjm3Qum9O3PN3LmfBuHcn1/K+u8vfSvZXJOCZOHrsnT5Wj0+7nKtyeoyMbKlGuuyPPCzO1YljSswhO3d1f7Y9o3o12F7jN/3O+nWhHA9wc5x+bj+axacVx6PL0yZsGzTb2dWIilOSw59esxu4fJfPjy7FNque+SmXFkjkfVLu3m+wMHpzz2ed3Q0s9M+pbLM2zatq0vjnFjyzPmnXvS8x8m/mrS1cc4ppFbVtjk2gY3AAAAAAAAAAAAAAAAAAd6+n71H9w+mDnmJ2J01y/N4zurVLePtMH25XHuUauFz3k9JynR3a0sZuLOvjWkblKTtT8Ltidq9GFyOvfuU9rfoh7tfTrN6YeufCYuW0LTa+vl/wAHu6GxMdI2uP26x83V2K+ETNJnHmp1w7GPNgtfFbvnp76k94+l3P07j7M3LauaOkZK/wAbDnp16ziz4p/NyUn6In86k/n47UvEWiun0KfdG6f9XuNreE8krhdX98fl6Qv8G2GZX9F5fesWfNlZ3Xm3yfD8x408bktXkSpmWo+byUybVqeSpU/iG/hE+t3so2trv7taMvd3p15+tOWw4v8AnXG1vbpjw81rY+vyenhSN/DWdHNbyeedTNmpqpe/Qj3TdnesGPHwfI+Xiuf6eOre38nsTEfnX1Mlv4/9tOC8/OpHXp82lLZG0dEO2oAAAAAAAAY5+pT1V9K+k7g17nPcfLLGotXo5EOPcZ19LefzDmOwsQ8/6ZxnQxlGd+XmrCN3IuVt41jzxlkX7MK0k2j9q3s99eveV6g09PvQ3hr716TSd3ezdcPG8Zhvbp8/f3JrNMVekWtTDSMm1seS9dXXzXrNWNvUv1W7I9JeCnne8duMNZiYw4a9L7GxeI/iYMXWJtPwi15muLH1icl6RPVIP64vuWd1esjZZfHaXsjrjpLHy4z1HWGlz5z/AFb8vc8+Ptee7izG1LZ5Na0jchj1jHEsVjCtqzW9GWRcuyfh+/hT+g/sa4rD3PbHTunv/LjmNnntrDEfZvPHS+vxGta2Suhg6TNLZ4tbd2YteM2eMNqa2KH31z9zPe3rLsX42LTxvB1t1x6WO/X5nSesX2skRWc9+vSYp0jDjmI8lPPE5La3kpbWsAAAAAAAAAAAAAAAAAB3j0D37zX02812PZPXFrU4/Pv6pb/jPFeT7PChsb/CMzkkLeBseUaPByPNjTz44H5zCsfm7V21GOROcrU5RjRr97kfbf2J7qOw9X0r9Ur7GTtz7x09/kNHBlnBTlcWjN82HQ28tOmampbc+zbWX7PkxZr21aY65aVvaXe/T71A5v005vJ3L21GOvIfZ8uDBmvWLzrWzRFL58VZ60nLGL5mOvzK2pEZZtNZmIdV8l5NyLmO+23KuW7za8l5Lvs6/s91vt5nZWz2202GTPz38vPz8uU7l2cv5ZSlX2UpT+FKMwdqdqdsdjduaXaHZnH6/FcTx2KmDV1NTFTBr6+GkdKY8OHHWtKUrH0ViPHrM+MzLqnJ8nyPNchm5bls99nZ2LTfLly2m+TJe3xta1pmbTP5Zl6J2Fx4AAAAAAAADu/oP1E9vembnmH2L03zDO4rvrHurOwxrflytHyXWQu0u3dJybS3/GxmYtzwr4wuR89utfeWZ2r0YXI4B9xvtj9Evdh6dZ/TH1y4TFzHHZPNbDeeuPb0c81mtdrQ2qdMutsU/tqT5MlY+Vnx5sNr4rd47B9Ru7/TLnqdx9mbl9TYr0i8fxsWanXrOLNjn83Jjn8kx1rP51LVvEWjrDle6x+Scp5LyLC0uBxzE3+/3G6xePaqV+er0WPtNhdzrOl1ssqU7tbGLG5SxZrcnKVYRp5q1r41ZZ7N4DZ7V7Q4rtjd383KZuN09bVybmxFI2Nu+vhpittZ4x1rjjNntScuWKVrTz3t5axXpDrPLbuPk+V2eQxYaa1NjLkyVw4+vkxRkvNox080zbyUifLXrMz0iOszLj7srjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5OLlZOFk42bhZORi5mLkWsrEy8W7PHycbJx50u2MjHv2qxnCcJxpKE41pWlaUrSvi+bb1NXf1cujvYqZ8GelseTHkrF6ZKXia3pelomtqWrM1tW0TFomYmJiX64suXDlrlxWml6TFq2rMxatonrExMeMTE+MTHjE+MKcvtKfcn7r7i5/ofS53Frc3sq9LQbvYcf7a99ahyXRazjGplm1xewa3PCmysXPJaxMfZU/wBb/MXbVMn8zS7K/ZqY/jP/AIVvoL6Hem/I+7n0P2sXauONzVwbnbnltOjt59/Yri+Zw3l6zpZaebJs5tGf+ZfZsOWdT7JOGmvnk/8AaR7lu9u8u4MHpZ3litydpxZb4uQ6x87FTBjm3l2+vT51bdK46Zo/lvmXrGX5vnnJSipWESNgAAAAANe33IPWbyT0U9I63nXEeBU5hyXmXJa8I0Gz212dviHFNxkafJ2+NsOR2caUMnKrK3i3q42FZnapdrbuVnkWqQpG5Jj+Fr7Fu1vfr6/7Xp73p3FPCcVwej967mDXrFuS5DWps4NbJg0bZK2wa8VvsYoz7WWuacMZMUU1s05Jti139yfrPyXon2Pi57iNCNza3c/2bFfJPTXwZJx3yVvmisxe/WKW8mKs08/lt1yV8sRaLTuDufs7vvnW07H7b5htua8u21aQu7HaXo+6wsO3Os8bV6fX2KQsYWHZ80vc4mLbhahWsq0j5pSrW+J6JehHpL7cvT3T9LfRbg9bgeF0o61w4K/nZcsxEX2NnNabZtrZy+WPmbGe+TLfpWJt5a1iIUu8e9e6O/8Ancvcvd+5k3dzN8b3nwrWOvTHjpHSmPHXrPlx0rWsdZmI6zMz1cy66qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUu/YC6UlbxO8PUPssO3/rV7V9Q8TzJ260vRt41LPLucxtzn/9O5KeijSUfZWVudK+2Pgql/1kf17rl3fT/wBsvF55/ka7HcnI4ot+bNsk5ON4mZiP7Ola8tMxbxiuXHaI6W6pNPw/Ox5ph531F2aR+fNOP17dPHpXy7G10/gmZ1YiY+mto+hSQqwpKwAAAAAGEX3Geko9+ejfu7hmPh/nORaji1/n3EIQhWWXXk3AKf1nw8PApXxp77Ps2MjWU83s8MmXjWP86m//AOF/6+X9uXvm7A772c/yOM3eQpw/JTM9Mf2DmP8AmGXLm+n5epkzYd+enj5tWsxFv4tsGe47sevf3oxznC46efYw4J29fp42+fqfy9a0/ustaXwx18OmWfGPjEG70U0CYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXu/b+6Tn0B6QOj+u83D/JcgpxHH5Xy2zO1WzlWuVc3vT5ZucLOpL8UruFczKa/wA1f/DYjSlKUpSlPOU/El9e8fuS97fqB6naGf5/GTyV+P460Wi2O3H8VWvHauXF08Ix7VNadzpH9lsWmZm0zMz7+33sm3p/6PcF23np5Nj7PGfYiY6WjPtTOxkrb8tsc5PldfyY4j4RDMhowzQAAAAAA/yUYzjWMqUlGVKxlGVKVjKNaeFaVpX+R/dbWpaLVmYmJ6xMfGJ/LD+ZiJjpKAD1rdK09Pfqo7t6nxsWuHpuPc32GZxWx7qluMOHcmhDlHELVvw8Yy91rszGsylHwpWcJeyNaVjT0k/YT69W9y/s/wCwPWTazRn3+T4rDi5C/m80zyejNtDkrW6+NfmbutnyVrbrMUvX860TFrV9vW3smvp36q852lip5MGvs3tgjp0iNbNEZ9eI+ifLhyUrMx9MT4R8IxabeMVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGW/oU6Rn6hfVl0l1jexPzekz+ZYW+5dCsYys/1O4fGXKuUWb850rCNMjEw7mJblOlaVu3bcfLKsqRrpd+Ib6/U9tHsz7/APVnFnjDv6/GZdPjZ6zFvvPkprx+hakVmLW+TsbNNi8VmJjFhyW81a1m1cvehHY8+onq1wfa96efBk2a5diOnh9m1+ufPE9fCPPjxzjiZ6x5r1jpMzETfc835YBAAfnOcLUJ3Lk427VuMpXLkpRhCMIR80pzlLwpSlKU8a1r7KUftjx5M2SuLFWbWtMRERHWZmfCIiI8ZmZ8IiPi/i1orE2tMRER1mZ+hp171+9R6aOoe39H1rxvX7ftvj+LsrmF2V2LwnOwL3H+LQrGtqNvilLnjHkN61c8J5kse/Zx4W6eFjIyb1Z2rU4Xt4/Ab913rZ6Jch6q91bOt2XyWbBGXg+F5XDmruchPWLTbkPL0tw2PJTrXWjNhz7N8k9djW1cEUy5dN++/ev6Zdnd4YO2eNx5OX16Xmu7ua16ThwfREYOvht2rPjkml6Y4r4Y8mW/WtdpnV3a3XfdfCtR2H1Zy/Tc24bvLVZ4G70mVHIx63IUp+ZwMyzWlLuLlWK18mRiZMIXrU/GFyEZU8EQvq36O+p3oP37vemXq/wm1wHO8fbpm1drHNL+Wevky4rRM48+vliPNh2MF8mDNTpfFkvWYltR2t3Z253twmHuLtXcxb2lnjrTLit1jrHxraPC1MlZ8L47xW9J8LVifB2Exi7GAAl7+/z0p+l856Y9QOswpUxeVaPZdYcry7UfLj29xxi/LkHE7uRXy08b+ViZmwtRlWVa1t4UaeFKQp424f6t769fe3p/357bOV2InLw+3g57j8dp63nW3qV0+QrSOvhi19jW0skxEREZd+1uszeekW34gHZH2bm+F9Qtak+XbxX0s9ojwjJhmcuCbf3WTHkzViev8XBEfQneWcUdIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRp9gTpCWZyPur1FbLF8cfSa7A6k4nkSpKVuey287PK+aXLfjTyxuY+PZ00Iyp4y8mTcj+Gla+er1/WRPX6NHtjsL2w8Vm6ZN/Nm7j5GkTETGDWjLx/FxP8AZWx5s2Xk7WrPSvn1MVvzrRHkkg/D+7H+dyPN+o2zT83BWnH68/R58k1z7P8ABFqUrrxE+M9Mto8InxpxVMkn4Dqjufu/q30+cE2vZHb3MdVw3imqjWNczYXazzNlm1hKVjUaLV49J5Gdm3qRr7rFxbU7laUlLy0hGUqZm9CvQD1e9ynqJp+lnorwexzvM7k9Yx4axGPBiiYi+zt7F5rg1NXH1j5mxsZMeKszWvmm9q1t1HvTvftb0+4HL3L3fuU0tTFH8a8/nXt06xjxUjrfLkt0ny46Vtaekz06RMxJL68/uwdp+qa7t+uusK7Xqvoa7K/h3dTj5VcfmnYGFXxtSuc42eBcrG1h3oV8f0bFnWzTxrTIu5fhCtu6F+HT+DZ6Qe0HDo+p/q3Gv3j6i0iuWuxfH5+L4bL4WivFYM1Itk2cdvD7z2K1z9YrbVw6XW8ZIi/Xv3Z91eqt83bna/n4ngJmazji3TZ26/DrtXpPSuO0f/LY5mnjMZL5vzfLqLTVNQmUnpY9YXd/pC5tDl3U3I7lrW5t6x/Wvgm4nkZnCOZYdmtPDH3umjOFKX4x8aY+fjyt5NilZUt3aQnchPUP3geyH0B97PYFuyvWXiovtYK3+7uX1opi5Xi8tv7PU2ZpaZxWnpObUzVy6mfpW2XDOTHiyY8q+lXrF3x6Pc5HL9o7PTHeY+fq5OttbZrH0ZccTH50R4Uy0muWnWYreK2tW1hPoq+4Z0l60NFaxeO5dOGdsa/Ahlcn6o32bZluMb3UaRy9lxjO8LcNtrqS/wD8ixbjdtUrH8zYsVlCkqQ3vz/DN9ffYj3Ffb7owTzvZuzmnHodw6eK0a2TzT/J4N/F1vbjt2a/8TlvfFltFvsuxsRS81mJ9E/cR2P606EYuNv9i5bHTzZ9DLaPmV6fxr4bdIjYwxP9nWItWOnzceOZjrnwjibAgNfP3ROlPrj6J+49Lh4P57kXB9Va7W4rGNPNftbPgNZbbaUxIU9s72Rp/wBUwrcKeNZVv0pGlZVpRJb+Eb69f7Pvv37G57d2Ps/GdwbFu3uQmfClsHMeXX1/mW+FceHkvsG1e8/m1rgmbTFYmWvHuk7J/wA+fRLmdLDj+Zs6NI38H5YvqdcmTyx9Nr6/z8dYjxmb9I8UMD0JUE4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF2f2z+kvoN6L+mOM5eL+V5FyjQ07M5XSdv3OR+udg1pyC1iZlv+S9hYFzB10/5fHHeeJ+K16/f7RXvu777t0svzeM4jc+4uO6W81PsnDddO2TFP049rbptbtP4NlPF7Zex/8AMH0W4XjM1fLsbWL7bseHSfm7f8rFbR/bYsU4sM//AJNnkjoZ9a3/AFx/cr6X9Guuy+Oe8sdjd35OJC7qesdNn0hXUUyrXvcXa8929qF2OsxqxlG7bx6xll5EZQras0sylkW5S/w/PwqfXf3z8ph7oil+1+wMWWa7PPbOGbfaJx28uTX4jWtbHbfz+aLUvmi1dLWtW8Zs856V1sutfrn7mOyvRjXvxnWOS5y1YnHo47dPl+aOtcm1kiLRgp06WinSc2SJrNKeSZyVkA9SHqi7n9VnOr3PO4uV5G7y7Vci1x/j+L7zC4nxDW5F2lyuq4vo4zlbx7X4YUuXZVnfv1hGV+7dnTzLt3tZ9ovoV7OfTynp16H8NTQw3iltzcydMvI8lnpXy/aN/bmsXzX8bTTHEU18EXtTWw4aTNUPPqT6p96erHPTz3eW3Oe8dYxYq9a4Nekz1+XgxdZikfDzWnrkv0icl7zHVjy2ZY6AAe647yPf8R3up5PxXd7XjnI9Fm4+z0u+0eflarb6rPxZe8x83X7DBnC7auQrTxjOEqVo4Huftjtvvbt7c7S7w0NflOL5HFfBtam3hx7GtsYckeW+LNhy1tjyY7R4TW9ZifyPv47keQ4ffw8pxWe+ts4LxfHlxXtTJjvWesWpesxaton4TExKm30Efej1PK66TqX1gZuBx7kk62Nfou8IWcfX8a3l6daWcbG7F1+JCFnWZMpVpT9Vx4xwpUr45FvDpblfu1OfxG/wIeZ7Ojf9Z/ZHgzcnxVfNm2+1JtfNvalY62vfhc2S1su/givj935rW36eXprZd62SmDDJ36A+9XU5acHaXrFemttT0pi5OIimHLPwiu3SsRXBeZ/4+kRgnr/KVwxWb3oWxcrGzsbHzcLIsZeHl2LWViZeLdt5GNk42Rbpcx8jHyLdZQnCcJUlCca1pWlaVpWtKqzm3qbWhtZdHexXw7GG9seTHkrNL470ma3peloi1b1tE1tW0RNZiYmImEh+LLiz4q5cVovS8RatqzE1tWY6xMTHhMTHjEx4THjD/cjHx8vHvYuVZs5OLk2buPk42Rajex8nHvRrbvWL9m5SsZwnGtYyjKlaVpWtK08H+a2zsaWxj3NPJbFlxWrel6Wmt6XrMWrelqzFq2raImtomJiYiYnq/wByY6ZqWxZaxatomLVmImJiY6TExPhMTHhMT4TD58Xqq6cv+n/1G9y9PXbFyxi8I53usDRUuynK7e4nnXqbjhuZclc/F45GpyMK/Xx8fbP+Nae2vpaezv1x1vcn7XuxvW7FkjJl5/iNXLtzWIiteRxVnW5PFWK+HTDyODaxR8PCnjFZ/NivP6r9mZPT71H5ns69ZrTR2slcXXr1nXtPzNa09fpvgvjt/wC34z8WPzZRj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZJekDpW56iPUz0x09W1cv67mHN9bHkkbUvLchw3SRnyLml61Kv8Jw1OJmSt+P8A4qUp/K1Z97frzT2y+0/vv1vi8Y9rhOKzzozaOtZ5PamulxdbR8ZrbkNnWrfp8KTafoZK9HuybeonqfwvZ01m2Lc2afO6fH7Pi65tmY/hjBjyTH8PRf8A7DY6fjenzNrtc7W6HQaPX5Gbn7HYZGLq9Pp9Vrset7Jy8zLya27GPj2LUKyncnKMIQpWta0pR5tfHcbzfdHN4OJ4jXz8jyPIZqYsOHDTJsbOzsZrxWmPFjpF8ubNlyWitKVra+S9oiIm0rBOxsafG6d9nbvTX18FZte97Vpjx46R1m1rTMVpStY6zMzFaxHWekQnA9e33p6//fOpfRxneylcnVcg73v43/8ABysfrDX5kf8A+q3Td5Vv/wDdPCtf+hmrSX4c34DfX7v9Z/fFr/2mxp9pUv8A+9jvz2bFb/8ADeeLwX/tab+b/D6KNv1996/+H7R9Gr/lx5eUmv8A7LRo0tH/AAx9pvH5ZwU/iZ03uz2Wy3Wxz9xudhnbbbbTMydhtNps8y/n7HY5+Zdlfy87PzsqUrl69dnKU7l25KspSrWsq1rXxWl+J4riuB4vX4PgtbFpaWniphwa+DHTDgwYcdYpjxYcWOK48ePHSIrSlK1rSsRWsRERCNna2tnd2cm5u5LZs2W03ve9pve97T1ta9rTNrWtMzM2mZmZnrM9Xr3IvmAAAAAbTPQj90nt30h5Wv4Tyr9Q7T6Glfhbv8J2GdT9e4ZYu3PDIzuu9rmeNLNI0rW5LU5Evyl2VK0hXEu3bmSiC/EQ/CG9Ffetq7Pf/Z3yez/UWKTavKYcP/NOUvWPzMPNa2LpOWbT+ZHI4a/bcNZrOSN3Fhx6rar0G90/d3pBlx8Hy3n5XgJmInWtf+V1omfG+nkt/FiPjOvefk3nr5Zw2vbIru6H9QvUXqW4HhdjdNcwwOWcfyaxxs61arLF3fHtpS3S5e0nJdLk0pfwsu34+Nbd2FIzh4XbMrlmcLkqU3uK9s3rX7U/UXY9L/XLg83Dcni63xWt0yau7r9Ziu1o7VOuHa179P4+O02x382HPTFnpkxUl87B9Q+0PUzgKdydm7lNvXt4WiPzcmG/TrOLNjnpfFkj8lo6Wjpek2pNbTOB9+/pWvHu4uqe+NbhVhruyOJZXC+R5Fm3WtqnKeCZNMjXZebd8PZdy9ZnWrFqnj7YYEvCn4a1raR/q5Pr3Xub0Q7x9u3K5/Ntdrcjj5XSpa3533fy1Jpnx4q/Tj1t7UyZsk9PDJyNesz5qxEbnv8AOyZ47vLie/NanTFyWvbWzTEeHz9WetLWn+2yYcta1/LXBP5JaBFkVH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbhftOc26V9N+17i9XPe3IMbUavgvGbHXfW2jtQpncp5jzTlsq7TeWOGaW3WM7+Vh6/Ds42RdnOFixb2MZX7luMqTjCB+Mt2D68+6Xh+xvZX7eOMvu7ncO9fmuc27TOLQ43i+Oj7PqX5TamLVw4Nnc2cufDjrW+xsZeLtXXxZb1nHbcf2l832T6a7fM+r/fuxGHDoYY09PFEebPsbOx/KZY1sfWJvfHix1pe0zXHSuzE5LVifNHTPri+5X3R6y9jl8c99f666RxsyF3UdX6bOlcptq4t2l3F2vPNvajantMqkoxu28esY4mPKMK2rNb0ZZFzOv4fn4VPoR7GOLw90eSndHf+XHNdnntnDFfs8ZK+XJr8RrWtkroYPLNqXzRa27s1teM2eMF662Lpvrn7l+9fWbZvxvWeN4OtonHo47dfmeWetcm1kiKznv16WinSMOOYrNKeeJyW1wJSmtQAAAAAAADu/oL1FdvemXnuH2L05y7N4vvrNIWNhjU/1rRcj1lLlLlzTcn0t7/QZuLOvt8lynmhLwuWZ27sYzjgD3Ie2H0T92Ppzn9MPXHhcXL8dkmb4cn+D29HPMdK7WjtVj5utsV/tqT5cleuLNTLhtfHbvPYHqP3h6Y8/TuPs3ctq569IvX+NizU69Zx5sc/m5KT+SY61n86k1vEWjeP3962eovuTehjn/DNrh6/rz1NdUWNZ25p+C7HNp+l8rucJtXP66bLrbbZMoyyvHQZG2u11F2tcy34fhjk2rUsqlfb24ewj1q/Ct/EH7b774jPm7n9J+8r5+3NnlsGKftHH15W1PuvBzmvjrNdfpy+HjsccjjiNHL1/OvqZc1dRvR6get3Z/uV9C+Q4XbpTje5+JinIY9W9vzM860T9pvp5LTE5P8Amt9i32e38tXp4RlrScqclaIRvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/05ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9SXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Vl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9eXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ql6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9KXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Tl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9WXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Wl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//15ek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9CXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Rl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0pek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9OXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Ul6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//1Zek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9aXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Xl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//0Jek7qPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9GXpO6jxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Sl6Tuo8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//05rvpv2F+w+afK28+AnM+9eL/ecX7Sn1o+vsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v8AecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/ecX7Sn1n2Xc/VW/Rn6j6b9hfsPmnytvPgH3rxf7zi/aU+s+y7n6q36M/UfTfsL9h80+Vt58A+9eL/AHnF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/3nF+0p9Z9l3P1Vv0Z+o+m/YX7D5p8rbz4B968X+84v2lPrPsu5+qt+jP1H037C/YfNPlbefAPvXi/wB5xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9GfqPpv2F+w+afK28+AfevF/vOL9pT6z7Lufqrfoz9R9N+wv2HzT5W3nwD714v95xftKfWfZdz9Vb9Gfqf//Z" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.editing.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.app">
+      <description>Persistence for the gvSIG plugin</description>
+      <fields>
+        <field name="defaultSymbolLibraryPath" type="String" classOfValue="" mandatory="false">
+          <description>Default symbol library path</description>
+        </field>
+        <field name="defaultSymbolFillColorAleatory" type="Boolean" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+        <field name="defaultSymbolFillColor" type="OBJECT" classOfValue="java.awt.Color" mandatory="false">
+          <description></description>
+        </field>
+        <field name="defaultSymbolColor" type="OBJECT" classOfValue="java.awt.Color" mandatory="false">
+          <description></description>
+        </field>
+        <field name="defaultSymbolFont" type="OBJECT" classOfValue="java.awt.Font" mandatory="false">
+          <description></description>
+        </field>
+        <field name="symbolLibraryPath" type="String" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+
+		<!-- cartographic support -->
+        <field name="default_measure_units" type="integer" classOfValue="" mandatory="false">
+          <description></description>
+        </field>
+        <field name="default_measure_units_reference_system" type="integer" mandatory="false">
+          <description></description>
+        </field>
+        
+        <!-- Layer order manager -->
+        <field name="current_layer_order_manager" type="OBJECT"
+        classOfValue="org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager"
+        mandatory="false">
+          <description>Layer order manager currently active</description>
+        </field>
+        
+        <field name="showAddOnmanagerOnStart" type="Map" classOfItems="java.lang.Boolean" mandatory="false">
+          <description></description>
+        </field>
+        <field name="expressionBookmarks" type="Map" classOfItems="org.gvsig.expressionevaluator.Expression" mandatory="false">
+          <description></description>
+        </field>
+        <field name="expressionHistory" type="List" classOfItems="org.gvsig.expressionevaluator.Expression" mandatory="false">
+          <description></description>
+        </field>
+        <!-- Preferencias de la vista -->
+        <field name="KeepScaleOnResizing" type="Boolean" mandatory="false">
+          <description></description>
+        </field>           
+        <field name="OpenWithANewMaximizedView" type="Boolean" mandatory="false">
+          <description></description>
+        </field>           
+        <field name="NewLayersInInvisibleMode" type="Boolean" mandatory="false">
+          <description></description>
+        </field>    
+        <field name="ZoomInFactor" type="Double" mandatory="false">
+          <description></description>
+        </field>    
+        <field name="ZoomOutFactor" type="Double" mandatory="false">
+          <description></description>
+        </field>    
+        <field name="hideLegendInToCOfNonVisibleLayers" type="Boolean" mandatory="false">
+          <description></description>
+        </field>    
+        <field name="baseHelpURL" type="String" mandatory="false" defaultValue="http://downloads.gvsig.org/download/web/">
+          <description></description>
+        </field>            
+        <field name="connectAutomaticallyToDatabaseWorkspace" type="Boolean" mandatory="false" defaultValue="false">
+          <description></description>
+        </field>            
+        <field name="databaseWorkspaceToConnect" type="String" mandatory="false" defaultValue="">
+          <description></description>
+        </field>            
+        
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_en.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_en.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_en.txt	(revision 46118)
@@ -0,0 +1,12 @@
+<html>
+<p>gvSIG is running on a platform $(CURRENT_ARCHITECTURE)</p>
+<br>
+<p>Packages are installed that are not compatible with your system.</p>
+<br>
+$(PACKAGES)
+<br>
+<p>Some are not specific to your system or architecture.</p>
+<br>
+<p>You probably need to configure a $(RECOMMENDED_ARCHITECTURE) Java environment
+for the proper functioning of gvSIG.</p>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_en.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,1607 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=1
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__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=A3A4=A4
+abajo=Abajo
+abrir=Abrir
+abrir_gestor_de_orig_db=Abrir gestor de origen base de datos
+abrir_plantilla=Abrir plantilla
+abrir_proyecto=Abrir proyecto
+abrir_tooltip=Abre un proyecto existente
+Abrir_una_capa=Abrir una capa
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activar=Activar
+activar_regla=Activar regla
+activos=Activos
+add_connection=A\u00f1adir conexi\u00f3n
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_layer=A\u00f1adir capa
+add_rows=A\u00f1adir filas
+add_to_locator=A\u00f1adir a Localizador
+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
+Ajustar_transparencia=Ajustar transparencia
+ajustes_linea_grafica=Ajustes de l\u00ednea gr\u00e1fica
+Al_leer_la_leyenda=Al leer la leyenda
+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=Todos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fija de texto
+ambito=\u00c1mbito
+Anadir=A\u00f1adir
+Anadir_al_conjunto=A\u00f1adir al conjunto
+Anadir_capa=A\u00f1adir capa
+Anadir_Capa=A\u00f1adir capa
+anadir_tag=A\u00f1adir etiqueta
+Anadir_todos=A\u00f1adir todos
+ancho=Ancho
+ancho_alto=Ancho x Alto
+anchura=Anchura\:
+Aplicar=Aplicar
+Archivo=Archivo
+arriba=Arriba
+ascending_order=Orden ascendente
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+attributes_XcolonX=Atributos\:
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Ayuda
+back=Anterior
+background_color=Color de fondo
+baja=Baja
+Bajar_capa=Bajar capa
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bmp=Ficheros de tipo bmp
+Bold=Negrita
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+box=Cajet\u00edn
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+Browse_symbols=Explorar s\u00edmbolos
+cajetin=Cajet\u00edn
+Calcular_intervalos=Calcular intervalos
+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_nombre=Cambio de nombre
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+Campo_de_clasificacion_XcolonX=Campo de clasificaci\u00f3n\:
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas del localizador
+Centimetros=Cent\u00edmetros
+cerrar=Cerrar
+Cerrar=Cerrar
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+choose_connection=Elija conexi\u00f3n
+choose_color=Seleccionar color
+choose_table=Elija tabla
+circulo=C\u00edrculo
+clave=Clave
+close=Cerrar
+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=Color
+Color_final=Color final
+Color_final_XcolonX=Color final\:
+Color_inicio=Color de inicio
+Color_inicio_XcolonX=Color de inicio\:
+color_texto=Color del texto\:
+comentarios=Comentarios
+comentarios_XcolonX=Comentarios\:
+comenzar_edicion=Comenzar edici\u00c3\u00b3n
+compleja=Compleja
+conectar_db=Est\u00e1 intentando conectar a la base de datos cuyos par\u00e1metros son
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+confirm_remove=\u00bfEst\u00e1 seguro que quiere eliminarlo?
+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
+connected=Conectado
+connection_error=Error de conexi\u00f3n
+connection_name=Nombre de la conexi\u00f3n
+connection_parameters=Par\u00e1metros de la conexi\u00f3n
+connection_params=Par\u00e1metros de la conexi\u00f3n
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+consulta=Consulta
+Contengan=Contengan
+contraste=Contraste
+coor_geograficas=Coordenadas geogr\u00e1ficas
+copiar=Copiar
+copy=Copiar
+cortar=Cortar
+creation_date=Fecha de creaci\u00f3n
+creation_date_XcolonX=Fecha de creaci\u00f3n\:
+Crucen_con=Crucen con
+cuando_activo=Cuando activo
+cut=Cortar
+Dado_un_campo_de_atributos=Dado un campo de atributos
+database_name=Nombre de BD
+datum=Datum
+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
+dehacer=Deshacer
+delete_field=Borrar campo
+Derecha=Derecha
+Derecho=Derecho
+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
+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>
+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
+disconnect=Desconectar
+distance_units=Unidades de medida
+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
+dont_find_the_file=No puedo encontrar el archivo
+do_you_want_to_locate_the_file=\u00bfDesea localizar el archivo?
+draw_text_only=Dibujar s\u00f3lo el texto
+driver=Driver
+driver_error=Error en los drivers.
+Dxffiles=Ficheros .DXF
+edicion=Edici\u00f3n
+edit_settings=Modificar
+editable=Editable
+Editar_leyenda=Editar leyenda
+editar_vertices=Editar V\u00e9rtices
+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\:
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=Eliminar columna
+eliminar_extremos=Eliminar extremos
+eliminar_fila=Eliminar fila
+en_el_mapa=En el mapa\:
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Encuadre=Encuadre
+Encuadre_Vista=Encuadre sobre la vista
+enlace_vivo=Enlace vivo
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+Enlazar_a_documento_PDF=Enlazar a documento PDF
+Enlazar_a_imagen_SVG=Enlazar a imagen SVG
+equal_intervals=Intervalos iguales
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_guardando_la_plantilla=Error guardando la plantilla
+error_saving_table=Error guardando la tabla
+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
+espaciado_horizontal=Espaciado horizontal de la malla
+espaciado_vertical=Espaciado vertical de la malla
+espacio=Espacio\:
+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
+Etiqueta=Etiqueta
+Etiquetados=Etiquetados
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+expresion_error=Error en la expresi\u00f3n
+extension=Extensi\u00f3n
+Extent=Extensi\u00f3n
+extents_no_coincidentes=Extensiones no coincidentes
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+fallo_capas=Fallo accediendo a las capas. Las siguientes capas van a ser eliminadas del proyecto
+family=Familia
+fichero=Archivo
+Fichero=Archivo
+fichero_existe=Fichero existe
+fichero_incorrecto=Fichero incorrecto
+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
+filtro=Filtro
+finish=Finalizar
+Font=Fuente
+font_type_XcolonX=Tipo de fuente\:
+format_for_legends=Formato %(ext) para leyendas
+formato=Formato
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_incorrecto=Formato incorrecto
+fuente=Fuente
+General=General
+geo_field=Campo geom\u00e9trico
+geo_field_not_available=Hubo un problema al obtener campos con geometr\u00edas v\u00e1lidos
+geo_field_error=Error con los campos geom\u00e9tricos
+geodb_connections=Conexiones a BD espaciales
+geoloc=Geolocalizar
+georeferenciado=Georeferenciado
+gestion_encuadre=Gesti\u00f3n de Encuadres
+gestor_db=Gestor de conexiones a BD espaciales
+get_view=Capturar vista
+grados=Grados\:
+Grados=Grados
+Graficos=Gr\u00e1ficos
+grosor_linea=Grosor de l\u00ednea\:
+group=Agrupar
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardado=Guardado en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=\u00bfQuiere guardar los cambios?
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar leyenda
+guardar_proyecto=Guardar proyecto
+guardar_tooltip=Guarda los cambios del proyecto
+Habilitar_etiquetado=Habilitar etiquetado
+Hiperenlace=Hiperenlace
+horizontal=Horizontal
+horizontal_space=Espacio horizontal
+host=M\u00e1quina
+id_error=Error con ID
+id_field=Campo con ID
+id_not_available=ID no disponible
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual que la impresora
+igual_todos_lados=Desplazamiento igual por todos lados.
+imagen=Imagen
+Implimir=Imprimir
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+Inferior=Inferior
+info=Informaci\u00f3n
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+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>
+input_output_error=Error de entrada/salida.
+insert_row=Insertar fila
+Insertar=Insertar
+insertar_cajetin=Insertar cajet\u00edn
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=Insertar columna
+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_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+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_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_value_for_gap=Valor inv\u00c3\u00a1lido para el intervalo
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+Izquierda=Izquierda
+Izquierdo=Izquierdo
+join=Unir
+jpg=Ficheros JPEG
+keep_the_order_of_values=Mantener ordenados los valores.
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+layer_to_which_belong_the_elements_selected_previously=Capa a la que pertenecen los elementos seleccionados previamente
+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
+linea=L\u00ednea
+linea_grafica=L\u00ednea gr\u00e1fica
+lineal_directo=Lineal directo
+link=Enlace
+Link=Enlace
+localizador=Localizador
+Localizador=Localizador
+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.
+los_elementos_seleccionados_pertenecen_a_la_capa_XcolonX=Los elementos seleccionados pertenecen a la capa\:
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=Modificar estructura de tabla
+mantener_intervalo=Mantener intervalo
+map_units=Unidades de mapa
+mapa=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.
+max_length_is=La longitud m\u00e1xima es
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+media=Media
+medir_area=Medir \u00e1rea
+medir_distancias=Medir distancias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+minimo=M\u00ednimo
+modificar=modificar
+modification_date=\u00daltima fecha de modificaci\u00f3n
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+Mostrar_siempre=Mostrar siempre
+mostrar_unidades=Mostrar unidades
+move_elements=Desplazar elementos
+Muestra_atributos=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
+multiple_label_by_scale=Etiqueta m\u00faltiple por escala
+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
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+next=Siguiente
+ninguna_capa_seleccionada=Ninguna capa seleccionada
+ninguna_impresora_configurada=Ninguna impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=No
+no_activos=No activos
+No_de_intervalos=N\u00ba de intervalos
+No_de_intervalos_XcolonX=N\u00ba de intervalos\:
+no_es_posible_aplicar_leyenda_vacia=No es posible aplicar la leyenda vac\u00eda.
+no_hay_campo_seleccionado=No hay ning\u00fan campo de clasificaci\u00f3n seleccionado
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+no_hay_campo_seleccionado=No hay ning\u00fan campo de clasificaci\u00f3n seleccionado
+No_mostrar=No mostrar la capa cuando la escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+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_se_puede_borrar_una_capa_en_edicion=No se puede borrar una capa en edici\u00f3n
+no_visibles=No visibles
+nombre=Nombre
+Nombre=Nombre
+Nombre_XcolonX=Nombre\:
+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
+none=None
+none2=Ninguno
+none_selected=Ninguno seleccionado
+normal=Normal
+north=Norte
+not_GVL_save_question=El formato que ha seleccionado no es propio de gvSIG, se puede utilizar para compartir leyendas con otros programas.\nSi, posteriormente, desea importar de nuevo esta leyenda a gvSIG, le recomendamos que utilice el formato GVL\n o de lo contrario podr\u00eda perder alguna de las caracter\u00edsticas de la leyenda original.
+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_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
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+ok=Aceptar
+opacidad=Opacidad
+operacion_cancelada=Operaci\u00f3n cancelada
+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.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
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de datos
+Origen_de_datos=Origen de datos
+Origen_de_Datos=Origen de datos\:
+owner=Propietario
+owner_XcolonX=Propietario\:
+parse_expresion_error=Error al evaluar la expresi\u00f3n.
+paste=Pegar
+paste_elements=Pegar elementos
+path=Ruta
+pdf=Pdf
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+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
+Pies=Pies
+pila_de_comandos=Pila de comandos
+pixeles=p\u00edxeles
+pixels=p\u00edxeles
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+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\:
+Por_favor_active_la_capa=Por favor active la capa
+port=Puerto
+posicion_linea=Posici\u00f3n de la l\u00ednea
+precision=Precisi\u00f3n
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Presentaci\u00f3n
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=Previsualizaci\u00f3n de s\u00edmbolo
+priority_max=Prioridad m\u00e1xima
+priority_int=Prioridad intermedia
+priority_min=Prioridad m\u00ednima
+priority_blocked=Bloqueado
+projection=Proyecci\u00f3n
+project_properties=Propiedades del proyecto
+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_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_localizador=Propiedades del marco del localizador
+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_texto=Propiedades del texto
+propiedades_vista=Propiedades de la vista
+Proyecciones=Proyecciones
+ps=Ps
+puerto=Puerto
+Pulgadas=Pulgadas
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=\u00bfEst\u00e1 seguro de que quiere continuar?
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar enlaces
+Quitar_todos=Quitar todos
+quitar_uniones=Quitar uniones
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+recargar=Recargar
+recorte_colas=Recorte de colas
+recorte_vista=Recorte a vista
+rectangulo=Rect\u00e1ngulo
+recuento=Recuento
+Recuperar_leyenda=Recuperar leyenda
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+reference_system=Sistema de Referencia
+refrescar=Refrescar
+rehacer=Rehacer
+rellenar_marco_vista=Rellenar marco de la vista
+relleno=Relleno\:
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+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_resultado=Resoluci\u00f3n del resultado\:
+resto_valores=Resto de valores
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotaci\u00f3n
+salir=Salir
+salir_tooltip=Salir
+salvar_raster=Salvar a raster georreferenciado.
+Sample=Ejemplo
+schema=Esquema
+Se_superponen_a=Se superponen a
+Sean_disjuntos_a=Sean disjuntos a
+Sean_iguales_a=Sean iguales a
+seleccion=Selecci\u00f3n
+seleccion_fuente=Selecci\u00f3n de fuente
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+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
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+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_a_enlazar=Seleccione la tabla a enlazar
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+select_from_the_active_layers=Selecciona de las capas activas los elementos que cumplen la condici\u00f3n elegida
+selection_color=Color de la selecci\u00f3n
+selection_up=Mover arriba la selecci\u00f3n
+semantic_expresion_error=Error sem\u00e1ntico en la expresi\u00f3n.
+separator=Separador
+server_url=Url del servidor
+Servidor=Servidor
+Shapefile=Shapefile
+Show_grid=Mostrar cuadr\u00edcula
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+si=s\u00ed
+siempre=Siempre
+simbolo=S\u00edmbolo
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolog\u00eda
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+sin_titulo=Sin t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+Size=Tama\u00f1o
+sobre_la_barra=Sobre la barra
+Solo_para_capas_vectoriales=S\u00f3lo para capas vectoriales
+sorter=Ordenado
+start_edition=Comenzar edici\u00f3n
+statistics=Estad\u00edsticas
+sorter=Ordenado
+specify_table_settings=Especificaci\u00f3n de la capa
+sql_restriction=Restricci\u00f3n SQL
+stop_edition=Terminar edici\u00f3n
+export_and_stop_editing_message=<html><p>Exportar y terminar edici\u00f3n</p><br><b>Exportar: </b>Exportar la tabla<br><b>Descartar: </b>Descartar y perder cambios<br><b>Continuar: </b>Continuar en edici\u00f3n sin guardar<br></html>
+stop_editing_message=<html><p>Terminar edici\u00f3n</p><br><b>Guardar: </b>Guardar cambios<br><b>Descartar: </b>Descartar y perder cambios<br><b>Continuar: </b>Continuar en edici\u00f3n sin guardar<br></html>
+Style=Estilo
+Subir_capa=Subir capa
+suma=Suma
+Superior=Superior
+symbol_selector=Selector de simbolog\u00eda
+Tabla=Tabla
+Tabla_de_Atributos=Tabla de atributos
+tablas=Tablas
+Tablas=Tablas
+table_fields=Columnas de la 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
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+texto=Texto
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_intervalo_XcolonX=Tipo de intervalo\:
+tipo_de_leyenda=Tipo de leyenda
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.gvsproj)
+tipo_fichero_proyecto_bak=Copia de seguridad de proyecto gvSIG (*.gvsproj.bak)
+tipo_linea=Tipo de L\u00ednea\:
+tipo_relleno=Tipo de Relleno\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo_fframetext=T\u00edtulo del campo de texto
+to_annotation=Transformar a capa de anotaciones
+to_palette=Cambiar a paleta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Toquen=Toquen
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por pixel
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+untitled=Sin t\u00edtulo
+url=url
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Usar marco
+usar_titulo=Usar t\u00edtulo
+user=Usuario
+usuario=Usuario
+utilizar_margenes_impresora=Utilizar m\u00e1rgenes de la impresora.
+vacia=Vac\u00eda
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varianza
+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
+vertical=Vertical
+vertical_space=Espacio vertical
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+working_area=Zona de inter\u00e9s
+xmax=xmax
+xmin=xmin
+Yardas=Yardas
+ymax=ymax
+ymin=ymin
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acercar
+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 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=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a lo seleccionado
+
+categories=Categor\u00edas
+cannot_apply_to_a_non_polygon_layer=No puede aplicarse a una capa no poligonal
+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.
+in_layer=en capa
+could_not_setup_legend=No se pudo establecer la leyenda
+labeling_field=Campo de etiquetado
+dot_size=Tama\u00f1o de punto
+dot_value=Valor del punto
+outline_color=Color del borde
+densities=Densidades
+high=Alta
+medium=Media
+low=Baja
+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.
+dot_density=Densidad de puntos
+features=Objetos
+preview=Previsualizaci\u00f3n
+quantities=Cantidades
+choose_symbol=Seleccionar s\u00edmbolo
+legend=Leyenda
+label_text_in_the_TOC=Etiqueta que aparecer\u00e1 en el TOC
+exception_cloning_legend=Excepci\u00f3n clonando leyenda.
+character_marker=Marcador de car\u00e1cter
+character_marker_symbol=S\u00edmbolo de Marcador de car\u00e1cter
+marker_fill=Relleno con marcadores
+choose_marker=Seleccionar marcador
+outline=Borde
+grid=Malla
+Grid_settings=Propiedades malla
+random=Aleatorio
+fill_properties=Propiedades de relleno
+offset=Desplazamiento
+separation=Separaci\u00f3n
+simple_fill=Relleno simple
+simple_fill_symbol=S\u00edmbolo de Relleno simple
+simple_label=Etiqueta simple
+fill_color=Color de relleno
+outline_width=Ancho del borde
+trying_to_add_a_non_TypeSymbolEditor_panel=Intentando a\u00f1adir un panel que no es de tipo TypeSymbolEditor.
+two_panels_with_the_same_name=Dos paneles con el mismo nombre.
+symbol_property_editor=Editor de propiedades de s\u00edmbolo
+properties=Propiedades
+layers=Capas
+type=Tipo
+units=Unidades
+layer=Layer
+preview_not_available=Vista previa no disponible
+point_symbols=S\u00edmbolos de marcador
+line_symbols=S\u00edmbolos de l\u00edneas
+polygon_symbols=S\u00edmbolos de pol\u00edgono
+shape_type_not_yet_supported=Tipo de shape no soportado todav\u00eda.
+symbol_library=Biblioteca de s\u00edmbolos
+could_not_find_symbol_directory=No se pudo encontrar el directorio de la biblioteca s\u00edmbolos
+options=Opciones
+new=Nuevo
+reset=Reiniciar
+save=Guardar
+size=Tama\u00f1o
+angle=\u00c1ngulo
+width=Ancho
+save_error=Error guardando
+marker_fill=Relleno de marcadores
+marker_fill_symbol=S\u00edmbolo de Relleno de marcadores
+simple_line=S\u00edmbolo de L\u00ednea simple
+simple_marker=Marcador simple
+x_offset=Desplazamiento en X
+y_offset=Desplazamiento en Y
+simple_marker_symbol=S\u00edmbolo de marcador simple
+enter_description=Introduzca una descripci\u00f3n
+syntax_error=Error de sintaxis
+error=Error
+label_expression_help=
+expression=Expresi\u00f3n
+label_expression_editor=Editor de expresiones de etiqueta
+method=M\u00e9todo
+class=Clase
+classes=Clases
+text_string=Texto
+text_symbol=S\u00edmbolo de texto
+font_color=Color de fuente
+enable_labeling=Habilitar etiquetado
+visualization=Visualizaci\u00f3n
+label_styles=Estilos de etiqueta
+placement=Colocaci\u00f3n
+edit_expression=Editar expresi\u00f3n
+SQL_query=Sentencia SQL
+remane_class=Renombrar clase
+delete_class=Eliminar clase
+add_class=A\u00f1adir clase
+label_features_in_this_class=Etiquetar entidades dentro de esta clase
+labeling=Etiquetado
+shape_type_error=Tipo de shape err\u00f3neo.
+enter_new_name=Introduzca el nuevo nombre
+placement_properties=Propiedades de colocaci\u00f3n
+point_settings=Configuraci\u00f3n de punto
+line_settings=Configuraci\u00f3n de l\u00ednea
+polygon_settings=Configuraci\u00f3n de pol\u00edgono
+position=Posici\u00f3n
+orientation=Orientaci\u00f3n
+parallel=Paralela
+following_line=Siguiendo la l\u00ednea
+perpedicular=Perpendicular
+duplicate_labels=Etiquetas repetidas
+place_one_label_per_feature_part=Situar una etiqueta por cada parte de la entidad
+place_one_label_per_feature=Situar \u00fanicamente una etiqueta por entidad
+remove_duplicate_labels=Eliminar etiquetas repetidas
+label_features_in_the_same_way=Etiquetar todas las entidades de la misma manera
+define_classes_of_features_and_label_each_differently=Definir diferentes clases de entidades y etiquetarlas de manera diferente
+label_only_when_selected=Etiquetar solamente cuando sus entidades est\u00e9n seleccionadas
+could_not_apply_legend=No se pudo aplicar la leyenda
+quantity_by_category=Cantidades por categor\u00eda
+graduated_symbols=S\u00edmbolos graduados
+multiple_atributes=M\u00faltiples atributos
+too_large_border=Borde demasiado grande
+file=Archivo
+file_not_found=Archivo no encontrado
+file_corrupt=Archivo corrupto
+unsupported_legend=Tipo de leyenda no soportado
+symbol=S\u00edmbolo
+from=Desde
+to=Hasta
+template=Plantilla
+generating_intervals=Generando intervalos
+draw_quantities_using_symbol_size_to_show_relative_values=Representa cantidades mediante el tama\u00f1o de un s\u00edmbolo mostrando valores relativos.
+could_not_get_shape_type=No se pudo obtener el tipo de geometr\u00eda.
+general=General
+text_field=Texto
+text_height_field=Altura del texto
+rotation_height=Rotaci\u00f3n
+accessing_file_structure=Accediendo a la estructura del fichero
+could_not_restore_text_height_field=No se pudo recuperar el campo para la altura 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.
+font=Fuente
+usupported_layer_type=Tipo de capa no soportado
+driver_exception=Excepci\u00f3n de driver
+legend_exception=Excepci\u00f3n de leyenda
+variation_by=Variaci\u00f3n por
+color_ramp=Rampa de color
+value_fields=Campos de valores
+color_field=Campo de colores
+symbol_field=Campo de s\u00edmbolo graduado
+draw_quantities_for_each_category=Representa cantidades para cada categor\u00eda.
+recovering_recordset=Recuperando recordset.
+fields=campos
+user_defined_labels=Etiquetas definidas por el usuario
+label_attributes_defined_in_table=Atributos de la etiqueta definidos en tabla
+current=Actual
+text_symbols=S\u00edmbolos textuales
+label_expression_help=
+fixed_height=Tama\u00f1o fijo
+location=Ubicaci\u00f3n
+location_along_the_lines=Ubicaci\u00f3n a lo largo de las l\u00edneas
+at_best=En la mejor
+at_begin=Al principio
+at_end=Al final
+label-point-priority-help=Prioridad: 0 = Bloqueado, 1 = M\u00e1s alta, 3 = M\u00e1s baja
+change_location=Cambiar ubicaci\u00f3n
+offset_labels_on_top_of_the_points=Situar etiquetas sobre los puntos.
+offset_labels_horizontally=Desplazar etiquetas horizontalmente alrededor del punto.
+always_straight=Siempre recto
+always_horizontal=Siempre horizontal
+orientation_system=Orientaci\u00f3n
+line=L\u00ednea
+page=P\u00e1gina
+below=Abajo
+on_the_line=Sobre la l\u00ednea
+above=Arriba
+getting_shape_type=Determinando el tipo de shape
+confirmation_dialog=Di\u00e1logo de confirmaci\u00f3n
+mask=M\u00e1scara
+style=Estilo
+halo=Halo
+fill_opacity=Opacidad del relleno
+outline_opacity=Opacidad del borde
+new_style=Nuevo estilo
+editing=Edici\u00f3n
+edit_style=Editar estilo
+tools=Herramientas
+add_text_area=A\u00f1adir campo de texto
+offset_label=Desplazar etiqueta
+undefined_for_StylePreviewer_use=No definido para StylePreviewer, por favor use
+instead=en su lugar
+style_library=Biblioteca de estilos
+in_the_world=en el mundo
+in_the_paper=en el papel
+line_style=Estilo de l\u00ednea
+proportional_symbols=S\u00edmbolos proporcionales
+height=Altura
+description=Descripci\u00f3n
+merge=Combinar
+symbol_levels=Niveles de simbolog\u00eda
+draw_symbols_in_specified_order=Dibujar s\u00edmbolos usando el orden especificado
+advanced_view=Vista avanzada
+default_view=Vista normal
+picture_file=Fichero imagen
+bitmap_and_svg_image_files=Im\u00e1genes SVG y de mapa de bits
+failed_accessing_file=Fallo accediendo al fichero
+picture_marker_symbol=S\u00edmbolo de marcador de imagen
+marker_style=Estilo de marcador
+use_outline=Usar borde
+square=cuadrado
+circle=c\u00edrculo
+diamond=diamante
+triangle=tri\u00e1ngulo
+cross=cruz
+draw_quantities_using_symbol_size_to_show_exact_values=Representa cantidades a trav\u00e9s del tama\u00f1o del s\u00edmbolo mostrando valores exactos
+unable_to_load_legend_from_XMLEntity=Imposible cargar leyenda desde persistencia XMLEntity
+Muestra_todos_s_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00edmbolo
+prefer_top_right_all_allowed=Preferiblemente arriba a la derecha, pero permitiendo cualquier posici\u00f3n
+in_the_middle=En mitad
+fit_inside_polygon=Acoplar dentro del pol\u00edgono
+color_scheme=Esquema de color
+unrecognized_field_name=Nombre de campo no reconocido
+yes=S\u00ed
+error_file_exists=Error, el fichero ya existe
+field=campo
+picture_fill=Relleno de imagen
+picture_fill_symbol=S\u00edmbolo de Relleno de imagen
+scale=Escala
+could_not_open_picture_file=No se pudo abrir el fichero de imagen
+text=Texto
+formatted=Formato
+advanced=Avanzada
+simple_text_symbol=S\u00edmbolo de texto simple
+failed_installing_symbol_editor=No se pudo instalar el editor de s\u00edmbolo
+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.
+arrow_decorator=Decoraci\u00f3n de flecha
+use_decorator=Usar decoraci\u00f3n
+arrow_sharpness=Agudeza de la flecha
+number_of_positions=N\u00famero de posiciones
+flip=Invertir
+flip_all=Invertir todos
+flip_first=Invertir primero
+rotation=Rotaci\u00f3n
+rotate_symbol_to_follow_line_angle=Rotar a la pendiente de la l\u00ednea
+keep_symbol_at_fixed_angle_to_page=Inclinaci\u00f3n constante respecto de la p\u00e1gina
+line_fill=Relleno l\u00edneas
+line_fill_symbol=S\u00edmbolo de relleno de l\u00edneas
+select_a_color_scheme=Seleccione un esquema de color
+scale=Escala
+picture_line_symbol=S\u00edmbolo de L\u00ednea de imagen
+selection_picture_file=Imagen de selecci\u00f3n
+marker_line=L\u00ednea de marcadores
+marker_line_symbol=S\u00edmbolo de L\u00ednea de marcadores
+warning_you_must_input_the_exact_name_this_difference_between_capital_letters_and_small_letters=<html>Atenci\u00f3n: Introducir el nombre exacto (se distingue entre may\u00fasculas y min\u00fasculas).</html>
+formato_del_campo_incorrecto=Formato del campo incorrecto
+error_file_not_find_driver=El driver no encuentra un fichero
+error_opening_the_document=Error abriendo el documento
+se_han_producido_los_siguientes_errores_durante_la_carga_de_las_capas=Se han producido los siguientes errores durante la carga de capas.=======
+error_opening_the_document=Error abriendo el documento
+change_symbol=Cambiar s\u00edmbolo
+skipped_symbol_changed_for_layer=Omitido el cambio de s\u00edmbolo para la capa
+failed_computing_intervals=Fallo calculando intervalos
+invalid_interval_count_value=Valor inv\u00e1lido para la cuenta de intervalos
+Apply=Aplicar
+getting_layer_shape_type=Obteniendo el tipo de shape
+gradient_fill=Relleno gradiente
+intervals=Intervalos
+percentage=Porcentaje
+gradient_color=Color gradiente
+gradient_fill_symbol=S\u00edmbolo de relleno gradiente
+buffered=Forma del pol\u00edgono
+lineal=Lineal
+circular=Circular
+rectangular=Rectangular
+no_desc=Sin descripci\u00f3n
+marker=Marcador
+fill=Relleno
+behavior=Comportamiento
+options.view.behavior.screen_refreshrate=Refresco de pantalla
+line_properties=Propiedades de la l\u00ednea
+join_style=Estilo de la uni\u00f3n
+join_bevel=En escuadra
+join_miter=A inglete
+join_round=Redondeada
+end_style=Estilo del extremo
+cap_butt=Sin extremo
+cap_round=Redondeado
+cap_square=Rectangular
+fill_pattern=Patr\u00f3n de relleno
+filter_of_Table=Filtro de Tabla
+openning_project=Abriendo un proyecto
+opened_project=Proyecto abierto
+error_openning_project=Error abriendo el proyecto
+writing_project=Guardando el proyecto
+wrote_project=Proyecto guardado
+error_writing_project=Error guardando el proyecto
+couldnt_load_panels_from_extension_point_exception=No se pudieron cargar algunos paneles a partir de un punto de extensi\u00f3n:
+panel_loading_exception=Error cargando capa:
+extension_point_load_extension=Error cargando punto de extensi\u00f3n:
+unidades_area=Unidades \u00e1rea
+Millas_Nauticas=Millas N\u00e1uticas
+Acres=Acres
+HanegadasC=HanegadasC
+HanegadasV=HanegadasV
+Hectareas=Hect\u00e1reas
+Areas=\u00c1reas
+Decimetros=Dec\u00edmetros
+_Metadata=Metadatos
+Central_point=Punto central
+Final_point=Punto final
+Insert_point=Punto de inserci\u00f3n
+Intersection_point=Punto de intersecci\u00f3n
+Medium_point=Punto medio
+Nearest_point=Punto m\u00e1s cercano
+Perpendicular_point=Punto perpendicular
+Pixel_point=Ajustado a p\u00edxel
+Quadrant_point=Ajustado a cuadrante
+Tangent_point=Punto tangente
+All_supported=Todos los soportados
+_reprojected_on_the_fly=reproyectado al vuelo
+_Unknown_CRS_so_assumed=CRS desconocido. Se asume
+_Set_this_CRS_as_app_default=Establecerlo como CRS por defecto
+_create_a_new_project=Crear nuevo proyecto
+_open_a_project=Abrir un proyecto
+_save_the_current_project=Guardar el proyecto actual
+_Pixels=P\u00edxeles
+_Fixed_color=Color fijo
+_Field_to_use_in_label=Campo de la etiqueta
+Setup=Configuraci\u00f3n
+Selection=Selecci\u00f3n
+_Clear=Limpiar
+SelectAll=Seleccionar todo
+Reverse=Invertir
+Simple=Simple
+Select_by_buffer=Seleccionar por buffer
+Select_by_circle=Seleccionar por c\u00edrculo
+Select_by_layer=Seleccionar por capa
+Select_by_rectangle=Seleccionar por rect\u00e1ngulo
+Select_by_polygon=Seleccionar por pol\u00edgono
+Show=Mostrar
+_Project_manager=Gestor de proyecto
+Console=Consola
+_Show_console_error_messages=Mostrar mensajes de error de la consola
+Filter=Filtrar
+Set_to=Cambiar a
+_Set_all_layers_to=Cambiar todas las capas a
+Visible=Visible
+Hidden=Oculta
+Active=Activa
+Inactive=Inactiva
+View=Vista
+Query=Consulta
+Distance=Distancia
+Area=\u00c1rea
+Add_layer=A\u00f1adir capa
+Locator_setup=Configurar localizador
+Properties=Propiedades
+Restore_from_tool=Restaurar
+Convert_to_tool=Convertir
+Help=Ayuda
+Contents=Contenido
+About=Acerca de
+Window=Ventana
+Navigation=Navegaci\u00f3n
+Pan=Desplazamiento
+Zoom_in_to_center=Acercar al centro
+Zoom_out_to_center=Alejar desde el centro
+Zoom_in=Acercar
+Zoom_out=Alejar
+Zoom_back=Encuadre previo
+Zoom_next=Encuadre siguiente
+Zoom_all=Zoom a todo
+Zoom_to_selection=Zoom a la selecci\u00f3n
+Locator_by_attribute=Zoom a resultado de b\u00fasqueda
+Center_view_to_point=Centrar vista en punto
+Frame_manager=Gestor de encuadres
+File=Archivo
+_File_cannot_be_empty=Debe elegir un archivo
+_Delete_selected_objects=Eliminar objetos seleccionados
+_Information_by_point=Informaci\u00f3n por punto
+_Query_distance=Consultar distancia
+_Query_area=Consultar \u00e1rea
+_Reverse_selection=Invertir selecci\u00f3n
+_Simple_select=Selecci\u00f3n simple
+_Clear_selection=Deseleccionar todo
+_selectionSet=Establecer selecci\u00f3n
+_featureDelete=Eliminar elemento
+_Clipboard_error=Error en portapapeles
+_Cartographic_support_panel_title=Unidades de medida en mapas
+_Preferences_persistence_error=Error al salvar preferencias
+_Default_measure_units=Unidad de medida por defecto
+_Default_measure_units_reference_system=Sistema de referencia por defecto
+_Unable_to_copy_symbols_from_main_plugin=No se han podido copiar los s\u00edmbolos del plugin principal
+symbols_browser=Explorador de s\u00edmbolos
+_All=Todos
+_Numeric=Num\u00e9rico
+_String=Cadena
+_Date=Fecha
+_Available_functions_and_operators=Funciones y operadores disponibles
+_Available_fields=Campos disponibles
+_User_expression=Expresi\u00f3n de usuario
+_Double-click_to_paste_into_expression_box=Haga doble clic sobre nombre de campo, operador o funci\u00f3n para insertarlo en la caja de texto
+_Date_or_time=Fecha/hora
+_Geometry=Geometr\u00eda
+_Boolean=L\u00f3gico
+_filename_warning_architecture_or_os_mismatch=warning_architecture_or_os_mismatch_es.txt
+_Layer_order_in_TOC=Orden de capas en el TOC
+_Order=Orden
+_Description=Descripci\u00f3n
+_Option_not_available_for_this_geometry_type=Opci\u00f3n no disponible para este tipo de geometr\u00eda
+_Default_color=Color por defecto
+_Default_fill_color=Color de relleno por defecto
+_Random=Aleatorio
+_Default_font=Fuente por defecto
+_Symbols_folder=Carpeta de s\u00edmbolos
+_No_output_format_available=No se ha encontrado ning\u00fan formato de escritura
+_Unable_to_save_legend=No se ha podido guardar la leyenda
+_No_input_format_available=No se ha encontrado ning\u00fan formato de lectura
+_Unable_to_read_legend=No se ha podido leer la leyenda
+_There_are_no_documents_to_paste=No hay documentos para pegar
+_Select_resources_to_save_before_closing_current_project=Seleccione los recursos a salvar antes de cerrar el proyecto actual
+view_contain_layers=La vista ya contiene capas pero la \n proyecci\u00f3n de estas no se va a modificar. \n Esto podr\u00eda provocar errores en algunos geoprocesos.
+_Instalar_complementos_adicionales_no_disponibles_durante_el_proceso_de_instalacion=\u00bfInstalar complementos adicionales no disponibles durante el proceso de instalaci\u00f3n?
+_Finalizando_proceso_de_instalacion=Finalizando proceso de instalacion
+_User_0_is_not_authorized_to_1_on_resource_2_3=El usuario "{0}" no esta autorizado a realizar la accion "{1}" sobre el recurso "{2}"\n( {3} )
+_Unauthorized_access=Acceso no autorizado
+
+_Number_of_features_copied_to_clipboard=N\u00famero de elementos copiados al portapapeles
+_Number_of_features_pasted_from_clipboard=N\u00famero de elementos a\u00f1adidos desde portapapeles
+_Number_of_features_from_clipboard_discarded_due_to_bad_format=N\u00famero de elementos del portapapeles descartados por error en formato
+_Pasting_features_from_clipboard=A\u00f1adiendo elementos desde portapapeles
+_Zoom_to_added_features_question=\u00bfDesea desplazar la vista hasta los elementos a\u00f1adidos?
+_Unable_to_zoom_to_features=No ha sido posible desplazar la vista hasta los elementos
+_Copy_selected_features_to_clipboard=Copiar elementos
+_Paste_features_from_clipboard=Pegar elementos
+_Clipboard_has_no_valid_info_or_is_empty=El portapapeles no tiene datos v\u00e1lidos o est\u00e1 vac\u00edo
+_No_features_found_in_clipboard=No se han encontrado elementos en el portapapeles
+_Include_alphanumeric_attributes_Question=\u00bfIncluir campos alfanum\u00e9ricos?
+
+_Undo_last_modification_in_the_active_layer=Deshacer \u00faltima modificaci\u00f3n en la capa activa
+_Undo=Deshacer
+_Redo_last_modification_in_the_active_layer=Rehacer \u00faltima modificaci\u00f3n en la capa activa
+_Redo=Rehacer
+_Undo_redo_history=Historial de hacer/deshacer
+
+_Selection_by_attributes=Selecci\u00f3n por atributos
+_Select_by_attributes_old=Selecci\u00f3n por atributos (antiguo)
+_New_selection=Nueva selecci\u00f3n
+_Add_to_selection=A\u00f1adir a la selecci\u00f3n
+_Filter_selection=Filtrar la selecci\u00f3n
+text_editor=Editor de texto
+first=Primero
+last=Ultimo
+previous=Anterior
+next=Siguiente
+_first=Primero
+_last=Ultimo
+_back=Anterior
+_next=Siguiente
+search=Buscar
+Development=Desarrollo
+Show_actions_information=Mostrar informaci\u00f3n de acciones disponibles
+Show_menu_information=Mostrar informaci\u00f3n del men\u00fa activas
+Show_menu_by_plugin_information=Mostrar informaci\u00f3n de men\u00fas por plugin
+Show_plugin_report_of_actions_menus_and_icons=Mostrar reporte de acciones de men\u00fa e iconos de los plugins
+Show_icon_theme_information=Mostrar informaci\u00f3n sobre temas de iconos
+Show_persistence_factories=Mostrar factor\u00edas de persistencia
+Create_installation_package=Crear paquetes de instalaci\u00f3n
+Show_editing_monitor=Mostrar monitor de edici\u00f3n
+Disposables=Elementos disposables
+Free_all=Liberar todo
+Show_pendings=Mostrar pendientes
+_Translations_package=Paquetes de traducci\u00f3n
+
+document_not_available=Documento no disponible
+symbol_level=Nivel %(level)
+
+_Selected_features=Elementos Totales/Elementos Seleccionados
+Data_source=Origen de datos
+Source_type=Tipo de origen
+_{0}_metadata=Metadatos de {0}
+
+_some_project_elements_could_not_be_loaded=Algunos elementos del proyecto no han podido ser cargados.
+_maybe_you_need_to_install_any_plugins=Tal vez necesite instalar alg\u00fan plugin.
+_see_error_log_for_more_information=Consulte el registro de errores para obtener m\u00e1s informaci\u00f3n.
+
+_upper_left_corner=Esquina superior izquierda
+_upper_right_corner=Esquina superior derecha
+_lower_right_corner=Esquina inferior derecha
+_lower_left_corner=Esquina inferior izquierda
+_Remembered_dialogs=Dialogos recordados
+_Remember_responses_from_selected_dialogs=Respuestas recordadas para los siguientes dialogos
+_It_looks_like_youre_using_percent_o_question_and_the_like_operator_is_not_being_used_I_should_probably_keep_the_equal_operator_by_like_Do_you_want_to_continue_anyway=Parece que se esta usando '%' o '?' y no se esta usando el operador like. Problablemente deberia sustiuir el operador '=' por 'like'. \u00bf Desea continuar de todas formas ?
+_tiled=Teselado
+_Open_with_a_new_maximized_view=Abrir con una vista nueva maximizada
+_Change=Cambiar
+Alpha=Alpha
+_Recovered_data_may_be_corrupted=Los datos recuperados pueden estar da\u00f1ados
+_select_a_file_to_add_to_the_list=Seleccionar un fichero para a\u00f1adirlo a la lista
+_change_default_properties_to_load_the_selected_item=Cambiar las propiedades por defecto con las que se cargara el elemento seleccionado
+_remove_the_selected_item_from_the_list=Eliminar el elemento seleccionado de la lista
+_move_up_the_selected_item_in_the_list=Mover hacia arriba en la lista el elemento seleccionado
+_move_down_the_selected_item_in_the_list=Mover hacia abajo en la lista el elemento seleccionado
+_Data_access_services=Servicios de acceso a datos
+_Change_view_projection=CRS Vista
+_Change_view_projection_to_projection_of_the_selected_item_in_the_list=Cambia la proyecci\u00f3n de la Vista a la proyecci\u00f3n del item seleccionado en la lista.
+_precision_comparing_decimal_numbers=Precisi\u00f3n de comparaci\u00f3n de n\u00fameros decimales
+_default_expression_evaluator=Evaluador de expresiones por defecto
+_Problems_saving_the_project_XnlX_It_is_possible_that_this_was_not_saved_properly_and_can_not_be_loaded_again=Problemas guardando el proyecto.\nEs posible que este no se haya guardado correctamente y no se pueda volver a cargar.
+_Elements=Elementos
+_Functions=Funciones
+_Operators=Operadores
+_Expression=Expresi\u00f3n
+_Scripts=Guiones
+_Constant_Point=Constante Punto
+_Constant_Rectangle=Constante Rectangulo
+_Value=Valor
+_Start_capture=Iniciar captura
+_Description=Descripci\u00f3n
+_Capture_a_point_from_current_view=Captura un punto desde la Vista corriente
+_Use_WKT_or_WKB=Usar WKT o WKB
+_Insert_as_WKT=Insertar como WKT
+_Insert_as_WKB=Insertar como WKB
+_Use_Geometry_or_Text=Usar geometria o texto
+_Insert_as_Geometry=Insertar como geometria
+_Insert_as_Text=Insertar como texto
+_Name=Nombre
+_Generic_element=Elemento generico
+_Arguments=Argumentos
+_Template=Plantilla
+_Return=Retorno
+_Function=Functi\u00f3n
+_Type=Tipo
+_Source=Fuente
+_Constant=Constante
+_Capture_point=Capturar punto
+_Capture_rectangle=Capturar rectangulo
+_Take_projection_code=Tomar c\u00f3digo de proyecci\u00f3n
+_Aliases=Alilas
+_Before_changing_field_accept_or_discard_the_changes=Antes de cambiar de campo, acepte o desscarte los cambios realizados.
+_New=Nuevo
+_Delete=Eliminar
+_Modify=Modificar
+_Accept=Aceptar
+_Discard=Descartar
+_Field_name=Nombre de campo
+_Field_type=Tipo de campo
+_Primary_key=Clave primaria
+_Value_automatic=Valor automatico
+_Allow_nulls=Permite nulos
+_Basic_fields=Campos basicos
+_Geometry=Geometria
+_Time=Tiempo
+_Size=Tama\u00f1o
+_Precision=Precision
+_Scale=Escala
+_Default_value=Valor por defecto
+_Data_profile=Perfil del dato
+_Virtual_field=Campo virtual
+_Geometry_type=Tipo de geometria
+_Geometry_subtype=Subtipo de geometria
+_CRS=SRS
+_Date_format=Formato de fecha
+_Interval=Intervalo
+_Start=Inicio
+_End=Fin
+_Preview_value=Valor de vista previa
+_Show_tip=Mostrar sugerencia
+_Show_preview=Mostrar vista previa
+_Show_message=Mostrar error
+_Message=Mensaje
+_Tip=Sugerencia
+_Cant_retrieve_information_from_user_form=No se puede recuperar informaci\u00f3n del formulario de usuario.
+_See_log_for_details=Ver el registro para m\u00e1s detalles.
+_The_expression_of_virtual_field_is_not_valid=La expresi\u00f3n del campo virtual no es v\u00e1lida.
+_The_expression_contains_a_reference_to_itself=La expresi\u00f3n tiene una referencia a ella misma.
+_Show_expression_builder=Mostrar el constructor de expresiones
+_Visualization=Visualizaci\u00f3n
+_Basic=Basico
+_Values=Valores
+_Tags=Etiquetas
+_Group=Grupo
+_Order=Orden
+_Hidden=Oculto
+_Label=Etiqueta
+_Description=Descripci\u00f3n
+_Minimum_value=Valor minimo
+_Maximum_value=Valor maximo
+_List_of_values=Lista de valores
+_Value=Valor
+_Add=A\u00f1adir
+_Update=Actualizar
+_Remove=Eliminar
+_The_table_has_no_primary_key_or_OID=La tabla no tiene clave primario ni OID.
+_Many_features_selection_deletion_modification_will_not_be_available_as_they_require_it_for_proper_operation=Muchas funcionalidades (selecci\u00f3n, borrado, modificaci\u00f3n...) no estar\u00e1n disponibles ya que lo requieren para su correcto funcionamiento.
+_Field=Campo
+_Use_labels=Usar etiquetas
+_Use_names=Usar nombres
+_Use_labels_and_names=Usar etiquetas y nombres
+_Documents=Documentos
+_Search_by_attributes=Busqueda por atributos
+_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type=Ya existe un campo llamado "{0}" pero con otro tipo de dato
+_Values_of_data_will_try_to_coerce_to_this_type=Los valores intentar\u00e1n transformarse a este nuevo tipo de dato.
+_Select_feature_in_the_View=Seleccionar entidad en la Vista
+_Form_refreshed=Formulario actualizado
+_Export=Exportar
+_Do_you_want_to_finish_editing_and_save_the_changes=\u00bf Desea terminar edici\u00f3n y guardar los cambios ?
+_Press_cancel_to_cancel_editing_and_changes=Pulse cancelar para cancelar la edici\u00f3n y los cambios.
+_Stop_editing=Detener edici\u00f3n
+_Start_editing=Iniciar edici\u00f3n
+_Record_saved=Registro guardado
+error_saving_data_will_not_save=Error al guardar. Los datos no se guardar\u00e1n
+_Record_removed=Registro eliminado
+error_removing_data_will_not_remove=Error al eliminar. Los datos no se eliminar\u00e1n.
+_Creating_filter_for=Creando filtro para:
+_Form_refreshed=Formulario actualizado.
+_Simplified=Simplificada
+_Advanced=Avanzada
+_Clear=Limpiar
+_Search=Buscar
+_Insert_a_search_expression=Introduzca una expresi\u00f3n de b\u00fasqueda
+_elements=elementos
+_Equals_to=Igual a
+_Like_to=Parecido a
+_Not_equals_to=No igual a
+_Greater_than=Mayor que
+_Greater_or_equal_to=Mayor o igual que
+_Less_than=Menor que
+_Less_or_equal_to=Menor o igual que
+_Or=O
+_And=Y
+_Remove_accumulated_filter=Eliminar el filtro acumulado.
+_View_accumulated_filter=Ver el filtro acumulado.
+_Accumulate_filter=Acumular filtro.
+_Select_the_columns_to_display=Seleccionar las columnas a mostrar
+_Automatically_connect_to_a_database_workspace=Conectar automaticamente a un espacio de trabajo de base de datos
+_Select_the_workspace_you_want_to_connect=Seleccione el espacio de trabajo al que desea conectarse
+_Select_columns_to_display=Seleccionar columnas a visualizar
+_Expression_builder=Constructor de expresiones
+_Databaseworkspace=Espacio de trabajo de BBDD
+_Order_by=Ordenar por...
+_Group_by=Agrupar por...
+_Calculated_columns=Columnas calculadas
+_Remove_all=Eliminar todo
+_None=Ninguno
+_Identity_1_1=Identidad (1:1)
+_Collaboration_1_1=Colaboraci\u00f3n (1:1)
+_Composition_1_N=Composici\u00f3n (1:n)
+_Aggregate_1_N=Agregado (1:n)
+_Relation_type=Tipo de relaci\u00f3n
+_Data_type_selection=Selecci\u00f3n de tipo de datos
+_Select_the_data_type=Seleccione el tipo de dato
+_The_expression_has_undefined_symbols_at_this_moment=La expresion tiene simbolos no definidos en este momento.
+_This_may_not_be_a_mistake=Esto puede no ser un error.
+_Size=Tama\u00f1o
+_Precision=Precision
+_Scale=Escala
+_More=M\u00e1s
+_Apply_changes=Aplicar cambios
+_CSV_loading_parameters=Par\u00e1metros de carga del CSV
+_H2_Spatial_loading_parameters=Par\u00e1metros de carga de H2-Spatial
+_DBF_loading_parameters=Par\u00e1metros de carga del DBF
+_SHP_loading_parameters=Par\u00e1metros de carga del SHP
+_Errors_occurred_during_search=Se han producido errores durante la busqueda
+_Characters_in_display=Caracteres en pantalla
+_Number_of_characters_required_to_display_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated=<html>Cantidad de car\u00e1cteres necesarios para mostrar el dato de este campo.\n<br>Dejelo vacio o cero para que se calcule automaticamente.</html>
+_Total_digits_precision=Digitos totales (precision)
+_Decimal_digits_escale=Digitos decimales (escala)
+_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part=<html>Cantidad de digitos usados para representar el numero.\n<br>Incluye los digitos de la parte entera y los de la parte decimal.</html>
+_Number_of_decimal_digits_used_to_represent_the_number=Numero de digitos decimales usados para representar el numero.
+_You_can_access_the_fields_in_a_table_by_prefixing_the_table_name_followed_by_a_period_For_example_TABLE_FIELD_This_is_necessary_whenever_the_name_of_the_field_and_the_table_match=Puede acceder a los campos de una tabla anteponiendole el nombre de la tabla seguido de un punto.\nPor ejemplo <i>TABLA.CAMPO</i>.\nEsto es necesarios siempre que el nombre del campo y la tabla coincidan.
+_You_must_use_double_quotes_to_use_a_field_that_is_not_a_valid_identifier_When_the_name_does_not_start_with_a_letter_or_contains_characters_that_are_not_letters_numbers_or_underscore=Debe usar comillas dobles para usar un campo que no sea un identificador valido.\nCuando el nombre no comience por letra o\nque contenga caracteres que no sean letras, numeros o guion bajo.
+_Perhaps_you_wanted_to_use_a_similar_field=Quiz\u00e1s quiso usar un campo parecido.
+_The_indicated_field_does_not_exist_in_the_table=El campo indicado no existe en la tabla.
+_Aggregate_functions=Funciones de agregado
+_Select_group_columns_and_aggregate_functions=Seleccione columnas de agrupamiento y funciones de agregado
+_Select_order=Seleccione ordenaci\u00f3n
+_Paste_alphanumeric_values_from_clipboard=Pegar datos alfanum\u00e9ricos desde el portapapeles
+_Features_selector=Selector de entidades
+_Choose_features_from_selection=Elegir las entidades a seleccionar
+_Set_active_layers_to=Cambiar las capas activas a
+_Visible_active_layers=Capas activas visibles
+_Hide_active_layers=Capas activas ocultas
+_Change_visibility=Cambiar visibilidad
+_Visibility=Visibilidad
+_Visible_all_layers=Todas las capas visibles
+_Hide_all_layers=Todas las capas ocultas
+_Inactive_all_layers=Todas las capas inactivas
+_Active_all_layers=Todas las capas activas
+_Bring_to_front=Traer al frente
+_Send_to_back=Enviar al fondo
+_Move_ahead=Mover adelante
+_Move_behind=Mover detr\u00e1s
+_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue=Hay cambios no guardados.\n\u00bfDesea que se guarden antes de continuar?
+_Searching=Buscando
+_The_specified_search_condition_is_not_valid=La condici\u00f3n de b\u00fasqueda especificada no es v\u00e1lida
+_It_is_not_supported_to_search_through_this_field=No es posible buscar por este campo.
+_To_many_links=Demasiados enlaces.
+_Field_not_found=Campo no encontrado.
+_Errors_occurred_during_search=Errores ocurridos durante la b\u00fasqueda
+_Show_all_history=Mostrar todo el historico
+_Show_all_bookmarks=Mostrar todos los favoritos
+_Click_to_see_more_action_in_this_panel=Presiona para ver m\u00e1s acciones
+_Name=Nombre
+_Last_use=\u00daltimo uso
+_Actual_field_name=Nombre del campo actual
+_New_field_name_in_the_export=Nuevo nombre del campo en la exportaci\u00f3n
+_Origin=Origen
+_Attribute_descriptor_type=Tipo del dato en el descriptor
+_Field_size=Tama\u00f1o del campo
+_Export_attribute_as_an_expression_or_as_a_real_field=Exportar el atributo como una expresi\u00f3n o un campo real
+_Select_if_field_has_to_be_exported=Seleccionar si desea exportar el campo
+_Select_in_the_check_box_wich_fields_wanted_to_be_exported_and_configure_its_attributes=Seleccionar los campos que desean ser \nexportados y configura sus atributos.
+_Errors_fetching_new_query=Errores obteniendo la nueva petici\u00f3n
+_Errors_getting_new_feature_set=Errores obteniendo nuevo listado de entidades
+_Check_wich_fields_you_want_to_export_and_configure_its_attributes=Marca las casillas de los campos que deseas que sean exportados
+_Select_the_name_of_the_new_field_size_and_type_that_each_field_will_have_in_the_export_result=Selecciona el nuevo nombre, el tama\u00f1o o el tipo de dato que tendr\u00e1n los campos en la exportaci\u00f3n
+_Show_form=Mostrar formulario
+_is_foreing_key=Es clave ajena
+_is_closed_list=Es lista cerrada
+_code=C\u00f3digo
+_Label_formula=Etiqueta de la formula
+_ForeingKey=Clave ajena
+_Bookmark_is_being_edit_accept_or_discard_modification_before_exit=Favorito est\u00e1 siendo editado. Acepta o \ndescarta los cambios antes de salir.
+_Bookmark_not_saved=Favorito no guardado
+_Field_not_found_in_this_table=Campo no encontrado en esta tabla
+_Bookmark_already_exists_with_this_name_choose_a_different_name=Favorito ya existe con este nombre, elige uno diferente.
+_Bookmark_name_conflict=Conflicto del nombre del favorito
+_There_are_hidden_values=Hay valores ocultos
+_Close=Cerrar
+_Is_null=Es nulo
+_Is_not_null=No es nulo
+_New_field=Campo nuevo
+_Not_handle_null_values=No manejar los valores nulos
+_Null_values_as_true=Valores nulos como verdaderos
+_Null_values_as_false=Valores nulos como falsos
+_First_value=Primer valor
+_Last_value=\u00daltimo valor
+_Minimum_value=Valor m\u00ednimo
+_Maximum_value=Valor m\u00e1ximo
+_Summation=Sumatorio
+_Postprocess_parameters=Par\u00e1metros del postproceso
+_Parameters_for_XpostprocessNameX_postprocess_on_XtableNameX=Par\u00e1metros para el postproceso {0} en la capa {1}
+_Errors_occurred_load_search_post_process=Errores en el proceso de carga de los resultados del postproceso
+_PostProcess=Postproceso
+_Distinct_on_field=Campo de valor \u00fanico 
+_normalResults=Resultados de b\u00fasqueda
+_searchPostProcessResults=Resultados del Postproceso
+Filter=Filtrar
+_Filter_by_attributes=Filtrar por atributos
+_Field_to_group_by_unique_values=Campo a agrupar por valores \u00fanicos
+_Aggregate_operations=Operaciones de agregado
+_Project_not_saved=Proyecto no guardado
+_Copy_rows=Copiar filas
+_Connect_to_database_workspace=Conectar a espacio de trabajo
+_Connect=Conectar
+_Disconnect=Desconectar
+_Manage_Dabatase_workspace=Gestionar espacio de trabajo
+_Visible_columns=Columnas visibles
+_Hidden_columns=Columnas no visibles
+_Open_palette_from_layer=Abrir paleta desde capa
+_Rules=Reglas
+_Default_rules=Reglas por defecto
+_Custom_rules=Reglas personalizadas
+_Validate_features_before_insert=Validar features antes de insertarlas
+_Validate_features_at_finish_editing=Validar features al terminar edici\u00f3n
+_At_finish_editing=Al terminar edici\u00f3n
+_At_insert=Al insertar
+_Check_at_finish_editing=Comprobar al terminar edici\u00f3n
+_Check_at_insert=Comprobar al insertar
+_Validation=Validaci\u00f3n
+_Name=Nombre
+_Value=Valor
+_Main=Principal
+_Filter_for_values=Filtro para los valores
+_Edited_features=Features editadas
+_Show_only_not_validated_features=Mostrar las features no validadas
+_Use_default_format_to_view_geometry=Usar el formato por defecto para mostrar la geometria
+_Use_WKT_to_view_geometry=Usar WKT para mostrar la geometria
+_Use_WKB_to_view_geometry=Usar HexWKB para modtrar la geometria
+_Connection=Conexi\u00f3n
+_Connection_ok=Conexi\u00f3n correcta
+_Test_connection_failed=Ha fallado la prueba de conexi\u00f3n
+_Test_connection=Prueba de conexi\u00f3n
+_New_selection=Nueva selecci\u00f3n
+_Add_to_selection=A\u00f1adir a la selecci\u00f3n
+_Intersect_with_selection=Intersectar con la selecci\u00f3n
+_Columns=Columnas
+new_layer=Nueva capa
+_Add_to_bookmarks=A\u00f1adir a favoritos
+_Reset=Restablecer
+_Problems_finish_table_editing=Problemas finalizando la edici\u00f3n de la tabla
+_Problems_cancel_table_editing=Problemas cancelando la edici\u00f3n de la tabla
+_Read_only=Solo lectura
+_Indexed=Indexado
+_Loading=Cargando...
+_Types_detection=Detecci\u00f3n de tipos...
+_Preparing_writing=Preparando la escritura...
+_Writing_records=Writing records...
+_Calculating_envelope=Calculando los limites...
+_Creating_the_index_of_the_lines=Creando el indice de las lineas...
+_Calculating_number_of_lines=Calculando numero de lineas...
+_Show_edited_features=Mostrar registros editados
+_Show_form=Mostrar formulario
+_Show_layer_form=Mostrar formulario de la capa
+_Open_palette_from_layer=Abrir paleta desde capa
+_Extra_column=Columna extra
+_Default_format=Formato por defecto
+_Temporal_file_path=Ruta de fichero temporal
+_Creating_data_base=Creando base de datos
+_Getting_features_from_query=Obteniendo entidades del filtro...
+_Executing_post_process=Ejecutando postproceso
+_Processing_features=Procesando entidades...
+_Error_in_post_process_operation=Error en operaci\u00f3n de postproceso
+_Search_ended=Busqueda terminada
+_Processing_search=Procesando busqueda...
+_Post_process_canceled=Postproceso cancelado
+_Post_process_ended=Postproceso terminado
+_Copying_rows_to_clipboard=Copiando filas al portapapeles...
+_Copy_ended=Copiado terminado
+_The_expression_can_not_be_evaluated_right_now_It_could_be_valid_when_all_changes_has_been_applied=
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,1523 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(maximum scale)
+(escala_minima)=(minimum scale)
+1\:=
+_(Simbolo_unico)=(Unique symbols)
+__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
+abajo=Down
+abrir=Open
+abrir_plantilla=Open template
+abrir_proyecto=Open project
+abrir_tooltip=Open an existing project
+Abrir_una_capa=Open layer
+Accion_Predefinida=Predefined action
+aceptar=Accept
+Aceptar=Accept
+acerca_de=About...
+activar=Activate
+activar_regla=Activate ruler
+activos=Active
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_layer=Add layer
+add_rows=Add rows
+add_to_locator=Add to Locator
+adjust_transparency=Set transparency
+agrupacion=Grouping
+agrupar=Group
+agrupar_capas=Group layers
+agrupar_graficos=Group graphics
+agrupar_linea=Group graphic line with graphics
+Ajustar_transparencia=Adjust transparency
+ajustes_linea_grafica=Graphic line settings
+Al_leer_la_leyenda=Reading legend
+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
+alta=High
+alto=Height
+altura=Height\:
+Altura_fija_de_texto=Fixed text height
+ambito=Scope
+Anadir=Add
+Anadir_al_conjunto=Add to set
+Anadir_capa=Add layer
+Anadir_Capa=Add layer
+anadir_tag=Add tag
+Anadir_todos=Add all
+ancho=Width
+ancho_alto=Width x Height
+anchura=Width\:
+Aplicar=Apply
+Archivo=File
+arriba=Up
+ascending_order=Ascending order
+ascending_order_tooltip=Sort by selected field in ascending order
+attributes_XcolonX=Attributes\:
+Atributo=Attribute
+automatico=Automatic
+Ayuda=Help
+back=Previous
+background_color=Background color
+baja=Low
+Bajar_capa=Move layer down
+bandas=Bands
+barra=Bar\:
+base=base
+base_datos=Data base
+bmp=BMP files
+Bold=Bold
+borra_seleccion=Clear selection
+borrador=Draft
+borrar=Delete
+box=box
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+Browse_symbols=Browse symbols
+cajetin=Box
+Calcular_intervalos=Compute intervals
+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_nombre=Rename
+campo=Field
+Campo=Field
+campo_altura_texto=Text field heigth\:
+Campo_de_clasificacion=Classification field
+Campo_de_clasificacion_XcolonX=Classification field\:
+Campo_de_etiquetado=Labeling field
+Campos=Fields
+cancel=Cancel
+Cancel=Cancel
+cancelar=Cancel
+Cancelar=Cancel
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Locator layers
+Centimetros=Centimeters
+cerrar=Close
+Cerrar=Close
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+choose_color=Choose color
+circulo=Circle
+clave=Code
+close=Close
+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=Color
+Color_final=End color
+Color_final_XcolonX=End color\:
+Color_inicio=Begin color
+Color_inicio_XcolonX=Begin color\:
+color_texto=Text color\:
+comentarios=Comments
+comentarios_XcolonX=Comments\:
+comenzar_edicion=Start editing
+compleja=Complex
+configurar=Configure
+configurar_localizador=Configure locator map
+Configurar_localizador=Configure locator ...
+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
+conservar_escala_visualizacion=Maintain viewing scale
+consulta=Query
+Contengan=Contain
+contraste=Contrast
+coor_geograficas=Geographic coordinates
+copiar=Copy
+copy=Copy
+cortar=Cut
+creation_date=Creation date
+creation_date_XcolonX=Creation date\:
+Crucen_con=Cross over
+cuando_activo=When active
+cut=Cut
+Dado_un_campo_de_atributos=Given a attribute field
+datum=Datum
+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
+dehacer=Undo
+delete_field=Delete field
+Derecha=Right
+Derecho=Right
+desagrupar=Ungroup
+desagrupar_capas=Ungroup layers
+desagrupar_graficos=Ungroup graphics
+descending_order=Descending order
+descending_order_tooltip=Sort by selected field in descending order
+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>
+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
+distance_units=Measuring units
+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
+dont_find_the_file=File not found
+do_you_want_to_locate_the_file=Do you want to locate the file?
+draw_text_only=Draw text only
+driver=Driver
+driver_error=Driver error.
+Dxffiles=DXFFiles
+edicion=Editing
+editable=Editable
+Editar_leyenda=Edit style
+editar_vertices=Edit vertex
+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\:
+Eliminar=Delete
+eliminar_capa=Delete layer
+eliminar_columna=Remove column
+eliminar_extremos=Remove edges
+eliminar_fila=Remove row
+en_el_mapa=In the layout\:
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in units
+Encuadre=Zoom Manager
+Encuadre_Vista=View frame pan
+enlace_vivo=Active link
+Enlazar_a_fichero_de_texto=Link to text files
+Enlazar_a_ficheros_de_imagen=Link to image files
+equal_intervals=Equal intervals
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_leyenda=Error saving legend
+Error_guardando_la_plantilla=Error saving the template
+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
+espaciado_horizontal=Horizontal grid spacing
+espaciado_vertical=Vertical grid spacing
+espacio=Space\:
+estadisticas=Statistics
+este_por_debajo_de_=To be under
+este_por_encima_de=To be over
+Esten_contenidos_en=Contained in
+Etiqueta=Label
+Etiquetados=Labeling
+etiquetas=Lables\:
+Etiquetas_estandar=Standard labels
+Examinar=Browse
+export=Export
+exportar=Export
+exportar_pdf=Export to pdf
+exportar_ps=Export to ps
+expresion_error=Expresion error
+extension=Extension
+Extent=Extent
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+factor_zoom_incorrecto=Incorrect zoom factor.
+fallo_capas=Layer access error.  The following layers will be deleted from the proyect.
+family=Family
+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?
+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
+filtro=Filter
+finish=Finish
+Font=Font
+font_type_XcolonX=Font type\:
+formato=Format
+Formato_de_numero_erroneo=Incorrect number format
+formato_incorrecto=Invalid format
+format_for_legends=%(ext) format for legends
+fuente=Font
+General=General
+georeferenciado=Georeferenced
+gestion_encuadre=Zoom Manager
+grados=Degrees\:
+Grados=Degrees
+Graficos=Graphics
+grosor_linea=Line width\:
+group=Group
+group_graphic_line=Group graphic line
+grupo=group
+guardado=Saved in
+guardar=Save
+Guardar=Save
+guardar_cambios=Save changes?
+guardar_como=Save as...
+guardar_como_plantilla=Save as template
+Guardar_el_zoom_actual=Save current zoom
+Guardar_leyenda=Save legend
+guardar_proyecto=Save project
+guardar_tooltip=Save changes to project
+Habilitar_etiquetado=Enable labeling
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=Horizontal space
+Identificar_Resultados=Identify results
+Igual_que_la_impresora=Same as printer
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Implimir=Print
+importar=Import
+Imprimir=Print
+Indexando=Indexing...
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+Inferior=Lower
+info=Information
+informacion=Information
+Informacion=Information
+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>
+input_output_error=Input/Output error.
+insert_row=Insert row
+Insertar=Insert
+insertar_cajetin=Insert grid
+insertar_circulo=Insert circle
+insertar_columna=Insert column
+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_rectangulo=Insert rectangle
+insertar_texto=Insert text
+insertar_vista=Insert view
+Intersecten_con=Intersected with
+Intervalo=Interval
+Intervalos=Intervals
+introduce_nombre=Type the new name
+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_value_for_gap=Invalid value for gap
+invert_selection=Invert selection
+Italic=Italic
+Izquierda=Left
+Izquierdo=Left
+join=Join
+jpg=JPEG files
+keep_the_order_of_values=Keep the order of values.
+kilometros=Kilometers
+Kilometros=Kilometers
+layer_to_which_belong_the_elements_selected_previously=Layer to which belong the elements selected previously
+leyenda=Legend
+Leyenda=Legend
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labeling. Please, change the legend before removing the union.
+Leyenda_Por_Defecto=Default legend
+linea=Line
+linea_grafica=Graphic line
+lineal_directo=Direct linear
+link=Link
+Link=Link
+localizador=Locator
+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.
+m/pixel=metros/pixel
+malla_activada=Active grid
+manage_fields=Manage fields
+mantener_intervalo=Keep interval
+map_units=Map units
+mapa=Map
+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
+max_length_is=Max length is
+maximo=Maximum
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+media=Mean
+medir_area=Measure area
+medir_distancias=Measure distances
+metadatos=Metadatos
+metros=Meters
+Metros=Meters
+Milimetros=Milimeters
+Millas=Miles
+minimo=Minimum
+modificar=modify
+modification_date=Modification date
+mostrar_escala_numerica=Show numeric scale.
+Mostrar_siempre=To show always
+mostrar_unidades=Show units
+move_elements=Move elements
+Muestra_atributos=Show attributes of selected layers.
+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
+multiple_label_by_scale=Multiple label by scale
+natural_intervals=Natural intervals
+navegacion=Navigation
+navegacion_vista=Navegation in a view
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_field=New field
+new_field_properties=New field properties
+next=Next
+ninguna_capa_seleccionada=No layer selected
+ninguna_impresora_configurada=No printer set
+Nivel_de_transparencia=Transparency level
+no=No
+no_activos=Not active
+No_de_intervalos=Nr of intervals
+No_de_intervalos_XcolonX=Nr of intervals\:
+no_es_posible_aplicar_leyenda_vacia=It's imposible to apply empty legend.
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+no_hay_campo_seleccionado=
+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_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_se_puede_borrar_una_capa_en_edicion=It's not possible to remove a layer that is being edited
+no_visibles=Not visible
+nombre=Name
+Nombre=Name
+Nombre_XcolonX=Name\:
+nombre_no_valido=Invalid name
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+nombre_sesion=Session name
+none=none
+none_selected=None selected
+normal=Normal
+north=North
+not_GVL_save_question=The selected format is not gvSIG native, it can be used to share legends with other software.\nIf you'd like, in the future, to import back this legend to gvSIG,\nwe recommend to use GVL format in order to avoid losing some of the original legend settings.
+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_tooltip=Create a new project
+num_bandas=Band count
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+numero_decimales_mostrar=Number of decimals
+numero_incorrecto=Invalid value
+ok=Ok
+opacidad=Opacity
+operacion_cancelada=Cancelled operation
+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.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\:
+owner=Owner
+owner_XcolonX=Owner\:
+parse_expresion_error=Parse expresion error.
+paste=Paste
+paste_elements=Paste elements
+path=Path
+pdf=Pdf
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+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
+Pies=Feet
+pila_de_comandos=commands stack
+pixeles=pixels
+pixels=pixels
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+png=PNG files
+poligono=Polygon
+polilinea=polyline
+poner_capas_a=Set layers as
+por_debajo_de=below\:
+por_encima_de=above\:
+Por_favor_active_la_capa=Please, activate the layer
+posicion_linea=Position of the line
+precision=Precision
+preparar_pagina=Prepare page
+Preparar_pagina=Prepare page
+presentacion=Presentation
+previsualizacion=Preview
+Previsualizacion=Preview
+Previsualizacion_de_simbolo=Symbol preview
+priority_max=Maximum priority
+priority_int=Medium priority
+priority_min=Minimum priority
+priority_blocked=Blocked
+projection=Projection
+project_properties=Project properties
+propiedad=Oroperty
+propiedades=Properties
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=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_texto=Properties of text
+propiedades_vista=View properties
+Proyecciones=Projections
+ps=Ps
+puerto=Port
+Pulgadas=Inches
+punto=Point
+quantile_intervals=Quantile interval
+quiere_continuar=Would you like to continue?
+Quitar=Remove
+Quitar_capa=Remove layer
+quitar_enlaces=Remove links
+Quitar_todos=Remove all
+quitar_uniones=Remove joins
+rango_de_escalas=Scale range
+Rango_de_escalas=Rank of scales
+realce=Enhance
+realmente_desea_guardar=Would you really like to save?
+recargar=Reload
+recorte_colas=Tail trimming
+recorte_vista=Cut to view
+rectangulo=Rectangle
+recuento=Recount
+Recuperar_leyenda=Load legend
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+reference_system=Reference System
+refrescar=Refresh
+rehacer=Redo
+rellenar_marco_vista=Fill view framework
+relleno=Fill\:
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+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_resultado=Resolution of the result\:
+resto_valores=Other values
+restore_palette=Restore palette
+rotation_field=Rotation field
+salir=Exit
+salir_tooltip=Exit
+salvar_raster=Save as raster
+Sample=Sample
+Se_superponen_a=Over
+Sean_disjuntos_a=Disjoint as
+Sean_iguales_a=Same as
+seleccion=Selection
+seleccion_fuente=Font selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+Seleccionar=Select
+seleccionar_capas=Select Layers
+seleccionar_capas_raster=Select raster layers
+seleccionar_una_accion_XcolonX=Select an action\:
+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
+seleccionar_por_poligono=Select by polygon
+seleccionar_por_punto=Select by point
+seleccionar_por_rectangulo=Select by rectangle
+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_a_enlazar=Select table to link
+seleccione_tabla_origen=Select origin table of the join
+select_from_the_active_layers=Select from the active layers the features that accomplish the selected condition
+selection_color=Color selection
+selection_up=Move selection to top
+semantic_expresion_error=Semantic expresion error.
+separator=Separator
+Servidor=Server
+Shapefile=Shapefile
+Show_grid=Show grid
+show_this_dialog_next_startup=Show this dialog on next startup
+si=yes
+siempre=Always
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Unique symbols
+Simbologia=Symbols
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+sin_titulo=Untitled
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+Size=Size
+sobre_la_barra=On the scale bar
+Solo_para_capas_vectoriales=Only for vector layers
+sorter=Sorter
+start_edition=Start editing
+statistics=Statistics
+stop_edition=Finish editing
+export_and_stop_editing_message=<html><p>Export and stop editing</p><br><b>Export: </b>Export the table<br><b>Discard: </b>Discard and lose changes<br><b>Continue: </b>Continue editing without saving<br></html>
+stop_editing_message=<html><p>Stop editing</p><br><b>Save: </b>Save changes<br><b>Discard: </b>Discard and lose changes<br><b>Continue: </b>Continue editing without saving<br></html>
+Style=Style
+Subir_capa=Move layer up
+suma=Sum
+Superior=Upper
+symbol_selector=Symbol selector
+Tabla=Table
+Tabla_de_Atributos=Table of attributes
+tablas=Tables
+Tablas=Tables
+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
+terminar=Terminate
+terminar_edicion=Finish editing
+texto=Text
+this_table_is_not_self_editable=Table not editable
+tipo_dato=Data type
+tipo_de_intervalo=Interval type
+tipo_de_intervalo_XcolonX=Interval type\:
+tipo_de_leyenda=Type of legend
+tipo_fichero_proyecto=gvSIG project file(*.gvsproj)
+tipo_fichero_proyecto_bak=gvSIG project security file copy (*.gvsproj.bak)
+tipo_linea=Stroke\:
+tipo_relleno=Fill\:
+tipo_simbolo=Type of symbol\:
+tipos_de_documentos=Document types
+titulo_fframetext=Text field title
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Toquen=In contact with
+transparencia=Transparency
+Transparencia=Transparency
+transparencia_pixel=Transparency per pixel
+ungroup=Ungroup
+unidades=Units\:
+Unidades=Units\:
+untitled=Untitled
+url=url
+Usar_indice_espacial=Use spatial index
+usar_marco=Use frame
+usar_titulo=Use title
+usuario=User
+utilizar_margenes_impresora=Use printer margins
+vacia=Empty
+Valor=Value
+Valores=Values
+Valores_unicos=Unique values
+varianza=Variance
+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
+vertical=Vertical
+vertical_space=Vertical space
+visible=Visible
+visibles=Visible
+Vista=View
+vistas=Views
+visualizacion=Viewing
+Visualizacion=Visualization
+visualizar_cuadricula=Visualize grid
+warning=Warning
+xmax=Maximum X
+xmin=Minimum X
+Yardas=Yards
+ymax=Maximum Y
+ymin=Minimum Y
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+Zoom_Acercar=Zoom in
+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_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_Real=1\:1 Zoom
+Zoom_Select=Zoom to selection
+too_large_border=Too large border
+
+categories=Categories
+cannot_apply_to_a_non_polygon_layer=Cannot apply to a non-polygon layer
+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.
+in_layer=in layer
+could_not_setup_legend=Could not setup legend
+labeling_field=Labeling field
+dot_size=Dot size
+dot_value=Dot value
+outline_color=Border color
+densities=Densities
+high=High
+medium=Medium
+low=Low
+Defines_a_dot_density_symbol_based_on_a_field_value=Defines a dot density symbol based on the value of a field
+dot_density=Dot density
+features=Features
+preview=Preview
+quantities=Quantities
+choose_symbol=Choose symbol
+legend=Legend
+label_text_in_the_TOC=Label text that will appear in the TOC
+exception_cloning_legend=Exception cloning legend.
+character_marker=Character marker
+character_marker_symbol=Character marker symbol
+marker_fill=Marker fill
+choose_marker=Choose marker
+outline=Border
+grid=Grid
+Grid_settings=Grid settings
+random=Random
+fill_properties=Fill properties
+offset=Offset
+separation=Separation
+simple_fill=Simple fill
+simple_label=Simple label
+fill_color=Fill color
+outline_width=Border width
+trying_to_add_a_non_TypeSymbolEditor_panel=Trying to add a non SymbolEditor panel.
+two_panels_with_the_same_name=Two panels with the same name.
+symbol_property_editor=Symbol property editor
+properties=Properties
+layers=Layers
+type=Type
+units=Units
+layer=Layers
+preview_not_available=Preview is not available
+point_symbols=Marker symbols
+line_symbols=Line symbols
+polygon_symbols=Polygon symbols
+shape_type_not_yet_supported=Shapetype not yet supported
+symbol_library=Symbol library
+could_not_find_symbol_directory=Could not find symbols directory
+options=Options
+new=New
+reset=Reset
+save=Save
+size=Size
+angle=Angle
+width=Width
+save_error=Save error
+marker_fill=Marker fill
+simple_line=Simple line
+simple_marker=Simple marker
+x_offset=X offset
+y_offset=Y offset
+simple_marker_symbol=Simple marker symbol
+enter_description=Enter description
+syntax_error=Syntax error
+error=Error
+label_expression_help=
+expression=Expression
+label_expression_editor=Label expression editor
+method=Method
+class=Class
+classes=Classes
+text_string=Text
+text_symbol=Text symbol
+font_color=Font color
+enable_labeling=Enable labeling
+visualization=Visualization
+label_styles=Label styles
+placement=Placement
+edit_expression=Edit expression
+SQL_query=SQL query
+remane_class=Rename class
+delete_class=Delete class
+add_class=Add class
+label_features_in_this_class=Label features in this class
+labeling=Labeling
+shape_type_error=Shape type error.
+enter_new_name=Enter new name
+placement_properties=Placement properties
+point_settings=Point settings
+line_settings=Line settings
+polygon_settings=Polygon settings
+position=Position
+orientation=Orientation
+parallel=Parallel
+following_line=Following the line
+perpedicular=Perpendicular
+duplicate_labels=Duplicate layers
+place_one_label_per_feature_part=Place one label per feature part
+place_one_label_per_feature=Place one label per feature
+remove_duplicate_labels=Remove duplicate labels
+label_features_in_the_same_way=Label features in the same way
+define_classes_of_features_and_label_each_differently=Define classes of features and label each differently
+label_only_when_selected=Label only when the feature is selected
+could_not_apply_legend=Could not apply legend
+quantity_by_category=Quantity by category
+graduated_symbols=Graduated symbols
+multiple_atributes=Multiple attribute
+too_large_border=Too large border
+file=File
+file_not_found=File not found
+file_corrupt=File corrupt
+unsupported_legend=Unsupported legend
+symbol=Symbol
+from=From
+to=To
+template=Template
+generating_intervals=Generating intervals
+draw_quantities_using_symbol_size_to_show_relative_values=Draws quantities using symbol size to show relative values.
+could_not_get_shape_type=Could not get shape type.
+general=General
+text_field=Text
+text_height_field=Text height field
+rotation_height=Rotation field
+accessing_file_structure=Acessing file structure
+could_not_restore_text_height_field=Could not restore text height field.
+could_not_restore_rotation_field=Could not restore rotation field.
+could_not_restore_text_field=Could not restore text field.
+font=Font
+usupported_layer_type=Unsupported layer type
+driver_exception=Driver exception
+legend_exception=Legend exception
+variation_by=Variation by
+color_ramp=Color ramp
+values_field=Value fields
+color_field=Color field
+symbol_field=Symbol field
+getting_layer_shape_type=Getting layer shape type
+draw_quantities_for_each_category=Draw quantities for each category.
+recovering_recordset=Recovering recordset.
+fields=fields
+user_defined_labels=User defined labels
+label_attributes_defined_in_table=Label attributes defined in table
+current=Current
+text_symbols=Text symbols
+label_expression_help=
+fixed_height=Fixed height
+location=Location
+location_along_the_lines=Location along the lines
+at_best=At best
+at_begin=At begin
+at_end=At end
+label-point-priority-help=Priority: 0 = Blocked, 1 = Highest, 3 = Lowest
+change_location=Change location
+offset_labels_on_top_of_the_points=Offset labels on top of the points
+offset_labels_horizontally=Offest labels horizontally around the point.
+always_straight=Always straight
+always_horizontal=Always horizontal
+orientation_system=Orientation system
+line=Line
+page=Page
+below=Below
+on_the_line=On the line
+above=Above
+getting_shape_type=Getting shape type
+confirmation_dialog=Confirmation dialog
+options.view.behavior.screen_refreshrate=Screen refresh rate
+options.view.behavior.screen_refreshrate.none=<html><b>None</b> (fastest drawing)</html>
+options.view.behavior.screen_refreshrate.half=<html><b>Half</b></html>
+options.view.behavior.screen_refreshrate.full=<html><b>Full</b> (real time response)</html>
+options.view.behavior.screen_refresh_rate.help=<html><b>Note:</b> the screen refresh rate allows to improve the map navigation experience by visually reducing the latency time between map drawings. This is especially interesting while editing. However, the refresh is a task that slightly increases CPU processing time (&lt;15%). So, the greather refresh rate the more time is required to draw a map.</html>.
+warning_you_must_input_the_exact_name_this_difference_between_capital_letters_and_small_letters=<html>Warning: you must input the exact name (this is case-sensitive).</html>
+formato_del_campo_incorrecto=Incorrect format
+error_opening_the_document=Error opening the document
+height=Height
+field=Field
+gradient_fill=Gradient fill
+intervals=Intervals
+percentage=Percentage
+style=Style
+gradient_color=Gradient color
+gradient_fill_symbol=Gradient fill symbol
+buffered=Buffered
+lineal=Lineal
+circular=Circular
+rectangular=Rectangular
+bitmap_and_svg_image_files=Bitmaps and SVG image files
+picture_fill=Picture fill
+scale=Scale
+could_not_open_picture_file=Could not open picture file
+picture_fill_symbol=Picture fill symbol
+text=Text
+formatted=Formatted
+advanced=Advanced
+simple_text_symbol=Simple text symbol
+simple_fill_symbol=Simple fill symbol
+fill_opacity=Fill opacity
+use_outline=Use outline
+outline_opacity=Outline opacity
+failed_installing_symbol_editor=Failed installing symbol editor
+in_the_world=In the world
+in_the_paper=In the paper
+marker_fill_symbol=Marker fill symbol
+apply_visual_correction_to_glyph_for_precise_size_and_position=Apply visual correction to glyph for precise size and positioning
+arrow_decorator=Arrow decorator
+use_decorator=Use decorator
+arrow_sharpness=Arrow sharpness
+number_of_positions=Number of positions
+flip=Flip
+flip_all=Flip all
+flip_first=Flip first
+rotation=Rotation
+rotate_symbol_to_follow_line_angle=Rotate symbol to follow line angle
+keep_symbol_at_fixed_angle_to_page=Keep symbol at fixed angle to page
+no_desc=No description
+line_style=Line style
+mask=Mask
+halo=Halo
+line_fill=Line fill
+line_fill_symbol=Line fill symbol
+description=Description
+merge=Merge
+symbol_levels=Symbol levels
+draw_symbols_in_specified_order=Draw symbols in specified order
+default_view=Default view
+advanced_view=Advanced view
+marker_style=Marker style
+use_outline=Use outline
+select_a_color_scheme=Select a color scheme
+picture_line_symbol=Picture line symbol
+failed_accessing_file=Failed accessing file
+picture_file=Picture file
+selection_picture_file=Selection picture file
+picture_marker_symbol=Picture marker symbol
+style_library=Style library
+new_style=New style
+editing=Editing
+edit_style=Edit style
+tools=Tools
+add_text_area=Add text area
+offset_label=Offset label
+marker_line=Marker line
+marker_line_symbol=Marker line symbol
+undefined_for_StylePreviewer_use=Undefined for StylePreviewer use
+instead=instead
+marker=Marker
+fill=Fill
+behavior=Behavior
+line_properties=Line properties
+join_style=Join style
+join_bevel=Bevel
+join_miter=Miter
+join_round=Round
+end_style=End style
+cap_butt=Butt
+cap_round=Round
+cap_square=Square
+fill_pattern=Fill pattern
+unsupported_format=Unsupported format
+_Metadata=Metadata
+Central_point=Central point
+Final_point=Final point
+Insert_point=Insert point
+Intersection_point=Intersection point
+Medium_point=Middle point
+Nearest_point=Nearest point
+Perpendicular_point=Perpendicular point
+Pixel_point=Pixel-adjusted
+Quadrant_point=Quadrant-adjusted
+Tangent_point=Tangent point
+All_supported=All supported
+_reprojected_on_the_fly=reprojected on the fly
+_Unknown_CRS_so_assumed=CRS unknown. Assumed
+_Set_this_CRS_as_app_default=Set as application's default CRS
+_create_a_new_project=Create a new project
+_open_a_project=Open a project
+_save_the_current_project=Save current project
+_Pixels=Pixels
+_Fixed_color=Single color
+_Field_to_use_in_label=Field to use in label
+Setup=Settings
+Selection=Selection
+_Clear=Clear
+SelectAll=Select all
+Reverse=Reverse
+Simple=Simple
+Select_by_buffer=Select by buffer
+Select_by_circle=Select by circle
+Select_by_layer=Select by layer
+Select_by_rectangle=Select by rectangle
+Select_by_polygon=Select by polygon
+Show=Show
+_Project_manager=Project manager
+Console=Console
+_Show_console_error_messages=Show console error messages
+Filter=Filter
+Set_to=Set to
+_Set_all_layers_to=Set all layers to
+Visible=Visible
+Hidden=Hidden
+Active=Active
+Inactive=Inactive
+View=View
+Query=Query
+Distance=Distance
+Area=Area
+unidades_area=Area units
+Add_layer=Add layer
+Locator_setup=Locator setup
+Properties=Properties
+Restore_from_tool=Restore
+Convert_to_tool=Convert
+Help=Help
+Contents=Contents
+About=About
+Window=Window
+Navigation=Navigation
+Pan=Pan
+Zoom_in_to_center=Zoom into center
+Zoom_out_to_center=Zoom out from center
+Zoom_in=Zoom in tool
+Zoom_out=Zoom out tool
+Zoom_back=Previous zoom
+Zoom_next=Next zoom
+Zoom_all=Zoom to all
+Zoom_to_selection=Zoom to selection
+Locator_by_attribute=Zoom to search result
+Center_view_to_point=Center view at point
+Frame_manager=Frame manager
+File=File
+_File_cannot_be_empty=A file must be selected
+_Delete_selected_objects=Delete selected objects
+_Information_by_point=Information by point
+_Query_distance=Query distance
+_Query_area=Query area
+_Reverse_selection=Reverse selection
+_Simple_select=Simple selection
+_Clear_selection=Clear selection
+_selectionSet=Set selection
+_featureDelete=Remove feature
+_Clipboard_error=Clipboard error
+_Cartographic_support_panel_title=Printed map units
+_Preferences_persistence_error=Preferences persistence error
+_Default_measure_units=Default measure unit
+_Default_measure_units_reference_system=Default measure unit reference system
+_Unable_to_copy_symbols_from_main_plugin=Unable to copy symbols from main plugin
+symbols_browser=Symbol browser
+_All=All
+_Numeric=Numeric
+_String=String
+_Date=Date
+_Available_functions_and_operators=Available functions and operators
+_Available_fields=Available fields
+_User_expression=User expression
+_Double-click_to_paste_into_expression_box=Double-click on field, operator or function name to paste it into text box
+_Date_or_time=Date/time
+_Geometry=Geometry
+_Boolean=Logical
+_filename_warning_architecture_or_os_mismatch=warning_architecture_or_os_mismatch_en.txt
+_Layer_order_in_TOC=Layer order in TOC
+_Order=Sorting
+_Description=Description
+_Option_not_available_for_this_geometry_type=Option not available for this geometry type
+_Default_color=Default color
+_Default_fill_color=Default fill color
+_Random=Random
+_Default_font=Default font
+_Symbols_folder=Symbols folder
+_No_output_format_available=No output format available
+_Unable_to_save_legend=Unable to save legend
+_No_input_format_available=No input format available
+_Unable_to_read_legend=Unable to read legend
+_There_are_no_documents_to_paste=There are no documents to paste
+_Select_resources_to_save_before_closing_current_project=Select resources to save before closing current project
+view_contain_layers=The view has already layers \n but their projection are not going to be changed. \n This could cause problems in some geoprocesses.
+_Instalar_complementos_adicionales_no_disponibles_durante_el_proceso_de_instalacion=Install Additional addons not available during the installation process?
+_Finalizando_proceso_de_instalacion=Completing installation process
+_User_0_is_not_authorized_to_1_on_resource_2_3=The user "{0}" is not authorized to "{1}" on resource "{2}"\n( {3} )
+_Unauthorized_access=Unauthorized access
+
+_Number_of_features_copied_to_clipboard=Number of features copied to clipboard
+_Number_of_features_pasted_from_clipboard=Number of features pasted from clipboard
+_Number_of_features_from_clipboard_discarded_due_to_bad_format=Number of features from clipboard discarded due to bad format
+_Pasting_features_from_clipboard=Pasting features from clipboard
+_Zoom_to_added_features_question=Zoom view to added features?
+_Unable_to_zoom_to_features=Unable to zoom to features
+_Copy_selected_features_to_clipboard=Copy features
+_Paste_features_from_clipboard=Paste features
+_Clipboard_has_no_valid_info_or_is_empty=Clipboard has no valid data or is empty
+_No_features_found_in_clipboard=No features found in clipboard
+_Include_alphanumeric_attributes_Question=Include alphanumeric attributes?
+
+_Undo_last_modification_in_the_active_layer=Undo last edit in active layer
+_Undo=Undo
+_Redo_last_modification_in_the_active_layer=Redo last edit in active layer
+_Redo=Redo
+_Undo_redo_history=Undo/redo history
+
+_Selection_by_attributes=Selecci\u00f3n por atributos
+_Select_by_attributes_old=Select by attributes (old)
+_New_selection=New selection
+_Add_to_selection=Add to selection
+_Filter_selection=Filter selection
+text_editor=Text editor
+first=First
+last=Last
+_first=First
+_last=Last
+_back=Previous
+_next=Next
+search=Search
+Development=Development
+Show_actions_information=Show actions information
+Show_menu_information=Show menu information
+Show_menu_by_plugin_information=Show menu by plugin information
+Show_plugin_report_of_actions_menus_and_icons=Show plugin report of actions menus and icons
+Show_icon_theme_information=Show icon theme information
+Show_persistence_factories=Show persistence factories
+Create_installation_package=Create installation package
+Show_editing_monitor=Show editing monitor
+Disposables=Disposables
+Free_all=Free all
+Show_pendings=Show pendings
+_Translations_package=Translation packages
+document_not_available=Document not available
+symbol_level=Level %(level)
+
+_Selected_features=Total Features/Selected Features
+Data_source=Data source
+Source_type=Source type
+_{0}_metadata={0} metadata
+
+_some_project_elements_could_not_be_loaded=Some project elements could not be loaded.
+_maybe_you_need_to_install_any_plugins=Maybe you need to install any plug-ins.
+_see_error_log_for_more_information=See error log for more information.
+
+_upper_left_corner=Upper left corner
+_upper_right_corner=Upper right corner
+_lower_right_corner=Lower right corner
+_lower_left_corner=Lower left corner
+_Remembered_dialogs=Remembered dialogs
+_Remember_responses_from_selected_dialogs=Remember responses from selected dialogs
+_It_looks_like_youre_using_percent_o_question_and_the_like_operator_is_not_being_used_I_should_probably_keep_the_equal_operator_by_like_Do_you_want_to_continue_anyway=It looks like you're using '%' o '?' and the 'like' operator is not being used. I should probably keep the '=' operator by 'like'. Do you want to continue anyway?
+_tiled=Tiled
+_Open_with_a_new_maximized_view=Open with a new maximized view
+_Change=Cambiar
+Alpha=Alpha
+_Recovered_data_may_be_corrupted=Recovered data may be corrupted.
+_select_a_file_to_add_to_the_list=Select a file to add to the list
+_change_default_properties_to_load_the_selected_item=Change the default properties used to load the selected item
+_remove_the_selected_item_from_the_list=Remove the selected item from the list
+_move_up_the_selected_item_in_the_list=Move up the selected item in the list
+_move_down_the_selected_item_in_the_list=Move down the selected item in the list
+_Data_access_services=Data access services
+_Change_view_projection=CRS View
+_Change_view_projection_to_projection_of_the_selected_item_in_the_list=Change View projection to the projection of the selected item in the list
+_precision_comparing_decimal_numbers=Precision comparing decimal numbers
+_default_expression_evaluator=Default expression evaluator
+_Problems_saving_the_project_XnlX_It_is_possible_that_this_was_not_saved_properly_and_can_not_be_loaded_again=Problems saving the project.\nIt is possible that this was not saved properly and can not be loaded again.
+_Elements=Elements
+_Functions=Functions
+_Operators=Operators
+_Expression=Expression
+_Scripts=Scripts
+_Constant_Point=Constant Point
+_Constant_Rectangle=Constante Rectangle
+_Value=Value
+_Start_capture=Start capture
+_Description=Description
+_Capture_a_point_from_current_view=Capture a point from current View
+_Use_WKT_or_WKB=Use WKT or WKB
+_Insert_as_WKT=Insert as WKT
+_Insert_as_WKB=Insert as WKB
+_Use_Geometry_or_Text=Use Geometry or Text
+_Insert_as_Geometry=Insert as Geometry
+_Insert_as_Text=Insert as Text
+_Name=Name
+_Generic_element=Generic element
+_Arguments=Arguments
+_Template=Template
+_Return=Return
+_Function=Function
+_Type=Type
+_Source=Source
+_Constant=Constant
+_Capture_point=Capture_point
+_Capture_rectangle=Capture rectangle
+_Take_projection_code=Take projection code
+_Aliases=Aliases
+_Before_changing_field_accept_or_discard_the_changes=Before changing field, accept or discard the changes made.
+_New=New
+_Delete=Delete
+_Modify=Modify
+_Accept=Accept
+_Discard=Discard
+_Field_name=Field name
+_Field_type=Field type
+_Primary_key=Primary key
+_Value_automatic=Automatic value
+_Allow_nulls=Allow nulls
+_Basic_fields=Basic fields
+_Geometry=Geometry
+_Time=Time
+_Size=Size
+_Precision=Precision
+_Scale=Scale
+_Default_value=Default value
+_Data_profile=Data profile
+_Virtual_field=Virtual field
+_Geometry_type=Geometry type
+_Geometry_subtype=Geometry subtype
+_CRS=CRS
+_Date_format=Date format
+_Interval=Interval
+_Start=Start
+_End=End
+_Preview_value=Preview value
+_Show_tip=Show tip
+_Show_preview=Show preview
+_Show_message=Show message
+_Message=Message
+_Tip=Tip
+_Cant_retrieve_information_from_user_form=Can't retrieve information from user form.
+_See_log_for_details=See log for details.
+_The_expression_of_virtual_field_is_not_valid=The expression of virtual field es not valid.
+_The_expression_contains_a_reference_to_itself=The expression contains a reference to itself.
+_Show_expression_builder=Show expression builder
+_Visualization=Visualization
+_Basic=Basic
+_Values=Values
+_Tags=Tags
+_Group=Group
+_Order=Order
+_Hidden=Hidden
+_Label=Label
+_Description=Description
+_Minimum_value=Minimum value
+_Maximum_value=Maximum value
+_List_of_values=List of values
+_Value=Value
+_Add=Add
+_Update=Update
+_Remove=Remove
+_The_table_has_no_primary_key_or_OID=The table has no primary key or OID.
+_Many_features_selection_deletion_modification_will_not_be_available_as_they_require_it_for_proper_operation=Many features (selection, deletion, modification ...) will not be available as they require it for proper operation.
+_Field=Field
+_Use_labels=Use labels
+_UseUse names
+_Use_labels_and_names=Use labels and names
+_Documents=Documents
+_Search_by_attributes=Search by attributes
+_Already_existed_a_field_named_XfieldnameX_but_with_different_data_type=Already existed a field named "{0}" but with different data type
+_Values_of_data_will_try_to_coerce_to_this_type=Values of data will try to coerce to this type
+_Select_feature_in_the_View=Select feature in the View
+_Form_refreshed=Form refreshed
+_Export=Export
+_Do_you_want_to_finish_editing_and_save_the_changes=Do you want to finish editing and save the changes?
+_Press_cancel_to_cancel_editing_and_changes=Press cancel to cancel editing and changes.
+_Stop_editing=Detener edici\u00f3n
+_Start_editing=Iniciar edici\u00f3n
+_Record_saved=Registro guardado
+error_saving_data_will_not_save=Error saving. Data will not save.
+_Record_removed=Record removed
+_Creating_filter_for=Creating filter for:
+_Form_refreshed=Form refreshed
+_Simplified=Simplified
+_Advanced=Advanced
+_Clear=Clear
+_Search=Search
+_Insert_a_search_expression=Inseart a search expression
+_elements=elements
+_Equals_to=Equals to
+_Like_to=Like to
+_Not_equals_to=Not equals to
+_Greater_than=Greater than
+_Greater_or_equal_to=Greater or equal to
+_Less_than=Less than
+_Less_or_equal_to=Less or equal to
+_Or=Or
+_And=And
+_Remove_accumulated_filter=Remove accumulated filter.
+_View_accumulated_filter=View accumulated filter.
+_Accumulate_filter=Accumulate filter.
+_Select_the_columns_to_display=Select the columns to display
+_Automatically_connect_to_a_database_workspace=Automatically connect to a database workspace
+_Select_the_workspace_you_want_to_connect=Select the workspace you want to connect
+_Select_columns_to_display=Select columns to display
+_Expression_builder=Expression builder
+_Databaseworkspace=Database workspace
+_Order_by=Order by...
+_Group_by=Group by...
+_Calculated_columns=Calculated columns
+_Remove_all=Remove all
+_None=None
+_Identity_1_1=Identity (1:1)
+_Collaboration_1_1=Colaboration (1:1)
+_Composition_1_N=Composition (1:n)
+_Aggregate_1_N=Aggregate (1:n)
+_Relation_type=Relation type
+_Data_type_selection=Data type selection
+_Select_the_data_type=Select the data type
+_The_expression_has_undefined_symbols_at_this_moment=The expression has undefined symbols at this moment.
+_This_may_not_be_a_mistake=This may not be a mistake.
+_Size=Size
+_Precision=Precision
+_Scale=Scale
+_More=More
+_Apply_changes=Apply changes
+_CSV_loading_parameters=CSV loading parameters
+_H2_Spatial_loading_parameters=H2-Spatial loading parameters
+_DBF_loading_parameters=DBF loading parameters
+_SHP_loading_parameters=SHP loading parameters
+_Errors_occurred_during_search=Errors occurred during search
+_Characters_in_display=Characters in display
+_Number_of_characters_required_to_display_the_data_in_this_field_Leave_it_empty_or_zero_to_be_automatically_calculated=Number of characters required to display the data in this field.\nLeave it empty or zero to be automatically calculated.
+_Total_digits_precision=Total digits (precision)
+_Decimal_digits_escale=Decimal digits (scale)
+_Number_of_digits_used_to_represent_the_number_Includes_the_digits_of_the_integer_part_and_the_digits_of_the_decimal_part=Number of digits used to represent the number.\nIncludes the digits of the integer part and the digits of the decimal part.
+_Number_of_decimal_digits_used_to_represent_the_number=Number of decimal digits used to represent the number.
+_You_can_access_the_fields_in_a_table_by_prefixing_the_table_name_followed_by_a_period_For_example_TABLE_FIELD_This_is_necessary_whenever_the_name_of_the_field_and_the_table_match=You_can_access_the fields in a table by prefixing the table name followed by a period.\nFor example <i>TABLE.FIELD</i>.\nThis is necessary whenever the name of the field and the table match.
+_You_must_use_double_quotes_to_use_a_field_that_is_not_a_valid_identifier_When_the_name_does_not_start_with_a_letter_or_contains_characters_that_are_not_letters_numbers_or_underscore=You must use double quotes to use a field that is not a valid identifier.\nWhen the name does not start with a letter or\ncontains characters that are not letters, numbers or underscore.
+_Perhaps_you_wanted_to_use_a_similar_field=Perhaps you wanted to use a similar field.
+_The_indicated_field_does_not_exist_in_the_table=The indicated field does not exist in the table.
+_Aggregate_functions=Aggregate functions
+_Select_group_columns_and_aggregate_functions=Select group columns and aggregate functions
+_Select_order=Select order
+_Paste_alphanumeric_values_from_clipboard=Paste alphanumeric values from clipboard
+_Features_selector=Features selector
+_Choose_features_from_selection=Choose features from selection
+_Set_active_layers_to=Set active layers to
+_Visible_active_layers=Visible active layers
+_Hide_active_layers=Hide active layers
+_Change_visibility=Change visibility
+_Visibility=Visibility
+_Visible_all_layers=Visible all layers
+_Hide_all_layers=Hide all layers
+_Inactive_all_layers=Inactive all layers
+_Active_all_layers=Active all layers
+_Bring_to_front=Bring to front
+_Send_to_back=Send to back
+_Move_ahead=Move ahead
+_Move_behind=Move behind
+_Changes_has_not_been_saved_Do_you_want_to_save_them_before_continue=Changes has not been saved.\nDo you want to save them before continue?
+_Searching=Searching
+_The_specified_search_condition_is_not_valid=The specified search condition is not valid
+_It_is_not_supported_to_search_through_this_field=It's not supported to search through this field
+_To_many_links=To many links.
+_Field_not_found=Field not found.
+_Errors_occurred_during_search=Errors occurred during search
+_Show_all_history=Show all history
+_Show_all_bookmarks=Show all bookmarks
+_Click_to_see_more_action_in_this_panel=Click to see more actions
+_Actual_field_name=Actual field name
+_New_field_name_in_the_export=New field name in the export
+_Origin=Origin
+_Attribute_descriptor_type=Attribute descriptor type
+_Field_size=Field size
+_Export_attribute_as_an_expression_or_as_a_real_field=Export attribute as an expression or as a real field
+_Select_if_field_has_to_be_exported=Select if field has to be exported
+_Select_in_the_check_box_wich_fields_wanted_to_be_exported_and_configure_its_attributes=Select in the check box wich fields \nwanted to export and configure its attributes
+_Errors_fetching_new_query=Errors fetching new query
+_Errors_getting_new_feature_set=Errors getting new feature set
+_Check_wich_fields_you_want_to_export_and_configure_its_attributes=Check wich field you want to export and configure its attributes
+_Select_the_name_of_the_new_field_size_and_type_that_each_field_will_have_in_the_export_result=Select the name of the new field, size and type that each field will have in the export result
+_Show_form=Show form
+_is_foreing_key=Is foreing key
+_is_closed_list=Is closed list
+_code=Code
+_Label_formula=Label formula
+_ForeingKey=Foreing Key
+_Bookmark_is_being_edit_accept_or_discard_modification_before_exit=Bookmark is being edit. Accept or \ndiscard modification before exit.
+_Bookmark_not_saved=Bookmark not saved
+_Field_not_found_in_this_table=Field not foundin this table
+_Bookmark_already_exists_with_this_name_choose_a_different_name=Bookmark already exists with this name.\nChoose a different one."
+_Bookmark_name_conflict=Bookmark name conflict
+_There_are_hidden_values=There are hidden values
+_Close=Close
+_Is_null=Is null
+_Is_not_null=Is not null
+_New_field=New field
+_Not_handle_null_values=Not handle null values
+_Null_values_as_true=Null values as true
+_Null_values_as_false=Null values as false
+_First_value=First value
+_Last_value=Last value
+_Minimum_value=Minimum value
+_Maximum_value=Maximum value
+_Summation=Summation
+_Postprocess_parameters=Postprocess parameters
+_Parameters_for_XpostprocessNameX_postprocess_on_XtableNameX=Parameters for {0} postprocess on {1}
+_Errors_occurred_load_search_post_process=Errors occurred load search post process
+_PostProcess=Postprocess
+_Distinct_on_field=Distinct on field 
+_normalResults=Search results
+_searchPostProcessResults=Postprocess results
+Filter=Filter
+_Filter_by_attributes=Filter by attributes
+_Field_to_group_by_unique_values=Field to group by unique values
+_Aggregate_operations=Aggregate operations
+_Project_not_saved=Project not saved
+_Copy_rows=Copy rows
+_Connect_to_database_workspace=Connect to database workspace
+_Connect=Connect
+_Disconnect=Disconnect
+_Manage_Dabatase_workspace=Manage Database workspace
+_Visible_columns=Visible columns
+_Hidden_columns=Hidden columns
+_Open_palette_from_layer=Open palette from layer
+_Rules=Rules
+_Default_rules=Default rules
+_Custom_rules=Custom rules
+_Validate_features_before_insert=Validate fature before insert
+_Validate_features_at_finish_editing=Validate features at finish editing
+_At_finish_editing=At finish editing
+_At_insert=At insert
+_Check_at_finish_editing=Check at finish editing
+_Check_at_insert=Check at insert
+_Validation=Validation
+_Name=Name
+_Value=Value
+_Main=Main
+_Filter_for_values=Filter for values
+_Edited_features=Edited features
+_Show_only_not_validated_features=Show only not validated features
+_Use_default_format_to_view_geometry=Use default format to view geometry
+_Use_WKT_to_view_geometry=Use WKT to view geometry
+_Use_WKB_to_view_geometry=Use WKB to view geometry
+_Connection=Connection
+_Connection_ok=Connection ok
+_Test_connection_failed=Test connection failed
+_Test_connection=Test connection
+_New_selection=New selection
+_Add_to_selection=Add to selection
+_Intersect_with_selection=Intersect with selection
+_Columns=Columns
+_Add_to_bookmarks=Add to bookmarks
+_Reset=Reset
+_Problems_finish_table_editing=Problems finish table editing
+_Problems_cancel_table_editing=Problems cancel table editing
+_Read_only=Read only
+_Indexed=Indexed
+_Loading=Loading...
+_Types_detection=Types detection...
+_Preparing_writing=Preparing writing...
+_Writing_records=Writing records...
+_Calculating_envelope=Calculating envelope...
+_Creating_the_index_of_the_lines=Creating the index of the lines...
+_Calculating_number_of_lines=Calculating number of lines...
+_Show_edited_features=Show edited records
+_Show_form=Show form
+_Show_layer_form=Show layer form
+_Open_palette_from_layer=Open palette from layer
+_Extra_column=Extra column
+_Default_format=Default format
+_Temporal_file_path=Temporal file path
+_Creating_data_base=Creating data base
+_Getting_features_from_query=Getting features from query
+_Executing_post_process=Executing postprocess...
+_Processing_features=Processing features...
+_Error_in_post_process_operation=Error in postprocess operation
+_Search_ended=Search ended
+_Processing_search=Processing search...
+_Post_process_canceled=Postprocess canceled
+_Post_process_ended=Postprocess ended
+_Copying_rows_to_clipboard=Copying rows to clipboard...
+_Copy_ended=Copy ended
+_The_expression_can_not_be_evaluated_right_now_It_could_be_valid_when_all_changes_has_been_applied=
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_es.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_es.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_es.txt	(revision 46118)
@@ -0,0 +1,12 @@
+<html>
+<p>Est&aacute; ejecutando gvSIG en una plataforma $(CURRENT_ARCHITECTURE).</p>
+<br>
+<p>Hay paquetes instalados que no son compatibles con su sistema</p>
+<br>
+$(PACKAGES)
+<br>
+<p>Algunos no son espec&iacute;ficos para su sistema o arquitectura</p>
+<br>
+<p>Puede necesitar configurar un entorno de java $(RECOMMENDED_ARCHITECTURE) para el
+correcto funcionamiento de gvSIG.</p>
+</html>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/i18n/warning_architecture_or_os_mismatch_es.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.inf
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.inf	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.inf	(revision 46118)
@@ -0,0 +1,11 @@
+[Unit]
+type = Script
+name = validate_layer
+description = 
+createdBy = 
+version = 
+
+[Script]
+main = main
+Lang = python
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.py
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.py	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/scripting/scripts/validate_layer.py	(revision 46118)
@@ -0,0 +1,214 @@
+
+from gvsig import *
+from org.gvsig.tools.swing.api.windowmanager import WindowManager
+import StringIO
+from gvsig.commonsdialog import *
+from javax.swing.event import HyperlinkListener
+from org.gvsig.fmap.geom import GeometryLocator
+from org.gvsig.fmap.geom import Geometry
+from org.gvsig.fmap.geom.primitive import NullGeometry
+
+class Cmdline(object):
+  def __init__(self, line):
+    self.parse(line)
+    
+  def parse(self,line):
+    cmds = line.split(";")
+    self.cmds = list()
+    for cmd in cmds:
+      cmd = cmd.strip()
+      args = None
+      n = cmd.find(":")
+      if n> 0 :
+        args = cmd[n+1:].strip()
+        cmd = cmd[:n].strip()
+      self.cmds.append((cmd,args))
+
+  def execute(self):
+    for cmd,args in self.cmds:
+      method = getattr(self,cmd,None)
+      try:
+        if method!=None:
+          method(args)
+        else:
+          self.call(cmd,args)
+      except Exception, ex:
+        print "Oopss algo fallo ejecutando ", cmd, args
+        print str(ex)
+
+def centerViewinPoint(view,center):
+    env = view.getMap().getViewPort().getEnvelope();
+    movX = center.getX()-env.getCenter(0);
+    movY = center.getY()-env.getCenter(1);
+    minx = env.getMinimum(0) + movX;
+    miny = env.getMinimum(1) + movY;
+    maxX = env.getMaximum(0) + movX;
+    maxY = env.getMaximum(1) + movY;
+    env = GeometryLocator.getGeometryManager().createEnvelope(
+          minx, miny,
+          maxX, maxY,
+          Geometry.SUBTYPES.GEOM2D);
+    view.getMap().getViewPort().setEnvelope(env);
+    view.getMap().invalidate()
+
+
+class MyHyperlinkListener(HyperlinkListener, Cmdline):
+  def __init__(self,vista, capa, tabla_de_referencias):
+    self.vista = vista
+    self.capa = capa
+    self.tabla_de_referencias = tabla_de_referencias
+    
+  def hyperlinkUpdate(self, h):
+    if str(h.getEventType()) == "ACTIVATED":
+      # Solo procesamos los eventos "ACTIVATED" que son los clicks sobre los enlaces
+      # Recogemos la geometria que metimos en el enalce en WKT
+      cmdline = h.getDescription()
+      #print cmdline
+      self.parse(cmdline)
+      self.execute()
+
+  def select(self,arg):
+    ref = self.tabla_de_referencias.get(arg,None)
+    self.capa.getSelection().select(ref)
+
+  def clearSelection(self,arg):
+    self.capa.getSelection().deselectAll()
+
+  def center(self,arg):
+    # Reconstruimos el punto a partir del WKT en arg
+    manager = GeometryLocator.getGeometryManager()
+    point = manager.createFrom(arg)
+    # Y una vez lo tenemos centramos la vista en ese punto.
+    centerViewinPoint(self.vista,point)
+
+  def fixgeometry(self,arg):
+    ref = self.tabla_de_referencias.get(arg,None)
+    feature = ref.getFeature().getEditable()
+    geom = feature.getDefaultGeometry()
+    if geom.isValid():
+      return
+    fixedgeom = geom.makeValid()
+    if fixedgeom != None:
+      if isinstance(fixedgeom,NullGeometry) :
+        fixedgeom = None
+      feature.setDefaultGeometry(fixedgeom)
+      store = self.capa().getDataStore()
+      if not store.isEditing() :
+        store.edit()
+      store.update(feature)
+    
+  
+def main(*args):
+  layer = currentLayer()
+  if layer == None:
+    msgbox("Debera seleccionar la capa que desea validar")
+    return
+
+  output1 = StringIO.StringIO()  
+  output2 = StringIO.StringIO()  
+  output1.write("<ul>\n")
+  output2.write("<ul>\n")
+  contador=0
+  tabla_de_referencias = dict()
+  contador_problemas = 0
+  contador_nulos = 0
+  try:
+    # A�adimos la barra de progreso a la barra de estado de gvSIG
+    taskStatus.add()
+    # Le indicamos cuantas iteraciones vamos a realizar
+    taskStatus.setRangeOfValues(0,layer.features().getCount());
+    for feature in layer.features():
+      # En cada iteracion informamos a la barra de progreso de por donde vamos
+      taskStatus.setCurValue(contador)
+      geom = feature.geometry()
+      if geom == None:
+        contador_nulos += 1
+        tabla_de_referencias[str(contador)]= feature().getReference()
+        output2.write("<li>")
+        output2.write('<a href="select: %s">%5.5d</a> %s<br>%s' % (
+            contador, 
+            contador, 
+            feature.toString(),
+            "Null geometry"
+          )
+        )          
+        output2.write("</li>")
+      else:
+        vs = geom.getValidationStatus();
+        if not vs.isValid() :
+          tabla_de_referencias[str(contador)]= feature().getReference()
+          contador_problemas += 1
+          if vs.getStatusCode() == 1 : # Corrupta
+            try:
+              print contador, geom.getNumVertices(), geom.__class__
+            except Exception,ex:
+              print contador
+              
+          geom2 = geom.makeValid()
+          if geom2 != None:
+            canfix = '(<a href="fixgeometry: %s">Fix</a>)' % contador
+          else:
+            canfix = ""
+          if vs.getProblemLocation()!=None:
+            wktgeom = vs.getProblemLocation().convertToWKT()
+          else:
+            try:
+              # Atrapamos los errores no vaya a ser que la geometria este tan da�ada que
+              # nos falle el calculo de su centroide.
+              wktgeom = feature.geometry().centroid().convertToWKT()
+            except:
+              wktgeom = None
+          output1.write("<li>")
+          if wktgeom == None:
+            output1.write('<a href="select: %s">%5.5d</a> %s<br>%s %s' % (
+                contador, 
+                contador, 
+                feature.toString(),
+                vs.getMessage(),
+                canfix
+              )
+            )
+          else:
+            output1.write('<a href="clearSelection; select: %s; center: %s">%5.5d</a> %s<br>%s %s' % (
+                contador, 
+                wktgeom,
+                contador, 
+                feature.toString(),
+                vs.getMessage(),
+                canfix
+              )
+            )
+          output1.write("</li>")
+      contador+=1
+  finally:  
+    # Al terminar
+    # Le indicamos a la barra de progreso que ya hemos terminado
+    taskStatus.terminate()
+    # Y la eliminamos de la barra de estado de gvSIG.
+    taskStatus.remove()
+    
+  output1.write("</ul>\n")
+  output2.write("</ul>\n")
+  
+  if contador_problemas>0 or contador_nulos>0 :
+    texto = "<p>Se ha detectado:<br><ul><li>%s geometrias con problemas</li><li>%s registros sin geometria.</li></ul></p>" % (
+      contador_problemas,
+      contador_nulos
+    )
+    if contador_problemas > 0:
+      texto += "Geometrias con problemas:<br>"
+      texto += output1.getvalue()
+    if contador_nulos > 0:
+      texto += "Registros sin geometrias:<br>"
+      texto += output2.getvalue()
+    application = ApplicationLocator.getManager()
+    application.showTextDialog(
+      WindowManager.MODE.TOOL, # TOOL o WINDOW segun nos interese.
+      "Problems in layer "+layer.getName(),
+      texto,
+      MyHyperlinkListener(currentView(), layer, tabla_de_referencias)
+    )
+  else:
+    msgbox("Layer "+layer.getName()+" is valid.")
+
+
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/andami-theme.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/andami-theme.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/andami-theme.xml	(revision 46118)
@@ -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.
+
+-->
+<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"/>
+        -->
+        <WallpaperType value="CENTERED"/>
+        <Icon path="gvsig-icon16x16.png"/>
+    </ApplicationImages>
+    <ApplicationName value="gvSIG ${version}.${buildNumber} ${state}"/>
+    <priority value="100"/>
+</AndamiProperties>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/andami-theme.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/gvsig-proj-black-wallpaper.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/splash.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/theme/gvsig-icon16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,1556 @@
+<?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" />
+  <depends plugin-name="org.gvsig.geometry.app.mainplugin" />
+  <alternativeNames name="org.gvsig.app"/>
+  <icon src="gvsig-logo-icon" text="gvSIG"/>
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <label-set class-name="org.gvsig.app.project.documents.view.gui.DefaultViewPanel">
+    <label id="units" size="75"/>
+    <label id="x" size="120"/>
+    <label id="y" size="120"/>
+    <label id="4" size="110"/>
+    <label id="5" size="110"/>
+    <label id="distancearea" size="30"/>
+    <label id="projection" size="110"/>
+    <label id="azimut" size="110"/>
+  </label-set>
+
+  <!--
+  <popup-menus>
+    <popup-menu name="view.toc.context.menu">
+      <menu name="view-layer-add"/>
+    </popup-menu>
+  </popup-menus>
+  -->
+
+  <extensions>
+    <extension class-name="org.gvsig.app.extension.InitialWarningExtension"
+      description="Initial warning message"
+      active="true"
+      priority="1">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.selectioncount.SelectionCountExtension"
+      description="Counts selected features"
+      active="false">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.CheckSOAndArquitectureExtension"
+      description="Check OS and architecture of installed packages"
+      active="true"
+      priority="1">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.InitializeApplicationExtension"
+      description="Initialize application extension"
+      active="true"
+      priority="99999">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ProjectExtension"
+      description="Extensi�n encargada de gestionar los proyectos."
+      active="true"
+      priority="10">
+
+      <action
+        name= "application-project-new"
+        label="nuevo_proyecto"
+        tooltip="nuevo_tooltip"
+        action-command="application-project-new"
+        icon="application-project-new"
+        position="100100000"
+        accelerator="Ctrl+N"
+        />
+      <action
+        name="application-project-open"
+        label="abrir_proyecto"
+        tooltip="abrir_tooltip"
+        action-command="application-project-open"
+        icon="application-project-open"
+        position="100200000"
+        accelerator="Ctrl+O"
+        />
+      <action
+        name="application-project-save"
+        label="guardar_proyecto"
+        tooltip="guardar_tooltip"
+        action-command="application-project-save"
+        icon="application-project-save"
+        position="100300000"
+        accelerator="Ctrl+S"
+        />
+      <action
+        name="application-project-saveas"
+        label="guardar_como"
+        tooltip="guardar_como"
+        action-command="application-project-save-as"
+        icon="application-project-save-as"
+        position="100400000"
+        accelerator="Ctrl+Shift+S"
+        />
+
+
+
+      <menu text="File"
+        position="100000000"
+        is_separator="true"/>
+      <menu text="File/Export"
+        position="100900000"
+        is_separator="true"/>
+      <menu text="Edit"
+        position="200000000"
+        is_separator="true"/>
+      <menu text="Selection"
+        position="300000000"
+        is_separator="true"/>
+      <menu text="Show"
+        position="400000000"
+        is_separator="true"/>
+
+      <menu text="Layer"
+        position="600000000"
+        is_separator="true"/>
+      <menu text="Layer/Set_to"
+        position="600400000"
+        is_separator="true"/>
+
+      <menu text="View"
+        position="650000000"
+        is_separator="true"/>
+      <menu text="View/Navigation"
+        position="650100000"
+        is_separator="true"/>
+      <menu text="View/Query"
+        position="650700000"
+        is_separator="true"/>
+
+      <menu text="tools"
+        position="900000000"
+        is_separator="true"/>
+
+        <menu text="tools/Development"
+        position="908500000"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep1"
+        position="908500190"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep2"
+        position="908500290"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep3"
+        position="908500590"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep4"
+        position="908500690"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep5"
+        position="908500990"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep6"
+        position="908501390"
+        is_separator="true"/>
+
+      <menu text="tools/Development/sep7"
+        position="908501490"
+        is_separator="true"/>
+
+      <menu text="Window"
+        position="960000000"
+        is_separator="true"/>
+      <menu text="Help"
+        position="990000000"
+        is_separator="true"/>
+
+      <menu
+        text="File/nuevo_proyecto"
+        name= "application-project-new"
+        />
+      <menu
+        text="File/abrir_proyecto"
+        name="application-project-open"
+        />
+      <menu
+        text="File/guardar_proyecto"
+        name="application-project-save"
+        />
+      <menu
+        text="File/guardar_como"
+        name="application-project-saveas"
+        />
+
+      <tool-bar name="project" position="100" description="Project management tools">
+        <action-tool name="application-project-new"/>
+        <action-tool name="application-project-open"/>
+        <action-tool name="application-project-save"/>
+      </tool-bar>
+
+      <tool-bar name="view" position="200" description="Add layers to the view tools"/>
+      <tool-bar name="view_navigation" position="300" description="Tools to navigate in the view"/>
+      <tool-bar name="view_tools" position="400" description="Generics tools for the view"/>
+      <tool-bar name="view_tools_query" position="500" description="Query tools for the view"/>
+      <tool-bar name="selection" position="600" description="Selection tools for the view"/>
+      <tool-bar name="layer" position="650" description="Layer tools"/>
+      <tool-bar name="table" position="700" description="Core table tools"/>
+      <tool-bar name="table_tools" position="800" description="Generic tools for the table"/>
+      <tool-bar name="table_tools_addmeasurement" position="900"/>
+      <tool-bar name="edit" position="1000" description="Edit/copy/paste/undo/redo tools"/>
+      <tool-bar name="editing" position="1100" description="Tools for editing, start/end editing and vectorial tools"/>
+      <tool-bar name="core" position="10000" description="Core tools like preferences or console of errores"/>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ViewProjectWindow"
+      description="Extensi�n encargada de abrir la ventana de gesti�n del proyecto."
+      active="true">
+
+      <action
+        name="show-project-manager"
+        label="_Show_project"
+        tooltip="_Show_project_window"
+        action-command="show-project-manager"
+        icon="show-project-manager"
+        position="400100000"
+        accelerator="Alt+P"
+        />
+
+      <menu
+        text="Show/_Project_manager"
+        name="show-project-manager"
+        />
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.AddLayerDropingFile"
+      description="Soporte para a�adir capas arrastrando el fichero al TOC."
+      active="true"
+      priority="20">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.AddLayer"
+      description="Extensi�n encargada de abrir las diferentes capas."
+      active="true"
+      priority="20">
+      <action
+        name="view-layer-add"
+        label="Add_layer"
+        tooltip="Add_layer"
+        action-command="view-layer-add"
+        icon="view-layer-add"
+        position="650300000"
+        accelerator="Alt+O"
+        />
+
+      <menu
+        name="view-layer-add"
+        text="View/Add_layer"
+        />
+      <tool-bar name="view">
+        <action-tool name="view-layer-add"/>
+      </tool-bar>
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.AddToLocatorExtension"
+      description="Extensi�n encargada de a�adir una capa al locator."
+      active="true"
+      priority="20">
+      <action
+        name="layer-addtolocator"
+        label="add_to_locator"
+        tooltip="add_to_locator"
+        action-command="layer-addtolocator"
+        position="606000000"
+        icon="layer-addtolocator"
+        accelerator=""
+        />
+
+      <menu
+        name="layer-addtolocator"
+        text="Layer/add_to_locator"
+       />
+      <!--
+      <tool-bar name="view">
+        <action-tool name="add-to-locator"/>
+      </tool-bar>
+       -->
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.BasicSymbologyExtension"
+      description="Enables the  symbology."
+      active="true"
+      priority="20">
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ZoomPrev"
+      description="Extensi�n encargada de gestionar los zooms previos al actual."
+      active="true">
+      <action
+        name="view-navigation-zoom-back"
+        label="Zoom_back"
+        tooltip="Zoom_back"
+        action-command="view-navigation-zoom-back"
+        icon="view-navigation-zoom-back"
+        position="650100700"
+        accelerator=""
+        />
+
+      <menu
+        name="view-navigation-zoom-back"
+        text="View/Navigation/Zoom_back"
+        />
+      <tool-bar name="view_navigation">
+        <action-tool name="view-navigation-zoom-back"/>
+      </tool-bar>
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ZoomNext"
+      description="Extensi�n encargada de gestionar los zooms siguientes al actual."
+      active="true">
+      <action
+        name="view-navigation-zoom-next"
+        label="Zoom_next"
+        tooltip="Zoom_next"
+        action-command="view-navigation-zoom-next"
+        icon="view-navigation-zoom-next"
+        position="650100710"
+        accelerator=""
+        />
+
+      <menu
+        name="view-navigation-zoom-next"
+        text="View/Navigation/Zoom_next"
+        />
+      <tool-bar name="view_navigation">
+        <action-tool name="view-navigation-zoom-next"/>
+      </tool-bar>
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.InfoToolExtension"
+      description="Extensi�n encargada de gestionar la herramienta de info."
+      active="true"
+      priority="29">
+      <action
+        name="layer-info-by-point"
+        label="_Information_by_point"
+        tooltip="_Information_by_point"
+        action-command="layer-info-by-point"
+        icon="layer-info-by-point"
+        position="600200000"
+        accelerator=""
+        />
+      <menu
+        name="layer-info-by-point"
+        text="Layer/Query/_Information_by_point"
+        />
+      <tool-bar name="view_tools_query">
+        <selectable-tool name="layer-info-by-point" />
+      </tool-bar>
+    </extension>
+
+
+    <extension class-name="org.gvsig.app.extension.MetadataPropertiesExtension"
+      description="Extensi�n encargada de mostrar los metadatos de la capa seleccionada."
+      active="true">
+    </extension>
+
+
+    <extension class-name="org.gvsig.app.extension.ViewControls"
+      description="Extensi�n encargada de gestionar la vista."
+      active="true"
+      priority="30">
+      <combo-scale name="view-change-scale"
+        label="1:"
+        elements="1000;2000;5000;10000;25000;50000;100000;200000;500000;1000000;2000000;5000000"
+          value="10000"
+          action-command="view-change-scale" />
+
+      <action
+        name="view-change-scale"
+        label="_Change_scale"
+        action-command="view-change-scale"
+        />
+
+      <action
+        name="view-navigation-zoom-in-topoint"
+        label="Zoom_in"
+        position="650100400"
+        action-command="view-navigation-zoom-in-topoint"
+        icon="view-navigation-zoom-in-topoint"
+        tooltip="Zoom_in"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-zoom-out-topoint"
+        label="Zoom_out"
+        position="650100500"
+        action-command="view-navigation-zoom-out-topoint"
+        icon="view-navigation-zoom-out-topoint"
+        tooltip="Zoom_out"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-zoom-all"
+        label="Zoom_all"
+        position="650100600"
+        action-command="view-navigation-zoom-all"
+        icon="view-navigation-zoom-all"
+        tooltip="Zoom_all"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-zoom-in-center"
+        label="Zoom_in_to_center"
+        position="650100200"
+        action-command="view-navigation-zoom-in-center"
+        tooltip="Zoom_in_to_center"
+        icon="view-navigation-zoom-in-center"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-zoom-out-center"
+        label="Zoom_out_to_center"
+        position="650100300"
+        action-command="view-navigation-zoom-out-center"
+        tooltip="Zoom_out_to_center"
+        icon="view-navigation-zoom-out-center"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-pan"
+        label="Pan"
+        position="650100100"
+        action-command="view-navigation-pan"
+        icon="view-navigation-pan"
+        tooltip="Pan"
+        accelerator=""
+        />
+      <action
+        name="view-navigation-frame-manager"
+        label="Frame_manager"
+        position="650109000"
+        action-command="view-navigation-frame-manager"
+        icon="view-navigation-frame-manager"
+        tooltip="Frame_manager"
+        accelerator=""
+        />
+
+      <action
+        name="active-layer-set-visible"
+        label="_Visible_active_layers"
+        position="600100400"
+        action-command="active-layer-set-visible"
+        icon="active-layer-set-visible"
+        tooltip="_Show_active_layers"
+        accelerator=""
+        />
+            <action
+        name="active-layer-set-hide"
+        label="_Hide_active_layers"
+        position="600100500"
+        action-command="active-layer-set-hide"
+        icon="active-layer-set-hide"
+        tooltip="_Hide_active_layers"
+        accelerator=""
+        />
+                  <action
+        name="active-layer-bring-front"
+        label="_Bring_to_front"
+        position="600100600"
+        action-command="active-layer-bring-front"
+        icon="active-layer-bring-front"
+        tooltip="_Bring_to_front"
+        accelerator=""
+        />
+            <action
+        name="active-layer-send-back"
+        label="_Send_to_back"
+        position="600100700"
+        action-command="active-layer-send-back"
+        icon="active-layer-send-back"
+        tooltip="_Send_back"
+        accelerator=""
+        />
+                       <action
+        name="active-layer-move-ahead"
+        label="_Move_ahead"
+        position="600100800"
+        action-command="active-layer-move-ahead"
+        icon="active-layer-move-ahead"
+        tooltip="_Move_ahead"
+        accelerator=""
+        />
+                                  <action
+        name="active-layer-move-behind"
+        label="_Move_behind"
+        position="600100900"
+        action-command="active-layer-move-behind"
+        icon="active-layer-move-behind"
+        tooltip="_Move_behind"
+        accelerator=""
+        />  
+            
+      <action
+        name="layer-set-visible"
+        label="_Show_layers"
+        position="600400100"
+        action-command="layer-set-visible"
+        icon="layer-set-visible"
+        tooltip="_Show_layers"
+        accelerator=""
+        />
+      <action
+        name="layer-set-hide"
+        label="_Hide_layers"
+        position="600400200"
+        action-command="layer-set-hide"
+        icon="layer-set-hide"
+        tooltip="_Hide_layers"
+        accelerator=""
+        />
+      <action
+        name="layer-set-active"
+        label="_Set_Layers_active"
+        position="600400300"
+        action-command="layer-set-active"
+        icon="layer-set-active"
+        tooltip="_Set_Layers_active"
+        accelerator=""
+        />
+      <action
+        name="layer-set-inactive"
+        label="_Set_Layers_inactive"
+        position="600400400"
+        action-command="layer-set-inactive"
+        icon="layer-set-inactive"
+        tooltip="_Set_Layers_inactive"
+        accelerator=""
+        />
+
+      <action
+        name="view-locator-setup"
+        label="_Locator_setup"
+        position="658000000"
+        action-command="view-locator-setup"
+        icon="view-locator-setup"
+        tooltip="_Locator_setup"
+        accelerator=""
+        />
+
+      <menu
+        name="view-navigation-zoom-in-topoint"
+        text="View/Navigation/Zoom_in"
+        />
+      <menu
+        name="view-navigation-zoom-out-topoint"
+        text="View/Navigation/Zoom_out"
+        />
+      <menu
+        name="view-navigation-zoom-all"
+        text="View/Navigation/Zoom_all"
+        />
+      <menu
+        name="view-navigation-zoom-in-center"
+        text="View/Navigation/Zoom_in_to_center"
+        />
+      <menu
+        name="view-navigation-zoom-out-center"
+        text="View/Navigation/Zoom_out_to_center"
+        />
+      <menu
+        name="view-navigation-pan"
+        text="View/Navigation/Pan"
+        />
+      <menu
+        name="view-navigation-frame-manager"
+        text="View/Navigation/Frame_manager"
+        />
+
+      <menu
+        name="active-layer-set-visible"
+        text="View/_Set_active_layers_to/visible"
+        />
+      <menu
+        name="active-layer-set-hide"
+        text="View/_Set_active_layers_to/Hidden"
+        />
+      
+      
+             <menu
+        name="active-layer-bring-front" 
+        text="View/_Set_active_layers_to/_Bring_to_front"
+        />
+        <menu
+        name="active-layer-send-back" 
+        text="View/_Set_active_layers_to/_Send_to_back"
+        />
+        <menu
+        name="active-layer-move-ahead" 
+        text="View/_Set_active_layers_to/_Move_ahead"
+        />
+        <menu
+        name="active-layer-move-behind" 
+        text="View/_Set_active_layers_to/_Move_behind"
+        />
+      
+      <menu
+        name="layer-set-visible"
+        text="View/_Set_all_layers_to/visible"
+        />
+      <menu
+        name="layer-set-hide"
+        text="View/_Set_all_layers_to/Hidden"
+        />
+      <menu
+        name="layer-set-active"
+        text="View/_Set_all_layers_to/Active"
+        />
+      <menu
+        name="layer-set-inactive"
+        text="View/_Set_all_layers_to/Inactive"
+        />
+
+      <menu
+        name="view-locator-setup"
+        text="View/Locator_setup"
+        />
+
+
+      <tool-bar name="view_navigation">
+        <selectable-tool name="view-navigation-zoom-in-topoint" is-default="true" />
+        <selectable-tool name="view-navigation-zoom-out-topoint" />
+        <action-tool name="view-navigation-zoom-all"  />
+        <action-tool name="view-navigation-zoom-in-center"  />
+        <action-tool name="view-navigation-zoom-out-center"  />
+        <action-tool name="active-layer-set-visible" dropdowngroup="toc-layers-visibility"/>
+        <action-tool name="active-layer-set-hide" dropdowngroup="toc-layers-visibility"/>
+        <action-tool name="active-layer-bring-front" dropdowngroup="toc-layers-visibility"/>
+        <action-tool name="active-layer-send-back" dropdowngroup="toc-layers-visibility"/>
+        <action-tool name="active-layer-move-ahead" dropdowngroup="toc-layers-visibility"/>
+        <action-tool name="active-layer-move-behind" dropdowngroup="toc-layers-visibility"/>
+      </tool-bar>
+
+      <tool-bar name="view_navigation">
+        <selectable-tool name="view-navigation-pan"/>
+        <action-tool name="view-navigation-frame-manager" />
+      </tool-bar>
+               
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.MeasureExtension"
+      description="Extensi�n encargada de gestionar las operaciones de medir sobre la vista."
+      active="true"
+      priority="30">
+      <action
+        name="view-query-distance"
+        label="_Query_distance"
+        position="650700200"
+        action-command="view-query-distance"
+        icon="view-query-distance"
+        tooltip="_Query_distance"
+        accelerator=""
+        />
+      <action
+        name="view-query-area"
+        label="_Query_area"
+        position="650700100"
+        action-command="view-query-area"
+        icon="view-query-area"
+        tooltip="_Query_area"
+        accelerator=""
+        />
+      <action
+        name="view-query-feature-angle"
+        label="_Query_features_angles"
+        position="650700300"
+        action-command="view-query-feature-angle"
+        icon="view-query-feature-angle"
+        tooltip="_Query_feature_angle"
+        accelerator=""
+        />
+
+      <menu
+        name="view-query-distance"
+        text="Layer/Query/Distance"
+        />
+      <menu
+        name="view-query-area"
+        text="Layer/Query/Area"
+        />
+      <menu
+        name="view-query-feature-angle"
+        text="Layer/Query/Angle"
+        />
+      <tool-bar name="view_tools_query">
+        <selectable-tool name="view-query-distance" />
+        <selectable-tool name="view-query-area" />
+        <selectable-tool name="view-query-feature-angle" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ViewSelectionControls"
+      description="Extensi�n encargada de gestionar la vista."
+      active="true"
+      priority="30">
+
+      <action
+        name="selection-select-by-rectangle-view"
+        label="Select_by_rectangle"
+        position="300020000"
+        action-command="selection-select-by-rectangle-view"
+        icon="selection-select-by-rectangle"
+        tooltip="Select_by_rectangle"
+        accelerator=""
+        />
+      <action
+        name="selection-select-by-polygon"
+        label="Select_by_polygon"
+        position="300030000"
+        action-command="selection-select-by-polygon"
+        icon="selection-select-by-polygon"
+        tooltip="Select_by_polygon"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-select-by-rectangle-view"
+        text="Selection/Select_by_rectangle"
+        />
+      <menu
+        name="selection-select-by-polygon"
+        text="Selection/Select_by_polygon"
+        />
+
+      <tool-bar name="selection">
+        <selectable-tool name="selection-select-by-rectangle-view" />
+        <selectable-tool name="selection-select-by-polygon" />
+      </tool-bar>
+
+    </extension>
+
+
+
+    <extension class-name="org.gvsig.app.extension.ViewSimpleSelectionControl"
+      description="Extensi�n encargada de gestionar la herramienta de selecci�n simple."
+      active="true"
+      priority="30">
+      <action
+        name="selection-simple-select-view"
+        label="_Simple_select"
+        position="300010000"
+        action-command="selection-simple-select-view"
+        icon="selection-simple-select"
+        tooltip="_Simple_select"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-simple-select-view"
+        text="Selection/Simple"
+        />
+
+      <tool-bar name="selection">
+        <selectable-tool name="selection-simple-select-view" />
+      </tool-bar>
+
+    </extension>
+
+
+    <extension class-name="org.gvsig.app.extension.ViewSelectionByTheme"
+      description="Extensi�n encargada de la selecci�n por tema."
+      active="true"
+      priority="30">
+      <action
+        name="selection-select-by-layer"
+        position="300070000"
+        label="Select_by_layer"
+        action-command="selection-select-by-layer"
+        icon="selection-select-by-layer"
+        tooltip="Select_by_layer"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-select-by-layer"
+        text="Selection/Select_by_layer"
+        />
+
+      <tool-bar name="selection">
+        <action-tool name="selection-select-by-layer" />
+      </tool-bar>
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ViewInvertSelection"
+      description="Extensi�n encargada de hacer la selecci�n inversa."
+      active="true"
+      priority="30">
+      <action
+        name="selection-reverse-view"
+        label="_Reverse_selection"
+        position="300100000"
+        action-command="selection-reverse-view"
+        icon="selection-reverse"
+        tooltip="_Reverse_selection"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-reverse-view"
+        text="Selection/Reverse"
+        />
+
+      <tool-bar name="selection">
+          <action-tool name="selection-reverse-view" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ViewPropertiesExtension"
+      description="Extensi�n encargada de gestionar el di�logo de propiedades de la vista."
+      active="true">
+      <action
+        name="view-properties"
+        label="_View_properties"
+        position="659000000"
+        action-command="view-properties"
+        icon="view-properties"
+        tooltip="_Show_view_properties"
+        accelerator=""
+        />
+
+
+      <menu
+        name="view-properties"
+        text="View/Properties"
+        />
+
+    </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"
+        label="Zoom_to_selection"
+        position="650100900"
+        action-command="view-navigation-zoom-to-selection"
+        icon="view-navigation-zoom-to-selection"
+        tooltip="Zoom_to_selection"
+        accelerator=""
+        />
+
+      <menu
+        name="view-navigation-zoom-to-selection"
+        text="View/Navigation/Zoom_to_selection"
+        />
+
+      <tool-bar name="view_navigation">
+        <action-tool name="view-navigation-zoom-to-selection" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ClearSelectionExtension"
+      description="Extensi�n encargada de limpiar la selecci�n."
+      active="true">
+
+      <action
+        name="selection-clear-view"
+        label="_Clear_selection"
+        position="300110000"
+        action-command="selection-clear-view"
+        icon="edit-clear"
+        tooltip="_Clear_selection"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-clear-view"
+        text="Selection/_Clear"
+        />
+
+      <tool-bar name="selection" position="6">
+        <action-tool name="selection-clear-view" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.SelectByAttributesExtension"
+      description="Extensi�n encargada de abrir el di�logo para filtrar una vista."
+      active="true">
+
+      <action
+        name="selection-by-attributes-layer-old"
+        label="_Select_by_attributes_old"
+        position="300080000"
+        icon="selection-by-attributes"
+        tooltip="_Select_by_attributes_old"
+        action-command="selection-by-attributes-layer-old"
+        accelerator=""
+        />
+
+      <action
+        name="selection-by-attributes-layer"
+        label="_Select_by_attributes"
+        position="300080001"
+        icon="selection-by-attributes"
+        tooltip="_Select_by_attributes"
+        action-command="selection-by-attributes-layer"
+        accelerator=""
+        />
+
+      <menu
+        name="selection-by-attributes-layer-old"
+        text="Selection/_Select_by_attributes_old"
+        />
+
+      <menu
+        name="selection-by-attributes-layer"
+        text="Selection/_Select_by_attributes"
+        />
+
+      <tool-bar name="selection">
+        <action-tool name="selection-by-attributes-layer" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.SearchByAttributesExtension"
+      description=""
+      active="true">
+
+      <action
+        name="search-by-attributes-layer"
+        label="_Search_by_attributes"
+        position="601400000"
+        icon="search-by-attributes-layer"
+        tooltip="_Search_by_attributes"
+        action-command="search-by-attributes-layer"
+        accelerator=""
+        />
+      
+      <action
+        name="filter-by-attributes-layer"
+        label="_Filter_by_attributes"
+        position="601400001"
+        icon="filter-by-attributes-layer"
+        tooltip="_Filter_by_attributes"
+        action-command="filter-by-attributes-layer"
+        accelerator=""
+        />
+
+      <menu
+        name="search-by-attributes-layer"
+        text="Layer/_Search_by_attributes"
+        />
+      
+      <menu
+        name="filter-by-attributes-layer"
+        text="Layer/_Filter_by_attributes"
+        />
+
+      <tool-bar name="edit">
+        <action-tool name="search-by-attributes-layer" />
+      </tool-bar>
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.dispose.DisposableManagementExtension"
+      description="Extensi�n con informaci�n sobre disposables."
+      active="true"
+      priority="1000">
+
+      <action
+        name="tools-devel-disposables-show-pendings"
+        label="_Show_pendings_disposables"
+        position="908500701"
+        tooltip="_Show_pendings_disposables"
+        action-command="tools-devel-disposables-show-pendings"
+        icon="tools-devel-disposables-show-pendings"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-disposables-free-all"
+        label="_Free_all_disposables"
+        position="908500702"
+        action-command="tools-devel-disposables-free-all"
+        icon="tools-devel-disposables-free-all"
+        tooltip="_Free_all_disposables"
+        accelerator=""
+        />
+
+      <menu
+        name="tools-devel-disposables-show-pendings"
+        text="tools/Development/Disposables/Show_pendings"
+        />
+      <menu
+        name="tools-devel-disposables-free-all"
+        text="tools/Development/Disposables/Free_all"
+        />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.TranslationsPackageExtension"
+      description="Extensi�n para la creacion de paquetes de traducciones."
+      active="true"
+      priority="1000">
+
+      <action
+        name="tools-devel-translations-package"
+        label="_Translations_package"
+        position="908500300"
+        tooltip="_Translations_package"
+        action-command="tools-devel-translations-package"
+        icon="tools-devel-translations-package"
+        accelerator=""
+        />
+
+
+      <menu
+        name="tools-devel-translations-package"
+        text="tools/Development/_Translations_package"
+        />
+
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.develtools.EditingListenerExtension"
+      description="Monitor de operaciones de edition."
+      active="true"
+      priority="1000">
+
+      <action
+        name="tools-devel-show-editing-listener"
+        label="Show editing monitor"
+        position="908500600"
+        tooltip="Show editing monitor"
+        action-command="tools-devel-show-editing-listener"
+        icon="tools-devel-show-editing-listener"
+        accelerator=""
+        />
+
+      <menu
+        name="tools-devel-show-editing-listener"
+        text="tools/Development/Show_editing_monitor"
+        />
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.ShowDevelInfoExtension"
+      description="Presenta informacion relevante para debug."
+      active="true"
+      priority="30">
+      <action
+        name="tools-devel-show-persistencefactories"
+        label="_Show_persistence_factories"
+        tooltip="_Show_persistence_factories"
+        position="908501500"
+        action-command="tools-devel-show-persistencefactories"
+        icon="tools-devel-show-persistencefactories"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-icontheme"
+        label="_Show_icon_theme_information"
+        tooltip="_Show_icon_theme_information"
+        position="908501400"
+        action-command="tools-devel-show-icontheme"
+        icon="tools-devel-show-icontheme"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-actions"
+        label="_Show_actions_information"
+        tooltip="_Show_actions_information"
+        position="908501000"
+        action-command="tools-devel-show-actions"
+        icon="tools-devel-show-actions"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-toolbars"
+        label="_Show_toolbars_information"
+        tooltip="_Show_toolbars_information"
+        position="908501001"
+        action-command="tools-devel-show-toolbars"
+        icon="tools-devel-show-toolbars"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-plugin-report"
+        label="_Show_plugin_report"
+        tooltip="_Show_plugin_report_of_actions_menus_and_icons"
+        position="908501300"
+        action-command="tools-devel-show-plugin-report"
+        icon="tools-devel-show-plugin-report"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-menus"
+        label="_Show_menu_information"
+        tooltip="_Show_menu_information"
+        position="908501100"
+        action-command="tools-devel-show-menus"
+        icon="tools-devel-show-menus"
+        accelerator=""
+        />
+      <action
+        name="tools-devel-show-menus-by-plugin"
+        label="_Show_menu_by_plugin_information"
+        tooltip="_Show_menu_ordered_by_plugin_information"
+        position="908501200"
+        action-command="tools-devel-show-menus-by-plugin"
+        icon="tools-devel-show-menus-by-plugin"
+        accelerator=""
+        />
+      <menu
+        name="tools-devel-show-persistencefactories"
+        text="tools/Development/Show_persistence_factories"
+        />
+      <menu
+        name="tools-devel-show-icontheme"
+        text="tools/Development/Show_icon_theme_information"
+        />
+      <menu
+        name="tools-devel-show-plugin-report"
+        text="tools/Development/Show_plugin_report_of_actions_menus_and_icons"
+        />
+      <menu
+        name="tools-devel-show-actions"
+        text="tools/Development/Show_actions_information"
+        />
+      <menu
+        name="tools-devel-show-toolbars"
+        text="tools/Development/Show_toolbars_information"
+        />
+      <menu
+        name="tools-devel-show-menus"
+        text="tools/Development/Show_menu_information"
+        />
+      <menu
+        name="tools-devel-show-menus-by-plugin"
+        text="tools/Development/Show_menu_by_plugin_information"
+        />
+
+    </extension>
+
+
+    <extension class-name="org.gvsig.app.extension.PaletteViewInfoExtension"
+      description="Extensi�n encargada transformar la ventana activa en palette."
+      active="true">
+
+      <action
+        name="window-convert-to-tool"
+        label="_Convert_to_tool"
+        tooltip="_Convert_regular_window_to_tool_window"
+        position="960300000"
+        action-command="window-convert-to-tool"
+        icon="window-convert-to-tool"
+        accelerator=""
+        />
+
+      <menu
+        name="window-convert-to-tool"
+        text="Window/Convert_to_tool"
+        />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.RestoreViewInfoExtension"
+      description="Extensi�n encargada transformar la ventana palette en su original."
+      active="true">
+
+      <action
+        name="window-restore-from-tool"
+        label="_Restore_tool"
+        tooltip="_Restore_tool_window_to_regular_window"
+        position="960400000"
+        action-command="window-restore-from-tool"
+        icon="window-restore-from-tool"
+        accelerator=""
+        />
+
+
+      <menu
+        name="window-restore-from-tool"
+        text="Window/Restore_from_tool"
+        />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.About"
+      description="Extensi�n encargada de abrir una ventana con la informaci�n relativa al programa."
+      active="true"
+      priority="90090">
+
+      <action
+        name="help-about"
+        label="_About"
+        tooltip="_Show_about"
+        position="999000000"
+        action-command="help-about"
+        icon="help-about"
+        accelerator=""
+        />
+
+      <menu
+        name="help-about"
+        text="Help/About"
+        />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.HelpExtension"
+      description="Extensi�n encargada presentar la ayuda en linea."
+      active="true"
+      priority="90090">
+
+      <action
+        name="help-contents"
+        label="_Help_contents"
+        tooltip="_Show_help_contents"
+        position="996000000"
+        action-command="help-contents"
+        icon="help-contents"
+        accelerator=""
+        />
+
+      <action
+        name="help-search"
+        label="_Help_search"
+        tooltip="_Show_help_search_page"
+        position="997000000"
+        action-command="help-search"
+        icon="help-search"
+        accelerator=""
+        />
+
+      <menu
+        name="help-contents"
+        text="Help/_Help_contents"
+        />
+
+      <menu
+        name="help-search"
+        text="Help/_Help_contents_search"
+        />
+
+    </extension>
+
+    <extension class-name="org.gvsig.app.extension.logviewer.LogViewerExtension"
+      description="Muestra el registro de errores de la aplicacion."
+      active="true"
+      priority="90090">
+
+      <action
+        name="help-logview"
+        label="_Log_view"
+        tooltip="_Log_view"
+        position="908500100"
+        action-command="log-view"
+        icon="help-logview"
+        accelerator=""
+        />
+
+      <menu
+        name="help-logview"
+        text="tools/Development/Show error log"
+        />
+
+    </extension>
+
+    <extension
+            class-name="org.gvsig.app.extension.BrowseSymbolsExtension"
+            description="" active="true">
+
+            <action
+                 name="tools-symbology-browse-symbols"
+                 label="_Browse_symbols"
+                 tooltip="_Browse_symbols"
+                 action-command="tools-symbology-browse-symbols"
+                 icon="tools-symbology-browse-symbols"
+                 position="900400050"
+                 accelerator=""
+            />
+            <menu
+                 name="tools-symbology-browse-symbols"
+                 text="tools/Symbols/Browse_symbols"
+            />
+        </extension>
+
+
+    <extension class-name="org.gvsig.app.extension.UndoRedoViewExtension"
+            description="Extensi�n encargada de hacer/deshacer la edici�n sobre la capa activa y mostrar el hist�rico."
+            active="true" >
+
+            <action
+                name="edit-undo-layer"
+                label="_Undo"
+                tooltip="_Undo_last_modification_in_the_active_layer"
+                position="200100000"
+                action-command="edit-undo-layer"
+                icon="edit-undo"
+                accelerator=""
+                />
+
+            <action
+                name="edit-redo-layer"
+                label="_Redo"
+                tooltip="_Redo_last_modification_in_the_active_layer"
+                position="200200000"
+                action-command="edit-redo-layer"
+                icon="edit-redo"
+                accelerator=""
+                />
+
+                <action
+                name="edit-undo-redo-actions-layer"
+                label="_Undo_redo_history"
+                tooltip="_Undo_redo_history"
+                position="200300000"
+                action-command="edit-undo-redo-actions-layer"
+                icon="edit-undo-redo-actions"
+                accelerator=""
+                />
+
+            <menu
+                name="edit-undo-layer"
+                text="Edit/_Undo"
+                />
+
+            <menu
+                name="edit-redo-layer"
+                text="Edit/_Redo"
+                />
+
+            <menu
+                name="edit-undo-redo-actions-layer"
+                text="Edit/_Undo_redo_history"
+                />
+            
+            <tool-bar name="edit">
+                <action-tool name="edit-undo-layer"/>
+                <action-tool name="edit-redo-layer"/>
+                <action-tool name="edit-undo-redo-actions-layer"/>
+            </tool-bar>
+    </extension>
+
+
+        <!--
+        ***********************************
+        Copy/paste features between layers
+        using system clipboard
+        ***********************************
+        -->
+
+        <extension class-name="org.gvsig.app.extension.clipboard.CopyFeaturesToClipboardExtension"
+            description="Copy selected features to system clipboard"
+            active="true">
+
+            <action
+                name="layer-modify-clipboard-copy"
+                label="_Copy_selected_features_to_clipboard"
+                tooltip="_Copy_selected_features_to_clipboard"
+                position="601105000"
+                action-command="layer-modify-clipboard-copy"
+                icon="layer-modify-clipboard-copy"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-clipboard-copy"
+                text="Layer/Modify/_Copy_selected_features_to_clipboard"
+                />
+
+            <tool-bar name="edit">
+                <action-tool
+                    name="layer-modify-clipboard-copy"
+                    />
+            </tool-bar>
+        </extension>
+
+       <extension class-name="org.gvsig.app.extension.clipboard.PasteAlphanumericValuesFromClipboardExtension"
+            description="Paste alphanumeric values from system clipboard into editing feature"
+            active="true">
+
+            <action
+                name="layer-modify-clipboard-paste-alphanumeric"
+                label="_Paste_alphanumeric_values_from_clipboard"
+                tooltip="_Paste_alphanumeric_values_from_clipboard"
+                position="601105200"
+                action-command="layer-modify-clipboard-paste-alphanumeric"
+                icon="layer-modify-clipboard-paste-alphanumeric"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-modify-clipboard-paste-alphanumeric"
+                text="Layer/Modify/_Paste_alphanumeric_values_from_clipboard"
+                />
+
+            <tool-bar name="edit">
+                <action-tool
+                    name="layer-modify-clipboard-paste-alphanumeric"
+                    />
+            </tool-bar>
+        </extension>
+        
+        <extension class-name="org.gvsig.app.extension.LayerPropertiesExtension"
+            description=""
+            active="true">
+
+            <action
+                name="layer-properties"
+                label="propiedades"
+                tooltip="_Layer_properties"
+                position="609000000"
+                action-command="layer-properties"
+                icon="layer-properties"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-properties"
+                text="Layer/propiedades"
+                />
+
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.CreateSpatialIndexExtension"
+            description=""
+            active="true">
+
+            <action
+                name="layer-create-spatialindex"
+                label="_Create_spatial_index"
+                tooltip="_Create_spatial_index"
+                position="608000000"
+                action-command="layer-create-spatialindex"
+                icon="layer-create-spatialindex"
+                accelerator=""
+                />
+
+            <menu
+                name="layer-create-spatialindex"
+                text="Layer/_Create_spatial_index"
+                />
+
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.ShowLayerAsForm"
+                           description="Muestra la tabla asociada a la capa en modo formulario."
+                           active="true">
+
+            <action
+                name="layer-show-form"
+                label="_Show_layer_form"
+                tooltip="_Show_layer_form"
+                position="601300000"
+                action-command="layer-show-form"
+                icon="layer-show-form"
+                accelerator=""
+            />
+
+            <menu
+                name="layer-show-form"
+                text="Layer/_Show_form"
+            />
+
+        </extension>
+
+        <extension class-name="org.gvsig.app.extension.ShowEditedFeatures"
+                           description="Muestra las features editadas en la sesion de edicion."
+                           active="true">
+
+            <action
+                name="layer-show-editedfeatures"
+                label="_Show_edited_features"
+                tooltip="_Show_edited_features"
+                position="601300001"
+                action-command="layer-show-editedfeatures"
+                icon="layer-show-editedfeatures"
+                accelerator=""
+            />
+
+            <menu
+                name="layer-show-editedfeatures"
+                text="Layer/_Show_edited_features"
+            />
+
+        </extension>
+
+
+        <extension
+            class-name="org.gvsig.app.extension.geometriespalette.GeometriesPaletteExtension"
+            description="" active="false">
+
+            <action
+                 name="tools-open-geometriespalette"
+                 label="_Open_geometries_palette"
+                 tooltip="_Open_geometries_palette"
+                 action-command="tools-open-geometriespalette"
+                 icon="tools-open-geometriespalette"
+                 position="900400100"
+                 accelerator=""
+            />
+            <menu
+                 name="tools-open-geometriespalette"
+                 text="tools/_Open_palette_from_layer"
+            />
+        </extension>
+
+        <extension
+            class-name="org.gvsig.app.extension.evalexpression.EvaluateExpressionExtension"
+            description="" active="true">
+
+            <action 
+                name="tools-scripting-evaluateexpression"
+                label="_Evaluate_expression" 
+                position="908300050"  
+                tooltip="_Show_scripting_launcher" 
+                action-command="tools-scripting-evaluateexpression"
+                icon="tools-scripting-evaluateexpression"
+                accelerator=""
+            />
+
+            <menu text="tools/_Scripting"
+                              position="908300000" 
+                              is_separator="true"/>
+            <menu text="tools/_Scripting/Evaluate expression"  name="tools-scripting-evaluateexpression"/>
+        </extension>
+        
+  </extensions>
+
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/dal-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/dal-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/databaseworkspace-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/databaseworkspace-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/symbology-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/symbology-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/layer-order-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/layer-order-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/dialog-remember-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/preferences/dialog-remember-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-next-fast.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-next-fast.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-previous.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-last.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-first.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-previous-fast.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/toolbar-go/go-previous-fast.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/project/project-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/project/project-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-projection-code.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-projection-code.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-capture-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-capture-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-capture-bbox.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/element/expressionbuilder-element-view-capture-bbox.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-set-hide.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-set-hide.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-vectorial.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-clock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-clock.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-move-ahead.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-move-ahead.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-csv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-csv.png
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-group.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-visible.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-visible.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-unavailable.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-unavailable.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-jdbc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-jdbc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-postgresql.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-postgresql.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-leaf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-leaf.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-inactive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-inactive.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-mysql.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-mysql.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-ball.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-chk-temporary-ball.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-dgn.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-dgn.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-set-visible.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-set-visible.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-send-back.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-send-back.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-bring-front.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-bring-front.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-hide.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-hide.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-active.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-set-active.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-move-behind.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/active-layer-move-behind.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-dxf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-dxf.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-unavailable.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/layer/layer-icon-unavailable.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/help-contents.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/help-contents.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-select-by-layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-select-by-layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-in-topoint.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-in-topoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-out-topoint.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-out-topoint.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-addtolocator.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-addtolocator.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-simple-select.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-simple-select.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-show-form.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-show-form.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/filter-by-attributes-layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/filter-by-attributes-layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(black-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(black-16x16).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-copy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(color-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(color-16x16).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-new.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-new.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-select-by-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-modify.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-modify.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-find.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-find.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-selectforediting.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-selectforediting.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-properties.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-open.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-clear.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-out-center.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-out-center.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-cut.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-pan.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-area.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-add.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-delete.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-back.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-back.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(base-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(base-16x16).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(black-24x24).png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(black-24x24).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/help-search.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/help-search.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(color-24x24).png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-feature-angle(color-24x24).png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-delete.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-undo-redo-actions-delete.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-all.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-paste.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-save.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-save.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-save-as.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/application-project-save-as.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-info-by-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-query-distance.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-copy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-frame-manager.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-frame-manager.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-select-all.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-paste.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-layer-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-layer-add.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/search-by-attributes-layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/search-by-attributes-layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-in-center.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/view-navigation-zoom-in-center.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-find-replace.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/edit-find-replace.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-select-by-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/selection-select-by-rectangle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-paste-alphanumeric.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/action/layer-modify-clipboard-paste-alphanumeric.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-query-distance.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-pan.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-select-by-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-crux.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-zoom-in.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-select-by-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-select-by-rectangle.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-zoom-out.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-info-by-point.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-query-area.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/cursor/cursor-select-by-polygon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/document/document-view-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/document/document-view-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/document/document-view-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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/document/document-view-icon-sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-single-symbol.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-single-symbol.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-vectorial-unique-value.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-vectorial-unique-value.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-vectorial-interval.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images/legend/legend-overview-vectorial-interval.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/images
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3_sel.svg	(revision 46118)
@@ -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="svg10122"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pentagon 3.svg">
+  <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)" />
+    <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.4974032,15.158706 C 3.4858078,15.127734 2.8880025,13.267753 2.1689469,11.025413 1.4498914,8.7830743 0.84294429,6.8931989 0.82017557,6.8256904 0.779185,6.704155 0.81427614,6.6773528 4.388566,4.1001955 6.3739496,2.6686817 8.0141183,1.5022938 8.0333851,1.5082226 c 0.019267,0.00593 1.6449471,1.1891106 3.6126219,2.629293 l 3.57759,2.6185134 -0.442644,1.3350637 C 14.537498,8.8253776 13.910299,10.72865 13.387178,12.320587 l -0.95113,2.89443 -4.4587811,0 c -3.5257479,0 -4.4631928,-0.01178 -4.4798637,-0.05631 z M 8.6665554,10.644129 C 9.3827362,10.42859 9.999213,9.8321016 10.251256,9.1108095 10.294546,8.9869233 10.341352,8.6929753 10.355269,8.4575916 10.397755,7.7390318 10.167833,7.1361838 9.6578076,6.6288646 9.2224249,6.195792 8.7465435,5.9890234 8.0938383,5.9493253 7.002078,5.8829233 6.0297889,6.5445594 5.6783158,7.5930718 5.5498531,7.9763016 5.5399575,8.6208754 5.6564794,9.0154541 c 0.2570323,0.8703862 1.0157002,1.5486089 1.8967649,1.6956409 0.2822045,0.0471 0.8472478,0.01311 1.1133111,-0.06697 l 0,0 z"
+       id="path3998"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2.svg	(revision 46118)
@@ -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="svg4922"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 107">
+  <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>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Expressway 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Expressway Ramp.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Contour Topo, Index.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Contour Topo, Index.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 4.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 6.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Question_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1_sel.svg	(revision 46118)
@@ -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-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>
+    <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.9818812,12.52297 0,-3.4688116 -3.4688119,0 -3.46881191,0 0,-1.0361386 0,-1.0361386 3.46881191,0 3.4688119,0 0,-3.4688119 0,-3.46881195 1.0136139,0 1.0136139,0 0,3.46881195 0,3.4688119 3.491337,0 3.491336,0 0,1.0361386 0,1.0361386 -3.491336,0 -3.491337,0 0,3.4688116 0,3.468812 -1.0136139,0 -1.0136139,0 0,-3.468812 z"
+       id="path4140"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 2_sel.svg	(revision 46118)
@@ -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="svg3876"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Cross 2.svg">
+  <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" />
+    <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.795298,15.214678 C 5.779085,14.787271 5.765758,13.499981 5.765682,12.354035 l -1.378e-4,-2.08354 -2.8606436,0 -2.86064361,0 0,-2.2299504 0,-2.2299506 2.86064361,0 2.8606436,0 0,-2.8823389 0,-2.88233888 2.2299613,-0.01209181 2.2299615,-0.01209181 -1.2e-5,2.8831683 -1.2e-5,2.8831684 2.853286,-0.016076 2.853287,-0.016076 0.0298,1.2549377 c 0.01639,0.6902157 0.02984,1.683555 0.02988,2.2074199 9e-5,0.8270341 -0.0093,0.9560841 -0.07117,0.9798271 -0.03919,0.01504 -1.151053,0.02735 -2.470801,0.02735 -1.31975,0 -2.587288,0.01333 -2.816752,0.02961 l -0.417209,0.02961 0.0161,2.824038 0.0161,2.824038 -1.2799777,0.02952 c -0.7039877,0.01623 -1.6992065,0.02952 -2.2115973,0.02952 l -0.9316197,0 -0.029478,-0.777104 z"
+       id="path4198"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3_sel.svg	(revision 46118)
@@ -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="svg3921"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Cross 3.svg">
+  <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" />
+    <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.4412871,13.83676 c 0,-0.689718 -0.013415,-1.926326 -0.029811,-2.74802 l -0.029811,-1.4939875 -2.7407338,0 -2.74073371,0 0,-1.5767327 0,-1.5767327 2.74801981,0 2.7480198,0 0,-2.7705446 0,-2.77054454 1.5767327,0 1.5767327,0 0,2.77641884 0,2.7764188 2.7705454,-0.019935 2.770544,-0.019935 0,1.5609392 0,1.5609397 -1.858292,0.029795 c -1.022061,0.016387 -2.272067,0.029821 -2.777792,0.029854 l -0.9195001,4.51e-5 0.031508,2.7480204 0.031507,2.74802 -1.578468,0 -1.578468,0 0,-1.254033 0,1.5e-5 z"
+       id="path4256"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 4_sel.svg	(revision 46118)
@@ -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="svg3972"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Cross 4.svg">
+  <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" />
+    <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.4412871,13.904341 c 0,-0.652548 -0.013419,-1.889157 -0.02982,-2.74802 l -0.029821,-1.5615685 -2.7407243,0 -2.74072431,0 0,-1.5767327 0,-1.5767327 2.74801981,0 2.7480198,0 0,-2.7705446 0,-2.77054454 1.5767327,0 1.5767327,0 0,2.77672354 0,2.7767236 2.7705455,-0.021264 2.770544,-0.021264 0,1.5619704 0,1.56197 -1.790718,0.029786 C 12.31518,9.5812255 11.065226,9.594657 10.5224,9.5946908 l -0.9869565,4.5e-5 0.032006,2.7480202 0.032006,2.748019 -1.5790847,0 -1.5790843,0 0,-1.186451 0,1.7e-5 z"
+       id="path4314"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Blue.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Blue.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid_sel.svg	(revision 46118)
@@ -0,0 +1,147 @@
+<?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="16"
+   height="16"
+   id="svg24489"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Grid.svg">
+  <defs
+     id="defs24491">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4250">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,542.40485 0,21.59961 32.40035,0 0,-21.59961 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path4252" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5778">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,506.40555 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path5780" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6668">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,470.40625 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path6670" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8468">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,434.40695 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path8470" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8446">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,434.40695 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path8448" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.839192"
+     inkscape:cx="5.2268076"
+     inkscape:cy="10.816337"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1307"
+     inkscape:window-height="744"
+     inkscape:window-x="53"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata24494">
+    <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
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575932,1052.2364 0,-15.7484"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151885000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8452" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 3.9849049,1052.2364 0,-15.7484"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151885000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8454" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 7.8440587,1052.2364 0,-15.7484"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151885000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8456" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 11.703003,1052.2364 0,-15.7484"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25138127999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8458" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1052.2364 15.57836155,0"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151511999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8474" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1048.3353 15.57836155,0"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151511999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8476" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1044.4341 15.57836155,0"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151511999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8478" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1040.5329 15.57836155,0"
+       style="fill:#ffff00;stroke:#000000;stroke-width:0.25151511999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8480" />
+    <path
+       style="fill:#ffff00;fill-opacity:1;stroke:none"
+       d="m 0.13810985,1052.2522 c -0.06222864,-0.071 -0.07891817,-1.7495 -0.07891817,-7.9377 0,-6.9337 0.0110314,-7.8479 0.0947018,-7.8479 0.0821428,0 0.0947018,0.2601 0.0947018,1.9613 l 0,1.9613 1.83090152,0 1.8309014,0 0,-1.9613 c 0,-1.7012 0.012559,-1.9613 0.094702,-1.9613 0.082143,0 0.094702,0.2601 0.094702,1.9613 l 0,1.9613 1.8309015,0 1.8309015,0 0,-1.9613 c 0,-1.7012 0.012559,-1.9613 0.094702,-1.9613 0.082143,0 0.094702,0.2601 0.094702,1.9613 l 0,1.9613 1.8309015,0 1.8309013,0 0,-1.9613 c 0,-1.7012 0.01256,-1.9613 0.0947,-1.9613 0.08214,0 0.0947,0.2601 0.0947,1.9613 l 0,1.9613 1.925603,0 c 1.669558,0 1.925603,0.013 1.925603,0.095 0,0.082 -0.256045,0.095 -1.925603,0.095 l -1.925603,0 0,1.8664 0,1.8664 1.925603,0 c 1.669558,0 1.925603,0.013 1.925603,0.095 0,0.082 -0.256045,0.095 -1.925603,0.095 l -1.925603,0 0,1.8664 0,1.8664 1.925603,0 c 1.669558,0 1.925603,0.013 1.925603,0.095 0,0.082 -0.256045,0.095 -1.925603,0.095 l -1.925603,0 0,1.8664 0,1.8664 1.925603,0 c 1.669558,0 1.925603,0.013 1.925603,0.095 0,0.084 -0.898599,0.095 -7.7181964,0.092 -6.5854514,-0 -7.72977905,-0.016 -7.79711495,-0.092 z m 3.77228835,-1.9616 0,-1.8664 -1.8309014,0 -1.83090152,0 0,1.8664 0,1.8664 1.83090152,0 1.8309014,0 0,-1.8664 z m 3.8512066,0 0,-1.8664 -1.8309015,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309015,0 0,-1.8664 z m 3.8512062,0 0,-1.8664 -1.8309011,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309011,0 0,-1.8664 z m -7.7024128,-3.9226 0,-1.8664 -1.8309014,0 -1.83090152,0 0,1.8664 0,1.8664 1.83090152,0 1.8309014,0 0,-1.8664 z m 3.8512066,0 0,-1.8664 -1.8309015,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309015,0 0,-1.8664 z m 3.8512062,0 0,-1.8664 -1.8309011,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309011,0 0,-1.8664 z m -7.7024128,-3.9226 0,-1.8664 -1.8309014,0 -1.83090152,0 0,1.8664 0,1.8664 1.83090152,0 1.8309014,0 0,-1.8664 z m 3.8512066,0 0,-1.8664 -1.8309015,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309015,0 0,-1.8664 z m 3.8512062,0 0,-1.8664 -1.8309011,0 -1.8309015,0 0,1.8664 0,1.8664 1.8309015,0 1.8309011,0 0,-1.8664 z"
+       id="path3205"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry_sel.svg	(revision 46118)
@@ -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="svg4298"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Inquiry.svg">
+  <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>
+    <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.76504947,8.0180198 0,-7.97376245 7.23044563,0 7.2304459,0 0,7.97376245 0,7.9737622 -7.2304459,0 -7.23044563,0 0,-7.9737622 z m 8.55940603,5.1581682 0,-1.103713 -1.2163367,0 -1.2163366,0 0,1.103713 0,1.103713 1.2163366,0 1.2163367,0 0,-1.103713 z m 0,-2.839616 c 0,-0.9370474 0.0037,-0.9772942 0.108831,-1.1825496 0.1584274,-0.3093216 0.429147,-0.5430876 1.0480255,-0.904968 0.661009,-0.3865153 1.04073,-0.6805318 1.348466,-1.0441092 0.853324,-1.0081697 0.872113,-2.5088331 0.04586,-3.6624286 C 11.039122,2.3746047 9.6170489,1.7110891 7.9504456,1.7110891 c -1.4588255,0 -2.5479505,0.4586108 -3.431363,1.4448851 C 3.8028789,3.9555701 3.5169038,4.8165055 3.51385,6.1822525 l -7.807e-4,0.3491336 1.1938119,0 1.1938119,0 3.604e-4,-0.4167079 C 5.9017112,5.307551 6.0435775,4.8244153 6.3903983,4.4481591 7.0719518,3.7087609 8.7225008,3.6573363 9.5455161,4.3498579 10.060437,4.7831356 10.055759,5.6331931 9.5356787,6.1374165 9.427185,6.2426021 8.9551752,6.5608053 8.4867685,6.8445342 7.2790584,7.5760824 7.0400915,7.8379096 6.9384675,8.5409509 6.9137835,8.7117178 6.8931855,9.4038552 6.8926949,10.079035 l -9.127e-4,1.227599 1.2163366,0 1.2163367,0 0,-0.970062 z"
+       id="path3479"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lake.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Lake.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Blue.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Med Blue.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/X_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/carretera-nacional.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1_sel.svg	(revision 46118)
@@ -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="svg9243"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 1.svg">
+  <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="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <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)" />
+    <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 6.5165419,15.809133 C 4.705056,15.398264 3.4434266,14.69084 2.2140528,13.396629 0.78860373,11.896002 0.08917993,10.126328 0.08665454,8.0139137 0.0824819,4.5236205 2.2782584,1.5193221 5.6353575,0.42208499 6.3175147,0.19912813 6.6590685,0.14430186 7.5971884,0.10717151 c 1.262092,-0.049953 2.0230241,0.048768 2.9959366,0.38868317 2.486011,0.86856052 4.417982,2.97647402 5.115102,5.58093032 0.270905,1.012109 0.273473,2.855629 0.0054,3.8470899 -0.756201,2.7963441 -2.794686,4.8844881 -5.576539,5.7123861 -0.9949379,0.296101 -2.7150821,0.378234 -3.6205035,0.172872 l -3.6e-6,0 z"
+       id="path3644"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 2_sel.svg	(revision 46118)
@@ -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="svg9577"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 2.svg">
+  <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)" />
+    <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 6.70097,15.028808 C 5.0453843,14.680556 3.3771988,13.669265 2.4319349,12.440824 0.58626541,10.042238 0.3696228,6.9392172 1.8694566,4.3843197 2.8603652,2.6963525 4.6372026,1.4217791 6.5590473,1.0203495 10.061868,0.28868993 13.687518,2.398374 14.766152,5.7958792 c 0.739664,2.32981 0.316738,4.6779568 -1.196824,6.6449448 -0.799962,1.039611 -2.178326,1.966219 -3.5865183,2.411046 -0.7114468,0.224735 -2.576566,0.325292 -3.2818397,0.176938 z"
+       id="path3702"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3_sel.svg	(revision 46118)
@@ -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="svg9941"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 3.svg">
+  <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" />
+    <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.6937624,10.282839 C 9.4314102,10.074787 10.066579,9.4347763 10.29317,8.6712376 10.400541,8.3094302 10.400433,7.6667945 10.292945,7.338767 10.015754,6.4928449 9.4525948,5.936275 8.6326672,5.6979158 8.2991567,5.6009616 7.7041356,5.6018193 7.3590393,5.6997538 5.6110928,6.1957903 5.0297233,8.4012312 6.3095417,9.6810493 6.937307,10.308815 7.815643,10.530512 8.693762,10.282841 l 4e-7,-2e-6 z"
+       id="path3762"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 4_sel.svg	(revision 46118)
@@ -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="svg5099"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 4.svg">
+  <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)" />
+    <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.1596177,15.054294 2.7756231,13.514988 1.6239391,11.222683 1.0926335,10.165175 0.85493202,9.1637197 0.85538844,7.9847179 0.85690816,4.0590837 4.0590837,0.85690816 7.9847179,0.85538844 10.997493,0.85422211 13.643789,2.6951012 14.713073,5.5359263 c 0.287507,0.763836 0.425859,1.5695761 0.42546,2.477803 -8.47e-4,1.9310574 -0.71805,3.6530997 -2.094877,5.0299267 -1.435149,1.435149 -3.3211282,2.17809 -5.3409827,2.103964 z"
+       id="path3820"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5_sel.svg	(revision 46118)
@@ -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="svg5152"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 5.svg">
+  <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" />
+    <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.7426583,13.492538 1.5902329,11.159686 1.0870969,10.141189 0.85494192,9.1381406 0.85538844,7.9847179 0.85690816,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.52e-4,1.9350578 -0.714333,3.6465067 -2.096314,5.0284897 -1.440075,1.440074 -3.3157787,2.17967 -5.3395457,2.105401 z M 8.688506,10.287499 C 9.4235126,10.08122 10.073976,9.4256452 10.297381,8.6659813 10.399194,8.3197781 10.399288,7.6766477 10.297561,7.3355437 9.9918567,6.3103309 9.0828158,5.6251924 8.0238235,5.6218402 7.3461663,5.6196959 6.7870168,5.8425431 6.3283494,6.2975675 5.8388509,6.7831777 5.622779,7.3041617 5.624154,7.995495 c 0.00136,0.6822352 0.2125287,1.2089378 0.671662,1.6752547 0.3794591,0.3853963 0.8761736,0.6310263 1.4293676,0.7068343 0.2144798,0.02939 0.699062,-0.01593 0.963308,-0.09009 l 1.44e-5,0 z"
+       id="path3880"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 6_sel.svg	(revision 46118)
@@ -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="svg5207"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 6.svg">
+  <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>
+    <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.0094394,7.1740889 C 1.1943509,5.1335199 2.4607354,3.1622195 4.324484,2.0137692 5.1556415,1.5016062 6.304888,1.1025883 7.2183911,1.0090061 l 0.3040841,-0.0311513 0,3.2723102 0,3.2723102 -3.2723029,0 -3.27230283,0 0.0315699,-0.3483863 0,0 z"
+       id="path3942"
+       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.4685149,4.250165 0,-3.27231025 0.3040841,0.0309878 c 2.437914,0.2484377 4.78635,1.9911335 5.723973,4.2475689 0.286292,0.6889742 0.436728,1.2888741 0.520246,2.0746032 l 0.02035,0.1914604 -3.284327,0 -3.2843271,0 0,-3.2723102 z"
+       id="path3944"
+       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.4685149,11.75017 0,-3.2816551 3.2804711,0 3.280471,0 -0.03653,0.3266089 C 14.63491,11.99613 12.13968,14.52373 8.8942657,14.972901 l -0.4257508,0.05893 0,-3.281656 z"
+       id="path3946"
+       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.0719802,14.976619 C 4.2660335,14.584284 1.9826736,12.579711 1.198203,9.82 1.1094517,9.5077795 0.99029697,8.8202021 0.99029697,8.6202871 l 0,-0.1517722 3.26608913,0 3.2660891,0 0,3.2886141 c 0,1.808737 -0.00507,3.286525 -0.011262,3.283972 -0.00619,-0.0026 -0.203849,-0.03157 -0.4392327,-0.06448 z"
+       id="path3948"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7_sel.svg	(revision 46118)
@@ -0,0 +1,78 @@
+<?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="Circle 7.svg">
+  <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>
+    <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.3873267,15.016303 c -0.061943,-0.0094 -0.313722,-0.04906 -0.559509,-0.08803 C 4.638484,14.581152 2.6605197,13.098287 1.6727674,11.063575 0.73543471,9.1327243 0.73618766,6.8277078 1.6747703,4.9321287 2.4686831,3.3287276 3.8191562,2.0917799 5.5050318,1.4238522 5.9226236,1.2584064 6.7681352,1.0503989 7.1798891,1.0118144 l 0.3425861,-0.032103 0,7.0330155 c 0,3.8681591 -0.00507,7.0302551 -0.011262,7.0268811 -0.00619,-0.0034 -0.061943,-0.01386 -0.1238862,-0.0233 l 0,0 z"
+       id="path4010"
+       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.4685149,8.0049248 0,-7.02521336 0.3400131,0.0318619 c 0.4205909,0.039413 1.244262,0.24038 1.66469,0.4061675 1.0814,0.426429 1.923898,0.9994621 2.701945,1.8377532 1.72322,1.8566509 2.307582,4.5583961 1.502663,6.947427 -0.614021,1.822436 -1.950204,3.337162 -3.655886,4.144393 -0.783294,0.370702 -1.4662284,0.559734 -2.4070143,0.666248 l -0.1464108,0.01658 0,-7.0252132 z"
+       id="path4012"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 8_sel.svg	(revision 46118)
@@ -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="svg3272"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Circle 8.svg">
+  <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>
+    <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.7025088,5.1799189 C 4.4661436,4.0192455 3.4018491,3.0162425 3.3374098,2.9510233 L 3.2202475,2.8324432 3.4229703,2.6536567 C 3.5344678,2.5553243 3.8343779,2.3335549 4.089437,2.1608361 5.8999804,0.93478732 8.1109642,0.63317261 10.206944,1.3263072 c 0.51645,0.1707884 1.376787,0.6047613 1.832701,0.9244545 l 0.39514,0.2770775 -0.372615,0.4010065 C 10.03088,5.114908 7.991182,7.2904275 7.9729703,7.290341 7.9605817,7.2902824 6.938874,6.3405925 5.7025088,5.1799189 z"
+       id="path4074"
+       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 11.107552,10.230588 C 9.8211394,9.0256925 8.7608867,8.0166701 8.7514353,7.988316 8.7379067,7.94773 12.201844,4.1908772 12.981597,3.4004455 l 0.177764,-0.180198 0.19915,0.2252475 c 0.698165,0.7896555 1.295993,2.0220157 1.527566,3.1489152 0.315195,1.5338367 0.09605,3.1822878 -0.609462,4.5845258 -0.159942,0.31789 -0.677741,1.120882 -0.770445,1.194789 -0.04594,0.03663 -0.598135,-0.456748 -2.398618,-2.143137 z"
+       id="path4076"
+       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.4098515,15.014509 C 6.6601675,14.947579 5.7014307,14.676552 4.9559172,14.3208 4.4643167,14.086213 3.6031683,13.541506 3.6031683,13.465138 c 0,-0.05656 4.3696803,-4.7263261 4.4226077,-4.7263261 0.050977,0 4.722442,4.3688191 4.722442,4.4164931 0,0.05519 -0.391226,0.387237 -0.765842,0.650002 -1.30051,0.91221 -2.9659456,1.352633 -4.5725245,1.209202 z"
+       id="path4078"
+       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 2.6242248,12.532192 C 2.2991309,12.146649 1.9369065,11.57752 1.6903705,11.064914 0.86408386,9.3468698 0.73591631,7.436675 1.3298931,5.6923994 1.4984136,5.1975211 1.9325953,4.3716808 2.2580225,3.9270401 L 2.532038,3.5526447 2.853618,3.8612807 C 3.030487,4.0310305 4.1044842,5.0384555 5.2402785,6.1000031 L 7.3053587,8.0300895 7.0155868,8.3281388 c -0.1593752,0.163927 -1.1558847,1.225506 -2.214466,2.3590642 -1.0585814,1.133558 -1.9404539,2.061015 -1.9597166,2.061015 -0.019263,0 -0.1169935,-0.09721 -0.2171794,-0.216026 z"
+       id="path4080"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airplane_sel.svg	(revision 46118)
@@ -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="svg4665"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Airplane.svg">
+  <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" />
+    <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.9780015,12.342772 -2.0870369,-3.4237621 -2.5869291,0 c -2.74983046,0 -2.76669929,-0.00121 -3.00388842,-0.2157033 C 0.06446399,8.4901765 -0.02840387,8.0047482 0.1062833,7.6899639 0.18043392,7.516663 0.37622854,7.3251908 0.5623267,7.2439891 0.66645976,7.1985522 1.2965911,7.1798021 3.3080956,7.1622864 L 5.918716,7.1395544 7.9932016,3.6820049 10.067688,0.22445538 l 0.885006,0 0.885006,0 -0.13335,0.41670792 C 11.63101,0.87035266 11.126344,2.4072987 10.582876,4.056599 10.039408,5.7058994 9.5947525,7.0793462 9.5947525,7.1087027 c 0,0.040273 0.4562335,0.053376 1.8584375,0.053376 l 1.858437,0 0.630548,-0.8105014 0.630548,-0.8105019 0.687005,-4.054e-4 c 0.377853,-2.253e-4 0.687005,0.015408 0.687005,0.034717 0,0.019309 -0.162178,0.5584778 -0.360396,1.1981538 -0.198218,0.6396764 -0.360396,1.1891758 -0.360396,1.2211101 0,0.031935 0.162178,0.5784036 0.360396,1.2143761 0.198218,0.6359724 0.360396,1.175514 0.360396,1.198982 0,0.02508 -0.283181,0.04184 -0.687005,0.04066 l -0.687005,-0.002 -0.619118,-0.7863545 -0.619118,-0.7863535 -1.869867,0 c -1.028427,0 -1.8698675,0.01394 -1.8698675,0.030978 0,0.017038 0.3273996,1.025584 0.7275545,2.241213 0.400155,1.215629 0.904453,2.752518 1.120662,3.415308 l 0.393108,1.205075 -0.88552,0 -0.885518,0 -2.0870375,-3.423763 0,0 z"
+       id="path3115"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 4_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt_sel.svg	(revision 46118)
@@ -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="svg4119"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Bolt.svg">
+  <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" />
+    <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.0288797,15.597599 c 0.1001666,-0.117692 0.8907307,-0.994468 1.7568092,-1.948391 1.3847658,-1.52522 1.5629837,-1.737939 1.4776432,-1.763703 -0.053375,-0.01611 -0.5531712,-0.03239 -1.1106588,-0.03618 L 2.1390594,11.842445 4.7736335,9.234897 C 6.2226493,7.800746 7.3953244,6.6144664 7.3795782,6.5987203 7.3638321,6.5829741 6.6344,6.5427602 5.7586182,6.509356 4.882836,6.4759514 4.1587731,6.4469706 4.1495894,6.4449537 4.1286099,6.4403469 6.5029374,4.0121009 8.6560204,1.8361864 L 10.29302,0.18182832 12.635594,0.10872056 C 13.92401,0.06851129 15.043326,0.04262589 15.122962,0.05119745 15.261484,0.066107 15.140078,0.1858235 12.320351,2.8148019 10.699278,4.3262128 9.372171,5.5777935 9.371225,5.5960922 c -9.461e-4,0.018298 0.80356,0.03857 1.787791,0.04505 l 1.78951,0.011779 -3.3549804,2.6804455 -3.3549812,2.6804453 1.5943758,0.02252 1.5943759,0.02252 -4.2609618,2.376362 c -2.3435291,1.306999 -4.2741546,2.376361 -4.29027886,2.376361 -0.0161243,0 0.0526376,-0.09629 0.15280426,-0.213985 z"
+       id="path3431"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line_2pixel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line_2pixel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify.svg	(revision 46118)
@@ -0,0 +1,125 @@
+<?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="Nuevo documento 65">
+  <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>
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 4_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Cross 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Crossed_line_grid.svg	(revision 46118)
@@ -0,0 +1,142 @@
+<?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="16"
+   height="16"
+   id="svg24489"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Bog.svg">
+  <defs
+     id="defs24491">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4250">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,542.40485 0,21.59961 32.40035,0 0,-21.59961 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path4252" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5778">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,506.40555 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path5780" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6668">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,470.40625 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path6670" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8468">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,434.40695 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path8470" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8446">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 27.36029,434.40695 0,21.59958 32.40035,0 0,-21.59958 -32.40035,0 z"
+         clip-rule="evenodd"
+         id="path8448" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.839192"
+     inkscape:cx="28.444478"
+     inkscape:cy="11.278554"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1307"
+     inkscape:window-height="744"
+     inkscape:window-x="53"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata24494">
+    <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
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575932,1052.2364 0,-15.7484"
+       style="fill:none;stroke:#000000;stroke-width:0.25151885;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8452" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 3.9849049,1052.2364 0,-15.7484"
+       style="fill:none;stroke:#000000;stroke-width:0.25151885;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8454" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 7.8440587,1052.2364 0,-15.7484"
+       style="fill:none;stroke:#000000;stroke-width:0.25151885;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8456" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 11.703003,1052.2364 0,-15.7484"
+       style="fill:none;stroke:#000000;stroke-width:0.25138128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8458" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1052.2364 15.57836155,0"
+       style="fill:none;stroke:#000000;stroke-width:0.25151512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8474" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1048.3353 15.57836155,0"
+       style="fill:none;stroke:#000000;stroke-width:0.25151512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8476" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1044.4341 15.57836155,0"
+       style="fill:none;stroke:#000000;stroke-width:0.25151512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8478" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m 0.12575745,1040.5329 15.57836155,0"
+       style="fill:none;stroke:#000000;stroke-width:0.25151512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path8480" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1.svg	(revision 46118)
@@ -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="svg9288"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 94">
+  <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="675"
+     inkscape:window-height="383"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <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" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Handicapped 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3.svg	(revision 46118)
@@ -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="svg10014"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 138">
+  <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" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1.svg	(revision 46118)
@@ -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="svg9532"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 110">
+  <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="675"
+     inkscape:window-height="383"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <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" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3.svg	(revision 46118)
@@ -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="svg3167"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 5">
+  <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" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Inquiry.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 4_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pattern 5.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 6_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pushpin 2_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line_2pixel_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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Simple_line_2pixel_sel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 1_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 2_sel.svg	(revision 46118)
@@ -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="svg9787"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Hexagon 2.svg">
+  <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)" />
+    <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 7.34407,14.36517 4.2401536,14.316544 2.4600865,11.163079 C 1.4810494,9.428673 0.67826974,7.9765395 0.67613149,7.9361157 0.67399324,7.8956918 1.5132924,6.4438865 2.5412406,4.7098818 L 4.4102375,1.5571457 8.059805,1.6184013 c 2.007262,0.033691 3.675588,0.086709 3.70739,0.117818 0.0318,0.031109 0.853002,1.472083 1.824887,3.2021634 l 1.767065,3.1456009 -1.873852,3.1613294 -1.873851,3.16133 -0.581729,0.0036 c -0.31995,0.002 -1.9784909,-0.01831 -3.685645,-0.04505 l 0,-10e-7 z"
+       id="path3080"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Identify_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hexagon 3_sel.svg	(revision 46118)
@@ -0,0 +1,86 @@
+<?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="Hexagon 3.svg">
+  <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.4841582"
+     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)" />
+    <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.143507,14.234532 C 4.0448726,14.067286 3.2101168,12.62716 2.2884941,11.034253 L 0.61281634,8.1380579 2.4514328,4.9418316 4.2900493,1.745605 l 3.710002,0.010738 3.7100017,0.010738 1.838513,3.1752378 c 1.011182,1.746381 1.83272,3.1857127 1.825641,3.1985149 -0.0071,0.012803 -0.838519,1.4575407 -1.847641,3.2105293 l -1.834769,3.187252 -3.6844774,0 -3.6844774,0 -0.1793352,-0.304084 0,0 z M 8.8003864,10.419443 C 9.5581506,10.144487 10.095944,9.5803701 10.337615,8.8069719 10.45475,8.4321118 10.434512,7.70178 10.296686,7.3300162 10.003753,6.539874 9.3951795,5.9857661 8.5886749,5.7748689 8.2145108,5.6770267 7.5528655,5.7058268 7.1880051,5.8358371 5.7569224,6.3457728 5.1430139,8.0644966 5.9189961,9.3886092 6.2687294,9.985384 6.981518,10.445136 7.7138117,10.546274 c 0.26284,0.0363 0.8144338,-0.02808 1.0865747,-0.126831 l 0,0 z"
+       id="path3140"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Square 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Rnd Square 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Hospital 2.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 1_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Check 2_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Yellow.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1.svg	(revision 46118)
@@ -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="svg9487"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 107">
+  <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="675"
+     inkscape:window-height="383"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3.svg	(revision 46118)
@@ -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="svg3113"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 2">
+  <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" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/globo-de-comic.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 5.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Circle 7.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/placa-calle.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Diamond 5.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Bolt.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 1.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Asterisk 3.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 1_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 2_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Airfield.svg	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Octagon 3_sel.svg	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 1.svg	(revision 46118)
@@ -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="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 />
+      </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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Triangle 3.svg	(revision 46118)
@@ -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="svg10068"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 141">
+  <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="472"
+     inkscape:window-height="383"
+     inkscape:window-x="358"
+     inkscape:window-y="61"
+     inkscape:window-maximized="0" />
+  <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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Highway.gvssym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Highway.gvssym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 1.svg	(revision 46118)
@@ -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="svg3220"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 8">
+  <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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 3.svg	(revision 46118)
@@ -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="svg3310"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 14">
+  <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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 1_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Star 5.svg	(revision 46118)
@@ -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="svg3410"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Nuevo documento 20">
+  <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)" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Interstate HWY 2_sel.svg	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 1_sel.svg	(revision 46118)
@@ -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="svg9378"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pentagon 1.svg">
+  <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="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <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)" />
+    <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 3.1964386,15.508916 C 2.3440388,13.041047 0.09730357,6.3996968 0.09730357,6.3478721 0.09730357,6.3080269 1.810311,4.9920983 3.9039868,3.4235864 5.9976625,1.8550746 7.7548231,0.53745627 7.8087881,0.49554584 7.9161055,0.4122006 15.918029,6.0007738 15.898264,6.1452657 c -0.0063,0.045899 -0.650044,2.1566791 -1.43059,4.6906233 l -1.419174,4.60717 -3.8402025,0.0577 c -2.1121108,0.03173 -4.3218226,0.06682 -4.9104703,0.07798 -0.6512938,0.01234 -1.082451,-0.015 -1.1013886,-0.06982 z"
+       id="path3880"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2_sel.svg
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2_sel.svg	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/resources-plugin/Symbols/gvSIG Basic/Pentagon 2_sel.svg	(revision 46118)
@@ -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="svg9736"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pentagon 2.svg">
+  <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)" />
+    <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 3.6676143,14.814722 C 3.6440392,14.776576 3.0093289,12.945284 2.2571473,10.745185 1.5049657,8.5450852 0.86983545,6.693643 0.84574679,6.630869 0.81902625,6.5612364 2.1910244,5.4747977 4.3645185,3.8444733 L 7.9270879,1.1722121 11.534753,3.7103138 c 1.984216,1.3959559 3.607665,2.5852848 3.607665,2.642953 0,0.057668 -0.576506,1.9740875 -1.281124,4.2587102 l -1.281124,4.153858 -2.6156584,0.05895 c -3.5092639,0.0791 -6.2444935,0.07472 -6.2968973,-0.01007 l 0,0 z"
+       id="path3938"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/test/TestClassLoader.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/test/TestClassLoader.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/test/TestClassLoader.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id: TestClassLoader.java 8590 2006-11-08 10:57:55Z jaume $
+* $Log$
+* Revision 1.1  2006-11-08 10:57:55  jaume
+* remove unecessary imports
+*
+*
+*/
+package test;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.jar.JarException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class TestClassLoader extends ClassLoader{
+	private Hashtable jarz = new Hashtable();
+	private Hashtable classes = new Hashtable();
+	private String baseDir;
+
+	public TestClassLoader(String baseDir) throws IOException {
+		this.baseDir = baseDir;
+
+		File dir = new File(baseDir);
+
+
+		URL[] jars = (URL[]) getJarURLs(dir).toArray(new URL[0]);
+
+		if (jars == null) {
+			throw new IllegalArgumentException("jars cannot be null"); //$NON-NLS-1$
+		}
+
+		//Se itera por las URLS que deben de ser jar's
+		ZipFile[] jarFiles = new ZipFile[jars.length];
+
+		for (int i = 0; i < jars.length; i++) {
+			jarFiles[i] = new ZipFile(jars[i].getPath());
+			Enumeration files = jarFiles[i].entries();
+			while (files.hasMoreElements()) {
+				//Se obtiene la entrada
+				ZipEntry file = (ZipEntry) files.nextElement();
+				String fileName = file.getName();
+
+				//Se obtiene el nombre de la clase
+				if (!fileName.toLowerCase().endsWith(".class")) { //$NON-NLS-1$
+					continue;
+				}
+
+				fileName = fileName.substring(0, fileName.length() - 6).replace('/',
+				'.');
+
+				//Se cromprueba si ya hab�a una clase con dicho nombre
+				if (jarz.get(fileName) != null) {
+					throw new JarException(
+							"two or more classes with the same name in the jars: " +
+							fileName);
+				}
+
+				//Se registra la clase
+				jarz.put(fileName, jarFiles[i]);
+				try {
+					loadClass(fileName, true);
+				} catch (ClassNotFoundException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+		}
+	}
+
+	private ArrayList getJarURLs(File file) {
+		ArrayList jars = new ArrayList();
+		if (file.isDirectory()) {
+			String[] fileNames = file.list();
+			for (int i = 0; i < fileNames.length; i++) {
+				File file1 = new File(file+ File.separator + fileNames[i]);
+				if (file1.isDirectory()) {
+					jars.addAll(getJarURLs(file1));
+				} else {
+					if (file1.getAbsolutePath().endsWith(".jar")) {
+						try {
+							jars.add(file1.toURL());
+						} catch (MalformedURLException e) {
+							e.printStackTrace();
+						}
+					}
+				}
+			}
+		} else {
+			if (file.getAbsolutePath().endsWith(".jar")) {
+				try {
+					jars.add(new URL(file.getAbsolutePath()));
+				} catch (MalformedURLException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return jars;
+	}
+
+	protected synchronized Class loadClass(String className, boolean resolve) throws ClassNotFoundException {
+		Class c;
+		System.out.print("Loading class ["+className+"]...");
+		try {
+			c = super.loadClass(className, resolve);
+		} catch (ClassNotFoundException e) {
+			ZipFile file = (ZipFile) jarz.get(className);
+			ZipEntry classFile = file.getEntry(className);
+			byte[] classBytes;
+			try {
+				classBytes = loadClassBytes(classFile, file.getInputStream(classFile));
+			} catch (IOException e1) {
+				throw new ClassNotFoundException(className);
+			}
+			c = defineClass(className, classBytes, 0, classBytes.length);
+		}
+		System.out.println(" Ok!");
+
+		return c;
+	}
+
+	protected Class findClass(String className) throws ClassNotFoundException {
+		return loadClass(className);
+	}
+
+	private byte[] loadClassBytes(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;
+	}
+
+	public static void main(String args[]) {
+		try {
+			TestClassLoader cl = new TestClassLoader("lib-test/");
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/test/TestClassLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/test/Persistence.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/test/Persistence.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/test/Persistence.java	(revision 46118)
@@ -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.app.test;
+
+import junit.framework.TestCase;
+
+import org.gvsig.app.extension.ProjectExtension;
+
+/**
+ * @author Fernando Gonz�lez Cort�s
+ */
+//TODO comentado para que compile
+public class Persistence extends TestCase {
+	private ProjectExtension pe;
+
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		pe = new ProjectExtension();
+//		pe.inicializar();
+//		LayerFactory.setDriversPath(
+//		"/root/workspace/Andami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+//
+//		LayerFactory.getDataSourceFactory().addFileDataSource("gdbms dbf driver", "prueba",
+//				"test/cities.dbf");
+
+	}
+
+	public void testPersist() throws Throwable {
+//		Project p = new Project();
+//
+//		/*
+//		 * A�adimos una vista con una capa
+//		 */
+//		ProjectView v = new ProjectView();
+//		ViewPort vp = new ViewPort( CRSFactory.getCRS("EPSG:23030"));
+//		vp.setImageSize(new Dimension(500, 500));
+//
+//		MapContext fmap = new MapContext(vp);
+//		v.setMapContext(fmap);
+//		FLayer l = LayerFactory.createLayer("Vias",
+//			(VectorialFileDriver) LayerFactory.getDM().getDriver("gvSIG shp driver"),
+//			new File("test/cities.shp"),
+//			CRSFactory.getCRS("EPSG:23030"));
+//		fmap.getLayers().addLayer(l);
+//
+//		/*
+//		 * A�adimos la tabla del tema anterior
+//		 */
+//		SelectableDataSource sds1 = ((FLyrVect) l).getRecordset();
+//		EditableAdapter ea1 = new EditableAdapter();
+//		ea1.setOriginalDataSource(sds1);
+//
+//		ProjectTable pt1 = ProjectFactory.createTable("tabla", ea1);
+//		p.addDocument(pt1);
+//
+//		/*
+//		 * A�adimos otra tabla
+//		 */
+//		SelectableDataSource sds2 = new SelectableDataSource(LayerFactory.getDataSourceFactory().createRandomDataSource("prueba", DataSourceFactory.MANUAL_OPENING));
+//		EditableAdapter ea2 = new EditableAdapter();
+//		ea2.setOriginalDataSource(sds2);
+//		ProjectTable pt2 = ProjectFactory.createTable("tabla2", ea2);
+//		p.addTable(pt2);
+//
+//		/*
+//		 * Creamos un join
+//		 */
+//		String sql = "custom com_iver_cit_gvsig_arcjoin tables '"+
+//		sds1.getName()+"', '"+sds1.getName()+"' values(NAME,NAME);";
+//
+//		SelectableDataSource result = new SelectableDataSource(
+//				LayerFactory.getDataSourceFactory()
+//				.executeSQL(sql, DataSourceFactory.MANUAL_OPENING));
+//		EditableAdapter auxea=new EditableAdapter();
+//		auxea.setOriginalDataSource(result);
+//
+//		pt1.replaceDataSource(auxea);
+//
+//		/*
+//		 * Guardamos y cargamos
+//		 */
+//		File temp = File.createTempFile("junit-", ".gvp");
+//		temp.deleteOnExit();
+//		pe.writeProject(temp, p);
+//
+//		Project p2 = pe.readProject(temp);
+//
+//		/*
+//		 * Comprobamos que las dos tablas son id�nticas
+//		 */
+//		assertTrue(((ProjectTable)p2.getDocumentsByType(ProjectTableFactory.registerName).get(0)).getModel().getRecordset().getAsString().equals(((ProjectTable)p.getTables().get(0)).getModel().getRecordset().getAsString()));
+//		assertTrue(((ProjectTable)p2.getDocumentsByType(ProjectTableFactory.registerName).get(1)).getModel().getRecordset().getAsString().equals(((ProjectTable)p.getTables().get(1)).getModel().getRecordset().getAsString()));
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/test/Persistence.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/sqlQueryValidation/TestSQLQueryValidation.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/sqlQueryValidation/TestSQLQueryValidation.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/sqlQueryValidation/TestSQLQueryValidation.java	(revision 46118)
@@ -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.app.sqlQueryValidation;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the methods of the class SQLQueryValidation
+ *    (This class is made without inner static methods for don't create problems to Zql, in this way,
+ *     it's possible to add more tests, with or without long queries.)
+ * 
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+ public class TestSQLQueryValidation 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();
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test1() {
+		String query = "SELECT r.name, f.id FROM room r, flat f WHERE (r.user_name LIKE 'P%') AND (r.flat = f.id) AND (r.color_wall LIKE 'white') AND (r.height < 2.20);";
+		
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, false);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test2() {
+		String query = "SELECT * FROM House;";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, false);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * A test (Incorrect)
+	 */
+	public void test3() {
+		String query = "SELECT a* FROM House;";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, false);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test4() {
+		String query = "SELECT * FROM House;";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, false);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * A test (Correct)
+	 */
+	public void test5() {
+		String query = "r.level = f.level AND r.user_name LIKE \'P%\';";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());
+			fail();
+		}
+	}
+
+	/**
+	 * A test (Incorrect)
+	 */
+	public void test6() {
+		String query = "r.level = f.level a e3 w 	q3 	 �32	9'}97AND r.user_name LIKE \'P%\';";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test7() {
+		String query = "\"codigo\" = 'Canal d'Elx'";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test8() {
+		String query = "\"codigo\" = 'Canal de la M�nega'";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test9() {
+		String query = "\"codigo\" = 'Espa�a'";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test10() {
+		String query = "\"codigo\" = ('Canal d'Elx')";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test11() {
+		String query = "\"codigo\" = ( 'Canal d'Elx' )";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test12() {
+		String query = "\"codigo\" = ( 'Canal d'Elx')";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test13() {
+		String query = "\"codigo\" = ('Canal d'Elx' )";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}	
+	
+	/**
+	 * A test (Incorrect)
+	 */
+	public void test14() {
+		String query = "\"codigo\" = ('Canal d' Elx' )";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+		
+	/**
+	 * A test (Incorrect)
+	 */
+	public void test15() {
+		String query = "\"codigo\" = ('Canal d'Elx d'Alacant' )";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}	
+	
+	/**
+	 * A test (Incorrect)
+	 */
+	public void test16() {
+		String query = "\"fecha\" = Date(11-ene-2004)";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+	
+	/**
+	 * A test (Correct)
+	 */
+	public void test17() {
+		String query = "\"fecha\" = 11-ene-2004";
+
+		System.out.println("�Es v�lida '" + query + "' ?");
+		SQLQueryValidation sqlQueryValidation = new SQLQueryValidation(query, true);
+
+		if (sqlQueryValidation.validateQuery()) {
+			System.out.println("Yes.");
+		}
+		else {
+			System.out.println("No.");
+			System.out.println(sqlQueryValidation.getErrorPositionAsMessage());
+			System.out.println(sqlQueryValidation.getErrorMessage());			
+			fail();
+		}
+	}
+ }

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/sqlQueryValidation/TestSQLQueryValidation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/gui/filter/TestFilterExpressionFromWhereIsEmpty_Method.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/gui/filter/TestFilterExpressionFromWhereIsEmpty_Method.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/gui/filter/TestFilterExpressionFromWhereIsEmpty_Method.java	(revision 46118)
@@ -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.app.gui.filter;
+
+import junit.framework.TestCase;
+
+
+/**
+ * @author Pablo Piqueras Bartolom� (p_queras@hotmail.com)
+ */
+public class TestFilterExpressionFromWhereIsEmpty_Method 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();
+	}	
+
+	/**
+	 * Test 1 (valid)
+	 */
+	public void test1() {
+		String expression = new String("select * from 'gdbms144426c_10fc90fa1aa__7c18' where ;");
+		
+		System.out.println("� Es vac�o el filtro en: " + expression + " ? ");
+
+		if (this.filterExpressionFromWhereIsEmpty(expression))
+			System.out.println("Si.");
+		else
+			System.out.println("No.");
+	}
+	
+	/**
+	 * Test 2 (invalid)
+	 */
+	public void test2() {
+		String expression = new String("select * from 'gdbms158fd70_10fc92ee61e__7c18' where layer < '61';");
+		
+		System.out.println("� Es vac�o el filtro en: " + expression + " ? ");
+
+		if (this.filterExpressionFromWhereIsEmpty(expression))
+			System.out.println("Si.");
+		else
+			System.out.println("No.");
+	}	
+	
+	/**
+	 * Returns true if the WHERE subconsultation of the filterExpression is empty ("")
+	 * 
+	 * @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;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/gui/filter/TestFilterExpressionFromWhereIsEmpty_Method.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/project/ProjectTest.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/project/ProjectTest.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/project/ProjectTest.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id: ProjectTest.java 29595 2009-06-29 15:57:45Z jpiera $
+* $Log$
+* Revision 1.1  2006-11-08 10:57:55  jaume
+* remove unecessary imports
+*
+*
+*/
+package org.gvsig.app.project;
+
+import junit.framework.TestCase;
+
+//TODO comentado para que compile
+public class ProjectTest extends TestCase {
+	static final String projectFile1 = "test/test.gvp";
+	static final String projectFile2 = "test/test.gvp";
+	static final String projectFile3 = null;
+	static final String projectFile4 = null;
+
+	static final String driversPath = "lib-test/drivers";
+	Project p1, p2;
+
+	public void setUp() {
+
+//		LayerFactory.setDriversPath(driversPath);
+//
+//		Reader reader;
+//
+//		// TODO Install drivers support for testing
+//		try {
+//			reader = new FileReader(new File(projectFile1));
+//
+//			XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+//			XMLEntity xml=new XMLEntity(tag);
+//			p1 = Project.createFromXML(xml);
+//			p2 = Project.createFromXML(xml);
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+
+	}
+
+//	public void testSignature() {
+//		try {
+//			assertTrue(p1.computeSignature() == p2.computeSignature());
+//		} catch (SaveException e) {}
+////		assertTrue(p1.equals(p2));
+//	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/project/ProjectTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/AllTests.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/AllTests.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/AllTests.java	(revision 46118)
@@ -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;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.gvsig.app.gui.filter.TestFilterExpressionFromWhereIsEmpty_Method;
+import org.gvsig.app.panelGroup.Test2ExceptionsUsingTabbedPanel;
+import org.gvsig.app.panelGroup.Test2ExceptionsUsingTreePanel;
+import org.gvsig.app.panelGroup.TestPanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.project.ProjectTest;
+import org.gvsig.app.sqlQueryValidation.TestSQLQueryValidation;
+import org.gvsig.app.test.Persistence;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.gvsig.app");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(Persistence.class);
+		suite.addTestSuite(ProjectTest.class);
+		suite.addTestSuite(TestFilterExpressionFromWhereIsEmpty_Method.class);
+		suite.addTestSuite(TestSQLQueryValidation.class);
+		suite.addTestSuite(TestPanelGroupLoaderFromExtensionPoint.class);
+		suite.addTestSuite(Test2ExceptionsUsingTabbedPanel.class);
+		suite.addTestSuite(Test2ExceptionsUsingTreePanel.class);
+		
+		//$JUnit-END$
+		return suite;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/AllTests.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanelWithExceptionsMessage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanelWithExceptionsMessage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanelWithExceptionsMessage.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>
+ * Test method for the Test1ButtonsPanelWithExceptionsMessage.
+ * </p>
+ * <p>
+ * Tests the message dialog caused by the exceptions produced during the loading
+ * of panels, using {@link PanelGroupManager PanelGroupManager},
+ * {@link PanelGroupLoaderFromList PanelGroupLoaderFromList},
+ * {@link TabbedPanel TabbedPanel}, and a resizable {@link PanelGroupDialog
+ * PanelGroupDialog}.
+ * </p>
+ * 
+ * @version 17/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Test1ButtonsPanelWithExceptionsMessage {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>
+	 * Test method for the Test1ButtonsPanelWithExceptionsMessage.
+	 * </p>
+	 * 
+	 * @param args
+	 *            optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE3);
+
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS10_CLASSES);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE3_NAME, "Panels with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+
+			jFrame.setVisible(true);
+
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanelWithExceptionsMessage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanel.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, 
+ *  {@link TreePanel TreePanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 22/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test4ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test4ButtonsPanel.</p>
+	 * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, 
+	 *  {@link TreePanel TreePanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT1_NAME);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 150, 150, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+			
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tree and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+			jFrame.setVisible(true);	
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanelWithExceptionsMessage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanelWithExceptionsMessage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanelWithExceptionsMessage.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Test method for the Test2ButtonsPanelWithExceptionsMessage.</p>
+ * <p>Tests the message dialog caused by the exceptions produced during the loading of panels, using {@link PanelGroupManager PanelGroupManager},
+ *  {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, {@link TabbedPanel TabbedPanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 17/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test2ButtonsPanelWithExceptionsMessage {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>Test method for the Test2ButtonsPanelWithExceptionsMessage.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE3);
+
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT10_NAME);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE3_NAME, "Panels with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+			
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+			jFrame.setVisible(true);
+			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanelWithExceptionsMessage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test5ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test5ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test5ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}, 
+ *  {@link TabbedPanel TabbedPanel}, and a non resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 19/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test5ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>Test method for the Test5ButtonsPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+			
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 800, 650, (byte)0, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+			
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+			
+			jFrame.setTitle("Test Non Resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+		    jFrame.setResizable(false);
+			jFrame.setVisible(true);
+			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test5ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanelWithExceptionsMessage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanelWithExceptionsMessage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanelWithExceptionsMessage.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Test method for the Test1ButtonsPanelWithExceptionsMessage.</p>
+ * <p>Tests the message dialog caused by the exceptions produced during the loading of panels, using {@link PanelGroupManager PanelGroupManager},
+ *  {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}, {@link TreePanel TreePanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 17/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test3ButtonsPanelWithExceptionsMessage {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test3ButtonsPanelWithExceptionsMessage.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE3);
+			
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS10_CLASSES);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE3_NAME, "Panel with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+			
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+			
+			jFrame.setTitle("Test resizable PanelGroupDialog with tree and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+			jFrame.setVisible(true);			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanelWithExceptionsMessage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test6ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test6ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test6ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, 
+ *  {@link TabbedPanel TabbedPanel}, and a non resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 22/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test6ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>Test method for the Test6ButtonsPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+			
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT1_NAME);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+			
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+			
+			jFrame.setTitle("Test Non Resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+		    jFrame.setResizable(false);
+			jFrame.setVisible(true);
+			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test6ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanelWithExceptionsMessage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanelWithExceptionsMessage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanelWithExceptionsMessage.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Test method for the Test2ButtonsPanelWithExceptionsMessage.</p>
+ * <p>Tests the message dialog caused by the exceptions produced during the loading of panels, using {@link PanelGroupManager PanelGroupManager},
+ *  {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, {@link TreePanel TreePanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 17/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test4ButtonsPanelWithExceptionsMessage {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test4ButtonsPanelWithExceptionsMessage.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE3);
+
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT10_NAME);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE3_NAME, "Panel with Buttons", 150, 150, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+			
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tree and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+			jFrame.setVisible(true);	
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test4ButtonsPanelWithExceptionsMessage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test7ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test7ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test7ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}, 
+ *  {@link TreePanel TreePanel}, and a non resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 22/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test7ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test7ButtonsPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+			
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 800, 650, (byte)0, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test non resizable PanelGroupDialog with a tree and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+		    jFrame.setResizable(false);
+			jFrame.setVisible(true);
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test7ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test8ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test8ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test8ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, 
+ *  {@link TreePanel TreePanel}, and a non resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 22/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test8ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test8ButtonsPanel.</p>
+	 * <p>Tests the G.U.I. when adds panels with different dimensions, to a resizable <code>PanelGroupDialog</code>.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+			
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT1_NAME);
+			
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 150, 150, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+			
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+			
+			jFrame.setTitle("Test non resizable PanelGroupDialog with a tree and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+		    jFrame.setResizable(false);
+			jFrame.setVisible(true);
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test8ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTreePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTreePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTreePanel.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import junit.framework.TestCase;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests the loading of layers using a {@link TreePanel TreePanel} object and a {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint} loader
+ * Tests also the managing of the different kind of exceptions which could be launched during this process.</p>
+ * 
+ * @version 11/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test2ExceptionsUsingTreePanel extends TestCase {
+	private TreePanel panelGroup;
+	private PanelGroupManager manager;
+	private PanelGroupLoaderFromExtensionPoint 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_ExtensionPointsOfIPanels.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() {
+		Samples_ExtensionPointsOfIPanels.loadSample();
+
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_extension_point_exception") + "\n  Error cargando un panel: / by zero.";
+
+		try {
+			System.out.println("----- Test 1 -----");
+			loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT4_NAME);
+
+			// 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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT5_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT6_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT7_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT8_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT9_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT10_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTreePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TabbedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TabbedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TabbedPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests the creation of a {@link TabbedPanel TabbedPanel} object using {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint} .</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test2TabbedPanel {
+	/**
+	 * <p>Test method for the Test2TabbedPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			Samples_ExtensionPointsOfIPanels.loadSample();
+			
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE2);
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT2_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+
+			// Objects creation
+			JFrame jFrame = new JFrame();
+			jFrame.setTitle("Test TabbedPanel using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroup.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroup);
+		    
+			jFrame.setVisible(true);
+			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TabbedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanSharpeningPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanSharpeningPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanSharpeningPanel.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[4]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[4]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[4]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledAcceptButton(! getPanelGroup().isEnabledAcceptButton());
+						getPanelGroup().setEnabledApplyButton(! getPanelGroup().isEnabledApplyButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanSharpeningPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelWithoutGroupLabel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelWithoutGroupLabel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelWithoutGroupLabel.java	(revision 46118)
@@ -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.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_ExtensionPointsOfIPanels.PANELS3_IDS[0]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS3_LABELS[0]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelWithoutGroupLabel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInvisiblePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInvisiblePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInvisiblePanel.java	(revision 46118)
@@ -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.app.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_ExtensionPointsOfIPanels.PANELS1_IDS[0]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[0]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInvisiblePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleBandSetupPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleBandSetupPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleBandSetupPanel.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.Serializable;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[1]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[1]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[1]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledAcceptButton(! getPanelGroup().isEnabledAcceptButton());
+						getPanelGroup().setEnabledApplyButton(! getPanelGroup().isEnabledApplyButton());
+						getPanelGroup().setEnabledCancelButton(! getPanelGroup().isEnabledCancelButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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());
+	}
+
+	public void setPanelGroup(AbstractPanelGroup panelGroup) {
+		super.setPanelGroup(panelGroup);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleBandSetupPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleEnhancedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleEnhancedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleEnhancedPanel.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[3]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[3]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[3]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledCancelButton(! getPanelGroup().isEnabledCancelButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleEnhancedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelGroupLabelRepeated.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelGroupLabelRepeated.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelGroupLabelRepeated.java	(revision 46118)
@@ -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.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_ExtensionPointsOfIPanels.PANELS3_IDS[1]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS3_LABELS[1]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS3_LABELGROUPS[1]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SamplePanelGroupLabelRepeated.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleScalePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleScalePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleScalePanel.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[5]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[5]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[5]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledApplyButton(! getPanelGroup().isEnabledApplyButton());
+						getPanelGroup().setEnabledCancelButton(! getPanelGroup().isEnabledCancelButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleScalePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInitializingExcetionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInitializingExcetionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInitializingExcetionPanel.java	(revision 46118)
@@ -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.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_ExtensionPointsOfIPanels.PANELS1_IDS[0]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInitializingExcetionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleTransparencyPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleTransparencyPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleTransparencyPanel.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[2]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[2]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[2]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledApplyButton(! getPanelGroup().isEnabledApplyButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+	public void accept() {
+	}
+
+	public void apply() {
+	}
+
+	public void cancel() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleTransparencyPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java	(revision 46118)
@@ -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.app.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_ExtensionPointsOfIPanels.PANELS1_IDS[0]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleUndefinedPreferredSizeExceptionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInfoPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInfoPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInfoPanel.java	(revision 46118)
@@ -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.
+ */
+package org.gvsig.app.panelGroup.samples;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+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_ExtensionPointsOfIPanels.PANELS1_IDS[0]);
+		setLabel(Samples_ExtensionPointsOfIPanels.PANELS1_LABELS[0]);
+		setLabelGroup(Samples_ExtensionPointsOfIPanels.PANELS1_LABELGROUPS[0]);
+		setPreferredSize(new Dimension(Samples_ExtensionPointsOfIPanels.PANELS_DEFAULT_WIDTH, Samples_ExtensionPointsOfIPanels.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);
+			
+			jTextArea.addMouseListener(new MouseAdapter() {
+				
+				public void mouseClicked(MouseEvent e) {
+					if (getPanelGroup() != null) {
+						getPanelGroup().setEnabledAcceptButton(! getPanelGroup().isEnabledAcceptButton());
+					}	
+				}
+			});
+		}
+
+		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());
+	}
+
+	@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());
+	}
+
+	@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());
+	}
+
+
+	public void accept() {
+	}
+
+
+	public void apply() {
+	}
+
+
+	public void cancel() {
+	}
+
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/SampleInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/Samples_ExtensionPointsOfIPanels.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/Samples_ExtensionPointsOfIPanels.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/Samples_ExtensionPointsOfIPanels.java	(revision 46118)
@@ -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.panelGroup.samples;
+
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+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;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+import org.gvsig.app.panelGroup.PanelGroupDialog;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+
+/**
+ * <p>
+ * This class has information to create samples to test
+ * {@link PanelGroupManager PanelGroupManager}, {@link TabbedPanel TabbedPanel},
+ * {@link TreePanel TreePanel}, {@link AbstractPanel AbstractPanel},
+ * {@link PanelGroupLoaderUtilities PanelGroupLoaderUtilities},
+ * {@link PanelGroupLoaderFromList PanelGroupLoaderFromList},
+ * {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}
+ * , and {@link PanelGroupDialog PanelGroupDialog}.
+ * </p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Samples_ExtensionPointsOfIPanels {
+	public final static String EXTENSIONPOINT1_NAME = "RasterLayerProperties";
+	public final static String EXTENSIONPOINT2_NAME = "ImaginaryLayerProperties";
+	public final static String EXTENSIONPOINT3_NAME = "Other tests";
+	public final static String EXTENSIONPOINT4_NAME = "Test 1 exceptions";
+	public final static String EXTENSIONPOINT5_NAME = "Test 2 exceptions";
+	public final static String EXTENSIONPOINT6_NAME = "Test 3 exceptions";
+	public final static String EXTENSIONPOINT7_NAME = "Test 4 exceptions";
+	public final static String EXTENSIONPOINT8_NAME = "Test 5 exceptions";
+	public final static String EXTENSIONPOINT9_NAME = "Test 6 exceptions";
+	public final static String EXTENSIONPOINT10_NAME = "Test 7 exceptions";
+	public final static String[] EXTENSIONPOINTS1_NAMES = {"Information", "Bands", "Transparency", "Enhanced", "PanSharpening", "Scale"};
+	public final static String[] EXTENSIONPOINTS2_NAMES = {"Information", "Transparency", "Scale"};
+	public final static String[] EXTENSIONPOINTS3_OTHER_NAMES = {"SamplePanelWithoutGroupLabel", "SamplePanelGroupLabelRepeated"};
+	public final static String[] EXTENSIONPOINTS4_NAMES = {
+			"SampleInitializingExcetionPanel", "SampleInfoPanel" }; // Test 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static String[] EXTENSIONPOINTS5_NAMES = {"SampleInfoPanel", "SampleUndefinedPreferredSizeExceptionPanel"}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException'
+	public final static String[] EXTENSIONPOINTS6_NAMES = {}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupException'
+	public final static String[] EXTENSIONPOINTS7_NAMES = {"SampleInvisiblePanel.class"}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupGUIException'
+	public final static String[] EXTENSIONPOINTS8_NAMES = {"SampleInitializingExcetionPanel", "SampleUndefinedPreferredSizeExceptionPanel"}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static String[] EXTENSIONPOINTS9_NAMES = {"SampleInvisiblePanel", "SampleInitializingExcetionPanel", "SampleUndefinedPreferredSizeExceptionPanel"}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupGUIException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static String[] EXTENSIONPOINTS10_NAMES = {"SampleBandSetupPanel", "SampleInvisiblePanel", "SampleInitializingExcetionPanel", "SampleUndefinedPreferredSizeExceptionPanel"}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a EmptyPanelGroupGUIException and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] EXTENSIONPOINTS1_CLASSES = {SampleInfoPanel.class, SampleBandSetupPanel.class, SampleTransparencyPanel.class, SampleEnhancedPanel.class, SamplePanSharpeningPanel.class, SampleScalePanel.class};
+	public final static Class[] EXTENSIONPOINTS2_CLASSES = {SampleInfoPanel.class, SampleTransparencyPanel.class, SampleScalePanel.class};
+	public final static Class[] OTHER_PANELS_EXTENSIONPOINTS3_CLASSES = {SamplePanelWithoutGroupLabel.class, SamplePanelGroupLabelRepeated.class};
+	public final static Class[] EXTENSIONPOINTS4_CLASSES = {
+			SampleInitializingExcetionPanel.class, SampleInfoPanel.class }; // Test 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] EXTENSIONPOINTS5_CLASSES = {SampleInfoPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException'
+	public final static Class[] EXTENSIONPOINTS6_CLASSES = {}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupException'
+	public final static Class[] EXTENSIONPOINTS7_CLASSES = {SampleInvisiblePanel.class}; // Test 'ListCouldntAddPanelException' with a 'EmptyPanelGroupGUIException'
+	public final static Class[] EXTENSIONPOINTS8_CLASSES = {SampleInitializingExcetionPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] EXTENSIONPOINTS9_CLASSES = {SampleInvisiblePanel.class, SampleInitializingExcetionPanel.class, SampleUndefinedPreferredSizeExceptionPanel.class}; // Test 'ListCouldntAddPanelException' with a 'PanelWithNoPreferredSizeDefinedException', a 'EmptyPanelGroupGUIException' and a 'ListCouldntLoadPanelFromListException' with any 'Exception'
+	public final static Class[] EXTENSIONPOINTS10_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[] 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 = {null, "GroupLabelRepeated_LABELGROUP"};
+	public final static short PANELS_DEFAULT_WIDTH = 500;
+	public final static short PANELS_DEFAULT_HEIGHT = 400;
+
+
+	/**
+	 * <p>Loads the information of the sample.</p>
+	 */
+	public static void loadSample() {
+			ExtensionPointManager epMan = ToolsLocator.getExtensionPointManager();
+
+		ExtensionPoint ep = epMan.add(EXTENSIONPOINT1_NAME, "");
+
+		ep.append(EXTENSIONPOINTS1_NAMES[0], "", EXTENSIONPOINTS1_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS1_NAMES[1], "", EXTENSIONPOINTS1_CLASSES[1]);
+		ep.append(EXTENSIONPOINTS1_NAMES[2], "", EXTENSIONPOINTS1_CLASSES[2]);
+		ep.append(EXTENSIONPOINTS1_NAMES[3], "", EXTENSIONPOINTS1_CLASSES[3]);
+		ep.append(EXTENSIONPOINTS1_NAMES[4], "", EXTENSIONPOINTS1_CLASSES[4]);
+		ep.append(EXTENSIONPOINTS1_NAMES[5], "", EXTENSIONPOINTS1_CLASSES[5]);
+
+		ep = epMan.add(EXTENSIONPOINT2_NAME, "");
+		ep.append(EXTENSIONPOINTS2_NAMES[0], "", EXTENSIONPOINTS2_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS2_NAMES[1], "", EXTENSIONPOINTS2_CLASSES[1]);
+		ep.append(EXTENSIONPOINTS2_NAMES[2], "", EXTENSIONPOINTS2_CLASSES[2]);
+
+		ep = epMan.add(EXTENSIONPOINT3_NAME, "");
+		ep.append(EXTENSIONPOINTS3_OTHER_NAMES[0], "",
+				OTHER_PANELS_EXTENSIONPOINTS3_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS3_OTHER_NAMES[1], "",
+				OTHER_PANELS_EXTENSIONPOINTS3_CLASSES[1]);
+
+		ep = epMan.add(EXTENSIONPOINT4_NAME, "");
+		ep.append(EXTENSIONPOINTS4_NAMES[0], "", EXTENSIONPOINTS4_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS4_NAMES[1], "", EXTENSIONPOINTS4_CLASSES[1]);
+
+		ep = epMan.add(EXTENSIONPOINT5_NAME, "");
+		ep.append(EXTENSIONPOINTS5_NAMES[0], "", EXTENSIONPOINTS5_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS5_NAMES[1], "", EXTENSIONPOINTS5_CLASSES[1]);
+
+		epMan.add(EXTENSIONPOINT6_NAME, "");
+
+		ep = epMan.add(EXTENSIONPOINT7_NAME, "");
+		ep.append(EXTENSIONPOINTS7_NAMES[0], "", EXTENSIONPOINTS7_CLASSES[0]);
+
+		ep = epMan.add(EXTENSIONPOINT8_NAME, "");
+		ep.append(EXTENSIONPOINTS8_NAMES[0], "", EXTENSIONPOINTS8_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS8_NAMES[1], "", EXTENSIONPOINTS8_CLASSES[1]);
+
+		ep = epMan.add(EXTENSIONPOINT9_NAME, "");
+		ep.append(EXTENSIONPOINTS9_NAMES[0], "", EXTENSIONPOINTS9_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS9_NAMES[1], "", EXTENSIONPOINTS9_CLASSES[1]);
+		ep.append(EXTENSIONPOINTS9_NAMES[2], "", EXTENSIONPOINTS9_CLASSES[2]);
+
+		ep = epMan.add(EXTENSIONPOINT10_NAME, "");
+		ep.append(EXTENSIONPOINTS10_NAMES[0], "", EXTENSIONPOINTS10_CLASSES[0]);
+		ep.append(EXTENSIONPOINTS10_NAMES[1], "", EXTENSIONPOINTS10_CLASSES[1]);
+		ep.append(EXTENSIONPOINTS10_NAMES[2], "", EXTENSIONPOINTS10_CLASSES[2]);
+		ep.append(EXTENSIONPOINTS10_NAMES[3], "", EXTENSIONPOINTS10_CLASSES[3]);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/samples/Samples_ExtensionPointsOfIPanels.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTabbedPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTabbedPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTabbedPanel.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import junit.framework.TestCase;
+
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>
+ * Tests the loading of layers using a {@link TabbedPanel TabbedPanel} object
+ * and a {@link PanelGroupLoaderFromExtensionPoint
+ * PanelGroupLoaderFromExtensionPoint} loader Tests also the managing of the
+ * different kind of exceptions which could be launched during this process.
+ * </p>
+ * 
+ * @version 11/12/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Test2ExceptionsUsingTabbedPanel extends TestCase {
+	private TabbedPanel panelGroup;
+	private PanelGroupManager manager;
+	private PanelGroupLoaderFromExtensionPoint 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_ExtensionPointsOfIPanels.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() {
+		Samples_ExtensionPointsOfIPanels.loadSample();
+
+		validationText = Messages.getText("couldnt_add_some_panel_exception") + "\n  " + Messages.getText("couldnt_load_panels_from_extension_point_exception") + "\n  Error cargando un panel: / by zero.";
+
+		try {
+			System.out.println("----- Test 1 -----");
+			loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT4_NAME);
+
+			// 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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT5_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT6_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT7_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT8_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT9_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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_extension_point_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 PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT10_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+		} catch (BaseException bE) {
+			localizedMessage = bE.getLocalizedMessageStack().trim();
+			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.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ExceptionsUsingTabbedPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/TestPanelGroupLoaderFromExtensionPoint.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/TestPanelGroupLoaderFromExtensionPoint.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/TestPanelGroupLoaderFromExtensionPoint.java	(revision 46118)
@@ -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.panelGroup;
+
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.gvsig.gui.beans.panelGroup.panels.IPanel;
+
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}.</p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class TestPanelGroupLoaderFromExtensionPoint 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 {
+			Samples_ExtensionPointsOfIPanels.loadSample();
+			
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT1_NAME);
+			ArrayList<IPanel> panels = new ArrayList<IPanel>();
+
+			loader.loadPanels(panels);
+
+			// Check that has loaded all panels
+			assertEquals(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES.length, panels.size());
+			
+			int i = 0;
+
+			while (i < Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS2_CLASSES.length) {
+				// Check order and class types
+				assertTrue(panels.get(i).getClass() == (Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES[i++]));
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/TestPanelGroupLoaderFromExtensionPoint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanel.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>
+ * Tests {@link PanelGroupDialog PanelGroupDialog}.
+ * </p>
+ * <p>
+ * Tests {@link PanelGroupManager PanelGroupManager},
+ * {@link PanelGroupLoaderFromList PanelGroupLoaderFromList},
+ * {@link TabbedPanel TabbedPanel}, and a resizable {@link PanelGroupDialog
+ * PanelGroupDialog}.
+ * </p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Test1ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>
+	 * Test method for the Test1ButtonsPanel.
+	 * </p>
+	 * <p>
+	 * Tests {@link PanelGroupManager PanelGroupManager},
+	 * {@link PanelGroupLoaderFromList PanelGroupLoaderFromList},
+	 * {@link TabbedPanel TabbedPanel}, and a resizable {@link PanelGroupDialog
+	 * PanelGroupDialog}.
+	 * </p>
+	 * 
+	 * @param args
+	 *            optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panels with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+
+			jFrame.setVisible(true);
+
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test1ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>
+ * Tests {@link PanelGroupDialog PanelGroupDialog}.
+ * </p>
+ * <p>
+ * Tests {@link PanelGroupManager PanelGroupManager},
+ * {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint}, {@link TabbedPanel TabbedPanel}, and a resizable {@link PanelGroupDialog
+ * PanelGroupDialog}.
+ * </p>
+ * 
+ * @version 16/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es)
+ */
+public class Test2ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+
+	/**
+	 * <p>
+	 * Test method for the Test2ButtonsPanel.
+	 * </p>
+	 * 
+	 * @param args
+	 *            optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TabbedPanel.class);
+			manager.setDefaultType(TabbedPanel.class);
+
+			TabbedPanel panelGroup = (TabbedPanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT1_NAME);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panels with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+
+			jFrame.setTitle("Test resizable PanelGroupDialog with tabs and using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+
+			jFrame.setVisible(true);
+
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TreePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TreePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TreePanel.java	(revision 46118)
@@ -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.app.panelGroup;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/**
+ * <p>Tests the creation of a {@link TreePanel TreePanel} object using {@link PanelGroupLoaderFromExtensionPoint PanelGroupLoaderFromExtensionPoint} .</p>
+ * 
+ * @version 17/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test2TreePanel {
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+	
+	/**
+	 * <p>Test method for the Test2TreePanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			Samples_ExtensionPointsOfIPanels.loadSample();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE2);
+			PanelGroupLoaderFromExtensionPoint loader = new PanelGroupLoaderFromExtensionPoint(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINT2_NAME);
+
+			// Begin: Test the normal load
+			panelGroup.loadPanels(loader);
+			// End: Test the normal load
+
+			// Objects creation
+			jFrame = new JFrame();
+			jFrame.setTitle("Test TreePanel using PanelGroupLoaderFromExtensionPoint");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroup.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroup);
+		    
+			jFrame.setVisible(true);
+			
+		} catch (BaseException e) {
+			System.out.println(e.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test2TreePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanel.java	(revision 46118)
@@ -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.panelGroup;
+
+import javax.swing.JFrame;
+
+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.panelGroup.PanelGroupManager;
+import org.gvsig.gui.beans.panelGroup.loaders.PanelGroupLoaderFromList;
+import org.gvsig.gui.beans.panelGroup.treePanel.TreePanel;
+import org.gvsig.tools.exception.BaseException;
+
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.panelGroup.samples.Samples_ExtensionPointsOfIPanels;
+
+/** 
+ * <p>Tests {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * <p>Tests {@link PanelGroupManager PanelGroupManager}, {@link PanelGroupLoaderFromList PanelGroupLoaderFromList}, 
+ *  {@link TreePanel TreePanel}, and a resizable {@link PanelGroupDialog PanelGroupDialog}.</p>
+ * 
+ * @version 22/10/2007
+ * @author Pablo Piqueras Bartolom� (pablo.piqueras@iver.es) 
+ */
+public class Test3ButtonsPanel {
+	/**
+	 * <p>Element for the interface.</p>
+	 */
+	private static JFrame jFrame;
+	private static TreePanel panelGroup;
+
+	/**
+	 * <p>Test method for the Test3ButtonsPanel.</p>
+	 * 
+	 * @param args optional arguments
+	 */
+	public static void main(String[] args) {
+		try {
+			// Objects creation
+			jFrame = new JFrame();
+
+			PanelGroupManager manager = PanelGroupManager.getManager();
+			manager.registerPanelGroup(TreePanel.class);
+			manager.setDefaultType(TreePanel.class);
+
+			panelGroup = (TreePanel) manager.getPanelGroup(Samples_ExtensionPointsOfIPanels.REFERENCE1);
+			
+			PanelGroupLoaderFromList loader = new PanelGroupLoaderFromList(Samples_ExtensionPointsOfIPanels.EXTENSIONPOINTS1_CLASSES);
+
+			// Creates the IWindow
+			PanelGroupDialog panelGroupDialog = new PanelGroupDialog(Samples_ExtensionPointsOfIPanels.REFERENCE1_NAME, "Panel with Buttons", 800, 650, (byte)WindowInfo.RESIZABLE, panelGroup);
+			
+			// Begin: Test the normal load
+			panelGroupDialog.loadPanels(loader);
+			// End: Test the normal load
+
+			panelGroupDialog.addButtonPressedListener(new ButtonsPanelListener() {
+				/*
+				 * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
+				 */
+				public void actionButtonPressed(ButtonsPanelEvent e) {
+					switch (e.getButton()) {
+						case ButtonsPanel.BUTTON_ACCEPT:
+							System.out.println("Accept Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_CANCEL:
+							System.out.println("Cancel Button pressed.");
+							hideJFrame();
+							System.exit(0);
+							break;
+						case ButtonsPanel.BUTTON_APPLY:
+							System.out.println("Apply Button pressed.");
+							break;
+					}
+				}
+			});
+			
+			jFrame.setTitle("Test resizable PanelGroupDialog with tree and using PanelGroupLoaderFromList");
+		    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		    jFrame.setSize(panelGroupDialog.getPreferredSize());
+		    jFrame.getContentPane().add(panelGroupDialog);
+		    
+			jFrame.setVisible(true);			
+		} catch (BaseException bE) {
+			System.out.println(bE.getLocalizedMessageStack());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * <p>Hides the {@link JFrame JFrame}, hiding the graphical interface.</p>
+	 */
+	private static void hideJFrame() {
+		jFrame.setVisible(false);
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/test/java/org/gvsig/app/panelGroup/Test3ButtonsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,587 @@
+<?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.app.mainplugin</artifactId>
+    <packaging>jar</packaging>
+    <name>${project.artifactId}</name>
+    <description>This project has the main plugin of gvSIG application</description>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.app</artifactId>
+        <version>2.0.344</version>
+    </parent>
+
+    <dependencies>
+
+        <!-- Dependencias de compilacion aportadas por andami -->
+        <!-- Ordered by artifactId -->
+
+        <dependency>
+            <groupId>castor</groupId>
+            <artifactId>castor</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>flib-jcalendar</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.help</groupId>
+            <artifactId>javahelp</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.toedter</groupId>
+            <artifactId>jcalendar</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>jfree</groupId>
+            <artifactId>jcommon</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>jwizardcomponent</groupId>
+            <artifactId>jwizardcomponent</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.installer.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.jdk.v1_6</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.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <!-- Dependencias de compilacion que debe llevarse el plugin -->
+        <!-- Ordered by artifactId -->
+
+        <dependency>
+            <groupId>org.jpedal</groupId>
+            <artifactId>jpedal_lgpl</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.compat.api</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.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.swing.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.dal.api</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.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.projection.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.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.expressionevaluator.time.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.gvsig</groupId>
+            <artifactId>org.gvsig.tools.evaluator.sqljep</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>zql</groupId>
+            <artifactId>zql</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <!-- Dependecias de compilacon que no deberia tener -->
+
+        <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.symbology.lib.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.symbology.swing.impl</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.expressionevaluator.geometry.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish</groupId>
+            <artifactId>javax.json</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <!-- Dependencias de runtime -->
+        <!-- Ordered by artifactId -->
+
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts</artifactId>
+            <scope>compile</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.compat.se</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.swing.basic.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.api</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.buffer.spi</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.buffer.api</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.buffer.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.swing.api</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.legend.imageio</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.swing.api</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.swing.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.remoteclient</artifactId>
+            <scope>runtime</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.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.tilecache.raster</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.imageio</artifactId>
+            <scope>runtime</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.temporarystorage.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.temporarystorage.lib.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+
+
+
+        <dependency>
+            <groupId>com.sun</groupId>
+            <artifactId>jimi</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>hsqldb</groupId>
+            <artifactId>hsqldb</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>java3d</groupId>
+            <artifactId>vecmath</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>jsi</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>gnu.trove</groupId>
+            <artifactId>trove</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf</groupId>
+            <artifactId>sqljep</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+      
+<!--      
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+-->
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.basicformats</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+
+        <!-- Dependencias de los test -->
+
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.cssbox</groupId>
+            <artifactId>swingbox</artifactId>
+            <version>1.1</version>
+            <type>jar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.xhtmlrenderer</groupId>
+            <artifactId>flying-saucer-core</artifactId>
+            <version>9.0.8</version>
+            <type>jar</type>
+        </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>
+
+    <profiles>
+        <profile>
+            <!-- This profile is used to packege and install the gvSIG plugins -->
+            <id>gvsig-plugin</id>
+            <activation>
+                <file>
+                    <exists>buildNumber.properties</exists>
+                </file>
+            </activation>
+            <build>
+                <plugins>
+
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>gvsig-plugin-package</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                    <plugin>
+                        <artifactId>maven-clean-plugin</artifactId>
+                        <configuration>
+                            <skip>false</skip>
+                            <failOnError>true</failOnError>
+                            <filesets>
+                                <fileset>
+                                    <directory>${gvsig.product.folder.path}/gvSIG/extensiones/${project.artifactId}</directory>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>default-clean</id>
+                                <phase>clean</phase>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.codehaus.gmaven</groupId>
+                        <artifactId>gmaven-plugin</artifactId>
+                        <executions>
+
+                            <execution>
+                                <id>increase-build-number</id>
+                                <phase>process-sources</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                            </execution>
+
+                            <execution>
+                                <id>build-package-info</id>
+                                <phase>prepare-package</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                            </execution>
+
+                            <execution>
+                                <id>build-package-index</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                            </execution>
+
+                            <execution>
+                                <id>install-plugin</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                            </execution>
+
+                            <execution>
+                                <id>install-application-package-info</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                                <configuration>
+                                    <source><![CDATA[
+                   ant = new AntBuilder()
+                   source = project.basedir.getAbsolutePath() + "/target/package.info"
+                   target = project.properties["gvsig.product.folder.path"] + "/package.info"
+                   log.info("Install package.info in product folder (" + target + ")" )
+                   ant.copy(file:source, tofile:target)
+                 ]]></source>
+                                </configuration>
+                            </execution>
+
+                        </executions>
+                    </plugin>
+
+                </plugins>
+            </build>
+        </profile>
+
+    </profiles>
+
+
+    <properties>
+        <gvsig.package.info.name>gvSIG Application</gvsig.package.info.name>
+        <gvsig.package.info.dependencies>required: org.gvsig.projection.app.mainplugin -ge 1, required: org.gvsig.geometry.app.mainplugin -ge 1</gvsig.package.info.dependencies>
+        <gvsig.package.info.codealias>org.gvsig.app</gvsig.package.info.codealias>
+
+        <gvsig.package.info.version>${gvsig.version}</gvsig.package.info.version>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:15 CET 2021
+buildNumber=3242

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .classpath
nb-configuration.xml
.pom.xml.swp
target/**
nbactions.xml
.project
.settings/**
target
.settings


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app/pom.xml	(revision 46118)
@@ -0,0 +1,17 @@
+<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.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.344</version>
+  </parent>
+
+  <modules>
+      <module>org.gvsig.app.mainplugin</module>
+  </modules>
+
+  <description>This project group al plugins of gvSIG application.</description>
+</project>

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


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:16 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,6 @@
+new_field_query=Se van a a\u00f1adir nuevos campo en la tabla.\nDesea continuar?
+perimeter=Per\u00edmetro
+add_x_y=A\u00f1adir X e Y
+_Add_measurement=A\u00f1adir medici\u00f3n
+_Add_perimeter_value=A\u00f1adir valor de per\u00edmetro
+_Add_area_value=A\u00f1adir valor de \u00e1rea
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,6 @@
+new_field_query=New fields are going to be added to the table.\nDo you want to continue?
+perimeter=Perimeter
+add_x_y=Add X and Y
+_Add_measurement=Add measure
+_Add_perimeter_value=Add perimeter value
+_Add_area_value=Add area value
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+    <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
+   	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.geometrymeasurement.app.extension.AreaMeasurementExtension"
+			description="Extension that measures the area of all the polygonos they selected."
+            active="true">
+
+      		<action name="table-add-area"
+        		label="area"
+        		tooltip="_Add_area_value"
+        		action-command="table-add-area" 
+        		icon="table-add-area"
+        		position="500800100" />
+
+      		<menu name="table-add-area" text="Table/_Add_measurement/area" />
+        	
+      		<tool-bar name="table_tools_addmeasurement">
+        		<action-tool name="table-add-area"/>
+      		</tool-bar>
+		</extension>	
+		
+		<extension class-name="org.gvsig.geometrymeasurement.app.extension.PerimeterMeasurementExtension"
+           description="Extension that measures the perimeter of all the lines they selected."
+            active="true">
+
+      		<action name="table-add-perimeter"
+        		label="perimeter"
+        		tooltip="_Add_perimeter_value"
+        		action-command="table-add-perimeter" 
+        		icon="table-add-perimeter"
+        		position="500800200" />
+
+      		<menu name="table-add-perimeter" text="Table/_Add_measurement/perimeter" />
+        	
+      		<tool-bar name="table_tools_addmeasurement">
+        		<action-tool name="table-add-perimeter"/>
+      		</tool-bar>
+        </extension>
+        
+        <extension class-name="org.gvsig.geometrymeasurement.app.extension.AddXYPointThemeExtension"
+            description="Extension that add the coordinates x and y."
+            active="true">
+
+      		<action name="table-add-xy"
+        		label="add_x_y"
+        		tooltip="add_x_y"
+        		action-command="table-add-xy" 
+        		icon="table-add-xy"
+        		position="500800300" />
+
+      		<menu name="table-add-xy" text="Table/_Add_measurement/add_x_y" />
+        	
+      		<tool-bar name="table_tools_addmeasurement">
+        		<action-tool name="table-add-xy"/>
+      		</tool-bar>
+        </extension>    	
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-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.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-area.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-perimeter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-perimeter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-xy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/resources-plugin/images/action/table-add-xy.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/PerimeterMeasurementExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/PerimeterMeasurementExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/PerimeterMeasurementExtension.java	(revision 46118)
@@ -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.geometrymeasurement.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.geometrymeasurement.app.extension.utils.Operations;
+
+/**
+ * Andami extension to show PerimeterMeasurementExtension in the application.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class PerimeterMeasurementExtension extends
+        AbstractGeometryMeasurementExtension {
+
+    @Override
+    public void initialize() {
+        super.initialize();
+        IconThemeHelper.registerIcon("action", "table-add-perimeter", this);
+    }
+
+    @Override
+    protected void execute(String actionCommand, FeatureStore featureStore)
+            throws Exception {
+        new Operations().addDoubleFieldFromOperation(featureStore, "PERIMETER",
+                "perimeter");
+    }
+
+    @Override
+    protected boolean isVisibleForTable(TableDocument tableDocument) {
+        DataStoreProviderFactory factory = tableDocument.getFeatureStore().getProviderFactory();
+        if (factory instanceof FeatureStoreProviderFactory) {
+            FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+            if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                return false;
+            }
+        }
+        return !isStoreOfAnyType(tableDocument, new int[]{Geometry.TYPES.POINT,
+            Geometry.TYPES.MULTIPOINT});
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/PerimeterMeasurementExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/utils/Operations.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/utils/Operations.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/utils/Operations.java	(revision 46118)
@@ -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.geometrymeasurement.app.extension.utils;
+
+import java.util.Iterator;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.app.project.documents.table.TableOperations;
+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.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureType;
+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.geom.primitive.Point;
+import org.gvsig.tools.dataTypes.DataTypes;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+/**
+ * Andami extension to show PerimeterMeasurementExtension in the application.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class Operations {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Operations.class);
+
+    public void addDoubleFieldFromOperation(FeatureStore featureStore,
+        String fieldName, String operationName) throws DataException,
+        GeometryOperationNotSupportedException, GeometryOperationException {
+        boolean isEditing = false;
+        if (featureStore.isEditing()) {
+            isEditing = true;
+        } else {
+            featureStore.edit();
+        }
+
+        featureStore.beginEditingGroup(operationName);
+
+        // Adding the new attribute type
+        FeatureType featureType = featureStore.getDefaultFeatureType();
+        EditableFeatureType editableFeatureType = featureType.getEditable();
+
+        String realFieldName = getFieldName(featureStore, fieldName, 0);
+        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor =
+            editableFeatureType.add(realFieldName, DataTypes.DOUBLE);
+
+        featureStore.update(editableFeatureType);
+
+        DisposableIterator disposableIterator = null;
+        FeatureSet featureSet = null;
+        try {
+            // Adding the attribute value
+            featureSet = featureStore.getFeatureSet();
+            disposableIterator = featureSet.fastIterator();
+            while (disposableIterator.hasNext()) {
+                Feature feature = (Feature) disposableIterator.next();
+                EditableFeature editableFeature = feature.getEditable();
+                Geometry geom = feature.getDefaultGeometry();
+                if( geom!=null ) {
+                    editableFeature.setDouble(realFieldName, (Double) geom.invokeOperation(operationName, null));
+                }
+                featureSet.update(editableFeature);
+            }
+        } finally {
+            if (disposableIterator != null) {
+                disposableIterator.dispose();
+            }
+            if (featureSet != null) {
+                featureSet.dispose();
+            }
+            try {
+                featureStore.endEditingGroup();
+            } catch (NeedEditingModeException e) {
+                LOG.error("Exception endEditingGroup", e);
+            }
+        }
+
+        if (!isEditing) {
+            featureStore.finishEditing();
+        }
+    }
+
+    public String getFieldName(FeatureStore featureStore, String fieldName,
+        int index) throws DataException {
+        String fullName = fieldName;
+        if (index != 0) {
+            fullName = fullName + index;
+        }
+        @SuppressWarnings("unchecked")
+        Iterator<FeatureAttributeDescriptor> it =
+            featureStore.getDefaultFeatureType().iterator();
+        while (it.hasNext()) {
+            FeatureAttributeDescriptor featureAttributeDescriptor = it.next();
+            if (featureAttributeDescriptor.getName().toUpperCase().equals(fullName.toUpperCase())) {
+                return getFieldName(featureStore, fieldName, index + 1);
+            }
+        }
+        return fullName;
+    }
+
+    /**
+     * @param featureStore
+     * @param string
+     * @param string2
+     * @throws DataException
+     */
+    public void addXYPoints(FeatureStore featureStore, String xFieldName,
+        String yFieldName) throws DataException {
+        boolean isEditing = false;
+        if (featureStore.isEditing()) {
+            isEditing = true;
+        } else {
+            featureStore.edit();
+        }
+
+        // Adding the new attribute type
+        FeatureType featureType = featureStore.getDefaultFeatureType();
+        EditableFeatureType editableFeatureType = featureType.getEditable();
+
+        String realXFieldName = getFieldName(featureStore, xFieldName, 0);
+        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor =
+            editableFeatureType.add(realXFieldName, DataTypes.DOUBLE);
+
+        String realYFieldName = getFieldName(featureStore, yFieldName, 0);
+        editableFeatureAttributeDescriptor =
+            editableFeatureType.add(realYFieldName, DataTypes.DOUBLE);
+
+        featureStore.update(editableFeatureType);
+
+        // Adding the attribute value
+        FeatureSet featureSet = featureStore.getFeatureSet();
+        DisposableIterator disposableIterator = featureSet.fastIterator();
+        while (disposableIterator.hasNext()) {
+            Feature feature = (Feature) disposableIterator.next();
+            EditableFeature editableFeature = feature.getEditable();
+            Geometry geom = feature.getDefaultGeometry();
+            if( geom!=null ) {
+                editableFeature.setDouble(realXFieldName,((Point)geom).getX());
+                editableFeature.setDouble(realYFieldName,((Point)geom).getY());
+            }
+            featureSet.update(editableFeature);
+        }
+
+        featureSet.dispose();
+
+        if (!isEditing) {
+            featureStore.finishEditing();
+        }
+
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/utils/Operations.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AbstractGeometryMeasurementExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AbstractGeometryMeasurementExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AbstractGeometryMeasurementExtension.java	(revision 46118)
@@ -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.geometrymeasurement.app.extension;
+
+import java.awt.Component;
+
+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.andami.plugins.Extension;
+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.gui.FeatureTableDocumentPanel;
+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.feature.FeatureType;
+import org.gvsig.fmap.geom.type.GeometryType;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Abstract class for Geometry measurement operations extensions.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public abstract class AbstractGeometryMeasurementExtension extends Extension {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(AbstractGeometryMeasurementExtension.class);
+    
+    //Just to know if the resources has been initialized
+    private static boolean isInitialized = false;
+       
+    @Override
+    public void initialize() {
+        if (!isInitialized){
+            isInitialized = true;
+        }        
+    }
+
+    @Override
+    public boolean isEnabled() {
+        TableDocument tableDocument;
+        String name = "unknow";
+        try {
+            tableDocument = getActiveTableDocument();
+            if (tableDocument != null) {
+                name = tableDocument.getName();
+            	return (tableDocument != null && tableDocument.getStore().allowWrite());
+            }
+        } catch (Throwable e) {
+            LOG.info("Error accesing to the table document ("+name+")", e);
+        }
+        return false;
+    }
+
+    @Override
+    public final boolean isVisible() {
+        TableDocument tableDocument;
+        String name = "unknow";
+        try {
+            tableDocument = getActiveTableDocument();
+            if (tableDocument != null) {
+                name = tableDocument.getName();
+                return isVisibleForTable(tableDocument);
+            }
+        } catch (Throwable e) {
+            LOG.info("Error accesing to the table document ("+name+")", e);
+        }       
+        return false;
+    }
+
+    /**
+     * Returns if the current extension is visible for the provided 
+     * table.
+     * 
+     * The provided table will be always non null.
+     * 
+     * @param layer
+     *            the active table
+     * @return if the extension is visible
+     */
+    protected abstract boolean isVisibleForTable(TableDocument tableDocument);
+
+    /**
+     * Returns the active table document. If the active document is not a table,
+     * or if the table has not a geometry, return null.
+     * 
+     * @return the active table document
+     * @throws DataException 
+     */
+    protected TableDocument getActiveTableDocument() throws DataException {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+
+        if (window instanceof FeatureTableDocumentPanel) {
+            FeatureTableDocumentPanel table = (FeatureTableDocumentPanel) window;
+            TableDocument tableDocument = (TableDocument)table.getDocument();
+            if (tableDocument.getStore().getDefaultFeatureType().getDefaultGeometryAttribute() != null){
+                return tableDocument;
+            }
+           
+        }
+        return null;
+    }
+
+    protected boolean isStoreOfAnyType(TableDocument tableDocument, int[] geomTypes) {
+        try {
+            FeatureType featureType = tableDocument.getStore().getDefaultFeatureType();
+            GeometryType geometryType = featureType.getDefaultGeometryAttribute().getGeomType();
+            if( geometryType==null ) {
+                return false;
+            }
+            for (int i = 0; i < geomTypes.length; i++) {
+                if (geometryType.isTypeOf(geomTypes[i])) {
+                    return true;
+                }
+            }
+        } catch (ReadException e) {
+            LOG.error("Error reading the geometry type", e);
+        } catch (DataException e) {
+            LOG.error("Error reading the geometry type", e);
+        }
+        return false;
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        try {
+            TableDocument tableDocument = getActiveTableDocument();
+            if (tableDocument == null) {
+                return;
+            }
+            Component parentWindow = 
+                (Component)ApplicationLocator.getManager().getUIManager().getActiveWindow();
+            int addField = JOptionPane.showConfirmDialog(parentWindow, Messages.getText("new_field_query"),
+                Messages.getText("info"), JOptionPane.YES_NO_OPTION);
+            
+            if (addField == JOptionPane.YES_OPTION){
+                FeatureStore featureStore = tableDocument.getStore();
+                execute(actionCommand, featureStore);
+            }
+        } catch (Exception e) {
+            LOG.error("Not possible to add the new field", e);
+            NotificationManager.addError(e);
+        }
+    }
+
+    /**
+     * Executes a command for the given {@link FeatureStore}.
+     * 
+     * @param actionCommand
+     *            to execute
+     * @param featureStore
+     *            to use
+     * @throws Exception
+     *             if there is an error while executing
+     */
+    protected abstract void execute(String actionCommand,
+        FeatureStore featureStore) throws Exception;
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AbstractGeometryMeasurementExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AddXYPointThemeExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AddXYPointThemeExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AddXYPointThemeExtension.java	(revision 46118)
@@ -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.geometrymeasurement.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.geometrymeasurement.app.extension.utils.Operations;
+
+/**
+ * Andami extension to show PerimeterMeasurementExtension in the application.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class AddXYPointThemeExtension extends
+        AbstractGeometryMeasurementExtension {
+
+    @Override
+    public void initialize() {
+        super.initialize();
+        IconThemeHelper.registerIcon("action", "table-add-xy", this);
+    }
+
+    @Override
+    protected void execute(String actionCommand, FeatureStore featureStore)
+            throws Exception {
+        new Operations().addXYPoints(featureStore, "X", "Y");
+    }
+
+    @Override
+    protected boolean isVisibleForTable(TableDocument tableDocument) {
+        DataStoreProviderFactory factory = tableDocument.getFeatureStore().getProviderFactory();
+        if (factory instanceof FeatureStoreProviderFactory) {
+            FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+            if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                return false;
+            }
+        }
+        return isStoreOfAnyType(tableDocument, new int[]{Geometry.TYPES.POINT});
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AddXYPointThemeExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AreaMeasurementExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AreaMeasurementExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AreaMeasurementExtension.java	(revision 46118)
@@ -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.geometrymeasurement.app.extension;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.app.project.documents.table.TableDocument;
+import org.gvsig.fmap.dal.DataStoreProviderFactory;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.geometrymeasurement.app.extension.utils.Operations;
+
+/**
+ * Andami extension to show AreaMeasurementExtension in the application.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class AreaMeasurementExtension extends
+        AbstractGeometryMeasurementExtension {
+
+    @Override
+    public void initialize() {
+        super.initialize();
+        IconThemeHelper.registerIcon("action", "table-add-area", this);
+    }
+
+    @Override
+    protected void execute(String actionCommand, FeatureStore featureStore)
+            throws Exception {
+        new Operations().addDoubleFieldFromOperation(featureStore, "AREA",
+                "area");
+    }
+
+    @Override
+    protected boolean isVisibleForTable(TableDocument tableDocument) {
+        DataStoreProviderFactory factory = tableDocument.getFeatureStore().getProviderFactory();
+        if (factory instanceof FeatureStoreProviderFactory) {
+            FeatureStoreProviderFactory ffactory = (FeatureStoreProviderFactory) factory;
+            if (ffactory.allowEditableFeatureType() == FeatureStoreProviderFactory.NO) {
+                return false;
+            }
+        }
+        return isStoreOfAnyType(tableDocument, new int[]{Geometry.TYPES.SURFACE,
+            Geometry.TYPES.MULTISURFACE});
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/main/java/org/gvsig/geometrymeasurement/app/extension/AreaMeasurementExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/README.txt
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/README.txt	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/README.txt	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/log4j.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/log4j.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/log4j.xml	(revision 46118)
@@ -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.geometrymeasurement">
+		<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.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/src/test/resources/log4j.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,100 @@
+<?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.geometrymeasurement.app.mainplugin</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <description>
+This plugin add three tools to gvSIG:
+- Add a new attribute to the data source with the geometry area
+- Add a new attribute to the data source with the geometry perimeter
+- Add a new attribute to a Point type data source two new columns, one with the X Point value, and another with the Y Point value. 
+  </description>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.geometrymeasurement.app</artifactId>
+    <version>2.0.344</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.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.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.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.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>
+
+        <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>Tools: Geometry measurement</gvsig.package.info.name>
+      <gvsig.package.info.dependencies>required: org.gvsig.app.document.table.app.mainplugin -ge 2.0.1</gvsig.package.info.dependencies>
+      <gvsig.package.info.categories>View,Vector</gvsig.package.info.categories>
+      <gvsig.package.info.codealias>org.gvsig.geometrymeasurement.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.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/org.gvsig.geometrymeasurement.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/pom.xml	(revision 46118)
@@ -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.geometrymeasurement.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.desktop.plugin</artifactId>
+    <version>2.0.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.geometrymeasurement.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geometrymeasurement.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/pom.xml	(revision 46118)
@@ -0,0 +1,16 @@
+<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.coreplugin.app</artifactId>
+  <packaging>pom</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.344</version>
+  </parent>
+
+  <modules>
+      <module>org.gvsig.coreplugin.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:15 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/ComplexDesktopPane.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/ComplexDesktopPane.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/ComplexDesktopPane.java	(revision 46118)
@@ -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.coreplugin.mdiManager;
+
+import javax.swing.JPanel;
+
+
+import javax.swing.JSplitPane;
+import java.awt.BorderLayout;
+import javax.swing.JDesktopPane;
+
+import org.gvsig.utils.console.JConsole;
+public class ComplexDesktopPane extends JPanel {
+
+	private JSplitPane jSplitPane = null;
+	private JDesktopPane jDesktopPane = null;
+	private JConsole jConsole = null;
+	/**
+	 * This is the default constructor
+	 */
+	public ComplexDesktopPane() {
+		super();
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private  void initialize() {
+		this.setLayout(new BorderLayout());
+		this.setSize(300,200);
+		this.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
+	}
+	/**
+	 * This method initializes jSplitPane	
+	 * 	
+	 * @return javax.swing.JSplitPane	
+	 */    
+	private JSplitPane getJSplitPane() {
+		if (jSplitPane == null) {
+			jSplitPane = new JSplitPane();
+			jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
+			jSplitPane.setResizeWeight(0.8);
+			jSplitPane.setTopComponent(getDesktopPane());
+			jSplitPane.setBottomComponent(getJConsole());
+		}
+		return jSplitPane;
+	}
+	/**
+	 * This method initializes jDesktopPane	
+	 * 	
+	 * @return javax.swing.JDesktopPane	
+	 */    
+	public JDesktopPane getDesktopPane() {
+		if (jDesktopPane == null) {
+			jDesktopPane = new JDesktopPane();
+		}
+		return jDesktopPane;
+	}
+	/**
+	 * This method initializes jConsole	
+	 * 	
+	 * @return com.iver.utiles.console.JConsole	
+	 */    
+	private JConsole getJConsole() {
+		if (jConsole == null) {
+			jConsole = new JConsole();
+		}
+		return jConsole;
+	}
+   }

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/ComplexDesktopPane.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/MDIDesktopPane.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/MDIDesktopPane.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/MDIDesktopPane.java	(revision 46118)
@@ -0,0 +1,232 @@
+package org.gvsig.coreplugin.mdiManager;
+
+import javax.swing.*;
+import java.awt.*;
+import java.beans.*;
+
+/*
+ * Based on portions of code from  freesourcecode.net
+ * http://freesourcecode.net/javaprojects/14214/MDI-Example-code#.VfQ9El0vDeQ
+ */
+/**
+ * An extension of WDesktopPane that supports often used MDI functionality. This
+ * class also handles setting scroll bars for when windows move too far to the
+ * left or bottom, providing the MDIDesktopPane is in a ScrollPane.
+ */
+public class MDIDesktopPane extends JDesktopPane {
+
+    private static int FRAME_OFFSET = 20;
+    private MDIDesktopManager manager;
+
+    public MDIDesktopPane() {
+        manager = new MDIDesktopManager(this);
+        setDesktopManager(manager);
+        setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    }
+
+    public void setBounds(int x, int y, int w, int h) {
+        super.setBounds(x, y, w, h);
+        checkDesktopSize();
+    }
+
+    public Component add(JInternalFrame frame) {
+        JInternalFrame[] array = getAllFrames();
+        Point p;
+        int w;
+        int h;
+
+        Component retval = super.add(frame);
+        checkDesktopSize();
+        if (array.length > 0) {
+            p = array[0].getLocation();
+            p.x = p.x + FRAME_OFFSET;
+            p.y = p.y + FRAME_OFFSET;
+        } else {
+            p = new Point(0, 0);
+        }
+        frame.setLocation(p.x, p.y);
+        if (frame.isResizable()) {
+            w = getWidth() - (getWidth() / 3);
+            h = getHeight() - (getHeight() / 3);
+            if (w < frame.getMinimumSize().getWidth()) {
+                w = (int) frame.getMinimumSize().getWidth();
+            }
+            if (h < frame.getMinimumSize().getHeight()) {
+                h = (int) frame.getMinimumSize().getHeight();
+            }
+            frame.setSize(w, h);
+        }
+        moveToFront(frame);
+        frame.setVisible(true);
+        try {
+            frame.setSelected(true);
+        } catch (PropertyVetoException e) {
+            frame.toBack();
+        }
+        return retval;
+    }
+
+    public void remove(Component c) {
+        super.remove(c);
+        checkDesktopSize();
+    }
+
+    /**
+     * Cascade all internal frames
+     */
+    public void cascadeFrames() {
+        int x = 0;
+        int y = 0;
+        JInternalFrame allFrames[] = getAllFrames();
+
+        manager.setNormalSize();
+        int frameHeight = (getBounds().height - 5) - allFrames.length * FRAME_OFFSET;
+        int frameWidth = (getBounds().width - 5) - allFrames.length * FRAME_OFFSET;
+        for (int i = allFrames.length - 1; i >= 0; i--) {
+            allFrames[i].setSize(frameWidth, frameHeight);
+            allFrames[i].setLocation(x, y);
+            x = x + FRAME_OFFSET;
+            y = y + FRAME_OFFSET;
+        }
+    }
+
+    /**
+     * Tile all internal frames
+     */
+    public void tileFrames() {
+        java.awt.Component allFrames[] = getAllFrames();
+        manager.setNormalSize();
+        int frameHeight = getBounds().height / allFrames.length;
+        int y = 0;
+        for (int i = 0; i < allFrames.length; i++) {
+            allFrames[i].setSize(getBounds().width, frameHeight);
+            allFrames[i].setLocation(0, y);
+            y = y + frameHeight;
+        }
+    }
+
+    /**
+     * Sets all component size properties ( maximum, minimum, preferred) to the
+     * given dimension.
+     */
+    public void setAllSize(Dimension d) {
+        setMinimumSize(d);
+        setMaximumSize(d);
+        setPreferredSize(d);
+    }
+
+    /**
+     * Sets all component size properties ( maximum, minimum, preferred) to the
+     * given width and height.
+     */
+    public void setAllSize(int width, int height) {
+        setAllSize(new Dimension(width, height));
+    }
+
+    private void checkDesktopSize() {
+        if (getParent() != null && isVisible()) {
+            manager.resizeDesktop();
+        }
+    }
+}
+
+/**
+ * Private class used to replace the standard DesktopManager for JDesktopPane.
+ * Used to provide scrollbar functionality.
+ */
+class MDIDesktopManager extends DefaultDesktopManager {
+
+    private MDIDesktopPane desktop;
+
+    public MDIDesktopManager(MDIDesktopPane desktop) {
+        this.desktop = desktop;
+    }
+
+    public void endResizingFrame(JComponent f) {
+        super.endResizingFrame(f);
+        resizeDesktop();
+    }
+
+    public void endDraggingFrame(JComponent f) {
+        super.endDraggingFrame(f);
+        resizeDesktop();
+    }
+
+    public void setNormalSize() {
+        JScrollPane scrollPane = getScrollPane();
+        int x = 0;
+        int y = 0;
+        Insets scrollInsets = getScrollPaneInsets();
+
+        if (scrollPane != null) {
+            Dimension d = scrollPane.getVisibleRect().getSize();
+            if (scrollPane.getBorder() != null) {
+                d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right,
+                        d.getHeight() - scrollInsets.top - scrollInsets.bottom);
+            }
+
+            d.setSize(d.getWidth() - 20, d.getHeight() - 20);
+            desktop.setAllSize(x, y);
+            scrollPane.invalidate();
+            scrollPane.validate();
+        }
+    }
+
+    private Insets getScrollPaneInsets() {
+        JScrollPane scrollPane = getScrollPane();
+        if (scrollPane == null) {
+            return new Insets(0, 0, 0, 0);
+        } else {
+            return getScrollPane().getBorder().getBorderInsets(scrollPane);
+        }
+    }
+
+    private JScrollPane getScrollPane() {
+        if (desktop.getParent() instanceof JViewport) {
+            JViewport viewPort = (JViewport) desktop.getParent();
+            if (viewPort.getParent() instanceof JScrollPane) {
+                return (JScrollPane) viewPort.getParent();
+            }
+        }
+        return null;
+    }
+
+    protected void resizeDesktop() {
+        int x = 0;
+        int y = 0;
+        JScrollPane scrollPane = getScrollPane();
+        Insets scrollInsets = getScrollPaneInsets();
+
+        if (scrollPane != null) {
+            JInternalFrame allFrames[] = desktop.getAllFrames();
+            for (int i = 0; i < allFrames.length; i++) {
+                JInternalFrame frame = allFrames[i];
+                // No tenemos en cuenta los frames maximizados para calcular el 
+                // tama�o de la ventana.
+                if (!frame.isMaximum()) { 
+                    if (frame.getX() + frame.getWidth() > x) {
+                        x = frame.getX() + frame.getWidth();
+                    }
+                    if (frame.getY() + frame.getHeight() > y) {
+                        y = frame.getY() + frame.getHeight();
+                    }
+                }
+            }
+            Dimension d = scrollPane.getVisibleRect().getSize();
+            if (scrollPane.getBorder() != null) {
+                d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right,
+                        d.getHeight() - scrollInsets.top - scrollInsets.bottom);
+            }
+
+            if (x <= d.getWidth()) {
+                x = ((int) d.getWidth()) - 20;
+            }
+            if (y <= d.getHeight()) {
+                y = ((int) d.getHeight()) - 20;
+            }
+            desktop.setAllSize(x, y);
+            scrollPane.invalidate();
+            scrollPane.validate();
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/SingletonWindowSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/SingletonWindowSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/SingletonWindowSupport.java	(revision 46118)
@@ -0,0 +1,372 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.coreplugin.mdiManager;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.beans.PropertyVetoException;
+import java.util.ArrayList;
+
+import javax.swing.JComponent;
+import javax.swing.JInternalFrame;
+
+import org.gvsig.andami.ui.mdiManager.SingletonDialogAlreadyShownException;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision: 31344 $
+ */
+public class SingletonWindowSupport {
+	private static int singletonViewInfoID = 0;
+	/** Hashtable que asocia contenido con vistas */
+	private HashMap contentWindowInfo = new HashMap();
+	private WindowInfoSupport vis;
+	private FrameWindowSupport frameWindowSupport;
+	private HashMap contentFrame = new HashMap();
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param vis DOCUMENT ME!
+	 * @param fvs
+	 *
+	 * @see org.gvsig.andami.ui.mdiManager.MDIManager#init(com.iver.andami.ui.mdiFrame.MDIFrame)
+	 */
+	public SingletonWindowSupport(WindowInfoSupport vis, FrameWindowSupport fvs) {
+		this.vis = vis;
+		this.frameWindowSupport = fvs;
+	}
+
+	/**
+	 *
+	 * If the window existed, the 'wi' parameter is updated with the
+	 * previous window info (this allows to show the window in the previous
+	 * place), but the title of the window is updated using the title
+	 * from the parameter.
+	 *  
+	 * @param windowClass DOCUMENT ME!
+	 * @param model DOCUMENT ME!
+	 * @param wi DOCUMENT ME!
+	 *
+	 * @return true si la vista existe ya y false si la vista no existe
+	 *
+	 * @throws SingletonDialogAlreadyShownException DOCUMENT ME!
+	 */
+	public boolean registerWindow(Class windowClass, Object model, WindowInfo wi) {
+		//Se comprueba si la ventana est� siendo mostrada
+		SingletonWindowInfo swi = new SingletonWindowInfo(windowClass, model);
+
+		if (contentWindowInfo.containsKey(swi)) {
+			if (wi.isModal()) {
+				throw new SingletonDialogAlreadyShownException();
+			}
+
+			String new_tit = wi.getTitle();
+			WindowInfo previous_wi = (WindowInfo) contentWindowInfo.get(swi);
+			previous_wi.setTitle(new_tit);
+			wi.setWindowInfo(previous_wi);
+
+			return true;
+		} else {
+			//La ventana singleton no estaba mostrada
+			//Se asocia el modelo con la vista
+			contentWindowInfo.put(swi, wi);
+			return false;
+		}
+	}
+
+	public void openSingletonWindow(SingletonWindow sw, Component frame){
+		SingletonWindowInfo swi = new SingletonWindowInfo(sw.getClass(), sw.getWindowModel());
+		contentFrame.put(swi, frame);
+	}
+
+	public boolean contains(SingletonWindow sw){
+		SingletonWindowInfo swi = new SingletonWindowInfo(sw.getClass(), sw.getWindowModel());
+		return contentFrame.containsKey(swi);
+	}
+
+	public boolean contains(Class windowClass, Object model){
+		SingletonWindowInfo swi = new SingletonWindowInfo(windowClass, model);
+		return contentFrame.containsKey(swi);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param sw
+	 */
+	public void closeWindow(SingletonWindow sw) {
+		SingletonWindowInfo swi = new SingletonWindowInfo(sw.getClass(), sw.getWindowModel());
+		WindowInfo windowInfo = (WindowInfo) contentWindowInfo.get(swi);
+		if (windowInfo!=null) {
+			frameWindowSupport.updateWindowInfo(sw, windowInfo);
+		}
+		contentFrame.remove(swi);
+	}
+
+	/**
+	 * Representa una vista singleton manteniendo el modelo y la clase de la
+	 * vista que lo muestra
+	 *
+	 * @author Fernando Gonz�lez Cort�s
+	 */
+	public class SingletonWindowInfo {
+
+		public int id;
+
+		/** Clase de la vista */
+		public Class clase;
+
+		/** Modelo que representa la vista */
+		public Object modelo;
+
+		/**
+		 * Creates a new SingletonView object.
+		 *
+		 * @param clase Clase de la vista
+		 * @param modelo Modelo que representa la vista
+		 */
+		public SingletonWindowInfo(Class clase, Object modelo) {
+			this.clase = clase;
+			this.modelo = modelo;
+			this.id = singletonViewInfoID;
+			singletonViewInfoID++;
+		}
+
+		/**
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		public boolean equals(Object obj) {
+			if (obj.getClass() != SingletonWindowInfo.class) {
+				throw new IllegalArgumentException();
+			}
+
+			SingletonWindowInfo s = (SingletonWindowInfo) obj;
+
+			if ((clase == s.clase) && (modelo == s.modelo)) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+	}
+
+	private Component getFrame(SingletonWindowInfo svi){
+		WindowInfo vi = (WindowInfo) contentWindowInfo.get(svi);
+		return (JInternalFrame) contentFrame.get(svi);
+	}
+
+	public Component getFrame(Class viewClass, Object model){
+		SingletonWindowInfo svi = new SingletonWindowInfo(viewClass, model);
+		return getFrame(svi);
+	}
+
+	/**
+	 * @param model
+	 * @return
+	 */
+	public Component[] getFrames(Object model) {
+		ArrayList ret = new ArrayList();
+
+		ArrayList keys = contentFrame.getKeys();
+		for (int i = 0; i < keys.size(); i++) {
+			SingletonWindowInfo svi = (SingletonWindowInfo) keys.get(i);
+
+			if (svi.modelo == model){
+				ret.add(contentFrame.get(svi));
+			}
+		}
+
+		return (JInternalFrame[]) ret.toArray(new JInternalFrame[0]);
+	}
+
+	/**
+	 * @param view
+	 * @return
+	 */
+	public Component getFrame(SingletonWindow sv) {
+		SingletonWindowInfo svi = new SingletonWindowInfo(sv.getClass(), sv.getWindowModel());
+		return getFrame(svi);
+	}
+
+	/**
+	 * @param sv
+	 * @param i
+	 */
+	public void setX(SingletonWindow sv, int x) {
+		JInternalFrame o = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sv.getClass(), sv.getWindowModel()));
+
+        if (o == null) return;
+        o.setLocation(x, o.getY());
+	}
+
+	/**
+	 * @param sv
+	 * @param i
+	 */
+	public void setY(SingletonWindow sv, int y) {
+		JInternalFrame o = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sv.getClass(), sv.getWindowModel()));
+
+        if (o == null) return;
+
+        o.setLocation(o.getX(), y);
+	}
+
+	/**
+	 * @param sv
+	 * @param i
+	 */
+	public void setHeight(SingletonWindow sv, int height) {
+		JInternalFrame o = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sv.getClass(), sv.getWindowModel()));
+
+        if (o == null) return;
+
+        o.setSize(o.getWidth(), height);
+	}
+
+	/**
+	 * @param sv
+	 * @param i
+	 */
+	public void setWidth(SingletonWindow sv, int width) {
+		JInternalFrame o = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sv.getClass(), sv.getWindowModel()));
+
+        if (o == null) return;
+        o.setSize(width, o.getHeight());
+	}
+
+	/**
+	 * @param sw
+	 * @param maximized
+	 */
+	public void setMaximized(SingletonWindow sw, boolean maximized) {
+		JInternalFrame frame = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sw.getClass(), sw.getWindowModel()));
+
+        if (frame == null) return;
+        try {
+			frame.setMaximum(maximized);
+		} catch (PropertyVetoException e) {
+			// TODO Auto-generated catch block
+			//e.printStackTrace();
+		}
+	}
+
+	/**
+	 * @param sw
+	 * @param maximized
+	 */
+	public void setNormalBounds(SingletonWindow sw, Rectangle normalBounds) {
+		JInternalFrame frame = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sw.getClass(), sw.getWindowModel()));
+
+        if (frame == null) return;
+        frame.setNormalBounds(normalBounds);
+	}
+
+	/**
+	 * Sets the minimum allowed size for the provided singleton window.
+	 *
+	 * @param sw
+	 * @param minSize
+	 */
+	public void setMinimumSize(SingletonWindow sw, Dimension minSize) {
+		JInternalFrame frame = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sw.getClass(), sw.getWindowModel()));
+
+        if (frame == null) return;
+        frame.setMinimumSize(minSize);
+	}
+
+	/**
+	 * @param sv
+	 * @param string
+	 */
+	public void setTitle(SingletonWindow sv, String title) {
+		JInternalFrame o = (JInternalFrame) contentFrame.get(new SingletonWindowInfo(sv.getClass(), sv.getWindowModel()));
+
+        if (o == null) return;
+        o.setTitle(title);
+	}
+
+	private class HashMap {
+	    private ArrayList keys = new ArrayList();
+	    private ArrayList values = new ArrayList();
+
+	    public void put(SingletonWindowInfo key, Object value) {
+	        int index = -1;
+	        for (int i = 0; i < keys.size(); i++) {
+	            if (keys.get(i).equals(key)){
+	                index = i;
+	                break;
+	            }
+            }
+
+	        if (index != -1){
+	            keys.add(index, key);
+	            values.add(index, value);
+	        }else{
+	            keys.add(key);
+	            values.add(value);
+	        }
+	    }
+
+	    public boolean containsKey(SingletonWindowInfo key){
+	        for (int i = 0; i < keys.size(); i++) {
+	            if (keys.get(i).equals(key)){
+	                return true;
+	            }
+	        }
+
+	        return false;
+	    }
+
+	    public Object get(SingletonWindowInfo key){
+	        for (int i = 0; i < keys.size(); i++) {
+	            if (keys.get(i).equals(key)){
+	                return values.get(i);
+	            }
+	        }
+
+	        return null;
+	    }
+
+	    public void remove(SingletonWindowInfo key){
+	        for (int i = 0; i < keys.size(); i++) {
+	            if (keys.get(i).equals(key)){
+	                keys.remove(i);
+	                values.remove(i);
+	            }
+	        }
+	    }
+
+	    public ArrayList getKeys(){
+	        return keys;
+	    }
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/SingletonWindowSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowStackSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowStackSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowStackSupport.java	(revision 46118)
@@ -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.coreplugin.mdiManager;
+
+import java.awt.event.ActionListener;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+/**
+ *
+ */
+public class WindowStackSupport {
+	/* arrays for dynamically assigned shortcut keys */
+	private boolean[] key_free;
+	private String[] key;
+	
+	private Vector vistas = new Vector();
+
+	private WindowInfoSupport vis;
+
+	private Hashtable viewMenu = new Hashtable();
+
+	/**
+	 * @param vis
+	 */
+	public WindowStackSupport(WindowInfoSupport vis) {
+this.vis = vis;
+		
+		/* restart window key shortcut numbering */
+		key_free = new boolean[10];
+		for ( int i = 0; i < 10; i ++ ) {
+			key_free[i] = true;
+		}
+		key = new java.lang.String[10];
+		/*
+		 * We need to add CTRL modifier because
+		 * our key stroke manager will
+		 * not add default modifier (because we need to
+		 * deal with F3, F7, etc, not CTRL+F3 etc) 
+		 */
+		key[0] = "ctrl+1";
+		key[1] = "ctrl+2";
+		key[2] = "ctrl+3";
+		key[3] = "ctrl+4";
+		key[4] = "ctrl+5";
+		key[5] = "ctrl+6";
+		key[6] = "ctrl+7";
+		key[7] = "ctrl+8";
+		key[8] = "ctrl+9";
+		key[9] = "ctrl+0";
+	}
+
+	public void add(IWindow v, final ActionListener listener) {
+		vistas.add(v);
+		WindowInfo vi = vis.getWindowInfo(v);
+		int id = vi.getId();
+		Menu m = new Menu();
+		m.setActionCommand(""+id);
+		m.setTooltip(PluginServices.getText(this, "activa_la_ventana"));
+		m.setText("Window/"+vi.getTitle());
+		/* get the first free mnemonic (if any) and assign */
+		for ( int i=0; i < 10; i++) {
+			if ( key_free[i]) {
+				m.setKey(key[i]);
+				key_free[i] = false;
+				break;
+			}
+		}
+		viewMenu.put(v, m);
+		PluginServices.getMainFrame().addMenu(m, listener, PluginServices.getPluginServices(this).getClassLoader() );
+	}
+
+	public void remove(IWindow v){
+		Menu m = (Menu) viewMenu.get(v);
+		if (m == null) return;
+		/* free keyboard shortut taken by this window (if any) */
+		if ( m.getKey() != null ) {
+			for ( int i=0; i < 10; i++ ) {
+				if ( m.getKey() == key[i]) {
+					key_free[i] = true;
+					break;
+				}
+			}
+		}
+		PluginServices.getMainFrame().removeMenu(m);
+		viewMenu.remove(v);
+		vistas.remove(v);
+	}
+
+	/**
+	 * FJP: No se usa, y no s� para qu� estaba pensado.
+	 */
+	public void ctrltab(){
+		IWindow v = (IWindow) vistas.remove(vistas.size() - 1);
+		vistas.add(0, v);
+	}
+
+	public IWindow getActiveWindow(){
+		if (vistas.size() == 0) return null;
+        int index = vistas.size()-1;
+        while (index >= 0)
+        {
+            IWindow aux = (IWindow) vistas.get(index);
+            if (!aux.getWindowInfo().isPalette())
+            {
+//                System.err.println("getActiveView = " + aux.getWindowInfo().getTitle());
+                return aux;
+            }
+            index--;
+        }
+        return null;
+	}
+    /**
+     * Se utiliza cuando ya est� abierta la vista para indicar
+     * que la pasamos a activa. De esta forma evitamos que el
+     * getActiveView devuelva algo que no es.
+     * En realidad lo que haces es mover la vista a la �ltima
+     * posici�n.
+     * @param v
+     */
+    public void setActive(IWindow v)
+    {
+        IWindow copia = null;
+        boolean bCopiar = false;
+        // Si es de tipo palette, no se pone como activa.
+        // De esta forma, nunca nos la devolver�.... Bueno,
+        // igual si cerramos la de encima. Voy a ponerle en
+        // getActiveView que si es de tipo Palette, devuelva la
+        // de abajo.
+        if (v.getWindowInfo().isPalette()) return;
+
+        for (int i=0; i < vistas.size(); i++)
+        {
+            IWindow aux = (IWindow) vistas.get(i);
+            if (aux == v)
+            {
+                copia = aux;
+                bCopiar = true;
+            }
+            if (bCopiar)
+            {
+                if (i < vistas.size()-1)
+                {
+                    IWindow siguiente = (IWindow) vistas.get(i+1);
+                    vistas.set(i,siguiente);
+                }
+                else // La �ltima
+                    vistas.set(i,copia);
+            }
+        } // for
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowStackSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/IFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/IFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/IFrame.java	(revision 46118)
@@ -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.coreplugin.mdiManager.frames;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+
+/**
+ * This interface is a model for CorePlugin windows. When CorePlugin receives an
+ * IWindow object, it creates a JInternalFrame or a JDialog, depending on
+ * the specified properties.
+ * 
+ * This interface allows coreplugin to talk to JInternalFrames and JDialogs in
+ * a uniform way.
+ * 
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ */
+public interface IFrame {
+    /**
+     * Gets the title property
+     *
+     * @return
+     */
+	public String getTitle();
+	
+    /**
+     * Sets the title property.
+     *
+     * @param title The new title.
+     */
+	public void setTitle(String title);
+
+    /**
+     * Returns the current x coordinate of the window's origin.
+     *
+     * @return Returns the value (in pixels) of the x coordinate
+     * of the window's origin.
+     */
+    public int getX();
+	
+    /**
+     * Sets the value of the x coordinate for the origin of the associated
+     * window.
+     * 
+     * @param x The value (in pixels) of the x coordinate
+     */
+    public void setX(int x);
+    
+    /**
+     * Returns the current y coordinate of the window's origin.
+     *
+     * @return Returns the value (in pixels) of the y coordinate
+     * of the window's origin.
+     */
+    public int getY();
+	
+    /**
+     * Sets the value of the y coordinate for the origin of the associated
+     * window.
+     * 
+     * @param y The value (in pixels) of the y coordinate
+     */
+    public void setY(int y);
+    
+    /**
+     * Gets the window height.
+     *
+     * @return The window height (in pixels).
+     */
+    public int getHeight();
+
+    /**
+     * Gets the window width.
+     *
+     * @return The window width (in pixels).
+     */
+    public int getWidth();
+    
+    /**
+     * Sets the window height.
+     *
+     * @param height the window height (in pixels)
+     */
+    public void setHeight(int height);
+    
+    /**
+     * Sets the window width.
+     *
+     * @param The window width (in pixels)
+     */
+    public void setWidth(int width);
+    
+    /**
+     * Gets the minimum allowed size for this window.
+     * 
+     * @return minSize The minimum allowed size for this window.
+     */
+	public Dimension getMinimumSize();
+	
+    /**
+     * Sets the minimum allowed size for this 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 this window.
+     */
+	public void setMinimumSize(Dimension minSize);
+	
+    /**
+     * Gets the window bounds.
+     * 
+     * @return The window bounds.
+     */
+    public Rectangle getBounds();
+    
+    /**
+     * Sets the window bounds.
+     * 
+     * @param bounds The window bounds.
+     */
+    public void setBounds(Rectangle bounds);
+    
+    public void setLocation(int x, int y);
+	
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/IFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/InternalFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/InternalFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/InternalFrame.java	(revision 46118)
@@ -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.coreplugin.mdiManager.frames;
+
+import javax.swing.JInternalFrame;
+
+/**
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class InternalFrame extends JInternalFrame implements IFrame {
+	private static final long serialVersionUID = 1L;
+	
+	   /** 
+     * Creates a non-resizable, non-closable, non-maximizable,
+     * non-iconifiable <code>JInternalFrame</code> with no title.
+     */
+    public InternalFrame() {
+        super();
+    }
+
+    /** 
+     * Creates a non-resizable, non-closable, non-maximizable,
+     * non-iconifiable <code>JInternalFrame</code> with the specified title.
+     * Note that passing in a <code>null</code> <code>title</code> results in
+     * unspecified behavior and possibly an exception.
+     *
+     * @param title  the non-<code>null</code> <code>String</code>
+     *     to display in the title bar
+     */
+    public InternalFrame(String title) {
+        super(title);
+    }
+
+    /** 
+     * Creates a non-closable, non-maximizable, non-iconifiable 
+     * <code>JInternalFrame</code> with the specified title
+     * and resizability.
+     *
+     * @param title      the <code>String</code> to display in the title bar
+     * @param resizable  if <code>true</code>, the internal frame can be resized
+     */
+    public InternalFrame(String title, boolean resizable) {
+        super(title, resizable);
+    }
+
+    /** 
+     * Creates a non-maximizable, non-iconifiable <code>JInternalFrame</code>
+     * with the specified title, resizability, and
+     * closability.
+     *
+     * @param title      the <code>String</code> to display in the title bar
+     * @param resizable  if <code>true</code>, the internal frame can be resized
+     * @param closable   if <code>true</code>, the internal frame can be closed
+     */
+    public InternalFrame(String title, boolean resizable, boolean closable) {
+        super(title, resizable, closable);
+    }
+
+    /** 
+     * Creates a non-iconifiable <code>JInternalFrame</code>
+     * with the specified title,
+     * resizability, closability, and maximizability.
+     *
+     * @param title       the <code>String</code> to display in the title bar
+     * @param resizable   if <code>true</code>, the internal frame can be resized
+     * @param closable    if <code>true</code>, the internal frame can be closed
+     * @param maximizable if <code>true</code>, the internal frame can be maximized
+     */
+    public InternalFrame(String title, boolean resizable, boolean closable,
+                          boolean maximizable) {
+        super(title, resizable, closable, maximizable);
+    }
+
+    /** 
+     * Creates a <code>JInternalFrame</code> with the specified title,
+     * resizability, closability, maximizability, and iconifiability.
+     * All <code>JInternalFrame</code> constructors use this one.
+     *
+     * @param title       the <code>String</code> to display in the title bar
+     * @param resizable   if <code>true</code>, the internal frame can be resized
+     * @param closable    if <code>true</code>, the internal frame can be closed
+     * @param maximizable if <code>true</code>, the internal frame can be maximized
+     * @param iconifiable if <code>true</code>, the internal frame can be iconified
+     */
+    public InternalFrame(String title, boolean resizable, boolean closable, 
+                                boolean maximizable, boolean iconifiable) {
+        
+	     super(title, resizable, closable, maximizable, iconifiable);
+    }
+
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setHeight(int)
+	 */
+	public void setHeight(int height) {
+		super.setSize(getWidth(), height);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setWidth(int)
+	 */
+	public void setWidth(int width) {
+		super.setSize(width, getHeight());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setX(int)
+	 */
+	public void setX(int x) {
+		super.setLocation(x, getX());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setY(int)
+	 */
+	public void setY(int y) {
+		super.setLocation(y, getY());
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/InternalFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/ExternalFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/ExternalFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/ExternalFrame.java	(revision 46118)
@@ -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.coreplugin.mdiManager.frames;
+
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.HeadlessException;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+
+/**
+ * @author Cesar Martinez Izquierdo <cesar.martinez@iver.es>
+ *
+ */
+public class ExternalFrame extends JDialog implements IFrame, ComponentListener {
+	private static final long serialVersionUID = 1L;
+	
+	private void initFrame() {
+		addComponentListener(this);
+	}
+	
+    /**
+     * Creates a non-modal dialog without a title and without a specified
+     * <code>Frame</code> owner.  A shared, hidden frame will be
+     * set as the owner of the dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.     
+     * 
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame() throws HeadlessException {
+    	super();
+    	initFrame();
+    }
+
+    /**
+     * Creates a non-modal dialog without a title with the
+     * specified <code>Frame</code> as its owner.  If <code>owner</code>
+     * is <code>null</code>, a shared, hidden frame will be set as the
+     * owner of the dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.
+     *
+     * @param owner the <code>Frame</code> from which the dialog is displayed
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Frame owner) throws HeadlessException {
+    	super(owner);
+    	initFrame();
+    }
+
+    /**
+     * Creates a modal or non-modal dialog without a title and
+     * with the specified owner <code>Frame</code>.  If <code>owner</code>
+     * is <code>null</code>, a shared, hidden frame will be set as the
+     * owner of the dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.     
+     *
+     * @param owner the <code>Frame</code> from which the dialog is displayed
+     * @param modal  true for a modal dialog, false for one that allows
+     *               others windows to be active at the same time
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Frame owner, boolean modal) throws HeadlessException {
+        super(owner, modal);
+        initFrame();
+    }
+
+    /**
+     * Creates a non-modal dialog with the specified title and
+     * with the specified owner frame.  If <code>owner</code>
+     * is <code>null</code>, a shared, hidden frame will be set as the
+     * owner of the dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.     
+     *
+     * @param owner the <code>Frame</code> from which the dialog is displayed
+     * @param title  the <code>String</code> to display in the dialog's
+     *			title bar
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Frame owner, String title) throws HeadlessException {
+        super(owner, title);
+        initFrame();
+    }
+
+    /**
+     * Creates a modal or non-modal dialog with the specified title 
+     * and the specified owner <code>Frame</code>.  If <code>owner</code>
+     * is <code>null</code>, a shared, hidden frame will be set as the
+     * owner of this dialog.  All constructors defer to this one.
+     * <p>
+     * NOTE: Any popup components (<code>JComboBox</code>,
+     * <code>JPopupMenu</code>, <code>JMenuBar</code>)
+     * created within a modal dialog will be forced to be lightweight.
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.     
+     *
+     * @param owner the <code>Frame</code> from which the dialog is displayed
+     * @param title  the <code>String</code> to display in the dialog's
+     *			title bar
+     * @param modal  true for a modal dialog, false for one that allows
+     *               other windows to be active at the same time
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Frame owner, String title, boolean modal)
+        throws HeadlessException {
+	       super(owner, title, modal);
+	       initFrame();
+    }
+
+    /**
+     * Creates a non-modal dialog without a title with the
+     * specified <code>Dialog</code> as its owner.
+     * <p>
+     * This constructor sets the component's locale property to the value 
+     * returned by <code>JComponent.getDefaultLocale</code>.
+     *
+     * @param owner the non-null <code>Dialog</code> from which the dialog is displayed
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Dialog owner) throws HeadlessException {
+        super(owner);
+        initFrame();
+    }
+
+    /**
+     * Creates a modal or non-modal dialog without a title and
+     * with the specified owner dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value 
+     * returned by <code>JComponent.getDefaultLocale</code>.
+     *
+     * @param owner the non-null <code>Dialog</code> from which the dialog is displayed
+     * @param modal  true for a modal dialog, false for one that allows
+     *               other windows to be active at the same time
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Dialog owner, boolean modal) throws HeadlessException {
+        super(owner, modal);
+        initFrame();
+    }
+
+    /**
+     * Creates a non-modal dialog with the specified title and
+     * with the specified owner dialog.
+     * <p>
+     * This constructor sets the component's locale property to the value 
+     * returned by <code>JComponent.getDefaultLocale</code>.
+     *
+     * @param owner the non-null <code>Dialog</code> from which the dialog is displayed
+     * @param title  the <code>String</code> to display in the dialog's
+     *			title bar
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Dialog owner, String title) throws HeadlessException {
+        super(owner, title);
+        initFrame();
+    }
+
+    /**
+     * Creates a modal or non-modal dialog with the specified title 
+     * and the specified owner frame. 
+     * <p>
+     * This constructor sets the component's locale property to the value
+     * returned by <code>JComponent.getDefaultLocale</code>.     
+     *
+     * @param owner the non-null <code>Dialog</code> from which the dialog is displayed
+     * @param title  the <code>String</code> to display in the dialog's
+     *			title bar
+     * @param modal  true for a modal dialog, false for one that allows
+     *               other windows to be active at the same time
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see JComponent#getDefaultLocale
+     */
+    public ExternalFrame(Dialog owner, String title, boolean modal)
+        throws HeadlessException {
+        super(owner, title, modal);
+        initFrame();
+    }
+
+	/**
+	 *  Stores the minimum allowed size for this JDialog. If it is null, there
+	 *  is no minimum size for this window.
+	 */
+	Dimension minimumSize = null;
+	
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setHeight(int)
+	 */
+	public void setHeight(int height) {
+		super.setSize(getWidth(), height);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setWidth(int)
+	 */
+	public void setWidth(int width) {
+		super.setSize(width, getHeight());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setX(int)
+	 */
+	public void setX(int x) {
+		super.setLocation(x, getX());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setY(int)
+	 */
+	public void setY(int y) {
+		super.setLocation(y, getY());
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#getMinimumSize()
+	 */
+	public Dimension getMinimumSize() {
+		return minimumSize;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.core.mdiManager.frames.IFrame#setMinimumSize(java.awt.Dimension)
+	 */
+	public void setMinimumSize(Dimension minSize) {
+		minimumSize = minSize;
+		adjustToMinSize();
+	}
+	
+	/**
+	 * Adjust the window to the minimum size, if necessary.
+	 */
+	private void adjustToMinSize() {
+		if (minimumSize==null) return;
+		int height, width;
+		Dimension currentSize = getSize();
+		boolean modified=false;
+		
+		if (currentSize.height < minimumSize.height) {
+			height = minimumSize.height;
+			modified = true;
+		}
+		else {
+			height = currentSize.height;
+		}
+		
+		if (currentSize.width < minimumSize.width) {
+			width = minimumSize.width;
+			modified = true;
+		}
+		else {
+			width = currentSize.width;
+		}
+		if (modified) {
+			boolean isResizable = isResizable();
+			setResizable(false);
+			setSize(width, height);
+			setResizable(isResizable);
+			show();
+		}
+	}
+
+	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) {
+		// this is necessary because in Java 1.4/1.5, JDialog doesn't have a
+		// setMinimum method. It's solved in 1.6, we'll remove this after migration.
+		adjustToMinSize();
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/frames/ExternalFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/NewSkin.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/NewSkin.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/NewSkin.java	(revision 46118)
@@ -0,0 +1,1372 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us at info AT
+ * gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.coreplugin.mdiManager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.KeyEventDispatcher;
+import java.awt.Point;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.beans.PropertyVetoException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.TreeMap;
+
+import javax.swing.DefaultDesktopManager;
+import javax.swing.DesktopManager;
+import javax.swing.ImageIcon;
+import javax.swing.JDesktopPane;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.InternalFrameEvent;
+import javax.swing.event.InternalFrameListener;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.ToolsWindowManager;
+import org.gvsig.andami.ui.mdiFrame.GlassPane;
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiFrame.NewStatusBar;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.MDIManager;
+import org.gvsig.andami.ui.mdiManager.MDIUtilities;
+import org.gvsig.andami.ui.mdiManager.SingletonDialogAlreadyShownException;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
+import org.gvsig.tools.task.RunnableWithParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class NewSkin extends Extension implements MDIManager {
+
+    private static final int DefaultXMargin = 20; // Added for the method 'centreJInternalFrame'
+    private static final int DefaultYMargin = 20; // Added for the method 'centreJInternalFrame'
+    private static final int MinimumXMargin = 130; // Added for the method 'centreJInternalFrame'
+    private static final int MinimumYMargin = 60; // Added for the method 'centreJInternalFrame'
+
+    /**
+     * Variable privada <code>desktopManager</code> para usarlo cuando sale una
+     * ventana que no queremos que nos restaure las que tenemos maximizadas.
+     * Justo antes de usar el setMaximize(false), le pegamos el cambiazo.
+     */
+    private static final DesktopManager desktopManager = new DefaultDesktopManager();
+
+    /**
+     * log
+     */
+    private static final Logger logger = LoggerFactory.getLogger(NewSkin.class.getName());
+
+    /**
+     * Panel de la MDIFrame
+     */
+    private final JDesktopPane panel = new MDIDesktopPane();
+
+    /**
+     * MDIFrame
+     */
+    private MDIFrame mainFrame;
+
+    private final GlassPane glassPane = new GlassPane();
+
+    private DialogStackSupport dss;
+
+    /**
+     * Associates JInternalFrames with the IWindow they contain
+     */
+    private FrameWindowSupport fws;
+
+    private WindowInfoSupport wis;
+
+    private WindowStackSupport wss;
+
+    private SingletonWindowSupport sws;
+
+    private Cursor lastCursor = null;
+    private ImageIcon image;
+    private String typeDesktop;
+
+    private int alignCounter = 1;
+
+    //Anyade barras de scroll
+    private void addScrolledDesktopPanel(JFrame parent, JDesktopPane desktopPane) {
+        JPanel toppanel;
+
+        toppanel = new JPanel();
+        toppanel.setLayout(new BorderLayout());
+        toppanel.setPreferredSize(new Dimension(200, 200));
+        toppanel.setBackground(Color.RED);
+
+        JScrollPane scrollPanel = new JScrollPane(desktopPane);
+
+        toppanel.add(scrollPanel, BorderLayout.CENTER);
+
+        parent.getContentPane().add(toppanel, BorderLayout.CENTER);
+    }
+
+    public JDesktopPane getDesktopPane() {
+        return this.panel;
+    }
+
+    @Override
+    public BufferedImage getImagePreview() {
+         BufferedImage img = new BufferedImage(
+                this.panel.getWidth(), this.panel.getHeight(), 
+                BufferedImage.TYPE_INT_RGB);
+        Graphics g = img.createGraphics();
+        this.panel.paint(g);
+        g.dispose();
+        return img;
+    }
+    
+    @Override
+    public void init(MDIFrame f) {
+
+        // Inicializa el Frame y la consola
+        mainFrame = f;
+        mainFrame.setGlassPane(glassPane);
+        panel.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+
+        //Anyade barras de scroll
+        //mainFrame.getContentPane().add(panel, BorderLayout.CENTER);
+        addScrolledDesktopPanel(mainFrame, panel);
+
+        panel.setDesktopManager(desktopManager);
+
+        fws = createFrameWindowSupport(mainFrame);
+        dss = new DialogStackSupport(mainFrame);
+        sws = new SingletonWindowSupport(wis, fws);
+        wis = new WindowInfoSupport(mainFrame, fws, sws);
+        fws.setVis(wis);
+        wss = new WindowStackSupport(wis);
+
+        // TODO (jaume) esto no deber�a de estar aqu�...
+        // molar�a m�s en un di�logo de preferencias
+        // es s�lo una prueba
+        KeyStroke controlTab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.CTRL_MASK);
+
+        PluginServices.registerKeyStroke(controlTab, new KeyEventDispatcher() {
+
+            @Override
+            public boolean dispatchKeyEvent(KeyEvent e) {
+                IWindow[] views = getAllWindows();
+                if (views.length <= 0 || e.getID() == KeyEvent.KEY_PRESSED) {
+                    return false;
+                }
+
+                int current = 0;
+                for (int i = 0; i < views.length; i++) {
+                    if (views[i].equals(getActiveWindow())) {
+                        current = i;
+                        break;
+                    }
+                }
+                addWindow(views[(current + 1) % views.length]);
+                return true;
+            }
+
+        });
+    }
+
+    /**
+     * Create the {@link FrameWindowSupport} instance
+     *
+     * @param mainFrame
+     * @return 
+     *
+     */
+    protected FrameWindowSupport createFrameWindowSupport(MDIFrame mainFrame) {
+        return new FrameWindowSupport(mainFrame);
+    }
+
+    @Override
+    public IWindow addWindow(final IWindow p) throws SingletonDialogAlreadyShownException {
+
+        if (!SwingUtilities.isEventDispatchThread()) {
+            RunnableWithParameters action = new RunnableWithParameters() {
+                @Override
+                public void run() {
+                    this.returnValue = addWindow(p);
+                }
+            };
+            try {
+                SwingUtilities.invokeAndWait(action);
+            } catch (Exception e) {
+                logger.info("Can't add window from othrer thread that EventDispatch", e);
+                IllegalThreadStateException e2 = new IllegalThreadStateException();
+                e2.initCause(e);
+                throw e2;
+            }
+            return (IWindow) action.getReturnValue();
+        }
+
+        // se obtiene la informaci�n de la vista
+        WindowInfo wi = wis.getWindowInfo(p);
+
+        // Se comprueban las incompatibilidades que pudieran haber en la vista
+        MDIUtilities.checkWindowInfo(wi);
+        if ((p instanceof SingletonWindow) && (wi.isModal())) {
+            throw new RuntimeException("A modal view cannot be a SingletonView");
+        }
+
+        /*
+         * Se obtiene la referencia a la vista anterior por si es una singleton
+         * y est� siendo mostrada. Se obtiene su informaci�n si ya fue mostrada
+         */
+        boolean singletonPreviouslyAdded = false;
+
+        if (p instanceof SingletonWindow) {
+            SingletonWindow sw = (SingletonWindow) p;
+            if (sws.registerWindow(sw.getClass(), sw.getWindowModel(), wi)) {
+                singletonPreviouslyAdded = true;
+            }
+        }
+
+        if (singletonPreviouslyAdded) {
+            // Si la vista no est� actualmente abierta
+            if (!sws.contains((SingletonWindow) p)) {
+                JInternalFrame frame = fws.getJInternalFrame(p);
+                sws.openSingletonWindow((SingletonWindow) p, frame);
+                addJInternalFrame(frame, wi);
+                wss.add(p, (ActionEvent e) -> {
+                    IWindow v = wis.getWindowById(Integer.parseInt(e
+                            .getActionCommand()));
+                    JInternalFrame f = fws.getJInternalFrame(v);
+                    activateJInternalFrame(f);
+                });
+                return p;
+            } else {
+                // La vista est� actualmente abierta
+                JInternalFrame frame = (JInternalFrame) sws
+                        .getFrame((SingletonWindow) p);
+                activateJInternalFrame(frame);
+                wss.setActive(p);
+                return fws.getWindow((JInternalFrame) frame);
+            }
+        } else {
+            if (wi.isModal()) {
+                addJDialog(p);
+            } else {
+                // Se sit�a la vista en la pila de vistas
+                wss.add(p, (ActionEvent e) -> {
+                    IWindow v = wis.getWindowById(Integer.parseInt(e
+                            .getActionCommand()));
+                    JInternalFrame f = fws.getJInternalFrame(v);
+                    activateJInternalFrame(f);
+                });
+                addJInternalFrame(p);
+            }
+
+            return p;
+        }
+    }
+
+    @Override
+    public SingletonWindow getSingletonWindow(Class windowClass, Object model) {
+        JInternalFrame frame = (JInternalFrame) sws.getFrame(windowClass, model);
+        if (frame == null) {
+            return null;
+        }
+        return (SingletonWindow) fws.getWindow((JInternalFrame) frame);
+    }
+
+    @Override
+    public IWindow addCentredWindow(IWindow p) throws SingletonDialogAlreadyShownException {
+        IWindow window = addWindow(p);
+        if (!p.getWindowInfo().isModal()) {
+            centreFrame(window);
+        }
+        return window;
+    }
+
+    @Override
+    public IWindow addWindow(IWindow p, int align) throws SingletonDialogAlreadyShownException {
+        if( p==null) {
+            throw new IllegalArgumentException("p (IWindow) can't bu null.");
+        }
+        boolean singletonPreviouslyAdded = false;
+        WindowInfo wi = wis.getWindowInfo(p);
+
+        if (p instanceof SingletonWindow) {
+            SingletonWindow sw = (SingletonWindow) p;
+            if (sws.registerWindow(sw.getClass(), sw.getWindowModel(), wi)) {
+                singletonPreviouslyAdded = true;
+            }
+        }
+
+        if (!singletonPreviouslyAdded) {
+            Point new_loc = this.getLocationForAlignment(p, align);
+            p.getWindowInfo().setX(new_loc.x);
+            p.getWindowInfo().setY(new_loc.y);
+        }
+
+        IWindow window = addWindow(p);
+        return window;
+    }
+
+    @Override
+    public void move(final IWindow panel, final int x, final int y) {
+        if( panel == null ) {
+            return;
+        }
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { move(panel, x, y); });
+            return;
+        }
+        Component window = fws.getFrame(panel);
+        if (window == null) {
+            return;
+        }
+        Point p = new Point();
+        p.setLocation(x, y);
+        window.setLocation(p);
+    }
+    
+    /**
+     * Centres the Frame in the contentPane of the MainFrame. If the frame can't
+     * be showed completely, it tries to show its top-left corner.
+     *
+     * @author Pablo Piqueras Bartolom�
+     *
+     * @param panel The IWindow to centre
+     */
+    public synchronized void centreFrame(final IWindow panel) {
+        if (panel == null) {
+            return;
+        }
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { centreFrame(panel); });
+            return;
+        }
+        Component window = fws.getFrame(panel);
+        if (window == null) {
+            return;
+        }
+
+        // The top-left square of frame reference
+        Point newReferencePoint = new Point();
+
+        // A reference to the panel where the JInternalFrame will be displayed
+        Container contentPane = ((JFrame) PluginServices.getMainFrame()).getContentPane();
+
+        // Get the NewStatusBar component
+        NewStatusBar newStatusBar = ((NewStatusBar) contentPane.getComponent(1));
+        JDesktopPane jDesktopPane = this.getDesktopPane();
+
+        int visibleWidth = contentPane.getWidth() - contentPane.getX(); // The last substraction is for if there is any menu,... at left
+        int visibleHeight = contentPane.getHeight() - newStatusBar.getHeight() - contentPane.getY() - Math.abs(jDesktopPane.getY() - contentPane.getY()); // The last substraction is for if there is any menu,... at top
+        int freeWidth = visibleWidth - window.getWidth();
+        int freeHeight = visibleHeight - window.getHeight();
+
+        // Calculate the new point reference (Assure that the top-left corner is showed)
+        if (freeWidth < 0) {
+            if (visibleWidth > MinimumXMargin) {
+                newReferencePoint.x = DefaultXMargin;
+            } else {
+                newReferencePoint.x = 0;
+            }
+        } else {
+            newReferencePoint.x = freeWidth / 2;
+        }
+
+        if (freeHeight < 0) {
+            if (visibleHeight > MinimumYMargin) {
+                newReferencePoint.y = DefaultYMargin;
+            } else {
+                newReferencePoint.y = 0;
+            }
+        } else {
+            newReferencePoint.y = freeHeight / 2;
+        }
+
+        // Set the new location for this JInternalFrame
+        window.setLocation(newReferencePoint);
+    }
+
+    public synchronized void alignFrame(final IWindow panel, final int mode) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { alignFrame(panel, mode); });
+            return;
+        }
+        Component window = fws.getFrame(panel);
+        if (window == null) {
+            return;
+        }
+
+        // The top-left square of frame reference
+        Point newReferencePoint = new Point();
+
+        // A reference to the panel where the JInternalFrame will be displayed
+        Container contentPane = ((JFrame) PluginServices.getMainFrame()).getContentPane();
+
+        // Get the NewStatusBar component
+        NewStatusBar newStatusBar = ((NewStatusBar) contentPane.getComponent(1));
+        JDesktopPane jDesktopPane = this.getDesktopPane();
+
+        int visibleWidth = contentPane.getWidth() - contentPane.getX(); // The last substraction is for if there is any menu,... at left
+        int visibleHeight = contentPane.getHeight() - newStatusBar.getHeight() - contentPane.getY() - Math.abs(jDesktopPane.getY() - contentPane.getY()); // The last substraction is for if there is any menu,... at top
+
+//        ---------------------------------------------------------------
+//        |FIRST_LINE_START(23)   PAGE_START(19)     FIRST_LINE_END(24) |
+//        |                                                             |
+//        |                                                             |
+//        |LINE_START(21)           CENTER(10)              LINE_END(22)|
+//        |                                                             |
+//        |                                                             |
+//        |LAST_LINE_START(25)     PAGE_END(20)       LAST_LINE_END(26) |
+//        ---------------------------------------------------------------
+        switch (mode) {
+            case ALIGN_FIRST_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_PAGE_START:
+                newReferencePoint.x = visibleWidth / 2;
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_FIRST_LINE_END:
+                newReferencePoint.x = visibleWidth - window.getWidth() - DefaultXMargin;
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_FIRST_LINE_END_CASCADE:
+                newReferencePoint.x = visibleWidth - window.getWidth() - (int) (DefaultXMargin + (DefaultXMargin * 1.5 * this.alignCounter));
+                newReferencePoint.y = DefaultYMargin + (int) (DefaultYMargin * 1.5 * this.alignCounter);
+                if (++this.alignCounter > 5) {
+                    this.alignCounter = 0;
+                }
+                break;
+
+            case ALIGN_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = visibleHeight / 2;
+                break;
+
+            case ALIGN_LINE_END:
+                newReferencePoint.x = visibleWidth - window.getWidth() - DefaultXMargin;
+                newReferencePoint.y = visibleHeight / 2;
+                break;
+
+            case ALIGN_LAST_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = visibleHeight - window.getHeight() - DefaultYMargin;
+                break;
+
+            case ALIGN_PAGE_END:
+                newReferencePoint.x = visibleWidth / 2;
+                newReferencePoint.y = visibleHeight - window.getHeight() - DefaultYMargin;
+                break;
+
+            case ALIGN_LAST_LINE_END:
+                newReferencePoint.x = visibleWidth - window.getWidth() - DefaultXMargin;
+                newReferencePoint.y = visibleHeight - window.getHeight() - DefaultYMargin;
+                break;
+
+            default:
+            case ALIGN_CENTER:
+                newReferencePoint.x = visibleWidth / 2;
+                newReferencePoint.y = visibleHeight / 2;
+                break;
+        }
+
+        if (newReferencePoint.x < 0) {
+            newReferencePoint.x = DefaultXMargin;
+        }
+        if (newReferencePoint.y < 0) {
+            newReferencePoint.y = DefaultYMargin;
+        }
+        window.setLocation(newReferencePoint);
+    }
+
+    private void addJInternalFrame(JInternalFrame wnd, WindowInfo wi) {
+        wnd.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
+        wnd.addInternalFrameListener(new FrameListener());
+
+        if (wi.isModeless() || wi.isPalette()) {
+            panel.add(wnd, JDesktopPane.PALETTE_LAYER);
+            if (wi.isPalette()) {
+                wnd.setFocusable(false);
+            }
+        } else {
+            panel.add(wnd);
+        }
+        updateFrameProperties(wnd, wi);
+        activateJInternalFrame(wnd);
+        try {
+            wnd.setMaximum(wi.isMaximized());
+        } catch (Exception ex) {
+            String title = "unknow";
+            try {
+                title = wi.getTitle();
+            } catch (Throwable ex2) {
+                // Ignore error.
+            }
+            logger.warn("Can't maximize window (" + title + ").", ex);
+        }
+    }
+
+    private void updateFrameProperties(JInternalFrame frame, WindowInfo wi) {
+        int height, width;
+        if (wi.isMaximized()) {
+            if (wi.getNormalWidth() != -1) {
+                width = wi.getNormalWidth();
+            } else {
+                width = frame.getNormalBounds().width;
+            }
+            if (wi.getNormalHeight() != -1) {
+                height = wi.getNormalHeight();
+            } else {
+                height = frame.getNormalBounds().height;
+            }
+
+            frame.setSize(width, height);
+            frame.setLocation(wi.getNormalX(), wi.getNormalY());
+        } else {
+            if (wi.getWidth() != -1) {
+                width = wi.getWidth();
+            } else {
+                width = frame.getWidth();
+            }
+            if (wi.getHeight() != -1) {
+                height = wi.getHeight();
+            } else {
+                height = frame.getHeight();
+            }
+            frame.setSize(width, height);
+            frame.setLocation(wi.getX(), wi.getY());
+        }
+        frame.setTitle(wi.getTitle());
+        frame.setVisible(wi.isVisible());
+        frame.setResizable(wi.isResizable());
+        frame.setIconifiable(wi.isIconifiable());
+        frame.setMaximizable(wi.isMaximizable());
+        try {
+            frame.setMaximum(wi.isMaximized());
+        } catch (PropertyVetoException e) {
+			// TODO Auto-generated catch block
+            //e.printStackTrace();
+        }
+    }
+
+    private void addJInternalFrame(IWindow p) {
+        WindowInfo wi = wis.getWindowInfo(p);
+
+        JInternalFrame wnd = fws.getJInternalFrame(p);
+
+        if (p instanceof SingletonWindow) {
+            SingletonWindow sv = (SingletonWindow) p;
+            sws.openSingletonWindow(sv, wnd);
+        }
+
+        addJInternalFrame(wnd, wi);
+    }
+
+    private void activateJInternalFrame(JInternalFrame wnd) {
+        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
+        try {
+            wnd.moveToFront();
+            logger.debug("Activando " + wnd.getTitle());
+            wnd.setSelected(true);
+            wnd.setIcon(false);
+        } catch (PropertyVetoException e) {
+            logger.error(e.toString());
+        }
+    }
+
+    @Override
+    public void moveToFrom(IWindow win) {
+        if( win==null ) {
+            return;
+        }
+        Component frame = fws.getFrame(win);
+        if( frame instanceof JInternalFrame ) {
+            activateJInternalFrame((JInternalFrame)frame);
+        }
+    }
+
+    /**
+     * Situa un dialogo modal en el centro de la pantalla
+     *
+     * @param d Dialogo que se quiere situar
+     */
+    private void centerDialog(JDialog d) {
+        int offSetX = d.getWidth() / 2;
+        int offSetY = d.getHeight() / 2;
+        Point o = mainFrame.getLocation();
+        int x = o.x + (mainFrame.getWidth() / 2) - offSetX;
+        int y = o.y + (mainFrame.getHeight() / 2) - offSetY;
+        if( x<0 ) {
+            x = 0;
+        }
+        if( y<0 ) {
+            y=0;
+        }
+        d.setLocation(x,y);
+    }
+
+    private void addJDialog(final IWindow p) {
+        JDialog dlg = fws.getJDialog(p);
+        dlg.addWindowListener(new DialogWindowListener());
+        centerDialog(dlg);
+        dss.pushDialog(dlg);
+
+        dlg.setVisible(wis.getWindowInfo(p).isVisible());
+    }
+
+    @Override
+    public IWindow getActiveWindow() {
+        JInternalFrame jif = panel.getSelectedFrame();
+
+        if (jif != null) {
+            IWindow theWindow = fws.getWindow(jif);
+            if (theWindow == null) {
+                return null;
+            }
+            if (theWindow.getWindowInfo().isPalette()) {
+                return wss.getActiveWindow();
+            } else {
+                return fws.getWindow(jif);
+            }
+        }
+        // return vss.getActiveView();
+
+        return null;
+    }
+
+    @Override
+    public IWindow getFocusWindow() {
+        JInternalFrame jif = panel.getSelectedFrame();
+
+        if (jif != null) {
+            IWindow theView = fws.getWindow(jif);
+            if (theView == null) {
+                return null;
+            }
+            return fws.getWindow(jif);
+        }
+        return null;
+    }
+
+    @Override
+    public void closeWindow(final IWindow p) {
+        if( p==null ) {
+            return;
+        }
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { closeWindow(p); });
+            return;
+        }
+        // Si es un di�logo modal
+        if (p.getWindowInfo().isModal()) {
+            closeJDialog();
+        } else { // Si no es modal se cierra el JInternalFrame
+            closeJInternalFrame(fws.getJInternalFrame(p));
+        }
+    }
+
+    @Override
+    public void closeAllWindows() {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> {closeAllWindows();});
+            return;
+        }
+        ArrayList eliminar = new ArrayList();
+        Iterator i = fws.getWindowIterator();
+
+        while (i.hasNext()) {
+            eliminar.add((IWindow) i.next());
+        }
+
+        for (Iterator iter = eliminar.iterator(); iter.hasNext();) {
+            IWindow vista = (IWindow) iter.next();
+            closeWindow(vista);
+        }
+    }
+
+    @Override
+    public WindowInfo getWindowInfo(IWindow w) {
+        WindowInfo wi = wis.getWindowInfo(w);
+
+        /*
+         * This is done now in vis.getWindowInfo(w)
+         *
+         * JInternalFrame f = fws.getJInternalFrame(w);
+         wi.setX(f.getX());
+         wi.setY(f.getY());
+         wi.setHeight(f.getHeight());
+         wi.setWidth(f.getWidth());
+         // isClosed() doesn't work as (I) expected, why? Using isShowing instead
+         wi.setClosed(!f.isShowing());
+         wi.setNormalBounds(f.getNormalBounds());
+         wi.setMaximized(f.isMaximum());*/
+        return wi;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param dialog
+     * @throws RuntimeException DOCUMENT ME!
+     */
+    private void closeJDialog() {
+        JDialog dlg = dss.popDialog();
+        if (dlg == null) {
+            return;
+        }
+        dlg.setVisible(false);
+
+        IWindow s = fws.getWindow(dlg);
+
+        callWindowClosed(s);
+
+        fws.closeWindow(s);
+
+        // Si es singleton se desasocia el modelo con la vista
+        if (s instanceof SingletonWindow) {
+            sws.closeWindow((SingletonWindow) s);
+        }
+    }
+
+    /**
+     * If <code>window</code> implements IWindowListener, sent it the
+     * windowActivated event.
+     *
+     * @param window The IWindow which has to be notified.
+     */
+    private void callWindowClosed(IWindow window) {
+        if (window instanceof IWindowListener) {
+            ((IWindowListener) window).windowClosed();
+        }
+    }
+
+    /**
+     * If <code>window</code> implements IWindowListener, sent it the
+     * windowActivated event.
+     *
+     * @param window The IWindow which has to be notified.
+     */
+    private void callWindowActivated(IWindow window) {
+//        logger.debug("View '" + window.getWindowInfo().getTitle()
+//               + "' activated (callViewActivated)");
+        if (window instanceof IWindowListener) {
+            ((IWindowListener) window).windowActivated();
+        }
+    }
+
+    private void closeJInternalFrame(final JInternalFrame frame) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { closeJInternalFrame(frame); });
+            return;
+        }
+        try {
+            IWindow s = (IWindow) fws.getWindow(frame);
+
+            frame.setClosed(true);
+            callWindowClosed(s);
+        } catch (PropertyVetoException e) {
+            logger.warn("Not compatible with property veto's. Use ViewInfo instead.",e);
+        }
+    }
+
+    @Override
+    public void initialize() {
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if ("window-cascade".equalsIgnoreCase(actionCommand)) {
+            logger.info("action window-cascade not implemented.");
+
+        } else if ("window-tile".equalsIgnoreCase(actionCommand)) {
+            logger.info("action window-tile not implemented.");
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return false;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    @Override
+    public void setWaitCursor() {
+        if (mainFrame != null) {
+            if (!SwingUtilities.isEventDispatchThread()) {
+                SwingUtilities.invokeLater(() -> { setWaitCursor(); });
+                return;
+            }
+            glassPane.setVisible(true);
+            lastCursor = mainFrame.getCursor();
+            dss.setWaitCursor();
+            glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+        }
+    }
+
+    @Override
+    public void restoreCursor() {
+        if (mainFrame != null) {
+            if (!SwingUtilities.isEventDispatchThread()) {
+                SwingUtilities.invokeLater(() -> { restoreCursor(); });
+                return;
+            }
+            glassPane.setVisible(false);
+            dss.restoreCursor();
+            glassPane.setCursor(lastCursor);
+        }
+    }
+
+    /**
+     * Listener para los eventos de cerrado de los dialogos. Tiene su razon
+     * de ser en que los dialogos han de devolverse al pool cuando se cierran
+     *
+     * @author gvSIG Team
+     */
+    public class DialogWindowListener extends WindowAdapter {
+
+        /**
+         * Captura el evento de cerrado de los dialogos con el fin de realizar
+         * tareas de mantenimiento
+         *
+         * @param e evento
+         */
+        @Override
+        public void windowActivated(WindowEvent e) {
+            IWindow window = fws.getWindow((Component) e.getSource());
+            callWindowActivated(window);
+
+        }
+
+        /**
+         * Captura el evento de cerrado de los di�logos con el fin de realizar
+         * tareas de mantenimiento
+         *
+         * @param e evento
+         */
+        @Override
+        public void windowClosing(WindowEvent e) {
+            closeJDialog();
+        }
+    }
+
+    public class FrameListener implements InternalFrameListener {
+
+        @Override
+        public void internalFrameActivated(InternalFrameEvent e) {
+            // logger.debug("internalFrameActivated " +
+            // e.getInternalFrame().getTitle());
+
+            // activatedInternalFramesStack.push(e.getInternalFrame());
+            IWindow panel = fws.getWindow((JInternalFrame) e.getSource());
+
+            WindowInfo wi = wis.getWindowInfo(panel);
+            if (wi.isPalette()) {
+                return;
+            }
+
+            wss.setActive(panel);
+
+            JInternalFrame frame = fws.getJInternalFrame(panel);
+
+            if (wi.isMaximizable()) {
+                frame.setMaximizable(true);
+            }
+            if (!frame.isMaximizable() && frame.isMaximum()) {
+                try {
+                    frame.setMaximum(false);
+                } catch (PropertyVetoException e1) {
+                }
+            }
+            mainFrame.enableControls();
+            if (wi.getSelectedTools() == null) {
+                // this is the first time this window is activated
+                wi.setSelectedTools(new HashMap(mainFrame.getInitialSelectedTools()));
+            }
+            mainFrame.setSelectedTools(wi.getSelectedTools());
+            callWindowActivated(panel);
+
+        }
+
+        @Override
+        public void internalFrameClosed(InternalFrameEvent e) {
+        }
+
+        @Override
+        public void internalFrameClosing(InternalFrameEvent e) {
+            // Se elimina la memoria del JInternalFrame si no es ALWAYS_LIVE
+            // logger.debug("internalFrameClosing " +
+            // e.getInternalFrame().getTitle());
+
+            JInternalFrame c = (JInternalFrame) e.getSource();
+            try {
+                ToolsWindowManager.Window wwin = (ToolsWindowManager.Window) c.getContentPane().getComponent(0);
+                wwin.fireClosingWindow();
+            } catch (Throwable ex) {
+
+            }
+
+            WindowInfo wi = wis.getWindowInfo((IWindow) fws.getWindow(c));
+
+            IWindow win = fws.getWindow(c);
+            callWindowClosed(win);
+//            boolean alwaysLive;
+            if (win instanceof SingletonWindow) {
+                sws.closeWindow((SingletonWindow) win);
+            }
+
+            fws.closeWindow(win);
+
+            panel.remove(c);
+
+            wss.remove(win);
+
+            if (!wi.isPalette()) {
+                mainFrame.enableControls();
+            }
+            panel.repaint();
+
+            // Para activar el JInternalFrame desde la que hemos
+            // abierto la ventana que estamos cerrando
+            IWindow lastWindow = wss.getActiveWindow();
+            // La activamos
+            if (lastWindow != null) {
+                logger.debug(PluginServices.getText(this, "Devuelvo_el_foco_a_") + lastWindow.getWindowInfo().getTitle());
+                JInternalFrame frame = fws.getJInternalFrame(lastWindow);
+                try {
+                    frame.setSelected(true);
+                } catch (PropertyVetoException e1) {
+                    logger.debug("Can0t activate frame",e1);
+                }
+                // addView(lastView);
+            }
+
+        }
+
+        @Override
+        public void internalFrameDeactivated(InternalFrameEvent e) {
+            // logger.debug("internalDeActivated " +
+            // e.getInternalFrame().getTitle());
+            JInternalFrame c = (JInternalFrame) e.getSource();
+            IWindow win = fws.getWindow(c);
+            if (win != null) {
+                WindowInfo wi = wis.getWindowInfo(win);
+                if (wi.isPalette()) {
+                    return;
+                }
+
+            }
+
+        }
+
+        @Override
+        public void internalFrameDeiconified(InternalFrameEvent e) {
+            mainFrame.enableControls();
+        }
+
+        @Override
+        public void internalFrameIconified(InternalFrameEvent e) {
+            mainFrame.enableControls();
+        }
+
+        @Override
+        public void internalFrameOpened(InternalFrameEvent e) {
+            // logger.debug("internalFrameOpened. Source= " +
+            // e.getSource().toString());
+        }
+    }
+
+
+    @Override
+    public boolean closeSingletonWindow(Class viewClass, Object model) {
+        JInternalFrame frame = (JInternalFrame) sws.getFrame(viewClass, model);
+        if (frame == null) {
+            return false;
+        }
+        closeJInternalFrame(frame);
+        return true;
+    }
+
+
+    @Override
+    public boolean closeSingletonWindow(Object model) {
+        if( model == null ) {
+            return false;
+        }
+        JInternalFrame[] frames = (JInternalFrame[]) sws.getFrames(model);
+        if (frames.length == 0) {
+            return false;
+        }
+        for (JInternalFrame frame : frames) {
+            closeJInternalFrame(frame);
+        }
+        return true;
+    }
+
+    @Override
+    public IWindow[] getAllWindows() {
+        if (fws == null) {
+            return null;
+        }
+        ArrayList windows = new ArrayList();
+        Iterator i = fws.getWindowIterator();
+
+        while (i.hasNext()) {
+            windows.add((IWindow) i.next());
+        }
+        return (IWindow[]) windows.toArray(new IWindow[0]);
+    }
+
+    @Override
+    public IWindow[] getOrderedWindows() {
+        TreeMap windows = new TreeMap();
+        Iterator winIterator = fws.getWindowIterator();
+
+        Component frame;
+        IWindow win;
+        /**
+         * The order of the window in the JDesktopPane. Smaller numbers are
+         * closer to the foreground.
+         */
+        int zPosition;
+        while (winIterator.hasNext()) {
+            win = (IWindow) winIterator.next();
+            frame = fws.getFrame(win);
+            zPosition = panel.getPosition(frame);
+
+            if (zPosition == -1) {
+                /*
+                 * This is a minimized window.
+                 * It will keep the -1 (first position) if it does not have the focus.
+                 * (I think this never happens. Even if visually the minimized window
+                 * appears selected, it does not have the focus), so minimized
+                 * windows will lose the first position.
+                 */
+                if (!frame.isFocusOwner()) {
+                    zPosition = 1000;
+                }
+            }
+            int layer = panel.getLayer(frame);
+
+            if (!(frame instanceof JDialog)) { //JDialogs are not in inside the LayeredPane
+                // flatten all the layers
+                if (layer == JLayeredPane.DEFAULT_LAYER) {
+                    zPosition += 50000;
+                } else if (layer == JLayeredPane.PALETTE_LAYER) {
+                    zPosition += 40000;
+                } else if (layer == JLayeredPane.MODAL_LAYER) {
+                    zPosition += 30000;
+                } else if (layer == JLayeredPane.POPUP_LAYER) {
+                    zPosition += 20000;
+                } else if (layer == JLayeredPane.DRAG_LAYER) {
+                    zPosition += 10000;
+                }
+            }
+            windows.put(zPosition, win);
+        }
+        winIterator = windows.values().iterator();
+        ArrayList winList = new ArrayList();
+        while (winIterator.hasNext()) {
+            winList.add(winIterator.next());
+        }
+
+        return (IWindow[]) winList.toArray(new IWindow[0]);
+    }
+
+    @Override
+    public void setMaximum(final IWindow v, final boolean bMaximum) throws PropertyVetoException {
+        if( v==null ) {
+            return;
+        }
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> {
+                try {
+                    setMaximum(v, bMaximum);
+                } catch (PropertyVetoException e) {
+                    logger.info("Error not in event dispatch thread", e);
+                }
+            });
+            return;
+        }
+        JInternalFrame f = fws.getJInternalFrame(v);
+        f.setMaximum(bMaximum);
+    }
+
+    @Override
+    public void changeWindowInfo(IWindow w, WindowInfo wi) {
+        JInternalFrame f = fws.getJInternalFrame(w);
+        f.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
+        JDesktopPane pnl = f.getDesktopPane();
+        pnl.remove(f);
+        int width;
+        int height;
+        if (wi.getWidth() != -1) {
+            width = wi.getWidth();
+        } else {
+            width = f.getWidth();
+        }
+        if (wi.getHeight() != -1) {
+            height = wi.getHeight();
+        } else {
+            height = f.getHeight();
+        }
+        f.setSize(new Dimension(width, height));
+        f.setLocation(wi.getX(), wi.getY());
+        if (wi.isPalette()) {
+            pnl.add(f, JDesktopPane.PALETTE_LAYER);
+            f.setFocusable(false);
+        } else {
+            pnl.add(f, JDesktopPane.DEFAULT_LAYER);
+            f.setFocusable(true);
+            if (wi.isClosed()) {
+                closeWindow(w);
+            }
+        }
+
+        if (wi.isMaximized()) {
+            try {
+                f.setMaximum(true);
+            } catch (PropertyVetoException e) {
+    			// TODO Auto-generated catch block
+                //e.printStackTrace();
+            }
+            f.setNormalBounds(wi.getNormalBounds());
+        }
+        activateJInternalFrame(f);
+    }
+
+    @Override
+    public void refresh(final IWindow win) {
+        if( win == null ) {
+            return;
+        }
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> { refresh(win); });
+            return;
+        }
+        Component frame = fws.getFrame(win);
+        if (frame != null) {
+            frame.setVisible(true);
+        }
+    }
+
+    @Override
+    public void setBackgroundImage(ImageIcon image, String typeDesktop) {
+        this.image = image;
+        this.typeDesktop = typeDesktop;
+
+    }
+
+    @Override
+    public void showWindow(final JPanel panel, final String title, final MODE mode) {
+        // This prepare a default JPanel that implements IWindow
+        // for the passed panel and call to the addWindow
+        // to show it.
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> {showWindow(panel, title, mode); });
+            return;
+        }
+        ToolsSwingLocator.getWindowManager().showWindow(panel, title, mode);
+    }
+
+    @Override
+    public IWindow getWindow(JPanel panel){
+//        Iterator<IWindow> i = fws.getWindowIterator();
+//
+//        while (i.hasNext()) {
+//            IWindow window = (IWindow) i.next();
+//            if(window instanceof JPanel){
+//                JPanel p = (JPanel)window;
+//                if(p.getComponentCount()==1){
+//                    if(p.getComponent(0) == panel){
+//                        return window;
+//                    }
+//                }
+//            }
+//        }
+//        return null;
+        Component component = panel;
+        while( component!=null ) {
+            if( component instanceof IWindow ) {
+                return (IWindow) component;
+            }
+            component = component.getParent();
+        }
+        return null;
+    }
+
+    private Point getLocationForAlignment(IWindow panel, int mode) {
+
+        // The top-left square of frame reference
+        Point newReferencePoint = new Point();
+
+        // A reference to the panel where the JInternalFrame will be displayed
+        Container contentPane = ((JFrame) PluginServices.getMainFrame()).getContentPane();
+
+        // Get the NewStatusBar component
+        NewStatusBar newStatusBar = ((NewStatusBar) contentPane.getComponent(1));
+
+        JDesktopPane dpane = this.getDesktopPane();
+        // The last substraction is for case when there is any menu,... at left
+        int visibleWidth = contentPane.getWidth() - contentPane.getX();
+        // The last substraction is for case when there is any menu,... at top
+        int visibleHeight = contentPane.getHeight() - newStatusBar.getHeight() - contentPane.getY() - Math.abs(dpane.getY() - contentPane.getY());
+
+//        ---------------------------------------------------------------
+//        |FIRST_LINE_START(23)   PAGE_START(19)     FIRST_LINE_END(24) |
+//        |                                                             |
+//        |                                                             |
+//        |LINE_START(21)           CENTER(10)              LINE_END(22)|
+//        |                                                             |
+//        |                                                             |
+//        |LAST_LINE_START(25)     PAGE_END(20)       LAST_LINE_END(26) |
+//        ---------------------------------------------------------------
+        int win_h = panel.getWindowInfo().getHeight();
+        int win_w = panel.getWindowInfo().getWidth();
+
+        switch (mode) {
+            case ALIGN_FIRST_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_PAGE_START:
+                newReferencePoint.x = (visibleWidth / 2) - (win_w / 2);
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_FIRST_LINE_END:
+                newReferencePoint.x = visibleWidth - win_w - DefaultXMargin;
+                newReferencePoint.y = DefaultYMargin;
+                break;
+
+            case ALIGN_FIRST_LINE_END_CASCADE:
+                newReferencePoint.x = visibleWidth - win_w - (int) (DefaultXMargin + (DefaultXMargin * 1.5 * this.alignCounter));
+                newReferencePoint.y = DefaultYMargin + (int) (DefaultYMargin * 1.5 * this.alignCounter);
+                if (++this.alignCounter > 5) {
+                    this.alignCounter = 0;
+                }
+                break;
+
+            case ALIGN_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = (visibleHeight / 2) - (win_h / 2);
+                break;
+
+            case ALIGN_LINE_END:
+                newReferencePoint.x = visibleWidth - win_w - DefaultXMargin;
+                newReferencePoint.y = (visibleHeight / 2) - (win_h / 2);
+                break;
+
+            case ALIGN_LAST_LINE_START:
+                newReferencePoint.x = DefaultXMargin;
+                newReferencePoint.y = visibleHeight - win_h - DefaultYMargin;
+                break;
+
+            case ALIGN_PAGE_END:
+                newReferencePoint.x = (visibleWidth / 2) - (win_w / 2);
+                newReferencePoint.y = visibleHeight - win_h - DefaultYMargin;
+                break;
+
+            case ALIGN_LAST_LINE_END:
+                newReferencePoint.x = visibleWidth - win_w - DefaultXMargin;
+                newReferencePoint.y = visibleHeight - win_h - DefaultYMargin;
+                break;
+
+            default:
+            case ALIGN_CENTER:
+                newReferencePoint.x = (visibleWidth / 2) - (win_w / 2);
+                newReferencePoint.y = (visibleHeight / 2) - (win_h / 2);
+                break;
+        }
+
+        if (newReferencePoint.x < 0) {
+            newReferencePoint.x = DefaultXMargin;
+        }
+        if (newReferencePoint.y < 0) {
+            newReferencePoint.y = DefaultYMargin;
+        }
+
+        return newReferencePoint;
+    }
+
+    @Override
+    public void setLocale(Locale locale) {
+        IWindow[] win = this.getAllWindows();
+        if (win == null) {
+            return;
+        }
+        for (IWindow win1 : win) {
+            if (win1 instanceof Component) {
+                try {
+                    ((Component) win1).setLocale(locale);
+                }catch (Exception ex) {
+                    // Ignore errors and try others windows.
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isModalDialogShowing() {
+        Window[] windows = Window.getWindows();
+        if (windows != null) { // don't rely on current implementation, which at least returns [0].
+            for (Window w : windows) {
+                if (w.isShowing() && w instanceof Dialog && ((Dialog) w).isModal()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/NewSkin.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/FrameWindowSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/FrameWindowSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/FrameWindowSupport.java	(revision 46118)
@@ -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.coreplugin.mdiManager;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JPanel;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.ToolsWindowManager;
+
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.coreplugin.mdiManager.frames.ExternalFrame;
+import org.gvsig.coreplugin.mdiManager.frames.IFrame;
+import org.gvsig.coreplugin.mdiManager.frames.InternalFrame;
+import org.gvsig.i18n.Messages;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ *
+ */
+public class FrameWindowSupport {
+    private static Logger logger = LoggerFactory.getLogger(FrameWindowSupport.class);
+            
+    private Map frameView = new HashMap();
+    private Map<IWindow,Object> viewFrame = new HashMap();
+    private Image icon;
+    private WindowInfoSupport vis;
+    private JFrame mainFrame;
+
+    /**
+     * Creates a new FrameViewSupport object.
+     *
+     * @param i DOCUMENT ME!
+     */
+    public FrameWindowSupport(MDIFrame mainFrame) {
+    	this.mainFrame = mainFrame;
+        icon = mainFrame.getIconImage();
+    }
+
+    public Iterator getWindowIterator(){
+    	return viewFrame.keySet().iterator();
+    }
+
+    public boolean contains(IWindow v){
+    	return viewFrame.containsKey(v);
+    }
+
+	/**
+	 * @param wnd
+	 * @return
+	 */
+	public boolean contains(JInternalFrame wnd) {
+		return frameView.containsValue(wnd);
+	}
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param p DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public JDialog getJDialog(IWindow p) {
+        JDialog dlg = (JDialog) viewFrame.get(p);
+
+        if (dlg == null) {
+            ExternalFrame nuevo = new ExternalFrame(mainFrame);
+
+            nuevo.getContentPane().add((JPanel) p);
+            
+            WindowInfo vi = vis.getWindowInfo(p);
+            nuevo.setSize(getWidth(p, vi), getHeight(p, vi) + 30);
+            nuevo.setTitle(vi.getTitle());
+            nuevo.setResizable(vi.isResizable());
+            nuevo.setMinimumSize(vi.getMinimumSize());
+            if( vi.needPack() ) {
+                nuevo.pack();
+            }
+            viewFrame.put(p, nuevo);
+            frameView.put(nuevo, p);
+
+            nuevo.setModal(vi.isModal());
+            closeOnHide(p);
+            return nuevo;
+        } else {
+            return dlg;
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param p DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public JInternalFrame getJInternalFrame(IWindow p) {
+        JInternalFrame frame = null;
+        try {
+            for( Map.Entry<IWindow,Object> entry : viewFrame.entrySet()) {
+                if( entry.getKey() instanceof ToolsWindowManager.Window )  {
+                    JComponent contents = ((ToolsWindowManager.Window)entry.getKey()).getContents();
+                    if( p == contents ) {
+                        frame = (JInternalFrame) entry.getValue();
+                    }
+                }
+            }
+        } catch(Exception ex) {
+            logger.warn("Can't get JInternalFrame from IWindow ("+p.getWindowInfo().getTitle()+").",ex);
+        }
+    	if( frame == null ) {
+            frame = (JInternalFrame) viewFrame.get(p);
+        }
+
+        if (frame == null) {
+        	//ViewInfo vi = vis.getViewInfo(p);
+            JInternalFrame nuevo = createJInternalFrame(p);
+            viewFrame.put(p, nuevo);
+            frameView.put(nuevo, p);
+
+            return nuevo;
+        } else {
+            return frame;
+        }
+    }
+    
+    /**
+     * Gets the frame associated to the provided IWindow panel.
+     * The frame will usually be a JInternalFrame or a JDialog.
+     *
+     * @param panel The IWindow panel whose frame wants to be retrieved.
+     *
+     * @return The associated frame, it will usually be a JInternalFrame or
+     * a JDialog.
+     */
+    public Component getFrame(IWindow panel) {
+    	Object object = viewFrame.get(panel);
+    	if (object!=null && object instanceof Component) {
+    		return (Component) object;
+    	}
+    	else {
+            throw new RuntimeException(Messages.getText("window_not_found")
+                + ": " + panel.getWindowInfo().getTitle());
+    	}
+    }
+
+    public JInternalFrame createJInternalFrame(IWindow p)
+    {
+        WindowInfo wi = vis.getWindowInfo(p);
+        JInternalFrame nuevo = new InternalFrame();
+        if (icon != null){
+            nuevo.setFrameIcon(new ImageIcon(icon));
+        }
+        
+        nuevo.getContentPane().add((JPanel) p);
+        nuevo.setClosable(!wi.isNotClosable());
+        nuevo.setSize(getWidth(p, wi), getHeight(p, wi));
+        nuevo.setTitle(wi.getTitle());
+        nuevo.setVisible(wi.isVisible());
+        nuevo.setResizable(wi.isResizable());
+        nuevo.setIconifiable(wi.isIconifiable());
+        nuevo.setMaximizable(wi.isMaximizable());
+        nuevo.setLocation(wi.getX(), wi.getY());
+        nuevo.setMinimumSize(wi.getMinimumSize());
+        closeOnHide(p);
+        nuevo.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
+        return nuevo;
+    }
+
+    private void closeOnHide(final IWindow p) {
+        ((JPanel)p).addComponentListener(new ComponentListener() {
+
+            @Override
+            public void componentResized(ComponentEvent ce) {
+            }
+
+            @Override
+            public void componentMoved(ComponentEvent ce) {
+            }
+
+            @Override
+            public void componentShown(ComponentEvent ce) {
+            }
+
+            @Override
+            public void componentHidden(ComponentEvent ce) {
+                PluginServices.getMDIManager().closeWindow(p);
+            }
+        });
+        
+    }
+    
+    public IWindow getWindow(Component dlg){
+    	return (IWindow) frameView.get(dlg);
+    }
+
+    public void closeWindow(IWindow v){
+    	Object c = viewFrame.remove(v);
+    	frameView.remove(c);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     * @param x DOCUMENT ME!
+     */
+    public void setX(IWindow win, int x) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+    	if (frame != null) {
+    	    frame.setX(x);
+    	}
+    	
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     * @param y DOCUMENT ME!
+     */
+    public void setY(IWindow win, int y) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+        if (frame != null) {
+            frame.setY(y);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     * @param height DOCUMENT ME!
+     */
+    public void setHeight(IWindow win, int height) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+    	frame.setHeight(height);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     * @param width DOCUMENT ME!
+     */
+    public void setWidth(IWindow win, int width) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+    	frame.setWidth(width);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     * @param title DOCUMENT ME!
+     */
+    public void setTitle(IWindow win, String title) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+    	frame.setTitle(title);
+    }
+    
+	/**
+	 * Sets the minimum allowed size for the provided window.
+	 * 
+	 * @param sw
+	 * @param minSize
+	 */
+	public void setMinimumSize(IWindow win, Dimension minSize) {
+    	IFrame frame = (IFrame) viewFrame.get(win);
+    	frame.setMinimumSize(minSize);
+	}
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param vis The vis to set.
+     */
+    public void setVis(WindowInfoSupport vis) {
+        this.vis = vis;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private int getWidth(IWindow v) {
+        WindowInfo vi = vis.getWindowInfo(v);
+
+        if (vi.getWidth() == -1) {
+            JPanel p = (JPanel) v;
+
+            return p.getSize().width;
+        } else {
+            return vi.getWidth();
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private int getWidth(IWindow v, WindowInfo wi) {
+        if (wi.getWidth() == -1) {
+            JPanel p = (JPanel) v;
+
+            return p.getSize().width;
+        } else {
+            return wi.getWidth();
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private int getHeight(IWindow v) {
+        WindowInfo vi = vis.getWindowInfo(v);
+
+        if (vi.getHeight() == -1) {
+            JPanel p = (JPanel) v;
+
+            return p.getSize().height;
+        } else {
+            return vi.getHeight();
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param v DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private int getHeight(IWindow v, WindowInfo wi) {
+        if (wi.getHeight() == -1) {
+            JPanel p = (JPanel) v;
+
+            return p.getSize().height;
+        } else {
+            return wi.getHeight();
+        }
+    }
+
+    public void updateWindowInfo(IWindow win, WindowInfo windowInfo) {
+    	Object o = viewFrame.get(win);
+    	if (windowInfo!=null && o!=null) {
+    		if (o instanceof JComponent) {
+        		JComponent component = (JComponent) o;
+        		windowInfo.updateWidth(component.getWidth());
+				windowInfo.updateHeight(component.getHeight());
+				windowInfo.updateX(component.getX());
+				windowInfo.updateY(component.getY());
+				windowInfo.updateClosed(!component.isShowing());
+				if (component instanceof JInternalFrame) {
+					JInternalFrame iframe = (JInternalFrame) component;
+					windowInfo.updateNormalBounds(iframe.getNormalBounds());
+					windowInfo.updateMaximized(iframe.isMaximum());
+				}
+    		}
+    	}
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/FrameWindowSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowInfoSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowInfoSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowInfoSupport.java	(revision 46118)
@@ -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.coreplugin.mdiManager;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import org.gvsig.andami.plugins.PluginClassLoader;
+import org.gvsig.andami.ui.mdiFrame.MainFrame;
+import org.gvsig.andami.ui.mdiFrame.NoSuchMenuException;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+
+/**
+ * This class listens to changes in WindowInfo objects, and reflects this
+ * changes in the associated window.
+ */
+public class WindowInfoSupport {
+	private static int serialId = 0;
+	
+	/**
+	 * Support class which associates Frames and Windows
+	 */
+	private FrameWindowSupport fws;
+
+	// Correspondencias entre las ventanas y su informacion
+	/**
+	 * key: IWindow, value: WindowInfo
+	 */
+	private Hashtable viewInfo = new Hashtable();
+	/**
+	 * key: WindowInfo, value: IWindow
+	 */
+	private Hashtable infoView = new Hashtable();
+	private WindowPropertyChangeListener windowInfoListener = new WindowPropertyChangeListener();
+	private SingletonWindowSupport sws;
+	private MainFrame mdiFrame;
+
+	/**
+	 * Creates a new ViewInfoSupport object.
+	 *
+	 * @param frame DOCUMENT ME!
+	 * @param fvs DOCUMENT ME!
+	 * @param svs
+	 */
+	public WindowInfoSupport(MainFrame frame, FrameWindowSupport fvs,
+		SingletonWindowSupport svs) {
+		this.fws = fvs;
+		this.sws = svs;
+		this.mdiFrame = frame;
+	}
+
+	/**
+	 * Devuelve la vista cuyo identificador es el parametro
+	 *
+	 * @param id Identificador de la vista que se quiere obtener
+	 *
+	 * @return La vista o null si no hay ninguna vista con ese identificador
+	 */
+	public IWindow getWindowById(int id) {
+		Enumeration en = infoView.keys();
+
+		while (en.hasMoreElements()) {
+			WindowInfo vi = (WindowInfo) en.nextElement();
+
+			if (vi.getId() == id) {
+				return (IWindow) infoView.get(vi);
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param w DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public synchronized WindowInfo getWindowInfo(IWindow w) {
+		WindowInfo wi = (WindowInfo) viewInfo.get(w);
+
+		if (wi != null) {
+			fws.updateWindowInfo(w, wi);
+		}
+		else {
+			wi = w.getWindowInfo();
+
+			//Para el t�tulo
+			if (wi.getHeight() != -1) {
+				wi.setHeight(wi.getHeight() + 40);
+			}
+
+			wi.addPropertyChangeListener(windowInfoListener);
+			viewInfo.put(w, wi);
+			infoView.put(wi, w);
+			wi.setId(serialId++);
+		}
+
+		return wi;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param p DOCUMENT ME!
+	 */
+	public void deleteWindowInfo(IWindow p) {
+		WindowInfo vi = (WindowInfo) viewInfo.remove(p);
+		infoView.remove(vi);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @author $author$
+	 * @version $Revision: 39115 $
+	 */
+	public class WindowPropertyChangeListener implements PropertyChangeListener {
+		/**
+		 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+		 */
+		public void propertyChange(PropertyChangeEvent evt) {
+			WindowInfo winInfo = (WindowInfo) evt.getSource();
+			IWindow win = (IWindow) infoView.get(winInfo);
+
+			if (win instanceof SingletonWindow) {
+				SingletonWindow sw = (SingletonWindow) win;
+
+				if (evt.getPropertyName().equals("x")) {
+					sws.setX(sw, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("y")) {
+					sws.setY(sw, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("height")) {
+					sws.setHeight(sw, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("width")) {
+					sws.setWidth(sw, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("maximized")) {
+					sws.setMaximized(sw, ((Boolean) evt.getNewValue()).booleanValue());
+				} else if (evt.getPropertyName().equals("normalBounds")) {
+					sws.setNormalBounds(sw, (Rectangle) evt.getNewValue());
+				} else if (evt.getPropertyName().equals("minimumSize")) {
+					sws.setMinimumSize(sw, (Dimension) evt.getNewValue());
+				} else if (evt.getPropertyName().equals("title")) {
+					sws.setTitle(sw, (String) evt.getNewValue());
+
+					try {
+						mdiFrame.changeMenuName(new String[] {
+								"Window", (String) evt.getOldValue()
+						}, (String) evt.getNewValue(),
+						(PluginClassLoader) getClass().getClassLoader());
+					} catch (NoSuchMenuException e) {
+						/*
+						 * No se hace nada porque puede modificarse el t�tulo de
+						 * una ventana antes de ser a�adida a Andami
+						 */
+					}
+				}
+			} else {
+				if (evt.getPropertyName().equals("x")) {
+					fws.setX(win, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("y")) {
+					fws.setY(win, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("height")) {
+					fws.setHeight(win, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("width")) {
+					fws.setWidth(win, ((Integer) evt.getNewValue()).intValue());
+				} else if (evt.getPropertyName().equals("minimumSize")) {
+					fws.setMinimumSize(win, (Dimension) evt.getNewValue());
+				} else if (evt.getPropertyName().equals("title")) {
+					fws.setTitle(win, (String) evt.getNewValue());
+					try{
+						mdiFrame.changeMenuName(new String[] {
+								"Ventana", (String) evt.getOldValue()
+						}, (String) evt.getNewValue(),
+						(PluginClassLoader) getClass().getClassLoader());
+					} catch (NoSuchMenuException e) {
+						/*
+						 * No se hace nada porque puede modificarse el t�tulo de
+						 * una ventana antes de ser a�adida a Andami
+						 */
+					}
+				}
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/WindowInfoSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/DialogStackSupport.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/DialogStackSupport.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/DialogStackSupport.java	(revision 46118)
@@ -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.coreplugin.mdiManager;
+
+import java.awt.Cursor;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.JDialog;
+
+import org.gvsig.andami.ui.mdiFrame.MDIFrame;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ *
+ */
+public class DialogStackSupport{
+    /** log */
+    private static Logger logger = LoggerFactory.getLogger(DialogStackSupport.class.getName());
+
+    /** Pila de di�logos modales mostrados */
+    private ArrayList dialogStack = new ArrayList(0);
+
+    private ArrayList dialogCursors = new ArrayList(0);
+
+    public DialogStackSupport(MDIFrame frame){
+    }
+
+    public void pushDialog(JDialog dlg){
+    	dialogStack.add(dlg);
+    }
+
+    public JDialog popDialog(){
+    	int dialogStackSize=dialogStack.size();
+    	if (dialogStackSize<1)
+    		return null;
+    	return (JDialog) dialogStack.remove(dialogStackSize - 1);
+    }
+
+	/**
+	 * @return
+	 */
+	public void setWaitCursor() {
+        dialogCursors.clear();
+		for (Iterator iter = dialogStack.iterator(); iter.hasNext();) {
+			JDialog dlg = (JDialog) iter.next();
+            dialogCursors.add(dlg.getCursor());
+			dlg.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ 	        dlg.getGlassPane().setVisible(true);
+ 	   }
+	}
+
+	/**
+	 *
+	 */
+	public void restoreCursor() {
+		for (Iterator iter = dialogStack.iterator(); iter.hasNext();) {
+			JDialog dlg = (JDialog) iter.next();
+
+            // TODO: RECUPERAR EL CURSOR
+            dlg.setCursor(null);
+		    dlg.getGlassPane().setVisible(false);
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/mdiManager/DialogStackSupport.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/configExtensions/ConfigPlugins.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/configExtensions/ConfigPlugins.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/configExtensions/ConfigPlugins.java	(revision 46118)
@@ -0,0 +1,774 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.coreplugin.configExtensions;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.swing.BoxLayout;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.config.generate.Extension;
+import org.gvsig.andami.plugins.config.generate.Extensions;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.utils.GenericFileFilter;
+
+/**
+ * Di�logo de Configuraci�n de ANDAMI.
+ *
+ * @author Vicente Caballero Navarro
+ * @deprecated
+ */
+public class ConfigPlugins extends JPanel implements IWindow {
+	private JTree jTree = null;
+	private JPanel jPanel = null; //  @jve:decl-index=0:visual-constraint="113,10"
+	private JPanel jPanel1 = null;
+	private JSplitPane jSplitPane = null;
+	private JCheckBox chbActivar = null;
+	private JTextField jTextField = null;
+	private JPanel pGeneral = null;
+	private JButton jButton = null;
+	private JPanel pOpciones = null;
+	private JTabbedPane jTabbedPane1 = null;
+	private JPanel pDescripcion = null;
+	private JPanel pDirectorio = null;
+	private JPanel jPanel2 = null;
+	private JScrollPane jScrollPane1 = null;
+	private WindowInfo m_viewinfo = null;
+	private JPanel pBotones = null;
+	private JButton bAceptar = null;
+	private JButton bCancelar = null;
+	private HashMap listExt = new HashMap();
+	private HashMap listPlugins = new HashMap();
+	private JTextArea taDescripcion = null;
+	private JScrollPane jScrollPane = null;
+	private Extension ext = null;
+	private JTextField jTextField1 = null;
+	private JLabel jLabel = null;
+	private JPanel jPanel3 = null;
+
+	private JPanel jPanel4 = null;
+	private JLabel jLabel1 = null;
+	private JComboBox cmbIdioma = null;
+	/**
+	 * This is the default constructor
+	 */
+	public ConfigPlugins() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * A�ade los nodes al arbol que representa a todos los plugins y extesiones que hay.
+	 *
+	 * @param top
+	 */
+	private void addNodes(DefaultMutableTreeNode top) {
+		DefaultMutableTreeNode nameExtension = null;
+		DefaultMutableTreeNode namePlugin = null;
+		HashMap pc = Launcher.getPluginConfig();
+		ArrayList array = new ArrayList();
+		Iterator iter = pc.values().iterator();
+
+		while (iter.hasNext()) {
+			array.add(((PluginConfig) iter.next()).getExtensions());
+		}
+
+		Extensions[] exts = (Extensions[]) array.toArray(new Extensions[0]);
+
+		for (int i = 0; i < exts.length; i++) {
+			if (exts[i].getSkinExtension() != null) {
+			}
+
+			for (int j = 0; j < exts[i].getExtensionCount(); j++) {
+				Extension ext = exts[i].getExtension(j);
+				String pn = null;
+				String sExt = ext.getClassName().toString();
+				pn = sExt.substring(0, sExt.lastIndexOf("."));
+				namePlugin = new DefaultMutableTreeNode(pn);
+
+				if (!listPlugins.containsKey(namePlugin.getUserObject()
+														   .toString())) {
+					listPlugins.put(namePlugin.getUserObject().toString(),
+						namePlugin);
+					top.add(namePlugin);
+					nameExtension = new DefaultMutableTreeNode(sExt.substring(sExt.lastIndexOf(
+									".") + 1, sExt.length())); //replaceFirst(namePlugin.getUserObject().toString()+".",""));
+					listExt.put(sExt, ext);
+					namePlugin.add(nameExtension);
+				} else {
+					nameExtension = new DefaultMutableTreeNode(sExt.substring(sExt.lastIndexOf(
+									".") + 1, sExt.length())); //sExt.replaceFirst(namePlugin.getUserObject().toString()+".",""));
+					listExt.put(sExt, ext);
+					((DefaultMutableTreeNode) listPlugins.get(namePlugin.getUserObject()
+																		.toString())).add(nameExtension);
+				}
+			}
+		}
+	}
+
+	/**
+	 * This method initializes jTree
+	 *
+	 * @return javax.swing.JTree
+	 */
+	private JTree getJTree() {
+		if (jTree == null) {
+			DefaultMutableTreeNode root = new DefaultMutableTreeNode("ANDAMI");
+			addNodes(root);
+			jTree = new JTree(root);
+
+			jTree.setName("ANDAMI");
+			jTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+					public void valueChanged(
+						javax.swing.event.TreeSelectionEvent e) {
+						if (e.getPath().getParentPath() != null) {
+							ext = (Extension) listExt.get(e.getPath()
+														   .getParentPath()
+														   .getLastPathComponent()
+														   .toString() + "." +
+									e.getPath().getLastPathComponent().toString());
+
+							if (ext == null) {
+								getChbActivar().setVisible(false);
+								getTaDescripcion().setText("Plugin : " +
+									e.getNewLeadSelectionPath().toString());
+							} else {
+								try {
+									getChbActivar().setSelected((Launcher.getExtension(
+											ext.getClassName())).getActive());
+									getChbActivar().setVisible(true);
+									getTaDescripcion().setText((Launcher.getExtension(
+											ext.getClassName())).getDescription());
+									getJTextField1().setText(String.valueOf(
+											ext.getPriority()));
+								} catch (NullPointerException npe) {
+									getChbActivar().setVisible(false);
+									getTaDescripcion().setText("Plugin : " +
+										e.getNewLeadSelectionPath().toString());
+								}
+							}
+						}
+					}
+				});
+		}
+
+		return jTree;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(new BorderLayout());
+			jPanel.setName("jPanel");
+			jPanel.setPreferredSize(new java.awt.Dimension(150, 150));
+			jPanel.setSize(435, 299);
+			jPanel.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
+			jPanel.add(getPBotones(), java.awt.BorderLayout.SOUTH);
+		}
+
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setLayout(new BoxLayout(jPanel1, BoxLayout.Y_AXIS));
+			jPanel1.setName("jPanel1");
+			jPanel1.setPreferredSize(new java.awt.Dimension(200, 100));
+			jPanel1.add(getJTabbedPane1(), null);
+		}
+
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jSplitPane
+	 *
+	 * @return javax.swing.JSplitPane
+	 */
+	private JSplitPane getJSplitPane() {
+		if (jSplitPane == null) {
+			jSplitPane = new JSplitPane();
+			jSplitPane.setRightComponent(getJPanel1());
+			jSplitPane.setLeftComponent(getJPanel2());
+		}
+
+		return jSplitPane;
+	}
+
+	/**
+	 * This method initializes chbActivar
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChbActivar() {
+		if (chbActivar == null) {
+			chbActivar = new JCheckBox();
+			chbActivar.setSelected(true);
+			chbActivar.setVisible(false);
+			chbActivar.setText(PluginServices.getText(this, "extension_activada"));
+			chbActivar.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						ext.setActive(chbActivar.isSelected());
+					}
+				});
+		}
+
+		return chbActivar;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextField() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+			jTextField.setPreferredSize(new java.awt.Dimension(200, 20));
+			jTextField.setText(Launcher.getAndamiConfig().getPluginsDirectory());
+		}
+
+		return jTextField;
+	}
+
+	/**
+	 * This method initializes pGeneral
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			pGeneral = new JPanel();
+			pGeneral.add(getPDirectorio(), null);
+			pGeneral.add(getJPanel4(), null);
+		}
+
+		return pGeneral;
+	}
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setText(PluginServices.getText(this, "examinar"));
+			jButton.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						JFileChooser jfc = new JFileChooser();
+						jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+						jfc.addChoosableFileFilter(new GenericFileFilter("",
+								PluginServices.getText(this,
+									"directorio_extensiones")));
+
+						if (jfc.showOpenDialog(
+									(Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+							getJTextField().setText(jfc.getSelectedFile()
+													   .getAbsolutePath());
+						}
+					}
+				});
+		}
+
+		return jButton;
+	}
+
+	/**
+	 * This method initializes pOpciones
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPOpciones() {
+		if (pOpciones == null) {
+			jLabel = new JLabel();
+			pOpciones = new JPanel();
+			pOpciones.setLayout(new BorderLayout());
+			jLabel.setText(PluginServices.getText(this, "prioridad"));
+			pOpciones.add(getChbActivar(), java.awt.BorderLayout.NORTH);
+			pOpciones.add(getPDescripcion(), java.awt.BorderLayout.CENTER);
+			pOpciones.add(getJPanel3(), java.awt.BorderLayout.SOUTH);
+		}
+
+		return pOpciones;
+	}
+
+	/**
+	 * This method initializes jTabbedPane1
+	 *
+	 * @return javax.swing.JTabbedPane
+	 */
+	private JTabbedPane getJTabbedPane1() {
+		if (jTabbedPane1 == null) {
+			jTabbedPane1 = new JTabbedPane();
+			jTabbedPane1.addTab(PluginServices.getText(this, "opciones"), null,
+				getPOpciones(), null);
+			jTabbedPane1.addTab(PluginServices.getText(this, "general"), null,
+				getPGeneral(), null);
+		}
+
+		return jTabbedPane1;
+	}
+
+	/**
+	 * This method initializes pDescripcion
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPDescripcion() {
+		if (pDescripcion == null) {
+			pDescripcion = new JPanel();
+			pDescripcion.setLayout(new BorderLayout());
+			pDescripcion.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+			pDescripcion.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "descripcion"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		}
+
+		return pDescripcion;
+	}
+
+	/**
+	 * This method initializes pDirectorio
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPDirectorio() {
+		if (pDirectorio == null) {
+			pDirectorio = new JPanel();
+			pDirectorio.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "directorio"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pDirectorio.add(getJTextField(), null);
+			pDirectorio.add(getJButton(), null);
+		}
+
+		return pDirectorio;
+	}
+
+	/**
+	 * This method initializes jPanel2
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jPanel2 = new JPanel();
+			jPanel2.setLayout(new BorderLayout());
+			jPanel2.setPreferredSize(new java.awt.Dimension(120, 200));
+			jPanel2.add(getJScrollPane1(), java.awt.BorderLayout.CENTER);
+		}
+
+		return jPanel2;
+	}
+
+	/**
+	 * This method initializes jScrollPane1
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane1() {
+		if (jScrollPane1 == null) {
+			jScrollPane1 = new JScrollPane();
+			jScrollPane1.setViewportView(getJTree());
+		}
+
+		return jScrollPane1;
+	}
+
+	/**
+	 * This method initializes pBotones
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPBotones() {
+		if (pBotones == null) {
+			pBotones = new JPanel();
+			pBotones.add(getBAceptar(), null);
+			pBotones.add(getBCancelar(), null);
+		}
+
+		return pBotones;
+	}
+
+	/**
+	 * This method initializes bAceptar
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBAceptar() {
+		if (bAceptar == null) {
+			bAceptar = new JButton();
+			bAceptar.setText(PluginServices.getText(this, "aceptar"));
+			bAceptar.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						//Se escribe el config de los plugins
+						marshalPlugins();
+
+						//Se escribe el directorio de los plugins
+						Launcher.getAndamiConfig().setPluginsDirectory(getJTextField().getText());
+
+						//Se escribe el idioma
+						LanguageItem sel = (LanguageItem) cmbIdioma.getSelectedItem();
+						Launcher.getAndamiConfig().setLocaleLanguage(sel.locale.getLanguage());
+						Launcher.getAndamiConfig().setLocaleCountry(sel.locale.getCountry());
+						Launcher.getAndamiConfig().setLocaleVariant(sel.locale.getVariant());
+
+						PluginServices.getMDIManager().closeWindow(ConfigPlugins.this);
+					}
+				});
+		}
+
+		return bAceptar;
+	}
+
+	/**
+	 * This method initializes bCancelar
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBCancelar() {
+		if (bCancelar == null) {
+			bCancelar = new JButton();
+			bCancelar.setText(PluginServices.getText(this, "cancelar"));
+			bCancelar.addActionListener(new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						unmarshalPlugins();
+						PluginServices.getMDIManager().closeWindow(ConfigPlugins.this);
+					}
+				});
+		}
+
+		return bCancelar;
+	}
+
+	/**
+	 * This method initializes jTextArea1
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	private JTextArea getTaDescripcion() {
+		if (taDescripcion == null) {
+			taDescripcion = new JTextArea();
+			taDescripcion.setPreferredSize(new java.awt.Dimension(200, 100));
+			taDescripcion.setText("");
+			taDescripcion.setEditable(false);
+			taDescripcion.setEnabled(false);
+			taDescripcion.setLineWrap(true);
+		}
+
+		return taDescripcion;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getTaDescripcion());
+			jScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			jScrollPane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+		}
+
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTextField1
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextField1() {
+		if (jTextField1 == null) {
+			jTextField1 = new JTextField();
+			jTextField1.setPreferredSize(new java.awt.Dimension(20, 20));
+
+			jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
+					public void keyTyped(java.awt.event.KeyEvent e) {
+						ext.setPriority(Integer.parseInt(jTextField1.getText()));
+					}
+				});
+		}
+
+		return jTextField1;
+	}
+
+	/**
+	 * This method initializes jPanel3
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel3() {
+		if (jPanel3 == null) {
+			jPanel3 = new JPanel();
+			jPanel3.add(getJTextField1(), null);
+			jPanel3.add(jLabel, null);
+		}
+
+		return jPanel3;
+	}
+
+	/**
+	 * This method initializes jPanel4
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel4() {
+		if (jPanel4 == null) {
+			jLabel1 = new JLabel();
+			jPanel4 = new JPanel();
+			jLabel1.setText("Idioma:");
+			jPanel4.add(jLabel1, null);
+			jPanel4.add(getCmbIdioma(), null);
+		}
+		return jPanel4;
+	}
+	/**
+	 * This method initializes cmbIdioma
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getCmbIdioma() {
+		if (cmbIdioma == null) {
+			cmbIdioma = new JComboBox();
+			cmbIdioma.setPreferredSize(new java.awt.Dimension(195,20));
+
+			Locale esp = new Locale("es");
+			Locale eng = new Locale("en");
+			Locale fra = new Locale("fr");
+			Locale ita = new Locale("it");
+			Locale val = new Locale("ca");
+            Locale cs = new Locale("cs"); // Checo
+            Locale eu = new Locale("eu"); // euskera
+            Locale brasil = new Locale("pt", "BR");
+            Locale de = new Locale("de"); // Alem�n
+            Locale gr = new Locale("el", "GR"); // Griego
+            Locale gl = new Locale("gl", "GL"); // Griego
+
+			// Parche para valenciano/catal�n valenci�/catal�
+			String strValenciano = PluginServices.getText(this, "__valenciano");
+            // Parche para euskera
+
+            Locale localeActual = Locale.getDefault(); // Se configura en la clase Launcher
+            String strEuskera;
+            if (eu.getDisplayLanguage().compareTo("vascuence") == 0) {
+				strEuskera = "Euskera";
+			} else {
+				strEuskera = eu.getDisplayLanguage();
+			}
+
+
+			LanguageItem[] lenguajes = new LanguageItem[]{
+					new LanguageItem(esp, esp.getDisplayLanguage()),
+					new LanguageItem(eng, eng.getDisplayLanguage()),
+					new LanguageItem(fra, fra.getDisplayLanguage()),
+					new LanguageItem(ita, ita.getDisplayLanguage()),
+                    new LanguageItem(val, strValenciano),
+                    new LanguageItem(cs, cs.getDisplayLanguage()),
+                    new LanguageItem(eu, strEuskera),
+                    new LanguageItem(brasil, brasil.getDisplayLanguage()),
+					new LanguageItem(de, de.getDisplayLanguage()),
+					new LanguageItem(gr, gr.getDisplayLanguage()),
+					new LanguageItem(gl, gl.getDisplayLanguage())};
+
+			DefaultComboBoxModel model = new DefaultComboBoxModel(lenguajes);
+
+			for (int i = 0; i < lenguajes.length; i++) {
+				if (lenguajes[i].locale.equals(Locale.getDefault())){
+					model.setSelectedItem(lenguajes[i]);
+				}
+			}
+
+			cmbIdioma.setModel(model);
+		}
+		return cmbIdioma;
+	}
+
+	private class LanguageItem {
+		public Locale locale;
+		public String description;
+
+		public LanguageItem(Locale loc, String str){
+			locale = loc;
+			description = str;
+		}
+
+		public String toString(){
+			return description;
+		}
+	}
+   	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param args DOCUMENT ME!
+	 */
+	public static void main(String[] args) {
+		ConfigPlugins cp = new ConfigPlugins();
+		cp.setVisible(true);
+
+		JDialog dialog = new JDialog();
+		dialog.getContentPane().add(cp);
+		dialog.setSize(400, 300);
+		dialog.show(true);
+	}
+
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.setSize(443, 299);
+		this.setLocation(1, 1);
+		this.add(getJPanel(), java.awt.BorderLayout.CENTER);
+	}
+
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		if (m_viewinfo == null) {
+			m_viewinfo = new WindowInfo(WindowInfo.MODALDIALOG);
+			m_viewinfo.setTitle(PluginServices.getText(this, "configurar_ANDAMI"));
+		}
+
+		return m_viewinfo;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+	 */
+	public void viewActivated() {
+	}
+
+	/**
+	 * Escribe sobre el config.xml, la nueva configuraci�n.
+	 */
+	public void marshalPlugins() {
+		HashMap pc = Launcher.getPluginConfig();
+		ArrayList array = new ArrayList();
+		Iterator iter = pc.keySet().iterator();
+
+		while (iter.hasNext()) {
+			Object obj = iter.next();
+			PluginConfig pconfig = (PluginConfig) pc.get(obj);
+			FileWriter writer;
+
+			try {
+				writer = new FileWriter(Launcher.getAndamiConfig().getPluginsDirectory() +
+						File.separator + (String) obj + File.separator +
+						"config.xml");
+
+				try {
+					pconfig.marshal(writer);
+				} catch (MarshalException e1) {
+					e1.printStackTrace();
+				} catch (ValidationException e1) {
+					e1.printStackTrace();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+			//hay que refrescar la aplicaci�n
+			///((App)App.instance).run();
+		}
+	}
+
+	/**
+	 * Lee del config.xml la configuraci�n.
+	 */
+	public void unmarshalPlugins() {
+		HashMap pc = Launcher.getPluginConfig();
+		ArrayList array = new ArrayList();
+		Iterator iter = pc.keySet().iterator();
+
+		while (iter.hasNext()) {
+			Object obj = iter.next();
+			PluginConfig pconfig = (PluginConfig) pc.get(obj);
+
+			try {
+				FileReader reader = new FileReader(Launcher.getAndamiConfig().getPluginsDirectory() +
+						File.separator + (String) obj + File.separator +
+						"config.xml");
+				PluginConfig.unmarshal(reader);
+			} catch (Exception e) {
+				System.out.println("Exception unmarshalPlugin " + e);
+			}
+		}
+
+
+		//hay que refrescar la aplicaci�n
+		///((App)App.instance).run();
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+} //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/configExtensions/ConfigPlugins.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog.java	(revision 46118)
@@ -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.coreplugin;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.MessageEvent;
+import org.gvsig.andami.messages.NotificationListener;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+
+/**
+ * Graphic interface that appears to show an error.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class NotificationDialog extends JPanel implements IWindow, SingletonWindow,
+    NotificationListener {
+    private JButton bDetails = null;
+    private JPanel pDescription = null;
+    private JTextArea txtDescription = null;
+    private JButton bNoDetails = null;
+    private JButton bAcept = null;
+    private JScrollPane pScrollDescription = null;
+
+    /**
+     * This is the default constructor
+     */
+    public NotificationDialog() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        Consola.consolaFrame.setSize(new java.awt.Dimension(457, 150));
+        Consola.consolaFrame.setLocation(new java.awt.Point(11, 140));
+        Consola.consolaFrame.setVisible(false);
+        this.setLayout(null);
+        this.setSize(470, 175);
+        this.add(getBDetails(), null);
+        this.add(getPDescription(), null);
+        this.add(Consola.consolaFrame, null);
+        this.add(getDNoDetails(), null);
+        this.add(getBAcept(), null);
+    }
+
+    /**
+     * This method initializes bDetails
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBDetails() {
+        if (bDetails == null) {
+        	final IWindow win = this;
+            bDetails = new JButton();
+            bDetails.setBounds(new java.awt.Rectangle(315, 110, 129, 24));
+            bDetails.setText(PluginServices.getText(this,"detalles") + "   >>>");
+            bDetails.setVisible(true);
+            bDetails.addActionListener(new java.awt.event.ActionListener() {
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        Consola.consolaFrame.setVisible(true);
+                        bDetails.setVisible(false);
+                        getDNoDetails().setVisible(true);
+                        PluginServices.getMDIManager()
+                                      .getWindowInfo(win)
+                                      .setHeight(325);
+                        setSize(460, 325);
+                    }
+                });
+        }
+
+        return bDetails;
+    }
+
+    /**
+     * This method initializes pDescription
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPDescription() {
+        if (pDescription == null) {
+            pDescription = new JPanel();
+            pDescription.setBounds(new java.awt.Rectangle(7, 5, 437, 99));
+            pDescription.setBorder(javax.swing.BorderFactory.createTitledBorder(
+                    null, PluginServices.getText(this,"descripcion"),
+                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+            pDescription.add(getPScrollDescription(), null);
+        }
+
+        return pDescription;
+    }
+
+    /**
+     * This method initializes txtDescription
+     *
+     * @return javax.swing.JTextArea
+     */
+    private JTextArea getTxtDescription() {
+        if (txtDescription == null) {
+            txtDescription = new JTextArea();
+            //txtDescription.setPreferredSize(new java.awt.Dimension(420, 65));
+            txtDescription.setForeground(java.awt.Color.blue);
+            txtDescription.setBackground(java.awt.SystemColor.control);
+            txtDescription.setEditable(false);
+        }
+
+        return txtDescription;
+    }
+
+    /**
+     * @see com.iver.mdiApp.ui.MDIManager.IWindow#getModel()
+     */
+    public Object getWindowModel() {
+        return "consolaOld";
+    }
+
+    /**
+     * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        WindowInfo info = new WindowInfo(WindowInfo.MODELESSDIALOG |
+                WindowInfo.ICONIFIABLE);
+        info.setTitle(PluginServices.getText(this, "titulo_consola"));
+
+        return info;
+    }
+
+    /**
+     * @see com.iver.mdiApp.NotificationListener#errorEvent(java.lang.String)
+     */
+    public void errorEvent(MessageEvent e) {
+        if (e.getMessages() != null) {
+            for (int i = 0; i < e.getMessages().length; i++) {
+                txtDescription.setText(e.getMessages()[i]);
+            }
+        }
+
+        PluginServices.getMDIManager().restoreCursor();
+        if (SwingUtilities.isEventDispatchThread()) {
+            PluginServices.getMDIManager().addWindow(this);
+        } else {
+        	final IWindow win = this;
+            SwingUtilities.invokeLater(new Runnable() {
+                    public void run() {
+                        PluginServices.getMDIManager().addWindow(win);
+                    }
+                });
+        }
+
+    }
+
+    /**
+     * @see com.iver.mdiApp.NotificationListener#warningEvent(java.lang.String)
+     */
+    public void warningEvent(MessageEvent e) {
+    }
+
+    /**
+     * @see com.iver.mdiApp.NotificationListener#infoEvent(java.lang.String)
+     */
+    public void infoEvent(MessageEvent e) {
+    }
+
+    /**
+     * This method initializes dNoDetails
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getDNoDetails() {
+        if (bNoDetails == null) {
+            bNoDetails = new JButton();
+            bNoDetails.setVisible(false);
+            bNoDetails.setBounds(new java.awt.Rectangle(315, 110, 128, 24));
+            bNoDetails.setText("<<<   " + PluginServices.getText(this,"detalles"));
+            final IWindow win = this;
+            bNoDetails.addActionListener(new java.awt.event.ActionListener() {
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        bDetails.setVisible(true);
+                        bNoDetails.setVisible(false);
+                        Consola.consolaFrame.setVisible(false);
+                        PluginServices.getMDIManager()
+                                      .getWindowInfo(win)
+                                      .setHeight(175);
+                        setSize(460, 175);
+                    }
+                });
+        }
+
+        return bNoDetails;
+    }
+
+    /**
+     * This method initializes bAcept
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBAcept() {
+        if (bAcept == null) {
+        	final IWindow win = this;
+            bAcept = new JButton();
+            bAcept.setBounds(new java.awt.Rectangle(10, 110, 296, 24));
+            bAcept.setText(PluginServices.getText(this,"aceptar"));
+            bAcept.addActionListener(new java.awt.event.ActionListener() {
+                    public void actionPerformed(java.awt.event.ActionEvent e) {
+                        PluginServices.getMDIManager().closeWindow(win);
+                    }
+                });
+        }
+
+        return bAcept;
+    }
+
+    /**
+     * This method initializes pScrollDescription
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getPScrollDescription() {
+        if (pScrollDescription == null) {
+            pScrollDescription = new JScrollPane();
+            pScrollDescription.setPreferredSize(new java.awt.Dimension(420,67));
+            pScrollDescription.setAutoscrolls(true);
+            pScrollDescription.setViewportView(getTxtDescription());
+        }
+
+        return pScrollDescription;
+    }
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+
+} //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/menus/ToolbarMenus.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/menus/ToolbarMenus.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/menus/ToolbarMenus.java	(revision 46118)
@@ -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.coreplugin.menus;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.plugins.config.generate.Menu;
+import org.gvsig.andami.ui.mdiFrame.SelectableToolBar;
+import org.gvsig.utils.XMLEntity;
+
+
+/**
+ * @author cesar
+ *
+ */
+public class ToolbarMenus extends Extension implements ActionListener {
+	private final String ACTIONCOMMANDBASE = "CHANGE_VISIBILITY-";
+	private final String MENUBASE = "Ver/Toolbars/";
+	private final String ENABLEDIMAGE = "images/enabled.png";
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+		// TODO Auto-generated method stub
+
+	}
+
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#isVisible()
+	 */
+	public boolean isVisible() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#actionPerformed()
+	 */
+	public void actionPerformed(ActionEvent e) {
+		String toolbarName = e.getActionCommand().substring(ACTIONCOMMANDBASE.length());
+		javax.swing.JMenuItem menu = PluginServices.getMainFrame().getMenuEntry((MENUBASE+toolbarName).split("/"));
+		
+		if (!toolbarName.equals("")) {
+
+			boolean oldVisibility = PluginServices.getMainFrame().getToolbarVisibility(toolbarName);
+			if (oldVisibility==false) {
+				URL icon = PluginServices.getPluginServices(this).getClassLoader().getResource(ENABLEDIMAGE);				
+				menu.setIcon(new ImageIcon(icon));
+				persistStatus(toolbarName, !oldVisibility);
+			}
+			else {
+				menu.setIcon(null);
+				persistStatus(toolbarName, !oldVisibility);
+			}
+			PluginServices.getMainFrame().setToolbarVisibility(toolbarName, !oldVisibility);
+		}
+	}
+
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#initialize()
+	 */
+	public void initialize() {
+		getPersistedStatus();
+		SelectableToolBar[] toolBars = PluginServices.getMainFrame().getToolbars();
+		for (int i=toolBars.length-1; i>0; i--) {
+			Menu menu = new Menu();
+			menu.setActionCommand(ACTIONCOMMANDBASE+toolBars[i].getName());
+			//menu.setTooltip(PluginServices.getText(this, "muestra_oculta_la_toolbar"));
+			menu.setText(MENUBASE+toolBars[i].getName());
+			if (toolBars[i].getAndamiVisibility())
+				menu.setIcon(ENABLEDIMAGE);
+			PluginServices.getMainFrame().addMenu(menu, this, PluginServices.getPluginServices(this).getClassLoader());
+		}
+		
+	}
+	
+	/**
+	 * Save the status of the provided toolbar.
+	 * 
+	 * @param toolbarName The toolbar name whose status wants to be saved.
+	 * @param visible Whether or not the toolbar is visible.
+	 */
+	private void persistStatus(String toolbarName, boolean visible) {
+		PluginServices ps = PluginServices.getPluginServices(this); 
+		XMLEntity xml = ps.getPersistentXML();
+		XMLEntity child = null;
+		for (int i=xml.getChildrenCount()-1; i>=0; i--) {
+			if (xml.getChild(i).getName().equals("Toolbars"))
+				child = xml.getChild(i).getChild(0);
+				
+		}
+		if (child==null) {
+			XMLEntity toolbars = new XMLEntity();
+			toolbars.setName("Toolbars");
+			child = new XMLEntity();
+			toolbars.addChild(child);
+			xml.addChild(toolbars);
+		}
+		
+		if (visible) {
+			child.putProperty(toolbarName, "visible");
+		}
+		else {
+			child.putProperty(toolbarName, "hidden");
+		}
+		ps.setPersistentXML(xml);
+		
+	}
+
+	/**
+	 * Reads the stored toolbars' status from plugin-persinstence.xml,
+	 * and sets the toolbars accordingly. 
+	 *
+	 */
+	private void getPersistedStatus() {
+		PluginServices ps = PluginServices.getPluginServices(this); 
+		XMLEntity xml = ps.getPersistentXML();
+		XMLEntity child = null;
+		for (int i=xml.getChildrenCount()-1; i>=0; i--) {
+			if (xml.getChild(i).getName().equals("Toolbars"))
+				child = xml.getChild(i).getChild(0);
+				
+		}
+		if (child!=null) {
+			SelectableToolBar[] toolBars = PluginServices.getMainFrame().getToolbars();
+			for (int i=toolBars.length-1; i>=0; i--) {
+				if (child.contains(toolBars[i].getName()))
+					toolBars[i].setAndamiVisibility(child.getStringProperty(toolBars[i].getName()).equals("visible"));
+			}
+		}
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/menus/ToolbarMenus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/StatusBar.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/StatusBar.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/StatusBar.java	(revision 46118)
@@ -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.coreplugin;
+
+import javax.swing.JOptionPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.messages.MessageEvent;
+import org.gvsig.andami.messages.NotificationListener;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiFrame.NewStatusBar;
+import org.gvsig.tools.dynobject.DynObject;
+
+import static org.gvsig.coreplugin.Consola.consolaFrame;
+
+/**
+ * Plugin que escucha las notificaciones que recive la aplicaci�n y las muestra
+ * en la barra de estado
+ */
+public class StatusBar extends Extension implements NotificationListener {
+
+    public void initialize() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(this.getClass());
+        
+        DynObject pluginProperties = plugin.getPluginProperties();
+        Boolean showNotificationsInStatusbar = (Boolean) pluginProperties.getDynValue("showNotificationsInStatusbar");
+        if ( showNotificationsInStatusbar == null || showNotificationsInStatusbar.booleanValue() ) {
+            NotificationManager.addNotificationListener(this);
+        }
+    }
+
+    public void errorEvent(MessageEvent e) {
+    	String msg = e.getMessages()[0];
+        NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
+        statusbar.message(msg, JOptionPane.ERROR_MESSAGE);
+    }
+
+    public void warningEvent(MessageEvent e) {
+        String msg = e.getMessages()[0];
+        NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
+        statusbar.message(msg, JOptionPane.WARNING_MESSAGE);
+    }
+
+    public void infoEvent(MessageEvent e) {
+        String msg = e.getMessages()[0];
+        NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
+        statusbar.message(msg, JOptionPane.INFORMATION_MESSAGE);
+    }
+
+    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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/StatusBar.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConsolaFrame.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConsolaFrame.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConsolaFrame.java	(revision 46118)
@@ -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.coreplugin;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.MessageEvent;
+import org.gvsig.andami.messages.NotificationListener;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+
+/**
+ * Frame que escucha los eventos del sistema de mensajes de la aplicaci�n y los
+ * muestra.
+ */
+public class ConsolaFrame extends JPanel implements IWindow, SingletonWindow,NotificationListener {
+	private StringBuffer info = new StringBuffer();
+	private StringBuffer warn = new StringBuffer();
+	private StringBuffer error = new StringBuffer();
+	private StringBuffer all = new StringBuffer();
+	private JEditorPane textoInfos;
+	private JEditorPane textoWarnings;
+	private JEditorPane textoErrores;
+	private JEditorPane textoAll;
+
+	private final static String marcaInfo ="font size='3' color='#000000'";
+	private final static String marcaWarning ="font size='3' color='#800000'";
+	private final static String marcaError ="font size='3' color='#FF0000'";
+	private JTabbedPane tabs;
+	private JPanel panelErrores;
+
+    /**
+     * Crea la consola con los mensajes producidos hasta el momento de la
+     * creaci�n de este objeto.
+     *
+     * @param todo Array de todos los mensajes
+     * @param infos Array de los mensajes de informaci�n
+     * @param warns Array de los mensajes de warning
+     * @param errors Array de los mensajes de error
+     */
+    public ConsolaFrame() {
+
+		this.setSize(400, 325);
+
+        //Las cajas de texto donde van los mensajes
+        textoInfos = new JEditorPane();
+        textoInfos.setEditable(false);
+		textoInfos.setContentType("text/html");
+        textoWarnings = new JEditorPane();
+        textoWarnings.setEditable(false);
+		textoWarnings.setContentType("text/html");
+        textoErrores = new JEditorPane();
+        textoErrores.setEditable(false);
+		textoErrores.setContentType("text/html");
+        textoAll = new JEditorPane();
+        textoAll.setEditable(false);
+		textoAll.setContentType("text/html");
+
+		JScrollPane scroll = new JScrollPane(textoAll);
+		scroll.setVerticalScrollBarPolicy(
+						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+		scroll.setHorizontalScrollBarPolicy(
+		JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+//		scroll.setPreferredSize(new Dimension(500, 500));
+//		scroll.setMinimumSize(new Dimension(10, 10));
+		JPanel panelAll = new JPanel(new BorderLayout());
+		panelAll.add(scroll, BorderLayout.CENTER);
+
+		scroll = new JScrollPane(textoInfos);
+		scroll.setVerticalScrollBarPolicy(
+						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+		scroll.setHorizontalScrollBarPolicy(
+			JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+//		scroll.setPreferredSize(new Dimension(250, 145));
+//		scroll.setMinimumSize(new Dimension(10, 10));
+		JPanel panelInfos = new JPanel(new BorderLayout());
+		panelInfos.add(scroll, BorderLayout.CENTER);
+
+		scroll = new JScrollPane(textoWarnings);
+		scroll.setVerticalScrollBarPolicy(
+						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+		scroll.setHorizontalScrollBarPolicy(
+		JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+//		scroll.setPreferredSize(new Dimension(250, 145));
+//		scroll.setMinimumSize(new Dimension(10, 10));
+		JPanel panelWarnings = new JPanel(new BorderLayout());
+		panelWarnings.add(scroll, BorderLayout.CENTER);
+
+		scroll = new JScrollPane(textoErrores);
+		scroll.setVerticalScrollBarPolicy(
+						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+		scroll.setHorizontalScrollBarPolicy(
+		JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+//		scroll.setPreferredSize(new Dimension(250, 145));
+//		scroll.setMinimumSize(new Dimension(10, 10));
+		panelErrores = new JPanel(new BorderLayout());
+		panelErrores.add(scroll, BorderLayout.CENTER);
+
+//        rellenar(infos, textoInfos, info, marcaInfo);
+  //      rellenar(warns, textoWarnings, warn, marcaWarning);
+    //    rellenar(errors, textoErrores, error, marcaError);
+      //  rellenarTodo(todo, textoAll);
+
+        //Las pesta�as
+        tabs = new JTabbedPane();
+        tabs.addTab(PluginServices.getText( this ,"todos"), panelAll);
+        tabs.addTab(PluginServices.getText( this ,"info"), panelInfos);
+        tabs.addTab(PluginServices.getText( this ,"warnings"), panelWarnings);
+        tabs.addTab(PluginServices.getText( this ,"errores"), panelErrores);
+		this.setLayout(new BorderLayout());
+        this.add(tabs, BorderLayout.CENTER);
+
+    }
+
+	/**
+	 * M�todo de utilidad para rellenar los cuadros de texto con un array de
+	 * cadenas
+	 *
+	 * @param contenido array de cadenas que se mostrar�n en el cuadro de texto
+	 *        separadas por un retorno de carro
+	 * @param control Control en el que se pondr�n las cadenas
+	 */
+	private void rellenar(String[] contenido, JEditorPane control, StringBuffer buffer, String marca) {
+		String content = "";
+		for (int i = 0; i < contenido.length; i++) {
+			content = content + "<"+marca+">"+contenido[i] + "</"+marca+"><br/";
+		}
+
+		buffer.append(content);
+
+		control.setContentType("text/html");
+		control.setText(content);
+	}
+
+	/*
+	 * M�todo de utilidad para rellenar los cuadros de texto con un array de
+	 * cadenas
+	 *
+	 * @param contenido array de cadenas que se mostrar�n en el cuadro de texto
+	 *        separadas por un retorno de carro
+	 * @param control Control en el que se pondr�n las cadenas
+	 *
+	private void rellenarTodo(Message[] contenido, JEditorPane control) {
+		HashMap marcasTipoMsg = new HashMap();
+		marcasTipoMsg.put(new Integer(Message.INFO), marcaInfo);
+		marcasTipoMsg.put(new Integer(Message.WARNING), marcaWarning);
+		marcasTipoMsg.put(new Integer(Message.ERROR), marcaError);
+
+		String content = "";
+		for (int i = 0; i < contenido.length; i++) {
+			String marca = (String) marcasTipoMsg.get(new Integer(contenido[i].tipo));
+			content = content + "<"+marca+">"+contenido[i].texto + "</"+marca+"><br/";
+		}
+
+		all.append(content);
+
+		control.setContentType("text/html");
+		control.setText(content);
+	}*/
+
+
+	/**
+	 * Obtiene un string con la traza de una excepci�n a la consola
+	 *
+	 * @param t Elemento throwable
+	 */
+	private static String dumpStackTrace(Throwable t) {
+		if ( t == null ) {
+			return "";
+		}
+		StackTraceElement[] stes = t.getStackTrace();
+		String todo = "<"+marcaWarning+">" + t.getClass().getName() + ": " + t.getLocalizedMessage() +
+			"<"+marcaWarning+">" + "<br/";
+
+		for (int i = 0; i < stes.length; i++) {
+			todo += ("<"+marcaWarning+">&nbsp;&nbsp;&nbsp;&nbsp;" + stes[i].toString() + "<br/");
+		}
+
+		if (t.getCause() != null) {
+			todo = todo + dumpStackTrace(t.getCause());
+		}
+
+		return todo;
+	}
+
+    private void recortarbuffers() {
+        if( error.length()>60*1024 ) {
+            error.delete(0, 30*1024);
+        }
+        if( warn.length()>60*1024 ) {
+            warn.delete(0, 30*1024);
+        }
+        if( info.length()>60*1024 ) {
+            info.delete(0, 30*1024);
+        }
+        if( all.length()>60*1024 ) {
+            all.delete(0, 30*1024);
+        }
+    }
+    /**
+     * @see com.iver.mdiApp.NotificationListener#errorEvent(java.lang.String)
+     */
+    public void errorEvent(MessageEvent e) {
+    	for (int i = 0; i < e.getMessages().length; i++){
+    		String traza = dumpStackTrace(e.getExceptions()[i]);
+
+			error.append("<"+marcaError+">" + e.getMessages()[i] + "</"+marcaError+"><br/" + traza);
+			all.append("<"+marcaError+">" + e.getMessages()[i] + "</"+marcaError+"><br/" + traza);
+    	}
+        recortarbuffers();
+        textoErrores.setText(error.toString());
+        textoAll.setText(all.toString());
+        tabs.setSelectedComponent(panelErrores);
+    }
+
+    /**
+     * @see com.iver.mdiApp.NotificationListener#warningEvent(java.lang.String)
+     */
+    public void warningEvent(MessageEvent e) {
+		for (int i = 0; i < e.getMessages().length; i++){
+			String traza = dumpStackTrace(e.getExceptions()[i]);
+
+			warn.append("<"+marcaWarning+">" + e.getMessages()[i] + "</"+marcaWarning+"><br/" + traza);
+			all.append("<"+marcaWarning+">" + e.getMessages()[i] + "</"+marcaWarning+"><br/" + traza);
+		}
+        recortarbuffers();
+        textoWarnings.setText(warn.toString());
+        textoAll.setText(all.toString());
+    }
+
+    /**
+     * @see com.iver.mdiApp.NotificationListener#infoEvent(java.lang.String)
+     */
+    public void infoEvent(MessageEvent e) {
+		for (int i = 0; i < e.getMessages().length; i++){
+			String traza = dumpStackTrace(e.getExceptions()[i]);
+
+			info.append("<"+marcaInfo+">" + e.getMessages()[i] + "</"+marcaInfo+"><br/" + traza);
+			all.append("<"+marcaInfo+">" + e.getMessages()[i] + "</"+marcaInfo+"><br/" + traza);
+		}
+                recortarbuffers();
+		textoInfos.setText(info.toString() );
+		textoAll.setText(all.toString());
+
+    }
+
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#getModel()
+	 */
+	public Object getWindowModel() {
+		return "consola";
+	}
+
+	/**
+	 * @see org.gvsig.andami.ui.mdiManager.IWindow#getWindowInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo info = new WindowInfo(WindowInfo.MODELESSDIALOG|WindowInfo.RESIZABLE|WindowInfo.MAXIMIZABLE|WindowInfo.ICONIFIABLE);
+		info.setTitle(PluginServices.getText(this, "titulo_consola"));
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConsolaFrame.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog2.jfd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog2.jfd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialog2.jfd	(revision 46118)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<java version="1.6.0_03" class="java.beans.XMLDecoder"> 
+ <object class="com.jformdesigner.model.FormModel"> 
+  <void property="contentType"> 
+   <string>form/swing</string> 
+  </void> 
+  <void property="root"> 
+   <object class="com.jformdesigner.model.FormRoot"> 
+    <void method="add"> 
+     <object class="com.jformdesigner.model.FormContainer"> 
+      <string>javax.swing.JPanel</string> 
+      <object class="com.jformdesigner.model.FormLayoutManager"> 
+       <class>com.jgoodies.forms.layout.FormLayout</class> 
+       <void method="setProperty"> 
+        <string>$columnSpecs</string> 
+        <string>default, labelcompgap, default</string> 
+       </void> 
+       <void method="setProperty"> 
+        <string>$rowSpecs</string> 
+        <string>default, linegap, default, linegap, default</string> 
+       </void> 
+      </object> 
+      <void property="name"> 
+       <string>this</string> 
+      </void> 
+     </object> 
+     <object class="com.jformdesigner.model.FormLayoutConstraints"> 
+      <null/> 
+      <void method="setProperty"> 
+       <string>location</string> 
+       <object class="java.awt.Point"> 
+        <int>0</int> 
+        <int>0</int> 
+       </object> 
+      </void> 
+      <void method="setProperty"> 
+       <string>size</string> 
+       <object class="java.awt.Dimension"> 
+        <int>400</int> 
+        <int>300</int> 
+       </object> 
+      </void> 
+     </object> 
+    </void> 
+   </object> 
+  </void> 
+ </object> 
+</java> 
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/Consola.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/Consola.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/Consola.java	(revision 46118)
@@ -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.coreplugin;
+
+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.andami.plugins.Extension;
+import org.gvsig.tools.dynobject.DynObject;
+
+/**
+ * Extensi�n que registra un frame en la aplicaci�n que recibe los eventos de
+ * la consola de la aplicaci�n y los muestra en el frame
+ */
+public class Consola extends Extension {
+
+    //static PluginServices ps;
+    public static ConsolaFrame consolaFrame;
+    public static NotificationDialogNew notificationDialogNew;
+    public static NotificationDialog notificationDialog;
+
+    /**
+     * @see com.iver.mdiApp.IExtension#initialize()
+     */
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "show-console", this);
+
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(this.getClass());
+
+        consolaFrame = new ConsolaFrame();
+        NotificationManager.addNotificationListener(consolaFrame);
+
+        DynObject pluginProperties = plugin.getPluginProperties();
+        Boolean showNotificationsInConsole = (Boolean) pluginProperties.getDynValue("showNotificationsInConsole");
+        if ( showNotificationsInConsole == null || showNotificationsInConsole.booleanValue() ) {
+            notificationDialogNew = new NotificationDialogNew();
+            NotificationManager.addNotificationListener(notificationDialogNew);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+        if ( "show-console".equalsIgnoreCase(actionCommand) ) {
+            consolaFrame.setSize(400, 325);
+            consolaFrame.setVisible(true);
+            PluginServices.getMDIManager().addWindow(consolaFrame);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isVisible()
+     */
+    public boolean isVisible() {
+        return true;
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/Consola.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/PreferencesExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/PreferencesExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/PreferencesExtension.java	(revision 46118)
@@ -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.coreplugin;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.prefs.Preferences;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.andami.plugins.config.generate.Extensions;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.preferences.DlgPreferences;
+import org.gvsig.andami.preferences.IPreference;
+import org.gvsig.andami.preferences.IPreferenceExtension;
+import org.gvsig.coreplugin.preferences.general.BrowserControlPage;
+import org.gvsig.coreplugin.preferences.general.ExtensionPage;
+import org.gvsig.coreplugin.preferences.general.ExtensionsPage;
+import org.gvsig.coreplugin.preferences.general.FolderingPage;
+import org.gvsig.coreplugin.preferences.general.GeneralPage;
+import org.gvsig.coreplugin.preferences.general.IconThemePage;
+import org.gvsig.coreplugin.preferences.general.NotificationsPage;
+import org.gvsig.coreplugin.preferences.general.ScreenSettingsPage;
+import org.gvsig.coreplugin.preferences.general.SkinPreferences;
+import org.gvsig.coreplugin.preferences.general.appearance.AppearancePage;
+import org.gvsig.coreplugin.preferences.network.FirewallPage;
+import org.gvsig.coreplugin.preferences.network.NetworkPage;
+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.folders.FoldersManager;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.util.ToolsUtilLocator;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ *
+ * <p>
+ * Extension that provides support for visual application configuration through
+ * a Preferences dialog where the user can specify its own settings for general
+ * purpose aspects.
+ * </p>
+ * <p>
+ * Adding new preference pages is made through ExtensionPoints by invoking
+ * <b>
+ * this.extensionPoints.add("AplicationPreferences","YourIPreferencesClassName",
+ * yourIPreferencesPage);
+ * </b>
+ * and then call <b>DlgPreferences.refreshExtensionPoints();</b>
+ * </p>
+ *
+ *
+ */
+public class PreferencesExtension extends Extension {
+
+	public static final String PROJECTS_FOLDER_PROPERTY_NAME = "ProjectsFolder";
+	public static final String DATA_FOLDER_PROPERTY_NAME = "DataFolder";
+	public static final String TEMPLATES_FOLDER_PROPERTY_NAME = "TemplatesFolder";
+	public static final String SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME = "SymbolLibraryFolder";
+    
+    private static final Logger logger = LoggerFactory.getLogger(PreferencesExtension.class);
+    private final ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
+
+    private boolean initilizedExtensions = false;
+
+    @Override
+    public void initialize() {
+        initializeUseNativeFileChooser();
+        initializeFoldersManager();
+        registerIcons();
+        initializeCoreExtensions();
+    }
+
+    private void initializeUseNativeFileChooser() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
+
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        boolean useNativeFileChooser = (Boolean) pluginProperties.getDynValue("useNativeFileChooser");
+        ToolsUtilLocator.getFileDialogChooserManager().setUseNativeFileChooser(useNativeFileChooser);
+    }
+
+    private void initializeFoldersManager() {
+        try {
+            Preferences prefs = Preferences.userRoot().node( "gvsig.foldering" );
+            FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+            for( String name : new String[] {
+                    PROJECTS_FOLDER_PROPERTY_NAME,
+                    DATA_FOLDER_PROPERTY_NAME,
+                    TEMPLATES_FOLDER_PROPERTY_NAME,
+                    SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME
+                }) {
+                String fname = prefs.get(name, null);
+                if( !StringUtils.isEmpty(fname) ) {
+                    foldersManager.set(name, new File(fname).getAbsoluteFile());
+                }
+            }
+        } catch(Exception ex) {
+            logger.warn("Can't initialize default folders in FolderManager.",ex);
+        }
+    }
+    
+    private void registerIcons() {
+        IconThemeHelper.registerIcon("action", "edit-setup", this);
+        IconThemeHelper.registerIcon("action", "application-exit", this);
+
+        // AppearancePage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-appearance", this);
+        // BrowserControlPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-browsercontrol", this);
+        // DirExtensionPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-dirextension", this);
+        // ExtensionPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-extension", this);
+        // ExtensionsPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-extensions", this);
+        // GeneralPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-general", this);
+        // FolderingPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-foldering", this);
+        // LanguagePage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-language", this);
+        // ScreenSettingsPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-screensetting", this);
+        // FirewallPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-firewall", this);
+        // NetworkPage.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-network", this);
+        // SkinPreferences.java
+        IconThemeHelper.registerIcon("preferences", "edit-setup-skin", this);
+        IconThemeHelper.registerIcon("preferences", "edit-setup-icontheme", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if (!this.initilizedExtensions) {
+            initializeExtensions();
+            initializeExtensionsConfig();
+            this.initilizedExtensions = true;
+        }
+        if ("edit-setup".equalsIgnoreCase(actionCommand)) {
+            DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
+            dlgPreferences.refreshExtensionPoints();
+            PluginServices.getMDIManager().addWindow(dlgPreferences);
+        } else if ("application-exit".equalsIgnoreCase(actionCommand)) {
+            Launcher.closeApplication();
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+
+    private void initializeCoreExtensions() {
+        addPreferencesPage(new GeneralPage());
+        addPreferencesPage(new NetworkPage());
+        addPreferencesPage(new FirewallPage());
+        addPreferencesPage(new ExtensionsPage());
+        addPreferencesPage(new AppearancePage());
+        addPreferencesPage(new FolderingPage());
+        addPreferencesPage(new ScreenSettingsPage());
+        addPreferencesPage(new SkinPreferences());
+        addPreferencesPage(new IconThemePage());
+        addPreferencesPage(new NotificationsPage());
+        String os = System.getProperty("os.name").toLowerCase();
+        if (os.contains("linux") || os.contains("unix")) {
+            addPreferencesPage(new BrowserControlPage());
+        }
+    }
+
+    private void initializeExtensionsConfig() {
+        HashMap pc = Launcher.getPluginConfig();
+        ArrayList array = new ArrayList();
+        Iterator iter = pc.values().iterator();
+
+        while (iter.hasNext()) {
+            array.add(((PluginConfig) iter.next()).getExtensions());
+        }
+        Extensions[] exts = (Extensions[]) array.toArray(new Extensions[0]);
+        for (Extensions ext1 : exts) {
+            for (int j = 0; j < ext1.getExtensionCount(); j++) {
+                org.gvsig.andami.plugins.config.generate.Extension ext = ext1.getExtension(j);
+                addPreferencesPage(new ExtensionPage(ext));
+            }
+        }
+    }
+
+    private void initializeExtensions() {
+        Iterator i = Launcher.getExtensionIterator();
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+
+        while (i.hasNext()) {
+            Object extension = i.next();
+
+            if (extension instanceof IPreferenceExtension) {
+                IPreferenceExtension pe = (IPreferenceExtension) extension;
+                IPreference[] pp;
+                try {
+                    pp = pe.getPreferencesPages();
+                } catch (Throwable th) {
+                    logger.warn("Can't get preference pages from '"+extension.getClass().getName()+"'.",th);
+                    continue;
+                }
+                if (pp == null) {
+                    String msg = "Preferences page is NULL. Extension "
+                            + extension.getClass().getName()
+                            + " implements IPreferenceExtension but does not provide pref. pages. ";
+                    logger.info(msg);
+                } else {
+                    for (IPreference pp1 : pp) {
+                        try {
+                            addPreferencesPage(pp1);
+                        } catch (Throwable th) {
+                            String msg = "cant_initialize_values_for_{0}_page_in_{1}";
+                            String[] params = {pp1.getTitle(), extension.getClass().getName()};
+                            logger.warn(i18nManager.getTranslation(msg, params), th);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public void addPreferencesPage(IPreference pp) {
+        ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
+        pp.initializeValues();
+        ep.append(pp.getID(), "", pp);
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+        DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
+        dlgPreferences.refreshExtensionPoints();
+        dlgPreferences.storeValues();
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/PreferencesExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialogNew.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialogNew.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialogNew.java	(revision 46118)
@@ -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.coreplugin;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.border.Border;
+import javax.swing.border.TitledBorder;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.MessageEvent;
+import org.gvsig.andami.messages.NotificationListener;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+public class NotificationDialogNew extends JPanel implements IWindow,
+		SingletonWindow, NotificationListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4363640321917006480L;
+
+	JPanelConsole console;
+	JPanelButtons buttons;
+	JPanelDescription description;
+
+	public NotificationDialogNew() {
+		super();
+		this.setLayout(new GridBagLayout());
+
+		description = new JPanelDescription();
+		console = new JPanelConsole();
+		buttons = new JPanelButtons(console);
+
+		addComppnent(this, description, 0, 0, 3, 1, 1.0, 1.0,
+				GridBagConstraints.BOTH, GridBagConstraints.CENTER);
+		addComppnent(this, buttons, 0, 1, 3, 1, 0, 0, GridBagConstraints.NONE,
+				GridBagConstraints.NORTHEAST);
+		addComppnent(this, console, 0, 2, 3, 1, 1.0, 2.0,
+				GridBagConstraints.BOTH, GridBagConstraints.CENTER);
+		this.setVisible(true);
+		this.hideConsole();
+	}
+
+	void addComppnent(JPanel panel, JComponent component, int gridx, int gridy,
+			int width, int height, double weightx, double weighty, int fill,
+			int anchor) {
+		GridBagConstraints constraints = new GridBagConstraints();
+		constraints.gridx = gridx;
+		constraints.gridy = gridy;
+		constraints.gridwidth = width;
+		constraints.gridheight = height;
+		constraints.weightx = weightx; // 1.0 se estira, 0 no.
+		constraints.weighty = weighty; // 1.0 se estira, 0 no.
+		constraints.fill = fill;
+		constraints.anchor = anchor;
+		constraints.ipadx = 2;
+		constraints.ipady = 2;
+
+		panel.add(component, constraints);
+		component.setVisible(true);
+	}
+
+	public void setDescription(String description) {
+		this.description.setDescription(description);
+	}
+
+	public void closeWindow() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+	public void hideConsole() {
+		this.buttons.hideConsole();
+	}
+
+	public void showConsole() {
+		this.buttons.showConsole();
+	}
+
+	class JPanelDescription extends JPanel {
+		/**
+			 * 
+			 */
+		private static final long serialVersionUID = 1529755877776747074L;
+		JTextArea description = null;
+		JLabel image;
+
+		JPanelDescription() {
+			LayoutManager layout;
+			Border border;
+
+			layout = new GridBagLayout();
+			this.setLayout(layout);
+
+			// border = BorderFactory.createTitledBorder("Description");
+			border = BorderFactory.createEmptyBorder();
+			this.setBorder(border);
+
+			this.image = new JLabel();
+			this.image.setIcon(IconThemeHelper.getImageIcon("show-console") );
+			addComppnent(this, this.image, 0, 0, 1, 1, 0, 0,
+					GridBagConstraints.NONE, GridBagConstraints.CENTER);
+
+			this.description = new JTextArea();
+			this.description.setEditable(false);
+			this.description.setOpaque(false);
+			this.description.setText("");
+			JScrollPane scrollPanel = new JScrollPane(this.description);
+			scrollPanel.setBorder(BorderFactory.createEmptyBorder());
+			scrollPanel.setPreferredSize(new Dimension(600, 200));
+			addComppnent(this, scrollPanel, 1, 0, 1, 1, 1, 1,
+					GridBagConstraints.BOTH, GridBagConstraints.CENTER);
+		}
+
+		public String getDescription() {
+			return this.description.getText();
+		}
+
+		public void setDescription(String description) {
+			this.description.setText(description);
+		}
+	}
+
+	class JPanelButtons extends JPanel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1529755877776747074L;
+		JButton close = null;
+		JButton showDetails = null;
+		JButton hideDetails = null;
+		JPanel console = null;
+
+		JPanelButtons(JPanel console) {
+			this.console = console;
+			this.setLayout(new FlowLayout());
+			this.close = getCloseButton();
+			this.showDetails = getShowDetailsButton();
+			this.hideDetails = getHideDetailsButton();
+			this.add(this.close);
+			this.add(this.showDetails);
+			this.add(this.hideDetails);
+			hideConsole();
+		}
+
+		private JButton getCloseButton() {
+			JButton button = new JButton(
+					PluginServices.getText(this, "aceptar"));
+			button.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					closeWindow();
+				}
+			});
+			return button;
+		}
+
+		private JButton getShowDetailsButton() {
+			JButton button = new JButton(PluginServices.getText(this,
+					"detalles") + " >>>");
+			button.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					showConsole();
+				}
+			});
+			return button;
+		}
+
+		private JButton getHideDetailsButton() {
+			JButton button = new JButton(PluginServices.getText(this,
+					"detalles") + " <<<");
+			button.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					hideConsole();
+				}
+			});
+			return button;
+		}
+
+		public void hideConsole() {
+			this.showDetails.setVisible(true);
+			this.hideDetails.setVisible(false);
+			this.console.setVisible(false);
+		}
+
+		public void showConsole() {
+			this.showDetails.setVisible(false);
+			this.hideDetails.setVisible(true);
+			this.console.setVisible(true);
+		}
+	}
+
+	class JPanelConsole extends JPanel {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -6651900105647107644L;
+
+		JPanelConsole() {
+			BorderLayout layout = new BorderLayout();
+			this.setLayout(new BorderLayout());
+			TitledBorder border = BorderFactory.createTitledBorder("Console");
+			this.setBorder(border);
+			this.setLayout(layout);
+			this.add(Consola.consolaFrame, BorderLayout.CENTER);
+		}
+	}
+
+	public Object getWindowModel() {
+		return "notification-dialog";
+	}
+
+	public WindowInfo getWindowInfo() {
+		WindowInfo info = new WindowInfo(WindowInfo.MODELESSDIALOG
+				| WindowInfo.ICONIFIABLE | WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
+		info.setTitle(PluginServices.getText(this, "Warning"));
+		info.setHeight(this.getPreferredSize().height);
+		info.setWidth(this.getPreferredSize().width);
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return WindowInfo.PROPERTIES_PROFILE;
+	}
+
+	public void errorEvent(MessageEvent e) {
+
+	       if (e.getMessages() != null) {
+	            for (int i = 0; i < e.getMessages().length; i++) {
+	                this.setDescription(e.getMessages()[i]);
+	            }
+	        }
+
+	    if (!canShowWindow(e.getExceptions())) {
+            try {
+                PluginServices.getMainFrame().getStatusBar().message(
+                    this.description.getDescription(),
+                    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.
+            }
+	        return;
+	    }
+	    
+
+		PluginServices.getMDIManager().restoreCursor();
+		if (SwingUtilities.isEventDispatchThread()) {
+			PluginServices.getMDIManager().addCentredWindow(this);
+		} else {
+			final IWindow win = this;
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					PluginServices.getMDIManager().addCentredWindow(win);
+				}
+			});
+		}
+	}
+
+	public void warningEvent(MessageEvent e) {
+	    
+		if (e.getMessages() != null) {
+			for (int i = 0; i < e.getMessages().length; i++) {
+				this.setDescription(e.getMessages()[i]);
+			}
+		}
+
+	      if (!canShowWindow(e.getExceptions())) {
+	            try {
+	                PluginServices.getMainFrame().getStatusBar().message(
+	                    this.description.getDescription(),
+	                    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.
+	            }
+	            return;
+	        }
+
+		PluginServices.getMDIManager().restoreCursor();
+		if (SwingUtilities.isEventDispatchThread()) {
+			PluginServices.getMDIManager().addCentredWindow(this);
+		} else {
+			final IWindow win = this;
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					PluginServices.getMDIManager().addCentredWindow(win);
+				}
+			});
+		}
+	}
+
+	public void infoEvent(MessageEvent e) {
+		// Do nothing, ignore info events
+	}
+	
+
+    private boolean canShowWindow(Throwable[] ths) {
+        
+        if (ths == null) {
+            return true;
+        }
+        try {
+            for (int n=0; n<ths.length; n++) {
+                StackTraceElement[] stack_ee = ths[n].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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/NotificationDialogNew.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/FirewallPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/FirewallPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/FirewallPage.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.9  2006/11/21 10:59:45  fjp
+* Fallo proxy con usuario y contrase�a
+*
+* Revision 1.8  2006/11/20 17:29:43  fjp
+* Fallo proxy con usuario y contrase�a
+*
+* Revision 1.7  2006/10/18 07:55:43  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/08/22 12:23:05  jaume
+* improved perfomance when saving changes
+*
+* Revision 1.5  2006/08/22 07:37:17  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/08/04 11:45:12  caballero
+* lanzo una excepci�n cuando falla el m�todo storeValues
+*
+* 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.coreplugin.preferences.network;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.Authenticator;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+import java.util.Properties;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+
+
+public class FirewallPage extends AbstractPreferencePage {
+
+	// Quiz� en vez de usar un prefs cada vez deber�amos de tener una clase gvSIG.java
+	// donde se guarden todas las preferencias, queda m�s limpio y m�s claro si se hace
+	// un: gvSIG.getProperty("gvsig.connection") que lo de abajo.
+	private static Preferences prefs = Preferences.userRoot().node( "gvsig.connection" );
+	private JCheckBox httpEnabled;
+	private JTextField httpHost;
+	private JTextField httpPort;
+	private JTextField httpUser;
+	private JPasswordField httpPass;
+	private JTextField httpNonProxy;
+	private JCheckBox socksEnabled;
+	private JTextField socksHost;
+	private JTextField socksPort;
+	protected static String id = FirewallPage.class.getName();
+	private ImageIcon icon;
+
+	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 FirewallPage() {
+		super();
+		icon=PluginServices.getIconTheme().get("edit-setup-firewall");
+		setParentID(NetworkPage.id);
+//		 checkbox
+		addComponent(httpEnabled = new JCheckBox(PluginServices.getText(this,
+			"options.firewall.http.enabled")));
+		// proxy host
+		addComponent(PluginServices.getText(this, "options.firewall.http.host") + ":",
+			httpHost = new JTextField("", 15));
+		// proxy port
+		addComponent(PluginServices.getText(this, "options.firewall.http.port") + ":",
+			httpPort = new JTextField("", 15));
+		// proxy username
+		addComponent(PluginServices.getText(this, "options.firewall.http.user") + ":",
+			httpUser = new JTextField("", 15));
+		// proxy password
+		addComponent(PluginServices.getText(this, "options.firewall.http.password") + ":",
+			httpPass = new JPasswordField("", 15));
+		// no proxy for
+		addComponent(PluginServices.getText(this, "options.firewall.http.nonProxy") + ":",
+			httpNonProxy = new JTextField("", 15));
+
+//		 checkbox
+		addComponent(socksEnabled = new JCheckBox(PluginServices.getText(this,
+			"options.firewall.socks.enabled")));
+		// proxy host
+		addComponent(PluginServices.getText(this, "options.firewall.socks.host") + ":",
+			socksHost = new JTextField("", 15));
+		// proxy port
+		addComponent(PluginServices.getText(this, "options.firewall.socks.port") + ":",
+			socksPort = new JTextField("", 15));
+
+	}
+
+	public void initializeValues() {
+
+		boolean enabled = prefs.getBoolean("firewall.http.enabled", false);
+		httpEnabled.setSelected(enabled);
+		httpHost.setEnabled(enabled);
+		httpHost.setText(prefs.get("firewall.http.host",""));
+		httpPort.setEnabled(enabled);
+		httpPort.setText(prefs.get("firewall.http.port",""));
+		httpUser.setEnabled(enabled);
+		httpUser.setText(prefs.get("firewall.http.user",""));
+		httpPass.setEnabled(enabled);
+		httpPass.setText(prefs.get("firewall.http.password",""));
+		httpNonProxy.setEnabled(enabled);
+		httpNonProxy.setText(prefs.get("firewall.http.nonProxyHosts",""));
+
+
+		httpEnabled.addActionListener(new ActionHandler());
+
+
+		enabled = prefs.getBoolean("firewall.socks.enabled", false);
+		socksEnabled.setSelected(enabled);
+		socksHost.setEnabled(enabled);
+		socksHost.setText(prefs.get("firewall.socks.host",""));
+		socksPort.setEnabled(enabled);
+		socksPort.setText(prefs.get("firewall.socks.port",""));
+
+		socksEnabled.addActionListener(new ActionHandler());
+
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "pref.network.firewall");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void storeValues() throws StoreException{
+		Properties systemSettings = System.getProperties();
+		URL httpURL, socksURL;
+
+		try {
+			httpURL = new URL(createURL(httpHost.getText(), httpPort.getText()));
+			prefs.putBoolean("firewall.http.enabled", httpEnabled.isSelected());
+			prefs.put("firewall.http.host", httpHost.getText());
+			prefs.put("firewall.http.port", httpPort.getText());
+			String proxyUser = httpUser.getText();
+			String proxyPassword = new String(httpPass.getPassword());
+			prefs.put("firewall.http.user", proxyUser);
+			prefs.put("firewall.http.password", proxyPassword);
+			prefs.put("firewall.http.nonProxyHosts", httpNonProxy.getText());
+
+			if (httpEnabled.isSelected()) {
+				systemSettings.put("http.proxySet", "true");
+				systemSettings.put("http.proxyHost", httpURL.getHost());
+				systemSettings.put("http.proxyPort", httpURL.getPort()+"");
+				systemSettings.put("http.proxyUserName", proxyUser);
+				systemSettings.put("http.proxyPassword", proxyPassword);
+			} else {
+				systemSettings.put("http.proxySet", "false");
+				systemSettings.remove("http.proxyHost");
+				systemSettings.remove("http.proxyPort");
+				systemSettings.remove("http.proxyUserName");
+				systemSettings.remove("http.proxyPassword");
+				prefs.remove("firewall.http.host");
+				prefs.remove("firewall.http.port");
+				prefs.remove("firewall.http.user");
+				prefs.remove("firewall.http.password");
+				prefs.remove("firewall.http.nonProxyHosts");
+
+			}
+
+			System.setProperties(systemSettings);
+			if (proxyUser != null )
+			{
+				Authenticator.setDefault(new ProxyAuth(proxyUser,
+				                                proxyPassword));
+			} else {
+				Authenticator.setDefault(new ProxyAuth("", ""));
+			}
+
+		} catch (MalformedURLException e) {
+			if (httpEnabled.isSelected()) {
+				throw new StoreException(PluginServices.getText(this, "options.firewall.http.incorrect_host"),e);
+			}
+		}
+
+		try {
+			socksURL = new URL(createURL(socksHost.getText(),socksPort.getText()));
+
+			prefs.putBoolean("firewall.socks.enabled", socksEnabled.isSelected());
+			prefs.put("firewall.socks.host", socksHost.getText());
+			prefs.put("firewall.socks.port", socksPort.getText());
+
+			if (socksEnabled.isSelected()) {
+				systemSettings.put("socksProxyHost", socksURL.getHost());
+				systemSettings.put("socksProxyPort", socksURL.getPort()+"");
+			} else {
+				systemSettings.remove("socksProxyHost");
+				systemSettings.remove("socksProxyPort");
+			}
+
+			System.setProperties(systemSettings);
+
+		} catch (MalformedURLException e) {
+			if (socksEnabled.isSelected()) {
+				throw new StoreException(PluginServices.getText(this, "options.firewall.socks.incorrect_host"),e);
+			}
+		}
+	}
+
+	public void initializeDefaults() {
+		httpEnabled.setSelected(false);
+		httpHost.setText("");
+		httpPort.setText("");
+		httpUser.setText("");
+		httpPass.setText("");
+		httpNonProxy.setText("");
+		socksEnabled.setSelected(false);
+		socksHost.setText("");
+		socksPort.setText("");
+
+	}
+
+	private class ActionHandler implements ActionListener {
+		public void actionPerformed(ActionEvent evt) {
+			httpHost.setEnabled(httpEnabled.isSelected());
+			httpPort.setEnabled(httpEnabled.isSelected());
+			httpUser.setEnabled(httpEnabled.isSelected());
+			httpPass.setEnabled(httpEnabled.isSelected());
+			httpNonProxy.setEnabled(httpEnabled.isSelected());
+			socksHost.setEnabled(socksEnabled.isSelected());
+			socksPort.setEnabled(socksEnabled.isSelected());
+		}
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return hasChanged();
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}	
+
+	private String createURL(String host, String port){
+		StringBuffer strUrl = new StringBuffer();
+		// add "http://" prefix if it wasn't included.
+		strUrl.append(host.toLowerCase().startsWith("http://")
+				? host.toLowerCase() : "http://"+ host.toLowerCase());
+
+		// add port
+		strUrl.append(!port.equals("")
+				? ":" + port : "");
+		return strUrl.toString();
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/FirewallPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/NetworkPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/NetworkPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/NetworkPage.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.10  2007/09/19 16:16:52  jaume
+* removed unnecessary imports
+*
+* Revision 1.9  2006/11/20 17:29:43  fjp
+* Fallo proxy con usuario y contrase�a
+*
+* Revision 1.8  2006/09/12 10:11:25  jaume
+* *** empty log message ***
+*
+* Revision 1.7.4.1  2006/09/08 11:56:24  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/08/22 12:23:05  jaume
+* improved perfomance when saving changes
+*
+* Revision 1.6  2006/08/22 07:37:17  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/08/04 11:45:12  caballero
+* lanzo una excepci�n cuando falla el m�todo storeValues
+*
+* Revision 1.4  2006/07/31 10:02:31  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/07/03 10:46:01  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.6  2006/06/06 10:26:31  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/06/05 17:07:17  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/06/05 10:06:08  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/06/05 09:13:22  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/06/05 08:11:38  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/06/02 10:50:18  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/06/01 15:54:09  jaume
+* added preferences extension
+*
+*
+*/
+package org.gvsig.coreplugin.preferences.network;
+
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.ui.mdiFrame.JToolBarButton;
+
+
+/**
+ * General network connection page.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class NetworkPage extends AbstractPreferencePage {
+	//private static Preferences prefs = Preferences.userRoot().node( "gvsig.connection" );
+	private ImageIcon icon;
+	private JLabel lblNetworkStatus;
+	private JToolBarButton btnRefresh;
+	protected static String id;
+
+
+	public NetworkPage() {
+		super();
+		id = this.getClass().getName();
+		icon=PluginServices.getIconTheme().get("edit-setup-network");
+		lblNetworkStatus = new JLabel();
+		lblNetworkStatus.setFont(lblNetworkStatus.getFont().deriveFont(Font.BOLD));
+		lblNetworkStatus.setText(PluginServices.getText(this, "optinos.network.click_to_test_connection"));
+		JPanel aux = new JPanel();
+		aux.add(getBtnCheckConnection());
+		addComponent(PluginServices.getText(this, "options.network.status") + ":", lblNetworkStatus	);
+		addComponent("", aux);
+
+	}
+
+	private JToolBarButton getBtnCheckConnection() {
+		if (btnRefresh == null) {
+			btnRefresh = new JToolBarButton(PluginServices.getText(this, "test_now"));
+			btnRefresh.addActionListener(new ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					refreshStatus();
+				};
+			});
+		}
+		return btnRefresh;
+	}
+
+	private void refreshStatus() {
+		boolean connected = isConnected();
+		ImageIcon statusIcon;
+		String statusText;
+		if (connected) {
+			statusIcon = PluginServices.getIconTheme().get("kde-network-online-icon") ;
+			statusText = PluginServices.getText(this, "online");
+		} else {
+			statusIcon = PluginServices.getIconTheme().get("kde-network-offline-icon");
+			statusText = PluginServices.getText(this, "offline");
+		}
+		lblNetworkStatus.setIcon(statusIcon);
+		lblNetworkStatus.setText(statusText);
+
+	}
+
+	private boolean isConnected() {
+		try {
+			URL url = new URL("http://www.google.com");
+			url.openConnection();
+			url.openStream();
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "pref.network");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+
+	public void initializeValues() {
+
+
+	}
+
+	public void storeValues() {
+
+	}
+
+	public void initializeDefaults() {
+		// nothing
+	}
+
+	class ActionHandler implements ActionListener {
+		public void actionPerformed(ActionEvent evt) {
+
+		}
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return hasChanged();
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/network/NetworkPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/BrowserControlPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/BrowserControlPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/BrowserControlPage.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id: BrowserControlPage.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+* $Log$
+* Revision 1.3  2007-09-19 16:16:52  jaume
+* removed unnecessary imports
+*
+* Revision 1.2  2007/01/10 18:28:58  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2007/01/10 16:55:04  jaume
+* default browser now configurable in linux
+*
+*
+*/
+package org.gvsig.coreplugin.preferences.general;
+
+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.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.utils.BrowserControl;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.JComboBox;
+
+/**
+ * <p><b>Preference page</b> for system browser's properties.<br></p>
+ *
+ * <p>At the moment, this page will allow the <b>linux</b> users to select
+ * a web browser and how to open it when the app needs to do such thing.<br>
+ * For instance when following a link to a web page.<br></p>
+ *
+ * <p>This is the merely purpose of it, and it makes that this page has no
+ * sense for windows users. That is why it does not appear in windows platforms.</p>
+ *
+ * <p>If you decide to extend this purpose, then you should enable it for those platforms
+ * (or any) you want.</p>
+ * TODO to know what about Mac platforms.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class BrowserControlPage extends AbstractPreferencePage implements ActionListener{
+
+	private static final String DEFAULT_BROWSER_KEY_NAME = "DefaultBrowser";
+	private String id;
+	private ImageIcon icon;
+	private JRadioButton rdBtnSelectBrowser;
+	private JRadioButton rdBtnSpecifyCommand;
+	private JComboBox cmbBrowsers;
+	private JTextField txtCustomCommand;
+	private ArrayList supportedBrowsers = BrowserControl.getSupportedBrowsers();
+
+	public BrowserControlPage() {
+		super();
+		id = this.getClass().getName();
+		icon = PluginServices.getIconTheme().get("edit-setup-browsercontrol");
+		setParentID(GeneralPage.id);
+
+		JPanel aux;
+
+		ButtonGroup group = new ButtonGroup();
+		rdBtnSelectBrowser = new JRadioButton(PluginServices.getText(this, "options.general.browser.select_a_known_browser"));
+		rdBtnSelectBrowser.addActionListener(this);
+
+		aux = new JPanel(new FlowLayout(FlowLayout.LEADING));
+		cmbBrowsers = new JComboBox(
+				(String[]) supportedBrowsers.toArray(new String[0]));
+		aux.add(cmbBrowsers);
+
+		addComponent(rdBtnSelectBrowser, aux);
+
+		rdBtnSpecifyCommand = new JRadioButton(PluginServices.getText(this, "options.general.browser.specify_a_command"));
+		rdBtnSpecifyCommand.setVerticalAlignment(SwingConstants.BOTTOM);
+		rdBtnSpecifyCommand.addActionListener(this);
+		aux = new JPanel(new FlowLayout(FlowLayout.LEADING));
+		aux.add(txtCustomCommand = new JTextField(25));
+		addComponent(rdBtnSpecifyCommand, aux);
+		group.add(rdBtnSelectBrowser);
+		group.add(rdBtnSpecifyCommand);
+
+		actionPerformed(null);
+	}
+
+	public void storeValues() throws StoreException {
+		String cmd =
+			rdBtnSelectBrowser.isSelected()
+			? (String) cmbBrowsers.getSelectedItem()
+			: txtCustomCommand.getText();
+		BrowserControl.setBrowserCommand(cmd);
+
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		xml.putProperty(DEFAULT_BROWSER_KEY_NAME, cmd);
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "browser");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		// Default Projection
+		if (xml.contains(DEFAULT_BROWSER_KEY_NAME)) {
+			String cmd = xml.getStringProperty(DEFAULT_BROWSER_KEY_NAME);
+			boolean b = supportedBrowsers.contains(cmd);
+			if (b) {
+				cmbBrowsers.setSelectedItem(cmd);
+				cmbBrowsers.setEnabled(true);
+				txtCustomCommand.setEnabled(false);
+			} else {
+				txtCustomCommand.setText(cmd);
+				txtCustomCommand.setEnabled(true);
+				cmbBrowsers.setEnabled(false);
+			}
+			rdBtnSelectBrowser.setSelected(b);
+			rdBtnSpecifyCommand.setSelected(!b);
+		} else {
+			initializeDefaults();
+		}
+	}
+
+	public void initializeDefaults() {
+		rdBtnSelectBrowser.setSelected(true);
+		actionPerformed(null);
+		cmbBrowsers.setSelectedItem(BrowserControl.FIREFOX);
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+		if (rdBtnSelectBrowser.isSelected()) {
+			cmbBrowsers.setEnabled(true);
+			txtCustomCommand.setEnabled(false);
+
+		} else if (rdBtnSpecifyCommand.isSelected()) {
+			txtCustomCommand.setEnabled(true);
+			cmbBrowsers.setEnabled(false);
+		}
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/BrowserControlPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml	(revision 46118)
@@ -0,0 +1,515 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml</at>
+   <at name="rowspecs">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</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">3</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="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="name">label_title</at>
+            <at name="width">951</at>
+            <at name="text">_Icon_themes_availables</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">3</at>
+           <at name="colspan">3</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="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="name">label_selection</at>
+            <at name="width">951</at>
+            <at name="text">_Select_an_icon_theme_as_default_for_use_in_the_application</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</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.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="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="name">combo_selection</at>
+            <at name="width">919</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">6</at>
+           <at name="colspan">2</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">embedded.D323b47eN16915d59eb2RD7fff</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="name">lblScaleFactor</at>
+                 <at name="width">76</at>
+                 <at name="text">_Scale_factor</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="name">txtScaleFactor</at>
+                 <at name="width">834</at>
+                 <at name="height">20</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="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>
+            <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>
+             </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="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="9">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="4"/>
+       </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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/FolderingPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/FolderingPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/FolderingPage.java	(revision 46118)
@@ -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.
+ */
+/* CVS MESSAGES:
+*
+* $Id: FolderingPage.java 38564 2012-07-16 11:19:13Z jjdelcerro $
+* $Log$
+* Revision 1.8  2007-01-26 13:35:06  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/10/02 07:12:12  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/09/13 16:21:00  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/09/12 12:09:51  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/09/12 11:49:04  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/09/12 10:11:25  jaume
+* *** empty log message ***
+*
+* Revision 1.1.2.1  2006/09/08 11:56:24  jaume
+* *** empty log message ***
+*
+*
+*/
+package org.gvsig.coreplugin.preferences.general;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.filechooser.FileFilter;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import static org.gvsig.coreplugin.PreferencesExtension.DATA_FOLDER_PROPERTY_NAME;
+import static org.gvsig.coreplugin.PreferencesExtension.PROJECTS_FOLDER_PROPERTY_NAME;
+import static org.gvsig.coreplugin.PreferencesExtension.SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME;
+import static org.gvsig.coreplugin.PreferencesExtension.TEMPLATES_FOLDER_PROPERTY_NAME;
+import org.gvsig.gui.beans.swing.JButton;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.folders.FoldersManager;
+import org.gvsig.utils.XMLEntity;
+
+/**
+ *
+ * In the FolderingPage the user sets which folder paths should be used by
+ * default.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class FolderingPage extends AbstractPreferencePage{
+	private static Preferences prefs = Preferences.userRoot().node( "gvsig.foldering" );
+
+	private JTextField txtProjectsFolder;
+	private JTextField txtDataFolder;
+	private JTextField txtTemplatesFolder;
+	private JTextField txtSymbolLibraryFolder;
+	private JButton btnSelectProjectsFolder;
+	private JButton btnSelectDataFolder;
+	private JButton btnSelectTemplatesFolder;
+	private JButton btnSelectSymbolLibraryFolder;
+	private ImageIcon icon;
+	private ActionListener btnFileChooserAction;
+
+
+
+	public FolderingPage() {
+		super();
+		setParentID(GeneralPage.id);
+		icon = PluginServices.getIconTheme().get("edit-setup-foldering");
+
+		btnFileChooserAction = new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				String path;
+				if (e.getSource().equals(btnSelectProjectsFolder)) {
+					path = txtProjectsFolder.getText();
+				} else if (e.getSource().equals(btnSelectDataFolder)) {
+					path = txtDataFolder.getText();
+				} else if (e.getSource().equals(btnSelectSymbolLibraryFolder)) {
+					path = txtSymbolLibraryFolder.getText();
+				} else {
+					path = txtTemplatesFolder.getText();
+				}
+
+				// The file filter for the JFileChooser
+				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(file);
+				} else {
+					fc = new JFileChooser();
+				}
+
+				fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+                fc.setMultiSelectionEnabled(false);
+                fc.setAcceptAllFileFilterUsed(false);
+                fc.addChoosableFileFilter(def);
+                int result = fc.showOpenDialog(FolderingPage.this);
+
+                if (result == JFileChooser.APPROVE_OPTION && (file = fc.getSelectedFile()) != null) {
+                	if (e.getSource().equals(btnSelectProjectsFolder)) {
+    					txtProjectsFolder.setText(file.getAbsolutePath());
+                	} else if (e.getSource().equals(btnSelectDataFolder)) {
+                		txtDataFolder.setText(file.getAbsolutePath());
+                	} else if (e.getSource().equals(btnSelectSymbolLibraryFolder)) {
+                	    txtSymbolLibraryFolder.setText(file.getAbsolutePath());
+        			} else {
+    					txtTemplatesFolder.setText(file.getAbsolutePath());
+    				}
+                }
+			}
+
+		};
+		btnSelectProjectsFolder = new JButton(PluginServices.getText(this, "browse"));
+		btnSelectProjectsFolder.addActionListener(btnFileChooserAction);
+		btnSelectDataFolder = new JButton(PluginServices.getText(this, "browse"));
+		btnSelectDataFolder.addActionListener(btnFileChooserAction);
+		btnSelectTemplatesFolder = new JButton(PluginServices.getText(this, "browse"));
+		btnSelectTemplatesFolder.addActionListener(btnFileChooserAction);
+		btnSelectSymbolLibraryFolder = new JButton(PluginServices.getText(this, "browse"));
+		btnSelectSymbolLibraryFolder.addActionListener(btnFileChooserAction);
+
+
+		JLabel lblProjectsFolder = new JLabel("<html><b>" +
+				PluginServices.
+				getText(this, "options.foldering.projects_folder") +
+		"</b></html>");
+		addComponent(lblProjectsFolder);
+		addComponent(txtProjectsFolder = new JTextField(30), btnSelectProjectsFolder);
+		addComponent(new JLabel(" "));
+
+		JLabel lblDataFolder = new JLabel("<html><b>" +
+				PluginServices.
+				getText(this, "options.foldering.data_folder") +
+		"</b></html>");
+		addComponent(lblDataFolder);
+		addComponent(txtDataFolder = new JTextField(30), btnSelectDataFolder);
+		addComponent(new JLabel(" "));
+
+		JLabel lblTemplatesFolder = new JLabel("<html><b>" +
+				PluginServices.
+				getText(this, "options.foldering.template_folder") +
+		"</b></html>");
+		addComponent(lblTemplatesFolder);
+		addComponent(txtTemplatesFolder = new JTextField(30), btnSelectTemplatesFolder);
+		addComponent(new JLabel(" "));
+
+		JLabel lblSymbolLibraryFolder = new JLabel("<html><b>" +
+				PluginServices.
+				getText(this, "options.foldering.symbol_library_folder") +
+		"</b></html>");
+		addComponent(lblSymbolLibraryFolder);
+		addComponent(txtSymbolLibraryFolder = new JTextField(30), btnSelectSymbolLibraryFolder);
+		addComponent(new JLabel(" "));
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+
+		if (xml.contains(PROJECTS_FOLDER_PROPERTY_NAME)) {
+			prefs.put(PROJECTS_FOLDER_PROPERTY_NAME, xml.getStringProperty(PROJECTS_FOLDER_PROPERTY_NAME));
+		}
+
+		if (xml.contains(DATA_FOLDER_PROPERTY_NAME)) {
+			prefs.put(DATA_FOLDER_PROPERTY_NAME, xml.getStringProperty(DATA_FOLDER_PROPERTY_NAME));
+		}
+
+		if (xml.contains(TEMPLATES_FOLDER_PROPERTY_NAME)) {
+			prefs.put(TEMPLATES_FOLDER_PROPERTY_NAME, xml.getStringProperty(TEMPLATES_FOLDER_PROPERTY_NAME));
+		}
+
+		if (xml.contains(SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME)) {
+			prefs.put(SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME, xml.getStringProperty(SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME));
+		}
+
+	}
+
+	public void storeValues() throws StoreException {
+		File f;
+		String path, propertyName;
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+        FoldersManager foldersManager = ToolsLocator.getFoldersManager();
+
+		// Projects folder
+		propertyName = PROJECTS_FOLDER_PROPERTY_NAME;
+		path = txtProjectsFolder.getText();
+
+		if (path.equals("")) {
+			if (xml.contains(propertyName)) {
+				xml.remove(propertyName);
+			}
+			prefs.remove(propertyName);
+		} else {
+			f = new File(path);
+			if (f.exists()) {
+				if (xml.contains(propertyName)) {
+					xml.remove(propertyName);
+				}
+				xml.putProperty(propertyName, f.getAbsolutePath());
+				prefs.put(propertyName, f.getAbsolutePath());
+                foldersManager.set(propertyName, f);
+			}
+		}
+
+		// Data folder
+		propertyName = DATA_FOLDER_PROPERTY_NAME;
+		path = txtDataFolder.getText();
+
+		if (path.equals("")) {
+			if (xml.contains(propertyName)) {
+				xml.remove(propertyName);
+			}
+			prefs.remove(propertyName);
+		} else {
+			f = new File(path);
+			if (f.exists()) {
+				if (xml.contains(propertyName)) {
+					xml.remove(propertyName);
+				}
+				xml.putProperty(propertyName, f.getAbsolutePath());
+				prefs.put(propertyName, f.getAbsolutePath());
+                foldersManager.set(propertyName, f);
+			}
+		}
+
+		// Templates folder
+		propertyName = TEMPLATES_FOLDER_PROPERTY_NAME;
+		path = txtTemplatesFolder.getText();
+
+		if (path.equals("")) {
+			if (xml.contains(propertyName)) {
+				xml.remove(propertyName);
+			}
+			prefs.remove(propertyName);
+		} else {
+			f = new File(path);
+			if (f.exists()) {
+				if (xml.contains(propertyName)) {
+					xml.remove(propertyName);
+				}
+				xml.putProperty(propertyName, f.getAbsolutePath());
+				prefs.put(propertyName, f.getAbsolutePath());
+                foldersManager.set(propertyName, f);
+			}
+		}
+
+		// Symbol library folder
+		propertyName = SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME;
+		path = txtSymbolLibraryFolder.getText();
+
+		if (path.equals("")) {
+			if (xml.contains(propertyName)) {
+				xml.remove(propertyName);
+			}
+			prefs.remove(propertyName);
+		} else {
+			f = new File(path);
+			if (f.exists()) {
+				if (xml.contains(propertyName)) {
+					xml.remove(propertyName);
+				}
+				xml.putProperty(propertyName, f.getAbsolutePath());
+				prefs.put(propertyName, f.getAbsolutePath());
+                foldersManager.set(propertyName, f);
+			}
+		}
+
+	}
+
+	public void setChangesApplied() {
+		setChanged(false);
+	}
+
+	public String getID() {
+		return this.getClass().getName();
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "options.foldering.title");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		PluginServices ps = PluginServices.getPluginServices(this);
+		XMLEntity xml = ps.getPersistentXML();
+		if (xml.contains(PROJECTS_FOLDER_PROPERTY_NAME)) {
+			txtProjectsFolder.setText(xml.getStringProperty(PROJECTS_FOLDER_PROPERTY_NAME));
+		}
+		if (xml.contains(DATA_FOLDER_PROPERTY_NAME)) {
+			txtDataFolder.setText(xml.getStringProperty(DATA_FOLDER_PROPERTY_NAME));
+		}
+		if (xml.contains(TEMPLATES_FOLDER_PROPERTY_NAME)) {
+			txtTemplatesFolder.setText(xml.getStringProperty(TEMPLATES_FOLDER_PROPERTY_NAME));
+		}
+		if (xml.contains(SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME)) {
+			txtSymbolLibraryFolder.setText(xml.getStringProperty(SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME));
+		}
+	}
+
+	public void initializeDefaults() {
+	    txtProjectsFolder.setText("");
+		txtDataFolder.setText("");
+		txtTemplatesFolder.setText("");
+		txtSymbolLibraryFolder.setText("");
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		return super.hasChanged();
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/FolderingPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.java	(revision 46118)
@@ -0,0 +1,165 @@
+package org.gvsig.coreplugin.preferences.general;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+
+public class IconThemePageLayout extends JPanel
+{
+   JLabel label_title = new JLabel();
+   JLabel label_selection = new JLabel();
+   JComboBox combo_selection = new JComboBox();
+   JLabel lblScaleFactor = new JLabel();
+   JTextField txtScaleFactor = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public IconThemePageLayout()
+   {
+      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","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);
+
+      label_title.setName("label_title");
+      label_title.setText("_Icon_themes_availables");
+      jpanel1.add(label_title,cc.xywh(2,2,3,1));
+
+      label_selection.setName("label_selection");
+      label_selection.setText("_Select_an_icon_theme_as_default_for_use_in_the_application");
+      jpanel1.add(label_selection,cc.xywh(2,3,3,1));
+
+      combo_selection.setName("combo_selection");
+      jpanel1.add(combo_selection,cc.xy(3,4));
+
+      jpanel1.add(createPanel1(),cc.xywh(2,6,2,1));
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4 },new int[]{ 1,2,3,4,5,6,7,8,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblScaleFactor.setName("lblScaleFactor");
+      lblScaleFactor.setText("_Scale_factor");
+      jpanel1.add(lblScaleFactor,cc.xy(1,1));
+
+      txtScaleFactor.setName("txtScaleFactor");
+      jpanel1.add(txtScaleFactor,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePageLayout.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.java	(revision 46118)
@@ -0,0 +1,168 @@
+/*
+ * 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.coreplugin.preferences.general;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+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.coreplugin.PreferencesExtension;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author usuario
+ */
+public class NotificationsPage extends AbstractPreferencePage {
+
+    /**
+     * Creates new form NotificationsPage
+     */
+    public NotificationsPage() {
+        initComponents();
+        translate();
+    }
+
+    /**
+     * 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();
+        jchkShowInConsole = new JCheckBox();
+        jchkShowInStatusbar = new JCheckBox();
+        jLabel2 = new JLabel();
+
+        GridBagLayout layout = new GridBagLayout();
+        layout.columnWidths = new int[] {0, 5, 0};
+        layout.rowHeights = new int[] {0, 5, 0, 5, 0, 5, 0};
+        setLayout(layout);
+
+        jLabel1.setText("Select the notification mode");
+        jLabel1.setHorizontalTextPosition(SwingConstants.LEFT);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
+        add(jLabel1, gridBagConstraints);
+
+        jchkShowInConsole.setText("Show notificacion in console window");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 4;
+        gridBagConstraints.anchor = GridBagConstraints.WEST;
+        add(jchkShowInConsole, gridBagConstraints);
+
+        jchkShowInStatusbar.setText("Show notifications in statusbar");
+        jchkShowInStatusbar.setHorizontalAlignment(SwingConstants.LEFT);
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.anchor = GridBagConstraints.WEST;
+        add(jchkShowInStatusbar, gridBagConstraints);
+
+        jLabel2.setText("The changes take effect in next execution of the application");
+        gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 6;
+        add(jLabel2, gridBagConstraints);
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    protected JLabel jLabel1;
+    protected JLabel jLabel2;
+    protected JCheckBox jchkShowInConsole;
+    protected JCheckBox jchkShowInStatusbar;
+    // End of variables declaration//GEN-END:variables
+
+    private void translate() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        
+        jLabel1.setText(i18nManager.getTranslation("Select_the_notification_mode"));
+        jchkShowInConsole.setText(i18nManager.getTranslation("Show_notifications_in_the_console_window"));
+        jchkShowInStatusbar.setText(i18nManager.getTranslation("Show_notifications_in_the_statusbar"));
+        jLabel2.setText(i18nManager.getTranslation("Los_cambios_efectuados_sobre_estos_valores_se_aplicaran_al_reiniciar_la_aplicacion"));
+    }
+    
+    @Override
+    public void storeValues() throws StoreException {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
+        
+        DynObject pluginProperties = plugin.getPluginProperties();
+        pluginProperties.setDynValue(
+                "showNotificationsInConsole", 
+                new Boolean(jchkShowInConsole.isSelected())
+        );
+        pluginProperties.setDynValue(
+                "showNotificationsInStatusbar", 
+                new Boolean(jchkShowInStatusbar.isSelected())
+        );
+        plugin.savePluginProperties();
+    }
+
+    @Override
+    public void setChangesApplied() {
+
+    }
+
+    public String getID() {
+        return this.getClass().getName();
+    }
+
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("notifications_mode");
+    }
+
+    public JPanel getPanel() {
+        return this;
+    }
+
+    public void initializeValues() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
+        
+        DynObject pluginProperties = plugin.getPluginProperties();
+        jchkShowInStatusbar.setSelected(
+                ((Boolean)pluginProperties.getDynValue("showNotificationsInStatusbar")).booleanValue());
+        jchkShowInConsole.setSelected(
+                ((Boolean)pluginProperties.getDynValue("showNotificationsInConsole")).booleanValue());
+    }
+
+    public void initializeDefaults() {
+        jchkShowInStatusbar.setSelected(true);
+        jchkShowInConsole.setSelected(false);
+    }
+
+    public ImageIcon getIcon() {
+        return null;
+    }
+
+    public boolean isValueChanged() {
+        return true;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/SkinPreferences.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/SkinPreferences.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/SkinPreferences.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+import java.util.prefs.Preferences;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.plugins.config.generate.SkinExtension;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
+import org.gvsig.utils.XMLEntity;
+import org.gvsig.utils.swing.JComboBox;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class SkinPreferences extends AbstractPreferencePage {
+
+	private static final Logger logger = LoggerFactory.getLogger(SkinPreferences.class);
+	private String id;
+	private ImageIcon icon;
+	private Vector listSkinsPlugins;
+	private JComboBox comboBox;
+	private String skinName = "org.gvsig.coreplugin.mdiManager.NewSkin";
+
+	public SkinPreferences() {
+		super();
+		// TODO Auto-generated constructor stub
+		id = this.getClass().getName();
+		setParentID(GeneralPage.id);
+		icon = PluginServices.getIconTheme().get("edit-setup-skin");
+	}
+
+	public void setChangesApplied() {
+		// System.out.println("ESTOY LLAMANDO A setChangesApplied()");
+
+	}
+
+	public void storeValues() throws StoreException {
+		// System.out.println("ESTOY LLAMANDO A storeValues()");
+		PluginServices ps = PluginServices.getPluginServices("org.gvsig.coreplugin");
+		XMLEntity xml = ps.getPersistentXML();
+		xml.putProperty("Skin-Selected", skinName);
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public JPanel getPanel() {
+
+		if (comboBox == null) {
+			comboBox = getComboBox();
+
+			addComponent(new JLabel(PluginServices.getText(this, "skin_label")));
+
+			addComponent(comboBox);
+		}
+
+		return this;
+	}
+
+	private JComboBox getComboBox() {
+		comboBox = new JComboBox(listSkinsPlugins);
+
+		comboBox.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				JComboBox cb = (JComboBox) e.getSource();
+				String newSkinName = (String) cb.getSelectedItem();
+				if (newSkinName != null)
+					if (!newSkinName.equals(skinName)) {
+						skinName = newSkinName;
+						JOptionPane.showMessageDialog(null, PluginServices
+								.getText(this, "skin_message"));
+					}
+			}
+
+		});
+
+		comboBox.setSelectedItem(skinName);
+		return comboBox;
+	}
+
+	public String getTitle() {
+		// TODO Auto-generated method stub
+		return PluginServices.getText(this, "skin");
+	}
+
+	public void initializeDefaults() {
+		// TODO Auto-generated method stub
+		// System.out.println("inicialize Defaults");
+
+	}
+
+	public void initializeValues() {
+		listSkinsPlugins = new Vector();
+
+		HashMap pluginsConfig = Launcher.getPluginConfig();
+		Iterator i = pluginsConfig.keySet().iterator();
+
+		while (i.hasNext()) {
+			String name = (String) i.next();
+			PluginConfig pc = (PluginConfig) pluginsConfig.get(name);
+
+			if (pc.getExtensions().getSkinExtension() != null) {
+				SkinExtension[] se = pc.getExtensions().getSkinExtension();
+				for (int j=0;j<se.length;j++){
+					String extensionName = se[j].getClassName();
+					listSkinsPlugins.add(extensionName );
+					logger.info("Skin plugin '"+name + "', extension '"+ extensionName +".");
+				}
+			}
+		}
+
+
+		PluginServices ps = PluginServices.getPluginServices("org.gvsig.coreplugin");
+		XMLEntity xml = ps.getPersistentXML();
+		if (xml.contains("Skin-Selected")) {
+			skinName = xml.getStringProperty("Skin-Selected");
+
+		}
+
+
+
+	}
+
+	public boolean isValueChanged() {
+		// TODO Auto-generated method stub
+		// System.out.println("is value changed");
+		return true;
+	}
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/SkinPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePage.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+import com.lowagie.text.ListItem;
+import java.awt.BorderLayout;
+import java.util.prefs.Preferences;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.text.DocumentFilter;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.documentfilters.DoubleDocumentFilter;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.gvsig.tools.swing.icontheme.IconThemeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IconThemePage extends AbstractPreferencePage {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4369071892027860769L;
+
+    private static final Logger logger = LoggerFactory.getLogger(IconThemePage.class);
+
+    private final String id;
+    private boolean changed = false;
+    private IconThemePageLayout panel = null;
+    private ImageIcon icon = null;
+
+    public IconThemePage() {
+        super();
+        initialize();
+        id = this.getClass().getName();
+        setParentID(GeneralPage.class.getName());
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        return Messages.getText("_Icon_theme");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+    @Override
+    public void initializeValues() {
+        final IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
+        Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
+        String themeId = prefs.get("default-theme",null);
+        double scaleFactor;
+        try {
+            scaleFactor = prefs.getDouble("scaleFactor",1.0);
+        } catch(Throwable th) {
+            scaleFactor = 1.0;
+        }
+        ListElement.setSelected(panel.combo_selection, iconManager.get(themeId));
+        DoubleDocumentFilter.install(panel.txtScaleFactor);
+    }
+
+    @Override
+    public void storeValues() throws StoreException {
+        Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
+        IconTheme iconTheme = (IconTheme) ListElement.getSelected(panel.combo_selection);
+        if (iconTheme != null && iconTheme != iconTheme.getDefault()) {
+            prefs.put("default-theme", iconTheme.getID());
+        }
+        if( DoubleDocumentFilter.isValid(panel.txtScaleFactor) ) {
+            double scaleFactor = DoubleDocumentFilter.getValue(panel.txtScaleFactor);
+            prefs.putDouble("scaleFactor", scaleFactor);
+        }
+
+    }
+
+    @Override
+    public void initializeDefaults() {
+
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        if (icon == null) {
+            icon = IconThemeHelper.getImageIcon("edit-setup-icontheme");
+        }
+        return icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        if (panel.combo_selection.getSelectedIndex() >= 0) {
+            return true;
+        }
+        if( DoubleDocumentFilter.isValid(panel.txtScaleFactor) ) {
+            double scaleFactor = DoubleDocumentFilter.getValue(panel.txtScaleFactor);
+            Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
+            try {
+                if( scaleFactor != prefs.getDouble("scaleFactor",1.0) ) {
+                    return true;
+                }
+            } catch(Throwable th) {
+            }
+        }
+        return changed;
+    }
+
+    @Override
+    public void setChangesApplied() {
+        changed = false;
+    }
+
+    private void initialize() {
+        final IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
+        this.setLayout(new BorderLayout());
+
+        this.panel = new IconThemePageLayout();
+
+        DefaultComboBoxModel<ListElement<IconTheme>> model = new DefaultComboBoxModel<>();
+        for (int i = 0; i < iconManager.getCount(); i++) {
+            IconTheme iconTheme = iconManager.get(i);
+            model.addElement(new ListElement<>(
+                    StringUtils.abbreviate(iconTheme.toString(), 60),
+                    iconTheme
+                )
+            );
+        }
+        this.panel.combo_selection.setModel(model);
+
+        Preferences prefs = Preferences.userRoot().node("gvsig.icontheme");
+        double scaleFactor;
+        try {
+            scaleFactor = prefs.getDouble("scaleFactor",1.0);
+        } catch(Throwable th) {
+            scaleFactor = 1.0;
+        }
+        this.panel.txtScaleFactor.setText(String.format("%f", scaleFactor));
+
+        // Traducir las etiquetas del panel
+        panel.label_title.setText(translate(panel.label_title.getText()));
+        panel.label_selection.setText(translate(panel.label_selection.getText()));
+
+        this.add(panel, BorderLayout.CENTER);
+    }
+
+    private String translate(String s) {
+        return Messages.getText(s);
+    }
+
+//    private void createDefaultIconTheme() {
+//        PluginsManager pluginsManager = PluginsLocator.getManager();
+//        IconThemeManager iconManager = ToolsSwingLocator.getIconThemeManager();
+//
+//        File f = new File(pluginsManager.getApplicationHomeFolder(), "icon-theme");
+//        if (!f.exists()) {
+//            f.mkdir();
+//        }
+//        IconTheme theme = iconManager.getDefault();
+//        File f2 = new File(f, theme.getID());
+//        if (!f2.exists()) {
+//            logger.info("Creating default icon theme in " + f.getAbsolutePath());
+//            theme.export(f);
+//        }
+//    }
+
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+   
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/IconThemePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.form
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.form	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/NotificationsPage.form	(revision 46118)
@@ -0,0 +1,409 @@
+<?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,78,0,0,1,-7"/>
+  </AuxValues>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Select the notification mode"/>
+        <Property name="horizontalTextPosition" type="int" value="2"/>
+      </Properties>
+      <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="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jchkShowInConsole">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Show notificacion in console window"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jchkShowInStatusbar">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Show notifications in statusbar"/>
+        <Property name="horizontalAlignment" type="int" value="2"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
+          <GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" 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="The changes take effect in next execution of the application"/>
+      </Properties>
+      <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>
+  </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]"/>
+            </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]"/>
+            </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="0"/>
+          </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="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="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="10_jLabel1">
+          <CodeVariable name="jLabel1" type="8196" 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="0"/>
+          </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="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="14">
+          <ExpressionOrigin>
+            <Value type="int" value="17"/>
+          </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_jchkShowInConsole">
+          <CodeVariable name="jchkShowInConsole" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jchkShowInConsole"/>
+            </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="0"/>
+          </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="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="fill" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="19">
+          <ExpressionOrigin>
+            <Value type="int" value="2"/>
+          </ExpressionOrigin>
+        </CodeExpression>
+      </Parameters>
+    </CodeStatement>
+    <CodeStatement>
+      <CodeExpression id="16_gridBagConstraints"/>
+      <StatementProvider type="CodeField">
+        <CodeField name="anchor" class="java.awt.GridBagConstraints"/>
+      </StatementProvider>
+      <Parameters>
+        <CodeExpression id="20">
+          <ExpressionOrigin>
+            <Value type="int" value="17"/>
+          </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_jchkShowInStatusbar">
+          <CodeVariable name="jchkShowInStatusbar" type="8196" declaredType="javax.swing.JCheckBox"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jchkShowInStatusbar"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="16_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="0"/>
+          </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="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="25_jLabel2">
+          <CodeVariable name="jLabel2" type="8196" declaredType="javax.swing.JLabel"/>
+          <ExpressionOrigin>
+            <ExpressionProvider type="ComponentRef">
+              <ComponentRef name="jLabel2"/>
+            </ExpressionProvider>
+          </ExpressionOrigin>
+        </CodeExpression>
+        <CodeExpression id="22_gridBagConstraints"/>
+      </Parameters>
+    </CodeStatement>
+  </LayoutCode>
+</Form>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionPage.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+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 java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.HashMap;
+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 javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+import org.gvsig.andami.Launcher;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.config.generate.Extension;
+import org.gvsig.andami.plugins.config.generate.PluginConfig;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+import org.gvsig.andami.preferences.StoreException;
+
+
+public class ExtensionPage extends AbstractPreferencePage {
+	private Extension extension;
+	private JPanel jPanel = null;
+	private JScrollPane jScrollPane = null;
+	private JTextArea jTextArea = null;
+	private JPanel jPanel1 = null;
+	private JPanel jPanel2 = null;
+	private JTextField jTextField = null;
+	private JLabel jLabel = null;
+	private JLabel jLabel1 = null;
+	private JCheckBox chbActivar = null;
+	private ImageIcon icon;
+	private boolean chkSelected;
+	private int txtPriority;
+	private boolean changed = false;
+	private MyAction myAction = new MyAction();
+	/**
+	 * This is the default constructor
+	 */
+	public ExtensionPage(Extension extension) {
+		super();
+		icon = PluginServices.getIconTheme().get("edit-setup-extension");
+		this.extension=extension;
+		setParentID(ExtensionsPage.class.getName());
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setLayout(new BorderLayout());
+		this.setSize(451, 234);
+		this.add(getJPanel(), java.awt.BorderLayout.NORTH);
+		this.add(getJPanel1(), java.awt.BorderLayout.CENTER);
+		this.add(getJPanel2(), java.awt.BorderLayout.SOUTH);
+
+	}
+
+	public String getID() {
+		return extension.getClassName();
+	}
+
+	public String getTitle() {
+		return extension.getClassName();
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		getChbActivar().setSelected(((Extension) Launcher.getExtension(extension.getClassName())).getActive());
+		getJTextField().setText(String.valueOf(extension.getPriority()));
+		getJTextArea().setText(format(((Extension) Launcher.getExtension(extension.getClassName())).getDescription(),40));
+		chkSelected = getChbActivar().isSelected();
+		txtPriority = extension.getPriority();
+	}
+
+	public void storeValues() throws StoreException {
+//		int pri;
+//		try {
+//			pri = Integer.parseInt(getJTextField().getText());
+//		} catch (Exception e){
+//			throw new StoreException( PluginServices.getText(this, "invalid_priority_value"),e);
+//		}
+//		extension.setActive(chbActivar.isSelected());
+//		extension.setPriority(pri);
+//		// Se escribe el config de los plugins
+//		marshalPlugins();
+	}
+
+	/**
+	 * Escribe sobre el config.xml, la nueva configuraci�n.
+	 */
+	public void marshalPlugins() {
+		HashMap pc = Launcher.getPluginConfig();
+		Iterator iter = pc.keySet().iterator();
+
+		while (iter.hasNext()) {
+			Object obj = iter.next();
+			PluginConfig pconfig = (PluginConfig) pc.get(obj);
+			Writer writer;
+
+			try {
+				FileOutputStream fos = new FileOutputStream(Launcher.getAndamiConfig().getPluginsDirectory() +
+						File.separator + (String) obj + File.separator +
+						"config.xml");
+				// castor uses xerces, and xerces uses UTF-8 by default, so we should use
+				// UTF-8 to create the writer, as long as we continue using castor+xerces
+				writer = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
+
+				try {
+					pconfig.marshal(writer);
+				} catch (MarshalException e1) {
+					e1.printStackTrace();
+				} catch (ValidationException e1) {
+					e1.printStackTrace();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+			//hay que refrescar la aplicaci�n
+			///((App)App.instance).run();
+		}
+	}
+	/**
+	 * Lee del config.xml la configuraci�n.
+	 */
+	public void unmarshalPlugins() {
+		HashMap pc = Launcher.getPluginConfig();
+		Iterator iter = pc.keySet().iterator();
+
+		while (iter.hasNext()) {
+			Object obj = iter.next();
+			PluginConfig pconfig = (PluginConfig) pc.get(obj);
+
+			try {
+				String fileName = Launcher.getAndamiConfig().getPluginsDirectory() + File.separator + (String) obj + File.separator +	"config.xml";
+				FileInputStream is = new FileInputStream(fileName);
+				Reader reader = org.gvsig.utils.xml.XMLEncodingUtils.getReader(is);
+				if (reader==null) {
+					// the encoding was not correctly detected, use system default
+					reader = new FileReader(fileName);
+				}
+				else {
+					// use a buffered reader to improve performance
+					reader = new BufferedReader(reader);
+				}
+				pconfig=(PluginConfig)PluginConfig.unmarshal(reader);
+				Launcher.getPluginConfig().put(obj,pconfig);
+			} catch (Exception e) {
+				System.out.println("Exception unmarshalPlugin " + e);
+			}
+		}
+
+		//hay que refrescar la aplicaci�n
+		///((App)App.instance).run();
+	}
+	public void initializeDefaults() {
+		unmarshalPlugins();
+		getChbActivar().setSelected(((Extension) Launcher.getExtension(extension.getClassName())).getActive());
+		getJTextField().setText(String.valueOf(extension.getPriority()));
+		getJTextArea().setText(format(((Extension) Launcher.getExtension(extension.getClassName())).getDescription(),40));
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(new FlowLayout());
+			jPanel.setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "descripcion"), TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
+			jPanel.add(getJScrollPane(), null);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			jScrollPane.setViewportView(getJTextArea());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (jTextArea == null) {
+			jTextArea = new JTextArea();
+			jTextArea.setEnabled(false);
+			jTextArea.setText("");
+			jTextArea.setEditable(false);
+			jTextArea.setLineWrap(true);
+			jTextArea.setWrapStyleWord(true);
+			jTextArea.setPreferredSize(new Dimension(320, 170));
+			jTextArea.addKeyListener(myAction);
+		}
+		return jTextArea;
+	}
+	/**
+	 * This method initializes chbActivar
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChbActivar() {
+		if (chbActivar == null) {
+			chbActivar = new JCheckBox();
+			chbActivar.setSelected(true);
+                        chbActivar.setEnabled(false);
+			chbActivar.setText(PluginServices.getText(this, "extension_activada"));
+			chbActivar.addActionListener(myAction);
+		}
+
+		return chbActivar;
+	}
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jLabel = new JLabel();
+			jLabel.setText(PluginServices.getText(this, "prioridad"));
+			jPanel1 = new JPanel();
+			jPanel1.add(getChbActivar(), null);
+			jPanel1.add(getJTextField(), null);
+			jPanel1.add(jLabel, null);
+		}
+		return jPanel1;
+	}
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jLabel1 = new JLabel();
+			jLabel1.setText(PluginServices.getText(this, "Los_cambios_efectuados_sobre_estos_valores_se_aplicaran_al_reiniciar_la_aplicacion"));
+			jPanel2 = new JPanel();
+			jPanel2.add(jLabel1, null);			
+		}
+		return jPanel2;
+	}
+
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private JTextField getJTextField() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+                        jTextField.setEnabled(false);
+			jTextField.setPreferredSize(new Dimension(40, 20));
+			jTextField.addKeyListener(myAction);
+		}
+		return jTextField;
+	}
+	/**
+     * Cuts the message text to force its lines to be shorter or equal to
+     * lineLength.
+     * @param message, the message.
+     * @param lineLength, the max line length in number of characters.
+     * @return the formated message.
+     */
+    private static String format(String message, int lineLength){
+    	if (message==null)
+         	return "";
+    	if (message.length() <= lineLength) return message;
+        String[] lines = message.split(" ");
+        String theMessage = "";
+        String line="";
+        int i=0;
+        while (i<lines.length) {
+        	while (i<lines.length && lineLength>line.length()) {
+        		line=line.concat(lines[i]+" ");
+        		i++;
+        	}
+        	theMessage=theMessage.concat(line+"\n");
+        	line="";
+        }
+        return theMessage;
+    }
+
+    private class MyAction implements ActionListener, KeyListener {
+		public void actionPerformed(ActionEvent e) { changed = true; System.out.println("actionperformed");}
+		public void keyPressed(KeyEvent e) { changed = true; System.out.println("keypressed"); }
+		public void keyReleased(KeyEvent e) { changed = true; System.out.println("keyreleased");}
+		public void keyTyped(KeyEvent e) { changed = true; System.out.println("keytyped");}
+	}
+
+	public boolean isValueChanged() {
+		return changed;
+	}
+
+	public void setChangesApplied() {
+		changed = false;
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/GeneralPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/GeneralPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/GeneralPage.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+/**
+ * First default page in the Preferences Dialog. It is supposed to be
+ * used to hold simple user interaction settings such as:
+ * <ol>
+ * 	<li>
+ * 		Window positions.
+ *  </li>
+ * 	<li>
+ * 		Mouse behaviors (double click vs. simple click).
+ *  </li>
+ * 	<li>
+ * 		Users' language preferences.
+ *  </li>
+ * 	<li>
+ * 		Confirm overwriting files.
+ *  </li>
+ *  <li>
+ *  	Toolbars config
+ *  </li>
+ * </ol>
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class GeneralPage extends AbstractPreferencePage {
+	private ImageIcon icon;
+	public static String id;
+	
+	private JCheckBox rememberWindowPosition;
+	private JCheckBox rememberWindowSize;
+
+	public GeneralPage() {
+		super();
+		initialize();
+		id = this.getClass().getName();
+	}
+
+	private void initialize() {
+		icon = PluginServices.getIconTheme().get("edit-setup-general");
+		
+		/*
+		 * Removed until behavior is clear when
+		 * we do not store pos/size
+		 * 
+		// remember windows position check box
+		addComponent(rememberWindowPosition = new JCheckBox(PluginServices.getText(this, "options.general.remember_windows_pos")));
+		// remember windows sizes check box
+		addComponent(rememberWindowSize = new JCheckBox(PluginServices.getText(this, "options.general.remember_windows_size")));
+		*/
+	}
+
+
+	public String getID() {
+		return id;
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "pref.general");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+	}
+
+	public void storeValues() {
+	}
+
+	public void initializeDefaults() {
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/GeneralPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionsPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionsPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionsPage.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+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;
+
+
+public class ExtensionsPage extends AbstractPreferencePage {
+
+	private JLabel jLabel = null;
+	private ImageIcon icon;
+
+	/**
+	 * This is the default constructor
+	 */
+	public ExtensionsPage() {
+		super();
+		icon = PluginServices.getIconTheme().get("edit-setup-extensions");
+		setParentID(GeneralPage.class.getName());
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		jLabel = new JLabel();
+		jLabel.setText(PluginServices.getText(this,"configurar_todas_las_extensiones"));
+		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,"extensiones");
+	}
+
+	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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ExtensionsPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ScreenSettingsPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ScreenSettingsPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ScreenSettingsPage.java	(revision 46118)
@@ -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.coreplugin.preferences.general;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.NumberFormat;
+import java.util.prefs.Preferences;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+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.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+
+
+
+/**
+ * Page to calculate correctly all the scales of screen.  In it we introduce
+ * the values of our screen just as we see it.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class ScreenSettingsPage extends AbstractPreferencePage {
+	protected static String id = ScreenSettingsPage.class.getName();
+	private static final long serialVersionUID = 6012279465073443753L;
+	private static final double MILLIMETERS_PER_INCH = 2.54;
+	private static Preferences prefs = Preferences.userRoot().node( "gvsig.configuration.screen" );
+	private ImageIcon icon;
+	private JPanel pTestMeasure;
+	private JTextField txtResolution;
+	private JTextField txtMeasure;
+	private JComboBox cmbUnits;
+	private JButton btnRefresh;
+
+    public ScreenSettingsPage() {
+        super();
+        setParentID(GeneralPage.id);
+        icon=PluginServices.getIconTheme().get("edit-setup-screensetting");
+        addComponent(PluginServices.getText(this, "resolution") + ":",
+    			txtResolution = new JTextField("", 15));
+
+        pTestMeasure = new TestMeasurePanel();
+        addComponent(pTestMeasure);
+        addComponent(new JLabel(PluginServices.getText(this,"the_length_of_the_line_above_is")+":"));
+        cmbUnits=new JComboBox();
+        cmbUnits.addItem(PluginServices.getText(this,"centimeters"));
+        cmbUnits.addItem(PluginServices.getText(this,"inches"));
+        cmbUnits.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				/*double d=Double.parseDouble(txtMeasure.getText().replace(',','.'));
+				if (cmbUnits.getSelectedIndex()==0) {
+					txtResolution.setText(String.valueOf((int)((210*MILLIMETERS_PER_INCH)/d)));
+				}else {
+					txtResolution.setText(String.valueOf((int)(210/d)));
+				}
+*/
+			}
+        });
+        txtMeasure=new JTextField();
+        addComponent(txtMeasure,cmbUnits);
+
+        addComponent(new JBlank(1,1));
+
+        btnRefresh=new JButton(PluginServices.getText(this,"button.resolution.calculate"));
+        btnRefresh.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+
+				double d=Double.parseDouble(txtMeasure.getText().replace(',','.'));
+				if (cmbUnits.getSelectedIndex()==0) {
+					txtResolution.setText(String.valueOf((int)((210*MILLIMETERS_PER_INCH)/d)));
+				}else {
+					txtResolution.setText(String.valueOf((int)(210/d)));
+				}
+
+
+			}
+
+        });
+        addComponent(btnRefresh);
+
+
+
+        initialize();
+    }
+
+
+    private class TestMeasurePanel extends JPanel{
+
+		private static final long serialVersionUID = -8307475893309753439L;
+		public TestMeasurePanel() {
+    		setPreferredSize(new Dimension(250,60));
+            Border border=BorderFactory.createTitledBorder(
+            		PluginServices.getText(this, "test_measure"));
+            setBorder(border);
+    	}
+		protected void paintComponent(Graphics g) {
+			super.paintComponent(g);
+			((Graphics2D)g).setStroke(new BasicStroke(2));
+			g.setColor(Color.black);
+			g.drawLine(20,30,230,30);
+			g.drawLine(20,20,20,40);
+			g.drawLine(230,20,230,40);
+		}
+
+    }
+
+    private void initialize() {
+//        this.setSize(394, 248);
+    }
+
+    public void storeValues() throws StoreException {
+       int dpi=Integer.parseInt(txtResolution.getText());
+       prefs.putInt("dpi",dpi);
+    }
+
+    public void setChangesApplied() {
+    	setChanged(false);
+    }
+
+    public String getID() {
+    	return id;
+    }
+
+    public String getTitle() {
+    	return PluginServices.getText(this, "options.configuration.screen");
+    }
+
+    public JPanel getPanel() {
+       return this;
+    }
+
+    public void initializeValues() {
+    	Toolkit kit = Toolkit.getDefaultToolkit();
+    	double dpi = kit.getScreenResolution();
+    	int resDPI=prefs.getInt("dpi",(int)dpi);
+
+		txtResolution.setText(String.valueOf(resDPI));
+		txtMeasure.setText(String.valueOf(format(210*MILLIMETERS_PER_INCH/resDPI)));
+		cmbUnits.setSelectedIndex(0);
+	}
+
+    public void initializeDefaults() {
+    	Toolkit kit = Toolkit.getDefaultToolkit();
+		int dpi = kit.getScreenResolution();
+		txtResolution.setText(String.valueOf(dpi));
+		txtMeasure.setText(String.valueOf(format(210*MILLIMETERS_PER_INCH/dpi)));
+		cmbUnits.setSelectedIndex(0);
+    }
+
+
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+
+    public boolean isValueChanged() {
+    	return super.hasChanged();
+    }
+
+    private String format(double d) {
+        NumberFormat nf = NumberFormat.getInstance();
+
+        if ((d % (long) d) != 0) {
+            nf.setMaximumFractionDigits(2);
+        } else {
+            nf.setMaximumFractionDigits(0);
+        }
+
+        return nf.format(d); //(Double.valueOf(s).doubleValue());
+    }
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/ScreenSettingsPage.java
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePage.java	(revision 46118)
@@ -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.coreplugin.preferences.general.appearance;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.LookAndFeel;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+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.preferences.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.coreplugin.PreferencesExtension;
+import org.gvsig.coreplugin.preferences.general.GeneralPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.util.ToolsUtilLocator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Appearance page. Where the user can choose Look&Feels and maybe some more
+ * stuff.
+ */
+public class AppearancePage extends AppearancePageView implements IPreference {
+    //
+    // The class AppearancePageView can extend from AbstractPreferencePage, not JPanel,
+    // if rereate it from the GUI builder change te class declaration to:
+    //    public abstract class AppearancePageView extends AbstractPreferencePage
+
+    private static final long serialVersionUID = 9004756473020260443L;
+
+    private static final Logger logger = LoggerFactory.getLogger(AppearancePage.class);
+
+    public static String id = AppearancePage.class.getName();
+    private ImageIcon icon;
+    private boolean enableLookAndFeel = true;
+    private final String defaultLookAndFeel;
+
+    public AppearancePage() {
+        setParentID(GeneralPage.id);
+        installDefaultLookAndFeel();       
+        this.defaultLookAndFeel = Launcher.getDefaultLookAndFeel();
+        String x = PluginServices.getArgumentByName("enablelaf");
+        if( x == null ) {            
+            this.enableLookAndFeel = true;
+        } else {
+            this.enableLookAndFeel = BooleanUtils.toBoolean(x);
+        }
+        this.initComponents();
+    }
+
+    private void installDefaultLookAndFeel() {
+        String[][] lafs = {
+            { "Plastic XP", "com.jgoodies.looks.plastic.PlasticXPLookAndFeel" },
+            { "Quaqua", "ch.randelshofer.quaqua.QuaquaLookAndFeel" },
+            { "Flat Light", "com.formdev.flatlaf.FlatLightLaf" },
+            { "Flat Dark", "com.formdev.flatlaf.FlatDarkLaf" },
+            
+//            { "Web", "com.alee.laf.WebLookAndFeel" },
+//            { "Sea Glass", "com.seaglasslookandfeel.SeaGlassLookAndFeel" },
+//            Substance da errores en la carga de gvSIG y el L&F no funciona 
+//            { "Substance", "org.pushingpixels.substance.api.SubstanceLookAndFeel" },
+//            { "SubstanceAutumn", "org.pushingpixels.substance.api.skin.SubstanceAutumnLookAndFeel" },
+//            { "SubstanceOfficeBlue2007", "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel" },
+//            { "SubstanceBusiness", "org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel" },
+//            { "SubstanceMistAqua", "org.pushingpixels.substance.api.skin.SubstanceMistAquaLookAndFeel" },
+//            { "Acryl", "com.jtattoo.plaf.acryl.AcrylLookAndFeel" },
+//            { "Fast", "com.jtattoo.plaf.fast.FastLookAndFeel" },
+//            { "Bernstein", "com.jtattoo.plaf.bernstein.BernsteinLookAndFeel" },
+//            { "Aluminium", "com.jtattoo.plaf.aluminium.AluminiumLookAndFeel" },
+//            { "Aero", "com.jtattoo.plaf.aero.AeroLookAndFeel"  },
+//            { "HiFi", "com.jtattoo.plaf.hifi.HiFiLookAndFeel" },
+//            { "McWin", "com.jtattoo.plaf.mcwin.McWinLookAndFeel" },
+//            { "Mint", "com.jtattoo.plaf.mint.MintLookAndFeel" },
+//            { "Noire", "com.jtattoo.plaf.noire.NoireLookAndFeel" },
+//            { "Smart", "com.jtattoo.plaf.smart.SmartLookAndFeel" },
+//            { "Luna", "com.jtattoo.plaf.luna.LunaLookAndFeel" },
+//            { "Texture", "com.jtattoo.plaf.texture.TextureLookAndFeel" }
+        };            
+
+        for( String[] laf : lafs ) {
+            try {
+                UIManager.installLookAndFeel(laf[0], laf[1]);
+            } catch (Throwable th) {
+                logger.info("Problems installing look and feel '"+laf[1]+"'", th);
+            }
+        }
+    }
+
+    private LookAndFeelInfo[] getSupportedsLookAndFeels() {
+        if( !this.enableLookAndFeel ) {
+            return null;
+        }
+        List<LookAndFeelInfo> supporteds = new ArrayList();
+        try {
+            LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels();
+            for( LookAndFeelInfo lookAndfeelInfo : installedLookAndFeels ) {
+                try {
+                    Class<?> lookAndFeelClass = Class.forName(lookAndfeelInfo.getClassName());
+                    LookAndFeel lookAndFeel = (LookAndFeel) lookAndFeelClass.newInstance();
+                    if( lookAndFeel.isSupportedLookAndFeel() && 
+                        !StringUtils.equalsIgnoreCase(lookAndFeel.getID(),"motif") ) {
+                        supporteds.add(lookAndfeelInfo);
+                    }
+                } catch (Throwable th) {
+
+                }
+            }
+        } catch (Throwable th) {
+            return null;
+        }
+        if( supporteds.isEmpty() ) {
+            return null;
+        }
+        Collections.sort(supporteds, new Comparator<LookAndFeelInfo>() {
+            @Override
+            public int compare(LookAndFeelInfo o1, LookAndFeelInfo o2) {
+                return StringUtils.compare(o1.getName(),o2.getName());
+            }
+        });
+        return supporteds.toArray(new LookAndFeelInfo[supporteds.size()]);
+    }
+
+    private void initComponents() {
+        icon = IconThemeHelper.getImageIcon("edit-setup-appearance");
+        LookAndFeelInfo[] lafs = this.getSupportedsLookAndFeels();
+        if( lafs == null ) {
+            this.cboLookAndFeel.setEnabled(false);
+        } else {
+            DefaultComboBoxModel model = new DefaultComboBoxModel();
+            for( LookAndFeelInfo laf : lafs ) {
+                model.addElement(new ListElement<>(laf.getName(), laf.getClassName()));
+            }
+            this.cboLookAndFeel.setModel(model);
+            this.cboLookAndFeel.setEnabled(true);
+            ListElement.setSelected(cboLookAndFeel, Launcher.getAndamiConfig().getLookAndFeel());
+
+        }
+        this.translateAll();
+    }
+
+    private void translateAll() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        this.lblNeedRestart.setText("("+i18n.getTranslation("Los_cambios_efectuados_sobre_estos_valores_se_aplicaran_al_reiniciar_la_aplicacion")+")");
+        this.lbllookAndFeel.setText(i18n.getTranslation("options.general.select_theme"));
+        this.chkUseNativeFileChooser.setText(i18n.getTranslation("_use_native_file_dialog_chooser"));
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+
+    @Override
+    public void initializeValues() {
+        this.initializeDefaults();
+        this.chkUseNativeFileChooser.setSelected(ToolsUtilLocator.getFileDialogChooserManager().useNativeFileChooser());
+    }
+
+    @Override
+    public void initializeDefaults() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
+
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        this.chkUseNativeFileChooser.setSelected((Boolean) pluginProperties.getDynValue("useNativeFileChooser"));
+
+        if( this.cboLookAndFeel.getModel().getSize()>0 ) {
+            this.cboLookAndFeel.setSelectedIndex(0);
+            String currentLaF = getCurrentLookAndFeel();
+            if( !StringUtils.isEmpty(currentLaF) ) {
+                ListElement.setSelected(cboLookAndFeel, currentLaF);
+            } else {
+                this.cboLookAndFeel.setSelectedIndex(-1);
+            }
+            this.cboLookAndFeel.setEnabled(true);
+        } else {
+            this.cboLookAndFeel.setEnabled(false);
+        }
+    }
+    
+    private String getCurrentLookAndFeel() {
+        String s = Launcher.getAndamiConfig().getLookAndFeel();
+        if( StringUtils.isBlank(s) ) {
+            s = defaultLookAndFeel;
+        }
+        return s;
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("pref.appearance");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+    @Override
+    public void storeValues() throws StoreException {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
+
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        pluginProperties.setDynValue("useNativeFileChooser", this.chkUseNativeFileChooser.isSelected());
+        ToolsUtilLocator.getFileDialogChooserManager().setUseNativeFileChooser(this.chkUseNativeFileChooser.isSelected());
+        
+        if( this.cboLookAndFeel.isEnabled() ) {
+           String lookAndFeel = (String) ListElement.getSelected(cboLookAndFeel);
+           if( lookAndFeel!=null ) {
+               Launcher.getAndamiConfig().setLookAndFeel(lookAndFeel);
+           }
+        }
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        boolean changed = false;
+        
+        if( !changed ) {
+            changed = this.chkUseNativeFileChooser.isSelected() != ToolsUtilLocator.getFileDialogChooserManager().useNativeFileChooser();
+        }
+        if( !changed ) {
+            if( this.cboLookAndFeel.isEnabled() ) {
+                String lookAndFeel = (String) ListElement.getSelected(cboLookAndFeel);
+                if( lookAndFeel!=null ) {
+                    changed = !lookAndFeel.equalsIgnoreCase(getCurrentLookAndFeel());
+                }
+            }
+        }
+        return changed;
+    }
+
+    @Override
+    public void setChangesApplied() {
+        // Do nothing
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.xml	(revision 46118)
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.xml</at>
+   <at name="rowspecs">CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,LEFT:DEFAULT:GROW(1.0),FILL:4DLU: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">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">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="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="name">lbllookAndFeel</at>
+            <at name="width">90</at>
+            <at name="text">Usar apariencia</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">fill</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="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="name">cboLookAndFeel</at>
+            <at name="width">611</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">8</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.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">Usar selector de ficheros nativo</at>
+            <at name="name">chkUseNativeFileChooser</at>
+            <at name="width">202</at>
+            <at name="text">Usar selector de ficheros nativo</at>
+            <at name="height">16</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">6</at>
+           <at name="colspan">1</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">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="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="name">lblNeedRestart</at>
+            <at name="width">256</at>
+            <at name="text">(Debera reiniciar para cambiar la apariencia)</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="10">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/preferences/general/appearance/AppearancePageView.java	(revision 46118)
@@ -0,0 +1,151 @@
+package org.gvsig.coreplugin.preferences.general.appearance;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+
+public abstract class AppearancePageView extends AbstractPreferencePage
+{
+   JLabel lbllookAndFeel = new JLabel();
+   JComboBox cboLookAndFeel = new JComboBox();
+   JCheckBox chkUseNativeFileChooser = new JCheckBox();
+   JLabel lblNeedRestart = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public AppearancePageView()
+   {
+      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:4DLU:NONE,LEFT:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lbllookAndFeel.setName("lbllookAndFeel");
+      lbllookAndFeel.setText("Usar apariencia");
+      jpanel1.add(lbllookAndFeel,cc.xy(2,2));
+
+      cboLookAndFeel.setName("cboLookAndFeel");
+      jpanel1.add(cboLookAndFeel,new CellConstraints(2,4,1,1,CellConstraints.FILL,CellConstraints.DEFAULT));
+
+      chkUseNativeFileChooser.setActionCommand("Usar selector de ficheros nativo");
+      chkUseNativeFileChooser.setName("chkUseNativeFileChooser");
+      chkUseNativeFileChooser.setText("Usar selector de ficheros nativo");
+      jpanel1.add(chkUseNativeFileChooser,cc.xy(2,8));
+
+      lblNeedRestart.setName("lblNeedRestart");
+      lblNeedRestart.setText("(Debera reiniciar para cambiar la apariencia)");
+      jpanel1.add(lblNeedRestart,new CellConstraints(2,6,1,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },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);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConfigExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConfigExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConfigExtension.java	(revision 46118)
@@ -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.coreplugin;
+
+
+/**
+ */
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.coreplugin.configExtensions.ConfigPlugins;
+
+
+
+
+/**
+ * Extensi�n para abrir el di�logo de configuraci�n de ANDAMI.
+ *
+ * @author Vicente Caballero Navarro
+ * @deprecated
+ *
+ */
+public class ConfigExtension extends Extension {
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+		ConfigPlugins cp=new ConfigPlugins();
+		PluginServices.getMDIManager().addWindow(cp);
+	}
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    public boolean isVisible() {
+    	return true;
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+	/**
+	 * @see org.gvsig.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+	}
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/java/org/gvsig/coreplugin/ConfigExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.editing.  
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.coreplugin.app.mainplugin">
+      <description>Persistence for the core plugin</description>
+      <fields>
+
+        <field name="showNotificationsInConsole" type="Boolean" defaultValue="false" mandatory="false">
+          <description></description>
+        </field>        
+        <field name="showNotificationsInStatusbar" type="Boolean" defaultValue="true" mandatory="false">
+          <description></description>
+        </field>
+        <field name="useNativeFileChooser" type="Boolean" mandatory="false" defaultValue="true">
+          <description></description>
+        </field>    
+            
+        
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+__valenciano=Valencian
+aceptar=Budi\u017e
+activa_la_ventana=Aktivn\u00ed okno
+browse=Vyhledej
+button.resolution.calculate=
+cancelar=Zru\u0161it
+Cascada=Kask\u00e1da
+cascada_tooltip=Se\u0159adit okna do kask\u00e1dy
+centimeters=
+configurar_ANDAMI=ANDAMI konfigura\u010dn\u00ed dialog.
+configurar_todas_las_extensiones=Konfiguruj v\u0161echny roz\u0161\u00ed\u0159en\u00ed (p\u0159\u00edpony)
+Consola=Konzola
+descripcion=Popis
+detalles=Podrobnosti
+Devuelvo_el_foco_a_=
+directorio=Adres\u00e1\u0159
+directorio_extensiones=Adres\u00e1\u0159 extenz\u00ed.
+errores=Chyby
+examinar=Prohl\u00e9dnout
+extension_activada=Aktivn\u00ed extenze.
+extensiones=Roz\u0161\u00ed\u0159en\u00ed
+general=Obecn\u00fd
+idioma=Jazyk
+inches=
+info=Informace
+invalid_priority_value=Chybn\u00e1 hodnota priority
+mosaico_tooltip=Mozaika
+offline=Odpojen
+online=P\u0159ipojen
+opciones=Mo\u017enosti
+optinos.network.click_to_test_connection=
+options.configuration.screen=
+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.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+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
+pref.appearance=Vzhled
+pref.general=Obecn\u00e9
+pref.network=S\u00ed\u0165
+pref.network.firewall=Firewall/Proxy
+preferencias=Preference
+Preferencias=Preference
+prioridad=Priorita
+resolution=Rozli\u0161en\u00ed ??
+test_measure=
+test_now=Zkontroluj te\u010f
+the_length_of_the_line_above_is=
+Tile=Dla\u017edice
+titulo_consola=Informa\u010dn\u00ed konzola
+todos=V\u0161e
+Ventana=Okno
+Ver=Pohled
+warnings=Varov\u00e1n\u00ed

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt_br.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt_br.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt_br.properties	(revision 46118)
@@ -0,0 +1,28 @@
+#text_pt_br.properties
+__valenciano=valenciano
+aceptar=OK
+cancelar=Cancelar
+Cascada=Cascata
+cascada_enable=Deve existir ao menos um quadro vis\u00EDvel
+cascada_tooltip=Arranjar janelas em cascata
+Configurar=Configurar
+configurar_ANDAMI=Di\u00E1log de configura\u00E7\u00E3o do ANDAMI.
+Consola=Console
+descripcion=Descri\u00E7\u00E3o
+directorio=Diret\u00F3rio
+directorio_extensiones=Diret\u00F3rio de extens\u00F5es
+errores=Erro
+examinar=Examinar
+extension_activada=Extens\u00E3o ativa.  
+general=Geral
+info=Informa\u00E7\u00E3o
+opciones=Op\u00E7\u00F5es
+prioridad=Prioridade
+Tile=Lado a Lado
+tile_tooltip=Arranjar a janela Lado a Lado
+titulo_consola=Informa\u00E7\u00E3o de console
+todos=Todos
+Ventana=Janela
+Ver=Vis\u00E3o
+warnings=Aviso
+Window=Janela

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt_br.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Catalan
+aceptar=Accepter
+activa_la_ventana=Active la fen\u00eatre
+browse=
+button.resolution.calculate=
+cancelar=Annuler
+Cascada=Cascade
+cascada_tooltip=Organiser les fen\u00eatres en cascade
+centimeters=
+configurar_ANDAMI=Fen\u00eatre de configuration d'ANDAMI.
+configurar_todas_las_extensiones=
+Consola=Console
+descripcion=Description
+detalles=d\u00e9tails
+Devuelvo_el_foco_a_=
+directorio=R\u00e9pertoire
+directorio_extensiones=R\u00e9pertoire des extensions
+errores=Erreurs
+examinar=Examiner
+extension_activada=Extension activ\u00e9e.
+extensiones=
+general=G\u00e9n\u00e9ral
+idioma=Langue
+inches=
+info=Information
+invalid_priority_value=
+mosaico_tooltip=info bulle
+offline=
+online=
+opciones=Options
+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=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Priorit\u00e9
+resolution=R\u00e9solution
+test_measure=
+test_now=
+the_length_of_the_line_above_is=
+Tile=Mosa\u00efque
+titulo_consola=Console d'information
+todos=Tous
+Ventana=Fen\u00eatre
+Ver=Afficher
+warnings=Attention

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valencianisch
+aceptar=OK
+activa_la_ventana=Aktiviert das fenster
+browse=
+button.resolution.calculate=
+cancelar=Abbrechen
+Cascada=Kaskade
+cascada_tooltip=Organisiert die fenster in der kaskade
+centimeters=
+configurar_ANDAMI=Konfigurationdialog von ANDAMI
+configurar_todas_las_extensiones=
+Consola=Konsole
+descripcion=Beschreibung
+detalles=Details
+Devuelvo_el_foco_a_=
+directorio=Verzeichnis
+directorio_extensiones=Verzeichnis der Erweiterungen
+errores=Fehler
+examinar=Untersuchen
+extension_activada=Erweiterung aktiviert
+extensiones=
+general=Allgemein
+idioma=
+inches=
+info=Information
+invalid_priority_value=
+mosaico_tooltip=Mosaik
+offline=
+online=
+opciones=Optionen
+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=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=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Priorit\u00e4t
+resolution=
+test_measure=
+test_now=
+the_length_of_the_line_above_is=
+Tile=Mosaik
+titulo_consola=Informationskonsole
+todos=Alle
+Ventana=Fenster
+Ver=Sehen
+warnings=Warnung

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valenciano
+aceptar=Ados
+activa_la_ventana=Aktibatu leihoa
+browse=Aztertu
+button.resolution.calculate=
+cancelar=Utzi
+Cascada=Kaskadan
+cascada_tooltip=Antolatu leihoak kaskadan
+centimeters=
+configurar_ANDAMI=ANDAMIren konfigurazio-elkarrizketa.
+configurar_todas_las_extensiones=
+Consola=Kontsola
+descripcion=Deskripzioa
+detalles=Xehetasunak
+Devuelvo_el_foco_a_=
+directorio=Direktorioa
+directorio_extensiones=Luzapenen direktorioa.
+errores=Erroreak
+examinar=Aztertu
+extension_activada=Luzapena gaituta.
+extensiones=
+general=Orokorra
+idioma=Idioma
+inches=
+info=Informazioa
+invalid_priority_value=
+mosaico_tooltip=Tooltip mosaikoan
+offline=
+online=
+opciones=Aukerak
+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=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Lehentasuna
+resolution=Ebazpena
+test_measure=
+test_now=
+the_length_of_the_line_above_is=
+Tile=Mosaikoan
+titulo_consola=Informazio-kontsola
+todos=Denak
+Ventana=Leihoa
+Ver=Ikusi
+warnings=Oharrak

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+__valenciano=Valenziano
+aceptar=Accetta
+activa_la_ventana=Attiva la finestra
+browse=Sfoglia
+button.resolution.calculate=
+cancelar=Cancella
+Cascada=Cascata
+cascada_tooltip=Organizza le finestre a cascata
+centimeters=
+configurar_ANDAMI=Finestra di dialogo configurazione di ANDAMI
+configurar_todas_las_extensiones=Configura tutte le estensioni
+Consola=Console di informazione
+descripcion=Descrizione
+detalles=Dettagli
+Devuelvo_el_foco_a_=
+directorio=Cartella
+directorio_extensiones=Cartella delle estensioni
+errores=Errori
+examinar=Esamina
+extension_activada=Estensione attivata
+extensiones=Estensioni
+general=Generale
+idioma=Lingua
+inches=
+info=Informazione
+invalid_priority_value=Valore di priorit\u00e0 errato
+mosaico_tooltip=Mosaico
+offline=Disconnesso
+online=Connesso
+opciones=Opzioni
+optinos.network.click_to_test_connection=Premere il pulsante per verificare la connessione
+options.configuration.screen=
+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.click_to_test_connection=
+options.network.status=Stato della rete
+pref.appearance=Aspetto
+pref.general=Generale
+pref.network=Rete
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferenze
+Preferencias=Preferenze
+prioridad=Priorit\u00e1
+resolution=Risoluzione
+test_measure=
+test_now=Prova ora
+the_length_of_the_line_above_is=
+Tile=Titolo
+titulo_consola=Console di informazione
+todos=Tutti
+Ventana=Finestra
+Ver=Mostra
+warnings=Avvisi

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,95 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valenciano
+aceptar=Aceptar
+activa_la_ventana=Activa la ventana
+browse=Examinar
+browser=Navegador web
+button.resolution.calculate=Calcula resoluci\u00f3n
+cancelar=Cancelar
+Cascada=Cascada
+cascada_tooltip=Organiza las ventanas en cascada
+centimeters=Cent\u00edmetros
+configurar_ANDAMI=Di\u00e1logo de configuraci\u00f3n de ANDAMI.
+configurar_todas_las_extensiones=Configurar todas las extensiones
+Consola=Consola
+descripcion=Descripci\u00f3n
+detalles=Detalles
+Devuelvo_el_foco_a_=Devuelvo el foco a
+directorio=Directorio
+directorio_extensiones=Directorio de las extensiones.
+errores=Errores
+examinar=Examinar
+extension_activada=Extensi\u00f3n activada.
+extensiones=Extensiones
+general=General
+idioma=Idioma
+inches=Pulgadas
+info=Informaci\u00f3n
+invalid_priority_value=Valor de prioridad inv\u00e1lido
+mosaico_tooltip=Mosaico tooltip
+offline=Desconectado
+online=Conectado
+opciones=Opciones
+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.foldering.symbol_library_folder=Carpeta de librer\u00eda de s\u00edmbolos
+options.general.browser.select_a_known_browser=Seleccionar un navegador conocido.
+options.general.browser.specify_a_command=<html>Ejecutar un comando propio.<br>Ej.: firefox %url <br>(donde %url es la URL a cargar)</html>.
+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
+options.network.click_to_test_connection=Pulse el bot\u00f3n para comprobar la conexi\u00f3n
+options.network.status=Estado de la conexi\u00f3n
+pref.appearance=Apariencia
+pref.general=General
+pref.network=Red
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferencias
+Preferencias=Preferencias
+prioridad=Prioridad
+resolution=Resoluci\u00f3n
+test_measure=Medida de prueba
+test_now=Comprobar ahora
+the_length_of_the_line_above_is=La longitud de la linea de arriba es
+Tile=Mosaico
+titulo_consola=Consola de informaci\u00f3n
+todos=Todos
+Ventana=Ventana
+Ver=Ver
+warnings=Avisos
+Los_cambios_efectuados_sobre_estos_valores_se_aplicaran_al_reiniciar_la_aplicacion=Los cambios efectuados sobre estos valores se aplicar\u00e1n al reiniciar la aplicaci\u00f3n
+# SKIN PREFERENCES
+skin=Skin
+skin_label=Seleccione el skin que quiere usar con GvSIG
+skin_message=\u00a1\u00a1\u00a1ES NECESARIO REINICAR GVSIG PARA QUE LOS CAMBIOS SURJAN EFECTO!!!
+Swing_Compability_Note=Nota:Si activa la compatibilidad con Java / Swing se produce una caida del rendimiento grafico.
+_Show_application_setup=Preferencias de la aplicaci\u00f3n
+_Show_console_error_messages=Consola de mensajes de error
+_Icon_themes_availables=Juegos de iconos disponibles
+_Select_an_icon_theme_as_default_for_use_in_the_application=Seleccionar juego de iconos por defecto para la aplicaci\u00f3n
+_You_can_export_the_default_icon_theme_to_use_as_base_for_create_a_custom_icon_theme=Es posible exportar el juego de iconos por defecto para usarlo como base para crear un juego de iconos personalizado
+_Export_default_icon_theme=Exportar juego de iconos por defecto
+_Icon_theme=Juego de iconos
+notifications_mode=Modos de notificacion
+Select_the_notification_mode=Seleccione el modo de notificacion
+Show_notifications_in_the_console_window=Mostrar las notificaciones en la ventana de la consola
+Show_notifications_in_the_statusbar=Mostrar las notificaciones en la linea de estado
+extension_does_not_provide_preferences_pages=La extension {0} no provee p\u00e1ginas de preferencias
+cant_initialize_values_for_{0}_page_in_{1}=No se  ha podido inicializar los valores de la p\u00e1gina {0} de la extension {1}
+_use_native_file_dialog_chooser=Usar dialogo de seleccion de ficheros nativo
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties	(revision 46118)
@@ -0,0 +1,63 @@
+#Translations for language [en]
+#Thu Sep 28 13:19:48 CEST 2006
+__valenciano=\u74e6\u4f26\u897f\u4e9a\u6587
+aceptar=\u786e\u5b9a
+activa_la_ventana=\u6fc0\u6d3b\u7a97\u53e3
+browse=\u6d4f\u89c8
+cancelar=\u53d6\u6d88
+Cascada=\u5c42\u53e0
+cascada_tooltip=\u5c06\u7a97\u53e3\u6309\u5c42\u53e0\u5b89\u6392
+configurar_ANDAMI=ANDAMI \u8bbe\u7f6e
+configurar_todas_las_extensiones=\u6240\u6709\u6269\u5c55\u914d\u7f6e
+Consola=\u63a7\u5236\u53f0
+descripcion=\u63cf\u8ff0
+detalles=\u8be6\u7ec6
+directorio=\u6587\u4ef6\u5939
+directorio_extensiones=\u6269\u5c55\u76ee\u5f55
+errores=\u9519\u8bef
+examinar=\u6d4f\u89c8
+extension_activada=\u6d3b\u52a8\u6269\u5c55
+extensiones=\u6269\u5c55
+general=\u57fa\u672c\u8bbe\u7f6e
+idioma=\u8bed\u8a00
+info=\u4fe1\u606f
+invalid_priority_value=\u4f18\u5148\u6743\u503c\u65e0\u6548
+mosaico_tooltip=\u9a6c\u8d5b\u514b
+offline=\u672a\u8fde\u63a5
+online=\u5df2\u8fde\u63a5
+opciones=\u9009\u9879
+optinos.network.click_to_test_connection=\u6d4b\u8bd5\u8fde\u63a5\u8bf7\u6309\u94ae
+options.firewall.http.enabled=\u4f7f\u7528 HTTP \u4ee3\u7406\u670d\u52a1\u5668
+options.firewall.http.host=HTTP \u4ee3\u7406\u670d\u52a1\u5668
+options.firewall.http.incorrect_host=\u65e0\u6548\u7684 HTTP \u673a
+options.firewall.http.nonProxy=\u76f4\u63a5\u8fde\u63a5\u5230
+options.firewall.http.password=\u5bc6\u7801
+options.firewall.http.port=HTTP \u4ee3\u7406\u7aef\u53e3
+options.firewall.http.user=\u7528\u6237
+options.firewall.socks.enabled=\u4f7f\u7528 SOCKS \u4ee3\u7406\u670d\u52a1\u5668
+options.firewall.socks.host=SOCKS \u4ee3\u7406\u670d\u52a1\u5668
+options.firewall.socks.incorrect_host=\u65e0\u6548\u7684SOCKS \u4e3b\u673a
+options.firewall.socks.port=SOCKS \u4ee3\u7406\u7aef\u53e3
+options.foldering.data_folder=\u5730\u7406\u6570\u636e\u6587\u4ef6\u5939
+options.foldering.projects_folder=\u9879\u76ee\u6587\u4ef6\u5939
+options.foldering.template_folder=\u6a21\u677f\u6587\u4ef6\u5939
+options.foldering.title=\u6587\u4ef6\u5939
+options.general.remember_windows_pos=\u8bb0\u4f4f\u7a97\u53e3\u4f4d\u7f6e\u3002
+options.general.remember_windows_size=\u8bb0\u4f4f\u7a97\u53e3\u5927\u5c0f\u3002
+options.general.select_theme=\u8981\u4f7f\u7528\u65b0\u5916\u89c2\u60a8\u5fc5\u987b\u91cd\u65b0\u542f\u52a8\u3002
+options.network.status=\u7f51\u7edc\u72b6\u6001
+pref.appearance=\u5916\u89c2
+pref.general=\u57fa\u672c\u8bbe\u7f6e
+pref.network=\u7f51\u7edc
+pref.network.firewall=\u9632\u706b\u5899/\u4ee3\u7406\u670d\u52a1\u5668
+preferences.foldering.title=\u6587\u4ef6\u5939
+preferencias=\u9009\u9879
+Preferencias=\u9009\u9879
+prioridad=\u4f18\u5148\u6743
+test_now=\u73b0\u5728\u6d4b\u8bd5
+Tile=\u9a6c\u8d5b\u514b
+titulo_consola=\u63a7\u5236\u53f0\u4fe1\u606f
+todos=\u5168\u90e8
+Ventana=\u7a97\u53e3
+Ver=\u663e\u793a
+warnings=\u8b66\u544a

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,87 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valencian
+aceptar=Accept
+activa_la_ventana=Activate the window
+browse=Browse
+browser=Web Browser
+button.resolution.calculate=Calculate
+cancelar=Cancel
+Cascada=Cascade
+cascada_tooltip=Arrange windows in cascade
+centimeters=Centimeters
+configurar_ANDAMI=ANDAMI configuration dialog.
+configurar_todas_las_extensiones=Configure all the extensions
+Consola=Console
+descripcion=Description
+detalles=Details
+Devuelvo_el_foco_a_=Returns focus to
+directorio=Directory
+directorio_extensiones=Extensions directory.
+errores=Errors
+examinar=Examine
+extension_activada=Active extension.
+extensiones=Extensions
+general=General
+idioma=Language
+inches=Inches
+info=Information
+invalid_priority_value=Invalid priority value
+mosaico_tooltip=Mosaic tooltip
+offline=Disconnected
+online=Connected
+opciones=Options
+optinos.network.click_to_test_connection=Press button to test the connection
+options.configuration.screen=Screen settings
+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.foldering.symbol_library_folder=Symbol library folder
+options.general.browser.select_a_known_browser=Select one of the known web browsers.
+options.general.browser.specify_a_command=<html>Run a custom command.<br>Ie firefox %url<br>(where %url will be the URL to load)</html>.
+options.general.remember_windows_pos=Remember window position.
+options.general.remember_windows_size=Remebember window size.
+options.general.select_theme=Use appearance
+options.network.click_to_test_connection=Press button to test the connection
+options.network.status=Network status
+pref.appearance=Appearance
+pref.general=General
+pref.network=Network
+pref.network.firewall=Firewall/Proxy
+preferencias=Preferences
+Preferencias=Preferences
+prioridad=Priority
+resolution=Resolution
+skin=Skin
+test_measure=Measure
+test_now=Check now
+the_length_of_the_line_above_is=The length of line above is
+Tile=Tile
+titulo_consola=Information console
+todos=All
+Ventana=Window
+Ver=Show
+warnings=Warnings
+Los_cambios_efectuados_sobre_estos_valores_se_aplicaran_al_reiniciar_la_aplicacion=The changes made on these values will be applied when restarting the application
+_Show_application_setup=Application settings
+_Show_console_error_messages=Error messages console
+_Icon_themes_availables=Available icon themes
+_Select_an_icon_theme_as_default_for_use_in_the_application=Select the default icon theme for the application
+_You_can_export_the_default_icon_theme_to_use_as_base_for_create_a_custom_icon_theme=You can export the default icon theme and tune it yourself to get a custom icon theme
+_Export_default_icon_theme=Export default icon theme
+_Icon_theme=Icon theme
+extension_does_not_provide_preferences_pages={0} extension does not provide preferences pages
+cant_initialize_values_for_{0}_page_in_{1}=cant initialize values for {0} page in {1}
+_use_native_file_dialog_chooser=Use native file dialog chooser

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valenciano
+aceptar=Aceptar
+activa_la_ventana=Activar a fiestra
+browse=Examinar
+button.resolution.calculate=
+cancelar=Cancelar
+Cascada=Cascada
+cascada_tooltip=Organiza as fiestras en cascada
+centimeters=
+configurar_ANDAMI=Di\u00e1logo de configuraci\u00f3n de ANDAMI.
+configurar_todas_las_extensiones=
+Consola=Consola
+descripcion=Descrici\u00f3n
+detalles=Detalles
+Devuelvo_el_foco_a_=
+directorio=Directorio
+directorio_extensiones=Directorio das extensi\u00f3ns
+errores=Erros
+examinar=Examinar
+extension_activada=Extensi\u00f3n activada.
+extensiones=
+general=Xeral
+idioma=
+inches=
+info=Informaci\u00f3n
+invalid_priority_value=
+mosaico_tooltip=Mosaico tooltip
+offline=
+online=
+opciones=Opci\u00f3ns
+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=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Prioridade
+resolution=Resoluci\u00f3n
+test_measure=
+test_now=
+the_length_of_the_line_above_is=
+Tile=Mosaico
+titulo_consola=Consola de informacion
+todos=Todos
+Ventana=Fiestra
+Ver=Ver
+warnings=Avisos

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties	(revision 46118)
@@ -0,0 +1,74 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valenci\u00e0
+aceptar=Acceptar
+activa_la_ventana=Activa la finestra
+browse=Examinar
+browser=Fullejador web
+button.resolution.calculate=
+cancelar=Cancel\u00b7lar
+Cascada=Cascada
+cascada_tooltip=Organitzar les finestres en cascada
+centimeters=
+configurar_ANDAMI=Di\u00e0leg de configuraci\u00f3 d'ANDAMI
+configurar_todas_las_extensiones=
+Consola=Consola
+descripcion=Descripci\u00f3
+detalles=Detalls
+Devuelvo_el_foco_a_=
+directorio=Directori
+directorio_extensiones=Directori de les extensions
+errores=Errors
+examinar=Examinar
+extension_activada=Extensi\u00f3 activada
+extensiones=
+general=General
+idioma=Idioma
+inches=
+info=Informaci\u00f3
+invalid_priority_value=
+mosaico_tooltip=Mosaic r\u00e8tol indicador de funci\u00f3
+offline=
+online=
+opciones=Opcions
+optinos.network.click_to_test_connection=Prema el bot\u00f3 per comprovar la connexi\u00f3
+options.configuration.screen=
+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.foldering.data_folder=
+options.foldering.projects_folder=
+options.foldering.template_folder=
+options.foldering.title=
+options.general.browser.select_a_known_browser=Seleccionar un navegador dels coneguts.
+options.general.browser.specify_a_command=<html>Executar una comanda pr\u00f4pia.<br>Ex.: firefox %url<br>(on %url es l'URL a obrir)</html>.
+options.general.remember_windows_pos=
+options.general.remember_windows_size=
+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
+pref.appearance=Apari\u00e8ncia
+pref.general=General
+pref.network=Xarxa
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Prioritat
+resolution=Resoluci\u00f3
+test_measure=
+test_now=Comprovar ara
+the_length_of_the_line_above_is=
+Tile=Mosaic
+titulo_consola=Consola d'informaci\u00f3
+todos=Tots
+Ventana=Finestra
+Ver=Veure
+warnings=

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties	(revision 46118)
@@ -0,0 +1,71 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+__valenciano=Valenciano
+aceptar=Aceitar
+activa_la_ventana=Activa a janela
+browse=
+button.resolution.calculate=
+cancelar=Cancelar
+Cascada=Cascata
+cascada_tooltip=Arranjar janelas em cascata
+centimeters=
+configurar_ANDAMI=Di\u00e1log de configura\u00e7\u00e3o do ANDAMI.
+configurar_todas_las_extensiones=
+Consola=Console
+descripcion=Descri\u00e7\u00e3o
+detalles=Detalhes
+Devuelvo_el_foco_a_=
+directorio=Diret\u00f3rio
+directorio_extensiones=Diret\u00f3rio de extens\u00f5es
+errores=Erro
+examinar=Examinar
+extension_activada=Extens\u00e3o ativa.
+extensiones=
+general=Geral
+idioma=Idioma
+inches=
+info=Informa\u00e7\u00e3o
+invalid_priority_value=
+mosaico_tooltip=Mosaico
+offline=
+online=
+opciones=Op\u00e7\u00f5es
+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=
+pref.appearance=
+pref.general=
+pref.network=
+pref.network.firewall=
+preferencias=
+Preferencias=
+prioridad=Prioridade
+resolution=
+test_measure=
+test_now=
+the_length_of_the_line_above_is=
+Tile=Lado a Lado
+titulo_consola=Informa\u00e7\u00e3o de console
+todos=Todos
+Ventana=Janela
+Ver=Ver
+warnings=Aviso

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/i18n/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,132 @@
+<?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.coreplugin"/>
+  <libraries library-dir="lib"/>
+  <resourceBundle name="text"/>
+  <extensions>
+    <extension class-name="org.gvsig.coreplugin.menus.ToolbarMenus"
+      description="Active toolbar menues"
+      active="true"
+      priority="99999">
+    </extension>
+    <extension class-name="org.gvsig.coreplugin.Consola"
+      description="Extensi�n encargada de abrir la ventana de la consola."
+      active="true" priority="1">
+      <action
+        name= "show-console"
+        label="Console"
+        tooltip="_Show_console_error_messages"
+        action-command="show-console"
+        icon="show-console"
+        accelerator="Alt+S"
+        position="400200000"
+        />
+
+      <menu
+        name="show-console"
+        text="Show/Console"
+        />
+
+      <tool-bar name="core" position="10000">
+        <action-tool name="show-console" last="true" />
+      </tool-bar>
+
+    </extension>
+    <extension class-name="org.gvsig.coreplugin.PreferencesExtension"
+      description="Extensi�n encargada de abrir la ventana de preferencias de ANDAMI."
+      active="true" priority="3">
+      <action
+        name= "edit-setup"
+        label="preferencias"
+        tooltip="preferencias"
+        action-command="edit-setup"
+        icon="edit-setup"
+        accelerator=""
+        position="401000000"
+        />
+      <action
+        name="application-exit"
+        label="salir"
+        tooltip="salir_tooltip"
+        action-command="application-exit"
+        icon="application-exit"
+        position="109000000"
+        accelerator="Ctrl+Q"
+        />
+
+      <menu
+        name="edit-setup"
+        text="Show/preferencias"
+        />
+      <menu
+        name="application-exit"
+        text="File/salir"
+        />
+
+      <tool-bar name="core" position="10000">
+        <action-tool name="edit-setup"/>
+      </tool-bar>
+
+    </extension>
+
+
+    <extension class-name="org.gvsig.coreplugin.StatusBar"
+      description="Recoge los mensajes del NotificationManager y los muestra por la StatusBar"
+      active="true">
+    </extension>
+    <skin-extension class-name="org.gvsig.coreplugin.mdiManager.NewSkin">
+      <action
+        name= "window-cascade"
+        label="cascade"
+        tooltip="_Show_windows_in_cascade"
+        action-command="window-cascade"
+        icon="window-cascade"
+        position="960100000"
+        accelerator="Alt+C"
+        />
+      <action
+        name= "window-tile"
+        label="tile"
+        tooltip="_Show_windows_tile"
+        action-command="window-tile"
+        icon="window-tile"
+        position="960200000"
+        accelerator="Alt+T"
+        />
+
+      <menu
+        name="window-cascade"
+        text="Window/Cascada"
+        />
+      <menu
+        name="window-tile"
+        text="Window/Tile"
+        />
+    </skin-extension>
+  </extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/shield.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/shield.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/kde-network-offline.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/kde-network-offline.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/folder.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/kde-network-online.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/kde-network-online.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/tile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/tile.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-extension.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-extension.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-general.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-general.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-screensetting.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-screensetting.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-appearance.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-appearance.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-extensions.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-extensions.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-language.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-language.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-browsercontrol.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-browsercontrol.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-skin.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-skin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-firewall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-firewall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-foldering.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-foldering.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-network.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-network.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-dirextension.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-dirextension.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-icontheme.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/preferences/edit-setup-icontheme.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/emblem-work.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/emblem-work.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/browser.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/stop.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/file-manager.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/file-manager.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/network.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/network.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/enabled.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/show-console.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/show-console.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/edit-setup.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/edit-setup.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/application-exit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/action/application-exit.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/console.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/console.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/bonobo-component-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.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/bonobo-component-browser.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/cascada.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/cascada.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/config.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/config.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/console.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/console.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/resolution.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/resolution.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/gnome-settings-theme.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/gnome-settings-theme.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/babel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/babel.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/config.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/resources-plugin/images/config.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/addNewSingletonWindow.sqd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/addNewSingletonWindow.sqd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/addNewSingletonWindow.sqd	(revision 46118)
@@ -0,0 +1,1958 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<net.java.amateras.uml.sequencediagram.model.InteractionModel>
+  <instances>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel>
+      <name>NewSkin</name>
+      <lifeLine>
+        <owner reference="../.."/>
+        <constraint>
+          <x>189</x>
+          <y>20</y>
+          <width>5</width>
+          <height>983</height>
+        </constraint>
+        <sourceConnections/>
+        <targetConnections/>
+        <children>
+          <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+            <ownerLine reference="../../.."/>
+            <movable>true</movable>
+            <constraint>
+              <x>184</x>
+              <y>85</y>
+              <width>10</width>
+              <height>878</height>
+            </constraint>
+            <sourceConnections>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                <name></name>
+                <direction>false</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner class="net.java.amateras.uml.sequencediagram.model.ActorModel">
+                      <name>actor</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>-29</x>
+                        <y>20</y>
+                        <width>100</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor>
+                        <red>255</red>
+                        <green>255</green>
+                        <blue>206</blue>
+                      </backgroundColor>
+                      <foregroundColor>
+                        <red>0</red>
+                        <green>0</green>
+                        <blue>0</blue>
+                      </foregroundColor>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActorModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>21</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>983</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../owner/backgroundColor"/>
+                    <foregroundColor reference="../owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>16</x>
+                    <y>85</y>
+                    <width>10</width>
+                    <height>888</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>1</order>
+                      <oldOrder>1</oldOrder>
+                      <name>addWindow(IWindow p)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../.."/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>2</order>
+                <oldOrder>2</oldOrder>
+                <name>getWindowInfo(IWindow p)</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner>
+                      <name>WindowInfoSupport</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>516</x>
+                        <y>20</y>
+                        <width>129</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>581</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>983</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                        <ownerLine reference="../../.."/>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>576</x>
+                          <y>429</y>
+                          <width>10</width>
+                          <height>47</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>false</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                              <owner reference="../../../../../../../../../.."/>
+                              <ownerLine reference="../../../../../../../../../../../.."/>
+                              <movable>true</movable>
+                              <constraint>
+                                <x>189</x>
+                                <y>403</y>
+                                <width>10</width>
+                                <height>550</height>
+                              </constraint>
+                              <sourceConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>9</order>
+                                  <oldOrder>9</oldOrder>
+                                  <name>wi = getWindowInfo()</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>11</order>
+                                  <oldOrder>11</oldOrder>
+                                  <name>getJInternalFrame(p)</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                    <ownerLine>
+                                      <owner>
+                                        <name>FrameWindowSupport</name>
+                                        <lifeLine reference="../.."/>
+                                        <root reference="../../../../../../../../../../../../../../../../../../../.."/>
+                                        <constraint>
+                                          <x>871</x>
+                                          <y>20</y>
+                                          <width>115</width>
+                                          <height>-1</height>
+                                        </constraint>
+                                        <sourceConnections/>
+                                        <targetConnections/>
+                                        <children>
+                                          <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                        </children>
+                                        <filterProperty/>
+                                        <backgroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                        <foregroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                        <showIcon>true</showIcon>
+                                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../.."/>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </owner>
+                                      <constraint>
+                                        <x>928</x>
+                                        <y>20</y>
+                                        <width>5</width>
+                                        <height>983</height>
+                                      </constraint>
+                                      <sourceConnections/>
+                                      <targetConnections/>
+                                      <children>
+                                        <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                          <ownerLine reference="../../.."/>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>923</x>
+                                            <y>436</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                              <name></name>
+                                              <direction>false</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                          </sourceConnections>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                              <order>10</order>
+                                              <oldOrder>10</oldOrder>
+                                              <name>updateWindowInfo(p, wi)</name>
+                                              <direction>true</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                        <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                      </children>
+                                      <filterProperty/>
+                                      <backgroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                      <foregroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                      <showIcon>true</showIcon>
+                                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../.."/>
+                                      <listeners serialization="custom">
+                                        <java.beans.PropertyChangeSupport>
+                                          <default>
+                                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                            <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                          </default>
+                                          <null/>
+                                        </java.beans.PropertyChangeSupport>
+                                      </listeners>
+                                    </ownerLine>
+                                    <movable>true</movable>
+                                    <constraint>
+                                      <x>923</x>
+                                      <y>500</y>
+                                      <width>10</width>
+                                      <height>87</height>
+                                    </constraint>
+                                    <sourceConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                        <name></name>
+                                        <direction>false</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                        <order>12</order>
+                                        <oldOrder>12</oldOrder>
+                                        <name>frame = createJInternalFrame(p)</name>
+                                        <direction>true</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                          <owner reference="../../../.."/>
+                                          <ownerLine reference="../../../../ownerLine"/>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>928</x>
+                                            <y>526</y>
+                                            <width>10</width>
+                                            <height>51</height>
+                                          </constraint>
+                                          <sourceConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                              <order>13</order>
+                                              <oldOrder>13</oldOrder>
+                                              <name>wi = getWindowInfo(IWindow p) </name>
+                                              <direction>false</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                                <ownerLine reference="../../../../../../../../../../../../../../.."/>
+                                                <movable>true</movable>
+                                                <constraint>
+                                                  <x>576</x>
+                                                  <y>537</y>
+                                                  <width>10</width>
+                                                  <height>30</height>
+                                                </constraint>
+                                                <sourceConnections>
+                                                  <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                                    <name></name>
+                                                    <direction>true</direction>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                                    <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                                    <bendpoints/>
+                                                    <useBendpoint>false</useBendpoint>
+                                                    <showIcon>true</showIcon>
+                                                    <listeners serialization="custom">
+                                                      <java.beans.PropertyChangeSupport>
+                                                        <default>
+                                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                          <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                                        </default>
+                                                        <null/>
+                                                      </java.beans.PropertyChangeSupport>
+                                                    </listeners>
+                                                  </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                                </sourceConnections>
+                                                <targetConnections>
+                                                  <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                                </targetConnections>
+                                                <children/>
+                                                <filterProperty/>
+                                                <backgroundColor reference="../../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                                <foregroundColor reference="../../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                                <showIcon>true</showIcon>
+                                                <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../../../../.."/>
+                                                <listeners serialization="custom">
+                                                  <java.beans.PropertyChangeSupport>
+                                                    <default>
+                                                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                                    </default>
+                                                    <null/>
+                                                  </java.beans.PropertyChangeSupport>
+                                                </listeners>
+                                              </target>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                          </sourceConnections>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                            <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </target>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <backgroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                        <foregroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                    </sourceConnections>
+                                    <targetConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                    </targetConnections>
+                                    <children>
+                                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+                                    </children>
+                                    <filterProperty/>
+                                    <backgroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                    <foregroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                    <showIcon>true</showIcon>
+                                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </target>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>14</order>
+                                  <oldOrder>14</oldOrder>
+                                  <name>openSingletonWindow(p, frame)</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                    <ownerLine>
+                                      <owner>
+                                        <name>SingletonWindowSupport</name>
+                                        <lifeLine reference="../.."/>
+                                        <root reference="../../../../../../../../../../../../../../../../../../../.."/>
+                                        <constraint>
+                                          <x>266</x>
+                                          <y>20</y>
+                                          <width>100</width>
+                                          <height>-1</height>
+                                        </constraint>
+                                        <sourceConnections/>
+                                        <targetConnections/>
+                                        <children>
+                                          <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                        </children>
+                                        <filterProperty/>
+                                        <backgroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                        <foregroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                        <showIcon>true</showIcon>
+                                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../.."/>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </owner>
+                                      <constraint>
+                                        <x>316</x>
+                                        <y>20</y>
+                                        <width>5</width>
+                                        <height>983</height>
+                                      </constraint>
+                                      <sourceConnections/>
+                                      <targetConnections/>
+                                      <children>
+                                        <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                          <ownerLine reference="../../.."/>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>311</x>
+                                            <y>275</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                              <name></name>
+                                              <direction>false</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                          </sourceConnections>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                              <order>6</order>
+                                              <oldOrder>6</oldOrder>
+                                              <name>registerWindow()</name>
+                                              <direction>true</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                        <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                      </children>
+                                      <filterProperty/>
+                                      <backgroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                      <foregroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                      <showIcon>true</showIcon>
+                                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../.."/>
+                                      <listeners serialization="custom">
+                                        <java.beans.PropertyChangeSupport>
+                                          <default>
+                                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                            <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                          </default>
+                                          <null/>
+                                        </java.beans.PropertyChangeSupport>
+                                      </listeners>
+                                    </ownerLine>
+                                    <movable>true</movable>
+                                    <constraint>
+                                      <x>311</x>
+                                      <y>617</y>
+                                      <width>10</width>
+                                      <height>57</height>
+                                    </constraint>
+                                    <sourceConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                        <name></name>
+                                        <direction>false</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                        <order>15</order>
+                                        <oldOrder>15</oldOrder>
+                                        <name>contentFrame.put(swi, frame)</name>
+                                        <direction>true</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                          <ownerLine>
+                                            <owner>
+                                              <name>HashMap: contentFrame</name>
+                                              <lifeLine reference="../.."/>
+                                              <root reference="../../../../../../../../../../../../../../../../../../../../../../.."/>
+                                              <constraint>
+                                                <x>994</x>
+                                                <y>20</y>
+                                                <width>165</width>
+                                                <height>-1</height>
+                                              </constraint>
+                                              <sourceConnections/>
+                                              <targetConnections/>
+                                              <children>
+                                                <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                              </children>
+                                              <filterProperty/>
+                                              <backgroundColor reference="../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                              <foregroundColor reference="../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                              <showIcon>true</showIcon>
+                                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../../../.."/>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </owner>
+                                            <constraint>
+                                              <x>1076</x>
+                                              <y>20</y>
+                                              <width>5</width>
+                                              <height>983</height>
+                                            </constraint>
+                                            <sourceConnections/>
+                                            <targetConnections/>
+                                            <children>
+                                              <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                            </children>
+                                            <filterProperty/>
+                                            <backgroundColor reference="../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                            <foregroundColor reference="../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                            <showIcon>true</showIcon>
+                                            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../../.."/>
+                                            <listeners serialization="custom">
+                                              <java.beans.PropertyChangeSupport>
+                                                <default>
+                                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                  <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                                </default>
+                                                <null/>
+                                              </java.beans.PropertyChangeSupport>
+                                            </listeners>
+                                          </ownerLine>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>1071</x>
+                                            <y>634</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                              <name></name>
+                                              <direction>false</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                          </sourceConnections>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </target>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                    </sourceConnections>
+                                    <targetConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                      <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                                    </targetConnections>
+                                    <children/>
+                                    <filterProperty/>
+                                    <backgroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                    <foregroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                    <showIcon>true</showIcon>
+                                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </target>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>16</order>
+                                  <oldOrder>16</oldOrder>
+                                  <name>addJInternalFrame(frame, wi)</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                    <owner reference="../../../.."/>
+                                    <ownerLine reference="../../../../../../../../../../../../../../.."/>
+                                    <movable>true</movable>
+                                    <constraint>
+                                      <x>194</x>
+                                      <y>736</y>
+                                      <width>10</width>
+                                      <height>207</height>
+                                    </constraint>
+                                    <sourceConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                        <order>18</order>
+                                        <oldOrder>18</oldOrder>
+                                        <name>updateFrameProperties(frame, wi)</name>
+                                        <direction>true</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                          <owner reference="../../../.."/>
+                                          <ownerLine reference="../../../../../../../../../../../../../../../../../.."/>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>199</x>
+                                            <y>836</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections/>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </target>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <backgroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                        <foregroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                        <order>19</order>
+                                        <oldOrder>19</oldOrder>
+                                        <name>activateJInternalFrame(frame)</name>
+                                        <direction>true</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                          <owner reference="../../../.."/>
+                                          <ownerLine reference="../../../../../../../../../../../../../../../../../.."/>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>199</x>
+                                            <y>903</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections/>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </target>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <backgroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                        <foregroundColor reference="../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                        <order>17</order>
+                                        <oldOrder>17</oldOrder>
+                                        <name>add(frame)</name>
+                                        <direction>true</direction>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                        <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                                          <ownerLine>
+                                            <owner>
+                                              <name>MyDesktopPane</name>
+                                              <lifeLine reference="../.."/>
+                                              <root reference="../../../../../../../../../../../../../../../../../../../../../../.."/>
+                                              <constraint>
+                                                <x>1174</x>
+                                                <y>20</y>
+                                                <width>118</width>
+                                                <height>-1</height>
+                                              </constraint>
+                                              <sourceConnections/>
+                                              <targetConnections/>
+                                              <children>
+                                                <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                              </children>
+                                              <filterProperty/>
+                                              <backgroundColor reference="../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                              <foregroundColor reference="../../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                              <showIcon>true</showIcon>
+                                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../../../.."/>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </owner>
+                                            <constraint>
+                                              <x>1233</x>
+                                              <y>20</y>
+                                              <width>5</width>
+                                              <height>983</height>
+                                            </constraint>
+                                            <sourceConnections/>
+                                            <targetConnections/>
+                                            <children>
+                                              <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                            </children>
+                                            <filterProperty/>
+                                            <backgroundColor reference="../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                            <foregroundColor reference="../../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                            <showIcon>true</showIcon>
+                                            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../../.."/>
+                                            <listeners serialization="custom">
+                                              <java.beans.PropertyChangeSupport>
+                                                <default>
+                                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                  <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                                </default>
+                                                <null/>
+                                              </java.beans.PropertyChangeSupport>
+                                            </listeners>
+                                          </ownerLine>
+                                          <movable>true</movable>
+                                          <constraint>
+                                            <x>1228</x>
+                                            <y>759</y>
+                                            <width>10</width>
+                                            <height>30</height>
+                                          </constraint>
+                                          <sourceConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                              <name></name>
+                                              <direction>false</direction>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                              <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                              <bendpoints/>
+                                              <useBendpoint>false</useBendpoint>
+                                              <showIcon>true</showIcon>
+                                              <listeners serialization="custom">
+                                                <java.beans.PropertyChangeSupport>
+                                                  <default>
+                                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                    <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                                  </default>
+                                                  <null/>
+                                                </java.beans.PropertyChangeSupport>
+                                              </listeners>
+                                            </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                          </sourceConnections>
+                                          <targetConnections>
+                                            <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                          </targetConnections>
+                                          <children/>
+                                          <filterProperty/>
+                                          <backgroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                          <foregroundColor reference="../../../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                          <showIcon>true</showIcon>
+                                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../../../.."/>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </target>
+                                        <bendpoints/>
+                                        <useBendpoint>false</useBendpoint>
+                                        <showIcon>true</showIcon>
+                                        <listeners serialization="custom">
+                                          <java.beans.PropertyChangeSupport>
+                                            <default>
+                                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                              <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                            </default>
+                                            <null/>
+                                          </java.beans.PropertyChangeSupport>
+                                        </listeners>
+                                      </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                    </sourceConnections>
+                                    <targetConnections>
+                                      <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                                      <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                                    </targetConnections>
+                                    <children>
+                                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+                                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+                                    </children>
+                                    <filterProperty/>
+                                    <backgroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                    <foregroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                    <showIcon>true</showIcon>
+                                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </target>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <backgroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                  <foregroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                              </sourceConnections>
+                              <targetConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>8</order>
+                                  <oldOrder>8</oldOrder>
+                                  <name>addJInternalFrame(IWindow p)</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <backgroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                  <foregroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../.."/>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                              </targetConnections>
+                              <children>
+                                <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target"/>
+                              </children>
+                              <filterProperty/>
+                              <backgroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                              <foregroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                              <showIcon>true</showIcon>
+                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../.."/>
+                              <listeners serialization="custom">
+                                <java.beans.PropertyChangeSupport>
+                                  <default>
+                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                  </default>
+                                  <null/>
+                                </java.beans.PropertyChangeSupport>
+                              </listeners>
+                            </target>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                    <foregroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>576</x>
+                    <y>90</y>
+                    <width>10</width>
+                    <height>161</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                      <name></name>
+                      <direction>false</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>3</order>
+                      <oldOrder>3</oldOrder>
+                      <name>wi = getWindowInfo()</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                        <ownerLine>
+                          <owner>
+                            <name>IWindow</name>
+                            <lifeLine reference="../.."/>
+                            <root reference="../../../../../../../../../../../../../.."/>
+                            <constraint>
+                              <x>653</x>
+                              <y>20</y>
+                              <width>100</width>
+                              <height>-1</height>
+                            </constraint>
+                            <sourceConnections/>
+                            <targetConnections/>
+                            <children>
+                              <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                            </children>
+                            <filterProperty/>
+                            <backgroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                            <foregroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                            <showIcon>true</showIcon>
+                            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../.."/>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </owner>
+                          <constraint>
+                            <x>703</x>
+                            <y>20</y>
+                            <width>5</width>
+                            <height>983</height>
+                          </constraint>
+                          <sourceConnections/>
+                          <targetConnections/>
+                          <children>
+                            <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                          </children>
+                          <filterProperty/>
+                          <backgroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                          <foregroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                          <showIcon>true</showIcon>
+                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../.."/>
+                          <listeners serialization="custom">
+                            <java.beans.PropertyChangeSupport>
+                              <default>
+                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                              </default>
+                              <null/>
+                            </java.beans.PropertyChangeSupport>
+                          </listeners>
+                        </ownerLine>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>698</x>
+                          <y>97</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>false</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </target>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>4</order>
+                      <oldOrder>4</oldOrder>
+                      <name>wi.setHeight(wi.getHeight() + 40)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                        <ownerLine>
+                          <owner>
+                            <name>WindowInfo</name>
+                            <lifeLine reference="../.."/>
+                            <root reference="../../../../../../../../../../../../../.."/>
+                            <constraint>
+                              <x>764</x>
+                              <y>20</y>
+                              <width>100</width>
+                              <height>-1</height>
+                            </constraint>
+                            <sourceConnections/>
+                            <targetConnections/>
+                            <children>
+                              <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                            </children>
+                            <filterProperty/>
+                            <backgroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                            <foregroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                            <showIcon>true</showIcon>
+                            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../.."/>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </owner>
+                          <constraint>
+                            <x>814</x>
+                            <y>20</y>
+                            <width>5</width>
+                            <height>983</height>
+                          </constraint>
+                          <sourceConnections/>
+                          <targetConnections/>
+                          <children>
+                            <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                            <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                              <ownerLine reference="../../.."/>
+                              <movable>true</movable>
+                              <constraint>
+                                <x>809</x>
+                                <y>211</y>
+                                <width>10</width>
+                                <height>30</height>
+                              </constraint>
+                              <sourceConnections>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                  <name></name>
+                                  <direction>false</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                              </sourceConnections>
+                              <targetConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>5</order>
+                                  <oldOrder>5</oldOrder>
+                                  <name>wi.addPropertyChangeListener(new WindowPropertyChangeListener())</name>
+                                  <direction>true</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                              </targetConnections>
+                              <children/>
+                              <filterProperty/>
+                              <backgroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                              <foregroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                              <showIcon>true</showIcon>
+                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../.."/>
+                              <listeners serialization="custom">
+                                <java.beans.PropertyChangeSupport>
+                                  <default>
+                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                  </default>
+                                  <null/>
+                                </java.beans.PropertyChangeSupport>
+                              </listeners>
+                            </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                          </children>
+                          <filterProperty/>
+                          <backgroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                          <foregroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                          <showIcon>true</showIcon>
+                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../.."/>
+                          <listeners serialization="custom">
+                            <java.beans.PropertyChangeSupport>
+                              <default>
+                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                              </default>
+                              <null/>
+                            </java.beans.PropertyChangeSupport>
+                          </listeners>
+                        </ownerLine>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>809</x>
+                          <y>154</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>false</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </target>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>7</order>
+                <oldOrder>7</oldOrder>
+                <name>add(Iwindow  p, anonymousActionListener)</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner>
+                      <name>WindowStackSupport</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>384</x>
+                        <y>20</y>
+                        <width>120</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>444</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>983</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                    <foregroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>439</x>
+                    <y>328</y>
+                    <width>10</width>
+                    <height>30</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                      <name></name>
+                      <direction>false</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+            </sourceConnections>
+            <targetConnections>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+            </targetConnections>
+            <children>
+              <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+            </children>
+            <filterProperty/>
+            <backgroundColor reference="../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+            <foregroundColor reference="../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+            <showIcon>true</showIcon>
+            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../.."/>
+            <listeners serialization="custom">
+              <java.beans.PropertyChangeSupport>
+                <default>
+                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                </default>
+                <null/>
+              </java.beans.PropertyChangeSupport>
+            </listeners>
+          </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+        </children>
+        <filterProperty/>
+        <backgroundColor reference="../children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+        <foregroundColor reference="../children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+        <showIcon>true</showIcon>
+        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+        <listeners serialization="custom">
+          <java.beans.PropertyChangeSupport>
+            <default>
+              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+              <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+            </default>
+            <null/>
+          </java.beans.PropertyChangeSupport>
+        </listeners>
+      </lifeLine>
+      <root reference="../../.."/>
+      <constraint>
+        <x>139</x>
+        <y>20</y>
+        <width>100</width>
+        <height>-1</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children>
+        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../lifeLine"/>
+      </children>
+      <filterProperty/>
+      <backgroundColor reference="../lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.sequencediagram.model.InstanceModel>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActorModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+  </instances>
+  <activations>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+  </activations>
+  <fragments/>
+  <lifelines>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+  </lifelines>
+  <sourceConnections/>
+  <targetConnections/>
+  <children>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.ActorModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.model.NoteModel>
+      <content>add new SingletonWindow
+
+Current situation</content>
+      <old>addNewSingletonWindow
+
+Current situation</old>
+      <constraint>
+        <x>1305</x>
+        <y>40</y>
+        <width>127</width>
+        <height>77</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children/>
+      <filterProperty/>
+      <backgroundColor reference="../../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.model.NoteModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.model.NoteModel>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[4]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+  </children>
+  <filterProperty/>
+  <backgroundColor reference="../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+  <foregroundColor reference="../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+  <showIcon>true</showIcon>
+  <listeners serialization="custom">
+    <java.beans.PropertyChangeSupport>
+      <default>
+        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+        <source class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+      </default>
+      <null/>
+    </java.beans.PropertyChangeSupport>
+  </listeners>
+</net.java.amateras.uml.sequencediagram.model.InteractionModel>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/reopenSingletonWindow.sqd
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/reopenSingletonWindow.sqd	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/src/main/sqd/reopenSingletonWindow.sqd	(revision 46118)
@@ -0,0 +1,1616 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<net.java.amateras.uml.sequencediagram.model.InteractionModel>
+  <instances>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel>
+      <name>NewSkin</name>
+      <lifeLine>
+        <owner reference="../.."/>
+        <constraint>
+          <x>189</x>
+          <y>20</y>
+          <width>5</width>
+          <height>750</height>
+        </constraint>
+        <sourceConnections/>
+        <targetConnections/>
+        <children>
+          <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+            <ownerLine reference="../../.."/>
+            <movable>true</movable>
+            <constraint>
+              <x>184</x>
+              <y>85</y>
+              <width>10</width>
+              <height>645</height>
+            </constraint>
+            <sourceConnections>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                <name></name>
+                <direction>false</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner class="net.java.amateras.uml.sequencediagram.model.ActorModel">
+                      <name>actor</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>-29</x>
+                        <y>20</y>
+                        <width>100</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor>
+                        <red>255</red>
+                        <green>255</green>
+                        <blue>206</blue>
+                      </backgroundColor>
+                      <foregroundColor>
+                        <red>0</red>
+                        <green>0</green>
+                        <blue>0</blue>
+                      </foregroundColor>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActorModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>21</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>750</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../owner/backgroundColor"/>
+                    <foregroundColor reference="../owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>16</x>
+                    <y>85</y>
+                    <width>10</width>
+                    <height>655</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>1</order>
+                      <oldOrder>1</oldOrder>
+                      <name>addWindow(IWindow p)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../.."/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>2</order>
+                <oldOrder>2</oldOrder>
+                <name>getWindowInfo(IWindow p)</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner>
+                      <name>WindowInfoSupport</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>516</x>
+                        <y>20</y>
+                        <width>129</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>581</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>750</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                        <ownerLine reference="../../.."/>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>576</x>
+                          <y>254</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>true</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                              <owner>
+                                <ownerLine>
+                                  <owner>
+                                    <name>FrameWindowSupport</name>
+                                    <lifeLine reference="../.."/>
+                                    <root reference="../../../../../../../../../../../../../../../../../.."/>
+                                    <constraint>
+                                      <x>871</x>
+                                      <y>20</y>
+                                      <width>115</width>
+                                      <height>-1</height>
+                                    </constraint>
+                                    <sourceConnections/>
+                                    <targetConnections/>
+                                    <children>
+                                      <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                    </children>
+                                    <filterProperty/>
+                                    <backgroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                    <foregroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                    <showIcon>true</showIcon>
+                                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../.."/>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </owner>
+                                  <constraint>
+                                    <x>928</x>
+                                    <y>20</y>
+                                    <width>5</width>
+                                    <height>750</height>
+                                  </constraint>
+                                  <sourceConnections/>
+                                  <targetConnections/>
+                                  <children>
+                                    <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                      <ownerLine reference="../../.."/>
+                                      <movable>true</movable>
+                                      <constraint>
+                                        <x>923</x>
+                                        <y>98</y>
+                                        <width>10</width>
+                                        <height>30</height>
+                                      </constraint>
+                                      <sourceConnections>
+                                        <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                          <name></name>
+                                          <direction>false</direction>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                          <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../.."/>
+                                          <bendpoints/>
+                                          <useBendpoint>false</useBendpoint>
+                                          <showIcon>true</showIcon>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                      </sourceConnections>
+                                      <targetConnections>
+                                        <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                          <order>3</order>
+                                          <oldOrder>3</oldOrder>
+                                          <name>updateWindowInfo(p, wi)</name>
+                                          <direction>true</direction>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../.."/>
+                                          <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                          <bendpoints/>
+                                          <useBendpoint>false</useBendpoint>
+                                          <showIcon>true</showIcon>
+                                          <listeners serialization="custom">
+                                            <java.beans.PropertyChangeSupport>
+                                              <default>
+                                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                                <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                              </default>
+                                              <null/>
+                                            </java.beans.PropertyChangeSupport>
+                                          </listeners>
+                                        </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                      </targetConnections>
+                                      <children/>
+                                      <filterProperty/>
+                                      <backgroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                      <foregroundColor reference="../../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                      <showIcon>true</showIcon>
+                                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../../../.."/>
+                                      <listeners serialization="custom">
+                                        <java.beans.PropertyChangeSupport>
+                                          <default>
+                                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                          </default>
+                                          <null/>
+                                        </java.beans.PropertyChangeSupport>
+                                      </listeners>
+                                    </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                                    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                  </children>
+                                  <filterProperty/>
+                                  <backgroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                  <foregroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                  <showIcon>true</showIcon>
+                                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../.."/>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </ownerLine>
+                                <movable>true</movable>
+                                <constraint>
+                                  <x>923</x>
+                                  <y>219</y>
+                                  <width>10</width>
+                                  <height>85</height>
+                                </constraint>
+                                <sourceConnections>
+                                  <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                    <name></name>
+                                    <direction>false</direction>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                    <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../.."/>
+                                    <bendpoints/>
+                                    <useBendpoint>false</useBendpoint>
+                                    <showIcon>true</showIcon>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                  <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                    <order>6</order>
+                                    <oldOrder>6</oldOrder>
+                                    <name>frame = createJInternalFrame(p)</name>
+                                    <direction>true</direction>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                    <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                    <bendpoints/>
+                                    <useBendpoint>false</useBendpoint>
+                                    <backgroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                    <foregroundColor reference="../../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                    <showIcon>true</showIcon>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                </sourceConnections>
+                                <targetConnections>
+                                  <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                    <order>5</order>
+                                    <oldOrder>5</oldOrder>
+                                    <name>frame = getJInternalFrame(p)</name>
+                                    <direction>true</direction>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../../../../../.."/>
+                                    <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                    <bendpoints/>
+                                    <useBendpoint>false</useBendpoint>
+                                    <showIcon>true</showIcon>
+                                    <listeners serialization="custom">
+                                      <java.beans.PropertyChangeSupport>
+                                        <default>
+                                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                          <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                        </default>
+                                        <null/>
+                                      </java.beans.PropertyChangeSupport>
+                                    </listeners>
+                                  </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                </targetConnections>
+                                <children>
+                                  <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                </children>
+                                <filterProperty/>
+                                <backgroundColor reference="../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                <foregroundColor reference="../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                <showIcon>true</showIcon>
+                                <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../.."/>
+                                <listeners serialization="custom">
+                                  <java.beans.PropertyChangeSupport>
+                                    <default>
+                                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                    </default>
+                                    <null/>
+                                  </java.beans.PropertyChangeSupport>
+                                </listeners>
+                              </owner>
+                              <ownerLine reference="../owner/ownerLine"/>
+                              <movable>true</movable>
+                              <constraint>
+                                <x>928</x>
+                                <y>245</y>
+                                <width>10</width>
+                                <height>49</height>
+                              </constraint>
+                              <sourceConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                                  <order>7</order>
+                                  <oldOrder>7</oldOrder>
+                                  <name>wi = getWindowInfo(IWindow p) </name>
+                                  <direction>false</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                              </sourceConnections>
+                              <targetConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../owner/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../.."/>
+                              </targetConnections>
+                              <children/>
+                              <filterProperty/>
+                              <backgroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                              <foregroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                              <showIcon>true</showIcon>
+                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../.."/>
+                              <listeners serialization="custom">
+                                <java.beans.PropertyChangeSupport>
+                                  <default>
+                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                  </default>
+                                  <null/>
+                                </java.beans.PropertyChangeSupport>
+                              </listeners>
+                            </target>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                    <foregroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>576</x>
+                    <y>90</y>
+                    <width>10</width>
+                    <height>48</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                      <name></name>
+                      <direction>false</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>4</order>
+                <oldOrder>4</oldOrder>
+                <name>registerWindow()</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner>
+                      <name>SingletonWindowSupport</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>266</x>
+                        <y>20</y>
+                        <width>100</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>316</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>750</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                        <ownerLine reference="../../.."/>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>311</x>
+                          <y>344</y>
+                          <width>10</width>
+                          <height>60</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>false</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../.."/>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                            <order>9</order>
+                            <oldOrder>9</oldOrder>
+                            <name>contentFrame.put(swi, frame)</name>
+                            <direction>true</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                              <ownerLine>
+                                <owner>
+                                  <name>HashMap: contentFrame</name>
+                                  <lifeLine reference="../.."/>
+                                  <root reference="../../../../../../../../../../../../../../../../.."/>
+                                  <constraint>
+                                    <x>994</x>
+                                    <y>20</y>
+                                    <width>165</width>
+                                    <height>-1</height>
+                                  </constraint>
+                                  <sourceConnections/>
+                                  <targetConnections/>
+                                  <children>
+                                    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                                  </children>
+                                  <filterProperty/>
+                                  <backgroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                  <foregroundColor reference="../../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                  <showIcon>true</showIcon>
+                                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../../.."/>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </owner>
+                                <constraint>
+                                  <x>1076</x>
+                                  <y>20</y>
+                                  <width>5</width>
+                                  <height>750</height>
+                                </constraint>
+                                <sourceConnections/>
+                                <targetConnections/>
+                                <children>
+                                  <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                                </children>
+                                <filterProperty/>
+                                <backgroundColor reference="../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                                <foregroundColor reference="../../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                                <showIcon>true</showIcon>
+                                <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../../.."/>
+                                <listeners serialization="custom">
+                                  <java.beans.PropertyChangeSupport>
+                                    <default>
+                                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                      <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                                    </default>
+                                    <null/>
+                                  </java.beans.PropertyChangeSupport>
+                                </listeners>
+                              </ownerLine>
+                              <movable>true</movable>
+                              <constraint>
+                                <x>1071</x>
+                                <y>364</y>
+                                <width>10</width>
+                                <height>30</height>
+                              </constraint>
+                              <sourceConnections>
+                                <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                                  <name></name>
+                                  <direction>false</direction>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                                  <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                                  <bendpoints/>
+                                  <useBendpoint>false</useBendpoint>
+                                  <showIcon>true</showIcon>
+                                  <listeners serialization="custom">
+                                    <java.beans.PropertyChangeSupport>
+                                      <default>
+                                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                        <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                      </default>
+                                      <null/>
+                                    </java.beans.PropertyChangeSupport>
+                                  </listeners>
+                                </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                              </sourceConnections>
+                              <targetConnections>
+                                <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                              </targetConnections>
+                              <children/>
+                              <filterProperty/>
+                              <backgroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                              <foregroundColor reference="../../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                              <showIcon>true</showIcon>
+                              <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../../.."/>
+                              <listeners serialization="custom">
+                                <java.beans.PropertyChangeSupport>
+                                  <default>
+                                    <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                    <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                                  </default>
+                                  <null/>
+                                </java.beans.PropertyChangeSupport>
+                              </listeners>
+                            </target>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                            <order>8</order>
+                            <oldOrder>8</oldOrder>
+                            <name>openSingletonWindow(p, frame)</name>
+                            <direction>true</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../../../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                    <foregroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>311</x>
+                    <y>162</y>
+                    <width>10</width>
+                    <height>30</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                      <name></name>
+                      <direction>false</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/targetConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>10</order>
+                <oldOrder>10</oldOrder>
+                <name>addJInternalFrame(frame, wi)</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <owner reference="../../../.."/>
+                  <ownerLine reference="../../../../../.."/>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>189</x>
+                    <y>457</y>
+                    <width>10</width>
+                    <height>207</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>11</order>
+                      <oldOrder>11</oldOrder>
+                      <name>add(frame)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                        <ownerLine>
+                          <owner>
+                            <name>MyDesktopPane</name>
+                            <lifeLine reference="../.."/>
+                            <root reference="../../../../../../../../../../../../../.."/>
+                            <constraint>
+                              <x>1174</x>
+                              <y>20</y>
+                              <width>118</width>
+                              <height>-1</height>
+                            </constraint>
+                            <sourceConnections/>
+                            <targetConnections/>
+                            <children>
+                              <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                            </children>
+                            <filterProperty/>
+                            <backgroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                            <foregroundColor reference="../../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                            <showIcon>true</showIcon>
+                            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../../.."/>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </owner>
+                          <constraint>
+                            <x>1233</x>
+                            <y>20</y>
+                            <width>5</width>
+                            <height>750</height>
+                          </constraint>
+                          <sourceConnections/>
+                          <targetConnections/>
+                          <children>
+                            <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                          </children>
+                          <filterProperty/>
+                          <backgroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                          <foregroundColor reference="../../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                          <showIcon>true</showIcon>
+                          <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../../.."/>
+                          <listeners serialization="custom">
+                            <java.beans.PropertyChangeSupport>
+                              <default>
+                                <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                              </default>
+                              <null/>
+                            </java.beans.PropertyChangeSupport>
+                          </listeners>
+                        </ownerLine>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>1228</x>
+                          <y>481</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections>
+                          <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                            <name></name>
+                            <direction>false</direction>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                            <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                            <bendpoints/>
+                            <useBendpoint>false</useBendpoint>
+                            <showIcon>true</showIcon>
+                            <listeners serialization="custom">
+                              <java.beans.PropertyChangeSupport>
+                                <default>
+                                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                                  <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                                </default>
+                                <null/>
+                              </java.beans.PropertyChangeSupport>
+                            </listeners>
+                          </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                        </sourceConnections>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </target>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>12</order>
+                      <oldOrder>12</oldOrder>
+                      <name>updateFrameProperties(frame, wi)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                        <owner reference="../../../.."/>
+                        <ownerLine reference="../../../../../../../../.."/>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>194</x>
+                          <y>555</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections/>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </target>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                      <order>13</order>
+                      <oldOrder>13</oldOrder>
+                      <name>activateJInternalFrame(frame)</name>
+                      <direction>true</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                        <owner reference="../../../.."/>
+                        <ownerLine reference="../../../../../../../../.."/>
+                        <movable>true</movable>
+                        <constraint>
+                          <x>194</x>
+                          <y>624</y>
+                          <width>10</width>
+                          <height>30</height>
+                        </constraint>
+                        <sourceConnections/>
+                        <targetConnections>
+                          <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                        </targetConnections>
+                        <children/>
+                        <filterProperty/>
+                        <backgroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                        <foregroundColor reference="../../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                        <showIcon>true</showIcon>
+                        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../../.."/>
+                        <listeners serialization="custom">
+                          <java.beans.PropertyChangeSupport>
+                            <default>
+                              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                              <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                            </default>
+                            <null/>
+                          </java.beans.PropertyChangeSupport>
+                        </listeners>
+                      </target>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+                  </targetConnections>
+                  <children>
+                    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+                    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+                  </children>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <backgroundColor reference="../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                <foregroundColor reference="../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+                <order>14</order>
+                <oldOrder>14</oldOrder>
+                <name>add(Iwindow  p, anonymousActionListener)</name>
+                <direction>true</direction>
+                <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel">
+                  <ownerLine>
+                    <owner>
+                      <name>WindowStackSupport</name>
+                      <lifeLine reference="../.."/>
+                      <root reference="../../../../../../../../../../.."/>
+                      <constraint>
+                        <x>384</x>
+                        <y>20</y>
+                        <width>120</width>
+                        <height>-1</height>
+                      </constraint>
+                      <sourceConnections/>
+                      <targetConnections/>
+                      <children>
+                        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../.."/>
+                      </children>
+                      <filterProperty/>
+                      <backgroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                      <foregroundColor reference="../../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                      <showIcon>true</showIcon>
+                      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../../.."/>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </owner>
+                    <constraint>
+                      <x>444</x>
+                      <y>20</y>
+                      <width>5</width>
+                      <height>750</height>
+                    </constraint>
+                    <sourceConnections/>
+                    <targetConnections/>
+                    <children>
+                      <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../.."/>
+                    </children>
+                    <filterProperty/>
+                    <backgroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                    <foregroundColor reference="../../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                    <showIcon>true</showIcon>
+                    <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../../.."/>
+                    <listeners serialization="custom">
+                      <java.beans.PropertyChangeSupport>
+                        <default>
+                          <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                          <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+                        </default>
+                        <null/>
+                      </java.beans.PropertyChangeSupport>
+                    </listeners>
+                  </ownerLine>
+                  <movable>true</movable>
+                  <constraint>
+                    <x>439</x>
+                    <y>690</y>
+                    <width>10</width>
+                    <height>30</height>
+                  </constraint>
+                  <sourceConnections>
+                    <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                      <name></name>
+                      <direction>false</direction>
+                      <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../.."/>
+                      <target class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../../../.."/>
+                      <bendpoints/>
+                      <useBendpoint>false</useBendpoint>
+                      <showIcon>true</showIcon>
+                      <listeners serialization="custom">
+                        <java.beans.PropertyChangeSupport>
+                          <default>
+                            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                            <source class="net.java.amateras.uml.sequencediagram.model.ReturnMessageModel" reference="../../../.."/>
+                          </default>
+                          <null/>
+                        </java.beans.PropertyChangeSupport>
+                      </listeners>
+                    </net.java.amateras.uml.sequencediagram.model.ReturnMessageModel>
+                  </sourceConnections>
+                  <targetConnections>
+                    <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../.."/>
+                  </targetConnections>
+                  <children/>
+                  <filterProperty/>
+                  <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+                  <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+                  <showIcon>true</showIcon>
+                  <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../../../../.."/>
+                  <listeners serialization="custom">
+                    <java.beans.PropertyChangeSupport>
+                      <default>
+                        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                        <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                      </default>
+                      <null/>
+                    </java.beans.PropertyChangeSupport>
+                  </listeners>
+                </target>
+                <bendpoints/>
+                <useBendpoint>false</useBendpoint>
+                <showIcon>true</showIcon>
+                <listeners serialization="custom">
+                  <java.beans.PropertyChangeSupport>
+                    <default>
+                      <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                      <source class="net.java.amateras.uml.sequencediagram.model.SyncMessageModel" reference="../../../.."/>
+                    </default>
+                    <null/>
+                  </java.beans.PropertyChangeSupport>
+                </listeners>
+              </net.java.amateras.uml.sequencediagram.model.SyncMessageModel>
+            </sourceConnections>
+            <targetConnections>
+              <net.java.amateras.uml.sequencediagram.model.SyncMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+              <net.java.amateras.uml.sequencediagram.model.ReturnMessageModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel"/>
+            </targetConnections>
+            <children>
+              <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target"/>
+            </children>
+            <filterProperty/>
+            <backgroundColor reference="../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+            <foregroundColor reference="../sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+            <showIcon>true</showIcon>
+            <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../../../.."/>
+            <listeners serialization="custom">
+              <java.beans.PropertyChangeSupport>
+                <default>
+                  <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+                  <source class="net.java.amateras.uml.sequencediagram.model.ActivationModel" reference="../../../.."/>
+                </default>
+                <null/>
+              </java.beans.PropertyChangeSupport>
+            </listeners>
+          </net.java.amateras.uml.sequencediagram.model.ActivationModel>
+        </children>
+        <filterProperty/>
+        <backgroundColor reference="../children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+        <foregroundColor reference="../children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+        <showIcon>true</showIcon>
+        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+        <listeners serialization="custom">
+          <java.beans.PropertyChangeSupport>
+            <default>
+              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+              <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+            </default>
+            <null/>
+          </java.beans.PropertyChangeSupport>
+        </listeners>
+      </lifeLine>
+      <root reference="../../.."/>
+      <constraint>
+        <x>139</x>
+        <y>20</y>
+        <width>100</width>
+        <height>-1</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children>
+        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../lifeLine"/>
+      </children>
+      <filterProperty/>
+      <backgroundColor reference="../lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.sequencediagram.model.InstanceModel>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel>
+      <name>IWindow</name>
+      <lifeLine>
+        <owner reference="../.."/>
+        <constraint>
+          <x>703</x>
+          <y>20</y>
+          <width>5</width>
+          <height>750</height>
+        </constraint>
+        <sourceConnections/>
+        <targetConnections/>
+        <children/>
+        <filterProperty/>
+        <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+        <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+        <showIcon>true</showIcon>
+        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+        <listeners serialization="custom">
+          <java.beans.PropertyChangeSupport>
+            <default>
+              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+              <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+            </default>
+            <null/>
+          </java.beans.PropertyChangeSupport>
+        </listeners>
+      </lifeLine>
+      <root reference="../../.."/>
+      <constraint>
+        <x>653</x>
+        <y>20</y>
+        <width>100</width>
+        <height>-1</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children>
+        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../lifeLine"/>
+      </children>
+      <filterProperty/>
+      <backgroundColor reference="../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.sequencediagram.model.InstanceModel>
+    <net.java.amateras.uml.sequencediagram.model.ActorModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel>
+      <name>WindowInfo</name>
+      <lifeLine>
+        <owner reference="../.."/>
+        <constraint>
+          <x>814</x>
+          <y>20</y>
+          <width>5</width>
+          <height>750</height>
+        </constraint>
+        <sourceConnections/>
+        <targetConnections/>
+        <children/>
+        <filterProperty/>
+        <backgroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+        <foregroundColor reference="../../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+        <showIcon>true</showIcon>
+        <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+        <listeners serialization="custom">
+          <java.beans.PropertyChangeSupport>
+            <default>
+              <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+              <source class="net.java.amateras.uml.sequencediagram.model.LifeLineModel" reference="../../../.."/>
+            </default>
+            <null/>
+          </java.beans.PropertyChangeSupport>
+        </listeners>
+      </lifeLine>
+      <root reference="../../.."/>
+      <constraint>
+        <x>764</x>
+        <y>20</y>
+        <width>100</width>
+        <height>-1</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children>
+        <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../lifeLine"/>
+      </children>
+      <filterProperty/>
+      <backgroundColor reference="../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.sequencediagram.model.InstanceModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.sequencediagram.model.InstanceModel>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+  </instances>
+  <activations>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target"/>
+  </activations>
+  <fragments/>
+  <lifelines>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[3]/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[4]/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+  </lifelines>
+  <sourceConnections/>
+  <targetConnections/>
+  <children>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[3]/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[3]"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.ActorModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[4]/lifeLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel[4]"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/owner"/>
+    <net.java.amateras.uml.model.NoteModel>
+      <content>Reopen SingletonWindow
+
+Current situation</content>
+      <old>Reopen SingletonWindow
+
+Old situation</old>
+      <constraint>
+        <x>1305</x>
+        <y>40</y>
+        <width>127</width>
+        <height>77</height>
+      </constraint>
+      <sourceConnections/>
+      <targetConnections/>
+      <children/>
+      <filterProperty/>
+      <backgroundColor reference="../../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+      <foregroundColor reference="../../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+      <showIcon>true</showIcon>
+      <parent class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../.."/>
+      <listeners serialization="custom">
+        <java.beans.PropertyChangeSupport>
+          <default>
+            <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+            <source class="net.java.amateras.uml.model.NoteModel" reference="../../../.."/>
+          </default>
+          <null/>
+        </java.beans.PropertyChangeSupport>
+      </listeners>
+    </net.java.amateras.uml.model.NoteModel>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.LifeLineModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine"/>
+    <net.java.amateras.uml.sequencediagram.model.InstanceModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/owner"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target/ownerLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel[2]/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[2]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[5]/target/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[3]/target"/>
+    <net.java.amateras.uml.sequencediagram.model.ActivationModel reference="../../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.SyncMessageModel[6]/target"/>
+  </children>
+  <filterProperty/>
+  <backgroundColor reference="../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/backgroundColor"/>
+  <foregroundColor reference="../instances/net.java.amateras.uml.sequencediagram.model.InstanceModel/lifeLine/children/net.java.amateras.uml.sequencediagram.model.ActivationModel/sourceConnections/net.java.amateras.uml.sequencediagram.model.ReturnMessageModel/target/ownerLine/owner/foregroundColor"/>
+  <showIcon>true</showIcon>
+  <listeners serialization="custom">
+    <java.beans.PropertyChangeSupport>
+      <default>
+        <propertyChangeSupportSerializedDataVersion>2</propertyChangeSupportSerializedDataVersion>
+        <source class="net.java.amateras.uml.sequencediagram.model.InteractionModel" reference="../../../.."/>
+      </default>
+      <null/>
+    </java.beans.PropertyChangeSupport>
+  </listeners>
+</net.java.amateras.uml.sequencediagram.model.InteractionModel>
\ No newline at end of file
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/pom.xml	(revision 46118)
@@ -0,0 +1,78 @@
+<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.coreplugin.app.mainplugin</artifactId>   <!-- FIXME: change to "XXX.app.mainplugin" -->
+  <packaging>jar</packaging>
+  <description> This is the extension that provide the basic skin to gvsig</description>
+  <name>${project.artifactId}</name>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.coreplugin.app</artifactId>
+      <version>2.0.344</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.ui</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.i18n</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>com.jgoodies</groupId>
+      <artifactId>forms</artifactId>
+      <scope>compile</scope>
+    </dependency>
+     --> 
+    <dependency>
+    	<groupId>com.jgoodies</groupId>
+    	<artifactId>jgoodies-forms</artifactId>
+	    <scope>compile</scope>
+    </dependency>      
+  </dependencies>
+
+  <build>
+    <plugins>
+
+    </plugins>
+  </build>
+      <properties>
+          <gvsig.package.info.name>Default gvSIG's skin</gvsig.package.info.name>
+          <gvsig.package.info.codealias>org.gvsig.coreplugin</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app/org.gvsig.coreplugin.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.coreplugin.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/pom.xml	(revision 46118)
@@ -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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.projection.app</artifactId>
+  <name>${project.artifactId}</name>
+  <packaging>pom</packaging>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.desktop.plugin</artifactId>
+      <version>2.0.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.projection.app.cresques</module>
+    <module>org.gvsig.projection.app.proj4j</module>
+  </modules>
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.
+
+-->
+<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>geojava:geojava</include>
+        <!--
+        <include>org.geotools:gt2-api</include>
+        <include>org.geotools:gt2-coverage</include>
+        -->
+        <include>org.geotools:gt2-legacy</include>
+        <include>org.geotools:gt2-main</include>
+        <include>org.geotools:gt2-referencing</include>
+        <!--
+        <include>org.geotools:gt2-render</include>
+        -->
+        <include>org.gvsig:org.gvsig.projection.api</include>
+        <include>org.gvsig:org.gvsig.projection.cresques.impl</include>
+        <include>org.gvsig:org.gvsig.projection.cresques.ui</include>
+        <include>javax.units:jsr108</include>
+        <include>org.opengis:geoapi</include>
+        <!--
+        <include>org.opengis:geoapi-legacy</include>
+        -->
+
+		<!--  Lo de javax.media es una dependencia de geotools -->
+        <include>javax.media:jai_core</include>
+        <include>javax.media:jai_codec</include>
+
+
+		<include>org.gvsig:org.gvsig.proj.lib.api</include>
+		<include>org.gvsig:org.gvsig.proj.swing.api</include>
+		<include>org.gvsig:org.gvsig.proj.lib.proj4j</include>
+		<include>org.osgeo:proj4j</include>
+		<include>org.gvsig:org.gvsig.proj.swing.impl</include>
+        
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/package.html
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/package.html	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/package.html	(revision 46118)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2012 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-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.proj package documentation</title>
+</head>
+<body>
+
+	<p>Proj gvSIG extension</p>
+	
+	<p>
+	Shows Proj into gvSIG.
+	</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectUIFactory.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectUIFactory.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectUIFactory.java	(revision 46118)
@@ -0,0 +1,47 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2012 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.proj.app.mainplugin;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.gui.panels.crs.ICrsUIFactory;
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+
+
+/**
+ * {@link ICrsUIFactory} implementation which returns
+ * {@link CoordinateReferenceSystemSelectionDialog} instances.
+ * 
+ * @author gvSIG Team
+ */
+public class CoordinateReferenceSystemSelectUIFactory implements ICrsUIFactory {
+
+    public ISelectCrsPanel getSelectCrsPanel(IProjection projection,
+        boolean isTransPanelActive) {
+        CoordinateReferenceSystemSelectionDialog dialog =
+            new CoordinateReferenceSystemSelectionDialog();
+        dialog.setProjection(projection);
+        return dialog;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectUIFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectionDialog.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectionDialog.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectionDialog.java	(revision 46118)
@@ -0,0 +1,140 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2012 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.proj.app.mainplugin;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JComponent;
+
+import javax.swing.JPanel;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
+import org.gvsig.proj.CoordinateReferenceSystem;
+import org.gvsig.proj.cts.DefaultIProjection;
+import org.gvsig.proj.swing.CoordinateReferenceSystemSelectorComponent;
+import org.gvsig.proj.swing.CoordinateReferenceSystemSwingLocator;
+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.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ * ISelectCrsPanel implementation based on the org.gvsig.proj library.
+ * 
+ * @author gvSIG Team
+ */
+public class CoordinateReferenceSystemSelectionDialog extends JPanel implements
+    ISelectCrsPanel {
+
+    private static final long serialVersionUID = 810773451033764544L;
+    private boolean okPressed = false;
+    private IProjection lastProjection = null;
+    private CoordinateReferenceSystemSelectorComponent component;
+
+    /**
+     * Constructor.
+     */
+    public CoordinateReferenceSystemSelectionDialog() {
+        super();
+        this.setLayout(new BorderLayout());
+
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        final Dialog dialogPanel = windowManager.createDialog(
+                getContentPanel(),
+                i18nManager.getTranslation("selecciona_sistema_de_referencia"),
+                i18nManager.getTranslation("reference_system"), 
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+                
+        add(dialogPanel.asJComponent(), BorderLayout.CENTER);
+        dialogPanel.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                switch( dialogPanel.getAction()) {
+                    case WindowManager_v2.BUTTON_OK:
+                        okPressed = true;
+                        break;
+                    case WindowManager_v2.BUTTON_CANCEL:
+                        setProjection(lastProjection);
+                        okPressed = false;
+                        break;
+                }
+                setVisible(false);
+            }
+        });
+    }
+
+    @Override
+    public boolean isOkPressed() {
+        return okPressed;
+    }
+
+    /**
+     * @return
+     */
+    @Override
+    public IProjection getProjection() {
+        CoordinateReferenceSystem crs =
+            component.getSelectedCoordinateReferenceSystem();
+        if (crs == null) {
+            return lastProjection;
+        }
+        return new DefaultIProjection(crs);
+    }
+
+    protected JComponent getContentPanel() {
+        if (component == null) {
+
+            component =
+                CoordinateReferenceSystemSwingLocator.getSwingManager()
+                    .createCoordinateReferenceSystemSelectionComponent();
+        }
+
+        return component.asJComponent();
+    }
+
+    /**
+     * @param proj
+     */
+    @Override
+    public void setProjection(IProjection proj) {
+        CoordinateReferenceSystem crs = null;
+        lastProjection = proj;
+        if( proj != null ) {
+            crs = ((DefaultIProjection) proj).getCoordinateReferenceSystem();
+        }
+        component.setCoordinateReferenceSystem(crs);
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }    
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemSelectionDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemExtension.java	(revision 46118)
@@ -0,0 +1,58 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2012 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.proj.app.mainplugin;
+
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.gui.panels.CRSSelectPanelFactory;
+
+/**
+ * Extension to register the org.gvsid.proj facade implementation
+ * of the org.gvsig.projection library.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class CoordinateReferenceSystemExtension extends Extension {
+
+    @Override
+    public void initialize() {
+    	CRSSelectPanelFactory.registerUIFactory(CoordinateReferenceSystemSelectUIFactory.class);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        // Nothing to do
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/java/org/gvsig/proj/app/mainplugin/CoordinateReferenceSystemExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2012 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-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.projection.app.mainplugin"/>
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.proj.app.mainplugin.CoordinateReferenceSystemExtension"
+			description=""
+			active="true"
+			priority="1">
+		</extension>		
+	</extensions>
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/pom.xml	(revision 46118)
@@ -0,0 +1,157 @@
+<?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.app.proj4j</artifactId>
+  <packaging>jar</packaging>
+  <name>CRS: basic management (Proj4J based, java)</name>
+  <description>Basic CRS management implementation based on the Proj4J java library. 
+Provides basic management of CRS with features such as:
+- Allows setting the coordinate reference system (CRS), by default, in views and layers.
+- Allows the selection of CRS based on authority (EPSG, ESRI, WORLD, NAD83 and NAD27) and code.
+- Shows CRS definition based on the proj4 string.
+- Supports conversion of coordinates (no datum changing).
+- Supports transformation of coordinates (datum changing).
+</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.app</artifactId>
+      <version>2.0.344</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>
+  
+  
+  <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.proj.lib.proj4j</artifactId>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.proj.lib.api</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.projection.cresques.impl</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.proj.swing.api</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.proj.swing.impl</artifactId>
+			<scope>runtime</scope>
+		</dependency>      
+      
+      <dependency>
+        <groupId>org.opengis</groupId>
+        <artifactId>geoapi</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_core</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_codec</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>geojava</groupId>
+        <artifactId>geojava</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-legacy</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-main</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-referencing</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>commons-dbcp</groupId>
+        <artifactId>commons-dbcp</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+     <dependency>
+         <groupId>javax.units</groupId>
+         <artifactId>jsr108</artifactId>
+         <scope>runtime</scope>
+       </dependency>
+
+      <dependency>
+        <groupId>org.osgeo</groupId>
+        <artifactId>proj4j</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.codealias>org.gvsig.projection.app.mainplugin</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+	  <gvsig.package.info.dependencies>conflict: org.gvsig.projection.app.cresques -ge 1, conflict: org.gvsig.projection.app.jcrs -ge 1</gvsig.package.info.dependencies>
+  </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.proj4j
___________________________________________________________________
Added: svn:ignore
   + .project

.settings

.classpath

target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/pom.xml	(revision 46118)
@@ -0,0 +1,130 @@
+<?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.app.cresques</artifactId>
+  <packaging>jar</packaging>
+  <name>CRS: basic management (Cresques based, java)</name>
+  <description>Basic CRS management implementation based on the Cresques java library. 
+Provides basic management of CRS for a very reduced set of CRS, has features such as:
+- Allows setting the coordinate reference system (CRS), by default, in views and layers.
+- Supports conversion of coordinates (no datum changing).
+- Supports transformation of coordinates (datum changing).
+</description>
+  <parent>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.app</artifactId>
+      <version>2.0.344</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>
+  
+  
+  <dependencies>
+     <dependency>
+         <groupId>javax.units</groupId>
+         <artifactId>jsr108</artifactId>
+         <scope>runtime</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.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.projection.cresques.ui</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.projection.api</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.opengis</groupId>
+        <artifactId>geoapi</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_core</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.media</groupId>
+        <artifactId>jai_codec</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>geojava</groupId>
+        <artifactId>geojava</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-legacy</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-main</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt2-referencing</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>commons-dbcp</groupId>
+        <artifactId>commons-dbcp</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+          <groupId>org.gvsig</groupId>
+          <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+          <scope>runtime</scope>
+      </dependency>
+
+  </dependencies>
+
+  <properties>
+      <gvsig.package.info.codealias>org.gvsig.projection.app.mainplugin</gvsig.package.info.codealias>
+	  <gvsig.package.info.official>true</gvsig.package.info.official>
+	  <gvsig.package.info.dependencies>conflict: org.gvsig.projection.app.proj4j -ge 1, conflict: org.gvsig.projection.app.jcrs -ge 1</gvsig.package.info.dependencies>
+	  <gvsig.install.plugin>false</gvsig.install.plugin>
+  </properties>
+
+</project>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:18 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/resources-plugin/config.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/resources-plugin/config.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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>
+  <alternativeNames name="org.gvsig.projection.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.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.
+
+-->
+<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>geojava:geojava</include>
+        <!--
+        <include>org.geotools:gt2-api</include>
+        <include>org.geotools:gt2-coverage</include>
+        -->
+        <include>org.geotools:gt2-legacy</include>
+        <include>org.geotools:gt2-main</include>
+        <include>org.geotools:gt2-referencing</include>
+        <!--
+        <include>org.geotools:gt2-render</include>
+        -->
+        <include>org.gvsig:org.gvsig.projection.api</include>
+        <include>org.gvsig:org.gvsig.projection.cresques.impl</include>
+        <include>org.gvsig:org.gvsig.projection.cresques.ui</include>
+
+        <include>org.opengis:geoapi</include>
+        <!--
+        <include>org.opengis:geoapi-legacy</include>
+        -->
+
+		<!--  Lo de javax.media es una dependencia de geotools -->
+        <include>javax.media:jai_core</include>
+        <include>javax.media:jai_codec</include>
+        
+        <include>javax.units:jsr108</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+
+</assembly>
+

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app/org.gvsig.projection.app.cresques
___________________________________________________________________
Added: svn:ignore
   + .settings

.classpath

.project

target



Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.projection.app
___________________________________________________________________
Added: svn:ignore
   + .settings

.project


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:16 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/I18nManagerImpl.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ExportLocaleException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleFileNameRequiredException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/LocaleLanguageRequiredException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/TranslationsConsolider.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/InstallLocalesException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/UninstallLocaleException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/impl/ReadCSVLocalesFileException.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/I18nManager.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.getCurrentLocale(); //.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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/preferences/I18nPreferencePage.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/I18nExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/java/org/gvsig/i18n/extension/ConsolideTranslationsExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/about/disid.html	(revision 46118)
@@ -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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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="000908500500" 
+                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="000908500400" 
+                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.344/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.344/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.344/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.344/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.344/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

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/org.gvsig.i18n.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**



bin


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.i18n.app.mainplugin</module>
+  </modules>
+
+</project>

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.i18n.app
___________________________________________________________________
Added: svn:ignore
   + .project
.classpath
.settings
.settings/**
target
target/**




Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/pom.xml	(revision 46118)
@@ -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.344</version>
+  </parent>
+  
+  <modules>
+    <module>org.gvsig.snapping.app.mainplugin</module>
+  </modules>
+</project>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-off.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-off.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-on.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-on.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/GridPage.java	(revision 46118)
@@ -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.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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/gui/preferencespage/SnapConfigPage.java	(revision 46118)
@@ -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.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 java.util.prefs.Preferences;
+
+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;
+
+        Preferences prefs = Preferences.userRoot().node("snappers");
+        prefs.putBoolean("apply-snappers", applySnappers);
+
+        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() {
+        try {
+            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.344/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.344/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.344/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 46118)
@@ -0,0 +1,28 @@
+
+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 String getName() {
+      return "Snapping";
+    }
+    
+    public boolean isVisible(Object obj) {
+        // Always if enabled this page
+        return true;
+    }
+
+    public PropertiesPage create(Object container, Object data) {
+        return new ViewSnappingPropertiesPage((ViewDocument)data);
+    }
+
+    public String getGroupID() {
+        return ViewDocument.VIEW_PROPERTIES_PAGE_GROUP;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.xml	(revision 46118)
@@ -0,0 +1,796 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/jovivas/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">5</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.JTable</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTable</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">tableSnapping</at>
+            <at name="width">841</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="height">32</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">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">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="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="name">lblMaxSnappingLayers</at>
+            <at name="width">843</at>
+            <at name="text">_Por_favor,_marca_las_capas_a_usar_para_hacer_Snapping.</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">2</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">embedded.1128250586</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:43PX:NONE,FILL:4DLU: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">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.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="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="name">lblTolerance</at>
+                 <at name="width">59</at>
+                 <at name="text">_tolerance</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="name">lblPix</at>
+                 <at name="width">39</at>
+                 <at name="text">_pixels</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="name">textFieldTolSnapping</at>
+                 <at name="width">39</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="5"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">7</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">embedded.1116774427</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                         <at name="title"></at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">_select_all</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-on.png</at>
+                   <at name="description">common-check-on.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnCheckAllSnapping</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                         <at name="title"></at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">_deselect_all</at>
+                 <at name="icon">
+                  <object classname="com.jeta.forms.store.properties.IconProperty">
+                   <at name="embedded">false</at>
+                   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-off.png</at>
+                   <at name="description">common-check-off.png</at>
+                   <at name="width">16</at>
+                   <at name="height">16</at>
+                  </object>
+                 </at>
+                 <at name="name">btnUncheckAllSnapping</at>
+                 <at name="width">20</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="8">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoView.java	(revision 46118)
@@ -0,0 +1,200 @@
+package org.gvsig.app.project.documents.view.gui;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class ViewSnappingInfoView extends JPanel
+{
+   JTable tableSnapping = new JTable();
+   JLabel lblMaxSnappingLayers = new JLabel();
+   JLabel lblTolerance = new JLabel();
+   JLabel lblPix = new JLabel();
+   JTextField textFieldTolSnapping = new JTextField();
+   JButton btnCheckAllSnapping = new JButton();
+   JButton btnUncheckAllSnapping = new JButton();
+
+   /**
+    * Default constructor
+    */
+   public ViewSnappingInfoView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tableSnapping.setName("tableSnapping");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(tableSnapping);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,5));
+
+      lblMaxSnappingLayers.setName("lblMaxSnappingLayers");
+      lblMaxSnappingLayers.setText("_Por_favor,_marca_las_capas_a_usar_para_hacer_Snapping.");
+      jpanel1.add(lblMaxSnappingLayers,cc.xy(2,4));
+
+      jpanel1.add(createPanel1(),cc.xy(2,2));
+      jpanel1.add(createPanel2(),cc.xy(2,7));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:43PX:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblTolerance.setName("lblTolerance");
+      lblTolerance.setText("_tolerance");
+      jpanel1.add(lblTolerance,cc.xy(1,1));
+
+      lblPix.setName("lblPix");
+      lblPix.setText("_pixels");
+      jpanel1.add(lblPix,cc.xy(5,1));
+
+      textFieldTolSnapping.setName("textFieldTolSnapping");
+      jpanel1.add(textFieldTolSnapping,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnCheckAllSnapping.setActionCommand("_select_all");
+      btnCheckAllSnapping.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-on.png"));
+      btnCheckAllSnapping.setName("btnCheckAllSnapping");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnCheckAllSnapping.setBorder(emptyborder1);
+      jpanel1.add(btnCheckAllSnapping,cc.xy(1,1));
+
+      btnUncheckAllSnapping.setActionCommand("_deselect_all");
+      btnUncheckAllSnapping.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources/img/common-check-off.png"));
+      btnUncheckAllSnapping.setName("btnUncheckAllSnapping");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnUncheckAllSnapping.setBorder(emptyborder2);
+      jpanel1.add(btnUncheckAllSnapping,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.app.project.documents.view.gui;
+
+import java.awt.BorderLayout;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.propertypage.PropertiesPage;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+
+/**
+ *
+ * @author jovivas
+ */
+public class ViewSnappingPropertiesPage extends JPanel implements PropertiesPage {
+
+    private final ViewDocument view;
+    private ViewSnappingInfoImpl panel;
+    public ViewSnappingPropertiesPage(ViewDocument view){
+        this.view = view;
+        initComponents();
+        
+    }
+
+    @Override
+    public void setData(Object o) {
+        
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        return i18n.getTranslation("Snapping");
+    }
+
+    @Override
+    public int getPriority() {
+        return 900;
+    }
+
+    @Override
+    public boolean whenAccept() {
+        this.panel.applyChanges();
+        return true;
+    }
+
+    @Override
+    public boolean whenApply() {
+        this.panel.applyChanges();
+        return true;
+    }
+
+    @Override
+    public boolean whenCancel() {
+        return true;
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    private void initComponents() {
+        this.setLayout(new BorderLayout());
+        this.panel = new ViewSnappingInfoImpl(this.view.getMapContext());
+        this.add(this.panel, BorderLayout.CENTER);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoImpl.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoImpl.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/gui/ViewSnappingInfoImpl.java	(revision 46118)
@@ -0,0 +1,322 @@
+/*
+ * 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.view.gui;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.ImageIcon;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.AbstractTableModel;
+import org.apache.commons.io.FilenameUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.gui.ViewSnappingInfoImpl.SnappingTableModel.TableRow;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.SpatialCache;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControlLocator;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.icontheme.IconTheme;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jovivas
+ */
+public class ViewSnappingInfoImpl extends ViewSnappingInfoView {
+
+    public static class SnappingTableModel extends AbstractTableModel {
+
+        public class TableRow {
+
+            private final FLyrVect layer;
+            private boolean selected;
+            private int cacheFeatures;
+
+            public TableRow(FLyrVect layer, boolean selected, int cacheFeatures) {
+                this.layer = layer;
+                this.selected = selected;
+                this.cacheFeatures = cacheFeatures;
+            }
+
+            public int getCacheFeatures() {
+                return cacheFeatures;
+            }
+
+            public FLyrVect getLayer() {
+                return layer;
+            }
+
+            public boolean isSelected() {
+                return selected;
+            }
+
+            private void setSelected(boolean aValue) {
+                SpatialCache spatialCache = this.layer.getSpatialCache();
+                spatialCache.setEnabled(aValue);
+                this.selected = aValue;
+
+            }
+
+            private void setCacheFeatures(int aValue) {
+                SpatialCache spatialCache = this.layer.getSpatialCache();
+                spatialCache.setMaxFeatures(aValue);
+                this.cacheFeatures = aValue;
+
+            }
+
+        }
+        private String[] columnNames;
+
+        private Class<?>[] columnClases = new Class<?>[]{
+            Boolean.class,
+            String.class,
+            Integer.class
+        };
+
+        private List<TableRow> rows;
+
+        public SnappingTableModel() {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            this.rows = new ArrayList<>();
+            columnNames = new String[]{
+                i18n.getTranslation("_selected"),
+                i18n.getTranslation("_layer_name"),
+                i18n.getTranslation("_max_number_of_memory_entities")
+            };
+
+        }
+
+        @Override
+        public int getRowCount() {
+            return this.rows.size();
+
+        }
+
+        @Override
+        public int getColumnCount() {
+            return 3;
+        }
+
+        @Override
+        public Class<?> getColumnClass(int columnIndex) {
+            return this.columnClases[columnIndex];
+        }
+
+        @Override
+        public String getColumnName(int column) {
+            return this.columnNames[column];
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            TableRow row = this.rows.get(rowIndex);
+            switch (columnIndex) {
+                case 0:
+                    return row.isSelected();
+                case 1:
+                    return row.getLayer().getName();
+                case 2:
+                    return row.getCacheFeatures();
+                default:
+                    return "";
+
+            }
+        }
+
+        @Override
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+            TableRow row = this.rows.get(rowIndex);
+            switch (columnIndex) {
+                case 0:
+                    row.setSelected((boolean) aValue);
+                    break;
+                case 2:
+                    row.setCacheFeatures((int) aValue);
+                    break;
+            }
+            fireTableRowsUpdated(rowIndex, rowIndex);
+        }
+
+        @Override
+        public boolean isCellEditable(int rowIndex, int columnIndex) {
+            switch (columnIndex) {
+                case 0:
+                    return false;
+                case 1:
+                    return false;
+                case 2:
+                    return true;
+                default:
+                    return false;
+
+            }
+        }
+
+        public TableRow getRow(int rowIndex) {
+            TableRow row = this.rows.get(rowIndex);
+            return row;
+        }
+
+        private void addLayer(FLayer layer) {
+            if (layer instanceof FLyrVect) {
+                FLyrVect layerVect = (FLyrVect) layer;
+                SpatialCache spatialCache = layerVect.getSpatialCache();
+                TableRow row = new TableRow(
+                        layerVect,
+                        spatialCache.isEnabled(),
+                        spatialCache.getMaxFeatures()
+                );
+                rows.add(row);
+            }
+        }
+
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ViewSnappingInfoImpl.class);
+    private final MapContext mapContext;
+
+    public ViewSnappingInfoImpl(MapContext mapContext) {
+        this.mapContext = mapContext;
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        toolsSwingManager.translate(this.lblTolerance);
+        toolsSwingManager.translate(this.lblPix);
+        toolsSwingManager.translate(this.lblMaxSnappingLayers);
+        toolsSwingManager.translate(this.btnCheckAllSnapping);
+        toolsSwingManager.translate(this.btnUncheckAllSnapping);
+
+        SnappingTableModel model = new SnappingTableModel();
+        Iterator<FLayer> layers = mapContext.deepiterator();
+        while (layers.hasNext()) {
+            model.addLayer(layers.next());
+        }
+
+        this.tableSnapping.setModel(model);
+
+        int tolerance = MapControlLocator.getMapControlManager().getTolerance();
+        this.textFieldTolSnapping.setText(String.valueOf(tolerance));
+
+        this.btnCheckAllSnapping.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doCheckAll();
+            }
+        });
+        this.btnUncheckAllSnapping.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doUncheckAll();
+            }
+        });
+
+        this.tableSnapping.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+        
+        this.tableSnapping.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getModifiers()==MouseEvent.BUTTON1_MASK){
+                    SnappingTableModel model = (SnappingTableModel) tableSnapping.getModel();
+                    int row = tableSnapping.rowAtPoint(e.getPoint());
+                    model.setValueAt((!(boolean) model.getValueAt(row, 0)), row, 0);
+                    doUpdateSelectionFromChecks();
+                }else{
+                   doUpdateChecksFromSelection(); 
+                }
+            }    
+        });
+    
+    this.setPreferredSize(new Dimension(450, 400));
+    
+    }
+
+    private void doUpdateChecksFromSelection() {
+        SnappingTableModel model = (SnappingTableModel) this.tableSnapping.getModel();
+        for (int row = 0; row < model.getRowCount(); row++) {
+            model.setValueAt(this.tableSnapping.isCellSelected(row, 0), row, 0);
+        }
+    }
+    
+    private void doUpdateSelectionFromChecks() {
+        SnappingTableModel model = (SnappingTableModel) this.tableSnapping.getModel();
+        tableSnapping.getSelectionModel().clearSelection();
+        for (int row = 0; row < model.getRowCount(); row++) {
+            if ((boolean) model.getValueAt(row, 0)){
+                tableSnapping.getSelectionModel().addSelectionInterval(row, row);
+            }  
+        }
+    }
+
+    private void doUncheckAll() {
+        SnappingTableModel model = (SnappingTableModel) this.tableSnapping.getModel();
+        for (int row = 0; row < model.getRowCount(); row++) {
+            model.setValueAt(false, row, 0);
+        }
+        doUpdateSelectionFromChecks();
+    }
+
+    private void doCheckAll() {
+        SnappingTableModel model = (SnappingTableModel) this.tableSnapping.getModel();
+        for (int row = 0; row < model.getRowCount(); row++) {
+            model.setValueAt(true, row, 0);
+        }
+        doUpdateSelectionFromChecks();
+    }
+
+    @Override
+    public ImageIcon loadImage(String imageName) {
+        String name = FilenameUtils.getBaseName(imageName);
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
+        if (theme.exists(name)) {
+            return theme.get(name);
+        }
+        URL url = this.getClass().getResource(name + ".png");
+        if (url == null) {
+            return null;
+        }
+        return new ImageIcon(url);
+    }
+
+    public void applyChanges() {
+        SnappingTableModel model = (SnappingTableModel) this.tableSnapping.getModel();
+        ArrayList<FLyrVect> layersToSnap = new ArrayList<>();
+        for (int i = 0; i < model.getRowCount(); i++) {
+            TableRow row = model.getRow(i);
+            row.getLayer().setMaxFeaturesInEditionCache(row.getCacheFeatures());
+            if (row.isSelected()) {
+                row.getLayer().getSpatialCache().setEnabled(true);
+                layersToSnap.add(row.getLayer());
+            } else {
+                row.getLayer().getSpatialCache().setEnabled(false);
+            }
+        }
+        this.mapContext.setLayersToSnap(layersToSnap);
+
+        try {
+            MapControlLocator.getMapControlManager().setTolerance(Integer.parseInt(this.textFieldTolSnapping.getText()));
+
+        } catch (Exception e) {
+            LOGGER.error(PluginServices.getText(this, "tolerancia_incorrecta"), e);
+
+        }
+        this.mapContext.invalidate();
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.
+ */
+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.GeometryLocator;
+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;
+        Iterator iter = geomlist.iterator();
+        while (iter.hasNext()) {
+            item = (Geometry) iter.next();
+            Envelope interGeom = GeometryLocator.getGeometryManager().createEnvelope(
+                    point_tol_west,
+                    point_tol_south,
+                    point_tol_east,
+                    point_tol_north,
+                    Geometry.SUBTYPES.GEOM2D);
+            
+            if (item.intersects(interGeom.getGeometry())) {
+                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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/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 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnappingExtension.java	(revision 46118)
@@ -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 java.util.prefs.Preferences;
+
+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();
+
+            Preferences prefs = Preferences.userRoot().node("snappers");
+            prefs.putBoolean("apply-snappers", mc.isRefentEnabled());
+
+            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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/AbstractTogglePropertyExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisplayGridExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/SnappingExtension.java	(revision 46118)
@@ -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.extension;
+
+import java.util.prefs.Preferences;
+
+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.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;
+
+
+/**
+ * Extension for config the snapping
+ *
+ * @author fdiaz
+ *
+ */
+public class SnappingExtension extends Extension implements IPreferenceExtension {
+
+    private IPreference[] preferencePages = null;
+
+    public void initialize() {
+        Snapping.register();
+
+        registerIcons();
+
+        MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
+        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");
+
+        Preferences prefs = Preferences.userRoot().node("snappers");
+        prefs.putBoolean("apply-snappers", 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() {
+
+    }
+
+    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;
+    }
+
+    @Override
+    public IPreference[] getPreferencesPages() {
+        if( this.preferencePages == null ) {
+            this.preferencePages = new IPreference[] {
+                new SnapConfigPage(),
+                new GridPage()
+            };
+        }
+        return this.preferencePages;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/EnableSnapToGridExtension.java	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/java/org/gvsig/app/extension/DisableSnappingExtension.java	(revision 46118)
@@ -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 java.util.prefs.Preferences;
+
+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();
+
+            Preferences prefs = Preferences.userRoot().node("snappers");
+            prefs.putBoolean("apply-snappers", mc.isRefentEnabled());
+
+            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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -0,0 +1,128 @@
+<?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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,28 @@
+#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
+_Por_favor,_marca_las_capas_a_usar_para_hacer_Snapping.=Por favor, marca las capas a usar para hacer Snapping.
+_snapping=Snapping
+_tolerance=Tolerancia
+_pixels=pixeles
+_Please,_check_the_snapping_layers=Por favor, marca las capas a usar para hacer Snapping.
+_select_all=Seleccionar todas
+_deselect_all=Deseleccionar todas
+_selected=Seleccionada
+_layer_name=Nombre capa
+_max_number_of_memory_entities=Max. n\u00famero de entidades en memoria
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -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

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/src/main/resources-plugin
___________________________________________________________________
Added: svn:ignore
   + .directory


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/pom.xml	(revision 46118)
@@ -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.344</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.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:17 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.snapping.app/org.gvsig.snapping.app.mainplugin
___________________________________________________________________
Added: svn:ignore
   + target


Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/buildNumber.properties	(revision 46118)
@@ -0,0 +1,2 @@
+#Thu Dec 09 21:48:16 CET 2021
+buildNumber=2895

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/config.xml	(revision 46118)
@@ -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.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>		
+    
+        <extension class-name="org.gvsig.geodb.databaseworkspace.WorkspaceExtension"
+                   description=""
+                   active="true"
+                   priority="1000">
+
+            <action
+                name="database-workspace-manage"
+                label="_Manage_database_workspace"
+                position="908500160"
+                tooltip="_Manage_database_workspace"
+                action-command="database-workspace-manage"
+                icon="database-workspace-manage"
+                accelerator=""
+            />
+
+            <action
+                name="database-workspace-connect"
+                label="_Connect_to_database_workspace"
+                position="108000000"
+                tooltip="_Connect_to_database_workspace"
+                action-command="database-workspace-connect"
+                icon="database-workspace-connect"
+                accelerator=""
+            />
+
+            <menu
+                name="database-workspace-connect"
+                text="File/_Connect_to_database_workspace"
+            />
+            <menu text="File/sep0_database_workspace"
+                  position="108000001"
+                  is_separator="true"
+            />
+
+            <menu
+                name="database-workspace-manage"
+                text="tools/Development/Manage database workspace"
+            />
+            <menu text="tools/Development/sep1_database_workspace"
+                  position="908500161"
+                  is_separator="true"/>
+
+        </extension>
+
+    </extensions>
+    
+</plugin-config>

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/action/database-workspace-connect.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/action/database-workspace-connect.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-crstoview.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-crstoview.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/preferences/layers-visibility-remember-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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/preferences/layers-visibility-remember-preferences.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/about/prodevelop.html	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/plugin-persistence.def	(revision 46118)
@@ -0,0 +1,20 @@
+<?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>
+        <field name="layersScaleVisibility" type="Map" classOfItems="org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibility" mandatory="false">
+          <description>Layers scale visibility</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>  
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text.properties	(revision 46118)
@@ -0,0 +1,63 @@
+#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
+_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
+1_25000_description=Esta escala es adecuada para presentar, por ejemplo, informaci\u00f3n de carreteras.
+1_5000_description=Esta escala es adecuada para presentar informaci\u00f3n de una ciudad, como callejeros, u otra informaci\u00f3n relacionada con ella.
+1_1000_description=Esta escala es adecuada para presentar informaci\u00f3n m\u00e1s precisa de una ciudad, como se\u00f1alizaci\u00f3n u otra informaci\u00f3n relacionada con ella.
+dont_show_layer_when_scale=No mostrar la capa cuando la escala
+is_below_1_colon=est\u00e9 por debajo de 1:
+is_above_1_colon=est\u00e9 por encima de 1:
+maximum_scale=Escala m\u00e1xima
+minimum_scale=Escala m\u00ednima
+remember_this_answer=Recordar esta respuesta para futuras ocasiones en las que se cargue esta capa.
+visibility_scale_selector_dialog_description=<html>Esta capa tiene m\u00e1s de {0} registros y es muy probable que precise especificar la escala de visualizaci\u00f3n para una representaci\u00f3n fluida.<br/>Por favor, seleccione la escala.</html>
+_Remembered_layers_visibility=Visibilidad de capas recordada
+_Visibility_scales_remembered_for_the_following_layers=Escalas de visibilidad recordadas para las siguientes capas
+_Read_only=Solo lectura
+_View=Vista
+_Geometry_field_required=Es necesario especificar el campo para la geometr\u00eda
+_Geometry_field_recommended=Es recomendable especificar el campo para la geometr\u00eda
+_GeometryType_required=Es necesario especificar el tipo de la geometr\u00eda
+_GeometryType_recommended=Es recomendable especificar el tipo de la geometr\u00eda
+_GeometrySubType_required=Es necesario especificar el subtipo de la geometr\u00eda
+_GeometrySubType_recommended=Es recomendable especificar el subtipo de la geometr\u00eda
+_Projection_required=Es necesario especificar la proyecci\u00f3n
+_Projection_recommended=Es recomendable especificar la proyecci\u00f3n
+_PrimaryKey_field_required=Es necesario especificar la clave primaria
+_PrimaryKey_field_recommended=Es recomendable especificar la clave primaria
+_Do_not_assign_a_display_scale=No asignarle una escala de visualizaci\u00f3n

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties	(revision 46118)
@@ -0,0 +1,63 @@
+#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
+_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
+1_25000_description=This scale is suitable for displaying, for example, road information.
+1_5000_description=This scale is suitable for presenting information about a city, such as street maps, or other information related to it.
+1_1000_description=This scale is suitable for presenting more accurate information about a city, such as signage or other information related to it.
+dont_show_layer_when_scale_colon=Don't show layer when:
+is_below_1_colon=is below 1:
+is_above_1_colon=is above 1:
+maximum_scale=Maximum scale
+minimum_scale=Minimum scale
+remember_this_answer=Remember this answer for future occasions when this layer will load.
+visibility_scale_selector_dialog_description=<html>This layer has more than {0} records and it is very likely that you will need to specify the display scale for a fluid representation.<br/>Please select the scale.</html>
+_Remembered_layers_visibility=Remembered layers visibility
+_Visibility_scales_remembered_for_the_following_layers=Visibility scales remembered for the following layers
+_Read_only=Read-only
+_View=View
+_Geometry_field_required=Geometry field required
+_Geometry_field_recommended=Geometry field recommended
+_GeometryType_required=GeometryType required
+_GeometryType_recommended=GeometryType recommended
+_GeometrySubType_required=GeometrySubType required
+_GeometrySubType_recommended=GeometrySubType recommended
+_Projection_required=Projection required
+_Projection_recommended=Projection recommended
+_PrimaryKey_field_required=PrimaryKey field required
+_PrimaryKey_field_recommended=PrimaryKey field recommended
+_Do_not_assign_a_display_scale=Do not assign a display scale
\ No newline at end of file

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/ExtDB_Spatial.java	(revision 46118)
@@ -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.geodb;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.gvsig.andami.IconThemeHelper;
+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.ApplicationLocator;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.fmap.dal.DataServerExplorerPool;
+import org.gvsig.geodb.vectorialdb.visibility.preferences.LayersVisibilityReminderPage;
+import org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibility;
+import org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibilityUtils;
+
+/**
+ * This extension adds the export-to-oracle button.
+ *
+ * @author jldominguez
+ *
+ */
+public class ExtDB_Spatial extends Extension implements IPreferenceExtension{
+
+    @Override
+    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);
+        IconThemeHelper.registerIcon("geodb", "geodb-crstoview", this);
+        
+        LayerScaleVisibility.selfRegister();
+        
+        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"));
+        }
+        
+        LayerScaleVisibilityUtils.initPluginProperties();
+
+        IconThemeHelper.registerIcon("preferences", "layers-visibility-remember-preferences", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        //do nothing
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return isVisible();
+    }
+
+    @Override
+    public boolean isVisible() {
+        return false;
+    }
+
+    @Override
+    public void postInitialize() {
+        super.postInitialize();
+
+//        ApplicationLocator.getManager().registerAddTableWizard("DB","DB Tables", WizardDB.class);
+//        AddLayer.addWizard(WizardVectorialDB.class);
+
+        ApplicationLocator.getManager().registerAddTableWizard("DB","DB Tables", WizardDBTabular.class);
+        AddLayer.addWizard(WizardDBVectorial.class);
+        
+        TableInfoController.selfRegister();
+
+    }
+    
+        @Override
+    public IPreference[] getPreferencesPages() {
+        List<IPreference> prefs = new ArrayList<>();
+        prefs.add(new LayersVisibilityReminderPage());
+
+        return prefs.toArray(new IPreference[prefs.size()]);
+    }
+
+
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfo.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfo.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfo.java	(revision 46118)
@@ -0,0 +1,496 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.ListModel;
+import javax.swing.ListSelectionModel;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.expressionevaluator.Expression;
+import org.gvsig.expressionevaluator.ExpressionUtils;
+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.DataTypes;
+import org.gvsig.fmap.dal.exception.DataException;
+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.FeatureType;
+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.fmap.geom.type.GeometryType;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.ContainerUtils;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+import org.gvsig.tools.util.PropertiesSupport;
+import org.gvsig.tools.util.PropertiesSupportHelper;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class TableInfo extends LabeledValueImpl<JDBCStoreParameters> implements PropertiesSupport {
+    
+    private final ListSelectionModel columnChecksModel;
+    private FeatureType featureType;
+    private int geomFieldSelected = -1;
+    private int idFieldSelected = -1;
+    private ComboBoxModel<String> idFieldComboModel;
+    private ComboBoxModel<String> geomFieldComboModel;
+    private List<FeatureAttributeDescriptor> attributeDescriptors;
+    private ListModel<LabeledValue<FeatureAttributeDescriptor>> columnsListModel;
+    private Expression filter;
+    private IProjection projection;
+    private boolean selected;
+    private String documentName;
+    private boolean isView;
+    private Boolean readOnly;
+    private boolean requireGeometry;
+    
+    private PropertiesSupportHelper propertiesHelper;
+    private final String id;
+
+    public TableInfo(String id, JDBCStoreParameters parameters, boolean requireGeometry, boolean isView) {
+        super(getLabelForTable(parameters), parameters.getCopy());
+        this.id = id;
+        this.columnChecksModel = new DefaultListSelectionModel();
+        this.selected = false;
+        this.documentName = parameters.getTable();
+        this.projection = parameters.getCRS();
+        this.isView = isView;
+        this.readOnly = null;
+        this.requireGeometry = requireGeometry;
+        this.propertiesHelper = new PropertiesSupportHelper();
+    }
+
+    private static String getLabelForTable(JDBCStoreParameters parameters) {
+        String schema = parameters.getSchema();
+        String tableName = parameters.getTable();
+        if (StringUtils.isBlank(schema)) {
+            return tableName;
+        }
+        return schema + "." + tableName;
+    }
+
+    public void fetch(JDBCStoreParameters parameters) {
+        this.value = parameters.getCopy();
+        this.projection = parameters.getCRS();
+        this.setGeomFieldSelected(parameters.getDefaultGeometryField());
+        if(StringUtils.isBlank(parameters.getBaseFilter())){
+            this.filter = null;
+        } else {
+            this.filter = ExpressionUtils.createExpression(parameters.getBaseFilter());
+        }
+        if(StringUtils.isBlank(parameters.getPkFieldsString()) || StringUtils.contains(parameters.getPkFieldsString(), ',')){
+            this.setIdFieldSelected(-1);
+        } else {
+            this.setIdFieldSelected(parameters.getPkFieldsString());
+        }
+        
+        String[] fieldsArray = parameters.getFields();
+        if(fieldsArray == null){
+            this.columnChecksModel.setSelectionInterval(0, this.getColumnsListModel().getSize()-1);
+        } else {
+            ListModel<LabeledValue<FeatureAttributeDescriptor>> model = this.getColumnsListModel();
+            List<String> fields = Arrays.asList(fieldsArray);
+            this.columnChecksModel.clearSelection();
+            for (int i = 0; i < model.getSize(); i++) {
+                FeatureAttributeDescriptor attr = model.getElementAt(i).getValue();
+                if(ContainerUtils.contains(fields, attr.getName(), ContainerUtils.EQUALS_IGNORECASE_COMPARATOR)) {
+                    this.columnChecksModel.addSelectionInterval(i, i);
+                }
+            }
+        }
+    }
+
+    public String getId() {
+        return id;
+    }
+    
+    public String getDocumentName() {
+        return this.documentName;
+    }
+
+    public void setDocumentName(String name) {
+        this.documentName = name;
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setSelected(boolean selected) {
+        this.fetchFromStore();
+        this.selected = selected;
+    }
+
+    public ListSelectionModel getColumnChecksModel() {
+        return this.columnChecksModel;
+    }
+
+    public JDBCStoreParameters getParameters() {
+        JDBCStoreParameters p = this.getValue();
+        StringBuilder fields = new StringBuilder();
+        List<FeatureAttributeDescriptor> attributes = this.getAttributeDescriptors();
+        boolean allSelected = true;
+        for (int i = 0; i < attributes.size(); i++) {
+            if (this.columnChecksModel.isSelectedIndex(i)) {
+                if (fields.length() > 0) {
+                    fields.append(",");
+                }
+                fields.append(attributes.get(i).getName());
+            } else {
+                allSelected = false;
+            }
+        }
+        if (!allSelected) {
+            p.setFields(fields.toString());
+        }
+        if(this.idFieldSelected >= 0){
+            p.setPkFields(this.getFieldId());
+        }
+        p.setCRS(this.getProjection());
+        p.setDefaultGeometryField(this.getGeomField());
+        if (!ExpressionUtils.isEmpty(this.filter)) {
+            p.setBaseFilter(this.filter.getPhrase());
+        } else {
+            p.setBaseFilter(null);
+        }
+        return p;
+    }
+
+    public void setProjection(IProjection projection) {
+        this.projection = projection;
+    }
+
+    public IProjection getProjection() {
+        return projection;
+    }
+
+    public String getFieldId() {
+        if (this.idFieldSelected < 0) {
+            return null;
+        }
+        return this.getIdFieldComboModel().getElementAt(this.idFieldSelected);
+    }
+
+    public String getGeomField() {
+        if (this.geomFieldSelected < 0) {
+            return null;
+        }
+        return this.geomFieldComboModel.getElementAt(this.geomFieldSelected);
+    }
+
+    public FeatureType getFeatureType() {
+        if (this.featureType == null) {
+            fetchFromStore();
+        }
+        return this.featureType;
+    }
+    
+    private void fetchFromStore() {
+        DataManager dataManager = DALLocator.getDataManager();
+        if (this.featureType != null) {
+            return;
+        }
+        FeatureStore store = null;
+        try {
+            JDBCStoreParameters params = this.getValue();
+            store = (FeatureStore) dataManager.openStore(params.getDataStoreName(), params);
+            this.featureType = store.getDefaultFeatureType();
+            FeatureAttributeDescriptor attr = this.featureType.getDefaultGeometryAttribute();
+            if (attr != null) {
+                GeometryType geomType = attr.getGeomType();
+                if (geomType != null) {
+                    if (this.getGeometryType() == Geometry.TYPES.UNKNOWN) {
+                        this.setGeometryType(geomType.getType());
+                    }
+                    if (this.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN) {
+                        this.setGeometrySubtype(geomType.getSubType());
+                    }
+                }
+                if (this.getProjection() == null) {
+                    this.setProjection(attr.getSRS());
+                }
+            }
+            if (this.readOnly == null) {
+                this.readOnly = !store.allowWrite();
+            }
+
+            // this force calculate some required values of tableinfo
+            this.getGeomFieldComboModel();
+            this.getIdFieldComboModel();
+
+        } catch (Exception ex) {
+            AbstractWizardDB.LOGGER.trace("Can't get feature type.", ex); // To allow set break points
+        } finally {
+            DisposeUtils.disposeQuietly(store);
+        }
+
+    }
+
+    public ComboBoxModel getGeomFieldComboModel() {
+        if (this.geomFieldComboModel == null) {
+            DefaultComboBoxModel<String> geomModel = new DefaultComboBoxModel<>();
+            geomModel.addElement(" ");
+            int geomIndex = -1;
+            int n = 1;
+            for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
+                if (geomIndex < 0 && attr.getType() == DataTypes.GEOMETRY) {
+                    geomIndex = n;
+                }
+                int dataType = attr.getType();
+                if (dataType == DataTypes.GEOMETRY || dataType == DataTypes.BYTEARRAY || dataType == DataTypes.STRING) {
+                    geomModel.addElement(attr.getName());
+                    n++;
+                }
+            }
+            if (geomIndex < 0) {
+                geomIndex = 0;
+            }
+            this.geomFieldComboModel = geomModel;
+            this.geomFieldSelected = geomIndex;
+        }
+        return this.geomFieldComboModel;
+    }
+
+    public int getGeomFieldSelected() {
+        return this.geomFieldSelected;
+    }
+
+    public ComboBoxModel<String> getIdFieldComboModel() {
+        if (this.idFieldComboModel == null) {
+            StringBuilder pkName = new StringBuilder();
+            for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
+                if (attr.isPrimaryKey()) {
+                    if (!StringUtils.isBlank(pkName)) {
+                        pkName.append(",");
+                    }
+                    pkName.append(attr.getName());
+                }
+            }
+            DefaultComboBoxModel<String> idsModel = new DefaultComboBoxModel<>();
+            idsModel.addElement(" ");
+            int idsIndex = -1;
+            int n = 1;
+            if (!StringUtils.isBlank(pkName) && StringUtils.contains(pkName, ",")) {
+                idsModel.addElement(pkName.toString());
+                idsIndex = n++;
+            }
+            for (FeatureAttributeDescriptor attr : getAttributeDescriptors()) {
+                if (idsIndex < 0 && attr.isPrimaryKey()) {
+                    idsIndex = n;
+                }
+                idsModel.addElement(attr.getName());
+                n++;
+            }
+            if (idsIndex < 0) {
+                idsIndex = 0;
+            }
+            this.idFieldComboModel = idsModel;
+            this.idFieldSelected = idsIndex;
+        }
+        return this.idFieldComboModel;
+    }
+
+    public List<FeatureAttributeDescriptor> getAttributeDescriptors() {
+        if (this.attributeDescriptors == null) {
+            List<FeatureAttributeDescriptor> attrs = new ArrayList<>();
+            for (FeatureAttributeDescriptor attr : this.getFeatureType()) {
+                attrs.add(attr);
+            }
+            attrs.sort((FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) -> o1.getName().compareTo(o2.getName()));
+            this.columnChecksModel.setSelectionInterval(0, attrs.size());
+            this.attributeDescriptors = attrs;
+        }
+        return this.attributeDescriptors;
+    }
+
+    public ListModel<LabeledValue<FeatureAttributeDescriptor>> getColumnsListModel() {
+        if (this.columnsListModel == null) {
+            DefaultListModel<LabeledValue<FeatureAttributeDescriptor>> model = new DefaultListModel<>();
+            for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
+                model.addElement(new LabeledValueImpl<>(attr.getName() + " [" + attr.getDataTypeName() + "]", attr));
+            }
+            this.columnsListModel = model;
+        }
+        return this.columnsListModel;
+    }
+
+    public FeatureAttributeDescriptor getAttributeDescriptor(String attrName) {
+        return this.getFeatureType().getAttributeDescriptor(attrName);
+    }
+
+    public int getIdFieldSelected() {
+        return this.idFieldSelected;
+    }
+
+    public Expression getFilter() {
+        return this.filter;
+    }
+
+    public void setFilter(Expression filter) {
+        this.filter = filter;
+    }
+
+    void setIdFieldSelected(int selectedIndex) {
+        this.idFieldSelected = selectedIndex;
+    }
+    
+    void setIdFieldSelected(String selected) {
+        ComboBoxModel<String> model = getIdFieldComboModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            if(StringUtils.equalsIgnoreCase(selected, model.getElementAt(i))){
+                this.idFieldSelected = i;
+                return;
+            }
+        }
+        this.idFieldSelected = -1;
+    }
+
+
+    void setGeomFieldSelected(int selectedIndex) {
+        this.geomFieldSelected = selectedIndex;
+    }
+
+    void setGeomFieldSelected(String selected) {
+        ComboBoxModel<String> model = getGeomFieldComboModel();
+        for (int i = 0; i < model.getSize(); i++) {
+            if(StringUtils.equalsIgnoreCase(selected, model.getElementAt(i))){
+                this.geomFieldSelected = i;
+                return;
+            }
+        }
+        this.geomFieldSelected = -1;
+    }
+
+    public boolean requireGeometry() {
+        return requireGeometry;
+    }
+
+    public boolean hasValidValues() {
+        if (this.getGeomFieldSelected() < 0 && requireGeometry()) {
+            return false;
+        }
+        if (this.requireGeometry()) {
+            FeatureType featType = this.getFeatureType();
+            if (StringUtils.isBlank(this.getGeomField())) {
+                return false;
+            }
+            if (this.getGeometryType() == Geometry.TYPES.NULL || this.getGeometryType() == Geometry.TYPES.UNKNOWN) {
+                return false;
+            }
+            if (this.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN) {
+                return false;
+            }
+        }
+        
+        JDBCStoreParameters p = this.getParameters();
+        try {
+            p.validate();
+            return true;
+        } catch (ValidateDataParametersException ex) {
+            return false;
+        }
+    }
+
+    public boolean isView() {
+        return this.isView;
+    }
+
+    public boolean isReadOnly() {
+        if (this.readOnly == null) {
+            fetchFromStore();
+        }
+        return this.readOnly;
+    }
+
+    @Override
+    public Object getProperty(String name) {
+        return this.propertiesHelper.getProperty(name);
+    }
+
+    @Override
+    public void setProperty(String name, Object value) {
+        this.propertiesHelper.setProperty(name, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return this.propertiesHelper.getProperties();
+    }
+    
+    private JDBCServerExplorer getExplorer() throws DataException, ValidateDataParametersException {
+        DataManager manager = DALLocator.getDataManager();
+        JDBCStoreParameters storeParameters = getParameters();
+        DataServerExplorerParameters explorerParameters = manager.createServerExplorerParameters(storeParameters.getProviderName());
+        ToolsLocator.getDynObjectManager().copy(storeParameters, explorerParameters);
+        DataServerExplorer explorer = manager.openServerExplorer(storeParameters.getProviderName(), explorerParameters);
+        return (JDBCServerExplorer) explorer;
+        
+    }
+
+    public boolean existsDALInfo() {
+        try {
+            JDBCStoreParameters storeParameters = getParameters();
+            JDBCServerExplorer explorer = getExplorer();
+            ResourcesStorage resources = explorer.getResourcesStorage(storeParameters);
+            return resources.exists("dal");
+        } catch (Exception ex) {
+            //FIXME: LOGGER
+            return false;
+        }
+    }
+    
+    public void removeDALInfo() {
+        try {
+            JDBCStoreParameters storeParameters = getParameters();
+            JDBCServerExplorer explorer = getExplorer();
+            ResourcesStorage resources = explorer.getResourcesStorage(storeParameters);
+            if(resources.exists("dal")) {
+                resources.remove("dal");
+                JDBCStoreParameters params = (JDBCStoreParameters) explorer.get(storeParameters.getTable());
+                this.value = params;
+                this.featureType = null;
+            }
+            DisposeUtils.disposeQuietly(explorer);
+        } catch (Exception ex) {
+            throw new RuntimeException("Can't remove DAL resource.", ex);
+        }
+        
+    }
+    
+    public int getGeometryType(){
+        return this.getValue().getGeometryType();
+    }
+
+    public int getGeometrySubtype(){
+        return this.getValue().getGeometrySubtype();
+    }
+
+    public void setGeometryType(int geomType){
+        this.getValue().setGeometryType(geomType);
+    }
+
+    public void setGeometrySubtype(int geomSubtype){
+        this.getValue().setGeometrySubtype(geomSubtype);
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.java	(revision 46118)
@@ -0,0 +1,166 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+
+public class ConnectToDatabaseWorkspacePanelView extends JPanel
+{
+   JButton btnConnection = new JButton();
+   JTextField txtID = new JTextField();
+   JTextField txtLabel = new JTextField();
+   JComboBox cboConnection = new JComboBox();
+
+   /**
+    * Default constructor
+    */
+   public ConnectToDatabaseWorkspacePanelView()
+   {
+      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","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnConnection.setActionCommand("...");
+      btnConnection.setName("btnConnection");
+      btnConnection.setText("...");
+      jpanel1.add(btnConnection,cc.xy(6,2));
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("ID");
+      jpanel1.add(jlabel1,cc.xy(2,4));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("Label");
+      jpanel1.add(jlabel2,cc.xy(2,6));
+
+      txtID.setBackground(new Color(236,233,216));
+      txtID.setEditable(false);
+      txtID.setName("txtID");
+      jpanel1.add(txtID,cc.xywh(4,4,3,1));
+
+      txtLabel.setBackground(new Color(236,233,216));
+      txtLabel.setEditable(false);
+      txtLabel.setName("txtLabel");
+      jpanel1.add(txtLabel,cc.xywh(4,6,3,1));
+
+      cboConnection.setName("cboConnection");
+      jpanel1.add(cboConnection,cc.xy(4,2));
+
+      JLabel jlabel3 = new JLabel();
+      jlabel3.setText("Conection");
+      jpanel1.add(jlabel3,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7 },new int[]{ 1,2,3,4,5,6,7 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.java	(revision 46118)
@@ -0,0 +1,186 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+
+
+public class RepositoryAddTablePanelView extends JPanel
+{
+   JTabbedPane tabStores = new JTabbedPane();
+   JTree treeLayers = new JTree();
+   JList lstTables = new JList();
+   JTextField txtTableName = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public RepositoryAddTablePanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      tabStores.setName("tabStores");
+      tabStores.addTab("Layers",null,createPanel1());
+      tabStores.addTab("Tables",null,createPanel2());
+      jpanel1.add(tabStores,cc.xywh(2,2,3,1));
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Table name");
+      jpanel1.add(jlabel1,cc.xy(2,4));
+
+      txtTableName.setName("txtTableName");
+      jpanel1.add(txtTableName,cc.xy(4,4));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:2DLU:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      treeLayers.setName("treeLayers");
+      treeLayers.setRootVisible(false);
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(treeLayers);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstTables.setName("lstTables");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstTables);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceExtension.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceExtension.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceExtension.java	(revision 46118)
@@ -0,0 +1,74 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+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.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class WorkspaceExtension extends Extension {
+
+    @Override
+    public void initialize() {
+        IconThemeHelper.registerIcon("action", "database-workspace-connect", this);
+    }
+
+    @Override
+    public void execute(String actionCommand) {
+        if( StringUtils.equalsIgnoreCase(actionCommand, "database-workspace-manage") ) {
+            WindowManager winManager = ToolsSwingLocator.getWindowManager();
+            WorkspaceConfigurationPanel panel = new WorkspaceConfigurationPanel();
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            winManager.showWindow(
+                    panel.asJComponent(), 
+                    i18n.getTranslation("_Manage_Dabatase_workspace"), 
+                    WindowManager.MODE.WINDOW
+            );
+        } else if( StringUtils.equalsIgnoreCase(actionCommand, "database-workspace-connect") ) {
+            WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+            final ConnectToDatabaseWorkspacePanel panel = new ConnectToDatabaseWorkspacePanel();
+            I18nManager i18n = ToolsLocator.getI18nManager(); 
+            final Dialog dialog = winManager.createDialog(
+                    panel.asJComponent(),
+                    i18n.getTranslation("_Connect"),
+                    i18n.getTranslation("_Connect_to_database_workspace"), 
+                    WindowManager_v2.BUTTONS_APPLY_OK_CANCEL
+            );
+            panel.setDialog(dialog);
+            dialog.setButtonLabel(WindowManager_v2.BUTTON_OK, i18n.getTranslation("_Connect"));
+            dialog.setButtonLabel(WindowManager_v2.BUTTON_APPLY, i18n.getTranslation("_Disconnect"));
+            dialog.addActionListener((ActionEvent e) -> {
+              switch( dialog.getAction() ) {
+                case WindowManager_v2.BUTTON_OK:
+                  panel.connect();
+                  break;
+                case WindowManager_v2.BUTTON_APPLY:
+                  panel.disconnect();
+                  break;
+              }
+            });
+            dialog.show(WindowManager.MODE.WINDOW);
+        }
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public boolean isVisible() {
+        return true;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanel.java	(revision 46118)
@@ -0,0 +1,135 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import javax.swing.JComponent;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang.StringUtils;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class ConnectToDatabaseWorkspacePanel 
+        extends ConnectToDatabaseWorkspacePanelView
+        implements Component
+    {
+
+    private Dialog dialog;
+    private PickerController<JDBCServerExplorerParameters> connectionPicker;
+
+    public ConnectToDatabaseWorkspacePanel() {
+        this.initComponents();
+    }
+    
+    public boolean connect() {
+        JDBCServerExplorerParameters conn = getConnection();
+        if( conn == null ) {
+            return false;
+        }
+        DataManager dataManager = DALLocator.getDataManager();
+        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
+        workspace.connect();
+        return true;
+    }
+
+    public void disconnect() {
+      String id = this.getID();
+      DataManager dataManager = DALLocator.getDataManager();
+      DatabaseWorkspaceManager workspace = dataManager.getDatabaseWorkspace(id);
+      if( workspace!=null ) {
+        workspace.disconnect();
+      }
+    }
+    
+    private void initComponents() {
+        this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
+                this.cboConnection,
+                this.btnConnection
+        );
+        this.connectionPicker.addChangeListener(new ChangeListener() {
+            @Override
+            public void stateChanged(ChangeEvent e) {
+                doUpdateStoresRepositoryInfo();
+            }
+        });
+        doUpdateStoresRepositoryInfo();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public JDBCServerExplorerParameters getConnection() {
+        JDBCServerExplorerParameters conn = this.connectionPicker.get();
+        if (conn == null) {
+            return null;
+        }
+        DataManager dataManager = DALLocator.getDataManager();
+        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
+        if( !workspace.isValidStoresRepository() ) {
+            return null;
+        }
+        return conn;
+    }
+
+    private void doUpdateEnableComponents() {
+        DataManager dataManager = DALLocator.getDataManager();
+
+        boolean theEnabled = this.getConnection() != null;
+        if( dialog!=null ) {
+            this.dialog.setButtonEnabled(
+                    WindowManager_v2.BUTTON_OK, 
+                    theEnabled
+            );
+            String id = this.getID();
+            this.dialog.setButtonEnabled(
+                    WindowManager_v2.BUTTON_APPLY, 
+                    dataManager.getDatabaseWorkspace(id)!=null
+            );
+        }
+    }
+    
+    private void doUpdateStoresRepositoryInfo() {
+        if( this.getConnection()!=null ) {
+          DataManager dataManager = DALLocator.getDataManager();
+          JDBCServerExplorerParameters conn = getConnection();
+          DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
+          String id = workspace.get(CONFIG_NAME_STORESREPOSITORYID);
+          String label = workspace.get(CONFIG_NAME_STORESREPOSITORYLABEL);
+          this.txtID.setText(StringUtils.defaultIfBlank(id, ""));
+          this.txtLabel.setText(StringUtils.defaultIfBlank(label, ""));
+          this.connectionPicker.set(conn);
+        } else {
+          this.txtID.setText("");
+          this.txtLabel.setText("");
+          this.connectionPicker.set(null);
+        }
+        this.doUpdateEnableComponents();
+    }
+    
+    public String getID() {
+      return this.txtID.getText();
+    }
+    
+    public String getLabel() {
+      return this.txtLabel.getText();
+    }
+    
+    void setDialog(Dialog dialog) {
+       this.dialog = dialog;
+       this.doUpdateEnableComponents();
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanel.java	(revision 46118)
@@ -0,0 +1,130 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import java.util.List;
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+import org.apache.commons.lang3.StringUtils;
+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.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.util.LabeledValue;
+import org.gvsig.tools.util.LabeledValueImpl;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+public class RepositoryAddTablePanel 
+        extends RepositoryAddTablePanelView 
+        implements Component
+    {
+
+    public RepositoryAddTablePanel() {
+        this.initComponents();
+    }
+    
+    private void initComponents() {
+        ApplicationManager application = ApplicationLocator.getManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        
+        TreeModel layersModel = application.createProjectLayersTreeModel();
+        this.treeLayers.setModel(layersModel);
+        this.treeLayers.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
+            @Override
+            public void valueChanged(TreeSelectionEvent e) {
+                 doUpdateTableName();
+            }
+        });
+        
+        Project project = application.getCurrentProject();
+        final List<Document> docs = project.getDocuments(TableManager.TYPENAME);
+        if( docs!=null ) {
+            DefaultListModel<LabeledValue<FeatureStore>> tablesModel = new DefaultListModel<>();
+            for (Document doc : docs) {
+                TableDocument table = (TableDocument) doc;
+                tablesModel.addElement(
+                        new LabeledValueImpl<>(table.getName(), table.getFeatureStore())
+                );
+            }
+            this.lstTables.setModel(tablesModel);
+            this.lstTables.addListSelectionListener(new ListSelectionListener() {
+                @Override
+                public void valueChanged(ListSelectionEvent e) {
+                    if( e.getValueIsAdjusting() ) {
+                        return;
+                    }
+                    doUpdateTableName();
+                }
+            });
+            
+            toolsSwingManager.addClearButton(this.txtTableName);
+            toolsSwingManager.setDefaultPopupMenu(this.txtTableName);
+        }
+
+    }
+    
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+    private void doUpdateTableName() {
+        switch(this.tabStores.getSelectedIndex()) {
+            case 0: // Layers
+                TreePath selected = this.treeLayers.getSelectionPath();
+                FLayer layer = (FLayer) selected.getLastPathComponent();
+                if( layer instanceof SingleLayer ) {
+                    this.txtTableName.setText(layer.getName());
+                }
+                break;
+            case 1: // Table documents
+                LabeledValue<FeatureStore> item = (LabeledValue<FeatureStore>) this.lstTables.getSelectedValue();
+                if( item != null ) {
+                    this.txtTableName.setText(item.getLabel());
+                }
+                break;
+            default:
+                break;
+        }
+    }
+    
+    public String getTableName() {
+        return StringUtils.defaultIfBlank(this.txtTableName.getText(),null);
+    }
+    
+    public DataStoreParameters getDataStoreParameters() {
+        switch(this.tabStores.getSelectedIndex()) {
+            case 0: // Layers
+                TreePath selected = this.treeLayers.getSelectionPath();
+                FLayer layer = (FLayer) selected.getLastPathComponent();
+                if( layer instanceof SingleLayer ) {
+                    return ((SingleLayer) layer).getDataStore().getParameters();
+                }
+                return null;
+            case 1: // Table documents
+                LabeledValue<FeatureStore> item = (LabeledValue<FeatureStore>) this.lstTables.getSelectedValue();
+                if( item == null ) {
+                    return null;
+                }
+                return item.getValue().getParameters();
+            default:
+                return null;
+        }
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.xml	(revision 46118)
@@ -0,0 +1,2067 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/workspace/WorkspaceConfigurationPanelView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">5</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">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="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="name"></at>
+            <at name="width">929</at>
+            <at name="text">Resources</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">9</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">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="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="name"></at>
+            <at name="width">929</at>
+            <at name="text">Tables repository</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">15</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">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="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="name"></at>
+            <at name="width">929</at>
+            <at name="text">Configuraction</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">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.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="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="width">929</at>
+            <at name="name"/>
+            <at name="text">Connection</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">7</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">embedded.1164953036</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">4</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.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="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="actionCommand">Create</at>
+                 <at name="name">btnCreateResourceTable</at>
+                 <at name="width">70</at>
+                 <at name="text">Create</at>
+                 <at name="height">22</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">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.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="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="actionCommand">Create</at>
+                 <at name="name">btnDropResourceTable</at>
+                 <at name="width">59</at>
+                 <at name="text">Drop</at>
+                 <at name="height">22</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">6</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnSearchResourceTable</at>
+                 <at name="width">72</at>
+                 <at name="text">Search</at>
+                 <at name="height">22</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">8</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnShowResourceTable</at>
+                 <at name="width">94</at>
+                 <at name="text">Show form</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">3</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">embedded.2039497715</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">cboConnections</at>
+                 <at name="width">869</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">20</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">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.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="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="actionCommand">...</at>
+                 <at name="name">btnAddConnection</at>
+                 <at name="width">44</at>
+                 <at name="text">...</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">13</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">embedded.1947402885</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">10</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnShowRepositoryTable</at>
+                 <at name="width">94</at>
+                 <at name="text">Show form</at>
+                 <at name="height">22</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">8</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnSearchRepositoryTable</at>
+                 <at name="width">85</at>
+                 <at name="text">Search</at>
+                 <at name="height">22</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">6</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.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="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="actionCommand">Create</at>
+                 <at name="name">btnCreateRepositoryTable</at>
+                 <at name="width">70</at>
+                 <at name="text">Create</at>
+                 <at name="height">22</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">4</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.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="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="actionCommand">Create</at>
+                 <at name="name">btnDropRepositoryTable</at>
+                 <at name="width">59</at>
+                 <at name="text">Drop</at>
+                 <at name="height">22</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">8</at>
+                <at name="row">3</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="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="actionCommand">Edit</at>
+                 <at name="name">btnRepositoryAddTable</at>
+                 <at name="width">85</at>
+                 <at name="text">Add table</at>
+                 <at name="height">22</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">10</at>
+                <at name="row">3</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="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="actionCommand">Connect</at>
+                 <at name="name">btnConnectToRepository</at>
+                 <at name="width">94</at>
+                 <at name="text">Connect</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="10"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="10"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="10"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</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.FormComponent</at>
+        </super>
+        <at name="id">embedded.1681988258</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">4</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.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="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="actionCommand">Create</at>
+                 <at name="name">btnCreateConfigurationTable</at>
+                 <at name="width">70</at>
+                 <at name="text">Create</at>
+                 <at name="height">22</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">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.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="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="actionCommand">Create</at>
+                 <at name="name">btnDropConfigurationTable</at>
+                 <at name="width">59</at>
+                 <at name="text">Drop</at>
+                 <at name="height">22</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">6</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnSearchConfigurationTable</at>
+                 <at name="width">72</at>
+                 <at name="text">Search</at>
+                 <at name="height">22</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">8</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.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="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="actionCommand">Edit</at>
+                 <at name="name">btnShowConfigurationTable</at>
+                 <at name="width">94</at>
+                 <at name="text">Show form</at>
+                 <at name="height">22</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">11</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">embedded.1577735662</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)</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">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.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="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="width">30</at>
+                 <at name="name"/>
+                 <at name="text">Id</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">1</at>
+                <at name="row">3</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">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="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="width">30</at>
+                 <at name="name"/>
+                 <at name="text">Label</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">14</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">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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtStoresRepositoryId</at>
+                 <at name="width">883</at>
+                 <at name="height">20</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">3</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.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="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="background" object="color">236,233,216</at>
+                 <at name="editable">false</at>
+                 <at name="name">txtStoresRepositoryLabel</at>
+                 <at name="width">883</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="3">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </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="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="12">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="13">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanelView.java	(revision 46118)
@@ -0,0 +1,322 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import java.awt.BorderLayout;
+import java.awt.Color;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+
+public class WorkspaceConfigurationPanelView extends JPanel
+{
+   JButton btnCreateResourceTable = new JButton();
+   JButton btnDropResourceTable = new JButton();
+   JButton btnSearchResourceTable = new JButton();
+   JButton btnShowResourceTable = new JButton();
+   JComboBox cboConnections = new JComboBox();
+   JButton btnAddConnection = new JButton();
+   JButton btnShowRepositoryTable = new JButton();
+   JButton btnSearchRepositoryTable = new JButton();
+   JButton btnCreateRepositoryTable = new JButton();
+   JButton btnDropRepositoryTable = new JButton();
+   JButton btnRepositoryAddTable = new JButton();
+   JButton btnConnectToRepository = new JButton();
+   JButton btnCreateConfigurationTable = new JButton();
+   JButton btnDropConfigurationTable = new JButton();
+   JButton btnSearchConfigurationTable = new JButton();
+   JButton btnShowConfigurationTable = new JButton();
+   JTextField txtStoresRepositoryId = new JTextField();
+   JTextField txtStoresRepositoryLabel = new JTextField();
+
+   /**
+    * Default constructor
+    */
+   public WorkspaceConfigurationPanelView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Resources");
+      jpanel1.add(jlabel1,cc.xy(2,5));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("Tables repository");
+      jpanel1.add(jlabel2,cc.xy(2,9));
+
+      JLabel jlabel3 = new JLabel();
+      jlabel3.setText("Configuraction");
+      jpanel1.add(jlabel3,cc.xy(2,15));
+
+      JLabel jlabel4 = new JLabel();
+      jlabel4.setText("Connection");
+      jpanel1.add(jlabel4,cc.xy(2,1));
+
+      jpanel1.add(createPanel1(),cc.xy(2,7));
+      jpanel1.add(createPanel2(),cc.xy(2,3));
+      jpanel1.add(createPanel3(),cc.xy(2,13));
+      jpanel1.add(createPanel4(),cc.xy(2,17));
+      jpanel1.add(createPanel5(),cc.xy(2,11));
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnCreateResourceTable.setActionCommand("Create");
+      btnCreateResourceTable.setName("btnCreateResourceTable");
+      btnCreateResourceTable.setText("Create");
+      jpanel1.add(btnCreateResourceTable,cc.xy(4,1));
+
+      btnDropResourceTable.setActionCommand("Create");
+      btnDropResourceTable.setName("btnDropResourceTable");
+      btnDropResourceTable.setText("Drop");
+      jpanel1.add(btnDropResourceTable,cc.xy(2,1));
+
+      btnSearchResourceTable.setActionCommand("Edit");
+      btnSearchResourceTable.setName("btnSearchResourceTable");
+      btnSearchResourceTable.setText("Search");
+      jpanel1.add(btnSearchResourceTable,cc.xy(6,1));
+
+      btnShowResourceTable.setActionCommand("Edit");
+      btnShowResourceTable.setName("btnShowResourceTable");
+      btnShowResourceTable.setText("Show form");
+      jpanel1.add(btnShowResourceTable,cc.xy(8,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,5,7 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboConnections.setName("cboConnections");
+      jpanel1.add(cboConnections,cc.xy(1,1));
+
+      btnAddConnection.setActionCommand("...");
+      btnAddConnection.setName("btnAddConnection");
+      btnAddConnection.setText("...");
+      jpanel1.add(btnAddConnection,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnShowRepositoryTable.setActionCommand("Edit");
+      btnShowRepositoryTable.setName("btnShowRepositoryTable");
+      btnShowRepositoryTable.setText("Show form");
+      jpanel1.add(btnShowRepositoryTable,cc.xy(10,1));
+
+      btnSearchRepositoryTable.setActionCommand("Edit");
+      btnSearchRepositoryTable.setName("btnSearchRepositoryTable");
+      btnSearchRepositoryTable.setText("Search");
+      jpanel1.add(btnSearchRepositoryTable,cc.xy(8,1));
+
+      btnCreateRepositoryTable.setActionCommand("Create");
+      btnCreateRepositoryTable.setName("btnCreateRepositoryTable");
+      btnCreateRepositoryTable.setText("Create");
+      jpanel1.add(btnCreateRepositoryTable,cc.xy(6,1));
+
+      btnDropRepositoryTable.setActionCommand("Create");
+      btnDropRepositoryTable.setName("btnDropRepositoryTable");
+      btnDropRepositoryTable.setText("Drop");
+      jpanel1.add(btnDropRepositoryTable,cc.xy(4,1));
+
+      btnRepositoryAddTable.setActionCommand("Edit");
+      btnRepositoryAddTable.setName("btnRepositoryAddTable");
+      btnRepositoryAddTable.setText("Add table");
+      jpanel1.add(btnRepositoryAddTable,cc.xy(8,3));
+
+      btnConnectToRepository.setActionCommand("Connect");
+      btnConnectToRepository.setName("btnConnectToRepository");
+      btnConnectToRepository.setText("Connect");
+      jpanel1.add(btnConnectToRepository,cc.xy(10,3));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3,5,7,9 },new int[]{ 1,2,3 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnCreateConfigurationTable.setActionCommand("Create");
+      btnCreateConfigurationTable.setName("btnCreateConfigurationTable");
+      btnCreateConfigurationTable.setText("Create");
+      jpanel1.add(btnCreateConfigurationTable,cc.xy(4,1));
+
+      btnDropConfigurationTable.setActionCommand("Create");
+      btnDropConfigurationTable.setName("btnDropConfigurationTable");
+      btnDropConfigurationTable.setText("Drop");
+      jpanel1.add(btnDropConfigurationTable,cc.xy(2,1));
+
+      btnSearchConfigurationTable.setActionCommand("Edit");
+      btnSearchConfigurationTable.setName("btnSearchConfigurationTable");
+      btnSearchConfigurationTable.setText("Search");
+      jpanel1.add(btnSearchConfigurationTable,cc.xy(6,1));
+
+      btnShowConfigurationTable.setActionCommand("Edit");
+      btnShowConfigurationTable.setName("btnShowConfigurationTable");
+      btnShowConfigurationTable.setText("Show form");
+      jpanel1.add(btnShowConfigurationTable,cc.xy(8,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3,5,7 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      JLabel jlabel1 = new JLabel();
+      jlabel1.setText("Id");
+      jpanel1.add(jlabel1,cc.xy(1,1));
+
+      JLabel jlabel2 = new JLabel();
+      jlabel2.setText("Label");
+      jpanel1.add(jlabel2,cc.xy(1,3));
+
+      txtStoresRepositoryId.setBackground(new Color(236,233,216));
+      txtStoresRepositoryId.setEditable(false);
+      txtStoresRepositoryId.setName("txtStoresRepositoryId");
+      jpanel1.add(txtStoresRepositoryId,cc.xy(3,1));
+
+      txtStoresRepositoryLabel.setBackground(new Color(236,233,216));
+      txtStoresRepositoryLabel.setEditable(false);
+      txtStoresRepositoryLabel.setName("txtStoresRepositoryLabel");
+      jpanel1.add(txtStoresRepositoryLabel,cc.xy(3,3));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[]{ 2 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanel.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanel.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/WorkspaceConfigurationPanel.java	(revision 46118)
@@ -0,0 +1,280 @@
+package org.gvsig.geodb.databaseworkspace;
+
+import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang.StringUtils;
+import org.gvsig.featureform.swing.JFeaturesForm;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.StoresRepository;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
+import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class WorkspaceConfigurationPanel
+        extends WorkspaceConfigurationPanelView
+        implements Component
+    {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WorkspaceConfigurationPanel.class);
+
+    private class TableController {
+
+        private final JButton btnCreate;
+        private final JButton btnDrop;
+        private final JButton btnSearch;
+        private final JButton btnShowForm;
+        private final int tableid;
+
+        public TableController(
+                int tableid,
+                JButton btnCreate,
+                JButton btnDrop,
+                JButton btnSearch,
+                JButton btnShowForm
+        ) {
+            this.tableid = tableid;
+            this.btnCreate = btnCreate;
+            this.btnDrop = btnDrop;
+            this.btnSearch = btnSearch;
+            this.btnShowForm = btnShowForm;
+            this.btnCreate.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    doCreate();
+                }
+            });
+            this.btnDrop.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    doDrop();
+                }
+            });
+            this.btnShowForm.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    doShowForm();
+                }
+            });
+            this.btnSearch.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    doSearch();
+                }
+            });
+        }
+
+        private void doCreate() {
+            DataManager dataManager = DALLocator.getDataManager();
+            DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+            if (workspace.existsTable(this.tableid)) {
+                return;
+            }
+            workspace.createTable(this.tableid);
+        }
+
+        private void doShowForm() {
+            try {
+                DataManager dataManager = DALLocator.getDataManager();
+                DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+                if (!workspace.existsTable(this.tableid)) {
+                    return;
+                }
+                FeatureStore store = workspace.getTable(this.tableid);
+                DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+                JFeaturesForm form = dalSwingManager.createJFeaturesForm(store);
+                WindowManager winManager = ToolsSwingLocator.getWindowManager();
+                winManager.showWindow(
+                        form.asJComponent(),
+                        "Resources",
+                        WindowManager.MODE.WINDOW
+                );
+            } catch (Exception ex) {
+                LOGGER.warn("Can't show form of resources table.", ex);
+            }
+        }
+
+        private void doDrop() {
+            DataManager dataManager = DALLocator.getDataManager();
+            DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+            if (!workspace.existsTable(this.tableid)) {
+                return;
+            }
+            workspace.dropTable(this.tableid);
+        }
+
+        private void doSearch() {
+            try {
+                DataManager dataManager = DALLocator.getDataManager();
+                DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+                if (!workspace.existsTable(this.tableid)) {
+                    return;
+                }
+                FeatureStore store = workspace.getTable(this.tableid);
+                DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
+                FeatureStoreSearchPanel search = dalSwingManager.createFeatureStoreSearchPanel(store);
+                WindowManager winManager = ToolsSwingLocator.getWindowManager();
+                winManager.showWindow(
+                        search.asJComponent(),
+                        "Resources",
+                        WindowManager.MODE.WINDOW
+                );
+            } catch (Exception ex) {
+                LOGGER.warn("Can't show search panel for resources table.", ex);
+            }
+        }
+
+        public void setEnabled(boolean enabled) {
+            this.btnCreate.setEnabled(enabled);
+            this.btnDrop.setEnabled(enabled);
+            this.btnSearch.setEnabled(enabled);
+            this.btnShowForm.setEnabled(enabled);
+        }
+    }
+
+    private TableController resourcesTableController;
+    private TableController repositoryTableController;
+    private TableController configurationTableController;
+    private PickerController<JDBCServerExplorerParameters> connectionPicker;
+
+    public WorkspaceConfigurationPanel() {
+        this.initComponents();
+    }
+
+    private void initComponents() {
+        this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
+                this.cboConnections,
+                this.btnAddConnection
+        );
+        this.connectionPicker.addChangeListener(new ChangeListener() {
+            @Override
+            public void stateChanged(ChangeEvent e) {
+                doUpdateEnableComponents();
+                doUpdateStoresRepositoryInfo();
+            }
+        });
+        this.resourcesTableController = new TableController(
+                DatabaseWorkspaceManager.TABLE_RESOURCES, 
+                btnCreateResourceTable, 
+                btnDropResourceTable, 
+                btnSearchResourceTable, 
+                btnShowResourceTable
+        );
+        this.repositoryTableController = new TableController(
+                DatabaseWorkspaceManager.TABLE_REPOSITORY, 
+                btnCreateRepositoryTable, 
+                btnDropRepositoryTable, 
+                btnSearchRepositoryTable, 
+                btnShowRepositoryTable
+        );
+        this.configurationTableController = new TableController(
+                DatabaseWorkspaceManager.TABLE_CONFIGURATION, 
+                btnCreateConfigurationTable, 
+                btnDropConfigurationTable, 
+                btnSearchConfigurationTable, 
+                btnShowConfigurationTable
+        );
+
+        this.btnRepositoryAddTable.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doAddTableToRepository();
+            }
+        });
+        
+        this.btnConnectToRepository.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                doConnectToRepository();
+            }
+        });
+        
+        doUpdateEnableComponents();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+
+    public JDBCServerExplorerParameters getConnection() {
+        JDBCServerExplorerParameters conn = this.connectionPicker.get();
+        return conn;
+    }
+
+    private void doUpdateEnableComponents() {
+        boolean theEnabled = this.getConnection() != null;
+        this.repositoryTableController.setEnabled(theEnabled);
+        this.resourcesTableController.setEnabled(theEnabled);
+        this.configurationTableController.setEnabled(theEnabled);
+        this.btnRepositoryAddTable.setEnabled(theEnabled);
+        this.btnConnectToRepository.setEnabled(theEnabled);
+    }
+    
+    private void doAddTableToRepository() {
+        final RepositoryAddTablePanel panel = new RepositoryAddTablePanel();
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        final Dialog dialog = winManager.createDialog(
+                panel,
+                "Add table to repository",
+                null, 
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
+                    DataManager dataManager = DALLocator.getDataManager();
+                    DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+                    String tableName = panel.getTableName();
+                    DataStoreParameters parameters = panel.getDataStoreParameters();
+                    if( !workspace.writeStoresRepositoryEntry(tableName, parameters) ) {
+                        // TODO: mensaje al usuario,no se ha podido crear
+                    }
+                }
+            }
+        });
+        dialog.show(WindowManager.MODE.WINDOW);
+    }
+
+    private void doUpdateStoresRepositoryInfo() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+        String id = workspace.get(CONFIG_NAME_STORESREPOSITORYID);
+        String label = workspace.get(CONFIG_NAME_STORESREPOSITORYLABEL);
+        this.txtStoresRepositoryId.setText(StringUtils.defaultIfBlank(id, ""));
+        this.txtStoresRepositoryLabel.setText(StringUtils.defaultIfBlank(label, ""));
+        
+        this.btnConnectToRepository.setEnabled(!StringUtils.isBlank(id));
+    }
+    
+    private void doConnectToRepository() {
+        DataManager dataManager = DALLocator.getDataManager();
+        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
+        StoresRepository repo = workspace.getStoresRepository();
+        dataManager.getStoresRepository().addRepository(repo);
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.xml	(revision 46118)
@@ -0,0 +1,538 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/ConnectToDatabaseWorkspacePanelView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),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">6</at>
+           <at name="row">2</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="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="actionCommand">...</at>
+            <at name="name">btnConnection</at>
+            <at name="width">44</at>
+            <at name="text">...</at>
+            <at name="height">22</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">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">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="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="name"></at>
+            <at name="width">56</at>
+            <at name="text">ID</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">6</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">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="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="name"></at>
+            <at name="width">56</at>
+            <at name="text">Label</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">4</at>
+           <at name="colspan">3</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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtID</at>
+            <at name="width">835</at>
+            <at name="height">20</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">4</at>
+           <at name="row">6</at>
+           <at name="colspan">3</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="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="background" object="color">236,233,216</at>
+            <at name="editable">false</at>
+            <at name="name">txtLabel</at>
+            <at name="width">835</at>
+            <at name="height">20</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">4</at>
+           <at name="row">2</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.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="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="name">cboConnection</at>
+            <at name="width">771</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </at>
+            <at name="height">20</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">2</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">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="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="name"></at>
+            <at name="width">56</at>
+            <at name="text">Conection</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="7">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="7"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/databaseworkspace/RepositoryAddTablePanelView.xml	(revision 46118)
@@ -0,0 +1,665 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/workspace/RepositoryAddTablePanelView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.FormContainerComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTabbedPane</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTabbedPane</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="componentCount">2</at>
+            <at name="name">tabStores</at>
+            <at name="tabs">
+             <object classname="com.jeta.forms.store.properties.TabbedPaneProperties">
+              <at name="name">tabs</at>
+              <at name="items">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">Layers</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>
+                   <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">embedded.H3071773D16b70f2d02eWD7ff9</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:2DLU:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.JTree</at>
+                          <at name="beanproperties">
+                           <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+                            <at name="classname">javax.swing.JTree</at>
+                            <at name="properties">
+                             <object classname="com.jeta.forms.store.support.PropertyMap">
+                              <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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">treeLayers</at>
+                              <at name="width">782</at>
+                              <at name="rowCount">3</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="rootVisible">false</at>
+                              <at name="height">419</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="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>
+                         <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>
+                          </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="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+                <item >
+                 <at name="value">
+                  <object classname="com.jeta.forms.store.properties.TabProperty">
+                   <at name="name">tab</at>
+                   <at name="title">Tables</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>
+                   <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">embedded.N3071773J16b70f2d02eNI7ffb</at>
+                     <at name="rowspecs">CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+                     <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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>
+                              <at name="scrollableTracksViewportWidth">true</at>
+                              <at name="name">lstTables</at>
+                              <at name="width">782</at>
+                              <at name="items">
+                               <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                                <at name="name">items</at>
+                               </object>
+                              </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="height">419</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="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>
+                         <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>
+                          </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="3">
+                         <at name="item" index="0">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="1">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </at>
+                         <at name="item" index="2">
+                          <object classname="[Ljava.lang.Object;" size="3"/>
+                         </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>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+            <at name="width">829</at>
+            <at name="tabCount">2</at>
+            <at name="height">503</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">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">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="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="name"></at>
+            <at name="width">67</at>
+            <at name="text">Table name</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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">4</at>
+           <at name="row">4</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.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="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="name">txtTableName</at>
+            <at name="width">751</at>
+            <at name="height">20</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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.xml	(revision 46118)
@@ -0,0 +1,2764 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.xml</at>
+   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:8DLU:GROW(1.0),FILL:4DLU: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">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.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.border.TitledBorderLabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">lblConnection</at>
+            <at name="width">1330</at>
+            <at name="text">_Connection</at>
+            <at name="height">21</at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">3</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">embedded.320078672</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">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.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="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="name">cboConnection</at>
+                 <at name="width">1297</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                        <super classname="com.jeta.forms.store.properties.BorderProperty">
+                         <at name="name">border</at>
+                        </super>
+                        <at name="top">2</at>
+                        <at name="left">2</at>
+                        <at name="bottom">2</at>
+                        <at name="right">2</at>
+                       </object>
+                      </at>
+                     </item>
+                    </object>
+                   </at>
+                  </object>
+                 </at>
+                 <at name="actionCommand">...</at>
+                 <at name="opaque">false</at>
+                 <at name="name">btnConnection</at>
+                 <at name="width">13</at>
+                 <at name="text">...</at>
+                 <at name="height">20</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">6</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">embedded.1765092490</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.5)</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">1</at>
+                <at name="row">5</at>
+                <at name="colspan">1</at>
+                <at name="rowspan">3</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.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="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>
+                 <at name="scrollableTracksViewportWidth">true</at>
+                 <at name="name">lstTables</at>
+                 <at name="width">649</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </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="height">333</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</at>
+                <at name="row">7</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">embedded.483917625</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU: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">4</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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">Ninguno</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnDeselectAllColumns</at>
+                      <at name="width">37</at>
+                      <at name="text">_None</at>
+                      <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">Todos</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnSelectAllColumns</at>
+                      <at name="width">22</at>
+                      <at name="text">_All</at>
+                      <at name="height">20</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="4"/>
+                 </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>
+          </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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">com.jeta.forms.components.border.TitledBorderLabel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">lblTable</at>
+                 <at name="width">651</at>
+                 <at name="text">choose_table</at>
+                 <at name="height">21</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">com.jeta.forms.components.border.TitledBorderLabel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">com.jeta.forms.components.border.TitledBorderLabel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <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="name">lblColumns</at>
+                 <at name="width">659</at>
+                 <at name="text">table_fields</at>
+                 <at name="height">21</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">3</at>
+                <at name="colspan">1</at>
+                <at name="rowspan">3</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.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="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>
+                 <at name="scrollableTracksViewportWidth">true</at>
+                 <at name="name">lstColumns</at>
+                 <at name="width">657</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </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="height">335</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</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">embedded.1547195542</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">3</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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="name">btnTablesFilter</at>
+                      <at name="width">13</at>
+                      <at name="text">...</at>
+                      <at name="height">20</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">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.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="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="name">txtTablesFilter</at>
+                      <at name="width">618</at>
+                      <at name="height">22</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="3"/>
+                 </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>
+          </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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="7">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">9</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">embedded.1034471274</at>
+        <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)</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">1</at>
+                <at name="row">2</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">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="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="name">lblName</at>
+                 <at name="width">59</at>
+                 <at name="text">_Name</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">2</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.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="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="name">txtName</at>
+                 <at name="width">1251</at>
+                 <at name="height">22</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">1</at>
+                <at name="row">4</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">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="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="name">lblIdField</at>
+                 <at name="width">59</at>
+                 <at name="text">_Id_field</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">4</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.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="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="name">cboIdField</at>
+                 <at name="width">1251</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">22</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">1</at>
+                <at name="row">6</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">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="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="name">lblGeometryField</at>
+                 <at name="width">59</at>
+                 <at name="text">_Geo_field</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</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">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.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="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="name">cboGeometryField</at>
+                 <at name="width">1251</at>
+                 <at name="items">
+                  <object classname="com.jeta.forms.store.properties.ItemsProperty">
+                   <at name="name">items</at>
+                  </object>
+                 </at>
+                 <at name="height">22</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">1</at>
+                <at name="row">8</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">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="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="name">lblProjection</at>
+                 <at name="width">59</at>
+                 <at name="text">_Projection</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</at>
+                <at name="row">8</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">embedded.731115837</at>
+             <at name="rowspecs">FILL:DEFAULT:NONE</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name">txtProjection</at>
+                      <at name="width">1183</at>
+                      <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnProjection</at>
+                      <at name="width">13</at>
+                      <at name="text">...</at>
+                      <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="opaque">false</at>
+                      <at name="icon">
+                       <object classname="com.jeta.forms.store.properties.IconProperty">
+                        <at name="embedded">false</at>
+                        <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-crstoview.png</at>
+                        <at name="description">geodb-crstoview.png</at>
+                        <at name="width">16</at>
+                        <at name="height">16</at>
+                       </object>
+                      </at>
+                      <at name="name">btnChangeViewProjection</at>
+                      <at name="width">20</at>
+                      <at name="toolTipText">_Change_view_projection_to_this_projection</at>
+                      <at name="height">22</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="5"/>
+                 </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>
+          </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">1</at>
+                <at name="row">10</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">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="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="name">lblFilter</at>
+                 <at name="width">59</at>
+                 <at name="text">_Filter</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">16</at>
+                </object>
+               </at>
+              </object>
+             </at>
+            </object>
+           </at>
+          </item>
+          <item >
+           <at name="value">
+            <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">3</at>
+                <at name="row">10</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">embedded.726149435</at>
+             <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+             <at name="colspecs">FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU: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">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.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="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="name">txtFilter</at>
+                      <at name="width">1162</at>
+                      <at name="height">22</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnFilter</at>
+                      <at name="width">13</at>
+                      <at name="text">...</at>
+                      <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnFilterBookmarks</at>
+                      <at name="width">13</at>
+                      <at name="text">...</at>
+                      <at name="height">20</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">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.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="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.EmptyBorderProperty">
+                             <super classname="com.jeta.forms.store.properties.BorderProperty">
+                              <at name="name">border</at>
+                             </super>
+                             <at name="top">2</at>
+                             <at name="left">2</at>
+                             <at name="bottom">2</at>
+                             <at name="right">2</at>
+                            </object>
+                           </at>
+                          </item>
+                         </object>
+                        </at>
+                       </object>
+                      </at>
+                      <at name="actionCommand">...</at>
+                      <at name="opaque">false</at>
+                      <at name="name">btnFilterHistory</at>
+                      <at name="width">13</at>
+                      <at name="text">...</at>
+                      <at name="height">20</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="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>
+                 <at name="name"/>
+                 <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>
+                </object>
+               </at>
+              </object>
+             </at>
+             <at name="cellpainters">
+              <object classname="com.jeta.forms.store.support.Matrix">
+               <at name="rows">
+                <object classname="[Ljava.lang.Object;" size="1">
+                 <at name="item" index="0">
+                  <object classname="[Ljava.lang.Object;" size="7"/>
+                 </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>
+          </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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="10">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="1">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="2">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="3">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="4">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="5">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="6">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="7">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="8">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </at>
+            <at name="item" index="9">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </item>
+     <item >
+      <at name="value">
+       <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">2</at>
+           <at name="row">11</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">embedded.535809536</at>
+        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
+        <at name="colspecs">FILL:DEFAULT:GROW(1.0),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">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.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="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="actionCommand">_Advanced_properties</at>
+                 <at name="name">btnAdvancedProperties</at>
+                 <at name="width">148</at>
+                 <at name="text">_Advanced_properties</at>
+                 <at name="height">24</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">1</at>
+                <at name="row">1</at>
+                <at name="colspan">1</at>
+                <at name="rowspan">1</at>
+                <at name="halign">left</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">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="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="name">lblReadOnlyNotification</at>
+                 <at name="width">12</at>
+                 <at name="fill">
+                  <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+                   <at name="name">fill</at>
+                  </object>
+                 </at>
+                 <at name="height">12</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">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.StandardComponent</at>
+             </super>
+             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+             <at name="beanclass">javax.swing.JPanel</at>
+             <at name="beanproperties">
+              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+               <at name="classname">javax.swing.JPanel</at>
+               <at name="properties">
+                <object classname="com.jeta.forms.store.support.PropertyMap">
+                 <at name="name">pnlCfgActions</at>
+                 <at name="width">12</at>
+                 <at name="height">12</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="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>
+            <at name="name"/>
+            <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>
+           </object>
+          </at>
+         </object>
+        </at>
+        <at name="cellpainters">
+         <object classname="com.jeta.forms.store.support.Matrix">
+          <at name="rows">
+           <object classname="[Ljava.lang.Object;" size="1">
+            <at name="item" index="0">
+             <object classname="[Ljava.lang.Object;" size="3"/>
+            </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>
+     </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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="12">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="5">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="6">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="7">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="8">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="9">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="10">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="11">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDBView.java	(revision 46118)
@@ -0,0 +1,410 @@
+package org.gvsig.geodb;
+
+import com.jeta.forms.components.border.TitledBorderLabel;
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+
+public class AbstractWizardDBView extends JPanel
+{
+   TitledBorderLabel lblConnection = new TitledBorderLabel();
+   JComboBox cboConnection = new JComboBox();
+   JButton btnConnection = new JButton();
+   JList lstTables = new JList();
+   JButton btnDeselectAllColumns = new JButton();
+   JButton btnSelectAllColumns = new JButton();
+   TitledBorderLabel lblTable = new TitledBorderLabel();
+   TitledBorderLabel lblColumns = new TitledBorderLabel();
+   JList lstColumns = new JList();
+   JButton btnTablesFilter = new JButton();
+   JTextField txtTablesFilter = new JTextField();
+   JLabel lblName = new JLabel();
+   JTextField txtName = new JTextField();
+   JLabel lblIdField = new JLabel();
+   JComboBox cboIdField = new JComboBox();
+   JLabel lblGeometryField = new JLabel();
+   JComboBox cboGeometryField = new JComboBox();
+   JLabel lblProjection = new JLabel();
+   JTextField txtProjection = new JTextField();
+   JButton btnProjection = new JButton();
+   JButton btnChangeViewProjection = new JButton();
+   JLabel lblFilter = new JLabel();
+   JTextField txtFilter = new JTextField();
+   JButton btnFilter = new JButton();
+   JButton btnFilterBookmarks = new JButton();
+   JButton btnFilterHistory = new JButton();
+   JButton btnAdvancedProperties = new JButton();
+   JLabel lblReadOnlyNotification = new JLabel();
+   JPanel pnlCfgActions = new JPanel();
+
+   /**
+    * Default constructor
+    */
+   public AbstractWizardDBView()
+   {
+      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:4DLU:NONE,FILL:8DLU:GROW(1.0),FILL:4DLU:NONE","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblConnection.setName("lblConnection");
+      lblConnection.setText("_Connection");
+      jpanel1.add(lblConnection,cc.xy(2,1));
+
+      jpanel1.add(createPanel1(),cc.xy(2,3));
+      jpanel1.add(createPanel2(),cc.xy(2,6));
+      jpanel1.add(createPanel5(),cc.xy(2,9));
+      jpanel1.add(createPanel8(),cc.xy(2,11));
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel1()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      cboConnection.setName("cboConnection");
+      jpanel1.add(cboConnection,cc.xy(1,1));
+
+      btnConnection.setActionCommand("...");
+      btnConnection.setName("btnConnection");
+      btnConnection.setOpaque(false);
+      btnConnection.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnConnection.setBorder(emptyborder1);
+      jpanel1.add(btnConnection,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel2()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(0.5),FILL:4DLU:NONE,FILL:DEFAULT:GROW(0.5)","CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstTables.setName("lstTables");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstTables);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xywh(1,5,1,3));
+
+      jpanel1.add(createPanel3(),cc.xy(3,7));
+      lblTable.setName("lblTable");
+      lblTable.setText("choose_table");
+      jpanel1.add(lblTable,cc.xy(1,1));
+
+      lblColumns.setName("lblColumns");
+      lblColumns.setText("table_fields");
+      jpanel1.add(lblColumns,cc.xy(3,1));
+
+      lstColumns.setName("lstColumns");
+      JScrollPane jscrollpane2 = new JScrollPane();
+      jscrollpane2.setViewportView(lstColumns);
+      jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane2,cc.xywh(3,3,1,3));
+
+      jpanel1.add(createPanel4(),cc.xy(1,3));
+      addFillComponents(jpanel1,new int[]{ 2 },new int[]{ 2,3,4,6,7 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel3()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnDeselectAllColumns.setActionCommand("Ninguno");
+      btnDeselectAllColumns.setName("btnDeselectAllColumns");
+      btnDeselectAllColumns.setOpaque(false);
+      btnDeselectAllColumns.setText("_None");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnDeselectAllColumns.setBorder(emptyborder1);
+      jpanel1.add(btnDeselectAllColumns,cc.xy(4,1));
+
+      btnSelectAllColumns.setActionCommand("Todos");
+      btnSelectAllColumns.setName("btnSelectAllColumns");
+      btnSelectAllColumns.setOpaque(false);
+      btnSelectAllColumns.setText("_All");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnSelectAllColumns.setBorder(emptyborder2);
+      jpanel1.add(btnSelectAllColumns,cc.xy(2,1));
+
+      addFillComponents(jpanel1,new int[]{ 1,3 },new int[]{ 1 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel4()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnTablesFilter.setActionCommand("...");
+      btnTablesFilter.setName("btnTablesFilter");
+      btnTablesFilter.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnTablesFilter.setBorder(emptyborder1);
+      jpanel1.add(btnTablesFilter,cc.xy(3,1));
+
+      txtTablesFilter.setName("txtTablesFilter");
+      jpanel1.add(txtTablesFilter,cc.xy(1,1));
+
+      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel5()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lblName.setName("lblName");
+      lblName.setText("_Name");
+      jpanel1.add(lblName,cc.xy(1,2));
+
+      txtName.setName("txtName");
+      jpanel1.add(txtName,cc.xy(3,2));
+
+      lblIdField.setName("lblIdField");
+      lblIdField.setText("_Id_field");
+      jpanel1.add(lblIdField,cc.xy(1,4));
+
+      cboIdField.setName("cboIdField");
+      jpanel1.add(cboIdField,cc.xy(3,4));
+
+      lblGeometryField.setName("lblGeometryField");
+      lblGeometryField.setText("_Geo_field");
+      jpanel1.add(lblGeometryField,cc.xy(1,6));
+
+      cboGeometryField.setName("cboGeometryField");
+      jpanel1.add(cboGeometryField,cc.xy(3,6));
+
+      lblProjection.setName("lblProjection");
+      lblProjection.setText("_Projection");
+      jpanel1.add(lblProjection,cc.xy(1,8));
+
+      jpanel1.add(createPanel6(),cc.xy(3,8));
+      lblFilter.setName("lblFilter");
+      lblFilter.setText("_Filter");
+      jpanel1.add(lblFilter,cc.xy(1,10));
+
+      jpanel1.add(createPanel7(),cc.xy(3,10));
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,3,5,7,9 });
+      return jpanel1;
+   }
+
+   public JPanel createPanel6()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","FILL:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtProjection.setName("txtProjection");
+      jpanel1.add(txtProjection,cc.xy(1,1));
+
+      btnProjection.setActionCommand("...");
+      btnProjection.setName("btnProjection");
+      btnProjection.setOpaque(false);
+      btnProjection.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnProjection.setBorder(emptyborder1);
+      jpanel1.add(btnProjection,cc.xy(3,1));
+
+      btnChangeViewProjection.setActionCommand("...");
+      btnChangeViewProjection.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/resources-plugin/images/geodb/geodb-crstoview.png"));
+      btnChangeViewProjection.setName("btnChangeViewProjection");
+      btnChangeViewProjection.setOpaque(false);
+      btnChangeViewProjection.setToolTipText("_Change_view_projection_to_this_projection");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnChangeViewProjection.setBorder(emptyborder2);
+      jpanel1.add(btnChangeViewProjection,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel7()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtFilter.setName("txtFilter");
+      jpanel1.add(txtFilter,cc.xy(1,1));
+
+      btnFilter.setActionCommand("...");
+      btnFilter.setName("btnFilter");
+      btnFilter.setOpaque(false);
+      btnFilter.setText("...");
+      EmptyBorder emptyborder1 = new EmptyBorder(2,2,2,2);
+      btnFilter.setBorder(emptyborder1);
+      jpanel1.add(btnFilter,cc.xy(3,1));
+
+      btnFilterBookmarks.setActionCommand("...");
+      btnFilterBookmarks.setName("btnFilterBookmarks");
+      btnFilterBookmarks.setOpaque(false);
+      btnFilterBookmarks.setText("...");
+      EmptyBorder emptyborder2 = new EmptyBorder(2,2,2,2);
+      btnFilterBookmarks.setBorder(emptyborder2);
+      jpanel1.add(btnFilterBookmarks,cc.xy(7,1));
+
+      btnFilterHistory.setActionCommand("...");
+      btnFilterHistory.setName("btnFilterHistory");
+      btnFilterHistory.setOpaque(false);
+      btnFilterHistory.setText("...");
+      EmptyBorder emptyborder3 = new EmptyBorder(2,2,2,2);
+      btnFilterHistory.setBorder(emptyborder3);
+      jpanel1.add(btnFilterHistory,cc.xy(5,1));
+
+      addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[0]);
+      return jpanel1;
+   }
+
+   public JPanel createPanel8()
+   {
+      JPanel jpanel1 = new JPanel();
+      FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      btnAdvancedProperties.setActionCommand("_Advanced_properties");
+      btnAdvancedProperties.setName("btnAdvancedProperties");
+      btnAdvancedProperties.setText("_Advanced_properties");
+      jpanel1.add(btnAdvancedProperties,cc.xy(2,1));
+
+      lblReadOnlyNotification.setName("lblReadOnlyNotification");
+      jpanel1.add(lblReadOnlyNotification,new CellConstraints(1,1,1,1,CellConstraints.LEFT,CellConstraints.TOP));
+
+      pnlCfgActions.setName("pnlCfgActions");
+      jpanel1.add(pnlCfgActions,cc.xy(3,1));
+
+      addFillComponents(jpanel1,new int[0],new int[0]);
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfoController.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfoController.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfoController.java	(revision 46118)
@@ -0,0 +1,586 @@
+package org.gvsig.geodb;
+
+import java.awt.BorderLayout;
+import java.awt.Cursor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import javax.swing.AbstractAction;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.IProjection;
+import org.gvsig.configurableactions.ConfigurableActionsMamager;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.dal.swing.ProjectionPickerController;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
+import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
+import org.gvsig.fmap.geom.Geometry;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.swing.api.ChangeListenerHelper;
+import org.gvsig.tools.swing.api.ChangeListenerSupport;
+import org.gvsig.tools.swing.api.JListWithCheckbox;
+import org.gvsig.tools.swing.api.SupportIsEnable;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class TableInfoController implements SupportIsEnable, ChangeListenerSupport {
+
+    public static final String CONFIGURABLE_PANEL_ID = "TableInfoController";
+    private final ChangeListenerHelper changeListener;
+
+    public static class RemoveDALInformationAction extends AbstractAction {
+
+        @SuppressWarnings("OverridableMethodCallInConstructor")
+        public RemoveDALInformationAction() {
+            I18nManager i18n = ToolsLocator.getI18nManager();
+
+            this.putValue(NAME, i18n.getTranslation("_Remove_metadata"));
+            this.putValue(ACTION_COMMAND_KEY, "RemoveDALInformation");
+        }
+
+        @Override
+        public Object getValue(String key) {
+            if (NAME.equals(key)) {
+                // Cuando se registra la accion aun no se han cargado las traducciones
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                return i18n.getTranslation("_Remove_metadata");
+            }
+            return super.getValue(key);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            TableInfoController controller = (TableInfoController) e.getSource();
+            final TableInfo info = controller.getCurrentTableInfo();
+            if (info == null) {
+                return;
+            }
+            controller.fetch(info);
+            info.removeDALInfo();
+            controller.put(info);
+        }
+
+    }
+
+    private final JButton btnDeselectAllColumns;
+    private final JButton btnSelectAllColumns;
+    private final JList lstColumns;
+    private final JTextField txtName;
+    private final JComboBox cboIdField;
+    private final JComboBox cboGeometryField;
+    private final JTextField txtProjection;
+    private final JButton btnProjection;
+    private final JTextField txtFilter;
+    private final JButton btnFilter;
+    private final JButton btnFilterBookmarks;
+    private final JButton btnFilterHistory;
+    private final JButton btnAdvancedProperties;
+    private final JLabel lblReadOnlyNotification;
+    private JListWithCheckbox lwcColumns;
+    private ProjectionPickerController pickerProjection;
+    private ExpressionPickerController pickerFilter;
+    private TableInfo tableInfo;
+    private final JComponent pnlCfgActions;
+    private final JButton btnChangeViewProjection;
+
+    private MapContext mapContext;
+
+    public TableInfoController(
+            JButton btnDeselectAllColumns,
+            JButton btnSelectAllColumns,
+            JList lstColumns,
+            JTextField txtName,
+            JComboBox cboIdField,
+            JComboBox cboGeometryField,
+            JTextField txtProjection,
+            JButton btnProjection,
+            JTextField txtFilter,
+            JButton btnFilter,
+            JButton btnFilterBookmarks,
+            JButton btnFilterHistory,
+            JButton btnAdvancedProperties,
+            JLabel lblReadOnlyNotification,
+            JComponent pnlCfgActions,
+            JButton btnChangeViewProjection            
+    ) {
+
+        this.btnDeselectAllColumns = btnDeselectAllColumns;
+        this.btnSelectAllColumns = btnSelectAllColumns;
+        this.lstColumns = lstColumns;
+        this.txtName = txtName;
+        this.cboIdField = cboIdField;
+        this.cboGeometryField = cboGeometryField;
+        this.txtProjection = txtProjection;
+        this.btnProjection = btnProjection;
+        this.txtFilter = txtFilter;
+        this.btnFilter = btnFilter;
+        this.btnFilterBookmarks = btnFilterBookmarks;
+        this.btnFilterHistory = btnFilterHistory;
+        this.btnAdvancedProperties = btnAdvancedProperties;
+        this.lblReadOnlyNotification = lblReadOnlyNotification;
+        this.pnlCfgActions = pnlCfgActions;
+        if( btnChangeViewProjection == null ) {
+            this.btnChangeViewProjection = new JButton();
+        } else {
+            this.btnChangeViewProjection = btnChangeViewProjection;
+        }
+        
+        this.changeListener = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
+
+        initComponents();
+    }
+
+    private void initComponents() {
+        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+
+        if(this.pnlCfgActions != null){
+            ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+            JComponent c = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this);
+            this.pnlCfgActions.setLayout(new BorderLayout(0, 0));
+            this.pnlCfgActions.add(c, BorderLayout.CENTER);
+        }
+
+        toolsSwingManager.translate(this.btnDeselectAllColumns);
+        toolsSwingManager.translate(this.btnSelectAllColumns);
+        toolsSwingManager.translate(this.btnAdvancedProperties);
+
+        toolsSwingManager.addClearButton(this.txtName);
+        toolsSwingManager.setDefaultPopupMenu(this.txtName);
+
+        this.lwcColumns = toolsSwingManager.createJListWithCheckbox(
+                this.lstColumns
+        );
+
+        this.pickerProjection = dataSwingManager.createProjectionPickerController(
+                this.txtProjection,
+                this.btnProjection
+        );
+        this.pickerFilter = expressionSwingManager.createExpressionPickerController(
+                this.txtFilter,
+                this.btnFilter,
+                this.btnFilterBookmarks,
+                this.btnFilterHistory
+        );
+        this.pickerProjection.addChangeListener((ChangeEvent e) -> {
+            doChangeProjection();
+        });
+        this.btnChangeViewProjection.addActionListener((e) -> {
+            doChangeViewProjection();
+        } );
+        this.cboIdField.addItemListener((ItemEvent e) -> {
+            if (e.getStateChange() == ItemEvent.SELECTED) {
+                doChangeIdField();
+            }
+        });
+        this.cboGeometryField.addItemListener((ItemEvent e) -> {
+            if (e.getStateChange() == ItemEvent.SELECTED) {
+                doChangeGeometryField();
+                updateLabel();
+                changeListener.fireEvent();
+            }
+        });
+        this.btnDeselectAllColumns.addActionListener((ActionEvent e) -> {
+            doDeselectAllColumns();
+        });
+        this.btnSelectAllColumns.addActionListener((ActionEvent e) -> {
+            doSelectAllColumns();
+        });
+        this.btnAdvancedProperties.addActionListener((ActionEvent e) -> {
+            doShowAdvancedProperties();
+        });
+
+        this.btnSelectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnDeselectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnProjection.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnFilter.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnFilterBookmarks.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnFilterHistory.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        this.btnAdvancedProperties.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+
+    }
+
+    private void doChangeIdField() {
+        final TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        info.setIdFieldSelected(this.cboIdField.getSelectedIndex());
+        updateLabel();
+        changeListener.fireEvent();
+    }
+
+    private void doChangeProjection() {
+        final TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        info.setProjection(this.pickerProjection.get());
+        updateChangeViewProjection();
+        updateLabel();
+        changeListener.fireEvent();
+    }
+
+    private void doChangeGeometryField() {
+        TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        String attrName = (String) this.cboGeometryField.getSelectedItem();
+
+        info.setGeomFieldSelected(this.cboGeometryField.getSelectedIndex());
+
+        if (StringUtils.isBlank(attrName)) {
+            this.pickerProjection.set(null);
+            return;
+        }
+
+        FeatureAttributeDescriptor attr = info.getAttributeDescriptor(attrName);
+        IProjection srs = attr.getSRS();
+        if (srs == null) {
+            return;
+        }
+        this.pickerProjection.set(srs);
+        tableInfo.setProjection(this.pickerProjection.get());
+        if(tableInfo.getGeometryType() == Geometry.TYPES.UNKNOWN){
+            tableInfo.setGeometryType(attr.getGeomType().getType());
+        }
+        if(tableInfo.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN){
+            tableInfo.setGeometrySubtype(attr.getGeomType().getSubType());
+        }
+    }
+
+    private void doDeselectAllColumns() {
+        TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        info.getColumnChecksModel().clearSelection();
+    }
+
+    private void doSelectAllColumns() {
+        TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        info.getColumnChecksModel().setSelectionInterval(0, info.getAttributeDescriptors().size());
+    }
+
+    private void doShowAdvancedProperties() {
+        final TableInfo info = this.getCurrentTableInfo();
+        if (info == null) {
+            return;
+        }
+        this.fetch(info);
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+        DataStoreParametersPanelManager paramsPanelManager = DALSwingLocator.getDataStoreParametersPanelManager();
+
+        final DataStoreParametersPanel panel = paramsPanelManager.createDataStoreParametersPanel(info.getParameters());
+        final Dialog dialog = winmgr.createDialog(
+                panel.asJComponent(),
+                i18n.getTranslation("_Connection_parameters"),
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+            if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+                JDBCStoreParameters parameters = info.getParameters();
+                panel.fetchParameters(parameters);
+                info.fetch(parameters);
+                put(info);
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+    }
+
+    public void put(TableInfo tableInfo) {
+        this.tableInfo = tableInfo;
+        boolean enableEvents = this.changeListener.isEnabledEvents();
+        try {
+            this.changeListener.setEnabledEvents(false);
+            if (tableInfo == null) {
+                this.lwcColumns.setModel(new DefaultListModel());
+                this.lwcColumns.setCheckedModel(new DefaultListSelectionModel());
+                this.txtName.setText("");
+                this.cboGeometryField.setModel(new DefaultComboBoxModel());
+                this.cboIdField.setModel(new DefaultComboBoxModel());
+                this.pickerProjection.set(null);
+                this.pickerFilter.set(null);
+                if (this.lblReadOnlyNotification != null) {
+                    this.lblReadOnlyNotification.setText("");
+                }
+                this.btnChangeViewProjection.setEnabled(false);
+            } else {
+                this.lwcColumns.setModel(tableInfo.getColumnsListModel());
+                this.lwcColumns.setCheckedModel(tableInfo.getColumnChecksModel());
+
+                this.txtName.setText(tableInfo.getDocumentName());
+
+                this.cboGeometryField.setModel(tableInfo.getGeomFieldComboModel());
+                this.cboGeometryField.setSelectedIndex(tableInfo.getGeomFieldSelected());
+
+                this.cboIdField.setModel(tableInfo.getIdFieldComboModel());
+                this.cboIdField.setSelectedIndex(tableInfo.getIdFieldSelected());
+
+                this.pickerProjection.set(tableInfo.getProjection());
+                this.pickerFilter.set(tableInfo.getFilter());
+            }
+        } finally {
+            changeListener.setEnabledEvents(enableEvents);
+        }
+        updateChangeViewProjection();
+        updateLabel();
+        changeListener.fireEvent();
+    }
+
+    private void updateLabel() throws LocatorException {
+        if(  this.tableInfo==null ) {
+            if( this.lblReadOnlyNotification!=null ) {
+                this.lblReadOnlyNotification.setText("");
+            }
+            return;
+        }
+        if (this.lblReadOnlyNotification != null) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("<html>");
+            I18nManager i18n = ToolsLocator.getI18nManager();
+            builder.append("<font color='#00008B'>");
+            if (tableInfo.isView()) {
+                builder.append(i18n.getTranslation("_View"));
+            } else {
+                builder.append(i18n.getTranslation("_Table"));
+            }
+            boolean readOnly = tableInfo.isReadOnly();
+            if (readOnly) {
+                builder.append(" - <b>");
+                builder.append(i18n.getTranslation("_Read_only"));
+                builder.append("</b>");
+            }
+            if (StringUtils.isBlank(this.tableInfo.getFieldId())) {
+                builder.append(" - ");
+                builder.append(i18n.getTranslation("_PrimaryKey_field_recommended"));
+            }
+            if (this.tableInfo.requireGeometry()) {
+                FeatureType featType = this.tableInfo.getFeatureType();
+                if (StringUtils.isBlank(this.tableInfo.getGeomField())) {
+                    builder.append(" - <b>");
+                    builder.append(i18n.getTranslation("_Geometry_field_required"));
+                    builder.append("</b>");
+                }
+                if (tableInfo.getGeometryType() == Geometry.TYPES.NULL || tableInfo.getGeometryType() == Geometry.TYPES.UNKNOWN) {
+                    builder.append(" - <b>");
+                    builder.append(i18n.getTranslation("_GeometryType_required"));
+                    builder.append("</b>");
+                }
+                if (tableInfo.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN) {
+                    builder.append(" - <b>");
+                    builder.append(i18n.getTranslation("_GeometrySubType_required"));
+                    builder.append("</b>");
+                }
+                if (this.tableInfo.getProjection() == null) {
+                    builder.append(" - ");
+                    builder.append(i18n.getTranslation("_Projection_recommended"));
+                } else {
+                    if( this.mapContext!=null ) {
+                        if (!this.tableInfo.getProjection().equals(this.mapContext.getProjection())) {
+                            builder.append(" - ");
+                            builder.append(i18n.getTranslation("_reprojected_on_the_fly"));
+                        }
+                    }
+                }
+            } else { //Not require geometry
+                FeatureType featType = this.tableInfo.getFeatureType();
+                if (StringUtils.isNotBlank(this.tableInfo.getGeomField())) {
+                    if (tableInfo.getGeometryType() == Geometry.TYPES.NULL || tableInfo.getGeometryType() == Geometry.TYPES.UNKNOWN) {
+                        builder.append(" - ");
+                        builder.append(i18n.getTranslation("_GeometryType_recommended"));
+                    }
+                    if (tableInfo.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN) {
+                        builder.append(" - ");
+                        builder.append(i18n.getTranslation("_GeometrySubType_recommended"));
+                    }
+                    if (StringUtils.isNotBlank(this.tableInfo.getGeomField()) && this.tableInfo.getProjection() == null) {
+                        builder.append(" - ");
+                        builder.append(i18n.getTranslation("_Projection_recommended"));
+                    }
+                    if( this.mapContext!=null && this.tableInfo.getProjection() != null) {
+                        if (!this.tableInfo.getProjection().equals(this.mapContext.getProjection())) {
+                            builder.append(" - ");
+                            builder.append(i18n.getTranslation("_reprojected_on_the_fly"));
+                        }
+                    }
+                }
+            }
+            builder.append("</font>");
+            builder.append("</html>");
+            this.lblReadOnlyNotification.setText(builder.toString());
+        }
+    }
+
+    public void fetch(TableInfo tableInfo) {
+        tableInfo.setIdFieldSelected(this.cboIdField.getSelectedIndex());
+        tableInfo.setGeomFieldSelected(this.cboGeometryField.getSelectedIndex());
+        tableInfo.setFilter(this.pickerFilter.get());
+        tableInfo.setProjection(this.pickerProjection.get());
+        tableInfo.setDocumentName(this.txtName.getText());
+    }
+
+    private TableInfo getCurrentTableInfo() {
+        return this.tableInfo;
+    }
+
+    public void setEditable(boolean enable) {
+        this.lstColumns.setEnabled(enable);
+        this.txtName.setEditable(enable);
+        this.cboGeometryField.setEnabled(enable);
+        this.cboIdField.setEnabled(enable);
+        this.pickerProjection.setEditable(enable);
+        this.pickerFilter.setEditable(enable);
+        this.btnDeselectAllColumns.setEnabled(enable);
+        this.btnSelectAllColumns.setEnabled(enable);
+        this.btnAdvancedProperties.setEnabled(enable);
+    }
+
+    public void setEnabled(boolean enable) {
+        this.lstColumns.setEnabled(enable);
+        this.txtName.setEnabled(enable);
+        this.cboGeometryField.setEnabled(enable);
+        this.cboIdField.setEnabled(enable);
+        this.pickerProjection.setEnabled(enable);
+        this.pickerFilter.setEnabled(enable);
+        this.btnDeselectAllColumns.setEnabled(enable);
+        this.btnSelectAllColumns.setEnabled(enable);
+        this.btnAdvancedProperties.setEnabled(enable);
+    }
+
+    public String getId() {
+        if (tableInfo == null) {
+            return null;
+        }
+        return this.getCurrentTableInfo().getId();
+    }
+
+    public void clear() {
+        this.put(null);
+    }
+
+    @Override
+    public boolean isEnabled(Object component) {
+        try {
+            if (component instanceof RemoveDALInformationAction) {
+                final TableInfo info = this.getCurrentTableInfo();
+                if (info == null) {
+                    return false;
+                }
+                this.fetch(info);
+                return info.existsDALInfo();
+            }
+        } catch (Exception ex) {
+//            LOGGER.warn("Can't check if is enebled component",ex);
+        }
+        return true;
+    }
+
+    public static void selfRegister() {
+        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
+        cfgActionsManager.addConfigurableAction(CONFIGURABLE_PANEL_ID, new RemoveDALInformationAction());
+    }
+
+        @Override
+    public void addChangeListener(ChangeListener listener) {
+        this.changeListener.addChangeListener(listener);
+    }
+
+    @Override
+    public ChangeListener[] getChangeListeners() {
+        return this.changeListener.getChangeListeners();
+    }
+
+    @Override
+    public void removeChangeListener(ChangeListener listener) {
+        this.changeListener.removeChangeListener(listener);
+    }
+
+    @Override
+    public void removeAllChangeListener() {
+        this.changeListener.removeAllChangeListener();
+    }
+
+    @Override
+    public boolean hasChangeListeners() {
+        return this.changeListener.hasChangeListeners();
+    }
+
+    public void setMapContext(MapContext mapContext) {
+        this.mapContext = mapContext;
+    }
+
+    private void updateChangeViewProjection() {
+        
+        if( this.tableInfo==null || !this.tableInfo.requireGeometry() || this.mapContext == null )  {
+            this.btnChangeViewProjection.setEnabled(false);
+            return;
+        }
+        if( !mapContext.getLayers().isEmpty() )  {
+            this.btnChangeViewProjection.setEnabled(false);
+            return;
+        }
+        
+        IProjection projection = this.pickerProjection.get();
+        if( projection==null ) {
+            this.btnChangeViewProjection.setEnabled(false);
+            return;
+        }
+        if( projection.equals(mapContext.getProjection()) ) {
+            this.btnChangeViewProjection.setEnabled(false);
+        } else {
+            this.btnChangeViewProjection.setEnabled(true);
+        }
+    }
+    
+    private void doChangeViewProjection() {
+        if( this.tableInfo==null ||  !this.tableInfo.requireGeometry() || this.mapContext == null )  {
+            return;
+        }
+        if( !mapContext.getLayers().isEmpty() )  {
+            return;
+        }
+        
+        IProjection projection = this.pickerProjection.get();
+        if( projection==null ) {
+            return;
+        }
+        mapContext.setProjection(projection);
+        this.updateChangeViewProjection();
+        this.updateLabel();
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDB.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDB.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/AbstractWizardDB.java	(revision 46118)
@@ -0,0 +1,318 @@
+package org.gvsig.geodb;
+
+import java.awt.BorderLayout;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
+import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import static org.gvsig.fmap.dal.DataServerExplorer.MODE_ALL;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_TABLES;
+import static org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer.SHOW_VIEWS;
+import org.gvsig.fmap.dal.swing.DALSwingLocator;
+import org.gvsig.fmap.dal.swing.DataSwingManager;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.FilteredListController;
+import org.gvsig.tools.swing.api.JListWithCheckbox;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.swing.api.ToolsSwingUtils;
+import org.gvsig.tools.swing.api.pickercontroller.PickerController;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jjdelcerro
+ */
+@SuppressWarnings("UseSpecificCatch")
+public abstract class AbstractWizardDB extends WizardPanel {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractWizardDB.class);
+
+
+    protected WizardDBView view;
+    private PickerController<JDBCServerExplorerParameters> pickerConnection;
+    protected JListWithCheckbox lwcTables;
+    protected Map<String, TableInfo> tablesInfo = null;
+    protected FilteredListController tablesFilterController;
+    protected TableInfoController tableInfoController;
+    
+    
+    public AbstractWizardDB() {
+        initComponents();
+    }
+
+    private void initComponents() {
+        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
+        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
+        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
+
+        this.view = new WizardDBView();
+
+        toolsSwingManager.translate(this.view.lblColumns);
+        toolsSwingManager.translate(this.view.lblConnection);
+        toolsSwingManager.translate(this.view.lblFilter);
+        toolsSwingManager.translate(this.view.lblGeometryField);
+        toolsSwingManager.translate(this.view.lblIdField);
+        toolsSwingManager.translate(this.view.lblName);
+        toolsSwingManager.translate(this.view.lblProjection);
+        toolsSwingManager.translate(this.view.lblTable);
+
+        toolsSwingManager.addClearButton(this.view.txtName);
+        toolsSwingManager.setDefaultPopupMenu(this.view.txtName);
+
+        this.lwcTables = toolsSwingManager.createJListWithCheckbox(
+                this.view.lstTables
+        );
+
+        this.lwcTables.addListSelectionListener((ListSelectionEvent e) -> {
+            doChangeTableSelected();
+        });
+        
+        this.initializePickerConnection();
+
+        this.lwcTables.addChecksListener((ListSelectionEvent e) -> {
+            doChangeTableChecked(e.getFirstIndex(), e.getLastIndex());
+        });
+
+        this.tablesFilterController = toolsSwingManager.createFilteredListController(
+                this.view.lstTables, 
+                this.view.txtTablesFilter, 
+                this.view.btnTablesFilter
+        );
+        
+        this.tableInfoController = new TableInfoController(
+                this.view.btnDeselectAllColumns, 
+                this.view.btnSelectAllColumns, 
+                this.view.lstColumns, 
+                this.view.txtName, 
+                this.view.cboIdField, 
+                this.view.cboGeometryField, 
+                this.view.txtProjection, 
+                this.view.btnProjection, 
+                this.view.txtFilter, 
+                this.view.btnFilter, 
+                this.view.btnFilterBookmarks, 
+                this.view.btnFilterHistory, 
+                this.view.btnAdvancedProperties, 
+                this.view.lblReadOnlyNotification,
+                this.view.pnlCfgActions,
+                this.view.btnChangeViewProjection
+        );
+        this.view.btnChangeViewProjection.setVisible(this.requireGeometry());
+
+        this.tableInfoController.addChangeListener((ChangeEvent e) -> {
+            checkFinishable();
+        });
+
+        this.clearTables();
+        this.setEditableTables(false);
+
+        this.setLayout(new BorderLayout());
+        this.add(this.view, BorderLayout.CENTER);
+        
+        ToolsSwingUtils.ensureRowsCols(this, 24, 90, 25, 100);
+    }
+    
+    private void initializePickerConnection() {
+        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
+        this.pickerConnection = dataSwingManager.createJDBCConnectionPickerController(
+                this.view.cboConnection,
+                this.view.btnConnection
+        );
+        this.pickerConnection.addChangeListener((ChangeEvent e) -> {
+            doUpdateTables();
+            setEditableTables(true);
+        });
+    }
+
+    protected abstract boolean requireGeometry();
+    
+    protected Collection<TableInfo> getTablesInformation() {
+        this.updateTableInfoFromUI();
+        if( this.tablesInfo == null ) {
+            this.tablesInfo = new HashMap<>();
+        }
+        return this.tablesInfo.values();
+    }
+    
+    private void clearTables() {
+        this.lwcTables.setModel(new DefaultListModel());
+        this.lwcTables.getCheckedModel().clearSelection();
+        this.clearTableConfig();
+    }
+
+    private void clearTableConfig() {
+        this.tableInfoController.put(null);
+    }
+
+    private void setEditableTables(boolean enable) {
+        this.view.lstTables.setEnabled(enable);
+        this.tableInfoController.setEditable(enable);
+    }
+
+    private void doUpdateTables() {
+        JDBCServerExplorerParameters connection = this.pickerConnection.get();
+        if (connection == null) {
+            this.clearTables();
+            return;
+        }
+        DataManager dataManager = DALLocator.getDataManager();
+        JDBCServerExplorer explorer = null;
+        try {
+            explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
+                    connection.getDataStoreName(),
+                    connection
+            );
+            List<TableInfo> parameters = new ArrayList<>();
+            for (DataStoreParameters params : explorer.list(MODE_ALL, SHOW_TABLES)) {
+                JDBCStoreParameters jdbcParams = (JDBCStoreParameters) params;
+                parameters.add(new TableInfo(jdbcParams.getTable(), jdbcParams, requireGeometry(), false));
+            }
+            for (DataStoreParameters params : explorer.list(MODE_ALL, SHOW_VIEWS)) {
+                JDBCStoreParameters jdbcParams = (JDBCStoreParameters) params;
+                parameters.add(new TableInfo(jdbcParams.getTable(), jdbcParams, requireGeometry(), true));
+            }
+            parameters.sort((TableInfo o1, TableInfo o2) -> 
+                    o1.getLabel().compareTo(o2.getLabel())
+            );
+            this.tablesInfo = new HashMap<>();
+            DefaultListModel<TableInfo> model = new DefaultListModel<>();
+            for (TableInfo x : parameters) {
+                model.addElement(x);
+                this.tablesInfo.put(x.getDocumentName(), x);
+            }
+            this.lwcTables.setModel(model);
+            this.lwcTables.getCheckedModel().clearSelection();
+        } catch (Exception ex) {
+        } finally {
+            DisposeUtils.disposeQuietly(explorer);
+        }
+    }
+
+    private void doChangeTableSelected() {
+        TableInfo tableInfo = (TableInfo) this.lwcTables.getSelectedValue();
+        if (tableInfo == null) {
+            this.clearTableConfig();
+            this.tableInfoController.setEditable(false);
+            return;
+        }
+        this.updateTableInfoFromUI();
+        this.tableInfoController.put(tableInfo);
+    }
+
+    private void doChangeTableChecked(int firstIndex, int lastIndex) {
+        ListSelectionModel checkedModel = this.lwcTables.getCheckedModel();
+        for (int i = firstIndex; i <= lastIndex; i++) {
+            TableInfo tableInfo = (TableInfo) this.lwcTables.getModel().getElementAt(i);
+            tableInfo.setSelected(checkedModel.isSelectedIndex(i));
+        }
+        this.checkFinishable();
+    }
+    
+    private void updateTableInfoFromUI() {
+        String previousId = this.tableInfoController.getId();
+        if (previousId == null) {
+            return;
+        }
+
+        if (this.tablesInfo != null && !this.tablesInfo.isEmpty()) {
+            TableInfo previousInfo = this.tablesInfo.get(previousId);
+            if (previousInfo != null) {
+                this.tableInfoController.fetch(previousInfo);
+            }
+        }
+    }
+
+
+    @Override
+    public void initWizard() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        setTabName(i18n.getTranslation("_Database"));
+    }
+
+    @Override
+    public boolean areSettingsValid() {
+        boolean hasInvalidValues = false;
+        boolean hasSelectedTables = false;
+        for (TableInfo tableInfo : this.getTablesInformation() ) {
+            if (tableInfo.isSelected()) {
+                hasSelectedTables = true;
+                if (!tableInfo.hasValidValues()) {
+                    hasInvalidValues = true;
+                }
+            }
+        }
+        return hasSelectedTables && !hasInvalidValues;
+    }
+
+    @Override
+    public DataStoreParameters[] getParameters() {
+        int sz = 0;
+        for (TableInfo tableInfo : this.getTablesInformation() ) {
+            if( tableInfo.isSelected() ) {
+                sz++;
+            }
+        }
+        if( sz == 0 ) {
+            return null;
+        }
+        DataStoreParameters[] dbParameters = new DataStoreParameters[sz];
+        int n = 0;
+        for (TableInfo tableInfo : this.getTablesInformation() ) {
+            if( tableInfo.isSelected() ) {
+                dbParameters[n++] = tableInfo.getParameters();
+            }
+        }
+        return dbParameters;
+    }
+    
+    @Override
+    public void execute() {
+        executeWizard();
+    }
+
+    @Override
+    public void close() {
+        
+    }
+    
+    protected void checkFinishable() {
+        boolean finishable = areSettingsValid();
+        callStateChanged(finishable);
+    }
+
+    protected static class WizardDBView extends AbstractWizardDBView {
+
+        @Override
+        public ImageIcon loadImage(String imageName) {
+            return ToolsSwingUtils.loadImage(this, imageName);
+        }
+    }
+
+    @Override
+    public void setMapContext(MapContext mapContext) {
+        super.setMapContext(mapContext);
+        this.tableInfoController.setMapContext(mapContext);
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/JPasswordDlg.java	(revision 46118)
@@ -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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.xml	(revision 46118)
@@ -0,0 +1,1131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.xml</at>
+   <at name="path">datos/devel/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(100PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">5</at>
+           <at name="row">14</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.JFormattedTextField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JFormattedTextField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">txtScaleBelowDenominator</at>
+            <at name="width">96</at>
+            <at name="height">22</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">15</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">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="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="name">lblMinimumScale</at>
+            <at name="width">1147</at>
+            <at name="text">minimum_scale</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">14</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">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="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="name">lblMaximumScale</at>
+            <at name="width">1147</at>
+            <at name="text">maximum_scale</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">15</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.JFormattedTextField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JFormattedTextField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="name">txtScaleAboveDenominator</at>
+            <at name="width">96</at>
+            <at name="height">22</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">14</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">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="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="name">lblBelow</at>
+            <at name="width">90</at>
+            <at name="text">is_below_1_colon</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">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">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="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="name">lblAbove</at>
+            <at name="width">90</at>
+            <at name="text">is_above_1_colon</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">javax.swing.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">1:25000</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdb1_25000</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">1:25000</at>
+            <at name="height">18</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">13</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">javax.swing.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">dont_show_layer_when</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdbConditions</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">dont_show_layer_when_scale</at>
+            <at name="height">18</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">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="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="name">lbl_1_25000_description</at>
+            <at name="width">1353</at>
+            <at name="text">1_25000_description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">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="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="name">lblDescription</at>
+            <at name="width">1369</at>
+            <at name="text">visibility_scale_selector_dialog_description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">19</at>
+           <at name="colspan">6</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.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">remember_this_answer</at>
+            <at name="name">chkRememberAnswer</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">remember_this_answer</at>
+            <at name="height">18</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">10</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">javax.swing.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">1:1000</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdb1_1000</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">1:1000</at>
+            <at name="height">18</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">11</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">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="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="name">lbl_1_1000_description</at>
+            <at name="width">1353</at>
+            <at name="text">1_1000_description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">javax.swing.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">1:5000</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdb1_5000</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">1:5000</at>
+            <at name="height">18</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">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="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="name">lbl_1_5000_description</at>
+            <at name="width">1353</at>
+            <at name="text">1_5000_description</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">16</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">17</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">javax.swing.JRadioButton</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JRadioButton</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <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="actionCommand">1:1000</at>
+            <at name="buttonGroup">
+             <object classname="com.jeta.forms.store.properties.ButtonGroupProperty">
+              <at name="name">buttonGroup</at>
+              <at name="groupname">1</at>
+             </object>
+            </at>
+            <at name="name">rdbDontAssignScale</at>
+            <at name="width">1369</at>
+            <at name="rolloverEnabled">true</at>
+            <at name="text">_Do_not_assign_a_display_scale</at>
+            <at name="height">18</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="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>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="20">
+       <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>
+       <at name="item" index="18">
+        <object classname="[Ljava.lang.Object;" size="8"/>
+       </at>
+       <at name="item" index="19">
+        <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>
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelectorView.java	(revision 46118)
@@ -0,0 +1,228 @@
+package org.gvsig.geodb.vectorialdb.visibility;
+
+import com.jeta.open.i18n.I18NUtils;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JCheckBox;
+import javax.swing.JFormattedTextField;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+
+public class VisibilityScaleSelectorView extends JPanel
+{
+   JFormattedTextField txtScaleBelowDenominator = new JFormattedTextField();
+   JLabel lblMinimumScale = new JLabel();
+   JLabel lblMaximumScale = new JLabel();
+   JFormattedTextField txtScaleAboveDenominator = new JFormattedTextField();
+   JLabel lblBelow = new JLabel();
+   JLabel lblAbove = new JLabel();
+   JRadioButton rdb1_25000 = new JRadioButton();
+   ButtonGroup buttongroup1 = new ButtonGroup();
+   JRadioButton rdbConditions = new JRadioButton();
+   JLabel lbl_1_25000_description = new JLabel();
+   JLabel lblDescription = new JLabel();
+   JCheckBox chkRememberAnswer = new JCheckBox();
+   JRadioButton rdb1_1000 = new JRadioButton();
+   JLabel lbl_1_1000_description = new JLabel();
+   JRadioButton rdb1_5000 = new JRadioButton();
+   JLabel lbl_1_5000_description = new JLabel();
+   JRadioButton rdbDontAssignScale = new JRadioButton();
+
+   /**
+    * Default constructor
+    */
+   public VisibilityScaleSelectorView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MAX(100PX;DEFAULT):NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      txtScaleBelowDenominator.setName("txtScaleBelowDenominator");
+      jpanel1.add(txtScaleBelowDenominator,cc.xy(5,14));
+
+      lblMinimumScale.setName("lblMinimumScale");
+      lblMinimumScale.setText("minimum_scale");
+      jpanel1.add(lblMinimumScale,cc.xy(7,15));
+
+      lblMaximumScale.setName("lblMaximumScale");
+      lblMaximumScale.setText("maximum_scale");
+      jpanel1.add(lblMaximumScale,cc.xy(7,14));
+
+      txtScaleAboveDenominator.setName("txtScaleAboveDenominator");
+      jpanel1.add(txtScaleAboveDenominator,cc.xy(5,15));
+
+      lblBelow.setName("lblBelow");
+      lblBelow.setText("is_below_1_colon");
+      jpanel1.add(lblBelow,cc.xy(3,14));
+
+      lblAbove.setName("lblAbove");
+      lblAbove.setText("is_above_1_colon");
+      jpanel1.add(lblAbove,cc.xy(3,15));
+
+      rdb1_25000.setActionCommand("1:25000");
+      rdb1_25000.setName("rdb1_25000");
+      rdb1_25000.setRolloverEnabled(true);
+      rdb1_25000.setText("1:25000");
+      buttongroup1.add(rdb1_25000);
+      jpanel1.add(rdb1_25000,cc.xywh(2,4,6,1));
+
+      rdbConditions.setActionCommand("dont_show_layer_when");
+      rdbConditions.setName("rdbConditions");
+      rdbConditions.setRolloverEnabled(true);
+      rdbConditions.setText("dont_show_layer_when_scale");
+      buttongroup1.add(rdbConditions);
+      jpanel1.add(rdbConditions,cc.xywh(2,13,6,1));
+
+      lbl_1_25000_description.setName("lbl_1_25000_description");
+      lbl_1_25000_description.setText("1_25000_description");
+      jpanel1.add(lbl_1_25000_description,cc.xywh(3,5,5,1));
+
+      lblDescription.setName("lblDescription");
+      lblDescription.setText("visibility_scale_selector_dialog_description");
+      jpanel1.add(lblDescription,cc.xywh(2,2,6,1));
+
+      chkRememberAnswer.setActionCommand("remember_this_answer");
+      chkRememberAnswer.setName("chkRememberAnswer");
+      chkRememberAnswer.setRolloverEnabled(true);
+      chkRememberAnswer.setText("remember_this_answer");
+      jpanel1.add(chkRememberAnswer,new CellConstraints(2,19,6,1,CellConstraints.DEFAULT,CellConstraints.TOP));
+
+      rdb1_1000.setActionCommand("1:1000");
+      rdb1_1000.setName("rdb1_1000");
+      rdb1_1000.setRolloverEnabled(true);
+      rdb1_1000.setText("1:1000");
+      buttongroup1.add(rdb1_1000);
+      jpanel1.add(rdb1_1000,cc.xywh(2,10,6,1));
+
+      lbl_1_1000_description.setName("lbl_1_1000_description");
+      lbl_1_1000_description.setText("1_1000_description");
+      jpanel1.add(lbl_1_1000_description,cc.xywh(3,11,5,1));
+
+      rdb1_5000.setActionCommand("1:5000");
+      rdb1_5000.setName("rdb1_5000");
+      rdb1_5000.setRolloverEnabled(true);
+      rdb1_5000.setText("1:5000");
+      buttongroup1.add(rdb1_5000);
+      jpanel1.add(rdb1_5000,cc.xywh(2,7,6,1));
+
+      lbl_1_5000_description.setName("lbl_1_5000_description");
+      lbl_1_5000_description.setText("1_5000_description");
+      jpanel1.add(lbl_1_5000_description,cc.xywh(3,8,5,1));
+
+      rdbDontAssignScale.setActionCommand("1:1000");
+      rdbDontAssignScale.setName("rdbDontAssignScale");
+      rdbDontAssignScale.setRolloverEnabled(true);
+      rdbDontAssignScale.setText("_Do_not_assign_a_display_scale");
+      buttongroup1.add(rdbDontAssignScale);
+      jpanel1.add(rdbDontAssignScale,cc.xywh(2,17,6,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,15,16,17,18,19,20 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibility.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibility.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibility.java	(revision 46118)
@@ -0,0 +1,81 @@
+/*
+ * 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.visibility;
+
+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;
+
+/**
+ *
+ * @author fdiaz
+ */
+public class LayerScaleVisibility implements Persistent{
+    
+    private static final String SCALE_BELOW_DENOMINATOR_PARAMETER="scaleBelowDenominator";
+    private static final String SCALE_ABOVE_DENOMINATOR_PARAMETER="scaleAboveDenominator";
+    private static final String LABEL_PARAMETER="label";
+    
+    private int scaleBelowDenominator;
+    private int scaleAboveDenominator;
+    private String label;
+
+    @Override
+    public void saveToState(PersistentState ps) throws PersistenceException {
+        ps.set(SCALE_BELOW_DENOMINATOR_PARAMETER, scaleBelowDenominator);
+        ps.set(SCALE_ABOVE_DENOMINATOR_PARAMETER, scaleAboveDenominator);
+        ps.set(LABEL_PARAMETER, label);
+    }
+
+    @Override
+    public void loadFromState(PersistentState ps) throws PersistenceException {
+        scaleBelowDenominator = ps.getInt(SCALE_BELOW_DENOMINATOR_PARAMETER);
+        scaleAboveDenominator = ps.getInt(SCALE_ABOVE_DENOMINATOR_PARAMETER);
+        label = ps.getString(LABEL_PARAMETER);
+    }
+    
+    public static void selfRegister(){
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            DynStruct definition = manager.addDefinition(
+                    LayerScaleVisibility.class,
+                    "LayerScaleVisibility",
+                    "LayerScaleVisibility Persistence definition",
+                    null,
+                    null
+            );
+            definition.addDynFieldInt(SCALE_BELOW_DENOMINATOR_PARAMETER).setMandatory(true);
+            definition.addDynFieldInt(SCALE_ABOVE_DENOMINATOR_PARAMETER).setMandatory(true);
+            definition.addDynFieldString(LABEL_PARAMETER).setMandatory(true);
+    }
+
+    public int getScaleAboveDenominator() {
+        return scaleAboveDenominator;
+    }
+
+    public int getScaleBelowDenominator() {
+        return scaleBelowDenominator;
+    }
+
+    public void setScaleAboveDenominator(int scaleAboveDenominator) {
+        this.scaleAboveDenominator = scaleAboveDenominator;
+    }
+
+    public void setScaleBelowDenominator(int scaleBelowDenominator) {
+        this.scaleBelowDenominator = scaleBelowDenominator;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibilityUtils.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibilityUtils.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/LayerScaleVisibilityUtils.java	(revision 46118)
@@ -0,0 +1,175 @@
+package org.gvsig.geodb.vectorialdb.visibility;
+
+import java.awt.event.ActionEvent;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import javax.swing.SwingUtilities;
+import org.apache.commons.codec.binary.Hex;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+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.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.dal.store.db.DBStoreParameters;
+import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
+import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.geodb.ExtDB_Spatial;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.windowmanager.Dialog;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager;
+import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author gvSIG Team
+ */
+@SuppressWarnings("UseSpecificCatch")
+public class LayerScaleVisibilityUtils {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(LayerScaleVisibilityUtils.class);
+
+    public static final int NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE = 10000;
+    public static final String LAYERS_SCALE_VISIBILITY_PARAMETER="layersScaleVisibility";
+
+    public static void initPluginProperties() {
+        PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+        PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        HashMap<Object, Object> layersScaleVisibility = new HashMap<>();
+        Map<String, LayerScaleVisibility> tmp = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
+        if(tmp != null){
+            layersScaleVisibility.putAll(tmp);
+        }
+        pluginProperties.setDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER, layersScaleVisibility);
+    }
+    
+    public static void checkForVisibilityScale(FLayer layer) throws DataException, ValidateDataParametersException {
+
+        if( layer.getMaxScale()>=0 && layer.getMinScale()>=0 ) {
+            return;
+        }
+        PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+        PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
+        DynObject pluginProperties = plugin.getPluginProperties();
+
+        Map<String, LayerScaleVisibility> layersScaleVisibility = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
+        String layerKey = buildLayerKey(layer);
+        if (layerKey != null) {
+            LayerScaleVisibility layerScaleVisibility = layersScaleVisibility.get(layerKey);
+            if (layerScaleVisibility != null) {
+                int scaleAboveDenominator = layerScaleVisibility.getScaleAboveDenominator();
+                int scaleBelowDenominator = layerScaleVisibility.getScaleBelowDenominator();
+
+                layer.setMaxScale(scaleAboveDenominator);
+                layer.setMinScale(scaleBelowDenominator);
+                return;
+            }
+        }
+
+        if (layer instanceof FLyrVect) {
+            FLyrVect lyrVect = (FLyrVect) layer;
+            FeatureStore store = lyrVect.getFeatureStore();
+
+            if (store.getExplorer() instanceof JDBCServerExplorer) {
+                FeatureSet fset = store.getFeatureSet();
+                if (fset.size() > NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE) {
+                    askUserForVisibilityScale(layer);
+                }
+                DisposeUtils.disposeQuietly(fset);
+            }
+        }
+    }
+
+    private static void askUserForVisibilityScale(FLayer layer) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            try {
+                SwingUtilities.invokeAndWait(() -> {
+                    askUserForVisibilityScale(layer);
+                });
+            } catch (Exception ex) {
+                LOGGER.warn("Con show selection wisivility scale dialog.", ex);
+            }
+            return;
+        }
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
+
+        VisibilityScaleSelector visibilityScaleSelector = new VisibilityScaleSelector();
+        Dialog dialog = winManager.createDialog(
+                visibilityScaleSelector.asJComponent(),
+                i18n.getTranslation("select_visibility_scale") + " - " + layer.getName(),
+                null,
+                WindowManager_v2.BUTTONS_OK_CANCEL
+        );
+        dialog.addActionListener((ActionEvent e) -> {
+            if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
+                layer.setMaxScale(visibilityScaleSelector.getScaleAboveDenominator());
+                layer.setMinScale(visibilityScaleSelector.getScaleBelowDenominator());
+                if (visibilityScaleSelector.getRememberAnswer()) {
+                    PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+                    PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
+                    DynObject pluginProperties = plugin.getPluginProperties();
+                    String layerKey = buildLayerKey(layer);
+                    String layerLabel = buildLayerLabel(layer);
+                    if (layerKey != null && layerLabel != null) {
+                        Map<String, LayerScaleVisibility> layersScaleVisibility = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
+                        LayerScaleVisibility layerScaleVisibility = new LayerScaleVisibility();
+                        layerScaleVisibility.setScaleAboveDenominator(visibilityScaleSelector.getScaleAboveDenominator());
+                        layerScaleVisibility.setScaleBelowDenominator(visibilityScaleSelector.getScaleBelowDenominator());
+                        layerScaleVisibility.setLabel(layerLabel);
+                        layersScaleVisibility.put(layerKey, layerScaleVisibility);
+                    }
+                }
+            }
+        });
+        dialog.show(WindowManager.MODE.DIALOG);
+    }
+
+    private static String buildLayerKey(FLayer layer) {
+        if(layer!=null){
+            DataStore dataStore = ((FLyrVect)layer).getDataStore();
+            if(dataStore != null){
+                DataStoreParameters parameters = dataStore.getParameters();
+                if(parameters != null){
+                    return Arrays.toString(Hex.encodeHex(parameters.toByteArray()));
+                }
+            }
+        }
+        return null;
+    }
+
+    private static String buildLayerLabel(FLayer layer) {
+        
+        if(layer!=null){
+            DataStore dataStore = ((FLyrVect)layer).getDataStore();
+            if(dataStore != null){
+                    StringBuilder builder = new StringBuilder();
+                    DataStoreParameters parameters = dataStore.getParameters();
+                    if(parameters != null && parameters instanceof DBStoreParameters){
+                        JDBCStoreParameters jdbcParameters = (JDBCStoreParameters)parameters;
+                        builder.append(jdbcParameters.getDBName());
+                        builder.append(".");
+                        builder.append(jdbcParameters.getSchema());
+                        builder.append(".");
+                        builder.append(jdbcParameters.getTable());
+                        return builder.toString();
+                }
+            }
+        }
+        return null;
+    }
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelector.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelector.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/VisibilityScaleSelector.java	(revision 46118)
@@ -0,0 +1,169 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright � 2007-2017 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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.visibility;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.util.Locale;
+import javax.swing.JComponent;
+import static org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibilityUtils.NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.swing.api.Component;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+
+/**
+ * @author fdiaz
+ *
+ */
+public class VisibilityScaleSelector 
+        extends VisibilityScaleSelectorView
+        implements Component 
+    {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VisibilityScaleSelector.class);
+    
+    private static final int SCALE_ABOVE_DENOMINATOR_1_1000 = 2000;
+    private static final int SCALE_BELOW_DENOMINATOR_1_1000 = 1;
+
+    private static final int SCALE_ABOVE_DENOMINATOR_1_5000 = 8000;
+    private static final int SCALE_BELOW_DENOMINATOR_1_5000 = 1;
+
+    private static final int SCALE_ABOVE_DENOMINATOR_1_25000 = 40000;
+    private static final int SCALE_BELOW_DENOMINATOR_1_25000 = 1;
+    
+    /**
+     *
+     */
+    public VisibilityScaleSelector() {
+        super();
+        initComponents();
+        translate();
+    }
+    
+    private void initComponents() {
+
+        rdb1_1000.addActionListener((ActionEvent e) -> {
+            txtScaleAboveDenominator.setValue(SCALE_ABOVE_DENOMINATOR_1_1000);
+            txtScaleBelowDenominator.setValue(SCALE_BELOW_DENOMINATOR_1_1000);
+        });
+        
+        rdb1_5000.addActionListener((ActionEvent e) -> {
+            txtScaleAboveDenominator.setValue(SCALE_ABOVE_DENOMINATOR_1_5000);
+            txtScaleBelowDenominator.setValue(SCALE_BELOW_DENOMINATOR_1_5000);
+        });
+        
+        rdb1_25000.addActionListener((ActionEvent e) -> {
+            txtScaleAboveDenominator.setValue(SCALE_ABOVE_DENOMINATOR_1_25000);
+            txtScaleBelowDenominator.setValue(SCALE_BELOW_DENOMINATOR_1_25000);
+        });
+        rdbDontAssignScale.addActionListener((ActionEvent e) -> {
+            txtScaleAboveDenominator.setValue(-1);
+            txtScaleBelowDenominator.setValue(-1);
+        });
+        rdbDontAssignScale.setSelected(true);
+        
+        this.setPreferredSize(new Dimension(400,400));
+    }
+
+    private void translate() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+        ToolsSwingManager i18nc = ToolsSwingLocator.getToolsSwingManager();
+        
+        String value = String.valueOf(NUMBER_OF_FEATURES_TO_ASK_FOR_VISIBILITY_SCALE);
+        lblDescription.setText(i18n.getTranslation(lblDescription.getText(),new String[]{value}));
+        
+        i18nc.translate(lbl_1_25000_description, true);
+        i18nc.translate(lbl_1_5000_description, true);
+        i18nc.translate(lbl_1_1000_description, true);
+        i18nc.translate(rdbConditions, true);
+        i18nc.translate(rdbDontAssignScale);
+        i18nc.translate(lblBelow, true);
+        i18nc.translate(lblAbove, true);
+        i18nc.translate(lblMaximumScale, true);
+        i18nc.translate(lblMinimumScale, true);
+        i18nc.translate(chkRememberAnswer, true);
+
+    }
+
+    /**
+     * @param locale
+     *
+     */
+    public void setLocate(Locale locale) {
+        Locale l = super.getLocale();
+        if (!l.equals(locale)) {
+            translate();
+        }
+        super.setLocale(locale);
+    }
+    
+    public int getScaleAboveDenominator(){
+        if(rdb1_1000.isSelected()){
+            return SCALE_ABOVE_DENOMINATOR_1_1000;
+        }
+        if(rdb1_5000.isSelected()){
+            return SCALE_ABOVE_DENOMINATOR_1_5000;
+        }
+        if(rdb1_25000.isSelected()){
+            return SCALE_ABOVE_DENOMINATOR_1_25000;
+        }
+        if(rdbConditions.isSelected()){
+            return ((Number)txtScaleAboveDenominator.getValue()).intValue();
+        }
+        return Integer.MAX_VALUE;
+    }
+
+    public int getScaleBelowDenominator(){
+        if(rdb1_1000.isSelected()){
+            return SCALE_BELOW_DENOMINATOR_1_1000;
+        }
+        if(rdb1_5000.isSelected()){
+            return SCALE_BELOW_DENOMINATOR_1_5000;
+        }
+        if(rdb1_25000.isSelected()){
+            return SCALE_BELOW_DENOMINATOR_1_25000;
+        }
+        if(rdbConditions.isSelected()){
+            return ((Number)txtScaleBelowDenominator.getValue()).intValue();
+        }
+        return 1;
+    }
+    
+    public boolean getRememberAnswer() {
+        return chkRememberAnswer.isSelected();
+    }
+
+    @Override
+    public JComponent asJComponent() {
+        return this;
+    }
+    
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.java	(revision 46118)
@@ -0,0 +1,142 @@
+package org.gvsig.geodb.vectorialdb.visibility.preferences;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+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.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import org.gvsig.andami.preferences.AbstractPreferencePage;
+
+
+public abstract class LayersVisibilityReminderView extends AbstractPreferencePage
+{
+   JList lstRemembers = new JList();
+   JLabel lblTitle = new JLabel();
+
+   /**
+    * Default constructor
+    */
+   public LayersVisibilityReminderView()
+   {
+      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:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE");
+      CellConstraints cc = new CellConstraints();
+      jpanel1.setLayout(formlayout1);
+
+      lstRemembers.setName("lstRemembers");
+      JScrollPane jscrollpane1 = new JScrollPane();
+      jscrollpane1.setViewportView(lstRemembers);
+      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+      jpanel1.add(jscrollpane1,cc.xy(2,4));
+
+      lblTitle.setName("lblTitle");
+      lblTitle.setText("_Visibility_scales_remembered_for_the_following_layers");
+      jpanel1.add(lblTitle,cc.xy(2,2));
+
+      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5 });
+      return jpanel1;
+   }
+
+   /**
+    * Initializer
+    */
+   protected void initializePanel()
+   {
+      setLayout(new BorderLayout());
+      add(createPanel(), BorderLayout.CENTER);
+   }
+
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderPage.java
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderPage.java	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderPage.java	(revision 46118)
@@ -0,0 +1,201 @@
+package org.gvsig.geodb.vectorialdb.visibility.preferences;
+
+import java.util.Map;
+import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+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.IPreference;
+import org.gvsig.andami.preferences.StoreException;
+import org.gvsig.geodb.ExtDB_Spatial;
+import org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibility;
+import static org.gvsig.geodb.vectorialdb.visibility.LayerScaleVisibilityUtils.LAYERS_SCALE_VISIBILITY_PARAMETER;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
+import org.gvsig.tools.i18n.I18nManager;
+import org.gvsig.tools.locator.LocatorException;
+import org.gvsig.tools.swing.api.JListWithCheckbox;
+import org.gvsig.tools.swing.api.ListElement;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+
+
+public class LayersVisibilityReminderPage extends LayersVisibilityReminderView implements IPreference {
+
+    //
+    // The class LayersVisibilityReminderView can extend from AbstractPreferencePage, not JPanel,
+    // if recreate it from the GUI builder change te class declaration to:
+    //    public abstract class LayersVisibilityReminderView extends AbstractPreferencePage
+
+    private JListWithCheckbox lstCheckdsRemembers;
+
+    public static String id = LayersVisibilityReminderPage.class.getName();
+    private ImageIcon icon;
+
+    public LayersVisibilityReminderPage() {
+        initComponents();
+    }
+
+    private void initComponents() {
+        icon = IconThemeHelper.getImageIcon("layers-visibility-remember-preferences");
+        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
+        this.lstCheckdsRemembers = swingManager.createJListWithCheckbox(this.lstRemembers);
+        final ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        checkModel.addListSelectionListener(new ListSelectionListener() {
+
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                if( e.getValueIsAdjusting() ) {
+                    return;
+                }
+                int n = e.getFirstIndex();
+                if( n<=lstCheckdsRemembers.getModel().getSize() ) {
+                    return;
+                }
+                LayersScaleVisibilityListElement element = (LayersScaleVisibilityListElement) lstCheckdsRemembers.getModel().getElementAt(n);
+                if( element==null ) {
+                    return;
+                }
+                if( checkModel.isSelectedIndex(n) && element.getValue()!=null ) {
+                    checkModel.removeIndexInterval(n, n);
+                }
+            }
+        });
+        translateAll();
+    }
+
+    private void translateAll() {
+        I18nManager i18n = ToolsLocator.getI18nManager();
+
+        this.lblTitle.setText(i18n.getTranslation(this.lblTitle.getText()));
+    }
+
+    @Override
+    public boolean isResizeable() {
+        return true;
+    }
+
+    @Override
+    public void initializeValues() {
+
+        Map<String, LayerScaleVisibility> layersScaleVisibility = getLayersScaleVisibility();
+        
+        DefaultListModel model = new DefaultListModel();
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        checkModel.clearSelection();
+        int n=0;
+        for(Map.Entry<String, LayerScaleVisibility> entry : layersScaleVisibility.entrySet()){
+            model.addElement(new LayersScaleVisibilityListElement(entry.getKey(), entry));
+            if( entry.getValue() != null ) {
+                checkModel.addSelectionInterval(n, n);
+            }
+            n++;
+        }
+        this.lstCheckdsRemembers.setModel(model);
+    }
+
+    private Map<String, LayerScaleVisibility> getLayersScaleVisibility() throws DynFieldNotFoundException, LocatorException {
+        PluginsManager pluginManager = PluginsLocator.getPluginsManager();
+        PluginServices plugin = pluginManager.getPlugin(ExtDB_Spatial.class);
+        DynObject pluginProperties = plugin.getPluginProperties();
+        Map<String, LayerScaleVisibility> layersScaleVisibility = (Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
+        return layersScaleVisibility;
+    }
+
+    @Override
+    public void initializeDefaults() {
+        Map<String, LayerScaleVisibility> layersScaleVisibility = getLayersScaleVisibility();
+        DefaultListModel model = new DefaultListModel();
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        for(Map.Entry<String, LayerScaleVisibility> entry : layersScaleVisibility.entrySet()){
+            model.addElement(new LayersScaleVisibilityListElement(entry.getKey(), entry));
+        }
+        this.lstCheckdsRemembers.setModel(model);
+        checkModel.clearSelection();
+    }
+
+    @Override
+    public String getID() {
+        return id;
+    }
+
+    @Override
+    public String getTitle() {
+        I18nManager i18nManager = ToolsLocator.getI18nManager();
+        return i18nManager.getTranslation("_Remembered_layers_visibility");
+    }
+
+    @Override
+    public JPanel getPanel() {
+        return this;
+    }
+
+
+    @Override
+    public void storeValues() throws StoreException {
+
+        Map<String, LayerScaleVisibility> layersScaleVisibility = getLayersScaleVisibility();
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        int n=0;
+        for(Map.Entry<String, LayerScaleVisibility> entry : layersScaleVisibility.entrySet()){
+            if( ! checkModel.isSelectedIndex(n)  ) {
+                layersScaleVisibility.remove(entry.getKey());
+            }
+            n++;
+        }
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return icon;
+    }
+
+    @Override
+    public boolean isValueChanged() {
+        Map<String, LayerScaleVisibility> layersScaleVisibility = getLayersScaleVisibility(); //(Map) pluginProperties.getDynValue(LAYERS_SCALE_VISIBILITY_PARAMETER);
+
+        ListSelectionModel checkModel = this.lstCheckdsRemembers.getCheckedModel();
+        int n=0;
+        for(Map.Entry<String, LayerScaleVisibility> entry : layersScaleVisibility.entrySet()){
+            if( checkModel.isSelectedIndex(n) != (entry.getValue()!=null) ) {
+                return true;
+            }
+            n++;
+        }
+        return false;
+    }
+
+    @Override
+    public void setChangesApplied() {
+        // Do nothing
+    }
+    
+    private class LayersScaleVisibilityListElement extends ListElement<Map.Entry<String, LayerScaleVisibility>> {
+
+        public LayersScaleVisibilityListElement(String label, Map.Entry<String, LayerScaleVisibility> value) {
+            super(label, value);
+        }
+
+        @Override
+        public String getLabel() {
+            Map.Entry<String, LayerScaleVisibility> entry = getValue();
+            if(entry!=null){
+                LayerScaleVisibility layerScaleVisibility = entry.getValue();
+                if(layerScaleVisibility!=null){
+                    return layerScaleVisibility.getLabel();
+                }
+            }
+            return null;
+        }
+    }
+
+}
Index: tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.xml
===================================================================
--- tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.xml	(revision 0)
+++ tags/org.gvsig.desktop-2.0.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/visibility/preferences/LayersVisibilityReminderView.xml	(revision 46118)
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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/pako/projects/gvSIG/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/preferences/layersVisibility/LayersVisibilityReminderView.xml</at>
+   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE</at>
+   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU: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">4</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.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="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>
+            <at name="scrollableTracksViewportWidth">true</at>
+            <at name="name">lstRemembers</at>
+            <at name="width">1286</at>
+            <at name="items">
+             <object classname="com.jeta.forms.store.properties.ItemsProperty">
+              <at name="name">items</at>
+             </object>
+            </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="height">723</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">2</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">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="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="name">lblTitle</at>
+            <at name="width">1288</at>
+            <at name="text">_Visibility_scales_remembered_for_the_following_layers</at>
+            <at name="fill">
+             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="height">14</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="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>
+       <at name="name"/>
+       <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>
+      </object>
+     </at>
+    </object>
+   </at>
+   <at name="cellpainters">
+    <object classname="com.jeta.forms.store.support.Matrix">
+     <at name="rows">
+      <object classname="[Ljava.lang.Object;" size="5">
+       <at name="item" index="0">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="1">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="2">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="3">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </at>
+       <at name="item" index="4">
+        <object classname="[Ljava.lang.Object;" size="3"/>
+       </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>
Index: tags/org.gvsig.desktop-2.0.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/DBResourceManager.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/ConnectionSettings.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/TablesListItem.java	(revision 46118)
@@ -0,0 +1,254 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For 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 implements Comparable<TablesListItem> {
+    
+    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;
+    }
+
+    @Override
+    public int compareTo(TablesListItem o) {
+        return this.toString().compareToIgnoreCase(o.toString());
+    }
+}

Property changes on: tags/org.gvsig.desktop-2.0.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/MyExplorer.java	(revision 46118)
@@ -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.344/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.344/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.344/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.344/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/vectorialdb/wizard/WizardDB.java	(revision 46118)
@@ -0,0 +1,729 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * For 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.Comparator;
+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.SwingUtilities;
+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.apache.commons.lang3.text.WordUtils;
+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();
+            if( entry.getExplorerParameters() instanceof DBServerExplorerParameters ) {
+                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 ) {
+            final Object selected = datasourceComboBox.getSelectedItem();
+            if ( selected instanceof MyExplorer ) {
+                // Lo lanzamos asi para evitar cuelgues depurando, ya que estamos
+                // en el evento de un combo y ahi no se puede depurar sin mas.
+                SwingUtilities.invokeLater(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        MyExplorer sel_obj = (MyExplorer) selected;
+
+                        getDatasourceComboBox().repaint();
+                        dbExplorerParameters = sel_obj.getDbSeverExplorerParameters();
+                        updateTableList(dbExplorerParameters);
+                    }
+                });
+            }
+
+        } else if ( src == dbButton ) {
+            MyExplorer sel = addNewConnection();
+            if ( sel == null ) {
+                loadVectorialDBDatasourcesCombo(null);
+            } else {
+                dbExplorerParameters = sel.getDbSeverExplorerParameters();
+                loadVectorialDBDatasourcesCombo(sel);
+                getDatasourceComboBox().setSelectedItem(sel);
+            }
+        }
+
+    }
+
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private MyExplorer addNewConnection() {
+        VectorialDBConnectionParamsDialog newco = new VectorialDBConnectionParamsDialog();
+        newco.showDialog();
+        if ( newco.isCanceled()) {
+            return null;
+        }
+        MyExplorer myExplorer = new MyExplorer();
+        myExplorer.setDbExplorerParameters(newco.getServerExplorerParameters());
+        myExplorer.setName(newco.getConnectionName());
+        loadVectorialDBDatasourcesCombo(myExplorer);
+        return myExplorer;
+    }
+
+    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<DBStoreParameters> getTableList(DBServerExplorer explorer) throws DataException {
+        List<DBStoreParameters> l = new ArrayList<>();
+        l.addAll((List) explorer.list());
+        l.sort(new Comparator<DBStoreParameters>() {
+            @Override
+            public int compare(DBStoreParameters o1, DBStoreParameters o2) {
+                try {
+                    return o1.getTable().compareToIgnoreCase(o2.getTable());
+                } catch(Exception ex) {
+                    return 0;
+                }
+            }
+        });
+        return l;
+    }
+
+    @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);
+            List<TablesListItem> tableListItems = new ArrayList<>();
+            Iterator<DBStoreParameters> iter = parameters.iterator();
+            while ( iter.hasNext() ) {
+                DBStoreParameters param = iter.next();
+                tableListItems.add(createTabeListItem(param));
+            }
+            tableListItems.sort(null);
+            getTablesList().setListData(tableListItems.toArray(new TablesListItem[0]));
+            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(),
+                    WordUtils.wrap(err_msg + ": " + getLastMessage(e) + "\n" + remove_question, 80),
+                    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();
+        }
+    